import { Task } from "@/types"; export interface CalendarRowItems { key: string; children: Array; } export interface CalendarRowText { index: number; key: string; x: number; y: number; width: number; textWidth: number; choosenFormatName?: string; height: number; label: string; } export interface TaskMap { [key: string]: Task; } export interface RootTask { id: null; label: "root"; children: []; allChildren: []; parents: []; parent: null; dependentOn: []; parentId: null; __root: boolean; } export interface Task { id: React.ReactText; // * dependencyLines: Array<{ points?: string; taskId: React.ReactText }>; dependentOn: Array; parentId: React.ReactText | null; start: dayjs.ConfigType; // * startTime: number; end: dayjs.ConfigType; endTime: number; label: string; // * duration: number; // * progress: number; // * type: string; style: DynamicStyle; collapsed: boolean; // extends // parent: Task | null | string | number; // parents: Task[] | string[] | number[]; // allChildren: Task[] | string[] | number[]; // children: Task[] | string[] | number[]; parent: React.ReactText | null; parents: Array; allChildren: Array; children: Array; mouseOver: boolean; height: number; width: number; y: number; x: number; __root?: boolean; events?: { [key: string]: ( event: React.MouseEvent | React.TouchEvent, task: Task ) => void; }; // eslint-disable-next-line @typescript-eslint/no-explicit-any [key: string]: any; } export interface GanttElasticRefs { taskListWrapper?: React.RefObject; chartGraphSvg?: React.RefObject; taskList?: React.RefObject; svgChart?: React.RefObject; taskListItems?: React.RefObject; chartGraph?: React.RefObject; chartCalendarContainer?: React.RefObject; chartGraphContainer?: React.RefObject; chartScrollContainerVertical?: React.RefObject; chartScrollContainerHorizontal?: React.RefObject; mainView?: React.RefObject; chartContainer?: React.RefObject; chart?: React.RefObject; } export interface ScrollOption { scrolling: boolean; top: number; left: number; taskList: { left: number; right: number; top: number; bottom: number; }; chart: { left: number; right: number; percent: number; timePercent: number; top: number; bottom: number; time: number; timeCenter: number; dateTime: { left: number; right: number; }; }; } export interface TimeOption { firstTime: number; lastTime: number; totalViewDurationMs: number; totalViewDurationPx: number; steps: StepOption[]; } export interface StepOption { time: number; offset: { ms: number; px: number }; width: { ms: number; px: number }; } export interface TaskListOption { columns: TaskListColumnOption[]; width: number; finalWidth: number; widthFromPercentage: number; } export interface TaskListColumnOption { id: number; label: string; value: string | Function; width: number; height: number; style: DynamicStyle; finalWidth: number; thresholdPercent: number; widthFromPercentage: number; events?: { [key: string]: (a: { event: React.MouseEvent | React.TouchEvent; data: Task; column: TaskListColumnOption; }) => void; }; expander: boolean; _key: string; } export interface CalendarItemWidths { short?: number; medium?: number; long?: number; [key: string]: number; } export interface Formatted { long: string[]; medium: string[]; short: string[]; [key: string]: string[]; } export interface CalendarOption { height: number; hour: { widths: CalendarItemWidths[]; maxWidths: CalendarItemWidths; formatted: Formatted; }; day: { widths: CalendarItemWidths[]; maxWidths: CalendarItemWidths; }; month: { widths: CalendarItemWidths[]; maxWidths: CalendarItemWidths; }; } export interface State { // width: number; // height: number; // clientWidth: number; // outerHeight: number; // rowsHeight: number; // scrollBarHeight: number; // allVisibleTasksHeight: number; scroll: ScrollOption; times: TimeOption; taskList: TaskListOption; calendar: CalendarOption; } export interface Options { scroll: { dragXMoveMultiplier: number; //* dragYMoveMultiplier: number; //* }; scope: { //* before: number; after: number; }; times: { timeScale: number; timeZoom: number; //* firstTime: number; lastTime: number; timePerPixel: number; // 计算值,设置无效 stepDuration: dayjs.UnitType; }; row: { height: number; //* }; maxRows: number; //* maxHeight: number; //* chart: { grid: { horizontal: { gap: number; //* }; }; progress: { width: number; //* height: number; //* pattern: boolean; bar: boolean; }; text: { offset: number; //* xPadding: number; //* display: boolean; //* }; expander: { type: string; display: boolean; //* displayIfTaskListHidden: boolean; //* offset: number; //* size: number; }; }; taskList: { display: boolean; //* resizeAfterThreshold: boolean; //* widthThreshold: number; //* columns: GanttElasticTaskListColumn[]; percent: number; //* minWidth: number; expander: { type: string; size: number; columnWidth: number; padding: number; margin: number; straight: boolean; }; }; calendar: { workingDays: number[]; //* gap: number; //* strokeWidth: number; hour: { height: number; //* display: boolean; //* format: DateFormat; //* }; day: { height: number; //* display: boolean; //* format: DateFormat; //* }; month: { height: number; //* display: boolean; //* format: DateFormat; //* }; }; locale: ILocale; }