@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.
- package/CHANGELOG.md +38 -0
- package/lib/BannerContext/helpers/set-initial-banner-counters.js +2 -0
- package/lib/BannerContext/helpers/set-initial-banner-counters.js.map +1 -1
- package/lib/components/Banner/BannerRender.js +4 -2
- package/lib/components/Banner/BannerRender.js.map +1 -1
- package/lib/components/Banner/helpers.js +4 -2
- package/lib/components/Banner/helpers.js.map +1 -1
- package/lib/components/BlazeLink.js +4 -4
- package/lib/components/Button.js +4 -4
- package/lib/components/Card/CardRender.js +4 -2
- package/lib/components/Card/CardRender.js.map +1 -1
- package/lib/components/Card/helpers/filter-query-setup.js +4 -2
- package/lib/components/Card/helpers/filter-query-setup.js.map +1 -1
- package/lib/components/Card/helpers/filters-setup.js +2 -0
- package/lib/components/Card/helpers/filters-setup.js.map +1 -1
- package/lib/components/Card/helpers/get-dynamic-grid-classes.js +2 -0
- package/lib/components/Card/helpers/get-dynamic-grid-classes.js.map +1 -1
- package/lib/components/Card/helpers/should-return.js +2 -0
- package/lib/components/Card/helpers/should-return.js.map +1 -1
- package/lib/components/Card/helpers/use-dynamic-size-key.js +2 -0
- package/lib/components/Card/helpers/use-dynamic-size-key.js.map +1 -1
- package/lib/components/ClickWrapper.js +4 -4
- package/lib/components/Code/Code.js +4 -4
- package/lib/components/Code/ScriptTag.js +2 -2
- package/lib/components/Code/helpers/wrap-script-tags.js +2 -0
- package/lib/components/Code/helpers/wrap-script-tags.js.map +1 -1
- package/lib/components/DataSummary/helpers/build-loop-props-content.js +2 -0
- package/lib/components/DataSummary/helpers/build-loop-props-content.js.map +1 -1
- package/lib/components/DataSummary/helpers/build-props-to-display-with-content.js +2 -0
- package/lib/components/DataSummary/helpers/build-props-to-display-with-content.js.map +1 -1
- package/lib/components/DataSummary/helpers/get-loop-props-limit.js +2 -0
- package/lib/components/DataSummary/helpers/get-loop-props-limit.js.map +1 -1
- package/lib/components/DataSummary/helpers/get-prop-value.js +2 -0
- package/lib/components/DataSummary/helpers/get-prop-value.js.map +1 -1
- package/lib/components/DataSummary/helpers/get-value-from-array.js +2 -0
- package/lib/components/DataSummary/helpers/get-value-from-array.js.map +1 -1
- package/lib/components/DataSummary/helpers/strip-summary-props-content.js +2 -0
- package/lib/components/DataSummary/helpers/strip-summary-props-content.js.map +1 -1
- package/lib/components/Image/Image.js +4 -4
- package/lib/components/Layout/Layout.js +4 -2
- package/lib/components/Layout/Layout.js.map +1 -1
- package/lib/components/Layout/helpers/check-if-row-has-columns.js +2 -0
- package/lib/components/Layout/helpers/check-if-row-has-columns.js.map +1 -1
- package/lib/components/List/ListBuilder.js +4 -2
- package/lib/components/List/ListBuilder.js.map +1 -1
- package/lib/components/List/ListFactory.js +4 -4
- package/lib/components/List/components/Cards/CardsRender.js +4 -4
- package/lib/components/List/components/Full/FullRender.js +4 -4
- package/lib/components/List/components/Full/FullRenderItem.js +4 -4
- package/lib/components/List/components/Pagination/ListPagination.js +4 -4
- package/lib/components/List/helpers/build-az-aggregations.js +2 -0
- package/lib/components/List/helpers/build-az-aggregations.js.map +1 -1
- package/lib/components/List/helpers/build-az-url.js +4 -2
- package/lib/components/List/helpers/build-az-url.js.map +1 -1
- package/lib/components/List/helpers/build-pagination-url.js +4 -2
- package/lib/components/List/helpers/build-pagination-url.js.map +1 -1
- package/lib/components/List/helpers/get-sort-props.js +4 -0
- package/lib/components/List/helpers/get-sort-props.js.map +1 -1
- package/lib/components/List/helpers/sort-aggs.js +2 -0
- package/lib/components/List/helpers/sort-aggs.js.map +1 -1
- package/lib/components/Login/helpers/check-gtm-children.js +2 -0
- package/lib/components/Login/helpers/check-gtm-children.js.map +1 -1
- package/lib/components/Menu/Menu.js +39 -6
- package/lib/components/Menu/Menu.js.map +1 -1
- package/lib/components/PasswordReset/PasswordReset.js +4 -4
- package/lib/components/PasswordReset/helpers/validatePassword.js +2 -0
- package/lib/components/PasswordReset/helpers/validatePassword.js.map +1 -1
- package/lib/components/SearchFilter/SearchFilter/SearchFilter.js +4 -4
- package/lib/components/SearchFilter/SearchFilterContainer.js +2 -2
- package/lib/components/SearchFilter/components/Checkbox.js +2 -2
- package/lib/components/SearchFilter/components/Range.js +4 -2
- package/lib/components/SearchFilter/components/Range.js.map +1 -1
- package/lib/components/SearchFilter/components/Select.js +2 -0
- package/lib/components/SearchFilter/components/Select.js.map +1 -1
- package/lib/components/SearchFilter/helpers/build-query.js +2 -0
- package/lib/components/SearchFilter/helpers/build-query.js.map +1 -1
- package/lib/components/SearchFilter/helpers/build-raw-query-stringified.js +2 -0
- package/lib/components/SearchFilter/helpers/build-raw-query-stringified.js.map +1 -1
- package/lib/components/SearchFilter/helpers/get-display-value.js +2 -0
- package/lib/components/SearchFilter/helpers/get-display-value.js.map +1 -1
- package/lib/components/SearchFilter/helpers/get-initial-filter-values.js +2 -0
- package/lib/components/SearchFilter/helpers/get-initial-filter-values.js.map +1 -1
- package/lib/components/SearchFilterSort/helpers/handle-sort-update.js +2 -0
- package/lib/components/SearchFilterSort/helpers/handle-sort-update.js.map +1 -1
- package/lib/components/SearchFilterSort/helpers/update-sort.js +4 -2
- package/lib/components/SearchFilterSort/helpers/update-sort.js.map +1 -1
- package/lib/components/TextBlock/index.js +4 -2
- package/lib/components/TextBlock/index.js.map +1 -1
- package/lib/components/Video/Video.js +4 -2
- package/lib/components/Video/Video.js.map +1 -1
- package/lib/components/Video/providers/JWPlayer/JWPlayerProvider.js +4 -2
- package/lib/components/Video/providers/JWPlayer/JWPlayerProvider.js.map +1 -1
- package/lib/components/Video/providers/YouTube/YouTubeProvider.js +8 -11
- package/lib/components/Video/providers/YouTube/YouTubeProvider.js.map +1 -1
- package/lib/components/Video/providers/YouTube/YoutubeEmbeded.js +200 -0
- package/lib/components/Video/providers/YouTube/YoutubeEmbeded.js.map +1 -0
- package/lib/helpers/append-images.js +4 -2
- package/lib/helpers/append-images.js.map +1 -1
- package/lib/helpers/build-inherited-filters.js +2 -0
- package/lib/helpers/build-inherited-filters.js.map +1 -1
- package/lib/helpers/build-props-query.js +2 -2
- package/lib/helpers/build-raw-query-base.js +4 -2
- package/lib/helpers/build-raw-query-base.js.map +1 -1
- package/lib/helpers/build-raw-query.js +4 -2
- package/lib/helpers/build-raw-query.js.map +1 -1
- package/lib/helpers/build-search-values-checkbox-select.js +2 -2
- package/lib/helpers/build-search-values-text.js +2 -0
- package/lib/helpers/build-search-values-text.js.map +1 -1
- package/lib/helpers/build-set-filters.js +2 -0
- package/lib/helpers/build-set-filters.js.map +1 -1
- package/lib/helpers/check-for-error.js +2 -0
- package/lib/helpers/check-for-error.js.map +1 -1
- package/lib/helpers/get-banner-data.js +4 -2
- package/lib/helpers/get-banner-data.js.map +1 -1
- package/lib/helpers/get-click-wrapper-options.js +4 -2
- package/lib/helpers/get-click-wrapper-options.js.map +1 -1
- package/lib/helpers/get-filter-props.js +2 -0
- package/lib/helpers/get-filter-props.js.map +1 -1
- package/lib/helpers/get-filter-relation-keys.js +2 -0
- package/lib/helpers/get-filter-relation-keys.js.map +1 -1
- package/lib/helpers/get-generic-props.js +4 -2
- package/lib/helpers/get-generic-props.js.map +1 -1
- package/lib/helpers/get-generic-render-variables.js +4 -2
- package/lib/helpers/get-generic-render-variables.js.map +1 -1
- package/lib/helpers/get-image-ids.js +2 -0
- package/lib/helpers/get-image-ids.js.map +1 -1
- package/lib/helpers/get-inherited-filters.js +2 -0
- package/lib/helpers/get-inherited-filters.js.map +1 -1
- package/lib/helpers/get-items-to-display-ids.js +2 -2
- package/lib/helpers/get-parsed-prop-values.js +2 -0
- package/lib/helpers/get-parsed-prop-values.js.map +1 -1
- package/lib/helpers/get-prop-values.js +2 -0
- package/lib/helpers/get-prop-values.js.map +1 -1
- package/lib/helpers/get-query-props.js +2 -0
- package/lib/helpers/get-query-props.js.map +1 -1
- package/lib/helpers/get-required-schemas.js +2 -0
- package/lib/helpers/get-required-schemas.js.map +1 -1
- package/lib/helpers/get-sanitized-prop-values.js +2 -0
- package/lib/helpers/get-sanitized-prop-values.js.map +1 -1
- package/lib/helpers/get-search-filter-type.js +2 -0
- package/lib/helpers/get-search-filter-type.js.map +1 -1
- package/lib/helpers/get-sort-by-field-name.js +2 -0
- package/lib/helpers/get-sort-by-field-name.js.map +1 -1
- package/lib/helpers/get-unpublished-entity-name.js +2 -0
- package/lib/helpers/get-unpublished-entity-name.js.map +1 -1
- package/lib/helpers/inject-multiple-banners/get-banners-for-nodes/get-banners-for-nodes.js +4 -2
- package/lib/helpers/inject-multiple-banners/get-banners-for-nodes/get-banners-for-nodes.js.map +1 -1
- package/lib/helpers/inject-multiple-banners/get-banners-for-nodes/helpers/group-node-entities.js +2 -0
- package/lib/helpers/inject-multiple-banners/get-banners-for-nodes/helpers/group-node-entities.js.map +1 -1
- package/lib/helpers/parse-props-to-display.js +2 -2
- package/lib/helpers/remove-unwanted-characters.js +4 -2
- package/lib/helpers/remove-unwanted-characters.js.map +1 -1
- package/lib/helpers/render-children.js +4 -2
- package/lib/helpers/render-children.js.map +1 -1
- package/lib/helpers/sort-response-data.js +2 -0
- package/lib/helpers/sort-response-data.js.map +1 -1
- package/lib/helpers/split-children.js +4 -2
- package/lib/helpers/split-children.js.map +1 -1
- package/lib/helpers/update-childrens-parent.js +4 -2
- package/lib/helpers/update-childrens-parent.js.map +1 -1
- package/lib/hooks/helpers/StoreImages.js +2 -0
- package/lib/hooks/helpers/StoreImages.js.map +1 -1
- package/lib/hooks/helpers/append-gtm-classname.js +4 -2
- package/lib/hooks/helpers/append-gtm-classname.js.map +1 -1
- package/lib/hooks/helpers/buildPBComponents.js +4 -2
- package/lib/hooks/helpers/buildPBComponents.js.map +1 -1
- package/lib/hooks/helpers/check-banner-insertion-set.js +2 -0
- package/lib/hooks/helpers/check-banner-insertion-set.js.map +1 -1
- package/lib/hooks/helpers/check-collisions.js +2 -0
- package/lib/hooks/helpers/check-collisions.js.map +1 -1
- package/lib/hooks/helpers/get-banners-by-type.js +2 -0
- package/lib/hooks/helpers/get-banners-by-type.js.map +1 -1
- package/lib/hooks/helpers/get-lightbox-images.js +4 -2
- package/lib/hooks/helpers/get-lightbox-images.js.map +1 -1
- package/lib/hooks/helpers/inject-element-banners.js +4 -2
- package/lib/hooks/helpers/inject-element-banners.js.map +1 -1
- package/lib/hooks/helpers/inject-textblock-banners.js +4 -2
- package/lib/hooks/helpers/inject-textblock-banners.js.map +1 -1
- package/lib/hooks/helpers/insert-banners.js +2 -0
- package/lib/hooks/helpers/insert-banners.js.map +1 -1
- package/lib/hooks/use-get-entity-schemas-as-obj.js +2 -2
- package/lib/utils/get-class-modifiers.js +4 -2
- package/lib/utils/get-class-modifiers.js.map +1 -1
- package/lib/utils/get-image-data.js +2 -0
- package/lib/utils/get-image-data.js.map +1 -1
- package/lib-es/components/Banner/BannerRender.js +2 -2
- package/lib-es/components/Banner/helpers.js +2 -2
- package/lib-es/components/BlazeLink.js +2 -2
- package/lib-es/components/Button.js +2 -2
- package/lib-es/components/Card/CardRender.js +2 -2
- package/lib-es/components/Card/helpers/filter-query-setup.js +2 -2
- package/lib-es/components/ClickWrapper.js +2 -2
- package/lib-es/components/Code/Code.js +2 -2
- package/lib-es/components/Image/Image.js +2 -2
- package/lib-es/components/Layout/Layout.js +2 -2
- package/lib-es/components/List/ListBuilder.js +2 -2
- package/lib-es/components/List/ListFactory.js +2 -2
- package/lib-es/components/List/components/Cards/CardsRender.js +2 -2
- package/lib-es/components/List/components/Full/FullRender.js +2 -2
- package/lib-es/components/List/components/Full/FullRenderItem.js +2 -2
- package/lib-es/components/List/components/Pagination/ListPagination.js +2 -2
- package/lib-es/components/List/helpers/build-az-url.js +2 -2
- package/lib-es/components/List/helpers/build-pagination-url.js +2 -2
- package/lib-es/components/Menu/Menu.js +44 -11
- package/lib-es/components/Menu/Menu.js.map +1 -1
- package/lib-es/components/PasswordReset/PasswordReset.js +2 -2
- package/lib-es/components/SearchFilter/SearchFilter/SearchFilter.js +2 -2
- package/lib-es/components/SearchFilter/components/Range.js +2 -2
- package/lib-es/components/SearchFilterSort/helpers/update-sort.js +2 -2
- package/lib-es/components/TextBlock/index.js +2 -2
- package/lib-es/components/Video/Video.js +2 -2
- package/lib-es/components/Video/providers/JWPlayer/JWPlayerProvider.js +2 -2
- package/lib-es/components/Video/providers/YouTube/YouTubeProvider.js +8 -11
- package/lib-es/components/Video/providers/YouTube/YouTubeProvider.js.map +1 -1
- package/lib-es/components/Video/providers/YouTube/YoutubeEmbeded.js +147 -0
- package/lib-es/components/Video/providers/YouTube/YoutubeEmbeded.js.map +1 -0
- package/lib-es/helpers/append-images.js +2 -2
- package/lib-es/helpers/build-raw-query-base.js +2 -2
- package/lib-es/helpers/build-raw-query.js +2 -2
- package/lib-es/helpers/get-banner-data.js +2 -2
- package/lib-es/helpers/get-click-wrapper-options.js +2 -2
- package/lib-es/helpers/get-generic-props.js +2 -2
- package/lib-es/helpers/get-generic-render-variables.js +2 -2
- package/lib-es/helpers/inject-multiple-banners/get-banners-for-nodes/get-banners-for-nodes.js +2 -2
- package/lib-es/helpers/remove-unwanted-characters.js +2 -2
- package/lib-es/helpers/render-children.js +2 -2
- package/lib-es/helpers/split-children.js +2 -2
- package/lib-es/helpers/update-childrens-parent.js +2 -2
- package/lib-es/hooks/helpers/append-gtm-classname.js +2 -2
- package/lib-es/hooks/helpers/buildPBComponents.js +2 -2
- package/lib-es/hooks/helpers/get-lightbox-images.js +2 -2
- package/lib-es/hooks/helpers/inject-element-banners.js +2 -2
- package/lib-es/hooks/helpers/inject-textblock-banners.js +2 -2
- package/lib-es/utils/get-class-modifiers.js +2 -2
- package/package.json +6 -7
- package/src/components/Menu/Menu.js +50 -12
- package/src/components/Video/providers/YouTube/YouTubeProvider.js +7 -9
- package/src/components/Video/providers/YouTube/YoutubeEmbeded.js +160 -0
- package/tests/unit/src/components/Video/providers/YouTube/YouTubeProvider.test.js +0 -4
- 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.
|
|
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.
|
|
31
|
-
"@blaze-cms/core-errors": "^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.
|
|
33
|
+
"@blaze-cms/nextjs-components": "^0.118.0-alpha.0",
|
|
34
34
|
"@blaze-cms/setup-ui": "^0.92.0",
|
|
35
|
-
"@blaze-cms/utils": "^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": "
|
|
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 = ({
|
|
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 ?
|
|
24
|
+
const mobileButtonClass = shouldDisplayCollapsed && isMobile ? mobileButtonModifier : HIDDEN;
|
|
14
25
|
const shouldDisplayChildren = shouldDisplayCollapsed ? showMobileMenu : true;
|
|
15
|
-
const
|
|
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
|
-
<
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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={
|
|
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
|
|
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
|
-
|
|
13
|
-
|
|
14
|
-
autoplay
|
|
15
|
-
|
|
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();
|
package/tests/unit/src/components/Video/providers/YouTube/__snapshots__/YouTubeProvider.test.js.snap
CHANGED
|
@@ -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
|
`;
|