feat: refactor artifact analysis workspace
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
import { useCallback, useMemo, useRef, useState } from "react";
|
||||
import { createAnalysisArtifactFixture } from "./analysis-document-fixtures";
|
||||
import {
|
||||
collapseActiveArtifact,
|
||||
createInitialArtifactWorkspaceState,
|
||||
destroyActiveArtifact,
|
||||
destroyPendingArtifact,
|
||||
openPendingArtifact,
|
||||
previewAnalysisArtifact,
|
||||
requestArtifactView,
|
||||
resolveWorkbenchSurfaceMode,
|
||||
ARTIFACT_MAP_SPLIT_MIN_WIDTH,
|
||||
type ArtifactRequestedView
|
||||
} from "./workspace-model";
|
||||
|
||||
export function useArtifactWorkspace(viewportWidth: number) {
|
||||
const [state, setState] = useState(createInitialArtifactWorkspaceState);
|
||||
const fixtureIndexRef = useRef(0);
|
||||
const fixtureInstanceRef = useRef(0);
|
||||
|
||||
const createTestArtifactPreview = useCallback(() => {
|
||||
const artifact = createAnalysisArtifactFixture(
|
||||
fixtureIndexRef.current,
|
||||
fixtureInstanceRef.current
|
||||
);
|
||||
fixtureIndexRef.current = (fixtureIndexRef.current + 1) % 3;
|
||||
fixtureInstanceRef.current += 1;
|
||||
setState((current) => previewAnalysisArtifact(current, artifact));
|
||||
}, []);
|
||||
|
||||
const openPreview = useCallback(() => {
|
||||
setState(openPendingArtifact);
|
||||
}, []);
|
||||
|
||||
const collapseArtifact = useCallback(() => {
|
||||
setState(collapseActiveArtifact);
|
||||
}, []);
|
||||
|
||||
const destroyPreview = useCallback(() => {
|
||||
setState(destroyPendingArtifact);
|
||||
}, []);
|
||||
|
||||
const destroyArtifact = useCallback(() => {
|
||||
setState(destroyActiveArtifact);
|
||||
}, []);
|
||||
|
||||
const setView = useCallback((view: ArtifactRequestedView) => {
|
||||
setState((current) => requestArtifactView(current, view));
|
||||
}, []);
|
||||
|
||||
const surfaceMode = useMemo(
|
||||
() => resolveWorkbenchSurfaceMode(state, viewportWidth),
|
||||
[state, viewportWidth]
|
||||
);
|
||||
|
||||
return {
|
||||
...state,
|
||||
surfaceMode,
|
||||
mapSplitAvailable: viewportWidth >= ARTIFACT_MAP_SPLIT_MIN_WIDTH,
|
||||
createTestArtifactPreview,
|
||||
openPreview,
|
||||
collapseArtifact,
|
||||
destroyPreview,
|
||||
destroyArtifact,
|
||||
setView
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user