import { ChildByLevelMap, DateSetup, Distances, RelationMoveTarget, Task, TaskBarMoveAction, RenderTask } from "./common-types"; import { CSSProperties, MouseEvent, RefObject } from "react"; import { OptimizedListParams } from "../helpers/use-optimized-list"; import { AllowReorderTask, Column, GanttRenderIconsProps, InsertTaskPosition } from "./public-types"; export interface ExpandedDependent { containerHeight: number; containerY: number; innerFromY: number; innerToY: number; marginBetweenTasks: number | null; dependent: Task; dependentTarget: RelationMoveTarget; ownTarget: RelationMoveTarget; } export type CriticalPaths = Map; export type ChangeInProgress = { action: TaskBarMoveAction; additionalLeftSpace: number; additionalRightSpace: number; changedTask: Task; coordinates: TaskCoordinates; coordinatesDiff: number; initialCoordinates: TaskCoordinates; lastClientX: number; startX: number; task: Task; taskRootNode: Element; tsDiff: number; }; export type TaskComparisonDatesCoordinates = { /** * Top border of the comparison task relative to the root svg */ y: number; /** * Left border of the comparison task relative to the root svg */ x: number; /** * Width of the comparison task */ width: number; /** * Height of the comparison task */ height: number; }; export type TaskCoordinates = { /** * Width of inner svg wrapper */ containerWidth: number; /** * Left border of inner svg wrapper relative to the root svg */ containerX: number; /** * Left border relative to the wrapper svg */ innerX1: number; /** * Right border relative to the wrapper svg */ innerX2: number; /** * Top border of inner svg wrapper relative to the root svg */ levelY: number; /** * Width of the progress bar */ progressWidth: number; /** * Left border of the progress bar relative to the root svg */ progressX: number; /** * Width of the task */ width: number; /** * Left border of the task relative to the root svg */ x1: number; /** * Right border of the task relative to the root svg */ x2: number; /** * Top border of the task relative to the root svg */ y: number; /** * Comparison dates coordinates */ comparisonDates?: TaskComparisonDatesCoordinates; }; export interface ExpandedDependency { containerHeight: number; containerY: number; innerFromY: number; innerToY: number; marginBetweenTasks: number | null; ownTarget: RelationMoveTarget; source: Task; sourceTarget: RelationMoveTarget; } /** * comparison level -> task id -> { * x1: number; * x2: number; * y: number; * } */ export type MapTaskToCoordinates = Map>; export type TaskToGlobalIndexMap = Map>; export type TaskToRowIndexMap = Map>; export type RowIndexToTaskMap = Map>; export type GlobalRowIndexToTaskMap = Map; export type TaskMapByLevel = Map>; export type MapTaskToNestedIndex = Map>; export type DependencyMap = Map>; export type DependentMap = Map>; export type DependencyMargins = Map>>; export type CriticalPath = { tasks: Set; dependencies: Map>; }; export interface TaskListTableProps { ganttRef: RefObject; getTableRowProps: (task: RenderTask, index: number) => TaskListTableRowProps; canMoveTasks: boolean; allowMoveTask: AllowReorderTask; childTasksMap: ChildByLevelMap; columns: readonly Column[]; cutIdsMirror: Readonly>; dateSetup: DateSetup; dependencyMap: DependencyMap; distances: Distances; fullRowHeight: number; ganttFullHeight: number; getTaskCurrentState: (task: Task) => Task; handleAddTask: (task: Task) => void; handleDeleteTasks: (task: RenderTask[]) => void; handleEditTask: (task: RenderTask) => void; handleMoveTaskBefore: (target: RenderTask, taskForMove: RenderTask) => void; handleMoveTaskAfter: (target: RenderTask, taskForMove: RenderTask) => void; handleMoveTasksInside: (parent: Task, childs: readonly RenderTask[]) => void; handleOpenContextMenu: (task: RenderTask, clientX: number, clientY: number) => void; icons?: Partial; isShowTaskNumbers: boolean; mapTaskToNestedIndex: MapTaskToNestedIndex; onClick: (task: RenderTask) => void; onExpanderClick: (task: Task) => void; renderedIndexes: OptimizedListParams | null; scrollToTask: (task: Task) => void; selectTaskOnMouseDown: (taskId: string, event: MouseEvent) => void; selectedIdsMirror: Readonly>; taskListWidth: number; tasks: readonly RenderTask[]; } export type TaskListTableRowProps = { columns: readonly Column[]; dateSetup: DateSetup; dependencyMap: DependencyMap; depth: number; distances: Distances; fullRowHeight: number; getTaskCurrentState: (task: Task) => Task; handleAddTask: (task: Task) => void; handleDeleteTasks: (task: RenderTask[]) => void; handleEditTask: (task: RenderTask) => void; moveHandleProps?: any; moveOverPosition?: InsertTaskPosition; handleOpenContextMenu: (task: RenderTask, clientX: number, clientY: number) => void; hasChildren: boolean; icons?: Partial; indexStr: string; isDragging?: boolean; isOverlay?: boolean; isClosed: boolean; isCut: boolean; isEven: boolean; isSelected: boolean; isShowTaskNumbers: boolean; onClick: (task: RenderTask) => void; onDoubleClick?: (task: RenderTask) => void; onExpanderClick: (task: Task) => void; scrollToTask: (task: Task) => void; selectTaskOnMouseDown: (taskId: string, event: MouseEvent) => void; style?: CSSProperties; task: RenderTask; /** * Callback when a cell value is committed via inline editing. */ onTaskInlineEdit?: (task: RenderTask, columnId: string, newValue: unknown) => void; }; export interface TaskListHeaderProps { headerHeight: number; columns: readonly Column[]; allColumns: readonly Column[]; canMoveTasks: boolean; canResizeColumns: boolean; canToggleColumns: boolean; onColumnResizeStart: (columnIndex: number, clientX: number) => void; onColumnVisibilityChange?: (columnId: string, hidden: boolean) => void; } export type MinAndMaxChildsOfTask = [ [ /** * First min */ Task | null, /** * Second min */ Task | null ], [ /** * First max */ Task | null, /** * Second max */ Task | null ] ]; export type MinAndMaxChildsMap = Map>;