@c10t/nice-component-library 0.0.15 → 0.0.17

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.
@@ -11,6 +11,8 @@ export declare class CvaFlatTreeNodeLeftComponent {
11
11
  onLeafNodeClick: EventEmitter<void>;
12
12
  ngModelParentChange: EventEmitter<boolean>;
13
13
  ngModelLeafChange: EventEmitter<boolean>;
14
+ nodeClicked: FlatTreeNodeModel | undefined;
15
+ protected readonly menubar: BarProp;
14
16
  hasChild: (node: FlatTreeNodeModel) => boolean;
15
17
  checkDisabledNode(node: FlatTreeNodeModel): boolean;
16
18
  getDisabledInputFunc(node: FlatTreeNodeModel): boolean;
@@ -18,5 +20,5 @@ export declare class CvaFlatTreeNodeLeftComponent {
18
20
  descendantsPartiallySelected(node: FlatTreeNodeModel): boolean;
19
21
  onDisabledParent(parent: FlatTreeNodeModel): boolean;
20
22
  static ɵfac: i0.ɵɵFactoryDeclaration<CvaFlatTreeNodeLeftComponent, never>;
21
- static ɵcmp: i0.ɵɵComponentDeclaration<CvaFlatTreeNodeLeftComponent, "cva-flat-tree-node-left", never, { "treeControl": { "alias": "treeControl"; "required": false; }; "isHideCheckbox": { "alias": "isHideCheckbox"; "required": false; }; "node": { "alias": "node"; "required": false; }; }, { "toggle": "toggle"; "onParentNodeClick": "onParentNodeClick"; "onLeafNodeClick": "onLeafNodeClick"; "ngModelParentChange": "ngModelParentChange"; "ngModelLeafChange": "ngModelLeafChange"; }, never, never, false, never>;
23
+ static ɵcmp: i0.ɵɵComponentDeclaration<CvaFlatTreeNodeLeftComponent, "cva-flat-tree-node-left", never, { "treeControl": { "alias": "treeControl"; "required": false; }; "isHideCheckbox": { "alias": "isHideCheckbox"; "required": false; }; "node": { "alias": "node"; "required": false; }; "nodeClicked": { "alias": "nodeClicked"; "required": false; }; }, { "toggle": "toggle"; "onParentNodeClick": "onParentNodeClick"; "onLeafNodeClick": "onLeafNodeClick"; "ngModelParentChange": "ngModelParentChange"; "ngModelLeafChange": "ngModelLeafChange"; }, never, never, false, never>;
22
24
  }
@@ -48,6 +48,8 @@ export declare class CvaFlatTreeComponent implements ControlValueAccessor, OnIni
48
48
  selectedFullDataSource: FlatTreeNodeModel[];
49
49
  selectedFullValues: Map<any, any>;
50
50
  selectionChange: EventEmitter<any>;
51
+ onNodeClick: EventEmitter<FlatTreeNodeModel>;
52
+ nodeClicked: FlatTreeNodeModel | undefined;
51
53
  isFormControl: boolean;
52
54
  formControl: AbstractControl | undefined;
53
55
  mapIndexes: Map<any, any>;
@@ -94,5 +96,5 @@ export declare class CvaFlatTreeComponent implements ControlValueAccessor, OnIni
94
96
  private _isExpandable;
95
97
  private _getChildren;
96
98
  static ɵfac: i0.ɵɵFactoryDeclaration<CvaFlatTreeComponent, [null, null, null, { optional: true; self: true; }]>;
97
- static ɵcmp: i0.ɵɵComponentDeclaration<CvaFlatTreeComponent, "cva-flat-tree", never, { "label": { "alias": "label"; "required": false; }; "required": { "alias": "required"; "required": false; }; "value": { "alias": "value"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "isView": { "alias": "isView"; "required": false; }; "isDisplayChooseTreeOnly": { "alias": "isDisplayChooseTreeOnly"; "required": false; }; "isHideCheckbox": { "alias": "isHideCheckbox"; "required": false; }; "isCollapseSelected": { "alias": "isCollapseSelected"; "required": false; }; "selectedLabelTitle": { "alias": "selectedLabelTitle"; "required": false; }; "viewHeight": { "alias": "viewHeight"; "required": false; }; "itemSize": { "alias": "itemSize"; "required": false; }; "percentOfLabelOutside": { "alias": "percentOfLabelOutside"; "required": false; }; "treeConfig": { "alias": "treeConfig"; "required": false; }; "isSearchOutSide": { "alias": "isSearchOutSide"; "required": false; }; "searchTextOutSide": { "alias": "searchTextOutSide"; "required": false; }; "errorMessages": { "alias": "errorMessages"; "required": false; }; "fullDatasource": { "alias": "fullDatasource"; "required": false; }; "isFormControl": { "alias": "isFormControl"; "required": false; }; }, { "selectionChange": "selectionChange"; }, never, never, false, never>;
99
+ static ɵcmp: i0.ɵɵComponentDeclaration<CvaFlatTreeComponent, "cva-flat-tree", never, { "label": { "alias": "label"; "required": false; }; "required": { "alias": "required"; "required": false; }; "value": { "alias": "value"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "isView": { "alias": "isView"; "required": false; }; "isDisplayChooseTreeOnly": { "alias": "isDisplayChooseTreeOnly"; "required": false; }; "isHideCheckbox": { "alias": "isHideCheckbox"; "required": false; }; "isCollapseSelected": { "alias": "isCollapseSelected"; "required": false; }; "selectedLabelTitle": { "alias": "selectedLabelTitle"; "required": false; }; "viewHeight": { "alias": "viewHeight"; "required": false; }; "itemSize": { "alias": "itemSize"; "required": false; }; "percentOfLabelOutside": { "alias": "percentOfLabelOutside"; "required": false; }; "treeConfig": { "alias": "treeConfig"; "required": false; }; "isSearchOutSide": { "alias": "isSearchOutSide"; "required": false; }; "searchTextOutSide": { "alias": "searchTextOutSide"; "required": false; }; "errorMessages": { "alias": "errorMessages"; "required": false; }; "fullDatasource": { "alias": "fullDatasource"; "required": false; }; "isFormControl": { "alias": "isFormControl"; "required": false; }; }, { "selectionChange": "selectionChange"; "onNodeClick": "onNodeClick"; }, never, never, false, never>;
98
100
  }
@@ -1422,7 +1422,6 @@ class MultiTranslateHttpLoader {
1422
1422
  for (const index in responses) {
1423
1423
  Object.assign(target, responses[index]);
1424
1424
  }
1425
- console.log(target, responses);
1426
1425
  return target;
1427
1426
  }));
1428
1427
  }
@@ -1738,7 +1737,6 @@ class ValidatorService {
1738
1737
  const validator = (control) => {
1739
1738
  let errors = null;
1740
1739
  if (control) {
1741
- // console.log('NsSmartTable - validate', control);
1742
1740
  const controlValueLength = control.value ? control.value.length : 0;
1743
1741
  if (conditions.minRow > controlValueLength) {
1744
1742
  return { minRow: { valid: false, min: conditions.minRow, actual: controlValueLength } };
@@ -1750,7 +1748,6 @@ class ValidatorService {
1750
1748
  return null;
1751
1749
  }
1752
1750
  control.value.forEach((row) => {
1753
- // console.log('NsSmartTable - validate - errors: ', errors);
1754
1751
  if (errors || !conditions.columns) {
1755
1752
  return;
1756
1753
  }
@@ -1758,7 +1755,6 @@ class ValidatorService {
1758
1755
  if (errors) {
1759
1756
  return;
1760
1757
  }
1761
- // console.log('NsSmartTable - validate - value+columns: ', row, column);
1762
1758
  const tempControl = new FormControl();
1763
1759
  tempControl.setValue(row[column.columnDef]);
1764
1760
  if (TableService.getColumnType(column, row) === ColumnTypeEnum.MULTI_SELECT_AUTOCOMPLETE) {
@@ -1821,7 +1817,6 @@ class ValidatorService {
1821
1817
  }
1822
1818
  }
1823
1819
  tempControl.markAllAsTouched();
1824
- // console.log('NsSmartTable - validate - tempControl.errors: ', TableService.getColumnType(column,row), row[column.columnDef], tempControl.errors);
1825
1820
  errors = tempControl.errors;
1826
1821
  });
1827
1822
  });
@@ -1866,7 +1861,6 @@ class CvaCounterInputComponent {
1866
1861
  constructor(injector, ngControl) {
1867
1862
  this.injector = injector;
1868
1863
  if (ngControl) {
1869
- // console.log('nsCounterInput - ngControl: ', ngControl);
1870
1864
  // ngControl là parent FormControl
1871
1865
  // Hành động này thay cho provide: NG_VALUE_ACCESSOR và gắn ControlValueAccessor này vào parent FormControl
1872
1866
  ngControl.valueAccessor = this;
@@ -1888,7 +1882,6 @@ class CvaCounterInputComponent {
1888
1882
  }
1889
1883
  }
1890
1884
  ngOnInit() {
1891
- // console.log('CvaCounterInputComponent - ngOnInit');
1892
1885
  this.callValidator();
1893
1886
  }
1894
1887
  getMinNumber() {
@@ -1899,7 +1892,6 @@ class CvaCounterInputComponent {
1899
1892
  }
1900
1893
  callValidator() {
1901
1894
  const ngControl = this.injector.get(NgControl);
1902
- // console.log('CvaCounterInputComponent - callValidator - ngControl: ', ngControl);
1903
1895
  // Nếu parent FormControl khởi tạo xong và formControl chưa có giá trị lưu
1904
1896
  if (ngControl && !this.formControl) {
1905
1897
  // Nếu là NsSmartTable thì phải tự new FormControl còn không thì cứ hóng parent FormControl về ^^
@@ -1909,7 +1901,6 @@ class CvaCounterInputComponent {
1909
1901
  else {
1910
1902
  this.formControl = new FormControl();
1911
1903
  }
1912
- // console.log('CvaCounterInputComponent - callValidator - this.formControl: ', this.formControl);
1913
1904
  // Hành động này gắn validator vào this.formControl
1914
1905
  // - Nếu this.formControl là parent FormControl thì sẽ show error lên FormGroup
1915
1906
  // - Nếu this.formControl là new FormControl thì sẽ quét QueryList để check {errors}
@@ -1949,7 +1940,6 @@ class CvaCounterInputComponent {
1949
1940
  if (value !== undefined) {
1950
1941
  this.value = value;
1951
1942
  this.propagateChange(this.value);
1952
- // console.log('CvaCounterInputComponent - writeValue: ', this.value);
1953
1943
  this.callValidator();
1954
1944
  this.onChange.emit(this.value);
1955
1945
  }
@@ -3016,7 +3006,6 @@ class PatternDirective {
3016
3006
  }
3017
3007
  // @Output() valueChange = new EventEmitter()
3018
3008
  // @HostListener('input', ['$event']) onInputChange(event: any) {
3019
- // console.log('input changeeeeeeeeeeeeeeeeeeeeeee')
3020
3009
  // const initalValue = this.el.nativeElement.value;
3021
3010
  // const newValue = initalValue.replace(/[^0-9]*/g, '');
3022
3011
  // this.el.nativeElement.value = newValue;
@@ -3044,7 +3033,6 @@ class PatternDirective {
3044
3033
  // (e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) &&
3045
3034
  // (e.keyCode < 96 || e.keyCode > 105)
3046
3035
  // ) {
3047
- // console.log('eeeeeeeeeeeeeeeeeeeee',e)
3048
3036
  // e.preventDefault();
3049
3037
  // }
3050
3038
  if (!e.key.match(this.$regPattern)) {
@@ -3054,7 +3042,6 @@ class PatternDirective {
3054
3042
  const current = this.el.nativeElement.value;
3055
3043
  // @ts-ignore
3056
3044
  const next = current ? current.concat(e.key) : e.key;
3057
- // console.log('curentttttttttt', current, next, this.el.nativeElement)
3058
3045
  // @ts-ignore
3059
3046
  if (!next || !next.replaceAll(',', '').match(this.$regPattern)) {
3060
3047
  e.preventDefault();
@@ -3074,7 +3061,6 @@ class PatternDirective {
3074
3061
  else {
3075
3062
  data = pastedInput;
3076
3063
  }
3077
- console.log('dataaaaa', data);
3078
3064
  document.execCommand('insertText', false, data);
3079
3065
  }
3080
3066
  onDrop(event) {
@@ -3123,7 +3109,6 @@ class FormatInputDirective {
3123
3109
  this.format(value);
3124
3110
  }
3125
3111
  input(value) {
3126
- // console.log(value)
3127
3112
  // If decimal separator is last character don't update
3128
3113
  // because it will delete . || ,
3129
3114
  /*
@@ -3138,7 +3123,6 @@ class FormatInputDirective {
3138
3123
  // this.format(this._value);
3139
3124
  }
3140
3125
  focusout(value) {
3141
- console.log(value);
3142
3126
  // If decimal separator is last character don't update
3143
3127
  // because it will delete . || ,
3144
3128
  if (this.isLastCharacterDecimalSeparator(value)) {
@@ -3179,7 +3163,6 @@ class FormatInputDirective {
3179
3163
  return isNaN(value[value.length - 1]);
3180
3164
  }
3181
3165
  format(value) {
3182
- // console.log('at hereeeeeeeeeee', value, this._value)
3183
3166
  if (value === null) {
3184
3167
  this.element.nativeElement.value = '';
3185
3168
  return;
@@ -3192,11 +3175,9 @@ class FormatInputDirective {
3192
3175
  const tmp = this.inputDirective.formatValue(value);
3193
3176
  value = tmp === null || tmp === undefined ? value : tmp;
3194
3177
  }
3195
- // console.log('at hereeeeeeeeeee', value, this._value)
3196
3178
  this.element.nativeElement.value = value ? value : '';
3197
3179
  }
3198
3180
  unformatValue(value) {
3199
- // console.log('at hereeeeeeeeeee1111', value, this._value)
3200
3181
  if (this.inputDirective && this.inputDirective.unformatValue) {
3201
3182
  value = this.inputDirective.unformatValue(value);
3202
3183
  }
@@ -3688,7 +3669,6 @@ class CvaDatePickerComponent {
3688
3669
  }
3689
3670
  callValidator() {
3690
3671
  const ngControl = this.injector.get(NgControl);
3691
- // console.log('CvaCounterInputComponent - callValidator - ngControl: ', ngControl);
3692
3672
  // Nếu parent FormControl khởi tạo xong và formControl chưa có giá trị lưu
3693
3673
  if (ngControl && !this.formControl) {
3694
3674
  // Nếu là NsSmartTable thì phải tự new FormControl còn không thì cứ hóng parent FormControl về ^^
@@ -3698,7 +3678,6 @@ class CvaDatePickerComponent {
3698
3678
  else {
3699
3679
  this.formControl = new FormControl();
3700
3680
  }
3701
- // console.log('CvaCounterInputComponent - callValidator - this.formControl: ', this.formControl);
3702
3681
  // Hành động này gắn validator vào this.formControl
3703
3682
  // - Nếu this.formControl là parent FormControl thì sẽ show error lên FormGroup
3704
3683
  // - Nếu this.formControl là new FormControl thì sẽ quét QueryList để check {errors}
@@ -4023,10 +4002,8 @@ class CvaMultiSelectAutocomplete {
4023
4002
  /*NON-EMPTY FOR COMPILE*/
4024
4003
  };
4025
4004
  writeValue(obj) {
4026
- // console.log('CvaMultiSelectAutocomplete - writeValue: ', this.value, obj);
4027
4005
  if (obj != null && obj != undefined && this.value !== obj) {
4028
4006
  this.value = obj;
4029
- // console.log('CvaMultiSelectAutocomplete - writeValue: ', this.value);
4030
4007
  this.updateSelectAll();
4031
4008
  // this.formControl.setValue(this.value);
4032
4009
  this.propagateChange(this.value);
@@ -4144,7 +4121,6 @@ class CvaMultiSelectAutocomplete {
4144
4121
  * Khi đó khi chọn lại thì những mat-option không còn trong khung nhìn sẽ bị lỗi tick chọn nên ko dùng hàm này nữa
4145
4122
  */
4146
4123
  matSelectionChange(val) {
4147
- // console.log('CvaMultiSelectAutocomplete - onSelectionChange: ', val.value);
4148
4124
  // this.writeValue(val.value);
4149
4125
  // this.emitSelectedData(val);
4150
4126
  }
@@ -4817,7 +4793,6 @@ class CvaSmartTableComponent {
4817
4793
  };
4818
4794
  writeValue(obj) {
4819
4795
  if (obj) {
4820
- // console.log(obj);
4821
4796
  this.value = obj;
4822
4797
  if (this.isExpandRowTable && this.datasource.data !== this.value) {
4823
4798
  this.datasource = new MatTableDataSource(this.value);
@@ -4834,7 +4809,6 @@ class CvaSmartTableComponent {
4834
4809
  this.datasource = new MatTableDataSource(this.value);
4835
4810
  }
4836
4811
  this.toggleSelect(null);
4837
- // console.log('NsSmartTable - writeValue', this.value);
4838
4812
  this.callValidator();
4839
4813
  this.propagateChange(this.isExpandRowTable ? this.getParentRowData() : this.value);
4840
4814
  this.onChange.emit();
@@ -4855,7 +4829,6 @@ class CvaSmartTableComponent {
4855
4829
  this.writeValue(this.value);
4856
4830
  }
4857
4831
  ngOnInit() {
4858
- // console.log('NsSmartTable - ngOnInit');
4859
4832
  this.callValidator();
4860
4833
  }
4861
4834
  ngAfterContentChecked() {
@@ -5116,6 +5089,8 @@ class CvaSmartTableComponent {
5116
5089
  [isFormControl]="false"
5117
5090
  [disabled]="column.disabled ? column.disabled(result) : false"
5118
5091
  [text]="result[column.columnDef]"
5092
+ [minLength]="column.min ? column.min(result) : undefined"
5093
+ [maxLength]="column.max ? column.max(result) : undefined"
5119
5094
  [required]="getRequired(column)"
5120
5095
  [errorMessages]="getErrorMessageMap(column)"
5121
5096
  (onChange)="onCellValueChange(result, column, $event);">
@@ -5347,6 +5322,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
5347
5322
  [isFormControl]="false"
5348
5323
  [disabled]="column.disabled ? column.disabled(result) : false"
5349
5324
  [text]="result[column.columnDef]"
5325
+ [minLength]="column.min ? column.min(result) : undefined"
5326
+ [maxLength]="column.max ? column.max(result) : undefined"
5350
5327
  [required]="getRequired(column)"
5351
5328
  [errorMessages]="getErrorMessageMap(column)"
5352
5329
  (onChange)="onCellValueChange(result, column, $event);">
@@ -5634,7 +5611,6 @@ class CvaRangeDatePickerComponent {
5634
5611
  }
5635
5612
  callValidator() {
5636
5613
  const ngControl = this.injector.get(NgControl);
5637
- // console.log('CvaCounterInputComponent - callValidator - ngControl: ', ngControl);
5638
5614
  // Nếu parent FormControl khởi tạo xong và formControl chưa có giá trị lưu
5639
5615
  if (ngControl && !this.formControl) {
5640
5616
  // Nếu là NsSmartTable thì phải tự new FormControl còn không thì cứ hóng parent FormControl về ^^
@@ -6253,7 +6229,6 @@ class CvaUploadFileComponent {
6253
6229
  const blob = new Blob([arrayBuffer]);
6254
6230
  // onload needed since Google Chrome doesn't support addEventListener for FileReader
6255
6231
  const fileReader = new FileReader();
6256
- // console.log('reader', file);
6257
6232
  const file = new File([blob], fileInfo.name, { type: fileInfo.type });
6258
6233
  fileReader.onload = (event) => {
6259
6234
  this.writeValue(new UploadModel(fileInfo.name, file, event.target.result));
@@ -7413,6 +7388,8 @@ class CvaFlatTreeNodeLeftComponent {
7413
7388
  onLeafNodeClick = new EventEmitter();
7414
7389
  ngModelParentChange = new EventEmitter();
7415
7390
  ngModelLeafChange = new EventEmitter();
7391
+ nodeClicked;
7392
+ menubar = menubar;
7416
7393
  hasChild = (node) => !!node.children && Array.isArray(node.children) && node.children.length > 0;
7417
7394
  checkDisabledNode(node) {
7418
7395
  return node.disabled || this.getDisabledInputFunc(node);
@@ -7450,12 +7427,13 @@ class CvaFlatTreeNodeLeftComponent {
7450
7427
  }
7451
7428
  }
7452
7429
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: CvaFlatTreeNodeLeftComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7453
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.5", type: CvaFlatTreeNodeLeftComponent, isStandalone: false, selector: "cva-flat-tree-node-left", inputs: { treeControl: "treeControl", isHideCheckbox: "isHideCheckbox", node: "node" }, outputs: { toggle: "toggle", onParentNodeClick: "onParentNodeClick", onLeafNodeClick: "onLeafNodeClick", ngModelParentChange: "ngModelParentChange", ngModelLeafChange: "ngModelLeafChange" }, ngImport: i0, template: `
7430
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.5", type: CvaFlatTreeNodeLeftComponent, isStandalone: false, selector: "cva-flat-tree-node-left", inputs: { treeControl: "treeControl", isHideCheckbox: "isHideCheckbox", node: "node", nodeClicked: "nodeClicked" }, outputs: { toggle: "toggle", onParentNodeClick: "onParentNodeClick", onLeafNodeClick: "onLeafNodeClick", ngModelParentChange: "ngModelParentChange", ngModelLeafChange: "ngModelLeafChange" }, ngImport: i0, template: `
7454
7431
  <ng-container [ngSwitch]="hasChild(node)">
7455
7432
  <ng-container *ngSwitchCase="false">
7456
- <div class="label-area {{isHideCheckbox ? 'isClickDiv' : ''}}"
7457
- (click)="onLeafNodeClick.emit()"
7458
- fxLayoutAlign="space-between center">
7433
+ <div
7434
+ class="label-area {{isHideCheckbox ? 'isClickDiv' : ''}} {{isHideCheckbox && nodeClicked?.value === node.value ? 'nodeSelected': ''}}"
7435
+ (click)="onLeafNodeClick.emit()"
7436
+ fxLayoutAlign="space-between center">
7459
7437
  <button *ngIf="node.level > 0" type="button" mat-icon-button disabled></button>
7460
7438
  {{ node.displayValue }}
7461
7439
  </div>
@@ -7467,8 +7445,9 @@ class CvaFlatTreeNodeLeftComponent {
7467
7445
  </mat-checkbox>
7468
7446
  </ng-container>
7469
7447
  <ng-container *ngSwitchCase="true">
7470
- <div class="label-area {{isHideCheckbox ? 'isClickDiv' : ''}}"
7471
- fxLayoutAlign="space-between center">
7448
+ <div
7449
+ class="label-area {{isHideCheckbox ? 'isClickDiv' : ''}} {{isHideCheckbox && nodeClicked?.value === node.value ? 'nodeSelected': ''}}"
7450
+ fxLayoutAlign="space-between center">
7472
7451
  <button type="button" mat-icon-button (click)="toggle.emit()"
7473
7452
  [attr.aria-label]="'toggle ' + node.displayValue">
7474
7453
  <i class="fas {{treeControl?.isExpanded(node) ? 'fa-chevron-up' : 'fa-chevron-down'}}"></i>
@@ -7494,9 +7473,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
7494
7473
  template: `
7495
7474
  <ng-container [ngSwitch]="hasChild(node)">
7496
7475
  <ng-container *ngSwitchCase="false">
7497
- <div class="label-area {{isHideCheckbox ? 'isClickDiv' : ''}}"
7498
- (click)="onLeafNodeClick.emit()"
7499
- fxLayoutAlign="space-between center">
7476
+ <div
7477
+ class="label-area {{isHideCheckbox ? 'isClickDiv' : ''}} {{isHideCheckbox && nodeClicked?.value === node.value ? 'nodeSelected': ''}}"
7478
+ (click)="onLeafNodeClick.emit()"
7479
+ fxLayoutAlign="space-between center">
7500
7480
  <button *ngIf="node.level > 0" type="button" mat-icon-button disabled></button>
7501
7481
  {{ node.displayValue }}
7502
7482
  </div>
@@ -7508,8 +7488,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
7508
7488
  </mat-checkbox>
7509
7489
  </ng-container>
7510
7490
  <ng-container *ngSwitchCase="true">
7511
- <div class="label-area {{isHideCheckbox ? 'isClickDiv' : ''}}"
7512
- fxLayoutAlign="space-between center">
7491
+ <div
7492
+ class="label-area {{isHideCheckbox ? 'isClickDiv' : ''}} {{isHideCheckbox && nodeClicked?.value === node.value ? 'nodeSelected': ''}}"
7493
+ fxLayoutAlign="space-between center">
7513
7494
  <button type="button" mat-icon-button (click)="toggle.emit()"
7514
7495
  [attr.aria-label]="'toggle ' + node.displayValue">
7515
7496
  <i class="fas {{treeControl?.isExpanded(node) ? 'fa-chevron-up' : 'fa-chevron-down'}}"></i>
@@ -7543,6 +7524,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
7543
7524
  type: Output
7544
7525
  }], ngModelLeafChange: [{
7545
7526
  type: Output
7527
+ }], nodeClicked: [{
7528
+ type: Input
7546
7529
  }] } });
7547
7530
 
7548
7531
  class CvaFlatTreeNodeRightComponent {
@@ -7707,6 +7690,8 @@ class CvaFlatTreeComponent {
7707
7690
  selectedFullDataSource = [];
7708
7691
  selectedFullValues = new Map();
7709
7692
  selectionChange = new EventEmitter();
7693
+ onNodeClick = new EventEmitter();
7694
+ nodeClicked;
7710
7695
  // Chỉ bằng false khi trong NsSmartTable thôi nhé @@
7711
7696
  isFormControl = true;
7712
7697
  // Cái này là để gắn khi nó là FormControl trong 1 FormGroup
@@ -7885,24 +7870,17 @@ class CvaFlatTreeComponent {
7885
7870
  // if (this.multiple) {
7886
7871
  this.value = obj;
7887
7872
  // }
7888
- console.log('writeValue_0: ', new Date());
7889
7873
  this.mapIndexes = new Map();
7890
7874
  for (let i = 0; i < this.fullDataTreeControl.dataNodes.length; i++) {
7891
7875
  this.mapIndexes.set(this.fullDataTreeControl.dataNodes[i].value, i);
7892
7876
  }
7893
- console.log('writeValue_1: ', new Date());
7894
7877
  this.checkedDefaultValue();
7895
- console.log('writeValue_2: ', new Date());
7896
7878
  this.updateSelectAll();
7897
- console.log('writeValue_3: ', new Date());
7898
7879
  this.updateSelectedTree();
7899
- console.log('writeValue_4: ', new Date());
7900
- this.propagateChange(this.value);
7901
7880
  this.callValidator();
7902
7881
  if (this.isView) {
7903
7882
  this.selectedTreeControl.expandAll();
7904
7883
  }
7905
- console.log('writeValue_5: ', new Date());
7906
7884
  this.selectionChange.emit(Array.from(this.valueObjRef.values()));
7907
7885
  }
7908
7886
  }
@@ -8192,6 +8170,8 @@ class CvaFlatTreeComponent {
8192
8170
  });
8193
8171
  }
8194
8172
  onLeafNodeClick(node) {
8173
+ this.nodeClicked = node;
8174
+ this.onNodeClick.emit(node);
8195
8175
  if (this.isHideCheckbox) {
8196
8176
  this.value = [];
8197
8177
  this.valueObjRef.clear();
@@ -8199,6 +8179,8 @@ class CvaFlatTreeComponent {
8199
8179
  }
8200
8180
  }
8201
8181
  onParentNodeClick(node) {
8182
+ this.nodeClicked = node;
8183
+ this.onNodeClick.emit(node);
8202
8184
  if (this.isHideCheckbox) {
8203
8185
  this.value = [];
8204
8186
  this.valueObjRef.clear();
@@ -8207,11 +8189,9 @@ class CvaFlatTreeComponent {
8207
8189
  }
8208
8190
  toggleNodeCheck(node, checked) {
8209
8191
  const isLeaf = !FlatTreeService.hasChild(node);
8210
- console.log('1: ', new Date());
8211
8192
  // Gọi 1 lần duy nhất nếu là parent
8212
8193
  const descendants = isLeaf ? [] : this.fullDataTreeControl.getDescendants(node);
8213
8194
  const affectedNodes = isLeaf ? [node] : descendants.filter(n => !FlatTreeService.hasChild(n));
8214
- console.log('2: ', new Date());
8215
8195
  for (const leaf of affectedNodes) {
8216
8196
  if (!leaf.display || this.checkDisabledNode(leaf))
8217
8197
  continue;
@@ -8231,7 +8211,6 @@ class CvaFlatTreeComponent {
8231
8211
  this.fullDataTreeControl.dataNodes[orgNodeIndex].checked = leaf.checked;
8232
8212
  }
8233
8213
  }
8234
- console.log('3: ', new Date());
8235
8214
  // Nếu node là cha → cập nhật isExpanded
8236
8215
  if (!isLeaf) {
8237
8216
  node.checked = checked;
@@ -8244,16 +8223,14 @@ class CvaFlatTreeComponent {
8244
8223
  else {
8245
8224
  node.checked = checked;
8246
8225
  }
8247
- console.log('4: ', new Date());
8248
8226
  this.writeValue(this.value);
8249
- console.log('5: ', new Date());
8250
8227
  this.cdr.detectChanges();
8251
8228
  }
8252
8229
  _getLevel = (node) => node.level;
8253
8230
  _isExpandable = (node) => FlatTreeService.hasChild(node);
8254
8231
  _getChildren = (node) => of(node.children ? node.children : []);
8255
8232
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: CvaFlatTreeComponent, deps: [{ token: i1.TranslateService }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }, { token: i1$2.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
8256
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.5", type: CvaFlatTreeComponent, isStandalone: false, selector: "cva-flat-tree", inputs: { label: "label", required: "required", value: "value", multiple: "multiple", disabled: "disabled", isView: "isView", isDisplayChooseTreeOnly: "isDisplayChooseTreeOnly", isHideCheckbox: "isHideCheckbox", isCollapseSelected: "isCollapseSelected", selectedLabelTitle: "selectedLabelTitle", viewHeight: "viewHeight", itemSize: "itemSize", percentOfLabelOutside: "percentOfLabelOutside", treeConfig: "treeConfig", isSearchOutSide: "isSearchOutSide", searchTextOutSide: "searchTextOutSide", errorMessages: "errorMessages", fullDatasource: "fullDatasource", isFormControl: "isFormControl" }, outputs: { selectionChange: "selectionChange" }, viewQueries: [{ propertyName: "chooseVirtualScroll", first: true, predicate: ["chooseAreaScrollViewport"], descendants: true }, { propertyName: "selectedVirtualScroll", first: true, predicate: ["selectedScrollViewport"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
8233
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.5", type: CvaFlatTreeComponent, isStandalone: false, selector: "cva-flat-tree", inputs: { label: "label", required: "required", value: "value", multiple: "multiple", disabled: "disabled", isView: "isView", isDisplayChooseTreeOnly: "isDisplayChooseTreeOnly", isHideCheckbox: "isHideCheckbox", isCollapseSelected: "isCollapseSelected", selectedLabelTitle: "selectedLabelTitle", viewHeight: "viewHeight", itemSize: "itemSize", percentOfLabelOutside: "percentOfLabelOutside", treeConfig: "treeConfig", isSearchOutSide: "isSearchOutSide", searchTextOutSide: "searchTextOutSide", errorMessages: "errorMessages", fullDatasource: "fullDatasource", isFormControl: "isFormControl" }, outputs: { selectionChange: "selectionChange", onNodeClick: "onNodeClick" }, viewQueries: [{ propertyName: "chooseVirtualScroll", first: true, predicate: ["chooseAreaScrollViewport"], descendants: true }, { propertyName: "selectedVirtualScroll", first: true, predicate: ["selectedScrollViewport"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
8257
8234
  <div class="cva-flat-tree labelOutside"
8258
8235
  fxLayout="row" fxLayout.lt-sm="row wrap">
8259
8236
  <mat-label *ngIf="label && !isSearchOutSide" class="label_width"
@@ -8296,6 +8273,7 @@ class CvaFlatTreeComponent {
8296
8273
  [attr.aria-level]="node.level"
8297
8274
  [treeControl]="treeControl"
8298
8275
  [isHideCheckbox]="isHideCheckbox"
8276
+ [nodeClicked]="nodeClicked"
8299
8277
  [node]="node"
8300
8278
  (toggle)="toggleTreeControl(treeControl, node)"
8301
8279
  (onParentNodeClick)="onParentNodeClick(node)"
@@ -8338,7 +8316,7 @@ class CvaFlatTreeComponent {
8338
8316
  </mat-hint>
8339
8317
  </div>
8340
8318
  </div>
8341
- `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: i6$2.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i10.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i10.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i10.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i9.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }, { kind: "component", type: CvaFlatTreeNodeLeftComponent, selector: "cva-flat-tree-node-left", inputs: ["treeControl", "isHideCheckbox", "node"], outputs: ["toggle", "onParentNodeClick", "onLeafNodeClick", "ngModelParentChange", "ngModelLeafChange"] }, { kind: "component", type: CvaFlatTreeNodeRightComponent, selector: "cva-flat-tree-node-right", inputs: ["treeControl", "node", "isView"], outputs: ["toggle", "deSelectLeafNode", "deSelectParentNode"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] });
8319
+ `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: i6$2.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i10.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i10.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i10.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i9.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }, { kind: "component", type: CvaFlatTreeNodeLeftComponent, selector: "cva-flat-tree-node-left", inputs: ["treeControl", "isHideCheckbox", "node", "nodeClicked"], outputs: ["toggle", "onParentNodeClick", "onLeafNodeClick", "ngModelParentChange", "ngModelLeafChange"] }, { kind: "component", type: CvaFlatTreeNodeRightComponent, selector: "cva-flat-tree-node-right", inputs: ["treeControl", "node", "isView"], outputs: ["toggle", "deSelectLeafNode", "deSelectParentNode"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] });
8342
8320
  }
8343
8321
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: CvaFlatTreeComponent, decorators: [{
8344
8322
  type: Component,
@@ -8388,6 +8366,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
8388
8366
  [attr.aria-level]="node.level"
8389
8367
  [treeControl]="treeControl"
8390
8368
  [isHideCheckbox]="isHideCheckbox"
8369
+ [nodeClicked]="nodeClicked"
8391
8370
  [node]="node"
8392
8371
  (toggle)="toggleTreeControl(treeControl, node)"
8393
8372
  (onParentNodeClick)="onParentNodeClick(node)"
@@ -8474,6 +8453,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
8474
8453
  type: Input
8475
8454
  }], selectionChange: [{
8476
8455
  type: Output
8456
+ }], onNodeClick: [{
8457
+ type: Output
8477
8458
  }], isFormControl: [{
8478
8459
  type: Input
8479
8460
  }], chooseVirtualScroll: [{
@@ -8986,15 +8967,11 @@ class JsogHttpInterceptor {
8986
8967
  request = request.clone({ body: this.jSog.serialize(request.body) });
8987
8968
  }
8988
8969
  return next.handle(request).pipe(map((event) => {
8989
- // console.log(Object.getPrototypeOf(event));
8990
8970
  if (!(event instanceof HttpResponse || HttpResponseBase.prototype.isPrototypeOf(event))) {
8991
- // console.log('event instanceof HttpResponse', event instanceof HttpResponse, HttpResponseBase.prototype.isPrototypeOf(event), event);
8992
8971
  return event;
8993
8972
  }
8994
8973
  let response = event;
8995
8974
  if (!response.body || typeof (response.body) !== 'object' || (response.body instanceof Blob)) {
8996
- // console.log('typeof(event.body !== \'object\')', typeof(response.body) !== 'object',
8997
- // 'event.body instanceof Blob', response.body instanceof Blob, response.body);
8998
8975
  return response;
8999
8976
  }
9000
8977
  response = response.clone({ body: this.jSog.deserializeArray(response.body, BaseModel) });
@@ -9025,7 +9002,6 @@ class LoaderInterceptor {
9025
9002
  intercept(request, next) {
9026
9003
  if (!request.headers.get('is_image') && !request.headers.get('is_live_searching')) {
9027
9004
  this.requests.push(request);
9028
- // console.log('LoaderInterceptor: wait for ' + this.requests.length + 'requests');
9029
9005
  this.loaderService.isLoading.next(true);
9030
9006
  }
9031
9007
  else {
@@ -9034,7 +9010,6 @@ class LoaderInterceptor {
9034
9010
  });
9035
9011
  }
9036
9012
  return next.handle(request).pipe(map((event) => {
9037
- // console.log(event, (event instanceof HttpResponse));
9038
9013
  if (event instanceof HttpResponse) {
9039
9014
  this.removeRequest(request);
9040
9015
  }
@@ -9044,7 +9019,6 @@ class LoaderInterceptor {
9044
9019
  this.removeRequest(request);
9045
9020
  return throwError(err);
9046
9021
  }), finalize(() => {
9047
- // console.log('OMG!!!');
9048
9022
  this.removeRequest(request);
9049
9023
  }));
9050
9024
  }