Files
paseo/packages/app/src/screens/workspace/workspace-tab-model.ts
T

36 lines
1013 B
TypeScript

import type { WorkspaceTab, WorkspaceTabTarget } from "@/stores/workspace-tabs-store";
import {
deriveWorkspacePaneState,
type WorkspaceDerivedTab,
} from "@/screens/workspace/workspace-pane-state";
import {
buildDeterministicWorkspaceTabId,
} from "@/utils/workspace-tab-identity";
export interface WorkspaceTabModel {
tabs: WorkspaceDerivedTab[];
activeTabId: string | null;
activeTab: WorkspaceDerivedTab | null;
}
export function buildWorkspaceTabId(target: WorkspaceTabTarget): string {
return buildDeterministicWorkspaceTabId(target);
}
export function deriveWorkspaceTabModel(input: {
tabs: WorkspaceTab[];
focusedTabId?: string | null;
preferredTarget?: WorkspaceTabTarget | null;
}): WorkspaceTabModel {
const paneState = deriveWorkspacePaneState({
tabs: input.tabs,
focusedTabId: input.focusedTabId,
preferredTarget: input.preferredTarget,
});
return {
tabs: paneState.tabs,
activeTabId: paneState.activeTabId,
activeTab: paneState.activeTab,
};
}