@koobiq/components 16.0.0-beta.14 → 16.0.0-beta.16

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 (37) hide show
  1. package/badge/_badge-theme.scss +4 -0
  2. package/badge/badge.component.d.ts +1 -0
  3. package/core/styles/theming/_components-theming.scss +6 -0
  4. package/core/styles/theming/_scrollbars-theme.scss +6 -2
  5. package/core/styles/theming/_theming.scss +1 -0
  6. package/esm2022/badge/badge.component.mjs +2 -1
  7. package/esm2022/core/highlight/highlight.pipe.mjs +2 -2
  8. package/esm2022/core/version.mjs +2 -2
  9. package/esm2022/navbar/navbar-item.component.mjs +9 -4
  10. package/esm2022/navbar/navbar.component.mjs +5 -4
  11. package/esm2022/navbar/vertical-navbar.component.mjs +5 -4
  12. package/esm2022/tree/control/base-tree-control.mjs +4 -4
  13. package/esm2022/tree/control/flat-tree-control.filters.mjs +47 -0
  14. package/esm2022/tree/control/flat-tree-control.mjs +27 -45
  15. package/esm2022/tree/control/tree-control.mjs +1 -1
  16. package/esm2022/tree/public-api.mjs +2 -1
  17. package/esm2022/tree/toggle.mjs +2 -2
  18. package/fesm2022/koobiq-components-badge.mjs +1 -0
  19. package/fesm2022/koobiq-components-badge.mjs.map +1 -1
  20. package/fesm2022/koobiq-components-core.mjs +2 -2
  21. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  22. package/fesm2022/koobiq-components-navbar.mjs +16 -9
  23. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  24. package/fesm2022/koobiq-components-tree.mjs +77 -49
  25. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  26. package/form-field/_form-field-theme.scss +5 -3
  27. package/navbar/_navbar-theme.scss +2 -3
  28. package/navbar/navbar-item.component.d.ts +3 -1
  29. package/navbar/navbar-item.scss +5 -0
  30. package/package.json +18 -18
  31. package/prebuilt-themes/dark-theme.css +1 -1
  32. package/prebuilt-themes/light-theme.css +1 -1
  33. package/tree/control/base-tree-control.d.ts +1 -1
  34. package/tree/control/flat-tree-control.d.ts +5 -3
  35. package/tree/control/flat-tree-control.filters.d.ts +26 -0
  36. package/tree/control/tree-control.d.ts +1 -1
  37. package/tree/public-api.d.ts +1 -0
@@ -357,7 +357,7 @@ class KbqTreeNodeToggleBaseDirective extends KbqTreeNodeToggleMixinBase {
357
357
  this.treeNode = treeNode;
358
358
  this._recursive = false;
359
359
  this.tree.treeControl.filterValue
360
- .subscribe((value) => this.disabled = !!value);
360
+ .subscribe((value) => this.disabled = !!value?.length);
361
361
  }
362
362
  toggle(event) {
363
363
  if (this.disabled) {
@@ -819,21 +819,21 @@ class BaseTreeControl {
819
819
  }
820
820
  /** Toggles one single data node's expanded/collapsed state. */
821
821
  toggle(dataNode) {
822
- if (this.filterValue.value) {
822
+ if (this.filterValue.value?.length) {
823
823
  return;
824
824
  }
825
825
  this.expansionModel.toggle(dataNode);
826
826
  }
827
827
  /** Expands one single data node. */
828
828
  expand(dataNode) {
829
- if (this.filterValue.value) {
829
+ if (this.filterValue.value?.length) {
830
830
  return;
831
831
  }
832
832
  this.expansionModel.select(dataNode);
833
833
  }
834
834
  /** Collapses one single data node. */
835
835
  collapse(dataNode) {
836
- if (this.filterValue.value) {
836
+ if (this.filterValue.value?.length) {
837
837
  return;
838
838
  }
839
839
  this.expansionModel.deselect(dataNode);
@@ -866,6 +866,53 @@ class BaseTreeControl {
866
866
  }
867
867
  }
868
868
 
869
+ class FilterByViewValue {
870
+ constructor(control) {
871
+ this.control = control;
872
+ }
873
+ handle(value) {
874
+ const viewValue = value || null;
875
+ this.result = this.control.dataNodes
876
+ .filter((node) => this.control.compareViewValues(this.control.getViewValue(node), viewValue));
877
+ return this.result;
878
+ }
879
+ }
880
+ class FilterParentsForNodes {
881
+ constructor(control) {
882
+ this.control = control;
883
+ }
884
+ handle(_, prevFilter) {
885
+ const result = new Set();
886
+ this.control.dataNodes
887
+ .filter((node) => prevFilter?.result.includes(node))
888
+ .forEach((node) => {
889
+ this.control.getParents(node, [])
890
+ .forEach((parent) => result.add(parent));
891
+ result.add(node);
892
+ });
893
+ this.result = Array.from(result);
894
+ return this.result;
895
+ }
896
+ }
897
+ class FilterByValues {
898
+ constructor(control) {
899
+ this.control = control;
900
+ this.values = [];
901
+ this.setValues = (values) => {
902
+ this.values = values;
903
+ };
904
+ }
905
+ handle(_, prevFilter) {
906
+ const found = this.control.dataNodes
907
+ .filter((node) => this.values.includes(this.control.getValue(node)));
908
+ this.result = Array.from(new Set([...(prevFilter?.result || []), ...found]));
909
+ return this.result;
910
+ }
911
+ getValues() {
912
+ return this.values;
913
+ }
914
+ }
915
+
869
916
  function defaultCompareValues(firstValue, secondValue) {
870
917
  return firstValue === secondValue;
871
918
  }
@@ -894,6 +941,13 @@ class FlatTreeControl extends BaseTreeControl {
894
941
  this.compareValues = compareValues;
895
942
  this.compareViewValues = compareViewValues;
896
943
  this.isDisabled = isDisabled;
944
+ this.setFilters(new FilterByViewValue(this), new FilterParentsForNodes(this));
945
+ }
946
+ getFilters() {
947
+ return this.filters;
948
+ }
949
+ setFilters(...filters) {
950
+ this.filters = filters;
897
951
  }
898
952
  /**
899
953
  * Gets a list of the data node's subtree of descendent data nodes.
@@ -936,62 +990,36 @@ class FlatTreeControl extends BaseTreeControl {
936
990
  hasValue(value) {
937
991
  return this.dataNodes.find((node) => this.compareValues(this.getValue(node), value));
938
992
  }
939
- filterNodes(value) {
993
+ filterNodes(value = null) {
940
994
  this.saveExpansionState();
941
- this.filterModel.clear();
942
- this.expansionModel.clear();
943
- const filteredNodes = this.dataNodes
944
- .filter((node) => this.compareViewValues(this.getViewValue(node), value));
945
- const filteredNodesWithTheirParents = new Set();
946
- filteredNodes.forEach((filteredNode) => {
947
- this.getParents(filteredNode, [])
948
- .forEach((node) => {
949
- filteredNodesWithTheirParents.add(node);
950
- this.expandDataNode(node);
951
- });
952
- filteredNodesWithTheirParents.add(filteredNode);
953
- this.expandDataNode(filteredNode);
954
- if (this.isExpandable(filteredNode)) {
955
- const childNodeLevel = this.getLevel(filteredNode) + 1;
956
- this.getDescendants(filteredNode)
957
- .filter((childNode) => this.getLevel(childNode) === childNodeLevel)
958
- .filter((childNode) => !this.isExpandable(childNode) || !this.hasFilteredDescendant(childNode, filteredNodes))
959
- .forEach((childNode) => {
960
- filteredNodesWithTheirParents.add(childNode);
961
- this.expandDataNode(childNode);
962
- });
963
- }
995
+ let result = [];
996
+ this.filters
997
+ .forEach((filter, index, filters) => {
998
+ const prevFilter = filters[index - 1] || null;
999
+ result = filter.handle(value, prevFilter);
964
1000
  });
965
- this.filterModel.select(...Array.from(filteredNodesWithTheirParents));
966
- this.updateFilterValue(value);
967
- Promise.resolve().then(() => this.restoreExpansionState());
1001
+ this.filterModel.clear();
1002
+ this.filterModel.select(...result);
1003
+ // set current expansion state according to filtered tree
1004
+ this.expansionModel.setSelection(...result.filter((node) => this.isExpandable(node)));
1005
+ this.updateFilterValue(value || result);
1006
+ Promise.resolve()
1007
+ .then(() => this.restoreExpansionState());
968
1008
  }
969
1009
  updateFilterValue(value) {
970
- Promise.resolve().then(() => this.filterValue.next(value));
971
- }
972
- expandDataNode(dataNode) {
973
- if (this.isExpandable(dataNode)) {
974
- this.expansionModel.select(dataNode);
975
- }
1010
+ Promise.resolve()
1011
+ .then(() => this.filterValue.next(value));
976
1012
  }
977
1013
  saveExpansionState() {
978
- if (!this.filterValue.value) {
1014
+ if (!this.filterValue.value?.length) {
979
1015
  this.expandedItemsBeforeFiltration = this.expansionModel.selected;
980
1016
  }
981
1017
  }
982
1018
  restoreExpansionState() {
983
- if (!this.filterValue.value) {
984
- this.expansionModel.clear();
985
- this.expansionModel.select(...this.expandedItemsBeforeFiltration);
1019
+ if (!this.filterValue.value?.length) {
1020
+ this.expansionModel.setSelection(...this.expandedItemsBeforeFiltration);
986
1021
  }
987
1022
  }
988
- hasFilteredDescendant(dataNode, filteredNodes) {
989
- const filteredViewValues = filteredNodes
990
- .map((node) => this.getViewValue(node));
991
- return this.getDescendants(dataNode)
992
- .filter((node) => filteredViewValues.includes(this.getViewValue(node)))
993
- .length > 0;
994
- }
995
1023
  }
996
1024
 
997
1025
  /* tslint:disable:no-empty */
@@ -1811,5 +1839,5 @@ class KbqTreeNestedDataSource extends DataSource {
1811
1839
  * Generated bundle index. Do not edit.
1812
1840
  */
1813
1841
 
1814
- export { BaseTreeControl, FlatTreeControl, KBQ_SELECTION_TREE_VALUE_ACCESSOR, KBQ_TREE_OPTION_PARENT_COMPONENT, KbqTree, KbqTreeBase, KbqTreeCopyEvent, KbqTreeFlatDataSource, KbqTreeFlattener, KbqTreeModule, KbqTreeNavigationChange, KbqTreeNestedDataSource, KbqTreeNode, KbqTreeNodeDef, KbqTreeNodeOutlet, KbqTreeNodeOutletContext, KbqTreeNodePadding, KbqTreeNodeToggleBase, KbqTreeNodeToggleBaseDirective, KbqTreeNodeToggleComponent, KbqTreeNodeToggleDirective, KbqTreeNodeToggleMixinBase, KbqTreeOption, KbqTreeOptionChange, KbqTreeSelectAllEvent, KbqTreeSelection, KbqTreeSelectionChange, NestedTreeControl, defaultCompareValues, defaultCompareViewValues };
1842
+ export { BaseTreeControl, FilterByValues, FilterByViewValue, FilterParentsForNodes, FlatTreeControl, KBQ_SELECTION_TREE_VALUE_ACCESSOR, KBQ_TREE_OPTION_PARENT_COMPONENT, KbqTree, KbqTreeBase, KbqTreeCopyEvent, KbqTreeFlatDataSource, KbqTreeFlattener, KbqTreeModule, KbqTreeNavigationChange, KbqTreeNestedDataSource, KbqTreeNode, KbqTreeNodeDef, KbqTreeNodeOutlet, KbqTreeNodeOutletContext, KbqTreeNodePadding, KbqTreeNodeToggleBase, KbqTreeNodeToggleBaseDirective, KbqTreeNodeToggleComponent, KbqTreeNodeToggleDirective, KbqTreeNodeToggleMixinBase, KbqTreeOption, KbqTreeOptionChange, KbqTreeSelectAllEvent, KbqTreeSelection, KbqTreeSelectionChange, NestedTreeControl, defaultCompareValues, defaultCompareViewValues };
1815
1843
  //# sourceMappingURL=koobiq-components-tree.mjs.map