From 6e846ac3e5b7794320c7c4480cb29da82eb54fe9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Paulo=20Poffo?= Date: Tue, 12 Feb 2019 17:29:38 -0200 Subject: [PATCH] Defined a renderEndDate --- src/diagrams/gantt/ganttDb.js | 8 +++++++- src/diagrams/gantt/ganttDb.spec.js | 21 ++++++++++++++++++++- src/diagrams/gantt/ganttRenderer.js | 4 ++-- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/diagrams/gantt/ganttDb.js b/src/diagrams/gantt/ganttDb.js index e831601dc..502d7bf36 100644 --- a/src/diagrams/gantt/ganttDb.js +++ b/src/diagrams/gantt/ganttDb.js @@ -78,8 +78,13 @@ const fixTaskDates = function (task, dateFormat, excludes) { let startTime = moment(task.startTime) startTime.add(1, 'd') let endTime = moment(task.endTime) + let invalid = false while (startTime.date() <= endTime.date()) { - if (isInvalidDate(startTime, dateFormat, excludes)) { + if (!invalid) { + task.renderEndTime = endTime.toDate() + } + invalid = isInvalidDate(startTime, dateFormat, excludes) + if (invalid) { endTime.add(1, 'd') } startTime.add(1, 'd') @@ -308,6 +313,7 @@ export const addTask = function (descr, data) { type: currentSection, processed: false, manualEndTime: false, + renderEndTime: null, raw: { data: data }, task: descr } diff --git a/src/diagrams/gantt/ganttDb.spec.js b/src/diagrams/gantt/ganttDb.spec.js index 06c620a42..2f5643ac5 100644 --- a/src/diagrams/gantt/ganttDb.spec.js +++ b/src/diagrams/gantt/ganttDb.spec.js @@ -175,38 +175,57 @@ describe('when using the ganttDb', function () { it('should ignore weekends', function () { ganttDb.setDateFormat('YYYY-MM-DD') ganttDb.setExcludes('weekends 2019-02-06,friday') - ganttDb.addSection('testa1') + ganttDb.addSection('weekends skip test') ganttDb.addTask('test1', 'id1,2019-02-01,1d') ganttDb.addTask('test2', 'id2,after id1,2d') ganttDb.addTask('test3', 'id3,after id2,7d') ganttDb.addTask('test4', 'id4,2019-02-01,2019-02-20') // Fixed endTime ganttDb.addTask('test5', 'id5,after id4,1d') + ganttDb.addSection('full ending taks on last day') + ganttDb.addTask('test6', 'id6,2019-02-13,2d') + ganttDb.addTask('test7', 'id7,after id6,1d') const tasks = ganttDb.getTasks() expect(tasks[0].startTime).toEqual(moment('2019-02-01', 'YYYY-MM-DD').toDate()) expect(tasks[0].endTime).toEqual(moment('2019-02-04', 'YYYY-MM-DD').toDate()) + expect(tasks[0].renderEndTime).toEqual(moment('2019-02-02', 'YYYY-MM-DD').toDate()) expect(tasks[0].id).toEqual('id1') expect(tasks[0].task).toEqual('test1') expect(tasks[1].startTime).toEqual(moment('2019-02-04', 'YYYY-MM-DD').toDate()) expect(tasks[1].endTime).toEqual(moment('2019-02-07', 'YYYY-MM-DD').toDate()) + expect(tasks[1].renderEndTime).toEqual(moment('2019-02-06', 'YYYY-MM-DD').toDate()) expect(tasks[1].id).toEqual('id2') expect(tasks[1].task).toEqual('test2') expect(tasks[2].startTime).toEqual(moment('2019-02-07', 'YYYY-MM-DD').toDate()) expect(tasks[2].endTime).toEqual(moment('2019-02-20', 'YYYY-MM-DD').toDate()) + expect(tasks[2].renderEndTime).toEqual(moment('2019-02-20', 'YYYY-MM-DD').toDate()) expect(tasks[2].id).toEqual('id3') expect(tasks[2].task).toEqual('test3') expect(tasks[3].startTime).toEqual(moment('2019-02-01', 'YYYY-MM-DD').toDate()) expect(tasks[3].endTime).toEqual(moment('2019-02-20', 'YYYY-MM-DD').toDate()) + expect(tasks[3].renderEndTime).toBeNull() // Fixed end expect(tasks[3].id).toEqual('id4') expect(tasks[3].task).toEqual('test4') expect(tasks[4].startTime).toEqual(moment('2019-02-20', 'YYYY-MM-DD').toDate()) expect(tasks[4].endTime).toEqual(moment('2019-02-21', 'YYYY-MM-DD').toDate()) + expect(tasks[4].renderEndTime).toEqual(moment('2019-02-21', 'YYYY-MM-DD').toDate()) expect(tasks[4].id).toEqual('id5') expect(tasks[4].task).toEqual('test5') + + expect(tasks[5].startTime).toEqual(moment('2019-02-13', 'YYYY-MM-DD').toDate()) + expect(tasks[5].endTime).toEqual(moment('2019-02-18', 'YYYY-MM-DD').toDate()) + expect(tasks[5].renderEndTime).toEqual(moment('2019-02-15', 'YYYY-MM-DD').toDate()) + expect(tasks[5].id).toEqual('id6') + expect(tasks[5].task).toEqual('test6') + + expect(tasks[6].startTime).toEqual(moment('2019-02-18', 'YYYY-MM-DD').toDate()) + expect(tasks[6].endTime).toEqual(moment('2019-02-19', 'YYYY-MM-DD').toDate()) + expect(tasks[6].id).toEqual('id7') + expect(tasks[6].task).toEqual('test7') }) }) diff --git a/src/diagrams/gantt/ganttRenderer.js b/src/diagrams/gantt/ganttRenderer.js index 7d24df2a4..633d4ae84 100644 --- a/src/diagrams/gantt/ganttRenderer.js +++ b/src/diagrams/gantt/ganttRenderer.js @@ -135,7 +135,7 @@ export const draw = function (text, id) { return i * theGap + theTopPad }) .attr('width', function (d) { - return (timeScale(d.endTime) - timeScale(d.startTime)) + return (timeScale(d.renderEndTime || d.endTime) - timeScale(d.startTime)) }) .attr('height', theBarHeight) .attr('class', function (d) { @@ -178,7 +178,7 @@ export const draw = function (text, id) { .attr('font-size', conf.fontSize) .attr('x', function (d) { const startX = timeScale(d.startTime) - const endX = timeScale(d.endTime) + const endX = timeScale(d.renderEndTime || d.endTime) const textWidth = this.getBBox().width // Check id text width > width of rectangle