@vaadin/crud 23.1.0-alpha2 → 23.1.0-alpha3
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 +13 -13
- package/src/vaadin-crud.js +176 -148
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vaadin/crud",
|
|
3
|
-
"version": "23.1.0-
|
|
3
|
+
"version": "23.1.0-alpha3",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -35,22 +35,22 @@
|
|
|
35
35
|
"dependencies": {
|
|
36
36
|
"@open-wc/dedupe-mixin": "^1.3.0",
|
|
37
37
|
"@polymer/polymer": "^3.0.0",
|
|
38
|
-
"@vaadin/button": "23.1.0-
|
|
39
|
-
"@vaadin/component-base": "23.1.0-
|
|
40
|
-
"@vaadin/confirm-dialog": "23.1.0-
|
|
41
|
-
"@vaadin/dialog": "23.1.0-
|
|
42
|
-
"@vaadin/form-layout": "23.1.0-
|
|
43
|
-
"@vaadin/grid": "23.1.0-
|
|
44
|
-
"@vaadin/text-field": "23.1.0-
|
|
38
|
+
"@vaadin/button": "23.1.0-alpha3",
|
|
39
|
+
"@vaadin/component-base": "23.1.0-alpha3",
|
|
40
|
+
"@vaadin/confirm-dialog": "23.1.0-alpha3",
|
|
41
|
+
"@vaadin/dialog": "23.1.0-alpha3",
|
|
42
|
+
"@vaadin/form-layout": "23.1.0-alpha3",
|
|
43
|
+
"@vaadin/grid": "23.1.0-alpha3",
|
|
44
|
+
"@vaadin/text-field": "23.1.0-alpha3",
|
|
45
45
|
"@vaadin/vaadin-license-checker": "^2.1.0",
|
|
46
|
-
"@vaadin/vaadin-lumo-styles": "23.1.0-
|
|
47
|
-
"@vaadin/vaadin-material-styles": "23.1.0-
|
|
48
|
-
"@vaadin/vaadin-themable-mixin": "23.1.0-
|
|
46
|
+
"@vaadin/vaadin-lumo-styles": "23.1.0-alpha3",
|
|
47
|
+
"@vaadin/vaadin-material-styles": "23.1.0-alpha3",
|
|
48
|
+
"@vaadin/vaadin-themable-mixin": "23.1.0-alpha3"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
51
|
"@esm-bundle/chai": "^4.3.4",
|
|
52
52
|
"@vaadin/testing-helpers": "^0.3.2",
|
|
53
|
-
"sinon": "^
|
|
53
|
+
"sinon": "^13.0.2"
|
|
54
54
|
},
|
|
55
|
-
"gitHead": "
|
|
55
|
+
"gitHead": "8c9e64e8dfa158dd52a9bf6da351ff038c88ca85"
|
|
56
56
|
}
|
package/src/vaadin-crud.js
CHANGED
|
@@ -19,12 +19,6 @@ import { MediaQueryController } from '@vaadin/component-base/src/media-query-con
|
|
|
19
19
|
import { SlotMixin } from '@vaadin/component-base/src/slot-mixin.js';
|
|
20
20
|
import { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';
|
|
21
21
|
|
|
22
|
-
const HOST_PROPS = {
|
|
23
|
-
save: [{ attr: 'disabled', prop: '__isDirty', parseProp: '__isSaveBtnDisabled' }, { prop: 'i18n.saveItem' }],
|
|
24
|
-
cancel: [{ prop: 'i18n.cancel' }],
|
|
25
|
-
delete: [{ attr: 'hidden', prop: '__isNew', parseProp: (prop) => prop }, { prop: 'i18n.deleteItem' }]
|
|
26
|
-
};
|
|
27
|
-
|
|
28
22
|
/**
|
|
29
23
|
* `<vaadin-crud>` is a Web Component for [CRUD](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete) operations.
|
|
30
24
|
*
|
|
@@ -324,7 +318,7 @@ class Crud extends SlotMixin(ControllerMixin(ElementMixin(ThemableMixin(PolymerE
|
|
|
324
318
|
*/
|
|
325
319
|
_grid: {
|
|
326
320
|
type: HTMLElement,
|
|
327
|
-
observer: '
|
|
321
|
+
observer: '__gridChanged'
|
|
328
322
|
},
|
|
329
323
|
|
|
330
324
|
/**
|
|
@@ -333,7 +327,7 @@ class Crud extends SlotMixin(ControllerMixin(ElementMixin(ThemableMixin(PolymerE
|
|
|
333
327
|
*/
|
|
334
328
|
_form: {
|
|
335
329
|
type: HTMLElement,
|
|
336
|
-
observer: '
|
|
330
|
+
observer: '__formChanged'
|
|
337
331
|
},
|
|
338
332
|
|
|
339
333
|
/**
|
|
@@ -342,7 +336,7 @@ class Crud extends SlotMixin(ControllerMixin(ElementMixin(ThemableMixin(PolymerE
|
|
|
342
336
|
*/
|
|
343
337
|
_saveButton: {
|
|
344
338
|
type: HTMLElement,
|
|
345
|
-
observer: '
|
|
339
|
+
observer: '__saveButtonChanged'
|
|
346
340
|
},
|
|
347
341
|
|
|
348
342
|
/**
|
|
@@ -351,7 +345,7 @@ class Crud extends SlotMixin(ControllerMixin(ElementMixin(ThemableMixin(PolymerE
|
|
|
351
345
|
*/
|
|
352
346
|
_deleteButton: {
|
|
353
347
|
type: HTMLElement,
|
|
354
|
-
observer: '
|
|
348
|
+
observer: '__deleteButtonChanged'
|
|
355
349
|
},
|
|
356
350
|
|
|
357
351
|
/**
|
|
@@ -360,7 +354,7 @@ class Crud extends SlotMixin(ControllerMixin(ElementMixin(ThemableMixin(PolymerE
|
|
|
360
354
|
*/
|
|
361
355
|
_cancelButton: {
|
|
362
356
|
type: HTMLElement,
|
|
363
|
-
observer: '
|
|
357
|
+
observer: '__cancelButtonChanged'
|
|
364
358
|
},
|
|
365
359
|
|
|
366
360
|
/**
|
|
@@ -378,7 +372,7 @@ class Crud extends SlotMixin(ControllerMixin(ElementMixin(ThemableMixin(PolymerE
|
|
|
378
372
|
items: {
|
|
379
373
|
type: Array,
|
|
380
374
|
notify: true,
|
|
381
|
-
observer: '
|
|
375
|
+
observer: '__itemsChanged'
|
|
382
376
|
},
|
|
383
377
|
|
|
384
378
|
/**
|
|
@@ -387,7 +381,7 @@ class Crud extends SlotMixin(ControllerMixin(ElementMixin(ThemableMixin(PolymerE
|
|
|
387
381
|
*/
|
|
388
382
|
editedItem: {
|
|
389
383
|
type: Object,
|
|
390
|
-
observer: '
|
|
384
|
+
observer: '__editedItemChanged',
|
|
391
385
|
notify: true
|
|
392
386
|
},
|
|
393
387
|
|
|
@@ -405,7 +399,7 @@ class Crud extends SlotMixin(ControllerMixin(ElementMixin(ThemableMixin(PolymerE
|
|
|
405
399
|
type: String,
|
|
406
400
|
value: '',
|
|
407
401
|
reflectToAttribute: true,
|
|
408
|
-
observer: '
|
|
402
|
+
observer: '__editorPositionChanged'
|
|
409
403
|
},
|
|
410
404
|
|
|
411
405
|
/**
|
|
@@ -434,7 +428,7 @@ class Crud extends SlotMixin(ControllerMixin(ElementMixin(ThemableMixin(PolymerE
|
|
|
434
428
|
*/
|
|
435
429
|
dataProvider: {
|
|
436
430
|
type: Function,
|
|
437
|
-
observer: '
|
|
431
|
+
observer: '__dataProviderChanged'
|
|
438
432
|
},
|
|
439
433
|
|
|
440
434
|
/**
|
|
@@ -482,7 +476,7 @@ class Crud extends SlotMixin(ControllerMixin(ElementMixin(ThemableMixin(PolymerE
|
|
|
482
476
|
type: Boolean,
|
|
483
477
|
reflectToAttribute: true,
|
|
484
478
|
notify: true,
|
|
485
|
-
observer: '
|
|
479
|
+
observer: '__editorOpenedChanged'
|
|
486
480
|
},
|
|
487
481
|
|
|
488
482
|
/**
|
|
@@ -607,17 +601,13 @@ class Crud extends SlotMixin(ControllerMixin(ElementMixin(ThemableMixin(PolymerE
|
|
|
607
601
|
|
|
608
602
|
static get observers() {
|
|
609
603
|
return [
|
|
610
|
-
'
|
|
611
|
-
'
|
|
612
|
-
'
|
|
613
|
-
'
|
|
614
|
-
'
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
HOST_PROPS.cancel.map(({ prop }) => prop).join(',') +
|
|
618
|
-
',' +
|
|
619
|
-
HOST_PROPS.delete.map(({ prop }) => prop).join(',') +
|
|
620
|
-
')'
|
|
604
|
+
'__headerPropsChanged(_headerNode, __isNew, i18n.newItem, i18n.editItem)',
|
|
605
|
+
'__formPropsChanged(_form, _theme, include, exclude)',
|
|
606
|
+
'__i18nChanged(i18n, _grid)',
|
|
607
|
+
'__editOnClickChanged(editOnClick, _grid)',
|
|
608
|
+
'__saveButtonPropsChanged(_saveButton, i18n.saveItem, __isDirty)',
|
|
609
|
+
'__cancelButtonPropsChanged(_cancelButton, i18n.cancel)',
|
|
610
|
+
'__deleteButtonPropsChanged(_deleteButton, i18n.deleteItem, __isNew)'
|
|
621
611
|
];
|
|
622
612
|
}
|
|
623
613
|
|
|
@@ -632,6 +622,11 @@ class Crud extends SlotMixin(ControllerMixin(ElementMixin(ThemableMixin(PolymerE
|
|
|
632
622
|
}
|
|
633
623
|
}
|
|
634
624
|
|
|
625
|
+
/** @private */
|
|
626
|
+
static _isValidEditorPosition(editorPosition) {
|
|
627
|
+
return ['bottom', 'aside'].indexOf(editorPosition) != -1;
|
|
628
|
+
}
|
|
629
|
+
|
|
635
630
|
/** @protected */
|
|
636
631
|
get slots() {
|
|
637
632
|
// NOTE: order in which the toolbar buttons are listed matters.
|
|
@@ -674,18 +669,16 @@ class Crud extends SlotMixin(ControllerMixin(ElementMixin(ThemableMixin(PolymerE
|
|
|
674
669
|
/** @protected */
|
|
675
670
|
ready() {
|
|
676
671
|
super.ready();
|
|
677
|
-
this.
|
|
678
|
-
this.
|
|
679
|
-
this.
|
|
680
|
-
this.
|
|
681
|
-
this.
|
|
682
|
-
this.
|
|
683
|
-
this.
|
|
672
|
+
this.__save = this.__save.bind(this);
|
|
673
|
+
this.__cancel = this.__cancel.bind(this);
|
|
674
|
+
this.__delete = this.__delete.bind(this);
|
|
675
|
+
this.__onFormChange = this.__onFormChange.bind(this);
|
|
676
|
+
this.__onGridEdit = this.__onGridEdit.bind(this);
|
|
677
|
+
this.__onGridSizeChanged = this.__onGridSizeChanged.bind(this);
|
|
678
|
+
this.__onGridActiveItemChanged = this.__onGridActiveItemChanged.bind(this);
|
|
684
679
|
this._grid = this.$.grid;
|
|
685
|
-
this.$.dialog.$.overlay.addEventListener('vaadin-overlay-outside-click', this.
|
|
686
|
-
this.$.dialog.$.overlay.addEventListener('vaadin-overlay-escape-press', this.
|
|
687
|
-
// Initialize the default buttons
|
|
688
|
-
this.__propagateHostAttributes();
|
|
680
|
+
this.$.dialog.$.overlay.addEventListener('vaadin-overlay-outside-click', this.__cancel);
|
|
681
|
+
this.$.dialog.$.overlay.addEventListener('vaadin-overlay-escape-press', this.__cancel);
|
|
689
682
|
|
|
690
683
|
this.addController(
|
|
691
684
|
new MediaQueryController(this._fullscreenMediaQuery, (matches) => {
|
|
@@ -694,31 +687,35 @@ class Crud extends SlotMixin(ControllerMixin(ElementMixin(ThemableMixin(PolymerE
|
|
|
694
687
|
);
|
|
695
688
|
}
|
|
696
689
|
|
|
697
|
-
/**
|
|
690
|
+
/**
|
|
691
|
+
* @param {boolean} isDirty
|
|
692
|
+
* @private
|
|
693
|
+
*/
|
|
698
694
|
__isSaveBtnDisabled(isDirty) {
|
|
699
695
|
// Used instead of isDirty property binding in order to enable overriding of the behavior
|
|
700
696
|
// by overriding the method (i.e. from Flow component)
|
|
701
697
|
return !isDirty;
|
|
702
698
|
}
|
|
703
699
|
|
|
704
|
-
/**
|
|
705
|
-
|
|
700
|
+
/**
|
|
701
|
+
* @param {HTMLElement | undefined} headerNode
|
|
702
|
+
* @param {boolean} isNew
|
|
703
|
+
* @param {string} i18nNewItem
|
|
704
|
+
* @param {string} i18nEditItem
|
|
705
|
+
* @private
|
|
706
|
+
*/
|
|
707
|
+
__headerPropsChanged(headerNode, isNew, i18nNewItem, i18nEditItem) {
|
|
706
708
|
if (headerNode) {
|
|
707
|
-
headerNode.textContent = isNew ?
|
|
709
|
+
headerNode.textContent = isNew ? i18nNewItem : i18nEditItem;
|
|
708
710
|
}
|
|
709
711
|
}
|
|
710
712
|
|
|
711
|
-
/**
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
}
|
|
718
|
-
}
|
|
719
|
-
|
|
720
|
-
/** @private */
|
|
721
|
-
__onI18Change(i18n, grid) {
|
|
713
|
+
/**
|
|
714
|
+
* @param {CrudI18n} i18n
|
|
715
|
+
* @param {CrudGrid | Grid} grid
|
|
716
|
+
* @private
|
|
717
|
+
*/
|
|
718
|
+
__i18nChanged(i18n, grid) {
|
|
722
719
|
if (!grid) {
|
|
723
720
|
return;
|
|
724
721
|
}
|
|
@@ -731,7 +728,7 @@ class Crud extends SlotMixin(ControllerMixin(ElementMixin(ThemableMixin(PolymerE
|
|
|
731
728
|
}
|
|
732
729
|
|
|
733
730
|
/** @private */
|
|
734
|
-
|
|
731
|
+
__editorPositionChanged(editorPosition) {
|
|
735
732
|
if (Crud._isValidEditorPosition(editorPosition)) {
|
|
736
733
|
return;
|
|
737
734
|
}
|
|
@@ -739,16 +736,11 @@ class Crud extends SlotMixin(ControllerMixin(ElementMixin(ThemableMixin(PolymerE
|
|
|
739
736
|
}
|
|
740
737
|
|
|
741
738
|
/** @private */
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
}
|
|
745
|
-
|
|
746
|
-
/** @private */
|
|
747
|
-
__onOpenedChanged(opened, old) {
|
|
748
|
-
if (!opened && old) {
|
|
739
|
+
__editorOpenedChanged(opened, oldOpened) {
|
|
740
|
+
if (!opened && oldOpened) {
|
|
749
741
|
this.__closeEditor();
|
|
750
742
|
} else {
|
|
751
|
-
this.
|
|
743
|
+
this.__formChanged(this._form);
|
|
752
744
|
}
|
|
753
745
|
|
|
754
746
|
if (opened) {
|
|
@@ -851,9 +843,9 @@ class Crud extends SlotMixin(ControllerMixin(ElementMixin(ThemableMixin(PolymerE
|
|
|
851
843
|
|
|
852
844
|
if (slotAttributeValue == 'grid') {
|
|
853
845
|
// Force to remove listener on previous grid first
|
|
854
|
-
this.
|
|
846
|
+
this.__editOnClickChanged(false, this._grid);
|
|
855
847
|
this._grid = node;
|
|
856
|
-
this.
|
|
848
|
+
this.__editOnClickChanged(this.editOnClick, this._grid);
|
|
857
849
|
} else if (slotAttributeValue == 'form') {
|
|
858
850
|
this._form = node;
|
|
859
851
|
} else if (slotAttributeValue.indexOf('button') >= 0) {
|
|
@@ -863,155 +855,191 @@ class Crud extends SlotMixin(ControllerMixin(ElementMixin(ThemableMixin(PolymerE
|
|
|
863
855
|
this._headerNode = node;
|
|
864
856
|
}
|
|
865
857
|
});
|
|
858
|
+
|
|
859
|
+
if (this.editorOpened) {
|
|
860
|
+
this.__ensureChildren();
|
|
861
|
+
}
|
|
866
862
|
}
|
|
867
863
|
|
|
868
864
|
/** @private */
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
this.__confirmBeforeChangingEditedItem(
|
|
865
|
+
__onGridEdit(event) {
|
|
866
|
+
event.stopPropagation();
|
|
867
|
+
this.__confirmBeforeChangingEditedItem(event.detail.item);
|
|
872
868
|
}
|
|
873
869
|
|
|
874
870
|
/** @private */
|
|
875
|
-
|
|
871
|
+
__onFormChange() {
|
|
876
872
|
this.__isDirty = true;
|
|
877
873
|
}
|
|
878
874
|
|
|
879
875
|
/** @private */
|
|
880
|
-
|
|
876
|
+
__onGridSizeChanged() {
|
|
881
877
|
this._setSize(this._grid.size);
|
|
882
878
|
}
|
|
883
879
|
|
|
884
|
-
/**
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
880
|
+
/**
|
|
881
|
+
* @param {CrudGrid | Grid} grid
|
|
882
|
+
* @param {CrudGrid | Grid | undefined} oldGrid
|
|
883
|
+
* @private
|
|
884
|
+
*/
|
|
885
|
+
__gridChanged(grid, oldGrid) {
|
|
886
|
+
if (oldGrid) {
|
|
887
|
+
oldGrid.removeEventListener('edit', this.__onGridEdit);
|
|
888
|
+
oldGrid.removeEventListener('size-changed', this.__onGridSizeChanged);
|
|
889
889
|
}
|
|
890
890
|
if (this.dataProvider) {
|
|
891
|
-
this.
|
|
891
|
+
this.__dataProviderChanged(this.dataProvider);
|
|
892
892
|
}
|
|
893
893
|
if (this.items) {
|
|
894
|
-
this.
|
|
894
|
+
this.__itemsChanged(this.items);
|
|
895
895
|
}
|
|
896
896
|
if (this.editedItem) {
|
|
897
|
-
this.
|
|
897
|
+
this.__editedItemChanged(this.editedItem);
|
|
898
898
|
}
|
|
899
|
-
grid.addEventListener('edit', this.
|
|
900
|
-
grid.addEventListener('size-changed', this.
|
|
901
|
-
this.
|
|
899
|
+
grid.addEventListener('edit', this.__onGridEdit);
|
|
900
|
+
grid.addEventListener('size-changed', this.__onGridSizeChanged);
|
|
901
|
+
this.__onGridSizeChanged();
|
|
902
902
|
}
|
|
903
903
|
|
|
904
|
-
/**
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
904
|
+
/**
|
|
905
|
+
* @param {HTMLElement | undefined | null} form
|
|
906
|
+
* @param {HTMLElement | undefined | null} oldForm
|
|
907
|
+
* @private
|
|
908
|
+
*/
|
|
909
|
+
__formChanged(form, oldForm) {
|
|
910
|
+
if (oldForm && oldForm.parentElement) {
|
|
911
|
+
oldForm.parentElement.removeChild(oldForm);
|
|
912
|
+
oldForm.removeEventListener('change', this.__onFormChange);
|
|
913
|
+
oldForm.removeEventListener('input', this.__onFormChange);
|
|
910
914
|
}
|
|
911
915
|
if (!form) {
|
|
912
916
|
return;
|
|
913
917
|
}
|
|
914
918
|
if (this.items) {
|
|
915
|
-
this.
|
|
919
|
+
this.__itemsChanged(this.items);
|
|
916
920
|
}
|
|
917
921
|
if (this.editedItem) {
|
|
918
|
-
this.
|
|
922
|
+
this.__editedItemChanged(this.editedItem);
|
|
919
923
|
}
|
|
920
|
-
form.addEventListener('change', this.
|
|
921
|
-
form.addEventListener('input', this.
|
|
922
|
-
}
|
|
923
|
-
|
|
924
|
-
/** @private */
|
|
925
|
-
__onSaveButtonChange(save, old) {
|
|
926
|
-
this.__setupSlottedButton(save, old, this.__saveBound);
|
|
924
|
+
form.addEventListener('change', this.__onFormChange);
|
|
925
|
+
form.addEventListener('input', this.__onFormChange);
|
|
927
926
|
}
|
|
928
927
|
|
|
929
|
-
/**
|
|
930
|
-
|
|
931
|
-
|
|
928
|
+
/**
|
|
929
|
+
* @param {HTMLElement | undefined} form
|
|
930
|
+
* @param {string} theme
|
|
931
|
+
* @param {string | string[] | undefined} include
|
|
932
|
+
* @param {string | RegExp} exclude
|
|
933
|
+
* @private
|
|
934
|
+
*/
|
|
935
|
+
__formPropsChanged(form, theme, include, exclude) {
|
|
936
|
+
if (form) {
|
|
937
|
+
form.include = include;
|
|
938
|
+
form.exclude = exclude;
|
|
939
|
+
form.setAttribute('theme', theme);
|
|
940
|
+
}
|
|
932
941
|
}
|
|
933
942
|
|
|
934
|
-
/**
|
|
935
|
-
|
|
936
|
-
|
|
943
|
+
/**
|
|
944
|
+
* @param {HTMLElement} saveButton
|
|
945
|
+
* @param {HTMLElement | undefined} oldSaveButton
|
|
946
|
+
* @private
|
|
947
|
+
*/
|
|
948
|
+
__saveButtonChanged(saveButton, oldSaveButton) {
|
|
949
|
+
this.__setupSlottedButton(saveButton, oldSaveButton, this.__save);
|
|
937
950
|
}
|
|
938
951
|
|
|
939
|
-
/**
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
952
|
+
/**
|
|
953
|
+
* @param {HTMLElement | undefined} saveButton
|
|
954
|
+
* @param {string} i18nLabel
|
|
955
|
+
* @param {boolean} isDirty
|
|
956
|
+
* @private
|
|
957
|
+
*/
|
|
958
|
+
__saveButtonPropsChanged(saveButton, i18nLabel, isDirty) {
|
|
959
|
+
if (saveButton) {
|
|
960
|
+
saveButton.toggleAttribute('disabled', this.__isSaveBtnDisabled(isDirty));
|
|
961
|
+
saveButton.textContent = i18nLabel;
|
|
943
962
|
}
|
|
944
|
-
|
|
945
|
-
slottedButton.addEventListener('click', clickListener);
|
|
946
963
|
}
|
|
947
964
|
|
|
948
|
-
/**
|
|
949
|
-
|
|
950
|
-
|
|
965
|
+
/**
|
|
966
|
+
* @param {HTMLElement} deleteButton
|
|
967
|
+
* @param {HTMLElement | undefined} oldDeleteButton
|
|
968
|
+
* @private
|
|
969
|
+
*/
|
|
970
|
+
__deleteButtonChanged(deleteButton, oldDeleteButton) {
|
|
971
|
+
this.__setupSlottedButton(deleteButton, oldDeleteButton, this.__delete);
|
|
951
972
|
}
|
|
952
973
|
|
|
953
|
-
/**
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
974
|
+
/**
|
|
975
|
+
* @param {HTMLElement | undefined} deleteButton
|
|
976
|
+
* @param {string} i18nLabel
|
|
977
|
+
* @param {boolean} isNew
|
|
978
|
+
* @private
|
|
979
|
+
*/
|
|
980
|
+
__deleteButtonPropsChanged(deleteButton, i18nLabel, isNew) {
|
|
981
|
+
if (deleteButton) {
|
|
982
|
+
deleteButton.textContent = i18nLabel;
|
|
983
|
+
deleteButton.toggleAttribute('hidden', isNew);
|
|
984
|
+
}
|
|
958
985
|
}
|
|
959
986
|
|
|
960
|
-
/**
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
} else {
|
|
969
|
-
if (typeof parseProp === 'string') {
|
|
970
|
-
this._setOrToggleAttribute(attr, this[parseProp](this[prop]), button);
|
|
971
|
-
return;
|
|
972
|
-
}
|
|
987
|
+
/**
|
|
988
|
+
* @param {HTMLElement} cancelButton
|
|
989
|
+
* @param {HTMLElement | undefined} oldCancelButton
|
|
990
|
+
* @private
|
|
991
|
+
*/
|
|
992
|
+
__cancelButtonChanged(cancelButton, oldCancelButton) {
|
|
993
|
+
this.__setupSlottedButton(cancelButton, oldCancelButton, this.__cancel);
|
|
994
|
+
}
|
|
973
995
|
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
996
|
+
/**
|
|
997
|
+
* @param {HTMLElement | undefined} saveButton
|
|
998
|
+
* @param {string} i18nLabel
|
|
999
|
+
* @private
|
|
1000
|
+
*/
|
|
1001
|
+
__cancelButtonPropsChanged(cancelButton, i18nLabel) {
|
|
1002
|
+
if (cancelButton) {
|
|
1003
|
+
cancelButton.textContent = i18nLabel;
|
|
977
1004
|
}
|
|
978
1005
|
}
|
|
979
1006
|
|
|
980
|
-
/**
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
1007
|
+
/**
|
|
1008
|
+
* @param {HTMLElement} newButton
|
|
1009
|
+
* @param {HTMLElement | undefined | null} oldButton
|
|
1010
|
+
* @param {Function} clickListener
|
|
1011
|
+
* @private
|
|
1012
|
+
*/
|
|
1013
|
+
__setupSlottedButton(newButton, oldButton, clickListener) {
|
|
1014
|
+
if (oldButton && oldButton.parentElement) {
|
|
1015
|
+
oldButton.parentElement.removeChild(oldButton);
|
|
984
1016
|
}
|
|
985
1017
|
|
|
986
|
-
|
|
987
|
-
node.setAttribute(name, typeof value === 'boolean' ? '' : value);
|
|
988
|
-
} else {
|
|
989
|
-
node.removeAttribute(name);
|
|
990
|
-
}
|
|
1018
|
+
newButton.addEventListener('click', clickListener);
|
|
991
1019
|
}
|
|
992
1020
|
|
|
993
1021
|
/** @private */
|
|
994
|
-
|
|
1022
|
+
__dataProviderChanged(dataProvider) {
|
|
995
1023
|
if (this._grid) {
|
|
996
1024
|
this._grid.dataProvider = this.__createDataProviderProxy(dataProvider);
|
|
997
1025
|
}
|
|
998
1026
|
}
|
|
999
1027
|
|
|
1000
1028
|
/** @private */
|
|
1001
|
-
|
|
1029
|
+
__editOnClickChanged(editOnClick, _grid) {
|
|
1002
1030
|
if (!_grid) {
|
|
1003
1031
|
return;
|
|
1004
1032
|
}
|
|
1005
1033
|
|
|
1006
|
-
if (
|
|
1007
|
-
_grid.addEventListener('active-item-changed', this.
|
|
1034
|
+
if (editOnClick) {
|
|
1035
|
+
_grid.addEventListener('active-item-changed', this.__onGridActiveItemChanged);
|
|
1008
1036
|
} else {
|
|
1009
|
-
_grid.removeEventListener('active-item-changed', this.
|
|
1037
|
+
_grid.removeEventListener('active-item-changed', this.__onGridActiveItemChanged);
|
|
1010
1038
|
}
|
|
1011
1039
|
}
|
|
1012
1040
|
|
|
1013
1041
|
/** @private */
|
|
1014
|
-
|
|
1042
|
+
__onGridActiveItemChanged(event) {
|
|
1015
1043
|
const item = event.detail.value;
|
|
1016
1044
|
if (this.editorOpened && this.__isDirty) {
|
|
1017
1045
|
this.__confirmBeforeChangingEditedItem(item);
|
|
@@ -1075,7 +1103,7 @@ class Crud extends SlotMixin(ControllerMixin(ElementMixin(ThemableMixin(PolymerE
|
|
|
1075
1103
|
}
|
|
1076
1104
|
|
|
1077
1105
|
/** @private */
|
|
1078
|
-
|
|
1106
|
+
__itemsChanged(items) {
|
|
1079
1107
|
if (this.items && this.items[0]) {
|
|
1080
1108
|
this.__model = items[0];
|
|
1081
1109
|
}
|
|
@@ -1086,7 +1114,7 @@ class Crud extends SlotMixin(ControllerMixin(ElementMixin(ThemableMixin(PolymerE
|
|
|
1086
1114
|
}
|
|
1087
1115
|
|
|
1088
1116
|
/** @private */
|
|
1089
|
-
|
|
1117
|
+
__editedItemChanged(item) {
|
|
1090
1118
|
if (!this._form) {
|
|
1091
1119
|
return;
|
|
1092
1120
|
}
|