{"version":3,"file":"8427.a389015870c260c40e84.js","mappings":"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","sources":["webpack://webstaurantstore/./common/MediaViewerV2/SharedComponents/VideoViewer/hooks/useGtmVideoTracking.tsx","webpack://webstaurantstore/./common/VideoModal/ZestVideoModal.tsx","webpack://webstaurantstore/./common/videoPlayer/ZestVideoPlayer.tsx","webpack://webstaurantstore/./__alias__/cls/index.ts","webpack://webstaurantstore/./common/useIsMounted.ts"],"sourcesContent":["import { MutableRefObject, useCallback, useRef } from \"react\";\nimport { sendGtmEvent } from \"~/analytics/definitions\";\nconst getCurrentPercent = (currentTime = 0, duration = 1): number => {\n return Math.round(currentTime / duration * 100);\n};\nconst useGtmVideoTracking = (videoRef: MutableRefObject, videoUrl: string, title: string, extendedEventLabel?: string) => {\n const percentBreakpointsRef = useRef<-1 | 0 | 25 | 50 | 75 | 100>(-1);\n const sendGtmVideoEvent = useCallback((videoPercent: number, videoStatus: string, eventAction: string) => {\n sendGtmEvent({\n event: \"video_tracking\",\n eventAction,\n eventLabel: extendedEventLabel ? `${videoUrl} - ${extendedEventLabel}` : videoUrl,\n htmlVideoPercent: videoPercent,\n htmlVideoStatus: videoStatus,\n htmlVideoTitle: title,\n htmlVideoUrl: videoUrl,\n pageUrl: window.location.href\n });\n }, [videoUrl, title, extendedEventLabel]);\n const sendGtmPlayEvent = useCallback(() => {\n const currentPercent = getCurrentPercent(videoRef.current?.currentTime, videoRef.current?.duration);\n if (videoRef.current) {\n if (videoRef.current.currentTime === 0) {\n sendGtmVideoEvent(0, \"Initial Play\", \"Initial Play\");\n } else {\n sendGtmVideoEvent(currentPercent, \"Resume Play\", \"Resume Play\");\n }\n }\n }, [sendGtmVideoEvent, videoRef]);\n const sendGtmProgressEvent = useCallback(() => {\n const currentPercent = getCurrentPercent(videoRef.current?.currentTime, videoRef.current?.duration);\n if (videoRef?.current) {\n if (currentPercent === 100 && percentBreakpointsRef.current !== 100) {\n percentBreakpointsRef.current = 100;\n sendGtmVideoEvent(100, \"complete\", \"Reached the end\");\n } else if (currentPercent >= 75 && percentBreakpointsRef.current < 75) {\n percentBreakpointsRef.current = 75;\n sendGtmVideoEvent(75, \"progress\", \"Reached 75%\");\n } else if (currentPercent >= 50 && percentBreakpointsRef.current < 50) {\n percentBreakpointsRef.current = 50;\n sendGtmVideoEvent(50, \"progress\", \"Reached 50%\");\n } else if (currentPercent >= 25 && percentBreakpointsRef.current < 25) {\n percentBreakpointsRef.current = 25;\n sendGtmVideoEvent(25, \"progress\", \"Reached 25%\");\n }\n }\n }, [sendGtmVideoEvent, videoRef]);\n const sendGtmPauseEvent = useCallback(() => {\n const currentPercent = getCurrentPercent(videoRef.current?.currentTime, videoRef.current?.duration);\n // onPause technically fires at the video end, this prevents an unnecessary event from firing\n if (currentPercent < 100) {\n sendGtmVideoEvent(currentPercent, \"pause\", \"Paused\");\n }\n }, [sendGtmVideoEvent, videoRef]);\n return {\n sendGtmProgressEvent,\n sendGtmPauseEvent,\n sendGtmPlayEvent\n };\n};\nexport default useGtmVideoTracking;","/*\n Kalib Watson 9-3-24\n TODO: This component is a temporary component to slowly introduce the Zest VideoPlayer to one location at a time.\n When Zest VideoPlayer has fully replaced the old video player component, this component should replace the TypedVideoModal component and should be renamed.\n*/\n\nimport React, { Suspense, useState } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { VideoPlayer } from \"@clarkinc/zest-design-system/ui\";\nimport { cls } from \"cls\";\nimport { Modal } from \"@clarkinc/zest-design-system\";\nimport useIsMounted from \"../useIsMounted\";\nimport { Video } from \"../Store/models/Video\";\nimport Environment from \"../Environment\";\nimport ZestVideoPlayer from \"../videoPlayer/ZestVideoPlayer\";\nimport(\"./styles.less\");\ninterface Props {\n video?: Video;\n autoPlay?: boolean;\n}\nconst ZestVideoModal = ({\n video,\n autoPlay = true\n}: Props) => {\n const [isModalOpen, setIsModalOpen] = useState(false);\n const isMounted = useIsMounted();\n const closeModal = (event: React.SyntheticEvent) => {\n event.preventDefault();\n event.stopPropagation();\n // Modal will require a Zest update to include a close animation\n Modal.toggle(\"zestVideoModal\");\n };\n const onOpen = () => {\n setIsModalOpen(true);\n };\n const onClose = () => {\n setIsModalOpen(false);\n };\n const isYoutube = video?.youtubeId;\n const baseUrl = Environment.isProduction ? \"https://cdn.webstaurantstore.com/videos/\" : \"https://assets.dev.webstaurantstore.com/videos/\";\n const getSourceUrls = () => {\n if (video?.sources) {\n const {\n high,\n medium,\n low,\n product,\n ipad\n } = video.sources;\n return {\n high: `${baseUrl}${high}`,\n medium: `${baseUrl}${medium}`,\n low: `${baseUrl}${low}`,\n product: `${baseUrl}${product}`,\n ipad: `${baseUrl}${ipad}`\n };\n }\n return undefined;\n };\n const getCaptionUrl = () => {\n if (video?.closedCaptionFile) {\n const captionBaseUrl = \"/videos/closed_captioning/\";\n return captionBaseUrl + video.closedCaptionFile;\n }\n return undefined;\n };\n return <>\n {isMounted && ReactDOM.createPortal(\n \n \n {isYoutube && isModalOpen &&
\n \n
}\n {video && !isYoutube && isModalOpen && }\n
\n
,\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n document.querySelector(\"body\") as Element)}\n ;\n};\nexport default ZestVideoModal;","/* eslint-disable @typescript-eslint/consistent-type-assertions */\nimport React, { useEffect, useRef } from \"react\";\nimport { VideoPlayer, VideoPlayerProps } from \"@clarkinc/zest-design-system/ui\";\nimport { cls } from \"@wss/cls\";\nimport { Video } from \"~/common/Store/models/Video\";\nimport useGtmVideoTracking from \"../MediaViewerV2/SharedComponents/VideoViewer/hooks/useGtmVideoTracking\";\ninterface Props {\n posterImage: string;\n sources: Partial;\n activePlayer?: boolean;\n currentIndex: number;\n selected: number;\n autoPlay?: boolean;\n videoClasses?: string;\n youtubeId?: string;\n useCdn?: boolean;\n playsInline?: boolean;\n closedCaptionsrc?: string;\n shouldLoopVideo?: boolean;\n isModal?: boolean;\n videoSection?: string;\n}\nconst ZestVideoPlayer = (props: Props & VideoPlayerProps) => {\n const {\n youtubeId,\n useCdn,\n selected,\n activePlayer,\n currentIndex,\n posterImage,\n videoClasses,\n closedCaptionsrc,\n playsInline,\n sources,\n shouldLoopVideo,\n isModal,\n videoSection,\n autoPlay,\n title,\n ...rest\n } = props;\n const videoRef = useRef(null);\n const baseUrl = useCdn ? \"https://cdn.webstaurantstore.com/videos/\" : \"/videos/\";\n const getCaptionUrl = () => {\n if (!closedCaptionsrc) {\n return undefined;\n }\n const captionBaseUrl = \"/videos/closed_captioning/\";\n return captionBaseUrl + closedCaptionsrc;\n };\n const pauseYoutubeVideo = () => {\n const iframe = document.getElementsByClassName(\"videoPlayer\")[0] as HTMLIFrameElement;\n if (iframe) {\n // resetting the iframe src to pause Youtube video\n const videoSource = iframe.src;\n iframe.src = videoSource;\n }\n };\n useEffect(() => {\n if (currentIndex !== selected) {\n if (youtubeId) {\n pauseYoutubeVideo();\n } else {\n const video = document.querySelector(`.videoPlayer-${currentIndex}`) as HTMLVideoElement;\n if (!video?.paused) {\n video.pause();\n }\n }\n }\n }, [activePlayer, currentIndex, selected, youtubeId]);\n const relativeSources = Object.fromEntries(Object.entries(sources ?? {}).filter(([, value]) => value !== undefined).map(([key, value]) => [key, `${baseUrl}${value}`]));\n const highestSrc = sources?.high || sources?.medium || sources?.low || sources?.product || sources?.ipad || \"\";\n const {\n sendGtmProgressEvent,\n sendGtmPauseEvent,\n sendGtmPlayEvent\n } = useGtmVideoTracking(videoRef, `${baseUrl}${highestSrc}`, title ?? \"Unknown video title\", videoSection);\n\n // This is a workaround as onTimeUpdate is not working with the Zest Player and will be updated at a later time.\n useEffect(() => {\n const currentVideoRef = videoRef.current;\n if (currentVideoRef) {\n currentVideoRef.addEventListener(\"timeupdate\", sendGtmProgressEvent);\n }\n return () => {\n if (currentVideoRef) {\n currentVideoRef.removeEventListener(\"timeupdate\", sendGtmProgressEvent);\n }\n };\n }, [sendGtmProgressEvent]);\n return youtubeId &&