@blaze-cms/react-page-builder 0.116.0 → 0.118.0-alpha.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 (240) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/lib/BannerContext/helpers/set-initial-banner-counters.js +2 -0
  3. package/lib/BannerContext/helpers/set-initial-banner-counters.js.map +1 -1
  4. package/lib/components/Banner/BannerRender.js +4 -2
  5. package/lib/components/Banner/BannerRender.js.map +1 -1
  6. package/lib/components/Banner/helpers.js +4 -2
  7. package/lib/components/Banner/helpers.js.map +1 -1
  8. package/lib/components/BlazeLink.js +4 -4
  9. package/lib/components/Button.js +4 -4
  10. package/lib/components/Card/CardRender.js +4 -2
  11. package/lib/components/Card/CardRender.js.map +1 -1
  12. package/lib/components/Card/helpers/filter-query-setup.js +4 -2
  13. package/lib/components/Card/helpers/filter-query-setup.js.map +1 -1
  14. package/lib/components/Card/helpers/filters-setup.js +2 -0
  15. package/lib/components/Card/helpers/filters-setup.js.map +1 -1
  16. package/lib/components/Card/helpers/get-dynamic-grid-classes.js +2 -0
  17. package/lib/components/Card/helpers/get-dynamic-grid-classes.js.map +1 -1
  18. package/lib/components/Card/helpers/should-return.js +2 -0
  19. package/lib/components/Card/helpers/should-return.js.map +1 -1
  20. package/lib/components/Card/helpers/use-dynamic-size-key.js +2 -0
  21. package/lib/components/Card/helpers/use-dynamic-size-key.js.map +1 -1
  22. package/lib/components/ClickWrapper.js +4 -4
  23. package/lib/components/Code/Code.js +4 -4
  24. package/lib/components/Code/ScriptTag.js +2 -2
  25. package/lib/components/Code/helpers/wrap-script-tags.js +2 -0
  26. package/lib/components/Code/helpers/wrap-script-tags.js.map +1 -1
  27. package/lib/components/DataSummary/helpers/build-loop-props-content.js +2 -0
  28. package/lib/components/DataSummary/helpers/build-loop-props-content.js.map +1 -1
  29. package/lib/components/DataSummary/helpers/build-props-to-display-with-content.js +2 -0
  30. package/lib/components/DataSummary/helpers/build-props-to-display-with-content.js.map +1 -1
  31. package/lib/components/DataSummary/helpers/get-loop-props-limit.js +2 -0
  32. package/lib/components/DataSummary/helpers/get-loop-props-limit.js.map +1 -1
  33. package/lib/components/DataSummary/helpers/get-prop-value.js +2 -0
  34. package/lib/components/DataSummary/helpers/get-prop-value.js.map +1 -1
  35. package/lib/components/DataSummary/helpers/get-value-from-array.js +2 -0
  36. package/lib/components/DataSummary/helpers/get-value-from-array.js.map +1 -1
  37. package/lib/components/DataSummary/helpers/strip-summary-props-content.js +2 -0
  38. package/lib/components/DataSummary/helpers/strip-summary-props-content.js.map +1 -1
  39. package/lib/components/Image/Image.js +4 -4
  40. package/lib/components/Layout/Layout.js +4 -2
  41. package/lib/components/Layout/Layout.js.map +1 -1
  42. package/lib/components/Layout/helpers/check-if-row-has-columns.js +2 -0
  43. package/lib/components/Layout/helpers/check-if-row-has-columns.js.map +1 -1
  44. package/lib/components/List/ListBuilder.js +4 -2
  45. package/lib/components/List/ListBuilder.js.map +1 -1
  46. package/lib/components/List/ListFactory.js +4 -4
  47. package/lib/components/List/components/Cards/CardsRender.js +4 -4
  48. package/lib/components/List/components/Full/FullRender.js +4 -4
  49. package/lib/components/List/components/Full/FullRenderItem.js +4 -4
  50. package/lib/components/List/components/Pagination/ListPagination.js +4 -4
  51. package/lib/components/List/helpers/build-az-aggregations.js +2 -0
  52. package/lib/components/List/helpers/build-az-aggregations.js.map +1 -1
  53. package/lib/components/List/helpers/build-az-url.js +4 -2
  54. package/lib/components/List/helpers/build-az-url.js.map +1 -1
  55. package/lib/components/List/helpers/build-pagination-url.js +4 -2
  56. package/lib/components/List/helpers/build-pagination-url.js.map +1 -1
  57. package/lib/components/List/helpers/get-sort-props.js +4 -0
  58. package/lib/components/List/helpers/get-sort-props.js.map +1 -1
  59. package/lib/components/List/helpers/sort-aggs.js +2 -0
  60. package/lib/components/List/helpers/sort-aggs.js.map +1 -1
  61. package/lib/components/Login/helpers/check-gtm-children.js +2 -0
  62. package/lib/components/Login/helpers/check-gtm-children.js.map +1 -1
  63. package/lib/components/Menu/Menu.js +39 -6
  64. package/lib/components/Menu/Menu.js.map +1 -1
  65. package/lib/components/PasswordReset/PasswordReset.js +4 -4
  66. package/lib/components/PasswordReset/helpers/validatePassword.js +2 -0
  67. package/lib/components/PasswordReset/helpers/validatePassword.js.map +1 -1
  68. package/lib/components/SearchFilter/SearchFilter/SearchFilter.js +4 -4
  69. package/lib/components/SearchFilter/SearchFilterContainer.js +2 -2
  70. package/lib/components/SearchFilter/components/Checkbox.js +2 -2
  71. package/lib/components/SearchFilter/components/Range.js +4 -2
  72. package/lib/components/SearchFilter/components/Range.js.map +1 -1
  73. package/lib/components/SearchFilter/components/Select.js +2 -0
  74. package/lib/components/SearchFilter/components/Select.js.map +1 -1
  75. package/lib/components/SearchFilter/helpers/build-query.js +2 -0
  76. package/lib/components/SearchFilter/helpers/build-query.js.map +1 -1
  77. package/lib/components/SearchFilter/helpers/build-raw-query-stringified.js +2 -0
  78. package/lib/components/SearchFilter/helpers/build-raw-query-stringified.js.map +1 -1
  79. package/lib/components/SearchFilter/helpers/get-display-value.js +2 -0
  80. package/lib/components/SearchFilter/helpers/get-display-value.js.map +1 -1
  81. package/lib/components/SearchFilter/helpers/get-initial-filter-values.js +2 -0
  82. package/lib/components/SearchFilter/helpers/get-initial-filter-values.js.map +1 -1
  83. package/lib/components/SearchFilterSort/helpers/handle-sort-update.js +2 -0
  84. package/lib/components/SearchFilterSort/helpers/handle-sort-update.js.map +1 -1
  85. package/lib/components/SearchFilterSort/helpers/update-sort.js +4 -2
  86. package/lib/components/SearchFilterSort/helpers/update-sort.js.map +1 -1
  87. package/lib/components/TextBlock/index.js +4 -2
  88. package/lib/components/TextBlock/index.js.map +1 -1
  89. package/lib/components/Video/Video.js +4 -2
  90. package/lib/components/Video/Video.js.map +1 -1
  91. package/lib/components/Video/providers/JWPlayer/JWPlayerProvider.js +4 -2
  92. package/lib/components/Video/providers/JWPlayer/JWPlayerProvider.js.map +1 -1
  93. package/lib/components/Video/providers/YouTube/YouTubeProvider.js +8 -11
  94. package/lib/components/Video/providers/YouTube/YouTubeProvider.js.map +1 -1
  95. package/lib/components/Video/providers/YouTube/YoutubeEmbeded.js +200 -0
  96. package/lib/components/Video/providers/YouTube/YoutubeEmbeded.js.map +1 -0
  97. package/lib/helpers/append-images.js +4 -2
  98. package/lib/helpers/append-images.js.map +1 -1
  99. package/lib/helpers/build-inherited-filters.js +2 -0
  100. package/lib/helpers/build-inherited-filters.js.map +1 -1
  101. package/lib/helpers/build-props-query.js +2 -2
  102. package/lib/helpers/build-raw-query-base.js +4 -2
  103. package/lib/helpers/build-raw-query-base.js.map +1 -1
  104. package/lib/helpers/build-raw-query.js +4 -2
  105. package/lib/helpers/build-raw-query.js.map +1 -1
  106. package/lib/helpers/build-search-values-checkbox-select.js +2 -2
  107. package/lib/helpers/build-search-values-text.js +2 -0
  108. package/lib/helpers/build-search-values-text.js.map +1 -1
  109. package/lib/helpers/build-set-filters.js +2 -0
  110. package/lib/helpers/build-set-filters.js.map +1 -1
  111. package/lib/helpers/check-for-error.js +2 -0
  112. package/lib/helpers/check-for-error.js.map +1 -1
  113. package/lib/helpers/get-banner-data.js +4 -2
  114. package/lib/helpers/get-banner-data.js.map +1 -1
  115. package/lib/helpers/get-click-wrapper-options.js +4 -2
  116. package/lib/helpers/get-click-wrapper-options.js.map +1 -1
  117. package/lib/helpers/get-filter-props.js +2 -0
  118. package/lib/helpers/get-filter-props.js.map +1 -1
  119. package/lib/helpers/get-filter-relation-keys.js +2 -0
  120. package/lib/helpers/get-filter-relation-keys.js.map +1 -1
  121. package/lib/helpers/get-generic-props.js +4 -2
  122. package/lib/helpers/get-generic-props.js.map +1 -1
  123. package/lib/helpers/get-generic-render-variables.js +4 -2
  124. package/lib/helpers/get-generic-render-variables.js.map +1 -1
  125. package/lib/helpers/get-image-ids.js +2 -0
  126. package/lib/helpers/get-image-ids.js.map +1 -1
  127. package/lib/helpers/get-inherited-filters.js +2 -0
  128. package/lib/helpers/get-inherited-filters.js.map +1 -1
  129. package/lib/helpers/get-items-to-display-ids.js +2 -2
  130. package/lib/helpers/get-parsed-prop-values.js +2 -0
  131. package/lib/helpers/get-parsed-prop-values.js.map +1 -1
  132. package/lib/helpers/get-prop-values.js +2 -0
  133. package/lib/helpers/get-prop-values.js.map +1 -1
  134. package/lib/helpers/get-query-props.js +2 -0
  135. package/lib/helpers/get-query-props.js.map +1 -1
  136. package/lib/helpers/get-required-schemas.js +2 -0
  137. package/lib/helpers/get-required-schemas.js.map +1 -1
  138. package/lib/helpers/get-sanitized-prop-values.js +2 -0
  139. package/lib/helpers/get-sanitized-prop-values.js.map +1 -1
  140. package/lib/helpers/get-search-filter-type.js +2 -0
  141. package/lib/helpers/get-search-filter-type.js.map +1 -1
  142. package/lib/helpers/get-sort-by-field-name.js +2 -0
  143. package/lib/helpers/get-sort-by-field-name.js.map +1 -1
  144. package/lib/helpers/get-unpublished-entity-name.js +2 -0
  145. package/lib/helpers/get-unpublished-entity-name.js.map +1 -1
  146. package/lib/helpers/inject-multiple-banners/get-banners-for-nodes/get-banners-for-nodes.js +4 -2
  147. package/lib/helpers/inject-multiple-banners/get-banners-for-nodes/get-banners-for-nodes.js.map +1 -1
  148. package/lib/helpers/inject-multiple-banners/get-banners-for-nodes/helpers/group-node-entities.js +2 -0
  149. package/lib/helpers/inject-multiple-banners/get-banners-for-nodes/helpers/group-node-entities.js.map +1 -1
  150. package/lib/helpers/parse-props-to-display.js +2 -2
  151. package/lib/helpers/remove-unwanted-characters.js +4 -2
  152. package/lib/helpers/remove-unwanted-characters.js.map +1 -1
  153. package/lib/helpers/render-children.js +4 -2
  154. package/lib/helpers/render-children.js.map +1 -1
  155. package/lib/helpers/sort-response-data.js +2 -0
  156. package/lib/helpers/sort-response-data.js.map +1 -1
  157. package/lib/helpers/split-children.js +4 -2
  158. package/lib/helpers/split-children.js.map +1 -1
  159. package/lib/helpers/update-childrens-parent.js +4 -2
  160. package/lib/helpers/update-childrens-parent.js.map +1 -1
  161. package/lib/hooks/helpers/StoreImages.js +2 -0
  162. package/lib/hooks/helpers/StoreImages.js.map +1 -1
  163. package/lib/hooks/helpers/append-gtm-classname.js +4 -2
  164. package/lib/hooks/helpers/append-gtm-classname.js.map +1 -1
  165. package/lib/hooks/helpers/buildPBComponents.js +4 -2
  166. package/lib/hooks/helpers/buildPBComponents.js.map +1 -1
  167. package/lib/hooks/helpers/check-banner-insertion-set.js +2 -0
  168. package/lib/hooks/helpers/check-banner-insertion-set.js.map +1 -1
  169. package/lib/hooks/helpers/check-collisions.js +2 -0
  170. package/lib/hooks/helpers/check-collisions.js.map +1 -1
  171. package/lib/hooks/helpers/get-banners-by-type.js +2 -0
  172. package/lib/hooks/helpers/get-banners-by-type.js.map +1 -1
  173. package/lib/hooks/helpers/get-lightbox-images.js +4 -2
  174. package/lib/hooks/helpers/get-lightbox-images.js.map +1 -1
  175. package/lib/hooks/helpers/inject-element-banners.js +4 -2
  176. package/lib/hooks/helpers/inject-element-banners.js.map +1 -1
  177. package/lib/hooks/helpers/inject-textblock-banners.js +4 -2
  178. package/lib/hooks/helpers/inject-textblock-banners.js.map +1 -1
  179. package/lib/hooks/helpers/insert-banners.js +2 -0
  180. package/lib/hooks/helpers/insert-banners.js.map +1 -1
  181. package/lib/hooks/use-get-entity-schemas-as-obj.js +2 -2
  182. package/lib/utils/get-class-modifiers.js +4 -2
  183. package/lib/utils/get-class-modifiers.js.map +1 -1
  184. package/lib/utils/get-image-data.js +2 -0
  185. package/lib/utils/get-image-data.js.map +1 -1
  186. package/lib-es/components/Banner/BannerRender.js +2 -2
  187. package/lib-es/components/Banner/helpers.js +2 -2
  188. package/lib-es/components/BlazeLink.js +2 -2
  189. package/lib-es/components/Button.js +2 -2
  190. package/lib-es/components/Card/CardRender.js +2 -2
  191. package/lib-es/components/Card/helpers/filter-query-setup.js +2 -2
  192. package/lib-es/components/ClickWrapper.js +2 -2
  193. package/lib-es/components/Code/Code.js +2 -2
  194. package/lib-es/components/Image/Image.js +2 -2
  195. package/lib-es/components/Layout/Layout.js +2 -2
  196. package/lib-es/components/List/ListBuilder.js +2 -2
  197. package/lib-es/components/List/ListFactory.js +2 -2
  198. package/lib-es/components/List/components/Cards/CardsRender.js +2 -2
  199. package/lib-es/components/List/components/Full/FullRender.js +2 -2
  200. package/lib-es/components/List/components/Full/FullRenderItem.js +2 -2
  201. package/lib-es/components/List/components/Pagination/ListPagination.js +2 -2
  202. package/lib-es/components/List/helpers/build-az-url.js +2 -2
  203. package/lib-es/components/List/helpers/build-pagination-url.js +2 -2
  204. package/lib-es/components/Menu/Menu.js +44 -11
  205. package/lib-es/components/Menu/Menu.js.map +1 -1
  206. package/lib-es/components/PasswordReset/PasswordReset.js +2 -2
  207. package/lib-es/components/SearchFilter/SearchFilter/SearchFilter.js +2 -2
  208. package/lib-es/components/SearchFilter/components/Range.js +2 -2
  209. package/lib-es/components/SearchFilterSort/helpers/update-sort.js +2 -2
  210. package/lib-es/components/TextBlock/index.js +2 -2
  211. package/lib-es/components/Video/Video.js +2 -2
  212. package/lib-es/components/Video/providers/JWPlayer/JWPlayerProvider.js +2 -2
  213. package/lib-es/components/Video/providers/YouTube/YouTubeProvider.js +8 -11
  214. package/lib-es/components/Video/providers/YouTube/YouTubeProvider.js.map +1 -1
  215. package/lib-es/components/Video/providers/YouTube/YoutubeEmbeded.js +147 -0
  216. package/lib-es/components/Video/providers/YouTube/YoutubeEmbeded.js.map +1 -0
  217. package/lib-es/helpers/append-images.js +2 -2
  218. package/lib-es/helpers/build-raw-query-base.js +2 -2
  219. package/lib-es/helpers/build-raw-query.js +2 -2
  220. package/lib-es/helpers/get-banner-data.js +2 -2
  221. package/lib-es/helpers/get-click-wrapper-options.js +2 -2
  222. package/lib-es/helpers/get-generic-props.js +2 -2
  223. package/lib-es/helpers/get-generic-render-variables.js +2 -2
  224. package/lib-es/helpers/inject-multiple-banners/get-banners-for-nodes/get-banners-for-nodes.js +2 -2
  225. package/lib-es/helpers/remove-unwanted-characters.js +2 -2
  226. package/lib-es/helpers/render-children.js +2 -2
  227. package/lib-es/helpers/split-children.js +2 -2
  228. package/lib-es/helpers/update-childrens-parent.js +2 -2
  229. package/lib-es/hooks/helpers/append-gtm-classname.js +2 -2
  230. package/lib-es/hooks/helpers/buildPBComponents.js +2 -2
  231. package/lib-es/hooks/helpers/get-lightbox-images.js +2 -2
  232. package/lib-es/hooks/helpers/inject-element-banners.js +2 -2
  233. package/lib-es/hooks/helpers/inject-textblock-banners.js +2 -2
  234. package/lib-es/utils/get-class-modifiers.js +2 -2
  235. package/package.json +6 -7
  236. package/src/components/Menu/Menu.js +50 -12
  237. package/src/components/Video/providers/YouTube/YouTubeProvider.js +7 -9
  238. package/src/components/Video/providers/YouTube/YoutubeEmbeded.js +160 -0
  239. package/tests/unit/src/components/Video/providers/YouTube/YouTubeProvider.test.js +0 -4
  240. package/tests/unit/src/components/Video/providers/YouTube/__snapshots__/YouTubeProvider.test.js.snap +16 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blaze-cms/react-page-builder",
3
- "version": "0.116.0",
3
+ "version": "0.118.0-alpha.3",
4
4
  "description": "Blaze react page builder",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib-es/index.js",
@@ -27,12 +27,12 @@
27
27
  },
28
28
  "license": "GPL-3.0",
29
29
  "dependencies": {
30
- "@blaze-cms/core-auth-ui": "^0.102.0",
31
- "@blaze-cms/core-errors": "^0.102.0",
30
+ "@blaze-cms/core-auth-ui": "^0.118.0-alpha.0",
31
+ "@blaze-cms/core-errors": "^0.118.0-alpha.0",
32
32
  "@blaze-cms/image-cdn-react": "^0.2.0",
33
- "@blaze-cms/nextjs-components": "^0.113.0",
33
+ "@blaze-cms/nextjs-components": "^0.118.0-alpha.0",
34
34
  "@blaze-cms/setup-ui": "^0.92.0",
35
- "@blaze-cms/utils": "^0.113.0",
35
+ "@blaze-cms/utils": "^0.118.0-alpha.0",
36
36
  "@blaze-react/button": "0.5.19",
37
37
  "@blaze-react/checkboxes": "0.5.31",
38
38
  "@blaze-react/input": "0.5.30",
@@ -58,7 +58,6 @@
58
58
  "react-html-parser": "2.0.2",
59
59
  "react-jw-player": "^1.19.1",
60
60
  "react-waypoint": "^9.0.2",
61
- "react-youtube": "7.11.3",
62
61
  "regenerator-runtime": "^0.13.3",
63
62
  "uuid": "^3.3.3",
64
63
  "video-react": "0.14.1"
@@ -88,5 +87,5 @@
88
87
  "lib/*",
89
88
  "lib-es/*"
90
89
  ],
91
- "gitHead": "7e61f8ea829a63a55f795f53299006ee2af46647"
90
+ "gitHead": "9ce5c14d20fe41c7e6b671fd8e8edd5410d704ce"
92
91
  }
@@ -1,42 +1,80 @@
1
1
  import React, { useState } from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import BlazeButton from '@blaze-react/button';
4
- import { MdMenu } from 'react-icons/md';
4
+ import { MdMenu, MdClose } from 'react-icons/md';
5
5
  import { useCheckMobileScreen } from '../../hooks';
6
6
  import { HIDDEN } from '../../constants';
7
7
 
8
- const Menu = ({ children, collapse, modifier }) => {
8
+ const Menu = ({
9
+ children,
10
+ collapse,
11
+ modifier,
12
+ mobileMenuModifier,
13
+ mobileMenuChildrenModifier,
14
+ mobileIconAlignment,
15
+ mobileButtonModifier,
16
+ hamburgerIconModifier,
17
+ closeIconModifier,
18
+ ...rest
19
+ }) => {
9
20
  const isMobile = useCheckMobileScreen();
10
21
  const [showMobileMenu, setShowMobileMenu] = useState(false);
11
22
 
12
23
  const shouldDisplayCollapsed = collapse && isMobile;
13
- const mobileButtonClass = shouldDisplayCollapsed && isMobile ? '' : HIDDEN;
24
+ const mobileButtonClass = shouldDisplayCollapsed && isMobile ? mobileButtonModifier : HIDDEN;
14
25
  const shouldDisplayChildren = shouldDisplayCollapsed ? showMobileMenu : true;
15
- const childrenDisplayClass = shouldDisplayChildren ? modifier : `${modifier} ${HIDDEN}`;
26
+ const childrenDesktopModifier =
27
+ shouldDisplayChildren && !isMobile ? modifier : `${modifier} ${HIDDEN}`;
28
+
29
+ const childrenMobileModifier =
30
+ shouldDisplayChildren && isMobile ? `${mobileMenuChildrenModifier}` : ` ${HIDDEN}`;
31
+
32
+ const isMobileMenuExpanded = showMobileMenu ? `${mobileMenuModifier}` : '';
16
33
 
17
34
  return (
18
35
  <>
19
36
  {collapse && (
20
- <BlazeButton
21
- className={mobileButtonClass}
22
- onClick={() => setShowMobileMenu(!showMobileMenu)}>
23
- <i>
24
- <MdMenu />
25
- </i>
26
- </BlazeButton>
37
+ <div className="top-0 absolute z-50">
38
+ <div
39
+ className={`flex w-screen z-50 justify-${mobileIconAlignment} ${isMobileMenuExpanded}`}>
40
+ <BlazeButton
41
+ className={mobileButtonClass}
42
+ onClick={() => setShowMobileMenu(!showMobileMenu)}>
43
+ <i>
44
+ {showMobileMenu ? (
45
+ <MdClose className={closeIconModifier} />
46
+ ) : (
47
+ <MdMenu className={hamburgerIconModifier} />
48
+ )}
49
+ </i>
50
+ </BlazeButton>
51
+ </div>
52
+ </div>
27
53
  )}
28
- <ul className={childrenDisplayClass}>{children}</ul>
54
+ <ul className={isMobile ? childrenMobileModifier : childrenDesktopModifier}>{children}</ul>
29
55
  </>
30
56
  );
31
57
  };
32
58
 
33
59
  Menu.propTypes = {
34
60
  collapse: PropTypes.bool.isRequired,
61
+ hamburgerIconModifier: PropTypes.string,
62
+ closeIconModifier: PropTypes.string,
63
+ mobileButtonModifier: PropTypes.string,
64
+ mobileMenuModifier: PropTypes.string,
65
+ mobileMenuChildrenModifier: PropTypes.string,
35
66
  modifier: PropTypes.string,
67
+ mobileIconAlignment: PropTypes.string,
36
68
  children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node])
37
69
  };
38
70
 
39
71
  Menu.defaultProps = {
72
+ hamburgerIconModifier: '',
73
+ closeIconModifier: '',
74
+ mobileButtonModifier: '',
75
+ mobileIconAlignment: '',
76
+ mobileMenuModifier: '',
77
+ mobileMenuChildrenModifier: '',
40
78
  modifier: '',
41
79
  children: []
42
80
  };
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
- import YouTube from 'react-youtube';
3
+ import YoutubeEmbeded from './YoutubeEmbeded';
4
4
  import { getYouTubeID, booleanToNumber } from './helpers';
5
5
  import { VIDEO_WRAPPER_CLASS_NAME } from '../../../../constants';
6
6
 
@@ -8,15 +8,13 @@ const YouTubeProvider = ({ url, autoplay, loop }) => {
8
8
  const videoId = getYouTubeID(url);
9
9
 
10
10
  if (!videoId) return null;
11
+ const params = `loop=${booleanToNumber(loop)}`;
11
12
 
12
- const opts = {
13
- playerVars: {
14
- autoplay: booleanToNumber(autoplay),
15
- loop: booleanToNumber(loop)
16
- }
17
- };
18
-
19
- return <YouTube videoId={videoId} containerClassName={VIDEO_WRAPPER_CLASS_NAME} opts={opts} />;
13
+ return (
14
+ <div className={VIDEO_WRAPPER_CLASS_NAME}>
15
+ <YoutubeEmbeded autoplay={autoplay} videoId={videoId} params={params} />
16
+ </div>
17
+ );
20
18
  };
21
19
 
22
20
  YouTubeProvider.propTypes = {
@@ -0,0 +1,160 @@
1
+ import React, { useState, useEffect } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { useInView } from '@blaze-react/utils/lib/customHooks';
4
+ import { IN_VIEW_CONFIG } from '../../../../constants';
5
+
6
+ const YT_HQ_FORMAT = 'hqdefault';
7
+ const YT_IMAGE_URL = 'https://i.ytimg.com';
8
+
9
+ const YoutubeEmbeded = ({
10
+ autoplay,
11
+ videoId,
12
+ playlistCoverId,
13
+ videoTitle,
14
+ poster,
15
+ videoParams,
16
+ announce,
17
+ noCookie,
18
+ webp,
19
+ playlist,
20
+ onIframeAdded,
21
+ muted,
22
+ adNetwork,
23
+ iframeClass,
24
+ priority
25
+ }) => {
26
+ const [isIntersecting, outerRef] = useInView(IN_VIEW_CONFIG);
27
+ const [preconnected, setPreconnected] = useState(false);
28
+ const [renderIframe, setRenderIframe] = useState(!!autoplay);
29
+ const [{ imageSize, displayImage }, setImageDetails] = useState({
30
+ imageSize: poster,
31
+ displayImage: priority
32
+ });
33
+
34
+ const encodedId = encodeURIComponent(videoId);
35
+ const videoPlaylisCovertId =
36
+ typeof playlistCoverId === 'string' ? encodeURIComponent(playlistCoverId) : null;
37
+ const paramsImp = videoParams ? `&${videoParams}` : '';
38
+ const format = webp ? 'webp' : 'jpg';
39
+ const vi = webp ? 'vi_webp' : 'vi';
40
+ const posterUrl = !playlist
41
+ ? `${YT_IMAGE_URL}/${vi}/${encodedId}/${imageSize}.${format}`
42
+ : `${YT_IMAGE_URL}/${vi}/${videoPlaylisCovertId}/${imageSize}.${format}`;
43
+ const ytUrl = noCookie ? 'https://www.youtube-nocookie.com' : 'https://www.youtube.com';
44
+
45
+ const mutedValue = muted ? '&mute=1' : '';
46
+ const iframeSrc = !playlist
47
+ ? `${ytUrl}/embed/${encodedId}?autoplay=1${mutedValue}${paramsImp}`
48
+ : `${ytUrl}/embed/videoseries?autoplay=1${mutedValue}&list=${encodedId}${paramsImp}`;
49
+ const parsedWrapperClassname = `yt-facade ${renderIframe ? 'yt-activated' : ''}`;
50
+
51
+ useEffect(
52
+ () => {
53
+ if ((!priority && !isIntersecting) || imageSize === YT_HQ_FORMAT) return;
54
+
55
+ const img = new Image();
56
+ // eslint-disable-next-line func-names
57
+ img.onload = function() {
58
+ let newImageSize = imageSize;
59
+ if (this && this.width === 120) newImageSize = YT_HQ_FORMAT;
60
+ setImageDetails({ imageSize: newImageSize, displayImage: true });
61
+ };
62
+
63
+ img.src = posterUrl;
64
+ },
65
+ [imageSize, isIntersecting, posterUrl, priority]
66
+ );
67
+
68
+ const warmConnections = () => {
69
+ if (preconnected) return;
70
+ setPreconnected(true);
71
+ };
72
+
73
+ const addIframe = () => {
74
+ if (renderIframe) return;
75
+ onIframeAdded();
76
+ setRenderIframe(true);
77
+ };
78
+
79
+ return (
80
+ <>
81
+ {preconnected && (
82
+ <>
83
+ <link rel="preconnect" href={YT_IMAGE_URL} />
84
+ <link rel="preconnect" href={ytUrl} />
85
+ <link rel="preconnect" href="https://www.google.com" />
86
+ {adNetwork && (
87
+ <>
88
+ <link rel="preconnect" href="https://static.doubleclick.net" />
89
+ <link rel="preconnect" href="https://googleads.g.doubleclick.net" />
90
+ </>
91
+ )}
92
+ </>
93
+ )}
94
+ <div
95
+ ref={outerRef}
96
+ role="button"
97
+ onPointerOver={warmConnections}
98
+ onClick={addIframe}
99
+ className={parsedWrapperClassname}
100
+ data-title={videoTitle}
101
+ style={{
102
+ backgroundImage: `url(${displayImage ? posterUrl : ''})`
103
+ }}>
104
+ <div
105
+ type="button"
106
+ className="yt-facade-button-wrapper"
107
+ aria-label={`${announce} ${videoTitle}`}>
108
+ <div className="yt-facade-button" />
109
+ </div>
110
+ {renderIframe && (
111
+ <iframe
112
+ className={iframeClass}
113
+ title={videoTitle}
114
+ allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"
115
+ allowFullScreen
116
+ src={iframeSrc}
117
+ />
118
+ )}
119
+ </div>
120
+ </>
121
+ );
122
+ };
123
+
124
+ YoutubeEmbeded.propTypes = {
125
+ priority: PropTypes.bool,
126
+ onIframeAdded: PropTypes.func,
127
+ adNetwork: PropTypes.bool,
128
+ autoplay: PropTypes.bool,
129
+ playlist: PropTypes.bool,
130
+ muted: PropTypes.bool,
131
+ webp: PropTypes.bool,
132
+ noCookie: PropTypes.bool,
133
+ videoId: PropTypes.string,
134
+ iframeClass: PropTypes.string,
135
+ poster: PropTypes.string,
136
+ announce: PropTypes.string,
137
+ playlistCoverId: PropTypes.string,
138
+ videoParams: PropTypes.string,
139
+ videoTitle: PropTypes.string
140
+ };
141
+
142
+ YoutubeEmbeded.defaultProps = {
143
+ priority: true,
144
+ onIframeAdded: () => {},
145
+ adNetwork: false,
146
+ autoplay: false,
147
+ playlist: false,
148
+ muted: false,
149
+ webp: false,
150
+ noCookie: false,
151
+ iframeClass: '',
152
+ poster: 'sddefault',
153
+ announce: 'Watch',
154
+ videoId: '',
155
+ playlistCoverId: '',
156
+ videoParams: '',
157
+ videoTitle: ''
158
+ };
159
+
160
+ export default YoutubeEmbeded;
@@ -5,10 +5,6 @@ import YouTubeProvider from '../../../../../../../src/components/Video/providers
5
5
  describe('YouTubeProvider component', () => {
6
6
  const props = { url: 'https://www.youtube.com/watch?v=mockedID', modifier: 'mocked-modifier' };
7
7
 
8
- it('should be defined', () => {
9
- expect(YouTubeProvider).toBeDefined();
10
- });
11
-
12
8
  it('should render without throwing error and match snapshot', async () => {
13
9
  const { asFragment } = render(YouTubeProvider, props);
14
10
  expect(asFragment()).toMatchSnapshot();
@@ -5,7 +5,22 @@ exports[`YouTubeProvider component should render without throwing error and matc
5
5
  <div
6
6
  class="video__wrapper"
7
7
  >
8
- <div />
8
+ <div
9
+ class="yt-facade "
10
+ data-title=""
11
+ role="button"
12
+ style="background-image: url(https://i.ytimg.com/vi/mockedID/sddefault.jpg);"
13
+ >
14
+ <div
15
+ aria-label="Watch "
16
+ class="yt-facade-button-wrapper"
17
+ type="button"
18
+ >
19
+ <div
20
+ class="yt-facade-button"
21
+ />
22
+ </div>
23
+ </div>
9
24
  </div>
10
25
  </DocumentFragment>
11
26
  `;