Skip to content

Commit

Permalink
arrow Left/Right key events have added
Browse files Browse the repository at this point in the history
  • Loading branch information
MaTeMaTuK committed Aug 25, 2020
1 parent 77f985d commit af214d6
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 24 deletions.
30 changes: 15 additions & 15 deletions example/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "gantt-task-react",
"version": "0.1.3",
"version": "0.1.4",
"description": "Interactive Gantt Chart for React with TypeScript.",
"author": "MaTeMaTuK <[email protected]>",
"homepage": "https://github.com/MaTeMaTuK/gantt-task-react",
Expand Down
31 changes: 25 additions & 6 deletions src/components/gantt/gantt.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ export const Gantt: React.SFC<GanttProps> = ({
}) => {
const [ganttTasks, setGanttTasks] = useState<Task[]>(tasks);
const [scrollY, setScrollY] = useState(0);
const [scrollX, setScrollX] = useState(0);

const [startDate, endDate] = ganttDateRange(ganttTasks, viewMode);
const dates = seedDates(startDate, endDate, viewMode);
Expand All @@ -57,7 +58,13 @@ export const Gantt: React.SFC<GanttProps> = ({
};

const handleScroll = (event: SyntheticEvent<HTMLDivElement>) => {
setScrollY(event.currentTarget.scrollTop);
if (scrollY !== event.currentTarget.scrollTop)
setScrollY(event.currentTarget.scrollTop);
};

const handleScrollX = (event: SyntheticEvent<HTMLDivElement>) => {
if (scrollX !== event.currentTarget.scrollLeft)
setScrollX(event.currentTarget.scrollLeft);
};

const handleWheel = (event: React.WheelEvent<HTMLDivElement>) => {
Expand All @@ -72,28 +79,38 @@ export const Gantt: React.SFC<GanttProps> = ({
};

const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {
let newScrollY = 0;
event.preventDefault();
let newScrollY = scrollY;
let newScrollX = scrollX;
let isX = true;
switch (event.key) {
case "Down": // IE/Edge specific value
case "ArrowDown":
newScrollY = scrollY + rowHeight;
newScrollY += rowHeight;
isX = false;
break;
case "Up": // IE/Edge specific value
case "ArrowUp":
newScrollY = scrollY - rowHeight;
newScrollY -= rowHeight;
isX = false;
break;
case "Left":
case "ArrowLeft":
// Do something for "left arrow" key press.
newScrollX -= columnWidth;
break;
case "Right": // IE/Edge specific value
case "ArrowRight":
// Do something for "right arrow" key press.
newScrollX += columnWidth;
break;
}
if (isX) {
if (newScrollX < 0) {
setScrollX(0);
} else if (newScrollX > gridWidth) {
setScrollX(gridWidth);
} else {
setScrollX(newScrollX);
}
} else {
if (newScrollY < 0) {
setScrollY(0);
Expand Down Expand Up @@ -177,6 +194,8 @@ export const Gantt: React.SFC<GanttProps> = ({
barProps={barProps}
ganttHeight={ganttHeight}
scrollY={scrollY}
scrollX={scrollX}
onScroll={handleScrollX}
/>
<Scroll
ganttFullHeight={ganttFullHeight}
Expand Down
19 changes: 17 additions & 2 deletions src/components/gantt/task-gantt.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React, { useRef, useEffect } from "react";
import React, { useRef, useEffect, SyntheticEvent } from "react";
import { GridProps, Grid } from "../grid/grid";
import { CalendarProps, Calendar } from "../calendar/calendar";
import { TaskGanttContentProps, TaskGanttContent } from "./task-gantt-content";
Expand All @@ -10,16 +10,21 @@ export type TaskGanttProps = {
barProps: TaskGanttContentProps;
ganttHeight: number;
scrollY: number;
scrollX: number;
onScroll: (event: SyntheticEvent<HTMLDivElement>) => void;
};
export const TaskGantt: React.FC<TaskGanttProps> = ({
gridProps,
calendarProps,
barProps,
ganttHeight,
scrollY,
scrollX,
onScroll,
}) => {
const ganttSVGRef = useRef<SVGSVGElement>(null);
const horizontalContainerRef = useRef<HTMLDivElement>(null);
const verticalContainerRef = useRef<HTMLDivElement>(null);
const newBarProps = { ...barProps, svg: ganttSVGRef };

useEffect(() => {
Expand All @@ -28,8 +33,18 @@ export const TaskGantt: React.FC<TaskGanttProps> = ({
}
}, [scrollY]);

useEffect(() => {
if (verticalContainerRef.current) {
verticalContainerRef.current.scrollLeft = scrollX;
}
}, [scrollX]);

return (
<div className={styles.ganttVerticalContainer}>
<div
className={styles.ganttVerticalContainer}
ref={verticalContainerRef}
onScroll={onScroll}
>
<svg
xmlns="http://www.w3.org/2000/svg"
width={gridProps.gridWidth}
Expand Down

0 comments on commit af214d6

Please sign in to comment.