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