@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.
Files changed (287) hide show
  1. package/CHANGELOG.md +86 -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 +19 -12
  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/Image/Lightbox/Lightbox.js +2 -2
  29. package/lib/components/Image/Lightbox/Lightbox.js.map +1 -1
  30. package/lib/components/ItemList/ItemListNew/ItemListNew.js +1 -2
  31. package/lib/components/ItemList/ItemListNew/ItemListNew.js.map +1 -1
  32. package/lib/components/List/ListRender.js.map +1 -1
  33. package/lib/components/List/components/Cards/CardsRender.js.map +1 -1
  34. package/lib/components/List/components/Full/FullRender.js +2 -2
  35. package/lib/components/List/components/Full/FullRender.js.map +1 -1
  36. package/lib/components/Menu/Menu.js +1 -1
  37. package/lib/components/Menu/Menu.js.map +1 -1
  38. package/lib/components/MenuItem/MenuEntitiesItem.js +203 -0
  39. package/lib/components/MenuItem/MenuEntitiesItem.js.map +1 -0
  40. package/lib/components/MenuItem/MenuItem.js +25 -71
  41. package/lib/components/MenuItem/MenuItem.js.map +1 -1
  42. package/lib/components/MenuItem/MenuItemRender.js +104 -0
  43. package/lib/components/MenuItem/MenuItemRender.js.map +1 -0
  44. package/lib/components/MenuItem/helpers/index.js +15 -0
  45. package/lib/components/MenuItem/helpers/index.js.map +1 -0
  46. package/lib/components/MenuItem/helpers/inject-helper-into-template.js +17 -0
  47. package/lib/components/MenuItem/helpers/inject-helper-into-template.js.map +1 -0
  48. package/lib/components/Modal/Modal.js +2 -2
  49. package/lib/components/Modal/Modal.js.map +1 -1
  50. package/lib/components/ModalAdapter/ModalAdapter.js +21 -0
  51. package/lib/components/ModalAdapter/ModalAdapter.js.map +1 -0
  52. package/lib/components/ModalAdapter/index.js +11 -0
  53. package/lib/components/ModalAdapter/index.js.map +1 -0
  54. package/lib/components/SearchFilter/SearchFilter/FiltersList.js.map +1 -1
  55. package/lib/components/SearchFilter/SearchFilter/MobileFormToolbar.js +1 -1
  56. package/lib/components/SearchFilter/SearchFilter/MobileFormToolbar.js.map +1 -1
  57. package/lib/components/SearchFilter/SearchFilter/ResetDesktopForm.js +3 -3
  58. package/lib/components/SearchFilter/SearchFilter/ResetDesktopForm.js.map +1 -1
  59. package/lib/components/SearchFilter/SearchFilter/SearchFilter.js +26 -7
  60. package/lib/components/SearchFilter/SearchFilter/SearchFilter.js.map +1 -1
  61. package/lib/components/SearchFilter/SearchFilterContainer.js +23 -28
  62. package/lib/components/SearchFilter/SearchFilterContainer.js.map +1 -1
  63. package/lib/components/SearchFilter/components/Checkbox.js +1 -1
  64. package/lib/components/SearchFilter/components/Checkbox.js.map +1 -1
  65. package/lib/components/SearchFilter/components/Select.js.map +1 -1
  66. package/lib/components/SearchFilter/components/TextSearch.js +1 -0
  67. package/lib/components/SearchFilter/components/TextSearch.js.map +1 -1
  68. package/lib/components/SearchFilter/helpers/build-list-name-query.js +31 -0
  69. package/lib/components/SearchFilter/helpers/build-list-name-query.js.map +1 -0
  70. package/lib/components/SearchFilter/helpers/decode-encode.js.map +1 -1
  71. package/lib/components/SearchFilter/helpers/index.js +7 -0
  72. package/lib/components/SearchFilter/helpers/index.js.map +1 -1
  73. package/lib/components/Video/VideoModal.js +2 -2
  74. package/lib/components/Video/VideoModal.js.map +1 -1
  75. package/lib/components/Video/providers/Vimeo/VimeoProvider.js +0 -1
  76. package/lib/components/Video/providers/Vimeo/VimeoProvider.js.map +1 -1
  77. package/lib/helpers/build-filters-query.js +1 -2
  78. package/lib/helpers/build-filters-query.js.map +1 -1
  79. package/lib/{components/Card/helpers → helpers}/filter-query-setup.js +10 -7
  80. package/lib/helpers/filter-query-setup.js.map +1 -0
  81. package/lib/{components/Card/helpers → helpers}/filters-setup.js +8 -5
  82. package/lib/helpers/filters-setup.js.map +1 -0
  83. package/lib/helpers/get-updated-items-to-display.js.map +1 -0
  84. package/lib/helpers/get-updated-sort-properties.js.map +1 -0
  85. package/lib/helpers/index.js +42 -0
  86. package/lib/helpers/index.js.map +1 -1
  87. package/lib/helpers/should-return.js.map +1 -0
  88. package/lib/{components/Card/helpers → helpers}/should-skip-single-query.js +1 -1
  89. package/lib/helpers/should-skip-single-query.js.map +1 -0
  90. package/lib/hooks/index.js +14 -0
  91. package/lib/hooks/index.js.map +1 -1
  92. package/lib/hooks/use-filter-aggregation-values.js +54 -0
  93. package/lib/hooks/use-filter-aggregation-values.js.map +1 -0
  94. package/lib/hooks/use-portal.js +30 -0
  95. package/lib/hooks/use-portal.js.map +1 -0
  96. package/lib-es/components/BackToTop/BackToTop.js +11 -17
  97. package/lib-es/components/BackToTop/BackToTop.js.map +1 -1
  98. package/lib-es/components/Card/Card.js +19 -12
  99. package/lib-es/components/Card/Card.js.map +1 -1
  100. package/lib-es/components/Card/CardsContainer.js +9 -5
  101. package/lib-es/components/Card/CardsContainer.js.map +1 -1
  102. package/lib-es/components/Card/CardsFactory.js +40 -9
  103. package/lib-es/components/Card/CardsFactory.js.map +1 -1
  104. package/lib-es/components/Card/CardsRender.js +9 -5
  105. package/lib-es/components/Card/CardsRender.js.map +1 -1
  106. package/lib-es/components/Card/helpers/index.js +6 -6
  107. package/lib-es/components/Card/helpers/index.js.map +1 -1
  108. package/lib-es/components/Carousel/CarouselImage/CarouselImage.js +3 -1
  109. package/lib-es/components/Carousel/CarouselImage/CarouselImage.js.map +1 -1
  110. package/lib-es/components/Carousel/CarouselImage/constants.js +2 -0
  111. package/lib-es/components/Carousel/CarouselImage/constants.js.map +1 -0
  112. package/lib-es/components/CarouselWrapper/DefaultCarousel.js +2 -0
  113. package/lib-es/components/CarouselWrapper/DefaultCarousel.js.map +1 -1
  114. package/lib-es/components/ContentGroup/ContentGroupTabs.js +1 -2
  115. package/lib-es/components/ContentGroup/ContentGroupTabs.js.map +1 -1
  116. package/lib-es/components/Image/GlobalLightbox/GlobalLightbox.js +3 -3
  117. package/lib-es/components/Image/GlobalLightbox/GlobalLightbox.js.map +1 -1
  118. package/lib-es/components/Image/GlobalLightbox/NavButton.js +6 -3
  119. package/lib-es/components/Image/GlobalLightbox/NavButton.js.map +1 -1
  120. package/lib-es/components/Image/Image.js +1 -0
  121. package/lib-es/components/Image/Image.js.map +1 -1
  122. package/lib-es/components/Image/Lightbox/Lightbox.js +1 -1
  123. package/lib-es/components/Image/Lightbox/Lightbox.js.map +1 -1
  124. package/lib-es/components/ItemList/ItemListNew/ItemListNew.js +1 -2
  125. package/lib-es/components/ItemList/ItemListNew/ItemListNew.js.map +1 -1
  126. package/lib-es/components/List/ListRender.js.map +1 -1
  127. package/lib-es/components/List/components/Cards/CardsRender.js.map +1 -1
  128. package/lib-es/components/List/components/Full/FullRender.js +2 -2
  129. package/lib-es/components/List/components/Full/FullRender.js.map +1 -1
  130. package/lib-es/components/Menu/Menu.js +1 -1
  131. package/lib-es/components/Menu/Menu.js.map +1 -1
  132. package/lib-es/components/MenuItem/MenuEntitiesItem.js +177 -0
  133. package/lib-es/components/MenuItem/MenuEntitiesItem.js.map +1 -0
  134. package/lib-es/components/MenuItem/MenuItem.js +28 -60
  135. package/lib-es/components/MenuItem/MenuItem.js.map +1 -1
  136. package/lib-es/components/MenuItem/MenuItemRender.js +84 -0
  137. package/lib-es/components/MenuItem/MenuItemRender.js.map +1 -0
  138. package/lib-es/components/MenuItem/helpers/index.js +3 -0
  139. package/lib-es/components/MenuItem/helpers/index.js.map +1 -0
  140. package/lib-es/components/MenuItem/helpers/inject-helper-into-template.js +8 -0
  141. package/lib-es/components/MenuItem/helpers/inject-helper-into-template.js.map +1 -0
  142. package/lib-es/components/Modal/Modal.js +1 -1
  143. package/lib-es/components/Modal/Modal.js.map +1 -1
  144. package/lib-es/components/ModalAdapter/ModalAdapter.js +13 -0
  145. package/lib-es/components/ModalAdapter/ModalAdapter.js.map +1 -0
  146. package/lib-es/components/ModalAdapter/index.js +3 -0
  147. package/lib-es/components/ModalAdapter/index.js.map +1 -0
  148. package/lib-es/components/SearchFilter/SearchFilter/FiltersList.js.map +1 -1
  149. package/lib-es/components/SearchFilter/SearchFilter/MobileFormToolbar.js +1 -1
  150. package/lib-es/components/SearchFilter/SearchFilter/MobileFormToolbar.js.map +1 -1
  151. package/lib-es/components/SearchFilter/SearchFilter/ResetDesktopForm.js +3 -3
  152. package/lib-es/components/SearchFilter/SearchFilter/ResetDesktopForm.js.map +1 -1
  153. package/lib-es/components/SearchFilter/SearchFilter/SearchFilter.js +19 -7
  154. package/lib-es/components/SearchFilter/SearchFilter/SearchFilter.js.map +1 -1
  155. package/lib-es/components/SearchFilter/SearchFilterContainer.js +23 -20
  156. package/lib-es/components/SearchFilter/SearchFilterContainer.js.map +1 -1
  157. package/lib-es/components/SearchFilter/components/Checkbox.js +1 -1
  158. package/lib-es/components/SearchFilter/components/Checkbox.js.map +1 -1
  159. package/lib-es/components/SearchFilter/components/Select.js.map +1 -1
  160. package/lib-es/components/SearchFilter/components/TextSearch.js +1 -0
  161. package/lib-es/components/SearchFilter/components/TextSearch.js.map +1 -1
  162. package/lib-es/components/SearchFilter/helpers/build-list-name-query.js +15 -0
  163. package/lib-es/components/SearchFilter/helpers/build-list-name-query.js.map +1 -0
  164. package/lib-es/components/SearchFilter/helpers/decode-encode.js.map +1 -1
  165. package/lib-es/components/SearchFilter/helpers/index.js +2 -1
  166. package/lib-es/components/SearchFilter/helpers/index.js.map +1 -1
  167. package/lib-es/components/Video/VideoModal.js +1 -1
  168. package/lib-es/components/Video/VideoModal.js.map +1 -1
  169. package/lib-es/components/Video/providers/Vimeo/VimeoProvider.js +0 -1
  170. package/lib-es/components/Video/providers/Vimeo/VimeoProvider.js.map +1 -1
  171. package/lib-es/helpers/build-filters-query.js +1 -2
  172. package/lib-es/helpers/build-filters-query.js.map +1 -1
  173. package/lib-es/{components/Card/helpers → helpers}/filter-query-setup.js +5 -3
  174. package/lib-es/helpers/filter-query-setup.js.map +1 -0
  175. package/lib-es/{components/Card/helpers → helpers}/filters-setup.js +4 -2
  176. package/lib-es/helpers/filters-setup.js.map +1 -0
  177. package/lib-es/helpers/get-updated-items-to-display.js.map +1 -0
  178. package/lib-es/helpers/get-updated-sort-properties.js.map +1 -0
  179. package/lib-es/helpers/index.js +6 -0
  180. package/lib-es/helpers/index.js.map +1 -1
  181. package/lib-es/helpers/should-return.js.map +1 -0
  182. package/lib-es/{components/Card/helpers → helpers}/should-skip-single-query.js +1 -1
  183. package/lib-es/helpers/should-skip-single-query.js.map +1 -0
  184. package/lib-es/hooks/index.js +2 -0
  185. package/lib-es/hooks/index.js.map +1 -1
  186. package/lib-es/hooks/use-filter-aggregation-values.js +31 -0
  187. package/lib-es/hooks/use-filter-aggregation-values.js.map +1 -0
  188. package/lib-es/hooks/use-portal.js +14 -0
  189. package/lib-es/hooks/use-portal.js.map +1 -0
  190. package/package.json +5 -5
  191. package/src/components/BackToTop/BackToTop.js +6 -11
  192. package/src/components/Card/Card.js +29 -19
  193. package/src/components/Card/CardsContainer.js +7 -3
  194. package/src/components/Card/CardsFactory.js +34 -6
  195. package/src/components/Card/CardsRender.js +6 -2
  196. package/src/components/Card/helpers/index.js +6 -6
  197. package/src/components/Carousel/CarouselImage/CarouselImage.js +3 -1
  198. package/src/components/Carousel/CarouselImage/constants.js +1 -0
  199. package/src/components/CarouselWrapper/DefaultCarousel.js +2 -0
  200. package/src/components/ContentGroup/ContentGroupTabs.js +1 -3
  201. package/src/components/Image/GlobalLightbox/GlobalLightbox.js +3 -3
  202. package/src/components/Image/GlobalLightbox/NavButton.js +5 -3
  203. package/src/components/Image/Image.js +1 -0
  204. package/src/components/Image/Lightbox/Lightbox.js +1 -1
  205. package/src/components/ItemList/ItemListNew/ItemListNew.js +1 -4
  206. package/src/components/List/ListRender.js +0 -1
  207. package/src/components/List/components/Cards/CardsRender.js +2 -0
  208. package/src/components/List/components/Full/FullRender.js +2 -1
  209. package/src/components/Menu/Menu.js +1 -1
  210. package/src/components/MenuItem/MenuEntitiesItem.js +202 -0
  211. package/src/components/MenuItem/MenuItem.js +15 -65
  212. package/src/components/MenuItem/MenuItemRender.js +92 -0
  213. package/src/components/MenuItem/helpers/index.js +3 -0
  214. package/src/components/MenuItem/helpers/inject-helper-into-template.js +11 -0
  215. package/src/components/Modal/Modal.js +1 -1
  216. package/src/components/ModalAdapter/ModalAdapter.js +12 -0
  217. package/src/components/ModalAdapter/index.js +3 -0
  218. package/src/components/SearchFilter/SearchFilter/FiltersList.js +3 -0
  219. package/src/components/SearchFilter/SearchFilter/MobileFormToolbar.js +1 -1
  220. package/src/components/SearchFilter/SearchFilter/ResetDesktopForm.js +3 -2
  221. package/src/components/SearchFilter/SearchFilter/SearchFilter.js +26 -10
  222. package/src/components/SearchFilter/SearchFilterContainer.js +21 -22
  223. package/src/components/SearchFilter/components/Checkbox.js +3 -1
  224. package/src/components/SearchFilter/components/Select.js +2 -0
  225. package/src/components/SearchFilter/components/TextSearch.js +1 -0
  226. package/src/components/SearchFilter/helpers/build-list-name-query.js +18 -0
  227. package/src/components/SearchFilter/helpers/decode-encode.js +0 -1
  228. package/src/components/SearchFilter/helpers/index.js +2 -0
  229. package/src/components/Video/VideoModal.js +1 -1
  230. package/src/components/Video/providers/Vimeo/VimeoProvider.js +0 -1
  231. package/src/helpers/build-filters-query.js +1 -3
  232. package/src/{components/Card/helpers → helpers}/filter-query-setup.js +5 -3
  233. package/src/{components/Card/helpers → helpers}/filters-setup.js +5 -2
  234. package/src/helpers/index.js +6 -0
  235. package/src/{components/Card/helpers → helpers}/should-skip-single-query.js +1 -1
  236. package/src/hooks/index.js +2 -0
  237. package/src/hooks/use-filter-aggregation-values.js +37 -0
  238. package/src/hooks/use-portal.js +18 -0
  239. package/tests/unit/src/components/BackToTop/BackToTop.test.js +9 -5
  240. package/tests/unit/src/components/BackToTop/__snapshots__/BackToTop.test.js.snap +1 -1
  241. package/tests/unit/src/components/Card/Card.test.js +16 -1
  242. package/tests/unit/src/components/Card/__snapshots__/Card.test.js.snap +83 -0
  243. package/tests/unit/src/components/Card/helpers/get-updated-items-to-display.test.js +1 -1
  244. package/tests/unit/src/components/Carousel/CarouselImage/__snapshots__/CarouselImage.test.js.snap +1 -1
  245. package/tests/unit/src/components/Carousel/__snapshots__/Carousel.test.js.snap +1 -1
  246. package/tests/unit/src/components/ContentGroup/__snapshots__/ContentGroupTabs.test.js.snap +4 -4
  247. package/tests/unit/src/components/Image/Lightbox/Lightbox.test.js +4 -0
  248. package/tests/unit/src/components/Image/Lightbox/__snapshots__/Lightbox.test.js.snap +3 -38
  249. package/tests/unit/src/components/ItemList/__snapshots__/ItemListNew.test.js.snap +0 -2
  250. package/tests/unit/src/components/MenuItem/MenuEntitiesItem.test.js +23 -0
  251. package/tests/unit/src/components/MenuItem/MenuItem.test.js +30 -11
  252. package/tests/unit/src/components/MenuItem/MenuItemRender.test.js +55 -0
  253. package/tests/unit/src/components/MenuItem/__snapshots__/MenuEntitiesItem.test.js.snap +3 -0
  254. package/tests/unit/src/components/MenuItem/__snapshots__/MenuItem.test.js.snap +5 -56
  255. package/tests/unit/src/components/MenuItem/helpers/inject-helper-into-template.test.js +44 -0
  256. package/tests/unit/src/components/MenuItem/mocks.js +71 -0
  257. package/tests/unit/src/components/Modal/Modal.test.js +4 -0
  258. package/tests/unit/src/components/Modal/__snapshots__/Modal.test.js.snap +7 -42
  259. package/tests/unit/src/components/SearchFilter/SearchFilter/__snapshots__/MobileFormToolbar.test.js.snap +1 -1
  260. package/tests/unit/src/components/SearchFilter/SearchFilter/__snapshots__/ResetDesktopForm.test.js.snap +1 -1
  261. package/tests/unit/src/components/SearchFilter/SearchFilter/__snapshots__/SearchFilter.test.js.snap +19 -17
  262. package/tests/unit/src/components/SearchFilter/__snapshots__/SearchFilterContainer.test.js.snap +7 -1
  263. package/tests/unit/src/components/SearchFilter/components/__snapshots__/Select.test.js.snap +1 -0
  264. package/tests/unit/src/components/SearchFilter/components/__snapshots__/TextSearch.test.js.snap +1 -0
  265. package/tests/unit/src/components/SearchFilterSort/__snapshots__/SearchFilterSort.test.js.snap +1 -0
  266. package/tests/unit/src/components/Video/providers/Vimeo/__snapshots__/Vimeo.test.js.snap +0 -1
  267. package/lib/components/Card/helpers/filter-query-setup.js.map +0 -1
  268. package/lib/components/Card/helpers/filters-setup.js.map +0 -1
  269. package/lib/components/Card/helpers/get-updated-items-to-display.js.map +0 -1
  270. package/lib/components/Card/helpers/get-updated-sort-properties.js.map +0 -1
  271. package/lib/components/Card/helpers/should-return.js.map +0 -1
  272. package/lib/components/Card/helpers/should-skip-single-query.js.map +0 -1
  273. package/lib-es/components/Card/helpers/filter-query-setup.js.map +0 -1
  274. package/lib-es/components/Card/helpers/filters-setup.js.map +0 -1
  275. package/lib-es/components/Card/helpers/get-updated-items-to-display.js.map +0 -1
  276. package/lib-es/components/Card/helpers/get-updated-sort-properties.js.map +0 -1
  277. package/lib-es/components/Card/helpers/should-return.js.map +0 -1
  278. package/lib-es/components/Card/helpers/should-skip-single-query.js.map +0 -1
  279. /package/lib/{components/Card/helpers → helpers}/get-updated-items-to-display.js +0 -0
  280. /package/lib/{components/Card/helpers → helpers}/get-updated-sort-properties.js +0 -0
  281. /package/lib/{components/Card/helpers → helpers}/should-return.js +0 -0
  282. /package/lib-es/{components/Card/helpers → helpers}/get-updated-items-to-display.js +0 -0
  283. /package/lib-es/{components/Card/helpers → helpers}/get-updated-sort-properties.js +0 -0
  284. /package/lib-es/{components/Card/helpers → helpers}/should-return.js +0 -0
  285. /package/src/{components/Card/helpers → helpers}/get-updated-items-to-display.js +0 -0
  286. /package/src/{components/Card/helpers → helpers}/get-updated-sort-properties.js +0 -0
  287. /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
  );
@@ -34,7 +34,6 @@ const ListRender = props => {
34
34
  props
35
35
  });
36
36
  const boostedVariables = buildQueryBooster(props, updatedVariables);
37
-
38
37
  const { data = {}, error, loading, fetchMore } = useQuery(action, {
39
38
  variables: boostedVariables
40
39
  });
@@ -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
- aria-label={showMobileMenu ? 'Close mobile menu' : 'Open mobile menu'}>
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, { 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,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,3 @@
1
+ import injectHelperIntoTemplate from './inject-helper-into-template';
2
+
3
+ export { injectHelperIntoTemplate };
@@ -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 '@blaze-react/modal';
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;
@@ -0,0 +1,3 @@
1
+ import ModalAdapter from './ModalAdapter';
2
+
3
+ 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 && (
@@ -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>
@@ -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 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
- {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
  };