@dile/crud 1.14.0 → 1.14.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/components/ajax-change/ajax-change.js +2 -0
- package/components/ajax-change/index.js +1 -0
- package/components/ajax-change/src/DileAjaxChange.js +112 -0
- package/components/ajax-select-change/ajax-select-change.js +1 -1
- package/components/ajax-select-change/src/DileSelectAjaxChange.js +39 -13
- package/package.json +2 -2
- package/components/ajax-select-change/index.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { DileAjaxChange } from "./src/DileAjaxChange.js";
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { LitElement, html, css } from 'lit';
|
|
2
|
+
import '../../ajax/ajax.js';
|
|
3
|
+
import { RequestApiAdapter } from '../../../lib/RequestApiAdapter.js';
|
|
4
|
+
|
|
5
|
+
export class DileAjaxChange extends LitElement {
|
|
6
|
+
static styles = [
|
|
7
|
+
css`
|
|
8
|
+
:host {
|
|
9
|
+
display: block;
|
|
10
|
+
}
|
|
11
|
+
`
|
|
12
|
+
];
|
|
13
|
+
|
|
14
|
+
static get properties() {
|
|
15
|
+
return {
|
|
16
|
+
value: { type: String },
|
|
17
|
+
endpoint: { type: String },
|
|
18
|
+
loading: { type: Boolean },
|
|
19
|
+
method: { type: String },
|
|
20
|
+
requestApiAdapter: { type: Object },
|
|
21
|
+
dataFieldName: { type: String },
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
constructor() {
|
|
26
|
+
super();
|
|
27
|
+
this.requestApiAdapter = new RequestApiAdapter();
|
|
28
|
+
this.method = 'patch';
|
|
29
|
+
this.dataFieldName = 'value';
|
|
30
|
+
this.changeHandler = this.onChange.bind(this);
|
|
31
|
+
this.slotElement = null;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
render() {
|
|
35
|
+
return html`
|
|
36
|
+
<dile-ajax
|
|
37
|
+
id="elajax"
|
|
38
|
+
method="${this.method}"
|
|
39
|
+
url="${this.endpoint}"
|
|
40
|
+
@ajax-success="${this.doSuccessAjax}"
|
|
41
|
+
@ajax-error="${this.doErrorAjax}"
|
|
42
|
+
></dile-ajax>
|
|
43
|
+
<slot name="input"></slot>
|
|
44
|
+
`;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
firstUpdated() {
|
|
48
|
+
const slot = this.shadowRoot.querySelector('slot[name="input"]');
|
|
49
|
+
if (!slot) {
|
|
50
|
+
throw new Error('slot with name="input" not found');
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
this.slotElement = slot;
|
|
54
|
+
slot.addEventListener('slotchange', () => {
|
|
55
|
+
this.handleSlotChange();
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
// Trigger initial slot change
|
|
59
|
+
this.handleSlotChange();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
handleSlotChange() {
|
|
63
|
+
const [element] = this.slotElement.assignedElements({ flatten: true });
|
|
64
|
+
|
|
65
|
+
// Remove listener from previous element if exists
|
|
66
|
+
if (this.currentElement) {
|
|
67
|
+
this.currentElement.removeEventListener('change', this.changeHandler);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (element) {
|
|
71
|
+
this.currentElement = element;
|
|
72
|
+
element.addEventListener('change', this.changeHandler);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
disconnectedCallback() {
|
|
77
|
+
super.disconnectedCallback();
|
|
78
|
+
if (this.currentElement) {
|
|
79
|
+
this.currentElement.removeEventListener('change', this.changeHandler);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
onChange(e) {
|
|
84
|
+
if (!this.loading) {
|
|
85
|
+
this.loading = true;
|
|
86
|
+
this.value = e.target.value;
|
|
87
|
+
let data = {};
|
|
88
|
+
data[this.dataFieldName] = this.value;
|
|
89
|
+
let elajax = this.shadowRoot.getElementById('elajax');
|
|
90
|
+
elajax.data = data;
|
|
91
|
+
elajax.generateRequest();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
doErrorAjax(e) {
|
|
96
|
+
this.loading = false;
|
|
97
|
+
this.dispatchEvent(new CustomEvent('ajax-change-error', {
|
|
98
|
+
detail: e.detail,
|
|
99
|
+
bubbles: true,
|
|
100
|
+
composed: true,
|
|
101
|
+
}));
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
doSuccessAjax(e) {
|
|
105
|
+
this.loading = false;
|
|
106
|
+
this.dispatchEvent(new CustomEvent('ajax-change-success', {
|
|
107
|
+
detail: e.detail,
|
|
108
|
+
bubbles: true,
|
|
109
|
+
composed: true,
|
|
110
|
+
}));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { DileSelectAjaxChange } from "./src/DileSelectAjaxChange.js";
|
|
2
|
-
customElements.define('dile-select-
|
|
2
|
+
customElements.define('dile-ajax-select-change', DileSelectAjaxChange);
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { LitElement, html, css } from 'lit';
|
|
2
|
-
import '@dile/ui/components/select/select.js';
|
|
3
2
|
import '../../ajax/ajax.js';
|
|
4
3
|
import { RequestApiAdapter } from '../../../lib/RequestApiAdapter.js';
|
|
5
4
|
|
|
@@ -29,6 +28,7 @@ export class DileSelectAjaxChange extends LitElement {
|
|
|
29
28
|
this.method = 'patch';
|
|
30
29
|
this.dataFieldName = 'value';
|
|
31
30
|
this.changeHandler = this.onSelectChange.bind(this);
|
|
31
|
+
this.slotElement = null;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
render() {
|
|
@@ -44,23 +44,39 @@ export class DileSelectAjaxChange extends LitElement {
|
|
|
44
44
|
`;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
firstUpdated() {
|
|
48
|
+
const slot = this.shadowRoot.querySelector('slot[name="select"]');
|
|
49
|
+
if (!slot) {
|
|
50
|
+
throw new Error('slot with name="select" not found');
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
this.slotElement = slot;
|
|
54
|
+
slot.addEventListener('slotchange', () => {
|
|
55
|
+
this.handleSlotChange();
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
// Trigger initial slot change
|
|
59
|
+
this.handleSlotChange();
|
|
49
60
|
}
|
|
50
61
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
this.
|
|
62
|
+
handleSlotChange() {
|
|
63
|
+
const [element] = this.slotElement.assignedElements({ flatten: true });
|
|
64
|
+
|
|
65
|
+
// Remove listener from previous element if exists
|
|
66
|
+
if (this.currentElement) {
|
|
67
|
+
this.currentElement.removeEventListener('change', this.changeHandler);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (element) {
|
|
71
|
+
this.currentElement = element;
|
|
72
|
+
element.addEventListener('change', this.changeHandler);
|
|
57
73
|
}
|
|
58
74
|
}
|
|
59
75
|
|
|
60
76
|
disconnectedCallback() {
|
|
61
77
|
super.disconnectedCallback();
|
|
62
|
-
if (this.
|
|
63
|
-
this.
|
|
78
|
+
if (this.currentElement) {
|
|
79
|
+
this.currentElement.removeEventListener('change', this.changeHandler);
|
|
64
80
|
}
|
|
65
81
|
}
|
|
66
82
|
|
|
@@ -76,11 +92,21 @@ export class DileSelectAjaxChange extends LitElement {
|
|
|
76
92
|
}
|
|
77
93
|
}
|
|
78
94
|
|
|
79
|
-
doErrorAjax() {
|
|
95
|
+
doErrorAjax(e) {
|
|
80
96
|
this.loading = false;
|
|
97
|
+
this.dispatchEvent(new CustomEvent('ajax-error', {
|
|
98
|
+
detail: e.detail,
|
|
99
|
+
bubbles: true,
|
|
100
|
+
composed: true,
|
|
101
|
+
}));
|
|
81
102
|
}
|
|
82
103
|
|
|
83
|
-
doSuccessAjax() {
|
|
104
|
+
doSuccessAjax(e) {
|
|
84
105
|
this.loading = false;
|
|
106
|
+
this.dispatchEvent(new CustomEvent('ajax-success', {
|
|
107
|
+
detail: e.detail,
|
|
108
|
+
bubbles: true,
|
|
109
|
+
composed: true,
|
|
110
|
+
}));
|
|
85
111
|
}
|
|
86
112
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dile/crud",
|
|
3
|
-
"version": "1.14.
|
|
3
|
+
"version": "1.14.2",
|
|
4
4
|
"description": "Components to create a generic crud system based on Web Components and Lit",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -31,5 +31,5 @@
|
|
|
31
31
|
"publishConfig": {
|
|
32
32
|
"access": "public"
|
|
33
33
|
},
|
|
34
|
-
"gitHead": "
|
|
34
|
+
"gitHead": "34d14af1dad358ed978b7dcff38710157fdac19a"
|
|
35
35
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { DileSelectAjaxChange } from "./src/DileSelectAjaxChange.js";
|