Skip to content

Commit 31092df

Browse files
committed
Show loading indicator when searching
1 parent 0b0b80d commit 31092df

File tree

3 files changed

+39
-16
lines changed

3 files changed

+39
-16
lines changed

resources/assets/scripts/components/core/Navigation.vue

Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,28 +7,42 @@
77
</div>
88
<div class="search-box flex-none" v-if="$route.name !== 'dashboard'">
99
<input type="text" class="search-input" id="searchInput" placeholder="Search..."
10-
:class="{ 'has-search-results': servers.length > 0 && searchActive }"
10+
:class="{ 'has-search-results': (servers.length > 0 || loadingResults) && searchActive }"
1111
v-on:focus="searchActive = true"
1212
v-on:blur="searchActive = false"
1313
v-on:input="search"
1414
v-model="searchTerm"
1515
/>
16-
<div class="search-results select-none" :class="{ 'hidden': servers.length === 0 || !searchActive }">
17-
<router-link
18-
v-for="server in servers"
19-
:key="server.identifier"
20-
:to="{ name: 'server', params: { id: server.identifier } }"
21-
>
22-
<div class="flex items-center">
23-
<div class="flex-1">
24-
<span class="font-bold text-grey-darkest">{{ server.name }}</span><br />
25-
<span class="font-light text-grey-dark text-sm" v-if="server.description.length > 0">{{ server.description }}</span>
16+
<div class="search-results select-none" :class="{ 'hidden': (servers.length === 0 && !loadingResults) || !searchActive }">
17+
<div v-if="loadingResults">
18+
<a href="#">
19+
<div class="flex items-center">
20+
<div class="flex-1">
21+
<span class="text-sm text-grey-darker">Loading...</span>
22+
</div>
23+
<div class="flex-none">
24+
<span class="spinner spinner-relative"></span>
25+
</div>
2626
</div>
27-
<div class="flex-none">
28-
<span class="pillbox bg-indigo">{{ server.node }}</span>
27+
</a>
28+
</div>
29+
<div v-else>
30+
<router-link
31+
v-for="server in servers"
32+
:key="server.identifier"
33+
:to="{ name: 'server', params: { id: server.identifier } }"
34+
>
35+
<div class="flex items-center">
36+
<div class="flex-1">
37+
<span class="font-bold text-grey-darkest">{{ server.name }}</span><br />
38+
<span class="font-light text-grey-dark text-sm" v-if="server.description.length > 0">{{ server.description }}</span>
39+
</div>
40+
<div class="flex-none">
41+
<span class="pillbox bg-indigo">{{ server.node }}</span>
42+
</div>
2943
</div>
30-
</div>
31-
</router-link>
44+
</router-link>
45+
</div>
3246
</div>
3347
</div>
3448
<div class="menu flex-none">
@@ -69,6 +83,7 @@
6983
7084
data: function () {
7185
return {
86+
loadingResults: false,
7287
searchActive: false,
7388
};
7489
},
@@ -88,6 +103,7 @@
88103
methods: {
89104
search: debounce(function () {
90105
if (this.searchTerm.length > 3) {
106+
this.loadingResults = true;
91107
this.gatherSearchResults(this.searchTerm);
92108
}
93109
}, 500),
@@ -106,6 +122,9 @@
106122
this.error(error.detail);
107123
});
108124
}
125+
})
126+
.then(() => {
127+
this.loadingResults = false;
109128
});
110129
},
111130

resources/assets/styles/components/navigation.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
@apply .absolute .bg-grey-lightest .border .border-blue-darkest .border-t-0 .rounded .rounded-t-none .p-2 .mx-3 .z-50;
3838
width: 26rem;
3939

40-
& > a {
40+
& a {
4141
@apply .block .no-underline .p-2 .rounded;
4242

4343
&:hover {

resources/assets/styles/components/spinners.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
left: calc(50% - (1em / 2));
1616
}
1717

18+
&.spinner-relative:after {
19+
@apply .relative;
20+
}
21+
1822
&.spinner-xl:after {
1923
@apply .h-16 .w-16;
2024
left: calc(50% - (4rem / 2));

0 commit comments

Comments
 (0)