@evergis/react 4.0.74 → 4.0.78
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/dist/components/Dashboard/containers/FiltersContainer/components/TreeFilter.d.ts +3 -0
- package/dist/components/Dashboard/containers/FiltersContainer/hooks/useTreeFilter.d.ts +23 -0
- package/dist/components/Dashboard/containers/FiltersContainer/hooks/useTreeFilterData.d.ts +12 -0
- package/dist/components/Dashboard/containers/FiltersContainer/hooks/useTreeFilterSearch.d.ts +17 -0
- package/dist/components/Dashboard/containers/FiltersContainer/hooks/useTreeFilterSelection.d.ts +11 -0
- package/dist/components/Dashboard/containers/FiltersContainer/hooks/useTreeFilterTree.d.ts +16 -0
- package/dist/components/Dashboard/containers/FiltersContainer/types.d.ts +11 -0
- package/dist/components/Dashboard/containers/FiltersContainer/utils/treeFilterUtils.d.ts +30 -0
- package/dist/components/Dashboard/types.d.ts +25 -2
- package/dist/components/Dashboard/utils/applyTreeFilterToCondition.d.ts +12 -0
- package/dist/components/Dashboard/utils/getSelectedFilterValue.d.ts +1 -1
- package/dist/components/Dashboard/utils/index.d.ts +1 -0
- package/dist/index.js +436 -33
- package/dist/index.js.map +1 -1
- package/dist/react.esm.js +436 -35
- package/dist/react.esm.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ConfigContainerChild, WidgetType } from '../../../types';
|
|
2
|
+
export declare const useTreeFilter: (type: WidgetType, filter: ConfigContainerChild) => {
|
|
3
|
+
width: string;
|
|
4
|
+
placeholder: string;
|
|
5
|
+
multiSelect: boolean;
|
|
6
|
+
loading: boolean;
|
|
7
|
+
data: import('@evergis/uilib-gl').TreeItemProps[];
|
|
8
|
+
setData: import('react').Dispatch<import('react').SetStateAction<import('@evergis/uilib-gl').TreeItemProps[]>>;
|
|
9
|
+
expanded: import('@evergis/uilib-gl').TreeId[];
|
|
10
|
+
setExpanded: import('react').Dispatch<import('react').SetStateAction<import('@evergis/uilib-gl').TreeId[]>>;
|
|
11
|
+
onLoadChildren: (item: import('@evergis/uilib-gl').TreeItemProps) => Promise<import('@evergis/uilib-gl').PartialLoadData<import('../types').TreeNodeData>>;
|
|
12
|
+
selectedIds: Set<import('@evergis/uilib-gl').TreeId>;
|
|
13
|
+
selectedCount: number;
|
|
14
|
+
selectedLabel: string;
|
|
15
|
+
searchValue: string;
|
|
16
|
+
onSearchChange: (value: string) => void;
|
|
17
|
+
onOpen: () => Promise<void>;
|
|
18
|
+
onClose: () => void;
|
|
19
|
+
onToggleSelect: (item: any) => void;
|
|
20
|
+
onReset: () => void;
|
|
21
|
+
onSave: () => void;
|
|
22
|
+
dirty: boolean;
|
|
23
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { PartialLoadData, TreeId, TreeItemProps } from '@evergis/uilib-gl';
|
|
2
|
+
import { WidgetType } from '../../../types';
|
|
3
|
+
import { TreeNodeData } from '../types';
|
|
4
|
+
export declare const useTreeFilterData: (type: WidgetType, filterName: string) => {
|
|
5
|
+
configFilter: import('../../../types').ConfigFilter;
|
|
6
|
+
layerName: string;
|
|
7
|
+
loadLevelOne: () => Promise<TreeItemProps[]>;
|
|
8
|
+
loadChildren: (item: TreeItemProps) => Promise<PartialLoadData<TreeNodeData>>;
|
|
9
|
+
searchNodes: (query: string) => Promise<TreeItemProps[]>;
|
|
10
|
+
loadByNames: (names: TreeId[]) => Promise<TreeItemProps[]>;
|
|
11
|
+
loadByValues: (values: TreeId[]) => Promise<TreeItemProps[]>;
|
|
12
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { TreeId, TreeItemProps } from '@evergis/uilib-gl';
|
|
2
|
+
type UseTreeFilterSearchParams = {
|
|
3
|
+
searchNodes: (query: string) => Promise<TreeItemProps[]>;
|
|
4
|
+
loadByNames: (names: TreeId[]) => Promise<TreeItemProps[]>;
|
|
5
|
+
};
|
|
6
|
+
export declare const useTreeFilterSearch: ({ searchNodes, loadByNames }: UseTreeFilterSearchParams) => {
|
|
7
|
+
searchValue: string;
|
|
8
|
+
isSearchActive: boolean;
|
|
9
|
+
searching: boolean;
|
|
10
|
+
searchData: TreeItemProps[];
|
|
11
|
+
setSearchData: import('react').Dispatch<import('react').SetStateAction<TreeItemProps[]>>;
|
|
12
|
+
searchExpanded: TreeId[];
|
|
13
|
+
setSearchExpanded: import('react').Dispatch<import('react').SetStateAction<TreeId[]>>;
|
|
14
|
+
onSearchChange: (value: string) => void;
|
|
15
|
+
resetSearch: () => void;
|
|
16
|
+
};
|
|
17
|
+
export {};
|
package/dist/components/Dashboard/containers/FiltersContainer/hooks/useTreeFilterSelection.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { TreeId, TreeItemProps } from '@evergis/uilib-gl';
|
|
2
|
+
import { ConfigFilter, WidgetType } from '../../../types';
|
|
3
|
+
export declare const useTreeFilterSelection: (type: WidgetType, filterName: string, configFilter?: ConfigFilter) => {
|
|
4
|
+
selected: Map<TreeId, number>;
|
|
5
|
+
selectedIds: Set<TreeId>;
|
|
6
|
+
selectedLabel: string;
|
|
7
|
+
dirty: boolean;
|
|
8
|
+
onToggleSelect: (item: TreeItemProps, multiSelect?: boolean) => void;
|
|
9
|
+
onReset: () => void;
|
|
10
|
+
onSave: () => void;
|
|
11
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { TreeId, TreeItemProps } from '@evergis/uilib-gl';
|
|
2
|
+
type UseTreeFilterTreeParams = {
|
|
3
|
+
selected: Map<TreeId, number>;
|
|
4
|
+
loadLevelOne: () => Promise<TreeItemProps[]>;
|
|
5
|
+
loadByValues: (values: TreeId[]) => Promise<TreeItemProps[]>;
|
|
6
|
+
loadByNames: (names: TreeId[]) => Promise<TreeItemProps[]>;
|
|
7
|
+
};
|
|
8
|
+
export declare const useTreeFilterTree: ({ selected, loadLevelOne, loadByValues, loadByNames }: UseTreeFilterTreeParams) => {
|
|
9
|
+
treeData: TreeItemProps[];
|
|
10
|
+
setTreeData: import('react').Dispatch<import('react').SetStateAction<TreeItemProps[]>>;
|
|
11
|
+
treeExpanded: TreeId[];
|
|
12
|
+
setTreeExpanded: import('react').Dispatch<import('react').SetStateAction<TreeId[]>>;
|
|
13
|
+
loading: boolean;
|
|
14
|
+
onOpen: () => Promise<void>;
|
|
15
|
+
};
|
|
16
|
+
export {};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { TreeId } from '@evergis/uilib-gl';
|
|
1
2
|
import { ConfigContainer, ConfigContainerChild, WidgetType } from '../../types';
|
|
2
3
|
export type FilterOption = {
|
|
3
4
|
text: string;
|
|
@@ -5,6 +6,16 @@ export type FilterOption = {
|
|
|
5
6
|
min: string | number;
|
|
6
7
|
max: string | number;
|
|
7
8
|
};
|
|
9
|
+
/**
|
|
10
|
+
* Доменные данные узла иерархического фильтра "tree", хранятся в `TreeItemProps.data`.
|
|
11
|
+
* `name`/`parentName` — служебная связь дерева (по `attributeName`/`attributeParentName`);
|
|
12
|
+
* идентичность/значение узла лежит в `TreeItemProps.id` (по `attributeValue`).
|
|
13
|
+
*/
|
|
14
|
+
export type TreeNodeData = {
|
|
15
|
+
name: TreeId;
|
|
16
|
+
parentName: TreeId | null;
|
|
17
|
+
level: number;
|
|
18
|
+
};
|
|
8
19
|
export type WidgetFilterProps = {
|
|
9
20
|
type: WidgetType;
|
|
10
21
|
filter: ConfigContainerChild;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { TreeId, TreeItemProps } from '@evergis/uilib-gl';
|
|
2
|
+
import { TreeFilterValue } from '../../../types';
|
|
3
|
+
export declare const buildLevelOneCondition: (attributeLevel: string) => string;
|
|
4
|
+
export declare const buildChildrenCondition: (attributeParentName: string, parentName: TreeId) => string;
|
|
5
|
+
export declare const buildSearchCondition: (attributeAlias: string, query: string) => string;
|
|
6
|
+
/** Запрос пачки записей по их именам (`attributeName`) — для достройки предков. */
|
|
7
|
+
export declare const buildNamesCondition: (attributeName: string, names: Array<string | number>) => string;
|
|
8
|
+
/** Запрос пачки записей по их значениям (`attributeValue`) — для восстановления `defaultValue`. */
|
|
9
|
+
export declare const buildValuesCondition: (attributeValue: string, values: Array<string | number>) => string;
|
|
10
|
+
/** Группирует выбранные id по уровню в объектное значение фильтра `{ l{N}: [ids] }`. */
|
|
11
|
+
export declare const buildFilterValue: (selected: Map<TreeId, number>) => TreeFilterValue;
|
|
12
|
+
/** Разбирает объектное значение фильтра в карту `id → level`. */
|
|
13
|
+
export declare const parseFilterValue: (value?: TreeFilterValue) => Map<TreeId, number>;
|
|
14
|
+
/** Стабильная сериализация выбора для сравнения (порядок не важен). */
|
|
15
|
+
export declare const serializeSelection: (selected: Map<TreeId, number>) => string;
|
|
16
|
+
/**
|
|
17
|
+
* Дозапрашивает цепочку предков вверх по `parentName` уровень за уровнем (батч `attributeName in
|
|
18
|
+
* (...)`), пока не достигнет уровня 1. Связь идёт по именам (`name`/`parentName`), т.к. `node.id`
|
|
19
|
+
* хранит значение (`attributeValue`). Возвращает исходные узлы вместе с предками.
|
|
20
|
+
*/
|
|
21
|
+
export declare const collectAncestors: (nodes: TreeItemProps[], loadByNames: (names: TreeId[]) => Promise<TreeItemProps[]>) => Promise<TreeItemProps[]>;
|
|
22
|
+
/**
|
|
23
|
+
* Собирает плоский набор узлов в дерево по связи `parentName` ↔ `name`. Узлы с подгруженными
|
|
24
|
+
* потомками раскрываются (`expanded` хранит `node.id` = значение); листья-папки без потомков
|
|
25
|
+
* получают `children = null` (ленивая подгрузка).
|
|
26
|
+
*/
|
|
27
|
+
export declare const assembleTree: (nodes: TreeItemProps[]) => {
|
|
28
|
+
roots: TreeItemProps[];
|
|
29
|
+
expanded: TreeId[];
|
|
30
|
+
};
|
|
@@ -326,9 +326,24 @@ export interface ConfigFilter {
|
|
|
326
326
|
relatedDataSource?: string;
|
|
327
327
|
defaultValue?: SelectedFilter["value"];
|
|
328
328
|
attributeAlias?: string;
|
|
329
|
+
/**
|
|
330
|
+
* Атрибут хранимого значения фильтра — то, что фильтр отдаёт потребителям (плейсхолдеры
|
|
331
|
+
* `%name`, для "tree" — `%name.lN`). Для "tree" служит ещё и идентичностью узла дерева
|
|
332
|
+
* (`TreeItemProps.id`). Если не задан — фолбэк на {@link ConfigFilter.attributeName}.
|
|
333
|
+
*/
|
|
329
334
|
attributeValue?: string;
|
|
330
335
|
attributeMin?: string;
|
|
331
336
|
attributeMax?: string;
|
|
337
|
+
/** Атрибут-имя записи — служебная связь дерева (`child.attributeParentName == parent.attributeName`); для "tree". */
|
|
338
|
+
attributeName?: string;
|
|
339
|
+
/** Атрибут-имя родителя — служебная связь дерева; для "tree". */
|
|
340
|
+
attributeParentName?: string;
|
|
341
|
+
/** Атрибут числового уровня (корень = 1) — для "tree". */
|
|
342
|
+
attributeLevel?: string;
|
|
343
|
+
/** Атрибут-флаг наличия детей (показ шеврона) — для "tree". */
|
|
344
|
+
attributeHasChildren?: string;
|
|
345
|
+
/** Единый лимит на запросы дерева (дети уровня, поиск) — для "tree". */
|
|
346
|
+
limit?: number;
|
|
332
347
|
valueType?: ConfigFilterValueType;
|
|
333
348
|
resetFilters?: string[];
|
|
334
349
|
}
|
|
@@ -345,11 +360,19 @@ export interface ChipOption {
|
|
|
345
360
|
color?: string;
|
|
346
361
|
icon?: string;
|
|
347
362
|
}
|
|
363
|
+
/**
|
|
364
|
+
* Значение иерархического фильтра "tree": объект «уровень → массив id».
|
|
365
|
+
* Ключи вида `l{N}` (l1, l3, ...); уровни без выбранных элементов не включаются.
|
|
366
|
+
* Пример: `{ l1: [1, 2], l3: [1023] }`.
|
|
367
|
+
*/
|
|
368
|
+
export type TreeFilterValue = Record<string, Array<string | number>>;
|
|
348
369
|
export interface SelectedFilter {
|
|
349
|
-
value: string | number | string[] | number[] | Date | Date[];
|
|
370
|
+
value: string | number | string[] | number[] | Date | Date[] | TreeFilterValue;
|
|
350
371
|
min?: string | number | Date;
|
|
351
372
|
max?: string | number | Date;
|
|
352
373
|
}
|
|
374
|
+
/** Значение фильтра без объектного варианта "tree" — для скалярных/массивных фильтров. */
|
|
375
|
+
export type ScalarFilterValue = Exclude<SelectedFilter["value"], TreeFilterValue>;
|
|
353
376
|
export interface ConfigLayer {
|
|
354
377
|
name: string;
|
|
355
378
|
opacity?: number;
|
|
@@ -412,7 +435,7 @@ export interface ConfigContainer {
|
|
|
412
435
|
options?: ConfigOptions;
|
|
413
436
|
header?: ConfigContainerHeader;
|
|
414
437
|
}
|
|
415
|
-
export type FilterType = "checkbox" | "rangeNumber" | "rangeDate" | "text" | "dropdown" | "barChart" | "chips";
|
|
438
|
+
export type FilterType = "checkbox" | "rangeNumber" | "rangeDate" | "text" | "dropdown" | "barChart" | "chips" | "tree";
|
|
416
439
|
/**
|
|
417
440
|
* Литеральный union значений {@link ConfigContainerChild.type}.
|
|
418
441
|
*
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { SelectedFilter, TreeFilterValue } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Объектное значение иерархического фильтра "tree" («уровень → массив id»),
|
|
4
|
+
* в отличие от скалярных/массивных значений остальных фильтров.
|
|
5
|
+
*/
|
|
6
|
+
export declare const isTreeFilterValue: (value?: SelectedFilter["value"]) => value is TreeFilterValue;
|
|
7
|
+
/**
|
|
8
|
+
* Подставляет плейсхолдеры уровней `%name.l{N}` значениями id соответствующего уровня
|
|
9
|
+
* (формат `[id1,id2,...]` для оператора IN). Уровни, отсутствующие в значении (или пустые),
|
|
10
|
+
* не подставляются — плейсхолдер остаётся нетронутым, как и любой пустой `%`-плейсхолдер.
|
|
11
|
+
*/
|
|
12
|
+
export declare const applyTreeFilterToCondition: (condition: string, name: string, value: TreeFilterValue, isSingle?: boolean) => string;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { SelectedFilter, SelectedFilters } from '../types';
|
|
2
|
-
export declare const getSelectedFilterValue: (filterName: string, selectedFilters: SelectedFilters, defaultValue: SelectedFilter["value"]) => string | number | Date | (string | number | Date)[];
|
|
2
|
+
export declare const getSelectedFilterValue: (filterName: string, selectedFilters: SelectedFilters, defaultValue: SelectedFilter["value"]) => string | number | Date | import('../types').TreeFilterValue | (string | number | Date | import('../types').TreeFilterValue)[];
|
|
@@ -5,6 +5,7 @@ export * from './checkEqualOrIncludes';
|
|
|
5
5
|
export * from './checkIsLoading';
|
|
6
6
|
export * from './createConfigLayer';
|
|
7
7
|
export * from './createConfigPage';
|
|
8
|
+
export * from './applyTreeFilterToCondition';
|
|
8
9
|
export * from './createNewPageId';
|
|
9
10
|
export * from './eqlParametersToPayload';
|
|
10
11
|
export * from './formatChartRelatedValue';
|