52 lines
1.7 KiB
TypeScript
52 lines
1.7 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) {
|
|
// Mode thao tác map/editor hiện tại.
|
|
const [mode, setMode] = useState<EditorMode>("idle");
|
|
// FeatureCollection "gốc" của session hiện tại (global timeline hoặc section snapshot).
|
|
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,
|
|
};
|
|
}
|