improve date handling and fix empty tasks error

This commit is contained in:
safwansamsudeen 2024-12-02 14:34:11 +05:30
parent 7ac5422950
commit 3519755dc3

View File

@ -79,7 +79,14 @@ export default class Gantt {
setup_tasks(tasks) {
// prepare tasks
this.tasks = tasks.map((task, i) => {
this.tasks = tasks
.map((task, i) => {
// invalid flag
if (!task.start || !task.end) {
console.error(`task "${task.id}" doesn't have valid dates`);
return false;
}
// convert to Date objects
task._start = date_utils.parse(task.start);
if (task.end === undefined && task.duration !== undefined) {
@ -93,36 +100,26 @@ export default class Gantt {
});
}
task._end = date_utils.parse(task.end);
let diff = date_utils.diff(task._end, task._start, 'year');
if (diff < 0) {
throw Error(
"start of task can't be after end of task: in task #, " +
(i + 1),
console.error(
`start of task can't be after end of task: in task "${task.id}"`,
);
return false;
}
// make task invalid if duration too large
if (date_utils.diff(task._end, task._start, 'year') > 10) {
task.end = null;
console.error(
`the duration of task "${task.id}" is too long (above ten years)`,
);
return false;
}
// cache index
task._index = i;
// invalid dates
if (!task.start && !task.end) {
const today = date_utils.today();
task._start = today;
task._end = date_utils.add(today, 2, 'day');
}
if (!task.start && task.end) {
task._start = date_utils.add(task._end, -2, 'day');
}
if (task.start && !task.end) {
task._end = date_utils.add(task._start, 2, 'day');
}
// if hours is not set, assume the last day is full day
// e.g: 2018-09-09 becomes 2018-09-09 23:59:59
const task_end_values = date_utils.get_date_values(task._end);
@ -130,13 +127,11 @@ export default class Gantt {
task._end = date_utils.add(task._end, 24, 'hour');
}
// invalid flag
if (!task.start || !task.end) {
task.invalid = true;
}
// dependencies
if (typeof task.dependencies === 'string' || !task.dependencies) {
if (
typeof task.dependencies === 'string' ||
!task.dependencies
) {
let deps = [];
if (task.dependencies) {
deps = task.dependencies
@ -157,7 +152,8 @@ export default class Gantt {
}
return task;
});
})
.filter((t) => t);
this.setup_dependencies();
}
@ -201,8 +197,12 @@ export default class Gantt {
}
setup_gantt_dates() {
// set global start and end date
let gantt_start, gantt_end;
if (!this.tasks.length) {
gantt_start = new Date();
gantt_end = new Date();
}
for (let task of this.tasks) {
if (!gantt_start || task._start < gantt_start) {
gantt_start = task._start;