@leav/ui 1.7.0 → 1.8.0-73498354

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 (122) hide show
  1. package/dist/__mocks__/common/library.d.ts +1 -0
  2. package/dist/_gqlTypes/index.d.ts +317 -113
  3. package/dist/_gqlTypes/index.js +142 -53
  4. package/dist/_gqlTypes/index.js.map +1 -1
  5. package/dist/_queries/attributes/attributeDetailsFragment.js +3 -0
  6. package/dist/_queries/attributes/attributeDetailsFragment.js.map +1 -1
  7. package/dist/_queries/attributes/getAttributeWithEmbeddedFields.d.ts +1 -1
  8. package/dist/_queries/libraries/libraryDetailsFragment.js +1 -0
  9. package/dist/_queries/libraries/libraryDetailsFragment.js.map +1 -1
  10. package/dist/components/AttributePicker/AttributesList/AttributesList.js +3 -7
  11. package/dist/components/AttributePicker/AttributesList/AttributesList.js.map +1 -1
  12. package/dist/components/EditLibraryModal/EditLibrary/EditLibraryAttributes/AttributesList/AttributesList.js +3 -7
  13. package/dist/components/EditLibraryModal/EditLibrary/EditLibraryAttributes/AttributesList/AttributesList.js.map +1 -1
  14. package/dist/components/Explorer/TableCell.js +9 -16
  15. package/dist/components/Explorer/TableCell.js.map +1 -1
  16. package/dist/components/Explorer/manage-view-settings/configure-display/view-type/SelectViewType.js +2 -2
  17. package/dist/components/Explorer/manage-view-settings/configure-display/view-type/SelectViewType.js.map +1 -1
  18. package/dist/components/Explorer/manage-view-settings/filter-items/FilterItems.js +3 -0
  19. package/dist/components/Explorer/manage-view-settings/filter-items/FilterItems.js.map +1 -1
  20. package/dist/components/Explorer/manage-view-settings/open-view-settings/useOpenViewSettings.js +2 -2
  21. package/dist/components/Explorer/manage-view-settings/open-view-settings/useOpenViewSettings.js.map +1 -1
  22. package/dist/components/Explorer/manage-view-settings/save-view/prepareViewForRequest.js +17 -8
  23. package/dist/components/Explorer/manage-view-settings/save-view/prepareViewForRequest.js.map +1 -1
  24. package/dist/components/Filters/_types.d.ts +12 -1
  25. package/dist/components/Filters/_types.js +2 -1
  26. package/dist/components/Filters/_types.js.map +1 -1
  27. package/dist/components/Filters/context/filtersReducer.js +3 -2
  28. package/dist/components/Filters/context/filtersReducer.js.map +1 -1
  29. package/dist/components/Filters/context/useGetTreeFilters.d.ts +8 -6
  30. package/dist/components/Filters/context/useGetTreeFilters.js +41 -18
  31. package/dist/components/Filters/context/useGetTreeFilters.js.map +1 -1
  32. package/dist/components/Filters/filter-items/CommonFilterItem.js +3 -3
  33. package/dist/components/Filters/filter-items/CommonFilterItem.js.map +1 -1
  34. package/dist/components/Filters/filter-items/filter-type/ColorAttributeDropDown.js +1 -1
  35. package/dist/components/Filters/filter-items/filter-type/ColorAttributeDropDown.js.map +1 -1
  36. package/dist/components/Filters/filter-items/filter-type/FilterDropdownContent.js +6 -2
  37. package/dist/components/Filters/filter-items/filter-type/FilterDropdownContent.js.map +1 -1
  38. package/dist/components/Filters/filter-items/filter-type/FilterValueListDropDown.js +4 -4
  39. package/dist/components/Filters/filter-items/filter-type/FilterValueListDropDown.js.map +1 -1
  40. package/dist/components/Filters/filter-items/filter-type/_types.d.ts +6 -1
  41. package/dist/components/Filters/filter-items/filter-type/_types.js.map +1 -1
  42. package/dist/components/Filters/filter-items/filter-type/smart-filter/SmartFilterAttributeDropdown.d.ts +2 -0
  43. package/dist/components/Filters/filter-items/filter-type/smart-filter/SmartFilterAttributeDropdown.js +106 -0
  44. package/dist/components/Filters/filter-items/filter-type/smart-filter/SmartFilterAttributeDropdown.js.map +1 -0
  45. package/dist/components/Filters/filter-items/filter-type/smart-filter/useGetSmartFilterData.d.ts +25 -0
  46. package/dist/components/Filters/filter-items/filter-type/smart-filter/useGetSmartFilterData.js +59 -0
  47. package/dist/components/Filters/filter-items/filter-type/smart-filter/useGetSmartFilterData.js.map +1 -0
  48. package/dist/components/Filters/filter-items/filter-type/smart-filter/useSmartFilerSearch.d.ts +5 -0
  49. package/dist/components/Filters/filter-items/filter-type/smart-filter/useSmartFilerSearch.js +25 -0
  50. package/dist/components/Filters/filter-items/filter-type/smart-filter/useSmartFilerSearch.js.map +1 -0
  51. package/dist/components/Filters/filter-items/filter-type/{TreeAttributeDropDown.d.ts → tree/TreeAttributeDropDown.d.ts} +1 -1
  52. package/dist/components/Filters/filter-items/filter-type/tree/TreeAttributeDropDown.js +131 -0
  53. package/dist/components/Filters/filter-items/filter-type/tree/TreeAttributeDropDown.js.map +1 -0
  54. package/dist/components/Filters/filter-items/filter-type/tree/useGetTreeData.d.ts +20 -0
  55. package/dist/components/Filters/filter-items/filter-type/tree/useGetTreeData.js +72 -0
  56. package/dist/components/Filters/filter-items/filter-type/tree/useGetTreeData.js.map +1 -0
  57. package/dist/components/Filters/filter-items/filter-type/tree/useTreesSearch.d.ts +7 -0
  58. package/dist/components/Filters/filter-items/filter-type/tree/useTreesSearch.js +36 -0
  59. package/dist/components/Filters/filter-items/filter-type/tree/useTreesSearch.js.map +1 -0
  60. package/dist/components/Filters/filter-items/filter-type/tree/utils/buildFlattenTreeMap.d.ts +2 -0
  61. package/dist/components/Filters/filter-items/filter-type/tree/utils/buildFlattenTreeMap.js +14 -0
  62. package/dist/components/Filters/filter-items/filter-type/tree/utils/buildFlattenTreeMap.js.map +1 -0
  63. package/dist/components/Filters/filter-items/filter-type/tree/utils/filterTreeByPermission.d.ts +2 -0
  64. package/dist/components/Filters/filter-items/filter-type/tree/utils/filterTreeByPermission.js +15 -0
  65. package/dist/components/Filters/filter-items/filter-type/tree/utils/filterTreeByPermission.js.map +1 -0
  66. package/dist/components/Filters/filter-items/filter-type/tree/utils/getSelectAllState.d.ts +5 -0
  67. package/dist/components/Filters/filter-items/filter-type/tree/utils/getSelectAllState.js +17 -0
  68. package/dist/components/Filters/filter-items/filter-type/tree/utils/getSelectAllState.js.map +1 -0
  69. package/dist/components/Filters/filter-items/{EmptyValueCheckbox.d.ts → shared/EmptyValueCheckbox.d.ts} +2 -1
  70. package/dist/components/Filters/filter-items/shared/EmptyValueCheckbox.js +20 -0
  71. package/dist/components/Filters/filter-items/shared/EmptyValueCheckbox.js.map +1 -0
  72. package/dist/components/Filters/filter-items/shared/FilterTreeNodeTitle.d.ts +5 -0
  73. package/dist/components/Filters/filter-items/shared/FilterTreeNodeTitle.js +18 -0
  74. package/dist/components/Filters/filter-items/shared/FilterTreeNodeTitle.js.map +1 -0
  75. package/dist/components/Filters/filter-items/shared/SelectAllCheckbox.d.ts +8 -0
  76. package/dist/components/Filters/filter-items/shared/SelectAllCheckbox.js +22 -0
  77. package/dist/components/Filters/filter-items/shared/SelectAllCheckbox.js.map +1 -0
  78. package/dist/components/Filters/prepareFiltersForRequest.js +10 -5
  79. package/dist/components/Filters/prepareFiltersForRequest.js.map +1 -1
  80. package/dist/components/Filters/useFilters.d.ts +542 -0
  81. package/dist/components/Filters/useTransformFilters.js +3 -0
  82. package/dist/components/Filters/useTransformFilters.js.map +1 -1
  83. package/dist/components/LibraryItemsList/hooks/useSearchReducer/_types.d.ts +2 -2
  84. package/dist/components/LibraryItemsList/hooks/useSearchReducer/_types.js.map +1 -1
  85. package/dist/components/LibraryItemsList/hooks/useSearchReducer/searchReducer.d.ts +2 -2
  86. package/dist/components/LibraryItemsList/hooks/useSearchReducer/searchReducer.js.map +1 -1
  87. package/dist/components/LibraryItemsList/hooks/useSearchReducer/useSearchReducer.d.ts +1 -1
  88. package/dist/components/Notifications/hooks/useNotificationSubscription.d.ts +9 -3
  89. package/dist/components/Notifications/hooks/useNotificationSubscription.js +2 -2
  90. package/dist/components/Notifications/hooks/useNotificationSubscription.js.map +1 -1
  91. package/dist/components/RecordEdition/EditRecordContent/antdUtils.js +2 -0
  92. package/dist/components/RecordEdition/EditRecordContent/antdUtils.js.map +1 -1
  93. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/tag/link-record/useLinkRecord.js +4 -1
  94. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/tag/link-record/useLinkRecord.js.map +1 -1
  95. package/dist/components/RecordEdition/EditRecordContent/uiElements/StandardField/StandardFieldValue/DSRichTextWrapper.js +1 -1
  96. package/dist/components/RecordEdition/EditRecordContent/uiElements/StandardField/StandardFieldValue/DSRichTextWrapper.js.map +1 -1
  97. package/dist/components/RecordEdition/EditRecordContent/uiElements/StandardField/StandardFieldValue/StandardFieldValue.js +2 -0
  98. package/dist/components/RecordEdition/EditRecordContent/uiElements/StandardField/StandardFieldValue/StandardFieldValue.js.map +1 -1
  99. package/dist/components/RecordHistory/RecordHistoryLogEntry.js +10 -2
  100. package/dist/components/RecordHistory/RecordHistoryLogEntry.js.map +1 -1
  101. package/dist/components/RecordHistory/_queries/recordHistoryQuery.d.ts +7 -0
  102. package/dist/components/RecordHistory/_queries/recordHistoryQuery.js +64 -0
  103. package/dist/components/RecordHistory/_queries/recordHistoryQuery.js.map +1 -0
  104. package/dist/components/RecordHistory/hooks/useFetchRecordHistory.js +5 -2
  105. package/dist/components/RecordHistory/hooks/useFetchRecordHistory.js.map +1 -1
  106. package/dist/components/RecordHistory/utils/extendedAttribute.d.ts +13 -0
  107. package/dist/components/RecordHistory/utils/extendedAttribute.js +40 -0
  108. package/dist/components/RecordHistory/utils/extendedAttribute.js.map +1 -0
  109. package/dist/components/SelectTreeNode/TreeNodeTitle.js +2 -2
  110. package/dist/components/SelectTreeNode/TreeNodeTitle.js.map +1 -1
  111. package/dist/hooks/useGetLibraryDetailExtendedQuery/useGetLibraryDetailExtendedQuery.d.ts +1 -1
  112. package/dist/hooks/useGetRecordUpdatesSubscription/useGetRecordUpdatesSubscription.d.ts +9 -3
  113. package/dist/hooks/useGetRecordValuesQuery/useGetRecordValuesQuery.js.map +1 -1
  114. package/dist/locales/en/shared.json +6 -2
  115. package/dist/locales/fr/shared.json +6 -2
  116. package/dist/types/records.d.ts +1 -0
  117. package/dist/types/records.js.map +1 -1
  118. package/package.json +8 -8
  119. package/dist/components/Filters/filter-items/EmptyValueCheckbox.js +0 -16
  120. package/dist/components/Filters/filter-items/EmptyValueCheckbox.js.map +0 -1
  121. package/dist/components/Filters/filter-items/filter-type/TreeAttributeDropDown.js +0 -71
  122. package/dist/components/Filters/filter-items/filter-type/TreeAttributeDropDown.js.map +0 -1
@@ -0,0 +1,131 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ // Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06
3
+ // This file is released under LGPL V3
4
+ // License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
5
+ import { useMemo, useState } from 'react';
6
+ import styled from 'styled-components';
7
+ import { KitDivider, KitLoader, KitSpace, KitTree, KitTypography } from 'aristid-ds';
8
+ import { useGetTreeData } from './useGetTreeData';
9
+ import { ErrorDisplay } from '../../../../../components/ErrorDisplay';
10
+ import { useSharedTranslation } from '../../../../../hooks/useSharedTranslation';
11
+ import { useTreesSearch } from './useTreesSearch';
12
+ import { useFiltersContext } from '../../../../../components/Filters/useFiltersContext';
13
+ import { EmptyValueCheckbox } from '../../shared/EmptyValueCheckbox';
14
+ import { SelectAllCheckbox } from '../../shared/SelectAllCheckbox';
15
+ import { buildFlattenTree } from './utils/buildFlattenTreeMap';
16
+ import { getSelectAllState } from './utils/getSelectAllState';
17
+ import { filterTreeByPermission } from './utils/filterTreeByPermission';
18
+ const ScrollableContent = styled.div `
19
+ max-height: 182px; /* Equal to 5.5 nodes of KitTree */
20
+ overflow-y: auto;
21
+ overflow-x: hidden;
22
+ width: 100%;
23
+ `;
24
+ const FilteredTreeTitle = styled(KitTypography.Text) `
25
+ color: var(--general-colors-neutral-grey-500);
26
+ `;
27
+ const FilteredTreeSpacer = styled(KitSpace) `
28
+ width: 100%;
29
+ `;
30
+ const DropdownContentWrapper = styled(KitSpace) `
31
+ width: 327px;
32
+ justify-content: center;
33
+ `;
34
+ export const TreeAttributeDropDown = ({ filter, onFilterChange, }) => {
35
+ const { t } = useSharedTranslation();
36
+ const { filtersData } = useFiltersContext();
37
+ const { treeData, isLoading, error } = useGetTreeData({
38
+ treeId: filter.attribute.linkedTree?.id ?? '',
39
+ attributeId: filter.attribute.id,
40
+ libraryId: filtersData.libraryId,
41
+ });
42
+ // Split treeData based on accessRecordByDefaultPermission
43
+ const visibleByDefaultTree = useMemo(() => filterTreeByPermission(treeData, true), [treeData]);
44
+ const hiddenByDefaultTree = useMemo(() => filterTreeByPermission(treeData, false), [treeData]);
45
+ const { filteredVisibleByDefaultTree, filteredHiddenByDefaultTree, expandedNodeIdsFromSearch, SearchInput } = useTreesSearch(visibleByDefaultTree, hiddenByDefaultTree);
46
+ const [expandedNodeIdsFromUser, setExpandedNodeIdsFromUser] = useState([]);
47
+ const selectedNodesIds = (filter.nodes ?? []).map(node => node.nodeId);
48
+ const areBothTreesFilled = visibleByDefaultTree.length > 0 && hiddenByDefaultTree.length > 0;
49
+ // Build flatten trees to optimize the search and selection of nodes in handling functions
50
+ const flattenTreeData = useMemo(() => buildFlattenTree(treeData), [treeData]);
51
+ const flattenVisibleByDefaultTree = useMemo(() => buildFlattenTree(visibleByDefaultTree), [visibleByDefaultTree]);
52
+ const flattenHiddenByDefaultTree = useMemo(() => buildFlattenTree(hiddenByDefaultTree), [hiddenByDefaultTree]);
53
+ const _handleOnSelectEmptyValue = (selected) => {
54
+ onFilterChange({
55
+ ...filter,
56
+ withEmptyValues: selected,
57
+ });
58
+ };
59
+ const _handleOnSelect = (node, selected) => {
60
+ let newSelectedIds;
61
+ if (selected) {
62
+ newSelectedIds = [...selectedNodesIds, node.id];
63
+ }
64
+ else {
65
+ newSelectedIds = selectedNodesIds.filter(selectedValue => selectedValue !== node.id);
66
+ }
67
+ const selectedNodes = newSelectedIds
68
+ .map(nodeId => flattenTreeData.get(nodeId))
69
+ .filter((selectedNode) => Boolean(selectedNode));
70
+ onFilterChange({
71
+ ...filter,
72
+ nodes: selectedNodes.map(selectedNode => ({ nodeId: selectedNode.id, libraryId: selectedNode.libraryId })),
73
+ value: selectedNodes.map(selectedNode => selectedNode.recordId),
74
+ formattedValue: selectedNodes.map(selectedNode => selectedNode.title),
75
+ });
76
+ };
77
+ const _handleOnSelectAll = (treeToSelect, isSelected) => {
78
+ const treeNodeIds = Array.from(treeToSelect.keys());
79
+ // Using Set to avoid duplicates
80
+ const newSelectedIds = isSelected
81
+ ? [...new Set([...selectedNodesIds, ...treeNodeIds])]
82
+ : selectedNodesIds.filter(id => !treeNodeIds.includes(id));
83
+ const selectedNodes = newSelectedIds
84
+ .map(nodeId => flattenTreeData.get(nodeId))
85
+ .filter((selectedNode) => Boolean(selectedNode));
86
+ onFilterChange({
87
+ ...filter,
88
+ nodes: selectedNodes.map(selectedNode => ({
89
+ nodeId: selectedNode.id,
90
+ libraryId: selectedNode.libraryId,
91
+ })),
92
+ value: selectedNodes.map(selectedNode => selectedNode.recordId),
93
+ formattedValue: selectedNodes.map(selectedNode => selectedNode.title),
94
+ });
95
+ };
96
+ const _handleOnSelectAllVisibleByDefault = (isSelected) => _handleOnSelectAll(flattenVisibleByDefaultTree, isSelected);
97
+ const _handleOnSelectAllHiddenByDefault = (isSelected) => _handleOnSelectAll(flattenHiddenByDefaultTree, isSelected);
98
+ const { allSelected: allVisibleSelected, indeterminate: visibleIndeterminate } = getSelectAllState(selectedNodesIds, flattenVisibleByDefaultTree);
99
+ const { allSelected: allHiddenSelected, indeterminate: hiddenIndeterminate } = getSelectAllState(selectedNodesIds, flattenHiddenByDefaultTree);
100
+ const treeCommonProps = {
101
+ selectedKeys: selectedNodesIds,
102
+ checkedKeys: selectedNodesIds,
103
+ defaultExpandedKeys: selectedNodesIds,
104
+ expandedKeys: [...selectedNodesIds, ...expandedNodeIdsFromUser, ...expandedNodeIdsFromSearch],
105
+ autoExpandParent: true,
106
+ checkable: true,
107
+ checkStrictly: true,
108
+ multiple: true,
109
+ onExpand: expandedKeys => {
110
+ setExpandedNodeIdsFromUser(expandedKeys);
111
+ },
112
+ onCheck: (_, info) => {
113
+ const node = info.node;
114
+ _handleOnSelect(node, info.checked);
115
+ },
116
+ onSelect: (_, info) => {
117
+ const node = info.node;
118
+ _handleOnSelect(node, info.selected);
119
+ },
120
+ };
121
+ if (isLoading) {
122
+ return (_jsx(DropdownContentWrapper, { children: _jsx(KitLoader, {}) }));
123
+ }
124
+ if (error) {
125
+ return (_jsx(DropdownContentWrapper, { children: _jsx(ErrorDisplay, { message: error.message }) }));
126
+ }
127
+ return (_jsxs(DropdownContentWrapper, { direction: "vertical", size: "xs", children: [SearchInput, areBothTreesFilled ? (_jsxs(_Fragment, { children: [_jsx(EmptyValueCheckbox, { onSelect: _handleOnSelectEmptyValue, filter: filter }), _jsxs(FilteredTreeSpacer, { direction: "vertical", size: "xxs", children: [_jsx(FilteredTreeTitle, { size: "fontSize5", weight: "medium", children: t('filters.visible-by-default') }), _jsxs(ScrollableContent, { children: [_jsx(SelectAllCheckbox, { checked: allVisibleSelected, indeterminate: visibleIndeterminate, onChange: _handleOnSelectAllVisibleByDefault }), _jsx(KitTree, { treeData: filteredVisibleByDefaultTree, ...treeCommonProps })] })] }), _jsx(KitDivider, { noMargin: true }), _jsxs(FilteredTreeSpacer, { direction: "vertical", size: "xxs", children: [_jsx(FilteredTreeTitle, { size: "fontSize5", weight: "medium", children: t('filters.hidden-by-default') }), _jsxs(ScrollableContent, { children: [_jsx(SelectAllCheckbox, { checked: allHiddenSelected, indeterminate: hiddenIndeterminate, onChange: _handleOnSelectAllHiddenByDefault }), _jsx(KitTree, { treeData: filteredHiddenByDefaultTree, ...treeCommonProps })] })] })] })) : (_jsxs(ScrollableContent, { children: [_jsx(EmptyValueCheckbox, { onSelect: _handleOnSelectEmptyValue, filter: filter }), _jsx(SelectAllCheckbox, { checked: visibleByDefaultTree.length > 0 ? allVisibleSelected : allHiddenSelected, indeterminate: visibleByDefaultTree.length > 0 ? visibleIndeterminate : hiddenIndeterminate, onChange: visibleByDefaultTree.length > 0
128
+ ? _handleOnSelectAllVisibleByDefault
129
+ : _handleOnSelectAllHiddenByDefault }), _jsx(KitTree, { treeData: visibleByDefaultTree.length > 0 ? filteredVisibleByDefaultTree : filteredHiddenByDefaultTree, ...treeCommonProps })] }))] }));
130
+ };
131
+ //# sourceMappingURL=TreeAttributeDropDown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TreeAttributeDropDown.js","sourceRoot":"","sources":["../../../../../../src/components/Filters/filter-items/filter-type/tree/TreeAttributeDropDown.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {type ComponentProps, type FunctionComponent, type Key, useMemo, useState} from 'react';\nimport {type IFilterChildrenTreeDropDownProps} from '../_types';\nimport styled from 'styled-components';\nimport {KitDivider, KitLoader, KitSpace, KitTree, KitTypography} from 'aristid-ds';\nimport {type EventDataNode} from 'antd/lib/tree';\nimport {type ITreeNode, useGetTreeData} from './useGetTreeData';\nimport {ErrorDisplay} from '_ui/components/ErrorDisplay';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {useTreesSearch} from './useTreesSearch';\nimport {useFiltersContext} from '_ui/components/Filters/useFiltersContext';\nimport {EmptyValueCheckbox} from '../../shared/EmptyValueCheckbox';\nimport {SelectAllCheckbox} from '../../shared/SelectAllCheckbox';\nimport {buildFlattenTree} from './utils/buildFlattenTreeMap';\nimport {getSelectAllState} from './utils/getSelectAllState';\nimport {filterTreeByPermission} from './utils/filterTreeByPermission';\n\nconst ScrollableContent = styled.div`\n max-height: 182px; /* Equal to 5.5 nodes of KitTree */\n overflow-y: auto;\n overflow-x: hidden;\n width: 100%;\n`;\n\nconst FilteredTreeTitle = styled(KitTypography.Text)`\n color: var(--general-colors-neutral-grey-500);\n`;\n\nconst FilteredTreeSpacer = styled(KitSpace)`\n width: 100%;\n`;\n\nconst DropdownContentWrapper = styled(KitSpace)`\n width: 327px;\n justify-content: center;\n`;\n\nexport const TreeAttributeDropDown: FunctionComponent<IFilterChildrenTreeDropDownProps> = ({\n filter,\n onFilterChange,\n}) => {\n const {t} = useSharedTranslation();\n const {filtersData} = useFiltersContext();\n const {treeData, isLoading, error} = useGetTreeData({\n treeId: filter.attribute.linkedTree?.id ?? '',\n attributeId: filter.attribute.id,\n libraryId: filtersData.libraryId,\n });\n\n // Split treeData based on accessRecordByDefaultPermission\n const visibleByDefaultTree = useMemo(() => filterTreeByPermission(treeData, true), [treeData]);\n const hiddenByDefaultTree = useMemo(() => filterTreeByPermission(treeData, false), [treeData]);\n\n const {filteredVisibleByDefaultTree, filteredHiddenByDefaultTree, expandedNodeIdsFromSearch, SearchInput} =\n useTreesSearch(visibleByDefaultTree, hiddenByDefaultTree);\n\n const [expandedNodeIdsFromUser, setExpandedNodeIdsFromUser] = useState<Key[]>([]);\n\n const selectedNodesIds = (filter.nodes ?? []).map(node => node.nodeId);\n const areBothTreesFilled = visibleByDefaultTree.length > 0 && hiddenByDefaultTree.length > 0;\n\n // Build flatten trees to optimize the search and selection of nodes in handling functions\n const flattenTreeData = useMemo(() => buildFlattenTree(treeData), [treeData]);\n const flattenVisibleByDefaultTree = useMemo(() => buildFlattenTree(visibleByDefaultTree), [visibleByDefaultTree]);\n const flattenHiddenByDefaultTree = useMemo(() => buildFlattenTree(hiddenByDefaultTree), [hiddenByDefaultTree]);\n\n const _handleOnSelectEmptyValue = (selected: boolean) => {\n onFilterChange({\n ...filter,\n withEmptyValues: selected,\n });\n };\n\n const _handleOnSelect = (node: ITreeNode, selected: boolean) => {\n let newSelectedIds: string[];\n\n if (selected) {\n newSelectedIds = [...selectedNodesIds, node.id];\n } else {\n newSelectedIds = selectedNodesIds.filter(selectedValue => selectedValue !== node.id);\n }\n\n const selectedNodes = newSelectedIds\n .map(nodeId => flattenTreeData.get(nodeId))\n .filter((selectedNode): selectedNode is ITreeNode => Boolean(selectedNode));\n\n onFilterChange({\n ...filter,\n nodes: selectedNodes.map(selectedNode => ({nodeId: selectedNode.id, libraryId: selectedNode.libraryId})),\n value: selectedNodes.map(selectedNode => selectedNode.recordId),\n formattedValue: selectedNodes.map(selectedNode => selectedNode.title),\n });\n };\n\n const _handleOnSelectAll = (treeToSelect: Map<string, ITreeNode>, isSelected: boolean) => {\n const treeNodeIds = Array.from(treeToSelect.keys());\n\n // Using Set to avoid duplicates\n const newSelectedIds = isSelected\n ? [...new Set([...selectedNodesIds, ...treeNodeIds])]\n : selectedNodesIds.filter(id => !treeNodeIds.includes(id));\n\n const selectedNodes = newSelectedIds\n .map(nodeId => flattenTreeData.get(nodeId))\n .filter((selectedNode): selectedNode is ITreeNode => Boolean(selectedNode));\n\n onFilterChange({\n ...filter,\n nodes: selectedNodes.map(selectedNode => ({\n nodeId: selectedNode.id,\n libraryId: selectedNode.libraryId,\n })),\n value: selectedNodes.map(selectedNode => selectedNode.recordId),\n formattedValue: selectedNodes.map(selectedNode => selectedNode.title),\n });\n };\n\n const _handleOnSelectAllVisibleByDefault = (isSelected: boolean) =>\n _handleOnSelectAll(flattenVisibleByDefaultTree, isSelected);\n\n const _handleOnSelectAllHiddenByDefault = (isSelected: boolean) =>\n _handleOnSelectAll(flattenHiddenByDefaultTree, isSelected);\n\n const {allSelected: allVisibleSelected, indeterminate: visibleIndeterminate} = getSelectAllState(\n selectedNodesIds,\n flattenVisibleByDefaultTree,\n );\n\n const {allSelected: allHiddenSelected, indeterminate: hiddenIndeterminate} = getSelectAllState(\n selectedNodesIds,\n flattenHiddenByDefaultTree,\n );\n\n const treeCommonProps: ComponentProps<typeof KitTree> = {\n selectedKeys: selectedNodesIds,\n checkedKeys: selectedNodesIds,\n defaultExpandedKeys: selectedNodesIds,\n expandedKeys: [...selectedNodesIds, ...expandedNodeIdsFromUser, ...expandedNodeIdsFromSearch],\n autoExpandParent: true,\n checkable: true,\n checkStrictly: true,\n multiple: true,\n onExpand: expandedKeys => {\n setExpandedNodeIdsFromUser(expandedKeys);\n },\n onCheck: (_, info) => {\n const node = info.node as EventDataNode<ITreeNode>;\n _handleOnSelect(node, info.checked);\n },\n onSelect: (_, info) => {\n const node = info.node as EventDataNode<ITreeNode>;\n _handleOnSelect(node, info.selected);\n },\n };\n\n if (isLoading) {\n return (\n <DropdownContentWrapper>\n <KitLoader />\n </DropdownContentWrapper>\n );\n }\n\n if (error) {\n return (\n <DropdownContentWrapper>\n <ErrorDisplay message={error.message} />\n </DropdownContentWrapper>\n );\n }\n\n return (\n <DropdownContentWrapper direction=\"vertical\" size=\"xs\">\n {SearchInput}\n {areBothTreesFilled ? (\n <>\n <EmptyValueCheckbox onSelect={_handleOnSelectEmptyValue} filter={filter} />\n <FilteredTreeSpacer direction=\"vertical\" size=\"xxs\">\n <FilteredTreeTitle size=\"fontSize5\" weight=\"medium\">\n {t('filters.visible-by-default')}\n </FilteredTreeTitle>\n <ScrollableContent>\n <SelectAllCheckbox\n checked={allVisibleSelected}\n indeterminate={visibleIndeterminate}\n onChange={_handleOnSelectAllVisibleByDefault}\n />\n <KitTree treeData={filteredVisibleByDefaultTree} {...treeCommonProps} />\n </ScrollableContent>\n </FilteredTreeSpacer>\n <KitDivider noMargin />\n <FilteredTreeSpacer direction=\"vertical\" size=\"xxs\">\n <FilteredTreeTitle size=\"fontSize5\" weight=\"medium\">\n {t('filters.hidden-by-default')}\n </FilteredTreeTitle>\n <ScrollableContent>\n <SelectAllCheckbox\n checked={allHiddenSelected}\n indeterminate={hiddenIndeterminate}\n onChange={_handleOnSelectAllHiddenByDefault}\n />\n <KitTree treeData={filteredHiddenByDefaultTree} {...treeCommonProps} />\n </ScrollableContent>\n </FilteredTreeSpacer>\n </>\n ) : (\n <ScrollableContent>\n <EmptyValueCheckbox onSelect={_handleOnSelectEmptyValue} filter={filter} />\n <SelectAllCheckbox\n checked={visibleByDefaultTree.length > 0 ? allVisibleSelected : allHiddenSelected}\n indeterminate={visibleByDefaultTree.length > 0 ? visibleIndeterminate : hiddenIndeterminate}\n onChange={\n visibleByDefaultTree.length > 0\n ? _handleOnSelectAllVisibleByDefault\n : _handleOnSelectAllHiddenByDefault\n }\n />\n <KitTree\n treeData={\n visibleByDefaultTree.length > 0 ? filteredVisibleByDefaultTree : filteredHiddenByDefaultTree\n }\n {...treeCommonProps}\n />\n </ScrollableContent>\n )}\n </DropdownContentWrapper>\n );\n};\n"]}
@@ -0,0 +1,20 @@
1
+ export interface ITreeNode {
2
+ title: string;
3
+ id: string;
4
+ key: string;
5
+ children: ITreeNode[];
6
+ accessRecordByDefaultPermission?: boolean;
7
+ libraryId: string;
8
+ recordId: string;
9
+ }
10
+ interface IUseGetTreeDataProps {
11
+ treeId: string;
12
+ attributeId: string;
13
+ libraryId: string;
14
+ }
15
+ export declare const useGetTreeData: ({ treeId, attributeId, libraryId }: IUseGetTreeDataProps) => {
16
+ treeData: ITreeNode[];
17
+ isLoading: boolean;
18
+ error: Error;
19
+ };
20
+ export {};
@@ -0,0 +1,72 @@
1
+ // Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06
2
+ // This file is released under LGPL V3
3
+ // License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
4
+ import { useEffect, useState } from 'react';
5
+ import { useGetTreeNodeChildrenWithAccessByDefaultPermissionQueryLazyQuery } from '../../../../../_gqlTypes';
6
+ import { defaultPaginationPageSize } from '../../../../../constants';
7
+ export const useGetTreeData = ({ treeId, attributeId, libraryId }) => {
8
+ const [loadTreeContent] = useGetTreeNodeChildrenWithAccessByDefaultPermissionQueryLazyQuery();
9
+ const [treeData, setTreeData] = useState([]);
10
+ const [isLoading, setIsLoading] = useState(true);
11
+ const [error, setError] = useState(null);
12
+ const _fetchChildrenPage = async (parentNodeKey, offset) => {
13
+ const { data } = await loadTreeContent({
14
+ variables: {
15
+ treeId,
16
+ node: parentNodeKey,
17
+ pagination: { offset, limit: defaultPaginationPageSize },
18
+ accessRecordByDefaultPermission: {
19
+ attributeId,
20
+ libraryId,
21
+ },
22
+ },
23
+ });
24
+ const { list, totalCount } = data?.treeNodeChildren ?? { list: [], totalCount: 0 };
25
+ const nodes = await Promise.all(list.map(async (node) => {
26
+ const children = node.childrenCount ? await _fetchAllChildren(node.id) : [];
27
+ return {
28
+ title: node.record.whoAmI.label || node.record.whoAmI.id,
29
+ id: node.id,
30
+ key: node.id,
31
+ children,
32
+ accessRecordByDefaultPermission: node.accessRecordByDefaultPermission,
33
+ libraryId: node.record.whoAmI.library.id,
34
+ recordId: node.record.id,
35
+ };
36
+ }));
37
+ return { nodes, totalCount };
38
+ };
39
+ const _fetchAllChildren = async (parentNodeKey, offset = 0, accumulated = []) => {
40
+ const { nodes, totalCount } = await _fetchChildrenPage(parentNodeKey, offset);
41
+ const allNodes = [...accumulated, ...nodes];
42
+ const nextOffset = offset + defaultPaginationPageSize;
43
+ if (nextOffset < totalCount) {
44
+ return _fetchAllChildren(parentNodeKey, nextOffset, allNodes);
45
+ }
46
+ return allNodes;
47
+ };
48
+ useEffect(() => {
49
+ if (!treeId) {
50
+ setTreeData([]);
51
+ setIsLoading(false);
52
+ return;
53
+ }
54
+ const loadTree = async () => {
55
+ setIsLoading(true);
56
+ setError(null);
57
+ try {
58
+ const children = await _fetchAllChildren(null);
59
+ setTreeData(children);
60
+ }
61
+ catch (err) {
62
+ setError(err instanceof Error ? err : new Error('Failed to load tree'));
63
+ }
64
+ finally {
65
+ setIsLoading(false);
66
+ }
67
+ };
68
+ loadTree();
69
+ }, [treeId, attributeId, libraryId]);
70
+ return { treeData, isLoading, error };
71
+ };
72
+ //# sourceMappingURL=useGetTreeData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGetTreeData.js","sourceRoot":"","sources":["../../../../../../src/components/Filters/filter-items/filter-type/tree/useGetTreeData.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {useEffect, useState} from 'react';\nimport {useGetTreeNodeChildrenWithAccessByDefaultPermissionQueryLazyQuery} from '_ui/_gqlTypes';\nimport {defaultPaginationPageSize} from '_ui/constants';\n\nexport interface ITreeNode {\n title: string;\n id: string;\n key: string;\n children: ITreeNode[];\n accessRecordByDefaultPermission?: boolean;\n libraryId: string;\n recordId: string;\n}\n\ninterface IUseGetTreeDataProps {\n treeId: string;\n attributeId: string;\n libraryId: string;\n}\n\nexport const useGetTreeData = ({treeId, attributeId, libraryId}: IUseGetTreeDataProps) => {\n const [loadTreeContent] = useGetTreeNodeChildrenWithAccessByDefaultPermissionQueryLazyQuery();\n const [treeData, setTreeData] = useState<ITreeNode[]>([]);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const _fetchChildrenPage = async (parentNodeKey: string | null, offset: number) => {\n const {data} = await loadTreeContent({\n variables: {\n treeId,\n node: parentNodeKey,\n pagination: {offset, limit: defaultPaginationPageSize},\n accessRecordByDefaultPermission: {\n attributeId,\n libraryId,\n },\n },\n });\n\n const {list, totalCount} = data?.treeNodeChildren ?? {list: [], totalCount: 0};\n\n const nodes = await Promise.all(\n list.map(async node => {\n const children = node.childrenCount ? await _fetchAllChildren(node.id) : [];\n\n return {\n title: node.record.whoAmI.label || node.record.whoAmI.id,\n id: node.id,\n key: node.id,\n children,\n accessRecordByDefaultPermission: node.accessRecordByDefaultPermission,\n libraryId: node.record.whoAmI.library.id,\n recordId: node.record.id,\n };\n }),\n );\n\n return {nodes, totalCount};\n };\n\n const _fetchAllChildren = async (\n parentNodeKey: string | null,\n offset = 0,\n accumulated: ITreeNode[] = [],\n ): Promise<ITreeNode[]> => {\n const {nodes, totalCount} = await _fetchChildrenPage(parentNodeKey, offset);\n const allNodes = [...accumulated, ...nodes];\n\n const nextOffset = offset + defaultPaginationPageSize;\n if (nextOffset < totalCount) {\n return _fetchAllChildren(parentNodeKey, nextOffset, allNodes);\n }\n\n return allNodes;\n };\n\n useEffect(() => {\n if (!treeId) {\n setTreeData([]);\n setIsLoading(false);\n return;\n }\n\n const loadTree = async () => {\n setIsLoading(true);\n setError(null);\n try {\n const children = await _fetchAllChildren(null);\n setTreeData(children);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to load tree'));\n } finally {\n setIsLoading(false);\n }\n };\n\n loadTree();\n }, [treeId, attributeId, libraryId]);\n\n return {treeData, isLoading, error};\n};\n"]}
@@ -0,0 +1,7 @@
1
+ import { type ITreeNode } from './useGetTreeData';
2
+ export declare const useTreesSearch: (visibleByDefaultTree: ITreeNode[], hiddenByDefaultTree: ITreeNode[]) => {
3
+ filteredVisibleByDefaultTree: ITreeNode[];
4
+ filteredHiddenByDefaultTree: ITreeNode[];
5
+ expandedNodeIdsFromSearch: string[];
6
+ SearchInput: JSX.Element;
7
+ };
@@ -0,0 +1,36 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06
3
+ // This file is released under LGPL V3
4
+ // License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
5
+ import { KitInput } from 'aristid-ds';
6
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
7
+ import { faSearch } from '@fortawesome/free-solid-svg-icons';
8
+ import { useSharedTranslation } from '../../../../../hooks/useSharedTranslation';
9
+ import { useState } from 'react';
10
+ export const useTreesSearch = (visibleByDefaultTree, hiddenByDefaultTree) => {
11
+ const { t } = useSharedTranslation();
12
+ const [searchValue, setSearchValue] = useState('');
13
+ const normalizedSearch = searchValue.trim().toLowerCase();
14
+ const nodeIds = [];
15
+ const _filterNodes = (nodes) => nodes
16
+ .map(node => {
17
+ const filteredChildren = node.children ? _filterNodes(node.children) : [];
18
+ const matchesSelf = node.title.toLowerCase().includes(normalizedSearch);
19
+ if (!matchesSelf && filteredChildren.length === 0) {
20
+ return null;
21
+ }
22
+ nodeIds.push(node.id);
23
+ return {
24
+ ...node,
25
+ children: filteredChildren,
26
+ };
27
+ })
28
+ .filter((node) => node !== null);
29
+ return {
30
+ filteredVisibleByDefaultTree: !normalizedSearch ? visibleByDefaultTree : _filterNodes(visibleByDefaultTree),
31
+ filteredHiddenByDefaultTree: !normalizedSearch ? hiddenByDefaultTree : _filterNodes(hiddenByDefaultTree),
32
+ expandedNodeIdsFromSearch: !normalizedSearch ? [] : nodeIds,
33
+ SearchInput: (_jsx(KitInput, { prefix: _jsx(FontAwesomeIcon, { icon: faSearch }), placeholder: t('global.search'), value: searchValue, onChange: e => setSearchValue(e.target.value), allowClear: true })),
34
+ };
35
+ };
36
+ //# sourceMappingURL=useTreesSearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTreesSearch.js","sourceRoot":"","sources":["../../../../../../src/components/Filters/filter-items/filter-type/tree/useTreesSearch.tsx"],"names":[],"mappings":";AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AAEpC,OAAO,EAAC,eAAe,EAAC,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAC,QAAQ,EAAC,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAC,QAAQ,EAAC,MAAM,OAAO,CAAC;AAE/B,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,oBAAiC,EAAE,mBAAgC,EAAE,EAAE;IAClG,MAAM,EAAC,CAAC,EAAC,GAAG,oBAAoB,EAAE,CAAC;IACnC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEnD,MAAM,gBAAgB,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1D,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,MAAM,YAAY,GAAG,CAAC,KAAkB,EAAe,EAAE,CACrD,KAAK;SACA,GAAG,CAAC,IAAI,CAAC,EAAE;QACR,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QAExE,IAAI,CAAC,WAAW,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChD,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEtB,OAAO;YACH,GAAG,IAAI;YACP,QAAQ,EAAE,gBAAgB;SAC7B,CAAC;IACN,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,IAAI,EAAqB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAE5D,OAAO;QACH,4BAA4B,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,YAAY,CAAC,oBAAoB,CAAC;QAC3G,2BAA2B,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,YAAY,CAAC,mBAAmB,CAAC;QACxG,yBAAyB,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO;QAC3D,WAAW,EAAE,CACT,KAAC,QAAQ,IACL,MAAM,EAAE,KAAC,eAAe,IAAC,IAAI,EAAE,QAAQ,GAAI,EAC3C,WAAW,EAAE,CAAC,CAAC,eAAe,CAAC,EAC/B,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC7C,UAAU,SACZ,CACL;KACJ,CAAC;AACN,CAAC,CAAC","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {KitInput} from 'aristid-ds';\nimport {type ITreeNode} from './useGetTreeData';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {faSearch} from '@fortawesome/free-solid-svg-icons';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {useState} from 'react';\n\nexport const useTreesSearch = (visibleByDefaultTree: ITreeNode[], hiddenByDefaultTree: ITreeNode[]) => {\n const {t} = useSharedTranslation();\n const [searchValue, setSearchValue] = useState('');\n\n const normalizedSearch = searchValue.trim().toLowerCase();\n const nodeIds: string[] = [];\n\n const _filterNodes = (nodes: ITreeNode[]): ITreeNode[] =>\n nodes\n .map(node => {\n const filteredChildren = node.children ? _filterNodes(node.children) : [];\n const matchesSelf = node.title.toLowerCase().includes(normalizedSearch);\n\n if (!matchesSelf && filteredChildren.length === 0) {\n return null;\n }\n\n nodeIds.push(node.id);\n\n return {\n ...node,\n children: filteredChildren,\n };\n })\n .filter((node): node is ITreeNode => node !== null);\n\n return {\n filteredVisibleByDefaultTree: !normalizedSearch ? visibleByDefaultTree : _filterNodes(visibleByDefaultTree),\n filteredHiddenByDefaultTree: !normalizedSearch ? hiddenByDefaultTree : _filterNodes(hiddenByDefaultTree),\n expandedNodeIdsFromSearch: !normalizedSearch ? [] : nodeIds,\n SearchInput: (\n <KitInput\n prefix={<FontAwesomeIcon icon={faSearch} />}\n placeholder={t('global.search')}\n value={searchValue}\n onChange={e => setSearchValue(e.target.value)}\n allowClear\n />\n ),\n };\n};\n"]}
@@ -0,0 +1,2 @@
1
+ import { type ITreeNode } from '../useGetTreeData';
2
+ export declare const buildFlattenTree: (nodes: ITreeNode[]) => Map<string, ITreeNode>;
@@ -0,0 +1,14 @@
1
+ export const buildFlattenTree = (nodes) => {
2
+ const treeMap = new Map();
3
+ const _buildFlattenTreeRecursive = (nodeList) => {
4
+ for (const node of nodeList) {
5
+ treeMap.set(node.id, node);
6
+ if (node.children && node.children.length > 0) {
7
+ _buildFlattenTreeRecursive(node.children);
8
+ }
9
+ }
10
+ };
11
+ _buildFlattenTreeRecursive(nodes);
12
+ return treeMap;
13
+ };
14
+ //# sourceMappingURL=buildFlattenTreeMap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildFlattenTreeMap.js","sourceRoot":"","sources":["../../../../../../../src/components/Filters/filter-items/filter-type/tree/utils/buildFlattenTreeMap.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAkB,EAA0B,EAAE;IAC3E,MAAM,OAAO,GAAG,IAAI,GAAG,EAAqB,CAAC;IAE7C,MAAM,0BAA0B,GAAG,CAAC,QAAqB,EAAE,EAAE;QACzD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAE3B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,0BAA0B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9C,CAAC;QACL,CAAC;IACL,CAAC,CAAC;IAEF,0BAA0B,CAAC,KAAK,CAAC,CAAC;IAElC,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {type ITreeNode} from '../useGetTreeData';\n\nexport const buildFlattenTree = (nodes: ITreeNode[]): Map<string, ITreeNode> => {\n const treeMap = new Map<string, ITreeNode>();\n\n const _buildFlattenTreeRecursive = (nodeList: ITreeNode[]) => {\n for (const node of nodeList) {\n treeMap.set(node.id, node);\n\n if (node.children && node.children.length > 0) {\n _buildFlattenTreeRecursive(node.children);\n }\n }\n };\n\n _buildFlattenTreeRecursive(nodes);\n\n return treeMap;\n};\n"]}
@@ -0,0 +1,2 @@
1
+ import { type ITreeNode } from '../useGetTreeData';
2
+ export declare const filterTreeByPermission: (nodes: ITreeNode[], accessRecordByDefaultPermission: boolean) => ITreeNode[];
@@ -0,0 +1,15 @@
1
+ export const filterTreeByPermission = (nodes, accessRecordByDefaultPermission) => {
2
+ const result = [];
3
+ for (const node of nodes) {
4
+ const filteredChildren = filterTreeByPermission(node.children, accessRecordByDefaultPermission);
5
+ const nodeMatchesPermission = node.accessRecordByDefaultPermission === accessRecordByDefaultPermission;
6
+ if (nodeMatchesPermission || filteredChildren.length > 0) {
7
+ result.push({
8
+ ...node,
9
+ children: filteredChildren,
10
+ });
11
+ }
12
+ }
13
+ return result;
14
+ };
15
+ //# sourceMappingURL=filterTreeByPermission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filterTreeByPermission.js","sourceRoot":"","sources":["../../../../../../../src/components/Filters/filter-items/filter-type/tree/utils/filterTreeByPermission.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAAkB,EAAE,+BAAwC,EAAe,EAAE;IAChH,MAAM,MAAM,GAAgB,EAAE,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,IAAI,CAAC,QAAQ,EAAE,+BAA+B,CAAC,CAAC;QAChG,MAAM,qBAAqB,GAAG,IAAI,CAAC,+BAA+B,KAAK,+BAA+B,CAAC;QAEvG,IAAI,qBAAqB,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvD,MAAM,CAAC,IAAI,CAAC;gBACR,GAAG,IAAI;gBACP,QAAQ,EAAE,gBAAgB;aAC7B,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {type ITreeNode} from '../useGetTreeData';\n\nexport const filterTreeByPermission = (nodes: ITreeNode[], accessRecordByDefaultPermission: boolean): ITreeNode[] => {\n const result: ITreeNode[] = [];\n\n for (const node of nodes) {\n const filteredChildren = filterTreeByPermission(node.children, accessRecordByDefaultPermission);\n const nodeMatchesPermission = node.accessRecordByDefaultPermission === accessRecordByDefaultPermission;\n\n if (nodeMatchesPermission || filteredChildren.length > 0) {\n result.push({\n ...node,\n children: filteredChildren,\n });\n }\n }\n\n return result;\n};\n"]}
@@ -0,0 +1,5 @@
1
+ import { type ITreeNode } from '../useGetTreeData';
2
+ export declare const getSelectAllState: (selectedNodesIds: string[], flattenTree: Map<string, ITreeNode>) => {
3
+ allSelected: boolean;
4
+ indeterminate: boolean;
5
+ };
@@ -0,0 +1,17 @@
1
+ export const getSelectAllState = (selectedNodesIds, flattenTree) => {
2
+ const totalCount = flattenTree.size;
3
+ if (totalCount === 0) {
4
+ return {
5
+ allSelected: false,
6
+ indeterminate: false,
7
+ };
8
+ }
9
+ const selectedCount = selectedNodesIds.filter(id => flattenTree.has(id)).length;
10
+ const allSelected = selectedCount === totalCount;
11
+ const indeterminate = selectedCount > 0 && !allSelected;
12
+ return {
13
+ allSelected,
14
+ indeterminate,
15
+ };
16
+ };
17
+ //# sourceMappingURL=getSelectAllState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSelectAllState.js","sourceRoot":"","sources":["../../../../../../../src/components/Filters/filter-items/filter-type/tree/utils/getSelectAllState.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,gBAA0B,EAAE,WAAmC,EAAE,EAAE;IACjG,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC;IAEpC,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO;YACH,WAAW,EAAE,KAAK;YAClB,aAAa,EAAE,KAAK;SACvB,CAAC;IACN,CAAC;IAED,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IAChF,MAAM,WAAW,GAAG,aAAa,KAAK,UAAU,CAAC;IACjD,MAAM,aAAa,GAAG,aAAa,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;IAExD,OAAO;QACH,WAAW;QACX,aAAa;KAChB,CAAC;AACN,CAAC,CAAC","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {type ITreeNode} from '../useGetTreeData';\n\nexport const getSelectAllState = (selectedNodesIds: string[], flattenTree: Map<string, ITreeNode>) => {\n const totalCount = flattenTree.size;\n\n if (totalCount === 0) {\n return {\n allSelected: false,\n indeterminate: false,\n };\n }\n\n const selectedCount = selectedNodesIds.filter(id => flattenTree.has(id)).length;\n const allSelected = selectedCount === totalCount;\n const indeterminate = selectedCount > 0 && !allSelected;\n\n return {\n allSelected,\n indeterminate,\n };\n};\n"]}
@@ -1,8 +1,9 @@
1
1
  import { type FunctionComponent } from 'react';
2
- import { type UIFilter } from '../_types';
2
+ import { type UIFilter } from '../../_types';
3
3
  interface IEmptyValueCheckboxProps {
4
4
  filter: UIFilter;
5
5
  onSelect: (selected: boolean) => void;
6
+ count?: number;
6
7
  }
7
8
  export declare const EmptyValueCheckbox: FunctionComponent<IEmptyValueCheckboxProps>;
8
9
  export {};
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import styled from 'styled-components';
3
+ import { KitTree } from 'aristid-ds';
4
+ import { useSharedTranslation } from '../../../../hooks/useSharedTranslation';
5
+ import { FilterTreeNodeTitle } from './FilterTreeNodeTitle';
6
+ const TreeStyled = styled(KitTree) `
7
+ span.ant-typography {
8
+ font-style: italic;
9
+ }
10
+ `;
11
+ const EMPTY_VALUE_KEY = '0';
12
+ export const EmptyValueCheckbox = ({ filter, onSelect, count }) => {
13
+ const { t } = useSharedTranslation();
14
+ const onChange = () => {
15
+ onSelect(!filter.withEmptyValues);
16
+ };
17
+ return (_jsx(TreeStyled, { checkable: true, treeData: [{ title: t('filters.empty-value'), key: EMPTY_VALUE_KEY, isLeaf: true }], titleRender: () => _jsx(FilterTreeNodeTitle, { title: t('filters.empty-value'), count: count }) // We don't need to use node from props as it's a static tree of one node
18
+ , checkedKeys: filter.withEmptyValues ? [EMPTY_VALUE_KEY] : [], selectedKeys: filter.withEmptyValues ? [EMPTY_VALUE_KEY] : [], onSelect: onChange, onCheck: onChange }));
19
+ };
20
+ //# sourceMappingURL=EmptyValueCheckbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmptyValueCheckbox.js","sourceRoot":"","sources":["../../../../../src/components/Filters/filter-items/shared/EmptyValueCheckbox.tsx"],"names":[],"mappings":";AAIA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAC,OAAO,EAAC,MAAM,YAAY,CAAC;AACnC,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAC,mBAAmB,EAAC,MAAM,uBAAuB,CAAC;AAQ1D,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;;;;CAIjC,CAAC;AAEF,MAAM,eAAe,GAAG,GAAG,CAAC;AAE5B,MAAM,CAAC,MAAM,kBAAkB,GAAgD,CAAC,EAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAC,EAAE,EAAE;IACzG,MAAM,EAAC,CAAC,EAAC,GAAG,oBAAoB,EAAE,CAAC;IAEnC,MAAM,QAAQ,GAAG,GAAG,EAAE;QAClB,QAAQ,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IACtC,CAAC,CAAC;IAEF,OAAO,CACH,KAAC,UAAU,IACP,SAAS,QACT,QAAQ,EAAE,CAAC,EAAC,KAAK,EAAE,CAAC,CAAC,qBAAqB,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC,EACjF,WAAW,EACP,GAAG,EAAE,CAAC,KAAC,mBAAmB,IAAC,KAAK,EAAE,CAAC,CAAC,qBAAqB,CAAC,EAAE,KAAK,EAAE,KAAK,GAAI,CAAC,yEAAyE;UAE1J,WAAW,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,EAC5D,YAAY,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,EAC7D,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,QAAQ,GACnB,CACL,CAAC;AACN,CAAC,CAAC","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {type FunctionComponent} from 'react';\nimport styled from 'styled-components';\nimport {KitTree} from 'aristid-ds';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {type UIFilter} from '../../_types';\nimport {FilterTreeNodeTitle} from './FilterTreeNodeTitle';\n\ninterface IEmptyValueCheckboxProps {\n filter: UIFilter;\n onSelect: (selected: boolean) => void;\n count?: number;\n}\n\nconst TreeStyled = styled(KitTree)`\n span.ant-typography {\n font-style: italic;\n }\n`;\n\nconst EMPTY_VALUE_KEY = '0';\n\nexport const EmptyValueCheckbox: FunctionComponent<IEmptyValueCheckboxProps> = ({filter, onSelect, count}) => {\n const {t} = useSharedTranslation();\n\n const onChange = () => {\n onSelect(!filter.withEmptyValues);\n };\n\n return (\n <TreeStyled\n checkable\n treeData={[{title: t('filters.empty-value'), key: EMPTY_VALUE_KEY, isLeaf: true}]}\n titleRender={\n () => <FilterTreeNodeTitle title={t('filters.empty-value')} count={count} /> // We don't need to use node from props as it's a static tree of one node\n }\n checkedKeys={filter.withEmptyValues ? [EMPTY_VALUE_KEY] : []}\n selectedKeys={filter.withEmptyValues ? [EMPTY_VALUE_KEY] : []}\n onSelect={onChange}\n onCheck={onChange}\n />\n );\n};\n"]}
@@ -0,0 +1,5 @@
1
+ export declare const FilterTreeNodeTitle: ({ title, count, ghosted, }: {
2
+ title: string;
3
+ count?: number;
4
+ ghosted?: boolean;
5
+ }) => JSX.Element;
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06
3
+ // This file is released under LGPL V3
4
+ // License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
5
+ import styled from 'styled-components';
6
+ import { KitIdCard, KitTag, KitTypography } from 'aristid-ds';
7
+ const NodeTitleWrapper = styled.div `
8
+ width: 100%;
9
+ display: grid;
10
+ grid-template-columns: 1fr auto;
11
+ align-items: center;
12
+ gap: 8px;
13
+ `;
14
+ export const FilterTreeNodeTitle = ({ title, count, ghosted = false, }) => (
15
+ // Ghosted nodes render must be handled manually in the KitTree component (ex in SmartFilterAttributeDropdown.tsx)
16
+ _jsxs(NodeTitleWrapper, { "data-ghosted": ghosted, children: [_jsx(KitTypography.Text, { size: "fontSize5", title: "" // Set an empty title to avoid the browser tooltip from being displayed as KitTypography already has a one
17
+ , ellipsis: true, children: title }), count !== undefined && (_jsx(KitTag, { type: ghosted ? 'neutral' : 'secondary', size: "small", children: _jsx(KitIdCard, { description: count }) }))] }));
18
+ //# sourceMappingURL=FilterTreeNodeTitle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterTreeNodeTitle.js","sourceRoot":"","sources":["../../../../../src/components/Filters/filter-items/shared/FilterTreeNodeTitle.tsx"],"names":[],"mappings":";AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAC,MAAM,YAAY,CAAC;AAE5D,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;CAMlC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAChC,KAAK,EACL,KAAK,EACL,OAAO,GAAG,KAAK,GAKlB,EAAE,EAAE,CAAC;AACF,kHAAkH;AAClH,MAAC,gBAAgB,oBAAe,OAAO,aACnC,KAAC,aAAa,CAAC,IAAI,IACf,IAAI,EAAC,WAAW,EAChB,KAAK,EAAC,EAAE,CAAC,0GAA0G;cACnH,QAAQ,kBAEP,KAAK,GACW,EACpB,KAAK,KAAK,SAAS,IAAI,CACpB,KAAC,MAAM,IAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,EAAC,OAAO,YACzD,KAAC,SAAS,IAAC,WAAW,EAAE,KAAK,GAAI,GAC5B,CACZ,IACc,CACtB,CAAC","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport styled from 'styled-components';\nimport {KitIdCard, KitTag, KitTypography} from 'aristid-ds';\n\nconst NodeTitleWrapper = styled.div`\n width: 100%;\n display: grid;\n grid-template-columns: 1fr auto;\n align-items: center;\n gap: 8px;\n`;\n\nexport const FilterTreeNodeTitle = ({\n title,\n count,\n ghosted = false,\n}: {\n title: string;\n count?: number;\n ghosted?: boolean;\n}) => (\n // Ghosted nodes render must be handled manually in the KitTree component (ex in SmartFilterAttributeDropdown.tsx)\n <NodeTitleWrapper data-ghosted={ghosted}>\n <KitTypography.Text\n size=\"fontSize5\"\n title=\"\" // Set an empty title to avoid the browser tooltip from being displayed as KitTypography already has a one\n ellipsis\n >\n {title}\n </KitTypography.Text>\n {count !== undefined && (\n <KitTag type={ghosted ? 'neutral' : 'secondary'} size=\"small\">\n <KitIdCard description={count} />\n </KitTag>\n )}\n </NodeTitleWrapper>\n);\n"]}
@@ -0,0 +1,8 @@
1
+ import { type FunctionComponent } from 'react';
2
+ interface ISelectAllCheckboxProps {
3
+ checked: boolean;
4
+ indeterminate: boolean;
5
+ onChange: (nextChecked: boolean) => void;
6
+ }
7
+ export declare const SelectAllCheckbox: FunctionComponent<ISelectAllCheckboxProps>;
8
+ export {};
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { KitCheckbox, KitSpace, KitTree } from 'aristid-ds';
3
+ import { useSharedTranslation } from '../../../../hooks/useSharedTranslation';
4
+ import styled from 'styled-components';
5
+ const TreeStyled = styled(KitTree) `
6
+ font-style: italic;
7
+ `;
8
+ const SELECT_ALL_KEY = 'select-all';
9
+ export const SelectAllCheckbox = ({ checked, indeterminate, onChange }) => {
10
+ const { t } = useSharedTranslation();
11
+ const handleChange = () => {
12
+ onChange(!checked);
13
+ };
14
+ return (_jsx(TreeStyled, { treeData: [
15
+ {
16
+ title: (_jsxs(KitSpace, { direction: "horizontal", size: "xs", children: [_jsx(KitCheckbox, { checked: checked, indeterminate: indeterminate, onChange: handleChange }), t('filters.select-all')] })),
17
+ key: SELECT_ALL_KEY,
18
+ isLeaf: true,
19
+ },
20
+ ], checkedKeys: checked ? [SELECT_ALL_KEY] : [], selectedKeys: checked ? [SELECT_ALL_KEY] : [], onSelect: handleChange, onCheck: handleChange }));
21
+ };
22
+ //# sourceMappingURL=SelectAllCheckbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectAllCheckbox.js","sourceRoot":"","sources":["../../../../../src/components/Filters/filter-items/shared/SelectAllCheckbox.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAC,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AACpE,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAQvC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;;CAEjC,CAAC;AAEF,MAAM,cAAc,GAAG,YAAY,CAAC;AAEpC,MAAM,CAAC,MAAM,iBAAiB,GAA+C,CAAC,EAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAC,EAAE,EAAE;IAChH,MAAM,EAAC,CAAC,EAAC,GAAG,oBAAoB,EAAE,CAAC;IAEnC,MAAM,YAAY,GAAG,GAAG,EAAE;QACtB,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,OAAO,CACH,KAAC,UAAU,IACP,QAAQ,EAAE;YACN;gBACI,KAAK,EAAE,CACH,MAAC,QAAQ,IAAC,SAAS,EAAC,YAAY,EAAC,IAAI,EAAC,IAAI,aACtC,KAAC,WAAW,IAAC,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,GAAI,EACtF,CAAC,CAAC,oBAAoB,CAAC,IACjB,CACd;gBACD,GAAG,EAAE,cAAc;gBACnB,MAAM,EAAE,IAAI;aACf;SACJ,EACD,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,EAC5C,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,EAC7C,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,YAAY,GACvB,CACL,CAAC;AACN,CAAC,CAAC","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {type FunctionComponent} from 'react';\nimport {KitCheckbox, KitSpace, KitTree} from 'aristid-ds';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport styled from 'styled-components';\n\ninterface ISelectAllCheckboxProps {\n checked: boolean;\n indeterminate: boolean;\n onChange: (nextChecked: boolean) => void;\n}\n\nconst TreeStyled = styled(KitTree)`\n font-style: italic;\n`;\n\nconst SELECT_ALL_KEY = 'select-all';\n\nexport const SelectAllCheckbox: FunctionComponent<ISelectAllCheckboxProps> = ({checked, indeterminate, onChange}) => {\n const {t} = useSharedTranslation();\n\n const handleChange = () => {\n onChange(!checked);\n };\n\n return (\n <TreeStyled\n treeData={[\n {\n title: (\n <KitSpace direction=\"horizontal\" size=\"xs\">\n <KitCheckbox checked={checked} indeterminate={indeterminate} onChange={handleChange} />\n {t('filters.select-all')}\n </KitSpace>\n ),\n key: SELECT_ALL_KEY,\n isLeaf: true,\n },\n ]}\n checkedKeys={checked ? [SELECT_ALL_KEY] : []}\n selectedKeys={checked ? [SELECT_ALL_KEY] : []}\n onSelect={handleChange}\n onCheck={handleChange}\n />\n );\n};\n"]}
@@ -5,7 +5,7 @@ import dayjs from 'dayjs';
5
5
  import { AttributeFormat, RecordFilterCondition, RecordFilterOperator } from '../../_gqlTypes';
6
6
  import { interleaveElement } from '../../_utils/interleaveElement';
7
7
  import { AttributeConditionFilter } from '../../types';
8
- import { isUIFilterStandard, isUIFilterThrough, isUIFilterTree, isUIFilterValueList, isUIFilterLinkWithValueList, } from './_types';
8
+ import { isUIFilterStandard, isUIFilterThrough, isUIFilterTree, isUIFilterValueList, isUIFilterLinkWithValueList, isUIFilterWithSmartFilter, } from './_types';
9
9
  import { nullValueConditions } from './conditionsHelper';
10
10
  export const dateValuesSeparator = '\n';
11
11
  const _getDateAtNoon = (date) => dayjs.unix(Number(date)).add(12, 'hour').unix().toString();
@@ -141,6 +141,10 @@ export const prepareFiltersForRequest = (filters, filtersOperator, valuesList) =
141
141
  if (filter.withEmptyValues) {
142
142
  return true;
143
143
  }
144
+ if (isUIFilterWithSmartFilter(filter)) {
145
+ return ((filter.value !== null && filter.value.length > 0) ||
146
+ (filter.condition && nullValueConditions.includes(filter.condition)));
147
+ }
144
148
  if (isUIFilterThrough(filter)) {
145
149
  return (filter.subField &&
146
150
  filter.subCondition &&
@@ -168,7 +172,7 @@ export const prepareFiltersForRequest = (filters, filtersOperator, valuesList) =
168
172
  })
169
173
  .map(filter => {
170
174
  //@ts-ignore typscript does not recognize filter as a UIFilter
171
- if (isUIFilterValueList(filter) || isUIFilterTree(filter)) {
175
+ if (isUIFilterValueList(filter) || isUIFilterTree(filter) || isUIFilterWithSmartFilter(filter)) {
172
176
  if (filter.condition && nullValueConditions.includes(filter.condition)) {
173
177
  const baseConditions = [
174
178
  {
@@ -192,11 +196,12 @@ export const prepareFiltersForRequest = (filters, filtersOperator, valuesList) =
192
196
  break;
193
197
  }
194
198
  }
199
+ const filterWithStringValue = filter;
195
200
  const baseConditions = [
196
201
  {
197
- field: filter.field,
198
- condition: filter.condition,
199
- value: filter.value,
202
+ field: filterWithStringValue.field,
203
+ condition: filterWithStringValue.condition,
204
+ value: filterWithStringValue.value,
200
205
  },
201
206
  ];
202
207
  return _addEmptyCondition(baseConditions, filter);