From 0fefc6eba83ab8643c30938565b4b8539f5e23a6 Mon Sep 17 00:00:00 2001 From: zunicma Date: Tue, 14 Jul 2020 08:55:36 +0200 Subject: [PATCH] Added prop 'min-gap-between-bars' (in minutes) Fixed drag limit when a shadow is to the right Bumped version --- package-lock.json | 2 +- package.json | 2 +- src/GGanttBar.vue | 17 ++++++++++------- src/GGanttChart.vue | 9 +++++++-- 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8c07a3e..ba44081 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "vue-ganttastic", - "version": "0.9.23", + "version": "0.9.24", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 89dbe0c..b0b781d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vue-ganttastic", - "version": "0.9.23", + "version": "0.9.25", "description": "A simple and customizable Gantt chart component for Vue.js", "repository": { "type": "git", diff --git a/src/GGanttBar.vue b/src/GGanttBar.vue index df72686..be23b77 100644 --- a/src/GGanttBar.vue +++ b/src/GGanttBar.vue @@ -65,7 +65,8 @@ export default { "moveBarsFromBundleOfPushedBar", "setDragLimitsOfGanttBar", "onBarEvent", - "onDragendBar" + "onDragendBar", + "getMinGapBetweenBars", ], data(){ @@ -260,10 +261,10 @@ export default { if(!this.ganttChartProps.pushOnOverlap) { return false } - if(xStart && this.dragLimitLeft !== null && xStart < this.dragLimitLeft+2){ + if(xStart && this.dragLimitLeft !== null && xStart < this.dragLimitLeft + this.getMinGapBetweenBars()){ return true } - if(xEnd && this.dragLimitRight !== null && xEnd > this.dragLimitRight-2){ + if(xEnd && this.dragLimitRight !== null && xEnd > this.dragLimitRight - this.getMinGapBetweenBars()){ return true } return false @@ -301,16 +302,17 @@ export default { let overlapEndMoment = moment(overlapBar[this.barEnd]) switch(overlapType){ case "left": - minuteDiff = overlapEndMoment.diff(currentStartMoment, "minutes", true) - overlapBar[this.barEnd] = currentBar[this.barStart] + minuteDiff = overlapEndMoment.diff(currentStartMoment, "minutes", true) + this.getMinGapBetweenBars() + overlapBar[this.barEnd] = moment(currentBar[this.barStart]).subtract(this.getMinGapBetweenBars(), "minutes", true) overlapBar[this.barStart] = overlapStartMoment.subtract(minuteDiff, "minutes", true) break case "right": - minuteDiff = currentEndMoment.diff(overlapStartMoment, "minutes", true) - overlapBar[this.barStart] = currentBar[this.barEnd] + minuteDiff = currentEndMoment.diff(overlapStartMoment, "minutes", true) + this.getMinGapBetweenBars() + overlapBar[this.barStart] = moment(currentBar[this.barEnd]).add(this.getMinGapBetweenBars(), "minutes", true) overlapBar[this.barEnd] = overlapEndMoment.add(minuteDiff, "minutes", true) break default: + // eslint-disable-next-line console.warn("One bar is inside of the other one! This should never occur while push-on-overlap is active!") return } @@ -353,6 +355,7 @@ export default { this.barEndMoment = moment(this.barEndMoment).add(minuteCount, "minutes", true) break default: + // eslint-disable-next-line console.warn("wrong direction in moveBarByMinutesAndPush") return } diff --git a/src/GGanttChart.vue b/src/GGanttChart.vue index 57a9f89..306a11a 100644 --- a/src/GGanttChart.vue +++ b/src/GGanttChart.vue @@ -58,6 +58,10 @@ export default { width: {type: String, default: "100%"}, // the total width of the entire ganttastic component in % pushOnOverlap: {type: Boolean}, snapBackOnOverlap: {type: Boolean}, + minGapBetweenBars: { + type: Number, + default: 0 + } }, data(){ @@ -224,7 +228,7 @@ export default { while(nextBar){ let currentBarOffsetRight = currentBar.$refs['g-gantt-bar'].offsetLeft + currentBar.$refs['g-gantt-bar'].offsetWidth gapDistanceSoFar += nextBar.$refs['g-gantt-bar'].offsetLeft - currentBarOffsetRight - if(nextBar.barConfig.immobile){ + if(nextBar.barConfig.immobile || (nextBar.barConfig.isShadow && !ignoreShadows)){ return [gapDistanceSoFar, bundleBarsAndGapDist] } else if(nextBar.barConfig.bundle){ bundleBarsAndGapDist.push({bar: nextBar, gapDistance: gapDistanceSoFar}) @@ -290,7 +294,8 @@ export default { onBarEvent: (e, ganttBar) => this.onBarEvent(e, ganttBar), onDragendBar: (e, ganttBar) => this.onDragendBar(e, ganttBar), shouldSnapBackOnOverlap: () => this.snapBackOnOverlap, - snapBackBundle: (ganttBar) => this.snapBackBundle(ganttBar) + snapBackBundle: (ganttBar) => this.snapBackBundle(ganttBar), + getMinGapBetweenBars: () => this.minGapBetweenBars } } }