@windwalker-io/unicorn-next 0.1.18 → 0.1.21
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/dist/chunks/_arrayPush.js +325 -108
- package/dist/chunks/_arrayPush.js.map +1 -1
- package/dist/chunks/_baseRest.js +155 -60
- package/dist/chunks/_baseRest.js.map +1 -1
- package/dist/chunks/_baseUnary.js +463 -0
- package/dist/chunks/_baseUnary.js.map +1 -0
- package/dist/chunks/_getPrototype.js +292 -100
- package/dist/chunks/_getPrototype.js.map +1 -1
- package/dist/chunks/alert-adapter.js +29 -0
- package/dist/chunks/alert-adapter.js.map +1 -0
- package/dist/chunks/alert.js +21 -0
- package/dist/chunks/alert.js.map +1 -0
- package/dist/chunks/arr.js +24 -0
- package/dist/chunks/arr.js.map +1 -0
- package/dist/chunks/button-radio.js +127 -145
- package/dist/chunks/button-radio.js.map +1 -1
- package/dist/chunks/checkboxes-multi-select.js +44 -43
- package/dist/chunks/checkboxes-multi-select.js.map +1 -1
- package/dist/chunks/chunk.js +24 -0
- package/dist/chunks/cloneDeep.js +679 -212
- package/dist/chunks/cloneDeep.js.map +1 -1
- package/dist/chunks/cropper.min.js +6 -5
- package/dist/chunks/cropper.min.js.map +1 -1
- package/dist/chunks/crypto.js +26 -0
- package/dist/chunks/crypto.js.map +1 -0
- package/dist/chunks/data.js +49 -0
- package/dist/chunks/data.js.map +1 -0
- package/dist/chunks/dom.js +128 -0
- package/dist/chunks/dom.js.map +1 -0
- package/dist/chunks/events.js +270 -0
- package/dist/chunks/events.js.map +1 -0
- package/dist/chunks/field-cascade-select.js +207 -250
- package/dist/chunks/field-cascade-select.js.map +1 -1
- package/dist/chunks/field-file-drag.js +175 -209
- package/dist/chunks/field-file-drag.js.map +1 -1
- package/dist/chunks/field-flatpickr.js +94 -898
- package/dist/chunks/field-flatpickr.js.map +1 -1
- package/dist/chunks/field-modal-select.js +728 -467
- package/dist/chunks/field-modal-select.js.map +1 -1
- package/dist/chunks/field-modal-tree.js +771 -766
- package/dist/chunks/field-modal-tree.js.map +1 -1
- package/dist/chunks/field-multi-uploader.js +249 -256
- package/dist/chunks/field-multi-uploader.js.map +1 -1
- package/dist/chunks/field-repeatable.js +111 -127
- package/dist/chunks/field-repeatable.js.map +1 -1
- package/dist/chunks/field-single-image-drag.js +286 -338
- package/dist/chunks/field-single-image-drag.js.map +1 -1
- package/dist/chunks/form.js +146 -159
- package/dist/chunks/form.js.map +1 -1
- package/dist/chunks/grid.js +349 -418
- package/dist/chunks/grid.js.map +1 -1
- package/dist/chunks/helper.js +39 -0
- package/dist/chunks/helper.js.map +1 -0
- package/dist/chunks/http-client.js +221 -211
- package/dist/chunks/http-client.js.map +1 -1
- package/dist/chunks/iframe-modal.js +95 -115
- package/dist/chunks/iframe-modal.js.map +1 -1
- package/dist/chunks/keep-tab.js +92 -101
- package/dist/chunks/keep-tab.js.map +1 -1
- package/dist/chunks/lang.js +250 -0
- package/dist/chunks/lang.js.map +1 -0
- package/dist/chunks/legacy.js +197 -201
- package/dist/chunks/legacy.js.map +1 -1
- package/dist/chunks/list-dependent.js +195 -228
- package/dist/chunks/list-dependent.js.map +1 -1
- package/dist/chunks/loader.js +106 -0
- package/dist/chunks/loader.js.map +1 -0
- package/dist/chunks/monthSelect.js +251 -0
- package/dist/chunks/monthSelect.js.map +1 -0
- package/dist/chunks/router.js +111 -0
- package/dist/chunks/router.js.map +1 -0
- package/dist/chunks/s3-multipart-uploader.js +183 -210
- package/dist/chunks/s3-multipart-uploader.js.map +1 -1
- package/dist/chunks/s3-uploader.js +106 -128
- package/dist/chunks/s3-uploader.js.map +1 -1
- package/dist/chunks/show-on.js +358 -205
- package/dist/chunks/show-on.js.map +1 -1
- package/dist/chunks/timing.js +10 -0
- package/dist/chunks/timing.js.map +1 -0
- package/dist/chunks/tinymce.js +153 -203
- package/dist/chunks/tinymce.js.map +1 -1
- package/dist/chunks/ui-bootstrap5.js +58 -72
- package/dist/chunks/ui-bootstrap5.js.map +1 -1
- package/dist/chunks/ui.js +320 -0
- package/dist/chunks/ui.js.map +1 -0
- package/dist/chunks/unicorn.js.map +1 -1
- package/dist/chunks/useQueue.js +111 -0
- package/dist/chunks/useQueue.js.map +1 -0
- package/dist/chunks/useStack.js +76 -0
- package/dist/chunks/useStack.js.map +1 -0
- package/dist/chunks/validation.js +761 -853
- package/dist/chunks/validation.js.map +1 -1
- package/dist/editor.css +1 -1
- package/dist/index.d.ts +27 -15
- package/dist/multi-level-menu.css +1 -1
- package/dist/switcher.css +1 -1
- package/dist/unicorn.js +805 -130
- package/dist/unicorn.js.map +1 -1
- package/package.json +3 -3
- package/src/composable/useBsModalAlert.ts +92 -12
- package/src/composable/useHttp.ts +13 -1
- package/src/module/s3-uploader.ts +1 -1
- package/src/service/ui.ts +31 -15
- package/vite.config.ts +5 -1
- package/dist/chunks/_commonjsHelpers.js +0 -7
- package/dist/chunks/index.js +0 -314
- package/dist/chunks/isArguments.js +0 -146
- package/dist/chunks/unicorn.js +0 -2580
|
@@ -1,256 +1,213 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
import { n as __toESM, t as __commonJSMin } from "./chunk.js";
|
|
2
|
+
import { t as mergeDeep } from "./arr.js";
|
|
3
|
+
import { c as module } from "./dom.js";
|
|
4
|
+
import { o as initAlpineComponent, u as prepareAlpineDefer } from "./ui.js";
|
|
5
|
+
import { i as uid } from "./crypto.js";
|
|
6
|
+
import { useHttpClient } from "../unicorn.js";
|
|
7
|
+
//#region ../../../../node_modules/@rubenbimmel/alpine-class-component/dist/alpineComponent.js
|
|
8
|
+
var require_alpineComponent = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
var AlpineComponent = class {};
|
|
11
|
+
exports.default = AlpineComponent;
|
|
12
|
+
}));
|
|
13
|
+
//#endregion
|
|
14
|
+
//#region ../../../../node_modules/@rubenbimmel/alpine-class-component/dist/decorators/component.js
|
|
15
|
+
var require_component = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
function Component(component) {
|
|
18
|
+
return function(...args) {
|
|
19
|
+
let instance = new component(...args);
|
|
20
|
+
const proto = component.prototype;
|
|
21
|
+
let data = {};
|
|
22
|
+
Object.getOwnPropertyNames(proto).forEach(function(key) {
|
|
23
|
+
if (key === "constructor") return;
|
|
24
|
+
const descriptor = Object.getOwnPropertyDescriptor(proto, key);
|
|
25
|
+
if (descriptor.value !== void 0) {
|
|
26
|
+
if (typeof descriptor.value === "function") data[key] = descriptor.value;
|
|
27
|
+
} else if (descriptor.get || descriptor.set) Object.defineProperty(data, key, {
|
|
28
|
+
get: descriptor.get,
|
|
29
|
+
set: descriptor.set
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
return Object.assign(data, instance);
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
exports.default = Component;
|
|
36
|
+
}));
|
|
37
|
+
//#endregion
|
|
38
|
+
//#region \0@oxc-project+runtime@0.124.0/helpers/decorateMetadata.js
|
|
39
|
+
var import_alpineComponent = /* @__PURE__ */ __toESM(/* @__PURE__ */ require_alpineComponent(), 1);
|
|
40
|
+
var import_component = /* @__PURE__ */ __toESM(/* @__PURE__ */ require_component(), 1);
|
|
41
|
+
function __decorateMetadata(k, v) {
|
|
42
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
13
43
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
var
|
|
18
|
-
function
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
Object.defineProperty(component, "__esModule", { value: true });
|
|
22
|
-
function Component2(component2) {
|
|
23
|
-
return function(...args) {
|
|
24
|
-
let instance = new component2(...args);
|
|
25
|
-
const proto = component2.prototype;
|
|
26
|
-
let data = {};
|
|
27
|
-
Object.getOwnPropertyNames(proto).forEach(function(key) {
|
|
28
|
-
if (key === "constructor") {
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
const descriptor = Object.getOwnPropertyDescriptor(proto, key);
|
|
32
|
-
if (descriptor.value !== void 0) {
|
|
33
|
-
if (typeof descriptor.value === "function") {
|
|
34
|
-
data[key] = descriptor.value;
|
|
35
|
-
}
|
|
36
|
-
} else if (descriptor.get || descriptor.set) {
|
|
37
|
-
Object.defineProperty(data, key, { get: descriptor.get, set: descriptor.set });
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
return Object.assign(data, instance);
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
component.default = Component2;
|
|
44
|
-
return component;
|
|
44
|
+
//#endregion
|
|
45
|
+
//#region \0@oxc-project+runtime@0.124.0/helpers/decorate.js
|
|
46
|
+
function __decorate(decorators, target, key, desc) {
|
|
47
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
48
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
49
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
50
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
45
51
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
var
|
|
49
|
-
var
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
//#endregion
|
|
53
|
+
//#region src/module/field-cascade-select.ts
|
|
54
|
+
var _ref;
|
|
55
|
+
var defaultOptions = {
|
|
56
|
+
id: "",
|
|
57
|
+
selected: "",
|
|
58
|
+
path: [],
|
|
59
|
+
ignoreSelf: null,
|
|
60
|
+
placeholder: "- Select -",
|
|
61
|
+
placeholders: [],
|
|
62
|
+
ajaxUrl: "",
|
|
63
|
+
ajaxValueField: "value",
|
|
64
|
+
source: [],
|
|
65
|
+
labels: [],
|
|
66
|
+
labelWidth: "col-md-3",
|
|
67
|
+
fieldWidth: "col",
|
|
68
|
+
readonly: false,
|
|
69
|
+
disabled: false,
|
|
70
|
+
valueField: "id",
|
|
71
|
+
textField: "title",
|
|
72
|
+
horizontal: null,
|
|
73
|
+
horizontalColWidth: null,
|
|
74
|
+
defaultValue: "",
|
|
75
|
+
onSelectInit: () => {},
|
|
76
|
+
onChange: () => {},
|
|
77
|
+
onValueInit: () => {}
|
|
55
78
|
};
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
79
|
+
var FieldCascadeSelect = class FieldCascadeSelect extends import_alpineComponent.default {
|
|
80
|
+
options;
|
|
81
|
+
el;
|
|
82
|
+
canModify = false;
|
|
83
|
+
lists = [];
|
|
84
|
+
ajaxUrl = "";
|
|
85
|
+
values = [];
|
|
86
|
+
constructor(options = {}) {
|
|
87
|
+
super();
|
|
88
|
+
this.options = mergeDeep({}, defaultOptions, options);
|
|
89
|
+
this.options.id = this.options.id || "cascade-select-" + uid();
|
|
90
|
+
}
|
|
91
|
+
init() {
|
|
92
|
+
this.canModify = !this.options.readonly && !this.options.disabled;
|
|
93
|
+
this.ajaxUrl = this.options.ajaxUrl;
|
|
94
|
+
this.values = this.options.path.slice().map(String);
|
|
95
|
+
let values = this.options.path.slice();
|
|
96
|
+
if (values.length === 0) values = [null];
|
|
97
|
+
else values.unshift(null);
|
|
98
|
+
let promise = Promise.resolve();
|
|
99
|
+
let lastValue = null;
|
|
100
|
+
values.forEach((v, i) => {
|
|
101
|
+
promise = promise.then(() => {
|
|
102
|
+
return this.loadItems(v, i).then((list) => {
|
|
103
|
+
if (list.length > 0) this.lists.push(list);
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
lastValue = v;
|
|
107
|
+
});
|
|
108
|
+
this.el = this.$el;
|
|
109
|
+
module(this.$el, "cascade.select", () => this);
|
|
110
|
+
this.valueInit(this.$el, lastValue, values);
|
|
111
|
+
}
|
|
112
|
+
getLabel(i) {
|
|
113
|
+
return this.options.labels[i] || `Level ${i + 1}`;
|
|
114
|
+
}
|
|
115
|
+
getId(i) {
|
|
116
|
+
return `${this.options.id}__level-${i}`;
|
|
117
|
+
}
|
|
118
|
+
getListValue(i) {
|
|
119
|
+
return this.values[i] || "";
|
|
120
|
+
}
|
|
121
|
+
isSelected(i, item) {
|
|
122
|
+
return String(this.getListValue(i)) === String(item[this.options.valueField]);
|
|
123
|
+
}
|
|
124
|
+
getFinalValue() {
|
|
125
|
+
const values = this.values.slice();
|
|
126
|
+
if (values.length === 0) return this.options.defaultValue;
|
|
127
|
+
const v = values.filter((v) => v != null).filter((v) => v !== "").pop();
|
|
128
|
+
if (v == void 0) return this.options.defaultValue;
|
|
129
|
+
return v;
|
|
130
|
+
}
|
|
131
|
+
getLevel() {
|
|
132
|
+
return this.values.length;
|
|
133
|
+
}
|
|
134
|
+
async onChange(i, event) {
|
|
135
|
+
const el = event.target;
|
|
136
|
+
this.values[i] = el.value;
|
|
137
|
+
this.options.onChange(event);
|
|
138
|
+
event.stopPropagation();
|
|
139
|
+
const changeEvent = new CustomEvent("change", { detail: {
|
|
140
|
+
el,
|
|
141
|
+
component: this,
|
|
142
|
+
value: el.value,
|
|
143
|
+
path: this.values
|
|
144
|
+
} });
|
|
145
|
+
this.el?.dispatchEvent(changeEvent);
|
|
146
|
+
if (el.value === "") {
|
|
147
|
+
this.lists.splice(i + 1);
|
|
148
|
+
this.values.splice(i + 1);
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
let list = await this.loadItems(el.value, i);
|
|
152
|
+
this.lists.splice(i + 1);
|
|
153
|
+
this.values.splice(i + 1);
|
|
154
|
+
if (list.length > 0) this.lists.push(list);
|
|
155
|
+
}
|
|
156
|
+
async loadItems(parentId, i) {
|
|
157
|
+
if (this.ajaxUrl) return await (await (await useHttpClient()).get(this.ajaxUrl, { params: {
|
|
158
|
+
[this.options.ajaxValueField]: parentId,
|
|
159
|
+
self: this.options.ignoreSelf || null
|
|
160
|
+
} })).data.data;
|
|
161
|
+
if (parentId) return Promise.resolve(this.handleSourceItems(this.findFromList(this.lists[i - 1] || [], parentId)?.children || []));
|
|
162
|
+
return Promise.resolve(this.handleSourceItems(this.options.source));
|
|
163
|
+
}
|
|
164
|
+
valueInit($select, value, path) {
|
|
165
|
+
const event = new CustomEvent("value.init", { detail: {
|
|
166
|
+
el: $select,
|
|
167
|
+
component: this,
|
|
168
|
+
value,
|
|
169
|
+
path
|
|
170
|
+
} });
|
|
171
|
+
this.options.onSelectInit(event);
|
|
172
|
+
this.$el.dispatchEvent(event);
|
|
173
|
+
}
|
|
174
|
+
selectInit($select) {
|
|
175
|
+
const event = new CustomEvent("select.init", { detail: {
|
|
176
|
+
el: $select,
|
|
177
|
+
component: this
|
|
178
|
+
} });
|
|
179
|
+
this.options.onSelectInit(event);
|
|
180
|
+
this.$el.dispatchEvent(event);
|
|
181
|
+
}
|
|
182
|
+
handleSourceItems(items) {
|
|
183
|
+
return items.map((item) => {
|
|
184
|
+
return {
|
|
185
|
+
[this.options.valueField]: item.value[this.options.valueField],
|
|
186
|
+
[this.options.textField]: item.value[this.options.textField],
|
|
187
|
+
children: item.children
|
|
188
|
+
};
|
|
189
|
+
}).filter((item) => {
|
|
190
|
+
if (this.options.ignoreSelf) return item[this.options.valueField] != this.options.ignoreSelf;
|
|
191
|
+
return item;
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
findFromList(items, value) {
|
|
195
|
+
return items.filter((item) => item[this.options.valueField] == value).shift();
|
|
196
|
+
}
|
|
197
|
+
getPlaceholder(i) {
|
|
198
|
+
if (this.options.placeholders[i]) return this.options.placeholders[i];
|
|
199
|
+
return this.options.placeholder;
|
|
200
|
+
}
|
|
82
201
|
};
|
|
83
|
-
|
|
84
|
-
options;
|
|
85
|
-
el;
|
|
86
|
-
canModify = false;
|
|
87
|
-
lists = [];
|
|
88
|
-
ajaxUrl = "";
|
|
89
|
-
values = [];
|
|
90
|
-
constructor(options = {}) {
|
|
91
|
-
super();
|
|
92
|
-
this.options = mergeDeep({}, defaultOptions, options);
|
|
93
|
-
this.options.id = this.options.id || "cascade-select-" + uid();
|
|
94
|
-
}
|
|
95
|
-
init() {
|
|
96
|
-
this.canModify = !this.options.readonly && !this.options.disabled;
|
|
97
|
-
this.ajaxUrl = this.options.ajaxUrl;
|
|
98
|
-
this.values = this.options.path.slice().map(String);
|
|
99
|
-
let values = this.options.path.slice();
|
|
100
|
-
if (values.length === 0) {
|
|
101
|
-
values = [null];
|
|
102
|
-
} else {
|
|
103
|
-
values.unshift(null);
|
|
104
|
-
}
|
|
105
|
-
let promise = Promise.resolve();
|
|
106
|
-
let lastValue = null;
|
|
107
|
-
values.forEach((v, i) => {
|
|
108
|
-
promise = promise.then(() => {
|
|
109
|
-
return this.loadItems(v, i).then((list) => {
|
|
110
|
-
if (list.length > 0) {
|
|
111
|
-
this.lists.push(list);
|
|
112
|
-
}
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
lastValue = v;
|
|
116
|
-
});
|
|
117
|
-
this.el = this.$el;
|
|
118
|
-
module$1(this.$el, "cascade.select", () => this);
|
|
119
|
-
this.valueInit(this.$el, lastValue, values);
|
|
120
|
-
}
|
|
121
|
-
getLabel(i) {
|
|
122
|
-
return this.options.labels[i] || `Level ${i + 1}`;
|
|
123
|
-
}
|
|
124
|
-
getId(i) {
|
|
125
|
-
return `${this.options.id}__level-${i}`;
|
|
126
|
-
}
|
|
127
|
-
getListValue(i) {
|
|
128
|
-
return this.values[i] || "";
|
|
129
|
-
}
|
|
130
|
-
isSelected(i, item) {
|
|
131
|
-
return String(this.getListValue(i)) === String(item[this.options.valueField]);
|
|
132
|
-
}
|
|
133
|
-
getFinalValue() {
|
|
134
|
-
const values = this.values.slice();
|
|
135
|
-
if (values.length === 0) {
|
|
136
|
-
return this.options.defaultValue;
|
|
137
|
-
}
|
|
138
|
-
const v = values.filter((v2) => v2 != null).filter((v2) => v2 !== "").pop();
|
|
139
|
-
if (v == void 0) {
|
|
140
|
-
return this.options.defaultValue;
|
|
141
|
-
}
|
|
142
|
-
return v;
|
|
143
|
-
}
|
|
144
|
-
getLevel() {
|
|
145
|
-
return this.values.length;
|
|
146
|
-
}
|
|
147
|
-
async onChange(i, event) {
|
|
148
|
-
const el = event.target;
|
|
149
|
-
this.values[i] = el.value;
|
|
150
|
-
this.options.onChange(event);
|
|
151
|
-
event.stopPropagation();
|
|
152
|
-
const changeEvent = new CustomEvent("change", {
|
|
153
|
-
detail: {
|
|
154
|
-
el,
|
|
155
|
-
component: this,
|
|
156
|
-
value: el.value,
|
|
157
|
-
path: this.values
|
|
158
|
-
}
|
|
159
|
-
});
|
|
160
|
-
this.el?.dispatchEvent(changeEvent);
|
|
161
|
-
if (el.value === "") {
|
|
162
|
-
this.lists.splice(i + 1);
|
|
163
|
-
this.values.splice(i + 1);
|
|
164
|
-
return;
|
|
165
|
-
}
|
|
166
|
-
let list = await this.loadItems(el.value, i);
|
|
167
|
-
this.lists.splice(i + 1);
|
|
168
|
-
this.values.splice(i + 1);
|
|
169
|
-
if (list.length > 0) {
|
|
170
|
-
this.lists.push(list);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
async loadItems(parentId, i) {
|
|
174
|
-
if (this.ajaxUrl) {
|
|
175
|
-
const http = await useHttpClient();
|
|
176
|
-
let res = await http.get(
|
|
177
|
-
this.ajaxUrl,
|
|
178
|
-
{
|
|
179
|
-
params: {
|
|
180
|
-
[this.options.ajaxValueField]: parentId,
|
|
181
|
-
self: this.options.ignoreSelf || null
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
);
|
|
185
|
-
return await res.data.data;
|
|
186
|
-
}
|
|
187
|
-
if (parentId) {
|
|
188
|
-
return Promise.resolve(
|
|
189
|
-
this.handleSourceItems(
|
|
190
|
-
this.findFromList(this.lists[i - 1] || [], parentId)?.children || []
|
|
191
|
-
)
|
|
192
|
-
);
|
|
193
|
-
}
|
|
194
|
-
return Promise.resolve(this.handleSourceItems(this.options.source));
|
|
195
|
-
}
|
|
196
|
-
valueInit($select, value, path) {
|
|
197
|
-
const event = new CustomEvent("value.init", {
|
|
198
|
-
detail: {
|
|
199
|
-
el: $select,
|
|
200
|
-
component: this,
|
|
201
|
-
value,
|
|
202
|
-
path
|
|
203
|
-
}
|
|
204
|
-
});
|
|
205
|
-
this.options.onSelectInit(event);
|
|
206
|
-
this.$el.dispatchEvent(event);
|
|
207
|
-
}
|
|
208
|
-
selectInit($select) {
|
|
209
|
-
const event = new CustomEvent("select.init", {
|
|
210
|
-
detail: {
|
|
211
|
-
el: $select,
|
|
212
|
-
component: this
|
|
213
|
-
}
|
|
214
|
-
});
|
|
215
|
-
this.options.onSelectInit(event);
|
|
216
|
-
this.$el.dispatchEvent(event);
|
|
217
|
-
}
|
|
218
|
-
handleSourceItems(items) {
|
|
219
|
-
return items.map((item) => {
|
|
220
|
-
return {
|
|
221
|
-
[this.options.valueField]: item.value[this.options.valueField],
|
|
222
|
-
[this.options.textField]: item.value[this.options.textField],
|
|
223
|
-
children: item.children
|
|
224
|
-
};
|
|
225
|
-
}).filter((item) => {
|
|
226
|
-
if (this.options.ignoreSelf) {
|
|
227
|
-
return item[this.options.valueField] != this.options.ignoreSelf;
|
|
228
|
-
}
|
|
229
|
-
return item;
|
|
230
|
-
});
|
|
231
|
-
}
|
|
232
|
-
findFromList(items, value) {
|
|
233
|
-
const found = items.filter((item) => item[this.options.valueField] == value);
|
|
234
|
-
return found.shift();
|
|
235
|
-
}
|
|
236
|
-
getPlaceholder(i) {
|
|
237
|
-
if (this.options.placeholders[i]) {
|
|
238
|
-
return this.options.placeholders[i];
|
|
239
|
-
}
|
|
240
|
-
return this.options.placeholder;
|
|
241
|
-
}
|
|
242
|
-
};
|
|
243
|
-
FieldCascadeSelect = /* @__PURE__ */ __decorateClass([
|
|
244
|
-
Component
|
|
245
|
-
], FieldCascadeSelect);
|
|
202
|
+
FieldCascadeSelect = /* @__PURE__ */ __decorate([import_component.default, /* @__PURE__ */ __decorateMetadata("design:paramtypes", [typeof (_ref = typeof Partial !== "undefined" && Partial) === "function" ? _ref : Object])], FieldCascadeSelect);
|
|
246
203
|
async function init() {
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
204
|
+
await prepareAlpineDefer(() => {
|
|
205
|
+
Alpine.data("CascadeSelect", (options) => new FieldCascadeSelect(options));
|
|
206
|
+
});
|
|
207
|
+
await initAlpineComponent("data-cascade-select");
|
|
251
208
|
}
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
//# sourceMappingURL=field-cascade-select.js.map
|
|
209
|
+
var ready = /* @__PURE__ */ init();
|
|
210
|
+
//#endregion
|
|
211
|
+
export { ready };
|
|
212
|
+
|
|
213
|
+
//# sourceMappingURL=field-cascade-select.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-cascade-select.js","sources":["../../../../../../node_modules/@rubenbimmel/alpine-class-component/dist/alpineComponent.js","../../../../../../node_modules/@rubenbimmel/alpine-class-component/dist/decorators/component.js","../../src/module/field-cascade-select.ts"],"sourcesContent":["\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nclass AlpineComponent {\r\n}\r\nexports.default = AlpineComponent;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nfunction Component(component) {\r\n return function (...args) {\r\n let instance = new component(...args);\r\n const proto = component.prototype;\r\n let data = {};\r\n Object.getOwnPropertyNames(proto).forEach(function (key) {\r\n if (key === 'constructor') {\r\n return;\r\n }\r\n const descriptor = Object.getOwnPropertyDescriptor(proto, key);\r\n if (descriptor.value !== void 0) {\r\n if (typeof descriptor.value === 'function') {\r\n data[key] = descriptor.value;\r\n }\r\n }\r\n else if (descriptor.get || descriptor.set) {\r\n Object.defineProperty(data, key, { get: descriptor.get, set: descriptor.set });\r\n }\r\n });\r\n return Object.assign(data, instance);\r\n };\r\n}\r\nexports.default = Component;\r\n","import AlpineComponent from '@rubenbimmel/alpine-class-component/dist/alpineComponent';\nimport Component from '@rubenbimmel/alpine-class-component/dist/decorators/component';\nimport { useHttpClient } from '../composable';\nimport { initAlpineComponent, module, prepareAlpineDefer, uid } from '../service';\nimport { mergeDeep } from '../utilities';\n\ninterface CascadeSelectOptions {\n id: string;\n selected: string;\n path: string[];\n ignoreSelf: boolean | null;\n placeholder: string;\n placeholders: string[];\n ajaxUrl: string;\n ajaxValueField: string;\n source: string[];\n labels: string[];\n labelWidth: string;\n fieldWidth: string;\n readonly: boolean;\n disabled: boolean;\n valueField: string;\n textField: string;\n horizontal: boolean | null;\n horizontalColWidth: string | null;\n defaultValue: string;\n onSelectInit: Function,\n onChange: Function,\n onValueInit: Function,\n}\n\nconst defaultOptions = {\n id: '',\n selected: '',\n path: [],\n ignoreSelf: null,\n placeholder: '- Select -',\n placeholders: [],\n ajaxUrl: '',\n ajaxValueField: 'value',\n source: [],\n labels: [],\n labelWidth: 'col-md-3',\n fieldWidth: 'col',\n readonly: false,\n disabled: false,\n valueField: 'id',\n textField: 'title',\n horizontal: null,\n horizontalColWidth: null,\n defaultValue: '',\n onSelectInit: () => {\n },\n onChange: () => {\n },\n onValueInit: () => {\n },\n};\n\n@Component\nclass FieldCascadeSelect extends AlpineComponent {\n options: CascadeSelectOptions;\n el?: HTMLElement;\n canModify: boolean = false;\n lists: any[] = [];\n ajaxUrl: string = '';\n values: Array<string | null> = [];\n\n constructor(options: Partial<CascadeSelectOptions> = {}) {\n super();\n\n this.options = mergeDeep({}, defaultOptions, options);\n\n this.options.id = this.options.id || 'cascade-select-' + uid();\n }\n\n init() {\n this.canModify = !this.options.readonly && !this.options.disabled;\n this.ajaxUrl = this.options.ajaxUrl;\n this.values = this.options.path.slice().map(String);\n\n let values: Array<string | null> = this.options.path.slice();\n\n if (values.length === 0) {\n values = [null];\n } else {\n values.unshift(null);\n }\n\n let promise = Promise.resolve();\n let lastValue: string | null = null;\n\n values.forEach((v, i) => {\n promise = promise.then(() => {\n return this.loadItems(v, i).then((list) => {\n if (list.length > 0) {\n this.lists.push(list);\n }\n });\n });\n\n lastValue = v;\n });\n\n this.el = this.$el;\n\n module(this.$el, 'cascade.select', () => this);\n\n this.valueInit(this.$el, lastValue, values);\n }\n\n getLabel(i: number) {\n return this.options.labels[i] || `Level ${i + 1}`;\n }\n\n getId(i: number) {\n return `${this.options.id}__level-${i}`;\n }\n\n getListValue(i: number) {\n return this.values[i] || '';\n }\n\n isSelected(i: number, item: any) {\n return String(this.getListValue(i)) === String(item[this.options.valueField]);\n }\n\n getFinalValue() {\n const values = this.values.slice();\n\n if (values.length === 0) {\n return this.options.defaultValue;\n }\n\n const v = values\n .filter(v => v != null)\n .filter(v => v !== '')\n .pop();\n\n if (v == undefined) {\n return this.options.defaultValue;\n }\n\n return v;\n }\n\n getLevel() {\n return this.values.length;\n }\n\n async onChange(i: number, event: Event) {\n const el = event.target as HTMLSelectElement;\n\n this.values[i] = el.value;\n\n this.options.onChange(event);\n\n event.stopPropagation();\n\n const changeEvent = new CustomEvent('change', {\n detail: {\n el,\n component: this,\n value: el.value,\n path: this.values\n }\n });\n\n this.el?.dispatchEvent(changeEvent);\n\n if (el.value === '') {\n // Clear child\n this.lists.splice(i + 1);\n this.values.splice(i + 1);\n return;\n }\n\n // Get child list\n let list = await this.loadItems(el.value, i);\n this.lists.splice(i + 1);\n this.values.splice(i + 1);\n if (list.length > 0) {\n this.lists.push(list);\n }\n }\n\n async loadItems(parentId: string | null, i: number) {\n // Ajax\n if (this.ajaxUrl) {\n const http = await useHttpClient();\n\n let res = await http.get(\n this.ajaxUrl,\n {\n params: {\n [this.options.ajaxValueField]: parentId,\n self: this.options.ignoreSelf || null\n }\n }\n );\n return await res.data.data;\n }\n\n // Source\n if (parentId) {\n return Promise.resolve(\n this.handleSourceItems(\n this.findFromList(this.lists[i - 1] || [], parentId)?.children || []\n )\n );\n }\n\n return Promise.resolve(this.handleSourceItems(this.options.source));\n }\n\n valueInit($select: HTMLElement, value: string | null, path: Array<string | null>) {\n const event = new CustomEvent('value.init', {\n detail: {\n el: $select,\n component: this,\n value,\n path\n }\n });\n\n this.options.onSelectInit(event);\n\n this.$el.dispatchEvent(event);\n }\n\n selectInit($select: HTMLElement) {\n const event = new CustomEvent('select.init', {\n detail: {\n el: $select,\n component: this,\n }\n });\n\n this.options.onSelectInit(event);\n\n this.$el.dispatchEvent(event);\n }\n\n handleSourceItems(items: any[]) {\n return items.map(item => {\n return {\n [this.options.valueField]: item.value[this.options.valueField],\n [this.options.textField]: item.value[this.options.textField],\n children: item.children\n };\n })\n .filter(item => {\n if (this.options.ignoreSelf) {\n return item[this.options.valueField] != this.options.ignoreSelf;\n }\n\n return item;\n });\n }\n\n findFromList(items: any[], value: string) {\n const found = items.filter(item => item[this.options.valueField] == value);\n\n return found.shift();\n }\n\n getPlaceholder(i: number) {\n if (this.options.placeholders[i]) {\n return this.options.placeholders[i];\n }\n\n return this.options.placeholder;\n }\n}\n\ndeclare global {\n var S: any;\n}\n\nasync function init() {\n await prepareAlpineDefer(() => {\n Alpine.data('CascadeSelect', (options: CascadeSelectOptions) => new FieldCascadeSelect(options));\n });\n\n await initAlpineComponent('data-cascade-select');\n}\n\nexport const ready = init();\n\nexport interface CascadeSelectModule {\n ready: typeof ready;\n}\n"],"names":["AlpineComponent","Component","component","module","v"],"mappings":";;;;;;;AACA,SAAO,eAAe,iBAAS,cAAc,EAAE,OAAO,KAAI,CAAE;AAAA,EAC5D,MAAMA,iBAAgB;AAAA;AAEtB,kBAAA,UAAkBA;;;;;;;;;;ACHlB,SAAO,eAAe,WAAS,cAAc,EAAE,OAAO,KAAI,CAAE;AAC5D,WAASC,WAAUC,YAAW;AAC1B,WAAO,YAAa,MAAM;AACtB,UAAI,WAAW,IAAIA,WAAU,GAAG,IAAI;AACpC,YAAM,QAAQA,WAAU;AACxB,UAAI,OAAO,CAAA;AACX,aAAO,oBAAoB,KAAK,EAAE,QAAQ,SAAU,KAAK;AACrD,YAAI,QAAQ,eAAe;AACvB;AAAA,QAChB;AACY,cAAM,aAAa,OAAO,yBAAyB,OAAO,GAAG;AAC7D,YAAI,WAAW,UAAU,QAAQ;AAC7B,cAAI,OAAO,WAAW,UAAU,YAAY;AACxC,iBAAK,GAAG,IAAI,WAAW;AAAA,UAC3C;AAAA,QACA,WACqB,WAAW,OAAO,WAAW,KAAK;AACvC,iBAAO,eAAe,MAAM,KAAK,EAAE,KAAK,WAAW,KAAK,KAAK,WAAW,IAAG,CAAE;AAAA,QAC7F;AAAA,MACA,CAAS;AACD,aAAO,OAAO,OAAO,MAAM,QAAQ;AAAA,IAC3C;AAAA,EACA;AACA,YAAA,UAAkBD;;;;;;;;;;;;;ACOlB,MAAM,iBAAiB;AAAA,EACrB,IAAI;AAAA,EACJ,UAAU;AAAA,EACV,MAAM,CAAA;AAAA,EACN,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,cAAc,CAAA;AAAA,EACd,SAAS;AAAA,EACT,gBAAgB;AAAA,EAChB,QAAQ,CAAA;AAAA,EACR,QAAQ,CAAA;AAAA,EACR,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,oBAAoB;AAAA,EACpB,cAAc;AAAA,EACd,cAAc,MAAM;AAAA,EACpB;AAAA,EACA,UAAU,MAAM;AAAA,EAChB;AAAA,EACA,aAAa,MAAM;AAAA,EACnB;AACF;AAGA,IAAM,qBAAN,cAAiC,gBAAgB;AAAA,EAC/C;AAAA,EACA;AAAA,EACA,YAAqB;AAAA,EACrB,QAAe,CAAA;AAAA,EACf,UAAkB;AAAA,EAClB,SAA+B,CAAA;AAAA,EAE/B,YAAY,UAAyC,IAAI;AACvD,UAAA;AAEA,SAAK,UAAU,UAAU,CAAA,GAAI,gBAAgB,OAAO;AAEpD,SAAK,QAAQ,KAAK,KAAK,QAAQ,MAAM,oBAAoB,IAAA;AAAA,EAC3D;AAAA,EAEA,OAAO;AACL,SAAK,YAAY,CAAC,KAAK,QAAQ,YAAY,CAAC,KAAK,QAAQ;AACzD,SAAK,UAAU,KAAK,QAAQ;AAC5B,SAAK,SAAS,KAAK,QAAQ,KAAK,MAAA,EAAQ,IAAI,MAAM;AAElD,QAAI,SAA+B,KAAK,QAAQ,KAAK,MAAA;AAErD,QAAI,OAAO,WAAW,GAAG;AACvB,eAAS,CAAC,IAAI;AAAA,IAChB,OAAO;AACL,aAAO,QAAQ,IAAI;AAAA,IACrB;AAEA,QAAI,UAAU,QAAQ,QAAA;AACtB,QAAI,YAA2B;AAE/B,WAAO,QAAQ,CAAC,GAAG,MAAM;AACvB,gBAAU,QAAQ,KAAK,MAAM;AAC3B,eAAO,KAAK,UAAU,GAAG,CAAC,EAAE,KAAK,CAAC,SAAS;AACzC,cAAI,KAAK,SAAS,GAAG;AACnB,iBAAK,MAAM,KAAK,IAAI;AAAA,UACtB;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAED,kBAAY;AAAA,IACd,CAAC;AAED,SAAK,KAAK,KAAK;AAEfE,aAAO,KAAK,KAAK,kBAAkB,MAAM,IAAI;AAE7C,SAAK,UAAU,KAAK,KAAK,WAAW,MAAM;AAAA,EAC5C;AAAA,EAEA,SAAS,GAAW;AAClB,WAAO,KAAK,QAAQ,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC;AAAA,EACjD;AAAA,EAEA,MAAM,GAAW;AACf,WAAO,GAAG,KAAK,QAAQ,EAAE,WAAW,CAAC;AAAA,EACvC;AAAA,EAEA,aAAa,GAAW;AACtB,WAAO,KAAK,OAAO,CAAC,KAAK;AAAA,EAC3B;AAAA,EAEA,WAAW,GAAW,MAAW;AAC/B,WAAO,OAAO,KAAK,aAAa,CAAC,CAAC,MAAM,OAAO,KAAK,KAAK,QAAQ,UAAU,CAAC;AAAA,EAC9E;AAAA,EAEA,gBAAgB;AACd,UAAM,SAAS,KAAK,OAAO,MAAA;AAE3B,QAAI,OAAO,WAAW,GAAG;AACvB,aAAO,KAAK,QAAQ;AAAA,IACtB;AAEA,UAAM,IAAI,OACP,OAAO,CAAAC,OAAKA,MAAK,IAAI,EACrB,OAAO,CAAAA,OAAKA,OAAM,EAAE,EACpB,IAAA;AAEH,QAAI,KAAK,QAAW;AAClB,aAAO,KAAK,QAAQ;AAAA,IACtB;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,WAAW;AACT,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,MAAM,SAAS,GAAW,OAAc;AACtC,UAAM,KAAK,MAAM;AAEjB,SAAK,OAAO,CAAC,IAAI,GAAG;AAEpB,SAAK,QAAQ,SAAS,KAAK;AAE3B,UAAM,gBAAA;AAEN,UAAM,cAAc,IAAI,YAAY,UAAU;AAAA,MAC5C,QAAQ;AAAA,QACN;AAAA,QACA,WAAW;AAAA,QACX,OAAO,GAAG;AAAA,QACV,MAAM,KAAK;AAAA,MAAA;AAAA,IACb,CACD;AAED,SAAK,IAAI,cAAc,WAAW;AAElC,QAAI,GAAG,UAAU,IAAI;AAEnB,WAAK,MAAM,OAAO,IAAI,CAAC;AACvB,WAAK,OAAO,OAAO,IAAI,CAAC;AACxB;AAAA,IACF;AAGA,QAAI,OAAO,MAAM,KAAK,UAAU,GAAG,OAAO,CAAC;AAC3C,SAAK,MAAM,OAAO,IAAI,CAAC;AACvB,SAAK,OAAO,OAAO,IAAI,CAAC;AACxB,QAAI,KAAK,SAAS,GAAG;AACnB,WAAK,MAAM,KAAK,IAAI;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,MAAM,UAAU,UAAyB,GAAW;AAElD,QAAI,KAAK,SAAS;AAChB,YAAM,OAAO,MAAM,cAAA;AAEnB,UAAI,MAAM,MAAM,KAAK;AAAA,QACnB,KAAK;AAAA,QACL;AAAA,UACE,QAAQ;AAAA,YACN,CAAC,KAAK,QAAQ,cAAc,GAAG;AAAA,YAC/B,MAAM,KAAK,QAAQ,cAAc;AAAA,UAAA;AAAA,QACnC;AAAA,MACF;AAEF,aAAO,MAAM,IAAI,KAAK;AAAA,IACxB;AAGA,QAAI,UAAU;AACZ,aAAO,QAAQ;AAAA,QACb,KAAK;AAAA,UACH,KAAK,aAAa,KAAK,MAAM,IAAI,CAAC,KAAK,CAAA,GAAI,QAAQ,GAAG,YAAY,CAAA;AAAA,QAAC;AAAA,MACrE;AAAA,IAEJ;AAEA,WAAO,QAAQ,QAAQ,KAAK,kBAAkB,KAAK,QAAQ,MAAM,CAAC;AAAA,EACpE;AAAA,EAEA,UAAU,SAAsB,OAAsB,MAA4B;AAChF,UAAM,QAAQ,IAAI,YAAY,cAAc;AAAA,MAC1C,QAAQ;AAAA,QACN,IAAI;AAAA,QACJ,WAAW;AAAA,QACX;AAAA,QACA;AAAA,MAAA;AAAA,IACF,CACD;AAED,SAAK,QAAQ,aAAa,KAAK;AAE/B,SAAK,IAAI,cAAc,KAAK;AAAA,EAC9B;AAAA,EAEA,WAAW,SAAsB;AAC/B,UAAM,QAAQ,IAAI,YAAY,eAAe;AAAA,MAC3C,QAAQ;AAAA,QACN,IAAI;AAAA,QACJ,WAAW;AAAA,MAAA;AAAA,IACb,CACD;AAED,SAAK,QAAQ,aAAa,KAAK;AAE/B,SAAK,IAAI,cAAc,KAAK;AAAA,EAC9B;AAAA,EAEA,kBAAkB,OAAc;AAC9B,WAAO,MAAM,IAAI,CAAA,SAAQ;AACvB,aAAO;AAAA,QACL,CAAC,KAAK,QAAQ,UAAU,GAAG,KAAK,MAAM,KAAK,QAAQ,UAAU;AAAA,QAC7D,CAAC,KAAK,QAAQ,SAAS,GAAG,KAAK,MAAM,KAAK,QAAQ,SAAS;AAAA,QAC3D,UAAU,KAAK;AAAA,MAAA;AAAA,IAEnB,CAAC,EACE,OAAO,CAAA,SAAQ;AACd,UAAI,KAAK,QAAQ,YAAY;AAC3B,eAAO,KAAK,KAAK,QAAQ,UAAU,KAAK,KAAK,QAAQ;AAAA,MACvD;AAEA,aAAO;AAAA,IACT,CAAC;AAAA,EACL;AAAA,EAEA,aAAa,OAAc,OAAe;AACxC,UAAM,QAAQ,MAAM,OAAO,CAAA,SAAQ,KAAK,KAAK,QAAQ,UAAU,KAAK,KAAK;AAEzE,WAAO,MAAM,MAAA;AAAA,EACf;AAAA,EAEA,eAAe,GAAW;AACxB,QAAI,KAAK,QAAQ,aAAa,CAAC,GAAG;AAChC,aAAO,KAAK,QAAQ,aAAa,CAAC;AAAA,IACpC;AAEA,WAAO,KAAK,QAAQ;AAAA,EACtB;AACF;AArNM,qBAAN,gCAAA;AAAA,EADC;AAAA,GACK,kBAAA;AA2NN,eAAe,OAAO;AACpB,QAAM,mBAAmB,MAAM;AAC7B,WAAO,KAAK,iBAAiB,CAAC,YAAkC,IAAI,mBAAmB,OAAO,CAAC;AAAA,EACjG,CAAC;AAED,QAAM,oBAAoB,qBAAqB;AACjD;AAEO,MAAM,QAAQ,qBAAA;","x_google_ignoreList":[0,1]}
|
|
1
|
+
{"version":3,"file":"field-cascade-select.js","names":[],"sources":["../../../../../../node_modules/@rubenbimmel/alpine-class-component/dist/alpineComponent.js","../../../../../../node_modules/@rubenbimmel/alpine-class-component/dist/decorators/component.js","../../src/module/field-cascade-select.ts"],"sourcesContent":["\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nclass AlpineComponent {\r\n}\r\nexports.default = AlpineComponent;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nfunction Component(component) {\r\n return function (...args) {\r\n let instance = new component(...args);\r\n const proto = component.prototype;\r\n let data = {};\r\n Object.getOwnPropertyNames(proto).forEach(function (key) {\r\n if (key === 'constructor') {\r\n return;\r\n }\r\n const descriptor = Object.getOwnPropertyDescriptor(proto, key);\r\n if (descriptor.value !== void 0) {\r\n if (typeof descriptor.value === 'function') {\r\n data[key] = descriptor.value;\r\n }\r\n }\r\n else if (descriptor.get || descriptor.set) {\r\n Object.defineProperty(data, key, { get: descriptor.get, set: descriptor.set });\r\n }\r\n });\r\n return Object.assign(data, instance);\r\n };\r\n}\r\nexports.default = Component;\r\n","import AlpineComponent from '@rubenbimmel/alpine-class-component/dist/alpineComponent';\nimport Component from '@rubenbimmel/alpine-class-component/dist/decorators/component';\nimport { useHttpClient } from '../composable';\nimport { initAlpineComponent, module, prepareAlpineDefer, uid } from '../service';\nimport { mergeDeep } from '../utilities';\n\ninterface CascadeSelectOptions {\n id: string;\n selected: string;\n path: string[];\n ignoreSelf: boolean | null;\n placeholder: string;\n placeholders: string[];\n ajaxUrl: string;\n ajaxValueField: string;\n source: string[];\n labels: string[];\n labelWidth: string;\n fieldWidth: string;\n readonly: boolean;\n disabled: boolean;\n valueField: string;\n textField: string;\n horizontal: boolean | null;\n horizontalColWidth: string | null;\n defaultValue: string;\n onSelectInit: Function,\n onChange: Function,\n onValueInit: Function,\n}\n\nconst defaultOptions = {\n id: '',\n selected: '',\n path: [],\n ignoreSelf: null,\n placeholder: '- Select -',\n placeholders: [],\n ajaxUrl: '',\n ajaxValueField: 'value',\n source: [],\n labels: [],\n labelWidth: 'col-md-3',\n fieldWidth: 'col',\n readonly: false,\n disabled: false,\n valueField: 'id',\n textField: 'title',\n horizontal: null,\n horizontalColWidth: null,\n defaultValue: '',\n onSelectInit: () => {\n },\n onChange: () => {\n },\n onValueInit: () => {\n },\n};\n\n@Component\nclass FieldCascadeSelect extends AlpineComponent {\n options: CascadeSelectOptions;\n el?: HTMLElement;\n canModify: boolean = false;\n lists: any[] = [];\n ajaxUrl: string = '';\n values: Array<string | null> = [];\n\n constructor(options: Partial<CascadeSelectOptions> = {}) {\n super();\n\n this.options = mergeDeep({}, defaultOptions, options);\n\n this.options.id = this.options.id || 'cascade-select-' + uid();\n }\n\n init() {\n this.canModify = !this.options.readonly && !this.options.disabled;\n this.ajaxUrl = this.options.ajaxUrl;\n this.values = this.options.path.slice().map(String);\n\n let values: Array<string | null> = this.options.path.slice();\n\n if (values.length === 0) {\n values = [null];\n } else {\n values.unshift(null);\n }\n\n let promise = Promise.resolve();\n let lastValue: string | null = null;\n\n values.forEach((v, i) => {\n promise = promise.then(() => {\n return this.loadItems(v, i).then((list) => {\n if (list.length > 0) {\n this.lists.push(list);\n }\n });\n });\n\n lastValue = v;\n });\n\n this.el = this.$el;\n\n module(this.$el, 'cascade.select', () => this);\n\n this.valueInit(this.$el, lastValue, values);\n }\n\n getLabel(i: number) {\n return this.options.labels[i] || `Level ${i + 1}`;\n }\n\n getId(i: number) {\n return `${this.options.id}__level-${i}`;\n }\n\n getListValue(i: number) {\n return this.values[i] || '';\n }\n\n isSelected(i: number, item: any) {\n return String(this.getListValue(i)) === String(item[this.options.valueField]);\n }\n\n getFinalValue() {\n const values = this.values.slice();\n\n if (values.length === 0) {\n return this.options.defaultValue;\n }\n\n const v = values\n .filter(v => v != null)\n .filter(v => v !== '')\n .pop();\n\n if (v == undefined) {\n return this.options.defaultValue;\n }\n\n return v;\n }\n\n getLevel() {\n return this.values.length;\n }\n\n async onChange(i: number, event: Event) {\n const el = event.target as HTMLSelectElement;\n\n this.values[i] = el.value;\n\n this.options.onChange(event);\n\n event.stopPropagation();\n\n const changeEvent = new CustomEvent('change', {\n detail: {\n el,\n component: this,\n value: el.value,\n path: this.values\n }\n });\n\n this.el?.dispatchEvent(changeEvent);\n\n if (el.value === '') {\n // Clear child\n this.lists.splice(i + 1);\n this.values.splice(i + 1);\n return;\n }\n\n // Get child list\n let list = await this.loadItems(el.value, i);\n this.lists.splice(i + 1);\n this.values.splice(i + 1);\n if (list.length > 0) {\n this.lists.push(list);\n }\n }\n\n async loadItems(parentId: string | null, i: number) {\n // Ajax\n if (this.ajaxUrl) {\n const http = await useHttpClient();\n\n let res = await http.get(\n this.ajaxUrl,\n {\n params: {\n [this.options.ajaxValueField]: parentId,\n self: this.options.ignoreSelf || null\n }\n }\n );\n return await res.data.data;\n }\n\n // Source\n if (parentId) {\n return Promise.resolve(\n this.handleSourceItems(\n this.findFromList(this.lists[i - 1] || [], parentId)?.children || []\n )\n );\n }\n\n return Promise.resolve(this.handleSourceItems(this.options.source));\n }\n\n valueInit($select: HTMLElement, value: string | null, path: Array<string | null>) {\n const event = new CustomEvent('value.init', {\n detail: {\n el: $select,\n component: this,\n value,\n path\n }\n });\n\n this.options.onSelectInit(event);\n\n this.$el.dispatchEvent(event);\n }\n\n selectInit($select: HTMLElement) {\n const event = new CustomEvent('select.init', {\n detail: {\n el: $select,\n component: this,\n }\n });\n\n this.options.onSelectInit(event);\n\n this.$el.dispatchEvent(event);\n }\n\n handleSourceItems(items: any[]) {\n return items.map(item => {\n return {\n [this.options.valueField]: item.value[this.options.valueField],\n [this.options.textField]: item.value[this.options.textField],\n children: item.children\n };\n })\n .filter(item => {\n if (this.options.ignoreSelf) {\n return item[this.options.valueField] != this.options.ignoreSelf;\n }\n\n return item;\n });\n }\n\n findFromList(items: any[], value: string) {\n const found = items.filter(item => item[this.options.valueField] == value);\n\n return found.shift();\n }\n\n getPlaceholder(i: number) {\n if (this.options.placeholders[i]) {\n return this.options.placeholders[i];\n }\n\n return this.options.placeholder;\n }\n}\n\ndeclare global {\n var S: any;\n}\n\nasync function init() {\n await prepareAlpineDefer(() => {\n Alpine.data('CascadeSelect', (options: CascadeSelectOptions) => new FieldCascadeSelect(options));\n });\n\n await initAlpineComponent('data-cascade-select');\n}\n\nexport const ready = init();\n\nexport interface CascadeSelectModule {\n ready: typeof ready;\n}\n"],"x_google_ignoreList":[0,1],"mappings":"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"}
|