feat: allow duration instead of end_time

This commit is contained in:
Safwan Samsudeen 2024-04-05 14:19:19 +05:30
parent 7670d13634
commit 0f15ab1875
3 changed files with 40 additions and 9 deletions

View File

@ -42,7 +42,7 @@
},
{
start: '2018-10-03',
end: '2018-10-06',
duration: '1m 4d',
name: 'Write new content',
id: "Task 1",
progress: 5,

View File

@ -7,6 +7,28 @@ const SECOND = 'second';
const MILLISECOND = 'millisecond';
export default {
parse_duration(duration) {
const regex = /([0-9])+(y|m|d|h|min|s|ms)/gm;
const matches = regex.exec(duration);
if (matches !== null) {
if (matches[2] === "y") {
return { duration: parseInt(matches[1]), scale: `year` };
} else if (matches[2] === "m") {
return { duration: parseInt(matches[1]), scale: `month` };
} else if (matches[2] === "d") {
return { duration: parseInt(matches[1]), scale: `day` };
} else if (matches[2] === "h") {
return { duration: parseInt(matches[1]), scale: `hour` };
} else if (matches[2] === "min") {
return { duration: parseInt(matches[1]), scale: `minute` };
} else if (matches[2] === "s") {
return { duration: parseInt(matches[1]), scale: `second` };
} else if (matches[2] === "ms") {
return { duration: parseInt(matches[1]), scale: `millisecond` };
}
}
},
parse(date, date_separator = '-', time_separator = /[.:]/) {
if (date instanceof Date) {
return date;

View File

@ -42,7 +42,7 @@ export default class Gantt {
} else {
throw new TypeError(
'Frappé Gantt only supports usage of a string CSS selector,' +
" HTML DOM element or SVG DOM element for the 'element' parameter"
" HTML DOM element or SVG DOM element for the 'element' parameter"
);
}
@ -96,6 +96,15 @@ export default class Gantt {
this.tasks = tasks.map((task, i) => {
// convert to Date objects
task._start = date_utils.parse(task.start);
if (task.end === undefined && task.duration !== undefined) {
task.end = task._start;
let durations = task.duration.split(" ");
durations.forEach(tmpDuration => {
let { duration, scale } = date_utils.parse_duration(tmpDuration);
task.end = date_utils.add(task.end, duration, scale);
})
}
task._end = date_utils.parse(task.end);
// make task invalid if duration too large
@ -307,7 +316,7 @@ export default class Gantt {
this.options.header_height +
this.options.padding +
(this.options.bar_height + this.options.padding) *
this.tasks.length;
this.tasks.length;
createSVG('rect', {
x: 0,
@ -455,7 +464,7 @@ export default class Gantt {
const width = this.options.column_width;
const height =
(this.options.bar_height + this.options.padding) *
this.tasks.length +
this.tasks.length +
this.options.header_height +
this.options.padding / 2;
@ -557,10 +566,10 @@ export default class Gantt {
date.getDate() !== last_date.getDate()
? date.getMonth() !== last_date.getMonth()
? date_utils.format(
date,
'D MMM',
this.options.language
)
date,
'D MMM',
this.options.language
)
: date_utils.format(date, 'D', this.options.language)
: '',
Day_upper:
@ -674,7 +683,7 @@ export default class Gantt {
const scroll_pos =
(hours_before_first_task / this.options.step) *
this.options.column_width -
this.options.column_width -
this.options.column_width;
parent_element.scrollLeft = scroll_pos;