import type { AnyModel, Folder, Workspace } from "@yaakapp-internal/models"; import { foldersAtom, workspacesAtom } from "@yaakapp-internal/models"; import { useAtomValue } from "jotai"; import { useMemo } from "react"; type ModelAncestor = Folder | Workspace; export function useModelAncestors(m: AnyModel | null) { const folders = useAtomValue(foldersAtom); const workspaces = useAtomValue(workspacesAtom); return useMemo(() => getModelAncestors(folders, workspaces, m), [folders, workspaces, m]); } export function getModelAncestors( folders: Folder[], workspaces: Workspace[], currentModel: AnyModel | null, ): ModelAncestor[] { if (currentModel == null) return []; const parentFolder = "folderId" in currentModel && currentModel.folderId ? folders.find((f) => f.id === currentModel.folderId) : null; if (parentFolder != null) { return [parentFolder, ...getModelAncestors(folders, workspaces, parentFolder)]; } const parentWorkspace = "workspaceId" in currentModel && currentModel.workspaceId ? workspaces.find((w) => w.id === currentModel.workspaceId) : null; if (parentWorkspace != null) { return [parentWorkspace, ...getModelAncestors(folders, workspaces, parentWorkspace)]; } return []; }