diff --git a/htdocs/js/DatePicker/datepicker.js b/htdocs/js/DatePicker/datepicker.js index b2d9cfae6c..dca96fb2d8 100644 --- a/htdocs/js/DatePicker/datepicker.js +++ b/htdocs/js/DatePicker/datepicker.js @@ -48,15 +48,21 @@ rule.push(value ? parseInt(value) * 1000 - timezoneAdjustment : 0); } - const update = () => { + const update = (input) => { + const activeIndex = groupRules.findIndex((r) => r[0] === input); + if (activeIndex == -1) return; + const activeFieldDate = + groupRules[activeIndex][0]?.parentNode._flatpickr.selectedDates[0]?.getTime() || + groupRules[activeIndex][1]; + for (let i = 1; i < groupRules.length; ++i) { - const prevFieldDate = - groupRules[i - 1][0]?.parentNode._flatpickr.selectedDates[0]?.getTime() || groupRules[i - 1][1]; + if (i == activeFieldDate) continue; const thisFieldDate = groupRules[i][0]?.parentNode._flatpickr.selectedDates[0]?.getTime() || groupRules[i][1]; - if (prevFieldDate && thisFieldDate && prevFieldDate > thisFieldDate) { - groupRules[i][0].parentNode._flatpickr.setDate(prevFieldDate, true); - } + if (i < activeIndex && thisFieldDate > activeFieldDate) + groupRules[i][0].parentNode._flatpickr.setDate(activeFieldDate, true); + else if (i > activeIndex && thisFieldDate < activeFieldDate) + groupRules[i][0].parentNode._flatpickr.setDate(activeFieldDate, true); } }; @@ -115,7 +121,9 @@ if (this.input.value === orig_value) this.altInput.classList.remove('changed'); else this.altInput.classList.add('changed'); }, - onClose: update, + onClose() { + return update(this.input); + }, onReady() { // Flatpickr hides the original input and adds the alternate input after it. That messes up the // bootstrap input group styling. So move the now hidden original input after the created alternate @@ -133,7 +141,7 @@ // Make the alternate input left-to-right even for right-to-left languages. this.altInput.dir = 'ltr'; - this.altInput.addEventListener('blur', update); + this.altInput.addEventListener('blur', () => update(this.input)); }, parseDate(datestr, format) { // Deal with the case of a unix timestamp. The timezone needs to be adjusted back as this is for