@geotab/zenith 3.0.1 → 3.1.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 (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,7 +1,7 @@
1
1
  /// <reference types="react" />
2
- import { IDropdown, IDropdownFullSelection, IDropdownFullSelectionWithCheckbox, IDropdownWithCheckbox, IFetchDropdownState } from "../../dropdown/dropdown";
2
+ import { IDropdown, IDropdownFullSelection, IDropdownFullSelectionWithCheckbox, IDropdownWithCheckbox, IFetchDropdownState, IDropdownItem } from "../../dropdown/dropdown";
3
3
  import { IFiltersItem } from "./filtersItem";
4
- export interface IFiltersDropdownProps extends Omit<IDropdown | IDropdownFullSelection | IDropdownWithCheckbox | IDropdownFullSelectionWithCheckbox, "value" | "onChange" | "defaultValue" | "className" | "getData" | "dataItems" | "isLoading" | "errorHandler"> {
4
+ export interface IFiltersDropdownProps extends Omit<IDropdown | IDropdownFullSelection | IDropdownWithCheckbox | IDropdownFullSelectionWithCheckbox, "value" | "onChange" | "defaultValue" | "className" | "getData" | "errorHandler"> {
5
5
  }
6
6
  export type TFiltersDropdownState = string[];
7
7
  export interface IFiltersDropdownFullSelectionState {
@@ -22,11 +22,12 @@ export type TFiltersDropdownAllStates = TFiltersDropdownState | TFiltersDropdown
22
22
  export type TInferOnChangeType<T> = T extends string[] ? (state: string[]) => void : T extends IFiltersDropdownWithCheckboxState ? (state: IFiltersDropdownWithCheckboxState) => void : T extends IFiltersDropdownFullSelectionState ? (state: IFiltersDropdownFullSelectionState) => void : T extends IFiltersDropdownFullSelectionWithCheckboxState ? (state: IFiltersDropdownFullSelectionWithCheckboxState) => void : (state: T) => void;
23
23
  export interface IFiltersDropdown<T extends TFiltersDropdownAllStates = TFiltersDropdownState> extends Omit<IFiltersItem<T>, "onChange" | "defaultState">, IFiltersDropdownProps {
24
24
  onChange: TInferOnChangeType<T>;
25
- fetchState: IFetchDropdownState;
25
+ fetchState?: IFetchDropdownState;
26
+ dataItems?: IDropdownItem[];
26
27
  defaultState?: T;
27
28
  }
28
29
  export declare const FiltersDropdownDisplayName = "FiltersDropdown";
29
- export declare function FiltersDropdown<T extends TFiltersDropdownAllStates = TFiltersDropdownState>({ className, state, name, defaultState, onChange: onChangeState, id, chipIcon, classNamePopup, fetchState, ...restDropdownProps }: IFiltersDropdown<T>): React.JSX.Element;
30
+ export declare function FiltersDropdown<T extends TFiltersDropdownAllStates = TFiltersDropdownState>({ className, state, name, defaultState, onChange: onChangeState, id, chipIcon, classNamePopup, fetchState, dataItems, isLoading, ...restDropdownProps }: IFiltersDropdown<T>): React.JSX.Element;
30
31
  export declare namespace FiltersDropdown {
31
32
  var displayName: string;
32
33
  }
@@ -17,7 +17,7 @@ import { IconFilter } from "../../icons/iconFilter";
17
17
  import { getDropdownStateType, prepareDefaultDropdownState } from "../filtersHelper";
18
18
  export const FiltersDropdownDisplayName = "FiltersDropdown";
19
19
  export function FiltersDropdown(_a) {
20
- var { className, state, name, defaultState, onChange: onChangeState, id, chipIcon, classNamePopup, fetchState } = _a, restDropdownProps = __rest(_a, ["className", "state", "name", "defaultState", "onChange", "id", "chipIcon", "classNamePopup", "fetchState"]);
20
+ var { className, state, name, defaultState, onChange: onChangeState, id, chipIcon, classNamePopup, fetchState, dataItems, isLoading } = _a, restDropdownProps = __rest(_a, ["className", "state", "name", "defaultState", "onChange", "id", "chipIcon", "classNamePopup", "fetchState", "dataItems", "isLoading"]);
21
21
  const prepareValue = (value) => {
22
22
  if (Array.isArray(value)) {
23
23
  return value.map((item) => item.id);
@@ -30,9 +30,9 @@ export function FiltersDropdown(_a) {
30
30
  const dropdownPropsForComponent = Object.assign(Object.assign({}, restDropdownProps), { value: state, onChange: (newValue) => {
31
31
  const preparedValue = prepareValue(newValue);
32
32
  onChangeState(preparedValue);
33
- }, multiselect: dropdownStateType === "fullSelection" || dropdownStateType === "fullSelectionWithCheckbox" ? true : restDropdownProps.multiselect, selectAllButton: dropdownStateType === "fullSelection" || dropdownStateType === "fullSelectionWithCheckbox" ? true : restDropdownProps.selectAllButton, fetchState: fetchState, isLoading: undefined, errorHandler: (() => { }), placeholder: restDropdownProps.placeholder || name, defaultValue: memoizedDefaultState, className: classNames(["zen-filters-dropdown", className || ""]), classNamePopup: classNames(["zen-filters-dropdown-popup", classNamePopup || ""]), chip: true, chipId: id, chipName: name, chipIcon: chipIcon || IconFilter });
33
+ }, multiselect: dropdownStateType === "fullSelection" || dropdownStateType === "fullSelectionWithCheckbox" ? true : restDropdownProps.multiselect, selectAllButton: dropdownStateType === "fullSelection" || dropdownStateType === "fullSelectionWithCheckbox" ? true : restDropdownProps.selectAllButton, fetchState: fetchState, dataItems: dataItems, isLoading: dataItems !== undefined ? isLoading : undefined, errorHandler: (() => { }), placeholder: restDropdownProps.placeholder || name, defaultValue: memoizedDefaultState, className: classNames(["zen-filters-dropdown", className || ""]), classNamePopup: classNames(["zen-filters-dropdown-popup", classNamePopup || ""]), chip: true, chipId: id, chipName: name, chipIcon: chipIcon || IconFilter });
34
34
  return _jsx(Dropdown, Object.assign({}, dropdownPropsForComponent));
35
- }, [restDropdownProps, state, dropdownStateType, memoizedDefaultState, fetchState, className, classNamePopup, id, name, chipIcon, onChangeState]);
35
+ }, [restDropdownProps, state, dropdownStateType, fetchState, dataItems, isLoading, name, memoizedDefaultState, className, classNamePopup, id, chipIcon, onChangeState]);
36
36
  return component;
37
37
  }
38
38
  FiltersDropdown.displayName = FiltersDropdownDisplayName;
@@ -0,0 +1,2 @@
1
+ import "./filtersEmptySelectedList.less";
2
+ export declare const FiltersEmptySelectedList: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useLanguage } from "../../utils/localization/useLanguage";
3
+ import { ImageLooking } from "../../images/imageLooking";
4
+ export const FiltersEmptySelectedList = () => {
5
+ const { translate } = useLanguage();
6
+ return _jsxs("div", { className: "zen-filters-empty-selected-list", children: [_jsx(ImageLooking, { className: "zen-filters-empty-selected-list__image", title: translate("No Filters Selected"), description: translate("Selected filters will appear here.") }), _jsxs("div", { className: "zen-filters-empty-selected-list__text", children: [_jsx("div", { className: "zen-filters-empty-selected-list__header", children: translate("No Filters Selected") }), _jsx("div", { className: "zen-filters-empty-selected-list__description", children: translate("Selected filters will appear here.") })] })] });
7
+ };
@@ -5,6 +5,7 @@ import { FiltersDateRange, IFiltersDateRangeItem, TFiltersDateRangeState } from
5
5
  import { FiltersDropdown, IFiltersDropdown, TFiltersDropdownAllStates } from "./filtersDropdown";
6
6
  import { FiltersGroups, IFiltersGroups } from "./filtersGroups";
7
7
  import { FiltersRange, IFiltersRange, IFiltersRangeState } from "./filtersRange";
8
+ import { FiltersDateInput, IFiltersDateInput, TFiltersDateInputState } from "./filtersDateInput";
8
9
  export interface IFiltersItem<State = unknown> {
9
10
  id: string;
10
11
  name: string;
@@ -15,11 +16,11 @@ export interface IFiltersItem<State = unknown> {
15
16
  inhibit?: string[];
16
17
  className?: string;
17
18
  }
18
- export type TFiltersComponents = typeof FiltersChip | typeof FiltersDateRange | typeof FiltersDropdown | typeof FiltersGroups | typeof FiltersRange;
19
- export type TFiltersComponentsProps = IFiltersChip | IFiltersDateRangeItem | IFiltersDropdown | IFiltersGroups | IFiltersRange;
20
- export type TFiltersComponentsItemState = boolean | TFiltersDateRangeState | TFiltersDropdownAllStates | IGroupsFilterTotalState | IFiltersRangeState;
19
+ export type TFiltersComponents = typeof FiltersChip | typeof FiltersDateRange | typeof FiltersDateInput | typeof FiltersDropdown | typeof FiltersGroups | typeof FiltersRange;
20
+ export type TFiltersComponentsProps = IFiltersChip | IFiltersDateRangeItem | IFiltersDropdown | IFiltersGroups | IFiltersRange | IFiltersDateInput;
21
+ export type TFiltersComponentsItemState = boolean | TFiltersDateRangeState | TFiltersDropdownAllStates | IGroupsFilterTotalState | IFiltersRangeState | TFiltersDateInputState;
21
22
  export declare const allowedFiltersComponents: ({
22
23
  <P extends import("./filtersDateRange").IFiltersDateRangeProps = import("./filtersDateRange").IFiltersDateRangeProps>({ className, state, defaultState, name, onChange: onChangeState, id, allowUnsetValue, chipIcon, ...dateRangeProps }: IFiltersDateRangeItem<P>): React.JSX.Element;
23
24
  displayName: string;
24
- } | React.FC<IFiltersGroups> | React.FC<IFiltersRange> | React.FC<IFiltersChip> | typeof FiltersDropdown)[];
25
+ } | React.FC<IFiltersGroups> | React.FC<IFiltersRange> | React.FC<IFiltersDateInput> | React.FC<IFiltersChip> | typeof FiltersDropdown)[];
25
26
  export declare const getAllowedFilters: <T extends React.ReactNode>(items: T[]) => React.ReactElement<unknown, string | React.JSXElementConstructor<any>>[];
@@ -4,7 +4,8 @@ import { FiltersDateRange } from "./filtersDateRange";
4
4
  import { FiltersDropdown } from "./filtersDropdown";
5
5
  import { FiltersGroups } from "./filtersGroups";
6
6
  import { FiltersRange } from "./filtersRange";
7
- export const allowedFiltersComponents = [FiltersChip, FiltersDateRange, FiltersDropdown, FiltersGroups, FiltersRange];
7
+ import { FiltersDateInput } from "./filtersDateInput";
8
+ export const allowedFiltersComponents = [FiltersChip, FiltersDateRange, FiltersDropdown, FiltersGroups, FiltersRange, FiltersDateInput];
8
9
  export const getAllowedFilters = (items) => items.reduce((acc, item) => {
9
10
  if (!item || !React.isValidElement(item)) {
10
11
  return acc;
@@ -3,5 +3,7 @@ export interface IFiltersModal {
3
3
  isOpen: boolean;
4
4
  onClose: (isOpen: boolean) => void;
5
5
  onSave: (filterName: string) => void;
6
+ className?: string;
7
+ prioritize?: boolean;
6
8
  }
7
- export declare const FiltersSaveModal: ({ isOpen, onClose, onSave }: IFiltersModal) => import("react/jsx-runtime").JSX.Element;
9
+ export declare const FiltersSaveModal: ({ isOpen, onClose, onSave, className, prioritize }: IFiltersModal) => import("react/jsx-runtime").JSX.Element;
@@ -6,7 +6,7 @@ import { TextInput } from "../../textInput/textInput";
6
6
  import { useFiltersSavedItems } from "./filtersSavedItemsProvider";
7
7
  import { IconDisk } from "../../icons/iconDisk";
8
8
  import { useDriveClassName } from "../../utils/theme/useDriveClassName";
9
- export const FiltersSaveModal = ({ isOpen, onClose, onSave }) => {
9
+ export const FiltersSaveModal = ({ isOpen, onClose, onSave, className, prioritize }) => {
10
10
  const { translate } = useLanguage();
11
11
  const { items } = useFiltersSavedItems();
12
12
  const iconDriveClassName = useDriveClassName("icon");
@@ -45,5 +45,5 @@ export const FiltersSaveModal = ({ isOpen, onClose, onSave }) => {
45
45
  return "";
46
46
  }, [filterName, isValidFilterName, items, translate]);
47
47
  const saveIcon = useCallback(() => _jsx(IconDisk, { description: translate("Save"), className: "svgIcon", size: iconDriveClassName ? "huge" : "large" }), [iconDriveClassName, translate]);
48
- return _jsxs(Modal, { isOpen: isOpen, onClose: toggleSaveModal, title: translate("Save filters"), children: [_jsx("div", { className: "zen-filters-modal__content", children: _jsx(TextInput, { value: filterName, ariaLabel: translate("Filter title"), placeholder: translate("Filter title"), onChange: handleSaveModalFieldChange, maxLength: 100, error: errorText }) }), _jsx(Modal.SecondaryButton, { onClick: handleCancelSaveModal, title: translate("Cancel"), children: translate("Cancel") }), _jsx(Modal.PrimaryButton, { onClick: handleApplySaveModal, icon: saveIcon, title: translate("Save"), children: translate("Save") })] });
48
+ return _jsxs(Modal, { focus: "content", modalContainerClassName: prioritize ? "zen-filters-prioritized-modal" : "", isOpen: isOpen, onClose: toggleSaveModal, title: translate("Save filters"), className: className || "", children: [_jsx("div", { className: "zen-filters-modal__content", children: _jsx(TextInput, { value: filterName, ariaLabel: translate("Filter title"), placeholder: translate("Filter title"), onChange: handleSaveModalFieldChange, maxLength: 100, error: errorText }) }), _jsx(Modal.SecondaryButton, { onClick: handleCancelSaveModal, title: translate("Cancel"), children: translate("Cancel") }), _jsx(Modal.PrimaryButton, { onClick: handleApplySaveModal, icon: saveIcon, title: translate("Save"), children: translate("Save") })] });
49
49
  };
@@ -11,8 +11,12 @@ import { Modal } from "../../modal/modal";
11
11
  import { useFiltersSavedItems } from "./filtersSavedItemsProvider";
12
12
  import { FiltersSaveModal } from "./filtersSaveModal";
13
13
  import { useDriveClassName } from "../../utils/theme/useDriveClassName";
14
+ import { useMobile } from "../../commonHelpers/hooks/useMobile";
15
+ import { MobileSheet } from "../../mobileSheet/mobileSheet";
16
+ import { getFirstFocusableItem, getNewFocusableItem } from "../../utils/keyboardHelpers";
14
17
  export const FiltersSavedChipComponent = () => {
15
18
  const { translate } = useLanguage();
19
+ const isMobile = useMobile();
16
20
  const iconDriveClassName = useDriveClassName("icon");
17
21
  const contentDriveClassName = useDriveClassName("zen-filters-saved-popup__content");
18
22
  const { items, active, onRemove, onApply, onSave } = useFiltersSavedItems();
@@ -21,13 +25,17 @@ export const FiltersSavedChipComponent = () => {
21
25
  const [saveModalOpen, setSaveModalOpen] = useState(false);
22
26
  const savedChipRef = useRef(null);
23
27
  const removeChipRef = useRef("");
28
+ const savedFiltersRef = useRef(null);
24
29
  const handleRemove = useCallback((itemKey) => () => {
25
30
  removeChipRef.current = itemKey;
26
31
  setRemoveModalOpen(true);
27
32
  }, []);
28
33
  const toggleSavedChipOpen = useCallback(() => {
34
+ if (removeModalOpen || saveModalOpen) {
35
+ return;
36
+ }
29
37
  setSavedChipOpen((prev) => !prev);
30
- }, []);
38
+ }, [removeModalOpen, saveModalOpen]);
31
39
  const toggleRemoveModal = useCallback(() => {
32
40
  setRemoveModalOpen((prev) => !prev);
33
41
  }, []);
@@ -45,18 +53,72 @@ export const FiltersSavedChipComponent = () => {
45
53
  removeChipRef.current = "";
46
54
  }, [onRemove]);
47
55
  const handleFilterSelect = useCallback((e) => {
56
+ var _a;
48
57
  const filterName = e.target.dataset.filterName;
49
- filterName && onApply && onApply(filterName);
58
+ if (!filterName) {
59
+ return;
60
+ }
61
+ onApply && onApply(filterName);
62
+ setSavedChipOpen((prev) => !prev);
63
+ (_a = savedChipRef.current) === null || _a === void 0 ? void 0 : _a.focus();
50
64
  }, [onApply]);
65
+ const handleSaveItemKeyDown = useCallback((e) => {
66
+ if (e.key === "ArrowDown") {
67
+ const nextItem = getFirstFocusableItem(savedFiltersRef.current);
68
+ nextItem === null || nextItem === void 0 ? void 0 : nextItem.focus();
69
+ return;
70
+ }
71
+ }, [savedFiltersRef]);
51
72
  const handleItemKeyDown = useCallback((e) => {
73
+ var _a;
52
74
  if (e.key === "Enter" || e.key === " ") {
53
75
  const filterName = e.currentTarget.dataset.filterName;
54
- filterName && onApply && onApply(filterName);
76
+ const isRemoveButton = e.target.dataset.removeButton;
77
+ if (isRemoveButton || !filterName) {
78
+ return;
79
+ }
80
+ onApply && onApply(filterName);
81
+ setSavedChipOpen((prev) => !prev);
82
+ (_a = savedChipRef.current) === null || _a === void 0 ? void 0 : _a.focus();
83
+ return;
84
+ }
85
+ const isListItem = e.target instanceof HTMLElement && e.target.dataset.listItem === "true";
86
+ const isButtonItem = e.target instanceof HTMLElement && e.target.dataset.removeButton === "true";
87
+ const getSelector = () => {
88
+ if (isListItem) {
89
+ return `[data-list-item="true"]`;
90
+ }
91
+ if (isButtonItem) {
92
+ return `[data-remove-button="true"]`;
93
+ }
94
+ return undefined;
95
+ };
96
+ if (e.key === "ArrowDown") {
97
+ const nextItem = getNewFocusableItem(1, savedFiltersRef.current, getSelector());
98
+ nextItem === null || nextItem === void 0 ? void 0 : nextItem.focus();
99
+ return;
100
+ }
101
+ if (e.key === "ArrowUp") {
102
+ const prevItem = getNewFocusableItem(-1, savedFiltersRef.current, getSelector());
103
+ prevItem === null || prevItem === void 0 ? void 0 : prevItem.focus();
104
+ return;
105
+ }
106
+ if (e.key === "ArrowRight" && isListItem) {
107
+ const nextItem = getNewFocusableItem(1, savedFiltersRef.current, `[data-remove-button="true"]`);
108
+ nextItem === null || nextItem === void 0 ? void 0 : nextItem.focus();
109
+ return;
110
+ }
111
+ if (e.key === "ArrowLeft" && isButtonItem) {
112
+ const prevItem = getNewFocusableItem(-1, savedFiltersRef.current, `[data-list-item="true"]`);
113
+ prevItem === null || prevItem === void 0 ? void 0 : prevItem.focus();
114
+ return;
55
115
  }
56
116
  }, [onApply]);
57
- const saveButton = useMemo(() => _jsxs("button", { type: "button", onClick: toggleSaveModal, className: "zen-filters-saved-popup__action-button", title: translate("Save new filters"), children: [_jsx(IconDisk, { description: translate("Save"), className: "svgIcon", size: iconDriveClassName ? "huge" : "large" }), _jsx("div", { className: classNames(["", "zen-ellipsis"]), children: translate("Save new") })] }), [iconDriveClassName, toggleSaveModal, translate]);
117
+ const saveButton = useMemo(() => _jsxs("button", { type: "button", onKeyDown: handleSaveItemKeyDown, onClick: toggleSaveModal, className: "zen-filters-saved-popup__action-button", title: translate("Save new filters"), children: [_jsx(IconDisk, { description: translate("Save"), className: "svgIcon", size: iconDriveClassName ? "huge" : "large" }), _jsx("div", { className: classNames(["", "zen-ellipsis"]), children: translate("Save new") })] }), [iconDriveClassName, toggleSaveModal, translate, handleSaveItemKeyDown]);
58
118
  const memoizedItems = useMemo(() => Array.from(items), [items]);
59
- const popupContent = useMemo(() => _jsxs("div", { className: classNames(["zen-filters-saved-popup__content", contentDriveClassName || ""]), children: [onSave ? saveButton : null, _jsx("div", { onClick: handleFilterSelect, children: memoizedItems.map((filterName) => (_jsxs("div", { tabIndex: 0, onKeyDown: handleItemKeyDown, "data-filter-name": filterName, className: classNames(["zen-filters-saved-popup__item", active.has(filterName) ? "zen-filters-saved-popup__item--active" : ""]), children: [_jsx("div", { className: "zen-filters-saved-popup__name", "data-filter-name": filterName, children: filterName }), onRemove ? _jsx(Button, { type: "tertiary-black", className: "zen-filters-saved-popup__action", onClick: handleRemove(filterName), title: translate("Remove"), "aria-label": translate("Remove"), children: _jsx(IconClose, { size: iconDriveClassName ? "huge" : "large", className: "zen-filters-saved-popup__close-icon" }) }) : null] }, filterName))) })] }), [active, contentDriveClassName, handleFilterSelect, handleItemKeyDown, handleRemove, iconDriveClassName, memoizedItems, onRemove, onSave, saveButton, translate]);
119
+ const popupContent = useMemo(() => _jsxs("div", { className: classNames(["zen-filters-saved-popup__content", contentDriveClassName || ""]), children: [onSave ? saveButton : null, _jsx("div", { ref: savedFiltersRef, onClick: handleFilterSelect, children: memoizedItems.map((filterName) => (_jsxs("div", { tabIndex: 0, onKeyDown: handleItemKeyDown, "data-list-item": true, "data-filter-name": filterName, className: classNames(["zen-filters-saved-popup__item", active.has(filterName) ? "zen-filters-saved-popup__item--active" : ""]), children: [_jsx("div", { className: "zen-filters-saved-popup__name", "data-filter-name": filterName, children: filterName }), onRemove ? _jsx(Button, { "data-remove-button": true, type: "tertiary-black", className: "zen-filters-saved-popup__action", onClick: handleRemove(filterName), title: translate("Remove"), "aria-label": translate("Remove"), children: _jsx(IconClose, { size: iconDriveClassName ? "huge" : "large", className: "zen-filters-saved-popup__close-icon" }) }) : null] }, filterName))) })] }), [active, contentDriveClassName, handleFilterSelect, handleItemKeyDown, handleRemove, iconDriveClassName, memoizedItems, onRemove, onSave, saveButton, translate]);
60
120
  const memoizedStatus = useMemo(() => (active.size > 0 && Array.from(items).some(item => active.has(item)) ? "active" : undefined), [active, items]);
61
- return (_jsxs(_Fragment, { children: [_jsx(Chip, { className: "zen-filters-saved-chip", isOpen: savedChipOpen, status: memoizedStatus, onClick: toggleSavedChipOpen, title: translate("Saved filters"), icon: IconDisk, triggerRef: savedChipRef }), _jsx(ControlledPopup, { isOpen: savedChipOpen, className: classNames(["zen-filters-saved-popup"]), onOpenChange: toggleSavedChipOpen, useTrapFocusWithTrigger: "on", shouldHoldScroll: true, triggerRef: savedChipRef, ariaLabel: translate("Saved filters"), recalculateOnScroll: true, children: popupContent }), _jsxs(Modal, { isOpen: removeModalOpen, onClose: toggleRemoveModal, title: translate("Remove saved {name} filter?").replace("{name}", removeChipRef.current), children: [_jsx(Modal.SecondaryButton, { onClick: handleCancelRemoveModal, children: translate("Cancel") }), _jsx(Modal.PrimaryButton, { onClick: handleRemoveItem, type: "destructive", children: translate("Confirm") })] }), onSave ? _jsx(FiltersSaveModal, { isOpen: saveModalOpen, onClose: setSaveModalOpen, onSave: onSave }) : null] }));
121
+ const memoizedDesktopView = useMemo(() => _jsx(ControlledPopup, { isOpen: savedChipOpen, className: classNames(["zen-filters-saved-popup"]), onOpenChange: toggleSavedChipOpen, useTrapFocusWithTrigger: "on", shouldHoldScroll: true, triggerRef: savedChipRef, ariaLabel: translate("Saved filters"), recalculateOnScroll: true, children: popupContent }), [popupContent, savedChipOpen, toggleSavedChipOpen, savedChipRef, translate]);
122
+ const memoizedMobileView = useMemo(() => _jsxs(MobileSheet, { label: translate("Saved filters"), triggerRef: savedChipRef, isOpen: savedChipOpen, onHidePanel: toggleSavedChipOpen, onCloseClick: toggleSavedChipOpen, useTrapFocusWithTrigger: false, children: [_jsx(MobileSheet.Title, { children: translate("Saved filters") }), _jsx(MobileSheet.Content, { className: "zen-filters-saved-chip__mobile-sheet", children: popupContent })] }), [popupContent, savedChipOpen, toggleSavedChipOpen, translate]);
123
+ return (_jsxs(_Fragment, { children: [_jsx(Chip, { className: "zen-filters-saved-chip", isOpen: savedChipOpen, status: memoizedStatus, onClick: toggleSavedChipOpen, title: translate("Saved filters"), icon: IconDisk, triggerRef: savedChipRef }), isMobile ? memoizedMobileView : memoizedDesktopView, _jsxs(Modal, { isOpen: removeModalOpen, onClose: toggleRemoveModal, modalContainerClassName: classNames([isMobile ? "zen-filters-prioritized-modal" : ""]), title: translate("Remove saved {name} filter?").replace("{name}", removeChipRef.current), children: [_jsx(Modal.SecondaryButton, { title: translate("Cancel"), onClick: handleCancelRemoveModal, children: translate("Cancel") }), _jsx(Modal.PrimaryButton, { title: translate("Confirm"), onClick: handleRemoveItem, type: "destructive", children: translate("Confirm") })] }), onSave ? _jsx(FiltersSaveModal, { prioritize: isMobile, isOpen: saveModalOpen, onClose: setSaveModalOpen, onSave: onSave }) : null] }));
62
124
  };
@@ -1,4 +1,4 @@
1
- import { RefObject } from "react";
1
+ import React, { RefObject } from "react";
2
2
  import "./filtersSearch.less";
3
3
  import { ISearchItem } from "./filtersSearchList";
4
4
  interface IFiltersSearch {
@@ -6,15 +6,15 @@ interface IFiltersSearch {
6
6
  name: string;
7
7
  value: string;
8
8
  onChange: (newValue: string) => void;
9
- onSearchKeyDown?: (searchValue?: string) => void;
10
- handleSearchFocus: () => void;
9
+ onSearchKeyDown?: (e: React.KeyboardEvent<HTMLInputElement>) => void;
10
+ onOpenPopup?: () => void;
11
11
  searchSelection?: ISearchItem[];
12
12
  handleRemove?: (id: ISearchItem) => void;
13
13
  className?: string;
14
14
  ref?: RefObject<HTMLInputElement | null>;
15
15
  }
16
16
  export declare const FiltersSearch: {
17
- ({ id, name, value, onChange, onSearchKeyDown, handleSearchFocus, searchSelection, handleRemove, className, ref }: IFiltersSearch): import("react/jsx-runtime").JSX.Element;
17
+ ({ id, name, value, onChange, onSearchKeyDown, onOpenPopup, searchSelection, handleRemove, className, ref }: IFiltersSearch): import("react/jsx-runtime").JSX.Element;
18
18
  displayName: string;
19
19
  };
20
20
  export {};
@@ -1,17 +1,12 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import React, { useCallback, useMemo } from "react";
3
3
  import { classNames } from "../../commonHelpers/classNames/classNames";
4
- import { PillBox } from "../../pillBox/pillBox";
5
4
  import { NO_TYPED_SEARCH_ITEM } from "./filtersSearchList";
6
5
  import { SearchInputRaw } from "../../searchInputRaw/searchInputRaw";
7
- export const FiltersSearch = ({ id, name, value, onChange, onSearchKeyDown, handleSearchFocus, searchSelection, handleRemove, className, ref }) => {
6
+ import { Pill } from "../../pill/pill";
7
+ export const FiltersSearch = ({ id, name, value, onChange, onSearchKeyDown, onOpenPopup, searchSelection, handleRemove, className, ref }) => {
8
8
  const isWithPills = Boolean(searchSelection && handleRemove);
9
9
  const divider = "_divider_";
10
- const handleSearchKeyDown = useCallback((event) => {
11
- if (event.code === "Enter") {
12
- onSearchKeyDown === null || onSearchKeyDown === void 0 ? void 0 : onSearchKeyDown(event.currentTarget.value || undefined);
13
- }
14
- }, [onSearchKeyDown]);
15
10
  const memoizedPillsArray = React.useMemo(() => {
16
11
  if (!isWithPills || !searchSelection || searchSelection.length === 0) {
17
12
  return [];
@@ -32,7 +27,23 @@ export const FiltersSearch = ({ id, name, value, onChange, onSearchKeyDown, hand
32
27
  handleRemove === null || handleRemove === void 0 ? void 0 : handleRemove(Object.assign(Object.assign({}, item), { type: type === NO_TYPED_SEARCH_ITEM ? undefined : type }));
33
28
  }
34
29
  }, [handleRemove, searchSelection]);
35
- const searchComponent = useMemo(() => _jsx(SearchInputRaw, { id: id, ref: ref, placeholder: name, onChange: onChange, onKeyDown: handleSearchKeyDown, onFocus: handleSearchFocus, value: value, className: classNames(["zen-filters-search__search-input", "zen-filters__search", className || ""]) }), [id, ref, name, onChange, handleSearchKeyDown, handleSearchFocus, value, className]);
36
- return _jsxs("div", { className: classNames(["zen-filters-search", className || ""]), children: [searchComponent, isWithPills && _jsx("div", { className: "zen-filters-search__selected", children: _jsx(PillBox, { hideSelectedLabel: true, maxPills: 3, selectedPills: memoizedPillsArray, onRemove: onRemove }) })] });
30
+ const handleSearchClick = useCallback((e) => {
31
+ var _a, _b, _c;
32
+ if (((_a = e.target) === null || _a === void 0 ? void 0 : _a.dataset.name) === "IconClose" || e.target.classList.contains("zen-pill-non-actionable__close-button")
33
+ || ((_b = e.target) === null || _b === void 0 ? void 0 : _b.parentElement.classList.contains("zen-pill-non-actionable__close-button")) || ((_c = e.target) === null || _c === void 0 ? void 0 : _c.parentElement.dataset.name) === "IconClose") {
34
+ return;
35
+ }
36
+ onOpenPopup === null || onOpenPopup === void 0 ? void 0 : onOpenPopup();
37
+ }, [onOpenPopup]);
38
+ const selectedPills = useMemo(() => {
39
+ if (memoizedPillsArray.length === 0) {
40
+ return [];
41
+ }
42
+ const pillsForRender = [{ id: memoizedPillsArray[0].id, name: memoizedPillsArray[0].name }, (memoizedPillsArray
43
+ .length > 1 ? { id: "more_pills", name: `+${memoizedPillsArray.length - 1}` } : undefined)].filter(Boolean);
44
+ return pillsForRender.map((pill, ind) => _jsx(Pill, { type: "info", onClose: ind === 0 ? onRemove.bind(null, pill.id) : undefined, className: classNames(["zen-filters-search__selected-item", ind !== 0 ? "zen-filters-search__selected-item--more" : ""]), children: pill.name }, `${pill.id}_${pill.name}`));
45
+ }, [memoizedPillsArray, onRemove]);
46
+ const searchComponent = useMemo(() => _jsx(SearchInputRaw, { id: id, ref: ref, placeholder: name, onChange: onChange, onKeyDown: onSearchKeyDown, value: value, className: classNames(["zen-filters-search__search-input", "zen-filters__search", className || ""]) }), [id, ref, name, onChange, onSearchKeyDown, value, className]);
47
+ return _jsxs("div", { className: classNames(["zen-filters-search", className || ""]), onClick: handleSearchClick, children: [searchComponent, selectedPills.length > 0 && _jsx("div", { className: "zen-filters-search__selected", children: selectedPills })] });
37
48
  };
38
49
  FiltersSearch.displayName = "FiltersSearch";
@@ -25,14 +25,31 @@ export const FiltersSearchItemData = ({ id, icon, isActive, iconClassName, name,
25
25
  }
26
26
  onClick();
27
27
  }, [onClick]);
28
+ const handleKeyDown = useCallback((e) => {
29
+ if (!onClick) {
30
+ return;
31
+ }
32
+ if (e.key === "Enter" || e.key === " ") {
33
+ const isCloseButton = e.target instanceof HTMLElement && (e.target.dataset.closeButton === "true");
34
+ if (isCloseButton) {
35
+ e.preventDefault();
36
+ e.stopPropagation();
37
+ onClose === null || onClose === void 0 ? void 0 : onClose();
38
+ return;
39
+ }
40
+ e.preventDefault();
41
+ onClick();
42
+ }
43
+ }, [onClick, onClose]);
28
44
  const handleClose = useCallback((e) => {
29
45
  if (!onClose) {
30
46
  return;
31
47
  }
48
+ console.log("handleClose");
32
49
  e.preventDefault();
33
50
  e.stopPropagation();
34
51
  onClose();
35
52
  }, [onClose]);
36
53
  return _jsx("li", { tabIndex: 0, className: classNames(["zen-search-item-data", isActive ? "zen-search-item-data--active" : "",
37
- onClick ? "zen-search-item-data--clickable" : "", driveClassName || ""]), "data-list-item-id": id, onClick: handleClick, children: _jsxs("div", { className: "zen-search-item-data__main", children: [icon ? _jsx("div", { className: classNames(["zen-search-item-data__icon", iconClassName || ""]), children: renderIcon(icon) }) : null, _jsxs("div", { className: "zen-search-item-data__main-data", children: [_jsxs("div", { className: "zen-search-item-data__identifier", children: [_jsx("div", { className: "zen-search-item-data__name", children: name }), secondary ? _jsx("div", { className: "zen-search-item-data__secondary", children: secondary }) : null] }), onClose ? _jsx(Button, { type: "tertiary-black", className: "zen-search-item-data__close", onClick: handleClose, title: translate("Close"), "aria-label": translate("Close"), children: _jsx(IconClose, { size: "large", className: "zen-search-item-data__close-icon" }) }) : null] })] }) }, id);
54
+ onClick ? "zen-search-item-data--clickable" : "", driveClassName || ""]), "data-list-item-id": id, onClick: handleClick, onKeyDown: handleKeyDown, "data-list-item": true, children: _jsxs("div", { className: "zen-search-item-data__main", children: [icon ? _jsx("div", { className: classNames(["zen-search-item-data__icon", iconClassName || ""]), children: renderIcon(icon) }) : null, _jsxs("div", { className: "zen-search-item-data__main-data", children: [_jsxs("div", { className: "zen-search-item-data__identifier", children: [_jsx("div", { className: "zen-search-item-data__name", children: name }), secondary ? _jsx("div", { className: "zen-search-item-data__secondary", children: secondary }) : null] }), onClose ? _jsx(Button, { type: "tertiary-black", className: "zen-search-item-data__close", "data-close-button": true, title: translate("Close"), "aria-label": translate("Close"), onClick: handleClose, children: _jsx(IconClose, { size: "large", className: "zen-search-item-data__close-icon" }) }) : null] })] }) }, id);
38
55
  };
@@ -17,14 +17,18 @@ export interface IRecentSearchItem extends Omit<ISearchItem, "type"> {
17
17
  }
18
18
  export interface IRecentSearchItemWithoutId extends Omit<IRecentSearchItem, "id"> {
19
19
  }
20
+ export declare const NOT_POPULATED_NAME = "...";
20
21
  export interface ISearchList {
21
22
  searchData?: IFetchState<ISearchItem[]>;
22
23
  recentSearches?: IFetchState<IRecentSearchItem[]>;
23
24
  searchSelection?: ISearchItem[];
24
25
  handleSearchItemClick?: (searchItem: ISearchItem) => void;
26
+ handleClearSearchSelection?: () => void;
25
27
  handleRecentSearchItemClick?: (recentSearchItem: IRecentSearchItem) => void;
26
28
  onRemoveRecentSearchItem?: (itemIds: string[]) => void;
27
29
  searchValue: string;
28
30
  getIconByType: (type?: string) => React.FC<IIcon>;
31
+ onlyOneType?: string;
32
+ searchListRef: React.RefObject<HTMLDivElement>;
29
33
  }
30
- export declare const FiltersSearchList: ({ searchValue, searchData, recentSearches, searchSelection, handleSearchItemClick, onRemoveRecentSearchItem, handleRecentSearchItemClick, getIconByType }: ISearchList) => import("react/jsx-runtime").JSX.Element;
34
+ export declare const FiltersSearchList: ({ searchValue, searchData, recentSearches, searchSelection, onlyOneType, handleSearchItemClick, onRemoveRecentSearchItem, handleRecentSearchItemClick, getIconByType, handleClearSearchSelection, searchListRef }: ISearchList) => import("react/jsx-runtime").JSX.Element;