31 lines
922 B
TypeScript
31 lines
922 B
TypeScript
import { create } from 'zustand';
|
|
import { listWorkspaces, type MobileWorkspace } from '../api/workspaces';
|
|
|
|
export type WorkspaceState = {
|
|
workspaces: MobileWorkspace[];
|
|
activeWorkspaceId: string | null;
|
|
hydrate: () => Promise<void>;
|
|
setActiveWorkspace: (id: string | null) => void;
|
|
};
|
|
|
|
export const useWorkspaceStore = create<WorkspaceState>((set, get) => ({
|
|
workspaces: [],
|
|
activeWorkspaceId: null,
|
|
async hydrate() {
|
|
const workspaces = await listWorkspaces();
|
|
const currentActiveWorkspaceId = get().activeWorkspaceId;
|
|
set({
|
|
workspaces,
|
|
activeWorkspaceId:
|
|
currentActiveWorkspaceId === null
|
|
? null
|
|
: workspaces.some((workspace) => workspace.id === currentActiveWorkspaceId)
|
|
? currentActiveWorkspaceId
|
|
: workspaces[0]?.id ?? null,
|
|
});
|
|
},
|
|
setActiveWorkspace(id: string | null) {
|
|
set({ activeWorkspaceId: id });
|
|
},
|
|
}));
|