Merge pull request #69 from hexagonatron/fix-incorrect-month-calculation

Changing taskXCoordinate calculation to not rely on dateDelta.
This commit is contained in:
MaTeMaTuK 2022-06-28 19:39:19 +02:00 committed by GitHub
commit 83e244ccec
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -22,17 +22,11 @@ export const convertToBarTasks = (
milestoneBackgroundColor: string, milestoneBackgroundColor: string,
milestoneBackgroundSelectedColor: string milestoneBackgroundSelectedColor: string
) => { ) => {
const dateDelta =
dates[1].getTime() -
dates[0].getTime() -
dates[1].getTimezoneOffset() * 60 * 1000 +
dates[0].getTimezoneOffset() * 60 * 1000;
let barTasks = tasks.map((t, i) => { let barTasks = tasks.map((t, i) => {
return convertToBarTask( return convertToBarTask(
t, t,
i, i,
dates, dates,
dateDelta,
columnWidth, columnWidth,
rowHeight, rowHeight,
taskHeight, taskHeight,
@ -71,7 +65,6 @@ const convertToBarTask = (
task: Task, task: Task,
index: number, index: number,
dates: Date[], dates: Date[],
dateDelta: number,
columnWidth: number, columnWidth: number,
rowHeight: number, rowHeight: number,
taskHeight: number, taskHeight: number,
@ -96,7 +89,6 @@ const convertToBarTask = (
task, task,
index, index,
dates, dates,
dateDelta,
columnWidth, columnWidth,
rowHeight, rowHeight,
taskHeight, taskHeight,
@ -111,7 +103,6 @@ const convertToBarTask = (
task, task,
index, index,
dates, dates,
dateDelta,
columnWidth, columnWidth,
rowHeight, rowHeight,
taskHeight, taskHeight,
@ -129,7 +120,6 @@ const convertToBarTask = (
task, task,
index, index,
dates, dates,
dateDelta,
columnWidth, columnWidth,
rowHeight, rowHeight,
taskHeight, taskHeight,
@ -150,7 +140,6 @@ const convertToBar = (
task: Task, task: Task,
index: number, index: number,
dates: Date[], dates: Date[],
dateDelta: number,
columnWidth: number, columnWidth: number,
rowHeight: number, rowHeight: number,
taskHeight: number, taskHeight: number,
@ -165,11 +154,11 @@ const convertToBar = (
let x1: number; let x1: number;
let x2: number; let x2: number;
if (rtl) { if (rtl) {
x2 = taskXCoordinateRTL(task.start, dates, dateDelta, columnWidth); x2 = taskXCoordinateRTL(task.start, dates, columnWidth);
x1 = taskXCoordinateRTL(task.end, dates, dateDelta, columnWidth); x1 = taskXCoordinateRTL(task.end, dates, columnWidth);
} else { } else {
x1 = taskXCoordinate(task.start, dates, dateDelta, columnWidth); x1 = taskXCoordinate(task.start, dates, columnWidth);
x2 = taskXCoordinate(task.end, dates, dateDelta, columnWidth); x2 = taskXCoordinate(task.end, dates, columnWidth);
} }
let typeInternal: TaskTypeInternal = task.type; let typeInternal: TaskTypeInternal = task.type;
if (typeInternal === "task" && x2 - x1 < handleWidth * 2) { if (typeInternal === "task" && x2 - x1 < handleWidth * 2) {
@ -215,7 +204,6 @@ const convertToMilestone = (
task: Task, task: Task,
index: number, index: number,
dates: Date[], dates: Date[],
dateDelta: number,
columnWidth: number, columnWidth: number,
rowHeight: number, rowHeight: number,
taskHeight: number, taskHeight: number,
@ -224,7 +212,7 @@ const convertToMilestone = (
milestoneBackgroundColor: string, milestoneBackgroundColor: string,
milestoneBackgroundSelectedColor: string milestoneBackgroundSelectedColor: string
): BarTask => { ): BarTask => {
const x = taskXCoordinate(task.start, dates, dateDelta, columnWidth); const x = taskXCoordinate(task.start, dates, columnWidth);
const y = taskYCoordinate(index, rowHeight, taskHeight); const y = taskYCoordinate(index, rowHeight, taskHeight);
const x1 = x - taskHeight * 0.5; const x1 = x - taskHeight * 0.5;
@ -261,34 +249,21 @@ const convertToMilestone = (
const taskXCoordinate = ( const taskXCoordinate = (
xDate: Date, xDate: Date,
dates: Date[], dates: Date[],
dateDelta: number,
columnWidth: number columnWidth: number
) => { ) => {
const index = ~~( const index = dates.findIndex(d => d.getTime() >= xDate.getTime()) - 1;
(xDate.getTime() -
dates[0].getTime() + const remainderMillis = xDate.getTime() - dates[index].getTime();
xDate.getTimezoneOffset() - const percentOfInterval = remainderMillis / (dates[index + 1 ].getTime() - dates[index].getTime());
dates[0].getTimezoneOffset()) / const x = index * columnWidth + (percentOfInterval * columnWidth);
dateDelta
);
const x = Math.round(
(index +
(xDate.getTime() -
dates[index].getTime() -
xDate.getTimezoneOffset() * 60 * 1000 +
dates[index].getTimezoneOffset() * 60 * 1000) /
dateDelta) *
columnWidth
);
return x; return x;
}; };
const taskXCoordinateRTL = ( const taskXCoordinateRTL = (
xDate: Date, xDate: Date,
dates: Date[], dates: Date[],
dateDelta: number,
columnWidth: number columnWidth: number
) => { ) => {
let x = taskXCoordinate(xDate, dates, dateDelta, columnWidth); let x = taskXCoordinate(xDate, dates, columnWidth);
x += columnWidth; x += columnWidth;
return x; return x;
}; };