feat(core-app): CB-1635 nav tree filter behaviour

This commit is contained in:
Wroud
2022-02-09 10:44:55 +03:00
parent b8c0825ec4
commit eb2d6c9b38
5 changed files with 32 additions and 9 deletions
@@ -21,11 +21,12 @@ import { EObjectFeature } from '../shared/NodesManager/EObjectFeature';
import { NavNodeInfoResource, ROOT_NODE_PATH } from '../shared/NodesManager/NavNodeInfoResource';
import { NavTreeResource } from '../shared/NodesManager/NavTreeResource';
import { ElementsTreeLoader } from './ElementsTreeLoader';
import { elementsTreeNameFilter, NavNodeFilterCompareFn } from './elementsTreeNameFilter';
import { elementsTreeNameFilter } from './elementsTreeNameFilter';
import type { NavTreeControlComponent } from './NavigationNodeComponent';
import { NavigationNodeNested } from './NavigationTreeNode/NavigationNode/NavigationNodeNested';
import { NavigationNodeElement } from './NavigationTreeNode/NavigationNodeElement';
import { NavigationTreeService } from './NavigationTreeService';
import type { NavNodeFilterCompareFn } from './NavNodeFilterCompareFn';
import { elementsTreeLimitFilter } from './NavTreeLimitFilter/elementsTreeLimitFilter';
import { elementsTreeLimitRenderer } from './NavTreeLimitFilter/elementsTreeLimitRenderer';
import { ITreeContext, TreeContext } from './TreeContext';
@@ -0,0 +1,17 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2022 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import type { NavNode } from '../shared/NodesManager/EntityTypes';
export enum EEquality {
none,
partially,
full
}
export type NavNodeFilterCompareFn = (node: NavNode, filter: string)=> EEquality;
@@ -10,8 +10,6 @@ import type { NavNode } from '../../shared/NodesManager/EntityTypes';
import type { NavTreeResource } from '../../shared/NodesManager/NavTreeResource';
import type { IElementsTreeFilter } from '../useElementsTree';
export type NavNodeFilterCompareFn = (node: NavNode, filter: string)=> boolean;
export const NAVIGATION_TREE_LIMIT = {
limit: 'nav-tree://limit',
};
@@ -12,10 +12,9 @@ import type { MetadataMap } from '@cloudbeaver/core-utils';
import type { NavNode } from '../shared/NodesManager/EntityTypes';
import type { NavNodeInfoResource } from '../shared/NodesManager/NavNodeInfoResource';
import type { NavTreeResource } from '../shared/NodesManager/NavTreeResource';
import { EEquality, NavNodeFilterCompareFn } from './NavNodeFilterCompareFn';
import type { IElementsTreeFilter, ITreeNodeState } from './useElementsTree';
export type NavNodeFilterCompareFn = (node: NavNode, filter: string)=> boolean;
function isDefined<T>(val: T | undefined | null): val is T {
return val !== undefined && val !== null;
}
@@ -26,7 +25,7 @@ export function elementsTreeNameFilter(
compare: NavNodeFilterCompareFn = compareNodes
): IElementsTreeFilter {
return (filter: string, node: NavNode, children: string[], state: MetadataMap<string, ITreeNodeState>) => {
if (filter === '' || compare(node, filter)) {
if (filter === '' || compare(node, filter) === EEquality.full) {
return children;
}
@@ -57,7 +56,7 @@ function filterNode(
// const nodeState = state.get(node.id);
if (compare(node, filter)) {
if (compare(node, filter) !== EEquality.none) {
return true;
}
@@ -80,6 +79,13 @@ function filterNode(
// return false;
}
function compareNodes(node: NavNode, filter: string): boolean {
return node.name?.toLowerCase().includes(filter.toLowerCase()) ?? false;
function compareNodes(node: NavNode, filter: string): EEquality {
const nodeName = node.name?.toLowerCase().trim();
const filterToLower = filter.toLowerCase().trim();
if (nodeName === filterToLower) {
return EEquality.full;
}
return nodeName?.includes(filterToLower) ? EEquality.partially : EEquality.none;
}
+1
View File
@@ -37,6 +37,7 @@ export * from './NavigationTree/MENU_NAV_TREE';
export * from './NavigationTree/NavigationNodeComponent';
export * from './NavigationTree/NavigationTreeBootstrap';
export * from './NavigationTree/NavigationTreeService';
export * from './NavigationTree/NavNodeFilterCompareFn';
export * from './NavigationTree/TreeContext';
export * from './NavigationTree/useElementsTree';
export * from './AppLocaleService';