Skip to content

Commit 4067bca

Browse files
update SelectPanel Multi Select Modal story (#7354)
Co-authored-by: Copilot <[email protected]>
1 parent b33b93c commit 4067bca

File tree

2 files changed

+17
-5
lines changed

2 files changed

+17
-5
lines changed

.changeset/fresh-spiders-push.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+
update SelectPanel Multi Select Modal story

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

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -783,13 +783,15 @@ export const WithOnCancel = () => {
783783

784784
export const MultiSelectModal = () => {
785785
const [initialSelection, setInitialSelection] = React.useState<ItemInput[]>(items.slice(1, 3))
786-
787786
const [selected, setSelected] = React.useState<ItemInput[]>(initialSelection)
787+
const [savedSelection, setSavedSelection] = React.useState<ItemInput[]>(initialSelection)
788788
const [filter, setFilter] = React.useState('')
789789
const [open, setOpen] = useState(false)
790790

791791
React.useEffect(() => {
792-
if (!open) setInitialSelection(selected) // Save selection as initialSelection for next time
792+
// Sync initialSelection with the last committed selection after the modal closes.
793+
// onCancel uses initialSelection to discard unsaved changes made while the modal is open.
794+
if (!open) setInitialSelection(selected)
793795
}, [open, selected])
794796

795797
const filteredItems = items.filter(item => item.text.toLowerCase().startsWith(filter.toLowerCase()))
@@ -800,13 +802,18 @@ export const MultiSelectModal = () => {
800802
title="Select labels"
801803
placeholder="Select labels"
802804
subtitle="Use labels to organize issues and pull requests"
803-
renderAnchor={({children, ...anchorProps}) => (
805+
renderAnchor={({...anchorProps}) => (
804806
<Button trailingAction={TriangleDownIcon} {...anchorProps} aria-haspopup="dialog">
805-
{children}
807+
{savedSelection.map(item => item.text).join(', ') || 'Select labels'}
806808
</Button>
807809
)}
808810
open={open}
809-
onOpenChange={setOpen}
811+
onOpenChange={(nextOpen, gesture) => {
812+
setOpen(nextOpen)
813+
if (!nextOpen && gesture === 'selection') {
814+
setSavedSelection(selected)
815+
}
816+
}}
810817
items={filteredItems}
811818
selected={selected}
812819
onSelectedChange={setSelected}

0 commit comments

Comments
 (0)