@cnx-dev/angular-devextreme 1.0.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.
package/README.md ADDED
@@ -0,0 +1,7 @@
1
+ # angular-devextreme
2
+
3
+ This library was generated with [Nx](https://nx.dev).
4
+
5
+ ## Running unit tests
6
+
7
+ Run `nx test angular-devextreme` to execute the unit tests.
@@ -0,0 +1,284 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import * as i0 from '@angular/core';
3
+ import { InjectionToken, EventEmitter, Output, Input, ViewChild, Inject, Component, NgModule } from '@angular/core';
4
+ import * as i1 from 'devextreme-angular';
5
+ import { DxSelectBoxModule, DxTemplateModule } from 'devextreme-angular';
6
+ import DataSource from 'devextreme/data/data_source';
7
+ import * as i2 from 'devextreme-angular/core';
8
+
9
+ /**
10
+ * Injection Token สำหรับ SelectBoxDataProvider
11
+ * Consumer App จะต้อง provide token นี้ผ่าน CnxSelectBoxModule.forRoot()
12
+ *
13
+ * @example
14
+ * // ใน AppModule
15
+ * CnxSelectBoxModule.forRoot(AppSelectBoxService)
16
+ */
17
+ const SELECTBOX_DATA_PROVIDER = new InjectionToken('SELECTBOX_DATA_PROVIDER');
18
+
19
+ class SelectBoxComponent {
20
+ cdr;
21
+ service;
22
+ constructor(cdr, service) {
23
+ this.cdr = cdr;
24
+ this.service = service;
25
+ }
26
+ ngOnInit() {
27
+ this.setupDataSource();
28
+ }
29
+ ngOnChanges(changes) {
30
+ const change = changes['cascadeBy'];
31
+ if (!!change && !change.firstChange) {
32
+ const { currentValue, previousValue } = change;
33
+ const isChange = JSON.stringify(currentValue) !== JSON.stringify(previousValue);
34
+ if (isChange)
35
+ this.setupDataSource();
36
+ }
37
+ }
38
+ selectBox;
39
+ id = '';
40
+ name = '';
41
+ width = '100%';
42
+ placeholder = 'Please select...';
43
+ set displayExpr(val) {
44
+ const _val = val?.toString() || '';
45
+ if (_val && _val !== this._displayExpr)
46
+ this._displayExpr = _val;
47
+ }
48
+ get displayExpr() { return this._displayExpr; }
49
+ _displayExpr = 'text';
50
+ set valueExpr(val) {
51
+ const _val = val?.toString() || '';
52
+ if (_val && _val !== this._valueExpr)
53
+ this._valueExpr = _val;
54
+ }
55
+ get valueExpr() { return this._valueExpr; }
56
+ _valueExpr = 'value';
57
+ set searchExpr(val) {
58
+ const _val = val?.toString() || '';
59
+ if (_val && _val !== this._searchExpr)
60
+ this._searchExpr = _val;
61
+ }
62
+ get searchExpr() { return this._searchExpr; }
63
+ _searchExpr = 'dropdownText';
64
+ set dropdownExpr(val) {
65
+ const _val = val?.toString() || '';
66
+ if (_val && _val !== this._dropdownExpr) {
67
+ this._dropdownExpr = _val;
68
+ this._searchExpr = _val;
69
+ }
70
+ }
71
+ get dropdownExpr() { return this._dropdownExpr; }
72
+ _dropdownExpr = 'dropdownText';
73
+ searchEnabled = true;
74
+ searchTimeout = 500;
75
+ showClearButton = true;
76
+ set value(val) {
77
+ const _val = val?.toString() ?? '';
78
+ if (_val !== this._value)
79
+ this._value = _val;
80
+ }
81
+ get value() { return this._value; }
82
+ _value = '';
83
+ dataSource;
84
+ dropdownWidth;
85
+ maxLength = 0;
86
+ disabled = false;
87
+ cascadeBy;
88
+ selectBoxKey = null;
89
+ ignoreValue;
90
+ eventValueChanged = new EventEmitter();
91
+ eventEnterKey = new EventEmitter();
92
+ paginate = true;
93
+ pageSize = 50;
94
+ clearValueOnCascade = false;
95
+ hasInitialValue = false;
96
+ onValueChanged($event) {
97
+ setTimeout(() => this.eventValueChanged.emit($event));
98
+ this.cdr.detectChanges();
99
+ }
100
+ onEnterKey() {
101
+ this.eventEnterKey.emit();
102
+ }
103
+ setupDataSource() {
104
+ this.dataSource = new DataSource({
105
+ load: (loadOptions) => this.setupDataSourceOnLoad(loadOptions),
106
+ byKey: (key) => this.setupDataSourceByKey(key),
107
+ paginate: this.paginate,
108
+ pageSize: this.pageSize,
109
+ requireTotalCount: true,
110
+ });
111
+ if (this.clearValueOnCascade && !!this.value && this.selectBox) {
112
+ this.selectBox.value = '';
113
+ }
114
+ this.cdr.detectChanges();
115
+ }
116
+ setupDataSourceOnLoad(loadOptions) {
117
+ return new Promise((resolve) => {
118
+ if ((loadOptions?.take ?? 0) === 0) {
119
+ resolve({ data: [], totalCount: 0 });
120
+ return;
121
+ }
122
+ this.service
123
+ .getService(this.selectBoxKey, {
124
+ key: this.value,
125
+ cascadeBy: this.cascadeBy,
126
+ loadOptions: { ...loadOptions },
127
+ })
128
+ .subscribe((result) => {
129
+ if (this.ignoreValue?.length) {
130
+ result.data = result.data.filter((f) => !this.ignoreValue.includes(f.value));
131
+ }
132
+ this.hasInitialValue = result.hasInitialValue ?? false;
133
+ resolve(result);
134
+ });
135
+ });
136
+ }
137
+ setupDataSourceByKey(key) {
138
+ return new Promise((resolve) => {
139
+ if (!key) {
140
+ resolve([]);
141
+ return;
142
+ }
143
+ this.service
144
+ .getService(this.selectBoxKey, {
145
+ isByKey: true,
146
+ key,
147
+ cascadeBy: this.cascadeBy,
148
+ })
149
+ .subscribe((result) => resolve(result.data));
150
+ });
151
+ }
152
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: SelectBoxComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: SELECTBOX_DATA_PROVIDER }], target: i0.ɵɵFactoryTarget.Component });
153
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.5", type: SelectBoxComponent, isStandalone: false, selector: "cnx-select-box", inputs: { id: "id", name: "name", width: "width", placeholder: "placeholder", displayExpr: "displayExpr", valueExpr: "valueExpr", searchExpr: "searchExpr", dropdownExpr: "dropdownExpr", searchEnabled: "searchEnabled", searchTimeout: "searchTimeout", showClearButton: "showClearButton", value: "value", dropdownWidth: "dropdownWidth", maxLength: "maxLength", disabled: "disabled", cascadeBy: "cascadeBy", selectBoxKey: "selectBoxKey", ignoreValue: "ignoreValue" }, outputs: { eventValueChanged: "onValueChanged", eventEnterKey: "onEnterKey" }, viewQueries: [{ propertyName: "selectBox", first: true, predicate: ["selectBox"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<dx-select-box\r\n #selectBox\r\n [id]=\"'cnx_select_box_' + id\"\r\n [name]=\"'cnx_select_box_' + name\"\r\n [width]=\"width\"\r\n [placeholder]=\"placeholder\"\r\n [displayExpr]=\"displayExpr\"\r\n [valueExpr]=\"valueExpr\"\r\n [deferRendering]=\"true\"\r\n [searchExpr]=\"searchExpr\"\r\n [searchEnabled]=\"searchEnabled\"\r\n [searchTimeout]=\"searchTimeout\"\r\n [showClearButton]=\"showClearButton\"\r\n [value]=\"value\"\r\n [dataSource]=\"dataSource\"\r\n itemTemplate=\"itemTemplate\"\r\n [dropDownOptions]=\"{ minWidth: '100%', width: dropdownWidth }\"\r\n [maxLength]=\"maxLength\"\r\n [disabled]=\"disabled\"\r\n (onValueChanged)=\"onValueChanged($event)\"\r\n (onEnterKey)=\"onEnterKey()\"\r\n>\r\n <div *dxTemplate=\"let data of 'itemTemplate'\">\r\n <div>\r\n <span\r\n [title]=\"data[dropdownExpr]\"\r\n [innerText]=\"data[dropdownExpr]\"\r\n ></span>\r\n </div>\r\n </div>\r\n</dx-select-box>\r\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: i1.DxSelectBoxComponent, selector: "dx-select-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "buttons", "customItemCreateEvent", "dataSource", "deferRendering", "disabled", "displayExpr", "displayValue", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hint", "hoverStateEnabled", "inputAttr", "isDirty", "isValid", "items", "itemTemplate", "label", "labelMode", "maxLength", "minSearchLength", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectedItem", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showSelectionControls", "spellcheck", "stylingMode", "tabIndex", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCustomItemCreating", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "customItemCreateEventChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "displayValueChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isDirtyChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxLengthChange", "minSearchLengthChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectedItemChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showSelectionControlsChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "directive", type: i2.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }] });
154
+ }
155
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: SelectBoxComponent, decorators: [{
156
+ type: Component,
157
+ args: [{ selector: 'cnx-select-box', standalone: false, template: "<dx-select-box\r\n #selectBox\r\n [id]=\"'cnx_select_box_' + id\"\r\n [name]=\"'cnx_select_box_' + name\"\r\n [width]=\"width\"\r\n [placeholder]=\"placeholder\"\r\n [displayExpr]=\"displayExpr\"\r\n [valueExpr]=\"valueExpr\"\r\n [deferRendering]=\"true\"\r\n [searchExpr]=\"searchExpr\"\r\n [searchEnabled]=\"searchEnabled\"\r\n [searchTimeout]=\"searchTimeout\"\r\n [showClearButton]=\"showClearButton\"\r\n [value]=\"value\"\r\n [dataSource]=\"dataSource\"\r\n itemTemplate=\"itemTemplate\"\r\n [dropDownOptions]=\"{ minWidth: '100%', width: dropdownWidth }\"\r\n [maxLength]=\"maxLength\"\r\n [disabled]=\"disabled\"\r\n (onValueChanged)=\"onValueChanged($event)\"\r\n (onEnterKey)=\"onEnterKey()\"\r\n>\r\n <div *dxTemplate=\"let data of 'itemTemplate'\">\r\n <div>\r\n <span\r\n [title]=\"data[dropdownExpr]\"\r\n [innerText]=\"data[dropdownExpr]\"\r\n ></span>\r\n </div>\r\n </div>\r\n</dx-select-box>\r\n", styles: [":host{display:block}\n"] }]
158
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
159
+ type: Inject,
160
+ args: [SELECTBOX_DATA_PROVIDER]
161
+ }] }], propDecorators: { selectBox: [{
162
+ type: ViewChild,
163
+ args: ['selectBox']
164
+ }], id: [{
165
+ type: Input,
166
+ args: ['id']
167
+ }], name: [{
168
+ type: Input,
169
+ args: ['name']
170
+ }], width: [{
171
+ type: Input,
172
+ args: ['width']
173
+ }], placeholder: [{
174
+ type: Input,
175
+ args: ['placeholder']
176
+ }], displayExpr: [{
177
+ type: Input,
178
+ args: ['displayExpr']
179
+ }], valueExpr: [{
180
+ type: Input,
181
+ args: ['valueExpr']
182
+ }], searchExpr: [{
183
+ type: Input,
184
+ args: ['searchExpr']
185
+ }], dropdownExpr: [{
186
+ type: Input,
187
+ args: ['dropdownExpr']
188
+ }], searchEnabled: [{
189
+ type: Input,
190
+ args: ['searchEnabled']
191
+ }], searchTimeout: [{
192
+ type: Input,
193
+ args: ['searchTimeout']
194
+ }], showClearButton: [{
195
+ type: Input,
196
+ args: ['showClearButton']
197
+ }], value: [{
198
+ type: Input,
199
+ args: ['value']
200
+ }], dropdownWidth: [{
201
+ type: Input,
202
+ args: ['dropdownWidth']
203
+ }], maxLength: [{
204
+ type: Input,
205
+ args: ['maxLength']
206
+ }], disabled: [{
207
+ type: Input,
208
+ args: ['disabled']
209
+ }], cascadeBy: [{
210
+ type: Input,
211
+ args: ['cascadeBy']
212
+ }], selectBoxKey: [{
213
+ type: Input,
214
+ args: ['selectBoxKey']
215
+ }], ignoreValue: [{
216
+ type: Input,
217
+ args: ['ignoreValue']
218
+ }], eventValueChanged: [{
219
+ type: Output,
220
+ args: ['onValueChanged']
221
+ }], eventEnterKey: [{
222
+ type: Output,
223
+ args: ['onEnterKey']
224
+ }] } });
225
+
226
+ /**
227
+ * Module สำหรับ SelectBox Component
228
+ *
229
+ * Consumer App ต้อง import module นี้เพื่อใช้งาน:
230
+ * @example
231
+ * imports: [
232
+ * CnxSelectBoxModule.forRoot(AppSelectBoxService),
233
+ * ]
234
+ */
235
+ class CnxSelectBoxModule {
236
+ static forRoot(providerClass) {
237
+ return {
238
+ ngModule: CnxSelectBoxModule,
239
+ providers: [
240
+ {
241
+ provide: SELECTBOX_DATA_PROVIDER,
242
+ useClass: providerClass,
243
+ },
244
+ ],
245
+ };
246
+ }
247
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: CnxSelectBoxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
248
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.5", ngImport: i0, type: CnxSelectBoxModule, declarations: [SelectBoxComponent], imports: [CommonModule, DxSelectBoxModule, DxTemplateModule], exports: [SelectBoxComponent, DxSelectBoxModule, DxTemplateModule] });
249
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: CnxSelectBoxModule, imports: [CommonModule, DxSelectBoxModule, DxTemplateModule, DxSelectBoxModule, DxTemplateModule] });
250
+ }
251
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: CnxSelectBoxModule, decorators: [{
252
+ type: NgModule,
253
+ args: [{
254
+ declarations: [SelectBoxComponent],
255
+ imports: [CommonModule, DxSelectBoxModule, DxTemplateModule],
256
+ exports: [SelectBoxComponent, DxSelectBoxModule, DxTemplateModule],
257
+ }]
258
+ }] });
259
+
260
+ class SelectBoxParam {
261
+ key;
262
+ cascadeBy;
263
+ isByKey;
264
+ loadOptions;
265
+ }
266
+ class SelectBoxViewModel {
267
+ text;
268
+ value;
269
+ dropdownText;
270
+ }
271
+ class SelectBoxLoadResult {
272
+ data = [];
273
+ totalCount = 0;
274
+ hasInitialValue;
275
+ }
276
+
277
+ // Module
278
+
279
+ /**
280
+ * Generated bundle index. Do not edit.
281
+ */
282
+
283
+ export { CnxSelectBoxModule, SELECTBOX_DATA_PROVIDER, SelectBoxComponent, SelectBoxLoadResult, SelectBoxParam, SelectBoxViewModel };
284
+ //# sourceMappingURL=cnx-dev-angular-devextreme.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cnx-dev-angular-devextreme.mjs","sources":["../../../../packages/angular-devextreme/src/lib/tokens/select-box.token.ts","../../../../packages/angular-devextreme/src/lib/components/select-box/select-box.component.ts","../../../../packages/angular-devextreme/src/lib/components/select-box/select-box.component.html","../../../../packages/angular-devextreme/src/lib/cnx-select-box.module.ts","../../../../packages/angular-devextreme/src/lib/models/select-box.model.ts","../../../../packages/angular-devextreme/src/index.ts","../../../../packages/angular-devextreme/src/cnx-dev-angular-devextreme.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\nimport { SelectBoxDataProvider } from '../interfaces/select-box.interface';\r\n\r\n/**\r\n * Injection Token สำหรับ SelectBoxDataProvider\r\n * Consumer App จะต้อง provide token นี้ผ่าน CnxSelectBoxModule.forRoot()\r\n *\r\n * @example\r\n * // ใน AppModule\r\n * CnxSelectBoxModule.forRoot(AppSelectBoxService)\r\n */\r\nexport const SELECTBOX_DATA_PROVIDER = new InjectionToken<SelectBoxDataProvider>(\r\n 'SELECTBOX_DATA_PROVIDER'\r\n);\r\n","import {\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { ValueChangedEvent } from 'devextreme/ui/select_box';\r\nimport DataSource from 'devextreme/data/data_source';\r\nimport { LoadOptions } from 'devextreme/data';\r\nimport { DxSelectBoxComponent, DxSelectBoxModule, DxTemplateModule } from 'devextreme-angular';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SelectBoxDataProvider } from '../../interfaces/select-box.interface';\r\nimport { SELECTBOX_DATA_PROVIDER } from '../../tokens/select-box.token';\r\nimport { SelectBoxKey, SelectBoxLoadResult, SelectBoxParam } from '../../models/select-box.model';\r\n\r\n@Component({\r\n selector: 'cnx-select-box',\r\n templateUrl: './select-box.component.html',\r\n styleUrl: './select-box.component.css',\r\n standalone: false,\r\n})\r\nexport class SelectBoxComponent implements OnInit, OnChanges {\r\n constructor(\r\n private cdr: ChangeDetectorRef,\r\n @Inject(SELECTBOX_DATA_PROVIDER) private service: SelectBoxDataProvider\r\n ) {}\r\n\r\n public ngOnInit(): void {\r\n this.setupDataSource();\r\n }\r\n\r\n public ngOnChanges(changes: SimpleChanges): void {\r\n const change = changes['cascadeBy'];\r\n if (!!change && !change.firstChange) {\r\n const { currentValue, previousValue } = change;\r\n const isChange = JSON.stringify(currentValue) !== JSON.stringify(previousValue);\r\n if (isChange) this.setupDataSource();\r\n }\r\n }\r\n\r\n @ViewChild('selectBox')\r\n public selectBox!: DxSelectBoxComponent;\r\n\r\n @Input('id') public id: string = '';\r\n @Input('name') public name: string = '';\r\n @Input('width') public width: string | number = '100%';\r\n @Input('placeholder') public placeholder: string = 'Please select...';\r\n\r\n @Input('displayExpr')\r\n set displayExpr(val: string | null) {\r\n const _val = val?.toString() || '';\r\n if (_val && _val !== this._displayExpr) this._displayExpr = _val;\r\n }\r\n get displayExpr(): string { return this._displayExpr; }\r\n private _displayExpr: string = 'text';\r\n\r\n @Input('valueExpr')\r\n set valueExpr(val: string | null) {\r\n const _val = val?.toString() || '';\r\n if (_val && _val !== this._valueExpr) this._valueExpr = _val;\r\n }\r\n get valueExpr(): string { return this._valueExpr; }\r\n private _valueExpr: string = 'value';\r\n\r\n @Input('searchExpr')\r\n set searchExpr(val: string | null) {\r\n const _val = val?.toString() || '';\r\n if (_val && _val !== this._searchExpr) this._searchExpr = _val;\r\n }\r\n get searchExpr(): string { return this._searchExpr; }\r\n private _searchExpr: string = 'dropdownText';\r\n\r\n @Input('dropdownExpr')\r\n set dropdownExpr(val: string | null) {\r\n const _val = val?.toString() || '';\r\n if (_val && _val !== this._dropdownExpr) {\r\n this._dropdownExpr = _val;\r\n this._searchExpr = _val;\r\n }\r\n }\r\n get dropdownExpr(): string { return this._dropdownExpr; }\r\n private _dropdownExpr: string = 'dropdownText';\r\n\r\n @Input('searchEnabled') public searchEnabled: boolean = true;\r\n @Input('searchTimeout') public searchTimeout: number = 500;\r\n @Input('showClearButton') public showClearButton: boolean = true;\r\n\r\n @Input('value')\r\n set value(val: string | number | null) {\r\n const _val = val?.toString() ?? '';\r\n if (_val !== this._value) this._value = _val;\r\n }\r\n get value(): string { return this._value; }\r\n private _value: string = '';\r\n\r\n public dataSource!: DataSource;\r\n\r\n @Input('dropdownWidth') public dropdownWidth!: string | number;\r\n @Input('maxLength') public maxLength: number = 0;\r\n @Input('disabled') public disabled: boolean = false;\r\n @Input('cascadeBy') public cascadeBy: any;\r\n @Input('selectBoxKey') public selectBoxKey: SelectBoxKey = null;\r\n @Input('ignoreValue') public ignoreValue!: string[];\r\n\r\n @Output('onValueChanged') public eventValueChanged = new EventEmitter<any>();\r\n @Output('onEnterKey') public eventEnterKey = new EventEmitter<void>();\r\n\r\n private paginate: boolean = true;\r\n private pageSize: number = 50;\r\n private clearValueOnCascade: boolean = false;\r\n public hasInitialValue: boolean = false;\r\n\r\n public onValueChanged($event: ValueChangedEvent): void {\r\n setTimeout(() => this.eventValueChanged.emit($event));\r\n this.cdr.detectChanges();\r\n }\r\n\r\n public onEnterKey(): void {\r\n this.eventEnterKey.emit();\r\n }\r\n\r\n private setupDataSource(): void {\r\n this.dataSource = new DataSource({\r\n load: (loadOptions) => this.setupDataSourceOnLoad(loadOptions),\r\n byKey: (key) => this.setupDataSourceByKey(key),\r\n paginate: this.paginate,\r\n pageSize: this.pageSize,\r\n requireTotalCount: true,\r\n });\r\n\r\n if (this.clearValueOnCascade && !!this.value && this.selectBox) {\r\n this.selectBox.value = '';\r\n }\r\n\r\n this.cdr.detectChanges();\r\n }\r\n\r\n private setupDataSourceOnLoad(loadOptions: LoadOptions): Promise<SelectBoxLoadResult> {\r\n return new Promise((resolve) => {\r\n if ((loadOptions?.take ?? 0) === 0) {\r\n resolve({ data: [], totalCount: 0 });\r\n return;\r\n }\r\n\r\n this.service\r\n .getService(this.selectBoxKey, {\r\n key: this.value,\r\n cascadeBy: this.cascadeBy,\r\n loadOptions: { ...loadOptions } as LoadOptions,\r\n } as SelectBoxParam)\r\n .subscribe((result) => {\r\n if (this.ignoreValue?.length) {\r\n result.data = result.data.filter((f) => !this.ignoreValue.includes(f.value));\r\n }\r\n this.hasInitialValue = result.hasInitialValue ?? false;\r\n resolve(result);\r\n });\r\n });\r\n }\r\n\r\n private setupDataSourceByKey(key: any): Promise<any> {\r\n return new Promise((resolve) => {\r\n if (!key) {\r\n resolve([]);\r\n return;\r\n }\r\n\r\n this.service\r\n .getService(this.selectBoxKey, {\r\n isByKey: true,\r\n key,\r\n cascadeBy: this.cascadeBy,\r\n } as SelectBoxParam)\r\n .subscribe((result) => resolve(result.data));\r\n });\r\n }\r\n}\r\n","<dx-select-box\r\n #selectBox\r\n [id]=\"'cnx_select_box_' + id\"\r\n [name]=\"'cnx_select_box_' + name\"\r\n [width]=\"width\"\r\n [placeholder]=\"placeholder\"\r\n [displayExpr]=\"displayExpr\"\r\n [valueExpr]=\"valueExpr\"\r\n [deferRendering]=\"true\"\r\n [searchExpr]=\"searchExpr\"\r\n [searchEnabled]=\"searchEnabled\"\r\n [searchTimeout]=\"searchTimeout\"\r\n [showClearButton]=\"showClearButton\"\r\n [value]=\"value\"\r\n [dataSource]=\"dataSource\"\r\n itemTemplate=\"itemTemplate\"\r\n [dropDownOptions]=\"{ minWidth: '100%', width: dropdownWidth }\"\r\n [maxLength]=\"maxLength\"\r\n [disabled]=\"disabled\"\r\n (onValueChanged)=\"onValueChanged($event)\"\r\n (onEnterKey)=\"onEnterKey()\"\r\n>\r\n <div *dxTemplate=\"let data of 'itemTemplate'\">\r\n <div>\r\n <span\r\n [title]=\"data[dropdownExpr]\"\r\n [innerText]=\"data[dropdownExpr]\"\r\n ></span>\r\n </div>\r\n </div>\r\n</dx-select-box>\r\n","import { CommonModule } from '@angular/common';\r\nimport { ModuleWithProviders, NgModule, Type } from '@angular/core';\r\nimport { DxSelectBoxModule, DxTemplateModule } from 'devextreme-angular';\r\nimport { SelectBoxComponent } from './components/select-box/select-box.component';\r\nimport { SelectBoxDataProvider } from './interfaces/select-box.interface';\r\nimport { SELECTBOX_DATA_PROVIDER } from './tokens/select-box.token';\r\n\r\n/**\r\n * Module สำหรับ SelectBox Component\r\n *\r\n * Consumer App ต้อง import module นี้เพื่อใช้งาน:\r\n * @example\r\n * imports: [\r\n * CnxSelectBoxModule.forRoot(AppSelectBoxService),\r\n * ]\r\n */\r\n@NgModule({\r\n declarations: [SelectBoxComponent],\r\n imports: [CommonModule, DxSelectBoxModule, DxTemplateModule],\r\n exports: [SelectBoxComponent, DxSelectBoxModule, DxTemplateModule],\r\n})\r\nexport class CnxSelectBoxModule {\r\n static forRoot(\r\n providerClass: Type<SelectBoxDataProvider>\r\n ): ModuleWithProviders<CnxSelectBoxModule> {\r\n return {\r\n ngModule: CnxSelectBoxModule,\r\n providers: [\r\n {\r\n provide: SELECTBOX_DATA_PROVIDER,\r\n useClass: providerClass,\r\n },\r\n ],\r\n };\r\n }\r\n}\r\n","import { LoadOptions } from 'devextreme/data';\r\n\r\nexport type SelectBoxKey =\r\n | 'cardType'\r\n | 'pages'\r\n | 'bank'\r\n | 'encoding'\r\n | 'department'\r\n | 'division'\r\n | 'fileType'\r\n | 'valueType'\r\n | 'applicationFormField'\r\n | 'currency'\r\n | 'paymentMethod'\r\n | 'paymentTerm'\r\n | 'transferMode'\r\n | 'bankAccount'\r\n | 'approveType'\r\n | 'user'\r\n | 'jobGrade'\r\n | 'roles'\r\n | 'creditType'\r\n | 'month'\r\n | 'year'\r\n | 'biborType'\r\n | 'interestPeriod'\r\n | 'accountNo'\r\n | 'statementType'\r\n | 'reconcileType'\r\n | 'fxRequestReason'\r\n | 'chequeType'\r\n | 'paymentType'\r\n | 'vendor'\r\n | 'unit'\r\n | 'period'\r\n | 'quarter'\r\n | 'loanName'\r\n | 'interestType'\r\n | 'paymentTypeGroup'\r\n | 'vendorAccount'\r\n | 'interestTypeOption'\r\n | string\r\n | null;\r\n\r\nexport class SelectBoxParam {\r\n key?: any;\r\n cascadeBy?: any;\r\n isByKey?: boolean;\r\n loadOptions?: LoadOptions;\r\n}\r\n\r\nexport class SelectBoxViewModel {\r\n text: string;\r\n value: any;\r\n dropdownText: string;\r\n}\r\n\r\nexport class SelectBoxLoadResult {\r\n data: SelectBoxViewModel[] = [];\r\n totalCount: number = 0;\r\n hasInitialValue?: boolean;\r\n}\r\n","// Module\nexport * from './lib/cnx-select-box.module';\n\n// Components\nexport * from './lib/components/select-box/select-box.component';\n\n// Interfaces\nexport * from './lib/interfaces/select-box.interface';\n\n// Models\nexport * from './lib/models/select-box.model';\n\n// Tokens\nexport * from './lib/tokens/select-box.token';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;AAGA;;;;;;;AAOG;MACU,uBAAuB,GAAG,IAAI,cAAc,CACvD,yBAAyB;;MCed,kBAAkB,CAAA;AAEnB,IAAA,GAAA;AACiC,IAAA,OAAA;IAF3C,WAAA,CACU,GAAsB,EACW,OAA8B,EAAA;QAD/D,IAAA,CAAA,GAAG,GAAH,GAAG;QAC8B,IAAA,CAAA,OAAO,GAAP,OAAO;IAC/C;IAEI,QAAQ,GAAA;QACb,IAAI,CAAC,eAAe,EAAE;IACxB;AAEO,IAAA,WAAW,CAAC,OAAsB,EAAA;AACvC,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;QACnC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;AACnC,YAAA,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,MAAM;AAC9C,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;AAC/E,YAAA,IAAI,QAAQ;gBAAE,IAAI,CAAC,eAAe,EAAE;QACtC;IACF;AAGO,IAAA,SAAS;IAEI,EAAE,GAAW,EAAE;IACb,IAAI,GAAW,EAAE;IAChB,KAAK,GAAoB,MAAM;IACzB,WAAW,GAAW,kBAAkB;IAErE,IACI,WAAW,CAAC,GAAkB,EAAA;QAChC,MAAM,IAAI,GAAG,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE;AAClC,QAAA,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,YAAY;AAAE,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;IAClE;IACA,IAAI,WAAW,KAAa,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC;IAC9C,YAAY,GAAW,MAAM;IAErC,IACI,SAAS,CAAC,GAAkB,EAAA;QAC9B,MAAM,IAAI,GAAG,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE;AAClC,QAAA,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,UAAU;AAAE,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;IAC9D;IACA,IAAI,SAAS,KAAa,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1C,UAAU,GAAW,OAAO;IAEpC,IACI,UAAU,CAAC,GAAkB,EAAA;QAC/B,MAAM,IAAI,GAAG,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE;AAClC,QAAA,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;IAChE;IACA,IAAI,UAAU,KAAa,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5C,WAAW,GAAW,cAAc;IAE5C,IACI,YAAY,CAAC,GAAkB,EAAA;QACjC,MAAM,IAAI,GAAG,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE;QAClC,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,aAAa,EAAE;AACvC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACzB;IACF;IACA,IAAI,YAAY,KAAa,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;IAChD,aAAa,GAAW,cAAc;IAEf,aAAa,GAAY,IAAI;IAC7B,aAAa,GAAW,GAAG;IACzB,eAAe,GAAY,IAAI;IAEhE,IACI,KAAK,CAAC,GAA2B,EAAA;QACnC,MAAM,IAAI,GAAG,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE;AAClC,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,MAAM;AAAE,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;IAC9C;IACA,IAAI,KAAK,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,GAAW,EAAE;AAEpB,IAAA,UAAU;AAEc,IAAA,aAAa;IACjB,SAAS,GAAW,CAAC;IACtB,QAAQ,GAAY,KAAK;AACxB,IAAA,SAAS;IACN,YAAY,GAAiB,IAAI;AAClC,IAAA,WAAW;AAEP,IAAA,iBAAiB,GAAG,IAAI,YAAY,EAAO;AAC/C,IAAA,aAAa,GAAG,IAAI,YAAY,EAAQ;IAE7D,QAAQ,GAAY,IAAI;IACxB,QAAQ,GAAW,EAAE;IACrB,mBAAmB,GAAY,KAAK;IACrC,eAAe,GAAY,KAAK;AAEhC,IAAA,cAAc,CAAC,MAAyB,EAAA;AAC7C,QAAA,UAAU,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACrD,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;IAC1B;IAEO,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC3B;IAEQ,eAAe,GAAA;AACrB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC;YAC/B,IAAI,EAAE,CAAC,WAAW,KAAK,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC;YAC9D,KAAK,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC;YAC9C,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,iBAAiB,EAAE,IAAI;AACxB,SAAA,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,mBAAmB,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE;AAC9D,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,EAAE;QAC3B;AAEA,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;IAC1B;AAEQ,IAAA,qBAAqB,CAAC,WAAwB,EAAA;AACpD,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;YAC7B,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE;gBAClC,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;gBACpC;YACF;AAEA,YAAA,IAAI,CAAC;AACF,iBAAA,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE;gBAC7B,GAAG,EAAE,IAAI,CAAC,KAAK;gBACf,SAAS,EAAE,IAAI,CAAC,SAAS;AACzB,gBAAA,WAAW,EAAE,EAAE,GAAG,WAAW,EAAiB;aAC7B;AAClB,iBAAA,SAAS,CAAC,CAAC,MAAM,KAAI;AACpB,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;oBAC5B,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBAC9E;gBACA,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,KAAK;gBACtD,OAAO,CAAC,MAAM,CAAC;AACjB,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,oBAAoB,CAAC,GAAQ,EAAA;AACnC,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;YAC7B,IAAI,CAAC,GAAG,EAAE;gBACR,OAAO,CAAC,EAAE,CAAC;gBACX;YACF;AAEA,YAAA,IAAI,CAAC;AACF,iBAAA,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE;AAC7B,gBAAA,OAAO,EAAE,IAAI;gBACb,GAAG;gBACH,SAAS,EAAE,IAAI,CAAC,SAAS;aACR;AAClB,iBAAA,SAAS,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAChD,QAAA,CAAC,CAAC;IACJ;AA1JW,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,mDAGnB,uBAAuB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAHtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,uuBC3B/B,u8BA+BA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,eAAA,EAAA,QAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,SAAA,EAAA,OAAA,EAAA,cAAA,EAAA,OAAA,EAAA,WAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,YAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,oBAAA,EAAA,uBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,UAAA,EAAA,MAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,uBAAA,EAAA,2BAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,OAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,OAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,EAAA,YAAA,EAAA,eAAA,EAAA,SAAA,EAAA,aAAA,EAAA,WAAA,EAAA,SAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,eAAA,EAAA,6BAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,8BAAA,EAAA,uBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,cAAA,EAAA,YAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,aAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,oBAAA,EAAA,uBAAA,EAAA,4BAAA,EAAA,0BAAA,EAAA,6BAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,0BAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,6BAAA,EAAA,iCAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,wBAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,aAAA,EAAA,oBAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FDJa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,cAGd,KAAK,EAAA,QAAA,EAAA,u8BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;;0BAKd,MAAM;2BAAC,uBAAuB;;sBAgBhC,SAAS;uBAAC,WAAW;;sBAGrB,KAAK;uBAAC,IAAI;;sBACV,KAAK;uBAAC,MAAM;;sBACZ,KAAK;uBAAC,OAAO;;sBACb,KAAK;uBAAC,aAAa;;sBAEnB,KAAK;uBAAC,aAAa;;sBAQnB,KAAK;uBAAC,WAAW;;sBAQjB,KAAK;uBAAC,YAAY;;sBAQlB,KAAK;uBAAC,cAAc;;sBAWpB,KAAK;uBAAC,eAAe;;sBACrB,KAAK;uBAAC,eAAe;;sBACrB,KAAK;uBAAC,iBAAiB;;sBAEvB,KAAK;uBAAC,OAAO;;sBAUb,KAAK;uBAAC,eAAe;;sBACrB,KAAK;uBAAC,WAAW;;sBACjB,KAAK;uBAAC,UAAU;;sBAChB,KAAK;uBAAC,WAAW;;sBACjB,KAAK;uBAAC,cAAc;;sBACpB,KAAK;uBAAC,aAAa;;sBAEnB,MAAM;uBAAC,gBAAgB;;sBACvB,MAAM;uBAAC,YAAY;;;AExGtB;;;;;;;;AAQG;MAMU,kBAAkB,CAAA;IAC7B,OAAO,OAAO,CACZ,aAA0C,EAAA;QAE1C,OAAO;AACL,YAAA,QAAQ,EAAE,kBAAkB;AAC5B,YAAA,SAAS,EAAE;AACT,gBAAA;AACE,oBAAA,OAAO,EAAE,uBAAuB;AAChC,oBAAA,QAAQ,EAAE,aAAa;AACxB,iBAAA;AACF,aAAA;SACF;IACH;uGAbW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,CAJd,kBAAkB,CAAA,EAAA,OAAA,EAAA,CACvB,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,CAAA,EAAA,OAAA,EAAA,CACjD,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,CAAA,EAAA,CAAA;wGAEtD,kBAAkB,EAAA,OAAA,EAAA,CAHnB,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAC7B,iBAAiB,EAAE,gBAAgB,CAAA,EAAA,CAAA;;2FAEtD,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,kBAAkB,CAAC;AAClC,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,CAAC;AAC5D,oBAAA,OAAO,EAAE,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,CAAC;AACnE,iBAAA;;;MCwBY,cAAc,CAAA;AACzB,IAAA,GAAG;AACH,IAAA,SAAS;AACT,IAAA,OAAO;AACP,IAAA,WAAW;AACZ;MAEY,kBAAkB,CAAA;AAC7B,IAAA,IAAI;AACJ,IAAA,KAAK;AACL,IAAA,YAAY;AACb;MAEY,mBAAmB,CAAA;IAC9B,IAAI,GAAyB,EAAE;IAC/B,UAAU,GAAW,CAAC;AACtB,IAAA,eAAe;AAChB;;AC7DD;;ACAA;;AAEG;;;;"}
package/package.json ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "@cnx-dev/angular-devextreme",
3
+ "version": "1.0.0",
4
+ "description": "CNX Dev - Angular DevExtreme UI Component Library",
5
+ "author": "cnx-dev",
6
+ "license": "UNLICENSED",
7
+ "peerDependencies": {
8
+ "@angular/common": "^17.3.0",
9
+ "@angular/core": "^17.3.0",
10
+ "@angular/forms": "^17.3.0",
11
+ "devextreme": "^23.2.0",
12
+ "devextreme-angular": "^23.2.0",
13
+ "rxjs": "~7.8.0"
14
+ },
15
+ "peerDependenciesMeta": {
16
+ "@angular/forms": {
17
+ "optional": true
18
+ }
19
+ },
20
+ "module": "fesm2022/cnx-dev-angular-devextreme.mjs",
21
+ "typings": "types/cnx-dev-angular-devextreme.d.ts",
22
+ "exports": {
23
+ "./package.json": {
24
+ "default": "./package.json"
25
+ },
26
+ ".": {
27
+ "types": "./types/cnx-dev-angular-devextreme.d.ts",
28
+ "default": "./fesm2022/cnx-dev-angular-devextreme.mjs"
29
+ }
30
+ },
31
+ "sideEffects": false,
32
+ "dependencies": {
33
+ "tslib": "^2.3.0"
34
+ }
35
+ }
@@ -0,0 +1,116 @@
1
+ import * as i0 from '@angular/core';
2
+ import { OnInit, OnChanges, ChangeDetectorRef, SimpleChanges, EventEmitter, Type, ModuleWithProviders, InjectionToken } from '@angular/core';
3
+ import { Observable } from 'rxjs';
4
+ import { LoadOptions } from 'devextreme/data';
5
+ import { ValueChangedEvent } from 'devextreme/ui/select_box';
6
+ import DataSource from 'devextreme/data/data_source';
7
+ import * as i3 from 'devextreme-angular';
8
+ import { DxSelectBoxComponent } from 'devextreme-angular';
9
+ import * as i2 from '@angular/common';
10
+
11
+ type SelectBoxKey = 'cardType' | 'pages' | 'bank' | 'encoding' | 'department' | 'division' | 'fileType' | 'valueType' | 'applicationFormField' | 'currency' | 'paymentMethod' | 'paymentTerm' | 'transferMode' | 'bankAccount' | 'approveType' | 'user' | 'jobGrade' | 'roles' | 'creditType' | 'month' | 'year' | 'biborType' | 'interestPeriod' | 'accountNo' | 'statementType' | 'reconcileType' | 'fxRequestReason' | 'chequeType' | 'paymentType' | 'vendor' | 'unit' | 'period' | 'quarter' | 'loanName' | 'interestType' | 'paymentTypeGroup' | 'vendorAccount' | 'interestTypeOption' | string | null;
12
+ declare class SelectBoxParam {
13
+ key?: any;
14
+ cascadeBy?: any;
15
+ isByKey?: boolean;
16
+ loadOptions?: LoadOptions;
17
+ }
18
+ declare class SelectBoxViewModel {
19
+ text: string;
20
+ value: any;
21
+ dropdownText: string;
22
+ }
23
+ declare class SelectBoxLoadResult {
24
+ data: SelectBoxViewModel[];
25
+ totalCount: number;
26
+ hasInitialValue?: boolean;
27
+ }
28
+
29
+ /**
30
+ * Interface ที่ Consumer App ต้อง implement เพื่อให้ SelectBoxComponent ดึงข้อมูลได้
31
+ * วิธีนี้ทำให้ Library ไม่ผูกติดกับ API ของโปรเจกต์ใดโปรเจกต์หนึ่ง
32
+ */
33
+ interface SelectBoxDataProvider {
34
+ getService(key: SelectBoxKey, param: SelectBoxParam): Observable<SelectBoxLoadResult>;
35
+ }
36
+
37
+ declare class SelectBoxComponent implements OnInit, OnChanges {
38
+ private cdr;
39
+ private service;
40
+ constructor(cdr: ChangeDetectorRef, service: SelectBoxDataProvider);
41
+ ngOnInit(): void;
42
+ ngOnChanges(changes: SimpleChanges): void;
43
+ selectBox: DxSelectBoxComponent;
44
+ id: string;
45
+ name: string;
46
+ width: string | number;
47
+ placeholder: string;
48
+ set displayExpr(val: string | null);
49
+ get displayExpr(): string;
50
+ private _displayExpr;
51
+ set valueExpr(val: string | null);
52
+ get valueExpr(): string;
53
+ private _valueExpr;
54
+ set searchExpr(val: string | null);
55
+ get searchExpr(): string;
56
+ private _searchExpr;
57
+ set dropdownExpr(val: string | null);
58
+ get dropdownExpr(): string;
59
+ private _dropdownExpr;
60
+ searchEnabled: boolean;
61
+ searchTimeout: number;
62
+ showClearButton: boolean;
63
+ set value(val: string | number | null);
64
+ get value(): string;
65
+ private _value;
66
+ dataSource: DataSource;
67
+ dropdownWidth: string | number;
68
+ maxLength: number;
69
+ disabled: boolean;
70
+ cascadeBy: any;
71
+ selectBoxKey: SelectBoxKey;
72
+ ignoreValue: string[];
73
+ eventValueChanged: EventEmitter<any>;
74
+ eventEnterKey: EventEmitter<void>;
75
+ private paginate;
76
+ private pageSize;
77
+ private clearValueOnCascade;
78
+ hasInitialValue: boolean;
79
+ onValueChanged($event: ValueChangedEvent): void;
80
+ onEnterKey(): void;
81
+ private setupDataSource;
82
+ private setupDataSourceOnLoad;
83
+ private setupDataSourceByKey;
84
+ static ɵfac: i0.ɵɵFactoryDeclaration<SelectBoxComponent, never>;
85
+ static ɵcmp: i0.ɵɵComponentDeclaration<SelectBoxComponent, "cnx-select-box", never, { "id": { "alias": "id"; "required": false; }; "name": { "alias": "name"; "required": false; }; "width": { "alias": "width"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "displayExpr": { "alias": "displayExpr"; "required": false; }; "valueExpr": { "alias": "valueExpr"; "required": false; }; "searchExpr": { "alias": "searchExpr"; "required": false; }; "dropdownExpr": { "alias": "dropdownExpr"; "required": false; }; "searchEnabled": { "alias": "searchEnabled"; "required": false; }; "searchTimeout": { "alias": "searchTimeout"; "required": false; }; "showClearButton": { "alias": "showClearButton"; "required": false; }; "value": { "alias": "value"; "required": false; }; "dropdownWidth": { "alias": "dropdownWidth"; "required": false; }; "maxLength": { "alias": "maxLength"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "cascadeBy": { "alias": "cascadeBy"; "required": false; }; "selectBoxKey": { "alias": "selectBoxKey"; "required": false; }; "ignoreValue": { "alias": "ignoreValue"; "required": false; }; }, { "eventValueChanged": "onValueChanged"; "eventEnterKey": "onEnterKey"; }, never, never, false, never>;
86
+ }
87
+
88
+ /**
89
+ * Module สำหรับ SelectBox Component
90
+ *
91
+ * Consumer App ต้อง import module นี้เพื่อใช้งาน:
92
+ * @example
93
+ * imports: [
94
+ * CnxSelectBoxModule.forRoot(AppSelectBoxService),
95
+ * ]
96
+ */
97
+ declare class CnxSelectBoxModule {
98
+ static forRoot(providerClass: Type<SelectBoxDataProvider>): ModuleWithProviders<CnxSelectBoxModule>;
99
+ static ɵfac: i0.ɵɵFactoryDeclaration<CnxSelectBoxModule, never>;
100
+ static ɵmod: i0.ɵɵNgModuleDeclaration<CnxSelectBoxModule, [typeof SelectBoxComponent], [typeof i2.CommonModule, typeof i3.DxSelectBoxModule, typeof i3.DxTemplateModule], [typeof SelectBoxComponent, typeof i3.DxSelectBoxModule, typeof i3.DxTemplateModule]>;
101
+ static ɵinj: i0.ɵɵInjectorDeclaration<CnxSelectBoxModule>;
102
+ }
103
+
104
+ /**
105
+ * Injection Token สำหรับ SelectBoxDataProvider
106
+ * Consumer App จะต้อง provide token นี้ผ่าน CnxSelectBoxModule.forRoot()
107
+ *
108
+ * @example
109
+ * // ใน AppModule
110
+ * CnxSelectBoxModule.forRoot(AppSelectBoxService)
111
+ */
112
+ declare const SELECTBOX_DATA_PROVIDER: InjectionToken<SelectBoxDataProvider>;
113
+
114
+ export { CnxSelectBoxModule, SELECTBOX_DATA_PROVIDER, SelectBoxComponent, SelectBoxLoadResult, SelectBoxParam, SelectBoxViewModel };
115
+ export type { SelectBoxDataProvider, SelectBoxKey };
116
+ //# sourceMappingURL=cnx-dev-angular-devextreme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cnx-dev-angular-devextreme.d.ts","sources":["../../../../packages/angular-devextreme/src/lib/models/select-box.model.ts","../../../../packages/angular-devextreme/src/lib/interfaces/select-box.interface.ts","../../../../packages/angular-devextreme/src/lib/components/select-box/select-box.component.ts","../../../../packages/angular-devextreme/src/lib/cnx-select-box.module.ts","../../../../packages/angular-devextreme/src/lib/tokens/select-box.token.ts"],"sourcesContent":[null,null,null,null,null],"names":[],"mappings":";;;;;;;;;;;AA4CA,cAAA,cAAA;;;;;AAKC;AAED,cAAA,kBAAA;;;;AAIC;AAED,cAAA,mBAAA;;;;AAIC;;AC1DD;;;AAGG;;AAED,oBAAA,YAAA,SAAA,cAAA,GAAA,UAAA,CAAA,mBAAA;AACD;;ACYD,cAAA,kBAAA,YAAA,MAAA,EAAA,SAAA;AAQI;AACiC;AADzB,qBAAA,iBAAA,WAAA,qBAAA;AAIH;AAIA,yBAAA,aAAA;;;;AAcgB;;AAGvB;;;AAQA;;;AAQA;;;AAQA;;;;;;;;;;AAyB+B;;;;;;AAOE,uBAAA,YAAA;AACJ,mBAAA,YAAA;;;;;AAOtB,2BAAA,iBAAA;AAKA;AAIP;AAgBA;AAuBA;;;AAgBD;;AC/KD;;;;;;;;AAQG;AACH,cAAA,kBAAA;AAME,kCAAA,IAAA,CAAA,qBAAA,IAAA,mBAAA,CAAA,kBAAA;;;;AAaD;;AChCD;;;;;;;AAOG;AACH,cAAA,uBAAA,EAAA,cAAA,CAAA,qBAAA;;;;"}