Skip to content

Commit 3a28c7e

Browse files
authored
Merge pull request #315 from samply/feat/306/loading-spinner
feat: added query loading spinner
2 parents 639b9ef + 81763f2 commit 3a28c7e

File tree

4 files changed

+64
-2
lines changed

4 files changed

+64
-2
lines changed

dev.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,11 +194,19 @@ setCatalogue([
194194
},
195195
]);
196196

197+
function sleep(ms: number): Promise<void> {
198+
return new Promise((resolve) => {
199+
setTimeout(resolve, ms);
200+
});
201+
}
202+
197203
window.addEventListener("emit-lens-query", (event) => {
198204
const detail = (event as QueryEvent).detail;
199205
console.log("AST:", JSON.stringify(detail.ast));
200-
detail.updateResponse(new Map([["riverside", makeSite(5, 4, 0)]]));
201-
detail.updateResponse(new Map([["summit", makeSite(12, 18, 3)]]));
206+
sleep(3000).then(() => {
207+
detail.updateResponse(new Map([["riverside", makeSite(5, 4, 0)]]));
208+
detail.updateResponse(new Map([["summit", makeSite(12, 18, 3)]]));
209+
});
202210
});
203211

204212
const errorToastTestButton = document.getElementById(

index.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
<script type="module" src="dev.ts"></script>
88
</head>
99
<body>
10+
<lens-query-spinner></lens-query-spinner>
1011
<lens-search-bar></lens-search-bar>
1112
<lens-search-button></lens-search-button>
1213
<lens-catalogue></lens-catalogue>
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<svelte:options
2+
customElement={{
3+
tag: "lens-query-spinner",
4+
}}
5+
/>
6+
7+
<script lang="ts">
8+
import { responseStore } from "../../stores/response";
9+
import type { ResponseStore } from "../../types/backend";
10+
11+
let { size = "20px" } = $props();
12+
13+
let loading = $state(false);
14+
15+
window.addEventListener("emit-lens-query", function () {
16+
loading = true;
17+
});
18+
19+
responseStore.subscribe((s: ResponseStore) => {
20+
for (const value of s) {
21+
if (value[1].status === "claimed") {
22+
return;
23+
}
24+
}
25+
loading = false;
26+
});
27+
</script>
28+
29+
<div
30+
class="spinner"
31+
style="--size: {size}; visibility: {loading ? 'visible' : 'hidden'};"
32+
></div>
33+
34+
<style>
35+
.spinner {
36+
border: 4px solid rgba(0, 0, 0, 0.1);
37+
border-top: 4px solid #3498db;
38+
border-radius: 50%;
39+
width: var(--size);
40+
height: var(--size);
41+
animation: spin 1s linear infinite;
42+
}
43+
44+
@keyframes spin {
45+
0% {
46+
transform: rotate(0deg);
47+
}
48+
100% {
49+
transform: rotate(360deg);
50+
}
51+
}
52+
</style>

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ import "./components/buttons/InfoButtonComponent.wc.svelte";
4545
import "./components/Options.wc.svelte";
4646
import "./components/DataPasser.wc.svelte";
4747
import "./components/informational/ModifiedSearchComponent.wc.svelte";
48+
import "./components/informational/QuerySpinner.wc.svelte";
4849
import "./components/ErrorToasts.wc.svelte";
4950

5051
// Include CSS in the bundle

0 commit comments

Comments
 (0)