From 87a58736021fdac2bee6f7a2e751fb7dbc443272 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 25 Jun 2026 12:01:31 +0000 Subject: [PATCH] Fix image refs not attaching when selected from a folder in gallery modal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit handleUseSelected only searched groupedItems (root library), so picks made while browsing inside a folder — which live in folderGroupedItems — resolved to nothing and an empty array was passed to onUseSelected. Search both sources, deduping by id, so folder selections attach correctly. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01QHuXphfFqpLsrMHrSy8GAF --- .../gallery-modal/src/lib/gallery-modal.tsx | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/frontend/libs/components/gallery-modal/src/lib/gallery-modal.tsx b/frontend/libs/components/gallery-modal/src/lib/gallery-modal.tsx index c8b1828703..478ef205d1 100644 --- a/frontend/libs/components/gallery-modal/src/lib/gallery-modal.tsx +++ b/frontend/libs/components/gallery-modal/src/lib/gallery-modal.tsx @@ -1298,11 +1298,21 @@ export const GalleryModal = React.memo( }, [selectedItemIds, onSelectItem]); const handleUseSelected = useCallback(() => { - const selectedItems = Object.values(groupedItems) - .flat() - .filter((item) => selectedItemIds.includes(item.id)); + // Selected items can live in the root library (groupedItems) or inside + // the active folder (folderGroupedItems). Search both, deduping by id, + // so picks made while browsing a folder still resolve to real items. + const itemsById = new Map(); + for (const item of [ + ...Object.values(groupedItems).flat(), + ...Object.values(folderGroupedItems).flat(), + ]) { + itemsById.set(item.id, item); + } + const selectedItems = selectedItemIds + .map((id: string) => itemsById.get(id)) + .filter((item): item is GalleryItem => item !== undefined); onUseSelected?.(selectedItems); - }, [groupedItems, selectedItemIds, onUseSelected]); + }, [groupedItems, folderGroupedItems, selectedItemIds, onUseSelected]); const handleItemDeleted = useCallback((id: string) => { // Drop from local state (functional setter — must stay pure).