@clickview/lite 0.104.0-rc.3 → 0.104.0-rc.4
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 +471 -471
- package/dist/bundles.json +1 -1
- package/dist/en.json +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/{2p_6pVn6.chunk.js → B2wDqI1S.chunk.js} +2 -2
- package/dist/scripts/{2p_6pVn6.chunk.js.map → B2wDqI1S.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/{x2GB1P6E2.chunk.js → BUVko1EF2.chunk.js} +3 -3
- package/dist/scripts/{x2GB1P6E2.chunk.js.map → BUVko1EF2.chunk.js.map} +1 -1
- package/dist/scripts/{Cl2FZEIX.chunk.js → BYbQI3CA.chunk.js} +2 -2
- package/dist/scripts/{Cl2FZEIX.chunk.js.map → BYbQI3CA.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 → BlsbWOzw2.chunk.js} +2 -2
- package/dist/scripts/{VJQU9c4G2.chunk.js.map → BlsbWOzw2.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/{ft2cSH-j.chunk.js → C3PXfYEd.chunk.js} +2 -2
- package/dist/scripts/{ft2cSH-j.chunk.js.map → C3PXfYEd.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/{Bm5qACA52.chunk.js → CNfmLVE82.chunk.js} +2 -2
- package/dist/scripts/{Bm5qACA52.chunk.js.map → CNfmLVE82.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/{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/{DFFq-sgD.chunk.js → CwYg3Mqk.chunk.js} +2 -2
- package/dist/scripts/{DFFq-sgD.chunk.js.map → CwYg3Mqk.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/{BTcLMVw4.chunk.js → DKDWcWxk.chunk.js} +2 -2
- package/dist/scripts/{BTcLMVw4.chunk.js.map → DKDWcWxk.chunk.js.map} +1 -1
- package/dist/scripts/{B6GfukUn2.chunk.js → DN82USWW2.chunk.js} +2 -2
- package/dist/scripts/{B6GfukUn2.chunk.js.map → DN82USWW2.chunk.js.map} +1 -1
- package/dist/scripts/{C4OV7pr-.chunk.js → DWo8DfD9.chunk.js} +2 -2
- package/dist/scripts/{C4OV7pr-.chunk.js.map → DWo8DfD9.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-CfAhMxn1.js} +4 -4
- package/dist/scripts/{app-LEZ4B6dG.js.map → app-CfAhMxn1.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/{qT_Twe2q.chunk.js → pKtXmGbN.chunk.js} +2 -2
- package/dist/scripts/{qT_Twe2q.chunk.js.map → pKtXmGbN.chunk.js.map} +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"C_tdgSWS2.chunk.js","names":[],"sources":["../../src/shared/errors/interactives/cannot-edit-published-interactive/CannotEditPublishInteractiveError.ts","../../src/shared/errors/interactives/cannot-edit/CannotEditError.ts","../../src/apps/interactives/views/edit-interactive/useEnsureOriginal.ts","../../src/apps/interactives/views/edit-interactive/EditInteractiveView.tsx"],"sourcesContent":["import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\n\nconst namespace = 'shared.cannotEditPublishedInteractive';\n\nexport class CannotEditPublishInteractiveError extends ErrorPageError {\n constructor() {\n super(LanguageService.getPhrase(namespace, 'title'));\n }\n\n // @ts-ignore\n public get name(): string {\n return 'CannotEditPublishedInteractiveError';\n }\n\n // @ts-ignore\n public get heading(): string {\n return LanguageService.getPhrase(namespace, 'heading');\n }\n\n // @ts-ignore\n public get description(): string {\n return LanguageService.getPhrase(namespace, 'description');\n }\n}\n","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\n\nconst namespace = 'shared.cannotEditInteractive';\n\nexport class CannotEditInteractiveError extends ErrorPageError {\n constructor() {\n super(LanguageService.getPhrase(namespace, 'title'));\n }\n\n // @ts-ignore\n public get name(): string {\n return 'CannnotEditInteractiveError';\n }\n\n // @ts-ignore\n public get heading(): string {\n return LanguageService.getPhrase(namespace, 'heading');\n }\n\n // @ts-ignore\n public get description(): string {\n return LanguageService.getPhrase(namespace, 'description');\n }\n}\n","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { InteractiveOriginType } from 'libs/shared/enums/InteractiveOriginType';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { EditInteractiveMetadataOriginRequest, Interactive, InteractiveMetadata } from 'libs/shared/interfaces';\n\nimport { CannotEditInteractiveError } from 'shared/errors/interactives/cannot-edit/CannotEditError';\n\nexport const useEnsureOriginal = (\n interactiveMetadata: InteractiveMetadata\n) => {\n const dispatch = useDispatch();\n\n /* Used to ensure only one request */\n const [ requested, setRequest ] = React.useState(false);\n const [ ready, setReady ] = React.useState(false);\n\n React.useEffect(() => {\n if (!interactiveMetadata || ready || requested)\n return;\n\n if (interactiveMetadata.originType === InteractiveOriginType.Original) {\n setReady(true);\n return;\n }\n\n const error = () => {\n Core.ErrorHelper.throw(new CannotEditInteractiveError());\n };\n\n const success = (resp: Interactive) => {\n const data: EditInteractiveMetadataOriginRequest = {\n originType: InteractiveOriginType.Original,\n interactiveId: resp.id\n };\n\n Flight.fetch(\n dispatch,\n InteractiveRequests.updateInteractiveMetadata(\n interactiveMetadata.id,\n data,\n () => setReady(true),\n error\n )\n );\n };\n\n setRequest(true);\n Flight.fetch(dispatch, InteractiveRequests.copyInteractive(\n interactiveMetadata.interactiveId,\n success,\n error\n ));\n }, [interactiveMetadata]);\n\n return ready;\n};\n","import React from 'react';\nimport { createHtmlPortalNode, OutPortal } from 'react-reverse-portal';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { VideoNotFoundError } from 'libs/shared/errors/videos/video-not-found/VideoNotFoundError';\nimport { VideoPrivateError } from 'libs/shared/errors/videos/video-private/VideoPrivateError';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config, CurrentUser, InteractiveMetadata, PlayerViewKey } from 'libs/shared/interfaces';\nimport { PlayerAnalyticsTracker } from 'libs/shared/utils/PlayerAnalyticsTracker';\n\nimport { InteractivePlayer } from 'projects/player/players/interactive-player';\nimport { InteractiveMode } from 'projects/player/plugins/interactive-plugin/interfaces';\nimport { ClickViewInteractivePlayer } from 'projects/player/react/InteractivePlayer';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { CannotEditPublishInteractiveError } from 'shared/errors/interactives/cannot-edit-published-interactive/CannotEditPublishInteractiveError';\n\nimport { InteractivePartialLoading } from 'apps/interactives/components/interactive-partial-loading/InteractivePartialLoading';\nimport { getInteractiveAnalyticsData } from 'apps/interactives/utils/getInteractiveAnalyticsData';\n\nimport { useEnsureOriginal } from './useEnsureOriginal';\n\nconst namespace = 'interactives.editInteractiveView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst EDIT_APPLINK = {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.EDIT_INTERACTIVE_DETAILS\n};\n\nconst videoErrors = {\n notFound: VideoNotFoundError,\n forbidden: {\n privacy: VideoPrivateError\n }\n};\n\ninterface EditInteractiveProps {\n id: string;\n}\n\nexport function EditInteractiveView(props: EditInteractiveProps): React.ReactElement {\n const [ ready, setReady ] = React.useState(false);\n\n const [ hasCheckedStatus, setHasCheckedStatus ] = React.useState(false);\n const playerRef = React.useRef<InteractivePlayer>(null);\n\n const { experimentalInteractiveQuestions } = useSettings(null);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(!!currentUser.data &&\n InteractiveRequests.interactiveMetadata(props.id));\n\n useSetPageMetadata({\n title: interactiveMetadata.data ? getPhrase('pageTitle', { name: interactiveMetadata.data.name }) : null\n });\n\n /**\n * This will check if the interactive is a copy or not\n * and update it to original if it is a copy.\n */\n const isOriginal = useEnsureOriginal(interactiveMetadata.data);\n\n /**\n * We don't fetch our view key until we know our interactive has been upgraded\n * to an original\n */\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(isOriginal ?\n PlayerRequests.createViewKey(interactiveMetadata.data.id, MediaIdType.MasterObject) : null);\n\n const token = Flight.useBasicFetch<HashObject>(UserRequests.token());\n\n const actionsPortalNode = React.useMemo(() => createHtmlPortalNode(), []);\n const questionListPortalNode = React.useMemo(() => createHtmlPortalNode(), []);\n\n const analyticsTracker = React.useRef<PlayerAnalyticsTracker>(null);\n\n useHandleObjectError(interactiveMetadata, videoErrors);\n\n function onReady(player: InteractivePlayer): void {\n playerRef.current = player;\n\n setReady(true);\n\n analyticsTracker.current = new PlayerAnalyticsTracker({\n player,\n video: interactiveMetadata.data,\n analyticsLocation: LocationContext.EditInteractive\n });\n }\n\n if (!viewKey.data || !config.data || !interactiveMetadata.data || !token.data)\n return <InteractivePartialLoading />;\n\n /**\n * We do this because when the publish popup publishes\n * the flight state updates and this briefly re-renders\n * with data.status being published\n */\n if (!hasCheckedStatus) {\n setHasCheckedStatus(true);\n if (interactiveMetadata.data.status !== CurationStatus.Draft) {\n Core.ErrorHelper.throw(new CannotEditPublishInteractiveError());\n return null;\n }\n }\n\n const analyticsData = getInteractiveAnalyticsData(interactiveMetadata.data);\n\n const baseAnalyticsOptions = {\n entity: EntityType.Interactive,\n location: LocationContext.EditInteractive,\n workflowPhase: WorkflowPhase.Start\n };\n\n function onClickEditDetails(): void {\n AnalyticsHelper.logUserAction(analyticsData, {\n actionType: UserAction.Edit,\n ...baseAnalyticsOptions\n });\n\n Core.AppLinkHelper.trigger({\n ...EDIT_APPLINK,\n args: [props.id]\n });\n }\n\n function onClickPublish(): void {\n AnalyticsHelper.logUserAction(analyticsData, {\n actionType: UserAction.Publish,\n ...baseAnalyticsOptions\n });\n\n Core.AppLinkHelper.trigger({\n ...EDIT_APPLINK,\n args: [props.id],\n params: { publish: true }\n });\n }\n\n return (\n <>\n {!ready && <InteractivePartialLoading />}\n <div className={`px-3 ${ready ? '' : 'd-none'}`}>\n <div className='d-flex justify-content-between align-items-center mb-3'>\n <h1 className='h3 text-truncate mb-0 pb-1'>{interactiveMetadata.data.name}</h1>\n <div className='flex-shrink-0'>\n <OutPortal node={actionsPortalNode} />\n </div>\n </div>\n <ClickViewInteractivePlayer\n viewKey={viewKey.data.viewKey}\n imageApi={new URL(config.data.imageCdnUrl)}\n playerApi={new URL(config.data.playerApiUrl)}\n hotkeyElQuerySelector='body'\n autoplay\n onReady={onReady}\n currentUser={currentUser.data}\n mode={InteractiveMode.Create}\n actionsPortalNode={actionsPortalNode}\n questionListPortalNode={questionListPortalNode}\n authToken={token.data.value}\n onClickEditDetails={onClickEditDetails}\n onClickPublish={onClickPublish}\n enableImmersiveReader\n experimentalInteractiveQuestions={experimentalInteractiveQuestions}\n // todo use real customer setting when we start to implement lite\n hasAiInteractives={false}\n />\n <OutPortal node={questionListPortalNode} />\n </div>\n </>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Bzk4AwVx2.chunk.js","names":[],"sources":["../../src/shared/errors/interactives/cannot-edit-published-interactive/CannotEditPublishInteractiveError.ts","../../src/shared/errors/interactives/cannot-edit/CannotEditError.ts","../../src/apps/interactives/views/edit-interactive/useEnsureOriginal.ts","../../src/apps/interactives/views/edit-interactive/EditInteractiveView.tsx"],"sourcesContent":["import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\n\nconst namespace = 'shared.cannotEditPublishedInteractive';\n\nexport class CannotEditPublishInteractiveError extends ErrorPageError {\n constructor() {\n super(LanguageService.getPhrase(namespace, 'title'));\n }\n\n // @ts-ignore\n public get name(): string {\n return 'CannotEditPublishedInteractiveError';\n }\n\n // @ts-ignore\n public get heading(): string {\n return LanguageService.getPhrase(namespace, 'heading');\n }\n\n // @ts-ignore\n public get description(): string {\n return LanguageService.getPhrase(namespace, 'description');\n }\n}\n","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\n\nconst namespace = 'shared.cannotEditInteractive';\n\nexport class CannotEditInteractiveError extends ErrorPageError {\n constructor() {\n super(LanguageService.getPhrase(namespace, 'title'));\n }\n\n // @ts-ignore\n public get name(): string {\n return 'CannnotEditInteractiveError';\n }\n\n // @ts-ignore\n public get heading(): string {\n return LanguageService.getPhrase(namespace, 'heading');\n }\n\n // @ts-ignore\n public get description(): string {\n return LanguageService.getPhrase(namespace, 'description');\n }\n}\n","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { InteractiveOriginType } from 'libs/shared/enums/InteractiveOriginType';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { EditInteractiveMetadataOriginRequest, Interactive, InteractiveMetadata } from 'libs/shared/interfaces';\n\nimport { CannotEditInteractiveError } from 'shared/errors/interactives/cannot-edit/CannotEditError';\n\nexport const useEnsureOriginal = (\n interactiveMetadata: InteractiveMetadata\n) => {\n const dispatch = useDispatch();\n\n /* Used to ensure only one request */\n const [ requested, setRequest ] = React.useState(false);\n const [ ready, setReady ] = React.useState(false);\n\n React.useEffect(() => {\n if (!interactiveMetadata || ready || requested)\n return;\n\n if (interactiveMetadata.originType === InteractiveOriginType.Original) {\n setReady(true);\n return;\n }\n\n const error = () => {\n Core.ErrorHelper.throw(new CannotEditInteractiveError());\n };\n\n const success = (resp: Interactive) => {\n const data: EditInteractiveMetadataOriginRequest = {\n originType: InteractiveOriginType.Original,\n interactiveId: resp.id\n };\n\n Flight.fetch(\n dispatch,\n InteractiveRequests.updateInteractiveMetadata(\n interactiveMetadata.id,\n data,\n () => setReady(true),\n error\n )\n );\n };\n\n setRequest(true);\n Flight.fetch(dispatch, InteractiveRequests.copyInteractive(\n interactiveMetadata.interactiveId,\n success,\n error\n ));\n }, [interactiveMetadata]);\n\n return ready;\n};\n","import React from 'react';\nimport { createHtmlPortalNode, OutPortal } from 'react-reverse-portal';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { VideoNotFoundError } from 'libs/shared/errors/videos/video-not-found/VideoNotFoundError';\nimport { VideoPrivateError } from 'libs/shared/errors/videos/video-private/VideoPrivateError';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config, CurrentUser, InteractiveMetadata, PlayerViewKey } from 'libs/shared/interfaces';\nimport { PlayerAnalyticsTracker } from 'libs/shared/utils/PlayerAnalyticsTracker';\n\nimport { InteractivePlayer } from 'projects/player/players/interactive-player';\nimport { InteractiveMode } from 'projects/player/plugins/interactive-plugin/interfaces';\nimport { ClickViewInteractivePlayer } from 'projects/player/react/InteractivePlayer';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { CannotEditPublishInteractiveError } from 'shared/errors/interactives/cannot-edit-published-interactive/CannotEditPublishInteractiveError';\n\nimport { InteractivePartialLoading } from 'apps/interactives/components/interactive-partial-loading/InteractivePartialLoading';\nimport { getInteractiveAnalyticsData } from 'apps/interactives/utils/getInteractiveAnalyticsData';\n\nimport { useEnsureOriginal } from './useEnsureOriginal';\n\nconst namespace = 'interactives.editInteractiveView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst EDIT_APPLINK = {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.EDIT_INTERACTIVE_DETAILS\n};\n\nconst videoErrors = {\n notFound: VideoNotFoundError,\n forbidden: {\n privacy: VideoPrivateError\n }\n};\n\ninterface EditInteractiveProps {\n id: string;\n}\n\nexport function EditInteractiveView(props: EditInteractiveProps): React.ReactElement {\n const [ ready, setReady ] = React.useState(false);\n\n const [ hasCheckedStatus, setHasCheckedStatus ] = React.useState(false);\n const playerRef = React.useRef<InteractivePlayer>(null);\n\n const { experimentalInteractiveQuestions } = useSettings(null);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(!!currentUser.data &&\n InteractiveRequests.interactiveMetadata(props.id));\n\n useSetPageMetadata({\n title: interactiveMetadata.data ? getPhrase('pageTitle', { name: interactiveMetadata.data.name }) : null\n });\n\n /**\n * This will check if the interactive is a copy or not\n * and update it to original if it is a copy.\n */\n const isOriginal = useEnsureOriginal(interactiveMetadata.data);\n\n /**\n * We don't fetch our view key until we know our interactive has been upgraded\n * to an original\n */\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(isOriginal ?\n PlayerRequests.createViewKey(interactiveMetadata.data.id, MediaIdType.MasterObject) : null);\n\n const token = Flight.useBasicFetch<HashObject>(UserRequests.token());\n\n const actionsPortalNode = React.useMemo(() => createHtmlPortalNode(), []);\n const questionListPortalNode = React.useMemo(() => createHtmlPortalNode(), []);\n\n const analyticsTracker = React.useRef<PlayerAnalyticsTracker>(null);\n\n useHandleObjectError(interactiveMetadata, videoErrors);\n\n function onReady(player: InteractivePlayer): void {\n playerRef.current = player;\n\n setReady(true);\n\n analyticsTracker.current = new PlayerAnalyticsTracker({\n player,\n video: interactiveMetadata.data,\n analyticsLocation: LocationContext.EditInteractive\n });\n }\n\n if (!viewKey.data || !config.data || !interactiveMetadata.data || !token.data)\n return <InteractivePartialLoading />;\n\n /**\n * We do this because when the publish popup publishes\n * the flight state updates and this briefly re-renders\n * with data.status being published\n */\n if (!hasCheckedStatus) {\n setHasCheckedStatus(true);\n if (interactiveMetadata.data.status !== CurationStatus.Draft) {\n Core.ErrorHelper.throw(new CannotEditPublishInteractiveError());\n return null;\n }\n }\n\n const analyticsData = getInteractiveAnalyticsData(interactiveMetadata.data);\n\n const baseAnalyticsOptions = {\n entity: EntityType.Interactive,\n location: LocationContext.EditInteractive,\n workflowPhase: WorkflowPhase.Start\n };\n\n function onClickEditDetails(): void {\n AnalyticsHelper.logUserAction(analyticsData, {\n actionType: UserAction.Edit,\n ...baseAnalyticsOptions\n });\n\n Core.AppLinkHelper.trigger({\n ...EDIT_APPLINK,\n args: [props.id]\n });\n }\n\n function onClickPublish(): void {\n AnalyticsHelper.logUserAction(analyticsData, {\n actionType: UserAction.Publish,\n ...baseAnalyticsOptions\n });\n\n Core.AppLinkHelper.trigger({\n ...EDIT_APPLINK,\n args: [props.id],\n params: { publish: true }\n });\n }\n\n return (\n <>\n {!ready && <InteractivePartialLoading />}\n <div className={`px-3 ${ready ? '' : 'd-none'}`}>\n <div className='d-flex justify-content-between align-items-center mb-3'>\n <h1 className='h3 text-truncate mb-0 pb-1'>{interactiveMetadata.data.name}</h1>\n <div className='flex-shrink-0'>\n <OutPortal node={actionsPortalNode} />\n </div>\n </div>\n <ClickViewInteractivePlayer\n viewKey={viewKey.data.viewKey}\n imageApi={new URL(config.data.imageCdnUrl)}\n playerApi={new URL(config.data.playerApiUrl)}\n hotkeyElQuerySelector='body'\n autoplay\n onReady={onReady}\n currentUser={currentUser.data}\n mode={InteractiveMode.Create}\n actionsPortalNode={actionsPortalNode}\n questionListPortalNode={questionListPortalNode}\n authToken={token.data.value}\n onClickEditDetails={onClickEditDetails}\n onClickPublish={onClickPublish}\n enableImmersiveReader\n experimentalInteractiveQuestions={experimentalInteractiveQuestions}\n // todo use real customer setting when we start to implement lite\n hasAiInteractives={false}\n />\n <OutPortal node={questionListPortalNode} />\n </div>\n </>\n );\n}\n"],"mappings":"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"}
|
|
@@ -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"./C2w0pmFW.chunk.js";import{t as i}from"./wrLrTezN.chunk.js";import{t as a}from"./BXTI9cmX.chunk.js";import{u as o}from"./BX0wDJmp.chunk.js";import{l as ee,y as s,z as te}from"./NlCAcBdo.chunk.js";import{t as ne}from"./DGmmTRu72.chunk.js";import{t as c}from"./DZX1tZ-D2.chunk.js";import{t as l}from"./CVHQXNzi2.chunk.js";import{t as u}from"./DbSUQ2A12.chunk.js";import{t as d}from"./BrbeV-Gn2.chunk.js";import{t as f}from"./LoQS6GjP.chunk.js";import{t as p}from"./CqrjHjAN.chunk.js";import{t as m}from"./eoAypzU3.chunk.js";import{t as re}from"./CgCqPbjJ.chunk.js";import{t as ie}from"./7-GJWRH82.chunk.js";import{t as ae}from"./dLd5d3X22.chunk.js";import{t as oe}from"./B2INd6bh.chunk.js";import{t as h}from"./B3gsVN-_.chunk.js";import{i as se}from"./BxjzTnvL2.chunk.js";import{n as g,t as ce}from"./CpFtf-tI2.chunk.js";import{t as _}from"./DBkEQkKm2.chunk.js";import{t as v}from"./C1loT8MD2.chunk.js";import{r as y}from"./CsWeCs8U2.chunk.js";import{n as le}from"./xa4cS6Fq.chunk.js";import{t as b}from"./jAbfamoi.chunk.js";import{t as ue}from"./WvK58Ge12.chunk.js";import{t as x}from"./jAtAipGN.chunk.js";import"./BILyzh0I.chunk.js";import{t as de}from"./CvHvrB-t.chunk.js";import{l as fe}from"./BOJK8LI1.chunk.js";import{t as S}from"./DzgAvoez.chunk.js";import{n as C}from"./D6bsI9KZ.chunk.js";import{t as pe}from"./BbgQJe-T.chunk.js";import{t as w}from"./BPavmm8c.chunk.js";import{a as me,i as he,n as ge,t as _e}from"./Bf9r1ZoF2.chunk.js";import{_ as T,a as ve,c as E,d as D,f as O,g as k,h as A,i as j,l as M,m as N,n as P,o as F,p as ye,r as be,s as xe,t as Se,u as Ce}from"./VJQU9c4G2.chunk.js";import{n as we,t as Te}from"./B3p3SaM12.chunk.js";import{n as Ee,r as De}from"./BgOLbASl2.chunk.js";import{t as I}from"./DkxWaE9O.chunk.js";var L={chaptersAndSubtitles(e,t){let n={query:`subtitles[customer],chapters`,permissionFilterOption:u.StripMetadata,contentRegion:t};return{url:c.urlBuilder(`{gateway}/v1/objects/${e}`,n),publicUrl:c.urlBuilder(`/api/objects/${e}/subtitles`,n),key:`videos:${e}:subtitles:chapters:${u.StripMetadata}`,formatData:e=>({subtitles:e.subtitles.data,chapters:e.chapters.data})}},subtitleVtt(e,t){return{url:c.urlBuilder(`{player}/srt-to-vtt`,{url:e,fullSentences:!0}),publicUrl:c.urlBuilder(`/api/player/srt-to-vtt`,{url:e,fullSentences:!0}),key:`subtitle:${e}`,formatData:e=>({...t,vtt:e})}}},R=e(r()),z=b(),B={dropdown:`_dropdown_zu639_1`},V=i(),H=`shared.curriculumLinks`;function Oe(e){let{preferredCurriculum:t,availableCurriculums:n,curriculumLinks:r,updateCurriculum:i}=e.curriculums;function a(t){i(t,{shouldLog:!0,locationContext:s.PlayPage,video:e.video})}return!e.canViewCurriculumLinks||!r?.length&&!e.curriculums.mappedCurriculums.length?(0,V.jsx)(V.Fragment,{}):(0,V.jsxs)(`section`,{id:w.CurriculumLinks,ref:t=>{t&&e.headingRef?.current&&e.headingRef.current.set(w.CurriculumLinks,t)},className:`play-page-section`,children:[(0,V.jsx)(`h2`,{className:`h4 me-2 h-100`,children:(0,V.jsx)(g,{namespace:H,phrase:`heading`})}),(0,V.jsx)(I,{availableCurriculums:n,onChangeCurriculum:a,selectedCurriculum:t,className:B.dropdown}),(0,V.jsx)(`div`,{className:`rounded border position-relative`,children:(0,V.jsx)(z.Scrollbars,{autoHeight:!0,autoHeightMax:e.height,children:(0,V.jsx)(`div`,{className:`p-3`,children:(0,V.jsx)(C,{curriculumLinks:e.curriculums.curriculumLinks,onChangeCurriculum:a,hasCompleted:e.curriculums.hasCompleted,mappedCurriculums:e.curriculums.mappedCurriculums,isFetching:e.curriculums.isFetching,getCodeAppLink:(t,n)=>e.hasNewSearch?x.getSearchAppLink(t,{[y]:n}):null,locationContext:s.PlayPage})})})})]})}var ke=`shared.play`;function U(e){let r=le(),i=r.playerRef.current?.isPaused?.(),o=r.playerRef?.current?.hasStarted?.(),{hasPermissions:c}=h(),u=ne(null),{canConsume:f}=d.getCanBeConsumed(e.video),p=F(e.hasTheatreMode,r),g=P(e.hasTheatreMode,r.mode,r.defaultDisplayMode);function v(e){e||y(!1),r.setDefaultDisplayMode?.(e?`theatre`:`normal`),r.playerRef?.current?.toggleTheatreMode?.(e)}function y(e){r.playerRef?.current?.toggleTranscript?.(e)}let{tableOfContentsActiveId:b,setTableOfContentsActiveId:x,controlledId:C,setControlledId:I,tableOfContentsExpanded:L,onToggleTableOfContents:z}=j(e.tableOfContentsId,e.hasTheatreMode,p),B=k(e.video)&&e.featureAccess.canViewGlance,{headingRef:H,headingElements:U}=be(B),W=U.map(t=>({id:t.id,name:Se.getSectionHeading(t.id,{clips:e.clips,interactives:e.interactives,resources:[...e.video.resources?.data??[],...e.video.links?.data??[]]})})),Ae=d.isVideoTypeArchived(e.video),je=c(n.StudentExperience);De({setActiveId:x,headingElements:U,controlledId:C,setControlledId:I}),Ee(U,C);let G=R.useRef(!1),K=se({settings:u,presentationSlug:e.presentationSlug}),q=K.getResourceAppLink(e.video.id,e.shareId,e.featureAccess.canViewResourceItems);M({resourcePopupId:e.resourcePopupId,resources:e.video.resources?.data,getResourceAppLink:q});function J(){G.current=!r?.playerRef?.current?.isPaused(),r?.playerRef?.current?.pause()}function Y(){G.current&&r?.playerRef?.current?.play()}let X={hasTheatreMode:e.hasTheatreMode,shouldShowSideTableOfContents:e.shouldShowSideTableOfContents,tableOfContentsExpanded:L,theatreMode:g},Me=xe(X),Ne=ve(X),Pe=r.mode===`picture-in-picture`||e.featureAccess.canViewPublicLayout&&!e.video._canBeConsumed.value,[,Z]=ae(re.PLAY_PAGE_CONTAINER_CLASS_NAME),Fe=e.commonVideoProps.getSubTextType?.(e.video),Ie=e.commonVideoProps.getSubTextAppLink(e.video),Q=we(e.video,c(n.StudentExperience)),$=Q.filter(ue.isResource);R.useEffect(()=>{Z(p?E.theatreModePlayPageContainer:``)},[p]),R.useEffect(()=>()=>Z(``),[]);function Le(){t.trigger({action:m.SignUp.SIGN_UP,application:a.SIGN_UP})}function Re(){if(!f)return Le();o||r.playerRef.current?.play(),y(!0),window.scrollTo({top:0,behavior:`smooth`})}function ze(e){r.playerRef.current?.currentTime(e)}function Be(){if($.length===1){de.downloadResource($[0],{videoId:e.video?.id,videoName:e.video.name},{location:s.PlayPage,actionType:te.Download,entity:ee.Resource});return}t.trigger({application:a.VIDEOS,action:m.Videos.RESOURCE_DOWNLOAD,args:[e.video?.id,e.shareId]})}return(0,V.jsx)(ce.Provider,{value:ke,children:(0,V.jsxs)(`div`,{className:`px-4 play-page-sections-container ${e.shouldShowSideTableOfContents?`row g-0`:``}`,children:[(0,V.jsxs)(`main`,{className:`${E.main} ${Me}`,children:[!!e.breadcrumbs?.length&&(0,V.jsx)(`div`,{className:`mb-2`,children:(0,V.jsx)(S,{breadcrumbs:e.breadcrumbs})}),(0,V.jsx)(_e,{restrictions:e.video._restrictions,yearGroups:e.commonVideoProps.yearGroups,objectId:e.video.id,objectTypeId:l.Video,canManageVideoAccess:e.canManageVideoAccess}),Ae&&(0,V.jsx)(me,{typeId:e.video.typeId,hasStudentExperience:je}),(0,V.jsxs)(`section`,{id:w.Video,className:`mb-3 ${oe.GLOBAL_PLAYER_SELECTOR}`,ref:e=>{e&&H?.current&&H.current.set(w.Video,e)},children:[f&&(0,V.jsx)(fe,{objectId:e.video.id,objectTypeId:e.video.typeId,shareId:e.shareId,context:e.params?.context,contextId:e.params?.contextId,playNext:e.params?.playNext,moviesAndTv:e.params?.mtv,startTime:e.params?.t??e.params?.startTime,endTime:e.params?.endTime,mode:`default`,location:`play-page`},e.video.id),(0,V.jsx)(`div`,{className:Pe?``:`d-none`,children:(0,V.jsx)(Ce,{video:e.video,appLink:{application:a.SIGN_UP,action:m.SignUp.SIGN_UP},type:r.mode===`picture-in-picture`?`pip`:`public`})})]}),(0,V.jsxs)(`div`,{className:Ne,children:[(0,V.jsxs)(`div`,{className:g?`${E.theatreModeLeftContent}`:`w-100`,children:[(0,V.jsx)(D,{presentationSlug:e.presentationSlug,media:e.video,subTextType:Fe,subtextAppLink:Ie,yearGroups:e.commonVideoProps.yearGroups,audiences:e.audiences,featureAccess:e.featureAccess,shareId:e.shareId,showTitlePadlock:!e.commonVideoProps.hasStudentExperience&&!e.commonVideoProps.hasGuestExperience}),B?(0,V.jsx)(A,{video:e.video,pointsOfInterest:e.pointsOfInterest,setStartTime:e=>r.playerRef.current?.currentTime(e),getTagAppLink:K.getTagAppLink,suppressInteractivity:e.featureAccess.canViewPublicLayout,canViewGlance:B}):(0,V.jsx)(T,{video:e.video,currentUser:e.currentUser,headingRef:H,onLaunchImmersiveReader:J,onExitImmersiveReader:Y,getTagAppLink:K.getTagAppLink,suppressInteractivity:e.featureAccess.canViewPublicLayout,getPartnerProfileAppLink:K.getPartnerProfileAppLink,getPartnerDashboardHubAppLink:K.getPartnerDashboardHubAppLink,getLibraryAppLink:c(n.ViewLibraries)?K.getLibraryAppLink:null,getFolderAppLink:c(n.ViewLibraries)?K.getFolderAppLink:null}),(0,V.jsx)(Oe,{height:368,curriculums:e.curriculums,canViewCurriculumLinks:e.featureAccess.canViewCurriculumLinks,headingRef:H,video:e.video,hasNewSearch:e.hasNewSearch}),(0,V.jsx)(Te,{headingRef:H,video:e.video,canViewResources:e.featureAccess.canViewResourceItems,imageCdnUrl:e.commonVideoProps.imageCdnUrl,getAppLink:q,analyticsData:{videoId:e.video.id,videoName:e.video.name},resourceThumbnailFallbackUrl:ie.Fallbacks.RESOURCE_THUMBNAIL,onDownloadClick:Be,resources:Q,downloadableResources:$,aboutResourcesAppLink:_.getAboutResourceAppLink()}),(0,V.jsx)(ye,{presentationSlug:e.presentationSlug,headingRef:H,video:e.video,interactives:e.interactives,analyticsData:{videoId:e.video.id,videoName:e.video.name},canViewInteractives:e.featureAccess.canViewInteractives,commonVideoProps:e.commonVideoProps}),(0,V.jsx)(N,{presentationSlug:e.presentationSlug,video:e.video,headingRef:H,clips:e.clips,canViewClips:e.featureAccess.canViewClips,audiences:e.audiences,analyticsData:{videoId:e.video.id,videoName:e.video.name},commonVideoProps:e.commonVideoProps}),B&&(0,V.jsx)(T,{video:e.video,currentUser:e.currentUser,headingRef:H,onLaunchImmersiveReader:J,onExitImmersiveReader:Y,getTagAppLink:K.getTagAppLink,suppressInteractivity:e.featureAccess.canViewPublicLayout,showHeading:!0,getPartnerProfileAppLink:K.getPartnerProfileAppLink,getPartnerDashboardHubAppLink:K.getPartnerDashboardHubAppLink,getLibraryAppLink:K.getLibraryAppLink,getFolderAppLink:K.getFolderAppLink}),e.shouldShowTranscript&&(0,V.jsx)(pe,{headingRef:H,video:e.video,subtitles:e.subtitles,vttSubtitles:e.vttSubtitles,chapters:e.chapters,onShowInVideo:Re,signUpLink:{action:m.SignUp.SIGN_UP,application:a.SIGN_UP},setStartTime:ze,isBot:e.isBot,isPaused:i,isAuthenticated:e.currentUser.isAuthenticated,playerApiUrl:e.playerApiUrl}),e.featureAccess.canViewCitations&&(0,V.jsx)(ge,{headingRef:H,media:e.video,contentRegion:e.currentUser.contentRegion,shareId:e.shareId,presentationSlug:e.presentationSlug}),(0,V.jsx)(he,{presentationSlug:e.presentationSlug,currentVideo:e.video,headingRef:H,commonVideoProps:e.commonVideoProps,relatedVideos:e.relatedVideos,currentUser:e.currentUser,getVideoAppLink:(t,n)=>_.getAppLink(t,{...n,context:e.params.context,contextId:e.params.contextId,playNext:e.params.playNext,shareId:e.shareId,moviesAndTv:e.params.mtv,includeContext:e.currentUser?.isAuthenticated},e.presentationSlug),audiences:e.audiences,moviesAndTv:e.params.mtv})]}),p&&(0,V.jsx)(O,{isExpanded:L,setIsExpanded:z,toggleTheatreMode:null,items:W,activeId:b,setControlledId:I,analyticsData:{videoId:e.video.id,videoName:e.video.name},showInSide:e.shouldShowSideTableOfContents,isTheatreMode:!0,hasTranscription:e.hasTheatreMode,shouldShow:W.length>=3})]})]}),!p&&(0,V.jsx)(O,{isExpanded:L,setIsExpanded:z,toggleTheatreMode:e.hasTheatreMode?v:null,items:W,activeId:b,setControlledId:I,analyticsData:{videoId:e.video.id,videoName:e.video.name},showInSide:e.shouldShowSideTableOfContents,isTheatreMode:!1,hasTranscription:e.hasTheatreMode,shouldShow:W.length>=3})]})})}function W(e,t){let n=o(p.currentUser()),{canViewTranscript:r}=v({objectId:e,objectTypeId:l.Video}),i=o(t?f.sharedVideo(e,t):f.video(e)),a=r&&!!i.data?._curationTags?.value?.isClickViewCurated;return{shouldShowTranscript:a,shouldFetchTranscript:a&&!n.data?.isAuthenticated}}export{U as n,L as r,W as t};
|
|
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"./C2w0pmFW.chunk.js";import{t as i}from"./wrLrTezN.chunk.js";import{t as a}from"./BXTI9cmX.chunk.js";import{u as o}from"./BX0wDJmp.chunk.js";import{l as ee,y as s,z as te}from"./NlCAcBdo.chunk.js";import{t as ne}from"./DGmmTRu72.chunk.js";import{t as c}from"./DZX1tZ-D2.chunk.js";import{t as l}from"./CVHQXNzi2.chunk.js";import{t as u}from"./DbSUQ2A12.chunk.js";import{t as d}from"./BrbeV-Gn2.chunk.js";import{t as f}from"./LoQS6GjP.chunk.js";import{t as p}from"./CqrjHjAN.chunk.js";import{t as m}from"./eoAypzU3.chunk.js";import{t as re}from"./CgCqPbjJ.chunk.js";import{t as ie}from"./7-GJWRH82.chunk.js";import{t as ae}from"./dLd5d3X22.chunk.js";import{t as oe}from"./B2INd6bh.chunk.js";import{t as h}from"./B3gsVN-_.chunk.js";import{i as se}from"./D-iyHqNw2.chunk.js";import{n as g,t as ce}from"./CpFtf-tI2.chunk.js";import{t as _}from"./DBkEQkKm2.chunk.js";import{t as v}from"./C1loT8MD2.chunk.js";import{r as y}from"./CsWeCs8U2.chunk.js";import{n as le}from"./xa4cS6Fq.chunk.js";import{t as b}from"./jAbfamoi.chunk.js";import{t as ue}from"./WvK58Ge12.chunk.js";import{t as x}from"./jAtAipGN.chunk.js";import"./BILyzh0I.chunk.js";import{t as de}from"./CvHvrB-t.chunk.js";import{l as fe}from"./BOJK8LI1.chunk.js";import{t as S}from"./DzgAvoez.chunk.js";import{n as C}from"./D6bsI9KZ.chunk.js";import{t as pe}from"./BbgQJe-T.chunk.js";import{t as w}from"./BPavmm8c.chunk.js";import{a as me,i as he,n as ge,t as _e}from"./Bf9r1ZoF2.chunk.js";import{_ as T,a as ve,c as E,d as D,f as O,g as k,h as A,i as j,l as M,m as N,n as P,o as F,p as ye,r as be,s as xe,t as Se,u as Ce}from"./BlsbWOzw2.chunk.js";import{n as we,t as Te}from"./B3p3SaM12.chunk.js";import{n as Ee,r as De}from"./BgOLbASl2.chunk.js";import{t as I}from"./DkxWaE9O.chunk.js";var L={chaptersAndSubtitles(e,t){let n={query:`subtitles[customer],chapters`,permissionFilterOption:u.StripMetadata,contentRegion:t};return{url:c.urlBuilder(`{gateway}/v1/objects/${e}`,n),publicUrl:c.urlBuilder(`/api/objects/${e}/subtitles`,n),key:`videos:${e}:subtitles:chapters:${u.StripMetadata}`,formatData:e=>({subtitles:e.subtitles.data,chapters:e.chapters.data})}},subtitleVtt(e,t){return{url:c.urlBuilder(`{player}/srt-to-vtt`,{url:e,fullSentences:!0}),publicUrl:c.urlBuilder(`/api/player/srt-to-vtt`,{url:e,fullSentences:!0}),key:`subtitle:${e}`,formatData:e=>({...t,vtt:e})}}},R=e(r()),z=b(),B={dropdown:`_dropdown_zu639_1`},V=i(),H=`shared.curriculumLinks`;function Oe(e){let{preferredCurriculum:t,availableCurriculums:n,curriculumLinks:r,updateCurriculum:i}=e.curriculums;function a(t){i(t,{shouldLog:!0,locationContext:s.PlayPage,video:e.video})}return!e.canViewCurriculumLinks||!r?.length&&!e.curriculums.mappedCurriculums.length?(0,V.jsx)(V.Fragment,{}):(0,V.jsxs)(`section`,{id:w.CurriculumLinks,ref:t=>{t&&e.headingRef?.current&&e.headingRef.current.set(w.CurriculumLinks,t)},className:`play-page-section`,children:[(0,V.jsx)(`h2`,{className:`h4 me-2 h-100`,children:(0,V.jsx)(g,{namespace:H,phrase:`heading`})}),(0,V.jsx)(I,{availableCurriculums:n,onChangeCurriculum:a,selectedCurriculum:t,className:B.dropdown}),(0,V.jsx)(`div`,{className:`rounded border position-relative`,children:(0,V.jsx)(z.Scrollbars,{autoHeight:!0,autoHeightMax:e.height,children:(0,V.jsx)(`div`,{className:`p-3`,children:(0,V.jsx)(C,{curriculumLinks:e.curriculums.curriculumLinks,onChangeCurriculum:a,hasCompleted:e.curriculums.hasCompleted,mappedCurriculums:e.curriculums.mappedCurriculums,isFetching:e.curriculums.isFetching,getCodeAppLink:(t,n)=>e.hasNewSearch?x.getSearchAppLink(t,{[y]:n}):null,locationContext:s.PlayPage})})})})]})}var ke=`shared.play`;function U(e){let r=le(),i=r.playerRef.current?.isPaused?.(),o=r.playerRef?.current?.hasStarted?.(),{hasPermissions:c}=h(),u=ne(null),{canConsume:f}=d.getCanBeConsumed(e.video),p=F(e.hasTheatreMode,r),g=P(e.hasTheatreMode,r.mode,r.defaultDisplayMode);function v(e){e||y(!1),r.setDefaultDisplayMode?.(e?`theatre`:`normal`),r.playerRef?.current?.toggleTheatreMode?.(e)}function y(e){r.playerRef?.current?.toggleTranscript?.(e)}let{tableOfContentsActiveId:b,setTableOfContentsActiveId:x,controlledId:C,setControlledId:I,tableOfContentsExpanded:L,onToggleTableOfContents:z}=j(e.tableOfContentsId,e.hasTheatreMode,p),B=k(e.video)&&e.featureAccess.canViewGlance,{headingRef:H,headingElements:U}=be(B),W=U.map(t=>({id:t.id,name:Se.getSectionHeading(t.id,{clips:e.clips,interactives:e.interactives,resources:[...e.video.resources?.data??[],...e.video.links?.data??[]]})})),Ae=d.isVideoTypeArchived(e.video),je=c(n.StudentExperience);De({setActiveId:x,headingElements:U,controlledId:C,setControlledId:I}),Ee(U,C);let G=R.useRef(!1),K=se({settings:u,presentationSlug:e.presentationSlug}),q=K.getResourceAppLink(e.video.id,e.shareId,e.featureAccess.canViewResourceItems);M({resourcePopupId:e.resourcePopupId,resources:e.video.resources?.data,getResourceAppLink:q});function J(){G.current=!r?.playerRef?.current?.isPaused(),r?.playerRef?.current?.pause()}function Y(){G.current&&r?.playerRef?.current?.play()}let X={hasTheatreMode:e.hasTheatreMode,shouldShowSideTableOfContents:e.shouldShowSideTableOfContents,tableOfContentsExpanded:L,theatreMode:g},Me=xe(X),Ne=ve(X),Pe=r.mode===`picture-in-picture`||e.featureAccess.canViewPublicLayout&&!e.video._canBeConsumed.value,[,Z]=ae(re.PLAY_PAGE_CONTAINER_CLASS_NAME),Fe=e.commonVideoProps.getSubTextType?.(e.video),Ie=e.commonVideoProps.getSubTextAppLink(e.video),Q=we(e.video,c(n.StudentExperience)),$=Q.filter(ue.isResource);R.useEffect(()=>{Z(p?E.theatreModePlayPageContainer:``)},[p]),R.useEffect(()=>()=>Z(``),[]);function Le(){t.trigger({action:m.SignUp.SIGN_UP,application:a.SIGN_UP})}function Re(){if(!f)return Le();o||r.playerRef.current?.play(),y(!0),window.scrollTo({top:0,behavior:`smooth`})}function ze(e){r.playerRef.current?.currentTime(e)}function Be(){if($.length===1){de.downloadResource($[0],{videoId:e.video?.id,videoName:e.video.name},{location:s.PlayPage,actionType:te.Download,entity:ee.Resource});return}t.trigger({application:a.VIDEOS,action:m.Videos.RESOURCE_DOWNLOAD,args:[e.video?.id,e.shareId]})}return(0,V.jsx)(ce.Provider,{value:ke,children:(0,V.jsxs)(`div`,{className:`px-4 play-page-sections-container ${e.shouldShowSideTableOfContents?`row g-0`:``}`,children:[(0,V.jsxs)(`main`,{className:`${E.main} ${Me}`,children:[!!e.breadcrumbs?.length&&(0,V.jsx)(`div`,{className:`mb-2`,children:(0,V.jsx)(S,{breadcrumbs:e.breadcrumbs})}),(0,V.jsx)(_e,{restrictions:e.video._restrictions,yearGroups:e.commonVideoProps.yearGroups,objectId:e.video.id,objectTypeId:l.Video,canManageVideoAccess:e.canManageVideoAccess}),Ae&&(0,V.jsx)(me,{typeId:e.video.typeId,hasStudentExperience:je}),(0,V.jsxs)(`section`,{id:w.Video,className:`mb-3 ${oe.GLOBAL_PLAYER_SELECTOR}`,ref:e=>{e&&H?.current&&H.current.set(w.Video,e)},children:[f&&(0,V.jsx)(fe,{objectId:e.video.id,objectTypeId:e.video.typeId,shareId:e.shareId,context:e.params?.context,contextId:e.params?.contextId,playNext:e.params?.playNext,moviesAndTv:e.params?.mtv,startTime:e.params?.t??e.params?.startTime,endTime:e.params?.endTime,mode:`default`,location:`play-page`},e.video.id),(0,V.jsx)(`div`,{className:Pe?``:`d-none`,children:(0,V.jsx)(Ce,{video:e.video,appLink:{application:a.SIGN_UP,action:m.SignUp.SIGN_UP},type:r.mode===`picture-in-picture`?`pip`:`public`})})]}),(0,V.jsxs)(`div`,{className:Ne,children:[(0,V.jsxs)(`div`,{className:g?`${E.theatreModeLeftContent}`:`w-100`,children:[(0,V.jsx)(D,{presentationSlug:e.presentationSlug,media:e.video,subTextType:Fe,subtextAppLink:Ie,yearGroups:e.commonVideoProps.yearGroups,audiences:e.audiences,featureAccess:e.featureAccess,shareId:e.shareId,showTitlePadlock:!e.commonVideoProps.hasStudentExperience&&!e.commonVideoProps.hasGuestExperience}),B?(0,V.jsx)(A,{video:e.video,pointsOfInterest:e.pointsOfInterest,setStartTime:e=>r.playerRef.current?.currentTime(e),getTagAppLink:K.getTagAppLink,suppressInteractivity:e.featureAccess.canViewPublicLayout,canViewGlance:B}):(0,V.jsx)(T,{video:e.video,currentUser:e.currentUser,headingRef:H,onLaunchImmersiveReader:J,onExitImmersiveReader:Y,getTagAppLink:K.getTagAppLink,suppressInteractivity:e.featureAccess.canViewPublicLayout,getPartnerProfileAppLink:K.getPartnerProfileAppLink,getPartnerDashboardHubAppLink:K.getPartnerDashboardHubAppLink,getLibraryAppLink:c(n.ViewLibraries)?K.getLibraryAppLink:null,getFolderAppLink:c(n.ViewLibraries)?K.getFolderAppLink:null}),(0,V.jsx)(Oe,{height:368,curriculums:e.curriculums,canViewCurriculumLinks:e.featureAccess.canViewCurriculumLinks,headingRef:H,video:e.video,hasNewSearch:e.hasNewSearch}),(0,V.jsx)(Te,{headingRef:H,video:e.video,canViewResources:e.featureAccess.canViewResourceItems,imageCdnUrl:e.commonVideoProps.imageCdnUrl,getAppLink:q,analyticsData:{videoId:e.video.id,videoName:e.video.name},resourceThumbnailFallbackUrl:ie.Fallbacks.RESOURCE_THUMBNAIL,onDownloadClick:Be,resources:Q,downloadableResources:$,aboutResourcesAppLink:_.getAboutResourceAppLink()}),(0,V.jsx)(ye,{presentationSlug:e.presentationSlug,headingRef:H,video:e.video,interactives:e.interactives,analyticsData:{videoId:e.video.id,videoName:e.video.name},canViewInteractives:e.featureAccess.canViewInteractives,commonVideoProps:e.commonVideoProps}),(0,V.jsx)(N,{presentationSlug:e.presentationSlug,video:e.video,headingRef:H,clips:e.clips,canViewClips:e.featureAccess.canViewClips,audiences:e.audiences,analyticsData:{videoId:e.video.id,videoName:e.video.name},commonVideoProps:e.commonVideoProps}),B&&(0,V.jsx)(T,{video:e.video,currentUser:e.currentUser,headingRef:H,onLaunchImmersiveReader:J,onExitImmersiveReader:Y,getTagAppLink:K.getTagAppLink,suppressInteractivity:e.featureAccess.canViewPublicLayout,showHeading:!0,getPartnerProfileAppLink:K.getPartnerProfileAppLink,getPartnerDashboardHubAppLink:K.getPartnerDashboardHubAppLink,getLibraryAppLink:K.getLibraryAppLink,getFolderAppLink:K.getFolderAppLink}),e.shouldShowTranscript&&(0,V.jsx)(pe,{headingRef:H,video:e.video,subtitles:e.subtitles,vttSubtitles:e.vttSubtitles,chapters:e.chapters,onShowInVideo:Re,signUpLink:{action:m.SignUp.SIGN_UP,application:a.SIGN_UP},setStartTime:ze,isBot:e.isBot,isPaused:i,isAuthenticated:e.currentUser.isAuthenticated,playerApiUrl:e.playerApiUrl}),e.featureAccess.canViewCitations&&(0,V.jsx)(ge,{headingRef:H,media:e.video,contentRegion:e.currentUser.contentRegion,shareId:e.shareId,presentationSlug:e.presentationSlug}),(0,V.jsx)(he,{presentationSlug:e.presentationSlug,currentVideo:e.video,headingRef:H,commonVideoProps:e.commonVideoProps,relatedVideos:e.relatedVideos,currentUser:e.currentUser,getVideoAppLink:(t,n)=>_.getAppLink(t,{...n,context:e.params.context,contextId:e.params.contextId,playNext:e.params.playNext,shareId:e.shareId,moviesAndTv:e.params.mtv,includeContext:e.currentUser?.isAuthenticated},e.presentationSlug),audiences:e.audiences,moviesAndTv:e.params.mtv})]}),p&&(0,V.jsx)(O,{isExpanded:L,setIsExpanded:z,toggleTheatreMode:null,items:W,activeId:b,setControlledId:I,analyticsData:{videoId:e.video.id,videoName:e.video.name},showInSide:e.shouldShowSideTableOfContents,isTheatreMode:!0,hasTranscription:e.hasTheatreMode,shouldShow:W.length>=3})]})]}),!p&&(0,V.jsx)(O,{isExpanded:L,setIsExpanded:z,toggleTheatreMode:e.hasTheatreMode?v:null,items:W,activeId:b,setControlledId:I,analyticsData:{videoId:e.video.id,videoName:e.video.name},showInSide:e.shouldShowSideTableOfContents,isTheatreMode:!1,hasTranscription:e.hasTheatreMode,shouldShow:W.length>=3})]})})}function W(e,t){let n=o(p.currentUser()),{canViewTranscript:r}=v({objectId:e,objectTypeId:l.Video}),i=o(t?f.sharedVideo(e,t):f.video(e)),a=r&&!!i.data?._curationTags?.value?.isClickViewCurated;return{shouldShowTranscript:a,shouldFetchTranscript:a&&!n.data?.isAuthenticated}}export{U as n,L as r,W as t};
|
|
2
|
+
//# sourceMappingURL=C3PXfYEd.chunk.js.map
|
|
@@ -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":"C3PXfYEd.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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"}
|