From 9c39ea32e43c13d760c1d578da9a8a35dcf04f48 Mon Sep 17 00:00:00 2001 From: llastflowers Date: Thu, 18 Dec 2025 11:25:09 -0800 Subject: [PATCH 1/4] update MultiSelectModal story to not update labels unless user saves changes in modal --- .../SelectPanel/SelectPanel.features.stories.tsx | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/react/src/SelectPanel/SelectPanel.features.stories.tsx b/packages/react/src/SelectPanel/SelectPanel.features.stories.tsx index 1147b1bbd74..f65c168e5b7 100644 --- a/packages/react/src/SelectPanel/SelectPanel.features.stories.tsx +++ b/packages/react/src/SelectPanel/SelectPanel.features.stories.tsx @@ -783,13 +783,13 @@ export const WithOnCancel = () => { export const MultiSelectModal = () => { const [initialSelection, setInitialSelection] = React.useState(items.slice(1, 3)) - const [selected, setSelected] = React.useState(initialSelection) + const [savedSelection, setSavedSelection] = React.useState(initialSelection) const [filter, setFilter] = React.useState('') const [open, setOpen] = useState(false) React.useEffect(() => { - if (!open) setInitialSelection(selected) // Save selection as initialSelection for next time + if (!open) setInitialSelection(selected) }, [open, selected]) const filteredItems = items.filter(item => item.text.toLowerCase().startsWith(filter.toLowerCase())) @@ -802,11 +802,16 @@ export const MultiSelectModal = () => { subtitle="Use labels to organize issues and pull requests" renderAnchor={({children, ...anchorProps}) => ( )} open={open} - onOpenChange={setOpen} + onOpenChange={(nextOpen, gesture) => { + setOpen(nextOpen) + if (!nextOpen && gesture === 'selection') { + setSavedSelection(selected) + } + }} items={filteredItems} selected={selected} onSelectedChange={setSelected} From 92a1b06136d83e1baa892a2e44f3c9b9f99d5c1d Mon Sep 17 00:00:00 2001 From: "Brittany L. Houtz" <55068883+llastflowers@users.noreply.github.com> Date: Thu, 18 Dec 2025 11:35:02 -0800 Subject: [PATCH 2/4] Update SelectPanel Multi Select Modal story --- .changeset/fresh-spiders-push.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/fresh-spiders-push.md diff --git a/.changeset/fresh-spiders-push.md b/.changeset/fresh-spiders-push.md new file mode 100644 index 00000000000..48f5067f5f6 --- /dev/null +++ b/.changeset/fresh-spiders-push.md @@ -0,0 +1,5 @@ +--- +"@primer/react": patch +--- + +update SelectPanel Multi Select Modal story From 16254dec287d2b69bf22efecbd316174939c3bd5 Mon Sep 17 00:00:00 2001 From: "Brittany L. Houtz" <55068883+llastflowers@users.noreply.github.com> Date: Thu, 18 Dec 2025 11:51:04 -0800 Subject: [PATCH 3/4] Update packages/react/src/SelectPanel/SelectPanel.features.stories.tsx Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- packages/react/src/SelectPanel/SelectPanel.features.stories.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/react/src/SelectPanel/SelectPanel.features.stories.tsx b/packages/react/src/SelectPanel/SelectPanel.features.stories.tsx index f65c168e5b7..8c3e8bb7c0e 100644 --- a/packages/react/src/SelectPanel/SelectPanel.features.stories.tsx +++ b/packages/react/src/SelectPanel/SelectPanel.features.stories.tsx @@ -789,6 +789,8 @@ export const MultiSelectModal = () => { const [open, setOpen] = useState(false) React.useEffect(() => { + // Sync initialSelection with the last committed selection after the modal closes. + // onCancel uses initialSelection to discard unsaved changes made while the modal is open. if (!open) setInitialSelection(selected) }, [open, selected]) From e5f2b35564416b331f7d90c34f7d22be6b37bfc5 Mon Sep 17 00:00:00 2001 From: llastflowers Date: Thu, 18 Dec 2025 12:52:26 -0800 Subject: [PATCH 4/4] remove unusued arg --- packages/react/src/SelectPanel/SelectPanel.features.stories.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react/src/SelectPanel/SelectPanel.features.stories.tsx b/packages/react/src/SelectPanel/SelectPanel.features.stories.tsx index 8c3e8bb7c0e..0fa22f1d435 100644 --- a/packages/react/src/SelectPanel/SelectPanel.features.stories.tsx +++ b/packages/react/src/SelectPanel/SelectPanel.features.stories.tsx @@ -802,7 +802,7 @@ export const MultiSelectModal = () => { title="Select labels" placeholder="Select labels" subtitle="Use labels to organize issues and pull requests" - renderAnchor={({children, ...anchorProps}) => ( + renderAnchor={({...anchorProps}) => (