diff --git a/src/widgets/CalendarWidget.js b/src/widgets/CalendarWidget.js index 44aaf6dda9..8e8509258d 100644 --- a/src/widgets/CalendarWidget.js +++ b/src/widgets/CalendarWidget.js @@ -291,6 +291,9 @@ export default class CalendarWidget extends InputWidget { if (!this.calendar) { return super.getValue(); } + if(this.settings.isManuallyOverriddenValue){ + return this.settings.manualInputValue; + } // Get the selected dates from the calendar widget. const dates = this.calendar.selectedDates; if (!dates || !dates.length) { @@ -411,6 +414,19 @@ export default class CalendarWidget extends InputWidget { this.calendar.updateValue(false); }); } + + // Move input attributes to altInput. + const labelledbyIds = this.calendar.input.getAttribute('aria-labelledby'); + const isRequired = this.calendar.input.getAttribute('aria-required'); + + this.calendar.altInput.id = this._input.id; + this.calendar.altInput.setAttribute('aria-labelledby', labelledbyIds); + this.calendar.altInput.setAttribute('aria-required', isRequired); + + this._input.removeAttribute('id'); + this._input.removeAttribute('aria-labelledby'); + this._input.removeAttribute('aria-required'); + const excludedFromMaskFormats = ['MMMM']; if (!this.settings.readOnly && !_.some(excludedFromMaskFormats, format => _.includes(this.settings.format, format))) { diff --git a/test/unit/DateTime.unit.js b/test/unit/DateTime.unit.js index c5f4bf1b16..3f9a5de7ab 100644 --- a/test/unit/DateTime.unit.js +++ b/test/unit/DateTime.unit.js @@ -94,15 +94,14 @@ describe('DateTime Component', () => { const inputEvent = new Event('input'); const value = '2021-04-13 07:00 PM'; - const expectedValueStart = '2021-04-13T19:00:00'; const input = dateTime.element.querySelector('.input'); input.value = value; input.dispatchEvent(inputEvent); setTimeout(() => { input.dispatchEvent(blurEvent); setTimeout(() => { - assert.equal(dateTime.getValue().startsWith(expectedValueStart), true); - assert.equal(dateTime.dataValue.startsWith(expectedValueStart), true); + assert.equal(dateTime.getValue().startsWith(value), true); + assert.equal(dateTime.dataValue.startsWith(value), true); document.innerHTML = ''; done(); @@ -604,12 +603,11 @@ describe('DateTime Component', () => { const calendar = dateTime.element.querySelector('.flatpickr-input').widget.calendar; calendar._input.value = '07:00 PM'; calendar._input.dispatchEvent(inputEvent); - const expectedValue = 'T19:00:00'; setTimeout(() => { calendar._input.dispatchEvent(blurEvent); setTimeout(() => { - assert.equal(dateTime.dataValue.includes(expectedValue), true); + assert.equal(dateTime.dataValue.includes('07:00 PM'), true); document.innerHTML = ''; done(); @@ -837,6 +835,23 @@ describe('DateTime Component', () => { assert.equal(dateTimeComponent.widget.settings.readOnly, true); }); + it('should transfer attributes to the actual Flatpickr input', (done) => { + const form = _.cloneDeep(comp3); + const element = document.createElement('div'); + + Formio.createForm(element, form).then(form => { + const dateTime = form.getComponent('dateTime'); + const input = dateTime.element.querySelector('.input'); + + assert.notEqual(input.getAttribute('aria-labelledby'), null); + assert.notEqual(input.getAttribute('aria-required'), null); + assert.notEqual(input.getAttribute('id'), null); + + document.innerHTML = ''; + done(); + }).catch(done); + }); + // it('Should provide correct date in selected timezone after submission', (done) => { // const form = _.cloneDeep(comp9); // const element = document.createElement('div');