@vaadin/date-time-picker 22.0.0-beta2 → 22.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +11 -11
- package/src/vaadin-date-time-picker.js +83 -62
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vaadin/date-time-picker",
|
|
3
|
-
"version": "22.0.
|
|
3
|
+
"version": "22.0.2",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -33,19 +33,19 @@
|
|
|
33
33
|
],
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@polymer/polymer": "^3.0.0",
|
|
36
|
-
"@vaadin/component-base": "22.0.
|
|
37
|
-
"@vaadin/custom-field": "22.0.
|
|
38
|
-
"@vaadin/date-picker": "22.0.
|
|
39
|
-
"@vaadin/field-base": "22.0.
|
|
40
|
-
"@vaadin/time-picker": "22.0.
|
|
41
|
-
"@vaadin/vaadin-lumo-styles": "22.0.
|
|
42
|
-
"@vaadin/vaadin-material-styles": "22.0.
|
|
43
|
-
"@vaadin/vaadin-themable-mixin": "22.0.
|
|
36
|
+
"@vaadin/component-base": "^22.0.2",
|
|
37
|
+
"@vaadin/custom-field": "^22.0.2",
|
|
38
|
+
"@vaadin/date-picker": "^22.0.2",
|
|
39
|
+
"@vaadin/field-base": "^22.0.2",
|
|
40
|
+
"@vaadin/time-picker": "^22.0.2",
|
|
41
|
+
"@vaadin/vaadin-lumo-styles": "^22.0.2",
|
|
42
|
+
"@vaadin/vaadin-material-styles": "^22.0.2",
|
|
43
|
+
"@vaadin/vaadin-themable-mixin": "^22.0.2"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@esm-bundle/chai": "^4.3.4",
|
|
47
|
-
"@vaadin/testing-helpers": "^0.3.
|
|
47
|
+
"@vaadin/testing-helpers": "^0.3.2",
|
|
48
48
|
"sinon": "^9.2.1"
|
|
49
49
|
},
|
|
50
|
-
"gitHead": "
|
|
50
|
+
"gitHead": "df21370c4a655a38eac11f79686021ab3b0887ad"
|
|
51
51
|
}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import './vaadin-date-time-picker-date-picker.js';
|
|
7
7
|
import './vaadin-date-time-picker-time-picker.js';
|
|
8
|
+
import { FlattenedNodesObserver } from '@polymer/polymer/lib/utils/flattened-nodes-observer.js';
|
|
8
9
|
import { html, PolymerElement } from '@polymer/polymer/polymer-element.js';
|
|
9
10
|
import { DisabledMixin } from '@vaadin/component-base/src/disabled-mixin.js';
|
|
10
11
|
import { ElementMixin } from '@vaadin/component-base/src/element-mixin.js';
|
|
@@ -327,6 +328,24 @@ class DateTimePicker extends FieldMixin(SlotMixin(DisabledMixin(ThemableMixin(El
|
|
|
327
328
|
i18n: {
|
|
328
329
|
type: Object,
|
|
329
330
|
value: () => Object.assign({}, datePickerI18nDefaults, timePickerI18nDefaults)
|
|
331
|
+
},
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* The current slotted date picker.
|
|
335
|
+
* @private
|
|
336
|
+
*/
|
|
337
|
+
__datePicker: {
|
|
338
|
+
type: HTMLElement,
|
|
339
|
+
observer: '__datePickerChanged'
|
|
340
|
+
},
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* The current slotted time picker.
|
|
344
|
+
* @private
|
|
345
|
+
*/
|
|
346
|
+
__timePicker: {
|
|
347
|
+
type: HTMLElement,
|
|
348
|
+
observer: '__timePickerChanged'
|
|
330
349
|
}
|
|
331
350
|
};
|
|
332
351
|
}
|
|
@@ -378,6 +397,10 @@ class DateTimePicker extends FieldMixin(SlotMixin(DisabledMixin(ThemableMixin(El
|
|
|
378
397
|
|
|
379
398
|
this.__changeEventHandler = this.__changeEventHandler.bind(this);
|
|
380
399
|
this.__valueChangedEventHandler = this.__valueChangedEventHandler.bind(this);
|
|
400
|
+
|
|
401
|
+
this._observer = new FlattenedNodesObserver(this, (info) => {
|
|
402
|
+
this.__onDomChange(info.addedNodes);
|
|
403
|
+
});
|
|
381
404
|
}
|
|
382
405
|
|
|
383
406
|
/** @protected */
|
|
@@ -390,11 +413,8 @@ class DateTimePicker extends FieldMixin(SlotMixin(DisabledMixin(ThemableMixin(El
|
|
|
390
413
|
}
|
|
391
414
|
});
|
|
392
415
|
|
|
393
|
-
this.
|
|
394
|
-
this.
|
|
395
|
-
|
|
396
|
-
this.$.dateSlot.addEventListener('slotchange', this.__datePickerChanged.bind(this));
|
|
397
|
-
this.$.timeSlot.addEventListener('slotchange', this.__timePickerChanged.bind(this));
|
|
416
|
+
this.__datePicker = this._getDirectSlotChild('date-picker');
|
|
417
|
+
this.__timePicker = this._getDirectSlotChild('time-picker');
|
|
398
418
|
|
|
399
419
|
if (this.autofocus && !this.disabled) {
|
|
400
420
|
window.requestAnimationFrame(() => this.focus());
|
|
@@ -405,14 +425,6 @@ class DateTimePicker extends FieldMixin(SlotMixin(DisabledMixin(ThemableMixin(El
|
|
|
405
425
|
this.ariaTarget = this;
|
|
406
426
|
}
|
|
407
427
|
|
|
408
|
-
/**
|
|
409
|
-
* Attribute used by `FieldMixin` to set accessible name.
|
|
410
|
-
* @protected
|
|
411
|
-
*/
|
|
412
|
-
get _ariaAttr() {
|
|
413
|
-
return 'aria-labelledby';
|
|
414
|
-
}
|
|
415
|
-
|
|
416
428
|
/** @private */
|
|
417
429
|
__filterElements(node) {
|
|
418
430
|
return node.nodeType === Node.ELEMENT_NODE;
|
|
@@ -457,87 +469,98 @@ class DateTimePicker extends FieldMixin(SlotMixin(DisabledMixin(ThemableMixin(El
|
|
|
457
469
|
}
|
|
458
470
|
|
|
459
471
|
/** @private */
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
472
|
+
__onDomChange(addedNodes) {
|
|
473
|
+
addedNodes
|
|
474
|
+
.filter((node) => node.nodeType === Node.ELEMENT_NODE)
|
|
475
|
+
.forEach((node) => {
|
|
476
|
+
const slotAttributeValue = node.getAttribute('slot');
|
|
477
|
+
|
|
478
|
+
if (slotAttributeValue === 'date-picker') {
|
|
479
|
+
this.__datePicker = node;
|
|
480
|
+
} else if (slotAttributeValue === 'time-picker') {
|
|
481
|
+
this.__timePicker = node;
|
|
482
|
+
}
|
|
483
|
+
});
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
/** @private */
|
|
487
|
+
__datePickerChanged(newDatePicker, existingDatePicker) {
|
|
488
|
+
if (!newDatePicker) {
|
|
463
489
|
return;
|
|
464
490
|
}
|
|
465
|
-
if (
|
|
491
|
+
if (existingDatePicker) {
|
|
466
492
|
// Remove an existing date picker
|
|
467
|
-
this.__removeInputListeners(
|
|
468
|
-
|
|
493
|
+
this.__removeInputListeners(existingDatePicker);
|
|
494
|
+
existingDatePicker.remove();
|
|
469
495
|
}
|
|
470
496
|
|
|
471
|
-
this.__addInputListeners(
|
|
472
|
-
this.__datePicker = datePicker;
|
|
497
|
+
this.__addInputListeners(newDatePicker);
|
|
473
498
|
|
|
474
|
-
if (
|
|
499
|
+
if (newDatePicker.__defaultPicker) {
|
|
475
500
|
// Synchronize properties to default date picker
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
this.__syncI18n(
|
|
501
|
+
newDatePicker.placeholder = this.datePlaceholder;
|
|
502
|
+
newDatePicker.invalid = this.invalid;
|
|
503
|
+
newDatePicker.initialPosition = this.initialPosition;
|
|
504
|
+
newDatePicker.showWeekNumbers = this.showWeekNumbers;
|
|
505
|
+
this.__syncI18n(newDatePicker, this, datePickerI18nProps);
|
|
481
506
|
} else {
|
|
482
507
|
// Synchronize properties from slotted date picker
|
|
483
|
-
this.datePlaceholder =
|
|
484
|
-
this.initialPosition =
|
|
485
|
-
this.showWeekNumbers =
|
|
486
|
-
this.__syncI18n(this,
|
|
508
|
+
this.datePlaceholder = newDatePicker.placeholder;
|
|
509
|
+
this.initialPosition = newDatePicker.initialPosition;
|
|
510
|
+
this.showWeekNumbers = newDatePicker.showWeekNumbers;
|
|
511
|
+
this.__syncI18n(this, newDatePicker, datePickerI18nProps);
|
|
487
512
|
}
|
|
488
513
|
|
|
489
514
|
// min and max are always synchronized from date time picker (host) to inner fields because time picker
|
|
490
515
|
// min and max need to be dynamically set depending on currently selected date instead of simple propagation
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
516
|
+
newDatePicker.min = this.__formatDateISO(this.__minDateTime, this.__defaultDateMinMaxValue);
|
|
517
|
+
newDatePicker.max = this.__formatDateISO(this.__maxDateTime, this.__defaultDateMinMaxValue);
|
|
518
|
+
newDatePicker.required = this.required;
|
|
519
|
+
newDatePicker.disabled = this.disabled;
|
|
520
|
+
newDatePicker.readonly = this.readonly;
|
|
521
|
+
newDatePicker.autoOpenDisabled = this.autoOpenDisabled;
|
|
497
522
|
|
|
498
523
|
// Disable default internal validation for the component
|
|
499
|
-
|
|
500
|
-
|
|
524
|
+
newDatePicker.validate = () => {};
|
|
525
|
+
newDatePicker._validateInput = () => {};
|
|
501
526
|
}
|
|
502
527
|
|
|
503
528
|
/** @private */
|
|
504
|
-
__timePickerChanged() {
|
|
505
|
-
|
|
506
|
-
if (this.__timePicker === timePicker || !timePicker) {
|
|
529
|
+
__timePickerChanged(newTimePicker, existingTimePicker) {
|
|
530
|
+
if (!newTimePicker) {
|
|
507
531
|
return;
|
|
508
532
|
}
|
|
509
|
-
if (
|
|
533
|
+
if (existingTimePicker) {
|
|
510
534
|
// Remove an existing time picker
|
|
511
|
-
this.__removeInputListeners(
|
|
512
|
-
|
|
535
|
+
this.__removeInputListeners(existingTimePicker);
|
|
536
|
+
existingTimePicker.remove();
|
|
513
537
|
}
|
|
514
538
|
|
|
515
|
-
this.__addInputListeners(
|
|
516
|
-
this.__timePicker = timePicker;
|
|
539
|
+
this.__addInputListeners(newTimePicker);
|
|
517
540
|
|
|
518
|
-
if (
|
|
541
|
+
if (newTimePicker.__defaultPicker) {
|
|
519
542
|
// Synchronize properties to default time picker
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
this.__syncI18n(
|
|
543
|
+
newTimePicker.placeholder = this.timePlaceholder;
|
|
544
|
+
newTimePicker.step = this.step;
|
|
545
|
+
newTimePicker.invalid = this.invalid;
|
|
546
|
+
this.__syncI18n(newTimePicker, this, timePickerI18nProps);
|
|
524
547
|
} else {
|
|
525
548
|
// Synchronize properties from slotted time picker
|
|
526
|
-
this.timePlaceholder =
|
|
527
|
-
this.step =
|
|
528
|
-
this.__syncI18n(this,
|
|
549
|
+
this.timePlaceholder = newTimePicker.placeholder;
|
|
550
|
+
this.step = newTimePicker.step;
|
|
551
|
+
this.__syncI18n(this, newTimePicker, timePickerI18nProps);
|
|
529
552
|
}
|
|
530
553
|
|
|
531
554
|
// min and max are always synchronized from parent to slotted because time picker min and max
|
|
532
555
|
// need to be dynamically set depending on currently selected date instead of simple propagation
|
|
533
556
|
this.__updateTimePickerMinMax();
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
557
|
+
newTimePicker.required = this.required;
|
|
558
|
+
newTimePicker.disabled = this.disabled;
|
|
559
|
+
newTimePicker.readonly = this.readonly;
|
|
560
|
+
newTimePicker.autoOpenDisabled = this.autoOpenDisabled;
|
|
538
561
|
|
|
539
562
|
// Disable default internal validation for the component
|
|
540
|
-
|
|
563
|
+
newTimePicker.validate = () => {};
|
|
541
564
|
}
|
|
542
565
|
|
|
543
566
|
/** @private */
|
|
@@ -569,12 +592,10 @@ class DateTimePicker extends FieldMixin(SlotMixin(DisabledMixin(ThemableMixin(El
|
|
|
569
592
|
|
|
570
593
|
/** @private */
|
|
571
594
|
__i18nChanged(changeRecord) {
|
|
572
|
-
this.__datePickerChanged();
|
|
573
595
|
if (this.__datePicker) {
|
|
574
596
|
this.__datePicker.set(changeRecord.path, changeRecord.value);
|
|
575
597
|
}
|
|
576
598
|
|
|
577
|
-
this.__timePickerChanged();
|
|
578
599
|
if (this.__timePicker) {
|
|
579
600
|
this.__timePicker.set(changeRecord.path, changeRecord.value);
|
|
580
601
|
}
|