export function orderItemsBySelectionIds( items: T[], selectedIds: string[], getItemId: (item: T) => string | null | undefined, ) { const normalizedSelectedIds = Array.from( new Set( selectedIds .map((id) => String(id || "").trim()) .filter(Boolean), ), ); if (normalizedSelectedIds.length === 0) return items; const itemById = new Map(); for (const item of items) { const id = String(getItemId(item) || "").trim(); if (id && !itemById.has(id)) { itemById.set(id, item); } } const orderedItems: T[] = []; const orderedItemSet = new Set(); for (const id of normalizedSelectedIds) { const item = itemById.get(id); if (item && !orderedItemSet.has(item)) { orderedItems.push(item); orderedItemSet.add(item); } } for (const item of items) { if (!orderedItemSet.has(item)) { orderedItems.push(item); } } return orderedItems; }