@gamesberry/karmyc-core
Version:
A flexible and powerful layout management system for React applications
98 lines (97 loc) • 3.18 kB
TypeScript
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;
setRowSizesFinal: (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>;