Skip to content

Commit ad76aa8

Browse files
fix(SelectPanel): add loading state to stories (#6374)
1 parent 95c23ac commit ad76aa8

File tree

2 files changed

+28
-3
lines changed

2 files changed

+28
-3
lines changed

.changeset/selfish-papayas-smoke.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@primer/react": patch
3+
---
4+
5+
fix(SelectPanel): add loading state to stories

packages/react/src/SelectPanel/SelectPanel.features.stories.tsx

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, {useState, useRef} from 'react'
1+
import React, {useState, useRef, useEffect} from 'react'
22
import type {Meta, StoryObj} from '@storybook/react-vite'
33
import Box from '../Box'
44
import {Button} from '../Button'
@@ -557,6 +557,7 @@ export const AsyncFetch: StoryObj<SelectPanelProps> = {
557557
const [open, setOpen] = useState(false)
558558
const filterTimerId = useRef<number | null>(null)
559559
const {safeSetTimeout, safeClearTimeout} = useSafeTimeout()
560+
const [loading, setLoading] = useState(true)
560561
const [query, setQuery] = useState('')
561562

562563
const fetchItems = (query: string) => {
@@ -565,11 +566,21 @@ export const AsyncFetch: StoryObj<SelectPanelProps> = {
565566
setQuery(query)
566567
}
567568

569+
setLoading(true)
568570
filterTimerId.current = safeSetTimeout(() => {
569571
setFilteredItems(items.filter(item => item.text.toLowerCase().startsWith(query.toLowerCase())))
572+
setLoading(false)
570573
}, 2000) as unknown as number
571574
}
572575

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+
573584
const onOpenChange = (value: boolean) => {
574585
setOpen(value)
575586
fetchItems('')
@@ -600,6 +611,7 @@ export const AsyncFetch: StoryObj<SelectPanelProps> = {
600611
height={height}
601612
initialLoadingType={initialLoadingType}
602613
width="medium"
614+
loading={loading}
603615
message={filteredItems.length === 0 ? NoResultsMessage(query) : undefined}
604616
/>
605617
)
@@ -679,20 +691,28 @@ export const CustomisedNoResults: StoryObj<typeof SelectPanel> = {
679691
const [open, setOpen] = useState(false)
680692
const filterTimerId = useRef<number | null>(null)
681693
const {safeSetTimeout, safeClearTimeout} = useSafeTimeout()
682-
const [loading, setLoading] = useState(false)
694+
const [loading, setLoading] = useState(true)
683695
const onFilterChange = (value: string) => {
684696
setFilterValue(value)
685697
if (filterTimerId.current) {
686698
safeClearTimeout(filterTimerId.current)
687699
}
688-
setLoading(true)
689700

701+
setLoading(true)
690702
filterTimerId.current = safeSetTimeout(() => {
691703
setFilteredItems(items.filter(item => item.text.toLowerCase().startsWith(value.toLowerCase())))
692704
setLoading(false)
693705
}, 2000) as unknown as number
694706
}
695707

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+
696716
return (
697717
<SelectPanel
698718
title="Select labels"

0 commit comments

Comments
 (0)