@leav/ui 1.8.0 → 1.9.0-1

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 (63) hide show
  1. package/dist/_gqlTypes/index.d.ts +162 -53
  2. package/dist/_gqlTypes/index.js +55 -0
  3. package/dist/_gqlTypes/index.js.map +1 -1
  4. package/dist/_queries/attributes/attributeDetailsFragment.js +3 -0
  5. package/dist/_queries/attributes/attributeDetailsFragment.js.map +1 -1
  6. package/dist/components/Explorer/manage-view-settings/filter-items/FilterItems.js +3 -0
  7. package/dist/components/Explorer/manage-view-settings/filter-items/FilterItems.js.map +1 -1
  8. package/dist/components/Explorer/manage-view-settings/save-view/prepareViewForRequest.js +17 -8
  9. package/dist/components/Explorer/manage-view-settings/save-view/prepareViewForRequest.js.map +1 -1
  10. package/dist/components/Filters/_types.d.ts +12 -1
  11. package/dist/components/Filters/_types.js +2 -1
  12. package/dist/components/Filters/_types.js.map +1 -1
  13. package/dist/components/Filters/context/filtersReducer.js +3 -2
  14. package/dist/components/Filters/context/filtersReducer.js.map +1 -1
  15. package/dist/components/Filters/filter-items/CommonFilterItem.js +2 -2
  16. package/dist/components/Filters/filter-items/CommonFilterItem.js.map +1 -1
  17. package/dist/components/Filters/filter-items/filter-type/ColorAttributeDropDown.js +1 -1
  18. package/dist/components/Filters/filter-items/filter-type/ColorAttributeDropDown.js.map +1 -1
  19. package/dist/components/Filters/filter-items/filter-type/FilterDropdownContent.js +5 -1
  20. package/dist/components/Filters/filter-items/filter-type/FilterDropdownContent.js.map +1 -1
  21. package/dist/components/Filters/filter-items/filter-type/FilterValueListDropDown.js +3 -3
  22. package/dist/components/Filters/filter-items/filter-type/FilterValueListDropDown.js.map +1 -1
  23. package/dist/components/Filters/filter-items/filter-type/_types.d.ts +6 -1
  24. package/dist/components/Filters/filter-items/filter-type/_types.js.map +1 -1
  25. package/dist/components/Filters/filter-items/filter-type/smart-filter/SmartFilterAttributeDropdown.d.ts +2 -0
  26. package/dist/components/Filters/filter-items/filter-type/smart-filter/SmartFilterAttributeDropdown.js +106 -0
  27. package/dist/components/Filters/filter-items/filter-type/smart-filter/SmartFilterAttributeDropdown.js.map +1 -0
  28. package/dist/components/Filters/filter-items/filter-type/smart-filter/useGetSmartFilterData.d.ts +25 -0
  29. package/dist/components/Filters/filter-items/filter-type/smart-filter/useGetSmartFilterData.js +59 -0
  30. package/dist/components/Filters/filter-items/filter-type/smart-filter/useGetSmartFilterData.js.map +1 -0
  31. package/dist/components/Filters/filter-items/filter-type/smart-filter/useSmartFilerSearch.d.ts +5 -0
  32. package/dist/components/Filters/filter-items/filter-type/smart-filter/useSmartFilerSearch.js +25 -0
  33. package/dist/components/Filters/filter-items/filter-type/smart-filter/useSmartFilerSearch.js.map +1 -0
  34. package/dist/components/Filters/filter-items/filter-type/tree/TreeAttributeDropDown.js +5 -4
  35. package/dist/components/Filters/filter-items/filter-type/tree/TreeAttributeDropDown.js.map +1 -1
  36. package/dist/components/Filters/filter-items/{EmptyValueCheckbox.d.ts → shared/EmptyValueCheckbox.d.ts} +2 -1
  37. package/dist/components/Filters/filter-items/shared/EmptyValueCheckbox.js +20 -0
  38. package/dist/components/Filters/filter-items/shared/EmptyValueCheckbox.js.map +1 -0
  39. package/dist/components/Filters/filter-items/shared/FilterTreeNodeTitle.d.ts +5 -0
  40. package/dist/components/Filters/filter-items/shared/FilterTreeNodeTitle.js +18 -0
  41. package/dist/components/Filters/filter-items/shared/FilterTreeNodeTitle.js.map +1 -0
  42. package/dist/components/Filters/filter-items/{SelectAllCheckbox.js → shared/SelectAllCheckbox.js} +1 -1
  43. package/dist/components/Filters/filter-items/shared/SelectAllCheckbox.js.map +1 -0
  44. package/dist/components/Filters/prepareFiltersForRequest.js +10 -5
  45. package/dist/components/Filters/prepareFiltersForRequest.js.map +1 -1
  46. package/dist/components/Filters/useFilters.d.ts +542 -0
  47. package/dist/components/Filters/useTransformFilters.js +3 -0
  48. package/dist/components/Filters/useTransformFilters.js.map +1 -1
  49. package/dist/components/LibraryItemsList/hooks/useSearchReducer/_types.d.ts +2 -2
  50. package/dist/components/LibraryItemsList/hooks/useSearchReducer/_types.js.map +1 -1
  51. package/dist/components/LibraryItemsList/hooks/useSearchReducer/searchReducer.d.ts +2 -2
  52. package/dist/components/LibraryItemsList/hooks/useSearchReducer/searchReducer.js.map +1 -1
  53. package/dist/components/Notifications/hooks/useNotificationSubscription.d.ts +9 -3
  54. package/dist/components/RecordEdition/EditRecord/EditRecord.js +1 -1
  55. package/dist/components/RecordEdition/EditRecord/EditRecord.js.map +1 -1
  56. package/dist/hooks/useGetLibraryDetailExtendedQuery/useGetLibraryDetailExtendedQuery.d.ts +1 -1
  57. package/dist/hooks/useGetRecordUpdatesSubscription/useGetRecordUpdatesSubscription.d.ts +9 -3
  58. package/dist/hooks/useGetRecordValuesQuery/useGetRecordValuesQuery.js.map +1 -1
  59. package/package.json +6 -6
  60. package/dist/components/Filters/filter-items/EmptyValueCheckbox.js +0 -16
  61. package/dist/components/Filters/filter-items/EmptyValueCheckbox.js.map +0 -1
  62. package/dist/components/Filters/filter-items/SelectAllCheckbox.js.map +0 -1
  63. /package/dist/components/Filters/filter-items/{SelectAllCheckbox.d.ts → shared/SelectAllCheckbox.d.ts} +0 -0
@@ -1,5 +1,5 @@
1
1
  import { type RefObject } from 'react';
2
- import { type IUIFilterLink, type IUIFilterStandard, type IUIFilterThrough, type IUIFilterTree } from '../../_types';
2
+ import { type IUIFilterSmartFiler, type IUIFilterLink, type IUIFilterStandard, type IUIFilterThrough, type IUIFilterTree } from '../../_types';
3
3
  export interface IFilterChildrenDropDownProps {
4
4
  filter: IUIFilterStandard;
5
5
  onFilterChange: (filterData: IUIFilterStandard) => void;
@@ -16,3 +16,8 @@ export interface IFilterChildrenTreeDropDownProps {
16
16
  onFilterChange: (filterData: IUIFilterTree) => void;
17
17
  selectDropDownRef?: RefObject<HTMLDivElement>;
18
18
  }
19
+ export interface IFilterChildrenSmartFilterDropDownProps {
20
+ filter: IUIFilterSmartFiler;
21
+ onFilterChange: (filterData: IUIFilterSmartFiler) => void;
22
+ selectDropDownRef?: RefObject<HTMLDivElement>;
23
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"_types.js","sourceRoot":"","sources":["../../../../../src/components/Filters/filter-items/filter-type/_types.ts"],"names":[],"mappings":"","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 RefObject} from 'react';\nimport {type IUIFilterLink, type IUIFilterStandard, type IUIFilterThrough, type IUIFilterTree} from '../../_types';\n\nexport interface IFilterChildrenDropDownProps {\n filter: IUIFilterStandard;\n onFilterChange: (filterData: IUIFilterStandard) => void;\n selectDropDownRef?: RefObject<HTMLDivElement>;\n}\n\nexport interface IFilterChildrenLinkDropDownProps {\n filter: IUIFilterLink | IUIFilterThrough;\n onFilterChange: (filterData: IUIFilterLink | IUIFilterThrough) => void;\n removeThroughCondition: boolean;\n selectDropDownRef?: RefObject<HTMLDivElement>;\n}\n\nexport interface IFilterChildrenTreeDropDownProps {\n filter: IUIFilterTree;\n onFilterChange: (filterData: IUIFilterTree) => void;\n selectDropDownRef?: RefObject<HTMLDivElement>;\n}\n"]}
1
+ {"version":3,"file":"_types.js","sourceRoot":"","sources":["../../../../../src/components/Filters/filter-items/filter-type/_types.ts"],"names":[],"mappings":"","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 RefObject} from 'react';\nimport {\n type IUIFilterSmartFiler,\n type IUIFilterLink,\n type IUIFilterStandard,\n type IUIFilterThrough,\n type IUIFilterTree,\n} from '../../_types';\n\nexport interface IFilterChildrenDropDownProps {\n filter: IUIFilterStandard;\n onFilterChange: (filterData: IUIFilterStandard) => void;\n selectDropDownRef?: RefObject<HTMLDivElement>;\n}\n\nexport interface IFilterChildrenLinkDropDownProps {\n filter: IUIFilterLink | IUIFilterThrough;\n onFilterChange: (filterData: IUIFilterLink | IUIFilterThrough) => void;\n removeThroughCondition: boolean;\n selectDropDownRef?: RefObject<HTMLDivElement>;\n}\n\nexport interface IFilterChildrenTreeDropDownProps {\n filter: IUIFilterTree;\n onFilterChange: (filterData: IUIFilterTree) => void;\n selectDropDownRef?: RefObject<HTMLDivElement>;\n}\n\nexport interface IFilterChildrenSmartFilterDropDownProps {\n filter: IUIFilterSmartFiler;\n onFilterChange: (filterData: IUIFilterSmartFiler) => void;\n selectDropDownRef?: RefObject<HTMLDivElement>;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import { type IFilterChildrenSmartFilterDropDownProps } from '../_types';
2
+ export declare const SmartFilterAttributeDropdown: ({ filter, onFilterChange }: IFilterChildrenSmartFilterDropDownProps) => JSX.Element;
@@ -0,0 +1,106 @@
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 { ErrorDisplay } from '../../../../../components/ErrorDisplay';
6
+ import { useFiltersContext } from '../../../../../components/Filters/useFiltersContext';
7
+ import { KitLoader, KitSpace, KitTree } from 'aristid-ds';
8
+ import { useGetSmartFilterData } from './useGetSmartFilterData';
9
+ import { useSmartFilterSearch } from './useSmartFilerSearch';
10
+ import styled from 'styled-components';
11
+ import { SelectAllCheckbox } from '../../shared/SelectAllCheckbox';
12
+ import { EmptyValueCheckbox } from '../../shared/EmptyValueCheckbox';
13
+ import { FilterTreeNodeTitle } from '../../shared/FilterTreeNodeTitle';
14
+ const DropdownContentWrapper = styled(KitSpace) `
15
+ width: 327px;
16
+ justify-content: center;
17
+ `;
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 KitTreeWithGhostedNodes = styled(KitTree) `
25
+ & .ant-tree-treenode:has(div[data-ghosted='true']) {
26
+ & > span {
27
+ background-color: var(--general-utilities-neutral-light) !important;
28
+
29
+ .ant-tree-checkbox-inner {
30
+ background-color: var(--general-utilities-neutral-dark) !important;
31
+ border-color: var(--general-utilities-neutral-dark) !important;
32
+ }
33
+
34
+ .ant-typography {
35
+ font-style: italic;
36
+ }
37
+ }
38
+ }
39
+ `;
40
+ export const SmartFilterAttributeDropdown = ({ filter, onFilterChange }) => {
41
+ const { filtersData } = useFiltersContext();
42
+ const selectedNodesIds = [...(filter.value ?? [])];
43
+ const { smartFilterDataToDisplay, noValueNodeData, isLoading, error } = useGetSmartFilterData({
44
+ libraryId: filtersData.libraryId,
45
+ attributeId: filter.attribute.id,
46
+ filters: filtersData.filters,
47
+ filtersOperator: filtersData.filtersOperator,
48
+ selectedValueIds: selectedNodesIds,
49
+ selectedFormattedValues: filter.formattedValue,
50
+ linkedLibraryId: filter.attribute.linkedLibrary?.id,
51
+ });
52
+ const { filteredSmartFilterData, SearchInput } = useSmartFilterSearch(smartFilterDataToDisplay);
53
+ const isFullyChecked = selectedNodesIds.length > 0 &&
54
+ selectedNodesIds.length === smartFilterDataToDisplay.length &&
55
+ filter.withEmptyValues;
56
+ const hasAnySelection = selectedNodesIds.length > 0 || filter.withEmptyValues;
57
+ const _handleOnSelect = (node, selected) => {
58
+ let newSelectedIds;
59
+ if (selected) {
60
+ newSelectedIds = [...selectedNodesIds, node.key];
61
+ }
62
+ else {
63
+ newSelectedIds = selectedNodesIds.filter(selectedValue => selectedValue !== node.key);
64
+ }
65
+ const selectedNodes = newSelectedIds
66
+ .map(nodeKey => filteredSmartFilterData.find(smartFilterNode => smartFilterNode.key === nodeKey))
67
+ .filter((selectedNode) => Boolean(selectedNode));
68
+ onFilterChange({
69
+ ...filter,
70
+ value: selectedNodes.map(selectedNode => selectedNode.recordId),
71
+ formattedValue: selectedNodes.map(selectedNode => selectedNode.title),
72
+ });
73
+ };
74
+ const _handleOnSelectAll = (isSelected) => {
75
+ const selectedNodes = isSelected ? [...smartFilterDataToDisplay] : [];
76
+ onFilterChange({
77
+ ...filter,
78
+ value: selectedNodes.map(selectedNode => selectedNode.recordId),
79
+ formattedValue: selectedNodes.map(selectedNode => selectedNode.title),
80
+ withEmptyValues: isSelected,
81
+ });
82
+ };
83
+ const _handleOnSelectEmptyValue = (selected) => {
84
+ onFilterChange({
85
+ ...filter,
86
+ withEmptyValues: selected,
87
+ });
88
+ };
89
+ if (isLoading) {
90
+ return (_jsx(DropdownContentWrapper, { align: "center", children: _jsx(KitLoader, {}) }));
91
+ }
92
+ if (error) {
93
+ return (_jsx(DropdownContentWrapper, { children: _jsx(ErrorDisplay, { message: error.message }) }));
94
+ }
95
+ return (_jsxs(DropdownContentWrapper, { direction: "vertical", size: "xs", children: [SearchInput, _jsxs(ScrollableContent, { children: [_jsx(SelectAllCheckbox, { checked: isFullyChecked, indeterminate: hasAnySelection && !isFullyChecked, onChange: _handleOnSelectAll }), _jsx(EmptyValueCheckbox, { filter: filter, onSelect: _handleOnSelectEmptyValue, count: noValueNodeData?.count ?? 0 }), _jsx(KitTreeWithGhostedNodes, { treeData: filteredSmartFilterData, selectedKeys: selectedNodesIds, checkedKeys: selectedNodesIds, checkable: true, checkStrictly: true, multiple: true, titleRender: kitTreeNode => {
96
+ const node = kitTreeNode;
97
+ return (_jsx(FilterTreeNodeTitle, { title: node.title, count: node.count ?? 0, ghosted: node.ghosted }));
98
+ }, onCheck: (_, info) => {
99
+ const node = info.node;
100
+ _handleOnSelect(node, info.checked);
101
+ }, onSelect: (_, info) => {
102
+ const node = info.node;
103
+ _handleOnSelect(node, info.selected);
104
+ } })] })] }));
105
+ };
106
+ //# sourceMappingURL=SmartFilterAttributeDropdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SmartFilterAttributeDropdown.js","sourceRoot":"","sources":["../../../../../../src/components/Filters/filter-items/filter-type/smart-filter/SmartFilterAttributeDropdown.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 {ErrorDisplay} from '_ui/components/ErrorDisplay';\nimport {useFiltersContext} from '_ui/components/Filters/useFiltersContext';\nimport {KitLoader, KitSpace, KitTree} from 'aristid-ds';\nimport {type ISmartFilterNode, useGetSmartFilterData} from './useGetSmartFilterData';\nimport {useSmartFilterSearch} from './useSmartFilerSearch';\nimport styled from 'styled-components';\nimport {type EventDataNode} from 'antd/es/tree';\nimport {type IFilterChildrenSmartFilterDropDownProps} from '../_types';\nimport {SelectAllCheckbox} from '../../shared/SelectAllCheckbox';\nimport {EmptyValueCheckbox} from '../../shared/EmptyValueCheckbox';\nimport {FilterTreeNodeTitle} from '../../shared/FilterTreeNodeTitle';\n\nconst DropdownContentWrapper = styled(KitSpace)`\n width: 327px;\n justify-content: center;\n`;\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 KitTreeWithGhostedNodes = styled(KitTree)`\n & .ant-tree-treenode:has(div[data-ghosted='true']) {\n & > span {\n background-color: var(--general-utilities-neutral-light) !important;\n\n .ant-tree-checkbox-inner {\n background-color: var(--general-utilities-neutral-dark) !important;\n border-color: var(--general-utilities-neutral-dark) !important;\n }\n\n .ant-typography {\n font-style: italic;\n }\n }\n }\n`;\n\nexport const SmartFilterAttributeDropdown = ({filter, onFilterChange}: IFilterChildrenSmartFilterDropDownProps) => {\n const {filtersData} = useFiltersContext();\n\n const selectedNodesIds = [...(filter.value ?? [])];\n\n const {smartFilterDataToDisplay, noValueNodeData, isLoading, error} = useGetSmartFilterData({\n libraryId: filtersData.libraryId,\n attributeId: filter.attribute.id,\n filters: filtersData.filters,\n filtersOperator: filtersData.filtersOperator,\n selectedValueIds: selectedNodesIds,\n selectedFormattedValues: filter.formattedValue,\n linkedLibraryId: filter.attribute.linkedLibrary?.id,\n });\n\n const {filteredSmartFilterData, SearchInput} = useSmartFilterSearch(smartFilterDataToDisplay);\n\n const isFullyChecked =\n selectedNodesIds.length > 0 &&\n selectedNodesIds.length === smartFilterDataToDisplay.length &&\n filter.withEmptyValues;\n const hasAnySelection = selectedNodesIds.length > 0 || filter.withEmptyValues;\n\n const _handleOnSelect = (node: ISmartFilterNode, selected: boolean) => {\n let newSelectedIds: string[];\n\n if (selected) {\n newSelectedIds = [...selectedNodesIds, node.key];\n } else {\n newSelectedIds = selectedNodesIds.filter(selectedValue => selectedValue !== node.key);\n }\n\n const selectedNodes = newSelectedIds\n .map(nodeKey => filteredSmartFilterData.find(smartFilterNode => smartFilterNode.key === nodeKey))\n .filter((selectedNode): selectedNode is ISmartFilterNode => Boolean(selectedNode));\n\n onFilterChange({\n ...filter,\n value: selectedNodes.map(selectedNode => selectedNode.recordId),\n formattedValue: selectedNodes.map(selectedNode => selectedNode.title),\n });\n };\n\n const _handleOnSelectAll = (isSelected: boolean) => {\n const selectedNodes = isSelected ? [...smartFilterDataToDisplay] : [];\n\n onFilterChange({\n ...filter,\n value: selectedNodes.map(selectedNode => selectedNode.recordId),\n formattedValue: selectedNodes.map(selectedNode => selectedNode.title),\n withEmptyValues: isSelected,\n });\n };\n\n const _handleOnSelectEmptyValue = (selected: boolean) => {\n onFilterChange({\n ...filter,\n withEmptyValues: selected,\n });\n };\n\n if (isLoading) {\n return (\n <DropdownContentWrapper align=\"center\">\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 <ScrollableContent>\n <SelectAllCheckbox\n checked={isFullyChecked}\n indeterminate={hasAnySelection && !isFullyChecked}\n onChange={_handleOnSelectAll}\n />\n <EmptyValueCheckbox\n filter={filter}\n onSelect={_handleOnSelectEmptyValue}\n count={noValueNodeData?.count ?? 0}\n />\n <KitTreeWithGhostedNodes\n treeData={filteredSmartFilterData}\n selectedKeys={selectedNodesIds}\n checkedKeys={selectedNodesIds}\n checkable={true}\n checkStrictly={true}\n multiple={true}\n titleRender={kitTreeNode => {\n const node = kitTreeNode as EventDataNode<ISmartFilterNode>;\n return (\n <FilterTreeNodeTitle title={node.title} count={node.count ?? 0} ghosted={node.ghosted} />\n );\n }}\n onCheck={(_, info) => {\n const node = info.node as EventDataNode<ISmartFilterNode>;\n _handleOnSelect(node, info.checked);\n }}\n onSelect={(_, info) => {\n const node = info.node as EventDataNode<ISmartFilterNode>;\n _handleOnSelect(node, info.selected);\n }}\n />\n </ScrollableContent>\n </DropdownContentWrapper>\n );\n};\n"]}
@@ -0,0 +1,25 @@
1
+ import { type IUIFilterTree, type FiltersOperator, type UIFilter } from '../../../../../components/Filters/_types';
2
+ export interface ISmartFilterNode {
3
+ title: string;
4
+ key: string;
5
+ libraryId: string;
6
+ recordId: string;
7
+ count: number;
8
+ ghosted?: boolean;
9
+ }
10
+ interface IUseGetSmartFilterDataProps {
11
+ libraryId: string;
12
+ attributeId: string;
13
+ filters: UIFilter[] | IUIFilterTree[];
14
+ filtersOperator: FiltersOperator;
15
+ selectedValueIds?: string[] | null;
16
+ selectedFormattedValues?: Array<string | null> | null;
17
+ linkedLibraryId?: string;
18
+ }
19
+ export declare const useGetSmartFilterData: ({ libraryId, attributeId, filters, filtersOperator, selectedValueIds, selectedFormattedValues, linkedLibraryId, }: IUseGetSmartFilterDataProps) => {
20
+ smartFilterDataToDisplay: ISmartFilterNode[];
21
+ noValueNodeData: ISmartFilterNode;
22
+ isLoading: boolean;
23
+ error: import("@apollo/client").ApolloError;
24
+ };
25
+ export {};
@@ -0,0 +1,59 @@
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 { useSmartFilterListValuesQuery } from '../../../../../_gqlTypes';
5
+ import { prepareFiltersForRequest } from '../../../../../components/Filters/prepareFiltersForRequest';
6
+ export const useGetSmartFilterData = ({ libraryId, attributeId, filters, filtersOperator, selectedValueIds, selectedFormattedValues, linkedLibraryId, }) => {
7
+ const filtersWithoutCurrentAttributeFilter = filters.filter(filter => filter.attribute.id !== attributeId);
8
+ const preparedFilters = prepareFiltersForRequest(filtersWithoutCurrentAttributeFilter, filtersOperator, undefined);
9
+ const { data, loading, error } = useSmartFilterListValuesQuery({
10
+ variables: {
11
+ library: libraryId,
12
+ attribute: attributeId,
13
+ recordFilters: preparedFilters ?? undefined,
14
+ },
15
+ });
16
+ const occurrences = data?.listDistinctValues;
17
+ const smartFilterData = occurrences?.length
18
+ ? occurrences
19
+ .map(({ value, count }) => value !== null
20
+ ? {
21
+ key: value.id,
22
+ title: value.whoAmI.label ?? value.whoAmI.id ?? value.id,
23
+ recordId: value.whoAmI.id,
24
+ libraryId: value.whoAmI.library.id,
25
+ count,
26
+ }
27
+ : {
28
+ key: 'no_value',
29
+ title: '',
30
+ recordId: null,
31
+ libraryId: null,
32
+ count,
33
+ })
34
+ .sort((a, b) => a.title.localeCompare(b.title, undefined, { numeric: true }))
35
+ : [];
36
+ const smartFilterDataWithoutNoValue = smartFilterData.filter(node => node.key !== 'no_value');
37
+ const noValueNodeData = smartFilterData.find(node => node.key === 'no_value');
38
+ const selectedNodeIdsNotInSmartFilterData = (selectedValueIds ?? []).filter(nodeId => !smartFilterData.some(node => node.key === nodeId));
39
+ const selectedNodesNotInSmartFilterData = selectedNodeIdsNotInSmartFilterData.map(nodeId => {
40
+ const index = selectedValueIds?.indexOf(nodeId) ?? -1;
41
+ const formattedValue = index >= 0 && selectedFormattedValues?.[index] != null ? selectedFormattedValues[index] : nodeId;
42
+ return {
43
+ key: nodeId,
44
+ recordId: nodeId,
45
+ libraryId: linkedLibraryId ?? '',
46
+ title: formattedValue ?? nodeId,
47
+ count: 0,
48
+ ghosted: true,
49
+ };
50
+ });
51
+ const smartFilterDataToDisplay = [...smartFilterDataWithoutNoValue, ...selectedNodesNotInSmartFilterData];
52
+ return {
53
+ smartFilterDataToDisplay,
54
+ noValueNodeData,
55
+ isLoading: loading,
56
+ error: error ?? null,
57
+ };
58
+ };
59
+ //# sourceMappingURL=useGetSmartFilterData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGetSmartFilterData.js","sourceRoot":"","sources":["../../../../../../src/components/Filters/filter-items/filter-type/smart-filter/useGetSmartFilterData.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 {useSmartFilterListValuesQuery} from '_ui/_gqlTypes';\nimport {prepareFiltersForRequest} from '_ui/components/Filters/prepareFiltersForRequest';\nimport {type IUIFilterTree, type FiltersOperator, type UIFilter} from '_ui/components/Filters/_types';\n\nexport interface ISmartFilterNode {\n title: string;\n key: string;\n libraryId: string;\n recordId: string;\n count: number;\n ghosted?: boolean;\n}\n\ninterface IUseGetSmartFilterDataProps {\n libraryId: string;\n attributeId: string;\n filters: UIFilter[] | IUIFilterTree[];\n filtersOperator: FiltersOperator;\n selectedValueIds?: string[] | null;\n selectedFormattedValues?: Array<string | null> | null;\n linkedLibraryId?: string;\n}\n\nexport const useGetSmartFilterData = ({\n libraryId,\n attributeId,\n filters,\n filtersOperator,\n selectedValueIds,\n selectedFormattedValues,\n linkedLibraryId,\n}: IUseGetSmartFilterDataProps) => {\n const filtersWithoutCurrentAttributeFilter = filters.filter(filter => filter.attribute.id !== attributeId);\n const preparedFilters = prepareFiltersForRequest(filtersWithoutCurrentAttributeFilter, filtersOperator, undefined);\n\n const {data, loading, error} = useSmartFilterListValuesQuery({\n variables: {\n library: libraryId,\n attribute: attributeId,\n recordFilters: preparedFilters ?? undefined,\n },\n });\n\n const occurrences = data?.listDistinctValues;\n\n const smartFilterData: ISmartFilterNode[] = occurrences?.length\n ? occurrences\n .map(({value, count}) =>\n value !== null\n ? {\n key: value.id,\n title: value.whoAmI.label ?? value.whoAmI.id ?? value.id,\n recordId: value.whoAmI.id,\n libraryId: value.whoAmI.library.id,\n count,\n }\n : {\n key: 'no_value',\n title: '',\n recordId: null,\n libraryId: null,\n count,\n },\n )\n .sort((a, b) => a.title.localeCompare(b.title, undefined, {numeric: true}))\n : [];\n\n const smartFilterDataWithoutNoValue = smartFilterData.filter(node => node.key !== 'no_value');\n const noValueNodeData = smartFilterData.find(node => node.key === 'no_value');\n\n const selectedNodeIdsNotInSmartFilterData = (selectedValueIds ?? []).filter(\n nodeId => !smartFilterData.some(node => node.key === nodeId),\n );\n const selectedNodesNotInSmartFilterData: ISmartFilterNode[] = selectedNodeIdsNotInSmartFilterData.map(nodeId => {\n const index = selectedValueIds?.indexOf(nodeId) ?? -1;\n const formattedValue =\n index >= 0 && selectedFormattedValues?.[index] != null ? selectedFormattedValues[index] : nodeId;\n return {\n key: nodeId,\n recordId: nodeId,\n libraryId: linkedLibraryId ?? '',\n title: formattedValue ?? nodeId,\n count: 0,\n ghosted: true,\n };\n });\n\n const smartFilterDataToDisplay = [...smartFilterDataWithoutNoValue, ...selectedNodesNotInSmartFilterData];\n\n return {\n smartFilterDataToDisplay,\n noValueNodeData,\n isLoading: loading,\n error: error ?? null,\n };\n};\n"]}
@@ -0,0 +1,5 @@
1
+ import { type DataNode } from 'antd/es/tree';
2
+ export declare const useSmartFilterSearch: (smartFilterData: DataNode[]) => {
3
+ filteredSmartFilterData: DataNode[];
4
+ SearchInput: JSX.Element;
5
+ };
@@ -0,0 +1,25 @@
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 useSmartFilterSearch = (smartFilterData) => {
11
+ const { t } = useSharedTranslation();
12
+ const [searchValue, setSearchValue] = useState('');
13
+ const normalizedSearch = searchValue.trim().toLowerCase();
14
+ const filteredSmartFilterData = !normalizedSearch
15
+ ? smartFilterData
16
+ : smartFilterData.filter(node => {
17
+ const title = typeof node.title === 'string' ? node.title : '';
18
+ return title.toLowerCase().includes(normalizedSearch);
19
+ });
20
+ return {
21
+ filteredSmartFilterData,
22
+ SearchInput: (_jsx(KitInput, { prefix: _jsx(FontAwesomeIcon, { icon: faSearch }), placeholder: t('global.search'), value: searchValue, onChange: e => setSearchValue(e.target.value), allowClear: true })),
23
+ };
24
+ };
25
+ //# sourceMappingURL=useSmartFilerSearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSmartFilerSearch.js","sourceRoot":"","sources":["../../../../../../src/components/Filters/filter-items/filter-type/smart-filter/useSmartFilerSearch.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,oBAAoB,GAAG,CAAC,eAA2B,EAAE,EAAE;IAChE,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;IAE1D,MAAM,uBAAuB,GAAG,CAAC,gBAAgB;QAC7C,CAAC,CAAC,eAAe;QACjB,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YAC1B,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IAET,OAAO;QACH,uBAAuB;QACvB,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 DataNode} from 'antd/es/tree';\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 useSmartFilterSearch = (smartFilterData: DataNode[]) => {\n const {t} = useSharedTranslation();\n const [searchValue, setSearchValue] = useState('');\n\n const normalizedSearch = searchValue.trim().toLowerCase();\n\n const filteredSmartFilterData = !normalizedSearch\n ? smartFilterData\n : smartFilterData.filter(node => {\n const title = typeof node.title === 'string' ? node.title : '';\n return title.toLowerCase().includes(normalizedSearch);\n });\n\n return {\n filteredSmartFilterData,\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"]}
@@ -10,8 +10,8 @@ import { ErrorDisplay } from '../../../../../components/ErrorDisplay';
10
10
  import { useSharedTranslation } from '../../../../../hooks/useSharedTranslation';
11
11
  import { useTreesSearch } from './useTreesSearch';
12
12
  import { useFiltersContext } from '../../../../../components/Filters/useFiltersContext';
13
- import { EmptyValueCheckbox } from '../../EmptyValueCheckbox';
14
- import { SelectAllCheckbox } from '../../SelectAllCheckbox';
13
+ import { EmptyValueCheckbox } from '../../shared/EmptyValueCheckbox';
14
+ import { SelectAllCheckbox } from '../../shared/SelectAllCheckbox';
15
15
  import { buildFlattenTree } from './utils/buildFlattenTreeMap';
16
16
  import { getSelectAllState } from './utils/getSelectAllState';
17
17
  import { filterTreeByPermission } from './utils/filterTreeByPermission';
@@ -29,6 +29,7 @@ const FilteredTreeSpacer = styled(KitSpace) `
29
29
  `;
30
30
  const DropdownContentWrapper = styled(KitSpace) `
31
31
  width: 327px;
32
+ justify-content: center;
32
33
  `;
33
34
  export const TreeAttributeDropDown = ({ filter, onFilterChange, }) => {
34
35
  const { t } = useSharedTranslation();
@@ -118,10 +119,10 @@ export const TreeAttributeDropDown = ({ filter, onFilterChange, }) => {
118
119
  },
119
120
  };
120
121
  if (isLoading) {
121
- return _jsx(KitLoader, {});
122
+ return (_jsx(DropdownContentWrapper, { children: _jsx(KitLoader, {}) }));
122
123
  }
123
124
  if (error) {
124
- return _jsx(ErrorDisplay, { message: error.message });
125
+ return (_jsx(DropdownContentWrapper, { children: _jsx(ErrorDisplay, { message: error.message }) }));
125
126
  }
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
127
128
  ? _handleOnSelectAllVisibleByDefault
@@ -1 +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 '../../EmptyValueCheckbox';\nimport {SelectAllCheckbox} from '../../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`;\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 <KitLoader />;\n }\n\n if (error) {\n return <ErrorDisplay message={error.message} />;\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"]}
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"]}
@@ -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"]}
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { KitCheckbox, KitSpace, KitTree } from 'aristid-ds';
3
- import { useSharedTranslation } from '../../../hooks/useSharedTranslation';
3
+ import { useSharedTranslation } from '../../../../hooks/useSharedTranslation';
4
4
  import styled from 'styled-components';
5
5
  const TreeStyled = styled(KitTree) `
6
6
  font-style: italic;
@@ -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);