1
- import React , { useState , useRef } from 'react'
1
+ import React , { useState , useRef , useEffect } from 'react'
2
2
import type { Meta , StoryObj } from '@storybook/react-vite'
3
3
import Box from '../Box'
4
4
import { Button } from '../Button'
@@ -557,6 +557,7 @@ export const AsyncFetch: StoryObj<SelectPanelProps> = {
557
557
const [ open , setOpen ] = useState ( false )
558
558
const filterTimerId = useRef < number | null > ( null )
559
559
const { safeSetTimeout, safeClearTimeout} = useSafeTimeout ( )
560
+ const [ loading , setLoading ] = useState ( true )
560
561
const [ query , setQuery ] = useState ( '' )
561
562
562
563
const fetchItems = ( query : string ) => {
@@ -565,11 +566,21 @@ export const AsyncFetch: StoryObj<SelectPanelProps> = {
565
566
setQuery ( query )
566
567
}
567
568
569
+ setLoading ( true )
568
570
filterTimerId . current = safeSetTimeout ( ( ) => {
569
571
setFilteredItems ( items . filter ( item => item . text . toLowerCase ( ) . startsWith ( query . toLowerCase ( ) ) ) )
572
+ setLoading ( false )
570
573
} , 2000 ) as unknown as number
571
574
}
572
575
576
+ useEffect ( ( ) => {
577
+ filterTimerId . current = safeSetTimeout ( ( ) => {
578
+ setFilteredItems ( items . filter ( item => item . text . toLowerCase ( ) . startsWith ( query . toLowerCase ( ) ) ) )
579
+ setLoading ( false )
580
+ } , 2000 ) as unknown as number
581
+ // eslint-disable-next-line react-hooks/exhaustive-deps
582
+ } , [ ] )
583
+
573
584
const onOpenChange = ( value : boolean ) => {
574
585
setOpen ( value )
575
586
fetchItems ( '' )
@@ -600,6 +611,7 @@ export const AsyncFetch: StoryObj<SelectPanelProps> = {
600
611
height = { height }
601
612
initialLoadingType = { initialLoadingType }
602
613
width = "medium"
614
+ loading = { loading }
603
615
message = { filteredItems . length === 0 ? NoResultsMessage ( query ) : undefined }
604
616
/>
605
617
)
@@ -679,20 +691,28 @@ export const CustomisedNoResults: StoryObj<typeof SelectPanel> = {
679
691
const [ open , setOpen ] = useState ( false )
680
692
const filterTimerId = useRef < number | null > ( null )
681
693
const { safeSetTimeout, safeClearTimeout} = useSafeTimeout ( )
682
- const [ loading , setLoading ] = useState ( false )
694
+ const [ loading , setLoading ] = useState ( true )
683
695
const onFilterChange = ( value : string ) => {
684
696
setFilterValue ( value )
685
697
if ( filterTimerId . current ) {
686
698
safeClearTimeout ( filterTimerId . current )
687
699
}
688
- setLoading ( true )
689
700
701
+ setLoading ( true )
690
702
filterTimerId . current = safeSetTimeout ( ( ) => {
691
703
setFilteredItems ( items . filter ( item => item . text . toLowerCase ( ) . startsWith ( value . toLowerCase ( ) ) ) )
692
704
setLoading ( false )
693
705
} , 2000 ) as unknown as number
694
706
}
695
707
708
+ useEffect ( ( ) => {
709
+ filterTimerId . current = safeSetTimeout ( ( ) => {
710
+ setFilteredItems ( items . filter ( item => item . text . toLowerCase ( ) . startsWith ( filterValue . toLowerCase ( ) ) ) )
711
+ setLoading ( false )
712
+ } , 2000 ) as unknown as number
713
+ // eslint-disable-next-line react-hooks/exhaustive-deps
714
+ } , [ ] )
715
+
696
716
return (
697
717
< SelectPanel
698
718
title = "Select labels"
0 commit comments