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