@sd-angular/core 1.1.58 → 1.1.61
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/bundles/sd-angular-core-db.umd.js +12 -4
- package/bundles/sd-angular-core-db.umd.js.map +1 -1
- package/bundles/sd-angular-core-db.umd.min.js +1 -1
- package/bundles/sd-angular-core-db.umd.min.js.map +1 -1
- package/bundles/sd-angular-core-select-editor.umd.js +30 -260
- package/bundles/sd-angular-core-select-editor.umd.js.map +1 -1
- package/bundles/sd-angular-core-select-editor.umd.min.js +2 -2
- package/bundles/sd-angular-core-select-editor.umd.min.js.map +1 -1
- package/db/src/lib/db.service.d.ts +6 -1
- package/esm2015/db/src/lib/db.service.js +11 -4
- package/esm2015/select-editor/src/lib/select-editor.component.js +15 -216
- package/esm2015/select-editor/src/lib/select-editor.module.js +10 -2
- package/fesm2015/sd-angular-core-db.js +10 -3
- package/fesm2015/sd-angular-core-db.js.map +1 -1
- package/fesm2015/sd-angular-core-select-editor.js +21 -215
- package/fesm2015/sd-angular-core-select-editor.js.map +1 -1
- package/package.json +1 -1
- package/{sd-angular-core-1.1.58.tgz → sd-angular-core-1.1.61.tgz} +0 -0
- package/select-editor/sd-angular-core-select-editor.metadata.json +1 -1
- package/select-editor/src/lib/select-editor.component.d.ts +8 -39
|
@@ -1,110 +1,25 @@
|
|
|
1
|
-
import { EventEmitter, Component, ChangeDetectorRef,
|
|
1
|
+
import { EventEmitter, Component, ChangeDetectorRef, Inject, Optional, ViewChild, Output, NgModule } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
|
-
import {
|
|
3
|
+
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
4
4
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
5
5
|
import { MatInputModule } from '@angular/material/input';
|
|
6
6
|
import { MatIconModule } from '@angular/material/icon';
|
|
7
7
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
8
|
-
import { __classPrivateFieldGet, __awaiter, __classPrivateFieldSet } from 'tslib';
|
|
9
|
-
import { v4 } from 'uuid';
|
|
10
8
|
import { MatSelect, MatSelectModule } from '@angular/material/select';
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import { SdFormControl } from '@sd-angular/core/common';
|
|
9
|
+
import { FORM_CONFIG, SdCommonModule } from '@sd-angular/core/common';
|
|
10
|
+
import { SdSelect, SdSelectModule } from '@sd-angular/core/select';
|
|
14
11
|
import { SdTranslateModule } from '@sd-angular/core/translate';
|
|
12
|
+
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
13
|
+
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
15
14
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
this.
|
|
20
|
-
|
|
21
|
-
this.formControl = new SdFormControl();
|
|
22
|
-
_form.set(this, void 0);
|
|
23
|
-
// Model
|
|
24
|
-
_model.set(this, void 0);
|
|
25
|
-
// Items
|
|
26
|
-
_items.set(this, []);
|
|
27
|
-
// Validator
|
|
28
|
-
this.isRequired = false;
|
|
29
|
-
_validator.set(this, void 0);
|
|
30
|
-
_modelChanges.set(this, new Subject());
|
|
31
|
-
_itemsChanges.set(this, new Subject());
|
|
32
|
-
this.modelChange = new EventEmitter();
|
|
33
|
-
this.sdChange = new EventEmitter();
|
|
34
|
-
this.sdSelection = new EventEmitter();
|
|
15
|
+
class SdSelectEditor extends SdSelect {
|
|
16
|
+
constructor(cdRef, formConfiguration) {
|
|
17
|
+
super(cdRef, formConfiguration);
|
|
18
|
+
this.cdRef = cdRef;
|
|
19
|
+
this.formConfiguration = formConfiguration;
|
|
35
20
|
this.sdAdd = new EventEmitter();
|
|
36
21
|
this.sdEdit = new EventEmitter();
|
|
37
22
|
this.sdDelete = new EventEmitter();
|
|
38
|
-
_subscription.set(this, new Subscription());
|
|
39
|
-
_updateValidator.set(this, () => {
|
|
40
|
-
this.formControl.clearValidators();
|
|
41
|
-
this.formControl.clearAsyncValidators();
|
|
42
|
-
const validators = [];
|
|
43
|
-
const asyncValidators = [];
|
|
44
|
-
if (this.isRequired) {
|
|
45
|
-
validators.push(Validators.required);
|
|
46
|
-
}
|
|
47
|
-
if (__classPrivateFieldGet(this, _validator)) {
|
|
48
|
-
asyncValidators.push(__classPrivateFieldGet(this, _customValidator).call(this, __classPrivateFieldGet(this, _validator)));
|
|
49
|
-
}
|
|
50
|
-
this.formControl.setValidators(validators);
|
|
51
|
-
this.formControl.setAsyncValidators(asyncValidators);
|
|
52
|
-
this.formControl.updateValueAndValidity();
|
|
53
|
-
});
|
|
54
|
-
this.onSelectionChange = (change) => {
|
|
55
|
-
const value = (change === null || change === void 0 ? void 0 : change.value) || '';
|
|
56
|
-
__classPrivateFieldGet(this, _onChange).call(this, value);
|
|
57
|
-
};
|
|
58
|
-
this.reValidate = () => {
|
|
59
|
-
this.formControl.updateValueAndValidity({ emitEvent: true });
|
|
60
|
-
};
|
|
61
|
-
_onChange.set(this, (value) => {
|
|
62
|
-
var _a;
|
|
63
|
-
let val = value;
|
|
64
|
-
if (this.isNumber && Number.isNumber(value)) {
|
|
65
|
-
val = +value;
|
|
66
|
-
}
|
|
67
|
-
this.modelChange.emit(val);
|
|
68
|
-
this.sdChange.emit(val);
|
|
69
|
-
this.sdSelection.emit({
|
|
70
|
-
value: val,
|
|
71
|
-
item: (_a = __classPrivateFieldGet(this, _items)) === null || _a === void 0 ? void 0 : _a.find(e => { var _a; return (val === null || val === void 0 ? void 0 : val.toString()) === ((_a = e === null || e === void 0 ? void 0 : e[this.valueField]) === null || _a === void 0 ? void 0 : _a.toString()); })
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
|
-
this.clear = ($event) => {
|
|
75
|
-
$event === null || $event === void 0 ? void 0 : $event.stopPropagation();
|
|
76
|
-
this.formControl.setValue(null);
|
|
77
|
-
this.modelChange.emit(null);
|
|
78
|
-
this.sdChange.emit(null);
|
|
79
|
-
this.sdSelection.emit({
|
|
80
|
-
value: null,
|
|
81
|
-
item: null
|
|
82
|
-
});
|
|
83
|
-
};
|
|
84
|
-
_customValidator.set(this, (func) => {
|
|
85
|
-
return (c) => __awaiter(this, void 0, void 0, function* () {
|
|
86
|
-
const value = c.value || null;
|
|
87
|
-
if (func && typeof (func) === 'function') {
|
|
88
|
-
const result = func(value);
|
|
89
|
-
if (result instanceof Promise) {
|
|
90
|
-
const message = yield result;
|
|
91
|
-
if (message) {
|
|
92
|
-
return {
|
|
93
|
-
customValidator: message
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
return null;
|
|
97
|
-
}
|
|
98
|
-
if (result) {
|
|
99
|
-
return {
|
|
100
|
-
customValidator: result
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
return null;
|
|
104
|
-
}
|
|
105
|
-
return null;
|
|
106
|
-
});
|
|
107
|
-
});
|
|
108
23
|
this.onAdd = ($event) => {
|
|
109
24
|
var _a;
|
|
110
25
|
$event.stopPropagation();
|
|
@@ -127,133 +42,20 @@ class SdSelectEditor {
|
|
|
127
42
|
this.sdDelete.emit(item);
|
|
128
43
|
};
|
|
129
44
|
}
|
|
130
|
-
get isNumber() {
|
|
131
|
-
var _a;
|
|
132
|
-
if (Array.isArray(__classPrivateFieldGet(this, _model))) {
|
|
133
|
-
if (__classPrivateFieldGet(this, _model).length) {
|
|
134
|
-
return typeof (__classPrivateFieldGet(this, _model)[0]) === 'number';
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
if (__classPrivateFieldGet(this, _model) || __classPrivateFieldGet(this, _model) === 0) {
|
|
139
|
-
return typeof (__classPrivateFieldGet(this, _model)) === 'number';
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
if ((_a = __classPrivateFieldGet(this, _items)) === null || _a === void 0 ? void 0 : _a.length) {
|
|
143
|
-
if (this.valueField) {
|
|
144
|
-
return typeof (__classPrivateFieldGet(this, _items)[0][this.valueField]) === 'number';
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
return typeof (__classPrivateFieldGet(this, _items)[0]) === 'number';
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
return false;
|
|
151
|
-
}
|
|
152
|
-
set form(val) {
|
|
153
|
-
if (val) {
|
|
154
|
-
if (val instanceof NgForm) {
|
|
155
|
-
__classPrivateFieldSet(this, _form, val.form);
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
158
|
-
__classPrivateFieldSet(this, _form, val);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
set model(value) {
|
|
163
|
-
__classPrivateFieldSet(this, _model, value);
|
|
164
|
-
value = (value !== null && value !== void 0 ? value : '') + '';
|
|
165
|
-
if (value !== this.formControl.value) {
|
|
166
|
-
this.formControl.setValue(value);
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
set items(items) {
|
|
170
|
-
__classPrivateFieldSet(this, _items, (items === null || items === void 0 ? void 0 : items.filter(e => e !== null && e !== undefined)) || []);
|
|
171
|
-
__classPrivateFieldGet(this, _itemsChanges).next(__classPrivateFieldGet(this, _items));
|
|
172
|
-
}
|
|
173
|
-
set required(val) {
|
|
174
|
-
this.isRequired = (val === '') || val;
|
|
175
|
-
__classPrivateFieldGet(this, _updateValidator).call(this);
|
|
176
|
-
}
|
|
177
|
-
set validator(validator) {
|
|
178
|
-
__classPrivateFieldSet(this, _validator, validator);
|
|
179
|
-
__classPrivateFieldGet(this, _updateValidator).call(this);
|
|
180
|
-
}
|
|
181
|
-
// Optional
|
|
182
|
-
set disabled(val) {
|
|
183
|
-
val = (val === '') || val;
|
|
184
|
-
if (val) {
|
|
185
|
-
this.formControl.disable();
|
|
186
|
-
}
|
|
187
|
-
else {
|
|
188
|
-
this.formControl.enable();
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
ngOnInit() {
|
|
192
|
-
this.formControl.statusChanges;
|
|
193
|
-
__classPrivateFieldGet(this, _subscription).add(this.formControl.sdChanges.subscribe(() => {
|
|
194
|
-
// this.formControl.updateValueAndValidity();
|
|
195
|
-
this.ref.markForCheck();
|
|
196
|
-
}));
|
|
197
|
-
}
|
|
198
|
-
ngAfterViewInit() {
|
|
199
|
-
var _a;
|
|
200
|
-
this.filteredItems = __classPrivateFieldGet(this, _itemsChanges).pipe(startWith(__classPrivateFieldGet(this, _items)), map((items) => items.map(e => {
|
|
201
|
-
var _a;
|
|
202
|
-
if (this.valueField && this.displayField) {
|
|
203
|
-
return Object.assign(Object.assign({}, e), { [`${this.valueField}`]: (_a = e[this.valueField]) === null || _a === void 0 ? void 0 : _a.toString() });
|
|
204
|
-
}
|
|
205
|
-
return e === null || e === void 0 ? void 0 : e.toString();
|
|
206
|
-
})));
|
|
207
|
-
this.display = merge(this.formControl.valueChanges, __classPrivateFieldGet(this, _itemsChanges)).pipe(startWith([]), map(() => {
|
|
208
|
-
var _a, _b, _c;
|
|
209
|
-
if (!this.formControl.value) {
|
|
210
|
-
return '';
|
|
211
|
-
}
|
|
212
|
-
if (this.valueField && this.displayField) {
|
|
213
|
-
const selectedItem = (_a = __classPrivateFieldGet(this, _items)) === null || _a === void 0 ? void 0 : _a.find(e => { var _a, _b; return ((_a = e === null || e === void 0 ? void 0 : e[this.valueField]) === null || _a === void 0 ? void 0 : _a.toString()) === ((_b = this.formControl.value) === null || _b === void 0 ? void 0 : _b.toString()); });
|
|
214
|
-
return (_b = selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem[this.displayField]) !== null && _b !== void 0 ? _b : '';
|
|
215
|
-
}
|
|
216
|
-
const selectedItem = (_c = __classPrivateFieldGet(this, _items)) === null || _c === void 0 ? void 0 : _c.find(e => { var _a; return (e === null || e === void 0 ? void 0 : e.toString()) === ((_a = this.formControl.value) === null || _a === void 0 ? void 0 : _a.toString()); });
|
|
217
|
-
return selectedItem !== null && selectedItem !== void 0 ? selectedItem : '';
|
|
218
|
-
}));
|
|
219
|
-
(_a = __classPrivateFieldGet(this, _form)) === null || _a === void 0 ? void 0 : _a.addControl(__classPrivateFieldGet(this, _name), this.formControl);
|
|
220
|
-
}
|
|
221
|
-
ngOnDestroy() {
|
|
222
|
-
var _a;
|
|
223
|
-
__classPrivateFieldGet(this, _itemsChanges).unsubscribe();
|
|
224
|
-
(_a = __classPrivateFieldGet(this, _form)) === null || _a === void 0 ? void 0 : _a.removeControl(__classPrivateFieldGet(this, _name));
|
|
225
|
-
__classPrivateFieldGet(this, _subscription).unsubscribe();
|
|
226
|
-
}
|
|
227
45
|
}
|
|
228
|
-
_name = new WeakMap(), _form = new WeakMap(), _model = new WeakMap(), _items = new WeakMap(), _validator = new WeakMap(), _modelChanges = new WeakMap(), _itemsChanges = new WeakMap(), _subscription = new WeakMap(), _updateValidator = new WeakMap(), _onChange = new WeakMap(), _customValidator = new WeakMap();
|
|
229
46
|
SdSelectEditor.decorators = [
|
|
230
47
|
{ type: Component, args: [{
|
|
231
|
-
selector:
|
|
232
|
-
template: "<
|
|
233
|
-
styles: [":host{display:block;padding-top:5px}:host ::ng-deep .mat-form-field.mat-form-field-appearance-outline .mat-select-arrow-wrapper{transform:none}:host ::ng-deep .sd-selected .mat-select-arrow{border:none}
|
|
48
|
+
selector: "sd-select-editor",
|
|
49
|
+
template: "<label *ngIf=\"!appearance && label\" class=\"d-block mb-0 T14M\">{{label}} <span class=\"text-danger mb-2\"\r\n *ngIf=\"isRequired\">*</span></label>\r\n<div class=\"d-flex align-items-center\" [class.sd-view]=\"sdView?.templateRef\" [class.c-focused]=\"isFocused\"\r\n[class.c-disabled]=\"formControl.disabled\" (click)=\"onClick()\">\r\n<ng-container *ngIf=\"sdView?.templateRef && !isFocused; else default\">\r\n <ng-container\r\n *ngTemplateOutlet=\"sdView.templateRef;context: { value: formControl.value, selectedItems: selectedItems | async }\">\r\n </ng-container>\r\n</ng-container>\r\n<ng-template #default>\r\n <mat-form-field class=\"sd-md\" [ngClass]=\"{'sd-sm': size === 'sm', 'no-padding-wrapper': disableErrorMessage}\"\r\n [appearance]=\"appearance || 'outline'\">\r\n <mat-label *ngIf=\"appearance && label\">{{label}}</mat-label>\r\n <mat-select #select [formControl]=\"formControl\" [placeholder]=\"placeholder || (!appearance ? label : '')\" multiple\r\n (selectionChange)=\"onSelectionChange($event)\" disableOptionCentering=\"true\" panelClass=\"sd-select-panel\"\r\n [ngClass]=\"{'sd-selected': !isRequired && (multiple ? formControl?.value?.length : formControl?.value)}\"\r\n [required]=\"isRequired\" (openedChange)=\"onOpenChange($event)\" [attr.data-qclabel]=\"label\"\r\n [attr.data-qcid]=\"qcId\" *ngIf=\"multiple\">\r\n <mat-select-trigger>\r\n {{display | async }}\r\n </mat-select-trigger>\r\n <mat-option *ngIf=\"filtered\" class=\"sd-filtered-input\" (keyup.Space)=\"$event.stopPropagation()\" disabled=\"true\">\r\n <mat-form-field class=\"sd-md\" appearance=\"outline\">\r\n <mat-icon matPrefix>search</mat-icon>\r\n <input #input placeholder=\"{{'Search' | sdTranslate}}\" matInput autocomplete=\"off\"\r\n (keydown)=\"$event.stopPropagation()\" (keyup)=\"searchTerm$.next($event.target.value)\">\r\n </mat-form-field>\r\n </mat-option>\r\n <ng-container *ngIf=\"multiple && selectAll\">\r\n <mat-checkbox class=\"mat-option\" [(ngModel)]=\"allSelected\" [ngModelOptions]=\"{standalone: true}\"\r\n (change)=\"onSelectAll()\">\r\n T\u1EA5t c\u1EA3</mat-checkbox>\r\n </ng-container>\r\n <ng-container *ngIf=\"valueField && displayField\">\r\n <mat-option *ngFor=\"let item of filteredItems | async; trackBy: trackByKey\" [value]=\"item[valueField]\">\r\n <div matTooltipPosition=\"above\" [matTooltip]=\"item[displayField]\" class=\"d-flex justify-content-between\">\r\n <ng-container *ngIf=\"selectDisplayDef?.templateRef\">\r\n <ng-container *ngTemplateOutlet=\"selectDisplayDef.templateRef;context:{item: item}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!selectDisplayDef?.templateRef\">\r\n {{ item[displayField] }}\r\n </ng-container>\r\n <div>\r\n <mat-icon *ngIf=\"sdEdit?.observers?.length\" class=\"mr-1 c-fa-icon\" (click)=\"onEdit($event, item)\">\r\n edit</mat-icon>\r\n <mat-icon *ngIf=\"sdDelete?.observers?.length\" class=\"mr-0 c-fa-icon\" (click)=\"onDelete($event, item)\">\r\n delete</mat-icon>\r\n </div>\r\n </div>\r\n </mat-option>\r\n </ng-container>\r\n <ng-container *ngIf=\"!valueField && !displayField\">\r\n <mat-option *ngFor=\"let item of filteredItems | async; trackBy: trackByKey\" [value]=\"item\">\r\n <div matTooltipPosition=\"above\" [matTooltip]=\"item\" class=\"d-flex justify-content-between\">\r\n <ng-container *ngIf=\"selectDisplayDef?.templateRef\">\r\n <ng-container *ngTemplateOutlet=\"selectDisplayDef.templateRef;context:{item: item}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!selectDisplayDef?.templateRef\">\r\n {{ item }}\r\n </ng-container>\r\n <div>\r\n <mat-icon *ngIf=\"sdEdit?.observers?.length\" class=\"mr-1 c-fa-icon\" (click)=\"onEdit($event, item)\">\r\n edit</mat-icon>\r\n <mat-icon *ngIf=\"sdDelete?.observers?.length\" class=\"mr-0 c-fa-icon\" (click)=\"onDelete($event, item)\">\r\n delete</mat-icon>\r\n </div>\r\n </div>\r\n </mat-option>\r\n </ng-container>\r\n <mat-option class=\"sd__option--add\" *ngIf=\"sdAdd?.observers?.length\" (keyup.Space)=\"$event.stopPropagation()\" disabled=\"true\">\r\n <div (click)=\"onAdd($event)\">\r\n <mat-icon class=\"mr-1\">add</mat-icon>\r\n {{'New item' | sdTranslate}}\r\n </div>\r\n </mat-option>\r\n </mat-select>\r\n <mat-select #select [formControl]=\"formControl\" [placeholder]=\"placeholder || (!appearance ? label : '')\"\r\n (selectionChange)=\"onSelectionChange($event)\" disableOptionCentering=\"true\" panelClass=\"sd-select-panel\"\r\n [ngClass]=\"{'sd-selected': !isRequired && formControl?.value}\" [required]=\"isRequired\"\r\n (openedChange)=\"onOpenChange($event)\" [attr.data-qclabel]=\"label\" [attr.data-qcid]=\"qcId\" *ngIf=\"!multiple\">\r\n <mat-select-trigger>\r\n {{display | async }}\r\n </mat-select-trigger>\r\n <mat-option *ngIf=\"filtered\" class=\"sd-filtered-input\" (keyup.Space)=\"$event.stopPropagation()\" disabled=\"true\">\r\n <mat-form-field class=\"sd-md\" appearance=\"outline\">\r\n <mat-icon matPrefix>search</mat-icon>\r\n <input #input placeholder=\"{{'Search' | sdTranslate}}\" matInput autocomplete=\"off\"\r\n (keydown)=\"$event.stopPropagation()\" (keyup)=\"searchTerm$.next($event.target.value)\">\r\n </mat-form-field>\r\n </mat-option>\r\n <ng-container *ngIf=\"valueField && displayField\">\r\n <mat-option *ngFor=\"let item of filteredItems | async; trackBy: trackByKey\" [value]=\"item[valueField]\">\r\n <div matTooltipPosition=\"above\" [matTooltip]=\"item[displayField]\" class=\"d-flex justify-content-between\">\r\n <ng-container *ngIf=\"selectDisplayDef?.templateRef\">\r\n <ng-container *ngTemplateOutlet=\"selectDisplayDef.templateRef;context:{item: item}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!selectDisplayDef?.templateRef\">\r\n {{ item[displayField] }}\r\n </ng-container>\r\n <div>\r\n <mat-icon *ngIf=\"sdEdit?.observers?.length\" class=\"mr-1 c-fa-icon\" (click)=\"onEdit($event, item)\">\r\n edit</mat-icon>\r\n <mat-icon *ngIf=\"sdDelete?.observers?.length\" class=\"mr-0 c-fa-icon\" (click)=\"onDelete($event, item)\">\r\n delete</mat-icon>\r\n </div>\r\n </div>\r\n </mat-option>\r\n </ng-container>\r\n <ng-container *ngIf=\"!valueField && !displayField\">\r\n <mat-option *ngFor=\"let item of filteredItems | async; trackBy: trackByKey\" [value]=\"item\">\r\n <div matTooltipPosition=\"above\" [matTooltip]=\"item\" class=\"d-flex justify-content-between\">\r\n <ng-container *ngIf=\"selectDisplayDef?.templateRef\">\r\n <ng-container *ngTemplateOutlet=\"selectDisplayDef.templateRef;context:{item: item}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!selectDisplayDef?.templateRef\">\r\n {{ item }}\r\n </ng-container>\r\n <div>\r\n <mat-icon *ngIf=\"sdEdit?.observers?.length\" class=\"mr-1 c-fa-icon\" (click)=\"onEdit($event, item)\">\r\n edit</mat-icon>\r\n <mat-icon *ngIf=\"sdDelete?.observers?.length\" class=\"mr-0 c-fa-icon\" (click)=\"onDelete($event, item)\">\r\n delete</mat-icon>\r\n </div>\r\n </div>\r\n </mat-option>\r\n </ng-container>\r\n <mat-option class=\"sd__option--add\" *ngIf=\"sdAdd?.observers?.length\" (keyup.Space)=\"$event.stopPropagation()\" disabled=\"true\">\r\n <div (click)=\"onAdd($event)\">\r\n <mat-icon class=\"mr-1\">add</mat-icon>\r\n {{'New item' | sdTranslate}}\r\n </div>\r\n </mat-option>\r\n </mat-select>\r\n <mat-icon\r\n *ngIf=\"(multiple ? formControl?.value?.length : formControl?.value) && !isRequired && !formControl.disabled\"\r\n class=\"pointer sd-suffix-icon\" (click)=\"clear($event)\" matSuffix>cancel\r\n </mat-icon>\r\n <mat-error *ngIf=\"formControl.errors?.required && !disableErrorMessage\">\r\n {{'This field is required' | sdTranslate}}\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.customValidator && !disableErrorMessage\">\r\n {{formControl?.errors?.customValidator}}\r\n </mat-error>\r\n </mat-form-field>\r\n</ng-template>\r\n</div>",
|
|
50
|
+
styles: [":host{display:block;padding-top:5px}:host ::ng-deep .mat-form-field.mat-form-field-appearance-outline .mat-select-arrow-wrapper{transform:none}:host ::ng-deep .sd-selected .mat-select-arrow{border:none}:host ::ng-deep .mat-form-field.no-padding-wrapper .mat-form-field-wrapper{padding-bottom:0}:host ::ng-deep .mat-form-field.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline{background:#f6f6f6;color:#e9e9e9}:host ::ng-deep .mat-form-field mat-select.mat-select-disabled .mat-select-value{color:#4d4d4d!important}:host ::ng-deep .mat-form-field .mat-placeholder-required{color:#f82c13}.sd-view:not(.c-focused):not(.c-disabled):hover{background-color:#ebecf0}::ng-deep .sd-select-panel .mat-option.sd-filtered-input{background-color:#fff;position:-webkit-sticky;position:sticky;top:0;z-index:10}::ng-deep .sd-select-panel .mat-option.sd-filtered-input .mat-form-field.mat-form-field-appearance-outline{width:100%}::ng-deep .sd-select-panel .mat-option.sd-filtered-input mat-pseudo-checkbox{display:none}::ng-deep .mat-select-panel .mat-option.sd-filtered-input{height:auto}::ng-deep .sd-select-panel .mat-option.sd-filtered-input input{color:#000}::ng-deep .sd-select-panel .mat-option.sd-filtered-input .mat-form-field-prefix .mat-icon{margin-right:0}::ng-deep .sd-select-panel .mat-option.sd-filtered-input .mat-form-field.mat-form-field-appearance-outline .mat-form-field-wrapper{padding:10px 0}::ng-deep .sd-select-panel .mat-option.sd-filtered-input .mat-form-field.mat-form-field-appearance-outline .mat-form-field-wrapper .mat-form-field-outline{background-color:rgba(0,0,0,.04)}.sd__option--add{background-color:#fff;bottom:0;color:rgba(0,0,0,.87);cursor:pointer;position:-webkit-sticky;position:sticky;z-index:10}"]
|
|
234
51
|
},] }
|
|
235
52
|
];
|
|
236
53
|
SdSelectEditor.ctorParameters = () => [
|
|
237
|
-
{ type: ChangeDetectorRef }
|
|
54
|
+
{ type: ChangeDetectorRef },
|
|
55
|
+
{ type: undefined, decorators: [{ type: Inject, args: [FORM_CONFIG,] }, { type: Optional }] }
|
|
238
56
|
];
|
|
239
57
|
SdSelectEditor.propDecorators = {
|
|
240
58
|
matSelect: [{ type: ViewChild, args: [MatSelect,] }],
|
|
241
|
-
size: [{ type: Input }],
|
|
242
|
-
form: [{ type: Input }],
|
|
243
|
-
label: [{ type: Input }],
|
|
244
|
-
placeholder: [{ type: Input }],
|
|
245
|
-
leftLabel: [{ type: Input }],
|
|
246
|
-
labelMinWidth: [{ type: Input }],
|
|
247
|
-
model: [{ type: Input }],
|
|
248
|
-
items: [{ type: Input }],
|
|
249
|
-
valueField: [{ type: Input }],
|
|
250
|
-
displayField: [{ type: Input }],
|
|
251
|
-
required: [{ type: Input }],
|
|
252
|
-
validator: [{ type: Input }],
|
|
253
|
-
disabled: [{ type: Input }],
|
|
254
|
-
modelChange: [{ type: Output }],
|
|
255
|
-
sdChange: [{ type: Output }],
|
|
256
|
-
sdSelection: [{ type: Output }],
|
|
257
59
|
sdAdd: [{ type: Output }],
|
|
258
60
|
sdEdit: [{ type: Output }],
|
|
259
61
|
sdDelete: [{ type: Output }]
|
|
@@ -272,7 +74,11 @@ SdSelectEditorModule.decorators = [
|
|
|
272
74
|
MatFormFieldModule,
|
|
273
75
|
MatIconModule,
|
|
274
76
|
MatSelectModule,
|
|
275
|
-
SdTranslateModule
|
|
77
|
+
SdTranslateModule,
|
|
78
|
+
MatCheckboxModule,
|
|
79
|
+
MatProgressSpinnerModule,
|
|
80
|
+
SdCommonModule,
|
|
81
|
+
SdSelectModule
|
|
276
82
|
],
|
|
277
83
|
declarations: [
|
|
278
84
|
SdSelectEditor
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-angular-core-select-editor.js","sources":["../../../../projects/sd-core/select-editor/src/lib/select-editor.component.ts","../../../../projects/sd-core/select-editor/src/lib/select-editor.module.ts","../../../../projects/sd-core/select-editor/src/public-api.ts","../../../../projects/sd-core/select-editor/sd-angular-core-select-editor.ts"],"sourcesContent":["import { Component, Input, Output, EventEmitter, ChangeDetectorRef, AfterViewInit, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { NgForm, FormControl, Validators, ValidatorFn, AbstractControl, FormGroup, AsyncValidatorFn } from '@angular/forms';\r\nimport * as uuid from 'uuid';\r\nimport { MatSelectChange, MatSelect } from '@angular/material/select';\r\nimport { Observable, Subject, merge, Subscription } from 'rxjs';\r\nimport { startWith, map } from 'rxjs/operators';\r\nimport { SdFormControl } from '@sd-angular/core/common';\r\n\r\n@Component({\r\n selector: 'sd-select-editor',\r\n templateUrl: './select-editor.component.html',\r\n styleUrls: ['./select-editor.component.scss']\r\n})\r\nexport class SdSelectEditor implements OnInit, AfterViewInit, OnDestroy {\r\n #name = uuid.v4();\r\n formControl = new SdFormControl();\r\n @ViewChild(MatSelect) matSelect: MatSelect;\r\n get isNumber() {\r\n if (Array.isArray(this.#model)) {\r\n if (this.#model.length) {\r\n return typeof (this.#model[0]) === 'number';\r\n }\r\n } else {\r\n if (this.#model || this.#model === 0) {\r\n return typeof (this.#model) === 'number';\r\n }\r\n }\r\n if (this.#items?.length) {\r\n if (this.valueField) {\r\n return typeof (this.#items[0][this.valueField]) === 'number';\r\n } else {\r\n return typeof (this.#items[0]) === 'number';\r\n }\r\n }\r\n return false;\r\n }\r\n @Input() size: 'sm' | 'lg';\r\n #form: FormGroup;\r\n @Input() set form(val: NgForm | FormGroup) {\r\n if (val) {\r\n if (val instanceof NgForm) {\r\n this.#form = val.form;\r\n } else {\r\n this.#form = val;\r\n }\r\n }\r\n }\r\n @Input() label: string;\r\n @Input() placeholder: string;\r\n @Input() leftLabel: string;\r\n @Input() labelMinWidth: string;\r\n\r\n // Model\r\n #model: number | string;\r\n @Input() set model(value: undefined | number | string) {\r\n this.#model = value;\r\n value = (value ?? '') + '';\r\n if (value !== this.formControl.value) {\r\n this.formControl.setValue(value);\r\n }\r\n }\r\n // Items\r\n #items: any[] = [];\r\n @Input() set items(items: undefined | any[]) {\r\n this.#items = items?.filter(e => e !== null && e !== undefined) || [];\r\n this.#itemsChanges.next(this.#items);\r\n }\r\n @Input() valueField: string;\r\n @Input() displayField: string;\r\n\r\n // Validator\r\n isRequired = false;\r\n #validator: (value: any) => string | Promise<string>;\r\n @Input() set required(val: boolean | '') {\r\n this.isRequired = (val === '') || val;\r\n this.#updateValidator();\r\n }\r\n @Input() set validator(validator: (value: any) => string | Promise<string>) {\r\n this.#validator = validator;\r\n this.#updateValidator();\r\n }\r\n // Optional\r\n @Input() set disabled(val: boolean | '') {\r\n val = (val === '') || val;\r\n if (val) {\r\n this.formControl.disable();\r\n } else {\r\n this.formControl.enable();\r\n }\r\n }\r\n\r\n filteredItems: Observable<any[]>;\r\n display: Observable<string>;\r\n #modelChanges = new Subject<any>();\r\n #itemsChanges = new Subject<any[]>();\r\n\r\n @Output() modelChange = new EventEmitter<any>();\r\n @Output() sdChange = new EventEmitter<any>();\r\n @Output() sdSelection = new EventEmitter<{ value: any, item?: any }>();\r\n @Output() sdAdd = new EventEmitter();\r\n @Output() sdEdit = new EventEmitter<any>();\r\n @Output() sdDelete = new EventEmitter<any>();\r\n #subscription = new Subscription();\r\n constructor(\r\n private ref: ChangeDetectorRef) { }\r\n\r\n ngOnInit() {\r\n this.formControl.statusChanges\r\n this.#subscription.add(this.formControl.sdChanges.subscribe(() => {\r\n // this.formControl.updateValueAndValidity();\r\n this.ref.markForCheck();\r\n }));\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.filteredItems = this.#itemsChanges.pipe(startWith(this.#items), map((items: any[]) => items.map(e => {\r\n if (this.valueField && this.displayField) {\r\n return {\r\n ...e,\r\n [`${this.valueField}`]: e[this.valueField]?.toString()\r\n };\r\n }\r\n return e?.toString();\r\n })));\r\n this.display = merge(this.formControl.valueChanges, this.#itemsChanges).pipe(startWith([]), map(() => {\r\n if (!this.formControl.value) {\r\n return '';\r\n }\r\n if (this.valueField && this.displayField) {\r\n const selectedItem = this.#items?.find(e => e?.[this.valueField]?.toString() === this.formControl.value?.toString());\r\n return selectedItem?.[this.displayField] ?? '';\r\n }\r\n const selectedItem = this.#items?.find(e => e?.toString() === this.formControl.value?.toString());\r\n return selectedItem ?? '';\r\n }));\r\n this.#form?.addControl(this.#name, this.formControl);\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#itemsChanges.unsubscribe();\r\n this.#form?.removeControl(this.#name);\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n #updateValidator = () => {\r\n this.formControl.clearValidators();\r\n this.formControl.clearAsyncValidators();\r\n const validators: ValidatorFn[] = [];\r\n const asyncValidators: AsyncValidatorFn[] = [];\r\n if (this.isRequired) {\r\n validators.push(Validators.required);\r\n }\r\n if (this.#validator) {\r\n asyncValidators.push(this.#customValidator(this.#validator));\r\n }\r\n this.formControl.setValidators(validators);\r\n this.formControl.setAsyncValidators(asyncValidators);\r\n this.formControl.updateValueAndValidity();\r\n }\r\n\r\n onSelectionChange = (change: MatSelectChange) => {\r\n const value = change?.value || '';\r\n this.#onChange(value);\r\n }\r\n\r\n reValidate = () => {\r\n this.formControl.updateValueAndValidity({ emitEvent: true });\r\n }\r\n\r\n #onChange = (value: number | string) => {\r\n let val = value;\r\n if (this.isNumber && Number.isNumber(value)) {\r\n val = +value;\r\n }\r\n this.modelChange.emit(val);\r\n this.sdChange.emit(val);\r\n this.sdSelection.emit({\r\n value: val,\r\n item: this.#items?.find(e => val?.toString() === e?.[this.valueField]?.toString())\r\n });\r\n }\r\n clear = ($event?: Event) => {\r\n $event?.stopPropagation();\r\n this.formControl.setValue(null);\r\n this.modelChange.emit(null);\r\n this.sdChange.emit(null);\r\n this.sdSelection.emit({\r\n value: null,\r\n item: null\r\n });\r\n }\r\n\r\n #customValidator = (func: (value: any) => string | Promise<string>): AsyncValidatorFn => {\r\n return async (c: AbstractControl): Promise<{ [key: string]: any } | null> => {\r\n const value = c.value || null;\r\n if (func && typeof (func) === 'function') {\r\n const result = func(value);\r\n if (result instanceof Promise) {\r\n const message = await result;\r\n if (message) {\r\n return {\r\n customValidator: message\r\n };\r\n }\r\n return null;\r\n }\r\n if (result) {\r\n return {\r\n customValidator: result\r\n };\r\n }\r\n return null;\r\n }\r\n return null;\r\n };\r\n }\r\n\r\n onAdd = ($event: Event) => {\r\n $event.stopPropagation();\r\n $event?.preventDefault();\r\n this.matSelect?.close();\r\n this.sdAdd.emit();\r\n }\r\n\r\n onEdit = ($event: Event, item: any) => {\r\n $event.stopPropagation();\r\n $event?.preventDefault();\r\n this.matSelect?.close();\r\n this.sdEdit.emit(item);\r\n }\r\n\r\n onDelete = ($event: Event, item: any) => {\r\n $event.stopPropagation();\r\n $event?.preventDefault();\r\n this.matSelect?.close();\r\n this.sdDelete.emit(item);\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { SdSelectEditor } from './select-editor.component';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { SdTranslateModule } from '@sd-angular/core/translate';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatInputModule,\r\n MatTooltipModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatSelectModule,\r\n SdTranslateModule\r\n ],\r\n declarations: [\r\n SdSelectEditor\r\n ],\r\n exports: [\r\n SdSelectEditor\r\n ],\r\n providers: [\r\n ]\r\n})\r\nexport class SdSelectEditorModule {\r\n\r\n}\r\n","/*\r\n * Public API Surface of superdev-angular-core\r\n */\r\n\r\nexport * from './lib/select-editor.module';\r\nexport * from './lib/select-editor.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["uuid.v4"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sd-angular-core-select-editor.js","sources":["../../../../projects/sd-core/select-editor/src/lib/select-editor.component.ts","../../../../projects/sd-core/select-editor/src/lib/select-editor.module.ts","../../../../projects/sd-core/select-editor/src/public-api.ts","../../../../projects/sd-core/select-editor/sd-angular-core-select-editor.ts"],"sourcesContent":["import {\r\n Component,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectorRef,\r\n OnDestroy,\r\n OnInit,\r\n ViewChild,\r\n Optional,\r\n Inject,\r\n} from \"@angular/core\";\r\nimport { MatSelect } from \"@angular/material/select\";\r\nimport {\r\n FORM_CONFIG,\r\n IFormConfiguration\r\n} from \"@sd-angular/core/common\";\r\nimport { SdSelect } from \"@sd-angular/core/select\";\r\n\r\n@Component({\r\n selector: \"sd-select-editor\",\r\n templateUrl: \"./select-editor.component.html\",\r\n styleUrls: [\"./select-editor.component.scss\"],\r\n})\r\nexport class SdSelectEditor extends SdSelect implements OnInit, OnDestroy {\r\n @ViewChild(MatSelect) matSelect: MatSelect;\r\n\r\n @Output() sdAdd = new EventEmitter();\r\n @Output() sdEdit = new EventEmitter<any>();\r\n @Output() sdDelete = new EventEmitter<any>();\r\n\r\n constructor(\r\n private cdRef: ChangeDetectorRef,\r\n @Inject(FORM_CONFIG)\r\n @Optional()\r\n private formConfiguration: IFormConfiguration\r\n ) {\r\n super(cdRef, formConfiguration);\r\n }\r\n\r\n onAdd = ($event: Event) => {\r\n $event.stopPropagation();\r\n $event?.preventDefault();\r\n this.matSelect?.close();\r\n this.sdAdd.emit();\r\n };\r\n\r\n onEdit = ($event: Event, item: any) => {\r\n $event.stopPropagation();\r\n $event?.preventDefault();\r\n this.matSelect?.close();\r\n this.sdEdit.emit(item);\r\n };\r\n\r\n onDelete = ($event: Event, item: any) => {\r\n $event.stopPropagation();\r\n $event?.preventDefault();\r\n this.matSelect?.close();\r\n this.sdDelete.emit(item);\r\n };\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { SdSelectEditor } from './select-editor.component';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { SdTranslateModule } from '@sd-angular/core/translate';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { SdCommonModule } from '@sd-angular/core/common';\r\nimport { SdSelectModule } from '@sd-angular/core/select';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatInputModule,\r\n MatTooltipModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatSelectModule,\r\n SdTranslateModule,\r\n MatCheckboxModule,\r\n MatProgressSpinnerModule,\r\n SdCommonModule,\r\n SdSelectModule\r\n ],\r\n declarations: [\r\n SdSelectEditor\r\n ],\r\n exports: [\r\n SdSelectEditor\r\n ],\r\n providers: [\r\n ]\r\n})\r\nexport class SdSelectEditorModule {\r\n\r\n}\r\n","/*\r\n * Public API Surface of superdev-angular-core\r\n */\r\n\r\nexport * from './lib/select-editor.module';\r\nexport * from './lib/select-editor.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;MAuBa,cAAe,SAAQ,QAAQ;IAO1C,YACU,KAAwB,EAGxB,iBAAqC;QAE7C,KAAK,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;QALxB,UAAK,GAAL,KAAK,CAAmB;QAGxB,sBAAiB,GAAjB,iBAAiB,CAAoB;QARrC,UAAK,GAAG,IAAI,YAAY,EAAE,CAAC;QAC3B,WAAM,GAAG,IAAI,YAAY,EAAO,CAAC;QACjC,aAAQ,GAAG,IAAI,YAAY,EAAO,CAAC;QAW7C,UAAK,GAAG,CAAC,MAAa;;YACpB,MAAM,CAAC,eAAe,EAAE,CAAC;YACzB,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,cAAc,GAAG;YACzB,MAAA,IAAI,CAAC,SAAS,0CAAE,KAAK,GAAG;YACxB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SACnB,CAAC;QAEF,WAAM,GAAG,CAAC,MAAa,EAAE,IAAS;;YAChC,MAAM,CAAC,eAAe,EAAE,CAAC;YACzB,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,cAAc,GAAG;YACzB,MAAA,IAAI,CAAC,SAAS,0CAAE,KAAK,GAAG;YACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACxB,CAAC;QAEF,aAAQ,GAAG,CAAC,MAAa,EAAE,IAAS;;YAClC,MAAM,CAAC,eAAe,EAAE,CAAC;YACzB,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,cAAc,GAAG;YACzB,MAAA,IAAI,CAAC,SAAS,0CAAE,KAAK,GAAG;YACxB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC1B,CAAC;KArBD;;;YAnBF,SAAS,SAAC;gBACT,QAAQ,EAAE,kBAAkB;gBAC5B,y0RAA6C;;aAE9C;;;YAlBC,iBAAiB;4CA4Bd,MAAM,SAAC,WAAW,cAClB,QAAQ;;;wBATV,SAAS,SAAC,SAAS;oBAEnB,MAAM;qBACN,MAAM;uBACN,MAAM;;;MCYI,oBAAoB;;;YAzBhC,QAAQ,SAAC;gBACR,OAAO,EAAE;oBACP,YAAY;oBACZ,WAAW;oBACX,mBAAmB;oBACnB,cAAc;oBACd,gBAAgB;oBAChB,kBAAkB;oBAClB,aAAa;oBACb,eAAe;oBACf,iBAAiB;oBACjB,iBAAiB;oBACjB,wBAAwB;oBACxB,cAAc;oBACd,cAAc;iBACf;gBACD,YAAY,EAAE;oBACZ,cAAc;iBACf;gBACD,OAAO,EAAE;oBACP,cAAc;iBACf;gBACD,SAAS,EAAE,EACV;aACF;;;ACvCD;;;;ACAA;;;;;;"}
|
package/package.json
CHANGED
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"__symbolic":"module","version":4,"metadata":{"SdSelectEditorModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":11,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":13,"character":4},{"__symbolic":"reference","module":"@angular/forms","name":"FormsModule","line":14,"character":4},{"__symbolic":"reference","module":"@angular/forms","name":"ReactiveFormsModule","line":15,"character":4},{"__symbolic":"reference","module":"@angular/material/input","name":"MatInputModule","line":16,"character":4},{"__symbolic":"reference","module":"@angular/material/tooltip","name":"MatTooltipModule","line":17,"character":4},{"__symbolic":"reference","module":"@angular/material/form-field","name":"MatFormFieldModule","line":18,"character":4},{"__symbolic":"reference","module":"@angular/material/icon","name":"MatIconModule","line":19,"character":4},{"__symbolic":"reference","module":"@angular/material/select","name":"MatSelectModule","line":20,"character":4},{"__symbolic":"reference","module":"@sd-angular/core/translate","name":"SdTranslateModule","line":21,"character":4}],"declarations":[{"__symbolic":"reference","name":"SdSelectEditor"}],"exports":[{"__symbolic":"reference","name":"SdSelectEditor"}],"providers":[]}]}],"members":{}},"SdSelectEditor":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":8,"character":1},"arguments":[{"selector":"sd-select-editor","template":"<div class=\"d-flex align-items-center\">\r\n <div class=\"mat-label mr-12 mb-12\" *ngIf=\"leftLabel\" [ngStyle]=\"{'min-width': labelMinWidth}\">{{leftLabel}}</div>\r\n <div class=\"media-body\">\r\n <mat-form-field class=\"sd-md\" [ngClass]=\"{'sd-sm': size === 'sm'}\" appearance=\"outline\">\r\n <mat-label *ngIf=\"label && !leftLabel\">{{label}}</mat-label>\r\n <mat-select [formControl]=\"formControl\" placeholder=\"{{placeholder || label}}\"\r\n (selectionChange)=\"onSelectionChange($event)\" disableOptionCentering=\"true\" panelClass=\"sd-select-panel\" [ngClass]=\"{'sd-selected': !isRequired && formControl?.value}\"\r\n [required]=\"isRequired\" disableOptionCentering=\"true\" #matSelect>\r\n <mat-select-trigger>\r\n {{display | async }}\r\n </mat-select-trigger>\r\n <ng-container *ngIf=\"valueField && displayField\">\r\n <mat-option *ngFor=\"let item of filteredItems | async\" [value]=\"item[valueField]\" matTooltipPosition=\"above\"\r\n [matTooltip]=\"item[displayField]\">\r\n <div style=\"display:flex; justify-content: space-between\">\r\n <span>{{item[displayField]}}</span>\r\n <div>\r\n <mat-icon *ngIf=\"sdEdit?.observers?.length\" class=\"mr-1 c-fa-icon\" (click)=\"onEdit($event, item)\">\r\n edit</mat-icon>\r\n <mat-icon *ngIf=\"sdDelete?.observers?.length\" class=\"mr-0 c-fa-icon\" (click)=\"onDelete($event, item)\">\r\n delete</mat-icon>\r\n </div>\r\n </div>\r\n </mat-option>\r\n </ng-container>\r\n <ng-container *ngIf=\"!valueField && !displayField\">\r\n <mat-option *ngFor=\"let item of filteredItems | async\" [value]=\"item\" matTooltipPosition=\"above\"\r\n [matTooltip]=\"item\">\r\n <div style=\"display:flex; justify-content: space-between\">\r\n <span>{{item}}</span>\r\n <div>\r\n <mat-icon *ngIf=\"sdEdit?.observers?.length\" class=\"mr-1 c-action-icon\" (click)=\"onEdit($event, item)\">\r\n edit</mat-icon>\r\n <mat-icon *ngIf=\"sdDelete?.observers?.length\" class=\"mr-0 c-action-icon\"\r\n (click)=\"onDelete($event, item)\">delete</mat-icon>\r\n </div>\r\n </div>\r\n </mat-option>\r\n </ng-container>\r\n <mat-option *ngIf=\"sdAdd?.observers?.length\" class=\"sd-option--add\">\r\n <div (click)=\"onAdd($event)\">\r\n <mat-icon class=\"mr-1\">add</mat-icon>\r\n {{'New item' | sdTranslate}}\r\n </div>\r\n </mat-option>\r\n </mat-select>\r\n <mat-icon *ngIf=\"formControl?.value && !isRequired && !formControl.disabled\" class=\"pointer sd-suffix-icon\"\r\n (click)=\"clear($event)\" matSuffix>cancel\r\n </mat-icon>\r\n <mat-error *ngIf=\"formControl.errors?.required\">\r\n {{'This field is required' | sdTranslate}}\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.customValidator\">\r\n {{formControl?.errors?.customValidator}}\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n</div>","styles":[":host{display:block;padding-top:5px}:host ::ng-deep .mat-form-field.mat-form-field-appearance-outline .mat-select-arrow-wrapper{transform:none}:host ::ng-deep .sd-selected .mat-select-arrow{border:none}.c-action-icon{color:#dadada;font-size:21px;height:20px;width:20px}.c-action-icon:hover{color:#616161}:host ::ng-deep .mat-form-field.no-padding-wrapper .mat-form-field-wrapper{padding-bottom:0}:host ::ng-deep .mat-form-field.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline{background:#f6f6f6;color:#e9e9e9}:host ::ng-deep .mat-form-field mat-select.mat-select-disabled .mat-select-value{color:#4d4d4d!important}:host ::ng-deep .mat-form-field .mat-placeholder-required{color:#f82c13}:host ::ng-deep .sd-option--add{background-color:#fff;bottom:0;position:-webkit-sticky;position:sticky;z-index:1}"]}]}],"members":{"matSelect":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":16,"character":3},"arguments":[{"__symbolic":"reference","module":"@angular/material/select","name":"MatSelect","line":16,"character":13}]}]}],"size":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":36,"character":3}}]}],"form":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":38,"character":3}}]}],"label":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":47,"character":3}}]}],"placeholder":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":48,"character":3}}]}],"leftLabel":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":49,"character":3}}]}],"labelMinWidth":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":50,"character":3}}]}],"model":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":54,"character":3}}]}],"items":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":63,"character":3}}]}],"valueField":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":67,"character":3}}]}],"displayField":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":68,"character":3}}]}],"required":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":73,"character":3}}]}],"validator":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":77,"character":3}}]}],"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":82,"character":3}}]}],"modelChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":96,"character":3}}]}],"sdChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":97,"character":3}}]}],"sdSelection":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":98,"character":3}}]}],"sdAdd":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":99,"character":3}}]}],"sdEdit":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":100,"character":3}}]}],"sdDelete":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":101,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":104,"character":17}]}],"ngOnInit":[{"__symbolic":"method"}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}]}}},"origins":{"SdSelectEditorModule":"./src/lib/select-editor.module","SdSelectEditor":"./src/lib/select-editor.component"},"importAs":"@sd-angular/core/select-editor"}
|
|
1
|
+
{"__symbolic":"module","version":4,"metadata":{"SdSelectEditorModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":15,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":17,"character":4},{"__symbolic":"reference","module":"@angular/forms","name":"FormsModule","line":18,"character":4},{"__symbolic":"reference","module":"@angular/forms","name":"ReactiveFormsModule","line":19,"character":4},{"__symbolic":"reference","module":"@angular/material/input","name":"MatInputModule","line":20,"character":4},{"__symbolic":"reference","module":"@angular/material/tooltip","name":"MatTooltipModule","line":21,"character":4},{"__symbolic":"reference","module":"@angular/material/form-field","name":"MatFormFieldModule","line":22,"character":4},{"__symbolic":"reference","module":"@angular/material/icon","name":"MatIconModule","line":23,"character":4},{"__symbolic":"reference","module":"@angular/material/select","name":"MatSelectModule","line":24,"character":4},{"__symbolic":"reference","module":"@sd-angular/core/translate","name":"SdTranslateModule","line":25,"character":4},{"__symbolic":"reference","module":"@angular/material/checkbox","name":"MatCheckboxModule","line":26,"character":4},{"__symbolic":"reference","module":"@angular/material/progress-spinner","name":"MatProgressSpinnerModule","line":27,"character":4},{"__symbolic":"reference","module":"@sd-angular/core/common","name":"SdCommonModule","line":28,"character":4},{"__symbolic":"reference","module":"@sd-angular/core/select","name":"SdSelectModule","line":29,"character":4}],"declarations":[{"__symbolic":"reference","name":"SdSelectEditor"}],"exports":[{"__symbolic":"reference","name":"SdSelectEditor"}],"providers":[]}]}],"members":{}},"SdSelectEditor":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"@sd-angular/core/select","name":"SdSelect","line":23,"character":36},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":18,"character":1},"arguments":[{"selector":"sd-select-editor","template":"<label *ngIf=\"!appearance && label\" class=\"d-block mb-0 T14M\">{{label}} <span class=\"text-danger mb-2\"\r\n *ngIf=\"isRequired\">*</span></label>\r\n<div class=\"d-flex align-items-center\" [class.sd-view]=\"sdView?.templateRef\" [class.c-focused]=\"isFocused\"\r\n[class.c-disabled]=\"formControl.disabled\" (click)=\"onClick()\">\r\n<ng-container *ngIf=\"sdView?.templateRef && !isFocused; else default\">\r\n <ng-container\r\n *ngTemplateOutlet=\"sdView.templateRef;context: { value: formControl.value, selectedItems: selectedItems | async }\">\r\n </ng-container>\r\n</ng-container>\r\n<ng-template #default>\r\n <mat-form-field class=\"sd-md\" [ngClass]=\"{'sd-sm': size === 'sm', 'no-padding-wrapper': disableErrorMessage}\"\r\n [appearance]=\"appearance || 'outline'\">\r\n <mat-label *ngIf=\"appearance && label\">{{label}}</mat-label>\r\n <mat-select #select [formControl]=\"formControl\" [placeholder]=\"placeholder || (!appearance ? label : '')\" multiple\r\n (selectionChange)=\"onSelectionChange($event)\" disableOptionCentering=\"true\" panelClass=\"sd-select-panel\"\r\n [ngClass]=\"{'sd-selected': !isRequired && (multiple ? formControl?.value?.length : formControl?.value)}\"\r\n [required]=\"isRequired\" (openedChange)=\"onOpenChange($event)\" [attr.data-qclabel]=\"label\"\r\n [attr.data-qcid]=\"qcId\" *ngIf=\"multiple\">\r\n <mat-select-trigger>\r\n {{display | async }}\r\n </mat-select-trigger>\r\n <mat-option *ngIf=\"filtered\" class=\"sd-filtered-input\" (keyup.Space)=\"$event.stopPropagation()\" disabled=\"true\">\r\n <mat-form-field class=\"sd-md\" appearance=\"outline\">\r\n <mat-icon matPrefix>search</mat-icon>\r\n <input #input placeholder=\"{{'Search' | sdTranslate}}\" matInput autocomplete=\"off\"\r\n (keydown)=\"$event.stopPropagation()\" (keyup)=\"searchTerm$.next($event.target.value)\">\r\n </mat-form-field>\r\n </mat-option>\r\n <ng-container *ngIf=\"multiple && selectAll\">\r\n <mat-checkbox class=\"mat-option\" [(ngModel)]=\"allSelected\" [ngModelOptions]=\"{standalone: true}\"\r\n (change)=\"onSelectAll()\">\r\n Tất cả</mat-checkbox>\r\n </ng-container>\r\n <ng-container *ngIf=\"valueField && displayField\">\r\n <mat-option *ngFor=\"let item of filteredItems | async; trackBy: trackByKey\" [value]=\"item[valueField]\">\r\n <div matTooltipPosition=\"above\" [matTooltip]=\"item[displayField]\" class=\"d-flex justify-content-between\">\r\n <ng-container *ngIf=\"selectDisplayDef?.templateRef\">\r\n <ng-container *ngTemplateOutlet=\"selectDisplayDef.templateRef;context:{item: item}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!selectDisplayDef?.templateRef\">\r\n {{ item[displayField] }}\r\n </ng-container>\r\n <div>\r\n <mat-icon *ngIf=\"sdEdit?.observers?.length\" class=\"mr-1 c-fa-icon\" (click)=\"onEdit($event, item)\">\r\n edit</mat-icon>\r\n <mat-icon *ngIf=\"sdDelete?.observers?.length\" class=\"mr-0 c-fa-icon\" (click)=\"onDelete($event, item)\">\r\n delete</mat-icon>\r\n </div>\r\n </div>\r\n </mat-option>\r\n </ng-container>\r\n <ng-container *ngIf=\"!valueField && !displayField\">\r\n <mat-option *ngFor=\"let item of filteredItems | async; trackBy: trackByKey\" [value]=\"item\">\r\n <div matTooltipPosition=\"above\" [matTooltip]=\"item\" class=\"d-flex justify-content-between\">\r\n <ng-container *ngIf=\"selectDisplayDef?.templateRef\">\r\n <ng-container *ngTemplateOutlet=\"selectDisplayDef.templateRef;context:{item: item}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!selectDisplayDef?.templateRef\">\r\n {{ item }}\r\n </ng-container>\r\n <div>\r\n <mat-icon *ngIf=\"sdEdit?.observers?.length\" class=\"mr-1 c-fa-icon\" (click)=\"onEdit($event, item)\">\r\n edit</mat-icon>\r\n <mat-icon *ngIf=\"sdDelete?.observers?.length\" class=\"mr-0 c-fa-icon\" (click)=\"onDelete($event, item)\">\r\n delete</mat-icon>\r\n </div>\r\n </div>\r\n </mat-option>\r\n </ng-container>\r\n <mat-option class=\"sd__option--add\" *ngIf=\"sdAdd?.observers?.length\" (keyup.Space)=\"$event.stopPropagation()\" disabled=\"true\">\r\n <div (click)=\"onAdd($event)\">\r\n <mat-icon class=\"mr-1\">add</mat-icon>\r\n {{'New item' | sdTranslate}}\r\n </div>\r\n </mat-option>\r\n </mat-select>\r\n <mat-select #select [formControl]=\"formControl\" [placeholder]=\"placeholder || (!appearance ? label : '')\"\r\n (selectionChange)=\"onSelectionChange($event)\" disableOptionCentering=\"true\" panelClass=\"sd-select-panel\"\r\n [ngClass]=\"{'sd-selected': !isRequired && formControl?.value}\" [required]=\"isRequired\"\r\n (openedChange)=\"onOpenChange($event)\" [attr.data-qclabel]=\"label\" [attr.data-qcid]=\"qcId\" *ngIf=\"!multiple\">\r\n <mat-select-trigger>\r\n {{display | async }}\r\n </mat-select-trigger>\r\n <mat-option *ngIf=\"filtered\" class=\"sd-filtered-input\" (keyup.Space)=\"$event.stopPropagation()\" disabled=\"true\">\r\n <mat-form-field class=\"sd-md\" appearance=\"outline\">\r\n <mat-icon matPrefix>search</mat-icon>\r\n <input #input placeholder=\"{{'Search' | sdTranslate}}\" matInput autocomplete=\"off\"\r\n (keydown)=\"$event.stopPropagation()\" (keyup)=\"searchTerm$.next($event.target.value)\">\r\n </mat-form-field>\r\n </mat-option>\r\n <ng-container *ngIf=\"valueField && displayField\">\r\n <mat-option *ngFor=\"let item of filteredItems | async; trackBy: trackByKey\" [value]=\"item[valueField]\">\r\n <div matTooltipPosition=\"above\" [matTooltip]=\"item[displayField]\" class=\"d-flex justify-content-between\">\r\n <ng-container *ngIf=\"selectDisplayDef?.templateRef\">\r\n <ng-container *ngTemplateOutlet=\"selectDisplayDef.templateRef;context:{item: item}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!selectDisplayDef?.templateRef\">\r\n {{ item[displayField] }}\r\n </ng-container>\r\n <div>\r\n <mat-icon *ngIf=\"sdEdit?.observers?.length\" class=\"mr-1 c-fa-icon\" (click)=\"onEdit($event, item)\">\r\n edit</mat-icon>\r\n <mat-icon *ngIf=\"sdDelete?.observers?.length\" class=\"mr-0 c-fa-icon\" (click)=\"onDelete($event, item)\">\r\n delete</mat-icon>\r\n </div>\r\n </div>\r\n </mat-option>\r\n </ng-container>\r\n <ng-container *ngIf=\"!valueField && !displayField\">\r\n <mat-option *ngFor=\"let item of filteredItems | async; trackBy: trackByKey\" [value]=\"item\">\r\n <div matTooltipPosition=\"above\" [matTooltip]=\"item\" class=\"d-flex justify-content-between\">\r\n <ng-container *ngIf=\"selectDisplayDef?.templateRef\">\r\n <ng-container *ngTemplateOutlet=\"selectDisplayDef.templateRef;context:{item: item}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!selectDisplayDef?.templateRef\">\r\n {{ item }}\r\n </ng-container>\r\n <div>\r\n <mat-icon *ngIf=\"sdEdit?.observers?.length\" class=\"mr-1 c-fa-icon\" (click)=\"onEdit($event, item)\">\r\n edit</mat-icon>\r\n <mat-icon *ngIf=\"sdDelete?.observers?.length\" class=\"mr-0 c-fa-icon\" (click)=\"onDelete($event, item)\">\r\n delete</mat-icon>\r\n </div>\r\n </div>\r\n </mat-option>\r\n </ng-container>\r\n <mat-option class=\"sd__option--add\" *ngIf=\"sdAdd?.observers?.length\" (keyup.Space)=\"$event.stopPropagation()\" disabled=\"true\">\r\n <div (click)=\"onAdd($event)\">\r\n <mat-icon class=\"mr-1\">add</mat-icon>\r\n {{'New item' | sdTranslate}}\r\n </div>\r\n </mat-option>\r\n </mat-select>\r\n <mat-icon\r\n *ngIf=\"(multiple ? formControl?.value?.length : formControl?.value) && !isRequired && !formControl.disabled\"\r\n class=\"pointer sd-suffix-icon\" (click)=\"clear($event)\" matSuffix>cancel\r\n </mat-icon>\r\n <mat-error *ngIf=\"formControl.errors?.required && !disableErrorMessage\">\r\n {{'This field is required' | sdTranslate}}\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.customValidator && !disableErrorMessage\">\r\n {{formControl?.errors?.customValidator}}\r\n </mat-error>\r\n </mat-form-field>\r\n</ng-template>\r\n</div>","styles":[":host{display:block;padding-top:5px}:host ::ng-deep .mat-form-field.mat-form-field-appearance-outline .mat-select-arrow-wrapper{transform:none}:host ::ng-deep .sd-selected .mat-select-arrow{border:none}:host ::ng-deep .mat-form-field.no-padding-wrapper .mat-form-field-wrapper{padding-bottom:0}:host ::ng-deep .mat-form-field.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline{background:#f6f6f6;color:#e9e9e9}:host ::ng-deep .mat-form-field mat-select.mat-select-disabled .mat-select-value{color:#4d4d4d!important}:host ::ng-deep .mat-form-field .mat-placeholder-required{color:#f82c13}.sd-view:not(.c-focused):not(.c-disabled):hover{background-color:#ebecf0}::ng-deep .sd-select-panel .mat-option.sd-filtered-input{background-color:#fff;position:-webkit-sticky;position:sticky;top:0;z-index:10}::ng-deep .sd-select-panel .mat-option.sd-filtered-input .mat-form-field.mat-form-field-appearance-outline{width:100%}::ng-deep .sd-select-panel .mat-option.sd-filtered-input mat-pseudo-checkbox{display:none}::ng-deep .mat-select-panel .mat-option.sd-filtered-input{height:auto}::ng-deep .sd-select-panel .mat-option.sd-filtered-input input{color:#000}::ng-deep .sd-select-panel .mat-option.sd-filtered-input .mat-form-field-prefix .mat-icon{margin-right:0}::ng-deep .sd-select-panel .mat-option.sd-filtered-input .mat-form-field.mat-form-field-appearance-outline .mat-form-field-wrapper{padding:10px 0}::ng-deep .sd-select-panel .mat-option.sd-filtered-input .mat-form-field.mat-form-field-appearance-outline .mat-form-field-wrapper .mat-form-field-outline{background-color:rgba(0,0,0,.04)}.sd__option--add{background-color:#fff;bottom:0;color:rgba(0,0,0,.87);cursor:pointer;position:-webkit-sticky;position:sticky;z-index:10}"]}]}],"members":{"matSelect":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":24,"character":3},"arguments":[{"__symbolic":"reference","module":"@angular/material/select","name":"MatSelect","line":24,"character":13}]}]}],"sdAdd":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":26,"character":3}}]}],"sdEdit":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":27,"character":3}}]}],"sdDelete":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":28,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":32,"character":5},"arguments":[{"__symbolic":"reference","module":"@sd-angular/core/common","name":"FORM_CONFIG","line":32,"character":12}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":33,"character":5}}]],"parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":31,"character":19},{"__symbolic":"reference","module":"@sd-angular/core/common","name":"IFormConfiguration","line":34,"character":31}]}]}}},"origins":{"SdSelectEditorModule":"./src/lib/select-editor.module","SdSelectEditor":"./src/lib/select-editor.component"},"importAs":"@sd-angular/core/select-editor"}
|
|
@@ -1,46 +1,15 @@
|
|
|
1
|
-
import { EventEmitter, ChangeDetectorRef,
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
private ref;
|
|
9
|
-
formControl: SdFormControl;
|
|
1
|
+
import { EventEmitter, ChangeDetectorRef, OnDestroy, OnInit } from "@angular/core";
|
|
2
|
+
import { MatSelect } from "@angular/material/select";
|
|
3
|
+
import { IFormConfiguration } from "@sd-angular/core/common";
|
|
4
|
+
import { SdSelect } from "@sd-angular/core/select";
|
|
5
|
+
export declare class SdSelectEditor extends SdSelect implements OnInit, OnDestroy {
|
|
6
|
+
private cdRef;
|
|
7
|
+
private formConfiguration;
|
|
10
8
|
matSelect: MatSelect;
|
|
11
|
-
get isNumber(): boolean;
|
|
12
|
-
size: 'sm' | 'lg';
|
|
13
|
-
set form(val: NgForm | FormGroup);
|
|
14
|
-
label: string;
|
|
15
|
-
placeholder: string;
|
|
16
|
-
leftLabel: string;
|
|
17
|
-
labelMinWidth: string;
|
|
18
|
-
set model(value: undefined | number | string);
|
|
19
|
-
set items(items: undefined | any[]);
|
|
20
|
-
valueField: string;
|
|
21
|
-
displayField: string;
|
|
22
|
-
isRequired: boolean;
|
|
23
|
-
set required(val: boolean | '');
|
|
24
|
-
set validator(validator: (value: any) => string | Promise<string>);
|
|
25
|
-
set disabled(val: boolean | '');
|
|
26
|
-
filteredItems: Observable<any[]>;
|
|
27
|
-
display: Observable<string>;
|
|
28
|
-
modelChange: EventEmitter<any>;
|
|
29
|
-
sdChange: EventEmitter<any>;
|
|
30
|
-
sdSelection: EventEmitter<{
|
|
31
|
-
value: any;
|
|
32
|
-
item?: any;
|
|
33
|
-
}>;
|
|
34
9
|
sdAdd: EventEmitter<any>;
|
|
35
10
|
sdEdit: EventEmitter<any>;
|
|
36
11
|
sdDelete: EventEmitter<any>;
|
|
37
|
-
constructor(
|
|
38
|
-
ngOnInit(): void;
|
|
39
|
-
ngAfterViewInit(): void;
|
|
40
|
-
ngOnDestroy(): void;
|
|
41
|
-
onSelectionChange: (change: MatSelectChange) => void;
|
|
42
|
-
reValidate: () => void;
|
|
43
|
-
clear: ($event?: Event) => void;
|
|
12
|
+
constructor(cdRef: ChangeDetectorRef, formConfiguration: IFormConfiguration);
|
|
44
13
|
onAdd: ($event: Event) => void;
|
|
45
14
|
onEdit: ($event: Event, item: any) => void;
|
|
46
15
|
onDelete: ($event: Event, item: any) => void;
|