38 lines
1.0 KiB
TypeScript
38 lines
1.0 KiB
TypeScript
import { createContext, useContext } from 'react';
|
|
|
|
import type { DropPosition } from './layout-utils';
|
|
|
|
type WorkspaceContextValue = {
|
|
workspaceId: string | null;
|
|
cwd: string;
|
|
swapSourceId: string | null;
|
|
setSwapSourceId: (id: string | null) => void;
|
|
onSwap: (sourceId: string, targetId: string) => void;
|
|
dragSourceId: string | null;
|
|
setDragSourceId: (id: string | null) => void;
|
|
onMove: (sourceId: string, targetId: string, position: DropPosition) => void;
|
|
maximizedPanelId: string | null;
|
|
setMaximizedPanelId: (id: string | null) => void;
|
|
transitioningPanelId: string | null;
|
|
};
|
|
|
|
const noop = () => {};
|
|
|
|
const WorkspaceContext = createContext<WorkspaceContextValue>({
|
|
workspaceId: null,
|
|
cwd: '~',
|
|
swapSourceId: null,
|
|
setSwapSourceId: noop,
|
|
onSwap: noop,
|
|
dragSourceId: null,
|
|
setDragSourceId: noop,
|
|
onMove: noop,
|
|
maximizedPanelId: null,
|
|
setMaximizedPanelId: noop,
|
|
transitioningPanelId: null,
|
|
});
|
|
|
|
export const WorkspaceProvider = WorkspaceContext.Provider;
|
|
|
|
export const useWorkspace = () => useContext(WorkspaceContext);
|