Files
yaak/src-web/hooks/useModelAncestors.ts
2025-11-11 14:38:05 -08:00

42 lines
1.2 KiB
TypeScript

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 [];
}