improve date handling and fix empty tasks error
This commit is contained in:
parent
7ac5422950
commit
3519755dc3
56
src/index.js
56
src/index.js
@ -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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user