ready for app-registry refactor

This commit is contained in:
2026-02-21 17:28:10 +00:00
parent 6d97edb6ab
commit fe7874dd65
21 changed files with 281 additions and 246 deletions
@@ -1,19 +1,21 @@
import { useState, useCallback, useEffect } from 'react';
import { flushSync } from 'react-dom';
import type { LayoutNode, WorkspaceDefinition, AppRegistry } from './types';
import type { LayoutNode, AppRegistry, WorkspaceState } from './types';
import type { DropPosition } from './layout-utils';
import { splitPanel, removePanel, setApp, updateSizes, swapPanels, movePanel, countPanels } from './layout-utils';
import { WorkspaceProvider } from './WorkspaceContext';
import { WorkspaceRenderer } from './WorkspaceRenderer';
type WorkspaceViewProps = {
workspace: WorkspaceDefinition | null;
layout: LayoutNode;
onLayoutChange: (layout: LayoutNode) => void;
workspace: WorkspaceState;
registry: AppRegistry;
cwd?: string;
};
export const WorkspaceView = ({ workspace, layout, onLayoutChange, registry }: WorkspaceViewProps) => {
export const WorkspaceView = ({ workspace, registry, cwd = '~' }: WorkspaceViewProps) => {
if (!workspace.isLoaded) return null;
const { value: layout, setValue: onLayoutChange } = workspace;
const [swapSourceId, setSwapSourceId] = useState<string | null>(null);
const [dragSourceId, setDragSourceId] = useState<string | null>(null);
const [maximizedPanelId, setMaximizedPanelId] = useState<string | null>(null);
@@ -102,8 +104,8 @@ export const WorkspaceView = ({ workspace, layout, onLayoutChange, registry }: W
return (
<WorkspaceProvider
value={{
workspaceId: workspace?.id ?? null,
cwd: workspace?.cwd ?? '~',
workspaceId: workspace.key,
cwd,
swapSourceId,
setSwapSourceId,
onSwap: handleSwap,
+1 -1
View File
@@ -1,4 +1,4 @@
export type { LayoutNode, LayoutGroup, LayoutPanel, WorkspaceDefinition, ProjectType, ProjectDefinition, AppRegistry, AppRegistryEntry, PanelComponents, PanelComponentEntry } from './types';
export type { LayoutNode, LayoutGroup, LayoutPanel, WorkspaceDefinition, WorkspaceState, ProjectType, ProjectDefinition, AppRegistry, AppRegistryEntry, PanelComponents, PanelComponentEntry } from './types';
export type { DropPosition } from './layout-utils';
export { createDefaultLayout, splitPanel, removePanel, setApp, updateSizes, swapPanels, movePanel, pruneEmptyPanels, countPanels, hasAnyApp } from './layout-utils';
export { WorkspaceProvider, useWorkspace } from './WorkspaceContext';
@@ -24,6 +24,13 @@ export type WorkspaceDefinition = {
templateIdx?: number;
};
export type WorkspaceState = {
key: string;
value: LayoutNode;
setValue: (value: LayoutNode | ((prev: LayoutNode) => LayoutNode)) => void;
isLoaded: boolean;
};
export type ProjectType = 'landing-page' | 'website' | 'app';
export type ProjectDefinition = {