@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,9 +1,39 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
2
+
3
+ const {
4
+ injectString
5
+ } = require("../utils/localization/translationsDictionary");
6
+ Object.defineProperty(exports, "__esModule", {
7
+ value: true
8
+ });
3
9
  exports.TRANSLATIONS = exports.DropdownRaw = void 0;
4
10
  const jsx_runtime_1 = require("react/jsx-runtime");
5
11
  /* eslint-disable complexity */
6
12
  const react_1 = require("react");
13
+ injectString("cs", "Filter by group", "Filtrovat podle skupiny");
14
+ injectString("da-DK", "Filter by group", "Filtrer efter gruppe");
15
+ injectString("de", "Filter by group", "Nach Gruppe filtern");
16
+ injectString("en", "Filter by group", "Filter by group");
17
+ injectString("es", "Filter by group", "Filtrar por grupo");
18
+ injectString("fi-FI", "Filter by group", "Suodata ryhm\xE4n mukaan");
19
+ injectString("fr", "Filter by group", "Filtrer par groupe");
20
+ injectString("fr-FR", "Filter by group", "Filtrer par groupe");
21
+ injectString("hu-HU", "Filter by group", "Sz\u0171rd csoport alapj\xE1n.");
22
+ injectString("id", "Filter by group", "Filter berdasarkan grup");
23
+ injectString("it", "Filter by group", "Filtrare per gruppo");
24
+ injectString("ja", "Filter by group", "\u30B0\u30EB\u30FC\u30D7\u306B\u3088\u308B\u30D5\u30A3\u30EB\u30BF\u30EA\u30F3\u30B0");
25
+ injectString("ko-KR", "Filter by group", "\uADF8\uB8F9\uBCC4 \uD544\uD130\uB9C1");
26
+ injectString("ms", "Filter by group", "Saring mengikut kumpulan");
27
+ injectString("nb-NO", "Filter by group", "Filtrer etter gruppe");
28
+ injectString("nl", "Filter by group", "Filteren op groep");
29
+ injectString("pl", "Filter by group", "Filtruj wed\u0142ug grupy");
30
+ injectString("pt-BR", "Filter by group", "Filtrar por grupo");
31
+ injectString("sk-SK", "Filter by group", "Filtrova\u0165 pod\u013Ea skupiny");
32
+ injectString("sv", "Filter by group", "Filtrera efter grupp");
33
+ injectString("th", "Filter by group", "\u0E01\u0E23\u0E2D\u0E07\u0E15\u0E32\u0E21\u0E01\u0E25\u0E38\u0E48\u0E21");
34
+ injectString("tr", "Filter by group", "Gruba g\xF6re filtrele");
35
+ injectString("zh-Hans", "Filter by group", "\u6309\u7EC4\u8FC7\u6EE4");
36
+ injectString("zh-TW", "Filter by group", "\u4F9D\u7FA4\u7D44\u7BE9\u9078");
7
37
  const classNames_1 = require("../commonHelpers/classNames/classNames");
8
38
  const dropdownList_1 = require("./dropdownList");
9
39
  const stateReducer_1 = require("./stateReducer/stateReducer");
@@ -29,513 +59,843 @@ const getAriaAttributes_1 = require("../commonHelpers/getAriaAttributes");
29
59
  const useFormFieldValues_1 = require("../commonHelpers/hooks/useFormFieldValues/useFormFieldValues");
30
60
  const formSectionProvider_1 = require("../formSection/utils/formSectionProvider");
31
61
  const dropdown_1 = require("../dropdown/dropdown");
32
- const DropdownRaw = (props) => {
33
- var _a, _b;
34
- const { className, classNamePopup, getData, errorHandler, dataItems, onChange, defaultValue, placeholder, dialogAriaLabel, width, isLoading, title, triggerAriaLabel, inputId, filterName, showCounterPill = true, showSelection, fullWidthTriggerButton, hasApplyButton, searchField = true, multiselect = true, forceSelection = false, selectAllButton = true, getNamedItems, getSelectedItem, buttonType = "secondary", listLimit = dropdown_1.LIST_LIMIT, alignment = "bottom-left", isReadOnly, sortFn, checkboxLabel, chip, chipId, chipName, chipIcon, setChecked, setSearch, fetchState, isLoadingError, mobileSheetStackingClassName } = props;
35
- const { isFormSection } = (0, react_1.useContext)(formSectionProvider_1.FormSectionContext);
36
- const accessibilityProps = (0, getAriaAttributes_1.getAriaAttributes)(props);
37
- const isFormItemVal = (0, isFormItem_1.isFormItem)(props);
38
- const { field } = (0, useFormField_1.useFormField)(props.controller);
39
- const { name, value = [], disabled, onBlur } = (0, useFormFieldValues_1.useFormFieldValues)(props.controller, props);
40
- let onChangeInner, defaultValueInner;
41
- if (isFormItemVal) {
42
- onChangeInner = (val) => {
43
- field === null || field === void 0 ? void 0 : field.onChange(val.map((item) => item.id));
44
- };
45
- defaultValueInner = ((_a = props.controller) === null || _a === void 0 ? void 0 : _a.defaultValue) || [];
46
- }
47
- else {
48
- onChangeInner = onChange;
49
- defaultValueInner = defaultValue;
50
- }
51
- const isFullSelectionMode = (0, react_1.useMemo)(() => typeof value === "object" &&
52
- "selected" in value &&
53
- Array.isArray(value.selected) &&
54
- "isAllSelected" in value &&
55
- typeof (value === null || value === void 0 ? void 0 : value.isAllSelected) === "boolean", [value]);
56
- const isQueryMode = (0, react_1.useMemo)(() => typeof getData === "undefined" && typeof dataItems === "undefined", [getData, dataItems]);
57
- const isCheckboxMode = (0, react_1.useMemo)(() => checkboxLabel && typeof value === "object" && "isChecked" in value && typeof value.isChecked === "boolean" || false, [checkboxLabel, value]);
58
- const [initialInChecked] = (0, react_1.useState)(isCheckboxMode ? value.isChecked : undefined);
59
- const [state, dispatchState] = (0, react_1.useReducer)(stateReducer_1.stateReducer, (0, stateReducer_1.getInitialState)(isFullSelectionMode, isQueryMode ? (fetchState === null || fetchState === void 0 ? void 0 : fetchState.data) || [] : dataItems || [], isFullSelectionMode || isCheckboxMode ? value.selected : value, listLimit, defaultValue ? (isFullSelectionMode || isCheckboxMode ? defaultValue.selected : defaultValue) : undefined, isFullSelectionMode ? value.isAllSelected : undefined, defaultValue ? (isFullSelectionMode ? defaultValue.isAllSelected : undefined) : undefined, isCheckboxMode ? value.isChecked : undefined, isCheckboxMode && defaultValue ? defaultValue.isChecked : undefined));
60
- const chipStatus = (0, chipStatusProvider_1.useChipStatus)();
61
- const isMobile = (0, useMobile_1.useMobile)();
62
- const abortToken = (0, react_1.useRef)(new AbortController());
63
- const triggerRef = (0, react_1.useRef)(null);
64
- const comboboxRef = (0, react_1.useRef)(null);
65
- const inputRef = (0, react_1.useRef)(null);
66
- const contentRef = (0, react_1.useRef)(null);
67
- const prevSelectedIds = (0, react_1.useRef)({ selected: [], isAllSelected: undefined, isChecked: initialInChecked });
68
- const prevSelection = (0, react_1.useRef)({ selected: [], isAllSelected: undefined, isChecked: initialInChecked });
69
- const { translate } = (0, useLanguage_1.useLanguage)();
70
- const getNamedItemsHasBeenCalled = (0, react_1.useRef)(false);
71
- const selectedItemsLoader = (0, react_1.useRef)(undefined);
72
- const previousMapDataItems = (0, react_1.useRef)(isQueryMode ? (fetchState === null || fetchState === void 0 ? void 0 : fetchState.data) || [] : (!getData && (dataItems === null || dataItems === void 0 ? void 0 : dataItems.length) ? dataItems : []));
73
- const prevIsLoading = (0, react_1.useRef)(isLoading);
74
- const prevIsChecked = (0, react_1.useRef)(isCheckboxMode ? value.isChecked : undefined);
75
- const currentAllSelected = (0, react_1.useMemo)(() => (state.isNestedList || !multiselect || !isFullSelectionMode)
76
- ? undefined : state.isAllSelected, [state.isNestedList, state.isAllSelected, multiselect, isFullSelectionMode]);
77
- const currentIsChecked = (0, react_1.useMemo)(() => isCheckboxMode ?
78
- value.isChecked : undefined, [isCheckboxMode, value]);
79
- (0, react_1.useEffect)(() => {
80
- const timeoutId = setTimeout(() => {
81
- if (Object.keys(state.groupsMap).length === 0 && getData) {
82
- const currentAbort = abortToken.current;
83
- (initialInChecked !== undefined ? getData(currentAbort.signal, undefined, initialInChecked) : getData(currentAbort.signal, undefined)).then((dta) => {
84
- dta.length && dispatchState({ type: stateActionType_1.StateActionType.CreateMap, payload: dta });
85
- previousMapDataItems.current = [...dta];
86
- }).catch(errorHandler);
87
- }
88
- });
89
- return () => clearTimeout(timeoutId);
90
- }, [getData, errorHandler, state.groupsMap, initialInChecked]);
91
- (0, react_1.useEffect)(() => {
92
- const timeoutId = setTimeout(() => {
93
- if (!getData && dataItems && dataItems.length && !(0, dropdownHelper_1.compareObjectsArrays)(dataItems, previousMapDataItems.current)) {
94
- dispatchState({ type: stateActionType_1.StateActionType.CreateMap, payload: dataItems });
95
- previousMapDataItems.current = [...dataItems];
96
- }
97
- });
98
- return () => clearTimeout(timeoutId);
99
- }, [dataItems, getData, state.groupsMap]);
100
- (0, react_1.useEffect)(() => {
101
- if (prevIsLoading.current !== isLoading && Object.keys(state.groupsMap).length !== 0) {
102
- isLoading === false && dispatchState({ type: stateActionType_1.StateActionType.ShowList, payload: undefined });
103
- prevIsLoading.current = isLoading;
104
- }
105
- }, [isLoading, dataItems, state.groupsMap]);
106
- (0, react_1.useEffect)(() => {
107
- const defaultSelectedValue = defaultValue ? (isFullSelectionMode || isCheckboxMode ? defaultValue.selected : defaultValue) : [];
108
- const defaultAllSelectedValue = defaultValue ? (isFullSelectionMode ? defaultValue.isAllSelected : undefined)
109
- : (isFullSelectionMode ? false : undefined);
110
- const defaultIsCheckedValue = defaultValue ?
111
- (isCheckboxMode ? defaultValue.isChecked || false : undefined)
112
- : (isCheckboxMode ? false : undefined);
113
- if (defaultIsCheckedValue !== state.defaultValueIsChecked) {
114
- defaultIsCheckedValue !== undefined && dispatchState({ type: stateActionType_1.StateActionType.SetDefaultIsChecked, payload: defaultIsCheckedValue });
115
- }
116
- if ((0, dropdownHelper_1.compareStringsArrays)(defaultSelectedValue, state.defaultValue) && defaultAllSelectedValue === state.defaultValueIsAllSelected) {
117
- return;
118
- }
119
- dispatchState({ type: stateActionType_1.StateActionType.SetDefaultValue, payload: defaultSelectedValue });
120
- isFullSelectionMode && defaultAllSelectedValue !== state.defaultValueIsAllSelected
121
- && dispatchState({ type: stateActionType_1.StateActionType.SetDefaultAllSelected, payload: defaultAllSelectedValue });
122
- }, [defaultValue, defaultValueInner, isCheckboxMode, isFullSelectionMode, state.defaultValue, state.defaultValueIsAllSelected, state.defaultValueIsChecked]);
123
- const loadSelectedItems = (0, react_1.useCallback)((ids) => {
124
- if (!getSelectedItem || !ids.size) {
125
- return;
126
- }
127
- const promises = [];
128
- Array.from(ids).forEach((id, ind) => {
129
- if (ind > 99) {
130
- return;
131
- }
132
- const itemOrPromise = getSelectedItem(id);
133
- promises.push(Promise.resolve(itemOrPromise));
134
- });
135
- // eslint-disable-next-line consistent-return
136
- return Promise.all(promises).then((items) => {
137
- const result = items.filter(el => el !== undefined);
138
- dispatchState({ type: stateActionType_1.StateActionType.UpdateSelectedItems, payload: result });
139
- getNamedItemsHasBeenCalled.current = false;
140
- }).catch(() => {
141
- dispatchState({ type: stateActionType_1.StateActionType.UpdateSelectedItems, payload: [] });
62
+ const DropdownRaw = props => {
63
+ var _a, _b;
64
+ const {
65
+ className,
66
+ classNamePopup,
67
+ getData,
68
+ errorHandler,
69
+ dataItems,
70
+ onChange,
71
+ defaultValue,
72
+ placeholder,
73
+ dialogAriaLabel,
74
+ width,
75
+ isLoading,
76
+ title,
77
+ triggerAriaLabel,
78
+ inputId,
79
+ filterName,
80
+ showCounterPill = true,
81
+ showSelection,
82
+ fullWidthTriggerButton,
83
+ hasApplyButton,
84
+ searchField = true,
85
+ multiselect = true,
86
+ forceSelection = false,
87
+ selectAllButton = true,
88
+ getNamedItems,
89
+ getSelectedItem,
90
+ buttonType = "secondary",
91
+ listLimit = dropdown_1.LIST_LIMIT,
92
+ alignment = "bottom-left",
93
+ isReadOnly,
94
+ sortFn,
95
+ checkboxLabel,
96
+ chip,
97
+ chipId,
98
+ chipName,
99
+ chipIcon,
100
+ setChecked,
101
+ setSearch,
102
+ fetchState,
103
+ isLoadingError,
104
+ mobileSheetStackingClassName,
105
+ isError,
106
+ firstParentNodeIsVisible
107
+ } = props;
108
+ const {
109
+ isFormSection
110
+ } = (0, react_1.useContext)(formSectionProvider_1.FormSectionContext);
111
+ const accessibilityProps = (0, getAriaAttributes_1.getAriaAttributes)(props);
112
+ const isFormItemVal = (0, isFormItem_1.isFormItem)(props);
113
+ const {
114
+ field
115
+ } = (0, useFormField_1.useFormField)(props.controller);
116
+ const {
117
+ name,
118
+ value = [],
119
+ disabled,
120
+ onBlur
121
+ } = (0, useFormFieldValues_1.useFormFieldValues)(props.controller, props);
122
+ let onChangeInner, defaultValueInner;
123
+ if (isFormItemVal) {
124
+ onChangeInner = val => {
125
+ field === null || field === void 0 ? void 0 : field.onChange(val.map(item => item.id));
126
+ };
127
+ defaultValueInner = ((_a = props.controller) === null || _a === void 0 ? void 0 : _a.defaultValue) || [];
128
+ } else {
129
+ onChangeInner = onChange;
130
+ defaultValueInner = defaultValue;
131
+ }
132
+ const isFullSelectionMode = (0, react_1.useMemo)(() => typeof value === "object" && "selected" in value && Array.isArray(value.selected) && "isAllSelected" in value && typeof (value === null || value === void 0 ? void 0 : value.isAllSelected) === "boolean", [value]);
133
+ const isQueryMode = (0, react_1.useMemo)(() => typeof getData === "undefined" && typeof dataItems === "undefined", [getData, dataItems]);
134
+ const isCheckboxMode = (0, react_1.useMemo)(() => checkboxLabel && typeof value === "object" && "isChecked" in value && typeof value.isChecked === "boolean" || false, [checkboxLabel, value]);
135
+ const [initialInChecked] = (0, react_1.useState)(isCheckboxMode ? value.isChecked : undefined);
136
+ const [state, dispatchState] = (0, react_1.useReducer)(stateReducer_1.stateReducer, (0, stateReducer_1.getInitialState)(isFullSelectionMode, isQueryMode ? (fetchState === null || fetchState === void 0 ? void 0 : fetchState.data) || [] : dataItems || [], isFullSelectionMode || isCheckboxMode ? value.selected : value, listLimit, defaultValue ? isFullSelectionMode || isCheckboxMode ? defaultValue.selected : defaultValue : undefined, isFullSelectionMode ? value.isAllSelected : undefined, defaultValue ? isFullSelectionMode ? defaultValue.isAllSelected : undefined : undefined, isCheckboxMode ? value.isChecked : undefined, isCheckboxMode && defaultValue ? defaultValue.isChecked : undefined, firstParentNodeIsVisible));
137
+ const chipStatus = (0, chipStatusProvider_1.useChipStatus)();
138
+ const isMobile = (0, useMobile_1.useMobile)();
139
+ const abortToken = (0, react_1.useRef)(new AbortController());
140
+ const triggerRef = (0, react_1.useRef)(null);
141
+ const comboboxRef = (0, react_1.useRef)(null);
142
+ const inputRef = (0, react_1.useRef)(null);
143
+ const contentRef = (0, react_1.useRef)(null);
144
+ const prevSelectedIds = (0, react_1.useRef)({
145
+ selected: [],
146
+ isAllSelected: undefined,
147
+ isChecked: initialInChecked
148
+ });
149
+ const prevSelection = (0, react_1.useRef)({
150
+ selected: [],
151
+ isAllSelected: undefined,
152
+ isChecked: initialInChecked
153
+ });
154
+ const {
155
+ translate
156
+ } = (0, useLanguage_1.useLanguage)();
157
+ const getNamedItemsHasBeenCalled = (0, react_1.useRef)(false);
158
+ const selectedItemsLoader = (0, react_1.useRef)(undefined);
159
+ const previousMapDataItems = (0, react_1.useRef)(isQueryMode ? (fetchState === null || fetchState === void 0 ? void 0 : fetchState.data) || [] : !getData && (dataItems === null || dataItems === void 0 ? void 0 : dataItems.length) ? dataItems : []);
160
+ const prevIsLoading = (0, react_1.useRef)(isLoading);
161
+ const prevIsChecked = (0, react_1.useRef)(isCheckboxMode ? value.isChecked : undefined);
162
+ const currentAllSelected = (0, react_1.useMemo)(() => state.isNestedList || !multiselect || !isFullSelectionMode ? undefined : state.isAllSelected, [state.isNestedList, state.isAllSelected, multiselect, isFullSelectionMode]);
163
+ const currentIsChecked = (0, react_1.useMemo)(() => isCheckboxMode ? value.isChecked : undefined, [isCheckboxMode, value]);
164
+ (0, react_1.useEffect)(() => {
165
+ const timeoutId = setTimeout(() => {
166
+ if (Object.keys(state.groupsMap).length === 0 && getData) {
167
+ const currentAbort = abortToken.current;
168
+ (initialInChecked !== undefined ? getData(currentAbort.signal, undefined, initialInChecked) : getData(currentAbort.signal, undefined)).then(dta => {
169
+ dta.length && dispatchState({
170
+ type: stateActionType_1.StateActionType.CreateMap,
171
+ payload: dta
172
+ });
173
+ previousMapDataItems.current = [...dta];
174
+ }).catch(errorHandler);
175
+ }
176
+ });
177
+ return () => clearTimeout(timeoutId);
178
+ }, [getData, errorHandler, state.groupsMap, initialInChecked]);
179
+ (0, react_1.useEffect)(() => {
180
+ const timeoutId = setTimeout(() => {
181
+ if (!getData && dataItems && dataItems.length && !(0, dropdownHelper_1.compareObjectsArrays)(dataItems, previousMapDataItems.current)) {
182
+ dispatchState({
183
+ type: stateActionType_1.StateActionType.CreateMap,
184
+ payload: dataItems
142
185
  });
143
- }, [getSelectedItem]);
144
- (0, react_1.useEffect)(() => {
145
- if (isLoadingError) {
146
- dispatchState({ type: stateActionType_1.StateActionType.SetIsOpenCombo, payload: false });
147
- }
148
- }, [isLoadingError]);
149
- (0, react_1.useEffect)(() => {
150
- if (!getSelectedItem) {
151
- return;
152
- }
153
- dispatchState({ type: stateActionType_1.StateActionType.UpdateNamelessItems, payload: undefined });
154
- }, [getSelectedItem]);
155
- (0, react_1.useEffect)(() => {
156
- if (state.namelessIds.size === 0 || !getSelectedItem || state.pendingNamelessIds) {
157
- return;
158
- }
159
- selectedItemsLoader.current = loadSelectedItems(state.namelessIds);
160
- dispatchState({ type: stateActionType_1.StateActionType.SetPendingState, payload: true });
161
- }, [getSelectedItem, loadSelectedItems, state.namelessIds, state.pendingNamelessIds]);
162
- const handleChangeCurrentId = (0, react_1.useCallback)((id) => {
163
- dispatchState({ type: stateActionType_1.StateActionType.SetCurrentId, payload: id });
164
- dispatchState({ type: stateActionType_1.StateActionType.SetInputValue, payload: "" });
165
- isQueryMode && setSearch && setSearch("");
166
- }, [isQueryMode, setSearch]);
167
- const handleBackButtonClick = (0, react_1.useCallback)(() => {
168
- var _a, _b;
186
+ previousMapDataItems.current = [...dataItems];
187
+ }
188
+ });
189
+ return () => clearTimeout(timeoutId);
190
+ }, [dataItems, getData, state.groupsMap]);
191
+ (0, react_1.useEffect)(() => {
192
+ if (prevIsLoading.current !== isLoading && Object.keys(state.groupsMap).length !== 0) {
193
+ isLoading === false && dispatchState({
194
+ type: stateActionType_1.StateActionType.ShowList,
195
+ payload: undefined
196
+ });
197
+ prevIsLoading.current = isLoading;
198
+ }
199
+ }, [isLoading, dataItems, state.groupsMap]);
200
+ (0, react_1.useEffect)(() => {
201
+ const defaultSelectedValue = defaultValue ? isFullSelectionMode || isCheckboxMode ? defaultValue.selected : defaultValue : [];
202
+ const defaultAllSelectedValue = defaultValue ? isFullSelectionMode ? defaultValue.isAllSelected : undefined : isFullSelectionMode ? false : undefined;
203
+ const defaultIsCheckedValue = defaultValue ? isCheckboxMode ? defaultValue.isChecked || false : undefined : isCheckboxMode ? false : undefined;
204
+ if (defaultIsCheckedValue !== state.defaultValueIsChecked) {
205
+ defaultIsCheckedValue !== undefined && dispatchState({
206
+ type: stateActionType_1.StateActionType.SetDefaultIsChecked,
207
+ payload: defaultIsCheckedValue
208
+ });
209
+ }
210
+ if ((0, dropdownHelper_1.compareStringsArrays)(defaultSelectedValue, state.defaultValue) && defaultAllSelectedValue === state.defaultValueIsAllSelected) {
211
+ return;
212
+ }
213
+ dispatchState({
214
+ type: stateActionType_1.StateActionType.SetDefaultValue,
215
+ payload: defaultSelectedValue
216
+ });
217
+ isFullSelectionMode && defaultAllSelectedValue !== state.defaultValueIsAllSelected && dispatchState({
218
+ type: stateActionType_1.StateActionType.SetDefaultAllSelected,
219
+ payload: defaultAllSelectedValue
220
+ });
221
+ }, [defaultValue, defaultValueInner, isCheckboxMode, isFullSelectionMode, state.defaultValue, state.defaultValueIsAllSelected, state.defaultValueIsChecked]);
222
+ const loadSelectedItems = (0, react_1.useCallback)(ids => {
223
+ if (!getSelectedItem || !ids.size) {
224
+ return;
225
+ }
226
+ const promises = [];
227
+ Array.from(ids).forEach((id, ind) => {
228
+ if (ind > 99) {
229
+ return;
230
+ }
231
+ const itemOrPromise = getSelectedItem(id);
232
+ promises.push(Promise.resolve(itemOrPromise));
233
+ });
234
+ // eslint-disable-next-line consistent-return
235
+ return Promise.all(promises).then(items => {
236
+ const result = items.filter(el => el !== undefined);
237
+ dispatchState({
238
+ type: stateActionType_1.StateActionType.UpdateSelectedItems,
239
+ payload: result
240
+ });
241
+ getNamedItemsHasBeenCalled.current = false;
242
+ }).catch(() => {
243
+ dispatchState({
244
+ type: stateActionType_1.StateActionType.UpdateSelectedItems,
245
+ payload: []
246
+ });
247
+ });
248
+ }, [getSelectedItem]);
249
+ (0, react_1.useEffect)(() => {
250
+ if (isLoadingError) {
251
+ dispatchState({
252
+ type: stateActionType_1.StateActionType.SetIsOpenCombo,
253
+ payload: false
254
+ });
255
+ }
256
+ }, [isLoadingError]);
257
+ (0, react_1.useEffect)(() => {
258
+ if (!getSelectedItem) {
259
+ return;
260
+ }
261
+ dispatchState({
262
+ type: stateActionType_1.StateActionType.UpdateNamelessItems,
263
+ payload: undefined
264
+ });
265
+ }, [getSelectedItem]);
266
+ (0, react_1.useEffect)(() => {
267
+ if (state.namelessIds.size === 0 || !getSelectedItem || state.pendingNamelessIds) {
268
+ return;
269
+ }
270
+ selectedItemsLoader.current = loadSelectedItems(state.namelessIds);
271
+ dispatchState({
272
+ type: stateActionType_1.StateActionType.SetPendingState,
273
+ payload: true
274
+ });
275
+ }, [getSelectedItem, loadSelectedItems, state.namelessIds, state.pendingNamelessIds]);
276
+ (0, react_1.useEffect)(() => {
277
+ dispatchState({
278
+ type: stateActionType_1.StateActionType.SetFirstParentNodeIsVisible,
279
+ payload: firstParentNodeIsVisible
280
+ });
281
+ }, [firstParentNodeIsVisible]);
282
+ const handleChangeCurrentId = (0, react_1.useCallback)(id => {
283
+ dispatchState({
284
+ type: stateActionType_1.StateActionType.SetCurrentId,
285
+ payload: id
286
+ });
287
+ dispatchState({
288
+ type: stateActionType_1.StateActionType.SetInputValue,
289
+ payload: ""
290
+ });
291
+ isQueryMode && setSearch && setSearch("");
292
+ }, [isQueryMode, setSearch]);
293
+ const handleBackButtonClick = (0, react_1.useCallback)(() => {
294
+ var _a, _b;
295
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
296
+ const newCurrentId = state.currentId ? (_b = (_a = state.groupsMap[state.currentId]) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.id : undefined;
297
+ dispatchState({
298
+ type: stateActionType_1.StateActionType.SetCurrentId,
299
+ payload: newCurrentId === state.rootId || state.inputValue ? undefined : newCurrentId
300
+ });
301
+ }, [state.currentId, state.groupsMap, state.inputValue, state.rootId]);
302
+ const handleSelect = (0, react_1.useCallback)(val => {
303
+ if (isFullSelectionMode && state.isAllSelected) {
304
+ dispatchState({
305
+ type: stateActionType_1.StateActionType.DeselectItemsFromAllSelected,
306
+ payload: val.id
307
+ });
308
+ return;
309
+ }
310
+ if (val.partial) {
311
+ dispatchState({
312
+ type: stateActionType_1.StateActionType.DeselectAllChildren,
313
+ payload: val.id
314
+ });
315
+ } else {
316
+ dispatchState({
317
+ type: stateActionType_1.StateActionType.ChangeSelection,
318
+ payload: {
319
+ value: val.state,
320
+ itemId: val.id
321
+ }
322
+ });
323
+ }
324
+ }, [isFullSelectionMode, state.isAllSelected]);
325
+ const handleClose = (0, react_1.useCallback)(() => {
326
+ dispatchState({
327
+ type: stateActionType_1.StateActionType.SetInputValue,
328
+ payload: ""
329
+ });
330
+ if (!triggerRef.current) {
331
+ return;
332
+ }
333
+ if ((0, dialogHelpers_1.isFocusable)(triggerRef.current)) {
334
+ triggerRef.current.focus();
335
+ return;
336
+ }
337
+ const focusable = [...Array.from(triggerRef.current.querySelectorAll(focusableSelector_1.FOCUSABLE_SELECTOR))];
338
+ (focusable[0] || triggerRef.current).focus();
339
+ }, []);
340
+ const handleEscape = (0, react_1.useCallback)(() => {
341
+ dispatchState({
342
+ type: stateActionType_1.StateActionType.SetIsOpenCombo,
343
+ payload: false
344
+ });
345
+ dispatchState({
346
+ type: stateActionType_1.StateActionType.SetCurrentId,
347
+ payload: undefined
348
+ });
349
+ abortToken.current.abort();
350
+ abortToken.current = new AbortController();
351
+ handleClose();
352
+ }, [handleClose]);
353
+ const memoizedAllowClosing = (0, react_1.useMemo)(() => state.currentId === undefined || state.currentId === state.rootId, [state.currentId, state.rootId]);
354
+ const handleSingleSelection = (0, react_1.useCallback)((reset, selected) => {
355
+ const shouldBeClosed = !hasApplyButton && memoizedAllowClosing && (!reset && selected || reset);
356
+ dispatchState({
357
+ type: stateActionType_1.StateActionType.ChangeSingleSelection,
358
+ payload: {
359
+ value: selected,
360
+ reset: reset
361
+ }
362
+ });
363
+ shouldBeClosed && handleEscape();
364
+ shouldBeClosed && dispatchState({
365
+ type: stateActionType_1.StateActionType.SetInputValue,
366
+ payload: ""
367
+ });
368
+ }, [handleEscape, hasApplyButton, memoizedAllowClosing]);
369
+ const handleSelectAllClick = (0, react_1.useCallback)(isAllSelect => {
370
+ if (isFullSelectionMode) {
371
+ dispatchState({
372
+ type: stateActionType_1.StateActionType.ToggleValueForAllSelected,
373
+ payload: undefined
374
+ });
375
+ return;
376
+ }
377
+ dispatchState({
378
+ type: isAllSelect ? stateActionType_1.StateActionType.DeselectAllChildren : stateActionType_1.StateActionType.SelectAllChildren,
379
+ payload: state.currentId || state.rootId
380
+ });
381
+ }, [isFullSelectionMode, state.currentId, state.rootId]);
382
+ const handleSelectAllInSearch = (0, react_1.useCallback)(isAllSelect => {
383
+ if (isFullSelectionMode && state.isAllSelected) {
384
+ dispatchState({
385
+ type: stateActionType_1.StateActionType.DeselectItemsFromAllSelected,
386
+ payload: undefined
387
+ });
388
+ return;
389
+ }
390
+ const dataForChange = (0, dropdownHelper_1.getDataForChange)((0, dropdownHelper_1.getListDataWithDisabled)(state.listData, state.isNestedList), state.selectedIds, isAllSelect);
391
+ dispatchState({
392
+ type: stateActionType_1.StateActionType.ChangeBulkSelection,
393
+ payload: {
394
+ itemsIds: dataForChange,
395
+ value: !isAllSelect
396
+ }
397
+ });
398
+ }, [isFullSelectionMode, state.isAllSelected, state.listData, state.isNestedList, state.selectedIds]);
399
+ const handleClearClick = (0, react_1.useCallback)(() => {
400
+ dispatchState({
401
+ type: stateActionType_1.StateActionType.ResetSelection,
402
+ payload: undefined
403
+ });
404
+ }, []);
405
+ const handleCancelClick = (0, react_1.useCallback)(() => {
406
+ dispatchState({
407
+ type: stateActionType_1.StateActionType.ResetStateToGlobal,
408
+ payload: undefined
409
+ });
410
+ dispatchState({
411
+ type: stateActionType_1.StateActionType.SetIsOpenCombo,
412
+ payload: false
413
+ });
414
+ dispatchState({
415
+ type: stateActionType_1.StateActionType.SetCurrentId,
416
+ payload: undefined
417
+ });
418
+ abortToken.current.abort();
419
+ abortToken.current = new AbortController();
420
+ handleClose();
421
+ }, [handleClose]);
422
+ const handleApplyClick = (0, react_1.useCallback)(() => {
423
+ dispatchState({
424
+ type: stateActionType_1.StateActionType.SetGlobalState,
425
+ payload: Object.assign({
426
+ selected: state.selectedIds,
427
+ isAllSelected: state.isAllSelected
428
+ }, isCheckboxMode ? {
429
+ isChecked: state.isChecked
430
+ } : {})
431
+ });
432
+ dispatchState({
433
+ type: stateActionType_1.StateActionType.SetIsOpenCombo,
434
+ payload: false
435
+ });
436
+ dispatchState({
437
+ type: stateActionType_1.StateActionType.SetCurrentId,
438
+ payload: undefined
439
+ });
440
+ abortToken.current.abort();
441
+ abortToken.current = new AbortController();
442
+ handleClose();
443
+ dispatchState({
444
+ type: stateActionType_1.StateActionType.SetDataProblem,
445
+ payload: (0, dropdownHelper_1.checkIsDataProblem)(state.selectedIds, state.groupsMap)
446
+ });
447
+ const preparedItems = (0, dropdownHelper_1.prepareSelectedIdsToItems)(state.selectedIds, state.groupsMap, state.groupsMapSelected);
448
+ if (isFullSelectionMode) {
449
+ const newValue = isCheckboxMode ? {
450
+ selected: preparedItems,
451
+ isAllSelected: state.isAllSelected || false,
452
+ isChecked: state.isChecked
453
+ } : {
454
+ selected: preparedItems,
455
+ isAllSelected: state.isAllSelected || false
456
+ };
457
+ onChange === null || onChange === void 0 ? void 0 : onChange(newValue);
458
+ } else {
459
+ const newValue = isCheckboxMode ? {
460
+ selected: preparedItems,
461
+ isChecked: state.isChecked
462
+ } : preparedItems;
463
+ onChange === null || onChange === void 0 ? void 0 : onChange(newValue);
464
+ }
465
+ }, [state.selectedIds, state.isAllSelected, state.isChecked, state.groupsMap, state.groupsMapSelected, isCheckboxMode, handleClose, isFullSelectionMode, onChange]);
466
+ const customGetData = (0, react_1.useCallback)(str => str && dataItems ? Promise.resolve(dataItems.filter(el => {
467
+ var _a;
468
+ return (((_a = el.name) === null || _a === void 0 ? void 0 : _a.toLocaleLowerCase()) || "").indexOf(str.trim().toLocaleLowerCase()) > -1;
469
+ })) : Promise.resolve(dataItems || []), [dataItems]);
470
+ const handleData = (0, react_1.useCallback)((dta, searchVal) => {
471
+ if (dta.length && !searchVal && (getData || dataItems || isQueryMode)) {
472
+ dispatchState({
473
+ type: stateActionType_1.StateActionType.CreateMap,
474
+ payload: dta
475
+ });
476
+ previousMapDataItems.current = [...dta];
477
+ }
478
+ dispatchState({
479
+ type: stateActionType_1.StateActionType.SetListData,
480
+ payload: dta
481
+ });
482
+ searchVal && dispatchState({
483
+ type: stateActionType_1.StateActionType.SetCurrentId,
484
+ payload: undefined
485
+ });
486
+ dta.length ? dispatchState({
487
+ type: stateActionType_1.StateActionType.ShowList,
488
+ payload: undefined
489
+ }) : dispatchState({
490
+ type: stateActionType_1.StateActionType.ShowEmptyList,
491
+ payload: undefined
492
+ });
493
+ }, [getData, dataItems, isQueryMode]);
494
+ const handleError = (0, react_1.useCallback)(e => {
495
+ errorHandler(e);
496
+ dispatchState({
497
+ type: stateActionType_1.StateActionType.NothingToShow,
498
+ payload: undefined
499
+ });
500
+ }, [errorHandler]);
501
+ const handleDataQuery = (0, react_1.useCallback)((dta, searchVal) => {
502
+ if (dta.length && !searchVal && !(0, dropdownHelper_1.compareObjectsArrays)(dta, previousMapDataItems.current)) {
503
+ dispatchState({
504
+ type: stateActionType_1.StateActionType.CreateMap,
505
+ payload: dta
506
+ });
507
+ previousMapDataItems.current = [...dta];
508
+ }
509
+ dispatchState({
510
+ type: stateActionType_1.StateActionType.SetListData,
511
+ payload: dta
512
+ });
513
+ searchVal && dispatchState({
514
+ type: stateActionType_1.StateActionType.SetCurrentId,
515
+ payload: undefined
516
+ });
517
+ dta.length ? dispatchState({
518
+ type: stateActionType_1.StateActionType.ShowList,
519
+ payload: undefined
520
+ }) : dispatchState({
521
+ type: stateActionType_1.StateActionType.ShowEmptyList,
522
+ payload: undefined
523
+ });
524
+ }, []);
525
+ const handleQueryMode = (0, react_1.useCallback)((searchValue, isChecked) => {
526
+ setChecked && isChecked !== undefined && setChecked(isChecked);
527
+ setSearch && setSearch(searchValue || "");
528
+ }, [setChecked, setSearch]);
529
+ const debouncedGetData = (0, useDebounce_1.useDebounce)((signal, searchValue, isChecked) => getData ? (isCheckboxMode ? getData(signal, searchValue, isChecked) : getData(signal, searchValue)).then(dta => handleData(dta, searchValue)).catch(handleError) : customGetData(searchValue).then(dta => handleData(dta, searchValue)).catch(handleError), 200);
530
+ const controlData = (0, react_1.useCallback)((signal, searchValue, isChecked) => {
531
+ !isQueryMode && dispatchState({
532
+ type: stateActionType_1.StateActionType.ShowWaiting,
533
+ payload: undefined
534
+ });
535
+ isQueryMode ? handleQueryMode(searchValue, isChecked) : debouncedGetData(signal, searchValue, isChecked);
536
+ }, [debouncedGetData, handleQueryMode, isQueryMode]);
537
+ (0, react_1.useEffect)(() => {
538
+ const timeoutId = setTimeout(() => {
539
+ if (!isQueryMode || (fetchState === null || fetchState === void 0 ? void 0 : fetchState.isLoading)) {
540
+ return;
541
+ }
542
+ handleDataQuery((fetchState === null || fetchState === void 0 ? void 0 : fetchState.data) || [], state.inputValue);
543
+ });
544
+ return () => clearTimeout(timeoutId);
545
+ }, [fetchState === null || fetchState === void 0 ? void 0 : fetchState.data, handleDataQuery, fetchState === null || fetchState === void 0 ? void 0 : fetchState.isLoading, isQueryMode, state.inputValue]);
546
+ (0, react_1.useEffect)(() => {
547
+ // when change inside
548
+ if (hasApplyButton) {
549
+ return;
550
+ }
551
+ const prevIsCheckedValue = isCheckboxMode ? prevSelectedIds.current.isChecked : undefined;
552
+ if ((0, dropdownHelper_1.compareStringsArrays)(prevSelectedIds.current.selected, state.selectedIds) && prevSelectedIds.current.isAllSelected === state.isAllSelected && prevIsCheckedValue === state.isChecked) {
553
+ return;
554
+ }
555
+ prevSelectedIds.current = {
556
+ selected: state.selectedIds,
557
+ isAllSelected: state.isAllSelected,
558
+ isChecked: state.isChecked
559
+ };
560
+ if ((0, dropdownHelper_1.compareStringsArrays)(state.selectedIds, isFullSelectionMode || isCheckboxMode ? value.selected : value) && state.isAllSelected === (isFullSelectionMode ? value.isAllSelected : undefined) && state.isChecked === (isCheckboxMode ? value.isChecked : undefined)) {
561
+ return;
562
+ }
563
+ dispatchState({
564
+ type: stateActionType_1.StateActionType.SetDataProblem,
565
+ payload: (0, dropdownHelper_1.checkIsDataProblem)(state.selectedIds, state.groupsMap)
566
+ });
567
+ const preparedItems = (0, dropdownHelper_1.prepareSelectedIdsToItems)(state.selectedIds, state.groupsMap, state.groupsMapSelected);
568
+ if (isFullSelectionMode) {
569
+ const newValue = isCheckboxMode ? {
570
+ selected: preparedItems,
571
+ isAllSelected: state.isAllSelected || false,
572
+ isChecked: state.isChecked
573
+ } : {
574
+ selected: preparedItems,
575
+ isAllSelected: state.isAllSelected || false
576
+ };
577
+ onChange === null || onChange === void 0 ? void 0 : onChange(newValue);
578
+ } else {
579
+ const newValue = isCheckboxMode ? {
580
+ selected: preparedItems,
581
+ isChecked: state.isChecked
582
+ } : preparedItems;
583
+ onChange === null || onChange === void 0 ? void 0 : onChange(newValue);
584
+ }
585
+ // eslint-disable-next-line max-len
586
+ }, [onChangeInner, value, state.selectedIds, state.groupsMapSelected, state.groupsMap, hasApplyButton, state.isAllSelected, isFullSelectionMode, state.isChecked, isCheckboxMode, onChange]);
587
+ (0, react_1.useEffect)(() => {
588
+ // when change outside
589
+ const selectedValue = isFullSelectionMode || isCheckboxMode ? value.selected : value;
590
+ const isAllSelectedValue = isFullSelectionMode ? value.isAllSelected : undefined;
591
+ const isCheckedValue = isCheckboxMode ? value.isChecked : undefined;
592
+ if ((0, dropdownHelper_1.compareStringsArrays)(prevSelection.current.selected, selectedValue) && isAllSelectedValue === prevSelection.current.isAllSelected && prevSelection.current.isChecked === isCheckedValue) {
593
+ return;
594
+ }
595
+ prevSelection.current = {
596
+ selected: selectedValue,
597
+ isAllSelected: isAllSelectedValue,
598
+ isChecked: isCheckedValue
599
+ };
600
+ if ((0, dropdownHelper_1.compareStringsArrays)(hasApplyButton ? state.globalSelectedIds : state.selectedIds, selectedValue) && isAllSelectedValue === (hasApplyButton ? state.globalIsAllSelected : state.isAllSelected) && isCheckedValue === (hasApplyButton ? state.globalIsChecked : state.isChecked)) {
601
+ return;
602
+ }
603
+ // prevSelectedIds.current = { selected: selectedValue, isAllSelected: isAllSelectedValue, isChecked: isCheckedValue };
604
+ hasApplyButton && dispatchState({
605
+ type: stateActionType_1.StateActionType.SetGlobalState,
606
+ payload: {
607
+ selected: selectedValue,
608
+ isAllSelected: isAllSelectedValue,
609
+ isChecked: isCheckedValue
610
+ }
611
+ });
612
+ dispatchState({
613
+ type: stateActionType_1.StateActionType.SetState,
614
+ payload: {
615
+ selected: selectedValue,
616
+ isAllSelected: isAllSelectedValue
617
+ }
618
+ });
619
+ isCheckboxMode && isCheckedValue !== undefined && dispatchState({
620
+ type: stateActionType_1.StateActionType.SetIsChecked,
621
+ payload: isCheckedValue
622
+ });
623
+ }, [value, state.selectedIds, state.globalSelectedIds, hasApplyButton, isFullSelectionMode, state.isAllSelected, state.globalIsAllSelected, isCheckboxMode, state.globalIsChecked, state.isChecked]);
624
+ (0, react_1.useEffect)(() => {
625
+ if (!isCheckboxMode || prevIsChecked.current === undefined) {
626
+ return;
627
+ }
628
+ if (state.isChecked === prevIsChecked.current) {
629
+ return;
630
+ }
631
+ prevIsChecked.current = state.isChecked;
632
+ const currentAbort = abortToken.current;
633
+ controlData(currentAbort.signal, state.inputValue, state.isChecked);
634
+ }, [controlData, state.inputValue, state.isChecked, isCheckboxMode]);
635
+ (0, useEscape_1.useEscape)(triggerRef, handleEscape, state.isOpenCombo);
636
+ const onSearchChange = (0, react_1.useCallback)(event => {
637
+ const newValue = event ? event.currentTarget.value : "";
638
+ dispatchState({
639
+ type: stateActionType_1.StateActionType.SetInputValue,
640
+ payload: newValue
641
+ });
642
+ const currentAbort = abortToken.current;
643
+ controlData(currentAbort.signal, newValue, state.isChecked);
644
+ }, [controlData, state.isChecked]);
645
+ const onInputChange = (0, react_1.useCallback)(newValue => {
646
+ dispatchState({
647
+ type: stateActionType_1.StateActionType.SetInputValue,
648
+ payload: newValue || ""
649
+ });
650
+ const currentAbort = abortToken.current;
651
+ controlData(currentAbort.signal, newValue, state.isChecked);
652
+ }, [controlData, state.isChecked]);
653
+ const containerClassName = (0, classNames_1.classNames)(["zen-dropdown", isFormSection ? "zen-dropdown--form-item" : "", "zen-dropdown__container", className || ""]);
654
+ const handleCheckboxChange = (0, react_1.useCallback)(e => {
655
+ const isChecked = e.target.checked;
656
+ dispatchState({
657
+ type: stateActionType_1.StateActionType.SetIsChecked,
658
+ payload: isChecked
659
+ });
660
+ prevIsChecked.current = isChecked;
661
+ const currentAbort = abortToken.current;
662
+ controlData(currentAbort.signal, state.inputValue, isChecked);
663
+ }, [controlData, state.inputValue]);
664
+ const handleTriggerClick = (0, react_1.useCallback)(newVal => {
665
+ const currentAbort = abortToken.current;
666
+ dispatchState({
667
+ type: stateActionType_1.StateActionType.SetCurrentId,
668
+ payload: undefined
669
+ });
670
+ dispatchState({
671
+ type: stateActionType_1.StateActionType.SetIsOpenCombo,
672
+ payload: newVal
673
+ });
674
+ newVal && controlData(currentAbort.signal, state.inputValue, state.isChecked);
675
+ !newVal && dispatchState({
676
+ type: stateActionType_1.StateActionType.SetInputValue,
677
+ payload: ""
678
+ });
679
+ }, [controlData, state.inputValue, state.isChecked]);
680
+ const handleReadyForFocus = (0, react_1.useCallback)(isCurrentOpen => {
681
+ var _a;
682
+ if (!state.showList) {
683
+ return;
684
+ }
685
+ if (!isCurrentOpen) {
686
+ return;
687
+ }
688
+ const firstFocusable = (_a = contentRef.current) === null || _a === void 0 ? void 0 : _a.querySelector(focusableSelector_1.FOCUSABLE_SELECTOR);
689
+ if (firstFocusable && (state.currentId || !searchField)) {
690
+ firstFocusable.focus();
691
+ } else {
692
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
693
+ (inputRef === null || inputRef === void 0 ? void 0 : inputRef.current) && inputRef.current.focus();
694
+ }
695
+ }, [searchField, state.currentId, state.showList, contentRef]);
696
+ (0, react_1.useEffect)(() => {
697
+ var _a;
698
+ if (!state.isOpenCombo || !state.showList) {
699
+ return;
700
+ }
701
+ const firstFocusable = (_a = contentRef.current) === null || _a === void 0 ? void 0 : _a.querySelector(focusableSelector_1.FOCUSABLE_SELECTOR);
702
+ if (firstFocusable && (state.currentId || !searchField)) {
703
+ firstFocusable.focus();
704
+ } else {
705
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
706
+ (inputRef === null || inputRef === void 0 ? void 0 : inputRef.current) && inputRef.current.focus();
707
+ }
708
+ }, [state.isOpenCombo, state.currentId, state.showList, searchField]);
709
+ (0, react_1.useEffect)(() => {
710
+ const shouldExit = !getNamedItems || Object.keys(state.groupsMap).length === 0 && Object.keys(state.groupsMapSelected).length === 0 || getNamedItemsHasBeenCalled.current || state.groupsMapSelected.size === 0;
711
+ if (shouldExit) {
712
+ return;
713
+ }
714
+ getNamedItemsHasBeenCalled.current = true;
715
+ getNamedItems(items => (0, dropdownHelper_1.prepareSelectedIdsToItems)(items, state.groupsMap, state.groupsMapSelected));
716
+ }, [getNamedItems, state.groupsMap, state.groupsMapSelected, state.namelessIds]);
717
+ (0, react_1.useEffect)(() => {
718
+ if (state.hasDataProblem && multiselect && state.isNestedList) {
719
+ // eslint-disable-next-line max-len
720
+ console.error("The data retrieved using the getData function could not form a valid object for displaying nested data. The currently displayed data contains nested elements. It is expected that selecting a nested item should deselect its parent, which cannot be achieved with the formed object.");
721
+ }
722
+ }, [state.hasDataProblem, multiselect, state.isNestedList]);
723
+ (0, react_1.useEffect)(() => {
724
+ if (state.isNestedList && isFullSelectionMode) {
725
+ // eslint-disable-next-line max-len
726
+ console.error("The IDropdownFullSelection interface is not designed to handle nested data. The IDropdownFullSelection interface is intended for use with flat data. If you need to use it with nested data, please use the IDropdown interface instead.");
727
+ }
728
+ }, [state.isNestedList, isFullSelectionMode]);
729
+ const memoizedWithFooter = (0, react_1.useMemo)(() => !(forceSelection && !state.defaultValue.length && !hasApplyButton), [forceSelection, hasApplyButton, state.defaultValue.length]);
730
+ const memoizedIsClearButtonDisabled = (0, react_1.useMemo)(() => {
731
+ if (forceSelection && !multiselect && !state.defaultValue.length) {
732
+ return true;
733
+ }
734
+ const isStringsTheSame = (0, dropdownHelper_1.compareStringsArrays)(state.selectedIds, state.defaultValue);
735
+ const isCheckedEqualDefault = currentIsChecked !== undefined ? currentIsChecked === state.defaultValueIsChecked : true;
736
+ if (currentAllSelected !== undefined && state.defaultValueIsAllSelected !== undefined && state.defaultValueIsAllSelected && isCheckedEqualDefault) {
737
+ return currentAllSelected === state.defaultValueIsAllSelected;
738
+ }
739
+ return currentAllSelected !== undefined ? state.defaultValueIsAllSelected === currentAllSelected && isStringsTheSame && isCheckedEqualDefault : isStringsTheSame && isCheckedEqualDefault;
740
+ }, [currentAllSelected, currentIsChecked, forceSelection, multiselect, state.defaultValue, state.defaultValueIsAllSelected, state.defaultValueIsChecked, state.selectedIds]);
741
+ const memoizedIsApplyButtonDisabled = (0, react_1.useMemo)(() => (0, dropdownHelper_1.compareStringsArrays)(state.globalSelectedIds, state.selectedIds) && (isFullSelectionMode ? state.globalIsAllSelected === state.isAllSelected : true) && (isCheckboxMode ? state.globalIsChecked === state.isChecked : true), [isCheckboxMode, isFullSelectionMode, state.globalIsAllSelected, state.globalIsChecked, state.globalSelectedIds, state.isAllSelected, state.isChecked, state.selectedIds]);
742
+ const countSelected = (0, react_1.useMemo)(() => {
743
+ var _a, _b;
744
+ if (hasApplyButton && state.globalIsAllSelected || !hasApplyButton && state.isAllSelected) {
745
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
746
+ return ((_b = (_a = state.groupsMap[stateReducer_1.ROOT_GROUP_ID]) === null || _a === void 0 ? void 0 : _a.children) === null || _b === void 0 ? void 0 : _b.length) || 0;
747
+ }
748
+ return (0, dropdownHelper_1.getSelectedCount)(hasApplyButton ? state.globalSelectedIds : state.selectedIds);
749
+ }, [hasApplyButton, state.globalIsAllSelected, state.globalSelectedIds, state.groupsMap, state.isAllSelected, state.selectedIds]);
750
+ // eslint-disable-next-line complexity
751
+ const getPopupContent = (0, react_1.useMemo)(() => {
752
+ var _a, _b, _c;
753
+ const triggerRefWidth = (_a = triggerRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect().width;
754
+ let currentWidth = triggerRefWidth ? Math.round(triggerRefWidth) : undefined;
755
+ if (currentWidth && currentWidth > 420) {
756
+ currentWidth = 420;
757
+ }
758
+ if (currentWidth && currentWidth < 180) {
759
+ currentWidth = 180;
760
+ }
761
+ if (state.showWaiting || isLoading || isQueryMode && (fetchState === null || fetchState === void 0 ? void 0 : fetchState.isLoading)) {
762
+ return (0, jsx_runtime_1.jsx)(skeletonList_1.SkeletonList, {
763
+ className: "zen-dropdown-list__container zen-dropdown-list__container--empty",
764
+ width: currentWidth
765
+ });
766
+ }
767
+ if (state.showEmptyList || isQueryMode && (fetchState === null || fetchState === void 0 ? void 0 : fetchState.error)) {
768
+ const isClearButtonDisabled = (0, dropdownHelper_1.compareStringsArrays)(state.selectedIds, state.defaultValue);
769
+ return (0, jsx_runtime_1.jsx)(dropdownList_1.EmptyList, {
770
+ width: currentWidth,
771
+ onClearClick: handleClearClick,
772
+ onCancelClick: handleCancelClick,
773
+ onApplyClick: handleApplyClick,
774
+ hasApplyButton: hasApplyButton,
775
+ isApplyDisabled: (0, dropdownHelper_1.compareStringsArrays)(state.globalSelectedIds, state.selectedIds),
776
+ isClearButtonDisabled: isClearButtonDisabled,
777
+ isWithFooter: memoizedWithFooter && Object.keys(state.groupsMap).length === 0 && (!hasApplyButton && !isClearButtonDisabled || hasApplyButton || false),
778
+ hasError: state.showEmptyList && isQueryMode && (fetchState === null || fetchState === void 0 ? void 0 : fetchState.error) !== null
779
+ });
780
+ }
781
+ if (state.showList) {
782
+ const isSearchMode = state.inputValue && !state.currentId;
783
+ const currentListData = (0, dropdownHelper_1.createListDataOptions)(state, translate, isSearchMode ? (0, dropdownHelper_1.sortDropdownItemArray)(state.listData, sortFn).slice(0, listLimit).filter(el => el.id !== state.rootId)
784
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
785
+ : (0, dropdownHelper_1.sortDropdownItemArray)(((_b = state.groupsMap[state.currentId || state.rootId]) === null || _b === void 0 ? void 0 : _b.children) || [], sortFn).slice(0, listLimit) || [], multiselect, currentAllSelected);
786
+ return (0, jsx_runtime_1.jsx)(dropdownList_1.DropdownList, {
787
+ onBackButtonClick: handleBackButtonClick,
788
+ onSelectAllClick: isSearchMode ? handleSelectAllInSearch : handleSelectAllClick,
789
+ onClearClick: handleClearClick,
790
+ onCancelClick: handleCancelClick,
791
+ onApplyClick: handleApplyClick,
792
+ onChange: handleSelect,
793
+ onSelect: handleChangeCurrentId,
794
+ onSingleSelect: handleSingleSelection,
795
+ activeValue: state.selectedIds.length ? state.selectedIds[0] : "root",
169
796
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
170
- const newCurrentId = state.currentId ? (_b = (_a = state.groupsMap[state.currentId]) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.id : undefined;
171
- dispatchState({ type: stateActionType_1.StateActionType.SetCurrentId, payload: newCurrentId === groupsHelper_1.ENTIRE_ORGANIZATION_GROUP_ID || state.inputValue ? undefined : newCurrentId });
172
- }, [state.currentId, state.groupsMap, state.inputValue]);
173
- const handleSelect = (0, react_1.useCallback)((val) => {
174
- if (isFullSelectionMode && state.isAllSelected) {
175
- dispatchState({ type: stateActionType_1.StateActionType.DeselectItemsFromAllSelected, payload: val.id });
176
- return;
177
- }
178
- if (val.partial) {
179
- dispatchState({ type: stateActionType_1.StateActionType.DeselectAllChildren, payload: val.id });
180
- }
181
- else {
182
- dispatchState({ type: stateActionType_1.StateActionType.ChangeSelection, payload: { value: val.state, itemId: val.id } });
183
- }
184
- }, [isFullSelectionMode, state.isAllSelected]);
185
- const handleClose = (0, react_1.useCallback)(() => {
186
- dispatchState({ type: stateActionType_1.StateActionType.SetInputValue, payload: "" });
187
- if (!triggerRef.current) {
188
- return;
189
- }
190
- if ((0, dialogHelpers_1.isFocusable)(triggerRef.current)) {
191
- triggerRef.current.focus();
192
- return;
193
- }
194
- const focusable = [...Array.from(triggerRef.current.querySelectorAll(focusableSelector_1.FOCUSABLE_SELECTOR))];
195
- (focusable[0] || triggerRef.current).focus();
196
- }, []);
197
- const handleEscape = (0, react_1.useCallback)(() => {
198
- dispatchState({ type: stateActionType_1.StateActionType.SetIsOpenCombo, payload: false });
199
- dispatchState({ type: stateActionType_1.StateActionType.SetCurrentId, payload: undefined });
200
- abortToken.current.abort();
201
- abortToken.current = new AbortController();
202
- handleClose();
203
- }, [handleClose]);
204
- const memoizedAllowClosing = (0, react_1.useMemo)(() => state.currentId === undefined || state.currentId === groupsHelper_1.ENTIRE_ORGANIZATION_GROUP_ID, [state.currentId]);
205
- const handleSingleSelection = (0, react_1.useCallback)((reset, selected) => {
206
- const shouldBeClosed = !hasApplyButton && memoizedAllowClosing && (!reset && selected || reset);
207
- dispatchState({ type: stateActionType_1.StateActionType.ChangeSingleSelection, payload: { value: selected, reset: reset } });
208
- shouldBeClosed && handleEscape();
209
- shouldBeClosed && dispatchState({ type: stateActionType_1.StateActionType.SetInputValue, payload: "" });
210
- }, [handleEscape, hasApplyButton, memoizedAllowClosing]);
211
- const handleSelectAllClick = (0, react_1.useCallback)((isAllSelect) => {
212
- if (isFullSelectionMode) {
213
- dispatchState({ type: stateActionType_1.StateActionType.ToggleValueForAllSelected, payload: undefined });
214
- return;
215
- }
216
- dispatchState({ type: isAllSelect ? stateActionType_1.StateActionType.DeselectAllChildren : stateActionType_1.StateActionType.SelectAllChildren, payload: state.currentId || groupsHelper_1.ENTIRE_ORGANIZATION_GROUP_ID });
217
- }, [isFullSelectionMode, state.currentId]);
218
- const handleSelectAllInSearch = (0, react_1.useCallback)((isAllSelect) => {
219
- if (isFullSelectionMode && state.isAllSelected) {
220
- dispatchState({ type: stateActionType_1.StateActionType.DeselectItemsFromAllSelected, payload: undefined });
221
- return;
222
- }
223
- const dataForChange = (0, dropdownHelper_1.getDataForChange)((0, dropdownHelper_1.getListDataWithDisabled)(state.listData, state.isNestedList), state.selectedIds, isAllSelect);
224
- dispatchState({ type: stateActionType_1.StateActionType.ChangeBulkSelection, payload: { itemsIds: dataForChange, value: !isAllSelect } });
225
- }, [isFullSelectionMode, state.isAllSelected, state.listData, state.isNestedList, state.selectedIds]);
226
- const handleClearClick = (0, react_1.useCallback)(() => {
227
- dispatchState({ type: stateActionType_1.StateActionType.ResetSelection, payload: undefined });
228
- }, []);
229
- const handleCancelClick = (0, react_1.useCallback)(() => {
230
- dispatchState({ type: stateActionType_1.StateActionType.ResetStateToGlobal, payload: undefined });
231
- dispatchState({ type: stateActionType_1.StateActionType.SetIsOpenCombo, payload: false });
232
- dispatchState({ type: stateActionType_1.StateActionType.SetCurrentId, payload: undefined });
233
- abortToken.current.abort();
234
- abortToken.current = new AbortController();
235
- handleClose();
236
- }, [handleClose]);
237
- const handleApplyClick = (0, react_1.useCallback)(() => {
238
- dispatchState({ type: stateActionType_1.StateActionType.SetGlobalState, payload: Object.assign({ selected: state.selectedIds, isAllSelected: state.isAllSelected }, (isCheckboxMode ? { isChecked: state.isChecked } : {})) });
239
- dispatchState({ type: stateActionType_1.StateActionType.SetIsOpenCombo, payload: false });
240
- dispatchState({ type: stateActionType_1.StateActionType.SetCurrentId, payload: undefined });
241
- abortToken.current.abort();
242
- abortToken.current = new AbortController();
243
- handleClose();
244
- dispatchState({ type: stateActionType_1.StateActionType.SetDataProblem, payload: (0, dropdownHelper_1.checkIsDataProblem)(state.selectedIds, state.groupsMap) });
245
- const preparedItems = (0, dropdownHelper_1.prepareSelectedIdsToItems)(state.selectedIds, state.groupsMap, state.groupsMapSelected);
246
- if (isFullSelectionMode) {
247
- const newValue = (isCheckboxMode
248
- ? { selected: preparedItems, isAllSelected: state.isAllSelected || false, isChecked: state.isChecked }
249
- : { selected: preparedItems, isAllSelected: state.isAllSelected || false });
250
- onChange === null || onChange === void 0 ? void 0 : onChange(newValue);
251
- }
252
- else {
253
- const newValue = isCheckboxMode
254
- ? { selected: preparedItems, isChecked: state.isChecked }
255
- : preparedItems;
256
- onChange === null || onChange === void 0 ? void 0 : onChange(newValue);
257
- }
258
- }, [state.selectedIds, state.isAllSelected, state.isChecked, state.groupsMap, state.groupsMapSelected, isCheckboxMode, handleClose, isFullSelectionMode, onChange]);
259
- const customGetData = (0, react_1.useCallback)((str) => (str && dataItems
260
- ? Promise.resolve(dataItems.filter(el => { var _a; return (((_a = el.name) === null || _a === void 0 ? void 0 : _a.toLocaleLowerCase()) || "").indexOf(str.trim().toLocaleLowerCase()) > -1; }))
261
- : Promise.resolve(dataItems || [])), [dataItems]);
262
- const handleData = (0, react_1.useCallback)((dta, searchVal) => {
263
- if (dta.length && !searchVal && (getData || dataItems || isQueryMode)) {
264
- dispatchState({ type: stateActionType_1.StateActionType.CreateMap, payload: dta });
265
- previousMapDataItems.current = [...dta];
266
- }
267
- dispatchState({ type: stateActionType_1.StateActionType.SetListData, payload: dta });
268
- searchVal && dispatchState({ type: stateActionType_1.StateActionType.SetCurrentId, payload: undefined });
269
- dta.length ? dispatchState({ type: stateActionType_1.StateActionType.ShowList, payload: undefined }) : dispatchState({ type: stateActionType_1.StateActionType.ShowEmptyList, payload: undefined });
270
- }, [getData, dataItems, isQueryMode]);
271
- const handleError = (0, react_1.useCallback)((e) => {
272
- errorHandler(e);
273
- dispatchState({ type: stateActionType_1.StateActionType.NothingToShow, payload: undefined });
274
- }, [errorHandler]);
275
- const handleDataQuery = (0, react_1.useCallback)((dta, searchVal) => {
276
- if (dta.length && !searchVal && !(0, dropdownHelper_1.compareObjectsArrays)(dta, previousMapDataItems.current)) {
277
- dispatchState({ type: stateActionType_1.StateActionType.CreateMap, payload: dta });
278
- previousMapDataItems.current = [...dta];
279
- }
280
- dispatchState({ type: stateActionType_1.StateActionType.SetListData, payload: dta });
281
- searchVal && dispatchState({ type: stateActionType_1.StateActionType.SetCurrentId, payload: undefined });
282
- dta.length ? dispatchState({ type: stateActionType_1.StateActionType.ShowList, payload: undefined }) : dispatchState({ type: stateActionType_1.StateActionType.ShowEmptyList, payload: undefined });
283
- }, []);
284
- const handleQueryMode = (0, react_1.useCallback)((searchValue, isChecked) => {
285
- setChecked && isChecked !== undefined && setChecked(isChecked);
286
- setSearch && setSearch(searchValue || "");
287
- }, [setChecked, setSearch]);
288
- const debouncedGetData = (0, useDebounce_1.useDebounce)((signal, searchValue, isChecked) => getData ? (isCheckboxMode ? getData(signal, searchValue, isChecked) : getData(signal, searchValue)).then((dta) => handleData(dta, searchValue)).catch(handleError)
289
- : customGetData(searchValue).then((dta) => handleData(dta, searchValue)).catch(handleError), 200);
290
- const controlData = (0, react_1.useCallback)((signal, searchValue, isChecked) => {
291
- !isQueryMode && dispatchState({ type: stateActionType_1.StateActionType.ShowWaiting, payload: undefined });
292
- isQueryMode ? handleQueryMode(searchValue, isChecked) : debouncedGetData(signal, searchValue, isChecked);
293
- }, [debouncedGetData, handleQueryMode, isQueryMode]);
294
- (0, react_1.useEffect)(() => {
295
- const timeoutId = setTimeout(() => {
296
- if (!isQueryMode || (fetchState === null || fetchState === void 0 ? void 0 : fetchState.isLoading)) {
297
- return;
298
- }
299
- handleDataQuery((fetchState === null || fetchState === void 0 ? void 0 : fetchState.data) || [], state.inputValue);
300
- });
301
- return () => clearTimeout(timeoutId);
302
- }, [fetchState === null || fetchState === void 0 ? void 0 : fetchState.data, handleDataQuery, fetchState === null || fetchState === void 0 ? void 0 : fetchState.isLoading, isQueryMode, state.inputValue]);
303
- (0, react_1.useEffect)(() => {
304
- // when change inside
305
- if (hasApplyButton) {
306
- return;
307
- }
308
- const prevIsCheckedValue = isCheckboxMode ?
309
- prevSelectedIds.current.isChecked : undefined;
310
- if ((0, dropdownHelper_1.compareStringsArrays)(prevSelectedIds.current.selected, state.selectedIds)
311
- && prevSelectedIds.current.isAllSelected === state.isAllSelected
312
- && prevIsCheckedValue === state.isChecked) {
313
- return;
314
- }
315
- prevSelectedIds.current = { selected: state.selectedIds, isAllSelected: state.isAllSelected, isChecked: state.isChecked };
316
- if ((0, dropdownHelper_1.compareStringsArrays)(state.selectedIds, isFullSelectionMode || isCheckboxMode ? value.selected : value)
317
- && state.isAllSelected === (isFullSelectionMode ? value.isAllSelected : undefined)
318
- && state.isChecked === (isCheckboxMode ? value.isChecked : undefined)) {
319
- return;
320
- }
321
- dispatchState({ type: stateActionType_1.StateActionType.SetDataProblem, payload: (0, dropdownHelper_1.checkIsDataProblem)(state.selectedIds, state.groupsMap) });
322
- const preparedItems = (0, dropdownHelper_1.prepareSelectedIdsToItems)(state.selectedIds, state.groupsMap, state.groupsMapSelected);
323
- if (isFullSelectionMode) {
324
- const newValue = (isCheckboxMode
325
- ? { selected: preparedItems, isAllSelected: state.isAllSelected || false, isChecked: state.isChecked }
326
- : { selected: preparedItems, isAllSelected: state.isAllSelected || false });
327
- onChange === null || onChange === void 0 ? void 0 : onChange(newValue);
328
- }
329
- else {
330
- const newValue = isCheckboxMode
331
- ? { selected: preparedItems, isChecked: state.isChecked }
332
- : preparedItems;
333
- onChange === null || onChange === void 0 ? void 0 : onChange(newValue);
334
- }
335
- // eslint-disable-next-line max-len
336
- }, [onChangeInner, value, state.selectedIds, state.groupsMapSelected, state.groupsMap, hasApplyButton, state.isAllSelected, isFullSelectionMode, state.isChecked, isCheckboxMode, onChange]);
337
- (0, react_1.useEffect)(() => {
338
- // when change outside
339
- const selectedValue = isFullSelectionMode || isCheckboxMode ? value.selected : value;
340
- const isAllSelectedValue = isFullSelectionMode ? value.isAllSelected : undefined;
341
- const isCheckedValue = isCheckboxMode ? value.isChecked : undefined;
342
- if ((0, dropdownHelper_1.compareStringsArrays)(prevSelection.current.selected, selectedValue) && isAllSelectedValue === prevSelection.current.isAllSelected && prevSelection.current.isChecked === isCheckedValue) {
343
- return;
344
- }
345
- prevSelection.current = { selected: selectedValue, isAllSelected: isAllSelectedValue, isChecked: isCheckedValue };
346
- if ((0, dropdownHelper_1.compareStringsArrays)(hasApplyButton ? state.globalSelectedIds : state.selectedIds, selectedValue)
347
- && isAllSelectedValue === (hasApplyButton ? state.globalIsAllSelected : state.isAllSelected)
348
- && isCheckedValue === (hasApplyButton ? state.globalIsChecked : state.isChecked)) {
349
- return;
350
- }
351
- // prevSelectedIds.current = { selected: selectedValue, isAllSelected: isAllSelectedValue, isChecked: isCheckedValue };
352
- hasApplyButton && dispatchState({ type: stateActionType_1.StateActionType.SetGlobalState,
353
- payload: { selected: selectedValue, isAllSelected: isAllSelectedValue, isChecked: isCheckedValue } });
354
- dispatchState({ type: stateActionType_1.StateActionType.SetState,
355
- payload: { selected: selectedValue, isAllSelected: isAllSelectedValue } });
356
- isCheckboxMode && isCheckedValue !== undefined && dispatchState({ type: stateActionType_1.StateActionType.SetIsChecked, payload: isCheckedValue });
357
- }, [value, state.selectedIds, state.globalSelectedIds, hasApplyButton, isFullSelectionMode, state.isAllSelected,
358
- state.globalIsAllSelected, isCheckboxMode, state.globalIsChecked, state.isChecked]);
359
- (0, react_1.useEffect)(() => {
360
- if (!isCheckboxMode || prevIsChecked.current === undefined) {
361
- return;
362
- }
363
- if (state.isChecked === prevIsChecked.current) {
364
- return;
365
- }
366
- prevIsChecked.current = state.isChecked;
367
- const currentAbort = abortToken.current;
368
- controlData(currentAbort.signal, state.inputValue, state.isChecked);
369
- }, [controlData, state.inputValue, state.isChecked, isCheckboxMode]);
370
- (0, useEscape_1.useEscape)(triggerRef, handleEscape, state.isOpenCombo);
371
- const onSearchChange = (0, react_1.useCallback)((event) => {
372
- const newValue = event ? event.currentTarget.value : "";
373
- dispatchState({ type: stateActionType_1.StateActionType.SetInputValue, payload: newValue });
374
- const currentAbort = abortToken.current;
375
- controlData(currentAbort.signal, newValue, state.isChecked);
376
- }, [controlData, state.isChecked]);
377
- const onInputChange = (0, react_1.useCallback)((newValue) => {
378
- dispatchState({ type: stateActionType_1.StateActionType.SetInputValue, payload: newValue || "" });
379
- const currentAbort = abortToken.current;
380
- controlData(currentAbort.signal, newValue, state.isChecked);
381
- }, [controlData, state.isChecked]);
382
- const containerClassName = (0, classNames_1.classNames)([
383
- "zen-dropdown",
384
- isFormSection ? "zen-dropdown--form-item" : "",
385
- "zen-dropdown__container",
386
- className || ""
387
- ]);
388
- const handleCheckboxChange = (0, react_1.useCallback)((e) => {
389
- const isChecked = e.target.checked;
390
- dispatchState({ type: stateActionType_1.StateActionType.SetIsChecked, payload: isChecked });
391
- prevIsChecked.current = isChecked;
392
- const currentAbort = abortToken.current;
393
- controlData(currentAbort.signal, state.inputValue, isChecked);
394
- }, [controlData, state.inputValue]);
395
- const handleTriggerClick = (0, react_1.useCallback)((newVal) => {
396
- const currentAbort = abortToken.current;
397
- dispatchState({ type: stateActionType_1.StateActionType.SetCurrentId, payload: undefined });
398
- dispatchState({ type: stateActionType_1.StateActionType.SetIsOpenCombo, payload: newVal });
399
- newVal && controlData(currentAbort.signal, state.inputValue, state.isChecked);
400
- !newVal && dispatchState({ type: stateActionType_1.StateActionType.SetInputValue, payload: "" });
401
- }, [controlData, state.inputValue, state.isChecked]);
402
- const handleReadyForFocus = (0, react_1.useCallback)((isCurrentOpen) => {
403
- var _a;
404
- if (!state.showList) {
405
- return;
406
- }
407
- if (!isCurrentOpen) {
408
- return;
409
- }
410
- const firstFocusable = (_a = contentRef.current) === null || _a === void 0 ? void 0 : _a.querySelector(focusableSelector_1.FOCUSABLE_SELECTOR);
411
- if (firstFocusable && (state.currentId || !searchField)) {
412
- firstFocusable.focus();
413
- }
414
- else {
415
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
416
- (inputRef === null || inputRef === void 0 ? void 0 : inputRef.current) && inputRef.current.focus();
417
- }
418
- }, [searchField, state.currentId, state.showList, contentRef]);
419
- (0, react_1.useEffect)(() => {
420
- var _a;
421
- if (!state.isOpenCombo || !state.showList) {
422
- return;
423
- }
424
- const firstFocusable = (_a = contentRef.current) === null || _a === void 0 ? void 0 : _a.querySelector(focusableSelector_1.FOCUSABLE_SELECTOR);
425
- if (firstFocusable && (state.currentId || !searchField)) {
426
- firstFocusable.focus();
427
- }
428
- else {
429
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
430
- (inputRef === null || inputRef === void 0 ? void 0 : inputRef.current) && inputRef.current.focus();
431
- }
432
- }, [state.isOpenCombo, state.currentId, state.showList, searchField]);
433
- (0, react_1.useEffect)(() => {
434
- const shouldExit = !getNamedItems ||
435
- (Object.keys(state.groupsMap).length === 0 && Object.keys(state.groupsMapSelected).length === 0) ||
436
- getNamedItemsHasBeenCalled.current ||
437
- state.groupsMapSelected.size === 0;
438
- if (shouldExit) {
439
- return;
440
- }
441
- getNamedItemsHasBeenCalled.current = true;
442
- getNamedItems((items) => (0, dropdownHelper_1.prepareSelectedIdsToItems)(items, state.groupsMap, state.groupsMapSelected));
443
- }, [getNamedItems, state.groupsMap, state.groupsMapSelected, state.namelessIds]);
444
- (0, react_1.useEffect)(() => {
445
- if (state.hasDataProblem && multiselect && state.isNestedList) {
446
- // eslint-disable-next-line max-len
447
- console.error("The data retrieved using the getData function could not form a valid object for displaying nested data. The currently displayed data contains nested elements. It is expected that selecting a nested item should deselect its parent, which cannot be achieved with the formed object.");
448
- }
449
- }, [state.hasDataProblem, multiselect, state.isNestedList]);
450
- (0, react_1.useEffect)(() => {
451
- if (state.isNestedList && isFullSelectionMode) {
452
- // eslint-disable-next-line max-len
453
- console.error("The IDropdownFullSelection interface is not designed to handle nested data. The IDropdownFullSelection interface is intended for use with flat data. If you need to use it with nested data, please use the IDropdown interface instead.");
454
- }
455
- }, [state.isNestedList, isFullSelectionMode]);
456
- const memoizedWithFooter = (0, react_1.useMemo)(() => !(forceSelection && !state.defaultValue.length && !hasApplyButton), [forceSelection, hasApplyButton, state.defaultValue.length]);
457
- const memoizedIsClearButtonDisabled = (0, react_1.useMemo)(() => {
458
- if (forceSelection && !multiselect && !state.defaultValue.length) {
459
- return true;
460
- }
461
- const isStringsTheSame = (0, dropdownHelper_1.compareStringsArrays)(state.selectedIds, state.defaultValue);
462
- const isCheckedEqualDefault = currentIsChecked !== undefined ? currentIsChecked === state.defaultValueIsChecked : true;
463
- if (currentAllSelected !== undefined && state.defaultValueIsAllSelected !== undefined && state.defaultValueIsAllSelected && isCheckedEqualDefault) {
464
- return currentAllSelected === state.defaultValueIsAllSelected;
465
- }
466
- return currentAllSelected !== undefined ? state.defaultValueIsAllSelected === currentAllSelected && isStringsTheSame && isCheckedEqualDefault : isStringsTheSame && isCheckedEqualDefault;
467
- }, [currentAllSelected, currentIsChecked, forceSelection, multiselect, state.defaultValue, state.defaultValueIsAllSelected, state.defaultValueIsChecked, state.selectedIds]);
468
- const memoizedIsApplyButtonDisabled = (0, react_1.useMemo)(() => (0, dropdownHelper_1.compareStringsArrays)(state.globalSelectedIds, state.selectedIds)
469
- && (isFullSelectionMode ? state.globalIsAllSelected === state.isAllSelected : true)
470
- && (isCheckboxMode ? state.globalIsChecked === state.isChecked : true), [isCheckboxMode, isFullSelectionMode, state.globalIsAllSelected, state.globalIsChecked, state.globalSelectedIds, state.isAllSelected, state.isChecked, state.selectedIds]);
471
- const countSelected = (0, react_1.useMemo)(() => {
472
- var _a, _b;
473
- if (hasApplyButton && state.globalIsAllSelected || !hasApplyButton && state.isAllSelected) {
474
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
475
- return ((_b = (_a = state.groupsMap[groupsHelper_1.ENTIRE_ORGANIZATION_GROUP_ID]) === null || _a === void 0 ? void 0 : _a.children) === null || _b === void 0 ? void 0 : _b.length) || 0;
476
- }
477
- return (0, dropdownHelper_1.getSelectedCount)(hasApplyButton ? state.globalSelectedIds : state.selectedIds);
478
- }, [hasApplyButton, state.globalIsAllSelected, state.globalSelectedIds, state.groupsMap, state.isAllSelected, state.selectedIds]);
479
- // eslint-disable-next-line complexity
480
- const getPopupContent = (0, react_1.useMemo)(() => {
481
- var _a, _b, _c;
482
- const triggerRefWidth = (_a = triggerRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect().width;
483
- let currentWidth = triggerRefWidth ? Math.round(triggerRefWidth) : undefined;
484
- if (currentWidth && currentWidth > 420) {
485
- currentWidth = 420;
486
- }
487
- if (currentWidth && currentWidth < 180) {
488
- currentWidth = 180;
489
- }
490
- if (state.showWaiting || isLoading || (isQueryMode && (fetchState === null || fetchState === void 0 ? void 0 : fetchState.isLoading))) {
491
- return (0, jsx_runtime_1.jsx)(skeletonList_1.SkeletonList, { className: "zen-dropdown-list__container zen-dropdown-list__container--empty", width: currentWidth });
492
- }
493
- if (state.showEmptyList || (isQueryMode && (fetchState === null || fetchState === void 0 ? void 0 : fetchState.error))) {
494
- const isClearButtonDisabled = (0, dropdownHelper_1.compareStringsArrays)(state.selectedIds, state.defaultValue);
495
- return (0, jsx_runtime_1.jsx)(dropdownList_1.EmptyList, { width: currentWidth, onClearClick: handleClearClick, onCancelClick: handleCancelClick, onApplyClick: handleApplyClick, hasApplyButton: hasApplyButton, isApplyDisabled: (0, dropdownHelper_1.compareStringsArrays)(state.globalSelectedIds, state.selectedIds), isClearButtonDisabled: isClearButtonDisabled, isWithFooter: memoizedWithFooter && Object.keys(state.groupsMap).length === 0 && ((!hasApplyButton && !isClearButtonDisabled) || hasApplyButton || false), hasError: state.showEmptyList && (isQueryMode && (fetchState === null || fetchState === void 0 ? void 0 : fetchState.error) !== null) });
496
- }
497
- if (state.showList) {
498
- const isSearchMode = state.inputValue && !state.currentId;
499
- const currentListData = (0, dropdownHelper_1.createListDataOptions)(state, translate, isSearchMode ? (0, dropdownHelper_1.sortDropdownItemArray)(state.listData, sortFn).slice(0, listLimit).filter(el => el.id !== groupsHelper_1.ENTIRE_ORGANIZATION_GROUP_ID)
500
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
501
- : (0, dropdownHelper_1.sortDropdownItemArray)(((_b = state.groupsMap[state.currentId || groupsHelper_1.ENTIRE_ORGANIZATION_GROUP_ID]) === null || _b === void 0 ? void 0 : _b.children) || [], sortFn).slice(0, listLimit) || [], multiselect, currentAllSelected);
502
- return (0, jsx_runtime_1.jsx)(dropdownList_1.DropdownList, { onBackButtonClick: handleBackButtonClick, onSelectAllClick: isSearchMode ? handleSelectAllInSearch : handleSelectAllClick, onClearClick: handleClearClick, onCancelClick: handleCancelClick, onApplyClick: handleApplyClick, onChange: handleSelect, onSelect: handleChangeCurrentId, onSingleSelect: handleSingleSelection, activeValue: state.selectedIds.length ? state.selectedIds[0] : "root",
503
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
504
- backButtonName: state.currentId && state.groupsMap[state.currentId] ? (0, groupsHelper_1.getGroupDescription)(state.groupsMap[state.currentId], translate) : undefined, filterName: isMobile ? undefined : filterName, isAllSelected: currentAllSelected ? currentAllSelected : (isSearchMode ? (0, dropdownHelper_1.isEveryItemSelected)((0, dropdownHelper_1.getListDataWithDisabled)(state.listData, state.isNestedList), state.selectedIds)
505
- : (currentAllSelected === undefined ? (0, dropdownHelper_1.isAllChildrenSelected)(state, state.currentId || groupsHelper_1.ENTIRE_ORGANIZATION_GROUP_ID) : false)), isMultiselect: multiselect, forceSelection: forceSelection,
506
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
507
- listData: currentListData, width: width || currentWidth === 180 ? undefined : currentWidth, minWidth: currentWidth, hasSelectAllButton: selectAllButton && multiselect, hasApplyButton: hasApplyButton, isApplyDisabled: memoizedIsApplyButtonDisabled, isSelectAllButtonDisable: currentListData.length === 0
508
- || isSearchMode !== "" && state.isNestedList
509
- && (0, dropdownHelper_1.isAllItemsHasOneParent)(state.listData.filter(el => el.id !== groupsHelper_1.ENTIRE_ORGANIZATION_GROUP_ID),
510
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
511
- (((_c = state.groupsMap[groupsHelper_1.ENTIRE_ORGANIZATION_GROUP_ID]) === null || _c === void 0 ? void 0 : _c.children) || []).map(el => el.id)), isClearButtonDisabled: memoizedIsClearButtonDisabled, isWithFooter: memoizedWithFooter && !isMobile, isMobile: isMobile, handleCheckboxChange: isCheckboxMode && !isMobile ? handleCheckboxChange : undefined, checkboxLabel: checkboxLabel, isChecked: state.isChecked });
512
- }
513
- return null;
514
- }, [state, isLoading, isQueryMode, fetchState === null || fetchState === void 0 ? void 0 : fetchState.isLoading, fetchState === null || fetchState === void 0 ? void 0 : fetchState.error, handleClearClick, handleCancelClick, handleApplyClick, hasApplyButton,
515
- memoizedWithFooter, translate, sortFn, listLimit, multiselect, currentAllSelected, handleBackButtonClick, handleSelectAllInSearch,
516
- handleSelectAllClick, handleSelect, handleChangeCurrentId, handleSingleSelection, isMobile, filterName, forceSelection, width,
517
- selectAllButton, memoizedIsApplyButtonDisabled, memoizedIsClearButtonDisabled, isCheckboxMode, handleCheckboxChange, checkboxLabel]);
518
- const currentStringFromSelected = isFullSelectionMode && hasApplyButton && state.globalIsAllSelected ||
519
- isFullSelectionMode && !hasApplyButton && state.isAllSelected ? (0, dropdownHelper_1.getStringFromAllSelected)(state.groupsMap, translate)
520
- : (0, dropdownHelper_1.getStringFromSelected)(hasApplyButton ? state.globalSelectedIds : state.selectedIds, state.groupsMapSelected, translate);
521
- const memoizedCurrentSelection = (0, react_1.useMemo)(() => showSelection && !state.inputValue ? currentStringFromSelected : "", [showSelection, state.inputValue, currentStringFromSelected]);
522
- const parentTriggerWidth = ((_b = comboboxRef.current) === null || _b === void 0 ? void 0 : _b.getBoundingClientRect().width) || 420;
523
- if (isReadOnly) {
524
- // TODO: how many items should we show?
525
- return (0, jsx_runtime_1.jsx)(reviewTextControl_1.ReviewTextControl, { value: (0, getSelectedValues_1.getSelectedValues)(state.groupsMapSelected) });
526
- }
527
- return (0, jsx_runtime_1.jsxs)("div", { className: containerClassName, ref: comboboxRef, children: [chip ? (0, jsx_runtime_1.jsx)(chip_1.Chip, { status: memoizedIsClearButtonDisabled ? undefined : chipStatus || "active", isOpen: state.isOpenCombo, disabled: disabled, onClick: handleTriggerClick, onClose: memoizedIsClearButtonDisabled ? undefined : handleClearClick, triggerRef: triggerRef, icon: chipIcon, id: chipId, children: currentStringFromSelected || chipName }) :
528
- (0, jsx_runtime_1.jsx)(dropdownTrigger_1.DropdownTrigger, Object.assign({ name: name, onBlur: onBlur, className: (0, classNames_1.classNames)([!width && !fullWidthTriggerButton && parentTriggerWidth < 420 && !searchField ? "zen-dropdown__trigger-button--width-parent" : ""]), currentSelection: memoizedCurrentSelection, isActive: state.isOpenCombo, id: inputId, disabled: disabled, count: showCounterPill ? countSelected : 0, fullWidth: fullWidthTriggerButton, inputValue: state.inputValue, placeholder: placeholder || translate("Filter by group"), searchField: searchField && !isMobile ? searchField : false, onSearchChange: onSearchChange, handleClick: handleTriggerClick, width: width && width > 420 ? 420 : width, title: title, triggerAriaLabel: triggerAriaLabel, triggerRef: triggerRef, inputRef: inputRef, buttonType: buttonType }, accessibilityProps)), (0, jsx_runtime_1.jsx)(dropdownPopup_1.DropdownPopup, { alignment: alignment, triggerRef: triggerRef, classNamePopup: classNamePopup, isMobile: isMobile, dialogAriaLabel: dialogAriaLabel, disabled: disabled, filterName: filterName, hasApplyButton: hasApplyButton, inputId: inputId, isClearButtonDisabled: memoizedIsClearButtonDisabled, isApplyButtonDisabled: memoizedIsApplyButtonDisabled, isWithFooter: memoizedWithFooter, isOpenCombo: state.isOpenCombo, searchField: searchField, placeholder: placeholder, inputValue: state.inputValue, handleApplyClick: handleApplyClick, handleClearClick: multiselect ? handleClearClick : handleSingleSelection.bind(this, true), handleTriggerClick: handleTriggerClick, onInputChange: onInputChange, inputRef: inputRef, contentRef: contentRef, onReadyForFocus: handleReadyForFocus, handleCheckboxChange: isCheckboxMode && isMobile ? handleCheckboxChange : undefined, checkboxLabel: checkboxLabel, isChecked: state.isChecked, isSearchInPopup: chip, mobileSheetStackingClassName: mobileSheetStackingClassName, children: getPopupContent })] });
797
+ backButtonName: state.currentId && state.groupsMap[state.currentId] ? (0, groupsHelper_1.getGroupDescription)(state.groupsMap[state.currentId], translate) : undefined,
798
+ filterName: isMobile ? undefined : filterName,
799
+ isAllSelected: currentAllSelected ? currentAllSelected : isSearchMode ? (0, dropdownHelper_1.isEveryItemSelected)((0, dropdownHelper_1.getListDataWithDisabled)(state.listData, state.isNestedList), state.selectedIds) : currentAllSelected === undefined ? (0, dropdownHelper_1.isAllChildrenSelected)(state, state.currentId || state.rootId) : false,
800
+ isMultiselect: multiselect,
801
+ forceSelection: forceSelection,
802
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
803
+ listData: currentListData,
804
+ width: width || currentWidth === 180 ? undefined : currentWidth,
805
+ minWidth: currentWidth,
806
+ hasSelectAllButton: selectAllButton && multiselect,
807
+ hasApplyButton: hasApplyButton,
808
+ isApplyDisabled: memoizedIsApplyButtonDisabled,
809
+ isSelectAllButtonDisable: currentListData.length === 0 || isSearchMode !== "" && state.isNestedList && (0, dropdownHelper_1.isAllItemsHasOneParent)(state.listData.filter(el => el.id !== state.rootId),
810
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
811
+ (((_c = state.groupsMap[state.rootId]) === null || _c === void 0 ? void 0 : _c.children) || []).map(el => el.id)),
812
+ isClearButtonDisabled: memoizedIsClearButtonDisabled,
813
+ isWithFooter: memoizedWithFooter && !isMobile,
814
+ isMobile: isMobile,
815
+ handleCheckboxChange: isCheckboxMode && !isMobile ? handleCheckboxChange : undefined,
816
+ checkboxLabel: checkboxLabel,
817
+ isChecked: state.isChecked
818
+ });
819
+ }
820
+ return null;
821
+ }, [state, isLoading, isQueryMode, fetchState === null || fetchState === void 0 ? void 0 : fetchState.isLoading, fetchState === null || fetchState === void 0 ? void 0 : fetchState.error, handleClearClick, handleCancelClick, handleApplyClick, hasApplyButton, memoizedWithFooter, translate, sortFn, listLimit, multiselect, currentAllSelected, handleBackButtonClick, handleSelectAllInSearch, handleSelectAllClick, handleSelect, handleChangeCurrentId, handleSingleSelection, isMobile, filterName, forceSelection, width, selectAllButton, memoizedIsApplyButtonDisabled, memoizedIsClearButtonDisabled, isCheckboxMode, handleCheckboxChange, checkboxLabel]);
822
+ const currentStringFromSelected = isFullSelectionMode && hasApplyButton && state.globalIsAllSelected || isFullSelectionMode && !hasApplyButton && state.isAllSelected ? (0, dropdownHelper_1.getStringFromAllSelected)(state.groupsMap, translate, state.rootId) : (0, dropdownHelper_1.getStringFromSelected)(hasApplyButton ? state.globalSelectedIds : state.selectedIds, state.groupsMapSelected, translate, state.rootId);
823
+ const memoizedCurrentSelection = (0, react_1.useMemo)(() => showSelection && !state.inputValue ? currentStringFromSelected : "", [showSelection, state.inputValue, currentStringFromSelected]);
824
+ const parentTriggerWidth = ((_b = comboboxRef.current) === null || _b === void 0 ? void 0 : _b.getBoundingClientRect().width) || 420;
825
+ if (isReadOnly) {
826
+ // TODO: how many items should we show?
827
+ return (0, jsx_runtime_1.jsx)(reviewTextControl_1.ReviewTextControl, {
828
+ value: (0, getSelectedValues_1.getSelectedValues)(state.groupsMapSelected)
829
+ });
830
+ }
831
+ return (0, jsx_runtime_1.jsxs)("div", {
832
+ className: containerClassName,
833
+ ref: comboboxRef,
834
+ children: [chip ? (0, jsx_runtime_1.jsx)(chip_1.Chip, {
835
+ status: memoizedIsClearButtonDisabled ? undefined : chipStatus || "active",
836
+ isOpen: state.isOpenCombo,
837
+ disabled: disabled,
838
+ onClick: handleTriggerClick,
839
+ onClose: memoizedIsClearButtonDisabled ? undefined : handleClearClick,
840
+ triggerRef: triggerRef,
841
+ icon: chipIcon,
842
+ id: chipId,
843
+ children: currentStringFromSelected || chipName
844
+ }) : (0, jsx_runtime_1.jsx)(dropdownTrigger_1.DropdownTrigger, Object.assign({
845
+ name: name,
846
+ onBlur: onBlur,
847
+ className: (0, classNames_1.classNames)([!width && !fullWidthTriggerButton && parentTriggerWidth < 420 && !searchField ? "zen-dropdown__trigger-button--width-parent" : "", isError ? "zen-dropdown__trigger-button--error" : ""]),
848
+ currentSelection: memoizedCurrentSelection,
849
+ isActive: state.isOpenCombo,
850
+ id: inputId,
851
+ isError: isError,
852
+ disabled: disabled,
853
+ count: showCounterPill ? countSelected : 0,
854
+ fullWidth: fullWidthTriggerButton,
855
+ inputValue: state.inputValue,
856
+ placeholder: placeholder || translate("Filter by group"),
857
+ searchField: searchField && !isMobile ? searchField : false,
858
+ onSearchChange: onSearchChange,
859
+ handleClick: handleTriggerClick,
860
+ width: width && width > 420 ? 420 : width,
861
+ title: title,
862
+ triggerAriaLabel: triggerAriaLabel,
863
+ triggerRef: triggerRef,
864
+ inputRef: inputRef,
865
+ buttonType: buttonType
866
+ }, accessibilityProps)), (0, jsx_runtime_1.jsx)(dropdownPopup_1.DropdownPopup, {
867
+ alignment: alignment,
868
+ triggerRef: triggerRef,
869
+ classNamePopup: classNamePopup,
870
+ isMobile: isMobile,
871
+ dialogAriaLabel: dialogAriaLabel,
872
+ disabled: disabled,
873
+ filterName: filterName,
874
+ hasApplyButton: hasApplyButton,
875
+ inputId: inputId,
876
+ isClearButtonDisabled: memoizedIsClearButtonDisabled,
877
+ isApplyButtonDisabled: memoizedIsApplyButtonDisabled,
878
+ isWithFooter: memoizedWithFooter,
879
+ isOpenCombo: state.isOpenCombo,
880
+ searchField: searchField,
881
+ placeholder: placeholder,
882
+ inputValue: state.inputValue,
883
+ handleApplyClick: handleApplyClick,
884
+ handleClearClick: multiselect ? handleClearClick : handleSingleSelection.bind(this, true),
885
+ handleTriggerClick: handleTriggerClick,
886
+ onInputChange: onInputChange,
887
+ inputRef: inputRef,
888
+ contentRef: contentRef,
889
+ onReadyForFocus: handleReadyForFocus,
890
+ handleCheckboxChange: isCheckboxMode && isMobile ? handleCheckboxChange : undefined,
891
+ checkboxLabel: checkboxLabel,
892
+ isChecked: state.isChecked,
893
+ isSearchInPopup: chip,
894
+ mobileSheetStackingClassName: mobileSheetStackingClassName,
895
+ children: getPopupContent
896
+ })]
897
+ });
529
898
  };
530
899
  exports.DropdownRaw = DropdownRaw;
531
900
  exports.DropdownRaw.displayName = "DropdownRaw";
532
- exports.TRANSLATIONS = [
533
- "Filter by group",
534
- "Open filter",
535
- "Clear search",
536
- "Select all",
537
- "Deselect all",
538
- "Clear",
539
- "Back",
540
- "No data"
541
- ];
901
+ exports.TRANSLATIONS = ["Filter by group", "Open filter", "Clear search", "Select all", "Deselect all", "Clear", "Back", "No data"];