From d740d407b4acd4c9c15afbbec46faef381b89f83 Mon Sep 17 00:00:00 2001 From: safwansamsudeen Date: Thu, 5 Dec 2024 14:58:40 +0530 Subject: [PATCH] infinite extensions --- src/bar.js | 1 - src/defaults.js | 1 + src/index.js | 51 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) diff --git a/src/bar.js b/src/bar.js index f940912..734d926 100644 --- a/src/bar.js +++ b/src/bar.js @@ -595,7 +595,6 @@ export default class Bar { actual_duration_in_days++; } } - console.log(this.actual_duration_in_days); this.actual_duration_in_days = actual_duration_in_days; this.duration = diff --git a/src/defaults.js b/src/defaults.js index 3be270a..6a80674 100644 --- a/src/defaults.js +++ b/src/defaults.js @@ -118,6 +118,7 @@ const DEFAULT_OPTIONS = { today_button: true, view_mode_select: false, default_snap: '1d', + extend_by_units: 7, holiday_highlight: { green: 'weekend', }, diff --git a/src/index.js b/src/index.js index 23fa081..2995f0d 100644 --- a/src/index.js +++ b/src/index.js @@ -858,6 +858,8 @@ export default class Gantt { set_scroll_position(date) { if (!date || date === 'start') { date = this.gantt_start; + } else if (date === 'end') { + date = this.gantt_end; } else if (date === 'today') { return this.scroll_today(); } else if (typeof date === 'string') { @@ -948,6 +950,54 @@ export default class Gantt { }); }); + let extended = false; + $.on(this.$container, 'mousewheel', (e) => { + if (!extended && e.currentTarget.scrollLeft === 0) { + extended = true; + this.gantt_start = date_utils.add( + this.gantt_start, + -this.options.extend_by_units, + this.config.unit, + ); + let old_scroll = this.options.scroll_to; + this.options.scroll_to = null; + this.setup_date_values(); + this.render(); + e.currentTarget.scrollLeft = + this.config.column_width * this.options.extend_by_units; + this.options.scroll_to = old_scroll; + this.set_scroll_position(); + setTimeout(() => (extended = false), 1000); + } + + if ( + !extended && + e.currentTarget.scrollWidth - e.currentTarget.scrollLeft === + e.currentTarget.clientWidth + ) { + let old_scroll_left = e.currentTarget.scrollLeft; + extended = true; + this.gantt_end = date_utils.add( + this.gantt_end, + this.options.extend_by_units, + this.config.unit, + ); + let old_scroll = this.options.scroll_to; + + this.options.scroll_to = 'end'; + this.setup_date_values(); + this.render(); + this.options.scroll_to = old_scroll_left; + e.currentTarget.scrollTo({ + left: + old_scroll_left + + this.config.column_width * this.options.extend_by_units, + behavior: 'smooth', + }); + setTimeout(() => (extended = false), 1000); + } + }); + $.on(this.$container, 'scroll', (e) => { let elements = document.querySelectorAll('.bar-wrapper'); let localBars = []; @@ -956,6 +1006,7 @@ export default class Gantt { if (x_on_scroll_start) { dx = e.currentTarget.scrollLeft - x_on_scroll_start; } + const upperTexts = Array.from( document.querySelectorAll('.upper-text'), );