@blaze-cms/react-page-builder 0.146.0-alpha.0 → 0.146.0-alpha.10
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 +74 -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 +10 -6
- 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/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.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 +7 -0
- package/lib/hooks/index.js.map +1 -1
- 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 +10 -6
- 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/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.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 +1 -0
- package/lib-es/hooks/index.js.map +1 -1
- 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 +16 -9
- package/src/components/SearchFilter/SearchFilterContainer.js +16 -22
- package/src/components/SearchFilter/components/Checkbox.js +3 -1
- 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 +0 -1
- 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 +1 -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
|
@@ -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,11 +3,10 @@ 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 { isDeviceDesktop, getResponsiveFilterClassnames, buildUrlQuery } from '../helpers';
|
|
11
10
|
import { SEARCH, REFINE, MORE_FILTERS_CLASSES } from '../constants';
|
|
12
11
|
|
|
13
12
|
const SearchFilter = ({
|
|
@@ -26,6 +25,7 @@ const SearchFilter = ({
|
|
|
26
25
|
groupAfterMobile,
|
|
27
26
|
filterValues,
|
|
28
27
|
setAppliedFilters,
|
|
28
|
+
mobileRefineButtonText,
|
|
29
29
|
query
|
|
30
30
|
}) => {
|
|
31
31
|
const [moreFiltersMobileCollapsed, setMoreFiltersMobileCollapsed] = useState(true);
|
|
@@ -152,6 +152,11 @@ const SearchFilter = ({
|
|
|
152
152
|
data-testId="search-filter-desktop-toggler"
|
|
153
153
|
className={moreFiltersDesktopTogglerClass}
|
|
154
154
|
type="button"
|
|
155
|
+
aria-label={
|
|
156
|
+
moreFiltersDesktopCollapsed
|
|
157
|
+
? 'Show more search filters'
|
|
158
|
+
: 'Show less search filters'
|
|
159
|
+
}
|
|
155
160
|
onClick={() =>
|
|
156
161
|
setMoreFiltersDesktopCollapsed(!moreFiltersDesktopCollapsed)
|
|
157
162
|
}>
|
|
@@ -206,12 +211,12 @@ const SearchFilter = ({
|
|
|
206
211
|
|
|
207
212
|
{isCollapsedOnResponsive &&
|
|
208
213
|
!displaySearchFilter && (
|
|
209
|
-
<div
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
{REFINE}
|
|
214
|
+
<div
|
|
215
|
+
className="filter__refine filter__refine--mobile-close"
|
|
216
|
+
data-testid="refine-mobile"
|
|
217
|
+
aria-label="Toggle Search Filter">
|
|
218
|
+
<div role="button" onClick={() => setDisplaySearchFilter(true)}>
|
|
219
|
+
{mobileRefineButtonText || REFINE}
|
|
215
220
|
</div>
|
|
216
221
|
</div>
|
|
217
222
|
)}
|
|
@@ -235,10 +240,12 @@ SearchFilter.propTypes = {
|
|
|
235
240
|
filterValues: PropTypes.object.isRequired,
|
|
236
241
|
setAppliedFilters: PropTypes.func.isRequired,
|
|
237
242
|
listComponentName: PropTypes.string,
|
|
238
|
-
query: PropTypes.object
|
|
243
|
+
query: PropTypes.object,
|
|
244
|
+
mobileRefineButtonText: PropTypes.string
|
|
239
245
|
};
|
|
240
246
|
|
|
241
247
|
SearchFilter.defaultProps = {
|
|
248
|
+
mobileRefineButtonText: '',
|
|
242
249
|
listComponentName: '',
|
|
243
250
|
query: {}
|
|
244
251
|
};
|
|
@@ -11,7 +11,8 @@ import {
|
|
|
11
11
|
buildNewUrl,
|
|
12
12
|
getFilterValues,
|
|
13
13
|
getFilterRangesAndCheckboxesValues,
|
|
14
|
-
getUpdatedFilterBy
|
|
14
|
+
getUpdatedFilterBy,
|
|
15
|
+
buildListNameQuery
|
|
15
16
|
} from './helpers';
|
|
16
17
|
import {
|
|
17
18
|
getEntityData,
|
|
@@ -25,23 +26,6 @@ import { SCROLL_OFFSET } from '../../constants';
|
|
|
25
26
|
import searchFilterReducer from './searchFilterReducer';
|
|
26
27
|
import { useGetEntitySchemasAsObj } from '../../hooks';
|
|
27
28
|
|
|
28
|
-
const getFiltersUrlQuery = (query, listName) => {
|
|
29
|
-
if (!listName) return query;
|
|
30
|
-
const updatedQuery = {};
|
|
31
|
-
const listKey = `pb[${listName}]`;
|
|
32
|
-
Object.keys(query).forEach(queryKey => {
|
|
33
|
-
const isListKey = queryKey.indexOf(`${listName}`) !== -1;
|
|
34
|
-
if (!isListKey) return;
|
|
35
|
-
const decodedQueryValue = Array.isArray(query[queryKey])
|
|
36
|
-
? query[queryKey].map(value => decodeURIComponent(value))
|
|
37
|
-
: decodeURIComponent(query[queryKey]);
|
|
38
|
-
const strippedKey = queryKey.substring(listKey.length + 1, queryKey.length - 1);
|
|
39
|
-
if (isListKey) updatedQuery[strippedKey] = decodedQueryValue;
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
return updatedQuery;
|
|
43
|
-
};
|
|
44
|
-
|
|
45
29
|
const SearchFilterContainer = ({
|
|
46
30
|
entity,
|
|
47
31
|
url,
|
|
@@ -54,7 +38,8 @@ const SearchFilterContainer = ({
|
|
|
54
38
|
filterByProperty,
|
|
55
39
|
shouldAddFilters,
|
|
56
40
|
listComponentName,
|
|
57
|
-
parent
|
|
41
|
+
parent,
|
|
42
|
+
mobileRefineButtonText
|
|
58
43
|
}) => {
|
|
59
44
|
const { isPreview } = useContext(MainContext);
|
|
60
45
|
const router = useRouter();
|
|
@@ -65,15 +50,21 @@ const SearchFilterContainer = ({
|
|
|
65
50
|
const [urlPath, setUrlPath] = useState(asPath); // used as asPath can take too long to update
|
|
66
51
|
const [filterValues, dispatch] = useReducer(searchFilterReducer, null);
|
|
67
52
|
const { url: currentUrl, query } = parseUrl(urlPath);
|
|
68
|
-
const updatedQuery =
|
|
53
|
+
const updatedQuery = buildListNameQuery(query, listComponentName);
|
|
69
54
|
const { itemId: parentId, itemEntity: parentEntity } = parent;
|
|
70
55
|
|
|
71
56
|
useEffect(
|
|
72
57
|
() => {
|
|
73
|
-
|
|
58
|
+
const { query: newQuery } = parseUrl(asPath);
|
|
59
|
+
const updatedNewQuery = buildListNameQuery(newQuery, listComponentName);
|
|
60
|
+
const newValues = getFilterValues({}, filters, updatedNewQuery);
|
|
61
|
+
if (newValues) dispatch({ newValues, shouldSearch: false, type: 'update' });
|
|
62
|
+
setUrlPath(asPath);
|
|
74
63
|
},
|
|
64
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
75
65
|
[asPath]
|
|
76
66
|
);
|
|
67
|
+
|
|
77
68
|
const { data: mainSchemas = {}, loading: schemasLoading } = useGetEntitySchemasAsObj([
|
|
78
69
|
parentEntity,
|
|
79
70
|
entity
|
|
@@ -186,11 +177,13 @@ const SearchFilterContainer = ({
|
|
|
186
177
|
setDisplaySearchFilter={setDisplaySearchFilter}
|
|
187
178
|
groupAfterMobile={groupAfterMobile}
|
|
188
179
|
groupAfterDesktop={groupAfterDesktop}
|
|
180
|
+
mobileRefineButtonText={mobileRefineButtonText}
|
|
189
181
|
/>
|
|
190
182
|
);
|
|
191
183
|
};
|
|
192
184
|
|
|
193
185
|
SearchFilterContainer.propTypes = {
|
|
186
|
+
mobileRefineButtonText: PropTypes.string,
|
|
194
187
|
entity: PropTypes.string,
|
|
195
188
|
url: PropTypes.string,
|
|
196
189
|
filters: PropTypes.array,
|
|
@@ -216,7 +209,8 @@ SearchFilterContainer.defaultProps = {
|
|
|
216
209
|
filterByProperty: [],
|
|
217
210
|
shouldAddFilters: false,
|
|
218
211
|
listComponentName: '',
|
|
219
|
-
parent: {}
|
|
212
|
+
parent: {},
|
|
213
|
+
mobileRefineButtonText: ''
|
|
220
214
|
};
|
|
221
215
|
|
|
222
216
|
export default withTitle(SearchFilterContainer);
|
|
@@ -84,7 +84,9 @@ const Checkbox = ({
|
|
|
84
84
|
role="button"
|
|
85
85
|
className="see-more"
|
|
86
86
|
onClick={handleCheckboxOptions}
|
|
87
|
-
aria-label={
|
|
87
|
+
aria-label={
|
|
88
|
+
shouldDisplayMore ? `See ${MORE} ${label} options` : `See ${LESS} ${label} options`
|
|
89
|
+
}>
|
|
88
90
|
{shouldDisplayMore ? (
|
|
89
91
|
<>
|
|
90
92
|
<i>
|
|
@@ -22,6 +22,7 @@ const TextSearch = ({ label, searchValue, updateFilterValues, elementTitle }) =>
|
|
|
22
22
|
<button
|
|
23
23
|
type="button"
|
|
24
24
|
className="icon-button icon-button--search"
|
|
25
|
+
aria-label="Search"
|
|
25
26
|
onClick={e => {
|
|
26
27
|
e.preventDefault();
|
|
27
28
|
updateFilterValues({ [SEARCH_TERM]: searchValue }, true);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const buildListNameQuery = (query, listName) => {
|
|
2
|
+
if (!listName) return query;
|
|
3
|
+
const updatedQuery = {};
|
|
4
|
+
const listKey = `pb[${listName}]`;
|
|
5
|
+
Object.keys(query).forEach(queryKey => {
|
|
6
|
+
const isListKey = queryKey.indexOf(`${listName}`) !== -1;
|
|
7
|
+
if (!isListKey) return;
|
|
8
|
+
const decodedQueryValue = Array.isArray(query[queryKey])
|
|
9
|
+
? query[queryKey].map(value => decodeURIComponent(value))
|
|
10
|
+
: decodeURIComponent(query[queryKey]);
|
|
11
|
+
const strippedKey = queryKey.substring(listKey.length + 1, queryKey.length - 1);
|
|
12
|
+
if (isListKey) updatedQuery[strippedKey] = decodedQueryValue;
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
return updatedQuery;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export default buildListNameQuery;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import buildListNameQuery from './build-list-name-query';
|
|
1
2
|
import buildNewUrl from './build-new-url';
|
|
2
3
|
import { decodeValue, encodeValue } from './decode-encode';
|
|
3
4
|
import checkIfRangeUpdated from './check-if-range-updated';
|
|
@@ -16,6 +17,7 @@ import getUpdatedFilterBy from './get-updated-filter-by';
|
|
|
16
17
|
import buildUrlQuery from './build-url-query';
|
|
17
18
|
|
|
18
19
|
export {
|
|
20
|
+
buildListNameQuery,
|
|
19
21
|
buildNewUrl,
|
|
20
22
|
decodeValue,
|
|
21
23
|
encodeValue,
|
|
@@ -51,7 +51,6 @@ const VimeoProvider = ({ url, autoplay, loop, imageData }) => {
|
|
|
51
51
|
role="button"
|
|
52
52
|
className={VIDEO_WRAPPER_CLASS_NAME}
|
|
53
53
|
style={videoStyle}
|
|
54
|
-
aria-label="Open video"
|
|
55
54
|
onClick={() => !shouldRenderVideo && setShouldRenderVideo(true)}>
|
|
56
55
|
{shouldRenderVideo && !videoError && wrappedCode}
|
|
57
56
|
{videoError && videoError.message}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { getStringTypeProps } from '@blaze-cms/utils/src/helpers';
|
|
2
|
-
import
|
|
3
|
-
import
|
|
2
|
+
import getGenericRenderVariables from './get-generic-render-variables';
|
|
3
|
+
import buildRawQueryBase from './build-raw-query-base';
|
|
4
|
+
import buildSetFilters from './build-set-filters';
|
|
5
|
+
import { DEFAULT_LIMIT } from '../constants';
|
|
4
6
|
|
|
5
7
|
const filterQuerySetup = ({
|
|
6
8
|
getEntitySchemas,
|
|
@@ -13,7 +15,7 @@ const filterQuerySetup = ({
|
|
|
13
15
|
itemsToDisplay,
|
|
14
16
|
entitySameAsCurrentItemEntity,
|
|
15
17
|
entitySchema,
|
|
16
|
-
useRandomSort
|
|
18
|
+
useRandomSort = false
|
|
17
19
|
}) => {
|
|
18
20
|
const stringProps = getStringTypeProps(entity, filterEntityRelations, getEntitySchemas);
|
|
19
21
|
const filterValues =
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import buildQueryFields from './build-query-fields';
|
|
2
|
+
import getInheritedFilters from './get-inherited-filters';
|
|
3
|
+
import getQueryProps from './get-query-props';
|
|
4
|
+
import { getSearchPublishedContent } from '../application/query';
|
|
3
5
|
|
|
4
6
|
const filtersSetup = ({
|
|
5
7
|
entityFields,
|
|
@@ -16,6 +18,7 @@ const filtersSetup = ({
|
|
|
16
18
|
const fields = buildQueryFields(entityFields, entityTypes, isFull);
|
|
17
19
|
const action = getSearchPublishedContent(fields);
|
|
18
20
|
const inheritedFilters = getInheritedFilters(filterBy, filterByProperty);
|
|
21
|
+
|
|
19
22
|
const entitySameAsCurrentItemEntity = entities.includes(itemEntityUpdated);
|
|
20
23
|
const { relations: filterEntityRelations = [] } = filterEntitySchema;
|
|
21
24
|
const queryProps = getQueryProps(inheritedFilters, currentSchema, filterEntitySchema);
|
package/src/helpers/index.js
CHANGED
|
@@ -53,5 +53,11 @@ export { default as appendImages } from './append-images';
|
|
|
53
53
|
export { default as parseTextBlock } from './parse-TextBlock';
|
|
54
54
|
export { default as processDataSummaryValue } from './process-data-summary-value';
|
|
55
55
|
export { default as buildQueryKey } from './build-query-key';
|
|
56
|
+
export { default as filterQuerySetup } from './filter-query-setup';
|
|
57
|
+
export { default as filtersSetup } from './filters-setup';
|
|
58
|
+
export { default as getUpdatedItemsToDisplay } from './get-updated-items-to-display';
|
|
59
|
+
export { default as getUpdatedSortProperties } from './get-updated-sort-properties';
|
|
60
|
+
export { default as shouldReturn } from './should-return';
|
|
61
|
+
export { default as shouldSkipSingleQuery } from './should-skip-single-query';
|
|
56
62
|
export { default as buildRawQueryStringified } from './build-raw-query-stringified';
|
|
57
63
|
export { default as buildFiltersQuery } from './build-filters-query';
|
package/src/hooks/index.js
CHANGED
|
@@ -7,3 +7,4 @@ export { default as useGetSingleEntitySchema } from './use-get-single-entity-sch
|
|
|
7
7
|
export { default as useCheckMobileScreen } from './use-check-mobile-screen';
|
|
8
8
|
export { default as useBannerInsertion } from './use-banner-insertion';
|
|
9
9
|
export { default as useAppSyncEventHook } from './use-app-sync-event-hook';
|
|
10
|
+
export { default as usePortal } from './use-portal';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React, { useEffect } from 'react';
|
|
2
|
+
|
|
3
|
+
function usePortal() {
|
|
4
|
+
const rootElemRef = React.useRef(document.createElement('div'));
|
|
5
|
+
|
|
6
|
+
useEffect(() => {
|
|
7
|
+
document.body.appendChild(rootElemRef.current);
|
|
8
|
+
|
|
9
|
+
const element = rootElemRef.current;
|
|
10
|
+
return function removeElement() {
|
|
11
|
+
element.remove();
|
|
12
|
+
};
|
|
13
|
+
}, []);
|
|
14
|
+
|
|
15
|
+
return rootElemRef.current;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export default usePortal;
|
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @jest-environment jsdom
|
|
3
3
|
*/
|
|
4
|
+
import React from 'react';
|
|
4
5
|
import '@testing-library/jest-dom/extend-expect';
|
|
5
|
-
import { render } from '@
|
|
6
|
+
import { render, screen } from '@testing-library/react';
|
|
6
7
|
import BackToTop from '../../../../../src/components/BackToTop';
|
|
7
8
|
|
|
8
|
-
describe('
|
|
9
|
+
describe('BackToTop component', () => {
|
|
9
10
|
it('should be a function', () => {
|
|
10
11
|
expect(typeof BackToTop).toEqual('function');
|
|
11
12
|
});
|
|
12
13
|
|
|
13
14
|
it('should render without throwing an error and match snapshot', () => {
|
|
14
|
-
const { asFragment } = render(BackToTop
|
|
15
|
-
showAfterPixels: 500
|
|
16
|
-
});
|
|
15
|
+
const { asFragment } = render(<BackToTop showAfterPixels={500} />);
|
|
17
16
|
expect(asFragment()).toMatchSnapshot();
|
|
18
17
|
});
|
|
18
|
+
|
|
19
|
+
it('should not render the button initially', () => {
|
|
20
|
+
render(<BackToTop showAfterPixels={500} />);
|
|
21
|
+
expect(screen.queryByRole('link', { name: /back to top/i })).not.toBeInTheDocument();
|
|
22
|
+
});
|
|
19
23
|
});
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
2
|
|
|
3
|
-
exports[`
|
|
3
|
+
exports[`BackToTop component should render without throwing an error and match snapshot 1`] = `<DocumentFragment />`;
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
* @jest-environment jsdom
|
|
3
3
|
*/
|
|
4
4
|
import React from 'react';
|
|
5
|
-
import { render as _render, act, waitFor } from '@testing-library/react';
|
|
5
|
+
import { render as _render, act, waitFor, screen } from '@testing-library/react';
|
|
6
6
|
import '@testing-library/jest-dom/extend-expect';
|
|
7
|
+
import { setEnvs, deleteEnvs } from '@blaze-cms/tools/test-helpers/test-files/test-env';
|
|
7
8
|
import Card from '../../../../../src/components/Card/Card';
|
|
8
9
|
import { pageBuilderComponentsMocks } from './mockData';
|
|
9
10
|
|
|
@@ -211,4 +212,18 @@ describe('Card component', () => {
|
|
|
211
212
|
});
|
|
212
213
|
expect(getByTestId('full-card')).toBeInTheDocument();
|
|
213
214
|
});
|
|
215
|
+
|
|
216
|
+
it('should render link wrapper', async () => {
|
|
217
|
+
const envs = {
|
|
218
|
+
BLAZE_PB_ADD_CLICK_TO_CARDS: 'true'
|
|
219
|
+
};
|
|
220
|
+
setEnvs(envs);
|
|
221
|
+
const { asFragment } = await render(Card, {
|
|
222
|
+
...componentProps,
|
|
223
|
+
pageBuilderComponents: pageBuilderComponentsMocks
|
|
224
|
+
});
|
|
225
|
+
expect(screen.getByLabelText(componentProps.name)).toBeInTheDocument();
|
|
226
|
+
expect(asFragment()).toMatchSnapshot();
|
|
227
|
+
deleteEnvs(envs);
|
|
228
|
+
});
|
|
214
229
|
});
|