@geotab/zenith 3.1.1-beta.6 → 3.2.0-beta.0

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 (430) hide show
  1. package/README.md +20 -0
  2. package/dist/advancedGroupsFilter/advancedGroupsFilter.js +136 -30
  3. package/dist/advancedGroupsFilter/advancedGroupsFilterForm.js +139 -34
  4. package/dist/advancedGroupsFilter/advancedGroupsFilterFormSection.js +352 -87
  5. package/dist/advancedGroupsFilter/advancedGroupsFilterSectionTooltip.d.ts +0 -1
  6. package/dist/advancedGroupsFilter/advancedGroupsFilterSectionTooltip.js +83 -9
  7. package/dist/alertRaw/alertRaw.js +175 -54
  8. package/dist/banner/bannerMultipLine.js +131 -23
  9. package/dist/banner/bannerSingleLine.js +110 -16
  10. package/dist/betaPill/betaPill.js +111 -20
  11. package/dist/bookmark/bookmark.js +95 -28
  12. package/dist/bulkEditControl/bulkEditControl.js +167 -34
  13. package/dist/calendar/calendar.js +943 -273
  14. package/dist/calendar/calendarUtils.js +157 -85
  15. package/dist/card/card.js +268 -123
  16. package/dist/chart/accessibleChart/accessibleChartNarrative.js +648 -555
  17. package/dist/chart/accessibleChart/accessibleChartTable.js +245 -86
  18. package/dist/chart/chart.js +36 -21
  19. package/dist/chart/chartAxis/chartAxis.js +85 -7
  20. package/dist/checkboxListWithAction/checkboxListWithAction.js +224 -69
  21. package/dist/chip/chip.js +195 -91
  22. package/dist/columnsSelector/columnsSelector.js +97 -12
  23. package/dist/columnsSelector/columnsTab/columnsTab.js +59 -15
  24. package/dist/columnsSelector/columnsTabGroup/columnsTabGroup.js +81 -34
  25. package/dist/comboboxSelected/comboboxSelected.js +1 -3
  26. package/dist/dataFeed/feedExpandControl/feedExpandControl.js +25 -10
  27. package/dist/dataGrid/columns/checkboxColumn/checkboxHeaderCell.js +92 -11
  28. package/dist/dataGrid/dataGrid.js +227 -117
  29. package/dist/dataGrid/emptySearchList/emptySearchList.js +56 -9
  30. package/dist/dataGrid/entitiesListActions/actions/columnsListButton.js +51 -7
  31. package/dist/dataGrid/entitiesListActions/actions/fullscreenButton.js +64 -18
  32. package/dist/dataGrid/withFlexibleColumns/components/columnSettings.js +84 -10
  33. package/dist/dataGrid/withFlexibleColumns/components/columnSettingsSidePanel.js +48 -16
  34. package/dist/dataGrid/withSelectableRows/components/bulkActions/bulkActions.js +223 -32
  35. package/dist/dataGrid/withSelectableRows/withSelectableRows.js +286 -213
  36. package/dist/dataGrid/withSortableColumns/columns/sortableColumnWrapper.js +178 -95
  37. package/dist/dateInputInner/dateInputInner.js +791 -476
  38. package/dist/dateInputInner/dateInputInnerControlBlock.js +125 -22
  39. package/dist/dateInputRaw/dateInputRaw.js +315 -104
  40. package/dist/dateInputRaw/utils/getLabel.js +38 -7
  41. package/dist/dateRangeInner/dateRangeInner.js +172 -58
  42. package/dist/dateRangeRaw/dateRangeRaw.js +601 -239
  43. package/dist/dateRangeRaw/utils/dateRangeUtils.js +629 -241
  44. package/dist/dateSelectionWrapper/dateSelectionWrapper.js +152 -14
  45. package/dist/dialog/dialogContent.js +123 -40
  46. package/dist/dropdownRaw/dropdownHelper.d.ts +2 -2
  47. package/dist/dropdownRaw/dropdownHelper.js +9 -9
  48. package/dist/dropdownRaw/dropdownList.js +447 -78
  49. package/dist/dropdownRaw/dropdownPopup.js +218 -20
  50. package/dist/dropdownRaw/dropdownRaw.js +866 -506
  51. package/dist/dropdownRaw/dropdownSearchableTrigger.js +223 -46
  52. package/dist/dropdownRaw/stateReducer/stateAction.d.ts +5 -1
  53. package/dist/dropdownRaw/stateReducer/stateActionType.d.ts +2 -1
  54. package/dist/dropdownRaw/stateReducer/stateActionType.js +1 -0
  55. package/dist/dropdownRaw/stateReducer/stateReducer.d.ts +6 -1
  56. package/dist/dropdownRaw/stateReducer/stateReducer.js +24 -12
  57. package/dist/dropdownRaw/stateReducer/stateReducerHelper.d.ts +2 -0
  58. package/dist/dropdownRaw/stateReducer/stateReducerHelper.js +20 -1
  59. package/dist/dropdownRaw/stateReducer/stateReducerTestData.d.ts +39 -0
  60. package/dist/dropdownRaw/stateReducer/stateReducerTestData.js +74 -0
  61. package/dist/dropdownRaw/types.d.ts +1 -0
  62. package/dist/favoriteButton/favoriteButton.js +59 -10
  63. package/dist/filters/components/filtersContainer.js +151 -64
  64. package/dist/filters/components/filtersEmptySelectedList.js +30 -4
  65. package/dist/filters/components/filtersSaveModal.js +140 -42
  66. package/dist/filters/components/filtersSavedChipComponent.js +318 -108
  67. package/dist/filters/components/filtersSearchItemData.js +127 -47
  68. package/dist/filters/components/filtersSearchList.js +381 -179
  69. package/dist/filters/components/filtersSelect.js +128 -61
  70. package/dist/filters/components/filtersSelectListItem.js +125 -13
  71. package/dist/filters/components/filtersSidePanel.js +510 -178
  72. package/dist/filters/filters.js +445 -268
  73. package/dist/filtersBar/components/filtersBarPeriodPicker/getRangeOption.js +729 -272
  74. package/dist/filtersBar/components/resetComponentButton.js +45 -5
  75. package/dist/filtersBar/filtersBarActions/filtersBarActions.js +126 -15
  76. package/dist/filtersBar/filtersBarSidePanel/components/filtersBarSidePanelRange/filtersBarSidePanelRange.js +155 -49
  77. package/dist/filtersBar/filtersBarSidePanel/filtersBarSidePanel.js +360 -104
  78. package/dist/filtersBar/filtersContainer/filtersContainer.js +204 -134
  79. package/dist/formField/components/formFieldWithLabel.d.ts +2 -1
  80. package/dist/formField/components/formFieldWithLabel.js +3 -2
  81. package/dist/formField/components/formFieldWithoutLabel.d.ts +2 -1
  82. package/dist/formField/components/formFieldWithoutLabel.js +3 -3
  83. package/dist/formField/components/trailingComponent.d.ts +8 -0
  84. package/dist/formField/components/trailingComponent.js +11 -0
  85. package/dist/formField/formField.js +12 -11
  86. package/dist/formField/hooks/useError.js +100 -36
  87. package/dist/formGroup/components/reviewListToggle/reviewListToggle.js +72 -7
  88. package/dist/formGroup/hooks/useToggle.js +37 -11
  89. package/dist/formGroup/utils/getControls.js +8 -7
  90. package/dist/formLayout/hooks/useError.js +55 -15
  91. package/dist/formLayout/hooks/useFormButtons.js +128 -27
  92. package/dist/formSection/components/formSectionModal.js +1 -1
  93. package/dist/formSection/formSection.js +1 -1
  94. package/dist/formSection/hooks/useError.js +70 -22
  95. package/dist/formStepper/components/formStep.js +65 -10
  96. package/dist/formStepper/formStepper.js +129 -33
  97. package/dist/formStepperButtons/formStepperButtons.js +184 -38
  98. package/dist/groupsFilter/groupsHelper.d.ts +1 -1
  99. package/dist/groupsFilterRaw/groupsFilterAdjustmentState.js +162 -17
  100. package/dist/groupsFilterRaw/groupsFilterBox.js +137 -32
  101. package/dist/groupsFilterRaw/groupsFilterCommon.js +75 -8
  102. package/dist/groupsFilterRaw/groupsFilterCurrentlySelectedState.js +184 -25
  103. package/dist/groupsFilterRaw/groupsFilterHelper.d.ts +2 -1
  104. package/dist/groupsFilterRaw/groupsFilterHelper.js +284 -168
  105. package/dist/groupsFilterRaw/groupsFilterInitialState.js +266 -18
  106. package/dist/groupsFilterRaw/groupsFilterMenu.js +124 -9
  107. package/dist/groupsFilterRaw/groupsFilterRaw.d.ts +1 -0
  108. package/dist/groupsFilterRaw/groupsFilterRaw.js +816 -308
  109. package/dist/groupsFilterRaw/groupsFilterTestData.d.ts +155 -2
  110. package/dist/groupsFilterRaw/groupsFilterTestData.js +153 -58
  111. package/dist/groupsFilterRaw/groupsFilterTrigger.js +139 -35
  112. package/dist/groupsFilterRaw/groupsHelper.js +739 -208
  113. package/dist/groupsFilterRaw/stateReducer/stateReducerHelper.js +3 -1
  114. package/dist/groupsFilterRaw/types.d.ts +1 -0
  115. package/dist/header/components/collapsedItemsControl/collapsedItemsControl.js +107 -52
  116. package/dist/header/components/mobileFilterControl/mobileFilterControl.js +62 -9
  117. package/dist/header/components/mobileSearchControl/mobileSearchControl.js +119 -14
  118. package/dist/header/headerBack.js +64 -20
  119. package/dist/index.css +110 -71
  120. package/dist/index.d.ts +1 -0
  121. package/dist/index.js +4 -1
  122. package/dist/list/itemData/itemDataInternal.js +216 -51
  123. package/dist/list/listItem/listItem.js +168 -55
  124. package/dist/menu/components/menuErrorItem.js +33 -5
  125. package/dist/mobileSheet/mobileSheet.js +195 -69
  126. package/dist/modal/modal.js +300 -142
  127. package/dist/nav/nav.js +1 -1
  128. package/dist/nav/navFooter/navFooter.js +82 -39
  129. package/dist/nav/navFooter/navFooterAction/navFooterAction.js +52 -13
  130. package/dist/nav/navHeader/navHeader.js +86 -36
  131. package/dist/nav/navHeader/navHeaderSearch/navHeaderSearch.js +88 -29
  132. package/dist/nav/navItem/navItem.d.ts +3 -3
  133. package/dist/nav/navItem/navItem.js +35 -33
  134. package/dist/nav/navMobileBar/navMobileBar.js +67 -21
  135. package/dist/notification/notification.js +124 -21
  136. package/dist/pagination/paginationArrow.js +81 -11
  137. package/dist/pagination/paginationText/paginationText.js +45 -11
  138. package/dist/pill/components/pillNonActionable/pillNonActionable.js +93 -24
  139. package/dist/pillBox/components/pillBoxItem.js +52 -9
  140. package/dist/pillBox/pillBox.js +121 -20
  141. package/dist/pillExpandable/pillExpandable.js +333 -139
  142. package/dist/rangeRaw/rangeRaw.js +486 -141
  143. package/dist/rangeRaw/utils/rangeHelper.js +209 -39
  144. package/dist/searchInputRaw/searchInputRaw.js +180 -65
  145. package/dist/skeleton/skeleton.js +51 -6
  146. package/dist/sortControl/sortControl.js +152 -42
  147. package/dist/stepperRaw/stepperRaw.js +116 -42
  148. package/dist/summary/summary.js +94 -8
  149. package/dist/table/actions/actionsMenu.js +171 -78
  150. package/dist/table/flexible/columnSettings.js +80 -10
  151. package/dist/table/flexible/columnsList.js +110 -43
  152. package/dist/table/flexible/columnsPopup.js +77 -20
  153. package/dist/table/nested/useNestedRows.js +167 -77
  154. package/dist/table/selectable/selectableHeader.js +180 -41
  155. package/dist/table/selectable/useSelectableRows.js +270 -191
  156. package/dist/table/sortable/sortableHeader.js +153 -75
  157. package/dist/tabs/tabs.js +227 -118
  158. package/dist/timePickerRaw/timePickerRaw.js +278 -58
  159. package/dist/toastRaw/toastRaw.js +138 -32
  160. package/dist/toggleButton/toggleButton.d.ts +0 -1
  161. package/dist/toggleButtonRaw/toggleButtonRaw.d.ts +1 -0
  162. package/dist/toggleButtonRaw/toggleButtonRaw.js +146 -40
  163. package/dist/utils/formatDate.js +1001 -117
  164. package/{esm/utils/localization/translations/cs-json.js → dist/utils/localization/translations/cs.json} +11 -12
  165. package/{esm/utils/localization/translations/da-DK-json.js → dist/utils/localization/translations/da-DK.json} +31 -23
  166. package/{esm/utils/localization/translations/de-json.js → dist/utils/localization/translations/de.json} +12 -13
  167. package/dist/utils/localization/translations/en.json +308 -0
  168. package/{esm/utils/localization/translations/es-json.js → dist/utils/localization/translations/es.json} +11 -12
  169. package/{esm/utils/localization/translations/fi-FI-json.js → dist/utils/localization/translations/fi-FI.json} +31 -23
  170. package/{esm/utils/localization/translations/fr-FR-json.js → dist/utils/localization/translations/fr-FR.json} +12 -12
  171. package/{esm/utils/localization/translations/fr-json.js → dist/utils/localization/translations/fr.json} +11 -12
  172. package/{esm/utils/localization/translations/hu-HU-json.js → dist/utils/localization/translations/hu-HU.json} +31 -23
  173. package/{esm/utils/localization/translations/id-json.js → dist/utils/localization/translations/id.json} +11 -13
  174. package/{esm/utils/localization/translations/it-json.js → dist/utils/localization/translations/it.json} +11 -12
  175. package/{esm/utils/localization/translations/ja-json.js → dist/utils/localization/translations/ja.json} +11 -12
  176. package/{esm/utils/localization/translations/ko-KR-json.js → dist/utils/localization/translations/ko-KR.json} +24 -23
  177. package/{esm/utils/localization/translations/ms-json.js → dist/utils/localization/translations/ms.json} +11 -12
  178. package/{esm/utils/localization/translations/nb-NO-json.js → dist/utils/localization/translations/nb-NO.json} +31 -23
  179. package/{esm/utils/localization/translations/nl-json.js → dist/utils/localization/translations/nl.json} +11 -12
  180. package/{esm/utils/localization/translations/pl-json.js → dist/utils/localization/translations/pl.json} +11 -12
  181. package/{esm/utils/localization/translations/pt-BR-json.js → dist/utils/localization/translations/pt-BR.json} +11 -12
  182. package/{esm/utils/localization/translations/sk-SK-json.js → dist/utils/localization/translations/sk-SK.json} +31 -23
  183. package/{esm/utils/localization/translations/sv-json.js → dist/utils/localization/translations/sv.json} +11 -12
  184. package/{esm/utils/localization/translations/th-json.js → dist/utils/localization/translations/th.json} +11 -12
  185. package/{esm/utils/localization/translations/tr-json.js → dist/utils/localization/translations/tr.json} +11 -12
  186. package/{esm/utils/localization/translations/zh-Hans-json.js → dist/utils/localization/translations/zh-Hans.json} +11 -12
  187. package/{esm/utils/localization/translations/zh-TW-json.js → dist/utils/localization/translations/zh-TW.json} +11 -23
  188. package/dist/utils/localization/translationsDictionary.d.ts +2 -0
  189. package/dist/utils/localization/translationsDictionary.js +63 -0
  190. package/dist/utils/localization/useLanguage.js +2 -74
  191. package/esm/advancedGroupsFilter/advancedGroupsFilter.js +130 -29
  192. package/esm/advancedGroupsFilter/advancedGroupsFilterForm.js +133 -33
  193. package/esm/advancedGroupsFilter/advancedGroupsFilterFormSection.js +317 -65
  194. package/esm/advancedGroupsFilter/advancedGroupsFilterSectionTooltip.d.ts +0 -1
  195. package/esm/advancedGroupsFilter/advancedGroupsFilterSectionTooltip.js +77 -8
  196. package/esm/alertRaw/alertRaw.js +165 -51
  197. package/esm/banner/bannerMultipLine.js +121 -20
  198. package/esm/banner/bannerSingleLine.js +100 -13
  199. package/esm/betaPill/betaPill.js +105 -19
  200. package/esm/bookmark/bookmark.js +89 -27
  201. package/esm/bulkEditControl/bulkEditControl.js +161 -33
  202. package/esm/calendar/calendar.js +937 -272
  203. package/esm/calendar/calendarUtils.js +151 -84
  204. package/esm/card/card.js +233 -101
  205. package/esm/chart/accessibleChart/accessibleChartNarrative.js +642 -554
  206. package/esm/chart/accessibleChart/accessibleChartTable.js +239 -85
  207. package/esm/chart/chart.js +30 -20
  208. package/esm/chart/chartAxis/chartAxis.js +79 -6
  209. package/esm/checkboxListWithAction/checkboxListWithAction.js +218 -68
  210. package/esm/chip/chip.js +189 -90
  211. package/esm/columnsSelector/columnsSelector.js +91 -11
  212. package/esm/columnsSelector/columnsTab/columnsTab.js +53 -14
  213. package/esm/columnsSelector/columnsTabGroup/columnsTabGroup.js +75 -33
  214. package/esm/comboboxSelected/comboboxSelected.js +1 -3
  215. package/esm/dataFeed/feedExpandControl/feedExpandControl.js +21 -9
  216. package/esm/dataGrid/columns/checkboxColumn/checkboxHeaderCell.js +86 -10
  217. package/esm/dataGrid/dataGrid.js +221 -116
  218. package/esm/dataGrid/emptySearchList/emptySearchList.js +50 -8
  219. package/esm/dataGrid/entitiesListActions/actions/columnsListButton.js +45 -6
  220. package/esm/dataGrid/entitiesListActions/actions/fullscreenButton.js +58 -17
  221. package/esm/dataGrid/withFlexibleColumns/components/columnSettings.js +78 -9
  222. package/esm/dataGrid/withFlexibleColumns/components/columnSettingsSidePanel.js +44 -15
  223. package/esm/dataGrid/withSelectableRows/components/bulkActions/bulkActions.js +217 -31
  224. package/esm/dataGrid/withSelectableRows/withSelectableRows.js +280 -212
  225. package/esm/dataGrid/withSortableColumns/columns/sortableColumnWrapper.js +172 -94
  226. package/esm/dateInputInner/dateInputInner.js +785 -475
  227. package/esm/dateInputInner/dateInputInnerControlBlock.js +119 -21
  228. package/esm/dateInputRaw/dateInputRaw.js +309 -103
  229. package/esm/dateInputRaw/utils/getLabel.js +32 -6
  230. package/esm/dateRangeInner/dateRangeInner.js +166 -57
  231. package/esm/dateRangeRaw/dateRangeRaw.js +595 -238
  232. package/esm/dateRangeRaw/utils/dateRangeUtils.js +622 -239
  233. package/esm/dateSelectionWrapper/dateSelectionWrapper.js +146 -13
  234. package/esm/dialog/dialogContent.js +117 -39
  235. package/esm/dropdownRaw/dropdownHelper.d.ts +2 -2
  236. package/esm/dropdownRaw/dropdownHelper.js +10 -10
  237. package/esm/dropdownRaw/dropdownList.js +412 -56
  238. package/esm/dropdownRaw/dropdownPopup.js +212 -19
  239. package/esm/dropdownRaw/dropdownRaw.js +862 -507
  240. package/esm/dropdownRaw/dropdownSearchableTrigger.js +217 -45
  241. package/esm/dropdownRaw/stateReducer/stateAction.d.ts +5 -1
  242. package/esm/dropdownRaw/stateReducer/stateActionType.d.ts +2 -1
  243. package/esm/dropdownRaw/stateReducer/stateActionType.js +1 -0
  244. package/esm/dropdownRaw/stateReducer/stateReducer.d.ts +6 -1
  245. package/esm/dropdownRaw/stateReducer/stateReducer.js +24 -12
  246. package/esm/dropdownRaw/stateReducer/stateReducerHelper.d.ts +2 -0
  247. package/esm/dropdownRaw/stateReducer/stateReducerHelper.js +18 -0
  248. package/esm/dropdownRaw/stateReducer/stateReducerTestData.d.ts +39 -0
  249. package/esm/dropdownRaw/stateReducer/stateReducerTestData.js +71 -0
  250. package/esm/dropdownRaw/types.d.ts +1 -0
  251. package/esm/favoriteButton/favoriteButton.js +53 -9
  252. package/esm/filters/components/filtersContainer.js +141 -61
  253. package/esm/filters/components/filtersEmptySelectedList.js +24 -3
  254. package/esm/filters/components/filtersSaveModal.js +134 -41
  255. package/esm/filters/components/filtersSavedChipComponent.js +312 -107
  256. package/esm/filters/components/filtersSearchItemData.js +121 -46
  257. package/esm/filters/components/filtersSearchList.js +375 -178
  258. package/esm/filters/components/filtersSelect.js +122 -60
  259. package/esm/filters/components/filtersSelectListItem.js +119 -12
  260. package/esm/filters/components/filtersSidePanel.js +504 -177
  261. package/esm/filters/filters.js +435 -265
  262. package/esm/filtersBar/components/filtersBarPeriodPicker/getRangeOption.js +722 -270
  263. package/esm/filtersBar/components/resetComponentButton.js +39 -4
  264. package/esm/filtersBar/filtersBarActions/filtersBarActions.js +120 -14
  265. package/esm/filtersBar/filtersBarSidePanel/components/filtersBarSidePanelRange/filtersBarSidePanelRange.js +149 -48
  266. package/esm/filtersBar/filtersBarSidePanel/filtersBarSidePanel.js +354 -103
  267. package/esm/filtersBar/filtersContainer/filtersContainer.js +198 -133
  268. package/esm/formField/components/formFieldWithLabel.d.ts +2 -1
  269. package/esm/formField/components/formFieldWithLabel.js +3 -2
  270. package/esm/formField/components/formFieldWithoutLabel.d.ts +2 -1
  271. package/esm/formField/components/formFieldWithoutLabel.js +3 -3
  272. package/esm/formField/components/trailingComponent.d.ts +8 -0
  273. package/esm/formField/components/trailingComponent.js +7 -0
  274. package/esm/formField/formField.js +12 -11
  275. package/esm/formField/hooks/useError.js +94 -35
  276. package/esm/formGroup/components/reviewListToggle/reviewListToggle.js +66 -6
  277. package/esm/formGroup/hooks/useToggle.js +31 -10
  278. package/esm/formGroup/utils/getControls.js +8 -7
  279. package/esm/formLayout/hooks/useError.js +49 -14
  280. package/esm/formLayout/hooks/useFormButtons.js +122 -26
  281. package/esm/formSection/components/formSectionModal.js +1 -1
  282. package/esm/formSection/formSection.js +1 -1
  283. package/esm/formSection/hooks/useError.js +64 -21
  284. package/esm/formStepper/components/formStep.js +59 -9
  285. package/esm/formStepper/formStepper.js +123 -32
  286. package/esm/formStepperButtons/formStepperButtons.js +178 -37
  287. package/esm/groupsFilter/groupsHelper.d.ts +1 -1
  288. package/esm/groupsFilterRaw/groupsFilterAdjustmentState.js +152 -14
  289. package/esm/groupsFilterRaw/groupsFilterBox.js +131 -31
  290. package/esm/groupsFilterRaw/groupsFilterCommon.js +69 -7
  291. package/esm/groupsFilterRaw/groupsFilterCurrentlySelectedState.js +178 -24
  292. package/esm/groupsFilterRaw/groupsFilterHelper.d.ts +2 -1
  293. package/esm/groupsFilterRaw/groupsFilterHelper.js +279 -168
  294. package/esm/groupsFilterRaw/groupsFilterInitialState.js +260 -17
  295. package/esm/groupsFilterRaw/groupsFilterMenu.js +118 -8
  296. package/esm/groupsFilterRaw/groupsFilterRaw.d.ts +1 -0
  297. package/esm/groupsFilterRaw/groupsFilterRaw.js +811 -308
  298. package/esm/groupsFilterRaw/groupsFilterTestData.d.ts +155 -2
  299. package/esm/groupsFilterRaw/groupsFilterTestData.js +152 -57
  300. package/esm/groupsFilterRaw/groupsFilterTrigger.js +133 -34
  301. package/esm/groupsFilterRaw/groupsHelper.js +733 -207
  302. package/esm/groupsFilterRaw/stateReducer/stateReducerHelper.js +3 -1
  303. package/esm/groupsFilterRaw/types.d.ts +1 -0
  304. package/esm/header/components/collapsedItemsControl/collapsedItemsControl.js +101 -51
  305. package/esm/header/components/mobileFilterControl/mobileFilterControl.js +56 -8
  306. package/esm/header/components/mobileSearchControl/mobileSearchControl.js +113 -13
  307. package/esm/header/headerBack.js +58 -19
  308. package/esm/index.d.ts +1 -0
  309. package/esm/index.js +1 -0
  310. package/esm/list/itemData/itemDataInternal.js +210 -50
  311. package/esm/list/listItem/listItem.js +162 -54
  312. package/esm/menu/components/menuErrorItem.js +27 -4
  313. package/esm/mobileSheet/mobileSheet.js +189 -68
  314. package/esm/modal/modal.js +265 -120
  315. package/esm/nav/nav.js +1 -1
  316. package/esm/nav/navFooter/navFooter.js +76 -38
  317. package/esm/nav/navFooter/navFooterAction/navFooterAction.js +46 -12
  318. package/esm/nav/navHeader/navHeader.js +80 -35
  319. package/esm/nav/navHeader/navHeaderSearch/navHeaderSearch.js +82 -28
  320. package/esm/nav/navItem/navItem.d.ts +3 -3
  321. package/esm/nav/navItem/navItem.js +35 -33
  322. package/esm/nav/navMobileBar/navMobileBar.js +61 -20
  323. package/esm/notification/notification.js +114 -18
  324. package/esm/pagination/paginationArrow.js +75 -10
  325. package/esm/pagination/paginationText/paginationText.js +39 -10
  326. package/esm/pill/components/pillNonActionable/pillNonActionable.js +87 -23
  327. package/esm/pillBox/components/pillBoxItem.js +46 -8
  328. package/esm/pillBox/pillBox.js +115 -19
  329. package/esm/pillExpandable/pillExpandable.js +327 -138
  330. package/esm/rangeRaw/rangeRaw.js +480 -140
  331. package/esm/rangeRaw/utils/rangeHelper.js +203 -38
  332. package/esm/searchInputRaw/searchInputRaw.js +145 -43
  333. package/esm/skeleton/skeleton.js +45 -5
  334. package/esm/sortControl/sortControl.js +146 -41
  335. package/esm/stepperRaw/stepperRaw.js +112 -41
  336. package/esm/storybookHelpers/dataGridWithDifferentCellOptions/components/EntitiesListAction.js +178 -19
  337. package/esm/summary/summary.js +88 -7
  338. package/esm/table/actions/actionsMenu.js +165 -77
  339. package/esm/table/flexible/columnSettings.js +74 -9
  340. package/esm/table/flexible/columnsList.js +104 -42
  341. package/esm/table/flexible/columnsPopup.js +71 -19
  342. package/esm/table/nested/useNestedRows.js +161 -76
  343. package/esm/table/selectable/selectableHeader.js +174 -40
  344. package/esm/table/selectable/useSelectableRows.js +264 -190
  345. package/esm/table/sortable/sortableHeader.js +147 -74
  346. package/esm/tabs/tabs.js +221 -117
  347. package/esm/timePickerRaw/timePickerRaw.js +272 -57
  348. package/esm/toastRaw/toastRaw.js +132 -31
  349. package/esm/toggleButton/toggleButton.d.ts +0 -1
  350. package/esm/toggleButtonRaw/toggleButtonRaw.d.ts +1 -0
  351. package/esm/toggleButtonRaw/toggleButtonRaw.js +111 -18
  352. package/esm/utils/formatDate.js +995 -116
  353. package/{dist/utils/localization/translations/cs-json.js → esm/utils/localization/translations/cs.json} +11 -15
  354. package/{dist/utils/localization/translations/da-DK-json.js → esm/utils/localization/translations/da-DK.json} +31 -26
  355. package/{dist/utils/localization/translations/de-json.js → esm/utils/localization/translations/de.json} +12 -16
  356. package/esm/utils/localization/translations/en.json +308 -0
  357. package/{dist/utils/localization/translations/es-json.js → esm/utils/localization/translations/es.json} +11 -15
  358. package/{dist/utils/localization/translations/fi-FI-json.js → esm/utils/localization/translations/fi-FI.json} +31 -26
  359. package/{dist/utils/localization/translations/fr-FR-json.js → esm/utils/localization/translations/fr-FR.json} +12 -15
  360. package/{dist/utils/localization/translations/fr-json.js → esm/utils/localization/translations/fr.json} +11 -15
  361. package/{dist/utils/localization/translations/hu-HU-json.js → esm/utils/localization/translations/hu-HU.json} +31 -26
  362. package/{dist/utils/localization/translations/id-json.js → esm/utils/localization/translations/id.json} +11 -16
  363. package/{dist/utils/localization/translations/it-json.js → esm/utils/localization/translations/it.json} +11 -15
  364. package/{dist/utils/localization/translations/ja-json.js → esm/utils/localization/translations/ja.json} +11 -15
  365. package/{dist/utils/localization/translations/ko-KR-json.js → esm/utils/localization/translations/ko-KR.json} +24 -26
  366. package/{dist/utils/localization/translations/ms-json.js → esm/utils/localization/translations/ms.json} +11 -15
  367. package/{dist/utils/localization/translations/nb-NO-json.js → esm/utils/localization/translations/nb-NO.json} +31 -26
  368. package/{dist/utils/localization/translations/nl-json.js → esm/utils/localization/translations/nl.json} +11 -15
  369. package/{dist/utils/localization/translations/pl-json.js → esm/utils/localization/translations/pl.json} +11 -15
  370. package/{dist/utils/localization/translations/pt-BR-json.js → esm/utils/localization/translations/pt-BR.json} +11 -15
  371. package/{dist/utils/localization/translations/sk-SK-json.js → esm/utils/localization/translations/sk-SK.json} +31 -26
  372. package/{dist/utils/localization/translations/sv-json.js → esm/utils/localization/translations/sv.json} +11 -15
  373. package/{dist/utils/localization/translations/th-json.js → esm/utils/localization/translations/th.json} +11 -15
  374. package/{dist/utils/localization/translations/tr-json.js → esm/utils/localization/translations/tr.json} +11 -15
  375. package/{dist/utils/localization/translations/zh-Hans-json.js → esm/utils/localization/translations/zh-Hans.json} +11 -15
  376. package/{dist/utils/localization/translations/zh-TW-json.js → esm/utils/localization/translations/zh-TW.json} +11 -26
  377. package/esm/utils/localization/translationsDictionary.d.ts +2 -0
  378. package/esm/utils/localization/translationsDictionary.js +59 -0
  379. package/esm/utils/localization/useLanguage.js +1 -50
  380. package/package.json +17 -10
  381. package/dist/utils/localization/translations/cs-json.d.ts +0 -251
  382. package/dist/utils/localization/translations/da-DK-json.d.ts +0 -252
  383. package/dist/utils/localization/translations/de-json.d.ts +0 -251
  384. package/dist/utils/localization/translations/en-json.d.ts +0 -314
  385. package/dist/utils/localization/translations/en-json.js +0 -317
  386. package/dist/utils/localization/translations/es-json.d.ts +0 -251
  387. package/dist/utils/localization/translations/fi-FI-json.d.ts +0 -252
  388. package/dist/utils/localization/translations/fr-FR-json.d.ts +0 -250
  389. package/dist/utils/localization/translations/fr-json.d.ts +0 -251
  390. package/dist/utils/localization/translations/hu-HU-json.d.ts +0 -252
  391. package/dist/utils/localization/translations/id-json.d.ts +0 -252
  392. package/dist/utils/localization/translations/it-json.d.ts +0 -251
  393. package/dist/utils/localization/translations/ja-json.d.ts +0 -251
  394. package/dist/utils/localization/translations/ko-KR-json.d.ts +0 -258
  395. package/dist/utils/localization/translations/ms-json.d.ts +0 -251
  396. package/dist/utils/localization/translations/nb-NO-json.d.ts +0 -252
  397. package/dist/utils/localization/translations/nl-json.d.ts +0 -251
  398. package/dist/utils/localization/translations/pl-json.d.ts +0 -251
  399. package/dist/utils/localization/translations/pt-BR-json.d.ts +0 -251
  400. package/dist/utils/localization/translations/sk-SK-json.d.ts +0 -251
  401. package/dist/utils/localization/translations/sv-json.d.ts +0 -251
  402. package/dist/utils/localization/translations/th-json.d.ts +0 -251
  403. package/dist/utils/localization/translations/tr-json.d.ts +0 -251
  404. package/dist/utils/localization/translations/zh-Hans-json.d.ts +0 -251
  405. package/dist/utils/localization/translations/zh-TW-json.d.ts +0 -271
  406. package/esm/utils/localization/translations/cs-json.d.ts +0 -251
  407. package/esm/utils/localization/translations/da-DK-json.d.ts +0 -252
  408. package/esm/utils/localization/translations/de-json.d.ts +0 -251
  409. package/esm/utils/localization/translations/en-json.d.ts +0 -314
  410. package/esm/utils/localization/translations/en-json.js +0 -314
  411. package/esm/utils/localization/translations/es-json.d.ts +0 -251
  412. package/esm/utils/localization/translations/fi-FI-json.d.ts +0 -252
  413. package/esm/utils/localization/translations/fr-FR-json.d.ts +0 -250
  414. package/esm/utils/localization/translations/fr-json.d.ts +0 -251
  415. package/esm/utils/localization/translations/hu-HU-json.d.ts +0 -252
  416. package/esm/utils/localization/translations/id-json.d.ts +0 -252
  417. package/esm/utils/localization/translations/it-json.d.ts +0 -251
  418. package/esm/utils/localization/translations/ja-json.d.ts +0 -251
  419. package/esm/utils/localization/translations/ko-KR-json.d.ts +0 -258
  420. package/esm/utils/localization/translations/ms-json.d.ts +0 -251
  421. package/esm/utils/localization/translations/nb-NO-json.d.ts +0 -252
  422. package/esm/utils/localization/translations/nl-json.d.ts +0 -251
  423. package/esm/utils/localization/translations/pl-json.d.ts +0 -251
  424. package/esm/utils/localization/translations/pt-BR-json.d.ts +0 -251
  425. package/esm/utils/localization/translations/sk-SK-json.d.ts +0 -251
  426. package/esm/utils/localization/translations/sv-json.d.ts +0 -251
  427. package/esm/utils/localization/translations/th-json.d.ts +0 -251
  428. package/esm/utils/localization/translations/tr-json.d.ts +0 -251
  429. package/esm/utils/localization/translations/zh-Hans-json.d.ts +0 -251
  430. package/esm/utils/localization/translations/zh-TW-json.d.ts +0 -271
@@ -1,3 +1,4 @@
1
+ import { injectString } from "../utils/localization/translationsDictionary";
1
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
3
  /* eslint-disable @typescript-eslint/no-explicit-any */
3
4
  import { useCallback, useEffect, useMemo, useState } from "react";
@@ -30,276 +31,445 @@ import { FiltersDateInput } from "./components/filtersDateInput";
30
31
  import { useMobile } from "../commonHelpers/hooks/useMobile";
31
32
  import { IconChevronTopSmall } from "../icons/iconChevronTopSmall";
32
33
  import { FOCUSABLE_SELECTOR } from "../utils/focusableSelector";
34
+ injectString("en", "Search page", "Search page");
35
+ injectString("en", "Close setting conditions popup", "Close setting conditions popup");
36
+ injectString("en", "Search by", "Search by");
37
+ injectString("en", "Open setting conditions popup", "Open setting conditions popup");
38
+ injectString("en", "Setting conditions", "Setting conditions");
33
39
  export const FiltersDisplayName = "Filters";
34
40
  /**
35
41
  * @beta This component is currently in beta.
36
42
  */
37
- export const Filters = ({ className, children, isPinned, onPinChange, keyword, setKeyword, searchTypes, searchType, setSearchType, allFiltersState, setAllFiltersState, onToggleView, searchSelection, setSearchSelection, recentSearches, onRemoveRecentSearchItem, onSaveRecentSearch, savedFilters, onRemoveSavedFilter, onSaveFilter }) => {
38
- const [isOpen, setIsOpen] = useState(false);
39
- const isSavedFiltersMode = Boolean(savedFilters && onRemoveSavedFilter && onSaveFilter);
40
- const isPinMode = Boolean(typeof isPinned === "boolean" && onPinChange);
41
- const isRecentSearchesMode = Boolean(recentSearches && onRemoveRecentSearchItem && onSaveRecentSearch);
42
- const uniqueKey = useUniqueId();
43
- const isMobile = useMobile();
44
- const [isSidePanelOpen, setIsSidePanelOpen] = useState(false);
45
- const triggerRef = React.useRef(null);
46
- const sidePanelTriggerRef = React.useRef(null);
47
- const searchPopupTriggerRef = React.useRef(null);
48
- const searchListRef = React.useRef(null);
49
- const selectListRef = React.useRef(null);
50
- const searchTriggerRef = React.useRef(null);
51
- const prevIsOpenRef = React.useRef(isOpen);
52
- const [savedFiltersStates, setSavedFiltersStates] = useState(new Map());
53
- const { translate } = useLanguage();
54
- const searchTypesArray = useMemo(() => getArrayOfElements(searchTypes), [searchTypes]);
55
- const searchOnlyOneType = useMemo(() => searchTypesArray.length === 1 ? searchTypesArray[0].id : undefined, [searchTypesArray]);
56
- const searchTypesMap = useMemo(() => {
57
- const map = new Map();
58
- searchTypesArray.forEach(el => {
59
- map.set(el.id, el.name);
60
- });
61
- return map;
62
- }, [searchTypesArray]);
63
- const searchTypesToSelect = useMemo(() => searchTypesArray.map(el => ({ id: el.id, name: el.name, subItems: el.subItems ? [...el.subItems] : undefined })), [searchTypesArray]);
64
- const filters = useMemo(() => {
65
- const childrenArray = getArrayOfChildren(children);
66
- return getAllowedFilters(childrenArray);
67
- }, [children]);
68
- useEffect(() => {
69
- if (!isSavedFiltersMode) {
70
- return;
43
+ export const Filters = ({
44
+ className,
45
+ children,
46
+ isPinned,
47
+ onPinChange,
48
+ keyword,
49
+ setKeyword,
50
+ searchTypes,
51
+ searchType,
52
+ setSearchType,
53
+ allFiltersState,
54
+ setAllFiltersState,
55
+ onToggleView,
56
+ searchSelection,
57
+ setSearchSelection,
58
+ recentSearches,
59
+ onRemoveRecentSearchItem,
60
+ onSaveRecentSearch,
61
+ savedFilters,
62
+ onRemoveSavedFilter,
63
+ onSaveFilter
64
+ }) => {
65
+ const [isOpen, setIsOpen] = useState(false);
66
+ const isSavedFiltersMode = Boolean(savedFilters && onRemoveSavedFilter && onSaveFilter);
67
+ const isPinMode = Boolean(typeof isPinned === "boolean" && onPinChange);
68
+ const isRecentSearchesMode = Boolean(recentSearches && onRemoveRecentSearchItem && onSaveRecentSearch);
69
+ const uniqueKey = useUniqueId();
70
+ const isMobile = useMobile();
71
+ const [isSidePanelOpen, setIsSidePanelOpen] = useState(false);
72
+ const triggerRef = React.useRef(null);
73
+ const sidePanelTriggerRef = React.useRef(null);
74
+ const searchPopupTriggerRef = React.useRef(null);
75
+ const searchListRef = React.useRef(null);
76
+ const selectListRef = React.useRef(null);
77
+ const searchTriggerRef = React.useRef(null);
78
+ const prevIsOpenRef = React.useRef(isOpen);
79
+ const [savedFiltersStates, setSavedFiltersStates] = useState(new Map());
80
+ const {
81
+ translate
82
+ } = useLanguage();
83
+ const searchTypesArray = useMemo(() => getArrayOfElements(searchTypes), [searchTypes]);
84
+ const searchOnlyOneType = useMemo(() => searchTypesArray.length === 1 ? searchTypesArray[0].id : undefined, [searchTypesArray]);
85
+ const searchTypesMap = useMemo(() => {
86
+ const map = new Map();
87
+ searchTypesArray.forEach(el => {
88
+ map.set(el.id, el.name);
89
+ });
90
+ return map;
91
+ }, [searchTypesArray]);
92
+ const searchTypesToSelect = useMemo(() => searchTypesArray.map(el => ({
93
+ id: el.id,
94
+ name: el.name,
95
+ subItems: el.subItems ? [...el.subItems] : undefined
96
+ })), [searchTypesArray]);
97
+ const filters = useMemo(() => {
98
+ const childrenArray = getArrayOfChildren(children);
99
+ return getAllowedFilters(childrenArray);
100
+ }, [children]);
101
+ useEffect(() => {
102
+ if (!isSavedFiltersMode) {
103
+ return;
104
+ }
105
+ const error = savedFilters.error;
106
+ if (error) {
107
+ console.error("Failed to fetch saved filters. Error:", error);
108
+ } else if (savedFilters && savedFilters.data) {
109
+ setSavedFiltersStates(new Map(savedFilters.data.map(item => [item.name, {
110
+ id: item.id,
111
+ state: item.state
112
+ }])));
113
+ }
114
+ }, [isSavedFiltersMode, savedFilters]);
115
+ const handleSaveRecentSearch = useCallback(searchValue => {
116
+ if (!onSaveRecentSearch) {
117
+ return;
118
+ }
119
+ if (!(searchSelection === null || searchSelection === void 0 ? void 0 : searchSelection.length) && !searchValue) {
120
+ return;
121
+ }
122
+ const entries = searchSelection || [];
123
+ const keywordEntry = searchValue ? {
124
+ id: KEYWORD_ID,
125
+ name: searchValue,
126
+ type: KEYWORD_TYPE
127
+ } : entries.find(item => item.id === KEYWORD_ID);
128
+ const preparedItemsArray = [...entries].filter(el => el.id !== KEYWORD_ID).map(el => Object.assign(Object.assign({}, el), {
129
+ type: el.type || NO_TYPED_SEARCH_ITEM
130
+ }));
131
+ const isTyped = preparedItemsArray.length ? preparedItemsArray.every(el => el.type === preparedItemsArray[0].type) : false;
132
+ if (keywordEntry) {
133
+ preparedItemsArray.push(Object.assign(Object.assign({}, keywordEntry), {
134
+ type: KEYWORD_TYPE
135
+ }));
136
+ }
137
+ const newRecentSearchNamesArr = preparedItemsArray.filter(el => el.id !== KEYWORD_ID).map(el => el.name || el.id);
138
+ keywordEntry && newRecentSearchNamesArr.push(`\%${keywordEntry.name}\%`);
139
+ const newRecentSearchName = newRecentSearchNamesArr.join(", ");
140
+ const newRecentSearch = {
141
+ name: newRecentSearchName,
142
+ type: isTyped ? preparedItemsArray[0].type : NO_TYPED_SEARCH_ITEM,
143
+ description: Array.from(new Set(entries.filter(el => el.type && el.type !== NO_TYPED_SEARCH_ITEM && el.type !== KEYWORD_TYPE).map(el => searchTypesMap.get(el.type) || ""))).join(", "),
144
+ itemsArray: [...preparedItemsArray]
145
+ };
146
+ onSaveRecentSearch(Object.assign({}, newRecentSearch));
147
+ }, [onSaveRecentSearch, searchSelection, searchTypesMap]);
148
+ useEffect(() => {
149
+ var _a, _b;
150
+ if (isOpen) {
151
+ (_a = searchPopupTriggerRef.current) === null || _a === void 0 ? void 0 : _a.focus();
152
+ } else {
153
+ prevIsOpenRef.current && ((_b = searchTriggerRef.current) === null || _b === void 0 ? void 0 : _b.focus());
154
+ }
155
+ }, [isOpen, searchPopupTriggerRef, searchTriggerRef]);
156
+ useEffect(() => {
157
+ if (!isOpen && prevIsOpenRef.current) {
158
+ prevIsOpenRef.current = false;
159
+ isRecentSearchesMode && handleSaveRecentSearch();
160
+ }
161
+ if (isOpen) {
162
+ prevIsOpenRef.current = true;
163
+ }
164
+ }, [isOpen, isRecentSearchesMode, handleSaveRecentSearch]);
165
+ const selectState = useMemo(() => Object.keys(searchType), [searchType]);
166
+ const onClearSearchSelection = useCallback(() => {
167
+ setSearchSelection && setSearchSelection([]);
168
+ }, [setSearchSelection]);
169
+ const onSearchItemClick = useCallback(item => {
170
+ if (!(searchSelection && setSearchSelection)) {
171
+ return;
172
+ }
173
+ const typeKey = item.type || NO_TYPED_SEARCH_ITEM;
174
+ const currentItem = searchOnlyOneType ? searchSelection.find(el => el.id === item.id) : searchSelection.find(el => el.id === item.id && (el.type || NO_TYPED_SEARCH_ITEM) === typeKey);
175
+ if (currentItem) {
176
+ const newValue = searchOnlyOneType ? searchSelection.filter(el => el.id !== currentItem.id) : searchSelection.filter(el => !(el.id === currentItem.id && (el.type || NO_TYPED_SEARCH_ITEM) === typeKey));
177
+ currentItem.id === KEYWORD_ID && setKeyword("");
178
+ setSearchSelection(newValue);
179
+ } else {
180
+ setSearchSelection([...searchSelection, Object.assign(Object.assign({}, item), {
181
+ type: item.type || searchOnlyOneType || NO_TYPED_SEARCH_ITEM
182
+ })]);
183
+ }
184
+ }, [searchOnlyOneType, searchSelection, setKeyword, setSearchSelection]);
185
+ const handleTriggerClick = useCallback(() => {
186
+ if (!document.startViewTransition) {
187
+ setIsOpen(prevState => !prevState);
188
+ return;
189
+ }
190
+ document.startViewTransition(() => {
191
+ flushSync(() => {
192
+ setIsOpen(prevState => !prevState);
193
+ });
194
+ });
195
+ }, []);
196
+ const handleViewState = useCallback(() => {
197
+ onToggleView && onToggleView(!isSidePanelOpen);
198
+ setIsSidePanelOpen(val => !val);
199
+ }, [isSidePanelOpen, onToggleView]);
200
+ const handleOpenChange = useCallback(open => {
201
+ if (!document.startViewTransition) {
202
+ setIsOpen(open);
203
+ return;
204
+ }
205
+ document.startViewTransition(() => {
206
+ flushSync(() => {
207
+ setIsOpen(open);
208
+ });
209
+ });
210
+ }, []);
211
+ const handleSidePanelApply = useCallback(state => {
212
+ filters.forEach(filter => {
213
+ const filterProps = filter.props;
214
+ const newState = state[filterProps.id];
215
+ if (filterProps.id && state.hasOwnProperty(filterProps.id) && filterProps.onChange) {
216
+ filterProps.onChange(newState);
217
+ }
218
+ });
219
+ }, [filters]);
220
+ const handleSaveFilters = useCallback((filterName, filterState) => {
221
+ const stateForSave = filterState || createStateObject(filters, "state");
222
+ onSaveFilter && onSaveFilter({
223
+ name: filterName,
224
+ state: stateForSave
225
+ }).then(id => {
226
+ setSavedFiltersStates(prevStates => new Map(prevStates).set(filterName, {
227
+ state: stateForSave,
228
+ id: id
229
+ }));
230
+ }).catch(error => {
231
+ console.error("Could not save the following filter configuration:", "name", filterName, "state", stateForSave, "Error:", error);
232
+ });
233
+ }, [filters, onSaveFilter]);
234
+ const handleRecentSearchItemClick = useCallback(item => {
235
+ const newSearchSelection = item.itemsArray;
236
+ const newItemSearch = item.itemsArray.find(el => el.id === KEYWORD_ID);
237
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
238
+ if (newSearchSelection) {
239
+ setSearchSelection === null || setSearchSelection === void 0 ? void 0 : setSearchSelection([...newSearchSelection]);
240
+ }
241
+ newItemSearch && setKeyword(newItemSearch.name);
242
+ handleOpenChange(false);
243
+ }, [handleOpenChange, setKeyword, setSearchSelection]);
244
+ const handlePinChange = useCallback(() => {
245
+ onPinChange && onPinChange(!isPinned);
246
+ }, [onPinChange, isPinned]);
247
+ const handleSearchKeyDown = useCallback(event => {
248
+ var _a, _b;
249
+ if (event.code === "Enter") {
250
+ isRecentSearchesMode && handleSaveRecentSearch(event.currentTarget.value);
251
+ !isOpen && handleTriggerClick();
252
+ }
253
+ if (event.code === "ArrowDown" && !isOpen) {
254
+ handleTriggerClick();
255
+ }
256
+ if (event.code === "ArrowDown" && isOpen) {
257
+ const firstItem = (_a = searchListRef.current) === null || _a === void 0 ? void 0 : _a.querySelector(FOCUSABLE_SELECTOR);
258
+ firstItem === null || firstItem === void 0 ? void 0 : firstItem.focus();
259
+ }
260
+ if (event.code === "ArrowLeft" && isOpen && event.currentTarget.value === "") {
261
+ const firstItem = (_b = selectListRef.current) === null || _b === void 0 ? void 0 : _b.querySelector(FOCUSABLE_SELECTOR);
262
+ firstItem === null || firstItem === void 0 ? void 0 : firstItem.focus();
263
+ }
264
+ }, [isOpen, isRecentSearchesMode, handleSaveRecentSearch, handleTriggerClick]);
265
+ const getIconByType = useCallback(type => {
266
+ if (!type) {
267
+ return IconFilter;
268
+ }
269
+ const foundType = searchTypesArray.find(item => item.id === type);
270
+ return foundType && foundType.icon ? foundType.icon : IconFilter;
271
+ }, [searchTypesArray]);
272
+ const combinedData = useCombineData(searchTypesArray);
273
+ const memoizedSelect = useMemo(() => _jsx(FiltersSelect, {
274
+ value: searchType,
275
+ selectListRef: selectListRef,
276
+ onChange: setSearchType,
277
+ items: searchTypesToSelect
278
+ }), [searchType, searchTypesToSelect, setSearchType]);
279
+ const handleSearchKeywordChange = useCallback(newKeyword => {
280
+ setKeyword(newKeyword);
281
+ !isOpen && handleOpenChange(true);
282
+ }, [setKeyword, isOpen, handleOpenChange]);
283
+ const memoizedSearch = useMemo(() => _jsx(FiltersSearch, {
284
+ id: `filtersSearch_${uniqueKey}`,
285
+ ref: searchTriggerRef,
286
+ name: translate("Search page"),
287
+ value: keyword,
288
+ onSearchKeyDown: handleSearchKeyDown,
289
+ onOpenPopup: isOpen ? undefined : handleTriggerClick,
290
+ onChange: handleSearchKeywordChange,
291
+ handleRemove: onSearchItemClick,
292
+ searchSelection: searchSelection,
293
+ className: "zen-filters__search-with-pills"
294
+ }), [uniqueKey, translate, keyword, handleSearchKeyDown, isOpen, handleTriggerClick, handleSearchKeywordChange, onSearchItemClick, searchSelection]);
295
+ const memoizedSearchPopup = useMemo(() => _jsx(FiltersSearch, {
296
+ id: `filtersSearch_${uniqueKey}_popup`,
297
+ ref: searchPopupTriggerRef,
298
+ name: translate("Search page"),
299
+ value: keyword,
300
+ onChange: setKeyword,
301
+ onSearchKeyDown: handleSearchKeyDown,
302
+ handleRemove: onSearchItemClick,
303
+ searchSelection: searchSelection,
304
+ className: "zen-filters-popup__search-with-pills"
305
+ }), [uniqueKey, translate, keyword, setKeyword, handleSearchKeyDown, onSearchItemClick, searchSelection]);
306
+ const memoizedSearchList = useMemo(() => !isOpen ? null : _jsx(FiltersSearchList, {
307
+ searchValue: keyword,
308
+ searchListRef: searchListRef,
309
+ searchData: combinedData,
310
+ searchSelection: searchSelection,
311
+ onlyOneType: searchOnlyOneType,
312
+ getIconByType: getIconByType,
313
+ handleSearchItemClick: onSearchItemClick,
314
+ handleClearSearchSelection: onClearSearchSelection,
315
+ recentSearches: isRecentSearchesMode ? recentSearches : undefined,
316
+ onRemoveRecentSearchItem: isRecentSearchesMode ? onRemoveRecentSearchItem : undefined,
317
+ handleRecentSearchItemClick: isRecentSearchesMode ? handleRecentSearchItemClick : undefined
318
+ }), [isOpen, keyword, combinedData, searchSelection, getIconByType, onSearchItemClick, onClearSearchSelection, isRecentSearchesMode, recentSearches, onRemoveRecentSearchItem, handleRecentSearchItemClick, searchOnlyOneType, searchListRef]);
319
+ const allOption = useMemo(() => getAllOption(translate), [translate]);
320
+ const selectTriggerPopup = useMemo(() => _jsx(TextIconButton, {
321
+ className: "zen-filters__select-trigger",
322
+ iconClasses: "zen-filters__select-trigger-icon",
323
+ contentClasses: "zen-filters__select-trigger-content",
324
+ title: translate("Close setting conditions popup"),
325
+ onClick: handleTriggerClick,
326
+ icon: IconChevronTopSmall,
327
+ iconPosition: "end",
328
+ children: translate("Search by")
329
+ }), [handleTriggerClick, translate]);
330
+ // added onMouseDown to prevent focus
331
+ const selectTrigger = useMemo(() => {
332
+ var _a;
333
+ return isMobile ? null : _jsx(TextIconButton, {
334
+ tabIndex: -1,
335
+ onMouseDown: e => e.preventDefault(),
336
+ className: "zen-filters__select-trigger",
337
+ iconClasses: "zen-filters__select-trigger-icon",
338
+ contentClasses: "zen-filters__select-trigger-content",
339
+ title: translate("Open setting conditions popup"),
340
+ onClick: handleTriggerClick,
341
+ icon: IconChevronDownSmall,
342
+ iconPosition: "end",
343
+ children: selectState[0] === ALL_SELECT_OPTION_ID ? allOption.name : (_a = searchTypesArray.find(item => item.id === selectState[0])) === null || _a === void 0 ? void 0 : _a.name
344
+ });
345
+ }, [translate, handleTriggerClick, selectState, allOption.name, searchTypesArray, isMobile]);
346
+ const memoizedPopup = useMemo(() => _jsx(ControlledPopup, {
347
+ paddingY: -34,
348
+ isOpen: isOpen,
349
+ className: classNames(["zen-filters-popup"]),
350
+ onOpenChange: handleOpenChange,
351
+ useTrapFocusWithTrigger: "on",
352
+ alignment: "bottom",
353
+ shouldHoldScroll: true,
354
+ triggerRef: triggerRef,
355
+ ariaLabel: translate("Setting conditions"),
356
+ recalculateOnScroll: true,
357
+ children: _jsxs("div", {
358
+ className: "zen-filters-popup__content",
359
+ children: [_jsxs("div", {
360
+ className: "zen-filters-popup__left-panel",
361
+ children: [selectTriggerPopup, memoizedSelect]
362
+ }), _jsxs("div", {
363
+ className: "zen-filters-popup__right-panel",
364
+ children: [memoizedSearchPopup, memoizedSearchList]
365
+ })]
366
+ })
367
+ }), [isOpen, handleOpenChange, translate, selectTriggerPopup, memoizedSelect, memoizedSearchPopup, memoizedSearchList]);
368
+ const filtersForRender = useMemo(() => filters.filter(el => {
369
+ const elProps = el.props;
370
+ return typeof elProps.visible === "boolean" ? elProps.visible : elProps.visible === undefined ? false : elProps.visible(Array.from(selectState), undefined);
371
+ }), [filters, selectState]);
372
+ // The sidePanel has a full set of filters, so we need to calculate the number of changed filters based on all filters, not just the visible ones
373
+ const filtersForCalculation = useMemo(() => {
374
+ const stateObj = createStateObject(filters, "state");
375
+ return filters.filter(el => {
376
+ const elProps = el.props;
377
+ return typeof elProps.visible === "boolean" ? elProps.visible : elProps.visible === undefined ? true : elProps.visible(Array.from(selectState), stateObj) || elProps.visible(Array.from(selectState));
378
+ });
379
+ }, [filters, selectState]);
380
+ const hasSavedFilters = savedFiltersStates.size > 0;
381
+ const hasFilters = filtersForCalculation.length > 0;
382
+ const memoizedFiltersContainer = useMemo(() => hasFilters ? _jsx(FiltersContainer, {
383
+ filtersChipRef: sidePanelTriggerRef,
384
+ filtersClickHandler: handleViewState,
385
+ filtersForCalculation: filtersForCalculation,
386
+ isPinned: isPinMode ? isPinned : undefined,
387
+ onPinChange: isPinMode ? onPinChange : undefined,
388
+ hasSavedFilters: hasSavedFilters,
389
+ children: filtersForRender
390
+ }) : null, [handleViewState, filtersForCalculation, isPinMode, isPinned, onPinChange, hasSavedFilters, filtersForRender, hasFilters]);
391
+ const memoizedSidePanel = useMemo(() => _jsx(FiltersSidePanel, {
392
+ isOpen: isSidePanelOpen,
393
+ onApply: handleSidePanelApply,
394
+ onClose: handleViewState,
395
+ onPin: isPinMode ? handlePinChange : undefined,
396
+ isPinned: isPinMode ? isPinned : undefined,
397
+ filters: filters,
398
+ externalState: allFiltersState,
399
+ setExternalState: setAllFiltersState,
400
+ triggerRef: sidePanelTriggerRef
401
+ }), [isSidePanelOpen, handleSidePanelApply, handleViewState, handlePinChange, isPinned, isPinMode, filters, allFiltersState, setAllFiltersState, sidePanelTriggerRef]);
402
+ const memoizedStatus = useMemo(() => isPinned && isPinMode ? "accent" : undefined, [isPinned, isPinMode]);
403
+ const memoizedSavedFiltersItems = useMemo(() => new Set(savedFiltersStates.keys()), [savedFiltersStates]);
404
+ const memoizedSavedFiltersActive = useMemo(() => {
405
+ const activeSet = new Set();
406
+ const currentState = createStateObject(filters, "state");
407
+ Array.from(savedFiltersStates.keys()).forEach(key => {
408
+ var _a;
409
+ const savedState = (_a = savedFiltersStates.get(key)) === null || _a === void 0 ? void 0 : _a.state;
410
+ if (savedState) {
411
+ if (isElementsEqual(currentState, savedState)) {
412
+ activeSet.add(key);
71
413
  }
72
- const error = savedFilters.error;
73
- if (error) {
74
- console.error("Failed to fetch saved filters. Error:", error);
414
+ }
415
+ });
416
+ return activeSet;
417
+ }, [savedFiltersStates, filters]);
418
+ const removeSavedFiltersState = useCallback(item => {
419
+ var _a;
420
+ setSavedFiltersStates(prev => {
421
+ const newState = new Map(prev);
422
+ newState.delete(item);
423
+ return newState;
424
+ });
425
+ const filterId = (_a = savedFiltersStates.get(item)) === null || _a === void 0 ? void 0 : _a.id;
426
+ if (filterId) {
427
+ onRemoveSavedFilter && onRemoveSavedFilter(filterId);
428
+ }
429
+ }, [onRemoveSavedFilter, savedFiltersStates]);
430
+ const applySavedFiltersState = useCallback(item => {
431
+ var _a;
432
+ const newState = (_a = savedFiltersStates.get(item)) === null || _a === void 0 ? void 0 : _a.state;
433
+ if (newState) {
434
+ filters.forEach(filter => {
435
+ const filterProps = filter.props;
436
+ const stateForFilter = newState[filterProps.id];
437
+ if (filterProps.id && newState.hasOwnProperty(filterProps.id) && filterProps.onChange) {
438
+ filterProps.onChange(stateForFilter);
75
439
  }
76
- else if (savedFilters && savedFilters.data) {
77
- setSavedFiltersStates(new Map(savedFilters.data.map(item => [item.name, { id: item.id, state: item.state }])));
78
- }
79
- }, [isSavedFiltersMode, savedFilters]);
80
- const handleSaveRecentSearch = useCallback((searchValue) => {
81
- if (!onSaveRecentSearch) {
82
- return;
83
- }
84
- if (!(searchSelection === null || searchSelection === void 0 ? void 0 : searchSelection.length) && !searchValue) {
85
- return;
86
- }
87
- const entries = searchSelection || [];
88
- const keywordEntry = searchValue ? { id: KEYWORD_ID, name: searchValue, type: KEYWORD_TYPE } : entries.find((item) => item.id === KEYWORD_ID);
89
- const preparedItemsArray = [...entries].filter(el => el.id !== KEYWORD_ID).map(el => (Object.assign(Object.assign({}, el), { type: el.type || NO_TYPED_SEARCH_ITEM })));
90
- const isTyped = preparedItemsArray.length ? preparedItemsArray.every(el => el.type === preparedItemsArray[0].type) : false;
91
- if (keywordEntry) {
92
- preparedItemsArray.push(Object.assign(Object.assign({}, keywordEntry), { type: KEYWORD_TYPE }));
93
- }
94
- const newRecentSearchNamesArr = preparedItemsArray.filter(el => el.id !== KEYWORD_ID).map(el => el.name || el.id);
95
- keywordEntry && newRecentSearchNamesArr.push(`\%${keywordEntry.name}\%`);
96
- const newRecentSearchName = newRecentSearchNamesArr.join(", ");
97
- const newRecentSearch = { name: newRecentSearchName, type: isTyped ? preparedItemsArray[0].type : NO_TYPED_SEARCH_ITEM,
98
- description: Array.from(new Set(entries.filter(el => el.type && el.type !== NO_TYPED_SEARCH_ITEM && el.type !== KEYWORD_TYPE)
99
- .map(el => searchTypesMap.get(el.type) || ""))).join(", "),
100
- itemsArray: [...preparedItemsArray] };
101
- onSaveRecentSearch(Object.assign({}, newRecentSearch));
102
- }, [onSaveRecentSearch, searchSelection, searchTypesMap]);
103
- useEffect(() => {
104
- var _a, _b;
105
- if (isOpen) {
106
- (_a = searchPopupTriggerRef.current) === null || _a === void 0 ? void 0 : _a.focus();
107
- }
108
- else {
109
- prevIsOpenRef.current && ((_b = searchTriggerRef.current) === null || _b === void 0 ? void 0 : _b.focus());
110
- }
111
- }, [isOpen, searchPopupTriggerRef, searchTriggerRef]);
112
- useEffect(() => {
113
- if (!isOpen && prevIsOpenRef.current) {
114
- prevIsOpenRef.current = false;
115
- isRecentSearchesMode && handleSaveRecentSearch();
116
- }
117
- if (isOpen) {
118
- prevIsOpenRef.current = true;
119
- }
120
- }, [isOpen, isRecentSearchesMode, handleSaveRecentSearch]);
121
- const selectState = useMemo(() => Object.keys(searchType), [searchType]);
122
- const onClearSearchSelection = useCallback(() => {
123
- setSearchSelection && setSearchSelection([]);
124
- }, [setSearchSelection]);
125
- const onSearchItemClick = useCallback((item) => {
126
- if (!(searchSelection && setSearchSelection)) {
127
- return;
128
- }
129
- const typeKey = item.type || NO_TYPED_SEARCH_ITEM;
130
- const currentItem = searchOnlyOneType ? searchSelection.find(el => el.id === item.id)
131
- : searchSelection.find(el => el.id === item.id && (el.type || NO_TYPED_SEARCH_ITEM) === typeKey);
132
- if (currentItem) {
133
- const newValue = searchOnlyOneType ? searchSelection.filter(el => el.id !== currentItem.id)
134
- : searchSelection.filter(el => !(el.id === currentItem.id && (el.type || NO_TYPED_SEARCH_ITEM) === typeKey));
135
- currentItem.id === KEYWORD_ID && setKeyword("");
136
- setSearchSelection(newValue);
137
- }
138
- else {
139
- setSearchSelection([...searchSelection, Object.assign(Object.assign({}, item), { type: item.type || searchOnlyOneType || NO_TYPED_SEARCH_ITEM })]);
140
- }
141
- }, [searchOnlyOneType, searchSelection, setKeyword, setSearchSelection]);
142
- const handleTriggerClick = useCallback(() => {
143
- if (!document.startViewTransition) {
144
- setIsOpen(prevState => !prevState);
145
- return;
146
- }
147
- document.startViewTransition(() => {
148
- flushSync(() => {
149
- setIsOpen(prevState => !prevState);
150
- });
151
- });
152
- }, []);
153
- const handleViewState = useCallback(() => {
154
- onToggleView && onToggleView(!isSidePanelOpen);
155
- setIsSidePanelOpen(val => !val);
156
- }, [isSidePanelOpen, onToggleView]);
157
- const handleOpenChange = useCallback((open) => {
158
- if (!document.startViewTransition) {
159
- setIsOpen(open);
160
- return;
161
- }
162
- document.startViewTransition(() => {
163
- flushSync(() => {
164
- setIsOpen(open);
165
- });
166
- });
167
- }, []);
168
- const handleSidePanelApply = useCallback((state) => {
169
- filters.forEach((filter) => {
170
- const filterProps = filter.props;
171
- const newState = state[filterProps.id];
172
- if (filterProps.id && state.hasOwnProperty(filterProps.id) && filterProps.onChange) {
173
- filterProps.onChange(newState);
174
- }
175
- });
176
- }, [filters]);
177
- const handleSaveFilters = useCallback((filterName, filterState) => {
178
- const stateForSave = filterState || createStateObject(filters, "state");
179
- onSaveFilter && onSaveFilter({ name: filterName, state: stateForSave }).then((id) => {
180
- setSavedFiltersStates(prevStates => new Map(prevStates).set(filterName, { state: stateForSave, id: id }));
181
- }).catch(error => {
182
- console.error("Could not save the following filter configuration:", "name", filterName, "state", stateForSave, "Error:", error);
183
- });
184
- }, [filters, onSaveFilter]);
185
- const handleRecentSearchItemClick = useCallback((item) => {
186
- const newSearchSelection = item.itemsArray;
187
- const newItemSearch = item.itemsArray.find(el => el.id === KEYWORD_ID);
188
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
189
- if (newSearchSelection) {
190
- setSearchSelection === null || setSearchSelection === void 0 ? void 0 : setSearchSelection([...newSearchSelection]);
191
- }
192
- newItemSearch && setKeyword(newItemSearch.name);
193
- handleOpenChange(false);
194
- }, [handleOpenChange, setKeyword, setSearchSelection]);
195
- const handlePinChange = useCallback(() => {
196
- onPinChange && onPinChange(!isPinned);
197
- }, [onPinChange, isPinned]);
198
- const handleSearchKeyDown = useCallback((event) => {
199
- var _a, _b;
200
- if (event.code === "Enter") {
201
- isRecentSearchesMode && handleSaveRecentSearch(event.currentTarget.value);
202
- !isOpen && handleTriggerClick();
203
- }
204
- if (event.code === "ArrowDown" && !isOpen) {
205
- handleTriggerClick();
206
- }
207
- if (event.code === "ArrowDown" && isOpen) {
208
- const firstItem = (_a = searchListRef.current) === null || _a === void 0 ? void 0 : _a.querySelector(FOCUSABLE_SELECTOR);
209
- firstItem === null || firstItem === void 0 ? void 0 : firstItem.focus();
210
- }
211
- if (event.code === "ArrowLeft" && isOpen && event.currentTarget.value === "") {
212
- const firstItem = (_b = selectListRef.current) === null || _b === void 0 ? void 0 : _b.querySelector(FOCUSABLE_SELECTOR);
213
- firstItem === null || firstItem === void 0 ? void 0 : firstItem.focus();
214
- }
215
- }, [isOpen, isRecentSearchesMode, handleSaveRecentSearch, handleTriggerClick]);
216
- const getIconByType = useCallback((type) => {
217
- if (!type) {
218
- return IconFilter;
219
- }
220
- const foundType = searchTypesArray.find((item) => item.id === type);
221
- return foundType && foundType.icon ? foundType.icon : IconFilter;
222
- }, [searchTypesArray]);
223
- const combinedData = useCombineData(searchTypesArray);
224
- const memoizedSelect = useMemo(() => _jsx(FiltersSelect, { value: searchType, selectListRef: selectListRef, onChange: setSearchType, items: searchTypesToSelect }), [searchType, searchTypesToSelect, setSearchType]);
225
- const handleSearchKeywordChange = useCallback((newKeyword) => {
226
- setKeyword(newKeyword);
227
- !isOpen && handleOpenChange(true);
228
- }, [setKeyword, isOpen, handleOpenChange]);
229
- const memoizedSearch = useMemo(() => _jsx(FiltersSearch, { id: `filtersSearch_${uniqueKey}`, ref: searchTriggerRef, name: translate("Search page"), value: keyword, onSearchKeyDown: handleSearchKeyDown, onOpenPopup: isOpen ? undefined : handleTriggerClick, onChange: handleSearchKeywordChange, handleRemove: onSearchItemClick, searchSelection: searchSelection, className: "zen-filters__search-with-pills" }), [uniqueKey, translate, keyword, handleSearchKeyDown, isOpen, handleTriggerClick, handleSearchKeywordChange, onSearchItemClick, searchSelection]);
230
- const memoizedSearchPopup = useMemo(() => _jsx(FiltersSearch, { id: `filtersSearch_${uniqueKey}_popup`, ref: searchPopupTriggerRef, name: translate("Search page"), value: keyword, onChange: setKeyword, onSearchKeyDown: handleSearchKeyDown, handleRemove: onSearchItemClick, searchSelection: searchSelection, className: "zen-filters-popup__search-with-pills" }), [uniqueKey, translate, keyword, setKeyword, handleSearchKeyDown, onSearchItemClick, searchSelection]);
231
- const memoizedSearchList = useMemo(() => !isOpen ? null :
232
- _jsx(FiltersSearchList, { searchValue: keyword, searchListRef: searchListRef, searchData: combinedData, searchSelection: searchSelection, onlyOneType: searchOnlyOneType, getIconByType: getIconByType, handleSearchItemClick: onSearchItemClick, handleClearSearchSelection: onClearSearchSelection, recentSearches: isRecentSearchesMode ? recentSearches : undefined, onRemoveRecentSearchItem: isRecentSearchesMode ? onRemoveRecentSearchItem : undefined, handleRecentSearchItemClick: isRecentSearchesMode ? handleRecentSearchItemClick : undefined }), [isOpen, keyword, combinedData, searchSelection, getIconByType, onSearchItemClick, onClearSearchSelection, isRecentSearchesMode, recentSearches,
233
- onRemoveRecentSearchItem, handleRecentSearchItemClick, searchOnlyOneType, searchListRef]);
234
- const allOption = useMemo(() => getAllOption(translate), [translate]);
235
- const selectTriggerPopup = useMemo(() => _jsx(TextIconButton, { className: "zen-filters__select-trigger", iconClasses: "zen-filters__select-trigger-icon", contentClasses: "zen-filters__select-trigger-content", title: translate("Close setting conditions popup"), onClick: handleTriggerClick, icon: IconChevronTopSmall, iconPosition: "end", children: translate("Search by") }), [handleTriggerClick, translate]);
236
- // added onMouseDown to prevent focus
237
- const selectTrigger = useMemo(() => {
238
- var _a;
239
- return isMobile ? null : _jsx(TextIconButton, { tabIndex: -1, onMouseDown: e => e.preventDefault(), className: "zen-filters__select-trigger", iconClasses: "zen-filters__select-trigger-icon", contentClasses: "zen-filters__select-trigger-content", title: translate("Open setting conditions popup"), onClick: handleTriggerClick, icon: IconChevronDownSmall, iconPosition: "end", children: selectState[0] === ALL_SELECT_OPTION_ID ? allOption.name :
240
- (_a = searchTypesArray.find((item) => item.id === selectState[0])) === null || _a === void 0 ? void 0 : _a.name });
241
- }, [translate, handleTriggerClick, selectState, allOption.name, searchTypesArray, isMobile]);
242
- const memoizedPopup = useMemo(() => _jsx(ControlledPopup, { paddingY: -34, isOpen: isOpen, className: classNames(["zen-filters-popup"]), onOpenChange: handleOpenChange, useTrapFocusWithTrigger: "on", alignment: "bottom", shouldHoldScroll: true, triggerRef: triggerRef, ariaLabel: translate("Setting conditions"), recalculateOnScroll: true, children: _jsxs("div", { className: "zen-filters-popup__content", children: [_jsxs("div", { className: "zen-filters-popup__left-panel", children: [selectTriggerPopup, memoizedSelect] }), _jsxs("div", { className: "zen-filters-popup__right-panel", children: [memoizedSearchPopup, memoizedSearchList] })] }) }), [isOpen, handleOpenChange, translate, selectTriggerPopup, memoizedSelect, memoizedSearchPopup, memoizedSearchList]);
243
- const filtersForRender = useMemo(() => filters.filter(el => {
244
- const elProps = el.props;
245
- return typeof elProps.visible === "boolean" ? elProps.visible
246
- : elProps.visible === undefined ? false : elProps.visible(Array.from(selectState), undefined);
247
- }), [filters, selectState]);
248
- // The sidePanel has a full set of filters, so we need to calculate the number of changed filters based on all filters, not just the visible ones
249
- const filtersForCalculation = useMemo(() => {
250
- const stateObj = createStateObject(filters, "state");
251
- return filters.filter(el => {
252
- const elProps = el.props;
253
- return typeof elProps.visible === "boolean" ? elProps.visible
254
- : elProps.visible === undefined ? true : (elProps.visible(Array.from(selectState), stateObj) || elProps.visible(Array.from(selectState)));
255
- });
256
- }, [filters, selectState]);
257
- const hasSavedFilters = savedFiltersStates.size > 0;
258
- const hasFilters = filtersForCalculation.length > 0;
259
- const memoizedFiltersContainer = useMemo(() => hasFilters ? _jsx(FiltersContainer, { filtersChipRef: sidePanelTriggerRef, filtersClickHandler: handleViewState, filtersForCalculation: filtersForCalculation, isPinned: isPinMode ? isPinned : undefined, onPinChange: isPinMode ? onPinChange : undefined, hasSavedFilters: hasSavedFilters, children: filtersForRender }) : null, [handleViewState, filtersForCalculation, isPinMode, isPinned, onPinChange, hasSavedFilters, filtersForRender, hasFilters]);
260
- const memoizedSidePanel = useMemo(() => _jsx(FiltersSidePanel, { isOpen: isSidePanelOpen, onApply: handleSidePanelApply, onClose: handleViewState, onPin: isPinMode ? handlePinChange : undefined, isPinned: isPinMode ? isPinned : undefined, filters: filters, externalState: allFiltersState, setExternalState: setAllFiltersState, triggerRef: sidePanelTriggerRef }), [isSidePanelOpen, handleSidePanelApply, handleViewState, handlePinChange, isPinned, isPinMode, filters, allFiltersState, setAllFiltersState, sidePanelTriggerRef]);
261
- const memoizedStatus = useMemo(() => isPinned && isPinMode ? "accent" : undefined, [isPinned, isPinMode]);
262
- const memoizedSavedFiltersItems = useMemo(() => new Set(savedFiltersStates.keys()), [savedFiltersStates]);
263
- const memoizedSavedFiltersActive = useMemo(() => {
264
- const activeSet = new Set();
265
- const currentState = createStateObject(filters, "state");
266
- Array.from(savedFiltersStates.keys()).forEach(key => {
267
- var _a;
268
- const savedState = (_a = savedFiltersStates.get(key)) === null || _a === void 0 ? void 0 : _a.state;
269
- if (savedState) {
270
- if (isElementsEqual(currentState, savedState)) {
271
- activeSet.add(key);
272
- }
273
- }
274
- });
275
- return activeSet;
276
- }, [savedFiltersStates, filters]);
277
- const removeSavedFiltersState = useCallback((item) => {
278
- var _a;
279
- setSavedFiltersStates((prev) => {
280
- const newState = new Map(prev);
281
- newState.delete(item);
282
- return newState;
283
- });
284
- const filterId = (_a = savedFiltersStates.get(item)) === null || _a === void 0 ? void 0 : _a.id;
285
- if (filterId) {
286
- onRemoveSavedFilter && onRemoveSavedFilter(filterId);
287
- }
288
- }, [onRemoveSavedFilter, savedFiltersStates]);
289
- const applySavedFiltersState = useCallback((item) => {
290
- var _a;
291
- const newState = (_a = savedFiltersStates.get(item)) === null || _a === void 0 ? void 0 : _a.state;
292
- if (newState) {
293
- filters.forEach((filter) => {
294
- const filterProps = filter.props;
295
- const stateForFilter = newState[filterProps.id];
296
- if (filterProps.id && newState.hasOwnProperty(filterProps.id) && filterProps.onChange) {
297
- filterProps.onChange(stateForFilter);
298
- }
299
- });
300
- }
301
- }, [filters, savedFiltersStates]);
302
- return _jsxs("div", { className: classNames(["zen-filters", className || ""]), children: [_jsxs("div", { className: classNames(["zen-filters__main-row", isOpen ? "" : "zen-filters__main-row--initial"]), ref: triggerRef, role: "combobox", "aria-label": translate("Open setting conditions popup"), children: [selectTrigger, memoizedSearch] }), _jsx(FiltersSavedItemsProvider, { items: memoizedSavedFiltersItems, active: memoizedSavedFiltersActive, onRemove: isSavedFiltersMode ? removeSavedFiltersState : undefined, onApply: isSavedFiltersMode ? applySavedFiltersState : undefined, onSave: isSavedFiltersMode ? handleSaveFilters : undefined, children: _jsx(ChipStatusProvider, { status: memoizedStatus, children: memoizedFiltersContainer }) }), memoizedPopup, _jsx(FiltersSavedItemsProvider, { items: memoizedSavedFiltersItems, active: memoizedSavedFiltersActive, onRemove: isSavedFiltersMode ? removeSavedFiltersState : undefined, onApply: isSavedFiltersMode ? applySavedFiltersState : undefined, onSave: isSavedFiltersMode ? handleSaveFilters : undefined, children: _jsx(ChipStatusProvider, { status: memoizedStatus, children: memoizedSidePanel }) })] });
440
+ });
441
+ }
442
+ }, [filters, savedFiltersStates]);
443
+ return _jsxs("div", {
444
+ className: classNames(["zen-filters", className || ""]),
445
+ children: [_jsxs("div", {
446
+ className: classNames(["zen-filters__main-row", isOpen ? "" : "zen-filters__main-row--initial"]),
447
+ ref: triggerRef,
448
+ role: "combobox",
449
+ "aria-label": translate("Open setting conditions popup"),
450
+ children: [selectTrigger, memoizedSearch]
451
+ }), _jsx(FiltersSavedItemsProvider, {
452
+ items: memoizedSavedFiltersItems,
453
+ active: memoizedSavedFiltersActive,
454
+ onRemove: isSavedFiltersMode ? removeSavedFiltersState : undefined,
455
+ onApply: isSavedFiltersMode ? applySavedFiltersState : undefined,
456
+ onSave: isSavedFiltersMode ? handleSaveFilters : undefined,
457
+ children: _jsx(ChipStatusProvider, {
458
+ status: memoizedStatus,
459
+ children: memoizedFiltersContainer
460
+ })
461
+ }), memoizedPopup, _jsx(FiltersSavedItemsProvider, {
462
+ items: memoizedSavedFiltersItems,
463
+ active: memoizedSavedFiltersActive,
464
+ onRemove: isSavedFiltersMode ? removeSavedFiltersState : undefined,
465
+ onApply: isSavedFiltersMode ? applySavedFiltersState : undefined,
466
+ onSave: isSavedFiltersMode ? handleSaveFilters : undefined,
467
+ children: _jsx(ChipStatusProvider, {
468
+ status: memoizedStatus,
469
+ children: memoizedSidePanel
470
+ })
471
+ })]
472
+ });
303
473
  };
304
474
  Filters.Chip = FiltersChip;
305
475
  Filters.DateRange = FiltersDateRange;
@@ -308,4 +478,4 @@ Filters.Dropdown = FiltersDropdown;
308
478
  Filters.Groups = FiltersGroups;
309
479
  Filters.Range = FiltersRange;
310
480
  // Filters.Custom = FiltersCustom;
311
- Filters.displayName = FiltersDisplayName;
481
+ Filters.displayName = FiltersDisplayName;