@gravity-ui/page-constructor 6.5.1 → 6.6.1
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/build/cjs/blocks/Slider/Slider.js +4 -1
- package/build/cjs/blocks/Slider/Slider.js.map +1 -1
- package/build/cjs/components/ReactPlayer/ReactPlayer.js +4 -1
- package/build/cjs/components/ReactPlayer/ReactPlayer.js.map +1 -1
- package/build/cjs/internal-typings/global.d.ts +1 -0
- package/build/cjs/models/constructor-items/sub-blocks.d.ts +2 -1
- package/build/cjs/models/constructor-items/sub-blocks.js.map +1 -1
- package/build/cjs/sub-blocks/HubspotForm/HubspotFormContainer.d.ts +1 -1
- package/build/cjs/sub-blocks/HubspotForm/HubspotFormContainer.js +5 -1
- package/build/cjs/sub-blocks/HubspotForm/HubspotFormContainer.js.map +1 -1
- package/build/cjs/sub-blocks/HubspotForm/index.js +2 -2
- package/build/cjs/sub-blocks/HubspotForm/index.js.map +1 -1
- package/build/cjs/sub-blocks/HubspotForm/setHubspotDefaultValues.d.ts +2 -0
- package/build/cjs/sub-blocks/HubspotForm/setHubspotDefaultValues.js +51 -0
- package/build/cjs/sub-blocks/HubspotForm/setHubspotDefaultValues.js.map +1 -0
- package/build/cjs/utils/hubspot.d.ts +1 -0
- package/build/cjs/utils/hubspot.js.map +1 -1
- package/build/esm/blocks/Slider/Slider.js +4 -1
- package/build/esm/blocks/Slider/Slider.js.map +1 -1
- package/build/esm/components/ReactPlayer/ReactPlayer.js +4 -1
- package/build/esm/components/ReactPlayer/ReactPlayer.js.map +1 -1
- package/build/esm/internal-typings/global.d.ts +1 -0
- package/build/esm/models/constructor-items/sub-blocks.d.ts +2 -1
- package/build/esm/models/constructor-items/sub-blocks.js.map +1 -1
- package/build/esm/sub-blocks/HubspotForm/HubspotFormContainer.d.ts +1 -1
- package/build/esm/sub-blocks/HubspotForm/HubspotFormContainer.js +5 -1
- package/build/esm/sub-blocks/HubspotForm/HubspotFormContainer.js.map +1 -1
- package/build/esm/sub-blocks/HubspotForm/index.js +2 -2
- package/build/esm/sub-blocks/HubspotForm/index.js.map +1 -1
- package/build/esm/sub-blocks/HubspotForm/setHubspotDefaultValues.d.ts +2 -0
- package/build/esm/sub-blocks/HubspotForm/setHubspotDefaultValues.js +47 -0
- package/build/esm/sub-blocks/HubspotForm/setHubspotDefaultValues.js.map +1 -0
- package/build/esm/utils/hubspot.d.ts +1 -0
- package/build/esm/utils/hubspot.js.map +1 -1
- package/package.json +1 -1
- package/server/models/constructor-items/sub-blocks.d.ts +2 -1
- package/server/utils/hubspot.d.ts +1 -0
|
@@ -27,6 +27,9 @@ const b = (0, utils_1.block)('SliderBlock');
|
|
|
27
27
|
const slick = (0, utils_1.block)('slick-origin');
|
|
28
28
|
const DOT_WIDTH = 8;
|
|
29
29
|
const DOT_GAP = 16;
|
|
30
|
+
const SlickSlider = 'default' in react_slick_1.default && react_slick_1.default.default
|
|
31
|
+
? react_slick_1.default.default
|
|
32
|
+
: react_slick_1.default;
|
|
30
33
|
const SliderBlock = (props) => {
|
|
31
34
|
const { animated, title, description, type, anchorId, arrows = true, adaptive, autoplay: autoplaySpeed, dots = true, dotsClassName, disclaimer, children, className, blockClassName, lazyLoad, arrowSize, onAfterChange: handleAfterChange, onBeforeChange: handleBeforeChange, } = props;
|
|
32
35
|
const { isServer } = React.useContext(ssrContext_1.SSRContext);
|
|
@@ -245,7 +248,7 @@ const SliderBlock = (props) => {
|
|
|
245
248
|
lazyLoad,
|
|
246
249
|
accessibility: false,
|
|
247
250
|
};
|
|
248
|
-
return ((0, jsx_runtime_1.jsxs)(OutsideClick_1.default, { onOutsideClick: isMobile ? unsetFocus : noop_1.default, children: [(0, jsx_runtime_1.jsx)(
|
|
251
|
+
return ((0, jsx_runtime_1.jsxs)(OutsideClick_1.default, { onOutsideClick: isMobile ? unsetFocus : noop_1.default, children: [(0, jsx_runtime_1.jsx)(SlickSlider, { ...settings, children: disclosedChildren }), (0, jsx_runtime_1.jsxs)("div", { className: b('footer'), children: [renderDisclaimer(), renderNavigation()] })] }));
|
|
249
252
|
};
|
|
250
253
|
return ((0, jsx_runtime_1.jsx)(StylesContext_1.StylesContext.Provider, { value: { ...childStyles, setStyles: setChildStyles }, children: (0, jsx_runtime_1.jsxs)("div", { className: b({
|
|
251
254
|
'align-left': childrenCount < slidesCountByBreakpoint,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Slider.js","sourceRoot":"../../../../src","sources":["blocks/Slider/Slider.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\n\nimport {useUniqId} from '@gravity-ui/uikit';\nimport debounce from 'lodash/debounce';\nimport get from 'lodash/get';\nimport noop from 'lodash/noop';\nimport SlickSlider, {Settings} from 'react-slick';\n\nimport Anchor from '../../components/Anchor/Anchor';\nimport AnimateBlock from '../../components/AnimateBlock/AnimateBlock';\nimport OutsideClick from '../../components/OutsideClick/OutsideClick';\nimport Title from '../../components/Title/Title';\nimport {BREAKPOINTS} from '../../constants';\nimport {MobileContext} from '../../context/mobileContext';\nimport {SSRContext} from '../../context/ssrContext';\nimport {StylesContext} from '../../context/stylesContext/StylesContext';\nimport useFocus from '../../hooks/useFocus';\nimport {\n ClassNameProps,\n Refable,\n SliderProps as SliderParams,\n SliderType,\n Timeout,\n} from '../../models';\nimport {block} from '../../utils';\n\nimport Arrow, {ArrowType} from './Arrow/Arrow';\nimport {i18n} from './i18n';\nimport {SliderBreakpointParams} from './models';\nimport {\n getSliderResponsiveParams,\n getSlidesCountByBreakpoint,\n getSlidesToShowCount,\n getSlidesToShowWithDefaults,\n isFocusable,\n useRovingTabIndex,\n} from './utils';\n\nimport './Slider.scss';\n\nconst b = block('SliderBlock');\nconst slick = block('slick-origin');\n\nconst DOT_WIDTH = 8;\nconst DOT_GAP = 16;\n\nexport interface SliderProps\n extends Omit<SliderParams, 'children'>,\n Refable<HTMLDivElement>,\n ClassNameProps,\n Pick<Settings, 'lazyLoad'> {\n type?: string;\n anchorId?: string;\n onAfterChange?: (index: number) => void;\n onBeforeChange?: (current: number, next: number) => void;\n dotsClassName?: string;\n blockClassName?: string;\n arrowSize?: number;\n}\n\nexport const SliderBlock = (props: React.PropsWithChildren<SliderProps>) => {\n const {\n animated,\n title,\n description,\n type,\n anchorId,\n arrows = true,\n adaptive,\n autoplay: autoplaySpeed,\n dots = true,\n dotsClassName,\n disclaimer,\n children,\n className,\n blockClassName,\n lazyLoad,\n arrowSize,\n onAfterChange: handleAfterChange,\n onBeforeChange: handleBeforeChange,\n } = props;\n\n const {isServer} = React.useContext(SSRContext);\n const isMobile = React.useContext(MobileContext);\n const [breakpoint, setBreakpoint] = React.useState<number>(BREAKPOINTS.xl);\n const sliderId = useUniqId();\n const disclosedChildren = React.useMemo<React.ReactElement[]>(\n () => discloseAllNestedChildren(children as React.ReactElement[], sliderId),\n [children, sliderId],\n );\n const childrenCount = disclosedChildren.length;\n const isAutoplayEnabled = autoplaySpeed !== undefined && autoplaySpeed > 0;\n const isUserInteractionRef = React.useRef(false);\n\n const [slidesToShow] = React.useState<SliderBreakpointParams>(\n getSlidesToShowWithDefaults({\n contentLength: childrenCount,\n breakpoints: props.slidesToShow,\n mobileFullscreen: Boolean(\n props.type && Object.values(SliderType).includes(props.type as SliderType),\n ),\n }),\n );\n\n const slidesToShowCount = getSlidesToShowCount(slidesToShow);\n const slidesCountByBreakpoint = getSlidesCountByBreakpoint(breakpoint, slidesToShow);\n\n const [currentIndex, setCurrentIndex] = React.useState<number>(0);\n const [childStyles, setChildStyles] = React.useState<Object>({});\n const [slider, setSlider] = React.useState<SlickSlider>();\n const prevIndexRef = React.useRef<number>(0);\n const autoplayTimeId = React.useRef<Timeout>();\n const {hasFocus, unsetFocus} = useFocus(slider?.innerSlider?.list);\n\n const asUserInteraction =\n <T extends unknown[], R>(fn: (...args: T) => R) =>\n (...args: T): R => {\n isUserInteractionRef.current = true;\n return fn(...args);\n };\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const onResize = React.useCallback(\n debounce(() => {\n if (!slider) {\n return;\n }\n\n const newBreakpoint = get(slider, 'state.breakpoint') || BREAKPOINTS.xl;\n\n if (newBreakpoint !== breakpoint) {\n setBreakpoint(newBreakpoint);\n setCurrentIndex(0);\n\n slider.slickGoTo(0);\n }\n }, 100),\n [slider, breakpoint],\n );\n\n const scrollLastSlide = React.useCallback(\n (current: number) => {\n const lastSlide = childrenCount - slidesToShowCount;\n\n if (isAutoplayEnabled && lastSlide === current) {\n // Slick doesn't support autoplay with no infinity scroll\n autoplayTimeId.current = setTimeout(() => {\n if (slider) {\n slider.slickGoTo(0, false);\n slider.slickPause();\n }\n setTimeout(() => {\n if (slider) {\n slider.slickPlay();\n }\n }, 500);\n }, autoplaySpeed);\n }\n },\n [autoplaySpeed, childrenCount, isAutoplayEnabled, slider, slidesToShowCount],\n );\n\n React.useEffect(() => {\n if (hasFocus && autoplayTimeId.current) {\n clearTimeout(autoplayTimeId.current);\n } else {\n scrollLastSlide(currentIndex);\n }\n }, [currentIndex, hasFocus, scrollLastSlide]);\n\n React.useEffect(() => {\n onResize();\n\n window.addEventListener('resize', onResize, {passive: true});\n\n return () => window.removeEventListener('resize', onResize);\n }, [onResize]);\n\n const handleArrowClick = (direction: ArrowType) => {\n let nextIndex;\n\n if (direction === 'right') {\n nextIndex =\n currentIndex === childrenCount - slidesCountByBreakpoint ? 0 : currentIndex + 1;\n } else {\n nextIndex =\n currentIndex === 0 ? childrenCount - slidesCountByBreakpoint : currentIndex - 1;\n }\n\n if (slider) {\n slider.slickGoTo(nextIndex);\n }\n };\n\n const onBeforeChange = React.useCallback(\n (current: number, next: number) => {\n if (handleBeforeChange) {\n handleBeforeChange(current, next);\n }\n\n prevIndexRef.current = current;\n\n setCurrentIndex(Math.ceil(next));\n },\n [handleBeforeChange],\n );\n\n const onAfterChange = React.useCallback(\n (current: number) => {\n if (handleAfterChange) {\n handleAfterChange(current);\n }\n\n if (autoplayTimeId.current) {\n clearTimeout(autoplayTimeId.current);\n }\n\n if (!hasFocus) {\n scrollLastSlide(current);\n }\n\n if (isUserInteractionRef.current) {\n const focusIndex =\n prevIndexRef.current >= current\n ? current\n : Math.max(current, prevIndexRef.current + slidesCountByBreakpoint);\n\n const firstNewSlide = document.getElementById(getSlideId(sliderId, focusIndex));\n if (firstNewSlide) {\n const focusableChild = Array.from(firstNewSlide.querySelectorAll('*')).find(\n isFocusable,\n ) as HTMLElement | undefined;\n focusableChild?.focus();\n }\n }\n\n isUserInteractionRef.current = false;\n },\n [handleAfterChange, hasFocus, scrollLastSlide, sliderId, slidesCountByBreakpoint],\n );\n\n const handleDotClick = (index: number) => {\n const nextIndex = index > currentIndex ? index + 1 - slidesCountByBreakpoint : index;\n\n if (slider) {\n slider.slickGoTo(nextIndex);\n }\n };\n\n const barSlidesCount = childrenCount - slidesCountByBreakpoint + 1;\n const barPosition = (DOT_GAP + DOT_WIDTH) * currentIndex;\n const barWidth = DOT_WIDTH + (DOT_GAP + DOT_WIDTH) * (slidesCountByBreakpoint - 1);\n\n const {getRovingItemProps, rovingListProps} = useRovingTabIndex({\n itemCount: barSlidesCount,\n activeIndex: currentIndex + 1,\n firstIndex: 1,\n uniqId: sliderId,\n });\n\n const renderBar = () => {\n return (\n slidesCountByBreakpoint > 1 && (\n <li\n className={b('bar')}\n style={{\n left: barPosition,\n width: barWidth,\n }}\n />\n )\n );\n };\n\n // renders additional bar, not visible in the layout but visible for screenreaders\n const renderAccessibleBar = (index: number) => {\n return (\n // To have this key differ from keys used in renderDot function, added `-accessible-bar` part\n <React.Fragment key={`${index}-accessible-bar`}>\n {slidesCountByBreakpoint > 0 && (\n <li\n className={b('accessible-bar')}\n role=\"menuitemradio\"\n aria-checked\n aria-label={i18n('dot-label', {\n index: currentIndex + 1,\n count: barSlidesCount,\n })}\n style={{\n left: barPosition,\n width: barWidth,\n }}\n {...getRovingItemProps(currentIndex + 1)}\n />\n )}\n </React.Fragment>\n );\n };\n\n const getCurrentSlideNumber = (index: number) => {\n const currentIndexDiff = index - currentIndex;\n\n let currentSlideNumber;\n if (0 <= currentIndexDiff && currentIndexDiff < slidesCountByBreakpoint) {\n currentSlideNumber = currentIndex + 1;\n } else if (currentIndexDiff >= slidesCountByBreakpoint) {\n currentSlideNumber = index - slidesCountByBreakpoint + 2;\n } else {\n currentSlideNumber = index + 1;\n }\n return currentSlideNumber;\n };\n const isVisibleSlide = (index: number) => {\n const currentIndexDiff = index - currentIndex;\n\n const result =\n slidesCountByBreakpoint > 0 &&\n 0 <= currentIndexDiff &&\n currentIndexDiff < slidesCountByBreakpoint;\n return result;\n };\n\n const renderDot = (index: number) => {\n const isVisible = isVisibleSlide(index);\n const currentSlideNumber = getCurrentSlideNumber(index);\n const rovingItemProps = isVisible ? undefined : getRovingItemProps(currentSlideNumber);\n return (\n <li\n key={index}\n className={b('dot', {active: index === currentIndex})}\n onClick={asUserInteraction(() => handleDotClick(index))}\n onKeyDown={(e) => {\n const key = e.key.toLowerCase();\n if (key === 'space' || key === 'enter') {\n e.currentTarget.click();\n }\n }}\n role=\"menuitemradio\"\n aria-checked={false}\n tabIndex={-1}\n aria-hidden={isVisible}\n aria-label={i18n('dot-label', {\n index: currentSlideNumber,\n count: barSlidesCount,\n })}\n {...rovingItemProps}\n />\n );\n };\n\n const renderNavigation = () => {\n if (childrenCount <= slidesCountByBreakpoint || !dots || childrenCount === 1) {\n return null;\n }\n const dotsList = Array(childrenCount)\n .fill(null)\n .map((_item, index) => renderDot(index));\n dotsList.splice(currentIndex, 0, renderAccessibleBar(currentIndex));\n\n return (\n <div className={b('dots', dotsClassName)}>\n <ul\n className={b('dots-list')}\n role=\"menu\"\n aria-label={i18n('pagination-label')}\n {...rovingListProps}\n >\n {renderBar()}\n {dotsList}\n </ul>\n </div>\n );\n };\n\n const renderDisclaimer = () => {\n return disclaimer ? (\n <div className={b('disclaimer', {size: disclaimer.size || 'm'})}>{disclaimer.text}</div>\n ) : null;\n };\n\n const renderSlider = () => {\n /* Disable adding of width in inline styles when SSR to prevent overriding of default styles */\n /* Calculate appropriate breakpoint for mobile devices with user agent */\n const variableWidth = isServer && isMobile;\n\n const settings = {\n ref: (slickSlider: SlickSlider) => setSlider(slickSlider),\n className: slick(null, className),\n arrows,\n variableWidth,\n infinite: false,\n speed: 1000,\n adaptiveHeight: adaptive,\n autoplay: isAutoplayEnabled,\n autoplaySpeed,\n slidesToShow: slidesToShowCount,\n slidesToScroll: 1,\n responsive: getSliderResponsiveParams(slidesToShow),\n beforeChange: onBeforeChange,\n afterChange: onAfterChange,\n initialSlide: 0,\n nextArrow: (\n <Arrow\n type=\"right\"\n handleClick={asUserInteraction(handleArrowClick)}\n size={arrowSize}\n />\n ),\n prevArrow: (\n <Arrow\n type=\"left\"\n handleClick={asUserInteraction(handleArrowClick)}\n size={arrowSize}\n />\n ),\n lazyLoad,\n accessibility: false,\n };\n\n return (\n <OutsideClick onOutsideClick={isMobile ? unsetFocus : noop}>\n <SlickSlider {...settings}>{disclosedChildren}</SlickSlider>\n <div className={b('footer')}>\n {renderDisclaimer()}\n {renderNavigation()}\n </div>\n </OutsideClick>\n );\n };\n\n return (\n <StylesContext.Provider value={{...childStyles, setStyles: setChildStyles}}>\n <div\n className={b(\n {\n 'align-left': childrenCount < slidesCountByBreakpoint,\n 'one-slide': childrenCount === 1,\n 'only-arrows': !title?.text && !description && arrows,\n mobile: isMobile,\n type,\n },\n blockClassName,\n )}\n >\n {anchorId && <Anchor id={anchorId} />}\n <Title\n title={title}\n subtitle={description}\n className={b('header', {'no-description': !description})}\n />\n <AnimateBlock className={b('animate-slides')} animate={animated}>\n {renderSlider()}\n </AnimateBlock>\n </div>\n </StylesContext.Provider>\n );\n};\n\nfunction getSlideId(sliderId: string, index: number) {\n return `slider-${sliderId}-child-${index}`;\n}\n\n// TODO remove this and rework PriceDetailed CLOUDFRONT-12230\nfunction discloseAllNestedChildren(\n children: React.ReactElement[],\n sliderId: string,\n): React.ReactElement[] {\n if (!children) {\n return [];\n }\n\n let childIndex = 0;\n const wrapped = (child: React.ReactElement) => {\n const id = getSlideId(sliderId, childIndex++);\n\n return (\n <div key={id} id={id}>\n {child}\n </div>\n );\n };\n\n return React.Children.map(children, (child) => {\n if (child) {\n // TODO: if child has 'items' then 'items' determinate like nested children for Slider.\n const nestedChildren = child.props.data?.items;\n\n if (nestedChildren) {\n return nestedChildren.map((nestedChild: React.ReactElement) => {\n return wrapped(\n React.cloneElement(child, {\n data: {\n ...child.props.data,\n items: [nestedChild],\n },\n }),\n );\n });\n }\n }\n return child && wrapped(child);\n }).filter(Boolean);\n}\n\nexport default SliderBlock;\n"]}
|
|
1
|
+
{"version":3,"file":"Slider.js","sourceRoot":"../../../../src","sources":["blocks/Slider/Slider.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\n\nimport {useUniqId} from '@gravity-ui/uikit';\nimport debounce from 'lodash/debounce';\nimport get from 'lodash/get';\nimport noop from 'lodash/noop';\nimport _SlickSlider, {Settings} from 'react-slick';\n\nimport Anchor from '../../components/Anchor/Anchor';\nimport AnimateBlock from '../../components/AnimateBlock/AnimateBlock';\nimport OutsideClick from '../../components/OutsideClick/OutsideClick';\nimport Title from '../../components/Title/Title';\nimport {BREAKPOINTS} from '../../constants';\nimport {MobileContext} from '../../context/mobileContext';\nimport {SSRContext} from '../../context/ssrContext';\nimport {StylesContext} from '../../context/stylesContext/StylesContext';\nimport useFocus from '../../hooks/useFocus';\nimport {\n ClassNameProps,\n Refable,\n SliderProps as SliderParams,\n SliderType,\n Timeout,\n} from '../../models';\nimport {block} from '../../utils';\n\nimport Arrow, {ArrowType} from './Arrow/Arrow';\nimport {i18n} from './i18n';\nimport {SliderBreakpointParams} from './models';\nimport {\n getSliderResponsiveParams,\n getSlidesCountByBreakpoint,\n getSlidesToShowCount,\n getSlidesToShowWithDefaults,\n isFocusable,\n useRovingTabIndex,\n} from './utils';\n\nimport './Slider.scss';\n\nconst b = block('SliderBlock');\nconst slick = block('slick-origin');\n\nconst DOT_WIDTH = 8;\nconst DOT_GAP = 16;\n\nconst SlickSlider =\n 'default' in _SlickSlider && _SlickSlider.default\n ? (_SlickSlider.default as typeof _SlickSlider)\n : _SlickSlider;\n\nexport interface SliderProps\n extends Omit<SliderParams, 'children'>,\n Refable<HTMLDivElement>,\n ClassNameProps,\n Pick<Settings, 'lazyLoad'> {\n type?: string;\n anchorId?: string;\n onAfterChange?: (index: number) => void;\n onBeforeChange?: (current: number, next: number) => void;\n dotsClassName?: string;\n blockClassName?: string;\n arrowSize?: number;\n}\n\nexport const SliderBlock = (props: React.PropsWithChildren<SliderProps>) => {\n const {\n animated,\n title,\n description,\n type,\n anchorId,\n arrows = true,\n adaptive,\n autoplay: autoplaySpeed,\n dots = true,\n dotsClassName,\n disclaimer,\n children,\n className,\n blockClassName,\n lazyLoad,\n arrowSize,\n onAfterChange: handleAfterChange,\n onBeforeChange: handleBeforeChange,\n } = props;\n\n const {isServer} = React.useContext(SSRContext);\n const isMobile = React.useContext(MobileContext);\n const [breakpoint, setBreakpoint] = React.useState<number>(BREAKPOINTS.xl);\n const sliderId = useUniqId();\n const disclosedChildren = React.useMemo<React.ReactElement[]>(\n () => discloseAllNestedChildren(children as React.ReactElement[], sliderId),\n [children, sliderId],\n );\n const childrenCount = disclosedChildren.length;\n const isAutoplayEnabled = autoplaySpeed !== undefined && autoplaySpeed > 0;\n const isUserInteractionRef = React.useRef(false);\n\n const [slidesToShow] = React.useState<SliderBreakpointParams>(\n getSlidesToShowWithDefaults({\n contentLength: childrenCount,\n breakpoints: props.slidesToShow,\n mobileFullscreen: Boolean(\n props.type && Object.values(SliderType).includes(props.type as SliderType),\n ),\n }),\n );\n\n const slidesToShowCount = getSlidesToShowCount(slidesToShow);\n const slidesCountByBreakpoint = getSlidesCountByBreakpoint(breakpoint, slidesToShow);\n\n const [currentIndex, setCurrentIndex] = React.useState<number>(0);\n const [childStyles, setChildStyles] = React.useState<Object>({});\n const [slider, setSlider] = React.useState<_SlickSlider>();\n const prevIndexRef = React.useRef<number>(0);\n const autoplayTimeId = React.useRef<Timeout>();\n const {hasFocus, unsetFocus} = useFocus(slider?.innerSlider?.list);\n\n const asUserInteraction =\n <T extends unknown[], R>(fn: (...args: T) => R) =>\n (...args: T): R => {\n isUserInteractionRef.current = true;\n return fn(...args);\n };\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const onResize = React.useCallback(\n debounce(() => {\n if (!slider) {\n return;\n }\n\n const newBreakpoint = get(slider, 'state.breakpoint') || BREAKPOINTS.xl;\n\n if (newBreakpoint !== breakpoint) {\n setBreakpoint(newBreakpoint);\n setCurrentIndex(0);\n\n slider.slickGoTo(0);\n }\n }, 100),\n [slider, breakpoint],\n );\n\n const scrollLastSlide = React.useCallback(\n (current: number) => {\n const lastSlide = childrenCount - slidesToShowCount;\n\n if (isAutoplayEnabled && lastSlide === current) {\n // Slick doesn't support autoplay with no infinity scroll\n autoplayTimeId.current = setTimeout(() => {\n if (slider) {\n slider.slickGoTo(0, false);\n slider.slickPause();\n }\n setTimeout(() => {\n if (slider) {\n slider.slickPlay();\n }\n }, 500);\n }, autoplaySpeed);\n }\n },\n [autoplaySpeed, childrenCount, isAutoplayEnabled, slider, slidesToShowCount],\n );\n\n React.useEffect(() => {\n if (hasFocus && autoplayTimeId.current) {\n clearTimeout(autoplayTimeId.current);\n } else {\n scrollLastSlide(currentIndex);\n }\n }, [currentIndex, hasFocus, scrollLastSlide]);\n\n React.useEffect(() => {\n onResize();\n\n window.addEventListener('resize', onResize, {passive: true});\n\n return () => window.removeEventListener('resize', onResize);\n }, [onResize]);\n\n const handleArrowClick = (direction: ArrowType) => {\n let nextIndex;\n\n if (direction === 'right') {\n nextIndex =\n currentIndex === childrenCount - slidesCountByBreakpoint ? 0 : currentIndex + 1;\n } else {\n nextIndex =\n currentIndex === 0 ? childrenCount - slidesCountByBreakpoint : currentIndex - 1;\n }\n\n if (slider) {\n slider.slickGoTo(nextIndex);\n }\n };\n\n const onBeforeChange = React.useCallback(\n (current: number, next: number) => {\n if (handleBeforeChange) {\n handleBeforeChange(current, next);\n }\n\n prevIndexRef.current = current;\n\n setCurrentIndex(Math.ceil(next));\n },\n [handleBeforeChange],\n );\n\n const onAfterChange = React.useCallback(\n (current: number) => {\n if (handleAfterChange) {\n handleAfterChange(current);\n }\n\n if (autoplayTimeId.current) {\n clearTimeout(autoplayTimeId.current);\n }\n\n if (!hasFocus) {\n scrollLastSlide(current);\n }\n\n if (isUserInteractionRef.current) {\n const focusIndex =\n prevIndexRef.current >= current\n ? current\n : Math.max(current, prevIndexRef.current + slidesCountByBreakpoint);\n\n const firstNewSlide = document.getElementById(getSlideId(sliderId, focusIndex));\n if (firstNewSlide) {\n const focusableChild = Array.from(firstNewSlide.querySelectorAll('*')).find(\n isFocusable,\n ) as HTMLElement | undefined;\n focusableChild?.focus();\n }\n }\n\n isUserInteractionRef.current = false;\n },\n [handleAfterChange, hasFocus, scrollLastSlide, sliderId, slidesCountByBreakpoint],\n );\n\n const handleDotClick = (index: number) => {\n const nextIndex = index > currentIndex ? index + 1 - slidesCountByBreakpoint : index;\n\n if (slider) {\n slider.slickGoTo(nextIndex);\n }\n };\n\n const barSlidesCount = childrenCount - slidesCountByBreakpoint + 1;\n const barPosition = (DOT_GAP + DOT_WIDTH) * currentIndex;\n const barWidth = DOT_WIDTH + (DOT_GAP + DOT_WIDTH) * (slidesCountByBreakpoint - 1);\n\n const {getRovingItemProps, rovingListProps} = useRovingTabIndex({\n itemCount: barSlidesCount,\n activeIndex: currentIndex + 1,\n firstIndex: 1,\n uniqId: sliderId,\n });\n\n const renderBar = () => {\n return (\n slidesCountByBreakpoint > 1 && (\n <li\n className={b('bar')}\n style={{\n left: barPosition,\n width: barWidth,\n }}\n />\n )\n );\n };\n\n // renders additional bar, not visible in the layout but visible for screenreaders\n const renderAccessibleBar = (index: number) => {\n return (\n // To have this key differ from keys used in renderDot function, added `-accessible-bar` part\n <React.Fragment key={`${index}-accessible-bar`}>\n {slidesCountByBreakpoint > 0 && (\n <li\n className={b('accessible-bar')}\n role=\"menuitemradio\"\n aria-checked\n aria-label={i18n('dot-label', {\n index: currentIndex + 1,\n count: barSlidesCount,\n })}\n style={{\n left: barPosition,\n width: barWidth,\n }}\n {...getRovingItemProps(currentIndex + 1)}\n />\n )}\n </React.Fragment>\n );\n };\n\n const getCurrentSlideNumber = (index: number) => {\n const currentIndexDiff = index - currentIndex;\n\n let currentSlideNumber;\n if (0 <= currentIndexDiff && currentIndexDiff < slidesCountByBreakpoint) {\n currentSlideNumber = currentIndex + 1;\n } else if (currentIndexDiff >= slidesCountByBreakpoint) {\n currentSlideNumber = index - slidesCountByBreakpoint + 2;\n } else {\n currentSlideNumber = index + 1;\n }\n return currentSlideNumber;\n };\n const isVisibleSlide = (index: number) => {\n const currentIndexDiff = index - currentIndex;\n\n const result =\n slidesCountByBreakpoint > 0 &&\n 0 <= currentIndexDiff &&\n currentIndexDiff < slidesCountByBreakpoint;\n return result;\n };\n\n const renderDot = (index: number) => {\n const isVisible = isVisibleSlide(index);\n const currentSlideNumber = getCurrentSlideNumber(index);\n const rovingItemProps = isVisible ? undefined : getRovingItemProps(currentSlideNumber);\n return (\n <li\n key={index}\n className={b('dot', {active: index === currentIndex})}\n onClick={asUserInteraction(() => handleDotClick(index))}\n onKeyDown={(e) => {\n const key = e.key.toLowerCase();\n if (key === 'space' || key === 'enter') {\n e.currentTarget.click();\n }\n }}\n role=\"menuitemradio\"\n aria-checked={false}\n tabIndex={-1}\n aria-hidden={isVisible}\n aria-label={i18n('dot-label', {\n index: currentSlideNumber,\n count: barSlidesCount,\n })}\n {...rovingItemProps}\n />\n );\n };\n\n const renderNavigation = () => {\n if (childrenCount <= slidesCountByBreakpoint || !dots || childrenCount === 1) {\n return null;\n }\n const dotsList = Array(childrenCount)\n .fill(null)\n .map((_item, index) => renderDot(index));\n dotsList.splice(currentIndex, 0, renderAccessibleBar(currentIndex));\n\n return (\n <div className={b('dots', dotsClassName)}>\n <ul\n className={b('dots-list')}\n role=\"menu\"\n aria-label={i18n('pagination-label')}\n {...rovingListProps}\n >\n {renderBar()}\n {dotsList}\n </ul>\n </div>\n );\n };\n\n const renderDisclaimer = () => {\n return disclaimer ? (\n <div className={b('disclaimer', {size: disclaimer.size || 'm'})}>{disclaimer.text}</div>\n ) : null;\n };\n\n const renderSlider = () => {\n /* Disable adding of width in inline styles when SSR to prevent overriding of default styles */\n /* Calculate appropriate breakpoint for mobile devices with user agent */\n const variableWidth = isServer && isMobile;\n\n const settings = {\n ref: (slickSlider: _SlickSlider) => setSlider(slickSlider),\n className: slick(null, className),\n arrows,\n variableWidth,\n infinite: false,\n speed: 1000,\n adaptiveHeight: adaptive,\n autoplay: isAutoplayEnabled,\n autoplaySpeed,\n slidesToShow: slidesToShowCount,\n slidesToScroll: 1,\n responsive: getSliderResponsiveParams(slidesToShow),\n beforeChange: onBeforeChange,\n afterChange: onAfterChange,\n initialSlide: 0,\n nextArrow: (\n <Arrow\n type=\"right\"\n handleClick={asUserInteraction(handleArrowClick)}\n size={arrowSize}\n />\n ),\n prevArrow: (\n <Arrow\n type=\"left\"\n handleClick={asUserInteraction(handleArrowClick)}\n size={arrowSize}\n />\n ),\n lazyLoad,\n accessibility: false,\n };\n\n return (\n <OutsideClick onOutsideClick={isMobile ? unsetFocus : noop}>\n <SlickSlider {...settings}>{disclosedChildren}</SlickSlider>\n <div className={b('footer')}>\n {renderDisclaimer()}\n {renderNavigation()}\n </div>\n </OutsideClick>\n );\n };\n\n return (\n <StylesContext.Provider value={{...childStyles, setStyles: setChildStyles}}>\n <div\n className={b(\n {\n 'align-left': childrenCount < slidesCountByBreakpoint,\n 'one-slide': childrenCount === 1,\n 'only-arrows': !title?.text && !description && arrows,\n mobile: isMobile,\n type,\n },\n blockClassName,\n )}\n >\n {anchorId && <Anchor id={anchorId} />}\n <Title\n title={title}\n subtitle={description}\n className={b('header', {'no-description': !description})}\n />\n <AnimateBlock className={b('animate-slides')} animate={animated}>\n {renderSlider()}\n </AnimateBlock>\n </div>\n </StylesContext.Provider>\n );\n};\n\nfunction getSlideId(sliderId: string, index: number) {\n return `slider-${sliderId}-child-${index}`;\n}\n\n// TODO remove this and rework PriceDetailed CLOUDFRONT-12230\nfunction discloseAllNestedChildren(\n children: React.ReactElement[],\n sliderId: string,\n): React.ReactElement[] {\n if (!children) {\n return [];\n }\n\n let childIndex = 0;\n const wrapped = (child: React.ReactElement) => {\n const id = getSlideId(sliderId, childIndex++);\n\n return (\n <div key={id} id={id}>\n {child}\n </div>\n );\n };\n\n return React.Children.map(children, (child) => {\n if (child) {\n // TODO: if child has 'items' then 'items' determinate like nested children for Slider.\n const nestedChildren = child.props.data?.items;\n\n if (nestedChildren) {\n return nestedChildren.map((nestedChild: React.ReactElement) => {\n return wrapped(\n React.cloneElement(child, {\n data: {\n ...child.props.data,\n items: [nestedChild],\n },\n }),\n );\n });\n }\n }\n return child && wrapped(child);\n }).filter(Boolean);\n}\n\nexport default SliderBlock;\n"]}
|
|
@@ -19,6 +19,9 @@ const utils_2 = require("./utils.js");
|
|
|
19
19
|
const youtube_1 = require("./utils/youtube.js");
|
|
20
20
|
const b = (0, utils_1.block)('ReactPlayer');
|
|
21
21
|
const FPS = 60;
|
|
22
|
+
const ReactPlayer = 'default' in react_player_1.default && react_player_1.default.default
|
|
23
|
+
? react_player_1.default.default
|
|
24
|
+
: react_player_1.default;
|
|
22
25
|
// eslint-disable-next-line react/display-name
|
|
23
26
|
exports.ReactPlayerBlock = React.forwardRef((props, originRef) => {
|
|
24
27
|
const isMobile = React.useContext(mobileContext_1.MobileContext);
|
|
@@ -242,7 +245,7 @@ exports.ReactPlayerBlock = React.forwardRef((props, originRef) => {
|
|
|
242
245
|
controls,
|
|
243
246
|
contain,
|
|
244
247
|
'auto-ratio': autoRatio,
|
|
245
|
-
}, className), ref: ref, onClick: handleClick, onMouseEnter: onFocusIn, onMouseLeave: onFocusOut, onFocus: onFocusIn, onBlur: onFocusOut, onKeyDown: handleKeyDown, role: "button", tabIndex: 0, children: isMounted ? ((0, jsx_runtime_1.jsxs)(React.Fragment, { children: [(0, jsx_runtime_1.jsx)(
|
|
248
|
+
}, className), ref: ref, onClick: handleClick, onMouseEnter: onFocusIn, onMouseLeave: onFocusOut, onFocus: onFocusIn, onBlur: onFocusOut, onKeyDown: handleKeyDown, role: "button", tabIndex: 0, children: isMounted ? ((0, jsx_runtime_1.jsxs)(React.Fragment, { children: [(0, jsx_runtime_1.jsx)(ReactPlayer, { className: b('player'), url: videoSrc, muted: muted, controls: controls === models_1.MediaVideoControlsType.Default, height: currentHeight || '100%', width: width || '100%', light: previewImgUrl, playing: isPlaying, playIcon: playIcon, progressInterval: FPS, onClickPreview: handleClickPreview, onStart: onStart, onReady: onReady, onPlay: onPlay, onPause: autoPlay && customControlsType !== models_1.CustomControlsType.WithMuteButton
|
|
246
249
|
? undefined
|
|
247
250
|
: onPause, onProgress: onProgress, onEnded: onEnded, "aria-label": ariaLabel, previewTabIndex: -1, config: {
|
|
248
251
|
file: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReactPlayer.js","sourceRoot":"../../../../src","sources":["components/ReactPlayer/ReactPlayer.tsx"],"names":[],"mappings":";;;;;AAAA,qDAA+B;AAE/B,6CAA2C;AAC3C,6CAAuC;AACvC,0EAAuC;AACvC,wEAAuC;AAEvC,wEAA0D;AAC1D,sEAAwD;AACxD,gDAAmD;AACnD,kDAasB;AACtB,gDAAkC;AAElC,uFAAoD;AACpD,0CAA4B;AAC5B,sCAA2C;AAC3C,gDAAwD;AAIxD,MAAM,CAAC,GAAG,IAAA,aAAK,EAAC,aAAa,CAAC,CAAC;AAE/B,MAAM,GAAG,GAAG,EAAE,CAAC;AAqBf,8CAA8C;AACjC,QAAA,gBAAgB,GAAG,KAAK,CAAC,UAAU,CAC5C,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;IACjB,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,6BAAa,CAAC,CAAC;IACjD,MAAM,EACF,GAAG,EACH,aAAa,EACb,IAAI,GAAG,KAAK,EACZ,QAAQ,GAAG,+BAAsB,CAAC,OAAO,EACzC,qBAAqB,GAAG,EAAE,EAC1B,KAAK,EAAE,cAAc,GAAG,KAAK,EAC7B,WAAW,EACX,UAAU,EACV,SAAS,EACT,0BAA0B,EAC1B,WAAW,EACX,cAAc,EACd,eAAe,EACf,MAAM,EACN,SAAS,EACT,KAAK,EACL,SAAS,EACT,OAAO,GAAG,IAAI,GACjB,GAAG,KAAK,CAAC;IAEV,MAAM,EACF,IAAI,GAAG,uBAAc,CAAC,OAAO,EAC7B,KAAK,GAAG,yBAAgB,CAAC,IAAI,EAC7B,IAAI,EACJ,SAAS,EAAE,eAAe,GAC7B,GAAG,UAAU,IAAK,EAAsB,CAAC;IAC1C,MAAM,EACF,IAAI,EAAE,kBAAkB,GAAG,2BAAkB,CAAC,cAAc,EAC5D,eAAe,EACf,WAAW,GAAG,wCAA+B,CAAC,MAAM,GACvD,GAAG,qBAAqB,CAAC;IAE1B,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,QAAQ,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxE,MAAM,IAAI,GAAG,cAAc,IAAI,QAAQ,CAAC;IAExC,MAAM,EAAC,eAAe,EAAE,QAAQ,EAAC,GAAG,KAAK,CAAC,UAAU,CAAC,2BAAY,CAAC,CAAC;IAEnE,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAiB,IAAI,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAoB,IAAI,CAAC,CAAC;IAExD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAe,CAAC;IAChE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3D,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAS,CAAC,CAAC,CAAC;IACpE,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAS,CAAC,CAAC,CAAC;IACpD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAU,CAAC;IAC/D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAU,IAAI,CAAC,CAAC;IACxD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAU,KAAK,CAAC,CAAC;IACzD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEvD,IAAA,gBAAQ,EAAC,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IAEnC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAA,0BAAkB,EAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAErE,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACnC,IAAI,eAAe,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QAChF,CAAC;QAED,OAAO,EAAE,CAAC;IACd,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IACtB,MAAM,eAAe,GAAG,IAAA,oBAAY,EAAC,0BAAiB,CAAC,mBAAmB,CAAC,CAAC;IAE5E,KAAK,CAAC,mBAAmB,CAAC,SAAS,EAAE,GAAG,EAAE;QACtC,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,OAAO;QACX,CAAC;QAED,IAAI,IAAI,EAAE,KAAK,EAAE,gBAAgB,CAAC;QAClC,MAAM,aAAa,GAAG,SAAS,CAAC,iBAAiB,EAAE,CAAC;QACpD,IAAI,IAAA,iCAAuB,EAAC,aAAa,CAAC,EAAE,CAAC;YACzC,CAAC,EAAC,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAC,GAAG,aAAa,CAAC,CAAC;QAC7E,CAAC;aAAM,CAAC;YACJ,oEAAoE;YACpE,CAAC,EAAC,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAC,GAAG,aAAa,CAAC,CAAC;QACtD,CAAC;QAED,6CAA6C;QAC7C,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;YAC9B,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;YAChC,gBAAgB,EAAE,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC;SACzD,CAAC;IACN,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACzD,QAAQ,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACL,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,IAAI,WAAW,EAAE,CAAC;YACd,SAAS,EAAE,WAAW,EAAE,CAAC;QAC7B,CAAC;IACL,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;IAE7B,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,IAAI,SAAS,IAAI,CAAC,OAAO,EAAE,CAAC;YACxB,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;IACL,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IAEnC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAE9C,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,IAAI,CAAC,OAAO,IAAI,SAAS,EAAE,CAAC;YACxB,UAAU,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACL,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IAEzB,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;YAChD,SAAS,EAAE,MAAM,CAAC,WAAW,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;QACnD,CAAC;IACL,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IAEtC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,MAAM,UAAU,GAAG,IAAA,kBAAQ,EAAC,GAAG,EAAE;YAC7B,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBACd,iDAAiD;gBACjD,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACpD,MAAM,EAAC,WAAW,EAAE,YAAY,EAAC,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;gBACpE,MAAM,QAAQ,GACV,aAAa,CAAC,WAAW;oBACzB,UAAU,CAAC,WAAW,CAAC;oBACvB,UAAU,CAAC,YAAY,CAAC,CAAC;gBAE7B,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACnB,gBAAgB,CACZ,IAAI,CAAC,KAAK,CACN,SAAS,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CACtE,CACJ,CAAC;YACN,CAAC;QACL,CAAC,EAAE,GAAG,CAAC,CAAC;QAER,UAAU,EAAE,CAAC;QACb,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,CAAC;QAC/D,OAAO,GAAG,EAAE;YACR,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACrD,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IAEpC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAC5B,GAAG,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,6BAAoB,CAAC,IAAI,CAAC,EACtF,CAAC,WAAW,CAAC,CAChB,CAAC;IACF,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAC5B,GAAG,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,6BAAoB,CAAC,IAAI,CAAC,EACtF,CAAC,WAAW,CAAC,CAChB,CAAC;IAEF,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QAChC,IAAI,iBAAiB,CAAC;QAEtB,QAAQ,IAAI,EAAE,CAAC;YACX,KAAK,uBAAc,CAAC,IAAI;gBACpB,iBAAiB,GAAG,IAAI,CAAC;gBACzB,MAAM;YACV,KAAK,uBAAc,CAAC,OAAO,CAAC;YAC5B;gBACI,iBAAiB,GAAG,uBAAC,YAAI,IAAC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,gBAAQ,EAAE,IAAI,EAAE,EAAE,GAAI,CAAC;gBAC7E,MAAM;QACd,CAAC;QAED,OAAO,CACH,mCACI,SAAS,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAC,EAAE,eAAe,CAAC,gBACzD,IAAA,WAAI,EAAC,MAAM,CAAC,EACxB,GAAG,EAAE,SAAS,YAEb,iBAAiB,GACb,CACZ,CAAC;IACN,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC;IAEzC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAChC,CAAC,OAAgB,EAAE,EAAE;QACjB,IACI,OAAO;YACP,SAAS;YACT,QAAQ,KAAK,+BAAsB,CAAC,MAAM;YAC1C,kBAAkB,KAAK,2BAAkB,CAAC,cAAc,EAC1D,CAAC;YACC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACpB,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;QACjD,eAAe,CAAC,MAAM,CAAC,CAAC;QAExB,IAAI,OAAO,EAAE,CAAC;YACV,QAAQ,CAAC,EAAC,eAAe,EAAE,GAAG,CAAC,OAAO,EAAC,CAAC,CAAC;QAC7C,CAAC;QAED,sEAAsE;QACtE,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC,EACD;QACI,SAAS;QACT,kBAAkB;QAClB,UAAU;QACV,UAAU;QACV,eAAe;QACf,QAAQ;QACR,QAAQ;KACX,CACJ,CAAC;IAEF,MAAM,kBAAkB,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC9C,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,cAAc,EAAE,EAAE,CAAC;QAEnB,eAAe,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC,EAAE,CAAC,cAAc,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC;IAElD,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACnC,wCAAwC;QACxC,IACI,QAAQ,KAAK,+BAAsB,CAAC,MAAM;YAC1C,kBAAkB,KAAK,2BAAkB,CAAC,cAAc,EAC1D,CAAC;YACC,YAAY,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACL,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAEnC,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACnC,IAAI,CAAC,QAAQ,IAAI,CAAC,cAAc,EAAE,CAAC;YAC/B,QAAQ,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC;IAE/B,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAClC,YAAY,CAAC,IAAI,CAAC,CAAC;QAEnB,IACI,QAAQ,KAAK,+BAAsB,CAAC,MAAM;YAC1C,kBAAkB,KAAK,2BAAkB,CAAC,cAAc,EAC1D,CAAC;YACC,IAAI,KAAK,EAAE,CAAC;gBACR,UAAU,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;iBAAM,IAAI,CAAC,SAAS,EAAE,CAAC;gBACpB,UAAU,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;YACD,QAAQ,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,kBAAkB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IAExE,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,MAAmB,EAAE,EAAE;QACtD,YAAY,CAAC,MAAM,CAAC,CAAC;QACrB,MAAM,YAAY,GAAG,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAChD,MAAM,UAAU,GAAG,YAAY,CAAC,UAAgC,CAAC;QACjE,MAAM,WAAW,GAAG,YAAY,CAAC,WAAiC,CAAC;QACnE,IAAI,UAAU,IAAI,WAAW,EAAE,CAAC;YAC5B,cAAc,CAAC,WAAW,GAAG,UAAU,CAAC,CAAC;QAC7C,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,QAAyB,EAAE,EAAE;QAC/D,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAElC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACnC,oEAAoE;QACpE,sDAAsD;QACtD,8EAA8E;QAC9E,IAAI,IAAI,EAAE,CAAC;YACP,gBAAgB,CAAC,CAAC,CAAC,CAAC;YACpB,YAAY,CAAC,IAAI,CAAC,CAAC;YACnB,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;IAEtB,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACvC,IAAI,SAAS,EAAE,CAAC;YACZ,OAAO,EAAE,CAAC;QACd,CAAC;aAAM,CAAC;YACJ,MAAM,EAAE,CAAC;QACb,CAAC;IACL,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAEjC,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACvC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QAE3B,IAAI,QAAQ,KAAK,+BAAsB,CAAC,MAAM,EAAE,CAAC;YAC7C,IAAI,kBAAkB,KAAK,2BAAkB,CAAC,cAAc,EAAE,CAAC;gBAC3D,UAAU,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACJ,WAAW,EAAE,CAAC;YAClB,CAAC;QACL,CAAC;IACL,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;IAEnE,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAsB,EAAE,EAAE;QAC/D,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QAEhC,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YAClB,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QAC/B,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAChE,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IAElE,OAAO,CACH,gCACI,SAAS,EAAE,CAAC,CACR;YACI,OAAO,EAAE,CAAC,aAAa;YACvB,QAAQ;YACR,OAAO;YACP,YAAY,EAAE,SAAS;SAC1B,EACD,SAAS,CACZ,EACD,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,WAAW,EACpB,YAAY,EAAE,SAAS,EACvB,YAAY,EAAE,UAAU,EACxB,OAAO,EAAE,SAAS,EAClB,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,aAAa,EACxB,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,YAEV,SAAS,CAAC,CAAC,CAAC,CACT,wBAAC,KAAK,CAAC,QAAQ,eACX,uBAAC,sBAAW,IACR,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,EACtB,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,KAAK,+BAAsB,CAAC,OAAO,EACrD,MAAM,EAAE,aAAa,IAAI,MAAM,EAC/B,KAAK,EAAE,KAAK,IAAI,MAAM,EACtB,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,GAAG,EACrB,cAAc,EAAE,kBAAkB,EAClC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,EACH,QAAQ,IAAI,kBAAkB,KAAK,2BAAkB,CAAC,cAAc;wBAChE,CAAC,CAAC,SAAS;wBACX,CAAC,CAAC,OAAO,EAEjB,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,OAAO,gBACJ,SAAS,EACrB,eAAe,EAAE,CAAC,CAAC,EACnB,MAAM,EAAE;wBACJ,IAAI,EAAE;4BACF,UAAU,EAAE;gCACR,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;gCACnC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;gCACtC,uBAAuB,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;6BACrD;yBACJ;qBACJ,GACH,EACD,QAAQ,KAAK,+BAAsB,CAAC,MAAM,IAAI,CAC3C,uBAAC,2BAAiB,IACd,SAAS,EAAE,0BAA0B,EACrC,IAAI,EAAE;wBACF,OAAO,EAAE,KAAK;wBACd,UAAU,EAAE,CAAC,KAAuB,EAAE,EAAE;4BACpC,KAAK,CAAC,eAAe,EAAE,CAAC;4BACxB,UAAU,CAAC,KAAK,CAAC,CAAC;wBACtB,CAAC;qBACJ,EACD,kBAAkB,EAAE,aAAa,EACjC,IAAI,EAAE,kBAAkB,EACxB,QAAQ,EAAE,CAAC,SAAS,EACpB,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,eAAe,EAChC,KAAK,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,EAC3D,WAAW,EAAE,WAAW,GAC1B,CACL,IACY,CACpB,CAAC,CAAC,CAAC,IAAI,GACN,CACT,CAAC;AACN,CAAC,CACJ,CAAC;AAEF,SAAS,SAAS,CAAC,KAAa,EAAE,QAAgB,CAAC,GAAG,EAAE;IACpD,OAAO,KAAK,GAAG,KAAK,CAAC;AACzB,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAoB;IAC1C,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAE5C,IAAI,CAAC,aAAa,EAAE,CAAC;QACjB,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,OAAO,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;AACvF,CAAC;AAED,kBAAe,wBAAgB,CAAC","sourcesContent":["import * as React from 'react';\n\nimport {PlayFill} from '@gravity-ui/icons';\nimport {Icon} from '@gravity-ui/uikit';\nimport debounce from 'lodash/debounce';\nimport ReactPlayer from 'react-player';\n\nimport {MobileContext} from '../../context/mobileContext';\nimport {VideoContext} from '../../context/videoContext';\nimport {useAnalytics, useMount} from '../../hooks';\nimport {\n AnalyticsEvent,\n ClassNameProps,\n CustomControlsButtonPositioning,\n CustomControlsType,\n DefaultEventNames,\n MediaVideoControlsType,\n MediaVideoProps,\n PlayButtonProps,\n PlayButtonThemes,\n PlayButtonType,\n PredefinedEventTypes,\n ReactPlayerBlockHandler,\n} from '../../models';\nimport {block} from '../../utils';\n\nimport CustomBarControls from './CustomBarControls';\nimport {i18n} from './i18n';\nimport {checkYoutubeVideos} from './utils';\nimport {isYoutubePlayerInstance} from './utils/youtube';\n\nimport './ReactPlayer.scss';\n\nconst b = block('ReactPlayer');\n\nconst FPS = 60;\n\nexport interface ReactPlayerBlockProps\n extends Omit<MediaVideoProps, 'loop' | 'src'>,\n ClassNameProps {\n src: string | string[];\n previewImgUrl?: string;\n loop?: boolean;\n customBarControlsClassName?: string;\n showPreview?: boolean;\n onClickPreview?: () => void;\n height?: number;\n ratio?: number;\n autoRatio?: boolean;\n children?: React.ReactNode;\n}\n\ninterface PlayerPropgress {\n played: number;\n}\n\n// eslint-disable-next-line react/display-name\nexport const ReactPlayerBlock = React.forwardRef<ReactPlayerBlockHandler, ReactPlayerBlockProps>(\n (props, originRef) => {\n const isMobile = React.useContext(MobileContext);\n const {\n src,\n previewImgUrl,\n loop = false,\n controls = MediaVideoControlsType.Default,\n customControlsOptions = {},\n muted: initiallyMuted = false,\n elapsedTime,\n playButton,\n className,\n customBarControlsClassName,\n showPreview,\n onClickPreview,\n analyticsEvents,\n height,\n ariaLabel,\n ratio,\n autoRatio,\n contain = true,\n } = props;\n\n const {\n type = PlayButtonType.Default,\n theme = PlayButtonThemes.Blue,\n text,\n className: buttonClassName,\n } = playButton || ({} as PlayButtonProps);\n const {\n type: customControlsType = CustomControlsType.WithMuteButton,\n muteButtonShown,\n positioning = CustomControlsButtonPositioning.Center,\n } = customControlsOptions;\n\n const autoPlay = Boolean(!isMobile && !previewImgUrl && props.autoplay);\n const mute = initiallyMuted || autoPlay;\n\n const {playingVideoRef, setProps} = React.useContext(VideoContext);\n\n const ref = React.useRef<HTMLDivElement>(null);\n const buttonRef = React.useRef<HTMLButtonElement>(null);\n\n const [playerRef, setPlayerRef] = React.useState<ReactPlayer>();\n const [isPlaying, setIsPlaying] = React.useState(autoPlay);\n const [playedPercent, setPlayedPercent] = React.useState<number>(0);\n const [currentHeight, setCurrentHeight] = React.useState(height);\n const [width, setWidth] = React.useState<number>(0);\n const [actualRatio, setActualRatio] = React.useState<number>();\n const [muted, setMuted] = React.useState<boolean>(mute);\n const [started, setStarted] = React.useState(autoPlay);\n const [ended, setEnded] = React.useState<boolean>(false);\n const [isMounted, setIsMounted] = React.useState(false);\n const [hovered, setHovered] = React.useState(isMobile);\n\n useMount(() => setIsMounted(true));\n\n const videoSrc = React.useMemo(() => checkYoutubeVideos(src), [src]);\n\n const eventsArray = React.useMemo(() => {\n if (analyticsEvents) {\n return Array.isArray(analyticsEvents) ? analyticsEvents : [analyticsEvents];\n }\n\n return [];\n }, [analyticsEvents]);\n const handleAnalytics = useAnalytics(DefaultEventNames.ReactPlayerControls);\n\n React.useImperativeHandle(originRef, () => {\n if (!playerRef) {\n return;\n }\n\n let play, pause, addEventListener;\n const videoInstance = playerRef.getInternalPlayer();\n if (isYoutubePlayerInstance(videoInstance)) {\n ({pauseVideo: pause, playVideo: play, addEventListener} = videoInstance);\n } else {\n // it is assumed that `videoInstance` is HTMLVideoElement by default\n ({play, pause, addEventListener} = videoInstance);\n }\n\n // eslint-disable-next-line consistent-return\n return {\n play: play.bind(videoInstance),\n pause: pause.bind(videoInstance),\n addEventListener: addEventListener.bind(videoInstance),\n };\n }, [playerRef]);\n\n React.useEffect(() => {\n if (ref.current && !playingVideoRef?.contains(ref.current)) {\n setMuted(true);\n }\n }, [playingVideoRef]);\n\n React.useEffect(() => {\n if (showPreview) {\n playerRef?.showPreview();\n }\n }, [showPreview, playerRef]);\n\n React.useEffect(() => {\n if (playerRef && !started) {\n setIsPlaying(autoPlay);\n }\n }, [autoPlay, playerRef, started]);\n\n React.useEffect(() => setMuted(mute), [mute]);\n\n React.useEffect(() => {\n if (!started && isPlaying) {\n setStarted(true);\n }\n }, [isPlaying, started]);\n\n React.useEffect(() => {\n if (started && !Number.isNaN(Number(elapsedTime))) {\n playerRef?.seekTo(elapsedTime ?? 0, 'seconds');\n }\n }, [elapsedTime, playerRef, started]);\n\n React.useEffect(() => {\n const updateSize = debounce(() => {\n if (ref.current) {\n // We need to get parent's width does not equal 0\n const parentElement = getParentElement(ref.current);\n const {paddingLeft, paddingRight} = getComputedStyle(parentElement);\n const newWidth =\n parentElement.offsetWidth -\n parseFloat(paddingLeft) -\n parseFloat(paddingRight);\n\n setWidth(newWidth);\n setCurrentHeight(\n Math.floor(\n getHeight(newWidth, ratio ?? (autoRatio ? actualRatio : undefined)),\n ),\n );\n }\n }, 200);\n\n updateSize();\n window.addEventListener('resize', updateSize, {passive: true});\n return () => {\n window.removeEventListener('resize', updateSize);\n };\n }, [actualRatio, autoRatio, ratio]);\n\n const playEvents = React.useMemo(\n () => eventsArray?.filter((e: AnalyticsEvent) => e.type === PredefinedEventTypes.Play),\n [eventsArray],\n );\n const stopEvents = React.useMemo(\n () => eventsArray?.filter((e: AnalyticsEvent) => e.type === PredefinedEventTypes.Stop),\n [eventsArray],\n );\n\n const playIcon = React.useMemo(() => {\n let playButtonContent;\n\n switch (type) {\n case PlayButtonType.Text:\n playButtonContent = text;\n break;\n case PlayButtonType.Default:\n default:\n playButtonContent = <Icon className={b('icon')} data={PlayFill} size={24} />;\n break;\n }\n\n return (\n <button\n className={b('button', {theme, text: Boolean(text)}, buttonClassName)}\n aria-label={i18n('play')}\n ref={buttonRef}\n >\n {playButtonContent}\n </button>\n );\n }, [type, theme, text, buttonClassName]);\n\n const changeMute = React.useCallback(\n (isMuted: boolean) => {\n if (\n isMuted &&\n playerRef &&\n controls === MediaVideoControlsType.Custom &&\n customControlsType === CustomControlsType.WithMuteButton\n ) {\n playerRef.seekTo(0);\n setPlayedPercent(0);\n }\n\n const events = isMuted ? playEvents : stopEvents;\n handleAnalytics(events);\n\n if (isMuted) {\n setProps({playingVideoRef: ref.current});\n }\n\n // In order to the progress bar to update (equals 0) before displaying\n setTimeout(() => setMuted(!isMuted), 0);\n },\n [\n playerRef,\n customControlsType,\n playEvents,\n stopEvents,\n handleAnalytics,\n setProps,\n controls,\n ],\n );\n\n const handleClickPreview = React.useCallback(() => {\n setIsPlaying(true);\n onClickPreview?.();\n\n handleAnalytics(playEvents);\n }, [onClickPreview, handleAnalytics, playEvents]);\n\n const onPause = React.useCallback(() => {\n // For support correct state for youtube\n if (\n controls !== MediaVideoControlsType.Custom ||\n customControlsType !== CustomControlsType.WithMuteButton\n ) {\n setIsPlaying(false);\n }\n }, [controls, customControlsType]);\n\n const onStart = React.useCallback(() => {\n if (!autoPlay && !initiallyMuted) {\n setMuted(false);\n }\n }, [autoPlay, initiallyMuted]);\n\n const onPlay = React.useCallback(() => {\n setIsPlaying(true);\n\n if (\n controls === MediaVideoControlsType.Custom &&\n customControlsType === CustomControlsType.WithMuteButton\n ) {\n if (ended) {\n changeMute(false);\n } else if (!isPlaying) {\n changeMute(muted);\n }\n setEnded(false);\n }\n }, [changeMute, controls, customControlsType, ended, isPlaying, muted]);\n\n const onReady = React.useCallback((player: ReactPlayer) => {\n setPlayerRef(player);\n const videoElement = player.getInternalPlayer();\n const videoWidth = videoElement.videoWidth as number | undefined;\n const videoHeight = videoElement.videoHeight as number | undefined;\n if (videoWidth && videoHeight) {\n setActualRatio(videoHeight / videoWidth);\n }\n }, []);\n\n const onProgress = React.useCallback((progress: PlayerPropgress) => {\n setPlayedPercent(progress.played);\n\n if (progress.played === 1) {\n setMuted(true);\n }\n }, []);\n\n const onEnded = React.useCallback(() => {\n // Youtube videos not muted after finishing playing and start again.\n // 'onEnded' does not fire when 'loop' is set to true.\n // It is custom loop with muted sound after finishing playing and start again.\n if (loop) {\n setPlayedPercent(0);\n setIsPlaying(true);\n playerRef?.seekTo(0);\n }\n\n setEnded(true);\n }, [loop, playerRef]);\n\n const onPlayClick = React.useCallback(() => {\n if (isPlaying) {\n onPause();\n } else {\n onPlay();\n }\n }, [isPlaying, onPlay, onPause]);\n\n const handleClick = React.useCallback(() => {\n buttonRef.current?.click();\n\n if (controls === MediaVideoControlsType.Custom) {\n if (customControlsType === CustomControlsType.WithMuteButton) {\n changeMute(muted);\n } else {\n onPlayClick();\n }\n }\n }, [controls, customControlsType, changeMute, muted, onPlayClick]);\n\n const handleKeyDown = React.useCallback((e: React.KeyboardEvent) => {\n const key = e.key.toLowerCase();\n\n if (key === 'enter') {\n buttonRef.current?.click();\n }\n }, []);\n\n const onFocusIn = React.useCallback(() => setHovered(true), []);\n const onFocusOut = React.useCallback(() => setHovered(false), []);\n\n return (\n <div\n className={b(\n {\n wrapper: !currentHeight,\n controls,\n contain,\n 'auto-ratio': autoRatio,\n },\n className,\n )}\n ref={ref}\n onClick={handleClick}\n onMouseEnter={onFocusIn}\n onMouseLeave={onFocusOut}\n onFocus={onFocusIn}\n onBlur={onFocusOut}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={0}\n >\n {isMounted ? (\n <React.Fragment>\n <ReactPlayer\n className={b('player')}\n url={videoSrc}\n muted={muted}\n controls={controls === MediaVideoControlsType.Default}\n height={currentHeight || '100%'}\n width={width || '100%'}\n light={previewImgUrl}\n playing={isPlaying}\n playIcon={playIcon}\n progressInterval={FPS}\n onClickPreview={handleClickPreview}\n onStart={onStart}\n onReady={onReady}\n onPlay={onPlay}\n onPause={\n autoPlay && customControlsType !== CustomControlsType.WithMuteButton\n ? undefined\n : onPause\n } // to prevent pause icon flickering when autoplayed video ends\n onProgress={onProgress}\n onEnded={onEnded}\n aria-label={ariaLabel}\n previewTabIndex={-1}\n config={{\n file: {\n attributes: {\n pip: isMobile ? 'false' : undefined,\n playsinline: isMobile ? '' : undefined,\n disablepictureinpicture: isMobile ? '' : undefined,\n },\n },\n }}\n />\n {controls === MediaVideoControlsType.Custom && (\n <CustomBarControls\n className={customBarControlsClassName}\n mute={{\n isMuted: muted,\n changeMute: (event: React.MouseEvent) => {\n event.stopPropagation();\n changeMute(muted);\n },\n }}\n elapsedTimePercent={playedPercent}\n type={customControlsType}\n isPaused={!isPlaying}\n onPlayClick={onPlayClick}\n muteButtonShown={muteButtonShown}\n shown={hovered && ((!started && !previewImgUrl) || started)}\n positioning={positioning}\n />\n )}\n </React.Fragment>\n ) : null}\n </div>\n );\n },\n);\n\nfunction getHeight(width: number, ratio: number = 9 / 16): number {\n return width * ratio;\n}\n\nfunction getParentElement(element: HTMLElement): HTMLElement {\n const parentElement = element.parentElement;\n\n if (!parentElement) {\n return element;\n }\n\n return parentElement.offsetWidth ? parentElement : getParentElement(parentElement);\n}\n\nexport default ReactPlayerBlock;\n"]}
|
|
1
|
+
{"version":3,"file":"ReactPlayer.js","sourceRoot":"../../../../src","sources":["components/ReactPlayer/ReactPlayer.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\n\nimport {PlayFill} from '@gravity-ui/icons';\nimport {Icon} from '@gravity-ui/uikit';\nimport debounce from 'lodash/debounce';\nimport _ReactPlayer from 'react-player';\n\nimport {MobileContext} from '../../context/mobileContext';\nimport {VideoContext} from '../../context/videoContext';\nimport {useAnalytics, useMount} from '../../hooks';\nimport {\n AnalyticsEvent,\n ClassNameProps,\n CustomControlsButtonPositioning,\n CustomControlsType,\n DefaultEventNames,\n MediaVideoControlsType,\n MediaVideoProps,\n PlayButtonProps,\n PlayButtonThemes,\n PlayButtonType,\n PredefinedEventTypes,\n ReactPlayerBlockHandler,\n} from '../../models';\nimport {block} from '../../utils';\n\nimport CustomBarControls from './CustomBarControls';\nimport {i18n} from './i18n';\nimport {checkYoutubeVideos} from './utils';\nimport {isYoutubePlayerInstance} from './utils/youtube';\n\nimport './ReactPlayer.scss';\n\nconst b = block('ReactPlayer');\n\nconst FPS = 60;\n\nconst ReactPlayer =\n 'default' in _ReactPlayer && _ReactPlayer.default\n ? (_ReactPlayer.default as typeof _ReactPlayer)\n : _ReactPlayer;\n\nexport interface ReactPlayerBlockProps\n extends Omit<MediaVideoProps, 'loop' | 'src'>,\n ClassNameProps {\n src: string | string[];\n previewImgUrl?: string;\n loop?: boolean;\n customBarControlsClassName?: string;\n showPreview?: boolean;\n onClickPreview?: () => void;\n height?: number;\n ratio?: number;\n autoRatio?: boolean;\n children?: React.ReactNode;\n}\n\ninterface PlayerPropgress {\n played: number;\n}\n\n// eslint-disable-next-line react/display-name\nexport const ReactPlayerBlock = React.forwardRef<ReactPlayerBlockHandler, ReactPlayerBlockProps>(\n (props, originRef) => {\n const isMobile = React.useContext(MobileContext);\n const {\n src,\n previewImgUrl,\n loop = false,\n controls = MediaVideoControlsType.Default,\n customControlsOptions = {},\n muted: initiallyMuted = false,\n elapsedTime,\n playButton,\n className,\n customBarControlsClassName,\n showPreview,\n onClickPreview,\n analyticsEvents,\n height,\n ariaLabel,\n ratio,\n autoRatio,\n contain = true,\n } = props;\n\n const {\n type = PlayButtonType.Default,\n theme = PlayButtonThemes.Blue,\n text,\n className: buttonClassName,\n } = playButton || ({} as PlayButtonProps);\n const {\n type: customControlsType = CustomControlsType.WithMuteButton,\n muteButtonShown,\n positioning = CustomControlsButtonPositioning.Center,\n } = customControlsOptions;\n\n const autoPlay = Boolean(!isMobile && !previewImgUrl && props.autoplay);\n const mute = initiallyMuted || autoPlay;\n\n const {playingVideoRef, setProps} = React.useContext(VideoContext);\n\n const ref = React.useRef<HTMLDivElement>(null);\n const buttonRef = React.useRef<HTMLButtonElement>(null);\n\n const [playerRef, setPlayerRef] = React.useState<_ReactPlayer>();\n const [isPlaying, setIsPlaying] = React.useState(autoPlay);\n const [playedPercent, setPlayedPercent] = React.useState<number>(0);\n const [currentHeight, setCurrentHeight] = React.useState(height);\n const [width, setWidth] = React.useState<number>(0);\n const [actualRatio, setActualRatio] = React.useState<number>();\n const [muted, setMuted] = React.useState<boolean>(mute);\n const [started, setStarted] = React.useState(autoPlay);\n const [ended, setEnded] = React.useState<boolean>(false);\n const [isMounted, setIsMounted] = React.useState(false);\n const [hovered, setHovered] = React.useState(isMobile);\n\n useMount(() => setIsMounted(true));\n\n const videoSrc = React.useMemo(() => checkYoutubeVideos(src), [src]);\n\n const eventsArray = React.useMemo(() => {\n if (analyticsEvents) {\n return Array.isArray(analyticsEvents) ? analyticsEvents : [analyticsEvents];\n }\n\n return [];\n }, [analyticsEvents]);\n const handleAnalytics = useAnalytics(DefaultEventNames.ReactPlayerControls);\n\n React.useImperativeHandle(originRef, () => {\n if (!playerRef) {\n return;\n }\n\n let play, pause, addEventListener;\n const videoInstance = playerRef.getInternalPlayer();\n if (isYoutubePlayerInstance(videoInstance)) {\n ({pauseVideo: pause, playVideo: play, addEventListener} = videoInstance);\n } else {\n // it is assumed that `videoInstance` is HTMLVideoElement by default\n ({play, pause, addEventListener} = videoInstance);\n }\n\n // eslint-disable-next-line consistent-return\n return {\n play: play.bind(videoInstance),\n pause: pause.bind(videoInstance),\n addEventListener: addEventListener.bind(videoInstance),\n };\n }, [playerRef]);\n\n React.useEffect(() => {\n if (ref.current && !playingVideoRef?.contains(ref.current)) {\n setMuted(true);\n }\n }, [playingVideoRef]);\n\n React.useEffect(() => {\n if (showPreview) {\n playerRef?.showPreview();\n }\n }, [showPreview, playerRef]);\n\n React.useEffect(() => {\n if (playerRef && !started) {\n setIsPlaying(autoPlay);\n }\n }, [autoPlay, playerRef, started]);\n\n React.useEffect(() => setMuted(mute), [mute]);\n\n React.useEffect(() => {\n if (!started && isPlaying) {\n setStarted(true);\n }\n }, [isPlaying, started]);\n\n React.useEffect(() => {\n if (started && !Number.isNaN(Number(elapsedTime))) {\n playerRef?.seekTo(elapsedTime ?? 0, 'seconds');\n }\n }, [elapsedTime, playerRef, started]);\n\n React.useEffect(() => {\n const updateSize = debounce(() => {\n if (ref.current) {\n // We need to get parent's width does not equal 0\n const parentElement = getParentElement(ref.current);\n const {paddingLeft, paddingRight} = getComputedStyle(parentElement);\n const newWidth =\n parentElement.offsetWidth -\n parseFloat(paddingLeft) -\n parseFloat(paddingRight);\n\n setWidth(newWidth);\n setCurrentHeight(\n Math.floor(\n getHeight(newWidth, ratio ?? (autoRatio ? actualRatio : undefined)),\n ),\n );\n }\n }, 200);\n\n updateSize();\n window.addEventListener('resize', updateSize, {passive: true});\n return () => {\n window.removeEventListener('resize', updateSize);\n };\n }, [actualRatio, autoRatio, ratio]);\n\n const playEvents = React.useMemo(\n () => eventsArray?.filter((e: AnalyticsEvent) => e.type === PredefinedEventTypes.Play),\n [eventsArray],\n );\n const stopEvents = React.useMemo(\n () => eventsArray?.filter((e: AnalyticsEvent) => e.type === PredefinedEventTypes.Stop),\n [eventsArray],\n );\n\n const playIcon = React.useMemo(() => {\n let playButtonContent;\n\n switch (type) {\n case PlayButtonType.Text:\n playButtonContent = text;\n break;\n case PlayButtonType.Default:\n default:\n playButtonContent = <Icon className={b('icon')} data={PlayFill} size={24} />;\n break;\n }\n\n return (\n <button\n className={b('button', {theme, text: Boolean(text)}, buttonClassName)}\n aria-label={i18n('play')}\n ref={buttonRef}\n >\n {playButtonContent}\n </button>\n );\n }, [type, theme, text, buttonClassName]);\n\n const changeMute = React.useCallback(\n (isMuted: boolean) => {\n if (\n isMuted &&\n playerRef &&\n controls === MediaVideoControlsType.Custom &&\n customControlsType === CustomControlsType.WithMuteButton\n ) {\n playerRef.seekTo(0);\n setPlayedPercent(0);\n }\n\n const events = isMuted ? playEvents : stopEvents;\n handleAnalytics(events);\n\n if (isMuted) {\n setProps({playingVideoRef: ref.current});\n }\n\n // In order to the progress bar to update (equals 0) before displaying\n setTimeout(() => setMuted(!isMuted), 0);\n },\n [\n playerRef,\n customControlsType,\n playEvents,\n stopEvents,\n handleAnalytics,\n setProps,\n controls,\n ],\n );\n\n const handleClickPreview = React.useCallback(() => {\n setIsPlaying(true);\n onClickPreview?.();\n\n handleAnalytics(playEvents);\n }, [onClickPreview, handleAnalytics, playEvents]);\n\n const onPause = React.useCallback(() => {\n // For support correct state for youtube\n if (\n controls !== MediaVideoControlsType.Custom ||\n customControlsType !== CustomControlsType.WithMuteButton\n ) {\n setIsPlaying(false);\n }\n }, [controls, customControlsType]);\n\n const onStart = React.useCallback(() => {\n if (!autoPlay && !initiallyMuted) {\n setMuted(false);\n }\n }, [autoPlay, initiallyMuted]);\n\n const onPlay = React.useCallback(() => {\n setIsPlaying(true);\n\n if (\n controls === MediaVideoControlsType.Custom &&\n customControlsType === CustomControlsType.WithMuteButton\n ) {\n if (ended) {\n changeMute(false);\n } else if (!isPlaying) {\n changeMute(muted);\n }\n setEnded(false);\n }\n }, [changeMute, controls, customControlsType, ended, isPlaying, muted]);\n\n const onReady = React.useCallback((player: _ReactPlayer) => {\n setPlayerRef(player);\n const videoElement = player.getInternalPlayer();\n const videoWidth = videoElement.videoWidth as number | undefined;\n const videoHeight = videoElement.videoHeight as number | undefined;\n if (videoWidth && videoHeight) {\n setActualRatio(videoHeight / videoWidth);\n }\n }, []);\n\n const onProgress = React.useCallback((progress: PlayerPropgress) => {\n setPlayedPercent(progress.played);\n\n if (progress.played === 1) {\n setMuted(true);\n }\n }, []);\n\n const onEnded = React.useCallback(() => {\n // Youtube videos not muted after finishing playing and start again.\n // 'onEnded' does not fire when 'loop' is set to true.\n // It is custom loop with muted sound after finishing playing and start again.\n if (loop) {\n setPlayedPercent(0);\n setIsPlaying(true);\n playerRef?.seekTo(0);\n }\n\n setEnded(true);\n }, [loop, playerRef]);\n\n const onPlayClick = React.useCallback(() => {\n if (isPlaying) {\n onPause();\n } else {\n onPlay();\n }\n }, [isPlaying, onPlay, onPause]);\n\n const handleClick = React.useCallback(() => {\n buttonRef.current?.click();\n\n if (controls === MediaVideoControlsType.Custom) {\n if (customControlsType === CustomControlsType.WithMuteButton) {\n changeMute(muted);\n } else {\n onPlayClick();\n }\n }\n }, [controls, customControlsType, changeMute, muted, onPlayClick]);\n\n const handleKeyDown = React.useCallback((e: React.KeyboardEvent) => {\n const key = e.key.toLowerCase();\n\n if (key === 'enter') {\n buttonRef.current?.click();\n }\n }, []);\n\n const onFocusIn = React.useCallback(() => setHovered(true), []);\n const onFocusOut = React.useCallback(() => setHovered(false), []);\n\n return (\n <div\n className={b(\n {\n wrapper: !currentHeight,\n controls,\n contain,\n 'auto-ratio': autoRatio,\n },\n className,\n )}\n ref={ref}\n onClick={handleClick}\n onMouseEnter={onFocusIn}\n onMouseLeave={onFocusOut}\n onFocus={onFocusIn}\n onBlur={onFocusOut}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={0}\n >\n {isMounted ? (\n <React.Fragment>\n <ReactPlayer\n className={b('player')}\n url={videoSrc}\n muted={muted}\n controls={controls === MediaVideoControlsType.Default}\n height={currentHeight || '100%'}\n width={width || '100%'}\n light={previewImgUrl}\n playing={isPlaying}\n playIcon={playIcon}\n progressInterval={FPS}\n onClickPreview={handleClickPreview}\n onStart={onStart}\n onReady={onReady}\n onPlay={onPlay}\n onPause={\n autoPlay && customControlsType !== CustomControlsType.WithMuteButton\n ? undefined\n : onPause\n } // to prevent pause icon flickering when autoplayed video ends\n onProgress={onProgress}\n onEnded={onEnded}\n aria-label={ariaLabel}\n previewTabIndex={-1}\n config={{\n file: {\n attributes: {\n pip: isMobile ? 'false' : undefined,\n playsinline: isMobile ? '' : undefined,\n disablepictureinpicture: isMobile ? '' : undefined,\n },\n },\n }}\n />\n {controls === MediaVideoControlsType.Custom && (\n <CustomBarControls\n className={customBarControlsClassName}\n mute={{\n isMuted: muted,\n changeMute: (event: React.MouseEvent) => {\n event.stopPropagation();\n changeMute(muted);\n },\n }}\n elapsedTimePercent={playedPercent}\n type={customControlsType}\n isPaused={!isPlaying}\n onPlayClick={onPlayClick}\n muteButtonShown={muteButtonShown}\n shown={hovered && ((!started && !previewImgUrl) || started)}\n positioning={positioning}\n />\n )}\n </React.Fragment>\n ) : null}\n </div>\n );\n },\n);\n\nfunction getHeight(width: number, ratio: number = 9 / 16): number {\n return width * ratio;\n}\n\nfunction getParentElement(element: HTMLElement): HTMLElement {\n const parentElement = element.parentElement;\n\n if (!parentElement) {\n return element;\n }\n\n return parentElement.offsetWidth ? parentElement : getParentElement(parentElement);\n}\n\nexport default ReactPlayerBlock;\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ClassNameProps, QuoteType } from "../index.js";
|
|
2
2
|
import { ThemeSupporting } from "../../utils/index.js";
|
|
3
|
-
import { HubspotEventData, HubspotEventHandlers } from "../../utils/hubspot.js";
|
|
3
|
+
import { HubspotEventData, HubspotEventHandlers, HubspotFormDefaultValues } from "../../utils/hubspot.js";
|
|
4
4
|
import { AnalyticsEventsBase } from "../common.js";
|
|
5
5
|
import { ContentBlockProps } from "./blocks.js";
|
|
6
6
|
import { AuthorItem, ButtonProps, CardBaseProps, CardLayoutProps, ContentTheme, DividerSize, ImageCardMargins, ImageObjectProps, ImageProps, LayoutItemContentMargin, LinkProps, MediaProps, MediaView, PriceDetailedProps, TextTheme, Themable, ThemedImage } from "./common.js";
|
|
@@ -72,6 +72,7 @@ export interface HubspotFormProps extends HubspotEventHandlers, AnalyticsEventsB
|
|
|
72
72
|
onLoad?: (arg: HubspotEventData) => void;
|
|
73
73
|
hubspotEvents?: string[];
|
|
74
74
|
createDOMElement?: boolean;
|
|
75
|
+
defaultValues?: HubspotFormDefaultValues;
|
|
75
76
|
}
|
|
76
77
|
export interface QuoteProps extends Themable, CardBaseProps {
|
|
77
78
|
text?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sub-blocks.js","sourceRoot":"../../../../src","sources":["models/constructor-items/sub-blocks.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"sub-blocks.js","sourceRoot":"../../../../src","sources":["models/constructor-items/sub-blocks.ts"],"names":[],"mappings":";;;AA8BA,IAAY,YAoBX;AApBD,WAAY,YAAY;IACpB,mCAAmB,CAAA;IACnB,+BAAe,CAAA;IACf;;OAEG;IACH,gDAAgC,CAAA;IAChC,wCAAwB,CAAA;IACxB,0CAA0B,CAAA;IAC1B,0CAA0B,CAAA;IAC1B,kDAAkC,CAAA;IAClC,wCAAwB,CAAA;IACxB,mCAAmB,CAAA;IACnB,4CAA4B,CAAA;IAC5B;;OAEG;IACH,6BAAa,CAAA;IACb,wCAAwB,CAAA;IACxB,wCAAwB,CAAA;AAC5B,CAAC,EApBW,YAAY,4BAAZ,YAAY,QAoBvB;AAED,IAAY,YAGX;AAHD,WAAY,YAAY;IACpB,2BAAW,CAAA;IACX,6BAAa,CAAA;AACjB,CAAC,EAHW,YAAY,4BAAZ,YAAY,QAGvB;AAWD,IAAY,kBAGX;AAHD,WAAY,kBAAkB;IAC1B,uCAAiB,CAAA;IACjB,yCAAmB,CAAA;AACvB,CAAC,EAHW,kBAAkB,kCAAlB,kBAAkB,QAG7B;AAEY,QAAA,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC","sourcesContent":["import {ClassNameProps, QuoteType} from '../../models';\nimport {ThemeSupporting} from '../../utils';\nimport {\n HubspotEventData,\n HubspotEventHandlers,\n HubspotFormDefaultValues,\n} from '../../utils/hubspot';\nimport {AnalyticsEventsBase} from '../common';\n\nimport {ContentBlockProps} from './blocks';\nimport {\n AuthorItem,\n ButtonProps,\n CardBaseProps,\n CardLayoutProps,\n ContentTheme,\n DividerSize,\n ImageCardMargins,\n ImageObjectProps,\n ImageProps,\n LayoutItemContentMargin,\n LinkProps,\n MediaProps,\n MediaView,\n PriceDetailedProps,\n TextTheme,\n Themable,\n ThemedImage,\n} from './common';\n\nexport enum SubBlockType {\n Divider = 'divider',\n Quote = 'quote',\n /**\n * @deprecated Will be removed\n */\n PriceDetailed = 'price-detailed',\n MediaCard = 'media-card',\n BannerCard = 'banner-card',\n LayoutItem = 'layout-item',\n BackgroundCard = 'background-card',\n BasicCard = 'basic-card',\n Content = 'content',\n HubspotForm = 'hubspot-form',\n /**\n * @deprecated Will be removed, use BasicCard instead\n */\n Card = 'card',\n PriceCard = 'price-card',\n ImageCard = 'image-card',\n}\n\nexport enum IconPosition {\n Top = 'top',\n Left = 'left',\n}\n\nexport interface PositionedIcon {\n value: ImageProps;\n position?: IconPosition;\n}\n\nexport interface IconWrapperProps {\n icon?: PositionedIcon;\n}\n\nexport enum ImageCardDirection {\n Direct = 'direct',\n Reverse = 'reverse',\n}\n\nexport const SubBlockTypes = Object.values(SubBlockType);\n\nexport interface DividerProps {\n size?: DividerSize;\n border?: boolean;\n}\n\nexport interface HubspotFormProps extends HubspotEventHandlers, AnalyticsEventsBase {\n className?: string;\n theme?: ContentTheme;\n isMobile?: boolean;\n region?: string;\n portalId: string;\n formId: string;\n formInstanceId?: string;\n formClassName?: string;\n\n /**\n * To use this handler for component that is rendered in iframe, set up useLoopBackHubspotEvents hook on top level frame\n */\n onBeforeLoad?: (arg: HubspotEventData) => void;\n\n /**\n * To use this handler for component that is rendered in iframe, set up useLoopBackHubspotEvents hook on top level frame\n */\n onBeforeSubmit?: (arg: HubspotEventData) => void;\n\n /**\n * To use this handler for component that is rendered in iframe, set up useLoopBackHubspotEvents hook on top level frame\n */\n onSubmit?: (arg: HubspotEventData) => void;\n\n /**\n * To use this handler for component that is rendered in iframe, set up useLoopBackHubspotEvents hook on top level frame\n */\n onLoad?: (arg: HubspotEventData) => void;\n hubspotEvents?: string[];\n createDOMElement?: boolean;\n defaultValues?: HubspotFormDefaultValues;\n}\n\n//cards\nexport interface QuoteProps extends Themable, CardBaseProps {\n text?: string;\n // for backward compatibility, yfmText will become property 'text' in major\n yfmText?: string;\n image: ThemedImage;\n logo: ThemeSupporting<ImageProps>;\n color?: string;\n /**\n * @deprecated use property button instead\n */\n url?: string;\n /**\n * @deprecated use property button instead\n */\n urlTitle?: string;\n author?: AuthorItem;\n /**\n * @deprecated use property button instead\n */\n buttonText?: string;\n theme?: TextTheme;\n quoteType?: QuoteType;\n button?: ButtonProps;\n}\n\nexport interface BackgroundCardProps\n extends CardBaseProps,\n AnalyticsEventsBase,\n CardLayoutProps,\n Omit<ContentBlockProps, 'colSizes' | 'centered' | 'controlPosition'> {\n url?: string;\n urlTitle?: string;\n background?: ThemeSupporting<ImageObjectProps>;\n paddingBottom?: 's' | 'm' | 'l' | 'xl';\n backgroundColor?: string;\n}\n\nexport interface BasicCardProps\n extends CardBaseProps,\n AnalyticsEventsBase,\n CardLayoutProps,\n Omit<ContentBlockProps, 'colSizes' | 'centered' | 'size' | 'theme' | 'controlPosition'> {\n url: string;\n urlTitle?: string;\n icon?: ThemeSupporting<ImageProps>;\n target?: string;\n iconPosition?: IconPosition;\n}\n\nexport interface BannerCardProps {\n title: string;\n subtitle?: string;\n className?: string;\n image?: ThemeSupporting<string>;\n disableCompress?: boolean;\n color?: ThemeSupporting<string>;\n theme?: TextTheme;\n button?: Pick<ButtonProps, 'text' | 'url' | 'target' | 'theme'>;\n mediaView?: MediaView;\n}\n\nexport interface MediaCardProps extends MediaProps, AnalyticsEventsBase, CardBaseProps {}\n\nexport interface PriceCardProps extends CardBaseProps, Pick<ContentBlockProps, 'theme'> {\n title: string;\n price: string;\n pricePeriod?: string;\n priceDetails?: string;\n description?: string;\n buttons?: ButtonProps[];\n links?: LinkProps[];\n backgroundColor?: string;\n list?: string[];\n}\n\nexport interface LayoutItemProps extends ClassNameProps, CardLayoutProps, AnalyticsEventsBase {\n content: Omit<ContentBlockProps, 'colSizes' | 'centered' | 'size'>;\n contentMargin?: LayoutItemContentMargin;\n media?: ThemeSupporting<MediaProps>;\n metaInfo?: string[];\n border?: boolean;\n fullscreen?: boolean;\n icon?: ThemeSupporting<PositionedIcon>;\n}\n\nexport interface ImageCardProps\n extends CardBaseProps,\n CardLayoutProps,\n Omit<ContentBlockProps, 'colSizes' | 'centered' | 'controlPosition'> {\n image: ThemeSupporting<ImageProps>;\n enableImageBorderRadius?: boolean;\n margins?: ImageCardMargins;\n direction?: ImageCardDirection;\n backgroundColor?: string;\n url?: string;\n urlTitle?: string;\n target?: string;\n}\n\n// sub-block models\nexport type DividerModel = {\n type: SubBlockType.Divider;\n} & DividerProps;\n\nexport type QuoteModel = {\n type: SubBlockType.Quote;\n} & QuoteProps;\n\nexport type LayoutItemModel = {\n type: SubBlockType.LayoutItem;\n} & LayoutItemProps;\n\nexport type BackgroundCardModel = {\n type: SubBlockType.BackgroundCard;\n} & BackgroundCardProps;\n\n/** @deprecated */\nexport type PriceDetailedModel = {\n type: SubBlockType.PriceDetailed;\n} & PriceDetailedProps;\n\nexport type MediaCardModel = {\n type: SubBlockType.MediaCard;\n} & MediaCardProps;\n\nexport type HubspotFormModel = {\n type: SubBlockType.HubspotForm;\n} & HubspotFormProps;\n\nexport type BannerCardModel = {\n type: SubBlockType.BannerCard;\n} & BannerCardProps;\n\nexport type BasicCardModel = {\n type: SubBlockType.BasicCard;\n} & BasicCardProps;\n\nexport type PriceCardModel = {\n type: SubBlockType.PriceCard;\n} & PriceCardProps;\n\nexport type ImageCardModel = {\n type: SubBlockType.ImageCard;\n} & ImageCardProps;\n\nexport type SubBlockModels =\n | DividerModel\n | QuoteModel\n | PriceDetailedModel\n | MediaCardModel\n | BackgroundCardModel\n | HubspotFormModel\n | BannerCardModel\n | BasicCardModel\n | PriceCardModel\n | LayoutItemModel\n | ImageCardModel;\n\nexport type SubBlock = SubBlockModels;\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { HubspotFormProps } from "../../models/index.js";
|
|
3
|
-
type HubspotFormContainerPropsKeys = 'className' | 'formId' | 'formInstanceId' | 'portalId' | 'region' | 'formClassName' | 'createDOMElement';
|
|
3
|
+
type HubspotFormContainerPropsKeys = 'className' | 'formId' | 'formInstanceId' | 'portalId' | 'region' | 'formClassName' | 'createDOMElement' | 'defaultValues';
|
|
4
4
|
type HubspotFormContainerProps = Pick<HubspotFormProps, HubspotFormContainerPropsKeys>;
|
|
5
5
|
declare const HubspotFormContainer: React.ForwardRefExoticComponent<HubspotFormContainerProps & React.RefAttributes<HTMLDivElement>>;
|
|
6
6
|
export default HubspotFormContainer;
|
|
@@ -5,8 +5,9 @@ const jsx_runtime_1 = require("react/jsx-runtime");
|
|
|
5
5
|
const React = tslib_1.__importStar(require("react"));
|
|
6
6
|
const hooks_1 = require("../../hooks/index.js");
|
|
7
7
|
const loadHubspotScript_1 = tslib_1.__importDefault(require("./loadHubspotScript.js"));
|
|
8
|
+
const setHubspotDefaultValues_1 = require("./setHubspotDefaultValues.js");
|
|
8
9
|
const HubspotFormContainer = React.forwardRef((props, ref) => {
|
|
9
|
-
const { className, formId, formInstanceId, portalId, region, formClassName, createDOMElement, } = props;
|
|
10
|
+
const { className, formId, formInstanceId, portalId, region, formClassName, createDOMElement, defaultValues, } = props;
|
|
10
11
|
const containerRef = React.useRef(null);
|
|
11
12
|
const hsContainerRef = React.useRef();
|
|
12
13
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
@@ -30,6 +31,9 @@ const HubspotFormContainer = React.forwardRef((props, ref) => {
|
|
|
30
31
|
target: `#${containerId}`,
|
|
31
32
|
cssClass: formClassName,
|
|
32
33
|
formInstanceId,
|
|
34
|
+
onFormReady: defaultValues
|
|
35
|
+
? (form) => (0, setHubspotDefaultValues_1.setHubspotDefaultValues)(form, defaultValues)
|
|
36
|
+
: undefined,
|
|
33
37
|
});
|
|
34
38
|
}
|
|
35
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HubspotFormContainer.js","sourceRoot":"../../../../src","sources":["sub-blocks/HubspotForm/HubspotFormContainer.tsx"],"names":[],"mappings":";;;;AAAA,qDAA+B;AAE/B,gDAAqC;AAGrC,uFAAoD;
|
|
1
|
+
{"version":3,"file":"HubspotFormContainer.js","sourceRoot":"../../../../src","sources":["sub-blocks/HubspotForm/HubspotFormContainer.tsx"],"names":[],"mappings":";;;;AAAA,qDAA+B;AAE/B,gDAAqC;AAGrC,uFAAoD;AACpD,0EAAkE;AAclE,MAAM,oBAAoB,GAAG,KAAK,CAAC,UAAU,CACzC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IACX,MAAM,EACF,SAAS,EAET,MAAM,EACN,cAAc,EACd,QAAQ,EACR,MAAM,EACN,aAAa,EACb,gBAAgB,EAChB,aAAa,GAChB,GAAG,KAAK,CAAC;IAEV,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAiB,IAAI,CAAC,CAAC;IACxD,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,EAAkB,CAAC;IAEtD,oEAAoE;IACpE,KAAK,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,OAAQ,CAAC,CAAC;IAE5D,MAAM,WAAW,GAAG,cAAc;QAC9B,CAAC,CAAC,gBAAgB,MAAM,IAAI,cAAc,EAAE;QAC5C,CAAC,CAAC,gBAAgB,MAAM,EAAE,CAAC;IAE/B,MAAM,UAAU,GAAG,GAAG,EAAE;QACpB,IAAI,YAAY,CAAC,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,IAAI,gBAAgB,EAAE,CAAC;YACtE,cAAc,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACvD,YAAY,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;YAC7B,cAAc,CAAC,OAAO,CAAC,EAAE,GAAG,WAAW,CAAC;YACxC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,CAAC,gBAAgB,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;YAC9C,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;oBACtB,MAAM;oBACN,QAAQ;oBACR,MAAM;oBACN,MAAM,EAAE,IAAI,WAAW,EAAE;oBACzB,QAAQ,EAAE,aAAa;oBACvB,cAAc;oBACd,WAAW,EAAE,aAAa;wBACtB,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,iDAAuB,EAAC,IAAI,EAAE,aAAa,CAAC;wBACxD,CAAC,CAAC,SAAS;iBAClB,CAAC,CAAC;YACP,CAAC;QACL,CAAC;IACL,CAAC,CAAC;IAEF,IAAA,gBAAQ,EAAC,GAAG,EAAE;QACV,CAAC,KAAK,IAAI,EAAE;YACR,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAChB,MAAM,IAAA,2BAAiB,GAAE,CAAC;YAC9B,CAAC;YAED,UAAU,EAAE,CAAC;QACjB,CAAC,CAAC,EAAE,CAAC;QAEL,OAAO,GAAG,EAAE;YACR,IAAI,gBAAgB,IAAI,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;gBAC7E,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACrE,CAAC;QACL,CAAC,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,OAAO,gCAAK,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,GAAI,CAAC;AAC7E,CAAC,CACJ,CAAC;AAEF,oBAAoB,CAAC,WAAW,GAAG,sBAAsB,CAAC;AAE1D,kBAAe,oBAAoB,CAAC","sourcesContent":["import * as React from 'react';\n\nimport {useMount} from '../../hooks';\nimport {HubspotFormProps} from '../../models';\n\nimport loadHubspotScript from './loadHubspotScript';\nimport {setHubspotDefaultValues} from './setHubspotDefaultValues';\n\ntype HubspotFormContainerPropsKeys =\n | 'className'\n | 'formId'\n | 'formInstanceId'\n | 'portalId'\n | 'region'\n | 'formClassName'\n | 'createDOMElement'\n | 'defaultValues';\n\ntype HubspotFormContainerProps = Pick<HubspotFormProps, HubspotFormContainerPropsKeys>;\n\nconst HubspotFormContainer = React.forwardRef<HTMLDivElement, HubspotFormContainerProps>(\n (props, ref) => {\n const {\n className,\n\n formId,\n formInstanceId,\n portalId,\n region,\n formClassName,\n createDOMElement,\n defaultValues,\n } = props;\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const hsContainerRef = React.useRef<HTMLDivElement>();\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n React.useImperativeHandle(ref, () => containerRef.current!);\n\n const containerId = formInstanceId\n ? `hubspot-form-${formId}-${formInstanceId}`\n : `hubspot-form-${formId}`;\n\n const createForm = () => {\n if (containerRef.current && !hsContainerRef.current && createDOMElement) {\n hsContainerRef.current = document.createElement('div');\n containerRef.current.id = '';\n hsContainerRef.current.id = containerId;\n containerRef.current.appendChild(hsContainerRef.current);\n }\n\n if (!createDOMElement || hsContainerRef.current) {\n if (window.hbspt) {\n window.hbspt.forms.create({\n region,\n portalId,\n formId,\n target: `#${containerId}`,\n cssClass: formClassName,\n formInstanceId,\n onFormReady: defaultValues\n ? (form) => setHubspotDefaultValues(form, defaultValues)\n : undefined,\n });\n }\n }\n };\n\n useMount(() => {\n (async () => {\n if (!window.hbspt) {\n await loadHubspotScript();\n }\n\n createForm();\n })();\n\n return () => {\n if (createDOMElement && containerRef.current && containerRef.current.lastChild) {\n containerRef.current.removeChild(containerRef.current.lastChild);\n }\n };\n });\n\n return <div className={className} id={containerId} ref={containerRef} />;\n },\n);\n\nHubspotFormContainer.displayName = 'HubspotFormContainer';\n\nexport default HubspotFormContainer;\n"]}
|
|
@@ -13,7 +13,7 @@ const b = (0, utils_1.block)('hubspot-form');
|
|
|
13
13
|
const HubspotForm = React.forwardRef((props, ref) => {
|
|
14
14
|
const { className, theme: themeProp, isMobile: isMobileProp, formId, formInstanceId, portalId, region, formClassName,
|
|
15
15
|
// hubspotEvents, // TODO: decide how to handle them
|
|
16
|
-
analyticsEvents, onBeforeSubmit, onSubmit, onBeforeLoad, onLoad, createDOMElement, onSubmitError, } = props;
|
|
16
|
+
analyticsEvents, onBeforeSubmit, onSubmit, onBeforeLoad, onLoad, createDOMElement, onSubmitError, defaultValues, } = props;
|
|
17
17
|
const themeValue = (0, theme_1.useTheme)();
|
|
18
18
|
const handleAnalytics = (0, hooks_1.useAnalytics)(models_1.DefaultEventNames.HubspotFormSubmit);
|
|
19
19
|
const isMobileValue = React.useContext(mobileContext_1.MobileContext);
|
|
@@ -38,7 +38,7 @@ const HubspotForm = React.forwardRef((props, ref) => {
|
|
|
38
38
|
onSubmitError,
|
|
39
39
|
]);
|
|
40
40
|
(0, hooks_1.useHandleHubspotEvents)(handlers, formId);
|
|
41
|
-
return ((0, jsx_runtime_1.jsx)(HubspotFormContainer_1.default, { createDOMElement: createDOMElement, className: b({ theme, mobile }, className), formClassName: formClassName, formId: formId, portalId: portalId, formInstanceId: formInstanceId, region: region, ref: ref }, [formClassName, formId, formInstanceId, portalId, region].join()));
|
|
41
|
+
return ((0, jsx_runtime_1.jsx)(HubspotFormContainer_1.default, { createDOMElement: createDOMElement, className: b({ theme, mobile }, className), formClassName: formClassName, formId: formId, portalId: portalId, formInstanceId: formInstanceId, region: region, defaultValues: defaultValues, ref: ref }, [formClassName, formId, formInstanceId, portalId, region].join()));
|
|
42
42
|
});
|
|
43
43
|
HubspotForm.displayName = 'HubspotForm';
|
|
44
44
|
exports.default = HubspotForm;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"../../../../src","sources":["sub-blocks/HubspotForm/index.tsx"],"names":[],"mappings":";;;;AAAA,qDAA+B;AAE/B,wEAA0D;AAC1D,wDAA6C;AAC7C,gDAAiE;AACjE,kDAAiE;AACjE,gDAAwD;AAExD,6FAA0D;AAI1D,MAAM,CAAC,GAAG,IAAA,aAAK,EAAC,cAAc,CAAC,CAAC;AAEhC,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAAmC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IAClF,MAAM,EACF,SAAS,EACT,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,YAAY,EACtB,MAAM,EACN,cAAc,EACd,QAAQ,EACR,MAAM,EACN,aAAa;IACb,oDAAoD;IACpD,eAAe,EACf,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,gBAAgB,EAChB,aAAa,GAChB,GAAG,KAAK,CAAC;IAEV,MAAM,UAAU,GAAG,IAAA,gBAAQ,GAAE,CAAC;IAC9B,MAAM,eAAe,GAAG,IAAA,oBAAY,EAAC,0BAAiB,CAAC,iBAAiB,CAAC,CAAC;IAC1E,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,6BAAa,CAAC,CAAC;IAEtD,MAAM,KAAK,GAAG,SAAS,IAAI,UAAU,CAAC;IACtC,MAAM,MAAM,GAAG,YAAY,IAAI,aAAa,CAAC;IAE7C,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAC1B,GAAG,EAAE,CAAC,CAAC;QACH,YAAY;QACZ,cAAc;QACd,MAAM;QACN,aAAa;QACb,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;YAChB,eAAe,CAAC,eAAe,CAAC,CAAC;YACjC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;KACJ,CAAC,EACF;QACI,YAAY;QACZ,cAAc;QACd,MAAM;QACN,eAAe;QACf,eAAe;QACf,QAAQ;QACR,aAAa;KAChB,CACJ,CAAC;IAEF,IAAA,8BAAsB,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzC,OAAO,CACH,uBAAC,8BAAoB,IACjB,gBAAgB,EAAE,gBAAgB,EAElC,SAAS,EAAE,CAAC,CAAC,EAAC,KAAK,EAAE,MAAM,EAAC,EAAE,SAAS,CAAC,EACxC,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"../../../../src","sources":["sub-blocks/HubspotForm/index.tsx"],"names":[],"mappings":";;;;AAAA,qDAA+B;AAE/B,wEAA0D;AAC1D,wDAA6C;AAC7C,gDAAiE;AACjE,kDAAiE;AACjE,gDAAwD;AAExD,6FAA0D;AAI1D,MAAM,CAAC,GAAG,IAAA,aAAK,EAAC,cAAc,CAAC,CAAC;AAEhC,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAAmC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IAClF,MAAM,EACF,SAAS,EACT,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,YAAY,EACtB,MAAM,EACN,cAAc,EACd,QAAQ,EACR,MAAM,EACN,aAAa;IACb,oDAAoD;IACpD,eAAe,EACf,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,gBAAgB,EAChB,aAAa,EACb,aAAa,GAChB,GAAG,KAAK,CAAC;IAEV,MAAM,UAAU,GAAG,IAAA,gBAAQ,GAAE,CAAC;IAC9B,MAAM,eAAe,GAAG,IAAA,oBAAY,EAAC,0BAAiB,CAAC,iBAAiB,CAAC,CAAC;IAC1E,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,6BAAa,CAAC,CAAC;IAEtD,MAAM,KAAK,GAAG,SAAS,IAAI,UAAU,CAAC;IACtC,MAAM,MAAM,GAAG,YAAY,IAAI,aAAa,CAAC;IAE7C,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAC1B,GAAG,EAAE,CAAC,CAAC;QACH,YAAY;QACZ,cAAc;QACd,MAAM;QACN,aAAa;QACb,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;YAChB,eAAe,CAAC,eAAe,CAAC,CAAC;YACjC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;KACJ,CAAC,EACF;QACI,YAAY;QACZ,cAAc;QACd,MAAM;QACN,eAAe;QACf,eAAe;QACf,QAAQ;QACR,aAAa;KAChB,CACJ,CAAC;IAEF,IAAA,8BAAsB,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzC,OAAO,CACH,uBAAC,8BAAoB,IACjB,gBAAgB,EAAE,gBAAgB,EAElC,SAAS,EAAE,CAAC,CAAC,EAAC,KAAK,EAAE,MAAM,EAAC,EAAE,SAAS,CAAC,EACxC,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,EAC5B,GAAG,EAAE,GAAG,IARH,CAAC,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CASvE,CACL,CAAC;AACN,CAAC,CAAC,CAAC;AAEH,WAAW,CAAC,WAAW,GAAG,aAAa,CAAC;AAExC,kBAAe,WAAW,CAAC","sourcesContent":["import * as React from 'react';\n\nimport {MobileContext} from '../../context/mobileContext';\nimport {useTheme} from '../../context/theme';\nimport {useAnalytics, useHandleHubspotEvents} from '../../hooks';\nimport {DefaultEventNames, HubspotFormProps} from '../../models';\nimport {HubspotEventHandlers, block} from '../../utils';\n\nimport HubspotFormContainer from './HubspotFormContainer';\n\nimport './HubspotForm.scss';\n\nconst b = block('hubspot-form');\n\nconst HubspotForm = React.forwardRef<HTMLDivElement, HubspotFormProps>((props, ref) => {\n const {\n className,\n theme: themeProp,\n isMobile: isMobileProp,\n formId,\n formInstanceId,\n portalId,\n region,\n formClassName,\n // hubspotEvents, // TODO: decide how to handle them\n analyticsEvents,\n onBeforeSubmit,\n onSubmit,\n onBeforeLoad,\n onLoad,\n createDOMElement,\n onSubmitError,\n defaultValues,\n } = props;\n\n const themeValue = useTheme();\n const handleAnalytics = useAnalytics(DefaultEventNames.HubspotFormSubmit);\n const isMobileValue = React.useContext(MobileContext);\n\n const theme = themeProp ?? themeValue;\n const mobile = isMobileProp ?? isMobileValue;\n\n const handlers = React.useMemo<HubspotEventHandlers>(\n () => ({\n onBeforeLoad,\n onBeforeSubmit,\n onLoad,\n onSubmitError,\n onSubmit: (event) => {\n handleAnalytics(analyticsEvents);\n onSubmit?.(event);\n },\n }),\n [\n onBeforeLoad,\n onBeforeSubmit,\n onLoad,\n handleAnalytics,\n analyticsEvents,\n onSubmit,\n onSubmitError,\n ],\n );\n\n useHandleHubspotEvents(handlers, formId);\n return (\n <HubspotFormContainer\n createDOMElement={createDOMElement}\n key={[formClassName, formId, formInstanceId, portalId, region].join()}\n className={b({theme, mobile}, className)}\n formClassName={formClassName}\n formId={formId}\n portalId={portalId}\n formInstanceId={formInstanceId}\n region={region}\n defaultValues={defaultValues}\n ref={ref}\n />\n );\n});\n\nHubspotForm.displayName = 'HubspotForm';\n\nexport default HubspotForm;\n"]}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setHubspotDefaultValues = void 0;
|
|
4
|
+
const setInputValue = (inputs, value) => {
|
|
5
|
+
const input = inputs[0];
|
|
6
|
+
const type = input.type;
|
|
7
|
+
switch (type) {
|
|
8
|
+
case 'checkbox':
|
|
9
|
+
input.checked = Boolean(value);
|
|
10
|
+
return;
|
|
11
|
+
case 'radio':
|
|
12
|
+
inputs.forEach((radio) => {
|
|
13
|
+
if (radio.value === String(value)) {
|
|
14
|
+
input.checked = true;
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
return;
|
|
18
|
+
default:
|
|
19
|
+
input.value = String(value);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
const setSelectValue = (select, value) => {
|
|
23
|
+
const options = Array.from(select.querySelectorAll('option'));
|
|
24
|
+
options.forEach((option) => {
|
|
25
|
+
if (option.value === String(value)) {
|
|
26
|
+
option.selected = true;
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
const setValue = (elements, value) => {
|
|
31
|
+
const element = elements[0];
|
|
32
|
+
switch (element.tagName.toLowerCase()) {
|
|
33
|
+
case 'input':
|
|
34
|
+
setInputValue(elements, value);
|
|
35
|
+
return;
|
|
36
|
+
case 'textarea':
|
|
37
|
+
element.value = String(value);
|
|
38
|
+
return;
|
|
39
|
+
case 'select':
|
|
40
|
+
setSelectValue(element, value);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
const setHubspotDefaultValues = (form, defaultValues) => {
|
|
45
|
+
Object.entries(defaultValues).forEach(([name, value]) => {
|
|
46
|
+
const inputs = Array.from(form.querySelectorAll(`[name="${name}"]`));
|
|
47
|
+
setValue(inputs, value);
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
exports.setHubspotDefaultValues = setHubspotDefaultValues;
|
|
51
|
+
//# sourceMappingURL=setHubspotDefaultValues.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setHubspotDefaultValues.js","sourceRoot":"../../../../src","sources":["sub-blocks/HubspotForm/setHubspotDefaultValues.ts"],"names":[],"mappings":";;;AAOA,MAAM,aAAa,GAAG,CAAC,MAA0B,EAAE,KAAwB,EAAE,EAAE;IAC3E,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IAExB,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,UAAU;YACX,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAC/B,OAAO;QACX,KAAK,OAAO;YACR,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBACrB,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;oBAChC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;gBACzB,CAAC;YACL,CAAC,CAAC,CAAC;YACH,OAAO;QACX;YACI,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,MAAyB,EAAE,KAAwB,EAAE,EAAE;IAC3E,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE9D,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QACvB,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC3B,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,QAAmB,EAAE,KAAwB,EAAE,EAAE;IAC/D,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE5B,QAAQ,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;QACpC,KAAK,OAAO;YACR,aAAa,CAAC,QAA8B,EAAE,KAAK,CAAC,CAAC;YACrD,OAAO;QACX,KAAK,UAAU;YACV,OAA+B,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YACvD,OAAO;QACX,KAAK,QAAQ;YACT,cAAc,CAAC,OAA4B,EAAE,KAAK,CAAC,CAAC;YACpD,OAAO;IACf,CAAC;AACL,CAAC,CAAC;AAEK,MAAM,uBAAuB,GAAG,CACnC,IAAqB,EACrB,aAAuC,EACzC,EAAE;IACA,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;QACpD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC;QACrE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AARW,QAAA,uBAAuB,2BAQlC","sourcesContent":["import {HubspotFormDefaultValues} from '../../utils/hubspot';\n\n/* eslint-disable no-not-accumulator-reassign/no-not-accumulator-reassign */\n/* eslint-disable no-param-reassign */\n\ntype HubspotInputValue = HubspotFormDefaultValues[string];\n\nconst setInputValue = (inputs: HTMLInputElement[], value: HubspotInputValue) => {\n const input = inputs[0];\n const type = input.type;\n\n switch (type) {\n case 'checkbox':\n input.checked = Boolean(value);\n return;\n case 'radio':\n inputs.forEach((radio) => {\n if (radio.value === String(value)) {\n input.checked = true;\n }\n });\n return;\n default:\n input.value = String(value);\n }\n};\n\nconst setSelectValue = (select: HTMLSelectElement, value: HubspotInputValue) => {\n const options = Array.from(select.querySelectorAll('option'));\n\n options.forEach((option) => {\n if (option.value === String(value)) {\n option.selected = true;\n }\n });\n};\n\nconst setValue = (elements: Element[], value: HubspotInputValue) => {\n const element = elements[0];\n\n switch (element.tagName.toLowerCase()) {\n case 'input':\n setInputValue(elements as HTMLInputElement[], value);\n return;\n case 'textarea':\n (element as HTMLTextAreaElement).value = String(value);\n return;\n case 'select':\n setSelectValue(element as HTMLSelectElement, value);\n return;\n }\n};\n\nexport const setHubspotDefaultValues = (\n form: HTMLFormElement,\n defaultValues: HubspotFormDefaultValues,\n) => {\n Object.entries(defaultValues).forEach(([name, value]) => {\n const inputs = Array.from(form.querySelectorAll(`[name=\"${name}\"]`));\n setValue(inputs, value);\n });\n};\n"]}
|
|
@@ -5,6 +5,7 @@ export interface HubspotEventData {
|
|
|
5
5
|
id: string;
|
|
6
6
|
data?: unknown;
|
|
7
7
|
}
|
|
8
|
+
export type HubspotFormDefaultValues = Record<string, string | number | boolean>;
|
|
8
9
|
export declare function isHubspotEventData(maybeData: unknown): maybeData is HubspotEventData;
|
|
9
10
|
export interface HubspotEventHandlers {
|
|
10
11
|
onBeforeLoad?: (arg: HubspotEventData) => void;
|