32 lines
990 B
TypeScript
32 lines
990 B
TypeScript
export type SidebarSelection = { kind: "chat" | "search"; id: string };
|
|
|
|
type WorkspaceSelectionItem = { type: SidebarSelection["kind"]; id: string };
|
|
|
|
type ResolveSidebarSelectionOptions = {
|
|
initialSelection?: SidebarSelection;
|
|
selectFallback?: boolean;
|
|
};
|
|
|
|
export function resolveSidebarSelectionAfterRefresh(
|
|
current: SidebarSelection | null,
|
|
workspaceItems: WorkspaceSelectionItem[],
|
|
{ initialSelection, selectFallback = false }: ResolveSidebarSelectionOptions = {}
|
|
): SidebarSelection | null {
|
|
const hasItem = (candidate: SidebarSelection | null | undefined) => {
|
|
if (!candidate) return false;
|
|
return workspaceItems.some((item) => item.type === candidate.kind && item.id === candidate.id);
|
|
};
|
|
|
|
if (hasItem(current)) {
|
|
return current;
|
|
}
|
|
if (hasItem(initialSelection)) {
|
|
return initialSelection ?? null;
|
|
}
|
|
if (!selectFallback) {
|
|
return null;
|
|
}
|
|
const first = workspaceItems[0];
|
|
return first ? { kind: first.type, id: first.id } : null;
|
|
}
|