UNPKG

@gamesberry/karmyc-core

Version:

A flexible and powerful layout management system for React applications

94 lines (93 loc) 3.08 kB
import { AreaLayout, AreaRowLayout } from "../../types/areaTypes"; import { IArea } from "../../types/areaTypes"; import { AreaTypeValue } from "../types/actions"; import { JoinPreviewState } from "./actions/areas-join-preview"; import { Rect } from "../../types/math"; import { Point } from "../../types/math"; import { SplitResult } from "./actions/area-split"; import { CardinalDirection, IntercardinalDirection } from "../../types/directions"; import { RootStateType } from "../store"; import { StateCreator } from "zustand"; import { PlaceArea } from "../types/areas-type"; /** * État des zones (areas) dans le store. */ export interface AreasState { _id: number; rootId: string | null; errors: string[]; activeAreaId: string | null; joinPreview: JoinPreviewState | null; layout: { [key: string]: AreaRowLayout | AreaLayout; }; areas: { [key: string]: IArea<AreaTypeValue>; }; viewports: { [key: string]: Rect; }; areaToOpen: null | { position: Point; area: { type: string; state: any & { sourceId?: string; }; }; }; lastSplitResultData: SplitResult | null; lastLeadAreaId?: string | null; isDetached?: boolean; isLocked?: boolean; } /** * Actions possibles sur les zones (areas). */ export interface AreasActions { addArea: (area: IArea<AreaTypeValue>) => string; removeArea: (id: string) => void; setActiveArea: (id: string | null) => void; updateArea: (areaData: Partial<IArea<AreaTypeValue>> & { id: string; }) => void; updateLayout: (layoutData: Partial<AreaRowLayout> & { id: string; }) => void; setAreaToOpen: (payload: AreasState['areaToOpen']) => void; updateAreaToOpenPosition: (position: Point) => void; finalizeAreaPlacement: (payload?: { targetId?: string; placement?: PlaceArea; }) => void; cleanupTemporaryStates: () => void; setViewports: (viewports: Record<string, Rect>) => void; setRowSizes: (payload: { rowId: string; sizes: number[]; }) => void; splitArea: (payload: { areaIdToSplit: string; parentRowId: string | null; horizontal: boolean; corner: IntercardinalDirection; }) => SplitResult | null; setJoinPreview: (payload: JoinPreviewState | null) => void; joinOrMoveArea: (payload: { sourceAreaId: string; targetAreaId: string; direction: CardinalDirection; }) => void; getLastSplitResult: () => SplitResult | null; getActiveArea: () => IArea<AreaTypeValue> | null; getAreaById: (id: string) => IArea<AreaTypeValue> | undefined; getAllAreas: () => Record<string, IArea<AreaTypeValue>>; getAreaErrors: () => string[]; getLastLeadAreaId: () => string | null; } export type AreasSlice = AreasState & AreasActions; export declare const initialState: AreasState; export declare const createAreasSlice: StateCreator<RootStateType, // le type global du store [ ], [ ], AreasSlice>;