@blaze-cms/react-page-builder 0.146.0-core-styles.0 → 0.146.0-core-styles.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/lib/components/BackToTop/BackToTop.js +8 -13
  3. package/lib/components/BackToTop/BackToTop.js.map +1 -1
  4. package/lib/components/Card/Card.js +5 -3
  5. package/lib/components/Card/Card.js.map +1 -1
  6. package/lib/components/Card/CardsContainer.js +8 -4
  7. package/lib/components/Card/CardsContainer.js.map +1 -1
  8. package/lib/components/Card/CardsFactory.js +37 -7
  9. package/lib/components/Card/CardsFactory.js.map +1 -1
  10. package/lib/components/Card/CardsRender.js +8 -4
  11. package/lib/components/Card/CardsRender.js.map +1 -1
  12. package/lib/components/Card/helpers/index.js +6 -6
  13. package/lib/components/Card/helpers/index.js.map +1 -1
  14. package/lib/components/Carousel/CarouselImage/CarouselImage.js +3 -1
  15. package/lib/components/Carousel/CarouselImage/CarouselImage.js.map +1 -1
  16. package/lib/components/Carousel/CarouselImage/constants.js +9 -0
  17. package/lib/components/Carousel/CarouselImage/constants.js.map +1 -0
  18. package/lib/components/CarouselWrapper/DefaultCarousel.js +2 -0
  19. package/lib/components/CarouselWrapper/DefaultCarousel.js.map +1 -1
  20. package/lib/components/ContentGroup/ContentGroupTabs.js +1 -2
  21. package/lib/components/ContentGroup/ContentGroupTabs.js.map +1 -1
  22. package/lib/components/Image/GlobalLightbox/GlobalLightbox.js +3 -3
  23. package/lib/components/Image/GlobalLightbox/GlobalLightbox.js.map +1 -1
  24. package/lib/components/Image/GlobalLightbox/NavButton.js +6 -3
  25. package/lib/components/Image/GlobalLightbox/NavButton.js.map +1 -1
  26. package/lib/components/Image/Image.js +1 -0
  27. package/lib/components/Image/Image.js.map +1 -1
  28. package/lib/components/ItemList/ItemListNew/ItemListNew.js +1 -2
  29. package/lib/components/ItemList/ItemListNew/ItemListNew.js.map +1 -1
  30. package/lib/components/List/components/Cards/CardsRender.js.map +1 -1
  31. package/lib/components/List/components/Full/FullRender.js +2 -2
  32. package/lib/components/List/components/Full/FullRender.js.map +1 -1
  33. package/lib/components/Menu/Menu.js +1 -1
  34. package/lib/components/Menu/Menu.js.map +1 -1
  35. package/lib/components/MenuItem/MenuEntitiesItem.js +203 -0
  36. package/lib/components/MenuItem/MenuEntitiesItem.js.map +1 -0
  37. package/lib/components/MenuItem/MenuItem.js +25 -71
  38. package/lib/components/MenuItem/MenuItem.js.map +1 -1
  39. package/lib/components/MenuItem/MenuItemRender.js +103 -0
  40. package/lib/components/MenuItem/MenuItemRender.js.map +1 -0
  41. package/lib/components/SearchFilter/SearchFilter/FiltersList.js.map +1 -1
  42. package/lib/components/SearchFilter/SearchFilter/MobileFormToolbar.js +1 -1
  43. package/lib/components/SearchFilter/SearchFilter/MobileFormToolbar.js.map +1 -1
  44. package/lib/components/SearchFilter/SearchFilter/ResetDesktopForm.js +3 -3
  45. package/lib/components/SearchFilter/SearchFilter/ResetDesktopForm.js.map +1 -1
  46. package/lib/components/SearchFilter/SearchFilter/SearchFilter.js +4 -3
  47. package/lib/components/SearchFilter/SearchFilter/SearchFilter.js.map +1 -1
  48. package/lib/components/SearchFilter/components/Checkbox.js +1 -1
  49. package/lib/components/SearchFilter/components/Checkbox.js.map +1 -1
  50. package/lib/components/SearchFilter/components/TextSearch.js +1 -0
  51. package/lib/components/SearchFilter/components/TextSearch.js.map +1 -1
  52. package/lib/components/Video/providers/Vimeo/VimeoProvider.js +0 -1
  53. package/lib/components/Video/providers/Vimeo/VimeoProvider.js.map +1 -1
  54. package/lib/{components/Card/helpers → helpers}/filter-query-setup.js +10 -7
  55. package/lib/helpers/filter-query-setup.js.map +1 -0
  56. package/lib/{components/Card/helpers → helpers}/filters-setup.js +8 -5
  57. package/lib/helpers/filters-setup.js.map +1 -0
  58. package/lib/helpers/get-updated-items-to-display.js.map +1 -0
  59. package/lib/helpers/get-updated-sort-properties.js.map +1 -0
  60. package/lib/helpers/index.js +42 -0
  61. package/lib/helpers/index.js.map +1 -1
  62. package/lib/helpers/should-return.js.map +1 -0
  63. package/lib/{components/Card/helpers → helpers}/should-skip-single-query.js +1 -1
  64. package/lib/helpers/should-skip-single-query.js.map +1 -0
  65. package/lib-es/components/BackToTop/BackToTop.js +11 -17
  66. package/lib-es/components/BackToTop/BackToTop.js.map +1 -1
  67. package/lib-es/components/Card/Card.js +5 -3
  68. package/lib-es/components/Card/Card.js.map +1 -1
  69. package/lib-es/components/Card/CardsContainer.js +9 -5
  70. package/lib-es/components/Card/CardsContainer.js.map +1 -1
  71. package/lib-es/components/Card/CardsFactory.js +40 -9
  72. package/lib-es/components/Card/CardsFactory.js.map +1 -1
  73. package/lib-es/components/Card/CardsRender.js +9 -5
  74. package/lib-es/components/Card/CardsRender.js.map +1 -1
  75. package/lib-es/components/Card/helpers/index.js +6 -6
  76. package/lib-es/components/Card/helpers/index.js.map +1 -1
  77. package/lib-es/components/Carousel/CarouselImage/CarouselImage.js +3 -1
  78. package/lib-es/components/Carousel/CarouselImage/CarouselImage.js.map +1 -1
  79. package/lib-es/components/Carousel/CarouselImage/constants.js +2 -0
  80. package/lib-es/components/Carousel/CarouselImage/constants.js.map +1 -0
  81. package/lib-es/components/CarouselWrapper/DefaultCarousel.js +2 -0
  82. package/lib-es/components/CarouselWrapper/DefaultCarousel.js.map +1 -1
  83. package/lib-es/components/ContentGroup/ContentGroupTabs.js +1 -2
  84. package/lib-es/components/ContentGroup/ContentGroupTabs.js.map +1 -1
  85. package/lib-es/components/Image/GlobalLightbox/GlobalLightbox.js +3 -3
  86. package/lib-es/components/Image/GlobalLightbox/GlobalLightbox.js.map +1 -1
  87. package/lib-es/components/Image/GlobalLightbox/NavButton.js +6 -3
  88. package/lib-es/components/Image/GlobalLightbox/NavButton.js.map +1 -1
  89. package/lib-es/components/Image/Image.js +1 -0
  90. package/lib-es/components/Image/Image.js.map +1 -1
  91. package/lib-es/components/ItemList/ItemListNew/ItemListNew.js +1 -2
  92. package/lib-es/components/ItemList/ItemListNew/ItemListNew.js.map +1 -1
  93. package/lib-es/components/List/components/Cards/CardsRender.js.map +1 -1
  94. package/lib-es/components/List/components/Full/FullRender.js +2 -2
  95. package/lib-es/components/List/components/Full/FullRender.js.map +1 -1
  96. package/lib-es/components/Menu/Menu.js +1 -1
  97. package/lib-es/components/Menu/Menu.js.map +1 -1
  98. package/lib-es/components/MenuItem/MenuEntitiesItem.js +177 -0
  99. package/lib-es/components/MenuItem/MenuEntitiesItem.js.map +1 -0
  100. package/lib-es/components/MenuItem/MenuItem.js +28 -60
  101. package/lib-es/components/MenuItem/MenuItem.js.map +1 -1
  102. package/lib-es/components/MenuItem/MenuItemRender.js +83 -0
  103. package/lib-es/components/MenuItem/MenuItemRender.js.map +1 -0
  104. package/lib-es/components/SearchFilter/SearchFilter/FiltersList.js.map +1 -1
  105. package/lib-es/components/SearchFilter/SearchFilter/MobileFormToolbar.js +1 -1
  106. package/lib-es/components/SearchFilter/SearchFilter/MobileFormToolbar.js.map +1 -1
  107. package/lib-es/components/SearchFilter/SearchFilter/ResetDesktopForm.js +3 -3
  108. package/lib-es/components/SearchFilter/SearchFilter/ResetDesktopForm.js.map +1 -1
  109. package/lib-es/components/SearchFilter/SearchFilter/SearchFilter.js +4 -3
  110. package/lib-es/components/SearchFilter/SearchFilter/SearchFilter.js.map +1 -1
  111. package/lib-es/components/SearchFilter/components/Checkbox.js +1 -1
  112. package/lib-es/components/SearchFilter/components/Checkbox.js.map +1 -1
  113. package/lib-es/components/SearchFilter/components/TextSearch.js +1 -0
  114. package/lib-es/components/SearchFilter/components/TextSearch.js.map +1 -1
  115. package/lib-es/components/Video/providers/Vimeo/VimeoProvider.js +0 -1
  116. package/lib-es/components/Video/providers/Vimeo/VimeoProvider.js.map +1 -1
  117. package/lib-es/{components/Card/helpers → helpers}/filter-query-setup.js +5 -3
  118. package/lib-es/helpers/filter-query-setup.js.map +1 -0
  119. package/lib-es/{components/Card/helpers → helpers}/filters-setup.js +4 -2
  120. package/lib-es/helpers/filters-setup.js.map +1 -0
  121. package/lib-es/helpers/get-updated-items-to-display.js.map +1 -0
  122. package/lib-es/helpers/get-updated-sort-properties.js.map +1 -0
  123. package/lib-es/helpers/index.js +6 -0
  124. package/lib-es/helpers/index.js.map +1 -1
  125. package/lib-es/helpers/should-return.js.map +1 -0
  126. package/lib-es/{components/Card/helpers → helpers}/should-skip-single-query.js +1 -1
  127. package/lib-es/helpers/should-skip-single-query.js.map +1 -0
  128. package/package.json +4 -4
  129. package/src/components/BackToTop/BackToTop.js +6 -11
  130. package/src/components/Card/Card.js +4 -3
  131. package/src/components/Card/CardsContainer.js +7 -3
  132. package/src/components/Card/CardsFactory.js +34 -6
  133. package/src/components/Card/CardsRender.js +6 -2
  134. package/src/components/Card/helpers/index.js +6 -6
  135. package/src/components/Carousel/CarouselImage/CarouselImage.js +3 -1
  136. package/src/components/Carousel/CarouselImage/constants.js +1 -0
  137. package/src/components/CarouselWrapper/DefaultCarousel.js +2 -0
  138. package/src/components/ContentGroup/ContentGroupTabs.js +1 -3
  139. package/src/components/Image/GlobalLightbox/GlobalLightbox.js +3 -3
  140. package/src/components/Image/GlobalLightbox/NavButton.js +5 -3
  141. package/src/components/Image/Image.js +1 -0
  142. package/src/components/ItemList/ItemListNew/ItemListNew.js +1 -4
  143. package/src/components/List/components/Cards/CardsRender.js +2 -0
  144. package/src/components/List/components/Full/FullRender.js +2 -1
  145. package/src/components/Menu/Menu.js +1 -1
  146. package/src/components/MenuItem/MenuEntitiesItem.js +202 -0
  147. package/src/components/MenuItem/MenuItem.js +15 -65
  148. package/src/components/MenuItem/MenuItemRender.js +91 -0
  149. package/src/components/SearchFilter/SearchFilter/FiltersList.js +3 -0
  150. package/src/components/SearchFilter/SearchFilter/MobileFormToolbar.js +1 -1
  151. package/src/components/SearchFilter/SearchFilter/ResetDesktopForm.js +3 -2
  152. package/src/components/SearchFilter/SearchFilter/SearchFilter.js +10 -5
  153. package/src/components/SearchFilter/components/Checkbox.js +3 -1
  154. package/src/components/SearchFilter/components/TextSearch.js +1 -0
  155. package/src/components/Video/providers/Vimeo/VimeoProvider.js +0 -1
  156. package/src/{components/Card/helpers → helpers}/filter-query-setup.js +5 -3
  157. package/src/{components/Card/helpers → helpers}/filters-setup.js +5 -2
  158. package/src/helpers/index.js +6 -0
  159. package/src/{components/Card/helpers → helpers}/should-skip-single-query.js +1 -1
  160. package/tests/unit/src/components/BackToTop/BackToTop.test.js +9 -5
  161. package/tests/unit/src/components/BackToTop/__snapshots__/BackToTop.test.js.snap +1 -1
  162. package/tests/unit/src/components/Card/helpers/get-updated-items-to-display.test.js +1 -1
  163. package/tests/unit/src/components/Carousel/CarouselImage/__snapshots__/CarouselImage.test.js.snap +1 -1
  164. package/tests/unit/src/components/Carousel/__snapshots__/Carousel.test.js.snap +1 -1
  165. package/tests/unit/src/components/ContentGroup/__snapshots__/ContentGroupTabs.test.js.snap +4 -4
  166. package/tests/unit/src/components/ItemList/__snapshots__/ItemListNew.test.js.snap +0 -2
  167. package/tests/unit/src/components/MenuItem/MenuEntitiesItem.test.js +23 -0
  168. package/tests/unit/src/components/MenuItem/MenuItem.test.js +30 -11
  169. package/tests/unit/src/components/MenuItem/MenuItemRender.test.js +55 -0
  170. package/tests/unit/src/components/MenuItem/__snapshots__/MenuEntitiesItem.test.js.snap +3 -0
  171. package/tests/unit/src/components/MenuItem/__snapshots__/MenuItem.test.js.snap +5 -56
  172. package/tests/unit/src/components/MenuItem/mocks.js +71 -0
  173. package/tests/unit/src/components/SearchFilter/SearchFilter/__snapshots__/MobileFormToolbar.test.js.snap +1 -1
  174. package/tests/unit/src/components/SearchFilter/SearchFilter/__snapshots__/ResetDesktopForm.test.js.snap +1 -1
  175. package/tests/unit/src/components/SearchFilter/SearchFilter/__snapshots__/SearchFilter.test.js.snap +19 -17
  176. package/tests/unit/src/components/SearchFilter/components/__snapshots__/Select.test.js.snap +1 -0
  177. package/tests/unit/src/components/SearchFilter/components/__snapshots__/TextSearch.test.js.snap +1 -0
  178. package/tests/unit/src/components/SearchFilterSort/__snapshots__/SearchFilterSort.test.js.snap +1 -0
  179. package/tests/unit/src/components/Video/providers/Vimeo/__snapshots__/Vimeo.test.js.snap +0 -1
  180. package/lib/components/Card/helpers/filter-query-setup.js.map +0 -1
  181. package/lib/components/Card/helpers/filters-setup.js.map +0 -1
  182. package/lib/components/Card/helpers/get-updated-items-to-display.js.map +0 -1
  183. package/lib/components/Card/helpers/get-updated-sort-properties.js.map +0 -1
  184. package/lib/components/Card/helpers/should-return.js.map +0 -1
  185. package/lib/components/Card/helpers/should-skip-single-query.js.map +0 -1
  186. package/lib-es/components/Card/helpers/filter-query-setup.js.map +0 -1
  187. package/lib-es/components/Card/helpers/filters-setup.js.map +0 -1
  188. package/lib-es/components/Card/helpers/get-updated-items-to-display.js.map +0 -1
  189. package/lib-es/components/Card/helpers/get-updated-sort-properties.js.map +0 -1
  190. package/lib-es/components/Card/helpers/should-return.js.map +0 -1
  191. package/lib-es/components/Card/helpers/should-skip-single-query.js.map +0 -1
  192. /package/lib/{components/Card/helpers → helpers}/get-updated-items-to-display.js +0 -0
  193. /package/lib/{components/Card/helpers → helpers}/get-updated-sort-properties.js +0 -0
  194. /package/lib/{components/Card/helpers → helpers}/should-return.js +0 -0
  195. /package/lib-es/{components/Card/helpers → helpers}/get-updated-items-to-display.js +0 -0
  196. /package/lib-es/{components/Card/helpers → helpers}/get-updated-sort-properties.js +0 -0
  197. /package/lib-es/{components/Card/helpers → helpers}/should-return.js +0 -0
  198. /package/src/{components/Card/helpers → helpers}/get-updated-items-to-display.js +0 -0
  199. /package/src/{components/Card/helpers → helpers}/get-updated-sort-properties.js +0 -0
  200. /package/src/{components/Card/helpers → helpers}/should-return.js +0 -0
@@ -1,83 +1,33 @@
1
- import React, { useState, useContext, useEffect } from 'react';
1
+ import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
- import { FaChevronDown, FaChevronUp } from 'react-icons/fa';
4
- import { HOVER, MOUSE_ENTER, MOUSE_LEAVE, HIDDEN } from '../../constants';
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 = ({ children, eventType, text, modifier, url }) => {
10
- const [displayChildren, setDisplayChildren] = useState(false);
11
- const { showMobileMenu } = useContext(MenuContext);
6
+ const MenuItem = ({ entities, parent, ...props }) => {
7
+ const hasEntities = entities && entities.length;
12
8
 
13
- useEffect(
14
- () => {
15
- if (!showMobileMenu) setDisplayChildren(false);
16
- },
17
- [showMobileMenu]
18
- );
9
+ if (!hasEntities) return <MenuItemRender parent={parent} {...props} />;
19
10
 
20
- const isHoverEvent = eventType === HOVER;
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
- eventType: PropTypes.string.isRequired,
73
- children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node])
21
+ entities: PropTypes.array
74
22
  };
75
23
 
76
24
  MenuItem.defaultProps = {
77
- url: '',
25
+ children: null,
78
26
  modifier: '',
27
+ parent: {},
79
28
  text: '',
80
- children: null
29
+ url: '',
30
+ entities: []
81
31
  };
82
32
 
83
33
  export default MenuItem;
@@ -0,0 +1,91 @@
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
+
10
+ const MenuItemRender = ({ children, eventType, text, modifier, url, parent }) => {
11
+ const [displayChildren, setDisplayChildren] = useState(false);
12
+ const { showMobileMenu } = useContext(MenuContext);
13
+ const {
14
+ loading: loadingText,
15
+ data: [textToUse]
16
+ } = useStringTemplate(parent, [text]);
17
+
18
+ const {
19
+ loading: loadingUrl,
20
+ data: [urlToUse]
21
+ } = useStringTemplate(parent, [url]);
22
+
23
+ useEffect(
24
+ () => {
25
+ if (!showMobileMenu) setDisplayChildren(false);
26
+ },
27
+ [showMobileMenu]
28
+ );
29
+
30
+ if (loadingUrl || loadingText) return '';
31
+
32
+ const isHoverEvent = eventType === HOVER;
33
+ const childrenDisplayClass = displayChildren ? '' : HIDDEN;
34
+
35
+ const handleItemEvent = ({ type }) => {
36
+ if (isHoverEvent) {
37
+ if (type === MOUSE_ENTER) {
38
+ setDisplayChildren(true);
39
+ }
40
+ if (type === MOUSE_LEAVE) {
41
+ setDisplayChildren(false);
42
+ }
43
+ }
44
+ };
45
+ const hasValidChildren = hasChildren(children);
46
+
47
+ return (
48
+ <li className={modifier} onMouseEnter={handleItemEvent} onMouseLeave={handleItemEvent}>
49
+ <div className="menu--item--link">
50
+ {urlToUse ? (
51
+ <BlazeLink href={urlToUse}>{textToUse}</BlazeLink>
52
+ ) : (
53
+ <span role="button" onClick={handleItemEvent}>
54
+ {textToUse}
55
+ </span>
56
+ )}
57
+ {hasValidChildren && (
58
+ <i
59
+ role="button"
60
+ className="menu--item--link--icon"
61
+ onClick={() => setDisplayChildren(!displayChildren)}>
62
+ {displayChildren ? <FaChevronUp /> : <FaChevronDown />}
63
+ </i>
64
+ )}
65
+ </div>
66
+
67
+ {hasValidChildren && (
68
+ <div className={`menu--item-children ${childrenDisplayClass}`}>{children}</div>
69
+ )}
70
+ </li>
71
+ );
72
+ };
73
+
74
+ MenuItemRender.propTypes = {
75
+ modifier: PropTypes.string,
76
+ text: PropTypes.string,
77
+ url: PropTypes.string,
78
+ eventType: PropTypes.string.isRequired,
79
+ parent: PropTypes.object,
80
+ children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node])
81
+ };
82
+
83
+ MenuItemRender.defaultProps = {
84
+ url: '',
85
+ modifier: '',
86
+ text: '',
87
+ children: null,
88
+ parent: {}
89
+ };
90
+
91
+ export default MenuItemRender;
@@ -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 && (
@@ -9,7 +9,7 @@ const MobileFormToolbar = ({ formId, handleReset }) => (
9
9
  data-testid="reset-button"
10
10
  role="button"
11
11
  onClick={handleReset}
12
- aria-label="Reset Filters">
12
+ aria-label="Reset search filters">
13
13
  {RESET}
14
14
  </div>
15
15
 
@@ -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" aria-label="Reset Filters">
20
+ <div role="button" onClick={handleReset} data-testid="reset-button">
20
21
  {RESET}
21
22
  </div>
22
23
  </div>
@@ -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,11 +211,11 @@ const SearchFilter = ({
206
211
 
207
212
  {isCollapsedOnResponsive &&
208
213
  !displaySearchFilter && (
209
- <div className="filter__refine filter__refine--mobile-close" data-testid="refine-mobile">
210
- <div
211
- role="button"
212
- onClick={() => setDisplaySearchFilter(true)}
213
- aria-label="Toggle Search Filter">
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)}>
214
219
  {REFINE}
215
220
  </div>
216
221
  </div>
@@ -84,7 +84,9 @@ const Checkbox = ({
84
84
  role="button"
85
85
  className="see-more"
86
86
  onClick={handleCheckboxOptions}
87
- aria-label={shouldDisplayMore ? `See ${MORE} options` : `See ${LESS} options`}>
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);
@@ -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 { getGenericRenderVariables, buildRawQueryBase, buildSetFilters } from '../../../helpers';
3
- import { DEFAULT_LIMIT } from '../../../constants';
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 { buildQueryFields, getInheritedFilters, getQueryProps } from '../../../helpers';
2
- import { getSearchPublishedContent } from '../../../application/query';
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);
@@ -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';
@@ -1,4 +1,4 @@
1
- import { ID } from '../../../constants';
1
+ import { ID } from '../constants';
2
2
 
3
3
  const shouldSkipSingleQuery = (loading, getAction, queryProps) =>
4
4
  loading || !getAction || queryProps === ID;
@@ -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 '@blaze-cms/tools/test-helpers/test-functions';
6
+ import { render, screen } from '@testing-library/react';
6
7
  import BackToTop from '../../../../../src/components/BackToTop';
7
8
 
8
- describe('Breadcrumb component', () => {
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[`Breadcrumb component should render without throwing an error and match snapshot 1`] = `<DocumentFragment />`;
3
+ exports[`BackToTop component should render without throwing an error and match snapshot 1`] = `<DocumentFragment />`;
@@ -1,5 +1,5 @@
1
1
  import '@testing-library/jest-dom/extend-expect';
2
- import getUpdatedItemsToDisplay from '../../../../../../src/components/Card/helpers/get-updated-items-to-display';
2
+ import getUpdatedItemsToDisplay from '../../../../../../src/helpers/get-updated-items-to-display';
3
3
 
4
4
  const mockedProps = {
5
5
  itemsToDisplay: [
@@ -5,7 +5,7 @@ exports[`Carousel image component should match snapshot 1`] = `
5
5
  className="carousel__slide"
6
6
  >
7
7
  <img
8
- alt=""
8
+ alt="Carousel image"
9
9
  aria-label="View Image"
10
10
  data-testid="lazy-image-mock"
11
11
  onClick={[Function]}
@@ -66,7 +66,7 @@ exports[`Carousel component should render priority images and match snapshot 1`]
66
66
  >
67
67
  <span>
68
68
  <img
69
- alt=""
69
+ alt="Carousel image"
70
70
  aria-label="View Image"
71
71
  role="button"
72
72
  src="test-url"
@@ -11,7 +11,7 @@ exports[`ContentGroupTabs component should match snapshot and render sidepanel c
11
11
  role="tablist"
12
12
  >
13
13
  <button
14
- aria-controls="panel-section-one"
14
+ aria-controls="section-one"
15
15
  aria-selected="true"
16
16
  class="content-group-sidepanel__button--is-active"
17
17
  id="tab-section-one"
@@ -21,7 +21,7 @@ exports[`ContentGroupTabs component should match snapshot and render sidepanel c
21
21
  sectionOne
22
22
  </button>
23
23
  <button
24
- aria-controls="panel-section-two"
24
+ aria-controls="section-two"
25
25
  aria-selected="false"
26
26
  class="content-group-sidepanel__button"
27
27
  id="tab-section-two"
@@ -57,7 +57,7 @@ exports[`ContentGroupTabs component should match snapshot and render tabs conten
57
57
  role="tablist"
58
58
  >
59
59
  <button
60
- aria-controls="panel-section-one"
60
+ aria-controls="section-one"
61
61
  aria-selected="true"
62
62
  class="content-group-tabs__button--is-active"
63
63
  id="tab-section-one"
@@ -67,7 +67,7 @@ exports[`ContentGroupTabs component should match snapshot and render tabs conten
67
67
  sectionOne
68
68
  </button>
69
69
  <button
70
- aria-controls="panel-section-two"
70
+ aria-controls="section-two"
71
71
  aria-selected="false"
72
72
  class="content-group-tabs__button"
73
73
  id="tab-section-two"
@@ -3,7 +3,6 @@
3
3
  exports[`ItemListNew component should match snapshot and render without throwing an error 1`] = `
4
4
  <DocumentFragment>
5
5
  <button
6
- aria-label="Create new list_name"
7
6
  class="item-list-new button"
8
7
  type="button"
9
8
  >
@@ -19,7 +18,6 @@ exports[`ItemListNew component should not render if list not found 1`] = `<Docum
19
18
  exports[`ItemListNew component should render using listId from query 1`] = `
20
19
  <DocumentFragment>
21
20
  <button
22
- aria-label="Create new QUERY-LIST-ID"
23
21
  class="item-list-new button"
24
22
  type="button"
25
23
  >
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @jest-environment jsdom
3
+ */
4
+ import '@testing-library/jest-dom/extend-expect';
5
+ import { render } from '@testing-library/react';
6
+ import MenuEntitiesItem from '../../../../../src/components/MenuItem/MenuEntitiesItem';
7
+ import { MOCKED_MENUITEMS_PROPS } from './mocks';
8
+
9
+ jest.mock('@apollo/client', () => ({
10
+ ...jest.requireActual('@apollo/client'),
11
+ useQuery: jest.fn(({ data, loading, error, fetchMore }) => ({ data, loading, error, fetchMore }))
12
+ }));
13
+
14
+ jest.mock('@blaze-cms/utils-handlebars', () => ({
15
+ useStringTemplate: jest.fn((parent, [title]) => ({ loading: false, data: [title] }))
16
+ }));
17
+
18
+ describe('MenuEntitiesItem component', () => {
19
+ it('should render based on listData received', async () => {
20
+ const { asFragment } = await render(MenuEntitiesItem, MOCKED_MENUITEMS_PROPS);
21
+ expect(asFragment()).toMatchSnapshot();
22
+ });
23
+ });
@@ -6,25 +6,44 @@ import { render } from '@blaze-cms/tools/test-helpers/test-functions';
6
6
  import '@testing-library/jest-dom/extend-expect';
7
7
  import MenuItem from '../../../../../src/components/MenuItem';
8
8
 
9
- const props = {
9
+ jest.mock('@apollo/client', () => ({
10
+ ...jest.requireActual('@apollo/client'),
11
+ useQuery: jest.fn(({ data, loading, error, fetchMore }) => ({ data, loading, error, fetchMore }))
12
+ }));
13
+
14
+ jest.mock('@blaze-cms/utils-handlebars', () => ({
15
+ useStringTemplate: jest.fn((parent, [title]) => ({ loading: false, data: [title] }))
16
+ }));
17
+
18
+ const componentProps = {
19
+ id: 'id',
20
+ name: 'mock name',
10
21
  eventType: 'hover',
11
- text: 'Item 1',
22
+ url: '/search?category.name={{currentParent.name}}',
23
+ text: 'Category: {{currentParent.name}}',
24
+ entity: 'page',
25
+ parent: {
26
+ itemEntity: 'page',
27
+ itemId: 'item-id'
28
+ },
29
+ category: {
30
+ publishedListingPage: {
31
+ url: 'published-url'
32
+ },
33
+ name: 'Category name'
34
+ },
12
35
  modifier: 'menu-item-mod',
13
36
  children: [
14
37
  <div className="child_1" key="1" component={{ type: 'menuitem' }}>
15
- some child
38
+ menu child
16
39
  </div>
17
- ]
40
+ ],
41
+ displayCategory: true
18
42
  };
19
43
 
20
44
  describe('MenuItem component', () => {
21
- it('should render without throwing an error and match snapshot', () => {
22
- const { asFragment } = render(MenuItem, props);
23
- expect(asFragment()).toMatchSnapshot();
24
- });
25
-
26
- it('should render link if url is passed', () => {
27
- const { asFragment } = render(MenuItem, { ...props, url: '/somewhere' });
45
+ it('should render a MenuItem based on passed parameters', async () => {
46
+ const { asFragment } = await render(MenuItem, componentProps);
28
47
  expect(asFragment()).toMatchSnapshot();
29
48
  });
30
49
  });
@@ -0,0 +1,55 @@
1
+ /**
2
+ * @jest-environment jsdom
3
+ */
4
+
5
+ import React from 'react';
6
+ import { render, fireEvent } from '@testing-library/react';
7
+ import '@testing-library/jest-dom/extend-expect';
8
+ import MenuRender from '../../../../../src/components/MenuItem/MenuItemRender';
9
+
10
+ jest.mock('@blaze-cms/utils-handlebars', () => ({
11
+ useStringTemplate: jest.fn((parent, [title]) => ({ loadig: false, data: [title] }))
12
+ }));
13
+
14
+ describe('MenuRender component', () => {
15
+ it('renders menu item with link when URL is provided', () => {
16
+ const { getByText } = render(<MenuRender eventType="click" text="Home" url="/home" />);
17
+ const linkElement = getByText('Home');
18
+ expect(linkElement).toBeInTheDocument();
19
+ expect(linkElement.tagName).toBe('A');
20
+ expect(linkElement.getAttribute('href')).toBe('/home');
21
+ });
22
+
23
+ it('renders menu item without link when URL is not provided', () => {
24
+ const { getByText } = render(<MenuRender eventType="click" text="About" />);
25
+ const spanElement = getByText('About');
26
+ expect(spanElement).toBeInTheDocument();
27
+ expect(spanElement.tagName).toBe('SPAN');
28
+ });
29
+
30
+ it('toggles display of children on mouse enter and leave events', () => {
31
+ const { getByText, getByTestId } = render(
32
+ <MenuRender eventType="hover" text="Parent">
33
+ <div data-testid="child">Child</div>
34
+ </MenuRender>
35
+ );
36
+ const parentElement = getByText('Parent');
37
+ const childElement = getByTestId('child');
38
+
39
+ fireEvent.mouseEnter(parentElement);
40
+ expect(childElement).toBeInTheDocument();
41
+ });
42
+
43
+ it('toggles display of children on click event when URL is not provided', () => {
44
+ const { getByText, getByTestId } = render(
45
+ <MenuRender eventType="click" text="Parent">
46
+ <div data-testid="child">Child</div>
47
+ </MenuRender>
48
+ );
49
+ const parentElement = getByText('Parent');
50
+ const childElement = getByTestId('child');
51
+
52
+ fireEvent.click(parentElement);
53
+ expect(childElement).toBeInTheDocument();
54
+ });
55
+ });
@@ -0,0 +1,3 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`MenuEntitiesItem component should render based on listData received 1`] = `<DocumentFragment />`;