Files
History-client/lib/useEditorSessionState.ts
2026-04-20 23:27:38 +07:00

50 lines
1.6 KiB
TypeScript

import { useState } from "react";
import type { FeatureCollection } from "@/types/geo";
import { useBackgroundSessionState } from "@/lib/editor/session/useBackgroundSessionState";
import { useEntitySessionState } from "@/lib/editor/session/useEntitySessionState";
import { useSectionSessionState } from "@/lib/editor/session/useSectionSessionState";
import { useTimelineState } from "@/lib/editor/session/useTimelineState";
import type { EditorMode, TimelineRange } from "@/lib/editor/session/sessionTypes";
export type {
CreatedEntitySummary,
EditorMode,
EntityFormState,
GeometryMetaFormState,
PendingEntityCreate,
TimelineRange,
} from "@/lib/editor/session/sessionTypes";
type Options = {
emptyFeatureCollection: FeatureCollection;
defaultEditorUserId: string;
fallbackTimelineRange: TimelineRange;
currentYear: number;
};
export function useEditorSessionState(options: Options) {
const [mode, setMode] = useState<EditorMode>("idle");
const [initialData, setInitialData] = useState<FeatureCollection>(options.emptyFeatureCollection);
const section = useSectionSessionState({
defaultEditorUserId: options.defaultEditorUserId,
});
const entity = useEntitySessionState();
const timeline = useTimelineState({
currentYear: options.currentYear,
fallbackTimelineRange: options.fallbackTimelineRange,
});
const background = useBackgroundSessionState();
return {
mode,
setMode,
initialData,
setInitialData,
...section,
...entity,
...timeline,
...background,
};
}