@leav/ui 1.6.0 → 1.7.0-143193eb

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 (327) hide show
  1. package/README.md +13 -12
  2. package/dist/__mocks__/common/library.d.ts +1 -0
  3. package/dist/__mocks__/react-i18next.d.ts +1 -1
  4. package/dist/_gqlTypes/index.d.ts +1128 -713
  5. package/dist/_gqlTypes/index.js +233 -75
  6. package/dist/_gqlTypes/index.js.map +1 -1
  7. package/dist/_queries/attributes/attributeDetailsFragment.js +5 -0
  8. package/dist/_queries/attributes/attributeDetailsFragment.js.map +1 -1
  9. package/dist/_queries/attributes/getAttributeWithEmbeddedFields.d.ts +1 -1
  10. package/dist/_queries/libraries/libraryDetailsFragment.js +1 -0
  11. package/dist/_queries/libraries/libraryDetailsFragment.js.map +1 -1
  12. package/dist/_queries/trees/treeNodeChildrenQuery.js +2 -0
  13. package/dist/_queries/trees/treeNodeChildrenQuery.js.map +1 -1
  14. package/dist/_queries/views/viewDetailsFragment.js +1 -0
  15. package/dist/_queries/views/viewDetailsFragment.js.map +1 -1
  16. package/dist/components/AttributePicker/AttributesList/AttributesList.js +3 -7
  17. package/dist/components/AttributePicker/AttributesList/AttributesList.js.map +1 -1
  18. package/dist/components/AttributesSelectionList/SelectedAttributesList/SelectedAttributesList.js +20 -12
  19. package/dist/components/AttributesSelectionList/SelectedAttributesList/SelectedAttributesList.js.map +1 -1
  20. package/dist/components/AttributesSelectionList/reducer/__mocks__/attributesSelectionListStateContext.d.ts +1 -1
  21. package/dist/components/AttributesSelectionList/sharedComponents.d.ts +159 -153
  22. package/dist/components/EditLibraryModal/EditLibrary/EditLibraryAttributes/AttributesList/AttributesList.js +3 -7
  23. package/dist/components/EditLibraryModal/EditLibrary/EditLibraryAttributes/AttributesList/AttributesList.js.map +1 -1
  24. package/dist/components/Explorer/DataView.d.ts +2 -0
  25. package/dist/components/Explorer/DataView.js +6 -3
  26. package/dist/components/Explorer/DataView.js.map +1 -1
  27. package/dist/components/Explorer/Explorer.d.ts +2 -0
  28. package/dist/components/Explorer/Explorer.js +7 -5
  29. package/dist/components/Explorer/Explorer.js.map +1 -1
  30. package/dist/components/Explorer/ExplorerFiltersAndSorts.js +1 -1
  31. package/dist/components/Explorer/ExplorerFiltersAndSorts.js.map +1 -1
  32. package/dist/components/Explorer/TableCell.js +15 -23
  33. package/dist/components/Explorer/TableCell.js.map +1 -1
  34. package/dist/components/Explorer/TableNameCell.js +3 -2
  35. package/dist/components/Explorer/TableNameCell.js.map +1 -1
  36. package/dist/components/Explorer/_queries/useExplorerData.d.ts +7 -7
  37. package/dist/components/Explorer/_queries/useExplorerData.js +19 -7
  38. package/dist/components/Explorer/_queries/useExplorerData.js.map +1 -1
  39. package/dist/components/Explorer/actions-item/useEditStatusItemAction.js +3 -2
  40. package/dist/components/Explorer/actions-item/useEditStatusItemAction.js.map +1 -1
  41. package/dist/components/Explorer/actions-item/useReplaceItemAction.d.ts +2 -1
  42. package/dist/components/Explorer/actions-item/useReplaceItemAction.js +5 -4
  43. package/dist/components/Explorer/actions-item/useReplaceItemAction.js.map +1 -1
  44. package/dist/components/Explorer/actions-mass/edit-attribute/EditTreeAttributeValueLine.d.ts +2 -4
  45. package/dist/components/Explorer/actions-mass/edit-attribute/EditTreeAttributeValueLine.js +18 -16
  46. package/dist/components/Explorer/actions-mass/edit-attribute/EditTreeAttributeValueLine.js.map +1 -1
  47. package/dist/components/Explorer/actions-mass/edit-attribute/EditTreeAttributeValuesMapping.js +2 -2
  48. package/dist/components/Explorer/actions-mass/edit-attribute/EditTreeAttributeValuesMapping.js.map +1 -1
  49. package/dist/components/Explorer/actions-mass/edit-attribute/useListEditableAttributeHook.js +9 -1
  50. package/dist/components/Explorer/actions-mass/edit-attribute/useListEditableAttributeHook.js.map +1 -1
  51. package/dist/components/Explorer/actions-mass/edit-attribute/useListTreeAttributeValuesHook.d.ts +10 -3
  52. package/dist/components/Explorer/actions-mass/edit-attribute/useListTreeAttributeValuesHook.js +16 -6
  53. package/dist/components/Explorer/actions-mass/edit-attribute/useListTreeAttributeValuesHook.js.map +1 -1
  54. package/dist/components/Explorer/actions-mass/export/ExportProfileSelectionModal.d.ts +10 -0
  55. package/dist/components/Explorer/actions-mass/export/ExportProfileSelectionModal.js +46 -0
  56. package/dist/components/Explorer/actions-mass/export/ExportProfileSelectionModal.js.map +1 -0
  57. package/dist/components/Explorer/actions-mass/export/content/NoProfiles.d.ts +1 -0
  58. package/dist/components/Explorer/actions-mass/export/content/NoProfiles.js +17 -0
  59. package/dist/components/Explorer/actions-mass/export/content/NoProfiles.js.map +1 -0
  60. package/dist/components/Explorer/actions-mass/export/content/ProfilesSelection.d.ts +8 -0
  61. package/dist/components/Explorer/actions-mass/export/content/ProfilesSelection.js +49 -0
  62. package/dist/components/Explorer/actions-mass/export/content/ProfilesSelection.js.map +1 -0
  63. package/dist/components/Explorer/actions-mass/export/useGetLibraryExportProfiles.d.ts +27 -0
  64. package/dist/components/Explorer/actions-mass/export/useGetLibraryExportProfiles.js +48 -0
  65. package/dist/components/Explorer/actions-mass/export/useGetLibraryExportProfiles.js.map +1 -0
  66. package/dist/components/Explorer/actions-mass/useDeactivateMassAction.js +3 -2
  67. package/dist/components/Explorer/actions-mass/useDeactivateMassAction.js.map +1 -1
  68. package/dist/components/Explorer/actions-mass/useDeleteLinkValues.js +3 -2
  69. package/dist/components/Explorer/actions-mass/useDeleteLinkValues.js.map +1 -1
  70. package/dist/components/Explorer/actions-mass/useEditAttributeMassAction.js +3 -2
  71. package/dist/components/Explorer/actions-mass/useEditAttributeMassAction.js.map +1 -1
  72. package/dist/components/Explorer/actions-mass/useExportMassAction.d.ts +7 -4
  73. package/dist/components/Explorer/actions-mass/useExportMassAction.js +80 -73
  74. package/dist/components/Explorer/actions-mass/useExportMassAction.js.map +1 -1
  75. package/dist/components/Explorer/actions-mass/useMassActions.js +3 -2
  76. package/dist/components/Explorer/actions-mass/useMassActions.js.map +1 -1
  77. package/dist/components/Explorer/actions-primary/useCreatePrimaryAction.js +3 -2
  78. package/dist/components/Explorer/actions-primary/useCreatePrimaryAction.js.map +1 -1
  79. package/dist/components/Explorer/actions-primary/useLinkPrimaryAction.d.ts +2 -1
  80. package/dist/components/Explorer/actions-primary/useLinkPrimaryAction.js +5 -4
  81. package/dist/components/Explorer/actions-primary/useLinkPrimaryAction.js.map +1 -1
  82. package/dist/components/Explorer/link-item/LinkModal.d.ts +1 -0
  83. package/dist/components/Explorer/link-item/LinkModal.js +2 -2
  84. package/dist/components/Explorer/link-item/LinkModal.js.map +1 -1
  85. package/dist/components/Explorer/list-saved-views/SavedViews.js +4 -3
  86. package/dist/components/Explorer/list-saved-views/SavedViews.js.map +1 -1
  87. package/dist/components/Explorer/manage-view-settings/_shared/ColumnItem.js +5 -8
  88. package/dist/components/Explorer/manage-view-settings/_shared/ColumnItem.js.map +1 -1
  89. package/dist/components/Explorer/manage-view-settings/configure-display/attributes/SelectVisibleAttributes.js +3 -2
  90. package/dist/components/Explorer/manage-view-settings/configure-display/attributes/SelectVisibleAttributes.js.map +1 -1
  91. package/dist/components/Explorer/manage-view-settings/configure-display/view-type/SelectViewType.js +2 -2
  92. package/dist/components/Explorer/manage-view-settings/configure-display/view-type/SelectViewType.js.map +1 -1
  93. package/dist/components/Explorer/manage-view-settings/filter-items/FilterItems.js +7 -6
  94. package/dist/components/Explorer/manage-view-settings/filter-items/FilterItems.js.map +1 -1
  95. package/dist/components/Explorer/manage-view-settings/filter-items/FilterListItem.js +3 -2
  96. package/dist/components/Explorer/manage-view-settings/filter-items/FilterListItem.js.map +1 -1
  97. package/dist/components/Explorer/manage-view-settings/open-view-settings/useOpenViewSettings.js +5 -4
  98. package/dist/components/Explorer/manage-view-settings/open-view-settings/useOpenViewSettings.js.map +1 -1
  99. package/dist/components/Explorer/manage-view-settings/router-menu/SettingItem.js +3 -2
  100. package/dist/components/Explorer/manage-view-settings/router-menu/SettingItem.js.map +1 -1
  101. package/dist/components/Explorer/manage-view-settings/router-menu/SettingsPanel.js +3 -2
  102. package/dist/components/Explorer/manage-view-settings/router-menu/SettingsPanel.js.map +1 -1
  103. package/dist/components/Explorer/manage-view-settings/save-view/LabelViewFormModal.js +3 -2
  104. package/dist/components/Explorer/manage-view-settings/save-view/LabelViewFormModal.js.map +1 -1
  105. package/dist/components/Explorer/manage-view-settings/save-view/prepareViewForRequest.js +3 -0
  106. package/dist/components/Explorer/manage-view-settings/save-view/prepareViewForRequest.js.map +1 -1
  107. package/dist/components/Explorer/manage-view-settings/save-view/useCreateNewView.js +3 -2
  108. package/dist/components/Explorer/manage-view-settings/save-view/useCreateNewView.js.map +1 -1
  109. package/dist/components/Explorer/manage-view-settings/save-view/useDeleteView.js +4 -3
  110. package/dist/components/Explorer/manage-view-settings/save-view/useDeleteView.js.map +1 -1
  111. package/dist/components/Explorer/manage-view-settings/save-view/useEditLabelView.js +3 -2
  112. package/dist/components/Explorer/manage-view-settings/save-view/useEditLabelView.js.map +1 -1
  113. package/dist/components/Explorer/manage-view-settings/save-view/useResetView.js +3 -2
  114. package/dist/components/Explorer/manage-view-settings/save-view/useResetView.js.map +1 -1
  115. package/dist/components/Explorer/manage-view-settings/save-view/useShareView.js +3 -2
  116. package/dist/components/Explorer/manage-view-settings/save-view/useShareView.js.map +1 -1
  117. package/dist/components/Explorer/manage-view-settings/save-view/useUpdateView.js +3 -2
  118. package/dist/components/Explorer/manage-view-settings/save-view/useUpdateView.js.map +1 -1
  119. package/dist/components/Explorer/manage-view-settings/sort-items/SortItems.js +7 -6
  120. package/dist/components/Explorer/manage-view-settings/sort-items/SortItems.js.map +1 -1
  121. package/dist/components/Explorer/manage-view-settings/sort-items/SortListItem.js +3 -2
  122. package/dist/components/Explorer/manage-view-settings/sort-items/SortListItem.js.map +1 -1
  123. package/dist/components/Explorer/manage-view-settings/store-view-settings/viewSettingsReducer.js.map +1 -1
  124. package/dist/components/Explorer/useSearchInput.js +6 -2
  125. package/dist/components/Explorer/useSearchInput.js.map +1 -1
  126. package/dist/components/Filters/FiltersProvider.d.ts +2 -2
  127. package/dist/components/Filters/FiltersProvider.js.map +1 -1
  128. package/dist/components/Filters/_types.d.ts +3 -0
  129. package/dist/components/Filters/_types.js.map +1 -1
  130. package/dist/components/Filters/context/filtersReducer.js +7 -4
  131. package/dist/components/Filters/context/filtersReducer.js.map +1 -1
  132. package/dist/components/Filters/context/useGetTreeFilters.d.ts +8 -6
  133. package/dist/components/Filters/context/useGetTreeFilters.js +41 -18
  134. package/dist/components/Filters/context/useGetTreeFilters.js.map +1 -1
  135. package/dist/components/Filters/filter-items/CommonFilterItem.d.ts +1 -0
  136. package/dist/components/Filters/filter-items/CommonFilterItem.js +29 -9
  137. package/dist/components/Filters/filter-items/CommonFilterItem.js.map +1 -1
  138. package/dist/components/Filters/filter-items/EmptyValueCheckbox.d.ts +8 -0
  139. package/dist/components/Filters/filter-items/EmptyValueCheckbox.js +16 -0
  140. package/dist/components/Filters/filter-items/EmptyValueCheckbox.js.map +1 -0
  141. package/dist/components/Filters/filter-items/SelectAllCheckbox.d.ts +8 -0
  142. package/dist/components/Filters/filter-items/SelectAllCheckbox.js +22 -0
  143. package/dist/components/Filters/filter-items/SelectAllCheckbox.js.map +1 -0
  144. package/dist/components/Filters/filter-items/filter-type/BooleanAttributeDropdown.js +23 -9
  145. package/dist/components/Filters/filter-items/filter-type/BooleanAttributeDropdown.js.map +1 -1
  146. package/dist/components/Filters/filter-items/filter-type/ColorAttributeDropDown.js +9 -8
  147. package/dist/components/Filters/filter-items/filter-type/ColorAttributeDropDown.js.map +1 -1
  148. package/dist/components/Filters/filter-items/filter-type/FilterDropDown.js +4 -3
  149. package/dist/components/Filters/filter-items/filter-type/FilterDropDown.js.map +1 -1
  150. package/dist/components/Filters/filter-items/filter-type/FilterDropdownContent.js +2 -2
  151. package/dist/components/Filters/filter-items/filter-type/FilterDropdownContent.js.map +1 -1
  152. package/dist/components/Filters/filter-items/filter-type/FilterValueListDropDown.d.ts +0 -1
  153. package/dist/components/Filters/filter-items/filter-type/FilterValueListDropDown.js +17 -23
  154. package/dist/components/Filters/filter-items/filter-type/FilterValueListDropDown.js.map +1 -1
  155. package/dist/components/Filters/filter-items/filter-type/{TreeAttributeDropDown.d.ts → tree/TreeAttributeDropDown.d.ts} +1 -1
  156. package/dist/components/Filters/filter-items/filter-type/tree/TreeAttributeDropDown.js +130 -0
  157. package/dist/components/Filters/filter-items/filter-type/tree/TreeAttributeDropDown.js.map +1 -0
  158. package/dist/components/Filters/filter-items/filter-type/tree/useGetTreeData.d.ts +20 -0
  159. package/dist/components/Filters/filter-items/filter-type/tree/useGetTreeData.js +72 -0
  160. package/dist/components/Filters/filter-items/filter-type/tree/useGetTreeData.js.map +1 -0
  161. package/dist/components/Filters/filter-items/filter-type/tree/useTreesSearch.d.ts +7 -0
  162. package/dist/components/Filters/filter-items/filter-type/tree/useTreesSearch.js +36 -0
  163. package/dist/components/Filters/filter-items/filter-type/tree/useTreesSearch.js.map +1 -0
  164. package/dist/components/Filters/filter-items/filter-type/tree/utils/buildFlattenTreeMap.d.ts +2 -0
  165. package/dist/components/Filters/filter-items/filter-type/tree/utils/buildFlattenTreeMap.js +14 -0
  166. package/dist/components/Filters/filter-items/filter-type/tree/utils/buildFlattenTreeMap.js.map +1 -0
  167. package/dist/components/Filters/filter-items/filter-type/tree/utils/filterTreeByPermission.d.ts +2 -0
  168. package/dist/components/Filters/filter-items/filter-type/tree/utils/filterTreeByPermission.js +15 -0
  169. package/dist/components/Filters/filter-items/filter-type/tree/utils/filterTreeByPermission.js.map +1 -0
  170. package/dist/components/Filters/filter-items/filter-type/tree/utils/getSelectAllState.d.ts +5 -0
  171. package/dist/components/Filters/filter-items/filter-type/tree/utils/getSelectAllState.js +17 -0
  172. package/dist/components/Filters/filter-items/filter-type/tree/utils/getSelectAllState.js.map +1 -0
  173. package/dist/components/Filters/filter-items/filter-type/useConditionOptionsByType.js +3 -13
  174. package/dist/components/Filters/filter-items/filter-type/useConditionOptionsByType.js.map +1 -1
  175. package/dist/components/Filters/index.d.ts +1 -0
  176. package/dist/components/Filters/index.js +1 -0
  177. package/dist/components/Filters/index.js.map +1 -1
  178. package/dist/components/Filters/prepareFiltersForRequest.js +36 -3
  179. package/dist/components/Filters/prepareFiltersForRequest.js.map +1 -1
  180. package/dist/components/Filters/useFilters.d.ts +5 -0
  181. package/dist/components/Filters/useTransformFilters.js +4 -0
  182. package/dist/components/Filters/useTransformFilters.js.map +1 -1
  183. package/dist/components/LibraryItemsList/FiltersPanel/Filter/Filter.d.ts +1 -3
  184. package/dist/components/LibraryItemsList/FiltersPanel/Filter/Filter.js +6 -2
  185. package/dist/components/LibraryItemsList/FiltersPanel/Filter/Filter.js.map +1 -1
  186. package/dist/components/LibraryItemsList/FiltersPanel/FiltersOptions.js +1 -8
  187. package/dist/components/LibraryItemsList/FiltersPanel/FiltersOptions.js.map +1 -1
  188. package/dist/components/LibraryItemsList/FiltersPanel/FiltersPanel.js +15 -17
  189. package/dist/components/LibraryItemsList/FiltersPanel/FiltersPanel.js.map +1 -1
  190. package/dist/components/LibraryItemsList/LibraryItemsListTable/ChooseTableColumns/ChooseTableColumns.js +0 -6
  191. package/dist/components/LibraryItemsList/LibraryItemsListTable/ChooseTableColumns/ChooseTableColumns.js.map +1 -1
  192. package/dist/components/LibraryItemsList/MenuView/MenuView.js +4 -4
  193. package/dist/components/LibraryItemsList/MenuView/MenuView.js.map +1 -1
  194. package/dist/components/LibraryItemsList/ViewPanel/View/View.d.ts +1 -3
  195. package/dist/components/LibraryItemsList/ViewPanel/View/View.js +9 -4
  196. package/dist/components/LibraryItemsList/ViewPanel/View/View.js.map +1 -1
  197. package/dist/components/LibraryItemsList/ViewPanel/ViewPanel.js +36 -14
  198. package/dist/components/LibraryItemsList/ViewPanel/ViewPanel.js.map +1 -1
  199. package/dist/components/LibraryItemsList/hooks/useSearchReducer/useSearchReducer.d.ts +1 -1
  200. package/dist/components/Notifications/hooks/useNotificationSubscription.js +5 -4
  201. package/dist/components/Notifications/hooks/useNotificationSubscription.js.map +1 -1
  202. package/dist/components/RecordEdition/EditRecord/EditRecord.d.ts +1 -0
  203. package/dist/components/RecordEdition/EditRecord/EditRecord.js +3 -3
  204. package/dist/components/RecordEdition/EditRecord/EditRecord.js.map +1 -1
  205. package/dist/components/RecordEdition/EditRecordContent/antdUtils.js +2 -0
  206. package/dist/components/RecordEdition/EditRecordContent/antdUtils.js.map +1 -1
  207. package/dist/components/RecordEdition/EditRecordContent/hooks/__mocks__/useDeleteValueMutation.d.ts +1 -1
  208. package/dist/components/RecordEdition/EditRecordContent/hooks/__mocks__/useSaveValueMutation.d.ts +1 -1
  209. package/dist/components/RecordEdition/EditRecordContent/shared/ValuesVersionBtn/ValuesVersionBtn.js +5 -20
  210. package/dist/components/RecordEdition/EditRecordContent/shared/ValuesVersionBtn/ValuesVersionBtn.js.map +1 -1
  211. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/LinkField.d.ts +1 -11
  212. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/LinkField.js +8 -95
  213. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/LinkField.js.map +1 -1
  214. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/_types.d.ts +8 -0
  215. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/_types.js +2 -0
  216. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/_types.js.map +1 -0
  217. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/explorer/LinkFieldExplorer.d.ts +6 -0
  218. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/explorer/LinkFieldExplorer.js +77 -0
  219. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/explorer/LinkFieldExplorer.js.map +1 -0
  220. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/{link-record → explorer/link-record}/useExplorerLinkRecords.d.ts +5 -7
  221. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/{link-record → explorer/link-record}/useExplorerLinkRecords.js +3 -10
  222. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/explorer/link-record/useExplorerLinkRecords.js.map +1 -0
  223. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/{link-record → explorer/link-record}/useLinkRecords.d.ts +5 -6
  224. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/explorer/link-record/useLinkRecords.js +98 -0
  225. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/explorer/link-record/useLinkRecords.js.map +1 -0
  226. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/shared/{ExplorerWrapper.d.ts → InputExtraAlignLeft.d.ts} +54 -52
  227. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/{link-record/ActionButton.js → shared/InputExtraAlignLeft.js} +4 -4
  228. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/shared/InputExtraAlignLeft.js.map +1 -0
  229. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/shared/InputWrapper.d.ts +3 -0
  230. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/shared/InputWrapper.js +31 -0
  231. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/shared/InputWrapper.js.map +1 -0
  232. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/shared/Wrapper.d.ts +3 -0
  233. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/shared/Wrapper.js +8 -0
  234. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/shared/Wrapper.js.map +1 -0
  235. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/tag/LinkFieldTags.d.ts +3 -0
  236. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/tag/LinkFieldTags.js +57 -0
  237. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/tag/LinkFieldTags.js.map +1 -0
  238. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/tag/link-record/useLinkRecord.d.ts +16 -0
  239. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/tag/link-record/useLinkRecord.js +85 -0
  240. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/tag/link-record/useLinkRecord.js.map +1 -0
  241. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/tag/unlink-record/useUnlinkRecord.d.ts +19 -0
  242. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/tag/unlink-record/useUnlinkRecord.js +43 -0
  243. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/tag/unlink-record/useUnlinkRecord.js.map +1 -0
  244. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/unlink-all-records/useUnlinkAllRecords.d.ts +16 -0
  245. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/unlink-all-records/useUnlinkAllRecords.js +27 -0
  246. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/unlink-all-records/useUnlinkAllRecords.js.map +1 -0
  247. package/dist/components/RecordEdition/EditRecordContent/uiElements/StandardField/StandardField.js +4 -3
  248. package/dist/components/RecordEdition/EditRecordContent/uiElements/StandardField/StandardField.js.map +1 -1
  249. package/dist/components/RecordEdition/EditRecordContent/uiElements/StandardField/StandardFieldValue/DSRichTextWrapper.js +1 -1
  250. package/dist/components/RecordEdition/EditRecordContent/uiElements/StandardField/StandardFieldValue/DSRichTextWrapper.js.map +1 -1
  251. package/dist/components/RecordEdition/EditRecordContent/uiElements/StandardField/StandardFieldValue/StandardFieldValue.js +2 -0
  252. package/dist/components/RecordEdition/EditRecordContent/uiElements/StandardField/StandardFieldValue/StandardFieldValue.js.map +1 -1
  253. package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/TreeField.js +9 -2
  254. package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/TreeField.js.map +1 -1
  255. package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/display-tree-node/TreeFieldWrapper.d.ts +53 -51
  256. package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/display-tree-node/TreeNodeItem.js +3 -2
  257. package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/display-tree-node/TreeNodeItem.js.map +1 -1
  258. package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/manage-tree-node-selection/SelectTreeNodeModal.d.ts +2 -1
  259. package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/manage-tree-node-selection/SelectTreeNodeModal.js +4 -7
  260. package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/manage-tree-node-selection/SelectTreeNodeModal.js.map +1 -1
  261. package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/manage-tree-node-selection/useManageTreeNodeSelection.d.ts +3 -2
  262. package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/manage-tree-node-selection/useManageTreeNodeSelection.js +2 -2
  263. package/dist/components/RecordEdition/EditRecordContent/uiElements/TreeField/manage-tree-node-selection/useManageTreeNodeSelection.js.map +1 -1
  264. package/dist/components/RecordEdition/EditRecordContent/uiElements/shared/ComputeIndicator.js +3 -2
  265. package/dist/components/RecordEdition/EditRecordContent/uiElements/shared/ComputeIndicator.js.map +1 -1
  266. package/dist/components/RecordEdition/EditRecordPage/EditRecordPage.d.ts +1 -0
  267. package/dist/components/RecordEdition/EditRecordPage/EditRecordPage.js +2 -2
  268. package/dist/components/RecordEdition/EditRecordPage/EditRecordPage.js.map +1 -1
  269. package/dist/components/RecordEdition/EditRecordSidebar/RecordSummary/RecordInformations/RecordInformations.js +3 -2
  270. package/dist/components/RecordEdition/EditRecordSidebar/RecordSummary/RecordInformations/RecordInformations.js.map +1 -1
  271. package/dist/components/RecordEdition/EditRecordSidebar/ValuesSummary/ValuesSummary.js +4 -3
  272. package/dist/components/RecordEdition/EditRecordSidebar/ValuesSummary/ValuesSummary.js.map +1 -1
  273. package/dist/components/RecordEdition/EditRecordSidebar/ValuesVersions/ValuesVersions.js +3 -2
  274. package/dist/components/RecordEdition/EditRecordSidebar/ValuesVersions/ValuesVersions.js.map +1 -1
  275. package/dist/components/RecordEdition/hooks/useGetSubmitButtons.js +2 -2
  276. package/dist/components/RecordEdition/hooks/useGetSubmitButtons.js.map +1 -1
  277. package/dist/components/RecordHistory/RecordHistoryLogEntry.js +10 -2
  278. package/dist/components/RecordHistory/RecordHistoryLogEntry.js.map +1 -1
  279. package/dist/components/RecordHistory/_queries/recordHistoryQuery.d.ts +7 -0
  280. package/dist/components/RecordHistory/_queries/recordHistoryQuery.js +64 -0
  281. package/dist/components/RecordHistory/_queries/recordHistoryQuery.js.map +1 -0
  282. package/dist/components/RecordHistory/hooks/useFetchRecordHistory.js +5 -2
  283. package/dist/components/RecordHistory/hooks/useFetchRecordHistory.js.map +1 -1
  284. package/dist/components/RecordHistory/utils/extendedAttribute.d.ts +13 -0
  285. package/dist/components/RecordHistory/utils/extendedAttribute.js +40 -0
  286. package/dist/components/RecordHistory/utils/extendedAttribute.js.map +1 -0
  287. package/dist/components/SelectRecordForLinkModal/SelectRecordForLinkModal.d.ts +1 -0
  288. package/dist/components/SelectRecordForLinkModal/SelectRecordForLinkModal.js +7 -7
  289. package/dist/components/SelectRecordForLinkModal/SelectRecordForLinkModal.js.map +1 -1
  290. package/dist/components/SelectTreeNode/SelectTreeNode.d.ts +2 -1
  291. package/dist/components/SelectTreeNode/SelectTreeNode.js +3 -3
  292. package/dist/components/SelectTreeNode/SelectTreeNode.js.map +1 -1
  293. package/dist/components/SelectTreeNode/SelectTreeNodeContent.d.ts +2 -1
  294. package/dist/components/SelectTreeNode/SelectTreeNodeContent.js +6 -2
  295. package/dist/components/SelectTreeNode/SelectTreeNodeContent.js.map +1 -1
  296. package/dist/components/SelectTreeNode/TreeNodeTitle.js +5 -4
  297. package/dist/components/SelectTreeNode/TreeNodeTitle.js.map +1 -1
  298. package/dist/constants.d.ts +1 -0
  299. package/dist/constants.js +1 -0
  300. package/dist/constants.js.map +1 -1
  301. package/dist/hooks/useIFrameMessenger/messageHandlers.d.ts +3 -1
  302. package/dist/hooks/useIFrameMessenger/messageHandlers.js +16 -0
  303. package/dist/hooks/useIFrameMessenger/messageHandlers.js.map +1 -1
  304. package/dist/hooks/useIFrameMessenger/schema.d.ts +6 -3
  305. package/dist/hooks/useIFrameMessenger/schema.js +2 -1
  306. package/dist/hooks/useIFrameMessenger/schema.js.map +1 -1
  307. package/dist/hooks/useIFrameMessenger/types.d.ts +32 -2
  308. package/dist/hooks/useIFrameMessenger/types.js.map +1 -1
  309. package/dist/hooks/useIFrameMessenger/useIFrameMessenger.d.ts +2 -0
  310. package/dist/hooks/useIFrameMessenger/useIFrameMessenger.js +16 -2
  311. package/dist/hooks/useIFrameMessenger/useIFrameMessenger.js.map +1 -1
  312. package/dist/hooks/useIFrameMessengerClient/iFrameMessengerClientContext.d.ts +2 -0
  313. package/dist/hooks/useIFrameMessengerClient/useIFrameMessengerClient.d.ts +2 -0
  314. package/dist/locales/en/shared.json +23 -4
  315. package/dist/locales/fr/shared.json +23 -4
  316. package/dist/types/records.d.ts +1 -0
  317. package/dist/types/records.js.map +1 -1
  318. package/package.json +41 -43
  319. package/dist/components/Filters/filter-items/filter-type/TreeAttributeDropDown.js +0 -73
  320. package/dist/components/Filters/filter-items/filter-type/TreeAttributeDropDown.js.map +0 -1
  321. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/link-record/ActionButton.d.ts +0 -3
  322. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/link-record/ActionButton.js.map +0 -1
  323. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/link-record/useExplorerLinkRecords.js.map +0 -1
  324. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/link-record/useLinkRecords.js +0 -100
  325. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/link-record/useLinkRecords.js.map +0 -1
  326. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/shared/ExplorerWrapper.js +0 -13
  327. package/dist/components/RecordEdition/EditRecordContent/uiElements/LinkField/shared/ExplorerWrapper.js.map +0 -1
@@ -3,12 +3,14 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
3
3
  // This file is released under LGPL V3
4
4
  // License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
5
5
  import { useSharedTranslation } from '../../../../hooks/useSharedTranslation';
6
- import { FaCheck } from 'react-icons/fa';
7
6
  import { useMemo, useState } from 'react';
8
- import { KitInput, KitSelect } from 'aristid-ds';
7
+ import { KitInput } from 'aristid-ds';
9
8
  import styled from 'styled-components';
10
9
  import { RecordFilterCondition } from '../../../../_gqlTypes';
11
10
  import { isUIFilterLinkWithValueList, isUIFilterStandardWithValueList, } from '../../_types';
11
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
12
+ import { faCheck, faSearch } from '@fortawesome/free-solid-svg-icons';
13
+ import { EmptyValueCheckbox } from '../EmptyValueCheckbox';
12
14
  const ListDivStyled = styled.div `
13
15
  display: flex;
14
16
  flex-direction: column;
@@ -29,7 +31,7 @@ const OptionRow = styled.div `
29
31
  background: var(--general-utilities-main-light);
30
32
  }
31
33
  `;
32
- const RightIcon = styled(FaCheck) `
34
+ const RightIcon = styled(FontAwesomeIcon) `
33
35
  color: var(--general-utilities-main-default);
34
36
  opacity: ${props => (props.$visible ? 1 : 0)};
35
37
  transition: opacity 0.12s ease-in-out;
@@ -41,20 +43,10 @@ const Label = styled.div `
41
43
  white-space: nowrap;
42
44
  text-overflow: ellipsis;
43
45
  `;
44
- export const FilterValueListDropDown = ({ filter, onFilterChange, selectDropDownRef, }) => {
46
+ export const FilterValueListDropDown = ({ filter, onFilterChange }) => {
45
47
  const { t } = useSharedTranslation();
46
48
  const [searchText, setSearchText] = useState('');
47
49
  const getOptionLabelText = (label) => (typeof label === 'string' ? label : '');
48
- const availableConditionsOptions = [
49
- { label: t('filters.equal'), value: RecordFilterCondition.EQUAL },
50
- // disable NOT_EQUAL for now because of backend condition filter issue
51
- // {label: t('filters.not-equal'), value: RecordFilterCondition.NOT_EQUAL}
52
- { label: t('filters.is-empty'), value: RecordFilterCondition.IS_EMPTY },
53
- { label: t('filters.is-not-empty'), value: RecordFilterCondition.IS_NOT_EMPTY },
54
- ];
55
- const _onConditionChanged = condition => {
56
- onFilterChange({ ...filter, condition });
57
- };
58
50
  // Generate an option list for the filter dropdown to select a value
59
51
  const _createOptionListFromValueList = () => {
60
52
  let valueListFormatted = [];
@@ -74,6 +66,12 @@ export const FilterValueListDropDown = ({ filter, onFilterChange, selectDropDown
74
66
  }
75
67
  return [...valueListFormatted];
76
68
  };
69
+ const _handleOnCheckEmptyValue = (selected) => {
70
+ onFilterChange({
71
+ ...filter,
72
+ withEmptyValues: selected,
73
+ });
74
+ };
77
75
  const _handleToggle = (toggledValue) => {
78
76
  // remove or add the toggledValue from the filter.value
79
77
  const currentList = filter.value || [];
@@ -94,13 +92,9 @@ export const FilterValueListDropDown = ({ filter, onFilterChange, selectDropDown
94
92
  });
95
93
  return;
96
94
  }
97
- // Keep EQUAL/NOT_EQUAL condition per item; default to EQUAL if none chosen yet
98
- const condition = filter.condition === RecordFilterCondition.NOT_EQUAL
99
- ? RecordFilterCondition.NOT_EQUAL
100
- : RecordFilterCondition.EQUAL;
101
95
  onFilterChange({
102
96
  ...filter,
103
- condition,
97
+ condition: RecordFilterCondition.EQUAL,
104
98
  value: valuesSelected,
105
99
  });
106
100
  };
@@ -123,9 +117,9 @@ export const FilterValueListDropDown = ({ filter, onFilterChange, selectDropDown
123
117
  _handleToggle(value);
124
118
  }
125
119
  };
126
- return (_jsxs(_Fragment, { children: [_jsx(KitSelect, { options: availableConditionsOptions, onChange: _onConditionChanged, allowClear: false, value: filter.condition ?? RecordFilterCondition.EQUAL, "aria-label": String(t('explorer.filter-condition')), getPopupContainer: () => selectDropDownRef?.current ?? document.body }), filter.condition === RecordFilterCondition.EQUAL && (_jsxs(_Fragment, { children: [_jsx(KitInput, { value: searchText, onChange: e => setSearchText(e.target.value), placeholder: t('global.search') + '...', allowClear: true }), _jsx(ListDivStyled, { role: "group", "aria-label": String(t('explorer.filter-value')), children: filteredOptions.map(opt => {
127
- const selected = isChecked(opt.value);
128
- return (_jsxs(OptionRow, { "$selected": selected, role: "button", "aria-pressed": selected, tabIndex: 0, onClick: () => _handleToggle(opt.value), onKeyDown: e => onKeyToggle(e, opt.value), children: [_jsx(Label, { children: opt.label }), _jsx(RightIcon, { "$visible": selected })] }, opt.value));
129
- }) })] }))] }));
120
+ return (_jsxs(_Fragment, { children: [_jsx(KitInput, { prefix: _jsx(FontAwesomeIcon, { icon: faSearch }), placeholder: t('global.search'), value: searchText, onChange: e => setSearchText(e.target.value), allowClear: true }), _jsx(EmptyValueCheckbox, { onSelect: _handleOnCheckEmptyValue, filter: filter }), filter.condition === RecordFilterCondition.EQUAL && (_jsx(ListDivStyled, { role: "group", "aria-label": String(t('explorer.filter-value')), children: filteredOptions.map(opt => {
121
+ const selected = isChecked(opt.value);
122
+ return (_jsxs(OptionRow, { "$selected": selected, role: "button", "aria-pressed": selected, tabIndex: 0, onClick: () => _handleToggle(opt.value), onKeyDown: e => onKeyToggle(e, opt.value), children: [_jsx(Label, { children: opt.label }), _jsx(RightIcon, { "$visible": selected, icon: faCheck })] }, opt.value));
123
+ }) }))] }));
130
124
  };
131
125
  //# sourceMappingURL=FilterValueListDropDown.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FilterValueListDropDown.js","sourceRoot":"","sources":["../../../../../src/components/Filters/filter-items/filter-type/FilterValueListDropDown.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 {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {FaCheck} from 'react-icons/fa';\nimport {type ComponentProps, type FunctionComponent, type KeyboardEvent, useMemo, useState} from 'react';\nimport {KitInput, KitSelect} from 'aristid-ds';\nimport styled from 'styled-components';\nimport {RecordFilterCondition} from '_ui/_gqlTypes';\nimport {\n isUIFilterLinkWithValueList,\n isUIFilterStandardWithValueList,\n type IUIFilterValueList,\n type UIFilter,\n} from '../../_types';\n\ninterface IFilterValueListDropDownProps {\n filter: IUIFilterValueList;\n onFilterChange: (filter: UIFilter) => void;\n selectDropDownRef?: React.RefObject<HTMLDivElement>;\n}\n\nconst ListDivStyled = styled.div`\n display: flex;\n flex-direction: column;\n gap: calc(var(--general-spacing-xxs) * 1px);\n`;\n\nconst OptionRow = styled.div<{$selected: boolean}>`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 calc(var(--general-spacing-xs) * 1px);\n height: 36px;\n border-radius: calc(var(--general-spacing-xs) * 1px);\n cursor: pointer;\n background: ${props => (props.$selected ? 'var(--general-utilities-main-light)' : 'transparent')};\n color: var(--general-utilities-text-primary);\n\n &:hover {\n background: var(--general-utilities-main-light);\n }\n`;\n\nconst RightIcon = styled(FaCheck)<{$visible: boolean}>`\n color: var(--general-utilities-main-default);\n opacity: ${props => (props.$visible ? 1 : 0)};\n transition: opacity 0.12s ease-in-out;\n`;\n\nconst Label = styled.div`\n flex: 1;\n min-width: 0; /* allow flex child to shrink for ellipsis */\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n`;\n\nexport const FilterValueListDropDown: FunctionComponent<IFilterValueListDropDownProps> = ({\n filter,\n onFilterChange,\n selectDropDownRef,\n}) => {\n const {t} = useSharedTranslation();\n const [searchText, setSearchText] = useState('');\n\n const getOptionLabelText = (label: any): string => (typeof label === 'string' ? label : '');\n\n const availableConditionsOptions = [\n {label: t('filters.equal'), value: RecordFilterCondition.EQUAL},\n // disable NOT_EQUAL for now because of backend condition filter issue\n // {label: t('filters.not-equal'), value: RecordFilterCondition.NOT_EQUAL}\n {label: t('filters.is-empty'), value: RecordFilterCondition.IS_EMPTY},\n {label: t('filters.is-not-empty'), value: RecordFilterCondition.IS_NOT_EMPTY},\n ];\n\n const _onConditionChanged: ComponentProps<typeof KitSelect>['onChange'] = condition => {\n onFilterChange({...filter, condition});\n };\n\n // Generate an option list for the filter dropdown to select a value\n const _createOptionListFromValueList = () => {\n let valueListFormatted: Array<{label: string; value: string}> = [];\n if (isUIFilterStandardWithValueList(filter)) {\n valueListFormatted =\n filter.attribute.valuesList?.values?.map(value => ({\n label: value,\n value,\n })) || [];\n } else if (isUIFilterLinkWithValueList(filter)) {\n valueListFormatted =\n filter.attribute.valuesList?.linkedValues?.map(value => ({\n label: value.whoAmI.label!,\n value: value.id,\n })) || [];\n }\n\n return [...valueListFormatted];\n };\n\n const _handleToggle = (toggledValue: string) => {\n // remove or add the toggledValue from the filter.value\n const currentList = filter.value || [];\n const current = new Set(currentList);\n if (current.has(toggledValue)) {\n current.delete(toggledValue);\n } else {\n current.add(toggledValue);\n }\n const valuesSelected = Array.from(current);\n\n if (valuesSelected.length === 0) {\n // Clear filter when nothing selected\n onFilterChange({\n ...filter,\n value: [],\n field: (filter as any).field,\n });\n return;\n }\n\n // Keep EQUAL/NOT_EQUAL condition per item; default to EQUAL if none chosen yet\n const condition: RecordFilterCondition =\n filter.condition === RecordFilterCondition.NOT_EQUAL\n ? RecordFilterCondition.NOT_EQUAL\n : RecordFilterCondition.EQUAL;\n\n onFilterChange({\n ...filter,\n condition,\n value: valuesSelected,\n });\n };\n\n const options = _createOptionListFromValueList();\n\n const isChecked = (optionValue: string) => {\n const set = new Set(filter.value ?? []);\n return set.has(optionValue);\n };\n\n const filteredOptions = useMemo(() => {\n if (!searchText) {\n return options;\n }\n const st = searchText.toLowerCase();\n const specials = new Set(['']);\n return options.filter(o => specials.has(o.value) || getOptionLabelText(o.label).toLowerCase().includes(st));\n }, [options, searchText]);\n\n const onKeyToggle = (e: KeyboardEvent<HTMLDivElement>, value: string) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n _handleToggle(value);\n }\n };\n\n return (\n <>\n <KitSelect\n options={availableConditionsOptions}\n onChange={_onConditionChanged}\n allowClear={false}\n value={filter.condition ?? RecordFilterCondition.EQUAL}\n aria-label={String(t('explorer.filter-condition'))}\n getPopupContainer={() => selectDropDownRef?.current ?? document.body}\n />\n {filter.condition === RecordFilterCondition.EQUAL && (\n <>\n <KitInput\n value={searchText}\n onChange={e => setSearchText(e.target.value)}\n placeholder={t('global.search') + '...'}\n allowClear\n />\n <ListDivStyled role=\"group\" aria-label={String(t('explorer.filter-value'))}>\n {filteredOptions.map(opt => {\n const selected = isChecked(opt.value);\n return (\n <OptionRow\n key={opt.value}\n $selected={selected}\n role=\"button\"\n aria-pressed={selected}\n tabIndex={0}\n onClick={() => _handleToggle(opt.value)}\n onKeyDown={e => onKeyToggle(e, opt.value)}\n >\n <Label>{opt.label}</Label>\n <RightIcon $visible={selected} />\n </OptionRow>\n );\n })}\n </ListDivStyled>\n </>\n )}\n </>\n );\n};\n"]}
1
+ {"version":3,"file":"FilterValueListDropDown.js","sourceRoot":"","sources":["../../../../../src/components/Filters/filter-items/filter-type/FilterValueListDropDown.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 {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {type FunctionComponent, type KeyboardEvent, useMemo, useState} from 'react';\nimport {KitInput} from 'aristid-ds';\nimport styled from 'styled-components';\nimport {RecordFilterCondition} from '_ui/_gqlTypes';\nimport {\n isUIFilterLinkWithValueList,\n isUIFilterStandardWithValueList,\n type IUIFilterValueList,\n type UIFilter,\n} from '../../_types';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {faCheck, faSearch} from '@fortawesome/free-solid-svg-icons';\nimport {EmptyValueCheckbox} from '../EmptyValueCheckbox';\n\ninterface IFilterValueListDropDownProps {\n filter: IUIFilterValueList;\n onFilterChange: (filter: UIFilter) => void;\n}\n\nconst ListDivStyled = styled.div`\n display: flex;\n flex-direction: column;\n gap: calc(var(--general-spacing-xxs) * 1px);\n`;\n\nconst OptionRow = styled.div<{$selected: boolean}>`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 calc(var(--general-spacing-xs) * 1px);\n height: 36px;\n border-radius: calc(var(--general-spacing-xs) * 1px);\n cursor: pointer;\n background: ${props => (props.$selected ? 'var(--general-utilities-main-light)' : 'transparent')};\n color: var(--general-utilities-text-primary);\n\n &:hover {\n background: var(--general-utilities-main-light);\n }\n`;\n\nconst RightIcon = styled(FontAwesomeIcon)<{$visible: boolean}>`\n color: var(--general-utilities-main-default);\n opacity: ${props => (props.$visible ? 1 : 0)};\n transition: opacity 0.12s ease-in-out;\n`;\n\nconst Label = styled.div`\n flex: 1;\n min-width: 0; /* allow flex child to shrink for ellipsis */\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n`;\n\nexport const FilterValueListDropDown: FunctionComponent<IFilterValueListDropDownProps> = ({filter, onFilterChange}) => {\n const {t} = useSharedTranslation();\n const [searchText, setSearchText] = useState('');\n\n const getOptionLabelText = (label: any): string => (typeof label === 'string' ? label : '');\n\n // Generate an option list for the filter dropdown to select a value\n const _createOptionListFromValueList = () => {\n let valueListFormatted: Array<{label: string; value: string}> = [];\n if (isUIFilterStandardWithValueList(filter)) {\n valueListFormatted =\n filter.attribute.valuesList?.values?.map(value => ({\n label: value,\n value,\n })) || [];\n } else if (isUIFilterLinkWithValueList(filter)) {\n valueListFormatted =\n filter.attribute.valuesList?.linkedValues?.map(value => ({\n label: value.whoAmI.label!,\n value: value.id,\n })) || [];\n }\n\n return [...valueListFormatted];\n };\n\n const _handleOnCheckEmptyValue = (selected: boolean) => {\n onFilterChange({\n ...filter,\n withEmptyValues: selected,\n });\n };\n\n const _handleToggle = (toggledValue: string) => {\n // remove or add the toggledValue from the filter.value\n const currentList = filter.value || [];\n const current = new Set(currentList);\n if (current.has(toggledValue)) {\n current.delete(toggledValue);\n } else {\n current.add(toggledValue);\n }\n const valuesSelected = Array.from(current);\n\n if (valuesSelected.length === 0) {\n // Clear filter when nothing selected\n onFilterChange({\n ...filter,\n value: [],\n field: (filter as any).field,\n });\n return;\n }\n\n onFilterChange({\n ...filter,\n condition: RecordFilterCondition.EQUAL,\n value: valuesSelected,\n });\n };\n\n const options = _createOptionListFromValueList();\n\n const isChecked = (optionValue: string) => {\n const set = new Set(filter.value ?? []);\n return set.has(optionValue);\n };\n\n const filteredOptions = useMemo(() => {\n if (!searchText) {\n return options;\n }\n const st = searchText.toLowerCase();\n const specials = new Set(['']);\n return options.filter(o => specials.has(o.value) || getOptionLabelText(o.label).toLowerCase().includes(st));\n }, [options, searchText]);\n\n const onKeyToggle = (e: KeyboardEvent<HTMLDivElement>, value: string) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n _handleToggle(value);\n }\n };\n\n return (\n <>\n <KitInput\n prefix={<FontAwesomeIcon icon={faSearch} />}\n placeholder={t('global.search')}\n value={searchText}\n onChange={e => setSearchText(e.target.value)}\n allowClear\n />\n <EmptyValueCheckbox onSelect={_handleOnCheckEmptyValue} filter={filter} />\n {filter.condition === RecordFilterCondition.EQUAL && (\n <ListDivStyled role=\"group\" aria-label={String(t('explorer.filter-value'))}>\n {filteredOptions.map(opt => {\n const selected = isChecked(opt.value);\n return (\n <OptionRow\n key={opt.value}\n $selected={selected}\n role=\"button\"\n aria-pressed={selected}\n tabIndex={0}\n onClick={() => _handleToggle(opt.value)}\n onKeyDown={e => onKeyToggle(e, opt.value)}\n >\n <Label>{opt.label}</Label>\n <RightIcon $visible={selected} icon={faCheck} />\n </OptionRow>\n );\n })}\n </ListDivStyled>\n )}\n </>\n );\n};\n"]}
@@ -1,3 +1,3 @@
1
1
  import { type FunctionComponent } from 'react';
2
- import { type IFilterChildrenTreeDropDownProps } from './_types';
2
+ import { type IFilterChildrenTreeDropDownProps } from '../_types';
3
3
  export declare const TreeAttributeDropDown: FunctionComponent<IFilterChildrenTreeDropDownProps>;
@@ -0,0 +1,130 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ // Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06
3
+ // This file is released under LGPL V3
4
+ // License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
5
+ import { useMemo, useState } from 'react';
6
+ import styled from 'styled-components';
7
+ import { KitDivider, KitLoader, KitSpace, KitTree, KitTypography } from 'aristid-ds';
8
+ import { useGetTreeData } from './useGetTreeData';
9
+ import { ErrorDisplay } from '../../../../../components/ErrorDisplay';
10
+ import { useSharedTranslation } from '../../../../../hooks/useSharedTranslation';
11
+ import { useTreesSearch } from './useTreesSearch';
12
+ import { useFiltersContext } from '../../../../../components/Filters/useFiltersContext';
13
+ import { EmptyValueCheckbox } from '../../EmptyValueCheckbox';
14
+ import { SelectAllCheckbox } from '../../SelectAllCheckbox';
15
+ import { buildFlattenTree } from './utils/buildFlattenTreeMap';
16
+ import { getSelectAllState } from './utils/getSelectAllState';
17
+ import { filterTreeByPermission } from './utils/filterTreeByPermission';
18
+ const ScrollableContent = styled.div `
19
+ max-height: 182px; /* Equal to 5.5 nodes of KitTree */
20
+ overflow-y: auto;
21
+ overflow-x: hidden;
22
+ width: 100%;
23
+ `;
24
+ const FilteredTreeTitle = styled(KitTypography.Text) `
25
+ color: var(--general-colors-neutral-grey-500);
26
+ `;
27
+ const FilteredTreeSpacer = styled(KitSpace) `
28
+ width: 100%;
29
+ `;
30
+ const DropdownContentWrapper = styled(KitSpace) `
31
+ width: 327px;
32
+ `;
33
+ export const TreeAttributeDropDown = ({ filter, onFilterChange, }) => {
34
+ const { t } = useSharedTranslation();
35
+ const { filtersData } = useFiltersContext();
36
+ const { treeData, isLoading, error } = useGetTreeData({
37
+ treeId: filter.attribute.linkedTree?.id ?? '',
38
+ attributeId: filter.attribute.id,
39
+ libraryId: filtersData.libraryId,
40
+ });
41
+ // Split treeData based on accessRecordByDefaultPermission
42
+ const visibleByDefaultTree = useMemo(() => filterTreeByPermission(treeData, true), [treeData]);
43
+ const hiddenByDefaultTree = useMemo(() => filterTreeByPermission(treeData, false), [treeData]);
44
+ const { filteredVisibleByDefaultTree, filteredHiddenByDefaultTree, expandedNodeIdsFromSearch, SearchInput } = useTreesSearch(visibleByDefaultTree, hiddenByDefaultTree);
45
+ const [expandedNodeIdsFromUser, setExpandedNodeIdsFromUser] = useState([]);
46
+ const selectedNodesIds = (filter.nodes ?? []).map(node => node.nodeId);
47
+ const areBothTreesFilled = visibleByDefaultTree.length > 0 && hiddenByDefaultTree.length > 0;
48
+ // Build flatten trees to optimize the search and selection of nodes in handling functions
49
+ const flattenTreeData = useMemo(() => buildFlattenTree(treeData), [treeData]);
50
+ const flattenVisibleByDefaultTree = useMemo(() => buildFlattenTree(visibleByDefaultTree), [visibleByDefaultTree]);
51
+ const flattenHiddenByDefaultTree = useMemo(() => buildFlattenTree(hiddenByDefaultTree), [hiddenByDefaultTree]);
52
+ const _handleOnSelectEmptyValue = (selected) => {
53
+ onFilterChange({
54
+ ...filter,
55
+ withEmptyValues: selected,
56
+ });
57
+ };
58
+ const _handleOnSelect = (node, selected) => {
59
+ let newSelectedIds;
60
+ if (selected) {
61
+ newSelectedIds = [...selectedNodesIds, node.id];
62
+ }
63
+ else {
64
+ newSelectedIds = selectedNodesIds.filter(selectedValue => selectedValue !== node.id);
65
+ }
66
+ const selectedNodes = newSelectedIds
67
+ .map(nodeId => flattenTreeData.get(nodeId))
68
+ .filter((selectedNode) => Boolean(selectedNode));
69
+ onFilterChange({
70
+ ...filter,
71
+ nodes: selectedNodes.map(selectedNode => ({ nodeId: selectedNode.id, libraryId: selectedNode.libraryId })),
72
+ value: selectedNodes.map(selectedNode => selectedNode.recordId),
73
+ formattedValue: selectedNodes.map(selectedNode => selectedNode.title),
74
+ });
75
+ };
76
+ const _handleOnSelectAll = (treeToSelect, isSelected) => {
77
+ const treeNodeIds = Array.from(treeToSelect.keys());
78
+ // Using Set to avoid duplicates
79
+ const newSelectedIds = isSelected
80
+ ? [...new Set([...selectedNodesIds, ...treeNodeIds])]
81
+ : selectedNodesIds.filter(id => !treeNodeIds.includes(id));
82
+ const selectedNodes = newSelectedIds
83
+ .map(nodeId => flattenTreeData.get(nodeId))
84
+ .filter((selectedNode) => Boolean(selectedNode));
85
+ onFilterChange({
86
+ ...filter,
87
+ nodes: selectedNodes.map(selectedNode => ({
88
+ nodeId: selectedNode.id,
89
+ libraryId: selectedNode.libraryId,
90
+ })),
91
+ value: selectedNodes.map(selectedNode => selectedNode.recordId),
92
+ formattedValue: selectedNodes.map(selectedNode => selectedNode.title),
93
+ });
94
+ };
95
+ const _handleOnSelectAllVisibleByDefault = (isSelected) => _handleOnSelectAll(flattenVisibleByDefaultTree, isSelected);
96
+ const _handleOnSelectAllHiddenByDefault = (isSelected) => _handleOnSelectAll(flattenHiddenByDefaultTree, isSelected);
97
+ const { allSelected: allVisibleSelected, indeterminate: visibleIndeterminate } = getSelectAllState(selectedNodesIds, flattenVisibleByDefaultTree);
98
+ const { allSelected: allHiddenSelected, indeterminate: hiddenIndeterminate } = getSelectAllState(selectedNodesIds, flattenHiddenByDefaultTree);
99
+ const treeCommonProps = {
100
+ selectedKeys: selectedNodesIds,
101
+ checkedKeys: selectedNodesIds,
102
+ defaultExpandedKeys: selectedNodesIds,
103
+ expandedKeys: [...selectedNodesIds, ...expandedNodeIdsFromUser, ...expandedNodeIdsFromSearch],
104
+ autoExpandParent: true,
105
+ checkable: true,
106
+ checkStrictly: true,
107
+ multiple: true,
108
+ onExpand: expandedKeys => {
109
+ setExpandedNodeIdsFromUser(expandedKeys);
110
+ },
111
+ onCheck: (_, info) => {
112
+ const node = info.node;
113
+ _handleOnSelect(node, info.checked);
114
+ },
115
+ onSelect: (_, info) => {
116
+ const node = info.node;
117
+ _handleOnSelect(node, info.selected);
118
+ },
119
+ };
120
+ if (isLoading) {
121
+ return _jsx(KitLoader, {});
122
+ }
123
+ if (error) {
124
+ return _jsx(ErrorDisplay, { message: error.message });
125
+ }
126
+ 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
+ ? _handleOnSelectAllVisibleByDefault
128
+ : _handleOnSelectAllHiddenByDefault }), _jsx(KitTree, { treeData: visibleByDefaultTree.length > 0 ? filteredVisibleByDefaultTree : filteredHiddenByDefaultTree, ...treeCommonProps })] }))] }));
129
+ };
130
+ //# sourceMappingURL=TreeAttributeDropDown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TreeAttributeDropDown.js","sourceRoot":"","sources":["../../../../../../src/components/Filters/filter-items/filter-type/tree/TreeAttributeDropDown.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {type ComponentProps, type FunctionComponent, type Key, useMemo, useState} from 'react';\nimport {type IFilterChildrenTreeDropDownProps} from '../_types';\nimport styled from 'styled-components';\nimport {KitDivider, KitLoader, KitSpace, KitTree, KitTypography} from 'aristid-ds';\nimport {type EventDataNode} from 'antd/lib/tree';\nimport {type ITreeNode, useGetTreeData} from './useGetTreeData';\nimport {ErrorDisplay} from '_ui/components/ErrorDisplay';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {useTreesSearch} from './useTreesSearch';\nimport {useFiltersContext} from '_ui/components/Filters/useFiltersContext';\nimport {EmptyValueCheckbox} from '../../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"]}
@@ -0,0 +1,20 @@
1
+ export interface ITreeNode {
2
+ title: string;
3
+ id: string;
4
+ key: string;
5
+ children: ITreeNode[];
6
+ accessRecordByDefaultPermission?: boolean;
7
+ libraryId: string;
8
+ recordId: string;
9
+ }
10
+ interface IUseGetTreeDataProps {
11
+ treeId: string;
12
+ attributeId: string;
13
+ libraryId: string;
14
+ }
15
+ export declare const useGetTreeData: ({ treeId, attributeId, libraryId }: IUseGetTreeDataProps) => {
16
+ treeData: ITreeNode[];
17
+ isLoading: boolean;
18
+ error: Error;
19
+ };
20
+ export {};
@@ -0,0 +1,72 @@
1
+ // Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06
2
+ // This file is released under LGPL V3
3
+ // License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
4
+ import { useEffect, useState } from 'react';
5
+ import { useGetTreeNodeChildrenWithAccessByDefaultPermissionQueryLazyQuery } from '../../../../../_gqlTypes';
6
+ import { defaultPaginationPageSize } from '../../../../../constants';
7
+ export const useGetTreeData = ({ treeId, attributeId, libraryId }) => {
8
+ const [loadTreeContent] = useGetTreeNodeChildrenWithAccessByDefaultPermissionQueryLazyQuery();
9
+ const [treeData, setTreeData] = useState([]);
10
+ const [isLoading, setIsLoading] = useState(true);
11
+ const [error, setError] = useState(null);
12
+ const _fetchChildrenPage = async (parentNodeKey, offset) => {
13
+ const { data } = await loadTreeContent({
14
+ variables: {
15
+ treeId,
16
+ node: parentNodeKey,
17
+ pagination: { offset, limit: defaultPaginationPageSize },
18
+ accessRecordByDefaultPermission: {
19
+ attributeId,
20
+ libraryId,
21
+ },
22
+ },
23
+ });
24
+ const { list, totalCount } = data?.treeNodeChildren ?? { list: [], totalCount: 0 };
25
+ const nodes = await Promise.all(list.map(async (node) => {
26
+ const children = node.childrenCount ? await _fetchAllChildren(node.id) : [];
27
+ return {
28
+ title: node.record.whoAmI.label || node.record.whoAmI.id,
29
+ id: node.id,
30
+ key: node.id,
31
+ children,
32
+ accessRecordByDefaultPermission: node.accessRecordByDefaultPermission,
33
+ libraryId: node.record.whoAmI.library.id,
34
+ recordId: node.record.id,
35
+ };
36
+ }));
37
+ return { nodes, totalCount };
38
+ };
39
+ const _fetchAllChildren = async (parentNodeKey, offset = 0, accumulated = []) => {
40
+ const { nodes, totalCount } = await _fetchChildrenPage(parentNodeKey, offset);
41
+ const allNodes = [...accumulated, ...nodes];
42
+ const nextOffset = offset + defaultPaginationPageSize;
43
+ if (nextOffset < totalCount) {
44
+ return _fetchAllChildren(parentNodeKey, nextOffset, allNodes);
45
+ }
46
+ return allNodes;
47
+ };
48
+ useEffect(() => {
49
+ if (!treeId) {
50
+ setTreeData([]);
51
+ setIsLoading(false);
52
+ return;
53
+ }
54
+ const loadTree = async () => {
55
+ setIsLoading(true);
56
+ setError(null);
57
+ try {
58
+ const children = await _fetchAllChildren(null);
59
+ setTreeData(children);
60
+ }
61
+ catch (err) {
62
+ setError(err instanceof Error ? err : new Error('Failed to load tree'));
63
+ }
64
+ finally {
65
+ setIsLoading(false);
66
+ }
67
+ };
68
+ loadTree();
69
+ }, [treeId, attributeId, libraryId]);
70
+ return { treeData, isLoading, error };
71
+ };
72
+ //# sourceMappingURL=useGetTreeData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGetTreeData.js","sourceRoot":"","sources":["../../../../../../src/components/Filters/filter-items/filter-type/tree/useGetTreeData.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {useEffect, useState} from 'react';\nimport {useGetTreeNodeChildrenWithAccessByDefaultPermissionQueryLazyQuery} from '_ui/_gqlTypes';\nimport {defaultPaginationPageSize} from '_ui/constants';\n\nexport interface ITreeNode {\n title: string;\n id: string;\n key: string;\n children: ITreeNode[];\n accessRecordByDefaultPermission?: boolean;\n libraryId: string;\n recordId: string;\n}\n\ninterface IUseGetTreeDataProps {\n treeId: string;\n attributeId: string;\n libraryId: string;\n}\n\nexport const useGetTreeData = ({treeId, attributeId, libraryId}: IUseGetTreeDataProps) => {\n const [loadTreeContent] = useGetTreeNodeChildrenWithAccessByDefaultPermissionQueryLazyQuery();\n const [treeData, setTreeData] = useState<ITreeNode[]>([]);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const _fetchChildrenPage = async (parentNodeKey: string | null, offset: number) => {\n const {data} = await loadTreeContent({\n variables: {\n treeId,\n node: parentNodeKey,\n pagination: {offset, limit: defaultPaginationPageSize},\n accessRecordByDefaultPermission: {\n attributeId,\n libraryId,\n },\n },\n });\n\n const {list, totalCount} = data?.treeNodeChildren ?? {list: [], totalCount: 0};\n\n const nodes = await Promise.all(\n list.map(async node => {\n const children = node.childrenCount ? await _fetchAllChildren(node.id) : [];\n\n return {\n title: node.record.whoAmI.label || node.record.whoAmI.id,\n id: node.id,\n key: node.id,\n children,\n accessRecordByDefaultPermission: node.accessRecordByDefaultPermission,\n libraryId: node.record.whoAmI.library.id,\n recordId: node.record.id,\n };\n }),\n );\n\n return {nodes, totalCount};\n };\n\n const _fetchAllChildren = async (\n parentNodeKey: string | null,\n offset = 0,\n accumulated: ITreeNode[] = [],\n ): Promise<ITreeNode[]> => {\n const {nodes, totalCount} = await _fetchChildrenPage(parentNodeKey, offset);\n const allNodes = [...accumulated, ...nodes];\n\n const nextOffset = offset + defaultPaginationPageSize;\n if (nextOffset < totalCount) {\n return _fetchAllChildren(parentNodeKey, nextOffset, allNodes);\n }\n\n return allNodes;\n };\n\n useEffect(() => {\n if (!treeId) {\n setTreeData([]);\n setIsLoading(false);\n return;\n }\n\n const loadTree = async () => {\n setIsLoading(true);\n setError(null);\n try {\n const children = await _fetchAllChildren(null);\n setTreeData(children);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to load tree'));\n } finally {\n setIsLoading(false);\n }\n };\n\n loadTree();\n }, [treeId, attributeId, libraryId]);\n\n return {treeData, isLoading, error};\n};\n"]}
@@ -0,0 +1,7 @@
1
+ import { type ITreeNode } from './useGetTreeData';
2
+ export declare const useTreesSearch: (visibleByDefaultTree: ITreeNode[], hiddenByDefaultTree: ITreeNode[]) => {
3
+ filteredVisibleByDefaultTree: ITreeNode[];
4
+ filteredHiddenByDefaultTree: ITreeNode[];
5
+ expandedNodeIdsFromSearch: string[];
6
+ SearchInput: JSX.Element;
7
+ };
@@ -0,0 +1,36 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06
3
+ // This file is released under LGPL V3
4
+ // License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
5
+ import { KitInput } from 'aristid-ds';
6
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
7
+ import { faSearch } from '@fortawesome/free-solid-svg-icons';
8
+ import { useSharedTranslation } from '../../../../../hooks/useSharedTranslation';
9
+ import { useState } from 'react';
10
+ export const useTreesSearch = (visibleByDefaultTree, hiddenByDefaultTree) => {
11
+ const { t } = useSharedTranslation();
12
+ const [searchValue, setSearchValue] = useState('');
13
+ const normalizedSearch = searchValue.trim().toLowerCase();
14
+ const nodeIds = [];
15
+ const _filterNodes = (nodes) => nodes
16
+ .map(node => {
17
+ const filteredChildren = node.children ? _filterNodes(node.children) : [];
18
+ const matchesSelf = node.title.toLowerCase().includes(normalizedSearch);
19
+ if (!matchesSelf && filteredChildren.length === 0) {
20
+ return null;
21
+ }
22
+ nodeIds.push(node.id);
23
+ return {
24
+ ...node,
25
+ children: filteredChildren,
26
+ };
27
+ })
28
+ .filter((node) => node !== null);
29
+ return {
30
+ filteredVisibleByDefaultTree: !normalizedSearch ? visibleByDefaultTree : _filterNodes(visibleByDefaultTree),
31
+ filteredHiddenByDefaultTree: !normalizedSearch ? hiddenByDefaultTree : _filterNodes(hiddenByDefaultTree),
32
+ expandedNodeIdsFromSearch: !normalizedSearch ? [] : nodeIds,
33
+ SearchInput: (_jsx(KitInput, { prefix: _jsx(FontAwesomeIcon, { icon: faSearch }), placeholder: t('global.search'), value: searchValue, onChange: e => setSearchValue(e.target.value), allowClear: true })),
34
+ };
35
+ };
36
+ //# sourceMappingURL=useTreesSearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTreesSearch.js","sourceRoot":"","sources":["../../../../../../src/components/Filters/filter-items/filter-type/tree/useTreesSearch.tsx"],"names":[],"mappings":";AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AAEpC,OAAO,EAAC,eAAe,EAAC,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAC,QAAQ,EAAC,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAC,QAAQ,EAAC,MAAM,OAAO,CAAC;AAE/B,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,oBAAiC,EAAE,mBAAgC,EAAE,EAAE;IAClG,MAAM,EAAC,CAAC,EAAC,GAAG,oBAAoB,EAAE,CAAC;IACnC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEnD,MAAM,gBAAgB,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1D,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,MAAM,YAAY,GAAG,CAAC,KAAkB,EAAe,EAAE,CACrD,KAAK;SACA,GAAG,CAAC,IAAI,CAAC,EAAE;QACR,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QAExE,IAAI,CAAC,WAAW,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChD,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEtB,OAAO;YACH,GAAG,IAAI;YACP,QAAQ,EAAE,gBAAgB;SAC7B,CAAC;IACN,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,IAAI,EAAqB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAE5D,OAAO;QACH,4BAA4B,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,YAAY,CAAC,oBAAoB,CAAC;QAC3G,2BAA2B,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,YAAY,CAAC,mBAAmB,CAAC;QACxG,yBAAyB,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO;QAC3D,WAAW,EAAE,CACT,KAAC,QAAQ,IACL,MAAM,EAAE,KAAC,eAAe,IAAC,IAAI,EAAE,QAAQ,GAAI,EAC3C,WAAW,EAAE,CAAC,CAAC,eAAe,CAAC,EAC/B,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC7C,UAAU,SACZ,CACL;KACJ,CAAC;AACN,CAAC,CAAC","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {KitInput} from 'aristid-ds';\nimport {type ITreeNode} from './useGetTreeData';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {faSearch} from '@fortawesome/free-solid-svg-icons';\nimport {useSharedTranslation} from '_ui/hooks/useSharedTranslation';\nimport {useState} from 'react';\n\nexport const useTreesSearch = (visibleByDefaultTree: ITreeNode[], hiddenByDefaultTree: ITreeNode[]) => {\n const {t} = useSharedTranslation();\n const [searchValue, setSearchValue] = useState('');\n\n const normalizedSearch = searchValue.trim().toLowerCase();\n const nodeIds: string[] = [];\n\n const _filterNodes = (nodes: ITreeNode[]): ITreeNode[] =>\n nodes\n .map(node => {\n const filteredChildren = node.children ? _filterNodes(node.children) : [];\n const matchesSelf = node.title.toLowerCase().includes(normalizedSearch);\n\n if (!matchesSelf && filteredChildren.length === 0) {\n return null;\n }\n\n nodeIds.push(node.id);\n\n return {\n ...node,\n children: filteredChildren,\n };\n })\n .filter((node): node is ITreeNode => node !== null);\n\n return {\n filteredVisibleByDefaultTree: !normalizedSearch ? visibleByDefaultTree : _filterNodes(visibleByDefaultTree),\n filteredHiddenByDefaultTree: !normalizedSearch ? hiddenByDefaultTree : _filterNodes(hiddenByDefaultTree),\n expandedNodeIdsFromSearch: !normalizedSearch ? [] : nodeIds,\n SearchInput: (\n <KitInput\n prefix={<FontAwesomeIcon icon={faSearch} />}\n placeholder={t('global.search')}\n value={searchValue}\n onChange={e => setSearchValue(e.target.value)}\n allowClear\n />\n ),\n };\n};\n"]}
@@ -0,0 +1,2 @@
1
+ import { type ITreeNode } from '../useGetTreeData';
2
+ export declare const buildFlattenTree: (nodes: ITreeNode[]) => Map<string, ITreeNode>;
@@ -0,0 +1,14 @@
1
+ export const buildFlattenTree = (nodes) => {
2
+ const treeMap = new Map();
3
+ const _buildFlattenTreeRecursive = (nodeList) => {
4
+ for (const node of nodeList) {
5
+ treeMap.set(node.id, node);
6
+ if (node.children && node.children.length > 0) {
7
+ _buildFlattenTreeRecursive(node.children);
8
+ }
9
+ }
10
+ };
11
+ _buildFlattenTreeRecursive(nodes);
12
+ return treeMap;
13
+ };
14
+ //# sourceMappingURL=buildFlattenTreeMap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildFlattenTreeMap.js","sourceRoot":"","sources":["../../../../../../../src/components/Filters/filter-items/filter-type/tree/utils/buildFlattenTreeMap.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAkB,EAA0B,EAAE;IAC3E,MAAM,OAAO,GAAG,IAAI,GAAG,EAAqB,CAAC;IAE7C,MAAM,0BAA0B,GAAG,CAAC,QAAqB,EAAE,EAAE;QACzD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAE3B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,0BAA0B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9C,CAAC;QACL,CAAC;IACL,CAAC,CAAC;IAEF,0BAA0B,CAAC,KAAK,CAAC,CAAC;IAElC,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {type ITreeNode} from '../useGetTreeData';\n\nexport const buildFlattenTree = (nodes: ITreeNode[]): Map<string, ITreeNode> => {\n const treeMap = new Map<string, ITreeNode>();\n\n const _buildFlattenTreeRecursive = (nodeList: ITreeNode[]) => {\n for (const node of nodeList) {\n treeMap.set(node.id, node);\n\n if (node.children && node.children.length > 0) {\n _buildFlattenTreeRecursive(node.children);\n }\n }\n };\n\n _buildFlattenTreeRecursive(nodes);\n\n return treeMap;\n};\n"]}
@@ -0,0 +1,2 @@
1
+ import { type ITreeNode } from '../useGetTreeData';
2
+ export declare const filterTreeByPermission: (nodes: ITreeNode[], accessRecordByDefaultPermission: boolean) => ITreeNode[];
@@ -0,0 +1,15 @@
1
+ export const filterTreeByPermission = (nodes, accessRecordByDefaultPermission) => {
2
+ const result = [];
3
+ for (const node of nodes) {
4
+ const filteredChildren = filterTreeByPermission(node.children, accessRecordByDefaultPermission);
5
+ const nodeMatchesPermission = node.accessRecordByDefaultPermission === accessRecordByDefaultPermission;
6
+ if (nodeMatchesPermission || filteredChildren.length > 0) {
7
+ result.push({
8
+ ...node,
9
+ children: filteredChildren,
10
+ });
11
+ }
12
+ }
13
+ return result;
14
+ };
15
+ //# sourceMappingURL=filterTreeByPermission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filterTreeByPermission.js","sourceRoot":"","sources":["../../../../../../../src/components/Filters/filter-items/filter-type/tree/utils/filterTreeByPermission.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAAkB,EAAE,+BAAwC,EAAe,EAAE;IAChH,MAAM,MAAM,GAAgB,EAAE,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,IAAI,CAAC,QAAQ,EAAE,+BAA+B,CAAC,CAAC;QAChG,MAAM,qBAAqB,GAAG,IAAI,CAAC,+BAA+B,KAAK,+BAA+B,CAAC;QAEvG,IAAI,qBAAqB,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvD,MAAM,CAAC,IAAI,CAAC;gBACR,GAAG,IAAI;gBACP,QAAQ,EAAE,gBAAgB;aAC7B,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {type ITreeNode} from '../useGetTreeData';\n\nexport const filterTreeByPermission = (nodes: ITreeNode[], accessRecordByDefaultPermission: boolean): ITreeNode[] => {\n const result: ITreeNode[] = [];\n\n for (const node of nodes) {\n const filteredChildren = filterTreeByPermission(node.children, accessRecordByDefaultPermission);\n const nodeMatchesPermission = node.accessRecordByDefaultPermission === accessRecordByDefaultPermission;\n\n if (nodeMatchesPermission || filteredChildren.length > 0) {\n result.push({\n ...node,\n children: filteredChildren,\n });\n }\n }\n\n return result;\n};\n"]}
@@ -0,0 +1,5 @@
1
+ import { type ITreeNode } from '../useGetTreeData';
2
+ export declare const getSelectAllState: (selectedNodesIds: string[], flattenTree: Map<string, ITreeNode>) => {
3
+ allSelected: boolean;
4
+ indeterminate: boolean;
5
+ };
@@ -0,0 +1,17 @@
1
+ export const getSelectAllState = (selectedNodesIds, flattenTree) => {
2
+ const totalCount = flattenTree.size;
3
+ if (totalCount === 0) {
4
+ return {
5
+ allSelected: false,
6
+ indeterminate: false,
7
+ };
8
+ }
9
+ const selectedCount = selectedNodesIds.filter(id => flattenTree.has(id)).length;
10
+ const allSelected = selectedCount === totalCount;
11
+ const indeterminate = selectedCount > 0 && !allSelected;
12
+ return {
13
+ allSelected,
14
+ indeterminate,
15
+ };
16
+ };
17
+ //# sourceMappingURL=getSelectAllState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSelectAllState.js","sourceRoot":"","sources":["../../../../../../../src/components/Filters/filter-items/filter-type/tree/utils/getSelectAllState.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,gBAA0B,EAAE,WAAmC,EAAE,EAAE;IACjG,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC;IAEpC,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO;YACH,WAAW,EAAE,KAAK;YAClB,aAAa,EAAE,KAAK;SACvB,CAAC;IACN,CAAC;IAED,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IAChF,MAAM,WAAW,GAAG,aAAa,KAAK,UAAU,CAAC;IACjD,MAAM,aAAa,GAAG,aAAa,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;IAExD,OAAO;QACH,WAAW;QACX,aAAa;KAChB,CAAC;AACN,CAAC,CAAC","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {type ITreeNode} from '../useGetTreeData';\n\nexport const getSelectAllState = (selectedNodesIds: string[], flattenTree: Map<string, ITreeNode>) => {\n const totalCount = flattenTree.size;\n\n if (totalCount === 0) {\n return {\n allSelected: false,\n indeterminate: false,\n };\n }\n\n const selectedCount = selectedNodesIds.filter(id => flattenTree.has(id)).length;\n const allSelected = selectedCount === totalCount;\n const indeterminate = selectedCount > 0 && !allSelected;\n\n return {\n allSelected,\n indeterminate,\n };\n};\n"]}
@@ -40,7 +40,7 @@ export const conditionsByFormat = {
40
40
  [AttributeFormat.date_range]: [AttributeConditionFilter.IS_EMPTY, AttributeConditionFilter.IS_NOT_EMPTY],
41
41
  [AttributeFormat.encrypted]: [AttributeConditionFilter.IS_EMPTY, AttributeConditionFilter.IS_NOT_EMPTY],
42
42
  [AttributeFormat.extended]: [AttributeConditionFilter.IS_EMPTY, AttributeConditionFilter.IS_NOT_EMPTY],
43
- [AttributeFormat.color]: [AttributeConditionFilter.IS_EMPTY, AttributeConditionFilter.IS_NOT_EMPTY],
43
+ [AttributeFormat.color]: [],
44
44
  [AttributeFormat.numeric]: [
45
45
  AttributeConditionFilter.EQUAL,
46
46
  AttributeConditionFilter.NOT_EQUAL,
@@ -55,18 +55,8 @@ export const linkFilterConditions = [
55
55
  ...conditionsByFormat[AttributeFormat.text].filter(f => f !== AttributeConditionFilter.NOT_EQUAL),
56
56
  AttributeConditionFilter.THROUGH,
57
57
  ];
58
- export const treeFilterConditions = [
59
- AttributeConditionFilter.EQUAL,
60
- AttributeConditionFilter.IS_EMPTY,
61
- AttributeConditionFilter.IS_NOT_EMPTY,
62
- // disable NOT_EQUAL for now because of backend condition filter issue
63
- // AttributeConditionFilter.NOT_EQUAL
64
- ];
65
- export const valueListTextConditions = [
66
- AttributeConditionFilter.EQUAL,
67
- // disable NOT_EQUAL for now because of backend condition filter issue
68
- // AttributeConditionFilter.NOT_EQUAL
69
- ];
58
+ export const treeFilterConditions = [AttributeConditionFilter.EQUAL];
59
+ export const valueListTextConditions = [AttributeConditionFilter.EQUAL];
70
60
  export const getAttributeConditionOptions = (t) => [
71
61
  { label: t('filters.contains'), value: AttributeConditionFilter.CONTAINS },
72
62
  { label: t('filters.not-contains'), value: AttributeConditionFilter.NOT_CONTAINS },