@c10t/nice-component-library 0.0.11 → 0.0.12-a

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.
@@ -50,10 +50,11 @@ export declare class CvaFlatTreeComponent implements ControlValueAccessor, OnIni
50
50
  selectionChange: EventEmitter<any>;
51
51
  isFormControl: boolean;
52
52
  formControl: AbstractControl | undefined;
53
+ mapIndexes: Map<any, any>;
53
54
  chooseVirtualScroll?: CdkVirtualScrollViewport;
54
55
  selectedVirtualScroll?: CdkVirtualScrollViewport;
55
- get NsValiator(): typeof ValidatorService;
56
56
  constructor(translateService: TranslateService, injector: Injector, cdr: ChangeDetectorRef, ngControl: NgControl);
57
+ get NsValiator(): typeof ValidatorService;
57
58
  setSelectedNode(): void;
58
59
  setDataSourceOrigin(): void;
59
60
  ngOnInit(): void;
@@ -66,9 +67,6 @@ export declare class CvaFlatTreeComponent implements ControlValueAccessor, OnIni
66
67
  checkIsView(isView: boolean | (() => boolean)): boolean;
67
68
  ngOnChanges(simpleChanges: SimpleChanges): void;
68
69
  transformer: (node: FlatTreeNodeModel, level: number) => FlatTreeNodeModel;
69
- private _getLevel;
70
- private _isExpandable;
71
- private _getChildren;
72
70
  propagateChange: (_: any) => void;
73
71
  registerOnChange(fn: any): void;
74
72
  registerOnTouched(fn: any): void;
@@ -91,6 +89,10 @@ export declare class CvaFlatTreeComponent implements ControlValueAccessor, OnIni
91
89
  expandTreeDataSource(treeControl: FlatTreeControl<FlatTreeNodeModel>, expandProperty: 'isExpanded' | 'isFilterExpanded'): void;
92
90
  onLeafNodeClick(node: FlatTreeNodeModel): void;
93
91
  onParentNodeClick(node: FlatTreeNodeModel): void;
92
+ toggleNodeCheck(node: FlatTreeNodeModel, checked: boolean): void;
93
+ private _getLevel;
94
+ private _isExpandable;
95
+ private _getChildren;
94
96
  static ɵfac: i0.ɵɵFactoryDeclaration<CvaFlatTreeComponent, [null, null, null, { optional: true; self: true; }]>;
95
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>;
96
98
  }
@@ -7381,11 +7381,9 @@ class CvaFlatTreeComponent {
7381
7381
  isFormControl = true;
7382
7382
  // Cái này là để gắn khi nó là FormControl trong 1 FormGroup
7383
7383
  formControl;
7384
+ mapIndexes = new Map();
7384
7385
  chooseVirtualScroll;
7385
7386
  selectedVirtualScroll;
7386
- get NsValiator() {
7387
- return ValidatorService;
7388
- }
7389
7387
  constructor(translateService, injector, cdr, ngControl) {
7390
7388
  this.translateService = translateService;
7391
7389
  this.injector = injector;
@@ -7406,6 +7404,9 @@ class CvaFlatTreeComponent {
7406
7404
  this.selectedDataSource = new MatTreeFlatDataSource(this.selectedTreeControl, this.selectedTreeFlattener);
7407
7405
  this.setSelectedNode();
7408
7406
  }
7407
+ get NsValiator() {
7408
+ return ValidatorService;
7409
+ }
7409
7410
  setSelectedNode() {
7410
7411
  this.selectedDataSource.data = this.selectedFullDataSource;
7411
7412
  if (this.selectedVirtualScroll) {
@@ -7537,9 +7538,6 @@ class CvaFlatTreeComponent {
7537
7538
  node.checked = !!node.checked;
7538
7539
  return node;
7539
7540
  };
7540
- _getLevel = (node) => node.level;
7541
- _isExpandable = (node) => FlatTreeService.hasChild(node);
7542
- _getChildren = (node) => of(node.children ? node.children : []);
7543
7541
  propagateChange = (_) => {
7544
7542
  /*NON-EMPTY FOR COMPILE*/
7545
7543
  };
@@ -7557,14 +7555,24 @@ class CvaFlatTreeComponent {
7557
7555
  // if (this.multiple) {
7558
7556
  this.value = obj;
7559
7557
  // }
7558
+ console.log('writeValue_0: ', new Date());
7559
+ this.mapIndexes = new Map();
7560
+ for (let i = 0; i < this.fullDataTreeControl.dataNodes.length; i++) {
7561
+ this.mapIndexes.set(this.fullDataTreeControl.dataNodes[i].value, i);
7562
+ }
7563
+ console.log('writeValue_1: ', new Date());
7560
7564
  this.checkedDefaultValue();
7565
+ console.log('writeValue_2: ', new Date());
7561
7566
  this.updateSelectAll();
7567
+ console.log('writeValue_3: ', new Date());
7562
7568
  this.updateSelectedTree();
7569
+ console.log('writeValue_4: ', new Date());
7563
7570
  this.propagateChange(this.value);
7564
7571
  this.callValidator();
7565
7572
  if (this.isView) {
7566
7573
  this.selectedTreeControl.expandAll();
7567
7574
  }
7575
+ console.log('writeValue_5: ', new Date());
7568
7576
  this.selectionChange.emit(Array.from(this.valueObjRef.values()));
7569
7577
  }
7570
7578
  }
@@ -7575,42 +7583,22 @@ class CvaFlatTreeComponent {
7575
7583
  this.expandTreeDataSource(this.selectedTreeControl, 'isExpanded');
7576
7584
  }
7577
7585
  checkedDefaultValue() {
7578
- let allChildNode;
7579
- for (const rootNode of this.fullDataDataSource.data) {
7580
- if (!FlatTreeService.hasChild(rootNode)) {
7581
- if (this.value.includes(rootNode.value)) {
7582
- rootNode.checked = true;
7583
- if (!this.valueObjRef.has(rootNode.value)) {
7584
- this.valueObjRef.set(rootNode.value, rootNode);
7585
- }
7586
- this.selectedTreeChange(rootNode);
7587
- }
7588
- else {
7589
- rootNode.checked = false;
7590
- if (this.valueObjRef.has(rootNode.value)) {
7591
- this.valueObjRef.delete(rootNode.value);
7592
- }
7593
- this.selectedTreeChange(rootNode);
7594
- }
7595
- continue;
7586
+ this.valueObjRef.clear();
7587
+ const valueSet = new Set(this.value);
7588
+ for (const node of this.fullDataTreeControl.dataNodes) {
7589
+ const isLeaf = !FlatTreeService.hasChild(node);
7590
+ node.checked = isLeaf && valueSet.has(node.value);
7591
+ if (isLeaf && node.checked) {
7592
+ this.valueObjRef.set(node.value, node);
7593
+ }
7594
+ const orgNodeIndex = this.mapIndexes.get(node.value);
7595
+ if (orgNodeIndex !== undefined) {
7596
+ this.fullDataTreeControl.dataNodes[orgNodeIndex].checked = node.checked;
7596
7597
  }
7597
- allChildNode = this.getAllChildNode(this.fullDataTreeControl, rootNode);
7598
- allChildNode.forEach(childNode => {
7599
- if (!FlatTreeService.hasChild(childNode)) {
7600
- childNode.checked = this.value.includes(childNode.value);
7601
- if (!this.valueObjRef.has(childNode.value) && childNode.checked) {
7602
- this.valueObjRef.set(childNode.value, childNode);
7603
- }
7604
- else if (this.valueObjRef.has(childNode.value) && !childNode.checked) {
7605
- this.valueObjRef.delete(childNode.value);
7606
- }
7607
- this.selectedTreeChange(childNode);
7608
- }
7609
- });
7610
7598
  }
7611
7599
  }
7612
7600
  getAllChildNode(treeControl, node) {
7613
- const index = treeControl.dataNodes.findIndex(n => node.value === n.value);
7601
+ const index = this.mapIndexes.get(node.value);
7614
7602
  let sameLevelNextIndex = -1;
7615
7603
  for (let i = index + 1; i < treeControl.dataNodes.length; i++) {
7616
7604
  if (node.level >= treeControl.dataNodes[i].level) {
@@ -7635,7 +7623,7 @@ class CvaFlatTreeComponent {
7635
7623
  node.checked = checked;
7636
7624
  let indexLeaf = -1;
7637
7625
  // update origin node
7638
- let orgNodeIndex = this.fullDataTreeControl.dataNodes.findIndex(n => n.value === node.value);
7626
+ let orgNodeIndex = this.mapIndexes.get(node.value);
7639
7627
  /*this.getNodeInFullDataSource(child)*/
7640
7628
  this.fullDataTreeControl.dataNodes[orgNodeIndex].checked = checked;
7641
7629
  if (orgNodeIndex > -1 && !checked) {
@@ -7662,7 +7650,7 @@ class CvaFlatTreeComponent {
7662
7650
  }
7663
7651
  }
7664
7652
  else {
7665
- orgNodeIndex = this.fullDataTreeControl.dataNodes.findIndex(n => n.value === child.value);
7653
+ orgNodeIndex = this.mapIndexes.get(child.value);
7666
7654
  if (orgNodeIndex > -1) {
7667
7655
  this.fullDataTreeControl.dataNodes[orgNodeIndex].isExpanded = false;
7668
7656
  this.fullDataTreeControl.dataNodes[orgNodeIndex].checked = this.fullDataTreeControl.dataNodes[orgNodeIndex].children?.every(n => n.checked);
@@ -7711,7 +7699,7 @@ class CvaFlatTreeComponent {
7711
7699
  if ((node.display && !this.checkDisabledNode(node)) || !!isSelectedChange) {
7712
7700
  node.checked = checked;
7713
7701
  // update origin node
7714
- const orgNodeIndex = this.fullDataTreeControl.dataNodes.findIndex(n => n.value === node.value);
7702
+ const orgNodeIndex = this.mapIndexes.get(node.value);
7715
7703
  this.fullDataTreeControl.dataNodes[orgNodeIndex].checked = checked;
7716
7704
  if (checked) {
7717
7705
  if (this.multiple) {
@@ -7887,6 +7875,53 @@ class CvaFlatTreeComponent {
7887
7875
  this.checkParentNode(true, node);
7888
7876
  }
7889
7877
  }
7878
+ toggleNodeCheck(node, checked) {
7879
+ const isLeaf = !FlatTreeService.hasChild(node);
7880
+ console.log('1: ', new Date());
7881
+ // Gọi 1 lần duy nhất nếu là parent
7882
+ const descendants = isLeaf ? [] : this.fullDataTreeControl.getDescendants(node);
7883
+ const affectedNodes = isLeaf ? [node] : descendants.filter(n => !FlatTreeService.hasChild(n));
7884
+ console.log('2: ', new Date());
7885
+ for (const leaf of affectedNodes) {
7886
+ if (!leaf.display || this.checkDisabledNode(leaf))
7887
+ continue;
7888
+ const index = this.value.indexOf(leaf.value);
7889
+ if (checked && index < 0) {
7890
+ this.value.push(leaf.value);
7891
+ this.valueObjRef.set(leaf.value, leaf);
7892
+ leaf.checked = true;
7893
+ }
7894
+ if (!checked && index >= 0) {
7895
+ this.value.splice(index, 1);
7896
+ this.valueObjRef.delete(leaf.value);
7897
+ leaf.checked = false;
7898
+ }
7899
+ const orgNodeIndex = this.mapIndexes.get(leaf.value);
7900
+ if (orgNodeIndex !== undefined) {
7901
+ this.fullDataTreeControl.dataNodes[orgNodeIndex].checked = leaf.checked;
7902
+ }
7903
+ }
7904
+ console.log('3: ', new Date());
7905
+ // Nếu node là cha → cập nhật isExpanded
7906
+ if (!isLeaf) {
7907
+ node.checked = checked;
7908
+ const orgNodeIndex = this.mapIndexes.get(node.value);
7909
+ if (orgNodeIndex !== undefined) {
7910
+ this.fullDataTreeControl.dataNodes[orgNodeIndex].checked = checked;
7911
+ this.fullDataTreeControl.dataNodes[orgNodeIndex].isExpanded = false;
7912
+ }
7913
+ }
7914
+ else {
7915
+ node.checked = checked;
7916
+ }
7917
+ console.log('4: ', new Date());
7918
+ this.writeValue(this.value);
7919
+ console.log('5: ', new Date());
7920
+ this.cdr.detectChanges();
7921
+ }
7922
+ _getLevel = (node) => node.level;
7923
+ _isExpandable = (node) => FlatTreeService.hasChild(node);
7924
+ _getChildren = (node) => of(node.children ? node.children : []);
7890
7925
  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 });
7891
7926
  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: `
7892
7927
  <div class="cva-flat-tree labelOutside"
@@ -7935,8 +7970,8 @@ class CvaFlatTreeComponent {
7935
7970
  (toggle)="toggleTreeControl(treeControl, node)"
7936
7971
  (onParentNodeClick)="onParentNodeClick(node)"
7937
7972
  (onLeafNodeClick)="onLeafNodeClick(node)"
7938
- (ngModelParentChange)="checkParentNode($event, node)"
7939
- (ngModelLeafChange)="checkLeafNode($event, node)">
7973
+ (ngModelParentChange)="toggleNodeCheck(node, $event)"
7974
+ (ngModelLeafChange)="toggleNodeCheck(node, $event)">
7940
7975
  </cva-flat-tree-node-left>
7941
7976
  </ng-container>
7942
7977
  </cdk-virtual-scroll-viewport>
@@ -8027,8 +8062,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
8027
8062
  (toggle)="toggleTreeControl(treeControl, node)"
8028
8063
  (onParentNodeClick)="onParentNodeClick(node)"
8029
8064
  (onLeafNodeClick)="onLeafNodeClick(node)"
8030
- (ngModelParentChange)="checkParentNode($event, node)"
8031
- (ngModelLeafChange)="checkLeafNode($event, node)">
8065
+ (ngModelParentChange)="toggleNodeCheck(node, $event)"
8066
+ (ngModelLeafChange)="toggleNodeCheck(node, $event)">
8032
8067
  </cva-flat-tree-node-left>
8033
8068
  </ng-container>
8034
8069
  </cdk-virtual-scroll-viewport>