import React, { useState } from "react"; import { BarProgressHandle } from "./bar-progress-handle"; import { BarDateHandle } from "./bar-date-handle"; import { BarDisplay } from "./bar-display"; import { BarTask } from "../../types/bar-task"; import { progressWithByParams, getProgressPoint, } from "../../helpers/bar-helper"; import styles from "./bar.module.css"; import { GanttContentMoveAction } from "../Gantt/gantt-content"; export type BarProps = { task: BarTask; arrowIndent: number; isProgressChangeable: boolean; isDateChangeable: boolean; isDelete: boolean; onEventStart: ( event: React.MouseEvent | React.KeyboardEvent, action: GanttContentMoveAction, selectedTask: BarTask ) => any; }; export const Bar: React.FC = ({ task, arrowIndent, isProgressChangeable, isDateChangeable, onEventStart, isDelete, }) => { const [isSelected, setIsSelected] = useState(false); const progressWidth = progressWithByParams(task.x1, task.x2, task.progress); const progressPoint = getProgressPoint( progressWidth + task.x1, task.y, task.height ); return ( { onEventStart(e, "dblclick", task); }} tabIndex={0} onKeyDown={e => { switch (e.key) { case "Delete": { if (isDelete) onEventStart(e, "delete", task); break; } } }} onMouseEnter={e => { onEventStart(e, "mouseenter", task); }} onMouseLeave={e => { onEventStart(e, "mouseleave", task); }} onFocus={() => setIsSelected(true)} onBlur={() => setIsSelected(false)} > 0} arrowIndent={arrowIndent} styles={task.styles} isSelected={isSelected} onMouseDown={e => { isDateChangeable && onEventStart(e, "move", task); }} /> {isDateChangeable && ( {/* left */} { onEventStart(e, "start", task); }} /> {/* right */} { onEventStart(e, "end", task); }} /> )} {isProgressChangeable && ( { onEventStart(e, "progress", task); }} /> )} ); };