@clickview/lite 0.104.0-rc.3 → 0.104.0-rc.5
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/dist/.vite/manifest.json +699 -699
- package/dist/bundles.json +1 -1
- package/dist/en.json +1 -1
- package/dist/scripts/{CW1i-QHv.chunk.js → -7qiRMLt.chunk.js} +2 -2
- package/dist/scripts/{CW1i-QHv.chunk.js.map → -7qiRMLt.chunk.js.map} +1 -1
- package/dist/scripts/{CXN0_XjU.chunk.js → -KvTbeQV.chunk.js} +2 -2
- package/dist/scripts/{CXN0_XjU.chunk.js.map → -KvTbeQV.chunk.js.map} +1 -1
- package/dist/scripts/{Bu7Sr1dy.chunk.js → 0Fek4oFk.chunk.js} +2 -2
- package/dist/scripts/{Bu7Sr1dy.chunk.js.map → 0Fek4oFk.chunk.js.map} +1 -1
- package/dist/scripts/{CfRQYWGG.chunk.js → 5PKjjI4Y.chunk.js} +2 -2
- package/dist/scripts/{CfRQYWGG.chunk.js.map → 5PKjjI4Y.chunk.js.map} +1 -1
- package/dist/scripts/{Ta3cqTAC.chunk.js → AEOAlemi.chunk.js} +2 -2
- package/dist/scripts/{Ta3cqTAC.chunk.js.map → AEOAlemi.chunk.js.map} +1 -1
- package/dist/scripts/{DBcWjmUy.chunk.js → B1TqilLB.chunk.js} +2 -2
- package/dist/scripts/{DBcWjmUy.chunk.js.map → B1TqilLB.chunk.js.map} +1 -1
- package/dist/scripts/{ft2cSH-j.chunk.js → B3AhKFfz.chunk.js} +2 -2
- package/dist/scripts/{ft2cSH-j.chunk.js.map → B3AhKFfz.chunk.js.map} +1 -1
- package/dist/scripts/{DFFq-sgD.chunk.js → B3y60nT5.chunk.js} +2 -2
- package/dist/scripts/{DFFq-sgD.chunk.js.map → B3y60nT5.chunk.js.map} +1 -1
- package/dist/scripts/{DWJiezgB2.chunk.js → BBWnpWNB2.chunk.js} +2 -2
- package/dist/scripts/{DWJiezgB2.chunk.js.map → BBWnpWNB2.chunk.js.map} +1 -1
- package/dist/scripts/{B6GfukUn2.chunk.js → B_TE5XUR2.chunk.js} +2 -2
- package/dist/scripts/{B6GfukUn2.chunk.js.map → B_TE5XUR2.chunk.js.map} +1 -1
- package/dist/scripts/{BpHA-MkZ.chunk.js → BiWUSyJr.chunk.js} +2 -2
- package/dist/scripts/{BpHA-MkZ.chunk.js.map → BiWUSyJr.chunk.js.map} +1 -1
- package/dist/scripts/{VJQU9c4G2.chunk.js → Bld7iWR52.chunk.js} +2 -2
- package/dist/scripts/{VJQU9c4G2.chunk.js.map → Bld7iWR52.chunk.js.map} +1 -1
- package/dist/scripts/{C_tdgSWS2.chunk.js → Bzk4AwVx2.chunk.js} +2 -2
- package/dist/scripts/{C_tdgSWS2.chunk.js.map → Bzk4AwVx2.chunk.js.map} +1 -1
- package/dist/scripts/{9oMRc0cb2.chunk.js → CAs2Sere2.chunk.js} +2 -2
- package/dist/scripts/{9oMRc0cb2.chunk.js.map → CAs2Sere2.chunk.js.map} +1 -1
- package/dist/scripts/CCBk_ENs.chunk.js +1 -0
- package/dist/scripts/{qT_Twe2q.chunk.js → CMHxOVI7.chunk.js} +2 -2
- package/dist/scripts/{qT_Twe2q.chunk.js.map → CMHxOVI7.chunk.js.map} +1 -1
- package/dist/scripts/{Bm5qACA52.chunk.js → CNfmLVE82.chunk.js} +2 -2
- package/dist/scripts/{Bm5qACA52.chunk.js.map → CNfmLVE82.chunk.js.map} +1 -1
- package/dist/scripts/{CpzveYo2.chunk.js → CVL6bQWp.chunk.js} +2 -2
- package/dist/scripts/{CpzveYo2.chunk.js.map → CVL6bQWp.chunk.js.map} +1 -1
- package/dist/scripts/{CNPKh2z72.chunk.js → CX6c7KRp2.chunk.js} +2 -2
- package/dist/scripts/{CNPKh2z72.chunk.js.map → CX6c7KRp2.chunk.js.map} +1 -1
- package/dist/scripts/{BTm7hIyP2.chunk.js → CaCm4N_d2.chunk.js} +2 -2
- package/dist/scripts/{BTm7hIyP2.chunk.js.map → CaCm4N_d2.chunk.js.map} +1 -1
- package/dist/scripts/{DW_sm5se2.chunk.js → CfNYFxJl2.chunk.js} +2 -2
- package/dist/scripts/{DW_sm5se2.chunk.js.map → CfNYFxJl2.chunk.js.map} +1 -1
- package/dist/scripts/{C4OV7pr-.chunk.js → CmnbQiBA.chunk.js} +2 -2
- package/dist/scripts/{C4OV7pr-.chunk.js.map → CmnbQiBA.chunk.js.map} +1 -1
- package/dist/scripts/CpsbRDII.chunk.js +2 -0
- package/dist/scripts/{jAtAipGN.chunk.js.map → CpsbRDII.chunk.js.map} +1 -1
- package/dist/scripts/{CFduwlo0.chunk.js → Cqq1N9xw.chunk.js} +2 -2
- package/dist/scripts/{CFduwlo0.chunk.js.map → Cqq1N9xw.chunk.js.map} +1 -1
- package/dist/scripts/{UCiRB6cQ.chunk.js → CwFYdvvA.chunk.js} +2 -2
- package/dist/scripts/{UCiRB6cQ.chunk.js.map → CwFYdvvA.chunk.js.map} +1 -1
- package/dist/scripts/{DLcyKjA7.chunk.js → Cyit3dMk.chunk.js} +2 -2
- package/dist/scripts/{DLcyKjA7.chunk.js.map → Cyit3dMk.chunk.js.map} +1 -1
- package/dist/scripts/{BxjzTnvL2.chunk.js → D-iyHqNw2.chunk.js} +3 -3
- package/dist/scripts/{BxjzTnvL2.chunk.js.map → D-iyHqNw2.chunk.js.map} +1 -1
- package/dist/scripts/{x2GB1P6E2.chunk.js → D3ncynN72.chunk.js} +3 -3
- package/dist/scripts/{x2GB1P6E2.chunk.js.map → D3ncynN72.chunk.js.map} +1 -1
- package/dist/scripts/{DH_0KtTK2.chunk.js → DICsRDM42.chunk.js} +2 -2
- package/dist/scripts/{DH_0KtTK2.chunk.js.map → DICsRDM42.chunk.js.map} +1 -1
- package/dist/scripts/{BTcLMVw4.chunk.js → DKDWcWxk.chunk.js} +2 -2
- package/dist/scripts/{BTcLMVw4.chunk.js.map → DKDWcWxk.chunk.js.map} +1 -1
- package/dist/scripts/{2p_6pVn6.chunk.js → DSPMbDdF.chunk.js} +2 -2
- package/dist/scripts/{2p_6pVn6.chunk.js.map → DSPMbDdF.chunk.js.map} +1 -1
- package/dist/scripts/{Bh-26cqn.chunk.js → Dnz8CbEu.chunk.js} +3 -3
- package/dist/scripts/{Bh-26cqn.chunk.js.map → Dnz8CbEu.chunk.js.map} +1 -1
- package/dist/scripts/{CukXgE1z.chunk.js → Dt5731Ay.chunk.js} +2 -2
- package/dist/scripts/{CukXgE1z.chunk.js.map → Dt5731Ay.chunk.js.map} +1 -1
- package/dist/scripts/{DCPsmD1m.chunk.js → Dtag-27K.chunk.js} +2 -2
- package/dist/scripts/{DCPsmD1m.chunk.js.map → Dtag-27K.chunk.js.map} +1 -1
- package/dist/scripts/{DOCHl5Sy.chunk.js → DyE6EUDb.chunk.js} +2 -2
- package/dist/scripts/{DOCHl5Sy.chunk.js.map → DyE6EUDb.chunk.js.map} +1 -1
- package/dist/scripts/{app-LEZ4B6dG.js → app-BzH1hkoU.js} +4 -4
- package/dist/scripts/{app-LEZ4B6dG.js.map → app-BzH1hkoU.js.map} +1 -1
- package/dist/scripts/{DerPQKk6.chunk.js → cDv6zuhh.chunk.js} +2 -2
- package/dist/scripts/{DerPQKk6.chunk.js.map → cDv6zuhh.chunk.js.map} +1 -1
- package/dist/scripts/{Cl2FZEIX.chunk.js → fMgBORUX.chunk.js} +2 -2
- package/dist/scripts/{Cl2FZEIX.chunk.js.map → fMgBORUX.chunk.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/BILyzh0I.chunk.js +0 -1
- package/dist/scripts/jAtAipGN.chunk.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ft2cSH-j.chunk.js","names":[],"sources":["../../src/shared/flight-requests/TranscriptRequests.ts","../../src/shared/components/play-page/components/play-page-curriculum-links/curriculum-links.module.scss","../../src/shared/components/play-page/components/play-page-curriculum-links/PlayPageCurriculumLinks.tsx","../../src/shared/views/play/components/play-page/PlayPage.tsx","../../src/shared/views/play/hooks/useShowVideoTranscript.ts"],"sourcesContent":["import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\nimport { Chapter, Subtitle } from 'libs/shared/interfaces';\n\nexport interface TranscriptResponse {\n subtitles: Subtitle[];\n chapters: Chapter[];\n}\n\nexport const TranscriptRequests = {\n chaptersAndSubtitles(videoId: string, contentRegion?: string): Flight.PublicRequest {\n const queryStringObj = {\n query: 'subtitles[customer],chapters',\n permissionFilterOption: PermissionFilterOption.StripMetadata,\n contentRegion\n };\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${videoId}`, queryStringObj),\n publicUrl: UrlHelper.urlBuilder(`/api/objects/${videoId}/subtitles`, queryStringObj),\n key: `videos:${videoId}:subtitles:chapters:${PermissionFilterOption.StripMetadata}`,\n formatData: (data: any) => {\n return { subtitles: data.subtitles.data, chapters: data.chapters.data };\n }\n };\n },\n\n subtitleVtt(url: string, subtitleObj: Subtitle): Flight.PublicRequest {\n return {\n url: UrlHelper.urlBuilder(`{player}/srt-to-vtt`, {\n url,\n fullSentences: true\n }),\n publicUrl: UrlHelper.urlBuilder(`/api/player/srt-to-vtt`, {\n url,\n fullSentences: true\n }),\n key: `subtitle:${url}`,\n formatData: (data: any) => {\n return {\n ...subtitleObj,\n vtt: data\n };\n }\n };\n }\n};\n","@import '~styles/utils/include-media';\n:local {\n .dropdown {\n width: 75%;\n \n @include media(\">=md\") {\n width: 50%;\n }\n }\n}","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { SEARCH_CURRICULUM_CODE_PARAM } from 'libs/shared/apps/search/utils/SharedSearchHelper';\nimport { CurriculumDropdown } from 'libs/shared/components/curriculum-links/CurriculumDropdown';\nimport { CurriculumLinks } from 'libs/shared/components/curriculum-links/CurriculumLinks';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurriculumData, Video } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\n\nimport { SearchHelper } from 'apps/search/utils';\n\nimport styles from './curriculum-links.module.scss';\n\nconst namespace = 'shared.curriculumLinks';\n\ninterface PlayPageCurriculumLinksProps {\n curriculums: CurriculumData;\n height: number;\n canViewCurriculumLinks: boolean;\n video: Video;\n headingRef: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n hasNewSearch: boolean;\n}\n\nexport function PlayPageCurriculumLinks(props: PlayPageCurriculumLinksProps): JSX.Element {\n const {\n preferredCurriculum,\n availableCurriculums,\n curriculumLinks,\n updateCurriculum\n } = props.curriculums;\n\n function onChangeCurriculum(curriculumId: string): void {\n updateCurriculum(curriculumId, {\n shouldLog: true,\n locationContext: LocationContext.PlayPage,\n video: props.video\n });\n }\n\n if (!props.canViewCurriculumLinks || (!curriculumLinks?.length && !props.curriculums.mappedCurriculums.length))\n return <></>;\n\n return (\n <section\n id={PlayPageAnchor.CurriculumLinks}\n ref={el => {\n (el && props.headingRef?.current) && props.headingRef.current.set(PlayPageAnchor.CurriculumLinks, el);\n }}\n className='play-page-section'\n >\n <h2 className='h4 me-2 h-100'>\n <Text namespace={namespace} phrase='heading' />\n </h2>\n <CurriculumDropdown\n availableCurriculums={availableCurriculums}\n onChangeCurriculum={onChangeCurriculum}\n selectedCurriculum={preferredCurriculum}\n className={styles.dropdown}\n />\n\n <div className='rounded border position-relative'>\n <Scrollbars autoHeight autoHeightMax={props.height}>\n <div className='p-3'>\n <CurriculumLinks\n curriculumLinks={props.curriculums.curriculumLinks}\n onChangeCurriculum={onChangeCurriculum}\n hasCompleted={props.curriculums.hasCompleted}\n mappedCurriculums={props.curriculums.mappedCurriculums}\n isFetching={props.curriculums.isFetching}\n getCodeAppLink={(query, isCode) => {\n if (!props.hasNewSearch)\n return null;\n \n return SearchHelper.getSearchAppLink(query, { [SEARCH_CURRICULUM_CODE_PARAM]: isCode });\n }}\n locationContext={LocationContext.PlayPage}\n />\n </div>\n </Scrollbars>\n </div>\n </section>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { Breadcrumb, Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { VideoDetailsWithScrollbarV2 } from 'libs/shared/components/play-page/details/VideoDetailsV2';\nimport { hasGlanceData } from 'libs/shared/components/play-page/glance/VideoAtAGlanceUtilsV2';\nimport { VideoAtAGlanceV2 } from 'libs/shared/components/play-page/glance/VideoAtAGlanceV2';\nimport { getResources, PlayPageResources } from 'libs/shared/components/play-page/resources-widget/PlayPageResources';\nimport { PlayPageTranscription } from 'libs/shared/components/play-page/transcription/PlayPageTranscription';\nimport { LanguageNamespaceContext } from 'libs/shared/components/text/Text';\nimport { MINIMUM_GLANCE_HEIGHT } from 'libs/shared/constants/MinimumGlanceHeight';\nimport { SeoConstants } from 'libs/shared/constants/SeoConstants';\nimport { GlobalPlayerConsumer } from 'libs/shared/context/player-context/components/GlobalPlayerConsumer';\nimport { usePlayerContext } from 'libs/shared/context/player-context/PlayerContext';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { useTableOfContentsActiveHeading } from 'libs/shared/hooks/useTableOfContentsActiveHeading';\nimport { useTableOfContentsScroll } from 'libs/shared/hooks/useTableOfContentsScroll';\nimport { Clip, CurrentUser, CurriculumData, InteractiveMetadata, PointOfInterest, PresentationAudience, Subtitle, Video, VttSubtitleResponse } from 'libs/shared/interfaces';\nimport { Chapter } from 'libs/shared/interfaces/Chapter';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\nimport { DownloadHelper } from 'libs/shared/utils/DownloadHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { CitationWidget } from 'shared/components/citations/CitationWidget';\nimport { ArchivedBanner } from 'shared/components/play-page/ArchivedBanner';\nimport { PlayPageClips } from 'shared/components/play-page/components/play-page-clips/PlayPageClips';\nimport { PlayPageCurriculumLinks } from 'shared/components/play-page/components/play-page-curriculum-links/PlayPageCurriculumLinks';\nimport { PlayPageInteractives } from 'shared/components/play-page/components/play-page-interactives/PlayPageInteractives';\nimport { TableOfContentsContainer, TOC_IGNORE_BOUNDARY } from 'shared/components/play-page/components/table-of-contents/TableOfContents';\nimport { PlayPageTitleAndActions } from 'shared/components/play-page/components/title-and-actions/PlayPageTitleAndActions';\nimport { getAppLinks } from 'shared/components/play-page/PlayPageUtils';\nimport { RestrictionBanner } from 'shared/components/play-page/RestrictionBanner';\nimport { PlayerPlaceholder } from 'shared/components/player-placeholder/PlayerPlaceholder';\nimport { RelatedVideos } from 'shared/components/related-videos/RelatedVideos';\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\nimport { RelatedVideosHash } from 'shared/hooks/useGetRelatedVideos';\nimport { VideoFeaturesHash } from 'shared/hooks/useVideoFeatureAccess';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\nimport { useResourcePopup } from 'shared/views/play/components/play-page/hooks/useResourcePopup';\nimport { getContentClassName, getIsTheatreMode, getMainClassName } from 'shared/views/play/components/play-page/PlayPageUtils';\nimport { usePlayPageTableOfContent } from 'shared/views/play/hooks/usePlayPageTableOfContent';\nimport { useSectionHeadings } from 'shared/views/play/hooks/useSectionHeadings';\nimport { useTheatreModeStyle } from 'shared/views/play/hooks/useTheatreStyle';\nimport { PlayPageUtils } from 'shared/views/play/PlayPageUtil';\n\nimport styles from './play-page.module.scss';\n\nconst namespace = 'shared.play';\n\ninterface PlayPageProps {\n presentationSlug: string | null;\n video: Video;\n clips: Clip[];\n interactives: InteractiveMetadata[];\n relatedVideos: RelatedVideosHash;\n audiences: PresentationAudience[];\n currentUser: CurrentUser;\n pointsOfInterest?: PointOfInterest[];\n playNext: boolean;\n shareId?: string;\n curriculums: CurriculumData;\n featureAccess: VideoFeaturesHash;\n params?: PlayViewQueryParams;\n canManageVideoAccess: boolean;\n tableOfContentsId: string;\n shouldShowSideTableOfContents: boolean;\n hasTheatreMode: boolean;\n shouldShowTranscript: boolean;\n hasNewSearch: boolean;\n breadcrumbs?: Breadcrumb[];\n vttSubtitles: VttSubtitleResponse[];\n subtitles: Subtitle[];\n chapters: Chapter[];\n commonVideoProps: CommonVideoProps;\n isBot: boolean;\n playerApiUrl: string;\n liteUrl: string;\n resourcePopupId?: string;\n}\n\nexport function PlayPage(props: PlayPageProps): JSX.Element {\n const playerContext = usePlayerContext();\n const isPaused = playerContext.playerRef.current?.isPaused?.();\n const hasStarted = playerContext.playerRef?.current?.hasStarted?.();\n\n const { hasPermissions } = usePermissions();\n const settings = useSettings(null);\n const { canConsume } = VideoHelper.getCanBeConsumed(props.video);\n\n const theatreMode = getIsTheatreMode(props.hasTheatreMode, playerContext);\n const shouldUseTheatreModeStyle = useTheatreModeStyle(\n props.hasTheatreMode,\n playerContext.mode,\n playerContext.defaultDisplayMode\n );\n\n function toggleTheatreMode(value: boolean) {\n // when exit theatre mode turn off transcript\n if (!value) {\n toggleTranscript(false);\n }\n\n playerContext.setDefaultDisplayMode?.(value ? 'theatre' : 'normal');\n playerContext.playerRef?.current?.toggleTheatreMode?.(value);\n }\n\n function toggleTranscript(value: boolean) {\n playerContext.playerRef?.current?.toggleTranscript?.(value);\n }\n\n const {\n tableOfContentsActiveId,\n setTableOfContentsActiveId,\n controlledId,\n setControlledId,\n tableOfContentsExpanded,\n onToggleTableOfContents\n } = usePlayPageTableOfContent(props.tableOfContentsId, props.hasTheatreMode, theatreMode);\n\n const hasGlance = hasGlanceData(props.video) && props.featureAccess.canViewGlance;\n\n const { headingRef, headingElements } = useSectionHeadings(hasGlance);\n const items = headingElements.map(el => {\n return {\n id: el.id as PlayPageAnchor,\n name: PlayPageUtils.getSectionHeading(\n el.id as PlayPageAnchor,\n {\n clips: props.clips,\n interactives: props.interactives,\n resources: [ ...(props.video.resources?.data ?? []), ...(props.video.links?.data ?? []) ]\n }\n )\n };\n });\n\n const isArchived = VideoHelper.isVideoTypeArchived(props.video);\n const hasStudentExperience = hasPermissions(PermissionName.StudentExperience);\n\n useTableOfContentsActiveHeading({\n setActiveId: setTableOfContentsActiveId,\n headingElements,\n controlledId,\n setControlledId\n });\n\n useTableOfContentsScroll(headingElements, controlledId);\n\n /**\n * Need to use a ref because if we use state, onExitImmersiveReader will have a stale\n * reference of the state. This is because the state is changed in onLaunchImmersiveReader\n * which is passed in at the same time as onExitImmersiveReader\n */\n const shouldPlayOnExitImmersiveReader = React.useRef(false);\n\n const appLinkFns = getAppLinks({ settings, presentationSlug: props.presentationSlug });\n\n const getResourceAppLink = appLinkFns.getResourceAppLink(\n props.video.id,\n props.shareId,\n props.featureAccess.canViewResourceItems\n );\n\n useResourcePopup({\n resourcePopupId: props.resourcePopupId,\n resources: props.video.resources?.data,\n getResourceAppLink\n });\n\n function onLaunchImmersiveReader(): void {\n shouldPlayOnExitImmersiveReader.current = !playerContext?.playerRef?.current?.isPaused();\n playerContext?.playerRef?.current?.pause();\n }\n\n function onExitImmersiveReader(): void {\n if (!shouldPlayOnExitImmersiveReader.current)\n return;\n\n playerContext?.playerRef?.current?.play();\n }\n\n const calcClassNameProps = {\n hasTheatreMode: props.hasTheatreMode,\n shouldShowSideTableOfContents: props.shouldShowSideTableOfContents,\n tableOfContentsExpanded,\n theatreMode: shouldUseTheatreModeStyle\n };\n const mainClassName = getMainClassName(calcClassNameProps);\n const contentClassName = getContentClassName(calcClassNameProps);\n\n const showPlayerPlaceholder = playerContext.mode === 'picture-in-picture' || (props.featureAccess.canViewPublicLayout && !props.video._canBeConsumed.value);\n \n const [ , setContainerClassName ] = useViewModel(ViewModelKeys.PLAY_PAGE_CONTAINER_CLASS_NAME);\n\n const subTextType = props.commonVideoProps.getSubTextType?.(props.video);\n const getSubtextAppLink = props.commonVideoProps.getSubTextAppLink(props.video);\n\n const resources = getResources(props.video, hasPermissions(PermissionName.StudentExperience));\n const downloadableResources = resources.filter(MasterTypeHelper.isResource);\n\n React.useEffect(() => {\n if (!theatreMode) {\n setContainerClassName('');\n } else {\n setContainerClassName(styles.theatreModePlayPageContainer);\n }\n }, [theatreMode]);\n\n React.useEffect(() => {\n return () => setContainerClassName('');\n }, []);\n\n function goToSignUp() {\n Core.AppLinkHelper.trigger({ action: Actions.SignUp.SIGN_UP, application: AppChannels.SIGN_UP });\n }\n\n function onShowTranscriptInVideo() {\n if (!canConsume)\n return goToSignUp();\n\n if (!hasStarted)\n playerContext.playerRef.current?.play();\n\n toggleTranscript(true);\n\n window.scrollTo({ top: 0, behavior: 'smooth' });\n }\n\n function setStartTime(time: number) {\n playerContext.playerRef.current?.currentTime(time);\n }\n\n function onDownloadClick() {\n if (downloadableResources.length === 1) {\n DownloadHelper.downloadResource(\n downloadableResources[0],\n { videoId: props.video?.id, videoName: props.video.name },\n { location: LocationContext.PlayPage, actionType: UserAction.Download, entity: EntityType.Resource }\n );\n return;\n }\n \n Core.AppLinkHelper.trigger({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.RESOURCE_DOWNLOAD,\n args: [ props.video?.id, props.shareId ]\n });\n }\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <div className={`px-4 play-page-sections-container ${props.shouldShowSideTableOfContents ? 'row g-0' : ''}`}>\n <main className={`${styles.main} ${mainClassName}`}>\n {!!props.breadcrumbs?.length && (\n <div className='mb-2'>\n <Breadcrumbs breadcrumbs={props.breadcrumbs} />\n </div>\n )}\n \n <RestrictionBanner\n restrictions={props.video._restrictions}\n yearGroups={props.commonVideoProps.yearGroups}\n objectId={props.video.id}\n objectTypeId={MasterType.Video}\n canManageVideoAccess={props.canManageVideoAccess}\n />\n\n {isArchived && <ArchivedBanner typeId={props.video.typeId} hasStudentExperience={hasStudentExperience} />}\n\n <section\n id={PlayPageAnchor.Video}\n className={`mb-3 ${SeoConstants.GLOBAL_PLAYER_SELECTOR}`}\n ref={el => { (el && headingRef?.current) && headingRef.current.set(PlayPageAnchor.Video, el); }}\n >\n {canConsume && (\n <GlobalPlayerConsumer\n key={props.video.id}\n objectId={props.video.id}\n objectTypeId={props.video.typeId}\n shareId={props.shareId}\n context={props.params?.context}\n contextId={props.params?.contextId}\n playNext={props.params?.playNext}\n moviesAndTv={props.params?.mtv}\n startTime={props.params?.t ?? props.params?.startTime}\n endTime={props.params?.endTime}\n mode='default'\n location='play-page'\n />\n )}\n \n <div className={showPlayerPlaceholder ? '' : 'd-none'}>\n <PlayerPlaceholder\n video={props.video}\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n }}\n type={playerContext.mode === 'picture-in-picture' ? 'pip' : 'public'}\n />\n </div>\n </section>\n\n <div className={contentClassName}>\n <div className={shouldUseTheatreModeStyle ? `${styles.theatreModeLeftContent}` : 'w-100'}>\n <PlayPageTitleAndActions\n presentationSlug={props.presentationSlug}\n media={props.video}\n subTextType={subTextType}\n subtextAppLink={getSubtextAppLink}\n yearGroups={props.commonVideoProps.yearGroups}\n audiences={props.audiences}\n featureAccess={props.featureAccess}\n shareId={props.shareId}\n showTitlePadlock={!props.commonVideoProps.hasStudentExperience\n && !props.commonVideoProps.hasGuestExperience}\n />\n\n {/* if no glance render video details here */}\n {hasGlance ? (\n <VideoAtAGlanceV2\n video={props.video}\n pointsOfInterest={props.pointsOfInterest}\n setStartTime={(time: number) => playerContext.playerRef.current?.currentTime(time)}\n getTagAppLink={appLinkFns.getTagAppLink}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n canViewGlance={hasGlance}\n />\n ) : (\n <VideoDetailsWithScrollbarV2\n video={props.video}\n currentUser={props.currentUser}\n headingRef={headingRef}\n onLaunchImmersiveReader={onLaunchImmersiveReader}\n onExitImmersiveReader={onExitImmersiveReader}\n getTagAppLink={appLinkFns.getTagAppLink}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n getPartnerProfileAppLink={appLinkFns.getPartnerProfileAppLink}\n getPartnerDashboardHubAppLink={appLinkFns.getPartnerDashboardHubAppLink}\n getLibraryAppLink={hasPermissions(PermissionName.ViewLibraries) ? appLinkFns.getLibraryAppLink : null}\n getFolderAppLink={hasPermissions(PermissionName.ViewLibraries) ? appLinkFns.getFolderAppLink : null}\n />\n )}\n\n <PlayPageCurriculumLinks\n height={MINIMUM_GLANCE_HEIGHT}\n curriculums={props.curriculums}\n canViewCurriculumLinks={props.featureAccess.canViewCurriculumLinks}\n headingRef={headingRef}\n video={props.video}\n hasNewSearch={props.hasNewSearch}\n />\n\n <PlayPageResources\n headingRef={headingRef}\n video={props.video}\n canViewResources={props.featureAccess.canViewResourceItems}\n imageCdnUrl={props.commonVideoProps.imageCdnUrl}\n getAppLink={getResourceAppLink}\n analyticsData={{ videoId: props.video.id, videoName: props.video.name }}\n resourceThumbnailFallbackUrl={ImageUrls.Fallbacks.RESOURCE_THUMBNAIL}\n onDownloadClick={onDownloadClick}\n resources={resources}\n downloadableResources={downloadableResources}\n aboutResourcesAppLink={VideoAppLinkHelper.getAboutResourceAppLink()}\n />\n\n <PlayPageInteractives\n presentationSlug={props.presentationSlug}\n headingRef={headingRef}\n video={props.video}\n interactives={props.interactives}\n analyticsData={{ videoId: props.video.id, videoName: props.video.name }}\n canViewInteractives={props.featureAccess.canViewInteractives}\n commonVideoProps={props.commonVideoProps}\n />\n\n <PlayPageClips\n presentationSlug={props.presentationSlug}\n video={props.video}\n headingRef={headingRef}\n clips={props.clips}\n canViewClips={props.featureAccess.canViewClips}\n audiences={props.audiences}\n analyticsData={{ videoId: props.video.id, videoName: props.video.name }}\n commonVideoProps={props.commonVideoProps}\n />\n\n {/* if has glance, render video details here */}\n {hasGlance && (\n <VideoDetailsWithScrollbarV2\n video={props.video}\n currentUser={props.currentUser}\n headingRef={headingRef}\n onLaunchImmersiveReader={onLaunchImmersiveReader}\n onExitImmersiveReader={onExitImmersiveReader}\n getTagAppLink={appLinkFns.getTagAppLink}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n showHeading\n getPartnerProfileAppLink={appLinkFns.getPartnerProfileAppLink}\n getPartnerDashboardHubAppLink={appLinkFns.getPartnerDashboardHubAppLink}\n getLibraryAppLink={appLinkFns.getLibraryAppLink}\n getFolderAppLink={appLinkFns.getFolderAppLink}\n />\n )}\n\n {props.shouldShowTranscript && (\n <PlayPageTranscription\n headingRef={headingRef}\n video={props.video}\n subtitles={props.subtitles}\n vttSubtitles={props.vttSubtitles}\n chapters={props.chapters}\n onShowInVideo={onShowTranscriptInVideo}\n signUpLink={{ action: Actions.SignUp.SIGN_UP, application: AppChannels.SIGN_UP }}\n setStartTime={setStartTime}\n isBot={props.isBot}\n isPaused={isPaused}\n isAuthenticated={props.currentUser.isAuthenticated}\n playerApiUrl={props.playerApiUrl}\n />\n )}\n\n {props.featureAccess.canViewCitations && (\n <CitationWidget\n headingRef={headingRef}\n media={props.video}\n contentRegion={props.currentUser.contentRegion}\n shareId={props.shareId}\n presentationSlug={props.presentationSlug}\n />\n )}\n\n <RelatedVideos\n presentationSlug={props.presentationSlug}\n currentVideo={props.video}\n headingRef={headingRef}\n commonVideoProps={props.commonVideoProps}\n relatedVideos={props.relatedVideos}\n currentUser={props.currentUser}\n getVideoAppLink={(v, opts) => VideoAppLinkHelper.getAppLink(v, {\n ...opts,\n context: props.params.context,\n contextId: props.params.contextId,\n playNext: props.params.playNext,\n shareId: props.shareId,\n moviesAndTv: props.params.mtv,\n includeContext: props.currentUser?.isAuthenticated\n }, props.presentationSlug)}\n audiences={props.audiences}\n moviesAndTv={props.params.mtv}\n />\n </div>\n {theatreMode && (\n <TableOfContentsContainer\n isExpanded={tableOfContentsExpanded}\n setIsExpanded={onToggleTableOfContents}\n toggleTheatreMode={ null}\n items={items}\n activeId={tableOfContentsActiveId}\n setControlledId={setControlledId}\n analyticsData={{ videoId: props.video.id, videoName: props.video.name }}\n showInSide={props.shouldShowSideTableOfContents}\n isTheatreMode={true}\n hasTranscription={props.hasTheatreMode}\n shouldShow={items.length >= TOC_IGNORE_BOUNDARY}\n />\n )}\n </div>\n </main>\n\n {!theatreMode && (\n <TableOfContentsContainer\n isExpanded={tableOfContentsExpanded}\n setIsExpanded={onToggleTableOfContents}\n toggleTheatreMode={props.hasTheatreMode ? toggleTheatreMode : null}\n items={items}\n activeId={tableOfContentsActiveId}\n setControlledId={setControlledId}\n analyticsData={{ videoId: props.video.id, videoName: props.video.name }}\n showInSide={props.shouldShowSideTableOfContents}\n isTheatreMode={false}\n hasTranscription={props.hasTheatreMode}\n shouldShow={items.length >= TOC_IGNORE_BOUNDARY}\n />\n )}\n </div>\n </LanguageNamespaceContext.Provider>\n );\n}\n","import { Flight } from 'libs/common/react/index';\n\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { CurrentUser, Video } from 'libs/shared/interfaces';\n\nimport { useVideoFeatureAccess } from 'shared/hooks/useVideoFeatureAccess';\n\nexport function useShowTranscriptForVideo(videoId: string, shareId?: string) {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const { canViewTranscript } = useVideoFeatureAccess({\n objectId: videoId,\n objectTypeId: MasterType.Video\n });\n\n const video = Flight.useBasicFetch<Video>(\n shareId ? VideoRequests.sharedVideo(videoId, shareId) : VideoRequests.video(videoId)\n );\n\n const shouldShowTranscript = canViewTranscript && !!video.data?._curationTags?.value?.isClickViewCurated;\n return {\n shouldShowTranscript,\n shouldFetchTranscript: shouldShowTranscript && !currentUser.data?.isAuthenticated\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"B3AhKFfz.chunk.js","names":[],"sources":["../../src/shared/flight-requests/TranscriptRequests.ts","../../src/shared/components/play-page/components/play-page-curriculum-links/curriculum-links.module.scss","../../src/shared/components/play-page/components/play-page-curriculum-links/PlayPageCurriculumLinks.tsx","../../src/shared/views/play/components/play-page/PlayPage.tsx","../../src/shared/views/play/hooks/useShowVideoTranscript.ts"],"sourcesContent":["import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\nimport { Chapter, Subtitle } from 'libs/shared/interfaces';\n\nexport interface TranscriptResponse {\n subtitles: Subtitle[];\n chapters: Chapter[];\n}\n\nexport const TranscriptRequests = {\n chaptersAndSubtitles(videoId: string, contentRegion?: string): Flight.PublicRequest {\n const queryStringObj = {\n query: 'subtitles[customer],chapters',\n permissionFilterOption: PermissionFilterOption.StripMetadata,\n contentRegion\n };\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${videoId}`, queryStringObj),\n publicUrl: UrlHelper.urlBuilder(`/api/objects/${videoId}/subtitles`, queryStringObj),\n key: `videos:${videoId}:subtitles:chapters:${PermissionFilterOption.StripMetadata}`,\n formatData: (data: any) => {\n return { subtitles: data.subtitles.data, chapters: data.chapters.data };\n }\n };\n },\n\n subtitleVtt(url: string, subtitleObj: Subtitle): Flight.PublicRequest {\n return {\n url: UrlHelper.urlBuilder(`{player}/srt-to-vtt`, {\n url,\n fullSentences: true\n }),\n publicUrl: UrlHelper.urlBuilder(`/api/player/srt-to-vtt`, {\n url,\n fullSentences: true\n }),\n key: `subtitle:${url}`,\n formatData: (data: any) => {\n return {\n ...subtitleObj,\n vtt: data\n };\n }\n };\n }\n};\n","@import '~styles/utils/include-media';\n:local {\n .dropdown {\n width: 75%;\n \n @include media(\">=md\") {\n width: 50%;\n }\n }\n}","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { SEARCH_CURRICULUM_CODE_PARAM } from 'libs/shared/apps/search/utils/SharedSearchHelper';\nimport { CurriculumDropdown } from 'libs/shared/components/curriculum-links/CurriculumDropdown';\nimport { CurriculumLinks } from 'libs/shared/components/curriculum-links/CurriculumLinks';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurriculumData, Video } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\n\nimport { SearchHelper } from 'apps/search/utils';\n\nimport styles from './curriculum-links.module.scss';\n\nconst namespace = 'shared.curriculumLinks';\n\ninterface PlayPageCurriculumLinksProps {\n curriculums: CurriculumData;\n height: number;\n canViewCurriculumLinks: boolean;\n video: Video;\n headingRef: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n hasNewSearch: boolean;\n}\n\nexport function PlayPageCurriculumLinks(props: PlayPageCurriculumLinksProps): JSX.Element {\n const {\n preferredCurriculum,\n availableCurriculums,\n curriculumLinks,\n updateCurriculum\n } = props.curriculums;\n\n function onChangeCurriculum(curriculumId: string): void {\n updateCurriculum(curriculumId, {\n shouldLog: true,\n locationContext: LocationContext.PlayPage,\n video: props.video\n });\n }\n\n if (!props.canViewCurriculumLinks || (!curriculumLinks?.length && !props.curriculums.mappedCurriculums.length))\n return <></>;\n\n return (\n <section\n id={PlayPageAnchor.CurriculumLinks}\n ref={el => {\n (el && props.headingRef?.current) && props.headingRef.current.set(PlayPageAnchor.CurriculumLinks, el);\n }}\n className='play-page-section'\n >\n <h2 className='h4 me-2 h-100'>\n <Text namespace={namespace} phrase='heading' />\n </h2>\n <CurriculumDropdown\n availableCurriculums={availableCurriculums}\n onChangeCurriculum={onChangeCurriculum}\n selectedCurriculum={preferredCurriculum}\n className={styles.dropdown}\n />\n\n <div className='rounded border position-relative'>\n <Scrollbars autoHeight autoHeightMax={props.height}>\n <div className='p-3'>\n <CurriculumLinks\n curriculumLinks={props.curriculums.curriculumLinks}\n onChangeCurriculum={onChangeCurriculum}\n hasCompleted={props.curriculums.hasCompleted}\n mappedCurriculums={props.curriculums.mappedCurriculums}\n isFetching={props.curriculums.isFetching}\n getCodeAppLink={(query, isCode) => {\n if (!props.hasNewSearch)\n return null;\n \n return SearchHelper.getSearchAppLink(query, { [SEARCH_CURRICULUM_CODE_PARAM]: isCode });\n }}\n locationContext={LocationContext.PlayPage}\n />\n </div>\n </Scrollbars>\n </div>\n </section>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { Breadcrumb, Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { VideoDetailsWithScrollbarV2 } from 'libs/shared/components/play-page/details/VideoDetailsV2';\nimport { hasGlanceData } from 'libs/shared/components/play-page/glance/VideoAtAGlanceUtilsV2';\nimport { VideoAtAGlanceV2 } from 'libs/shared/components/play-page/glance/VideoAtAGlanceV2';\nimport { getResources, PlayPageResources } from 'libs/shared/components/play-page/resources-widget/PlayPageResources';\nimport { PlayPageTranscription } from 'libs/shared/components/play-page/transcription/PlayPageTranscription';\nimport { LanguageNamespaceContext } from 'libs/shared/components/text/Text';\nimport { MINIMUM_GLANCE_HEIGHT } from 'libs/shared/constants/MinimumGlanceHeight';\nimport { SeoConstants } from 'libs/shared/constants/SeoConstants';\nimport { GlobalPlayerConsumer } from 'libs/shared/context/player-context/components/GlobalPlayerConsumer';\nimport { usePlayerContext } from 'libs/shared/context/player-context/PlayerContext';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { useTableOfContentsActiveHeading } from 'libs/shared/hooks/useTableOfContentsActiveHeading';\nimport { useTableOfContentsScroll } from 'libs/shared/hooks/useTableOfContentsScroll';\nimport { Clip, CurrentUser, CurriculumData, InteractiveMetadata, PointOfInterest, PresentationAudience, Subtitle, Video, VttSubtitleResponse } from 'libs/shared/interfaces';\nimport { Chapter } from 'libs/shared/interfaces/Chapter';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\nimport { DownloadHelper } from 'libs/shared/utils/DownloadHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { CitationWidget } from 'shared/components/citations/CitationWidget';\nimport { ArchivedBanner } from 'shared/components/play-page/ArchivedBanner';\nimport { PlayPageClips } from 'shared/components/play-page/components/play-page-clips/PlayPageClips';\nimport { PlayPageCurriculumLinks } from 'shared/components/play-page/components/play-page-curriculum-links/PlayPageCurriculumLinks';\nimport { PlayPageInteractives } from 'shared/components/play-page/components/play-page-interactives/PlayPageInteractives';\nimport { TableOfContentsContainer, TOC_IGNORE_BOUNDARY } from 'shared/components/play-page/components/table-of-contents/TableOfContents';\nimport { PlayPageTitleAndActions } from 'shared/components/play-page/components/title-and-actions/PlayPageTitleAndActions';\nimport { getAppLinks } from 'shared/components/play-page/PlayPageUtils';\nimport { RestrictionBanner } from 'shared/components/play-page/RestrictionBanner';\nimport { PlayerPlaceholder } from 'shared/components/player-placeholder/PlayerPlaceholder';\nimport { RelatedVideos } from 'shared/components/related-videos/RelatedVideos';\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\nimport { RelatedVideosHash } from 'shared/hooks/useGetRelatedVideos';\nimport { VideoFeaturesHash } from 'shared/hooks/useVideoFeatureAccess';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\nimport { useResourcePopup } from 'shared/views/play/components/play-page/hooks/useResourcePopup';\nimport { getContentClassName, getIsTheatreMode, getMainClassName } from 'shared/views/play/components/play-page/PlayPageUtils';\nimport { usePlayPageTableOfContent } from 'shared/views/play/hooks/usePlayPageTableOfContent';\nimport { useSectionHeadings } from 'shared/views/play/hooks/useSectionHeadings';\nimport { useTheatreModeStyle } from 'shared/views/play/hooks/useTheatreStyle';\nimport { PlayPageUtils } from 'shared/views/play/PlayPageUtil';\n\nimport styles from './play-page.module.scss';\n\nconst namespace = 'shared.play';\n\ninterface PlayPageProps {\n presentationSlug: string | null;\n video: Video;\n clips: Clip[];\n interactives: InteractiveMetadata[];\n relatedVideos: RelatedVideosHash;\n audiences: PresentationAudience[];\n currentUser: CurrentUser;\n pointsOfInterest?: PointOfInterest[];\n playNext: boolean;\n shareId?: string;\n curriculums: CurriculumData;\n featureAccess: VideoFeaturesHash;\n params?: PlayViewQueryParams;\n canManageVideoAccess: boolean;\n tableOfContentsId: string;\n shouldShowSideTableOfContents: boolean;\n hasTheatreMode: boolean;\n shouldShowTranscript: boolean;\n hasNewSearch: boolean;\n breadcrumbs?: Breadcrumb[];\n vttSubtitles: VttSubtitleResponse[];\n subtitles: Subtitle[];\n chapters: Chapter[];\n commonVideoProps: CommonVideoProps;\n isBot: boolean;\n playerApiUrl: string;\n liteUrl: string;\n resourcePopupId?: string;\n}\n\nexport function PlayPage(props: PlayPageProps): JSX.Element {\n const playerContext = usePlayerContext();\n const isPaused = playerContext.playerRef.current?.isPaused?.();\n const hasStarted = playerContext.playerRef?.current?.hasStarted?.();\n\n const { hasPermissions } = usePermissions();\n const settings = useSettings(null);\n const { canConsume } = VideoHelper.getCanBeConsumed(props.video);\n\n const theatreMode = getIsTheatreMode(props.hasTheatreMode, playerContext);\n const shouldUseTheatreModeStyle = useTheatreModeStyle(\n props.hasTheatreMode,\n playerContext.mode,\n playerContext.defaultDisplayMode\n );\n\n function toggleTheatreMode(value: boolean) {\n // when exit theatre mode turn off transcript\n if (!value) {\n toggleTranscript(false);\n }\n\n playerContext.setDefaultDisplayMode?.(value ? 'theatre' : 'normal');\n playerContext.playerRef?.current?.toggleTheatreMode?.(value);\n }\n\n function toggleTranscript(value: boolean) {\n playerContext.playerRef?.current?.toggleTranscript?.(value);\n }\n\n const {\n tableOfContentsActiveId,\n setTableOfContentsActiveId,\n controlledId,\n setControlledId,\n tableOfContentsExpanded,\n onToggleTableOfContents\n } = usePlayPageTableOfContent(props.tableOfContentsId, props.hasTheatreMode, theatreMode);\n\n const hasGlance = hasGlanceData(props.video) && props.featureAccess.canViewGlance;\n\n const { headingRef, headingElements } = useSectionHeadings(hasGlance);\n const items = headingElements.map(el => {\n return {\n id: el.id as PlayPageAnchor,\n name: PlayPageUtils.getSectionHeading(\n el.id as PlayPageAnchor,\n {\n clips: props.clips,\n interactives: props.interactives,\n resources: [ ...(props.video.resources?.data ?? []), ...(props.video.links?.data ?? []) ]\n }\n )\n };\n });\n\n const isArchived = VideoHelper.isVideoTypeArchived(props.video);\n const hasStudentExperience = hasPermissions(PermissionName.StudentExperience);\n\n useTableOfContentsActiveHeading({\n setActiveId: setTableOfContentsActiveId,\n headingElements,\n controlledId,\n setControlledId\n });\n\n useTableOfContentsScroll(headingElements, controlledId);\n\n /**\n * Need to use a ref because if we use state, onExitImmersiveReader will have a stale\n * reference of the state. This is because the state is changed in onLaunchImmersiveReader\n * which is passed in at the same time as onExitImmersiveReader\n */\n const shouldPlayOnExitImmersiveReader = React.useRef(false);\n\n const appLinkFns = getAppLinks({ settings, presentationSlug: props.presentationSlug });\n\n const getResourceAppLink = appLinkFns.getResourceAppLink(\n props.video.id,\n props.shareId,\n props.featureAccess.canViewResourceItems\n );\n\n useResourcePopup({\n resourcePopupId: props.resourcePopupId,\n resources: props.video.resources?.data,\n getResourceAppLink\n });\n\n function onLaunchImmersiveReader(): void {\n shouldPlayOnExitImmersiveReader.current = !playerContext?.playerRef?.current?.isPaused();\n playerContext?.playerRef?.current?.pause();\n }\n\n function onExitImmersiveReader(): void {\n if (!shouldPlayOnExitImmersiveReader.current)\n return;\n\n playerContext?.playerRef?.current?.play();\n }\n\n const calcClassNameProps = {\n hasTheatreMode: props.hasTheatreMode,\n shouldShowSideTableOfContents: props.shouldShowSideTableOfContents,\n tableOfContentsExpanded,\n theatreMode: shouldUseTheatreModeStyle\n };\n const mainClassName = getMainClassName(calcClassNameProps);\n const contentClassName = getContentClassName(calcClassNameProps);\n\n const showPlayerPlaceholder = playerContext.mode === 'picture-in-picture' || (props.featureAccess.canViewPublicLayout && !props.video._canBeConsumed.value);\n \n const [ , setContainerClassName ] = useViewModel(ViewModelKeys.PLAY_PAGE_CONTAINER_CLASS_NAME);\n\n const subTextType = props.commonVideoProps.getSubTextType?.(props.video);\n const getSubtextAppLink = props.commonVideoProps.getSubTextAppLink(props.video);\n\n const resources = getResources(props.video, hasPermissions(PermissionName.StudentExperience));\n const downloadableResources = resources.filter(MasterTypeHelper.isResource);\n\n React.useEffect(() => {\n if (!theatreMode) {\n setContainerClassName('');\n } else {\n setContainerClassName(styles.theatreModePlayPageContainer);\n }\n }, [theatreMode]);\n\n React.useEffect(() => {\n return () => setContainerClassName('');\n }, []);\n\n function goToSignUp() {\n Core.AppLinkHelper.trigger({ action: Actions.SignUp.SIGN_UP, application: AppChannels.SIGN_UP });\n }\n\n function onShowTranscriptInVideo() {\n if (!canConsume)\n return goToSignUp();\n\n if (!hasStarted)\n playerContext.playerRef.current?.play();\n\n toggleTranscript(true);\n\n window.scrollTo({ top: 0, behavior: 'smooth' });\n }\n\n function setStartTime(time: number) {\n playerContext.playerRef.current?.currentTime(time);\n }\n\n function onDownloadClick() {\n if (downloadableResources.length === 1) {\n DownloadHelper.downloadResource(\n downloadableResources[0],\n { videoId: props.video?.id, videoName: props.video.name },\n { location: LocationContext.PlayPage, actionType: UserAction.Download, entity: EntityType.Resource }\n );\n return;\n }\n \n Core.AppLinkHelper.trigger({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.RESOURCE_DOWNLOAD,\n args: [ props.video?.id, props.shareId ]\n });\n }\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <div className={`px-4 play-page-sections-container ${props.shouldShowSideTableOfContents ? 'row g-0' : ''}`}>\n <main className={`${styles.main} ${mainClassName}`}>\n {!!props.breadcrumbs?.length && (\n <div className='mb-2'>\n <Breadcrumbs breadcrumbs={props.breadcrumbs} />\n </div>\n )}\n \n <RestrictionBanner\n restrictions={props.video._restrictions}\n yearGroups={props.commonVideoProps.yearGroups}\n objectId={props.video.id}\n objectTypeId={MasterType.Video}\n canManageVideoAccess={props.canManageVideoAccess}\n />\n\n {isArchived && <ArchivedBanner typeId={props.video.typeId} hasStudentExperience={hasStudentExperience} />}\n\n <section\n id={PlayPageAnchor.Video}\n className={`mb-3 ${SeoConstants.GLOBAL_PLAYER_SELECTOR}`}\n ref={el => { (el && headingRef?.current) && headingRef.current.set(PlayPageAnchor.Video, el); }}\n >\n {canConsume && (\n <GlobalPlayerConsumer\n key={props.video.id}\n objectId={props.video.id}\n objectTypeId={props.video.typeId}\n shareId={props.shareId}\n context={props.params?.context}\n contextId={props.params?.contextId}\n playNext={props.params?.playNext}\n moviesAndTv={props.params?.mtv}\n startTime={props.params?.t ?? props.params?.startTime}\n endTime={props.params?.endTime}\n mode='default'\n location='play-page'\n />\n )}\n \n <div className={showPlayerPlaceholder ? '' : 'd-none'}>\n <PlayerPlaceholder\n video={props.video}\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n }}\n type={playerContext.mode === 'picture-in-picture' ? 'pip' : 'public'}\n />\n </div>\n </section>\n\n <div className={contentClassName}>\n <div className={shouldUseTheatreModeStyle ? `${styles.theatreModeLeftContent}` : 'w-100'}>\n <PlayPageTitleAndActions\n presentationSlug={props.presentationSlug}\n media={props.video}\n subTextType={subTextType}\n subtextAppLink={getSubtextAppLink}\n yearGroups={props.commonVideoProps.yearGroups}\n audiences={props.audiences}\n featureAccess={props.featureAccess}\n shareId={props.shareId}\n showTitlePadlock={!props.commonVideoProps.hasStudentExperience\n && !props.commonVideoProps.hasGuestExperience}\n />\n\n {/* if no glance render video details here */}\n {hasGlance ? (\n <VideoAtAGlanceV2\n video={props.video}\n pointsOfInterest={props.pointsOfInterest}\n setStartTime={(time: number) => playerContext.playerRef.current?.currentTime(time)}\n getTagAppLink={appLinkFns.getTagAppLink}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n canViewGlance={hasGlance}\n />\n ) : (\n <VideoDetailsWithScrollbarV2\n video={props.video}\n currentUser={props.currentUser}\n headingRef={headingRef}\n onLaunchImmersiveReader={onLaunchImmersiveReader}\n onExitImmersiveReader={onExitImmersiveReader}\n getTagAppLink={appLinkFns.getTagAppLink}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n getPartnerProfileAppLink={appLinkFns.getPartnerProfileAppLink}\n getPartnerDashboardHubAppLink={appLinkFns.getPartnerDashboardHubAppLink}\n getLibraryAppLink={hasPermissions(PermissionName.ViewLibraries) ? appLinkFns.getLibraryAppLink : null}\n getFolderAppLink={hasPermissions(PermissionName.ViewLibraries) ? appLinkFns.getFolderAppLink : null}\n />\n )}\n\n <PlayPageCurriculumLinks\n height={MINIMUM_GLANCE_HEIGHT}\n curriculums={props.curriculums}\n canViewCurriculumLinks={props.featureAccess.canViewCurriculumLinks}\n headingRef={headingRef}\n video={props.video}\n hasNewSearch={props.hasNewSearch}\n />\n\n <PlayPageResources\n headingRef={headingRef}\n video={props.video}\n canViewResources={props.featureAccess.canViewResourceItems}\n imageCdnUrl={props.commonVideoProps.imageCdnUrl}\n getAppLink={getResourceAppLink}\n analyticsData={{ videoId: props.video.id, videoName: props.video.name }}\n resourceThumbnailFallbackUrl={ImageUrls.Fallbacks.RESOURCE_THUMBNAIL}\n onDownloadClick={onDownloadClick}\n resources={resources}\n downloadableResources={downloadableResources}\n aboutResourcesAppLink={VideoAppLinkHelper.getAboutResourceAppLink()}\n />\n\n <PlayPageInteractives\n presentationSlug={props.presentationSlug}\n headingRef={headingRef}\n video={props.video}\n interactives={props.interactives}\n analyticsData={{ videoId: props.video.id, videoName: props.video.name }}\n canViewInteractives={props.featureAccess.canViewInteractives}\n commonVideoProps={props.commonVideoProps}\n />\n\n <PlayPageClips\n presentationSlug={props.presentationSlug}\n video={props.video}\n headingRef={headingRef}\n clips={props.clips}\n canViewClips={props.featureAccess.canViewClips}\n audiences={props.audiences}\n analyticsData={{ videoId: props.video.id, videoName: props.video.name }}\n commonVideoProps={props.commonVideoProps}\n />\n\n {/* if has glance, render video details here */}\n {hasGlance && (\n <VideoDetailsWithScrollbarV2\n video={props.video}\n currentUser={props.currentUser}\n headingRef={headingRef}\n onLaunchImmersiveReader={onLaunchImmersiveReader}\n onExitImmersiveReader={onExitImmersiveReader}\n getTagAppLink={appLinkFns.getTagAppLink}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n showHeading\n getPartnerProfileAppLink={appLinkFns.getPartnerProfileAppLink}\n getPartnerDashboardHubAppLink={appLinkFns.getPartnerDashboardHubAppLink}\n getLibraryAppLink={appLinkFns.getLibraryAppLink}\n getFolderAppLink={appLinkFns.getFolderAppLink}\n />\n )}\n\n {props.shouldShowTranscript && (\n <PlayPageTranscription\n headingRef={headingRef}\n video={props.video}\n subtitles={props.subtitles}\n vttSubtitles={props.vttSubtitles}\n chapters={props.chapters}\n onShowInVideo={onShowTranscriptInVideo}\n signUpLink={{ action: Actions.SignUp.SIGN_UP, application: AppChannels.SIGN_UP }}\n setStartTime={setStartTime}\n isBot={props.isBot}\n isPaused={isPaused}\n isAuthenticated={props.currentUser.isAuthenticated}\n playerApiUrl={props.playerApiUrl}\n />\n )}\n\n {props.featureAccess.canViewCitations && (\n <CitationWidget\n headingRef={headingRef}\n media={props.video}\n contentRegion={props.currentUser.contentRegion}\n shareId={props.shareId}\n presentationSlug={props.presentationSlug}\n />\n )}\n\n <RelatedVideos\n presentationSlug={props.presentationSlug}\n currentVideo={props.video}\n headingRef={headingRef}\n commonVideoProps={props.commonVideoProps}\n relatedVideos={props.relatedVideos}\n currentUser={props.currentUser}\n getVideoAppLink={(v, opts) => VideoAppLinkHelper.getAppLink(v, {\n ...opts,\n context: props.params.context,\n contextId: props.params.contextId,\n playNext: props.params.playNext,\n shareId: props.shareId,\n moviesAndTv: props.params.mtv,\n includeContext: props.currentUser?.isAuthenticated\n }, props.presentationSlug)}\n audiences={props.audiences}\n moviesAndTv={props.params.mtv}\n />\n </div>\n {theatreMode && (\n <TableOfContentsContainer\n isExpanded={tableOfContentsExpanded}\n setIsExpanded={onToggleTableOfContents}\n toggleTheatreMode={ null}\n items={items}\n activeId={tableOfContentsActiveId}\n setControlledId={setControlledId}\n analyticsData={{ videoId: props.video.id, videoName: props.video.name }}\n showInSide={props.shouldShowSideTableOfContents}\n isTheatreMode={true}\n hasTranscription={props.hasTheatreMode}\n shouldShow={items.length >= TOC_IGNORE_BOUNDARY}\n />\n )}\n </div>\n </main>\n\n {!theatreMode && (\n <TableOfContentsContainer\n isExpanded={tableOfContentsExpanded}\n setIsExpanded={onToggleTableOfContents}\n toggleTheatreMode={props.hasTheatreMode ? toggleTheatreMode : null}\n items={items}\n activeId={tableOfContentsActiveId}\n setControlledId={setControlledId}\n analyticsData={{ videoId: props.video.id, videoName: props.video.name }}\n showInSide={props.shouldShowSideTableOfContents}\n isTheatreMode={false}\n hasTranscription={props.hasTheatreMode}\n shouldShow={items.length >= TOC_IGNORE_BOUNDARY}\n />\n )}\n </div>\n </LanguageNamespaceContext.Provider>\n );\n}\n","import { Flight } from 'libs/common/react/index';\n\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { CurrentUser, Video } from 'libs/shared/interfaces';\n\nimport { useVideoFeatureAccess } from 'shared/hooks/useVideoFeatureAccess';\n\nexport function useShowTranscriptForVideo(videoId: string, shareId?: string) {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const { canViewTranscript } = useVideoFeatureAccess({\n objectId: videoId,\n objectTypeId: MasterType.Video\n });\n\n const video = Flight.useBasicFetch<Video>(\n shareId ? VideoRequests.sharedVideo(videoId, shareId) : VideoRequests.video(videoId)\n );\n\n const shouldShowTranscript = canViewTranscript && !!video.data?._curationTags?.value?.isClickViewCurated;\n return {\n shouldShowTranscript,\n shouldFetchTranscript: shouldShowTranscript && !currentUser.data?.isAuthenticated\n };\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"./DAXXjFlN.chunk.js";import{n as e}from"./B785hxeE.chunk.js";import{t}from"./C2w0pmFW.chunk.js";import{t as n}from"./wrLrTezN.chunk.js";import{d as r,u as i}from"./BX0wDJmp.chunk.js";import{y as a}from"./NlCAcBdo.chunk.js";import{t as o}from"./DGmmTRu72.chunk.js";import{t as s}from"./DZssmXj6.chunk.js";import{t as c}from"./BC8PeYqm.chunk.js";import{t as l}from"./LoQS6GjP.chunk.js";import{t as u}from"./CqrjHjAN.chunk.js";import{t as d}from"./D_gWf2lC.chunk.js";import{t as f}from"./CZbN8PTA.chunk.js";import{n as p,t as m}from"./C6-aC3vu.chunk.js";import{t as h}from"./7LGxCHGV.chunk.js";import{t as g}from"./B3gsVN-_.chunk.js";import{l as _,r as v}from"./
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import"./DAXXjFlN.chunk.js";import{n as e}from"./B785hxeE.chunk.js";import{t}from"./C2w0pmFW.chunk.js";import{t as n}from"./wrLrTezN.chunk.js";import{d as r,u as i}from"./BX0wDJmp.chunk.js";import{y as a}from"./NlCAcBdo.chunk.js";import{t as o}from"./DGmmTRu72.chunk.js";import{t as s}from"./DZssmXj6.chunk.js";import{t as c}from"./BC8PeYqm.chunk.js";import{t as l}from"./LoQS6GjP.chunk.js";import{t as u}from"./CqrjHjAN.chunk.js";import{t as d}from"./D_gWf2lC.chunk.js";import{t as f}from"./CZbN8PTA.chunk.js";import{n as p,t as m}from"./C6-aC3vu.chunk.js";import{t as h}from"./7LGxCHGV.chunk.js";import{t as g}from"./B3gsVN-_.chunk.js";import{l as _,r as v}from"./D-iyHqNw2.chunk.js";import{t as y}from"./B_-pJtOI2.chunk.js";import{t as b}from"./C1loT8MD2.chunk.js";import{t as x}from"./CpKc1O_Y.chunk.js";import{n as S}from"./ChnNWPOK2.chunk.js";import{t as C}from"./DMaQV7L2.chunk.js";import{t as w}from"./CCb14vhF.chunk.js";import{t as T}from"./BnuuRu_J2.chunk.js";import{t as E}from"./CC5Dr9aG.chunk.js";import{t as D}from"./DNuJUXpr2.chunk.js";import{v as O}from"./Bld7iWR52.chunk.js";import{n as k,r as A,t as j}from"./B3AhKFfz.chunk.js";t();var M=n();function N(t){let{commonVideoProps:n,hasCommonVideoPropsCompleted:N}=T({locationContext:a.VideoThumbnail}),{hasPermissions:P}=g(),ee=O(),{activePresentation:F}=f(),{hasPlayPageTranscript:I,hasNewSearch:L}=o(null),R=i(u.currentUser()),z=i(l.sharedVideo(t.objectId,t.shareId)),B=b({objectId:z.data?.id,objectTypeId:z.data?.typeId}),V=i(B.canViewClips&&s.videoClips(t.objectId)),H=i(B.canViewInteractives&&c.videoInteractives(t.objectId)),U=v({video:z.data,context:t.queryParams.context,contextId:t.queryParams.contextId,moviesAndTv:t.queryParams.mtv,currentUser:R.data}),W=_(t.objectId),G=i(!!F&&C.audiencesByPresentationId(F.id)),{shouldFetchTranscript:K,shouldShowTranscript:q}=j(t.objectId,t.shareId),{subtitles:J,chapters:Y}=i(K&&R.data?.contentRegion&&A.chaptersAndSubtitles(t.objectId,R.data.contentRegion))?.data||{},X=J?.filter(e=>!e.customer),Z=r(X&&X.length>0?X.map(e=>A.subtitleVtt(e.url,e)):[]),Q=X?.filter(e=>Z.data.find(t=>t.id===e.id))||[],$=i(d.config());m(p.getVideoMetadata({content:z.data,canonicalLink:y.getCanonicalLink({stripPresentationSlug:!0}),allowIndexing:!1})),D(U.videos??[]),h(z,{private:x}),S({id:t.objectId,app:`videos`,shareId:t.shareId});let te=E({name:z.data?.name}),ne=w(t.objectId);return z.data&&R.hasCompleted&&W.hasCompleted&&N?(0,M.jsx)(`div`,{className:`px-3`,children:(0,M.jsx)(k,{presentationSlug:null,video:z.data,clips:V.data?.data,interactives:H.data?.data,curriculums:ne,relatedVideos:U,currentUser:R.data,pointsOfInterest:W?.items,playNext:t.queryParams?.playNext,shareId:t.shareId,featureAccess:B,audiences:G.data,params:t.queryParams,canManageVideoAccess:P(e.ManageVideoAccess),tableOfContentsId:t.queryParams?.tocId,shouldShowSideTableOfContents:ee,breadcrumbs:te,commonVideoProps:n,hasTheatreMode:I,shouldShowTranscript:q&&(!K||Z.data?.length>0),vttSubtitles:Z.data||[],subtitles:Q,chapters:Y,isBot:y.isBot(),playerApiUrl:$.data?.playerApiUrl,hasNewSearch:L,liteUrl:$.data.liteUrl})}):(0,M.jsx)(M.Fragment,{})}export{N as PlaySharedVideoView};
|
|
2
|
+
//# sourceMappingURL=B3y60nT5.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"B3y60nT5.chunk.js","names":[],"sources":["../../src/apps/share/views/play-shared-video/PlaySharedVideoView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useBreadcrumbs } from 'libs/shared/hooks/useBreadcrumbs';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { ClipCollection, Config, CurrentUser, InteractiveCollection, PresentationAudience, Video, VttSubtitleResponse } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { TranscriptRequests, TranscriptResponse } from 'shared/flight-requests/TranscriptRequests';\nimport { useActivePresentation } from 'shared/hooks/presentations/useActivePresentation';\nimport { useCommonVideoProps } from 'shared/hooks/useCommonVideoProps';\nimport { useCurriculums } from 'shared/hooks/useCurriculums';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { useFetchPointsOfInterest } from 'shared/hooks/useFetchPointsOfInterest';\nimport { useGetRelatedVideos } from 'shared/hooks/useGetRelatedVideos';\nimport { useVideoFeatureAccess } from 'shared/hooks/useVideoFeatureAccess';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\nimport { PlayPage } from 'shared/views/play/components/play-page/PlayPage';\nimport { useShouldShowSideTableOfContents } from 'shared/views/play/hooks/useShouldShowTableOfContents';\nimport { useShowTranscriptForVideo } from 'shared/views/play/hooks/useShowVideoTranscript';\n\nimport { ShareLinkPrivateError } from 'apps/share/errors/share-link-private/ShareLinkPrivateError';\nimport { ShareLinkViewProps } from 'apps/share/interfaces/ShareLinkViewProps';\n\nexport function PlaySharedVideoView(props: ShareLinkViewProps): React.ReactElement {\n const {\n commonVideoProps,\n hasCommonVideoPropsCompleted\n } = useCommonVideoProps({ locationContext: LocationContext.VideoThumbnail });\n\n const { hasPermissions } = usePermissions();\n\n const shouldShowSideTableOfContents = useShouldShowSideTableOfContents();\n\n const { activePresentation } = useActivePresentation();\n const { hasPlayPageTranscript, hasNewSearch } = useSettings(null);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<Video>(\n VideoRequests.sharedVideo(props.objectId, props.shareId)\n );\n\n const featureAccess = useVideoFeatureAccess({\n objectId: video.data?.id,\n objectTypeId: video.data?.typeId\n });\n \n const clips = Flight.useBasicFetch<ClipCollection>(\n featureAccess.canViewClips && ClipRequests.videoClips(props.objectId)\n );\n const interactives = Flight.useBasicFetch<InteractiveCollection>(\n featureAccess.canViewInteractives && InteractiveRequests.videoInteractives(props.objectId)\n );\n const relatedVideos = useGetRelatedVideos({\n video: video.data,\n context: props.queryParams.context,\n contextId: props.queryParams.contextId,\n moviesAndTv: props.queryParams.mtv,\n currentUser: currentUser.data\n });\n const pointsOfInterest = useFetchPointsOfInterest(props.objectId);\n \n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n !!activePresentation &&\n AudienceRequests.audiencesByPresentationId(activePresentation.id)\n );\n\n const { shouldFetchTranscript, shouldShowTranscript } = useShowTranscriptForVideo(props.objectId, props.shareId);\n const transcript = Flight.useBasicFetch<TranscriptResponse>(\n shouldFetchTranscript && currentUser.data?.contentRegion &&\n TranscriptRequests.chaptersAndSubtitles(props.objectId, currentUser.data.contentRegion)\n );\n const { subtitles: allSubtitles, chapters } = transcript?.data || {};\n // only show transcript for ClickView produced subtitle \n const subtitles = allSubtitles?.filter(subtitle => !subtitle.customer);\n \n const captionsRequests = (subtitles && subtitles.length > 0) ?\n subtitles.map(subtitle => TranscriptRequests.subtitleVtt(subtitle.url, subtitle)) :\n [];\n const captions = Flight.useBasicFetchAll<VttSubtitleResponse>(captionsRequests);\n const filteredSubtitles = subtitles?.filter(\n subtitle => captions.data.find(caption => caption.id === subtitle.id)\n ) || [];\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n useSetPageMetadata(PageMetadataHelper.getVideoMetadata({\n content: video.data,\n canonicalLink: SeoHelper.getCanonicalLink({ stripPresentationSlug: true }),\n allowIndexing: false\n }));\n\n useVideoMixin(relatedVideos.videos ?? []);\n useCannotConsumeError(video, { private: ShareLinkPrivateError });\n useDeepLinks({ id: props.objectId, app: 'videos', shareId: props.shareId });\n\n const breadcrumbs = useBreadcrumbs({ name: video.data?.name });\n\n const curriculums = useCurriculums(props.objectId);\n\n const dataLoaded = (\n video.data &&\n currentUser.hasCompleted &&\n pointsOfInterest.hasCompleted &&\n hasCommonVideoPropsCompleted\n );\n\n if (!dataLoaded)\n return <></>;\n\n return (\n <div className='px-3'>\n <PlayPage\n presentationSlug={null}\n video={video.data}\n clips={clips.data?.data}\n interactives={interactives.data?.data}\n curriculums={curriculums}\n relatedVideos={relatedVideos}\n currentUser={currentUser.data}\n pointsOfInterest={pointsOfInterest?.items}\n playNext={props.queryParams?.playNext}\n shareId={props.shareId}\n featureAccess={featureAccess}\n audiences={audiences.data}\n params={props.queryParams}\n canManageVideoAccess={hasPermissions(PermissionName.ManageVideoAccess)}\n tableOfContentsId={props.queryParams?.tocId}\n shouldShowSideTableOfContents={shouldShowSideTableOfContents}\n breadcrumbs={breadcrumbs}\n commonVideoProps={commonVideoProps}\n hasTheatreMode={hasPlayPageTranscript}\n shouldShowTranscript={shouldShowTranscript && (!shouldFetchTranscript || captions.data?.length > 0)}\n vttSubtitles={captions.data || []}\n subtitles={filteredSubtitles}\n chapters={chapters}\n isBot={SeoHelper.isBot()}\n playerApiUrl={config.data?.playerApiUrl}\n hasNewSearch={hasNewSearch}\n liteUrl={config.data.liteUrl}\n />\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"./DAXXjFlN.chunk.js";import{t as e}from"./CQyJ7YGa.chunk.js";import{t}from"./C2w0pmFW.chunk.js";import{t as n}from"./wrLrTezN.chunk.js";import{u as r}from"./BX0wDJmp.chunk.js";import{t as i}from"./CqrjHjAN.chunk.js";import{t as a}from"./CgCqPbjJ.chunk.js";import{t as o}from"./D_gWf2lC.chunk.js";import{t as s}from"./dLd5d3X22.chunk.js";import{t as c}from"./C6-aC3vu.chunk.js";import{n as l,t as u}from"./BGhJ8TEx.chunk.js";import{c as d}from"./BDsN9PWe2.chunk.js";import{t as f}from"./D1LXi_Ni.chunk.js";import"./B-cF1RO-.chunk.js";import{t as p}from"./DpIVDfRB2.chunk.js";import{i as m,o as h}from"./yme6Tx6K2.chunk.js";import{t as g}from"./DDmUhpUA.chunk.js";import{i as _,t as v}from"./0O76oUkQ.chunk.js";import{t as y}from"
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import"./DAXXjFlN.chunk.js";import{t as e}from"./CQyJ7YGa.chunk.js";import{t}from"./C2w0pmFW.chunk.js";import{t as n}from"./wrLrTezN.chunk.js";import{u as r}from"./BX0wDJmp.chunk.js";import{t as i}from"./CqrjHjAN.chunk.js";import{t as a}from"./CgCqPbjJ.chunk.js";import{t as o}from"./D_gWf2lC.chunk.js";import{t as s}from"./dLd5d3X22.chunk.js";import{t as c}from"./C6-aC3vu.chunk.js";import{n as l,t as u}from"./BGhJ8TEx.chunk.js";import{c as d}from"./BDsN9PWe2.chunk.js";import{t as f}from"./D1LXi_Ni.chunk.js";import"./B-cF1RO-.chunk.js";import{t as p}from"./DpIVDfRB2.chunk.js";import{i as m,o as h}from"./yme6Tx6K2.chunk.js";import{t as g}from"./DDmUhpUA.chunk.js";import{i as _,t as v}from"./0O76oUkQ.chunk.js";import{t as y}from"./-KvTbeQV.chunk.js";t();var b=n(),x=e.encloseNamespace(`shared.insightsHeatmap`);function S(e){let[t]=s(a.ANONYMISE_USERS);g();let n=r(i.currentUser()),S=r(p.interactiveMetadata()),C=r(o.config()),w=d.getAudienceAppLinkParams(),T=d.getDateRangeAppLinkParams(),E=r(p.aggregateHeatmap()),D=r(p.individualHeatmap()),O=r(p.users()),k=r(p.videoViews()),A=r(S.data&&u.createViewKey(`GRWx6w`,l.Share));c({title:S.data?x(`pageTitle`,{video:S.data?.name}):null});let j=!!n.data&&!!k.data&&!!S.data&&!!E.data&&!!A.data&&!!O.data,M=!!D.data;if(!j)return(0,b.jsx)(b.Fragment,{});let N={...w,...T},P=e.type===f.Open?m:h;return(0,b.jsxs)(`div`,{className:`px-3`,children:[(0,b.jsx)(_,{video:S.data,tabs:v(S.data?.id,`heatmap`,N,e.type),dateRangeAppLinkParams:T,share:{...P,objectId:S.data?.id},yearGroups:[],markingRequired:e.type!==f.Open,isDemo:!0,hasData:!0}),(0,b.jsx)(y,{aggregateEngagement:E.data,individualEngagement:D.data?.data,yearGroups:k.data?.yearGroupCount,config:C.data,users:O.data,viewKey:A.data,hasDataLoaded:j,tableDataLoaded:M,anonymiseUsers:t,hideStaffResults:!1})]})}export{S as InsightsHeatmapDemoView};
|
|
2
|
+
//# sourceMappingURL=BBWnpWNB2.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"BBWnpWNB2.chunk.js","names":[],"sources":["../../src/apps/my-shares/views/demo/heatmap/InsightsHeatmapDemoView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { VideoViewEventResponse } from 'libs/shared/apps/analytics/interfaces/VideoViewEvent';\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { ShareType } from 'libs/shared/apps/share/enums/ShareType';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InsightsDemoRequests } from 'libs/shared/flight-requests/InsightsDemoRequests';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, CurrentUser, Engagement, IndividualEngagementResponse, InteractiveMetadata, PlayerViewKey } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\n\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InsightsHeatmap } from 'apps/my-shares/components/insights-heatmap/InsightsHeatmap';\nimport { DEMO_INTERACTIVE_ID } from 'apps/my-shares/constants/DemoInsights';\nimport { DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE, DEMO_INSIGHTS_SHARE } from 'apps/my-shares/constants/MySharesDemoInsights';\nimport { getInsightsDemoInteractiveTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\n\nconst namespace = 'shared.insightsHeatmap';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightsHeatmapDemoViewProps {\n type?: ShareType;\n}\n\nexport function InsightsHeatmapDemoView(props: InsightsHeatmapDemoViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(ViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<InteractiveMetadata>(\n InsightsDemoRequests.interactiveMetadata()\n );\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const audienceAppLinkParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n const dateRangeAppLinkParams = AnalyticsFilterHelper.getDateRangeAppLinkParams();\n\n const aggregateEngagement = Flight.useBasicFetch<Engagement>(\n InsightsDemoRequests.aggregateHeatmap()\n );\n\n const individualEngagement = Flight.useBasicFetch<IndividualEngagementResponse>(\n InsightsDemoRequests.individualHeatmap()\n );\n\n const users = Flight.useBasicFetch<AnonUser[]>(InsightsDemoRequests.users());\n\n const videoViews = Flight.useBasicFetch<VideoViewEventResponse>(InsightsDemoRequests.videoViews());\n\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(video.data &&\n PlayerRequests.createViewKey(DEMO_INTERACTIVE_ID, MediaIdType.Share));\n\n useSetPageMetadata({ title: video.data ? getPhrase('pageTitle', { video: video.data?.name }) : null });\n\n const hasDataLoaded =\n !!currentUser.data &&\n !!videoViews.data &&\n !!video.data &&\n !!aggregateEngagement.data &&\n !!viewKey.data &&\n !!users.data;\n\n const tableDataLoaded = !!individualEngagement.data;\n\n if (!hasDataLoaded)\n return <></>;\n\n const params = {\n ...audienceAppLinkParams,\n ...dateRangeAppLinkParams\n };\n\n const share = props.type === ShareType.Open ? DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE : DEMO_INSIGHTS_SHARE;\n\n return (\n <div className='px-3'>\n <InsightsHeader\n video={video.data}\n tabs={getInsightsDemoInteractiveTabs(video.data?.id, 'heatmap', params, props.type)}\n dateRangeAppLinkParams={dateRangeAppLinkParams}\n share={{\n ...share,\n objectId: video.data?.id\n }}\n yearGroups={[]}\n markingRequired={props.type !== ShareType.Open}\n isDemo\n hasData\n />\n\n <InsightsHeatmap\n aggregateEngagement={aggregateEngagement.data}\n individualEngagement={individualEngagement.data?.data}\n yearGroups={videoViews.data?.yearGroupCount}\n config={config.data}\n users={users.data}\n viewKey={viewKey.data}\n hasDataLoaded={hasDataLoaded}\n tableDataLoaded={tableDataLoaded}\n anonymiseUsers={anonymiseUsers}\n hideStaffResults={false}\n />\n </div>\n );\n}\n"],"mappings":"kwBA4BM,EAAY,EAAgB,iBAAiB,wBAAS,EAM5D,SAAgB,EAAwB,EAAqC,CAC3E,GAAM,CAAC,GAAkB,EAAsB,EAAc,eAAe,EAE5E,EAAoB,EAEpB,IAAM,EAAc,EAAkC,EAAa,YAAY,CAAC,EAC1E,EAAQ,EACZ,EAAqB,oBAAoB,CAC3C,EAEM,EAAS,EAA6B,EAAe,OAAO,CAAC,EAE7D,EAAwB,EAAsB,yBAAyB,EACvE,EAAyB,EAAsB,0BAA0B,EAEzE,EAAsB,EAC1B,EAAqB,iBAAiB,CACxC,EAEM,EAAuB,EAC3B,EAAqB,kBAAkB,CACzC,EAEM,EAAQ,EAAiC,EAAqB,MAAM,CAAC,EAErE,EAAa,EAA6C,EAAqB,WAAW,CAAC,EAE3F,EAAU,EAAoC,EAAM,MACxD,EAAe,cAAA,SAAmC,EAAY,KAAK,CAAC,EAEtE,EAAmB,CAAE,MAAO,EAAM,KAAO,EAAU,YAAa,CAAE,MAAO,EAAM,MAAM,IAAK,CAAC,EAAI,IAAK,CAAC,EAErG,IAAM,EACJ,CAAC,CAAC,EAAY,MACd,CAAC,CAAC,EAAW,MACb,CAAC,CAAC,EAAM,MACR,CAAC,CAAC,EAAoB,MACtB,CAAC,CAAC,EAAQ,MACV,CAAC,CAAC,EAAM,KAEJ,EAAkB,CAAC,CAAC,EAAqB,KAE/C,GAAI,CAAC,EACH,OAAO,EAAA,EAAA,IAAA,CAAA,EAAA,SAAA,CAAI,CAAA,EAEb,IAAM,EAAS,CACb,GAAG,EACH,GAAG,CACL,EAEM,EAAQ,EAAM,OAAS,EAAU,KAAO,EAAqC,EAEnF,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,gBAAf,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,MAAO,EAAM,KACb,KAAM,EAA+B,EAAM,MAAM,GAAI,UAAW,EAAQ,EAAM,IAAI,EAC1D,yBACxB,MAAO,CACL,GAAG,EACH,SAAU,EAAM,MAAM,EACxB,EACA,WAAY,CAAC,EACb,gBAAiB,EAAM,OAAS,EAAU,KAC1C,OAAA,GACA,QAAA,EACD,CAAA,GAED,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,oBAAqB,EAAoB,KACzC,qBAAsB,EAAqB,MAAM,KACjD,WAAY,EAAW,MAAM,eAC7B,OAAQ,EAAO,KACf,MAAO,EAAM,KACb,QAAS,EAAQ,KACF,gBACE,kBACD,iBAChB,iBAAkB,EACnB,CAAA,CACE,GAET"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{o as e}from"./DAXXjFlN.chunk.js";import{y as t}from"./BftnFbcr.chunk.js";import"./DFZS3Ffo.chunk.js";import{n}from"./B785hxeE.chunk.js";import{t as r}from"./e57H3T-k.chunk.js";import{t as i}from"./C2w0pmFW.chunk.js";import{t as a}from"./wrLrTezN.chunk.js";import{t as o}from"./BXTI9cmX.chunk.js";import{l as ee,y as te,z as ne}from"./NlCAcBdo.chunk.js";import{t as re}from"./CVHQXNzi2.chunk.js";import{t as s}from"./BrbeV-Gn2.chunk.js";import{t as c}from"./eoAypzU3.chunk.js";import{t as ie}from"./CgCqPbjJ.chunk.js";import{t as l}from"./7-GJWRH82.chunk.js";import{t as ae}from"./dLd5d3X22.chunk.js";import{t as oe}from"./QCFxJYkI2.chunk.js";import{t as se}from"./B2INd6bh.chunk.js";import{t as u}from"./B3gsVN-_.chunk.js";import{a as d,o as f}from"./
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{o as e}from"./DAXXjFlN.chunk.js";import{y as t}from"./BftnFbcr.chunk.js";import"./DFZS3Ffo.chunk.js";import{n}from"./B785hxeE.chunk.js";import{t as r}from"./e57H3T-k.chunk.js";import{t as i}from"./C2w0pmFW.chunk.js";import{t as a}from"./wrLrTezN.chunk.js";import{t as o}from"./BXTI9cmX.chunk.js";import{l as ee,y as te,z as ne}from"./NlCAcBdo.chunk.js";import{t as re}from"./CVHQXNzi2.chunk.js";import{t as s}from"./BrbeV-Gn2.chunk.js";import{t as c}from"./eoAypzU3.chunk.js";import{t as ie}from"./CgCqPbjJ.chunk.js";import{t as l}from"./7-GJWRH82.chunk.js";import{t as ae}from"./dLd5d3X22.chunk.js";import{t as oe}from"./QCFxJYkI2.chunk.js";import{t as se}from"./B2INd6bh.chunk.js";import{t as u}from"./B3gsVN-_.chunk.js";import{a as d,o as f}from"./D-iyHqNw2.chunk.js";import{n as p}from"./CpFtf-tI2.chunk.js";import{t as m}from"./DBkEQkKm2.chunk.js";import{t as h}from"./CzuHD4Ht.chunk.js";import{n as ce}from"./xa4cS6Fq.chunk.js";import{t as le}from"./WvK58Ge12.chunk.js";import{t as ue}from"./CvHvrB-t.chunk.js";import{l as de}from"./BOJK8LI1.chunk.js";import{t as fe}from"./DzgAvoez.chunk.js";import{o as g,r as _}from"./CpgHBpMp.chunk.js";import{n as v,t as y}from"./CvtZ8ZFA2.chunk.js";import{t as b}from"./BPavmm8c.chunk.js";import{a as pe,i as me,n as he,t as ge}from"./Bf9r1ZoF2.chunk.js";import{_ as x,a as _e,d as ve,f as S,g as ye,h as be,i as xe,l as C,m as w,n as T,o as E,p as D,r as O,s as k,t as A,u as j}from"./Bld7iWR52.chunk.js";import{n as M,t as Se}from"./B3p3SaM12.chunk.js";import{n as Ce,r as we}from"./BgOLbASl2.chunk.js";var N=e(i()),P=a(),F=`shared.playClip`;function Te(e){let{hasPermissions:t}=u(),n=v({location:y.VideoItem,presentationSlug:null});return(0,P.jsxs)(`section`,{className:`play-page-section`,id:b.ClippedFrom,ref:t=>{t&&e.headingRef?.current&&e.headingRef.current.set(b.ClippedFrom,t)},children:[(0,P.jsx)(`h2`,{className:`h4 mb-0`,children:(0,P.jsx)(p,{namespace:F,phrase:`clippedFrom`})}),(0,P.jsx)(g.Provider,{value:n,children:(0,P.jsx)(_,{videos:[e.originalVideo],getVideoAppLink:(t,n)=>m.getAppLink(t,{...n,context:e.queryParams.context,contextId:e.queryParams.contextId,playNext:e.queryParams.playNext,shareId:e.shareId,moviesAndTv:e.queryParams.mtv,includeContext:e.currentUser?.isAuthenticated},null),hasPermissions:t,presentationAudiences:e.audiences,getPreviewQuestionsAppLink:e=>h.getPreviewQuestionsAppLink(e),commonVideoProps:e.commonVideoProps})})]})}var I={main:`_main_1ujkn_1`,expandedToc:`_expandedToc_1ujkn_1`,theatreMode:`_theatreMode_1ujkn_4`,theatreModeContent:`_theatreModeContent_1ujkn_7`,theatreModePlayPageContainer:`_theatreModePlayPageContainer_1ujkn_17`,theatreModeLeftContent:`_theatreModeLeftContent_1ujkn_21`},Ee=(e,t,n)=>r=>n?{application:o.VIDEOS,action:c.Videos.PREVIEW_PDF,args:[r.id],params:{videoId:e,shareId:t}}:{application:o.SIGN_UP,action:c.SignUp.SIGN_UP};function L(e){let i=ce(),{hasPermissions:a}=u(),{canConsume:p}=s.getCanBeConsumed(e.clip),h=E(e.hasTheatreMode,i),g=T(e.hasTheatreMode,i.mode,i.defaultDisplayMode);function _(e){i.playerRef?.current?.toggleTheatreMode?.(e)}let{tableOfContentsActiveId:v,setTableOfContentsActiveId:y,controlledId:F,setControlledId:L,tableOfContentsExpanded:R,onToggleTableOfContents:z}=xe(e.tableOfContentsId,e.hasTheatreMode,h),B=ye(e.clip)&&e.featureAccess.canViewGlance,{headingRef:V,headingElements:H}=O(B),U=H.map(t=>({id:t.id,name:A.getSectionHeading(t.id,{clips:e.clips,interactives:e.interactives,resources:e.clip.resources?.data,isPlayClipPage:!0})}));we({setActiveId:y,headingElements:H,controlledId:F,setControlledId:L}),Ce(H,F);let De=s.isVideoTypeArchived(e.clip),W=a(n.StudentExperience),G=N.useRef(!1),K=Ee(e.clip.id,e.shareId,e.featureAccess.canViewResourceItems);C({resourcePopupId:e.queryParams?.resourceId,resources:e.clip.resources?.data,getResourceAppLink:K});function q(){G.current=!i?.playerRef?.current?.isPaused(),i?.playerRef?.current?.pause()}function J(){G.current&&i?.playerRef?.current?.play()}function Y(){return!(!e.clip._parentVideo||!e.clip._canBeConsumed?.value||!e.currentUser?.isAuthenticated||!e.hasProduct(oe.Primary)||W)}function Oe(){return Y()?{application:o.VIDEOS,action:c.Videos.PLAY_VIDEO,args:[null,e.clip._parentVideo.id,r.slugify(e.clip._parentVideo.name)]}:null}let ke=i.mode===`picture-in-picture`||e.featureAccess.canViewPublicLayout,Ae=e.clips?.filter(t=>t.id.toString()!==e.clip.id.toString())??[],X={hasTheatreMode:e.hasTheatreMode,shouldShowSideTableOfContents:e.shouldShowSideTableOfContents,tableOfContentsExpanded:R,theatreMode:h},je=k(X),Me=_e(X),[,Z]=ae(ie.PLAY_PAGE_CONTAINER_CLASS_NAME),Q=M(e.clip,a(n.StudentExperience)),$=Q.filter(le.isResource);function Ne(){if($.length===1){ue.downloadResource($[0],{clipId:e.clip.id,clipName:e.clip.name},{location:te.PlayClip,actionType:ne.Download,entity:ee.Resource});return}t.trigger({application:o.VIDEOS,action:c.Videos.RESOURCE_DOWNLOAD,args:[e.clip?.id,e.shareId]})}return N.useEffect(()=>{Z(h?I.theatreModePlayPageContainer:``)},[h]),N.useEffect(()=>()=>Z(``),[]),(0,P.jsxs)(`div`,{className:`px-4 play-page-sections-container ${e.shouldShowSideTableOfContents?`row g-0`:``}`,children:[(0,P.jsxs)(`main`,{className:`${I.main} ${je}`,children:[!!e.breadcrumbs?.length&&(0,P.jsx)(`div`,{className:`mb-2`,children:(0,P.jsx)(fe,{breadcrumbs:e.breadcrumbs})}),(0,P.jsx)(ge,{restrictions:e.clip._restrictions,yearGroups:e.commonVideoProps.yearGroups,objectId:e.clip.id,objectTypeId:re.Clip,canManageVideoAccess:e.canManageVideoAccess}),De&&(0,P.jsx)(pe,{typeId:e.clip.typeId,hasStudentExperience:W}),(0,P.jsxs)(`section`,{id:b.Video,className:`mb-2 ${se.GLOBAL_PLAYER_SELECTOR}`,ref:e=>{e&&V?.current&&V.current.set(b.Video,e)},children:[p&&(0,P.jsx)(de,{objectId:e.clip.id,objectTypeId:e.clip.typeId,shareId:e.shareId,context:e.queryParams?.context,contextId:e.queryParams?.contextId,moviesAndTv:e.queryParams?.mtv,playNext:e.queryParams?.playNext,startTime:e.queryParams?.t??e.queryParams?.startTime,mode:`default`,location:`play-page`},e.clip.id),(0,P.jsx)(`div`,{className:ke?``:`d-none`,children:(0,P.jsx)(j,{video:e.clip,type:`pip`})})]}),(0,P.jsxs)(`div`,{className:Me,children:[(0,P.jsxs)(`div`,{className:g?`${I.theatreModeLeftContent}`:`w-100`,children:[(0,P.jsx)(ve,{presentationSlug:null,media:e.clip,yearGroups:e.commonVideoProps.yearGroups,audiences:e.audiences,originalVideoAppLink:Oe(),featureAccess:e.featureAccess,shareId:e.shareId,showTitlePadlock:!e.commonVideoProps.hasStudentExperience&&!e.commonVideoProps.hasGuestExperience}),B?(0,P.jsx)(be,{video:e.clip,pointsOfInterest:e.pointsOfInterest,setStartTime:e=>i.playerRef.current?.currentTime(e),getTagAppLink:e=>({application:o.SEARCH,action:c.Search.HOME,params:{tagOrClassification:e.name}}),suppressInteractivity:e.featureAccess.canViewPublicLayout,canViewGlance:B}):(0,P.jsx)(x,{video:e.clip,currentUser:e.currentUser,onLaunchImmersiveReader:q,onExitImmersiveReader:J,getTagAppLink:e=>({application:o.SEARCH,action:c.Search.HOME,params:{tagOrClassification:e.name}}),headingRef:V,suppressInteractivity:e.featureAccess.canViewPublicLayout,getLibraryAppLink:f,getFolderAppLink:d}),(0,P.jsx)(Se,{video:e.clip,canViewResources:e.featureAccess.canViewResourceItems,imageCdnUrl:e.commonVideoProps.imageCdnUrl,getAppLink:K,analyticsData:{clipId:e.clip.id,clipName:e.clip.name},resourceThumbnailFallbackUrl:l.Fallbacks.RESOURCE_THUMBNAIL,headingRef:V,onDownloadClick:Ne,resources:Q,downloadableResources:$,aboutResourcesAppLink:m.getAboutResourceAppLink()}),(0,P.jsx)(D,{presentationSlug:null,video:e.clip,interactives:e.interactives,analyticsData:{clipId:e.clip.id,clipName:e.clip.name},canViewInteractives:e.featureAccess.canViewInteractives,headingRef:V,commonVideoProps:e.commonVideoProps}),(0,P.jsx)(w,{presentationSlug:null,clips:Ae||[],video:e.clip,canViewClips:e.featureAccess.canViewClips,audiences:e.audiences,headingRef:V,analyticsData:{clipId:e.clip.id,clipName:e.clip.name},commonVideoProps:e.commonVideoProps}),B&&(0,P.jsx)(x,{video:e.clip,currentUser:e.currentUser,onLaunchImmersiveReader:q,onExitImmersiveReader:J,getTagAppLink:e=>({application:o.SEARCH,action:c.Search.HOME,params:{tagOrClassification:e.name}}),headingRef:V,suppressInteractivity:e.featureAccess.canViewPublicLayout,showHeading:!0,getLibraryAppLink:a(n.ViewLibraries)?f:null,getFolderAppLink:a(n.ViewLibraries)?d:null}),!!Y()&&(0,P.jsx)(Te,{originalVideo:e.clip._parentVideo,shareId:e.shareId,queryParams:e.queryParams,audiences:e.audiences,headingRef:V,currentUser:e.currentUser,commonVideoProps:e.commonVideoProps}),!s.isUgc(e.clip._parentVideo)&&(0,P.jsx)(he,{headingRef:V,media:e.clip,parentVideo:e.clip._parentVideo,contentRegion:e.currentUser.contentRegion,shareId:e.shareId,presentationSlug:null}),(0,P.jsx)(me,{presentationSlug:null,currentVideo:e.clip,relatedVideos:e.relatedVideos,currentUser:e.currentUser,audiences:e.audiences,getVideoAppLink:(t,n)=>m.getAppLink(t,{...n,context:e.queryParams.context,contextId:e.queryParams.contextId,playNext:e.queryParams.playNext,shareId:e.shareId,moviesAndTv:e.queryParams.mtv,includeContext:e.currentUser?.isAuthenticated},null),moviesAndTv:e.queryParams.mtv,commonVideoProps:e.commonVideoProps})]}),h&&(0,P.jsx)(S,{isExpanded:R,setIsExpanded:z,toggleTheatreMode:null,items:U,activeId:v,setControlledId:L,analyticsData:{videoId:e.clip.id,videoName:e.clip.name},showInSide:e.shouldShowSideTableOfContents,isTheatreMode:!0,hasTranscription:e.hasTheatreMode,shouldShow:U.length>=3})]})]}),!h&&(0,P.jsx)(S,{isExpanded:R,setIsExpanded:z,toggleTheatreMode:e.hasTheatreMode?_:null,items:U,activeId:v,setControlledId:L,analyticsData:{videoId:e.clip.id,videoName:e.clip.name},showInSide:e.shouldShowSideTableOfContents,isTheatreMode:!1,hasTranscription:e.hasTheatreMode,shouldShow:U.length>=3})]})}export{L as t};
|
|
2
|
+
//# sourceMappingURL=B_TE5XUR2.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"B6GfukUn2.chunk.js","names":[],"sources":["../../src/shared/views/play-clip/components/clipped-from/ClippedFrom.tsx","../../src/shared/views/play-clip/components/play-clip/play-clip.module.scss","../../src/shared/views/play-clip/components/play-clip/PlayClip.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { CurrentUser, PresentationAudience, VideoTypes } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\n\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { InteractiveHelpers } from 'shared/utils/InteractiveHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nconst namespace = 'shared.playClip';\n\ninterface ClippedFromProps {\n originalVideo: VideoTypes;\n queryParams: PlayViewQueryParams;\n audiences: PresentationAudience[];\n shareId?: string;\n headingRef: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n currentUser: CurrentUser;\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ClippedFrom(props: ClippedFromProps) {\n const { hasPermissions } = usePermissions();\n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem, presentationSlug: null });\n\n return (\n <section\n className='play-page-section'\n id={PlayPageAnchor.ClippedFrom}\n ref={el => {\n (el && props.headingRef?.current) && props.headingRef.current.set(PlayPageAnchor.ClippedFrom, el);\n }}\n >\n <h2 className='h4 mb-0'><Text namespace={namespace} phrase='clippedFrom' /></h2>\n <VideoActionsContext.Provider value={videoActions}>\n <VideoList\n videos={[props.originalVideo]}\n getVideoAppLink={(v, opts) => VideoAppLinkHelper.getAppLink(v, {\n ...opts,\n context: props.queryParams.context,\n contextId: props.queryParams.contextId,\n playNext: props.queryParams.playNext,\n shareId: props.shareId,\n moviesAndTv: props.queryParams.mtv,\n includeContext: props.currentUser?.isAuthenticated\n }, null)}\n hasPermissions={hasPermissions}\n presentationAudiences={props.audiences}\n getPreviewQuestionsAppLink={interactive => InteractiveHelpers.getPreviewQuestionsAppLink(interactive)}\n commonVideoProps={props.commonVideoProps}\n />\n </VideoActionsContext.Provider>\n </section>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .main.expandedToc {\n width: calc(100% - 15rem); //minus sidebar toc width and margin\n }\n\n .main.theatreMode {\n width: 100% !important;\n }\n\n .theatreModeContent {\n display: flex;\n margin: auto !important;\n\n @include media('<=xl') {\n max-width: 100%;\n }\n }\n\n .theatreModePlayPageContainer {\n //override TeacherLayoutComponent container style\n @media (min-width: 1200px) {\n max-width: none !important;\n }\n }\n\n .theatreModeLeftContent {\n width: calc(100% - 15rem);\n @include media('<=lg') {\n width: 100%;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { Breadcrumb, Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { VideoDetailsWithScrollbarV2 } from 'libs/shared/components/play-page/details/VideoDetailsV2';\nimport { hasGlanceData } from 'libs/shared/components/play-page/glance/VideoAtAGlanceUtilsV2';\nimport { VideoAtAGlanceV2 } from 'libs/shared/components/play-page/glance/VideoAtAGlanceV2';\nimport { getResources, PlayPageResources } from 'libs/shared/components/play-page/resources-widget/PlayPageResources';\nimport { SeoConstants } from 'libs/shared/constants/SeoConstants';\nimport { GlobalPlayerConsumer } from 'libs/shared/context/player-context/components/GlobalPlayerConsumer';\nimport { usePlayerContext } from 'libs/shared/context/player-context/PlayerContext';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { HasProductFunc } from 'libs/shared/hooks/UseProducts';\nimport { useTableOfContentsActiveHeading } from 'libs/shared/hooks/useTableOfContentsActiveHeading';\nimport { useTableOfContentsScroll } from 'libs/shared/hooks/useTableOfContentsScroll';\nimport { Clip, CurrentUser, InteractiveMetadata, Link, PointOfInterest, PresentationAudience, Resource } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\nimport { DownloadHelper } from 'libs/shared/utils/DownloadHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { CitationWidget } from 'shared/components/citations/CitationWidget';\nimport { ArchivedBanner } from 'shared/components/play-page/ArchivedBanner';\nimport { PlayPageClips } from 'shared/components/play-page/components/play-page-clips/PlayPageClips';\nimport { PlayPageInteractives } from 'shared/components/play-page/components/play-page-interactives/PlayPageInteractives';\nimport { TableOfContentsContainer, TOC_IGNORE_BOUNDARY } from 'shared/components/play-page/components/table-of-contents/TableOfContents';\nimport { PlayPageTitleAndActions } from 'shared/components/play-page/components/title-and-actions/PlayPageTitleAndActions';\nimport { getFolderAppLink, getLibraryAppLink } from 'shared/components/play-page/PlayPageUtils';\nimport { RestrictionBanner } from 'shared/components/play-page/RestrictionBanner';\nimport { PlayerPlaceholder } from 'shared/components/player-placeholder/PlayerPlaceholder';\nimport { RelatedVideos } from 'shared/components/related-videos/RelatedVideos';\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\nimport { RelatedVideosHash } from 'shared/hooks/useGetRelatedVideos';\nimport { VideoFeaturesHash } from 'shared/hooks/useVideoFeatureAccess';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\nimport { useResourcePopup } from 'shared/views/play/components/play-page/hooks/useResourcePopup';\nimport { getContentClassName, getIsTheatreMode, getMainClassName } from 'shared/views/play/components/play-page/PlayPageUtils';\nimport { usePlayPageTableOfContent } from 'shared/views/play/hooks/usePlayPageTableOfContent';\nimport { useSectionHeadings } from 'shared/views/play/hooks/useSectionHeadings';\nimport { useTheatreModeStyle } from 'shared/views/play/hooks/useTheatreStyle';\nimport { PlayPageUtils } from 'shared/views/play/PlayPageUtil';\nimport { ClippedFrom } from 'shared/views/play-clip/components/clipped-from/ClippedFrom';\n\nimport styles from './play-clip.module.scss';\n\nconst getResourceAppLink = (videoId: string, shareId: string, canViewResource: boolean) =>\n (resource: Resource | Link) => {\n if (!canViewResource) {\n return {\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n };\n }\n\n return {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PREVIEW_PDF,\n args: [resource.id],\n params: {\n videoId: videoId,\n shareId: shareId\n }\n };\n };\n\ninterface PlayClipProps {\n clip: Clip;\n clips: Clip[];\n interactives: InteractiveMetadata[];\n currentUser: CurrentUser;\n relatedVideos: RelatedVideosHash;\n queryParams: PlayViewQueryParams;\n hasProduct: HasProductFunc;\n audiences: PresentationAudience[];\n shareId?: string;\n canManageVideoAccess: boolean;\n pointsOfInterest?: PointOfInterest[];\n featureAccess: VideoFeaturesHash;\n tableOfContentsId: string;\n shouldShowSideTableOfContents: boolean;\n hasTopicDirectories: boolean;\n hasTheatreMode: boolean;\n breadcrumbs?: Breadcrumb[];\n commonVideoProps: CommonVideoProps;\n}\n\nexport function PlayClip(props: PlayClipProps): JSX.Element {\n const playerContext = usePlayerContext();\n\n const { hasPermissions } = usePermissions();\n const { canConsume } = VideoHelper.getCanBeConsumed(props.clip);\n \n const theatreMode = getIsTheatreMode(props.hasTheatreMode, playerContext);\n const shouldUseTheareModeStyle = useTheatreModeStyle(\n props.hasTheatreMode,\n playerContext.mode,\n playerContext.defaultDisplayMode\n );\n\n function toggleTheatreMode(value: boolean) {\n playerContext.playerRef?.current?.toggleTheatreMode?.(value);\n }\n\n const {\n tableOfContentsActiveId,\n setTableOfContentsActiveId,\n controlledId,\n setControlledId,\n tableOfContentsExpanded,\n onToggleTableOfContents\n } = usePlayPageTableOfContent(props.tableOfContentsId, props.hasTheatreMode, theatreMode);\n\n const hasGlance = hasGlanceData(props.clip) && props.featureAccess.canViewGlance;\n\n const { headingRef, headingElements } = useSectionHeadings(hasGlance);\n const items = headingElements.map(ele => {\n return {\n id: ele.id as PlayPageAnchor,\n name: PlayPageUtils.getSectionHeading(\n ele.id as PlayPageAnchor,\n {\n clips: props.clips,\n interactives: props.interactives,\n resources: props.clip.resources?.data,\n isPlayClipPage: true\n }\n )\n };\n });\n\n useTableOfContentsActiveHeading({\n setActiveId: setTableOfContentsActiveId,\n headingElements,\n controlledId,\n setControlledId\n });\n\n useTableOfContentsScroll(headingElements, controlledId);\n\n const isArchived = VideoHelper.isVideoTypeArchived(props.clip);\n const hasStudentExperience = hasPermissions(PermissionName.StudentExperience);\n /**\n * Need to use a ref because if we use state, onExitImmersiveReader will have a stale\n * reference of the state. This is because the state is changed in onLaunchImmersiveReader\n * which is passed in at the same time as onExitImmersiveReader\n */\n const shouldPlayOnExitImmersiveReader = React.useRef(false);\n\n const clipResourceAppLink = getResourceAppLink(\n props.clip.id,\n props.shareId,\n props.featureAccess.canViewResourceItems\n );\n\n useResourcePopup({\n resourcePopupId: props.queryParams?.resourceId,\n resources: props.clip.resources?.data,\n getResourceAppLink: clipResourceAppLink\n });\n\n function onLaunchImmersiveReader(): void {\n shouldPlayOnExitImmersiveReader.current = !playerContext?.playerRef?.current?.isPaused();\n playerContext?.playerRef?.current?.pause();\n }\n\n function onExitImmersiveReader(): void {\n if (!shouldPlayOnExitImmersiveReader.current)\n return;\n\n playerContext?.playerRef?.current?.play();\n }\n\n function canAccessOriginal(): boolean {\n if (!props.clip._parentVideo || !props.clip._canBeConsumed?.value)\n return false;\n\n if (!props.currentUser?.isAuthenticated)\n return false;\n\n if (!props.hasProduct(ProductId.Primary))\n return false;\n\n if (hasStudentExperience)\n return false;\n\n return true;\n }\n\n function getOriginalVideoAppLink(): Core.AppLink {\n if (!canAccessOriginal())\n return null;\n \n return {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [\n null,\n props.clip._parentVideo.id,\n TextHelper.slugify(props.clip._parentVideo.name)\n ]\n };\n }\n\n const showPlayerPlaceholder = playerContext.mode === 'picture-in-picture' || props.featureAccess.canViewPublicLayout;\n\n const otherClips = props.clips?.filter(c => c.id.toString() !== props.clip.id.toString()) ?? [];\n\n const calcClassNameProps = {\n hasTheatreMode: props.hasTheatreMode,\n shouldShowSideTableOfContents: props.shouldShowSideTableOfContents,\n tableOfContentsExpanded,\n theatreMode\n };\n const mainClassName = getMainClassName(calcClassNameProps);\n const contentClassName = getContentClassName(calcClassNameProps);\n\n const [ , setContainerClassName ] = useViewModel(ViewModelKeys.PLAY_PAGE_CONTAINER_CLASS_NAME);\n\n const resources = getResources(props.clip, hasPermissions(PermissionName.StudentExperience));\n const downloadableResources = resources.filter(MasterTypeHelper.isResource);\n\n function onDownloadClick() {\n if (downloadableResources.length === 1) {\n DownloadHelper.downloadResource(\n downloadableResources[0],\n { clipId: props.clip.id, clipName: props.clip.name },\n { location: LocationContext.PlayClip, actionType: UserAction.Download, entity: EntityType.Resource }\n );\n return;\n }\n \n Core.AppLinkHelper.trigger({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.RESOURCE_DOWNLOAD,\n args: [ props.clip?.id, props.shareId ]\n });\n }\n \n React.useEffect(() => {\n if (!theatreMode) {\n setContainerClassName('');\n } else {\n setContainerClassName(styles.theatreModePlayPageContainer);\n }\n }, [theatreMode]);\n\n React.useEffect(() => {\n return () => setContainerClassName('');\n }, []);\n\n return (\n <div className={`px-4 play-page-sections-container ${props.shouldShowSideTableOfContents ? 'row g-0' : ''}`}>\n <main className={`${styles.main} ${mainClassName}`}>\n {!!props.breadcrumbs?.length && (\n <div className='mb-2'>\n <Breadcrumbs breadcrumbs={props.breadcrumbs} />\n </div>\n )}\n\n <RestrictionBanner\n restrictions={props.clip._restrictions}\n yearGroups={props.commonVideoProps.yearGroups}\n objectId={props.clip.id}\n objectTypeId={MasterType.Clip}\n canManageVideoAccess={props.canManageVideoAccess}\n />\n\n {isArchived && (\n <ArchivedBanner\n typeId={props.clip.typeId}\n hasStudentExperience={hasStudentExperience}\n />\n )}\n\n <section\n id={PlayPageAnchor.Video}\n className={`mb-2 ${SeoConstants.GLOBAL_PLAYER_SELECTOR}`}\n ref={el => { (el && headingRef?.current) && headingRef.current.set(PlayPageAnchor.Video, el); }}\n >\n {canConsume && (\n <GlobalPlayerConsumer\n key={props.clip.id}\n objectId={props.clip.id}\n objectTypeId={props.clip.typeId}\n shareId={props.shareId}\n context={props.queryParams?.context}\n contextId={props.queryParams?.contextId}\n moviesAndTv={props.queryParams?.mtv}\n playNext={props.queryParams?.playNext}\n startTime={props.queryParams?.t ?? props.queryParams?.startTime}\n mode='default'\n location='play-page'\n />\n )}\n\n <div className={showPlayerPlaceholder ? '' : 'd-none'}>\n <PlayerPlaceholder\n video={props.clip}\n type='pip'\n />\n </div>\n </section>\n\n <div className={contentClassName}>\n <div className={shouldUseTheareModeStyle ? `${styles.theatreModeLeftContent}` : 'w-100'}>\n <PlayPageTitleAndActions\n presentationSlug={null}\n media={props.clip}\n yearGroups={props.commonVideoProps.yearGroups}\n audiences={props.audiences}\n originalVideoAppLink={getOriginalVideoAppLink()}\n featureAccess={props.featureAccess}\n shareId={props.shareId}\n showTitlePadlock={!props.commonVideoProps.hasStudentExperience\n && !props.commonVideoProps.hasGuestExperience}\n />\n\n {/* if no glance render video details here */}\n {hasGlance ? (\n <VideoAtAGlanceV2\n video={props.clip}\n pointsOfInterest={props.pointsOfInterest}\n setStartTime={(time: number) => playerContext.playerRef.current?.currentTime(time)}\n getTagAppLink={tag => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: { tagOrClassification: tag.name }\n })}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n canViewGlance={hasGlance}\n />\n ) : (\n <VideoDetailsWithScrollbarV2\n video={props.clip}\n currentUser={props.currentUser}\n onLaunchImmersiveReader={onLaunchImmersiveReader}\n onExitImmersiveReader={onExitImmersiveReader}\n getTagAppLink={tag => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: { tagOrClassification: tag.name }\n })}\n headingRef={headingRef}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n getLibraryAppLink={getLibraryAppLink}\n getFolderAppLink={getFolderAppLink}\n />\n )}\n\n <PlayPageResources\n video={props.clip}\n canViewResources={props.featureAccess.canViewResourceItems}\n imageCdnUrl={props.commonVideoProps.imageCdnUrl}\n getAppLink={clipResourceAppLink}\n analyticsData={{ clipId: props.clip.id, clipName: props.clip.name }}\n resourceThumbnailFallbackUrl={ImageUrls.Fallbacks.RESOURCE_THUMBNAIL}\n headingRef={headingRef}\n onDownloadClick={onDownloadClick}\n resources={resources}\n downloadableResources={downloadableResources}\n aboutResourcesAppLink={VideoAppLinkHelper.getAboutResourceAppLink()}\n />\n\n <PlayPageInteractives\n presentationSlug={null}\n video={props.clip}\n interactives={props.interactives}\n analyticsData={{ clipId: props.clip.id, clipName: props.clip.name }}\n canViewInteractives={props.featureAccess.canViewInteractives}\n headingRef={headingRef}\n commonVideoProps={props.commonVideoProps}\n />\n\n <PlayPageClips\n presentationSlug={null}\n clips={otherClips || []}\n video={props.clip}\n canViewClips={props.featureAccess.canViewClips}\n audiences={props.audiences}\n headingRef={headingRef}\n analyticsData={{ clipId: props.clip.id, clipName: props.clip.name }}\n commonVideoProps={props.commonVideoProps}\n />\n\n {/* if has glance, render video details here */}\n {hasGlance && (\n <VideoDetailsWithScrollbarV2\n video={props.clip}\n currentUser={props.currentUser}\n onLaunchImmersiveReader={onLaunchImmersiveReader}\n onExitImmersiveReader={onExitImmersiveReader}\n getTagAppLink={tag => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: { tagOrClassification: tag.name }\n })}\n headingRef={headingRef}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n showHeading\n getLibraryAppLink={hasPermissions(PermissionName.ViewLibraries) ? getLibraryAppLink : null}\n getFolderAppLink={hasPermissions(PermissionName.ViewLibraries) ? getFolderAppLink : null}\n />\n )}\n \n {!!canAccessOriginal() && (\n <ClippedFrom\n originalVideo={props.clip._parentVideo}\n shareId={props.shareId}\n queryParams={props.queryParams}\n audiences={props.audiences}\n headingRef={headingRef}\n currentUser={props.currentUser}\n commonVideoProps={props.commonVideoProps}\n />\n )}\n\n {!VideoHelper.isUgc(props.clip._parentVideo) && (\n <CitationWidget\n headingRef={headingRef}\n media={props.clip}\n parentVideo={props.clip._parentVideo}\n contentRegion={props.currentUser.contentRegion}\n shareId={props.shareId}\n presentationSlug={null}\n />\n )}\n\n <RelatedVideos\n presentationSlug={null}\n currentVideo={props.clip}\n relatedVideos={props.relatedVideos}\n currentUser={props.currentUser}\n audiences={props.audiences}\n getVideoAppLink={(v, opts) => VideoAppLinkHelper.getAppLink(v, {\n ...opts,\n context: props.queryParams.context,\n contextId: props.queryParams.contextId,\n playNext: props.queryParams.playNext,\n shareId: props.shareId,\n moviesAndTv: props.queryParams.mtv,\n includeContext: props.currentUser?.isAuthenticated\n }, null)}\n moviesAndTv={props.queryParams.mtv}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n {theatreMode && (\n <TableOfContentsContainer\n isExpanded={tableOfContentsExpanded}\n setIsExpanded={onToggleTableOfContents}\n toggleTheatreMode={ null}\n items={items}\n activeId={tableOfContentsActiveId}\n setControlledId={setControlledId}\n analyticsData={{ videoId: props.clip.id, videoName: props.clip.name }}\n showInSide={props.shouldShowSideTableOfContents}\n isTheatreMode={true}\n hasTranscription={props.hasTheatreMode}\n shouldShow={items.length >= TOC_IGNORE_BOUNDARY}\n />\n )}\n </div>\n </main>\n\n {!theatreMode && (\n <TableOfContentsContainer\n isExpanded={tableOfContentsExpanded}\n setIsExpanded={onToggleTableOfContents}\n toggleTheatreMode={props.hasTheatreMode ? toggleTheatreMode : null}\n items={items}\n activeId={tableOfContentsActiveId}\n setControlledId={setControlledId}\n analyticsData={{ videoId: props.clip.id, videoName: props.clip.name }}\n showInSide={props.shouldShowSideTableOfContents}\n isTheatreMode={false}\n hasTranscription={props.hasTheatreMode}\n shouldShow={items.length >= TOC_IGNORE_BOUNDARY}\n />\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"B_TE5XUR2.chunk.js","names":[],"sources":["../../src/shared/views/play-clip/components/clipped-from/ClippedFrom.tsx","../../src/shared/views/play-clip/components/play-clip/play-clip.module.scss","../../src/shared/views/play-clip/components/play-clip/PlayClip.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { CurrentUser, PresentationAudience, VideoTypes } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\n\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { InteractiveHelpers } from 'shared/utils/InteractiveHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nconst namespace = 'shared.playClip';\n\ninterface ClippedFromProps {\n originalVideo: VideoTypes;\n queryParams: PlayViewQueryParams;\n audiences: PresentationAudience[];\n shareId?: string;\n headingRef: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n currentUser: CurrentUser;\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ClippedFrom(props: ClippedFromProps) {\n const { hasPermissions } = usePermissions();\n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem, presentationSlug: null });\n\n return (\n <section\n className='play-page-section'\n id={PlayPageAnchor.ClippedFrom}\n ref={el => {\n (el && props.headingRef?.current) && props.headingRef.current.set(PlayPageAnchor.ClippedFrom, el);\n }}\n >\n <h2 className='h4 mb-0'><Text namespace={namespace} phrase='clippedFrom' /></h2>\n <VideoActionsContext.Provider value={videoActions}>\n <VideoList\n videos={[props.originalVideo]}\n getVideoAppLink={(v, opts) => VideoAppLinkHelper.getAppLink(v, {\n ...opts,\n context: props.queryParams.context,\n contextId: props.queryParams.contextId,\n playNext: props.queryParams.playNext,\n shareId: props.shareId,\n moviesAndTv: props.queryParams.mtv,\n includeContext: props.currentUser?.isAuthenticated\n }, null)}\n hasPermissions={hasPermissions}\n presentationAudiences={props.audiences}\n getPreviewQuestionsAppLink={interactive => InteractiveHelpers.getPreviewQuestionsAppLink(interactive)}\n commonVideoProps={props.commonVideoProps}\n />\n </VideoActionsContext.Provider>\n </section>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .main.expandedToc {\n width: calc(100% - 15rem); //minus sidebar toc width and margin\n }\n\n .main.theatreMode {\n width: 100% !important;\n }\n\n .theatreModeContent {\n display: flex;\n margin: auto !important;\n\n @include media('<=xl') {\n max-width: 100%;\n }\n }\n\n .theatreModePlayPageContainer {\n //override TeacherLayoutComponent container style\n @media (min-width: 1200px) {\n max-width: none !important;\n }\n }\n\n .theatreModeLeftContent {\n width: calc(100% - 15rem);\n @include media('<=lg') {\n width: 100%;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { Breadcrumb, Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { VideoDetailsWithScrollbarV2 } from 'libs/shared/components/play-page/details/VideoDetailsV2';\nimport { hasGlanceData } from 'libs/shared/components/play-page/glance/VideoAtAGlanceUtilsV2';\nimport { VideoAtAGlanceV2 } from 'libs/shared/components/play-page/glance/VideoAtAGlanceV2';\nimport { getResources, PlayPageResources } from 'libs/shared/components/play-page/resources-widget/PlayPageResources';\nimport { SeoConstants } from 'libs/shared/constants/SeoConstants';\nimport { GlobalPlayerConsumer } from 'libs/shared/context/player-context/components/GlobalPlayerConsumer';\nimport { usePlayerContext } from 'libs/shared/context/player-context/PlayerContext';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { HasProductFunc } from 'libs/shared/hooks/UseProducts';\nimport { useTableOfContentsActiveHeading } from 'libs/shared/hooks/useTableOfContentsActiveHeading';\nimport { useTableOfContentsScroll } from 'libs/shared/hooks/useTableOfContentsScroll';\nimport { Clip, CurrentUser, InteractiveMetadata, Link, PointOfInterest, PresentationAudience, Resource } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\nimport { DownloadHelper } from 'libs/shared/utils/DownloadHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { CitationWidget } from 'shared/components/citations/CitationWidget';\nimport { ArchivedBanner } from 'shared/components/play-page/ArchivedBanner';\nimport { PlayPageClips } from 'shared/components/play-page/components/play-page-clips/PlayPageClips';\nimport { PlayPageInteractives } from 'shared/components/play-page/components/play-page-interactives/PlayPageInteractives';\nimport { TableOfContentsContainer, TOC_IGNORE_BOUNDARY } from 'shared/components/play-page/components/table-of-contents/TableOfContents';\nimport { PlayPageTitleAndActions } from 'shared/components/play-page/components/title-and-actions/PlayPageTitleAndActions';\nimport { getFolderAppLink, getLibraryAppLink } from 'shared/components/play-page/PlayPageUtils';\nimport { RestrictionBanner } from 'shared/components/play-page/RestrictionBanner';\nimport { PlayerPlaceholder } from 'shared/components/player-placeholder/PlayerPlaceholder';\nimport { RelatedVideos } from 'shared/components/related-videos/RelatedVideos';\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\nimport { RelatedVideosHash } from 'shared/hooks/useGetRelatedVideos';\nimport { VideoFeaturesHash } from 'shared/hooks/useVideoFeatureAccess';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\nimport { useResourcePopup } from 'shared/views/play/components/play-page/hooks/useResourcePopup';\nimport { getContentClassName, getIsTheatreMode, getMainClassName } from 'shared/views/play/components/play-page/PlayPageUtils';\nimport { usePlayPageTableOfContent } from 'shared/views/play/hooks/usePlayPageTableOfContent';\nimport { useSectionHeadings } from 'shared/views/play/hooks/useSectionHeadings';\nimport { useTheatreModeStyle } from 'shared/views/play/hooks/useTheatreStyle';\nimport { PlayPageUtils } from 'shared/views/play/PlayPageUtil';\nimport { ClippedFrom } from 'shared/views/play-clip/components/clipped-from/ClippedFrom';\n\nimport styles from './play-clip.module.scss';\n\nconst getResourceAppLink = (videoId: string, shareId: string, canViewResource: boolean) =>\n (resource: Resource | Link) => {\n if (!canViewResource) {\n return {\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n };\n }\n\n return {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PREVIEW_PDF,\n args: [resource.id],\n params: {\n videoId: videoId,\n shareId: shareId\n }\n };\n };\n\ninterface PlayClipProps {\n clip: Clip;\n clips: Clip[];\n interactives: InteractiveMetadata[];\n currentUser: CurrentUser;\n relatedVideos: RelatedVideosHash;\n queryParams: PlayViewQueryParams;\n hasProduct: HasProductFunc;\n audiences: PresentationAudience[];\n shareId?: string;\n canManageVideoAccess: boolean;\n pointsOfInterest?: PointOfInterest[];\n featureAccess: VideoFeaturesHash;\n tableOfContentsId: string;\n shouldShowSideTableOfContents: boolean;\n hasTopicDirectories: boolean;\n hasTheatreMode: boolean;\n breadcrumbs?: Breadcrumb[];\n commonVideoProps: CommonVideoProps;\n}\n\nexport function PlayClip(props: PlayClipProps): JSX.Element {\n const playerContext = usePlayerContext();\n\n const { hasPermissions } = usePermissions();\n const { canConsume } = VideoHelper.getCanBeConsumed(props.clip);\n \n const theatreMode = getIsTheatreMode(props.hasTheatreMode, playerContext);\n const shouldUseTheareModeStyle = useTheatreModeStyle(\n props.hasTheatreMode,\n playerContext.mode,\n playerContext.defaultDisplayMode\n );\n\n function toggleTheatreMode(value: boolean) {\n playerContext.playerRef?.current?.toggleTheatreMode?.(value);\n }\n\n const {\n tableOfContentsActiveId,\n setTableOfContentsActiveId,\n controlledId,\n setControlledId,\n tableOfContentsExpanded,\n onToggleTableOfContents\n } = usePlayPageTableOfContent(props.tableOfContentsId, props.hasTheatreMode, theatreMode);\n\n const hasGlance = hasGlanceData(props.clip) && props.featureAccess.canViewGlance;\n\n const { headingRef, headingElements } = useSectionHeadings(hasGlance);\n const items = headingElements.map(ele => {\n return {\n id: ele.id as PlayPageAnchor,\n name: PlayPageUtils.getSectionHeading(\n ele.id as PlayPageAnchor,\n {\n clips: props.clips,\n interactives: props.interactives,\n resources: props.clip.resources?.data,\n isPlayClipPage: true\n }\n )\n };\n });\n\n useTableOfContentsActiveHeading({\n setActiveId: setTableOfContentsActiveId,\n headingElements,\n controlledId,\n setControlledId\n });\n\n useTableOfContentsScroll(headingElements, controlledId);\n\n const isArchived = VideoHelper.isVideoTypeArchived(props.clip);\n const hasStudentExperience = hasPermissions(PermissionName.StudentExperience);\n /**\n * Need to use a ref because if we use state, onExitImmersiveReader will have a stale\n * reference of the state. This is because the state is changed in onLaunchImmersiveReader\n * which is passed in at the same time as onExitImmersiveReader\n */\n const shouldPlayOnExitImmersiveReader = React.useRef(false);\n\n const clipResourceAppLink = getResourceAppLink(\n props.clip.id,\n props.shareId,\n props.featureAccess.canViewResourceItems\n );\n\n useResourcePopup({\n resourcePopupId: props.queryParams?.resourceId,\n resources: props.clip.resources?.data,\n getResourceAppLink: clipResourceAppLink\n });\n\n function onLaunchImmersiveReader(): void {\n shouldPlayOnExitImmersiveReader.current = !playerContext?.playerRef?.current?.isPaused();\n playerContext?.playerRef?.current?.pause();\n }\n\n function onExitImmersiveReader(): void {\n if (!shouldPlayOnExitImmersiveReader.current)\n return;\n\n playerContext?.playerRef?.current?.play();\n }\n\n function canAccessOriginal(): boolean {\n if (!props.clip._parentVideo || !props.clip._canBeConsumed?.value)\n return false;\n\n if (!props.currentUser?.isAuthenticated)\n return false;\n\n if (!props.hasProduct(ProductId.Primary))\n return false;\n\n if (hasStudentExperience)\n return false;\n\n return true;\n }\n\n function getOriginalVideoAppLink(): Core.AppLink {\n if (!canAccessOriginal())\n return null;\n \n return {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [\n null,\n props.clip._parentVideo.id,\n TextHelper.slugify(props.clip._parentVideo.name)\n ]\n };\n }\n\n const showPlayerPlaceholder = playerContext.mode === 'picture-in-picture' || props.featureAccess.canViewPublicLayout;\n\n const otherClips = props.clips?.filter(c => c.id.toString() !== props.clip.id.toString()) ?? [];\n\n const calcClassNameProps = {\n hasTheatreMode: props.hasTheatreMode,\n shouldShowSideTableOfContents: props.shouldShowSideTableOfContents,\n tableOfContentsExpanded,\n theatreMode\n };\n const mainClassName = getMainClassName(calcClassNameProps);\n const contentClassName = getContentClassName(calcClassNameProps);\n\n const [ , setContainerClassName ] = useViewModel(ViewModelKeys.PLAY_PAGE_CONTAINER_CLASS_NAME);\n\n const resources = getResources(props.clip, hasPermissions(PermissionName.StudentExperience));\n const downloadableResources = resources.filter(MasterTypeHelper.isResource);\n\n function onDownloadClick() {\n if (downloadableResources.length === 1) {\n DownloadHelper.downloadResource(\n downloadableResources[0],\n { clipId: props.clip.id, clipName: props.clip.name },\n { location: LocationContext.PlayClip, actionType: UserAction.Download, entity: EntityType.Resource }\n );\n return;\n }\n \n Core.AppLinkHelper.trigger({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.RESOURCE_DOWNLOAD,\n args: [ props.clip?.id, props.shareId ]\n });\n }\n \n React.useEffect(() => {\n if (!theatreMode) {\n setContainerClassName('');\n } else {\n setContainerClassName(styles.theatreModePlayPageContainer);\n }\n }, [theatreMode]);\n\n React.useEffect(() => {\n return () => setContainerClassName('');\n }, []);\n\n return (\n <div className={`px-4 play-page-sections-container ${props.shouldShowSideTableOfContents ? 'row g-0' : ''}`}>\n <main className={`${styles.main} ${mainClassName}`}>\n {!!props.breadcrumbs?.length && (\n <div className='mb-2'>\n <Breadcrumbs breadcrumbs={props.breadcrumbs} />\n </div>\n )}\n\n <RestrictionBanner\n restrictions={props.clip._restrictions}\n yearGroups={props.commonVideoProps.yearGroups}\n objectId={props.clip.id}\n objectTypeId={MasterType.Clip}\n canManageVideoAccess={props.canManageVideoAccess}\n />\n\n {isArchived && (\n <ArchivedBanner\n typeId={props.clip.typeId}\n hasStudentExperience={hasStudentExperience}\n />\n )}\n\n <section\n id={PlayPageAnchor.Video}\n className={`mb-2 ${SeoConstants.GLOBAL_PLAYER_SELECTOR}`}\n ref={el => { (el && headingRef?.current) && headingRef.current.set(PlayPageAnchor.Video, el); }}\n >\n {canConsume && (\n <GlobalPlayerConsumer\n key={props.clip.id}\n objectId={props.clip.id}\n objectTypeId={props.clip.typeId}\n shareId={props.shareId}\n context={props.queryParams?.context}\n contextId={props.queryParams?.contextId}\n moviesAndTv={props.queryParams?.mtv}\n playNext={props.queryParams?.playNext}\n startTime={props.queryParams?.t ?? props.queryParams?.startTime}\n mode='default'\n location='play-page'\n />\n )}\n\n <div className={showPlayerPlaceholder ? '' : 'd-none'}>\n <PlayerPlaceholder\n video={props.clip}\n type='pip'\n />\n </div>\n </section>\n\n <div className={contentClassName}>\n <div className={shouldUseTheareModeStyle ? `${styles.theatreModeLeftContent}` : 'w-100'}>\n <PlayPageTitleAndActions\n presentationSlug={null}\n media={props.clip}\n yearGroups={props.commonVideoProps.yearGroups}\n audiences={props.audiences}\n originalVideoAppLink={getOriginalVideoAppLink()}\n featureAccess={props.featureAccess}\n shareId={props.shareId}\n showTitlePadlock={!props.commonVideoProps.hasStudentExperience\n && !props.commonVideoProps.hasGuestExperience}\n />\n\n {/* if no glance render video details here */}\n {hasGlance ? (\n <VideoAtAGlanceV2\n video={props.clip}\n pointsOfInterest={props.pointsOfInterest}\n setStartTime={(time: number) => playerContext.playerRef.current?.currentTime(time)}\n getTagAppLink={tag => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: { tagOrClassification: tag.name }\n })}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n canViewGlance={hasGlance}\n />\n ) : (\n <VideoDetailsWithScrollbarV2\n video={props.clip}\n currentUser={props.currentUser}\n onLaunchImmersiveReader={onLaunchImmersiveReader}\n onExitImmersiveReader={onExitImmersiveReader}\n getTagAppLink={tag => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: { tagOrClassification: tag.name }\n })}\n headingRef={headingRef}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n getLibraryAppLink={getLibraryAppLink}\n getFolderAppLink={getFolderAppLink}\n />\n )}\n\n <PlayPageResources\n video={props.clip}\n canViewResources={props.featureAccess.canViewResourceItems}\n imageCdnUrl={props.commonVideoProps.imageCdnUrl}\n getAppLink={clipResourceAppLink}\n analyticsData={{ clipId: props.clip.id, clipName: props.clip.name }}\n resourceThumbnailFallbackUrl={ImageUrls.Fallbacks.RESOURCE_THUMBNAIL}\n headingRef={headingRef}\n onDownloadClick={onDownloadClick}\n resources={resources}\n downloadableResources={downloadableResources}\n aboutResourcesAppLink={VideoAppLinkHelper.getAboutResourceAppLink()}\n />\n\n <PlayPageInteractives\n presentationSlug={null}\n video={props.clip}\n interactives={props.interactives}\n analyticsData={{ clipId: props.clip.id, clipName: props.clip.name }}\n canViewInteractives={props.featureAccess.canViewInteractives}\n headingRef={headingRef}\n commonVideoProps={props.commonVideoProps}\n />\n\n <PlayPageClips\n presentationSlug={null}\n clips={otherClips || []}\n video={props.clip}\n canViewClips={props.featureAccess.canViewClips}\n audiences={props.audiences}\n headingRef={headingRef}\n analyticsData={{ clipId: props.clip.id, clipName: props.clip.name }}\n commonVideoProps={props.commonVideoProps}\n />\n\n {/* if has glance, render video details here */}\n {hasGlance && (\n <VideoDetailsWithScrollbarV2\n video={props.clip}\n currentUser={props.currentUser}\n onLaunchImmersiveReader={onLaunchImmersiveReader}\n onExitImmersiveReader={onExitImmersiveReader}\n getTagAppLink={tag => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: { tagOrClassification: tag.name }\n })}\n headingRef={headingRef}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n showHeading\n getLibraryAppLink={hasPermissions(PermissionName.ViewLibraries) ? getLibraryAppLink : null}\n getFolderAppLink={hasPermissions(PermissionName.ViewLibraries) ? getFolderAppLink : null}\n />\n )}\n \n {!!canAccessOriginal() && (\n <ClippedFrom\n originalVideo={props.clip._parentVideo}\n shareId={props.shareId}\n queryParams={props.queryParams}\n audiences={props.audiences}\n headingRef={headingRef}\n currentUser={props.currentUser}\n commonVideoProps={props.commonVideoProps}\n />\n )}\n\n {!VideoHelper.isUgc(props.clip._parentVideo) && (\n <CitationWidget\n headingRef={headingRef}\n media={props.clip}\n parentVideo={props.clip._parentVideo}\n contentRegion={props.currentUser.contentRegion}\n shareId={props.shareId}\n presentationSlug={null}\n />\n )}\n\n <RelatedVideos\n presentationSlug={null}\n currentVideo={props.clip}\n relatedVideos={props.relatedVideos}\n currentUser={props.currentUser}\n audiences={props.audiences}\n getVideoAppLink={(v, opts) => VideoAppLinkHelper.getAppLink(v, {\n ...opts,\n context: props.queryParams.context,\n contextId: props.queryParams.contextId,\n playNext: props.queryParams.playNext,\n shareId: props.shareId,\n moviesAndTv: props.queryParams.mtv,\n includeContext: props.currentUser?.isAuthenticated\n }, null)}\n moviesAndTv={props.queryParams.mtv}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n {theatreMode && (\n <TableOfContentsContainer\n isExpanded={tableOfContentsExpanded}\n setIsExpanded={onToggleTableOfContents}\n toggleTheatreMode={ null}\n items={items}\n activeId={tableOfContentsActiveId}\n setControlledId={setControlledId}\n analyticsData={{ videoId: props.clip.id, videoName: props.clip.name }}\n showInSide={props.shouldShowSideTableOfContents}\n isTheatreMode={true}\n hasTranscription={props.hasTheatreMode}\n shouldShow={items.length >= TOC_IGNORE_BOUNDARY}\n />\n )}\n </div>\n </main>\n\n {!theatreMode && (\n <TableOfContentsContainer\n isExpanded={tableOfContentsExpanded}\n setIsExpanded={onToggleTableOfContents}\n toggleTheatreMode={props.hasTheatreMode ? toggleTheatreMode : null}\n items={items}\n activeId={tableOfContentsActiveId}\n setControlledId={setControlledId}\n analyticsData={{ videoId: props.clip.id, videoName: props.clip.name }}\n showInSide={props.shouldShowSideTableOfContents}\n isTheatreMode={false}\n hasTranscription={props.hasTheatreMode}\n shouldShow={items.length >= TOC_IGNORE_BOUNDARY}\n />\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|