@@ -11,7 +11,8 @@ import { Query, brandQuery } from '@webapp/models/query';
11
11
import Input from '@webapp/ui/Input' ;
12
12
import { appendLabelToQuery } from '@webapp/util/query' ;
13
13
import QueryInput from '@webapp/components/QueryInput/QueryInput' ;
14
-
14
+ import LoadingSpinner from '@webapp/ui/LoadingSpinner' ;
15
+ import styles from './TagsBar.module.scss' ;
15
16
interface TagsBarProps {
16
17
/** callback for when a label is selected */
17
18
onSelectedLabel : ( label : string , query : Query ) => void ;
@@ -185,17 +186,28 @@ function LabelsSubmenu({
185
186
} ;
186
187
187
188
const Items = Object . entries ( tags ) . map ( ( [ tag , tagValues ] ) => {
189
+ const onChange = ( open : boolean ) => {
190
+ if ( open && tagValues . type !== 'loaded' ) {
191
+ onSelectedLabel ( tag ) ;
192
+ }
193
+ } ;
194
+
195
+ const values =
196
+ tagValues . type === 'loaded' ? (
197
+ < MenuGroup takeOverflow > { GetTagValues ( tag , tagValues ) } </ MenuGroup >
198
+ ) : (
199
+ < div className = { styles . loadingWrapper } >
200
+ < LoadingSpinner />
201
+ </ div >
202
+ ) ;
203
+
188
204
return (
189
205
< SubMenu
190
206
key = { tag }
191
207
overflow = "auto"
192
208
position = "initial"
193
- onChange = { ( open ) => {
194
- // we are opening the menu for the first time
195
- if ( open && tagValues . type !== 'loaded' ) {
196
- onSelectedLabel ( tag ) ;
197
- }
198
- } }
209
+ onChange = { ( ) => onChange ( true ) }
210
+ onMenuChange = { ( { open } ) => onChange ( open ) }
199
211
label = { ( ) => (
200
212
< span
201
213
className = "tag-content"
@@ -207,7 +219,7 @@ function LabelsSubmenu({
207
219
) }
208
220
>
209
221
{ GetFilter ( tag ) }
210
- < MenuGroup takeOverflow > { GetTagValues ( tag , tagValues ) } </ MenuGroup >
222
+ { values }
211
223
</ SubMenu >
212
224
) ;
213
225
} ) ;
0 commit comments