@leav/ui 1.13.0-b8abd53d → 1.13.0-c7e23176

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 (90) hide show
  1. package/dist/_gqlTypes/index.d.ts +224 -72
  2. package/dist/_gqlTypes/index.js +143 -61
  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/Explorer.d.ts +5 -1
  7. package/dist/components/Explorer/Explorer.js +7 -0
  8. package/dist/components/Explorer/Explorer.js.map +1 -1
  9. package/dist/components/Explorer/_types.d.ts +6 -0
  10. package/dist/components/Explorer/_types.js.map +1 -1
  11. package/dist/components/Explorer/actions-mass/edit-attribute/EditMonoDependencyWorkflowTreeAttribute.d.ts +8 -0
  12. package/dist/components/Explorer/actions-mass/edit-attribute/EditMonoDependencyWorkflowTreeAttribute.js +34 -0
  13. package/dist/components/Explorer/actions-mass/edit-attribute/EditMonoDependencyWorkflowTreeAttribute.js.map +1 -0
  14. package/dist/components/Explorer/actions-mass/edit-attribute/EditTreeAttributeValuesMapping.d.ts +3 -1
  15. package/dist/components/Explorer/actions-mass/edit-attribute/EditTreeAttributeValuesMapping.js +12 -14
  16. package/dist/components/Explorer/actions-mass/edit-attribute/EditTreeAttributeValuesMapping.js.map +1 -1
  17. package/dist/components/Explorer/actions-mass/edit-attribute/_types.d.ts +15 -3
  18. package/dist/components/Explorer/actions-mass/edit-attribute/_types.js.map +1 -1
  19. package/dist/components/Explorer/actions-mass/edit-attribute/useDependencyValues.d.ts +13 -0
  20. package/dist/components/Explorer/actions-mass/edit-attribute/useDependencyValues.js +47 -0
  21. package/dist/components/Explorer/actions-mass/edit-attribute/useDependencyValues.js.map +1 -0
  22. package/dist/components/Explorer/actions-mass/edit-attribute/useEditionMappingState.d.ts +13 -0
  23. package/dist/components/Explorer/actions-mass/edit-attribute/useEditionMappingState.js +73 -0
  24. package/dist/components/Explorer/actions-mass/edit-attribute/useEditionMappingState.js.map +1 -0
  25. package/dist/components/Explorer/actions-mass/edit-attribute/useMassEditableAttributes.js +14 -17
  26. package/dist/components/Explorer/actions-mass/edit-attribute/useMassEditableAttributes.js.map +1 -1
  27. package/dist/components/Explorer/actions-mass/edit-attribute/useTreeNodesCandidates.d.ts +23 -0
  28. package/dist/components/Explorer/actions-mass/edit-attribute/useTreeNodesCandidates.js +68 -0
  29. package/dist/components/Explorer/actions-mass/edit-attribute/useTreeNodesCandidates.js.map +1 -0
  30. package/dist/components/Explorer/actions-mass/useEditAttributeMassAction.js +16 -50
  31. package/dist/components/Explorer/actions-mass/useEditAttributeMassAction.js.map +1 -1
  32. package/dist/components/Explorer/manage-view-settings/filter-items/FilterItems.js +6 -6
  33. package/dist/components/Explorer/manage-view-settings/filter-items/FilterItems.js.map +1 -1
  34. package/dist/components/Explorer/manage-view-settings/store-view-settings/viewSettingsReducer.d.ts +7 -31
  35. package/dist/components/Explorer/manage-view-settings/store-view-settings/viewSettingsReducer.js +9 -20
  36. package/dist/components/Explorer/manage-view-settings/store-view-settings/viewSettingsReducer.js.map +1 -1
  37. package/dist/components/Explorer/useNotifyFiltersChange.d.ts +15 -0
  38. package/dist/components/Explorer/useNotifyFiltersChange.js +26 -0
  39. package/dist/components/Explorer/useNotifyFiltersChange.js.map +1 -0
  40. package/dist/components/Filters/_types.d.ts +6 -0
  41. package/dist/components/Filters/_types.js +2 -1
  42. package/dist/components/Filters/_types.js.map +1 -1
  43. package/dist/components/Filters/context/filtersReducer.d.ts +14 -1
  44. package/dist/components/Filters/context/filtersReducer.js +17 -4
  45. package/dist/components/Filters/context/filtersReducer.js.map +1 -1
  46. package/dist/components/Filters/filter-items/filter-type/smart-filter/SmartFilterAttributeDropdown.js +2 -3
  47. package/dist/components/Filters/filter-items/filter-type/smart-filter/SmartFilterAttributeDropdown.js.map +1 -1
  48. package/dist/components/Filters/filter-items/filter-type/smart-filter/useGetSmartFilterData.d.ts +2 -4
  49. package/dist/components/Filters/filter-items/filter-type/smart-filter/useGetSmartFilterData.js +22 -16
  50. package/dist/components/Filters/filter-items/filter-type/smart-filter/useGetSmartFilterData.js.map +1 -1
  51. package/dist/components/Filters/filter-items/filter-type/tree/TreeAttributeDropDown.js +7 -1
  52. package/dist/components/Filters/filter-items/filter-type/tree/TreeAttributeDropDown.js.map +1 -1
  53. package/dist/components/Filters/filter-items/filter-type/tree/useTreePermissions.js +1 -1
  54. package/dist/components/Filters/filter-items/filter-type/tree/useTreePermissions.js.map +1 -1
  55. package/dist/components/Filters/useFilters.d.ts +306 -0
  56. package/dist/components/Filters/useTransformFilters.js +1 -0
  57. package/dist/components/Filters/useTransformFilters.js.map +1 -1
  58. package/dist/hooks/index.d.ts +1 -0
  59. package/dist/hooks/index.js +1 -0
  60. package/dist/hooks/index.js.map +1 -1
  61. package/dist/hooks/useDelayedLoading/index.d.ts +1 -0
  62. package/dist/hooks/useDelayedLoading/index.js +5 -0
  63. package/dist/hooks/useDelayedLoading/index.js.map +1 -0
  64. package/dist/hooks/useDelayedLoading/useDelayedLoading.d.ts +17 -0
  65. package/dist/hooks/useDelayedLoading/useDelayedLoading.js +54 -0
  66. package/dist/hooks/useDelayedLoading/useDelayedLoading.js.map +1 -0
  67. package/dist/hooks/useIFrameMessenger/iFrameMessengerContext.d.ts +3 -1
  68. package/dist/hooks/useIFrameMessenger/iFrameMessengerContext.js.map +1 -1
  69. package/dist/hooks/useIFrameMessenger/messageHandlers.d.ts +2 -1
  70. package/dist/hooks/useIFrameMessenger/messageHandlers.js +9 -0
  71. package/dist/hooks/useIFrameMessenger/messageHandlers.js.map +1 -1
  72. package/dist/hooks/useIFrameMessenger/types.d.ts +21 -2
  73. package/dist/hooks/useIFrameMessenger/types.js.map +1 -1
  74. package/dist/hooks/useIFrameMessenger/useIFrameMessenger.d.ts +1 -0
  75. package/dist/hooks/useIFrameMessenger/useIFrameMessengerContext.js +29 -7
  76. package/dist/hooks/useIFrameMessenger/useIFrameMessengerContext.js.map +1 -1
  77. package/dist/hooks/useIFrameMessenger/useNativePanelMessengerHandlers.d.ts +14 -0
  78. package/dist/hooks/useIFrameMessenger/useNativePanelMessengerHandlers.js +22 -0
  79. package/dist/hooks/useIFrameMessenger/useNativePanelMessengerHandlers.js.map +1 -0
  80. package/dist/hooks/useIFrameMessengerClient/iFrameMessengerClientContext.d.ts +1 -0
  81. package/dist/hooks/useIFrameMessengerClient/useIFrameMessengerClient.d.ts +1 -0
  82. package/dist/locales/en/shared.json +1 -0
  83. package/dist/locales/fr/shared.json +1 -0
  84. package/package.json +4 -9
  85. package/dist/components/Explorer/actions-mass/edit-attribute/useTreeNodeRemapping.d.ts +0 -12
  86. package/dist/components/Explorer/actions-mass/edit-attribute/useTreeNodeRemapping.js +0 -24
  87. package/dist/components/Explorer/actions-mass/edit-attribute/useTreeNodeRemapping.js.map +0 -1
  88. package/dist/components/Explorer/actions-mass/edit-attribute/useValuesDistribution.d.ts +0 -13
  89. package/dist/components/Explorer/actions-mass/edit-attribute/useValuesDistribution.js +0 -28
  90. package/dist/components/Explorer/actions-mass/edit-attribute/useValuesDistribution.js.map +0 -1
@@ -1 +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"]}
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 });\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.value),\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.value),\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"]}
@@ -2,8 +2,7 @@ import { type IUIFilterTree, type FiltersOperator, type UIFilter } from '../../.
2
2
  export interface ISmartFilterNode {
3
3
  title: string;
4
4
  key: string;
5
- libraryId: string;
6
- recordId: string;
5
+ value: string | null;
7
6
  count: number;
8
7
  ghosted?: boolean;
9
8
  }
@@ -14,9 +13,8 @@ interface IUseGetSmartFilterDataProps {
14
13
  filtersOperator: FiltersOperator;
15
14
  selectedValueIds?: string[] | null;
16
15
  selectedFormattedValues?: Array<string | null> | null;
17
- linkedLibraryId?: string;
18
16
  }
19
- export declare const useGetSmartFilterData: ({ libraryId, attributeId, filters, filtersOperator, selectedValueIds, selectedFormattedValues, linkedLibraryId, }: IUseGetSmartFilterDataProps) => {
17
+ export declare const useGetSmartFilterData: ({ libraryId, attributeId, filters, filtersOperator, selectedValueIds, selectedFormattedValues, }: IUseGetSmartFilterDataProps) => {
20
18
  smartFilterDataToDisplay: ISmartFilterNode[];
21
19
  noValueNodeData: ISmartFilterNode;
22
20
  isLoading: boolean;
@@ -3,7 +3,7 @@
3
3
  // License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
4
4
  import { useSmartFilterListValuesQuery } from '../../../../../_gqlTypes';
5
5
  import { prepareFiltersForRequest } from '../../../../../components/Filters/prepareFiltersForRequest';
6
- export const useGetSmartFilterData = ({ libraryId, attributeId, filters, filtersOperator, selectedValueIds, selectedFormattedValues, linkedLibraryId, }) => {
6
+ export const useGetSmartFilterData = ({ libraryId, attributeId, filters, filtersOperator, selectedValueIds, selectedFormattedValues, }) => {
7
7
  const filtersWithoutCurrentAttributeFilter = filters.filter(filter => filter.attribute.id !== attributeId);
8
8
  const preparedFilters = prepareFiltersForRequest(filtersWithoutCurrentAttributeFilter, filtersOperator, undefined);
9
9
  const { data, loading, error } = useSmartFilterListValuesQuery({
@@ -16,21 +16,28 @@ export const useGetSmartFilterData = ({ libraryId, attributeId, filters, filters
16
16
  const occurrences = data?.listDistinctValues;
17
17
  const smartFilterData = occurrences?.length
18
18
  ? occurrences
19
- .map(({ value, count }) => value !== null
19
+ .map(occurrence => 'standardValue' in occurrence && occurrence.standardValue !== null
20
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,
21
+ key: occurrence.standardValue,
22
+ title: occurrence.standardValue,
23
+ value: occurrence.standardValue,
24
+ count: occurrence.count,
26
25
  }
27
- : {
28
- key: 'no_value',
29
- title: '',
30
- recordId: null,
31
- libraryId: null,
32
- count,
33
- })
26
+ : 'recordValue' in occurrence && occurrence.recordValue !== null
27
+ ? {
28
+ key: occurrence.recordValue.id,
29
+ title: occurrence.recordValue.whoAmI.label ??
30
+ occurrence.recordValue.whoAmI.id ??
31
+ occurrence.recordValue.id,
32
+ value: occurrence.recordValue.whoAmI.id,
33
+ count: occurrence.count,
34
+ }
35
+ : {
36
+ key: 'no_value',
37
+ title: '',
38
+ value: null,
39
+ count: occurrence.count,
40
+ })
34
41
  .sort((a, b) => a.title.localeCompare(b.title, undefined, { numeric: true }))
35
42
  : [];
36
43
  const smartFilterDataWithoutNoValue = smartFilterData.filter(node => node.key !== 'no_value');
@@ -41,8 +48,7 @@ export const useGetSmartFilterData = ({ libraryId, attributeId, filters, filters
41
48
  const formattedValue = index >= 0 && selectedFormattedValues?.[index] != null ? selectedFormattedValues[index] : nodeId;
42
49
  return {
43
50
  key: nodeId,
44
- recordId: nodeId,
45
- libraryId: linkedLibraryId ?? '',
51
+ value: nodeId,
46
52
  title: formattedValue ?? nodeId,
47
53
  count: 0,
48
54
  ghosted: true,
@@ -1 +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"]}
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 value: string | null; // recordId or text value\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}\n\nexport const useGetSmartFilterData = ({\n libraryId,\n attributeId,\n filters,\n filtersOperator,\n selectedValueIds,\n selectedFormattedValues,\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(occurrence =>\n 'standardValue' in occurrence && occurrence.standardValue !== null\n ? {\n key: occurrence.standardValue,\n title: occurrence.standardValue,\n value: occurrence.standardValue,\n count: occurrence.count,\n }\n : 'recordValue' in occurrence && occurrence.recordValue !== null\n ? {\n key: occurrence.recordValue.id,\n title:\n occurrence.recordValue.whoAmI.label ??\n occurrence.recordValue.whoAmI.id ??\n occurrence.recordValue.id,\n value: occurrence.recordValue.whoAmI.id,\n count: occurrence.count,\n }\n : {\n key: 'no_value',\n title: '',\n value: null,\n count: occurrence.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 value: nodeId,\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"]}
@@ -71,7 +71,10 @@ export const TreeAttributeDropDown = ({ filter, onFilterChange, toggleHiddenRef,
71
71
  // disabled-checkbox parents whose children are in a different permission group.
72
72
  // This ensures the count reflects the actual selected descendants regardless of splitting.
73
73
  const selectedChildrenCount = countSelectedTreeChildren(nodeData, selectedNodesIds);
74
- const isHiddenByDefault = includeHiddenOptions && nodeData.accessRecordByDefaultPermission === false;
74
+ const isHiddenByDefault = isAccessPermissionConfigured &&
75
+ (includeHiddenOptions
76
+ ? nodeData.accessRecordByDefaultPermission === false
77
+ : nodeData.accessRecordByDefaultPermission !== true);
75
78
  return (_jsx(FilterTreeNodeTitle, { title: nodeData.title, count: selectedChildrenCount > 0 ? selectedChildrenCount : undefined, ghosted: isHiddenByDefault }));
76
79
  },
77
80
  onExpand: expandedKeys => {
@@ -83,6 +86,9 @@ export const TreeAttributeDropDown = ({ filter, onFilterChange, toggleHiddenRef,
83
86
  },
84
87
  onSelect: (_, info) => {
85
88
  const node = info.node;
89
+ if (node.disableCheckbox) {
90
+ return;
91
+ }
86
92
  handleOnSelect(node, info.selected);
87
93
  },
88
94
  };
@@ -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, useEffect, useState} from 'react';\nimport {type IFilterChildrenTreeDropDownProps} from '../_types';\nimport styled from 'styled-components';\nimport {KitLoader, KitSpace, KitTree} from 'aristid-ds';\nimport {type EventDataNode} from 'antd/lib/tree';\nimport {type ITreeNode, useGetTreeData} from './useGetTreeData';\nimport {ErrorDisplay} from '_ui/components/ErrorDisplay';\nimport {useTreesSearch} from './useTreesSearch';\nimport {useFiltersContext} from '_ui/components/Filters/useFiltersContext';\nimport {EmptyValueCheckbox} from '../../shared/EmptyValueCheckbox';\nimport {SelectAllCheckbox} from '../../shared/SelectAllCheckbox';\nimport {countSelectedTreeChildren} from './utils/countSelectedTreeChildren';\nimport {FilterTreeNodeTitle} from '../../shared/FilterTreeNodeTitle';\nimport {useTreePermissions} from './useTreePermissions';\nimport {useTreeNodeSelection} from './useTreeNodeSelection';\n\nconst ScrollableContent = styled.div`\n max-height: 348px; /* Equal to 10.5 nodes of KitTree */\n overflow-y: auto;\n overflow-x: hidden;\n width: 100%;\n`;\n\nconst DropdownContentWrapper = styled(KitSpace)`\n width: 327px;\n justify-content: center;\n`;\n\n// Applies ghosted styling to tree nodes that have data-ghosted=\"true\" on their title wrapper.\n// Used to visually distinguish hidden-by-default nodes when the toggle is active.\nconst StyledKitTreeWithGhostedNodes = styled(KitTree)`\n & .ant-tree-treenode:has(div[data-ghosted='true']) {\n .ant-typography {\n color: var(--general-colors-neutral-grey-500);\n font-style: italic;\n }\n }\n`;\n\nexport const TreeAttributeDropDown: FunctionComponent<IFilterChildrenTreeDropDownProps> = ({\n filter,\n onFilterChange,\n toggleHiddenRef,\n onPermissionConfiguredChange,\n}) => {\n const {filtersData} = useFiltersContext();\n\n const {treeData, isLoading, error} = useGetTreeData({\n treeId: filter.attribute.linkedTree?.id ?? '',\n attributeId: filter.attribute.id,\n libraryId: filtersData.libraryId,\n });\n\n const includeHiddenOptions = filter.includeHiddenOptions ?? false;\n\n const {displayTree, flattenTreeData, flattenForSelectAll, isAccessPermissionConfigured} = useTreePermissions(\n treeData,\n includeHiddenOptions,\n );\n\n const {selectedNodesIds, allSelected, indeterminate, handleOnSelectEmptyValue, handleOnSelect, handleOnSelectAll} =\n useTreeNodeSelection({\n filter,\n onFilterChange,\n flattenTreeData,\n flattenForSelectAll,\n isAccessPermissionConfigured,\n toggleHiddenRef,\n });\n\n const {filteredTree, expandedNodeIdsFromSearch, SearchInput} = useTreesSearch(displayTree);\n\n const [expandedNodeIdsFromUser, setExpandedNodeIdsFromUser] = useState<Key[]>([]);\n\n useEffect(() => {\n onPermissionConfiguredChange?.(isAccessPermissionConfigured);\n }, [isAccessPermissionConfigured, onPermissionConfiguredChange]);\n\n const treeCommonProps: ComponentProps<typeof StyledKitTreeWithGhostedNodes> = {\n selectedKeys: selectedNodesIds,\n checkedKeys: selectedNodesIds,\n defaultExpandedKeys: selectedNodesIds,\n expandedKeys: [...expandedNodeIdsFromUser, ...expandedNodeIdsFromSearch],\n checkable: true,\n checkStrictly: true,\n multiple: true,\n titleRender(node) {\n const nodeData = node as EventDataNode<ITreeNode>;\n\n // TODO: countSelectedTreeChildren is computed here because the tree may contain\n // disabled-checkbox parents whose children are in a different permission group.\n // This ensures the count reflects the actual selected descendants regardless of splitting.\n const selectedChildrenCount = countSelectedTreeChildren(nodeData, selectedNodesIds);\n const isHiddenByDefault = includeHiddenOptions && nodeData.accessRecordByDefaultPermission === false;\n\n return (\n <FilterTreeNodeTitle\n title={nodeData.title}\n count={selectedChildrenCount > 0 ? selectedChildrenCount : undefined}\n ghosted={isHiddenByDefault}\n />\n );\n },\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 <ScrollableContent>\n <EmptyValueCheckbox onSelect={handleOnSelectEmptyValue} filter={filter} />\n <SelectAllCheckbox\n checked={allSelected}\n indeterminate={indeterminate}\n onChange={checked => handleOnSelectAll(flattenForSelectAll, checked)}\n />\n <StyledKitTreeWithGhostedNodes treeData={filteredTree} {...treeCommonProps} />\n </ScrollableContent>\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, useEffect, useState} from 'react';\nimport {type IFilterChildrenTreeDropDownProps} from '../_types';\nimport styled from 'styled-components';\nimport {KitLoader, KitSpace, KitTree} from 'aristid-ds';\nimport {type EventDataNode} from 'antd/lib/tree';\nimport {type ITreeNode, useGetTreeData} from './useGetTreeData';\nimport {ErrorDisplay} from '_ui/components/ErrorDisplay';\nimport {useTreesSearch} from './useTreesSearch';\nimport {useFiltersContext} from '_ui/components/Filters/useFiltersContext';\nimport {EmptyValueCheckbox} from '../../shared/EmptyValueCheckbox';\nimport {SelectAllCheckbox} from '../../shared/SelectAllCheckbox';\nimport {countSelectedTreeChildren} from './utils/countSelectedTreeChildren';\nimport {FilterTreeNodeTitle} from '../../shared/FilterTreeNodeTitle';\nimport {useTreePermissions} from './useTreePermissions';\nimport {useTreeNodeSelection} from './useTreeNodeSelection';\n\nconst ScrollableContent = styled.div`\n max-height: 348px; /* Equal to 10.5 nodes of KitTree */\n overflow-y: auto;\n overflow-x: hidden;\n width: 100%;\n`;\n\nconst DropdownContentWrapper = styled(KitSpace)`\n width: 327px;\n justify-content: center;\n`;\n\n// Applies ghosted styling to tree nodes that have data-ghosted=\"true\" on their title wrapper.\n// Used to visually distinguish hidden-by-default nodes when the toggle is active.\nconst StyledKitTreeWithGhostedNodes = styled(KitTree)`\n & .ant-tree-treenode:has(div[data-ghosted='true']) {\n .ant-typography {\n color: var(--general-colors-neutral-grey-500);\n font-style: italic;\n }\n }\n`;\n\nexport const TreeAttributeDropDown: FunctionComponent<IFilterChildrenTreeDropDownProps> = ({\n filter,\n onFilterChange,\n toggleHiddenRef,\n onPermissionConfiguredChange,\n}) => {\n const {filtersData} = useFiltersContext();\n\n const {treeData, isLoading, error} = useGetTreeData({\n treeId: filter.attribute.linkedTree?.id ?? '',\n attributeId: filter.attribute.id,\n libraryId: filtersData.libraryId,\n });\n\n const includeHiddenOptions = filter.includeHiddenOptions ?? false;\n\n const {displayTree, flattenTreeData, flattenForSelectAll, isAccessPermissionConfigured} = useTreePermissions(\n treeData,\n includeHiddenOptions,\n );\n\n const {selectedNodesIds, allSelected, indeterminate, handleOnSelectEmptyValue, handleOnSelect, handleOnSelectAll} =\n useTreeNodeSelection({\n filter,\n onFilterChange,\n flattenTreeData,\n flattenForSelectAll,\n isAccessPermissionConfigured,\n toggleHiddenRef,\n });\n\n const {filteredTree, expandedNodeIdsFromSearch, SearchInput} = useTreesSearch(displayTree);\n\n const [expandedNodeIdsFromUser, setExpandedNodeIdsFromUser] = useState<Key[]>([]);\n\n useEffect(() => {\n onPermissionConfiguredChange?.(isAccessPermissionConfigured);\n }, [isAccessPermissionConfigured, onPermissionConfiguredChange]);\n\n const treeCommonProps: ComponentProps<typeof StyledKitTreeWithGhostedNodes> = {\n selectedKeys: selectedNodesIds,\n checkedKeys: selectedNodesIds,\n defaultExpandedKeys: selectedNodesIds,\n expandedKeys: [...expandedNodeIdsFromUser, ...expandedNodeIdsFromSearch],\n checkable: true,\n checkStrictly: true,\n multiple: true,\n titleRender(node) {\n const nodeData = node as EventDataNode<ITreeNode>;\n\n // TODO: countSelectedTreeChildren is computed here because the tree may contain\n // disabled-checkbox parents whose children are in a different permission group.\n // This ensures the count reflects the actual selected descendants regardless of splitting.\n const selectedChildrenCount = countSelectedTreeChildren(nodeData, selectedNodesIds);\n const isHiddenByDefault =\n isAccessPermissionConfigured &&\n (includeHiddenOptions\n ? nodeData.accessRecordByDefaultPermission === false\n : nodeData.accessRecordByDefaultPermission !== true);\n\n return (\n <FilterTreeNodeTitle\n title={nodeData.title}\n count={selectedChildrenCount > 0 ? selectedChildrenCount : undefined}\n ghosted={isHiddenByDefault}\n />\n );\n },\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 if (node.disableCheckbox) {\n return;\n }\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 <ScrollableContent>\n <EmptyValueCheckbox onSelect={handleOnSelectEmptyValue} filter={filter} />\n <SelectAllCheckbox\n checked={allSelected}\n indeterminate={indeterminate}\n onChange={checked => handleOnSelectAll(flattenForSelectAll, checked)}\n />\n <StyledKitTreeWithGhostedNodes treeData={filteredTree} {...treeCommonProps} />\n </ScrollableContent>\n </DropdownContentWrapper>\n );\n};\n"]}
@@ -6,7 +6,7 @@ import { buildFlattenTree } from './utils/buildFlattenTreeMap';
6
6
  import { filterTreeByPermission } from './utils/filterTreeByPermission';
7
7
  const markDisabledParents = (nodes) => nodes.map(node => ({
8
8
  ...node,
9
- disableCheckbox: node.accessRecordByDefaultPermission === false,
9
+ disableCheckbox: node.accessRecordByDefaultPermission !== true,
10
10
  children: markDisabledParents(node.children),
11
11
  }));
12
12
  export const useTreePermissions = (treeData, includeHiddenOptions) => {
@@ -1 +1 @@
1
- {"version":3,"file":"useTreePermissions.js","sourceRoot":"","sources":["../../../../../../src/components/Filters/filter-items/filter-type/tree/useTreePermissions.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAC,OAAO,EAAC,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAC,gBAAgB,EAAC,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAC,sBAAsB,EAAC,MAAM,gCAAgC,CAAC;AAEtE,MAAM,mBAAmB,GAAG,CAAC,KAAkB,EAAe,EAAE,CAC5D,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,GAAG,IAAI;IACP,eAAe,EAAE,IAAI,CAAC,+BAA+B,KAAK,KAAK;IAC/D,QAAQ,EAAE,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC;CAC/C,CAAC,CAAC,CAAC;AASR,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,QAAqB,EAAE,oBAA6B,EAAoB,EAAE;IACzG,wEAAwE;IACxE,mFAAmF;IACnF,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEpF,MAAM,kCAAkC,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,eAAe,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAElH,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE9E,0DAA0D;IAC1D,MAAM,4BAA4B,GAAG,OAAO,CAAC,GAAG,EAAE;QAC9C,MAAM,GAAG,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;QAC9C,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;YACrB,IAAI,CAAC,IAAI,CAAC,+BAA+B,EAAE,CAAC;gBACxC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACnB,CAAC;QACL,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACf,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,uEAAuE;IACvE,0FAA0F;IAC1F,MAAM,4BAA4B,GAAG,OAAO,CACxC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,+BAA+B,KAAK,IAAI,CAAC,EACtG,CAAC,eAAe,CAAC,CACpB,CAAC;IAEF,MAAM,WAAW,GACb,4BAA4B,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAE1G,MAAM,mBAAmB,GACrB,4BAA4B,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,eAAe,CAAC;IAE3G,OAAO;QACH,WAAW;QACX,eAAe;QACf,mBAAmB;QACnB,4BAA4B;KAC/B,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 {useMemo} from 'react';\nimport {type ITreeNode} from './useGetTreeData';\nimport {buildFlattenTree} from './utils/buildFlattenTreeMap';\nimport {filterTreeByPermission} from './utils/filterTreeByPermission';\n\nconst markDisabledParents = (nodes: ITreeNode[]): ITreeNode[] =>\n nodes.map(node => ({\n ...node,\n disableCheckbox: node.accessRecordByDefaultPermission === false,\n children: markDisabledParents(node.children),\n }));\n\nexport interface ITreePermissions {\n displayTree: ITreeNode[];\n flattenTreeData: Map<string, ITreeNode>;\n flattenForSelectAll: Map<string, ITreeNode>;\n isAccessPermissionConfigured: boolean;\n}\n\nexport const useTreePermissions = (treeData: ITreeNode[], includeHiddenOptions: boolean): ITreePermissions => {\n // visibleOnlyTree: nodes with accessRecordByDefaultPermission === true,\n // plus structural parents (=== false or undefined) that have === true descendants.\n const visibleOnlyTree = useMemo(() => filterTreeByPermission(treeData), [treeData]);\n\n const visibleOnlyTreeWithDisabledParents = useMemo(() => markDisabledParents(visibleOnlyTree), [visibleOnlyTree]);\n\n const flattenTreeData = useMemo(() => buildFlattenTree(treeData), [treeData]);\n\n // Only === true nodes are selectable; other are excluded.\n const flattenSelectableVisibleTree = useMemo(() => {\n const map = buildFlattenTree(visibleOnlyTree);\n map.forEach((node, id) => {\n if (!node.accessRecordByDefaultPermission) {\n map.delete(id);\n }\n });\n return map;\n }, [visibleOnlyTree]);\n\n // Active only when at least one node is explicitly visible (=== true).\n // When all permissions are undefined, the feature is inactive and the full tree is shown.\n const isAccessPermissionConfigured = useMemo(\n () => Array.from(flattenTreeData.values()).some(node => node.accessRecordByDefaultPermission === true),\n [flattenTreeData],\n );\n\n const displayTree =\n isAccessPermissionConfigured && !includeHiddenOptions ? visibleOnlyTreeWithDisabledParents : treeData;\n\n const flattenForSelectAll =\n isAccessPermissionConfigured && !includeHiddenOptions ? flattenSelectableVisibleTree : flattenTreeData;\n\n return {\n displayTree,\n flattenTreeData,\n flattenForSelectAll,\n isAccessPermissionConfigured,\n };\n};\n"]}
1
+ {"version":3,"file":"useTreePermissions.js","sourceRoot":"","sources":["../../../../../../src/components/Filters/filter-items/filter-type/tree/useTreePermissions.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAC,OAAO,EAAC,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAC,gBAAgB,EAAC,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAC,sBAAsB,EAAC,MAAM,gCAAgC,CAAC;AAEtE,MAAM,mBAAmB,GAAG,CAAC,KAAkB,EAAe,EAAE,CAC5D,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,GAAG,IAAI;IACP,eAAe,EAAE,IAAI,CAAC,+BAA+B,KAAK,IAAI;IAC9D,QAAQ,EAAE,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC;CAC/C,CAAC,CAAC,CAAC;AASR,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,QAAqB,EAAE,oBAA6B,EAAoB,EAAE;IACzG,wEAAwE;IACxE,mFAAmF;IACnF,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEpF,MAAM,kCAAkC,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,eAAe,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAElH,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE9E,0DAA0D;IAC1D,MAAM,4BAA4B,GAAG,OAAO,CAAC,GAAG,EAAE;QAC9C,MAAM,GAAG,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;QAC9C,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;YACrB,IAAI,CAAC,IAAI,CAAC,+BAA+B,EAAE,CAAC;gBACxC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACnB,CAAC;QACL,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACf,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,uEAAuE;IACvE,0FAA0F;IAC1F,MAAM,4BAA4B,GAAG,OAAO,CACxC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,+BAA+B,KAAK,IAAI,CAAC,EACtG,CAAC,eAAe,CAAC,CACpB,CAAC;IAEF,MAAM,WAAW,GACb,4BAA4B,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAE1G,MAAM,mBAAmB,GACrB,4BAA4B,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,eAAe,CAAC;IAE3G,OAAO;QACH,WAAW;QACX,eAAe;QACf,mBAAmB;QACnB,4BAA4B;KAC/B,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 {useMemo} from 'react';\nimport {type ITreeNode} from './useGetTreeData';\nimport {buildFlattenTree} from './utils/buildFlattenTreeMap';\nimport {filterTreeByPermission} from './utils/filterTreeByPermission';\n\nconst markDisabledParents = (nodes: ITreeNode[]): ITreeNode[] =>\n nodes.map(node => ({\n ...node,\n disableCheckbox: node.accessRecordByDefaultPermission !== true,\n children: markDisabledParents(node.children),\n }));\n\nexport interface ITreePermissions {\n displayTree: ITreeNode[];\n flattenTreeData: Map<string, ITreeNode>;\n flattenForSelectAll: Map<string, ITreeNode>;\n isAccessPermissionConfigured: boolean;\n}\n\nexport const useTreePermissions = (treeData: ITreeNode[], includeHiddenOptions: boolean): ITreePermissions => {\n // visibleOnlyTree: nodes with accessRecordByDefaultPermission === true,\n // plus structural parents (=== false or undefined) that have === true descendants.\n const visibleOnlyTree = useMemo(() => filterTreeByPermission(treeData), [treeData]);\n\n const visibleOnlyTreeWithDisabledParents = useMemo(() => markDisabledParents(visibleOnlyTree), [visibleOnlyTree]);\n\n const flattenTreeData = useMemo(() => buildFlattenTree(treeData), [treeData]);\n\n // Only === true nodes are selectable; other are excluded.\n const flattenSelectableVisibleTree = useMemo(() => {\n const map = buildFlattenTree(visibleOnlyTree);\n map.forEach((node, id) => {\n if (!node.accessRecordByDefaultPermission) {\n map.delete(id);\n }\n });\n return map;\n }, [visibleOnlyTree]);\n\n // Active only when at least one node is explicitly visible (=== true).\n // When all permissions are undefined, the feature is inactive and the full tree is shown.\n const isAccessPermissionConfigured = useMemo(\n () => Array.from(flattenTreeData.values()).some(node => node.accessRecordByDefaultPermission === true),\n [flattenTreeData],\n );\n\n const displayTree =\n isAccessPermissionConfigured && !includeHiddenOptions ? visibleOnlyTreeWithDisabledParents : treeData;\n\n const flattenForSelectAll =\n isAccessPermissionConfigured && !includeHiddenOptions ? flattenSelectableVisibleTree : flattenTreeData;\n\n return {\n displayTree,\n flattenTreeData,\n flattenForSelectAll,\n isAccessPermissionConfigured,\n };\n};\n"]}