@geotab/zenith 3.0.1 → 3.1.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 (262) hide show
  1. package/README.md +17 -0
  2. package/dist/advancedGroupsFilter/advancedGroupsFilter.d.ts +1 -0
  3. package/dist/advancedGroupsFilter/advancedGroupsFilter.js +2 -2
  4. package/dist/advancedGroupsFilter/advancedGroupsFilterFormSection.js +3 -1
  5. package/dist/chip/chip.js +5 -5
  6. package/dist/commonStyles/zIndex.less +5 -0
  7. package/dist/dateInput/dateInput.d.ts +2 -1
  8. package/dist/dateInput/dateInput.js +11 -2
  9. package/dist/dateRange/dateRange.js +9 -8
  10. package/dist/dropdown/dropdown.d.ts +2 -0
  11. package/dist/dropdown/dropdown.js +6 -5
  12. package/dist/dropdown/dropdownHelper.d.ts +4 -4
  13. package/dist/dropdown/dropdownHelper.js +2 -1
  14. package/dist/dropdown/dropdownList.js +2 -2
  15. package/dist/dropdown/dropdownPopup.d.ts +1 -0
  16. package/dist/dropdown/dropdownPopup.js +2 -2
  17. package/dist/dropdown/dropdownSearchableTrigger.js +1 -1
  18. package/dist/dropdown/stateReducer/stateReducer.d.ts +6 -2
  19. package/dist/dropdown/stateReducer/stateReducer.js +28 -42
  20. package/dist/dropdown/stateReducer/stateReducerHelper.d.ts +2 -0
  21. package/dist/dropdown/stateReducer/stateReducerHelper.js +12 -1
  22. package/dist/dropdown/useDropdownState.d.ts +1 -1
  23. package/dist/dropdown/useDropdownState.js +5 -2
  24. package/dist/filters/components/filtersContainer.d.ts +1 -0
  25. package/dist/filters/components/filtersContainer.js +10 -11
  26. package/dist/filters/components/filtersDateInput.d.ts +10 -0
  27. package/dist/filters/components/filtersDateInput.js +27 -0
  28. package/dist/filters/components/filtersDropdown.d.ts +5 -4
  29. package/dist/filters/components/filtersDropdown.js +3 -3
  30. package/dist/filters/components/filtersEmptySelectedList.d.ts +2 -0
  31. package/dist/filters/components/filtersEmptySelectedList.js +11 -0
  32. package/dist/filters/components/filtersItem.d.ts +5 -4
  33. package/dist/filters/components/filtersItem.js +2 -1
  34. package/dist/filters/components/filtersSaveModal.d.ts +3 -1
  35. package/dist/filters/components/filtersSaveModal.js +2 -2
  36. package/dist/filters/components/filtersSavedChipComponent.js +68 -6
  37. package/dist/filters/components/filtersSearch.d.ts +4 -4
  38. package/dist/filters/components/filtersSearch.js +20 -9
  39. package/dist/filters/components/filtersSearchItemData.js +18 -1
  40. package/dist/filters/components/filtersSearchList.d.ts +5 -1
  41. package/dist/filters/components/filtersSearchList.js +155 -27
  42. package/dist/filters/components/filtersSelect.d.ts +1 -0
  43. package/dist/filters/components/filtersSelect.js +35 -7
  44. package/dist/filters/components/filtersSelectListItem.d.ts +21 -15
  45. package/dist/filters/components/filtersSelectListItem.js +13 -3
  46. package/dist/filters/components/filtersSidePanel.d.ts +15 -0
  47. package/dist/filters/components/filtersSidePanel.js +212 -0
  48. package/dist/filters/components/filtersSidePanelChip.d.ts +9 -0
  49. package/dist/filters/components/filtersSidePanelChip.js +13 -0
  50. package/dist/filters/components/filtersSidePanelDropdown.d.ts +6 -0
  51. package/dist/filters/components/filtersSidePanelDropdown.js +85 -0
  52. package/dist/filters/components/filtersSidePanelItem.d.ts +16 -0
  53. package/dist/filters/components/filtersSidePanelItem.js +67 -0
  54. package/dist/filters/components/filtersSidePanelRange.d.ts +6 -0
  55. package/dist/filters/components/filtersSidePanelRange.js +28 -0
  56. package/dist/filters/filters.d.ts +5 -0
  57. package/dist/filters/filters.js +101 -38
  58. package/dist/filters/filtersHelper.d.ts +4 -2
  59. package/dist/filters/filtersHelper.js +40 -1
  60. package/dist/filters/filtersHooks.d.ts +12 -2
  61. package/dist/filters/filtersHooks.js +21 -3
  62. package/dist/formStepper/formStepper.d.ts +1 -1
  63. package/dist/formStepper/formStepper.js +5 -2
  64. package/dist/groupsFilter/groupsFilter.js +72 -37
  65. package/dist/groupsFilter/groupsFilterMenu.d.ts +1 -0
  66. package/dist/groupsFilter/groupsFilterMenu.js +2 -2
  67. package/dist/groupsFilter/groupsFilterTrigger.js +1 -1
  68. package/dist/images/imageLooking.d.ts +4 -0
  69. package/dist/images/imageLooking.js +16 -0
  70. package/dist/index.css +407 -83
  71. package/dist/index.d.ts +7 -4
  72. package/dist/index.js +26 -15
  73. package/dist/list/list.d.ts +3 -1
  74. package/dist/list/list.js +2 -2
  75. package/dist/mobileSheet/mobileSheet.d.ts +2 -0
  76. package/dist/mobileSheet/mobileSheet.js +4 -4
  77. package/dist/modal/modal.d.ts +1 -0
  78. package/dist/modal/modal.js +2 -2
  79. package/dist/radioGroup/radioGroup.d.ts +1 -0
  80. package/dist/radioGroup/radioGroup.js +3 -2
  81. package/dist/range/range.js +29 -10
  82. package/dist/searchInputRaw/searchInputRaw.js +1 -1
  83. package/dist/sidePanel/sidePanel.d.ts +1 -0
  84. package/dist/sidePanel/sidePanel.js +3 -3
  85. package/dist/tabs/tabItem/tabItem.d.ts +1 -0
  86. package/dist/tabs/tabItem/tabItem.js +2 -2
  87. package/dist/tabs/tabs.d.ts +1 -0
  88. package/dist/tabs/tabs.js +1 -1
  89. package/dist/utils/keyboardHelpers.d.ts +2 -0
  90. package/dist/utils/keyboardHelpers.js +49 -0
  91. package/dist/utils/localization/translations/cs-json.d.ts +1 -0
  92. package/dist/utils/localization/translations/cs-json.js +2 -1
  93. package/dist/utils/localization/translations/de-json.d.ts +1 -0
  94. package/dist/utils/localization/translations/de-json.js +2 -1
  95. package/dist/utils/localization/translations/en-json.d.ts +7 -0
  96. package/dist/utils/localization/translations/en-json.js +8 -1
  97. package/dist/utils/localization/translations/es-json.d.ts +1 -0
  98. package/dist/utils/localization/translations/es-json.js +2 -1
  99. package/dist/utils/localization/translations/fr-FR-json.d.ts +1 -0
  100. package/dist/utils/localization/translations/fr-FR-json.js +2 -1
  101. package/dist/utils/localization/translations/fr-json.d.ts +1 -0
  102. package/dist/utils/localization/translations/fr-json.js +2 -1
  103. package/dist/utils/localization/translations/id-json.d.ts +1 -0
  104. package/dist/utils/localization/translations/id-json.js +2 -1
  105. package/dist/utils/localization/translations/it-json.d.ts +1 -0
  106. package/dist/utils/localization/translations/it-json.js +2 -1
  107. package/dist/utils/localization/translations/ja-json.d.ts +1 -0
  108. package/dist/utils/localization/translations/ja-json.js +2 -1
  109. package/dist/utils/localization/translations/ko-KR-json.d.ts +1 -0
  110. package/dist/utils/localization/translations/ko-KR-json.js +2 -1
  111. package/dist/utils/localization/translations/ms-json.d.ts +1 -0
  112. package/dist/utils/localization/translations/ms-json.js +2 -1
  113. package/dist/utils/localization/translations/nl-json.d.ts +1 -0
  114. package/dist/utils/localization/translations/nl-json.js +2 -1
  115. package/dist/utils/localization/translations/pl-json.d.ts +1 -0
  116. package/dist/utils/localization/translations/pl-json.js +2 -1
  117. package/dist/utils/localization/translations/pt-BR-json.d.ts +1 -0
  118. package/dist/utils/localization/translations/pt-BR-json.js +2 -1
  119. package/dist/utils/localization/translations/sv-json.d.ts +1 -0
  120. package/dist/utils/localization/translations/sv-json.js +2 -1
  121. package/dist/utils/localization/translations/th-json.d.ts +1 -0
  122. package/dist/utils/localization/translations/th-json.js +2 -1
  123. package/dist/utils/localization/translations/tr-json.d.ts +1 -0
  124. package/dist/utils/localization/translations/tr-json.js +2 -1
  125. package/dist/utils/localization/translations/zh-Hans-json.d.ts +1 -0
  126. package/dist/utils/localization/translations/zh-Hans-json.js +2 -1
  127. package/dist/utils/localization/translations/zh-TW-json.d.ts +1 -0
  128. package/dist/utils/localization/translations/zh-TW-json.js +2 -1
  129. package/esm/advancedGroupsFilter/advancedGroupsFilter.d.ts +1 -0
  130. package/esm/advancedGroupsFilter/advancedGroupsFilter.js +2 -2
  131. package/esm/advancedGroupsFilter/advancedGroupsFilterFormSection.js +3 -1
  132. package/esm/chip/chip.js +5 -5
  133. package/esm/dateInput/dateInput.d.ts +2 -1
  134. package/esm/dateInput/dateInput.js +11 -2
  135. package/esm/dateRange/dateRange.js +9 -8
  136. package/esm/dropdown/dropdown.d.ts +2 -0
  137. package/esm/dropdown/dropdown.js +5 -4
  138. package/esm/dropdown/dropdownHelper.d.ts +4 -4
  139. package/esm/dropdown/dropdownHelper.js +2 -1
  140. package/esm/dropdown/dropdownList.js +2 -2
  141. package/esm/dropdown/dropdownPopup.d.ts +1 -0
  142. package/esm/dropdown/dropdownPopup.js +2 -2
  143. package/esm/dropdown/dropdownSearchableTrigger.js +1 -1
  144. package/esm/dropdown/stateReducer/stateReducer.d.ts +6 -2
  145. package/esm/dropdown/stateReducer/stateReducer.js +29 -43
  146. package/esm/dropdown/stateReducer/stateReducerHelper.d.ts +2 -0
  147. package/esm/dropdown/stateReducer/stateReducerHelper.js +10 -0
  148. package/esm/dropdown/useDropdownState.d.ts +1 -1
  149. package/esm/dropdown/useDropdownState.js +5 -2
  150. package/esm/filters/components/filtersContainer.d.ts +1 -0
  151. package/esm/filters/components/filtersContainer.js +12 -13
  152. package/esm/filters/components/filtersDateInput.d.ts +10 -0
  153. package/esm/filters/components/filtersDateInput.js +23 -0
  154. package/esm/filters/components/filtersDropdown.d.ts +5 -4
  155. package/esm/filters/components/filtersDropdown.js +3 -3
  156. package/esm/filters/components/filtersEmptySelectedList.d.ts +2 -0
  157. package/esm/filters/components/filtersEmptySelectedList.js +7 -0
  158. package/esm/filters/components/filtersItem.d.ts +5 -4
  159. package/esm/filters/components/filtersItem.js +2 -1
  160. package/esm/filters/components/filtersSaveModal.d.ts +3 -1
  161. package/esm/filters/components/filtersSaveModal.js +2 -2
  162. package/esm/filters/components/filtersSavedChipComponent.js +68 -6
  163. package/esm/filters/components/filtersSearch.d.ts +4 -4
  164. package/esm/filters/components/filtersSearch.js +20 -9
  165. package/esm/filters/components/filtersSearchItemData.js +18 -1
  166. package/esm/filters/components/filtersSearchList.d.ts +5 -1
  167. package/esm/filters/components/filtersSearchList.js +156 -28
  168. package/esm/filters/components/filtersSelect.d.ts +1 -0
  169. package/esm/filters/components/filtersSelect.js +36 -8
  170. package/esm/filters/components/filtersSelectListItem.d.ts +21 -15
  171. package/esm/filters/components/filtersSelectListItem.js +13 -3
  172. package/esm/filters/components/filtersSidePanel.d.ts +15 -0
  173. package/esm/filters/components/filtersSidePanel.js +208 -0
  174. package/esm/filters/components/filtersSidePanelChip.d.ts +9 -0
  175. package/esm/filters/components/filtersSidePanelChip.js +9 -0
  176. package/esm/filters/components/filtersSidePanelDropdown.d.ts +6 -0
  177. package/esm/filters/components/filtersSidePanelDropdown.js +81 -0
  178. package/esm/filters/components/filtersSidePanelItem.d.ts +16 -0
  179. package/esm/filters/components/filtersSidePanelItem.js +63 -0
  180. package/esm/filters/components/filtersSidePanelRange.d.ts +6 -0
  181. package/esm/filters/components/filtersSidePanelRange.js +24 -0
  182. package/esm/filters/filters.d.ts +5 -0
  183. package/esm/filters/filters.js +101 -38
  184. package/esm/filters/filtersHelper.d.ts +4 -2
  185. package/esm/filters/filtersHelper.js +37 -0
  186. package/esm/filters/filtersHooks.d.ts +12 -2
  187. package/esm/filters/filtersHooks.js +19 -2
  188. package/esm/formStepper/formStepper.d.ts +1 -1
  189. package/esm/formStepper/formStepper.js +5 -2
  190. package/esm/groupsFilter/groupsFilter.js +72 -37
  191. package/esm/groupsFilter/groupsFilterMenu.d.ts +1 -0
  192. package/esm/groupsFilter/groupsFilterMenu.js +2 -2
  193. package/esm/groupsFilter/groupsFilterTrigger.js +1 -1
  194. package/esm/images/imageLooking.d.ts +4 -0
  195. package/esm/images/imageLooking.js +12 -0
  196. package/esm/index.d.ts +7 -4
  197. package/esm/index.js +6 -3
  198. package/esm/list/list.d.ts +3 -1
  199. package/esm/list/list.js +2 -2
  200. package/esm/mobileSheet/mobileSheet.d.ts +2 -0
  201. package/esm/mobileSheet/mobileSheet.js +4 -4
  202. package/esm/modal/modal.d.ts +1 -0
  203. package/esm/modal/modal.js +2 -2
  204. package/esm/radioGroup/radioGroup.d.ts +1 -0
  205. package/esm/radioGroup/radioGroup.js +3 -2
  206. package/esm/range/range.js +29 -10
  207. package/esm/searchInputRaw/searchInputRaw.js +1 -1
  208. package/esm/sidePanel/sidePanel.d.ts +1 -0
  209. package/esm/sidePanel/sidePanel.js +3 -3
  210. package/esm/tabs/tabItem/tabItem.d.ts +1 -0
  211. package/esm/tabs/tabItem/tabItem.js +2 -2
  212. package/esm/tabs/tabs.d.ts +1 -0
  213. package/esm/tabs/tabs.js +1 -1
  214. package/esm/utils/keyboardHelpers.d.ts +2 -0
  215. package/esm/utils/keyboardHelpers.js +44 -0
  216. package/esm/utils/localization/translations/cs-json.d.ts +1 -0
  217. package/esm/utils/localization/translations/cs-json.js +2 -1
  218. package/esm/utils/localization/translations/de-json.d.ts +1 -0
  219. package/esm/utils/localization/translations/de-json.js +2 -1
  220. package/esm/utils/localization/translations/en-json.d.ts +7 -0
  221. package/esm/utils/localization/translations/en-json.js +8 -1
  222. package/esm/utils/localization/translations/es-json.d.ts +1 -0
  223. package/esm/utils/localization/translations/es-json.js +2 -1
  224. package/esm/utils/localization/translations/fr-FR-json.d.ts +1 -0
  225. package/esm/utils/localization/translations/fr-FR-json.js +2 -1
  226. package/esm/utils/localization/translations/fr-json.d.ts +1 -0
  227. package/esm/utils/localization/translations/fr-json.js +2 -1
  228. package/esm/utils/localization/translations/id-json.d.ts +1 -0
  229. package/esm/utils/localization/translations/id-json.js +2 -1
  230. package/esm/utils/localization/translations/it-json.d.ts +1 -0
  231. package/esm/utils/localization/translations/it-json.js +2 -1
  232. package/esm/utils/localization/translations/ja-json.d.ts +1 -0
  233. package/esm/utils/localization/translations/ja-json.js +2 -1
  234. package/esm/utils/localization/translations/ko-KR-json.d.ts +1 -0
  235. package/esm/utils/localization/translations/ko-KR-json.js +2 -1
  236. package/esm/utils/localization/translations/ms-json.d.ts +1 -0
  237. package/esm/utils/localization/translations/ms-json.js +2 -1
  238. package/esm/utils/localization/translations/nl-json.d.ts +1 -0
  239. package/esm/utils/localization/translations/nl-json.js +2 -1
  240. package/esm/utils/localization/translations/pl-json.d.ts +1 -0
  241. package/esm/utils/localization/translations/pl-json.js +2 -1
  242. package/esm/utils/localization/translations/pt-BR-json.d.ts +1 -0
  243. package/esm/utils/localization/translations/pt-BR-json.js +2 -1
  244. package/esm/utils/localization/translations/sv-json.d.ts +1 -0
  245. package/esm/utils/localization/translations/sv-json.js +2 -1
  246. package/esm/utils/localization/translations/th-json.d.ts +1 -0
  247. package/esm/utils/localization/translations/th-json.js +2 -1
  248. package/esm/utils/localization/translations/tr-json.d.ts +1 -0
  249. package/esm/utils/localization/translations/tr-json.js +2 -1
  250. package/esm/utils/localization/translations/zh-Hans-json.d.ts +1 -0
  251. package/esm/utils/localization/translations/zh-Hans-json.js +2 -1
  252. package/esm/utils/localization/translations/zh-TW-json.d.ts +1 -0
  253. package/esm/utils/localization/translations/zh-TW-json.js +2 -1
  254. package/package.json +1 -1
  255. package/dist/filters/components/filtersModal.d.ts +0 -17
  256. package/dist/filters/components/filtersModal.js +0 -107
  257. package/dist/filters/components/filtersModalItem.d.ts +0 -9
  258. package/dist/filters/components/filtersModalItem.js +0 -74
  259. package/esm/filters/components/filtersModal.d.ts +0 -17
  260. package/esm/filters/components/filtersModal.js +0 -103
  261. package/esm/filters/components/filtersModalItem.d.ts +0 -9
  262. package/esm/filters/components/filtersModalItem.js +0 -70
@@ -1,15 +1,21 @@
1
- export declare const FiltersSelectListItem: ({ id, name, isActive, onClick, className }: {
2
- id: any;
3
- name: any;
4
- isActive: any;
5
- onClick: any;
6
- className?: string | undefined;
7
- }) => import("react/jsx-runtime").JSX.Element;
8
- export declare const FiltersSelectListExpandableItem: ({ id, name, content, isActive, onClick, className }: {
9
- id: any;
10
- name: any;
11
- content: any;
12
- isActive: any;
13
- onClick: any;
14
- className?: string | undefined;
15
- }) => import("react/jsx-runtime").JSX.Element;
1
+ /// <reference types="react" />
2
+ interface IFiltersSelectListItem {
3
+ id: string;
4
+ name: string;
5
+ isActive: boolean;
6
+ onClick: () => void;
7
+ className?: string;
8
+ }
9
+ export declare const FiltersSelectListItem: ({ id, name, isActive, onClick, className }: IFiltersSelectListItem) => import("react/jsx-runtime").JSX.Element;
10
+ interface IFiltersSelectListExpandableItem {
11
+ id: string;
12
+ name: string;
13
+ content: React.ReactNode;
14
+ isActive: boolean;
15
+ isExpanded: boolean;
16
+ onClick: () => void;
17
+ className?: string;
18
+ onExpandItem?: () => void;
19
+ }
20
+ export declare const FiltersSelectListExpandableItem: ({ id, name, content, isActive, isExpanded, onClick, className, onExpandItem }: IFiltersSelectListExpandableItem) => import("react/jsx-runtime").JSX.Element;
21
+ export {};
@@ -2,13 +2,23 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.FiltersSelectListExpandableItem = exports.FiltersSelectListItem = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const button_1 = require("../../button/button");
5
7
  const classNames_1 = require("../../commonHelpers/classNames/classNames");
6
8
  const useUniqueId_1 = require("../../commonHelpers/useUniqueId");
7
- const iconChevronBottom_1 = require("../../icons/iconChevronBottom");
9
+ const iconChevronDownSmall_1 = require("../../icons/iconChevronDownSmall");
10
+ const useLanguage_1 = require("../../utils/localization/useLanguage");
8
11
  const FiltersSelectListItem = ({ id, name, isActive, onClick, className = "" }) => (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)("button", { type: "button", className: (0, classNames_1.classNames)(["zen-filters-select__list-item", isActive ? "zen-filters-select__list-item--active" : "", className]), id: id, onClick: onClick, children: name }) });
9
12
  exports.FiltersSelectListItem = FiltersSelectListItem;
10
- const FiltersSelectListExpandableItem = ({ id, name, content, isActive, onClick, className = "" }) => {
13
+ const FiltersSelectListExpandableItem = ({ id, name, content, isActive, isExpanded, onClick, className = "", onExpandItem }) => {
11
14
  const ariaControlsId = (0, useUniqueId_1.useUniqueId)();
12
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("button", { type: "button", "aria-expanded": isActive, "aria-controls": ariaControlsId, className: (0, classNames_1.classNames)(["zen-filters-select__list-item", isActive ? "zen-filters-select__list-item--active" : "", className]), id: id, onClick: onClick, children: [name, (0, jsx_runtime_1.jsx)(iconChevronBottom_1.IconChevronBottom, { size: "large", className: (0, classNames_1.classNames)(["zen-filters-select__item-icon", isActive ? "zen-filters-select__item-icon--rotated" : ""]) })] }), (0, jsx_runtime_1.jsx)("div", { id: ariaControlsId, "aria-labelledby": id, role: "region", className: (0, classNames_1.classNames)(["zen-filters-select__item-content", content ? "" : "zen-filters-select__item-content--hidden"]), children: content })] }));
15
+ const { translate } = (0, useLanguage_1.useLanguage)();
16
+ const handleExpandItem = (0, react_1.useCallback)((e) => {
17
+ e.stopPropagation();
18
+ if (onExpandItem) {
19
+ onExpandItem();
20
+ }
21
+ }, [onExpandItem]);
22
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { className: (0, classNames_1.classNames)(["zen-filters-select__list-item-wrapper", isExpanded ? "zen-filters-select__list-item-wrapper--expanded" : "", className]), children: [(0, jsx_runtime_1.jsx)("button", { type: "button", className: (0, classNames_1.classNames)(["zen-filters-select__list-item"]), id: id, onClick: onClick, children: (0, jsx_runtime_1.jsxs)("div", { className: "zen-filters-select__list-item-title", children: [name, isActive ? (0, jsx_runtime_1.jsx)("div", { className: "zen-filters-select__item-active-indicator" }) : null] }) }), (0, jsx_runtime_1.jsx)(button_1.Button, { type: "tertiary-black", onClick: handleExpandItem, className: "zen-filters-select__item-button", "aria-expanded": isExpanded, "aria-controls": ariaControlsId, "aria-label": isExpanded ? `${translate("Collapse")} ${name}` : `${translate("Expand")} ${name}`, children: (0, jsx_runtime_1.jsx)(iconChevronDownSmall_1.IconChevronDownSmall, { size: "large", className: (0, classNames_1.classNames)(["zen-filters-select__item-icon", isExpanded ? "zen-filters-select__item-icon--rotated" : ""]) }) })] }), (0, jsx_runtime_1.jsx)("div", { id: ariaControlsId, "aria-labelledby": id, role: "region", className: (0, classNames_1.classNames)(["zen-filters-select__item-content", content ? "" : "zen-filters-select__item-content--hidden"]), children: content })] }));
13
23
  };
14
24
  exports.FiltersSelectListExpandableItem = FiltersSelectListExpandableItem;
@@ -0,0 +1,15 @@
1
+ import { ReactElement } from "react";
2
+ import { TFiltersComponentsItemState, TFiltersComponentsProps } from "./filtersItem";
3
+ import "./filtersSidePanel.less";
4
+ export interface IFiltersSidePanel {
5
+ isOpen: boolean;
6
+ onClose: () => void;
7
+ onApply: (state: Record<string, TFiltersComponentsItemState>) => void;
8
+ onPin?: () => void;
9
+ isPinned?: boolean;
10
+ filters: ReactElement<TFiltersComponentsProps>[];
11
+ externalState?: Record<string, TFiltersComponentsItemState>;
12
+ setExternalState?: (newState: Partial<Record<string, TFiltersComponentsItemState>>) => void;
13
+ triggerRef: React.RefObject<HTMLElement>;
14
+ }
15
+ export declare const FiltersSidePanel: ({ isOpen, onApply, onClose, onPin, isPinned, filters, externalState, setExternalState, triggerRef }: IFiltersSidePanel) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,212 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FiltersSidePanel = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const useLanguage_1 = require("../../utils/localization/useLanguage");
7
+ const useUniqueId_1 = require("../../commonHelpers/useUniqueId");
8
+ const useMobile_1 = require("../../commonHelpers/hooks/useMobile");
9
+ const useBodyScroll_1 = require("../../utils/useBodyScroll");
10
+ const shield_1 = require("../../shield/shield");
11
+ const react_dom_1 = require("react-dom");
12
+ const sidePanel_1 = require("../../sidePanel/sidePanel");
13
+ const classNames_1 = require("../../commonHelpers/classNames/classNames");
14
+ const themeContext_1 = require("../../utils/theme/themeContext");
15
+ const textIconButton_1 = require("../../textIconButton/textIconButton");
16
+ const iconClose_1 = require("../../icons/iconClose");
17
+ const button_1 = require("../../button/button");
18
+ const footerButtons_1 = require("../../footerButtons/footerButtons");
19
+ const iconDisk_1 = require("../../icons/iconDisk");
20
+ const iconPin2_1 = require("../../icons/iconPin2");
21
+ const filtersSavedItemsProvider_1 = require("./filtersSavedItemsProvider");
22
+ const useDriveClassName_1 = require("../../utils/theme/useDriveClassName");
23
+ const filtersSelect_1 = require("./filtersSelect");
24
+ const filtersHelper_1 = require("../filtersHelper");
25
+ const tabs_1 = require("../../tabs/tabs");
26
+ const filtersSidePanelItem_1 = require("./filtersSidePanelItem");
27
+ const filtersSaveModal_1 = require("./filtersSaveModal");
28
+ const isElementsEqual_1 = require("../../utils/compareElementsUtils/isElementsEqual");
29
+ const filtersEmptySelectedList_1 = require("./filtersEmptySelectedList");
30
+ const SELECTED_TAB_ID = "Selected";
31
+ const getSelectedOption = (translate) => ({
32
+ id: SELECTED_TAB_ID,
33
+ name: translate("Selected")
34
+ });
35
+ const FiltersSidePanel = ({ isOpen, onApply, onClose, onPin, isPinned, filters, externalState, setExternalState, triggerRef }) => {
36
+ var _a;
37
+ const { translate } = (0, useLanguage_1.useLanguage)();
38
+ const isLongTextLanguages = (0, react_1.useMemo)(() => `${translate("Reset")}${translate("Cancel")}${translate("Apply")}`.length > 31, [translate]);
39
+ const dataShieldId = (0, useUniqueId_1.useUniqueId)();
40
+ const iconDriveClassName = (0, useDriveClassName_1.useDriveClassName)("icon");
41
+ const { dark } = (0, react_1.useContext)(themeContext_1.themeContext);
42
+ const isMobile = (0, useMobile_1.useMobile)();
43
+ const { setScrollHidden, resetScroll } = (0, useBodyScroll_1.useBodyScroll)();
44
+ const { onSave } = (0, filtersSavedItemsProvider_1.useFiltersSavedItems)();
45
+ const [activeTabId, setActiveTabId] = (0, react_1.useState)(filtersSelect_1.ALL_SELECT_OPTION_ID);
46
+ const [isSaveModalOpen, setIsSaveModalOpen] = (0, react_1.useState)(false);
47
+ const [filtersInternalState, setFiltersInternalState] = (0, react_1.useState)((0, filtersHelper_1.createStateObject)(filters, "state"));
48
+ const [initialExternalState, setInitialExternalState] = (0, react_1.useState)(externalState);
49
+ const prevIsOpenRef = (0, react_1.useRef)(false);
50
+ const [selectedIds, setSelectedIds] = (0, react_1.useState)([]);
51
+ const [errorItems, setErrorItems] = (0, react_1.useState)(new Set());
52
+ const saveButtonRef = (0, react_1.useRef)(null);
53
+ const externalMode = (0, react_1.useMemo)(() => {
54
+ if (externalState === undefined || setExternalState === undefined) {
55
+ return false;
56
+ }
57
+ return true;
58
+ }, [externalState, setExternalState]);
59
+ const handleInternalFiltersStateChange = (0, react_1.useCallback)((id) => (newState) => {
60
+ setFiltersInternalState((prevState) => (Object.assign(Object.assign({}, prevState), { [id]: newState })));
61
+ }, []);
62
+ const handleExternalFiltersStateChange = (0, react_1.useCallback)((id) => (newState) => {
63
+ setExternalState && setExternalState({ [id]: newState });
64
+ }, [setExternalState]);
65
+ const currentState = (0, react_1.useMemo)(() => externalMode ? externalState
66
+ : filtersInternalState, [externalMode, externalState, filtersInternalState]);
67
+ const currentFilters = (0, react_1.useMemo)(() => filters.filter((item) => currentState.hasOwnProperty(item.props.id)
68
+ && (typeof item.props.visible === "boolean" ? item.props.visible
69
+ : item.props.visible === undefined ? true : (item.props.visible([filtersSelect_1.ALL_SELECT_OPTION_ID], currentState) || item.props.visible([filtersSelect_1.ALL_SELECT_OPTION_ID])))), [currentState, filters]);
70
+ const inhibitedFilters = (0, react_1.useMemo)(() => {
71
+ const inhibited = new Set();
72
+ currentFilters.forEach((item) => {
73
+ if (item.props.inhibit && item.props.inhibit.length > 0) {
74
+ item.props.inhibit.forEach((id) => inhibited.add(id));
75
+ }
76
+ });
77
+ return inhibited;
78
+ }, [currentFilters]);
79
+ const filteredCurrentFilters = (0, react_1.useMemo)(() => currentFilters.filter((item) => !externalMode ? !inhibitedFilters.has(item.props.id) : true), [currentFilters, externalMode, inhibitedFilters]);
80
+ const handleReadyForFocus = (0, react_1.useCallback)((isCurrentOpen) => {
81
+ if (!isCurrentOpen) {
82
+ triggerRef.current.focus();
83
+ return;
84
+ }
85
+ }, [triggerRef]);
86
+ (0, react_1.useEffect)(() => {
87
+ const handleOpen = () => {
88
+ setScrollHidden();
89
+ };
90
+ const handleClose = () => {
91
+ resetScroll();
92
+ };
93
+ if (isOpen) {
94
+ handleOpen();
95
+ }
96
+ else {
97
+ handleClose();
98
+ }
99
+ return () => { handleClose(); };
100
+ }, [isOpen, setScrollHidden, resetScroll]);
101
+ const handleClearClick = (0, react_1.useCallback)(() => {
102
+ const newState = (0, filtersHelper_1.createStateObject)(filters, "defaultState");
103
+ externalMode && setExternalState ? setExternalState(Object.assign({}, newState)) : setFiltersInternalState(newState);
104
+ }, [externalMode, filters, setExternalState]);
105
+ const handleApplyClick = (0, react_1.useCallback)(() => {
106
+ const stateForApply = externalMode ? currentState : {};
107
+ if (!externalMode) {
108
+ Object.keys(currentState).forEach(key => {
109
+ if (!inhibitedFilters.has(key)) {
110
+ stateForApply[key] = currentState[key];
111
+ }
112
+ });
113
+ }
114
+ onApply(stateForApply);
115
+ onClose();
116
+ }, [currentState, externalMode, inhibitedFilters, onApply, onClose]);
117
+ const handleCancelClick = (0, react_1.useCallback)(() => {
118
+ const newState = (0, filtersHelper_1.createStateObject)(filters, "state");
119
+ externalMode && setExternalState ? setExternalState(Object.assign({}, newState)) : setFiltersInternalState(newState);
120
+ onClose();
121
+ }, [externalMode, filters, onClose, setExternalState]);
122
+ const handleExternalModeClose = (0, react_1.useCallback)(() => {
123
+ if (!(externalMode && initialExternalState && setExternalState)) {
124
+ return;
125
+ }
126
+ setExternalState(initialExternalState);
127
+ onClose();
128
+ }, [externalMode, initialExternalState, onClose, setExternalState]);
129
+ const toggleSaveModal = (0, react_1.useCallback)(() => {
130
+ var _a;
131
+ isSaveModalOpen && ((_a = saveButtonRef.current) === null || _a === void 0 ? void 0 : _a.focus());
132
+ setIsSaveModalOpen(val => !val);
133
+ }, [isSaveModalOpen]);
134
+ const handleSaveFilters = (0, react_1.useCallback)((filterName) => {
135
+ const stateForApply = externalMode ? currentState : {};
136
+ if (!externalMode) {
137
+ Object.keys(currentState).forEach(key => {
138
+ if (!inhibitedFilters.has(key)) {
139
+ stateForApply[key] = currentState[key];
140
+ }
141
+ });
142
+ }
143
+ onSave && onSave(filterName, stateForApply);
144
+ }, [externalMode, currentState, onSave, inhibitedFilters]);
145
+ const sidePanelItemChangeHandler = (0, react_1.useCallback)((id) => externalMode ? handleExternalFiltersStateChange(id) : handleInternalFiltersStateChange(id), [externalMode, handleExternalFiltersStateChange, handleInternalFiltersStateChange]);
146
+ const handleErrorCheck = (0, react_1.useCallback)((id) => (isError) => {
147
+ if (isError && errorItems.has(id) || !isError && !errorItems.has(id)) {
148
+ return;
149
+ }
150
+ const newErrorItems = new Set(errorItems);
151
+ newErrorItems[isError ? "add" : "delete"](id);
152
+ setErrorItems(newErrorItems);
153
+ }, [errorItems]);
154
+ const tabsContent = (0, react_1.useMemo)(() => filteredCurrentFilters
155
+ .map((item) => ((0, jsx_runtime_1.jsx)(filtersSidePanelItem_1.FiltersSidePanelItem, { item: item, itemState: currentState[item.props.id], changeHandler: sidePanelItemChangeHandler(item.props.id), errorCheck: handleErrorCheck(item.props.id) }, item.props.id))), [filteredCurrentFilters, currentState, sidePanelItemChangeHandler, handleErrorCheck]);
156
+ const defaultStateObject = (0, react_1.useMemo)(() => (0, filtersHelper_1.createStateObject)(filteredCurrentFilters, "defaultState"), [filteredCurrentFilters]);
157
+ const getSelectedIds = (0, react_1.useCallback)(() => {
158
+ const selected = [];
159
+ filteredCurrentFilters.forEach((el) => {
160
+ const itemState = currentState[el.props.id];
161
+ const defaultState = defaultStateObject[el.props.id];
162
+ if (!(0, isElementsEqual_1.isElementsEqual)(itemState, defaultState) && !inhibitedFilters.has(el.props.id)) {
163
+ selected.push(el.props.id);
164
+ }
165
+ });
166
+ return selected;
167
+ }, [currentState, defaultStateObject, filteredCurrentFilters, inhibitedFilters]);
168
+ const tabOptions = (0, react_1.useMemo)(() => [
169
+ (0, filtersSelect_1.getAllOption)(translate),
170
+ Object.assign(Object.assign({}, getSelectedOption(translate)), { quantity: getSelectedIds().length || undefined })
171
+ ], [getSelectedIds, translate]);
172
+ const onTabChange = (newVal) => {
173
+ setActiveTabId(newVal);
174
+ };
175
+ const selectedTabsContent = (0, react_1.useMemo)(() => selectedIds.length ? filteredCurrentFilters.filter((el) => selectedIds.includes(el.props.id))
176
+ .map((item) => ((0, jsx_runtime_1.jsx)(filtersSidePanelItem_1.FiltersSidePanelItem, { item: item, itemState: currentState[item.props.id], changeHandler: sidePanelItemChangeHandler(item.props.id), errorCheck: handleErrorCheck(item.props.id) }, item.props.id)))
177
+ : (0, jsx_runtime_1.jsx)(filtersEmptySelectedList_1.FiltersEmptySelectedList, {}), [selectedIds, filteredCurrentFilters, currentState, sidePanelItemChangeHandler, handleErrorCheck]);
178
+ (0, react_1.useEffect)(() => {
179
+ if (!isOpen) {
180
+ return;
181
+ }
182
+ if (activeTabId === SELECTED_TAB_ID) {
183
+ return;
184
+ }
185
+ setSelectedIds(getSelectedIds());
186
+ }, [activeTabId, getSelectedIds, isOpen]);
187
+ const resetInitialComponentState = (0, react_1.useCallback)(() => {
188
+ setIsSaveModalOpen(false);
189
+ setActiveTabId(filtersSelect_1.ALL_SELECT_OPTION_ID);
190
+ setFiltersInternalState((0, filtersHelper_1.createStateObject)(filters, "state"));
191
+ setInitialExternalState(externalState);
192
+ setSelectedIds([]);
193
+ setSelectedIds(getSelectedIds());
194
+ }, [externalState, filters, getSelectedIds]);
195
+ (0, react_1.useEffect)(() => {
196
+ if (isOpen !== prevIsOpenRef.current) {
197
+ prevIsOpenRef.current = isOpen;
198
+ isOpen && resetInitialComponentState();
199
+ }
200
+ }, [isOpen, resetInitialComponentState]);
201
+ const handleHidePanel = (0, react_1.useCallback)((reason, shieldId) => {
202
+ if (isSaveModalOpen) {
203
+ return;
204
+ }
205
+ if (reason === sidePanel_1.SidePanelCloseReason.ClickOutside && shieldId === dataShieldId || reason === sidePanel_1.SidePanelCloseReason.Escape) {
206
+ onClose();
207
+ return;
208
+ }
209
+ }, [isSaveModalOpen, dataShieldId, onClose]);
210
+ return (0, jsx_runtime_1.jsxs)(react_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(shield_1.Shield, { className: "zen-high-level-shield", dataShieldId: dataShieldId, isVisible: isOpen }), (0, react_dom_1.createPortal)((0, jsx_runtime_1.jsx)(sidePanel_1.SidePanel, { triggerRef: triggerRef, isOpen: isOpen, label: translate("All Filters"), onHidePanel: handleHidePanel, className: (0, classNames_1.classNames)(["zen-side-panel-filters", dark ? "zen-dark" : ""]), onTransitionEnd: handleReadyForFocus, children: (0, jsx_runtime_1.jsxs)("div", { className: "zen-side-panel-filters-wrapper", children: [(0, jsx_runtime_1.jsxs)("div", { className: "zen-side-panel-filters__header", children: [(0, jsx_runtime_1.jsx)("div", { className: "zen-side-panel-filters__title-wrapper", children: (0, jsx_runtime_1.jsx)("div", { className: "zen-side-panel-filters__title zen-ellipsis", children: translate("All Filters") }) }), (0, jsx_runtime_1.jsxs)("div", { className: "zen-side-panel-filters__header-buttons", children: [onSave && (0, jsx_runtime_1.jsx)(button_1.Button, { type: "tertiary", ref: saveButtonRef, className: "zen-side-panel-filters__save-button zen-side-panel-filters__header-button", title: translate("Save"), "aria-label": translate("Save"), onClick: toggleSaveModal, children: (0, jsx_runtime_1.jsx)(iconDisk_1.IconDisk, { description: translate("Save"), className: "svgIcon", size: iconDriveClassName ? "huge" : "large" }) }), onPin && (0, jsx_runtime_1.jsx)(button_1.Button, { type: "tertiary", className: (0, classNames_1.classNames)(["zen-side-panel-filters__pin-button", isPinned ? "zen-side-panel-filters__header-button--active" : "", "zen-side-panel-filters__header-button"]), title: translate("Pin"), "aria-label": translate("Pin"), onClick: onPin, children: (0, jsx_runtime_1.jsx)(iconPin2_1.IconPin2, { description: translate("Pin"), className: "svgIcon", size: iconDriveClassName ? "huge" : "large" }) }), (0, jsx_runtime_1.jsx)(textIconButton_1.TextIconButton, { type: "tertiary-black", className: "zen-side-panel-filters__close-button", icon: iconClose_1.IconClose, iconSize: "large", onClick: externalMode ? handleExternalModeClose : onClose, iconPosition: textIconButton_1.ButtonIconPosition.Start, title: translate("Close") })] })] }), (0, jsx_runtime_1.jsx)(tabs_1.Tabs, { activeTabId: activeTabId, className: "zen-side-panel-filters__tab-header", onTabChange: onTabChange, tabs: tabOptions }), (0, jsx_runtime_1.jsxs)("div", { className: "zen-side-panel-filters__content", children: [(0, jsx_runtime_1.jsx)("div", { id: `panel-${filtersSelect_1.ALL_SELECT_OPTION_ID}`, className: (0, classNames_1.classNames)(["zen-side-panel-filters__tab-content", activeTabId === filtersSelect_1.ALL_SELECT_OPTION_ID ? "zen-side-panel-filters__tab-content--active" : "zen-side-panel-filters__tab-content--hidden"]), role: "tabpanel", "aria-labelledby": filtersSelect_1.ALL_SELECT_OPTION_ID, children: activeTabId === filtersSelect_1.ALL_SELECT_OPTION_ID ? tabsContent : null }), (0, jsx_runtime_1.jsx)("div", { id: `panel-${SELECTED_TAB_ID}`, className: (0, classNames_1.classNames)(["zen-side-panel-filters__tab-content", activeTabId === SELECTED_TAB_ID ? "zen-side-panel-filters__tab-content--active" : "zen-side-panel-filters__tab-content--hidden"]), role: "tabpanel", "aria-labelledby": SELECTED_TAB_ID, children: activeTabId === SELECTED_TAB_ID ? selectedTabsContent : null })] }), (0, jsx_runtime_1.jsx)("div", { className: (0, classNames_1.classNames)(["zen-side-panel-filters__footer", isMobile ? "zen-side-panel-filters__footer--mobile" : "", isLongTextLanguages && !isMobile ? "zen-side-panel-filters__footer--long-text" : ""]), children: isMobile ? (0, jsx_runtime_1.jsxs)(footerButtons_1.FooterButtons, { children: [(0, jsx_runtime_1.jsx)(button_1.Button, { className: "zen-side-panel-filters__apply-button", onClick: handleApplyClick, type: "primary", disabled: errorItems.size > 0, children: translate("Apply") }), (0, jsx_runtime_1.jsx)(button_1.Button, { className: "zen-side-panel-filters__cancel-button", type: "secondary", onClick: handleCancelClick, children: translate("Cancel") }), (0, jsx_runtime_1.jsx)(button_1.Button, { className: "zen-side-panel-filters__clear-button", onClick: handleClearClick, type: "tertiary", children: translate("Reset") })] }) : (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { className: "zen-side-panel-filters__footer-section", children: (0, jsx_runtime_1.jsx)(button_1.Button, { type: "tertiary", className: "zen-side-panel-filters__clear-button", onClick: handleClearClick, children: translate("Reset") }) }), (0, jsx_runtime_1.jsxs)("div", { className: "zen-side-panel-filters__footer-section", children: [(0, jsx_runtime_1.jsx)(button_1.Button, { className: "zen-side-panel-filters__cancel-button", type: "secondary", onClick: handleCancelClick, children: translate("Cancel") }), (0, jsx_runtime_1.jsx)(button_1.Button, { className: "zen-side-panel-filters__apply-button zen-side-panel-filters__apply-button--desktop", onClick: handleApplyClick, type: "primary", disabled: errorItems.size > 0, children: translate("Apply") })] })] }) })] }) }), (_a = document.fullscreenElement) !== null && _a !== void 0 ? _a : document.body), (0, jsx_runtime_1.jsx)(filtersSaveModal_1.FiltersSaveModal, { className: sidePanel_1.CUSTOM_POPUP_COMPONENT_CLASSNAME, isOpen: isSaveModalOpen, onClose: toggleSaveModal, onSave: handleSaveFilters })] });
211
+ };
212
+ exports.FiltersSidePanel = FiltersSidePanel;
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ interface IFiltersSidePanelChip {
3
+ currentState: boolean;
4
+ handleStateChange: (newState: boolean) => void;
5
+ children: string;
6
+ id: string;
7
+ }
8
+ export declare const FiltersSidePanelChip: React.FC<IFiltersSidePanelChip>;
9
+ export {};
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FiltersSidePanelChip = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const checkbox_1 = require("../../checkbox/checkbox");
7
+ const FiltersSidePanelChip = ({ currentState, handleStateChange, id, children }) => {
8
+ const handleChange = (0, react_1.useCallback)((e) => {
9
+ handleStateChange(e.target.checked);
10
+ }, [handleStateChange]);
11
+ return (0, jsx_runtime_1.jsx)(checkbox_1.Checkbox, { fullWidth: true, id: id, onChange: handleChange, checked: currentState, children: children });
12
+ };
13
+ exports.FiltersSidePanelChip = FiltersSidePanelChip;
@@ -0,0 +1,6 @@
1
+ /// <reference types="react" />
2
+ import { TFiltersDropdownAllStates } from "./filtersDropdown";
3
+ import { IFiltersSidePanelComponentProps } from "./filtersSidePanelItem";
4
+ type IFiltersSidePanelDropdown = IFiltersSidePanelComponentProps<TFiltersDropdownAllStates>;
5
+ export declare const FiltersSidePanelDropdown: React.FC<IFiltersSidePanelDropdown>;
6
+ export {};
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.FiltersSidePanelDropdown = void 0;
15
+ const jsx_runtime_1 = require("react/jsx-runtime");
16
+ const react_1 = require("react");
17
+ const classNames_1 = require("../../commonHelpers/classNames/classNames");
18
+ const dropdown_1 = require("../../dropdown/dropdown");
19
+ const filtersHelper_1 = require("../filtersHelper");
20
+ const filtersChip_1 = require("./filtersChip");
21
+ const skeleton_1 = require("../../skeleton/skeleton");
22
+ const dropdownHelper_1 = require("../../dropdown/dropdownHelper");
23
+ const radioGroup_1 = require("../../radioGroup/radioGroup");
24
+ const groupsHelper_1 = require("../../groupsFilter/groupsHelper");
25
+ const useLanguage_1 = require("../../utils/localization/useLanguage");
26
+ const skeletonList_1 = require("../../skeletonList/skeletonList");
27
+ const FiltersSidePanelDropdown = ({ elemProps, currentState, handleStateChange }) => {
28
+ const simpleViewLimit = 7;
29
+ const _a = elemProps, { id, name, state: _globalState, onChange: _globalOnChange, defaultState, fetchState, dataItems, isLoading, classNamePopup } = _a, otherProps = __rest(_a, ["id", "name", "state", "onChange", "defaultState", "fetchState", "dataItems", "isLoading", "classNamePopup"]);
30
+ const dropdownDataRef = (0, react_1.useRef)(null);
31
+ const { translate } = (0, useLanguage_1.useLanguage)();
32
+ const dropdownStateType = (0, react_1.useMemo)(() => (0, filtersHelper_1.getDropdownStateType)(currentState), [currentState]);
33
+ const isMultiselect = (0, react_1.useMemo)(() => dropdownStateType === "fullSelection" || dropdownStateType === "fullSelectionWithCheckbox" ? true
34
+ : (elemProps.multiselect === undefined ? true : elemProps.multiselect), [dropdownStateType, elemProps]);
35
+ const [componentType, setComponentType] = (0, react_1.useState)(dropdownStateType !== "base" ? "popup" : undefined);
36
+ const sortFn = (0, react_1.useMemo)(() => otherProps.sortFn, [otherProps]);
37
+ (0, react_1.useEffect)(() => {
38
+ const dropdownData = dataItems && dataItems.length ? dataItems : (fetchState === null || fetchState === void 0 ? void 0 : fetchState.data) || [];
39
+ if (dataItems && dataItems.length || fetchState && fetchState.data && !fetchState.isLoading && !componentType && dropdownDataRef.current === null) {
40
+ setComponentType(dropdownData.length > simpleViewLimit ? "popup" : (isMultiselect ? "chip" : "radio"));
41
+ dropdownDataRef.current = (0, dropdownHelper_1.sortDropdownItemArray)(dropdownData, sortFn);
42
+ }
43
+ else if ((componentType === "chip" || componentType === "radio") && dropdownData.length > simpleViewLimit) {
44
+ setComponentType("popup");
45
+ }
46
+ }, [componentType, fetchState, dataItems, isMultiselect, sortFn]);
47
+ const prepareValue = (value) => {
48
+ if (Array.isArray(value)) {
49
+ return value.map((el) => el.id);
50
+ }
51
+ return Object.assign(Object.assign({}, value), { selected: value.selected.map((el) => el.id) });
52
+ };
53
+ const preparedDefaultState = defaultState !== undefined ? defaultState : (0, filtersHelper_1.prepareDefaultDropdownState)(dropdownStateType);
54
+ const dropdownProps = Object.assign(Object.assign({}, otherProps), { id: `${id}-side-panel`, fetchState: fetchState, dataItems: dataItems, isLoading: dataItems !== undefined ? isLoading : undefined, classNamePopup: (0, classNames_1.classNames)(["zen-side-panel-filters__item-popup", classNamePopup || ""]), multiselect: isMultiselect, selectAllButton: dropdownStateType === "fullSelection" || dropdownStateType === "fullSelectionWithCheckbox" ? true : otherProps.selectAllButton, fullWidthTriggerButton: true, errorHandler: (() => { }), placeholder: otherProps.placeholder || name, showSelection: true, value: currentState, onChange: (newValue) => {
55
+ const preparedValue = prepareValue(newValue);
56
+ handleStateChange(preparedValue);
57
+ }, defaultValue: preparedDefaultState, chip: false });
58
+ const handleChipChange = (0, react_1.useCallback)((itemId) => (value) => {
59
+ const newValue = () => value ? [...currentState, itemId] : currentState.filter(elId => elId !== itemId);
60
+ handleStateChange(newValue());
61
+ }, [currentState, handleStateChange]);
62
+ const handleRadioChange = (0, react_1.useCallback)((e) => {
63
+ const value = e.target.checked;
64
+ const itemId = e.target.value;
65
+ const newValue = () => value ? [itemId] : currentState.filter(elId => elId !== itemId);
66
+ handleStateChange(newValue());
67
+ }, [currentState, handleStateChange]);
68
+ if (!componentType && (dataItems !== undefined && isLoading || fetchState && fetchState.isLoading)) {
69
+ return isMultiselect ? (0, jsx_runtime_1.jsx)(skeleton_1.Skeleton, { width: 328, height: 32 }) : (0, jsx_runtime_1.jsx)(skeletonList_1.SkeletonList, { className: "zen-side-panel-filters__dropdown-skeleton", size: "small" });
70
+ }
71
+ if (componentType === "chip" && dropdownDataRef.current) {
72
+ const dropdownChips = dropdownDataRef.current.map((item) => ((0, jsx_runtime_1.jsx)(filtersChip_1.FiltersChip, { id: `${id}-side-panel-chip-${item.id}`, name: item.name || item.id, state: currentState.includes(item.id), onChange: handleChipChange(item.id), icon: elemProps.chipIcon }, `${id}-side-panel-chip-${item.id}-${item.name || ""}`)));
73
+ return (0, jsx_runtime_1.jsx)("div", { className: (0, classNames_1.classNames)(["zen-side-panel-filters__dropdown-item-chips-container"]), children: dropdownChips });
74
+ }
75
+ if (componentType === "radio" && dropdownDataRef.current) {
76
+ const dropdownRadioGroup = (0, jsx_runtime_1.jsx)(radioGroup_1.RadioGroup, { direction: "vertical", size: "small", id: `${id}-side-panel-dropdown-radio-group`, className: "zen-side-panel-radio-group__filter-item", items: dropdownDataRef.current.map((item) => ({
77
+ id: `${id}_radio-group-item_${item.id}`,
78
+ value: item.id,
79
+ children: (0, jsx_runtime_1.jsx)("span", { children: (0, groupsHelper_1.getGroupDescription)(item, translate) })
80
+ })), fullWidth: true, name: name, onChange: handleRadioChange, value: currentState[0] });
81
+ return (0, jsx_runtime_1.jsx)("div", { className: (0, classNames_1.classNames)(["zen-side-panel-filters__dropdown-item-radio-group-container"]), children: dropdownRadioGroup });
82
+ }
83
+ return (0, jsx_runtime_1.jsx)(dropdown_1.Dropdown, Object.assign({}, dropdownProps));
84
+ };
85
+ exports.FiltersSidePanelDropdown = FiltersSidePanelDropdown;
@@ -0,0 +1,16 @@
1
+ import { ReactElement } from "react";
2
+ import { TFiltersComponentsItemState, TFiltersComponentsProps } from "./filtersItem";
3
+ import "./filtersSidePanelItem.less";
4
+ interface IFiltersSidePanelItem {
5
+ item: ReactElement<TFiltersComponentsProps>;
6
+ itemState: TFiltersComponentsItemState;
7
+ changeHandler: (newState: TFiltersComponentsItemState) => void;
8
+ errorCheck: (isError: boolean) => void;
9
+ }
10
+ export interface IFiltersSidePanelComponentProps<T> {
11
+ elemProps: TFiltersComponentsProps;
12
+ currentState: T;
13
+ handleStateChange: (newState: T) => void;
14
+ }
15
+ export declare const FiltersSidePanelItem: React.FC<IFiltersSidePanelItem>;
16
+ export {};
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.FiltersSidePanelItem = void 0;
15
+ const jsx_runtime_1 = require("react/jsx-runtime");
16
+ /* eslint-disable complexity */
17
+ const react_1 = require("react");
18
+ const filtersChip_1 = require("./filtersChip");
19
+ const filtersRange_1 = require("./filtersRange");
20
+ const classNames_1 = require("../../commonHelpers/classNames/classNames");
21
+ const filtersDropdown_1 = require("./filtersDropdown");
22
+ const filtersGroups_1 = require("./filtersGroups");
23
+ const groupsFilter_1 = require("../../groupsFilter/groupsFilter");
24
+ const filtersDateRange_1 = require("./filtersDateRange");
25
+ const dateRange_1 = require("../../dateRange/dateRange");
26
+ const filtersDateInput_1 = require("./filtersDateInput");
27
+ const dateInput_1 = require("../../dateInput/dateInput");
28
+ const filtersSidePanelDropdown_1 = require("./filtersSidePanelDropdown");
29
+ const filtersSidePanelChip_1 = require("./filtersSidePanelChip");
30
+ const useUniqueId_1 = require("../../commonHelpers/useUniqueId");
31
+ const filtersSidePanelRange_1 = require("./filtersSidePanelRange");
32
+ const FiltersSidePanelItem = ({ item, itemState, changeHandler, errorCheck }) => {
33
+ const labelledId = (0, useUniqueId_1.useUniqueId)();
34
+ const getComponent = (0, react_1.useCallback)((elem, currentState, handleStateChange) => {
35
+ const { type, props } = elem;
36
+ switch (type) {
37
+ case filtersChip_1.FiltersChip: {
38
+ const { id, state: _globalState, name, onChange: _globalOnChange } = props;
39
+ return (0, jsx_runtime_1.jsx)(filtersSidePanelChip_1.FiltersSidePanelChip, { id: `${id}-side-panel`, currentState: currentState, handleStateChange: handleStateChange, children: name });
40
+ }
41
+ case filtersRange_1.FiltersRange: {
42
+ const _a = props, { id, state: _globalState, name, onChange: _globalOnChange, defaultState, className } = _a, otherProps = __rest(_a, ["id", "state", "name", "onChange", "defaultState", "className"]);
43
+ return (0, jsx_runtime_1.jsx)(filtersSidePanelRange_1.FiltersSidePanelRange, Object.assign({}, otherProps, { id: `${id}-side-panel`, onChange: handleStateChange, value: currentState, errorCheck: errorCheck, className: (0, classNames_1.classNames)(["zen-side-panel-filters__item-element", className || ""]) }));
44
+ }
45
+ case filtersDropdown_1.FiltersDropdown: {
46
+ return (0, jsx_runtime_1.jsx)(filtersSidePanelDropdown_1.FiltersSidePanelDropdown, { elemProps: props, currentState: currentState, handleStateChange: handleStateChange });
47
+ }
48
+ case filtersGroups_1.FiltersGroups: {
49
+ const _b = props, { id, state: _globalState, onChange: _globalOnChange } = _b, otherProps = __rest(_b, ["id", "state", "onChange"]);
50
+ return (0, jsx_runtime_1.jsx)(groupsFilter_1.GroupsFilter, Object.assign({ initialFilterState: currentState, onChange: handleStateChange }, otherProps, { chip: false, fullSize: true }));
51
+ }
52
+ case filtersDateRange_1.FiltersDateRange: {
53
+ const _c = props, { id, state: _globalState, onChange: _globalOnChange, defaultState, allowUnsetValue, className, classNamePopup } = _c, otherProps = __rest(_c, ["id", "state", "onChange", "defaultState", "allowUnsetValue", "className", "classNamePopup"]);
54
+ return allowUnsetValue ? (0, jsx_runtime_1.jsx)(dateRange_1.DateRange, Object.assign({}, otherProps, { id: `${id}-side-panel`, classNamePopup: (0, classNames_1.classNames)([classNamePopup || "", "zen-side-panel-filters__date-popup--full-width"]), className: (0, classNames_1.classNames)(["zen-side-panel-filters__item-element", "zen-side-panel-filters__item-element--centred", className || ""]), value: currentState, onChange: handleStateChange, defaultValue: defaultState, allowUnsetValue: true, chip: false })) : (0, jsx_runtime_1.jsx)(dateRange_1.DateRange, Object.assign({}, otherProps, { id: `${id}-side-panel`, classNamePopup: (0, classNames_1.classNames)([classNamePopup || "", "zen-side-panel-filters__date-popup--full-width"]), className: (0, classNames_1.classNames)(["zen-side-panel-filters__item-element", "zen-side-panel-filters__item-element--centred", className || ""]), value: currentState, onChange: handleStateChange, defaultValue: defaultState, allowUnsetValue: false, chip: false }));
55
+ }
56
+ case filtersDateInput_1.FiltersDateInput: {
57
+ const _d = props, { id, state: _globalState, name, onChange: _globalOnChange, defaultState, className, classNamePopup } = _d, otherProps = __rest(_d, ["id", "state", "name", "onChange", "defaultState", "className", "classNamePopup"]);
58
+ return (0, jsx_runtime_1.jsx)(dateInput_1.DateInput, Object.assign({}, otherProps, { id: `${id}-side-panel`, classNamePopup: (0, classNames_1.classNames)([classNamePopup || "", "zen-side-panel-filters__date-popup--full-width"]), className: (0, classNames_1.classNames)(["zen-side-panel-filters__item-element", "zen-side-panel-filters__item-element--centred", className || ""]), buttonLabel: name, value: currentState, onChange: handleStateChange, defaultValue: defaultState, chip: false }));
59
+ }
60
+ default:
61
+ return null;
62
+ }
63
+ }, [errorCheck]);
64
+ const memoizedItem = (0, react_1.useMemo)(() => getComponent(item, itemState, changeHandler), [getComponent, item, itemState, changeHandler]);
65
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "zen-side-panel-filters__item", role: "group", "aria-labelledby": labelledId, children: [(0, jsx_runtime_1.jsx)("div", { className: "zen-side-panel-filters__item-label", id: labelledId, children: item.props.name }), (0, jsx_runtime_1.jsx)("div", { children: memoizedItem })] }));
66
+ };
67
+ exports.FiltersSidePanelItem = FiltersSidePanelItem;
@@ -0,0 +1,6 @@
1
+ import { IFiltersBarSidePanelRange } from "../../filtersBar/filtersBarSidePanel/components/filtersBarSidePanelRange/filtersBarSidePanelRange";
2
+ interface IFiltersSidePanelRangeProps extends IFiltersBarSidePanelRange {
3
+ errorCheck: (isError: boolean) => void;
4
+ }
5
+ export declare const FiltersSidePanelRange: ({ errorCheck, ...otherProps }: IFiltersSidePanelRangeProps) => import("react/jsx-runtime").JSX.Element;
6
+ export {};
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.FiltersSidePanelRange = void 0;
15
+ const jsx_runtime_1 = require("react/jsx-runtime");
16
+ const react_1 = require("react");
17
+ const filtersBarSidePanelRange_1 = require("../../filtersBar/filtersBarSidePanel/components/filtersBarSidePanelRange/filtersBarSidePanelRange");
18
+ const rangeHelper_1 = require("../../range/rangeHelper");
19
+ const FiltersSidePanelRange = (_a) => {
20
+ var { errorCheck } = _a, otherProps = __rest(_a, ["errorCheck"]);
21
+ const { value } = otherProps;
22
+ const hasError = (0, react_1.useMemo)(() => (0, rangeHelper_1.checkErrorType)(value.min, value.max, otherProps.fullBounded, otherProps.allowEqualMinMax, otherProps.min, otherProps.max) !== undefined, [value, otherProps.fullBounded, otherProps.allowEqualMinMax, otherProps.min, otherProps.max]);
23
+ (0, react_1.useEffect)(() => {
24
+ errorCheck(hasError);
25
+ }, [errorCheck, hasError]);
26
+ return (0, jsx_runtime_1.jsx)(filtersBarSidePanelRange_1.FiltersBarSidePanelRange, Object.assign({}, otherProps));
27
+ };
28
+ exports.FiltersSidePanelRange = FiltersSidePanelRange;
@@ -10,6 +10,7 @@ import { IFiltersChip } from "./components/filtersChip";
10
10
  import { FiltersDateRange } from "./components/filtersDateRange";
11
11
  import { IRecentSearchItem, IRecentSearchItemWithoutId, ISearchItem } from "./components/filtersSearchList";
12
12
  import { IIcon } from "../icons/icon";
13
+ import { IFiltersDateInput } from "./components/filtersDateInput";
13
14
  export interface ISavedFilters {
14
15
  id: string;
15
16
  name: string;
@@ -91,9 +92,13 @@ export declare const FiltersDisplayName = "Filters";
91
92
  interface IFiltersComponents {
92
93
  Chip: React.FC<IFiltersChip>;
93
94
  DateRange: typeof FiltersDateRange;
95
+ DateInput: React.FC<IFiltersDateInput>;
94
96
  Dropdown: React.FC<IFiltersDropdown<TFiltersDropdownAllStates>>;
95
97
  Groups: React.FC<IFiltersGroups>;
96
98
  Range: React.FC<IFiltersRange>;
97
99
  }
100
+ /**
101
+ * @beta This component is currently in beta.
102
+ */
98
103
  export declare const Filters: React.FC<IFilters> & IFiltersComponents;
99
104
  export {};