@dile/crud 2.1.11 → 2.2.0

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.
Files changed (51) hide show
  1. package/components/action/crud-actions.js +3 -1
  2. package/components/action/crud-delete-action.js +3 -1
  3. package/components/action/crud-single-actions.js +3 -1
  4. package/components/ajax/ajax.js +3 -1
  5. package/components/ajax-change/ajax-change.js +3 -1
  6. package/components/ajax-form/ajax-form.js +3 -1
  7. package/components/ajax-form/confirmed-ajax-form.js +3 -1
  8. package/components/ajax-select-change/ajax-select-change.js +3 -1
  9. package/components/ajax-select-crud/__screenshots__/ajax-select-crud-overlay.spec.js/dile-ajax-select-crud-overlay-Selecting-a-result--no-extra-click-required--opens-the-popup-as-soon-as-results-load-and-lets-the-user-pick-without-a-second-click-1.png +0 -0
  10. package/components/ajax-select-crud/__screenshots__/ajax-select-crud-overlay.spec.js/dile-ajax-select-crud-overlay-Uses-axios-instead-of-fetch-fetches-the-initial-value-display-text-through-axios-1.png +0 -0
  11. package/components/ajax-select-crud/__screenshots__/ajax-select-crud-overlay.spec.js/dile-ajax-select-crud-overlay-Uses-axios-instead-of-fetch-requests-through-window-axiosInstance-get--not-the-native-fetch-API-1.png +0 -0
  12. package/components/ajax-select-crud/__screenshots__/zzdebug.spec.js/debug-debug-opened-timing-1.png +0 -0
  13. package/components/ajax-select-crud/ajax-select-crud-overlay.js +5 -0
  14. package/components/ajax-select-crud/ajax-select-crud-overlay.spec.js +166 -0
  15. package/components/ajax-select-crud/ajax-select-crud.js +3 -1
  16. package/components/ajax-select-crud/index.js +2 -1
  17. package/components/ajax-select-crud/src/DileAjaxSelectCrudOverlay.js +80 -0
  18. package/components/ajax-switch/ajax-switch.js +3 -1
  19. package/components/crud/crud-single.js +3 -1
  20. package/components/crud/crud.js +3 -1
  21. package/components/crud/delete-action.js +3 -1
  22. package/components/detail/crud-detail.js +3 -1
  23. package/components/file-uploader/file-uploader-form.js +3 -1
  24. package/components/file-uploader/file-uploader.js +3 -1
  25. package/components/image-uploader/image-uploader-form.js +3 -1
  26. package/components/image-uploader/image-uploader.js +3 -1
  27. package/components/insert/crud-insert.js +3 -1
  28. package/components/insert/modal-crud-insert.js +3 -1
  29. package/components/item-delete/crud-item-delete.js +3 -1
  30. package/components/item-restore/crud-item-restore.js +3 -1
  31. package/components/list/crud-list-item.js +3 -1
  32. package/components/list/crud-list-pagination-links.js +3 -1
  33. package/components/list/crud-list-service.js +3 -1
  34. package/components/list/crud-list.js +3 -1
  35. package/components/list/crud-select-all.js +3 -1
  36. package/components/many-relation/many-relation.js +3 -1
  37. package/components/relation-checker/relation-checker-item.js +3 -1
  38. package/components/relation-checker/relation-checker.js +3 -1
  39. package/components/single/crud-single.js +3 -1
  40. package/components/ui/crud-filters-form.js +3 -1
  41. package/components/ui/crud-filters-list-item.js +3 -1
  42. package/components/ui/crud-filters-list.js +3 -1
  43. package/components/ui/crud-filters.js +3 -1
  44. package/components/ui/crud-list-options.js +3 -1
  45. package/components/ui/crud-page-size-select.js +3 -1
  46. package/components/ui/crud-page-size.js +3 -1
  47. package/components/ui/crud-pagination-nav-button.js +3 -1
  48. package/components/ui/crud-sort-form.js +3 -1
  49. package/components/update/crud-update.js +3 -1
  50. package/components/update/modal-crud-update.js +3 -1
  51. package/package.json +3 -3
@@ -1,2 +1,4 @@
1
1
  import { DileCrudActions } from "./src/DileCrudActions.js";
2
- customElements.define('dile-crud-actions', DileCrudActions);
2
+ if (!customElements.get('dile-crud-actions')) {
3
+ customElements.define('dile-crud-actions', DileCrudActions);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileCrudDeleteAction } from "./src/DileCrudDeleteAction.js";
2
- customElements.define('dile-crud-delete-action', DileCrudDeleteAction);
2
+ if (!customElements.get('dile-crud-delete-action')) {
3
+ customElements.define('dile-crud-delete-action', DileCrudDeleteAction);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileCrudSingleActions } from './src/DileCrudSingleActions.js';
2
- customElements.define('dile-crud-single-actions', DileCrudSingleActions);
2
+ if (!customElements.get('dile-crud-single-actions')) {
3
+ customElements.define('dile-crud-single-actions', DileCrudSingleActions);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileAjax } from './src/DileAjax.js'
2
- customElements.define('dile-ajax', DileAjax);
2
+ if (!customElements.get('dile-ajax')) {
3
+ customElements.define('dile-ajax', DileAjax);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileAjaxChange } from "./src/DileAjaxChange.js";
2
- customElements.define('dile-ajax-change', DileAjaxChange);
2
+ if (!customElements.get('dile-ajax-change')) {
3
+ customElements.define('dile-ajax-change', DileAjaxChange);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileAjaxForm } from './src/DileAjaxForm.js';
2
- customElements.define('dile-ajax-form', DileAjaxForm);
2
+ if (!customElements.get('dile-ajax-form')) {
3
+ customElements.define('dile-ajax-form', DileAjaxForm);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileConfirmedAjaxForm } from './src/DileConfirmedAjaxForm.js';
2
- customElements.define('dile-confirmed-ajax-form', DileConfirmedAjaxForm);
2
+ if (!customElements.get('dile-confirmed-ajax-form')) {
3
+ customElements.define('dile-confirmed-ajax-form', DileConfirmedAjaxForm);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileSelectAjaxChange } from "./src/DileSelectAjaxChange.js";
2
- customElements.define('dile-ajax-select-change', DileSelectAjaxChange);
2
+ if (!customElements.get('dile-ajax-select-change')) {
3
+ customElements.define('dile-ajax-select-change', DileSelectAjaxChange);
4
+ }
@@ -0,0 +1,5 @@
1
+ import { DileAjaxSelectCrudOverlay } from './src/DileAjaxSelectCrudOverlay.js';
2
+
3
+ if (!customElements.get('dile-ajax-select-crud-overlay')) {
4
+ customElements.define('dile-ajax-select-crud-overlay', DileAjaxSelectCrudOverlay);
5
+ }
@@ -0,0 +1,166 @@
1
+ import { describe, it, expect, afterEach, vi } from 'vitest';
2
+ import './ajax-select-crud-overlay.js';
3
+
4
+ describe('dile-ajax-select-crud-overlay', () => {
5
+ afterEach(() => {
6
+ document.body.innerHTML = '';
7
+ delete window.axiosInstance;
8
+ });
9
+
10
+ function wait(ms) {
11
+ return new Promise((resolve) => setTimeout(resolve, ms));
12
+ }
13
+
14
+ function mockAxios(responseData) {
15
+ const get = vi.fn(() => Promise.resolve({ status: 200, data: responseData }));
16
+ window.axiosInstance = { get };
17
+ return get;
18
+ }
19
+
20
+ async function renderCrudSelect(html) {
21
+ document.body.innerHTML = html;
22
+ const el = document.body.querySelector('dile-ajax-select-crud-overlay');
23
+ await el.updateComplete;
24
+ return el;
25
+ }
26
+
27
+ async function typeKeyword(el, keyword) {
28
+ const input = el.shadowRoot.getElementById('search');
29
+ input.value = keyword;
30
+ input.dispatchEvent(new Event('input', { bubbles: true }));
31
+ await wait(el.delay + 50);
32
+ await el.updateComplete;
33
+ }
34
+
35
+ describe('Rendering', () => {
36
+ it('renders the search input, same as dile-select-ajax-overlay', async () => {
37
+ mockAxios([]);
38
+ const el = await renderCrudSelect(`
39
+ <dile-ajax-select-crud-overlay endpoint="/api/countries" idProperty="id" displayProperty="name"></dile-ajax-select-crud-overlay>
40
+ `);
41
+
42
+ const input = el.shadowRoot.getElementById('search');
43
+ expect(input).toBeTruthy();
44
+ expect(input.getAttribute('role')).toBe('combobox');
45
+ });
46
+ });
47
+
48
+ describe('Uses axios instead of fetch', () => {
49
+ it('requests through window.axiosInstance.get, not the native fetch API', async () => {
50
+ const get = mockAxios([{ id: 1, name: 'Spain' }]);
51
+ const fetchSpy = vi.spyOn(window, 'fetch');
52
+
53
+ const el = await renderCrudSelect(`
54
+ <dile-ajax-select-crud-overlay endpoint="/api/countries" idProperty="id" displayProperty="name" queryStringVariable="keyword" delay="10"></dile-ajax-select-crud-overlay>
55
+ `);
56
+
57
+ await typeKeyword(el, 'sp');
58
+
59
+ expect(get).toHaveBeenCalledWith('/api/countries', { params: { keyword: 'sp' } });
60
+ expect(fetchSpy).not.toHaveBeenCalled();
61
+ expect(el.data.length).toBe(1);
62
+ expect(el.select.opened).toBe(true);
63
+
64
+ fetchSpy.mockRestore();
65
+ });
66
+
67
+ it('fetches the initial value display text through axios', async () => {
68
+ // searchValueInitial() passes response.data (i.e. the "data" envelope, not the raw
69
+ // response) down to registerText(), matching dile-ajax-select-crud's own convention.
70
+ const get = vi.fn(() => Promise.resolve({ status: 200, data: { data: { name: 'Spain' } } }));
71
+ window.axiosInstance = { get };
72
+
73
+ const el = await renderCrudSelect(`
74
+ <dile-ajax-select-crud-overlay endpoint="/api/countries" idProperty="id" displayProperty="name" value="22"></dile-ajax-select-crud-overlay>
75
+ `);
76
+ await wait(50);
77
+ await el.updateComplete;
78
+
79
+ expect(get).toHaveBeenCalledWith('/api/countries/22');
80
+ expect(el.selectedText).toBe('Spain');
81
+ expect(el.isSelected).toBe(true);
82
+ });
83
+ });
84
+
85
+ describe('Selecting a result (no extra click required)', () => {
86
+ it('opens the popup as soon as results load and lets the user pick without a second click', async () => {
87
+ mockAxios([{ id: 1, name: 'Spain' }, { id: 2, name: 'France' }]);
88
+ const el = await renderCrudSelect(`
89
+ <dile-ajax-select-crud-overlay endpoint="/api/countries" idProperty="id" displayProperty="name" delay="10"></dile-ajax-select-crud-overlay>
90
+ `);
91
+
92
+ await typeKeyword(el, 'sp');
93
+ expect(el.select.opened).toBe(true);
94
+
95
+ const options = el.select.shadowRoot.querySelectorAll('[role="option"]');
96
+ options[0].click();
97
+ await el.select.updateComplete;
98
+ await el.updateComplete;
99
+
100
+ expect(el.value).toBe('1');
101
+ expect(el.selectedText).toBe('Spain');
102
+ expect(el.isSelected).toBe(true);
103
+ });
104
+ });
105
+
106
+ describe('maxResults / pageParamName', () => {
107
+ it('adds the page-size param to the request when both are set', async () => {
108
+ const get = mockAxios([]);
109
+ const el = await renderCrudSelect(`
110
+ <dile-ajax-select-crud-overlay endpoint="/api/countries" idProperty="id" displayProperty="name" queryStringVariable="keyword" maxResults="5" pageParamName="limit" delay="10"></dile-ajax-select-crud-overlay>
111
+ `);
112
+
113
+ await typeKeyword(el, 'sp');
114
+
115
+ expect(get).toHaveBeenCalledWith('/api/countries', { params: { keyword: 'sp', limit: 5 } });
116
+ });
117
+
118
+ it('omits the page-size param when pageParamName is not set', async () => {
119
+ const get = mockAxios([]);
120
+ const el = await renderCrudSelect(`
121
+ <dile-ajax-select-crud-overlay endpoint="/api/countries" idProperty="id" displayProperty="name" queryStringVariable="keyword" maxResults="5" delay="10"></dile-ajax-select-crud-overlay>
122
+ `);
123
+
124
+ await typeKeyword(el, 'sp');
125
+
126
+ expect(get).toHaveBeenCalledWith('/api/countries', { params: { keyword: 'sp' } });
127
+ });
128
+ });
129
+
130
+ describe('getSelectResultList', () => {
131
+ it('uses getSelectResultList to extract the list when the response shape needs adapting', async () => {
132
+ mockAxios({ data: { result: { data: [{ id: 1, name: 'Spain' }] } } });
133
+ const el = await renderCrudSelect(`
134
+ <dile-ajax-select-crud-overlay endpoint="/api/countries" idProperty="id" displayProperty="name" delay="10"></dile-ajax-select-crud-overlay>
135
+ `);
136
+ el.getSelectResultList = (response) => response.data.result.data;
137
+
138
+ await typeKeyword(el, 'sp');
139
+
140
+ expect(el.data).toEqual([{ id: 1, name: 'Spain' }]);
141
+ });
142
+
143
+ it('takes priority over resultDataProperty when both are set', async () => {
144
+ mockAxios({ items: [{ id: 1, name: 'Spain' }], data: [] });
145
+ const el = await renderCrudSelect(`
146
+ <dile-ajax-select-crud-overlay endpoint="/api/countries" idProperty="id" displayProperty="name" resultDataProperty="data" delay="10"></dile-ajax-select-crud-overlay>
147
+ `);
148
+ el.getSelectResultList = (response) => response.items;
149
+
150
+ await typeKeyword(el, 'sp');
151
+
152
+ expect(el.data).toEqual([{ id: 1, name: 'Spain' }]);
153
+ });
154
+ });
155
+
156
+ describe('Form Association', () => {
157
+ it('is form-associated, same as dile-select-ajax-overlay', async () => {
158
+ mockAxios([]);
159
+ const el = await renderCrudSelect(`
160
+ <dile-ajax-select-crud-overlay endpoint="/api/countries" idProperty="id" displayProperty="name"></dile-ajax-select-crud-overlay>
161
+ `);
162
+
163
+ expect(el.internals).toBeTruthy();
164
+ });
165
+ });
166
+ });
@@ -1,3 +1,5 @@
1
1
  import { DileAjaxSelectCrud } from './src/DileAjaxSelectCrud.js';
2
2
 
3
- customElements.define('dile-ajax-select-crud', DileAjaxSelectCrud);
3
+ if (!customElements.get('dile-ajax-select-crud')) {
4
+ customElements.define('dile-ajax-select-crud', DileAjaxSelectCrud);
5
+ }
@@ -1 +1,2 @@
1
- export { DileAjaxSelectCrud } from './src/DileAjaxSelectCrud.js';
1
+ export { DileAjaxSelectCrud } from './src/DileAjaxSelectCrud.js';
2
+ export { DileAjaxSelectCrudOverlay } from './src/DileAjaxSelectCrudOverlay.js';
@@ -0,0 +1,80 @@
1
+ import { DileAxios } from '../../../lib/DileAxios.js';
2
+ import { DileSelectAjaxOverlay } from '@dile/ui/components/select/index.js';
3
+
4
+ export class DileAjaxSelectCrudOverlay extends DileAxios(DileSelectAjaxOverlay) {
5
+
6
+ static get properties() {
7
+ return {
8
+ maxResults: { type: Number },
9
+ pageParamName: { type: String },
10
+ getSelectResultList: { type: Object },
11
+ };
12
+ }
13
+
14
+ constructor() {
15
+ super();
16
+ }
17
+
18
+ searchValueInitial() {
19
+ let request = this.axiosInstance.get(`${this.endpoint}/${this.value}`);
20
+ request.then((response) => {
21
+ if (response.status == 200) {
22
+ let res = response.data;
23
+ if (res.error) {
24
+ this.registerError(res.data);
25
+ } else {
26
+ this.registerText(res.data);
27
+ }
28
+ } else {
29
+ this.registerError('Bad response code');
30
+ }
31
+ })
32
+ .catch(err => {
33
+ this.registerError(err);
34
+ });
35
+ }
36
+
37
+ loadData() {
38
+ this.loading = true;
39
+ let params = this.additionalQueryString || {};
40
+ if (this.pageParamName && this.maxResults) {
41
+ params[this.pageParamName] = this.maxResults;
42
+ }
43
+ params[this.queryStringVariable] = this.keyword;
44
+ let request = this.axiosInstance.get(this.endpoint, { params });
45
+ request.then((response) => {
46
+ if (response.status == 200) {
47
+ let res = response.data;
48
+ if (res.error) {
49
+ this.registerError(res.data);
50
+ } else {
51
+ this.registerData(res);
52
+ }
53
+ } else {
54
+ this.registerError('Bad response code');
55
+ }
56
+ })
57
+ .catch(err => {
58
+ this.registerError(err);
59
+ });
60
+ }
61
+
62
+ registerText(json) {
63
+ this.selectedText = json[this.displayProperty];
64
+ this.loading = false;
65
+ }
66
+
67
+ registerData(json) {
68
+ if(this.getSelectResultList) {
69
+ this.data = this.getSelectResultList(json);
70
+ } else {
71
+ this.data = this.getResultData(json);
72
+ }
73
+ this.updateComplete.then(() => {
74
+ this.loading = false;
75
+ if (this.keyword.length > 0 && this.data.length > 0) {
76
+ this.select?.open();
77
+ }
78
+ });
79
+ }
80
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileAjaxSwitch } from "./src/DileAjaxSwitch.js";
2
- customElements.define('dile-ajax-switch', DileAjaxSwitch);
2
+ if (!customElements.get('dile-ajax-switch')) {
3
+ customElements.define('dile-ajax-switch', DileAjaxSwitch);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileCrudSingle } from "./src/DileCrudSingle.js";
2
- customElements.define('dile-crud-single', DileCrudSingle);
2
+ if (!customElements.get('dile-crud-single')) {
3
+ customElements.define('dile-crud-single', DileCrudSingle);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileCrud } from "./src/DileCrud.js";
2
- customElements.define('dile-crud', DileCrud);
2
+ if (!customElements.get('dile-crud')) {
3
+ customElements.define('dile-crud', DileCrud);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileCrudDeleteAction } from "../action/src/DileCrudDeleteAction.js";
2
- customElements.define('dile-crud-delete-action', DileCrudDeleteAction);
2
+ if (!customElements.get('dile-crud-delete-action')) {
3
+ customElements.define('dile-crud-delete-action', DileCrudDeleteAction);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileCrudDetail } from "./src/DileCrudDetail.js";
2
- customElements.define('dile-crud-detail', DileCrudDetail);
2
+ if (!customElements.get('dile-crud-detail')) {
3
+ customElements.define('dile-crud-detail', DileCrudDetail);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileFileUploaderForm } from './src/DileFileUploaderForm.js';
2
- customElements.define('dile-file-uploader-form', DileFileUploaderForm);
2
+ if (!customElements.get('dile-file-uploader-form')) {
3
+ customElements.define('dile-file-uploader-form', DileFileUploaderForm);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileFileUploader } from './src/DileFileUploader.js';
2
- customElements.define('dile-file-uploader', DileFileUploader);
2
+ if (!customElements.get('dile-file-uploader')) {
3
+ customElements.define('dile-file-uploader', DileFileUploader);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileImageUploaderForm } from './src/DileImageUploaderForm.js';
2
- customElements.define('dile-image-uploader-form', DileImageUploaderForm);
2
+ if (!customElements.get('dile-image-uploader-form')) {
3
+ customElements.define('dile-image-uploader-form', DileImageUploaderForm);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileImageUploader } from './src/DileImageUploader.js';
2
- customElements.define('dile-image-uploader', DileImageUploader);
2
+ if (!customElements.get('dile-image-uploader')) {
3
+ customElements.define('dile-image-uploader', DileImageUploader);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileCrudInsert } from './src/DileCrudInsert.js';
2
- customElements.define('dile-crud-insert', DileCrudInsert);
2
+ if (!customElements.get('dile-crud-insert')) {
3
+ customElements.define('dile-crud-insert', DileCrudInsert);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileModalCrudInsert } from './src/DileModalCrudInsert.js';
2
- customElements.define('dile-modal-crud-insert', DileModalCrudInsert);
2
+ if (!customElements.get('dile-modal-crud-insert')) {
3
+ customElements.define('dile-modal-crud-insert', DileModalCrudInsert);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileCrudItemDelete } from "./src/DileCrudItemDelete.js";
2
- customElements.define('dile-crud-item-delete', DileCrudItemDelete);
2
+ if (!customElements.get('dile-crud-item-delete')) {
3
+ customElements.define('dile-crud-item-delete', DileCrudItemDelete);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileCrudItemRestore} from "./src/DileCrudItemRestore.js";
2
- customElements.define('dile-crud-item-restore', DileCrudItemRestore);
2
+ if (!customElements.get('dile-crud-item-restore')) {
3
+ customElements.define('dile-crud-item-restore', DileCrudItemRestore);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileCrudListItem } from './src/DileCrudListItem.js';
2
- customElements.define('dile-crud-list-item', DileCrudListItem);
2
+ if (!customElements.get('dile-crud-list-item')) {
3
+ customElements.define('dile-crud-list-item', DileCrudListItem);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileCrudListPaginationLinks } from "./src/DileCrudListPaginationLinks.js";
2
- customElements.define('dile-crud-list-pagination-links', DileCrudListPaginationLinks);
2
+ if (!customElements.get('dile-crud-list-pagination-links')) {
3
+ customElements.define('dile-crud-list-pagination-links', DileCrudListPaginationLinks);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileCrudListService } from "./src/DileCrudListService.js";
2
- customElements.define('dile-crud-list-service', DileCrudListService);
2
+ if (!customElements.get('dile-crud-list-service')) {
3
+ customElements.define('dile-crud-list-service', DileCrudListService);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileCrudList } from "./src/DileCrudList.js";
2
- customElements.define('dile-crud-list', DileCrudList);
2
+ if (!customElements.get('dile-crud-list')) {
3
+ customElements.define('dile-crud-list', DileCrudList);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileCrudSelectAll } from "./src/DileCrudSelectAll.js";
2
- customElements.define('dile-crud-select-all', DileCrudSelectAll);
2
+ if (!customElements.get('dile-crud-select-all')) {
3
+ customElements.define('dile-crud-select-all', DileCrudSelectAll);
4
+ }
@@ -1,3 +1,5 @@
1
1
  import { DileManyRelation } from './src/DileManyRelation.js';
2
2
 
3
- customElements.define('dile-many-relation', DileManyRelation);
3
+ if (!customElements.get('dile-many-relation')) {
4
+ customElements.define('dile-many-relation', DileManyRelation);
5
+ }
@@ -1,3 +1,5 @@
1
1
  import { DileRelationCheckerItem } from './src/DileRelationCheckerItem.js';
2
2
 
3
- customElements.define('dile-relation-checker-item', DileRelationCheckerItem);
3
+ if (!customElements.get('dile-relation-checker-item')) {
4
+ customElements.define('dile-relation-checker-item', DileRelationCheckerItem);
5
+ }
@@ -1,3 +1,5 @@
1
1
  import { DileRelationChecker } from './src/DileRelationChecker.js';
2
2
 
3
- customElements.define('dile-relation-checker', DileRelationChecker);
3
+ if (!customElements.get('dile-relation-checker')) {
4
+ customElements.define('dile-relation-checker', DileRelationChecker);
5
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileCrudSingle } from "./src/DileCrudSingle.js";
2
- customElements.define('dile-crud-single', DileCrudSingle);
2
+ if (!customElements.get('dile-crud-single')) {
3
+ customElements.define('dile-crud-single', DileCrudSingle);
4
+ }
@@ -1,3 +1,5 @@
1
1
 
2
2
  import { DileCrudFiltersForm } from "./src/DileCrudFiltersForm.js";
3
- customElements.define('dile-crud-filters-form', DileCrudFiltersForm);
3
+ if (!customElements.get('dile-crud-filters-form')) {
4
+ customElements.define('dile-crud-filters-form', DileCrudFiltersForm);
5
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileCrudFiltersListItem } from "./src/DileCrudFiltersListItem.js";
2
- customElements.define('dile-crud-filters-list-item', DileCrudFiltersListItem);
2
+ if (!customElements.get('dile-crud-filters-list-item')) {
3
+ customElements.define('dile-crud-filters-list-item', DileCrudFiltersListItem);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileCrudFiltersList } from "./src/DileCrudFiltersList.js";
2
- customElements.define('dile-crud-filters-list', DileCrudFiltersList);
2
+ if (!customElements.get('dile-crud-filters-list')) {
3
+ customElements.define('dile-crud-filters-list', DileCrudFiltersList);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileCrudFilters } from "./src/DileCrudFilters.js";
2
- customElements.define('dile-crud-filters', DileCrudFilters);
2
+ if (!customElements.get('dile-crud-filters')) {
3
+ customElements.define('dile-crud-filters', DileCrudFilters);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileCrudListOptions } from "./src/DileCrudListOptions.js";
2
- customElements.define('dile-crud-list-options', DileCrudListOptions);
2
+ if (!customElements.get('dile-crud-list-options')) {
3
+ customElements.define('dile-crud-list-options', DileCrudListOptions);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileCrudPageSizeSelect } from "./src/DileCrudPageSizeSelect.js";
2
- customElements.define('dile-crud-page-size-select', DileCrudPageSizeSelect);
2
+ if (!customElements.get('dile-crud-page-size-select')) {
3
+ customElements.define('dile-crud-page-size-select', DileCrudPageSizeSelect);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileCrudPageSize } from "./src/DileCrudPageSize.js";
2
- customElements.define('dile-crud-page-size', DileCrudPageSize);
2
+ if (!customElements.get('dile-crud-page-size')) {
3
+ customElements.define('dile-crud-page-size', DileCrudPageSize);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileCrudPaginationNavButton } from './src/DileCrudPaginationNavButton.js';
2
- customElements.define('dile-crud-pagination-nav-button', DileCrudPaginationNavButton);
2
+ if (!customElements.get('dile-crud-pagination-nav-button')) {
3
+ customElements.define('dile-crud-pagination-nav-button', DileCrudPaginationNavButton);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileCrudSortForm } from "./src/DileCrudSortForm.js";
2
- customElements.define('dile-crud-sort-form', DileCrudSortForm);
2
+ if (!customElements.get('dile-crud-sort-form')) {
3
+ customElements.define('dile-crud-sort-form', DileCrudSortForm);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileCrudUpdate } from './src/DileCrudUpdate.js';
2
- customElements.define('dile-crud-update', DileCrudUpdate);
2
+ if (!customElements.get('dile-crud-update')) {
3
+ customElements.define('dile-crud-update', DileCrudUpdate);
4
+ }
@@ -1,2 +1,4 @@
1
1
  import { DileModalCrudUpdate } from "./src/DileModalCrudUpdate.js";
2
- customElements.define('dile-modal-crud-update', DileModalCrudUpdate);
2
+ if (!customElements.get('dile-modal-crud-update')) {
3
+ customElements.define('dile-modal-crud-update', DileModalCrudUpdate);
4
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dile/crud",
3
- "version": "2.1.11",
3
+ "version": "2.2.0",
4
4
  "description": "Components to create a generic crud system based on Web Components and Lit",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -25,12 +25,12 @@
25
25
  },
26
26
  "homepage": "https://dile-components.com/",
27
27
  "dependencies": {
28
- "@dile/ui": "^3.4.5",
28
+ "@dile/ui": "^3.5.0",
29
29
  "axios": "^1.19.0",
30
30
  "lit": "^2.7.0 || ^3.0.0"
31
31
  },
32
32
  "publishConfig": {
33
33
  "access": "public"
34
34
  },
35
- "gitHead": "31136286663cc7482a95a8813d845e73c3f6c57d"
35
+ "gitHead": "817f0dfc3c345957ae7a63c113e22aa0f80a773f"
36
36
  }