@geotab/zenith 3.0.1-beta.4 → 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.
- package/README.md +17 -0
- package/dist/advancedGroupsFilter/advancedGroupsFilter.d.ts +1 -0
- package/dist/advancedGroupsFilter/advancedGroupsFilter.js +2 -2
- package/dist/advancedGroupsFilter/advancedGroupsFilterFormSection.js +3 -1
- package/dist/chip/chip.js +5 -5
- package/dist/commonStyles/zIndex.less +5 -0
- package/dist/dateInput/dateInput.d.ts +2 -1
- package/dist/dateInput/dateInput.js +11 -2
- package/dist/dateRange/dateRange.js +9 -8
- package/dist/dropdown/dropdown.d.ts +2 -0
- package/dist/dropdown/dropdown.js +6 -5
- package/dist/dropdown/dropdownHelper.d.ts +4 -4
- package/dist/dropdown/dropdownHelper.js +2 -1
- package/dist/dropdown/dropdownList.js +2 -2
- package/dist/dropdown/dropdownPopup.d.ts +1 -0
- package/dist/dropdown/dropdownPopup.js +2 -2
- package/dist/dropdown/dropdownSearchableTrigger.js +1 -1
- package/dist/dropdown/stateReducer/stateReducer.d.ts +6 -2
- package/dist/dropdown/stateReducer/stateReducer.js +28 -42
- package/dist/dropdown/stateReducer/stateReducerHelper.d.ts +2 -0
- package/dist/dropdown/stateReducer/stateReducerHelper.js +12 -1
- package/dist/dropdown/useDropdownState.d.ts +1 -1
- package/dist/dropdown/useDropdownState.js +5 -2
- package/dist/filters/components/filtersContainer.d.ts +1 -0
- package/dist/filters/components/filtersContainer.js +10 -11
- package/dist/filters/components/filtersDateInput.d.ts +10 -0
- package/dist/filters/components/filtersDateInput.js +27 -0
- package/dist/filters/components/filtersDropdown.d.ts +5 -4
- package/dist/filters/components/filtersDropdown.js +3 -3
- package/dist/filters/components/filtersEmptySelectedList.d.ts +2 -0
- package/dist/filters/components/filtersEmptySelectedList.js +11 -0
- package/dist/filters/components/filtersItem.d.ts +5 -4
- package/dist/filters/components/filtersItem.js +2 -1
- package/dist/filters/components/filtersSaveModal.d.ts +3 -1
- package/dist/filters/components/filtersSaveModal.js +2 -2
- package/dist/filters/components/filtersSavedChipComponent.js +68 -6
- package/dist/filters/components/filtersSearch.d.ts +4 -4
- package/dist/filters/components/filtersSearch.js +20 -9
- package/dist/filters/components/filtersSearchItemData.js +18 -1
- package/dist/filters/components/filtersSearchList.d.ts +5 -1
- package/dist/filters/components/filtersSearchList.js +155 -27
- package/dist/filters/components/filtersSelect.d.ts +1 -0
- package/dist/filters/components/filtersSelect.js +35 -7
- package/dist/filters/components/filtersSelectListItem.d.ts +21 -15
- package/dist/filters/components/filtersSelectListItem.js +13 -3
- package/dist/filters/components/filtersSidePanel.d.ts +15 -0
- package/dist/filters/components/filtersSidePanel.js +212 -0
- package/dist/filters/components/filtersSidePanelChip.d.ts +9 -0
- package/dist/filters/components/filtersSidePanelChip.js +13 -0
- package/dist/filters/components/filtersSidePanelDropdown.d.ts +6 -0
- package/dist/filters/components/filtersSidePanelDropdown.js +85 -0
- package/dist/filters/components/filtersSidePanelItem.d.ts +16 -0
- package/dist/filters/components/filtersSidePanelItem.js +67 -0
- package/dist/filters/components/filtersSidePanelRange.d.ts +6 -0
- package/dist/filters/components/filtersSidePanelRange.js +28 -0
- package/dist/filters/filters.d.ts +5 -0
- package/dist/filters/filters.js +101 -38
- package/dist/filters/filtersHelper.d.ts +4 -2
- package/dist/filters/filtersHelper.js +40 -1
- package/dist/filters/filtersHooks.d.ts +12 -2
- package/dist/filters/filtersHooks.js +21 -3
- package/dist/formStepper/formStepper.d.ts +1 -1
- package/dist/formStepper/formStepper.js +5 -2
- package/dist/groupsFilter/groupsFilter.js +72 -37
- package/dist/groupsFilter/groupsFilterMenu.d.ts +1 -0
- package/dist/groupsFilter/groupsFilterMenu.js +2 -2
- package/dist/groupsFilter/groupsFilterTrigger.js +1 -1
- package/dist/images/imageLooking.d.ts +4 -0
- package/dist/images/imageLooking.js +16 -0
- package/dist/index.css +407 -83
- package/dist/index.d.ts +7 -4
- package/dist/index.js +26 -15
- package/dist/list/list.d.ts +3 -1
- package/dist/list/list.js +2 -2
- package/dist/mobileSheet/mobileSheet.d.ts +2 -0
- package/dist/mobileSheet/mobileSheet.js +4 -4
- package/dist/modal/modal.d.ts +1 -0
- package/dist/modal/modal.js +2 -2
- package/dist/radioGroup/radioGroup.d.ts +1 -0
- package/dist/radioGroup/radioGroup.js +3 -2
- package/dist/range/range.js +29 -10
- package/dist/searchInputRaw/searchInputRaw.js +1 -1
- package/dist/sidePanel/sidePanel.d.ts +1 -0
- package/dist/sidePanel/sidePanel.js +3 -3
- package/dist/tabs/tabItem/tabItem.d.ts +1 -0
- package/dist/tabs/tabItem/tabItem.js +2 -2
- package/dist/tabs/tabs.d.ts +1 -0
- package/dist/tabs/tabs.js +1 -1
- package/dist/utils/keyboardHelpers.d.ts +2 -0
- package/dist/utils/keyboardHelpers.js +49 -0
- package/dist/utils/localization/translations/cs-json.d.ts +1 -0
- package/dist/utils/localization/translations/cs-json.js +2 -1
- package/dist/utils/localization/translations/de-json.d.ts +1 -0
- package/dist/utils/localization/translations/de-json.js +2 -1
- package/dist/utils/localization/translations/en-json.d.ts +7 -0
- package/dist/utils/localization/translations/en-json.js +8 -1
- package/dist/utils/localization/translations/es-json.d.ts +1 -0
- package/dist/utils/localization/translations/es-json.js +2 -1
- package/dist/utils/localization/translations/fr-FR-json.d.ts +1 -0
- package/dist/utils/localization/translations/fr-FR-json.js +2 -1
- package/dist/utils/localization/translations/fr-json.d.ts +1 -0
- package/dist/utils/localization/translations/fr-json.js +2 -1
- package/dist/utils/localization/translations/id-json.d.ts +1 -0
- package/dist/utils/localization/translations/id-json.js +2 -1
- package/dist/utils/localization/translations/it-json.d.ts +1 -0
- package/dist/utils/localization/translations/it-json.js +2 -1
- package/dist/utils/localization/translations/ja-json.d.ts +1 -0
- package/dist/utils/localization/translations/ja-json.js +2 -1
- package/dist/utils/localization/translations/ko-KR-json.d.ts +1 -0
- package/dist/utils/localization/translations/ko-KR-json.js +2 -1
- package/dist/utils/localization/translations/ms-json.d.ts +1 -0
- package/dist/utils/localization/translations/ms-json.js +2 -1
- package/dist/utils/localization/translations/nl-json.d.ts +1 -0
- package/dist/utils/localization/translations/nl-json.js +2 -1
- package/dist/utils/localization/translations/pl-json.d.ts +1 -0
- package/dist/utils/localization/translations/pl-json.js +2 -1
- package/dist/utils/localization/translations/pt-BR-json.d.ts +1 -0
- package/dist/utils/localization/translations/pt-BR-json.js +2 -1
- package/dist/utils/localization/translations/sv-json.d.ts +1 -0
- package/dist/utils/localization/translations/sv-json.js +2 -1
- package/dist/utils/localization/translations/th-json.d.ts +1 -0
- package/dist/utils/localization/translations/th-json.js +2 -1
- package/dist/utils/localization/translations/tr-json.d.ts +1 -0
- package/dist/utils/localization/translations/tr-json.js +2 -1
- package/dist/utils/localization/translations/zh-Hans-json.d.ts +1 -0
- package/dist/utils/localization/translations/zh-Hans-json.js +2 -1
- package/dist/utils/localization/translations/zh-TW-json.d.ts +1 -0
- package/dist/utils/localization/translations/zh-TW-json.js +2 -1
- package/esm/advancedGroupsFilter/advancedGroupsFilter.d.ts +1 -0
- package/esm/advancedGroupsFilter/advancedGroupsFilter.js +2 -2
- package/esm/advancedGroupsFilter/advancedGroupsFilterFormSection.js +3 -1
- package/esm/chip/chip.js +5 -5
- package/esm/dateInput/dateInput.d.ts +2 -1
- package/esm/dateInput/dateInput.js +11 -2
- package/esm/dateRange/dateRange.js +9 -8
- package/esm/dropdown/dropdown.d.ts +2 -0
- package/esm/dropdown/dropdown.js +5 -4
- package/esm/dropdown/dropdownHelper.d.ts +4 -4
- package/esm/dropdown/dropdownHelper.js +2 -1
- package/esm/dropdown/dropdownList.js +2 -2
- package/esm/dropdown/dropdownPopup.d.ts +1 -0
- package/esm/dropdown/dropdownPopup.js +2 -2
- package/esm/dropdown/dropdownSearchableTrigger.js +1 -1
- package/esm/dropdown/stateReducer/stateReducer.d.ts +6 -2
- package/esm/dropdown/stateReducer/stateReducer.js +29 -43
- package/esm/dropdown/stateReducer/stateReducerHelper.d.ts +2 -0
- package/esm/dropdown/stateReducer/stateReducerHelper.js +10 -0
- package/esm/dropdown/useDropdownState.d.ts +1 -1
- package/esm/dropdown/useDropdownState.js +5 -2
- package/esm/filters/components/filtersContainer.d.ts +1 -0
- package/esm/filters/components/filtersContainer.js +12 -13
- package/esm/filters/components/filtersDateInput.d.ts +10 -0
- package/esm/filters/components/filtersDateInput.js +23 -0
- package/esm/filters/components/filtersDropdown.d.ts +5 -4
- package/esm/filters/components/filtersDropdown.js +3 -3
- package/esm/filters/components/filtersEmptySelectedList.d.ts +2 -0
- package/esm/filters/components/filtersEmptySelectedList.js +7 -0
- package/esm/filters/components/filtersItem.d.ts +5 -4
- package/esm/filters/components/filtersItem.js +2 -1
- package/esm/filters/components/filtersSaveModal.d.ts +3 -1
- package/esm/filters/components/filtersSaveModal.js +2 -2
- package/esm/filters/components/filtersSavedChipComponent.js +68 -6
- package/esm/filters/components/filtersSearch.d.ts +4 -4
- package/esm/filters/components/filtersSearch.js +20 -9
- package/esm/filters/components/filtersSearchItemData.js +18 -1
- package/esm/filters/components/filtersSearchList.d.ts +5 -1
- package/esm/filters/components/filtersSearchList.js +156 -28
- package/esm/filters/components/filtersSelect.d.ts +1 -0
- package/esm/filters/components/filtersSelect.js +36 -8
- package/esm/filters/components/filtersSelectListItem.d.ts +21 -15
- package/esm/filters/components/filtersSelectListItem.js +13 -3
- package/esm/filters/components/filtersSidePanel.d.ts +15 -0
- package/esm/filters/components/filtersSidePanel.js +208 -0
- package/esm/filters/components/filtersSidePanelChip.d.ts +9 -0
- package/esm/filters/components/filtersSidePanelChip.js +9 -0
- package/esm/filters/components/filtersSidePanelDropdown.d.ts +6 -0
- package/esm/filters/components/filtersSidePanelDropdown.js +81 -0
- package/esm/filters/components/filtersSidePanelItem.d.ts +16 -0
- package/esm/filters/components/filtersSidePanelItem.js +63 -0
- package/esm/filters/components/filtersSidePanelRange.d.ts +6 -0
- package/esm/filters/components/filtersSidePanelRange.js +24 -0
- package/esm/filters/filters.d.ts +5 -0
- package/esm/filters/filters.js +101 -38
- package/esm/filters/filtersHelper.d.ts +4 -2
- package/esm/filters/filtersHelper.js +37 -0
- package/esm/filters/filtersHooks.d.ts +12 -2
- package/esm/filters/filtersHooks.js +19 -2
- package/esm/formStepper/formStepper.d.ts +1 -1
- package/esm/formStepper/formStepper.js +5 -2
- package/esm/groupsFilter/groupsFilter.js +72 -37
- package/esm/groupsFilter/groupsFilterMenu.d.ts +1 -0
- package/esm/groupsFilter/groupsFilterMenu.js +2 -2
- package/esm/groupsFilter/groupsFilterTrigger.js +1 -1
- package/esm/images/imageLooking.d.ts +4 -0
- package/esm/images/imageLooking.js +12 -0
- package/esm/index.d.ts +7 -4
- package/esm/index.js +6 -3
- package/esm/list/list.d.ts +3 -1
- package/esm/list/list.js +2 -2
- package/esm/mobileSheet/mobileSheet.d.ts +2 -0
- package/esm/mobileSheet/mobileSheet.js +4 -4
- package/esm/modal/modal.d.ts +1 -0
- package/esm/modal/modal.js +2 -2
- package/esm/radioGroup/radioGroup.d.ts +1 -0
- package/esm/radioGroup/radioGroup.js +3 -2
- package/esm/range/range.js +29 -10
- package/esm/searchInputRaw/searchInputRaw.js +1 -1
- package/esm/sidePanel/sidePanel.d.ts +1 -0
- package/esm/sidePanel/sidePanel.js +3 -3
- package/esm/tabs/tabItem/tabItem.d.ts +1 -0
- package/esm/tabs/tabItem/tabItem.js +2 -2
- package/esm/tabs/tabs.d.ts +1 -0
- package/esm/tabs/tabs.js +1 -1
- package/esm/utils/keyboardHelpers.d.ts +2 -0
- package/esm/utils/keyboardHelpers.js +44 -0
- package/esm/utils/localization/translations/cs-json.d.ts +1 -0
- package/esm/utils/localization/translations/cs-json.js +2 -1
- package/esm/utils/localization/translations/de-json.d.ts +1 -0
- package/esm/utils/localization/translations/de-json.js +2 -1
- package/esm/utils/localization/translations/en-json.d.ts +7 -0
- package/esm/utils/localization/translations/en-json.js +8 -1
- package/esm/utils/localization/translations/es-json.d.ts +1 -0
- package/esm/utils/localization/translations/es-json.js +2 -1
- package/esm/utils/localization/translations/fr-FR-json.d.ts +1 -0
- package/esm/utils/localization/translations/fr-FR-json.js +2 -1
- package/esm/utils/localization/translations/fr-json.d.ts +1 -0
- package/esm/utils/localization/translations/fr-json.js +2 -1
- package/esm/utils/localization/translations/id-json.d.ts +1 -0
- package/esm/utils/localization/translations/id-json.js +2 -1
- package/esm/utils/localization/translations/it-json.d.ts +1 -0
- package/esm/utils/localization/translations/it-json.js +2 -1
- package/esm/utils/localization/translations/ja-json.d.ts +1 -0
- package/esm/utils/localization/translations/ja-json.js +2 -1
- package/esm/utils/localization/translations/ko-KR-json.d.ts +1 -0
- package/esm/utils/localization/translations/ko-KR-json.js +2 -1
- package/esm/utils/localization/translations/ms-json.d.ts +1 -0
- package/esm/utils/localization/translations/ms-json.js +2 -1
- package/esm/utils/localization/translations/nl-json.d.ts +1 -0
- package/esm/utils/localization/translations/nl-json.js +2 -1
- package/esm/utils/localization/translations/pl-json.d.ts +1 -0
- package/esm/utils/localization/translations/pl-json.js +2 -1
- package/esm/utils/localization/translations/pt-BR-json.d.ts +1 -0
- package/esm/utils/localization/translations/pt-BR-json.js +2 -1
- package/esm/utils/localization/translations/sv-json.d.ts +1 -0
- package/esm/utils/localization/translations/sv-json.js +2 -1
- package/esm/utils/localization/translations/th-json.d.ts +1 -0
- package/esm/utils/localization/translations/th-json.js +2 -1
- package/esm/utils/localization/translations/tr-json.d.ts +1 -0
- package/esm/utils/localization/translations/tr-json.js +2 -1
- package/esm/utils/localization/translations/zh-Hans-json.d.ts +1 -0
- package/esm/utils/localization/translations/zh-Hans-json.js +2 -1
- package/esm/utils/localization/translations/zh-TW-json.d.ts +1 -0
- package/esm/utils/localization/translations/zh-TW-json.js +2 -1
- package/package.json +6 -6
- package/dist/filters/components/filtersModal.d.ts +0 -17
- package/dist/filters/components/filtersModal.js +0 -107
- package/dist/filters/components/filtersModalItem.d.ts +0 -9
- package/dist/filters/components/filtersModalItem.js +0 -74
- package/esm/filters/components/filtersModal.d.ts +0 -17
- package/esm/filters/components/filtersModal.js +0 -103
- package/esm/filters/components/filtersModalItem.d.ts +0 -9
- 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" | "
|
|
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
|
|
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,
|
|
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,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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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?: (
|
|
10
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
|
36
|
-
|
|
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",
|
|
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;
|