mirror of
https://github.com/dbeaver/cloudbeaver.git
synced 2026-09-24 16:04:36 +08:00
feat(core-app): CB-1635 nav tree filter behaviour
This commit is contained in:
@@ -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;
|
||||
-2
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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';
|
||||
|
||||
Reference in New Issue
Block a user