@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.
- package/badge/_badge-theme.scss +4 -0
- package/badge/badge.component.d.ts +1 -0
- package/core/styles/theming/_components-theming.scss +6 -0
- package/core/styles/theming/_scrollbars-theme.scss +6 -2
- package/core/styles/theming/_theming.scss +1 -0
- package/esm2022/badge/badge.component.mjs +2 -1
- package/esm2022/core/highlight/highlight.pipe.mjs +2 -2
- package/esm2022/core/version.mjs +2 -2
- package/esm2022/navbar/navbar-item.component.mjs +9 -4
- package/esm2022/navbar/navbar.component.mjs +5 -4
- package/esm2022/navbar/vertical-navbar.component.mjs +5 -4
- package/esm2022/tree/control/base-tree-control.mjs +4 -4
- package/esm2022/tree/control/flat-tree-control.filters.mjs +47 -0
- package/esm2022/tree/control/flat-tree-control.mjs +27 -45
- package/esm2022/tree/control/tree-control.mjs +1 -1
- package/esm2022/tree/public-api.mjs +2 -1
- package/esm2022/tree/toggle.mjs +2 -2
- package/fesm2022/koobiq-components-badge.mjs +1 -0
- package/fesm2022/koobiq-components-badge.mjs.map +1 -1
- package/fesm2022/koobiq-components-core.mjs +2 -2
- package/fesm2022/koobiq-components-core.mjs.map +1 -1
- package/fesm2022/koobiq-components-navbar.mjs +16 -9
- package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
- package/fesm2022/koobiq-components-tree.mjs +77 -49
- package/fesm2022/koobiq-components-tree.mjs.map +1 -1
- package/form-field/_form-field-theme.scss +5 -3
- package/navbar/_navbar-theme.scss +2 -3
- package/navbar/navbar-item.component.d.ts +3 -1
- package/navbar/navbar-item.scss +5 -0
- package/package.json +18 -18
- package/prebuilt-themes/dark-theme.css +1 -1
- package/prebuilt-themes/light-theme.css +1 -1
- package/tree/control/base-tree-control.d.ts +1 -1
- package/tree/control/flat-tree-control.d.ts +5 -3
- package/tree/control/flat-tree-control.filters.d.ts +26 -0
- package/tree/control/tree-control.d.ts +1 -1
- 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
|
-
|
|
942
|
-
this.
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
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.
|
|
966
|
-
this.
|
|
967
|
-
|
|
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()
|
|
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.
|
|
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
|