@blaze-cms/react-page-builder 0.146.0-alpha.0 → 0.146.0-alpha.13
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/CHANGELOG.md +86 -0
- package/lib/components/BackToTop/BackToTop.js +8 -13
- package/lib/components/BackToTop/BackToTop.js.map +1 -1
- package/lib/components/Card/Card.js +19 -12
- package/lib/components/Card/Card.js.map +1 -1
- package/lib/components/Card/CardsContainer.js +8 -4
- package/lib/components/Card/CardsContainer.js.map +1 -1
- package/lib/components/Card/CardsFactory.js +37 -7
- package/lib/components/Card/CardsFactory.js.map +1 -1
- package/lib/components/Card/CardsRender.js +8 -4
- package/lib/components/Card/CardsRender.js.map +1 -1
- package/lib/components/Card/helpers/index.js +6 -6
- package/lib/components/Card/helpers/index.js.map +1 -1
- package/lib/components/Carousel/CarouselImage/CarouselImage.js +3 -1
- package/lib/components/Carousel/CarouselImage/CarouselImage.js.map +1 -1
- package/lib/components/Carousel/CarouselImage/constants.js +9 -0
- package/lib/components/Carousel/CarouselImage/constants.js.map +1 -0
- package/lib/components/CarouselWrapper/DefaultCarousel.js +2 -0
- package/lib/components/CarouselWrapper/DefaultCarousel.js.map +1 -1
- package/lib/components/ContentGroup/ContentGroupTabs.js +1 -2
- package/lib/components/ContentGroup/ContentGroupTabs.js.map +1 -1
- package/lib/components/Image/GlobalLightbox/GlobalLightbox.js +3 -3
- package/lib/components/Image/GlobalLightbox/GlobalLightbox.js.map +1 -1
- package/lib/components/Image/GlobalLightbox/NavButton.js +6 -3
- package/lib/components/Image/GlobalLightbox/NavButton.js.map +1 -1
- package/lib/components/Image/Image.js +1 -0
- package/lib/components/Image/Image.js.map +1 -1
- package/lib/components/Image/Lightbox/Lightbox.js +2 -2
- package/lib/components/Image/Lightbox/Lightbox.js.map +1 -1
- package/lib/components/ItemList/ItemListNew/ItemListNew.js +1 -2
- package/lib/components/ItemList/ItemListNew/ItemListNew.js.map +1 -1
- package/lib/components/List/ListRender.js.map +1 -1
- package/lib/components/List/components/Cards/CardsRender.js.map +1 -1
- package/lib/components/List/components/Full/FullRender.js +2 -2
- package/lib/components/List/components/Full/FullRender.js.map +1 -1
- package/lib/components/Menu/Menu.js +1 -1
- package/lib/components/Menu/Menu.js.map +1 -1
- package/lib/components/MenuItem/MenuEntitiesItem.js +203 -0
- package/lib/components/MenuItem/MenuEntitiesItem.js.map +1 -0
- package/lib/components/MenuItem/MenuItem.js +25 -71
- package/lib/components/MenuItem/MenuItem.js.map +1 -1
- package/lib/components/MenuItem/MenuItemRender.js +104 -0
- package/lib/components/MenuItem/MenuItemRender.js.map +1 -0
- package/lib/components/MenuItem/helpers/index.js +15 -0
- package/lib/components/MenuItem/helpers/index.js.map +1 -0
- package/lib/components/MenuItem/helpers/inject-helper-into-template.js +17 -0
- package/lib/components/MenuItem/helpers/inject-helper-into-template.js.map +1 -0
- package/lib/components/Modal/Modal.js +2 -2
- package/lib/components/Modal/Modal.js.map +1 -1
- package/lib/components/ModalAdapter/ModalAdapter.js +21 -0
- package/lib/components/ModalAdapter/ModalAdapter.js.map +1 -0
- package/lib/components/ModalAdapter/index.js +11 -0
- package/lib/components/ModalAdapter/index.js.map +1 -0
- package/lib/components/SearchFilter/SearchFilter/FiltersList.js.map +1 -1
- package/lib/components/SearchFilter/SearchFilter/MobileFormToolbar.js +1 -1
- package/lib/components/SearchFilter/SearchFilter/MobileFormToolbar.js.map +1 -1
- package/lib/components/SearchFilter/SearchFilter/ResetDesktopForm.js +3 -3
- package/lib/components/SearchFilter/SearchFilter/ResetDesktopForm.js.map +1 -1
- package/lib/components/SearchFilter/SearchFilter/SearchFilter.js +26 -7
- package/lib/components/SearchFilter/SearchFilter/SearchFilter.js.map +1 -1
- package/lib/components/SearchFilter/SearchFilterContainer.js +23 -28
- package/lib/components/SearchFilter/SearchFilterContainer.js.map +1 -1
- package/lib/components/SearchFilter/components/Checkbox.js +1 -1
- package/lib/components/SearchFilter/components/Checkbox.js.map +1 -1
- package/lib/components/SearchFilter/components/Select.js.map +1 -1
- package/lib/components/SearchFilter/components/TextSearch.js +1 -0
- package/lib/components/SearchFilter/components/TextSearch.js.map +1 -1
- package/lib/components/SearchFilter/helpers/build-list-name-query.js +31 -0
- package/lib/components/SearchFilter/helpers/build-list-name-query.js.map +1 -0
- package/lib/components/SearchFilter/helpers/decode-encode.js.map +1 -1
- package/lib/components/SearchFilter/helpers/index.js +7 -0
- package/lib/components/SearchFilter/helpers/index.js.map +1 -1
- package/lib/components/Video/VideoModal.js +2 -2
- package/lib/components/Video/VideoModal.js.map +1 -1
- package/lib/components/Video/providers/Vimeo/VimeoProvider.js +0 -1
- package/lib/components/Video/providers/Vimeo/VimeoProvider.js.map +1 -1
- package/lib/helpers/build-filters-query.js +1 -2
- package/lib/helpers/build-filters-query.js.map +1 -1
- package/lib/{components/Card/helpers → helpers}/filter-query-setup.js +10 -7
- package/lib/helpers/filter-query-setup.js.map +1 -0
- package/lib/{components/Card/helpers → helpers}/filters-setup.js +8 -5
- package/lib/helpers/filters-setup.js.map +1 -0
- package/lib/helpers/get-updated-items-to-display.js.map +1 -0
- package/lib/helpers/get-updated-sort-properties.js.map +1 -0
- package/lib/helpers/index.js +42 -0
- package/lib/helpers/index.js.map +1 -1
- package/lib/helpers/should-return.js.map +1 -0
- package/lib/{components/Card/helpers → helpers}/should-skip-single-query.js +1 -1
- package/lib/helpers/should-skip-single-query.js.map +1 -0
- package/lib/hooks/index.js +14 -0
- package/lib/hooks/index.js.map +1 -1
- package/lib/hooks/use-filter-aggregation-values.js +54 -0
- package/lib/hooks/use-filter-aggregation-values.js.map +1 -0
- package/lib/hooks/use-portal.js +30 -0
- package/lib/hooks/use-portal.js.map +1 -0
- package/lib-es/components/BackToTop/BackToTop.js +11 -17
- package/lib-es/components/BackToTop/BackToTop.js.map +1 -1
- package/lib-es/components/Card/Card.js +19 -12
- package/lib-es/components/Card/Card.js.map +1 -1
- package/lib-es/components/Card/CardsContainer.js +9 -5
- package/lib-es/components/Card/CardsContainer.js.map +1 -1
- package/lib-es/components/Card/CardsFactory.js +40 -9
- package/lib-es/components/Card/CardsFactory.js.map +1 -1
- package/lib-es/components/Card/CardsRender.js +9 -5
- package/lib-es/components/Card/CardsRender.js.map +1 -1
- package/lib-es/components/Card/helpers/index.js +6 -6
- package/lib-es/components/Card/helpers/index.js.map +1 -1
- package/lib-es/components/Carousel/CarouselImage/CarouselImage.js +3 -1
- package/lib-es/components/Carousel/CarouselImage/CarouselImage.js.map +1 -1
- package/lib-es/components/Carousel/CarouselImage/constants.js +2 -0
- package/lib-es/components/Carousel/CarouselImage/constants.js.map +1 -0
- package/lib-es/components/CarouselWrapper/DefaultCarousel.js +2 -0
- package/lib-es/components/CarouselWrapper/DefaultCarousel.js.map +1 -1
- package/lib-es/components/ContentGroup/ContentGroupTabs.js +1 -2
- package/lib-es/components/ContentGroup/ContentGroupTabs.js.map +1 -1
- package/lib-es/components/Image/GlobalLightbox/GlobalLightbox.js +3 -3
- package/lib-es/components/Image/GlobalLightbox/GlobalLightbox.js.map +1 -1
- package/lib-es/components/Image/GlobalLightbox/NavButton.js +6 -3
- package/lib-es/components/Image/GlobalLightbox/NavButton.js.map +1 -1
- package/lib-es/components/Image/Image.js +1 -0
- package/lib-es/components/Image/Image.js.map +1 -1
- package/lib-es/components/Image/Lightbox/Lightbox.js +1 -1
- package/lib-es/components/Image/Lightbox/Lightbox.js.map +1 -1
- package/lib-es/components/ItemList/ItemListNew/ItemListNew.js +1 -2
- package/lib-es/components/ItemList/ItemListNew/ItemListNew.js.map +1 -1
- package/lib-es/components/List/ListRender.js.map +1 -1
- package/lib-es/components/List/components/Cards/CardsRender.js.map +1 -1
- package/lib-es/components/List/components/Full/FullRender.js +2 -2
- package/lib-es/components/List/components/Full/FullRender.js.map +1 -1
- package/lib-es/components/Menu/Menu.js +1 -1
- package/lib-es/components/Menu/Menu.js.map +1 -1
- package/lib-es/components/MenuItem/MenuEntitiesItem.js +177 -0
- package/lib-es/components/MenuItem/MenuEntitiesItem.js.map +1 -0
- package/lib-es/components/MenuItem/MenuItem.js +28 -60
- package/lib-es/components/MenuItem/MenuItem.js.map +1 -1
- package/lib-es/components/MenuItem/MenuItemRender.js +84 -0
- package/lib-es/components/MenuItem/MenuItemRender.js.map +1 -0
- package/lib-es/components/MenuItem/helpers/index.js +3 -0
- package/lib-es/components/MenuItem/helpers/index.js.map +1 -0
- package/lib-es/components/MenuItem/helpers/inject-helper-into-template.js +8 -0
- package/lib-es/components/MenuItem/helpers/inject-helper-into-template.js.map +1 -0
- package/lib-es/components/Modal/Modal.js +1 -1
- package/lib-es/components/Modal/Modal.js.map +1 -1
- package/lib-es/components/ModalAdapter/ModalAdapter.js +13 -0
- package/lib-es/components/ModalAdapter/ModalAdapter.js.map +1 -0
- package/lib-es/components/ModalAdapter/index.js +3 -0
- package/lib-es/components/ModalAdapter/index.js.map +1 -0
- package/lib-es/components/SearchFilter/SearchFilter/FiltersList.js.map +1 -1
- package/lib-es/components/SearchFilter/SearchFilter/MobileFormToolbar.js +1 -1
- package/lib-es/components/SearchFilter/SearchFilter/MobileFormToolbar.js.map +1 -1
- package/lib-es/components/SearchFilter/SearchFilter/ResetDesktopForm.js +3 -3
- package/lib-es/components/SearchFilter/SearchFilter/ResetDesktopForm.js.map +1 -1
- package/lib-es/components/SearchFilter/SearchFilter/SearchFilter.js +19 -7
- package/lib-es/components/SearchFilter/SearchFilter/SearchFilter.js.map +1 -1
- package/lib-es/components/SearchFilter/SearchFilterContainer.js +23 -20
- package/lib-es/components/SearchFilter/SearchFilterContainer.js.map +1 -1
- package/lib-es/components/SearchFilter/components/Checkbox.js +1 -1
- package/lib-es/components/SearchFilter/components/Checkbox.js.map +1 -1
- package/lib-es/components/SearchFilter/components/Select.js.map +1 -1
- package/lib-es/components/SearchFilter/components/TextSearch.js +1 -0
- package/lib-es/components/SearchFilter/components/TextSearch.js.map +1 -1
- package/lib-es/components/SearchFilter/helpers/build-list-name-query.js +15 -0
- package/lib-es/components/SearchFilter/helpers/build-list-name-query.js.map +1 -0
- package/lib-es/components/SearchFilter/helpers/decode-encode.js.map +1 -1
- package/lib-es/components/SearchFilter/helpers/index.js +2 -1
- package/lib-es/components/SearchFilter/helpers/index.js.map +1 -1
- package/lib-es/components/Video/VideoModal.js +1 -1
- package/lib-es/components/Video/VideoModal.js.map +1 -1
- package/lib-es/components/Video/providers/Vimeo/VimeoProvider.js +0 -1
- package/lib-es/components/Video/providers/Vimeo/VimeoProvider.js.map +1 -1
- package/lib-es/helpers/build-filters-query.js +1 -2
- package/lib-es/helpers/build-filters-query.js.map +1 -1
- package/lib-es/{components/Card/helpers → helpers}/filter-query-setup.js +5 -3
- package/lib-es/helpers/filter-query-setup.js.map +1 -0
- package/lib-es/{components/Card/helpers → helpers}/filters-setup.js +4 -2
- package/lib-es/helpers/filters-setup.js.map +1 -0
- package/lib-es/helpers/get-updated-items-to-display.js.map +1 -0
- package/lib-es/helpers/get-updated-sort-properties.js.map +1 -0
- package/lib-es/helpers/index.js +6 -0
- package/lib-es/helpers/index.js.map +1 -1
- package/lib-es/helpers/should-return.js.map +1 -0
- package/lib-es/{components/Card/helpers → helpers}/should-skip-single-query.js +1 -1
- package/lib-es/helpers/should-skip-single-query.js.map +1 -0
- package/lib-es/hooks/index.js +2 -0
- package/lib-es/hooks/index.js.map +1 -1
- package/lib-es/hooks/use-filter-aggregation-values.js +31 -0
- package/lib-es/hooks/use-filter-aggregation-values.js.map +1 -0
- package/lib-es/hooks/use-portal.js +14 -0
- package/lib-es/hooks/use-portal.js.map +1 -0
- package/package.json +5 -5
- package/src/components/BackToTop/BackToTop.js +6 -11
- package/src/components/Card/Card.js +29 -19
- package/src/components/Card/CardsContainer.js +7 -3
- package/src/components/Card/CardsFactory.js +34 -6
- package/src/components/Card/CardsRender.js +6 -2
- package/src/components/Card/helpers/index.js +6 -6
- package/src/components/Carousel/CarouselImage/CarouselImage.js +3 -1
- package/src/components/Carousel/CarouselImage/constants.js +1 -0
- package/src/components/CarouselWrapper/DefaultCarousel.js +2 -0
- package/src/components/ContentGroup/ContentGroupTabs.js +1 -3
- package/src/components/Image/GlobalLightbox/GlobalLightbox.js +3 -3
- package/src/components/Image/GlobalLightbox/NavButton.js +5 -3
- package/src/components/Image/Image.js +1 -0
- package/src/components/Image/Lightbox/Lightbox.js +1 -1
- package/src/components/ItemList/ItemListNew/ItemListNew.js +1 -4
- package/src/components/List/ListRender.js +0 -1
- package/src/components/List/components/Cards/CardsRender.js +2 -0
- package/src/components/List/components/Full/FullRender.js +2 -1
- package/src/components/Menu/Menu.js +1 -1
- package/src/components/MenuItem/MenuEntitiesItem.js +202 -0
- package/src/components/MenuItem/MenuItem.js +15 -65
- package/src/components/MenuItem/MenuItemRender.js +92 -0
- package/src/components/MenuItem/helpers/index.js +3 -0
- package/src/components/MenuItem/helpers/inject-helper-into-template.js +11 -0
- package/src/components/Modal/Modal.js +1 -1
- package/src/components/ModalAdapter/ModalAdapter.js +12 -0
- package/src/components/ModalAdapter/index.js +3 -0
- package/src/components/SearchFilter/SearchFilter/FiltersList.js +3 -0
- package/src/components/SearchFilter/SearchFilter/MobileFormToolbar.js +1 -1
- package/src/components/SearchFilter/SearchFilter/ResetDesktopForm.js +3 -2
- package/src/components/SearchFilter/SearchFilter/SearchFilter.js +26 -10
- package/src/components/SearchFilter/SearchFilterContainer.js +21 -22
- package/src/components/SearchFilter/components/Checkbox.js +3 -1
- package/src/components/SearchFilter/components/Select.js +2 -0
- package/src/components/SearchFilter/components/TextSearch.js +1 -0
- package/src/components/SearchFilter/helpers/build-list-name-query.js +18 -0
- package/src/components/SearchFilter/helpers/decode-encode.js +0 -1
- package/src/components/SearchFilter/helpers/index.js +2 -0
- package/src/components/Video/VideoModal.js +1 -1
- package/src/components/Video/providers/Vimeo/VimeoProvider.js +0 -1
- package/src/helpers/build-filters-query.js +1 -3
- package/src/{components/Card/helpers → helpers}/filter-query-setup.js +5 -3
- package/src/{components/Card/helpers → helpers}/filters-setup.js +5 -2
- package/src/helpers/index.js +6 -0
- package/src/{components/Card/helpers → helpers}/should-skip-single-query.js +1 -1
- package/src/hooks/index.js +2 -0
- package/src/hooks/use-filter-aggregation-values.js +37 -0
- package/src/hooks/use-portal.js +18 -0
- package/tests/unit/src/components/BackToTop/BackToTop.test.js +9 -5
- package/tests/unit/src/components/BackToTop/__snapshots__/BackToTop.test.js.snap +1 -1
- package/tests/unit/src/components/Card/Card.test.js +16 -1
- package/tests/unit/src/components/Card/__snapshots__/Card.test.js.snap +83 -0
- package/tests/unit/src/components/Card/helpers/get-updated-items-to-display.test.js +1 -1
- package/tests/unit/src/components/Carousel/CarouselImage/__snapshots__/CarouselImage.test.js.snap +1 -1
- package/tests/unit/src/components/Carousel/__snapshots__/Carousel.test.js.snap +1 -1
- package/tests/unit/src/components/ContentGroup/__snapshots__/ContentGroupTabs.test.js.snap +4 -4
- package/tests/unit/src/components/Image/Lightbox/Lightbox.test.js +4 -0
- package/tests/unit/src/components/Image/Lightbox/__snapshots__/Lightbox.test.js.snap +3 -38
- package/tests/unit/src/components/ItemList/__snapshots__/ItemListNew.test.js.snap +0 -2
- package/tests/unit/src/components/MenuItem/MenuEntitiesItem.test.js +23 -0
- package/tests/unit/src/components/MenuItem/MenuItem.test.js +30 -11
- package/tests/unit/src/components/MenuItem/MenuItemRender.test.js +55 -0
- package/tests/unit/src/components/MenuItem/__snapshots__/MenuEntitiesItem.test.js.snap +3 -0
- package/tests/unit/src/components/MenuItem/__snapshots__/MenuItem.test.js.snap +5 -56
- package/tests/unit/src/components/MenuItem/helpers/inject-helper-into-template.test.js +44 -0
- package/tests/unit/src/components/MenuItem/mocks.js +71 -0
- package/tests/unit/src/components/Modal/Modal.test.js +4 -0
- package/tests/unit/src/components/Modal/__snapshots__/Modal.test.js.snap +7 -42
- package/tests/unit/src/components/SearchFilter/SearchFilter/__snapshots__/MobileFormToolbar.test.js.snap +1 -1
- package/tests/unit/src/components/SearchFilter/SearchFilter/__snapshots__/ResetDesktopForm.test.js.snap +1 -1
- package/tests/unit/src/components/SearchFilter/SearchFilter/__snapshots__/SearchFilter.test.js.snap +19 -17
- package/tests/unit/src/components/SearchFilter/__snapshots__/SearchFilterContainer.test.js.snap +7 -1
- package/tests/unit/src/components/SearchFilter/components/__snapshots__/Select.test.js.snap +1 -0
- package/tests/unit/src/components/SearchFilter/components/__snapshots__/TextSearch.test.js.snap +1 -0
- package/tests/unit/src/components/SearchFilterSort/__snapshots__/SearchFilterSort.test.js.snap +1 -0
- package/tests/unit/src/components/Video/providers/Vimeo/__snapshots__/Vimeo.test.js.snap +0 -1
- package/lib/components/Card/helpers/filter-query-setup.js.map +0 -1
- package/lib/components/Card/helpers/filters-setup.js.map +0 -1
- package/lib/components/Card/helpers/get-updated-items-to-display.js.map +0 -1
- package/lib/components/Card/helpers/get-updated-sort-properties.js.map +0 -1
- package/lib/components/Card/helpers/should-return.js.map +0 -1
- package/lib/components/Card/helpers/should-skip-single-query.js.map +0 -1
- package/lib-es/components/Card/helpers/filter-query-setup.js.map +0 -1
- package/lib-es/components/Card/helpers/filters-setup.js.map +0 -1
- package/lib-es/components/Card/helpers/get-updated-items-to-display.js.map +0 -1
- package/lib-es/components/Card/helpers/get-updated-sort-properties.js.map +0 -1
- package/lib-es/components/Card/helpers/should-return.js.map +0 -1
- package/lib-es/components/Card/helpers/should-skip-single-query.js.map +0 -1
- /package/lib/{components/Card/helpers → helpers}/get-updated-items-to-display.js +0 -0
- /package/lib/{components/Card/helpers → helpers}/get-updated-sort-properties.js +0 -0
- /package/lib/{components/Card/helpers → helpers}/should-return.js +0 -0
- /package/lib-es/{components/Card/helpers → helpers}/get-updated-items-to-display.js +0 -0
- /package/lib-es/{components/Card/helpers → helpers}/get-updated-sort-properties.js +0 -0
- /package/lib-es/{components/Card/helpers → helpers}/should-return.js +0 -0
- /package/src/{components/Card/helpers → helpers}/get-updated-items-to-display.js +0 -0
- /package/src/{components/Card/helpers → helpers}/get-updated-sort-properties.js +0 -0
- /package/src/{components/Card/helpers → helpers}/should-return.js +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import React, { Fragment } from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
|
-
import Modal from '@blaze-react/modal';
|
|
4
3
|
import { useInView } from '@blaze-react/utils/lib/customHooks';
|
|
5
4
|
import { ResponsiveImage } from '@blaze-cms/image-cdn-react';
|
|
5
|
+
import Modal from '../../ModalAdapter';
|
|
6
6
|
import BlazeLink from '../../BlazeLink';
|
|
7
7
|
import { IN_VIEW_CONFIG } from '../../../constants';
|
|
8
8
|
|
|
@@ -32,10 +32,7 @@ const ItemListNew = ({ listName, modifier, text }) => {
|
|
|
32
32
|
};
|
|
33
33
|
|
|
34
34
|
return (
|
|
35
|
-
<BlazeButton
|
|
36
|
-
className={`item-list-new ${modifier}`}
|
|
37
|
-
onClick={handleClick}
|
|
38
|
-
aria-label={`Create new ${listName}`}>
|
|
35
|
+
<BlazeButton className={`item-list-new ${modifier}`} onClick={handleClick}>
|
|
39
36
|
{text}
|
|
40
37
|
</BlazeButton>
|
|
41
38
|
);
|
|
@@ -38,7 +38,9 @@ const CardsRender = ({
|
|
|
38
38
|
const propsToDisplayModifiers = getPropsToDisplayModifiers(propsToDisplay);
|
|
39
39
|
const imageIds = itemsToDisplay.map(({ imageId }) => imageId).filter(Boolean);
|
|
40
40
|
const { data: imagesData, loading: imagesLoading } = useGetImages(imageIds, true);
|
|
41
|
+
|
|
41
42
|
if (imagesLoading) return '';
|
|
43
|
+
|
|
42
44
|
const updatedListWithImages = appendImages(imagesData, orderedListData, itemsToDisplay);
|
|
43
45
|
const WrapperToUse = omitWrappers ? Fragment : Wrapper;
|
|
44
46
|
|
|
@@ -16,9 +16,10 @@ const FullRender = ({
|
|
|
16
16
|
graphqlEntityMap,
|
|
17
17
|
...props
|
|
18
18
|
}) => {
|
|
19
|
+
const { parent, entity, propsToDisplay, banner, hasBanner } = props;
|
|
20
|
+
|
|
19
21
|
const contextProps = useContext(MainContext);
|
|
20
22
|
const pageBuilderID = uuid();
|
|
21
|
-
const { parent, entity, propsToDisplay, banner, hasBanner } = props;
|
|
22
23
|
const bannerProps = banner
|
|
23
24
|
? { hasBanner, parent, entity, propsToDisplay, ...banner, type: BANNER }
|
|
24
25
|
: null;
|
|
@@ -63,7 +63,7 @@ const Menu = ({
|
|
|
63
63
|
<BlazeButton
|
|
64
64
|
className={`menu--mobile-button ${mobileButtonModifier}`}
|
|
65
65
|
onClick={() => setShowMobileMenu(!showMobileMenu)}
|
|
66
|
-
|
|
66
|
+
label={showMobileMenu ? 'Close mobile menu' : 'Open mobile menu'}>
|
|
67
67
|
<i>
|
|
68
68
|
{showMobileMenu ? (
|
|
69
69
|
<MdClose className={closeIconModifier} />
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { useQuery } from '@apollo/client';
|
|
4
|
+
import MenuItemRender from './MenuItemRender';
|
|
5
|
+
import {
|
|
6
|
+
buildPropsQuery,
|
|
7
|
+
getEntityData,
|
|
8
|
+
getRequiredSchemas,
|
|
9
|
+
getUnpublishedEntityName,
|
|
10
|
+
getUpdatedFilterBy,
|
|
11
|
+
filterQuerySetup,
|
|
12
|
+
filtersSetup,
|
|
13
|
+
getUpdatedItemsToDisplay,
|
|
14
|
+
getUpdatedSortProperties,
|
|
15
|
+
shouldReturn,
|
|
16
|
+
shouldSkipSingleQuery
|
|
17
|
+
} from '../../helpers';
|
|
18
|
+
import { useGetEntitySchemasAsObj } from '../../hooks';
|
|
19
|
+
import { generateSingleItemQuery } from '../../application/query';
|
|
20
|
+
import { AND, SEARCH_PUBLISHED_CONTENT } from '../../constants';
|
|
21
|
+
|
|
22
|
+
const MenuEntitiesItem = ({ entities, parent, ...props }) => {
|
|
23
|
+
const { itemEntity: parentEntity, itemId: parentId } = parent;
|
|
24
|
+
const {
|
|
25
|
+
operator: filterOperator = AND,
|
|
26
|
+
filterByProperty = [],
|
|
27
|
+
sortProperties = [],
|
|
28
|
+
itemsToDisplay,
|
|
29
|
+
filterBy = [],
|
|
30
|
+
sortby,
|
|
31
|
+
sort
|
|
32
|
+
} = props;
|
|
33
|
+
|
|
34
|
+
const unpublishedEntityName = getUnpublishedEntityName(parentEntity);
|
|
35
|
+
|
|
36
|
+
const [updatedSortProperties, sortbyFilters] = getUpdatedSortProperties(
|
|
37
|
+
sort,
|
|
38
|
+
sortby,
|
|
39
|
+
sortProperties
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
const {
|
|
43
|
+
data: mainSchemas = {},
|
|
44
|
+
loading: entityObjloading,
|
|
45
|
+
error: entityObjError
|
|
46
|
+
} = useGetEntitySchemasAsObj([unpublishedEntityName, ...entities]);
|
|
47
|
+
|
|
48
|
+
const [filterEntity] = entities;
|
|
49
|
+
|
|
50
|
+
const { [filterEntity]: filterEntitySchema = {} } = mainSchemas;
|
|
51
|
+
|
|
52
|
+
const entitiesTypes = entities.map(entity => getEntityData(entity, mainSchemas[entity]));
|
|
53
|
+
const graphqlEntityMap = entitiesTypes.reduce(
|
|
54
|
+
(acc, entityType) => ({ ...acc, [entityType.entityType]: entityType.entity }),
|
|
55
|
+
{}
|
|
56
|
+
);
|
|
57
|
+
const docTypes = entitiesTypes.map(({ docType }) => docType);
|
|
58
|
+
const entityTypes = entitiesTypes.map(({ entityType }) => entityType);
|
|
59
|
+
|
|
60
|
+
const entityFields = buildPropsQuery(filterEntitySchema, ['name', 'url']) || '';
|
|
61
|
+
const parentSchema = mainSchemas[unpublishedEntityName] || {};
|
|
62
|
+
|
|
63
|
+
const {
|
|
64
|
+
entitySameAsCurrentItemEntity,
|
|
65
|
+
filterEntityRelations,
|
|
66
|
+
inheritedFilters,
|
|
67
|
+
queryProps,
|
|
68
|
+
getAction,
|
|
69
|
+
action
|
|
70
|
+
} = filtersSetup({
|
|
71
|
+
itemEntityUpdated: unpublishedEntityName,
|
|
72
|
+
currentSchema: parentSchema,
|
|
73
|
+
filterEntitySchema,
|
|
74
|
+
filterByProperty,
|
|
75
|
+
entityFields,
|
|
76
|
+
entityTypes,
|
|
77
|
+
filterBy,
|
|
78
|
+
entities
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
const {
|
|
82
|
+
data: { entityData: parentEntityData = {} } = {},
|
|
83
|
+
error: singleItemQueryError,
|
|
84
|
+
loading: singleItemQueryLoading
|
|
85
|
+
} = useQuery(generateSingleItemQuery(getAction, queryProps), {
|
|
86
|
+
variables: { id: parentId },
|
|
87
|
+
skip: shouldSkipSingleQuery(entityObjloading, getAction, queryProps)
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
const {
|
|
91
|
+
data: requiredSchema = {},
|
|
92
|
+
loading: schemaLoading,
|
|
93
|
+
error: schemaError
|
|
94
|
+
} = useGetEntitySchemasAsObj(
|
|
95
|
+
getRequiredSchemas([...filterByProperty, ...sortbyFilters], filterEntitySchema),
|
|
96
|
+
entityObjloading
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
const getEntitySchemas = Object.values(requiredSchema);
|
|
100
|
+
|
|
101
|
+
const updatedItemsToDisplay = getUpdatedItemsToDisplay({
|
|
102
|
+
inheritedFilters,
|
|
103
|
+
parentEntityData,
|
|
104
|
+
itemsToDisplay,
|
|
105
|
+
parentSchema
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
const variableProps = {
|
|
109
|
+
sortProperties: updatedSortProperties,
|
|
110
|
+
filterByProperty,
|
|
111
|
+
sortby: null,
|
|
112
|
+
sort: null,
|
|
113
|
+
filterBy
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
const updatedFilterBy = getUpdatedFilterBy(
|
|
117
|
+
inheritedFilters,
|
|
118
|
+
parentEntityData,
|
|
119
|
+
filterEntitySchema,
|
|
120
|
+
parentSchema,
|
|
121
|
+
parentId,
|
|
122
|
+
variableProps
|
|
123
|
+
);
|
|
124
|
+
|
|
125
|
+
const { variables } = filterQuerySetup({
|
|
126
|
+
itemsToDisplay: updatedItemsToDisplay,
|
|
127
|
+
entitySameAsCurrentItemEntity,
|
|
128
|
+
filterEntityRelations,
|
|
129
|
+
entity: filterEntity,
|
|
130
|
+
docType: docTypes,
|
|
131
|
+
getEntitySchemas,
|
|
132
|
+
updatedFilterBy,
|
|
133
|
+
variableProps,
|
|
134
|
+
filterOperator
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
const hasNoItemsToDisplayOrFilter = !updatedItemsToDisplay.length && !updatedFilterBy;
|
|
138
|
+
|
|
139
|
+
const { data = {} } = useQuery(action, {
|
|
140
|
+
variables,
|
|
141
|
+
skip: shouldReturn(
|
|
142
|
+
hasNoItemsToDisplayOrFilter,
|
|
143
|
+
singleItemQueryLoading,
|
|
144
|
+
singleItemQueryError,
|
|
145
|
+
entityObjloading,
|
|
146
|
+
entityObjError,
|
|
147
|
+
schemaLoading,
|
|
148
|
+
schemaError
|
|
149
|
+
)
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
const { results } = data[SEARCH_PUBLISHED_CONTENT] || {};
|
|
153
|
+
|
|
154
|
+
if (!results) return null;
|
|
155
|
+
|
|
156
|
+
return results.map(item => {
|
|
157
|
+
const itemParent = {
|
|
158
|
+
itemId: item.id,
|
|
159
|
+
itemEntity: graphqlEntityMap[item.__typename]
|
|
160
|
+
};
|
|
161
|
+
return <MenuItemRender {...props} parent={itemParent} url={item.url || props.url} />;
|
|
162
|
+
});
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
MenuEntitiesItem.propTypes = {
|
|
166
|
+
children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]),
|
|
167
|
+
eventType: PropTypes.string.isRequired,
|
|
168
|
+
modifier: PropTypes.string,
|
|
169
|
+
parent: PropTypes.object,
|
|
170
|
+
text: PropTypes.string,
|
|
171
|
+
url: PropTypes.string,
|
|
172
|
+
entities: PropTypes.array,
|
|
173
|
+
limit: PropTypes.number,
|
|
174
|
+
offset: PropTypes.number,
|
|
175
|
+
sortby: PropTypes.array,
|
|
176
|
+
filterBy: PropTypes.array,
|
|
177
|
+
sort: PropTypes.string,
|
|
178
|
+
operator: PropTypes.string.isRequired,
|
|
179
|
+
filterOperator: PropTypes.string.isRequired,
|
|
180
|
+
sortProperties: PropTypes.array,
|
|
181
|
+
filterByProperty: PropTypes.array,
|
|
182
|
+
itemsToDisplay: PropTypes.array
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
MenuEntitiesItem.defaultProps = {
|
|
186
|
+
children: null,
|
|
187
|
+
modifier: '',
|
|
188
|
+
limit: 0,
|
|
189
|
+
offset: 0,
|
|
190
|
+
itemsToDisplay: [],
|
|
191
|
+
sort: '',
|
|
192
|
+
sortby: [],
|
|
193
|
+
sortProperties: [],
|
|
194
|
+
filterByProperty: [],
|
|
195
|
+
parent: {},
|
|
196
|
+
filterBy: [],
|
|
197
|
+
text: '',
|
|
198
|
+
url: '',
|
|
199
|
+
entities: []
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
export default MenuEntitiesItem;
|
|
@@ -1,83 +1,33 @@
|
|
|
1
|
-
import React
|
|
1
|
+
import React from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import { hasChildren } from '../../helpers';
|
|
6
|
-
import BlazeLink from '../BlazeLink';
|
|
7
|
-
import MenuContext from '../Menu/MenuContext';
|
|
3
|
+
import MenuItemRender from './MenuItemRender';
|
|
4
|
+
import MenuEntitiesItem from './MenuEntitiesItem';
|
|
8
5
|
|
|
9
|
-
const MenuItem = ({
|
|
10
|
-
const
|
|
11
|
-
const { showMobileMenu } = useContext(MenuContext);
|
|
6
|
+
const MenuItem = ({ entities, parent, ...props }) => {
|
|
7
|
+
const hasEntities = entities && entities.length;
|
|
12
8
|
|
|
13
|
-
|
|
14
|
-
() => {
|
|
15
|
-
if (!showMobileMenu) setDisplayChildren(false);
|
|
16
|
-
},
|
|
17
|
-
[showMobileMenu]
|
|
18
|
-
);
|
|
9
|
+
if (!hasEntities) return <MenuItemRender parent={parent} {...props} />;
|
|
19
10
|
|
|
20
|
-
|
|
21
|
-
const childrenDisplayClass = displayChildren ? '' : HIDDEN;
|
|
22
|
-
|
|
23
|
-
const handleItemEvent = ({ type }) => {
|
|
24
|
-
if (isHoverEvent) {
|
|
25
|
-
if (type === MOUSE_ENTER) {
|
|
26
|
-
setDisplayChildren(true);
|
|
27
|
-
}
|
|
28
|
-
if (type === MOUSE_LEAVE) {
|
|
29
|
-
setDisplayChildren(false);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
|
-
const hasValidChildren = hasChildren(children);
|
|
34
|
-
|
|
35
|
-
return (
|
|
36
|
-
<li
|
|
37
|
-
className={modifier}
|
|
38
|
-
onMouseEnter={handleItemEvent}
|
|
39
|
-
onMouseLeave={handleItemEvent}
|
|
40
|
-
aria-label={text}>
|
|
41
|
-
<div className="menu--item--link">
|
|
42
|
-
{url ? (
|
|
43
|
-
<BlazeLink href={url}>{text}</BlazeLink>
|
|
44
|
-
) : (
|
|
45
|
-
<span role="button" onClick={handleItemEvent} aria-label={text}>
|
|
46
|
-
{text}
|
|
47
|
-
</span>
|
|
48
|
-
)}
|
|
49
|
-
{hasValidChildren && (
|
|
50
|
-
<i
|
|
51
|
-
role="button"
|
|
52
|
-
aria-label={
|
|
53
|
-
displayChildren ? `Collapse ${text} menu items` : `Expand ${text} menu items`
|
|
54
|
-
}
|
|
55
|
-
className="menu--item--link--icon"
|
|
56
|
-
onClick={() => setDisplayChildren(!displayChildren)}>
|
|
57
|
-
{displayChildren ? <FaChevronUp /> : <FaChevronDown />}
|
|
58
|
-
</i>
|
|
59
|
-
)}
|
|
60
|
-
</div>
|
|
61
|
-
{hasValidChildren && (
|
|
62
|
-
<div className={`menu--item-children ${childrenDisplayClass}`}>{children}</div>
|
|
63
|
-
)}
|
|
64
|
-
</li>
|
|
65
|
-
);
|
|
11
|
+
return <MenuEntitiesItem entities={entities} parent={parent} {...props} />;
|
|
66
12
|
};
|
|
67
13
|
|
|
68
14
|
MenuItem.propTypes = {
|
|
15
|
+
children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]),
|
|
16
|
+
eventType: PropTypes.string.isRequired,
|
|
69
17
|
modifier: PropTypes.string,
|
|
18
|
+
parent: PropTypes.object,
|
|
70
19
|
text: PropTypes.string,
|
|
71
20
|
url: PropTypes.string,
|
|
72
|
-
|
|
73
|
-
children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node])
|
|
21
|
+
entities: PropTypes.array
|
|
74
22
|
};
|
|
75
23
|
|
|
76
24
|
MenuItem.defaultProps = {
|
|
77
|
-
|
|
25
|
+
children: null,
|
|
78
26
|
modifier: '',
|
|
27
|
+
parent: {},
|
|
79
28
|
text: '',
|
|
80
|
-
|
|
29
|
+
url: '',
|
|
30
|
+
entities: []
|
|
81
31
|
};
|
|
82
32
|
|
|
83
33
|
export default MenuItem;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import React, { useState, useContext, useEffect } from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { FaChevronDown, FaChevronUp } from 'react-icons/fa';
|
|
4
|
+
import { useStringTemplate } from '@blaze-cms/utils-handlebars';
|
|
5
|
+
import { HOVER, MOUSE_ENTER, MOUSE_LEAVE, HIDDEN } from '../../constants';
|
|
6
|
+
import { hasChildren } from '../../helpers';
|
|
7
|
+
import BlazeLink from '../BlazeLink';
|
|
8
|
+
import MenuContext from '../Menu/MenuContext';
|
|
9
|
+
import { injectHelperIntoTemplate } from './helpers';
|
|
10
|
+
|
|
11
|
+
const MenuItemRender = ({ children, eventType, text, modifier, url, parent }) => {
|
|
12
|
+
const [displayChildren, setDisplayChildren] = useState(false);
|
|
13
|
+
const { showMobileMenu } = useContext(MenuContext);
|
|
14
|
+
const {
|
|
15
|
+
loading: loadingText,
|
|
16
|
+
data: [textToUse]
|
|
17
|
+
} = useStringTemplate(parent, [text]);
|
|
18
|
+
|
|
19
|
+
const {
|
|
20
|
+
loading: loadingUrl,
|
|
21
|
+
data: [urlToUse]
|
|
22
|
+
} = useStringTemplate(parent, [injectHelperIntoTemplate(url, 'url_encode')]);
|
|
23
|
+
|
|
24
|
+
useEffect(
|
|
25
|
+
() => {
|
|
26
|
+
if (!showMobileMenu) setDisplayChildren(false);
|
|
27
|
+
},
|
|
28
|
+
[showMobileMenu]
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
if (loadingUrl || loadingText) return '';
|
|
32
|
+
|
|
33
|
+
const isHoverEvent = eventType === HOVER;
|
|
34
|
+
const childrenDisplayClass = displayChildren ? '' : HIDDEN;
|
|
35
|
+
|
|
36
|
+
const handleItemEvent = ({ type }) => {
|
|
37
|
+
if (isHoverEvent) {
|
|
38
|
+
if (type === MOUSE_ENTER) {
|
|
39
|
+
setDisplayChildren(true);
|
|
40
|
+
}
|
|
41
|
+
if (type === MOUSE_LEAVE) {
|
|
42
|
+
setDisplayChildren(false);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
const hasValidChildren = hasChildren(children);
|
|
47
|
+
|
|
48
|
+
return (
|
|
49
|
+
<li className={modifier} onMouseEnter={handleItemEvent} onMouseLeave={handleItemEvent}>
|
|
50
|
+
<div className="menu--item--link">
|
|
51
|
+
{urlToUse ? (
|
|
52
|
+
<BlazeLink href={urlToUse}>{textToUse}</BlazeLink>
|
|
53
|
+
) : (
|
|
54
|
+
<span role="button" onClick={handleItemEvent}>
|
|
55
|
+
{textToUse}
|
|
56
|
+
</span>
|
|
57
|
+
)}
|
|
58
|
+
{hasValidChildren && (
|
|
59
|
+
<i
|
|
60
|
+
role="button"
|
|
61
|
+
className="menu--item--link--icon"
|
|
62
|
+
onClick={() => setDisplayChildren(!displayChildren)}>
|
|
63
|
+
{displayChildren ? <FaChevronUp /> : <FaChevronDown />}
|
|
64
|
+
</i>
|
|
65
|
+
)}
|
|
66
|
+
</div>
|
|
67
|
+
|
|
68
|
+
{hasValidChildren && (
|
|
69
|
+
<div className={`menu--item-children ${childrenDisplayClass}`}>{children}</div>
|
|
70
|
+
)}
|
|
71
|
+
</li>
|
|
72
|
+
);
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
MenuItemRender.propTypes = {
|
|
76
|
+
modifier: PropTypes.string,
|
|
77
|
+
text: PropTypes.string,
|
|
78
|
+
url: PropTypes.string,
|
|
79
|
+
eventType: PropTypes.string.isRequired,
|
|
80
|
+
parent: PropTypes.object,
|
|
81
|
+
children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node])
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
MenuItemRender.defaultProps = {
|
|
85
|
+
url: '',
|
|
86
|
+
modifier: '',
|
|
87
|
+
text: '',
|
|
88
|
+
children: null,
|
|
89
|
+
parent: {}
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
export default MenuItemRender;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
const injectHelperIntoTemplate = (template, helper) => {
|
|
2
|
+
if (!helper || !template) return template;
|
|
3
|
+
|
|
4
|
+
let result = template.replace(/{{{([^{}]+)}}}/g, `{{{${helper} $1}}}`);
|
|
5
|
+
|
|
6
|
+
result = result.replace(/{{([^{}]+)}}(?!})/g, `{{${helper} $1}}`);
|
|
7
|
+
|
|
8
|
+
return result;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export default injectHelperIntoTemplate;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
|
-
import BlazeModal from '
|
|
3
|
+
import BlazeModal from '../ModalAdapter';
|
|
4
4
|
import { renderChildren, updateChildrensParent, hasChildren } from '../../helpers';
|
|
5
5
|
|
|
6
6
|
const Modal = ({ children, elementTitle, onClose, ...otherProps }) => {
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import Modal from '@blaze-react/modal';
|
|
3
|
+
import ReactDOM from 'react-dom';
|
|
4
|
+
import { usePortal } from '../../hooks';
|
|
5
|
+
|
|
6
|
+
const ModalAdapter = ({ ...props }) => {
|
|
7
|
+
const target = usePortal();
|
|
8
|
+
|
|
9
|
+
return ReactDOM.createPortal(<Modal {...props} />, target);
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export default ModalAdapter;
|
|
@@ -38,6 +38,7 @@ const FiltersList = ({
|
|
|
38
38
|
/>
|
|
39
39
|
</div>
|
|
40
40
|
);
|
|
41
|
+
|
|
41
42
|
case CHECKBOX:
|
|
42
43
|
return (
|
|
43
44
|
<div
|
|
@@ -56,6 +57,7 @@ const FiltersList = ({
|
|
|
56
57
|
/>
|
|
57
58
|
</div>
|
|
58
59
|
);
|
|
60
|
+
|
|
59
61
|
case SELECT:
|
|
60
62
|
return (
|
|
61
63
|
<div
|
|
@@ -74,6 +76,7 @@ const FiltersList = ({
|
|
|
74
76
|
/>
|
|
75
77
|
</div>
|
|
76
78
|
);
|
|
79
|
+
|
|
77
80
|
case RANGE:
|
|
78
81
|
return (
|
|
79
82
|
!!areAggregationsAvailable && (
|
|
@@ -10,13 +10,14 @@ const ResetDesktopForm = ({ handleReset }) => (
|
|
|
10
10
|
className="icon-button icon-button--reset"
|
|
11
11
|
title="reset--button"
|
|
12
12
|
data-testid="reset-icon"
|
|
13
|
-
onClick={handleReset}
|
|
13
|
+
onClick={handleReset}
|
|
14
|
+
aria-label="Reset search filters">
|
|
14
15
|
<i>
|
|
15
16
|
<FaRedoAlt />
|
|
16
17
|
</i>
|
|
17
18
|
</button>
|
|
18
19
|
|
|
19
|
-
<div role="button" onClick={handleReset} data-testid="reset-button"
|
|
20
|
+
<div role="button" onClick={handleReset} data-testid="reset-button">
|
|
20
21
|
{RESET}
|
|
21
22
|
</div>
|
|
22
23
|
</div>
|
|
@@ -3,17 +3,17 @@ import PropTypes from 'prop-types';
|
|
|
3
3
|
import classnames from 'classnames';
|
|
4
4
|
import debounce from 'lodash.debounce';
|
|
5
5
|
import FiltersList from './FiltersList';
|
|
6
|
-
import { isDeviceDesktop, getResponsiveFilterClassnames, buildUrlQuery } from '../helpers';
|
|
7
|
-
|
|
8
6
|
import CloseMobileForm from './CloseMobileForm';
|
|
9
7
|
import ResetDesktopForm from './ResetDesktopForm';
|
|
10
8
|
import MobileFormToolbar from './MobileFormToolbar';
|
|
9
|
+
import { useFilterAggregationValues } from '../../../hooks';
|
|
10
|
+
import { isDeviceDesktop, getResponsiveFilterClassnames, buildUrlQuery } from '../helpers';
|
|
11
11
|
import { SEARCH, REFINE, MORE_FILTERS_CLASSES } from '../constants';
|
|
12
12
|
|
|
13
13
|
const SearchFilter = ({
|
|
14
14
|
searchFilterRef,
|
|
15
15
|
listComponentName,
|
|
16
|
-
data,
|
|
16
|
+
data: filterData,
|
|
17
17
|
filters,
|
|
18
18
|
hasUrl,
|
|
19
19
|
entity,
|
|
@@ -26,11 +26,17 @@ const SearchFilter = ({
|
|
|
26
26
|
groupAfterMobile,
|
|
27
27
|
filterValues,
|
|
28
28
|
setAppliedFilters,
|
|
29
|
+
mobileRefineButtonText,
|
|
29
30
|
query
|
|
30
31
|
}) => {
|
|
31
32
|
const [moreFiltersMobileCollapsed, setMoreFiltersMobileCollapsed] = useState(true);
|
|
32
33
|
const [moreFiltersDesktopCollapsed, setMoreFiltersDesktopCollapsed] = useState(true);
|
|
33
34
|
|
|
35
|
+
const [data, setStateValues, setSelectProp] = useFilterAggregationValues({
|
|
36
|
+
data: filterData,
|
|
37
|
+
filterValues
|
|
38
|
+
});
|
|
39
|
+
|
|
34
40
|
const doSubmit = newValues => {
|
|
35
41
|
const newQuery = filterValues
|
|
36
42
|
? buildUrlQuery(newValues, filters, listComponentName, query)
|
|
@@ -74,6 +80,8 @@ const SearchFilter = ({
|
|
|
74
80
|
};
|
|
75
81
|
|
|
76
82
|
const updateFilterValues = (newValues, shouldSubmit) => {
|
|
83
|
+
const [lastChangedFilter] = Object.keys(newValues);
|
|
84
|
+
setSelectProp(lastChangedFilter);
|
|
77
85
|
setAppliedFilters({ newValues, shouldSearch: shouldSubmit, type: 'update' });
|
|
78
86
|
};
|
|
79
87
|
|
|
@@ -89,6 +97,7 @@ const SearchFilter = ({
|
|
|
89
97
|
onSubmit={e => {
|
|
90
98
|
e.preventDefault();
|
|
91
99
|
doSubmit(filterValues);
|
|
100
|
+
setStateValues(filterData);
|
|
92
101
|
}}>
|
|
93
102
|
{displaySearchFilter && (
|
|
94
103
|
<CloseMobileForm handleClose={() => setDisplaySearchFilter(false)} />
|
|
@@ -152,6 +161,11 @@ const SearchFilter = ({
|
|
|
152
161
|
data-testId="search-filter-desktop-toggler"
|
|
153
162
|
className={moreFiltersDesktopTogglerClass}
|
|
154
163
|
type="button"
|
|
164
|
+
aria-label={
|
|
165
|
+
moreFiltersDesktopCollapsed
|
|
166
|
+
? 'Show more search filters'
|
|
167
|
+
: 'Show less search filters'
|
|
168
|
+
}
|
|
155
169
|
onClick={() =>
|
|
156
170
|
setMoreFiltersDesktopCollapsed(!moreFiltersDesktopCollapsed)
|
|
157
171
|
}>
|
|
@@ -206,12 +220,12 @@ const SearchFilter = ({
|
|
|
206
220
|
|
|
207
221
|
{isCollapsedOnResponsive &&
|
|
208
222
|
!displaySearchFilter && (
|
|
209
|
-
<div
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
{REFINE}
|
|
223
|
+
<div
|
|
224
|
+
className="filter__refine filter__refine--mobile-close"
|
|
225
|
+
data-testid="refine-mobile"
|
|
226
|
+
aria-label="Toggle Search Filter">
|
|
227
|
+
<div role="button" onClick={() => setDisplaySearchFilter(true)}>
|
|
228
|
+
{mobileRefineButtonText || REFINE}
|
|
215
229
|
</div>
|
|
216
230
|
</div>
|
|
217
231
|
)}
|
|
@@ -235,10 +249,12 @@ SearchFilter.propTypes = {
|
|
|
235
249
|
filterValues: PropTypes.object.isRequired,
|
|
236
250
|
setAppliedFilters: PropTypes.func.isRequired,
|
|
237
251
|
listComponentName: PropTypes.string,
|
|
238
|
-
query: PropTypes.object
|
|
252
|
+
query: PropTypes.object,
|
|
253
|
+
mobileRefineButtonText: PropTypes.string
|
|
239
254
|
};
|
|
240
255
|
|
|
241
256
|
SearchFilter.defaultProps = {
|
|
257
|
+
mobileRefineButtonText: '',
|
|
242
258
|
listComponentName: '',
|
|
243
259
|
query: {}
|
|
244
260
|
};
|