@sd-angular/core 0.0.917 → 0.0.921

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/bundles/sd-angular-core-grid-material.umd.js +384 -51
  2. package/bundles/sd-angular-core-grid-material.umd.js.map +1 -1
  3. package/bundles/sd-angular-core-grid-material.umd.min.js +2 -2
  4. package/bundles/sd-angular-core-grid-material.umd.min.js.map +1 -1
  5. package/bundles/sd-angular-core-select.umd.js +1 -1
  6. package/bundles/sd-angular-core-select.umd.js.map +1 -1
  7. package/bundles/sd-angular-core-select.umd.min.js +1 -1
  8. package/bundles/sd-angular-core-select.umd.min.js.map +1 -1
  9. package/esm2015/grid-material/sd-angular-core-grid-material.js +30 -25
  10. package/esm2015/grid-material/src/lib/components/desktop-cell/desktop-cell.component.js +20 -0
  11. package/esm2015/grid-material/src/lib/components/desktop-cell-editor/desktop-cell-editor.component.js +26 -0
  12. package/esm2015/grid-material/src/lib/components/desktop-cell-view/desktop-cell-view.component.js +4 -3
  13. package/esm2015/grid-material/src/lib/grid-material.component.js +115 -4
  14. package/esm2015/grid-material/src/lib/grid-material.module.js +12 -2
  15. package/esm2015/grid-material/src/lib/models/grid-column.model.js +1 -1
  16. package/esm2015/grid-material/src/lib/models/grid-editor.model.js +2 -0
  17. package/esm2015/grid-material/src/lib/models/grid-option.model.js +1 -1
  18. package/esm2015/grid-material/src/lib/models/grid.model.js +1 -1
  19. package/esm2015/grid-material/src/lib/pipes/editor-handler-column.pipe.js +39 -0
  20. package/esm2015/grid-material/src/lib/pipes/editor-handler-row.pipe.js +40 -0
  21. package/esm2015/grid-material/src/lib/pipes/editor-validate.pipe.js +41 -0
  22. package/esm2015/grid-material/src/lib/services/grid-configuration.service.js +13 -7
  23. package/esm2015/select/src/lib/select.component.js +2 -2
  24. package/fesm2015/sd-angular-core-grid-material.js +296 -13
  25. package/fesm2015/sd-angular-core-grid-material.js.map +1 -1
  26. package/fesm2015/sd-angular-core-select.js +1 -1
  27. package/fesm2015/sd-angular-core-select.js.map +1 -1
  28. package/grid-material/sd-angular-core-grid-material.d.ts +29 -24
  29. package/grid-material/sd-angular-core-grid-material.metadata.json +1 -1
  30. package/grid-material/src/lib/components/desktop-cell/desktop-cell.component.d.ts +9 -0
  31. package/grid-material/src/lib/components/desktop-cell-editor/desktop-cell-editor.component.d.ts +7 -0
  32. package/grid-material/src/lib/grid-material.component.d.ts +5 -0
  33. package/grid-material/src/lib/models/grid-column.model.d.ts +47 -0
  34. package/grid-material/src/lib/models/grid-editor.model.d.ts +22 -0
  35. package/grid-material/src/lib/models/grid-option.model.d.ts +2 -10
  36. package/grid-material/src/lib/models/grid.model.d.ts +46 -1
  37. package/grid-material/src/lib/pipes/editor-handler-column.pipe.d.ts +7 -0
  38. package/grid-material/src/lib/pipes/editor-handler-row.pipe.d.ts +6 -0
  39. package/grid-material/src/lib/pipes/editor-validate.pipe.d.ts +7 -0
  40. package/package.json +1 -1
  41. package/{sd-angular-core-0.0.917.tgz → sd-angular-core-0.0.921.tgz} +0 -0
  42. package/select/sd-angular-core-select.metadata.json +1 -1
@@ -0,0 +1,9 @@
1
+ import { SdGridMaterialColumn } from '../../models/grid-column.model';
2
+ import { SdGridMaterialOption } from '../../models/grid-option.model';
3
+ export declare class SdDesktopCell {
4
+ key: string;
5
+ column: SdGridMaterialColumn;
6
+ item: any;
7
+ gridOption: SdGridMaterialOption;
8
+ constructor();
9
+ }
@@ -0,0 +1,7 @@
1
+ import { SdGridMaterialColumn } from '../../models/grid-column.model';
2
+ export declare class SdDesktopCellEditor {
3
+ column: SdGridMaterialColumn;
4
+ item: any;
5
+ constructor();
6
+ onChange: () => void;
7
+ }
@@ -19,6 +19,7 @@ import { SdGridConfigurationService } from './services/grid-configuration.servic
19
19
  import { SdTranslateService } from '@sd-angular/core/translate';
20
20
  import { SdGridService } from './services/grid.service';
21
21
  import { SdQuickAction } from '@sd-angular/core/quick-action';
22
+ import { SdItem } from './models/grid.model';
22
23
  export declare class SdGridMaterial<T = any> implements OnInit, AfterViewInit, OnDestroy {
23
24
  #private;
24
25
  private ref;
@@ -84,4 +85,8 @@ export declare class SdGridMaterial<T = any> implements OnInit, AfterViewInit, O
84
85
  externalFilter: any;
85
86
  filterDef: any;
86
87
  }) => void;
88
+ onCreate: () => void;
89
+ onUpdate: (item: SdItem, isModified?: boolean) => void;
90
+ onSave: (item: SdItem) => Promise<void>;
91
+ onCancel: (item: SdItem) => void;
87
92
  }
@@ -26,9 +26,25 @@ interface SdGridMaterialColumnText<T = any> extends SdGridMaterialBaseColumn<T>
26
26
  type: 'string';
27
27
  badge?: (value: any, rowData: T) => 'warning' | 'info' | 'success' | 'danger' | 'normal';
28
28
  badgeType?: 'circle';
29
+ editor?: {
30
+ change?: (rowData: T) => void;
31
+ hidden?: boolean | ((rowData: T) => boolean);
32
+ disabled?: boolean | ((rowData: T) => boolean);
33
+ required?: boolean | ((rowData: T) => boolean);
34
+ defaultValue?: string;
35
+ relatedColumns?: string[];
36
+ };
29
37
  }
30
38
  interface SdGridMaterialColumnNumber<T = any> extends SdGridMaterialBaseColumn<T> {
31
39
  type: 'number';
40
+ editor?: {
41
+ change?: (rowData: T) => void;
42
+ hidden?: boolean | ((rowData: T) => boolean);
43
+ disabled?: boolean | ((rowData: T) => boolean);
44
+ required?: boolean | ((rowData: T) => boolean);
45
+ defaultValue?: string;
46
+ relatedColumns?: string[];
47
+ };
32
48
  }
33
49
  interface SdGridMaterialBool<T = any> extends SdGridMaterialBaseColumn<T> {
34
50
  type: 'bool';
@@ -38,12 +54,28 @@ interface SdGridMaterialBool<T = any> extends SdGridMaterialBaseColumn<T> {
38
54
  };
39
55
  badge?: (value: any, rowData: T) => 'warning' | 'info' | 'success' | 'danger' | 'normal';
40
56
  badgeType?: 'circle';
57
+ editor?: {
58
+ change?: (rowData: T) => void;
59
+ hidden?: boolean | ((rowData: T) => boolean);
60
+ disabled?: boolean | ((rowData: T) => boolean);
61
+ required?: boolean | ((rowData: T) => boolean);
62
+ defaultValue?: boolean;
63
+ relatedColumns?: string[];
64
+ };
41
65
  }
42
66
  interface SdGridMaterialColumnDate<T = any> extends SdGridMaterialBaseColumn<T> {
43
67
  type: 'date' | 'datetime' | 'time';
44
68
  option?: {
45
69
  timeDifferent?: 'second' | 'minute' | 'hour' | 'day' | 'month';
46
70
  };
71
+ editor?: {
72
+ change?: (rowData: T) => void;
73
+ hidden?: boolean | ((rowData: T) => boolean);
74
+ disabled?: boolean | ((rowData: T) => boolean);
75
+ required?: boolean | ((rowData: T) => boolean);
76
+ defaultValue?: string;
77
+ relatedColumns?: string[];
78
+ };
47
79
  }
48
80
  interface SdGridMaterialColumnValues<T = any> extends SdGridMaterialBaseColumn<T> {
49
81
  type: 'values';
@@ -55,6 +87,14 @@ interface SdGridMaterialColumnValues<T = any> extends SdGridMaterialBaseColumn<T
55
87
  backgroundColorField?: string;
56
88
  selection?: 'AUTOCOMPLETE' | 'MULTIPLE' | 'MULTIPLEAUTOCOMPLETE';
57
89
  };
90
+ editor?: {
91
+ change?: (rowData: T) => void;
92
+ hidden?: boolean | ((rowData: T) => boolean);
93
+ disabled?: boolean | ((rowData: T) => boolean);
94
+ required?: boolean | ((rowData: T) => boolean);
95
+ defaultValue?: string | number | boolean;
96
+ relatedColumns?: string[];
97
+ };
58
98
  }
59
99
  interface SdGridMaterialColumnImage<T = any> extends SdGridMaterialBaseColumn<T> {
60
100
  type: 'image';
@@ -62,6 +102,13 @@ interface SdGridMaterialColumnImage<T = any> extends SdGridMaterialBaseColumn<T>
62
102
  height: number;
63
103
  width: number;
64
104
  };
105
+ editor?: {
106
+ change?: (rowData: T) => void;
107
+ hidden?: boolean | ((rowData: T) => boolean);
108
+ disabled?: boolean | ((rowData: T) => boolean);
109
+ required?: boolean | ((rowData: T) => boolean);
110
+ relatedColumns?: string[];
111
+ };
65
112
  }
66
113
  declare type SdGridMaterialNormalColumn<T> = Exclude<Exclude<SdGridMaterialColumn<T>, SdGridMaterialColumnChildren<T>>, SdGridMaterialColumnChildrenCol<T>>;
67
114
  export declare type SdGridMaterialChildColumn<T = any> = (SdGridMaterialNormalColumn<T> & {
@@ -0,0 +1,22 @@
1
+ export declare type SdEditor<T = any> = SdEditorFocus<T> | SdEditorInline<T> | SdEditorPopup<T>;
2
+ export interface SdEditorBase<T = any> {
3
+ addable?: boolean;
4
+ disabled?: boolean | ((rowData: T) => boolean);
5
+ onAdd?: (rowData: T) => void;
6
+ onEdit?: (rowData: T) => void;
7
+ onSave?: (rowData: T) => void | Promise<void>;
8
+ validate?: (rowData: T) => string | Promise<string>;
9
+ limit?: number;
10
+ }
11
+ export interface SdEditorFocus<T = any> extends SdEditorBase<T> {
12
+ type: 'focus';
13
+ editable?: boolean | ((rowData: T) => boolean);
14
+ }
15
+ export interface SdEditorInline<T = any> extends SdEditorBase<T> {
16
+ type: 'inline';
17
+ removable?: boolean | ((rowData: T) => boolean);
18
+ }
19
+ export interface SdEditorPopup<T = any> extends SdEditorBase<T> {
20
+ type: 'popup';
21
+ editable?: boolean | ((rowData: T) => boolean);
22
+ }
@@ -7,6 +7,7 @@ import { SdGridMaterialConfigOption } from './grid-config.model';
7
7
  import { SdGridMaterialSubInformation } from './grid-sub-information.model';
8
8
  import { SdGridMaterialSelection } from './grid-selection.model';
9
9
  import { Observable } from 'rxjs';
10
+ import { SdEditor } from './grid-editor.model';
10
11
  export declare type SdGridMaterialOption<T = any> = SdGridMaterialLocalOption<T> | SdGridMaterialServerOption<T>;
11
12
  export interface SdGridMaterialRowData {
12
13
  [key: string]: any;
@@ -29,16 +30,7 @@ interface SdGridMaterialBaseOption<T = any> {
29
30
  showFirstLastButtons?: boolean;
30
31
  hidden?: boolean;
31
32
  };
32
- editor?: {
33
- type?: 'inline' | 'popup';
34
- addable?: boolean;
35
- editable?: boolean;
36
- disabled?: boolean | ((rowData: T) => boolean);
37
- onAdd?: (rowData: T) => void;
38
- onEdit?: (rowData: T) => void;
39
- onSave?: (rowData: T) => void | Promise<void>;
40
- validate?: (rowData: T) => string | Promise<string>;
41
- };
33
+ editor?: SdEditor<T>;
42
34
  reload?: SdGridMaterialReloadOption<T>;
43
35
  export?: SdGridMaterialExportOption<T>;
44
36
  config?: SdGridMaterialConfigOption<T>;
@@ -1,6 +1,51 @@
1
- export interface SdGridMaterialItem {
1
+ import { Observable } from "rxjs";
2
+ export interface EditorHandler {
3
+ [column: string]: {
4
+ visible?: boolean | 'create' | 'update';
5
+ items?: any[] | Observable<any[]>;
6
+ };
7
+ }
8
+ export interface SdItem {
2
9
  isSelected?: boolean;
3
10
  isExpanded?: boolean;
4
11
  isExpanding?: boolean;
5
12
  expandDetail?: any;
13
+ editorStatus?: 'create' | 'update';
14
+ editorHandlerRow?: EditorHandlerRow;
15
+ editorHandlerColumn?: {
16
+ [key: string]: {
17
+ visible: boolean;
18
+ errorMessage?: string;
19
+ };
20
+ };
21
+ }
22
+ export interface EditorHandlerRow {
23
+ visible: boolean;
24
+ status?: 'create' | 'update';
25
+ editable?: boolean;
26
+ removable?: boolean;
27
+ errorMessage?: string;
28
+ isInline?: boolean;
29
+ temporary?: any;
30
+ saving?: boolean;
31
+ }
32
+ export declare type SdGridMaterialItem<T = any> = T & SdItem;
33
+ export interface GridItem {
34
+ blinker?: any;
35
+ originItem?: any;
36
+ temporary?: any;
37
+ isChecked?: boolean;
38
+ editingStatus?: 'create' | 'update';
39
+ editorHandler?: EditorHandler & {
40
+ disabled?: boolean;
41
+ errorMessage?: string;
42
+ saving?: boolean;
43
+ };
44
+ subInformation?: {
45
+ isOpened?: boolean;
46
+ isLoaded?: boolean;
47
+ isLoading?: boolean;
48
+ subItems?: any[];
49
+ };
50
+ [key: string]: any;
6
51
  }
@@ -0,0 +1,7 @@
1
+ import { PipeTransform } from '@angular/core';
2
+ import { SdGridMaterialColumn } from '../models/grid-column.model';
3
+ import { SdGridMaterialOption } from '../models/grid-option.model';
4
+ import { SdItem } from '../models/grid.model';
5
+ export declare class SdEditorHandlerColumnPipe implements PipeTransform {
6
+ transform(value: any, item: SdItem, column: SdGridMaterialColumn, gridOption: SdGridMaterialOption): boolean;
7
+ }
@@ -0,0 +1,6 @@
1
+ import { PipeTransform } from '@angular/core';
2
+ import { SdGridMaterialOption } from '../models/grid-option.model';
3
+ import { EditorHandlerRow, SdItem } from '../models/grid.model';
4
+ export declare class SdEditorHandlerRowPipe implements PipeTransform {
5
+ transform(item: SdItem, gridOption: SdGridMaterialOption): EditorHandlerRow;
6
+ }
@@ -0,0 +1,7 @@
1
+ import { PipeTransform } from '@angular/core';
2
+ import { SdGridMaterialItem, SdItem } from '../models/grid.model';
3
+ export declare class SdEditorValidatePipe implements PipeTransform {
4
+ private previous;
5
+ private delay;
6
+ transform(value: string, item: SdItem, validate: (item: SdGridMaterialItem) => string | Promise<string>): Promise<boolean>;
7
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sd-angular/core",
3
- "version": "0.0.917",
3
+ "version": "0.0.921",
4
4
  "homepage": "https://www.facebook.com/DarkP3ter",
5
5
  "author": {
6
6
  "name": "darkpeter",
@@ -1 +1 @@
1
- {"__symbolic":"module","version":4,"metadata":{"SdSelectModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":14,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":16,"character":4},{"__symbolic":"reference","module":"@angular/forms","name":"FormsModule","line":17,"character":4},{"__symbolic":"reference","module":"@angular/forms","name":"ReactiveFormsModule","line":18,"character":4},{"__symbolic":"reference","module":"@angular/material/input","name":"MatInputModule","line":19,"character":4},{"__symbolic":"reference","module":"@angular/material/tooltip","name":"MatTooltipModule","line":20,"character":4},{"__symbolic":"reference","module":"@angular/material/form-field","name":"MatFormFieldModule","line":21,"character":4},{"__symbolic":"reference","module":"@angular/material/icon","name":"MatIconModule","line":22,"character":4},{"__symbolic":"reference","module":"@angular/material/select","name":"MatSelectModule","line":23,"character":4},{"__symbolic":"reference","module":"@angular/material/progress-spinner","name":"MatProgressSpinnerModule","line":24,"character":4},{"__symbolic":"reference","module":"@angular/material/checkbox","name":"MatCheckboxModule","line":25,"character":4},{"__symbolic":"reference","module":"@sd-angular/core/translate","name":"SdTranslateModule","line":26,"character":4}],"declarations":[{"__symbolic":"reference","name":"SdSelect"}],"exports":[{"__symbolic":"reference","name":"SdSelect"}],"providers":[]}]}],"members":{}},"SdSelect":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":8,"character":1},"arguments":[{"selector":"sd-select","template":"<div class=\"d-flex align-items-center\">\r\n <mat-form-field class=\"sd-md\" [ngClass]=\"{'sd-sm': size === 'sm', 'no-padding-wrapper': disableErrorMessage}\"\r\n appearance=\"outline\">\r\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\r\n <mat-select #select [formControl]=\"formControl\" placeholder=\"{{placeholder || 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\" *ngIf=\"multiple\">\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 placeholder=\"{{'Search' | sdTranslate}}\" matInput autocomplete=\"off\" (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\" [value]=\"item[valueField]\" matTooltipPosition=\"above\"\r\n [matTooltip]=\"item[displayField]\">\r\n {{item[displayField]}}\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 {{item}}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n <mat-select #select [formControl]=\"formControl\" placeholder=\"{{placeholder || label}}\"\r\n (selectionChange)=\"onSelectionChange($event)\" disableOptionCentering=\"true\" panelClass=\"sd-select-panel\"\r\n [ngClass]=\"{'sd-selected': !isRequired && formControl?.value}\"\r\n [required]=\"isRequired\" *ngIf=\"!multiple\">\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 placeholder=\"{{'Search' | sdTranslate}}\" matInput autocomplete=\"off\" (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\" [value]=\"item[valueField]\" matTooltipPosition=\"above\"\r\n [matTooltip]=\"item[displayField]\">\r\n {{item[displayField]}}\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 {{item}}\r\n </mat-option>\r\n </ng-container>\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</div>\r\n","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}::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)}"]}]}],"members":{"select":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":14,"character":3},"arguments":["select"]}]}],"name":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":16,"character":3}}]}],"_disableErrorMessage":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":22,"character":3},"arguments":["disableErrorMessage"]}]}],"size":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":60,"character":3}}]}],"form":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":62,"character":3}}]}],"label":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":71,"character":3}}]}],"placeholder":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":72,"character":3}}]}],"model":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":76,"character":3}}]}],"items":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":95,"character":3}}]}],"valueField":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":105,"character":3}}]}],"displayField":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":106,"character":3}}]}],"required":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":115,"character":3}}]}],"validator":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":119,"character":3}}]}],"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":124,"character":3}}]}],"_multiple":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":133,"character":3},"arguments":["multiple"]}]}],"limit":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":136,"character":3}}]}],"_filtered":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":138,"character":3},"arguments":["filtered"]}]}],"_selectAll":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":142,"character":3},"arguments":["selectAll"]}]}],"modelChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":147,"character":3}}]}],"sdChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":148,"character":3}}]}],"sdSelection":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":149,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":151,"character":17},{"__symbolic":"reference","module":"@sd-angular/core/utility","name":"SdUtilityService","line":152,"character":28}]}],"ngOnInit":[{"__symbolic":"method"}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"onSelectAll":[{"__symbolic":"method"}]}}},"origins":{"SdSelectModule":"./src/lib/select.module","SdSelect":"./src/lib/select.component"},"importAs":"@sd-angular/core/select"}
1
+ {"__symbolic":"module","version":4,"metadata":{"SdSelectModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":14,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":16,"character":4},{"__symbolic":"reference","module":"@angular/forms","name":"FormsModule","line":17,"character":4},{"__symbolic":"reference","module":"@angular/forms","name":"ReactiveFormsModule","line":18,"character":4},{"__symbolic":"reference","module":"@angular/material/input","name":"MatInputModule","line":19,"character":4},{"__symbolic":"reference","module":"@angular/material/tooltip","name":"MatTooltipModule","line":20,"character":4},{"__symbolic":"reference","module":"@angular/material/form-field","name":"MatFormFieldModule","line":21,"character":4},{"__symbolic":"reference","module":"@angular/material/icon","name":"MatIconModule","line":22,"character":4},{"__symbolic":"reference","module":"@angular/material/select","name":"MatSelectModule","line":23,"character":4},{"__symbolic":"reference","module":"@angular/material/progress-spinner","name":"MatProgressSpinnerModule","line":24,"character":4},{"__symbolic":"reference","module":"@angular/material/checkbox","name":"MatCheckboxModule","line":25,"character":4},{"__symbolic":"reference","module":"@sd-angular/core/translate","name":"SdTranslateModule","line":26,"character":4}],"declarations":[{"__symbolic":"reference","name":"SdSelect"}],"exports":[{"__symbolic":"reference","name":"SdSelect"}],"providers":[]}]}],"members":{}},"SdSelect":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":8,"character":1},"arguments":[{"selector":"sd-select","template":"<div class=\"d-flex align-items-center\">\r\n <mat-form-field class=\"sd-md\" [ngClass]=\"{'sd-sm': size === 'sm', 'no-padding-wrapper': disableErrorMessage}\"\r\n appearance=\"outline\">\r\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\r\n <mat-select #select [formControl]=\"formControl\" placeholder=\"{{placeholder || 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\" *ngIf=\"multiple\">\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 placeholder=\"{{'Search' | sdTranslate}}\" matInput autocomplete=\"off\" (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\" [value]=\"item[valueField]\" matTooltipPosition=\"above\"\r\n [matTooltip]=\"item[displayField]\">\r\n {{item[displayField]}}\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 {{item}}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n <mat-select #select [formControl]=\"formControl\" placeholder=\"{{placeholder || label}}\"\r\n (selectionChange)=\"onSelectionChange($event)\" disableOptionCentering=\"true\" panelClass=\"sd-select-panel\"\r\n [ngClass]=\"{'sd-selected': !isRequired && formControl?.value}\"\r\n [required]=\"isRequired\" *ngIf=\"!multiple\">\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 placeholder=\"{{'Search' | sdTranslate}}\" matInput autocomplete=\"off\" (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\" [value]=\"item[valueField]\" matTooltipPosition=\"above\"\r\n [matTooltip]=\"item[displayField]\">\r\n {{item[displayField]}}\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 {{item}}\r\n </mat-option>\r\n </ng-container>\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</div>\r\n","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}::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)}"]}]}],"members":{"select":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":14,"character":3},"arguments":["select"]}]}],"name":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":16,"character":3}}]}],"_disableErrorMessage":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":22,"character":3},"arguments":["disableErrorMessage"]}]}],"size":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":60,"character":3}}]}],"form":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":62,"character":3}}]}],"label":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":71,"character":3}}]}],"placeholder":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":72,"character":3}}]}],"model":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":76,"character":3}}]}],"items":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":95,"character":3}}]}],"valueField":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":105,"character":3}}]}],"displayField":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":106,"character":3}}]}],"required":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":115,"character":3}}]}],"validator":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":119,"character":3}}]}],"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":124,"character":3}}]}],"_multiple":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":133,"character":3},"arguments":["multiple"]}]}],"limit":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":136,"character":3}}]}],"_filtered":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":138,"character":3},"arguments":["filtered"]}]}],"_selectAll":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":142,"character":3},"arguments":["selectAll"]}]}],"modelChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":147,"character":3}}]}],"sdChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":148,"character":3}}]}],"sdSelection":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":149,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":151,"character":17},{"__symbolic":"reference","module":"@sd-angular/core/utility","name":"SdUtilityService","line":152,"character":28}]}],"ngOnInit":[{"__symbolic":"method"}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"onSelectAll":[{"__symbolic":"method"}]}}},"origins":{"SdSelectModule":"./src/lib/select.module","SdSelect":"./src/lib/select.component"},"importAs":"@sd-angular/core/select"}