@clickview/lite 0.70.0-rc.2 → 0.70.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/bundles.json +2 -2
- package/dist/css/1667-lite-95d4c3e1f6.chunk.css +1 -0
- package/dist/css/2541-lite-95d4c3e1f6.chunk.css +1 -0
- package/dist/css/{1924-lite-0bde0e9553.chunk.css → 9926-lite-53e53f702b.chunk.css} +1 -0
- package/dist/css/{lite-app-90190cd96f.css → lite-app-eee6afa26e.css} +1 -1
- package/dist/scripts/{1185-1164d2e4ab-lite.chunk.js → 1185-66a45514be-lite.chunk.js} +3 -3
- package/dist/scripts/1185-66a45514be-lite.chunk.js.map +1 -0
- package/dist/scripts/{1667-da5c830db7-lite.chunk.js → 1667-b48e8963ce-lite.chunk.js} +1 -1
- package/dist/scripts/{1667-da5c830db7-lite.chunk.js.map → 1667-b48e8963ce-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2541-e0d70273bd-lite.chunk.js → 2541-6eb2e67d69-lite.chunk.js} +1 -1
- package/dist/scripts/{2541-e0d70273bd-lite.chunk.js.map → 2541-6eb2e67d69-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3677-9445118a8d-lite.chunk.js → 3677-f48c335f7a-lite.chunk.js} +2 -2
- package/dist/scripts/{3677-9445118a8d-lite.chunk.js.map → 3677-f48c335f7a-lite.chunk.js.map} +1 -1
- package/dist/scripts/537-657f93fc8d-lite.chunk.js +3 -0
- package/dist/scripts/537-657f93fc8d-lite.chunk.js.map +1 -0
- package/dist/scripts/{91-668c1490fc-lite.chunk.js → 91-ad4ab33df0-lite.chunk.js} +3 -3
- package/dist/scripts/91-ad4ab33df0-lite.chunk.js.map +1 -0
- package/dist/scripts/{1924-6481fb66c5-lite.chunk.js → 9926-d9071b6ac0-lite.chunk.js} +2 -2
- package/dist/scripts/9926-d9071b6ac0-lite.chunk.js.map +1 -0
- package/dist/scripts/{bundle-6df33485fe.min.js → bundle-e15a2ef92e.min.js} +3 -3
- package/dist/scripts/{bundle-6df33485fe.min.js.map → bundle-e15a2ef92e.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/css/1667-lite-a6f068803e.chunk.css +0 -1
- package/dist/css/2541-lite-a6f068803e.chunk.css +0 -1
- package/dist/scripts/1185-1164d2e4ab-lite.chunk.js.map +0 -1
- package/dist/scripts/1924-6481fb66c5-lite.chunk.js.map +0 -1
- package/dist/scripts/537-09b1057590-lite.chunk.js +0 -3
- package/dist/scripts/537-09b1057590-lite.chunk.js.map +0 -1
- package/dist/scripts/91-668c1490fc-lite.chunk.js.map +0 -1
- /package/dist/scripts/{1185-1164d2e4ab-lite.chunk.js.LICENSE.txt → 1185-66a45514be-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{537-09b1057590-lite.chunk.js.LICENSE.txt → 537-657f93fc8d-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{91-668c1490fc-lite.chunk.js.LICENSE.txt → 91-ad4ab33df0-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-6df33485fe.min.js.LICENSE.txt → bundle-e15a2ef92e.min.js.LICENSE.txt} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1667],{41021:(e,a,t)=>{t.r(a),t.d(a,{PlaySharedClipView:()=>g});var i=t(32735),d=t(20354),o=t(65858),s=t(16714),r=t(43012),c=t(20768),n=t(31949),l=t(1575),u=t(63719),v=t(26304),h=t(22902),p=t(15311),m=t(79612),I=t(37802),C=t(76753),P=t(58321),V=t(7179),b=t(49948),w=t(36873),y=t(44110),T=t(35014),_=t(97816),f=t(91442),k=t(80053);function g(e){var a,t,g,q,F,x,B,M,j=(0,p.r)().hasProduct,A=(0,P.U)({locationContext:o.LZ.VideoThumbnail}),U=A.commonVideoProps,O=A.hasCommonVideoPropsCompleted,S=(0,h.T)().hasPermissions,D=(0,I.r)(null),E=D.hasTopicDirectories,N=D.hasPlayPageTranscript,G=(0,f.a)(),L=(0,T.I)(),R=d.a.useBasicFetch(n.N.currentUser()),Z=d.a.useBasicFetch(r.e.sharedClip(e.objectId,e.shareId)),z=d.a.useBasicFetch(!!(null===(a=Z.data)||void 0===a?void 0:a._parentVideo)&&l.R.video(Z.data._parentVideo.id)),H=d.a.useBasicFetch(!!(null===(g=null===(t=Z.data)||void 0===t?void 0:t._parentVideo)||void 0===g?void 0:g.id)&&L.canViewClips&&r.e.videoClips(Z.data._parentVideo.id)),J=d.a.useBasicFetch(L.canViewInteractives&&c.b.videoInteractives(e.objectId)),K=(0,w.k)({video:z.data,context:e.queryParams.context,contextId:e.queryParams.contextId,moviesAndTv:e.queryParams.mtv,currentUser:R.data}),Q=(0,y.i)(),W=(0,b.l)(e.objectId);(0,m.M)(C.CG.getClipMetadata({content:Z.data})),(0,_.V)(null!==(q=K.videos)&&void 0!==q?q:[]),(0,v.b)(Z),(0,V.P)({id:e.objectId,app:"clips",shareId:e.shareId});var X=(0,u.h)({name:null===(F=Z.data)||void 0===F?void 0:F.name});return Z.data&&R.hasCompleted&&W.hasCompleted&&O?i.createElement(k.N,{shareId:e.shareId,clip:Z.data,clips:null===(x=H.data)||void 0===x?void 0:x.data,interactives:null===(B=J.data)||void 0===B?void 0:B.data,originalVideo:z.data,currentUser:R.data,relatedVideos:K,hasProduct:j,queryParams:e.queryParams,audiences:Q.data,canManageVideoAccess:S(s.C.ManageVideoAccess),pointsOfInterest:null==W?void 0:W.items,featureAccess:L,tableOfContentsId:null===(M=e.queryParams)||void 0===M?void 0:M.tocId,shouldShowSideTableOfContents:G,breadcrumbs:X,commonVideoProps:U,hasTopicDirectories:E,hasTheatreMode:N}):i.createElement(i.Fragment,null)}}}]);
|
|
2
|
-
//# sourceMappingURL=1667-
|
|
2
|
+
//# sourceMappingURL=1667-b48e8963ce-lite.chunk.js.map
|
package/dist/scripts/{1667-da5c830db7-lite.chunk.js.map → 1667-b48e8963ce-lite.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/1667-
|
|
1
|
+
{"version":3,"file":"scripts/1667-b48e8963ce-lite.chunk.js","mappings":"saAgCM,SAAUA,EAAmBC,G,oBACzBC,GAAe,SAAfA,WAER,GAGI,OAAoB,CAAEC,gBAAiB,sBAFzCC,EAAgB,EAAhBA,iBACAC,EAA4B,EAA5BA,6BAEMC,GAAmB,SAAnBA,eACR,GAAuD,OAAY,MAA3DC,EAAmB,EAAnBA,oBAAqBC,EAAqB,EAArBA,sBAEvBC,GAAgC,SAEhCC,GAAgB,SAEhBC,EAAc,kBAAkC,mBAChDC,EAAO,kBAA2B,eAAwBX,EAAMY,SAAUZ,EAAMa,UAChFC,EAAQ,qBAAuC,QAAT,EAAAH,EAAKI,YAAI,eAAEC,eACrD,UAAoBL,EAAKI,KAAKC,aAAaC,KACvCC,EAAa,qBACQ,QAAvB,EAAS,QAAT,EAAAP,EAAKI,YAAI,eAAEC,oBAAY,eAAEC,KAAMR,EAAcU,cAAgB,eAAwBR,EAAKI,KAAKC,aAAaC,KAE1GG,EAAe,kBACnBX,EAAcY,qBAAuB,sBAAsCrB,EAAMY,WAG7EU,GAAgB,OAAoB,CACxCR,MAAOA,EAAMC,KACbQ,QAASvB,EAAMwB,YAAYD,QAC3BE,UAAWzB,EAAMwB,YAAYC,UAC7BC,YAAa1B,EAAMwB,YAAYG,IAC/BjB,YAAaA,EAAYK,OAErBa,GAAY,SACZC,GAAmB,OAAyB7B,EAAMY,WAExD,OAAmB,qBAAmC,CAAEkB,QAASnB,EAAKI,SAEtE,OAAkC,QAApB,EAAAO,EAAcS,cAAM,QAAI,KACtC,OAAsBpB,IACtB,OAAa,CAAEM,GAAIjB,EAAMY,SAAUoB,IAAK,QAASnB,QAASb,EAAMa,UAEhE,IAAMoB,GAAc,OAAe,CAAEC,KAAe,QAAT,EAAAvB,EAAKI,YAAI,eAAEmB,OAStD,OANEvB,EAAKI,MACLL,EAAYyB,cACZN,EAAiBM,cACjB/B,EAOA,gBAAC,IAAQ,CACPS,QAASb,EAAMa,QACfF,KAAMA,EAAKI,KACXqB,MAAsB,QAAf,EAAAlB,EAAWH,YAAI,eAAEA,KACxBK,aAA+B,QAAjB,EAAAA,EAAaL,YAAI,eAAEA,KACjCsB,cAAevB,EAAMC,KACrBL,YAAaA,EAAYK,KACzBO,cAAeA,EACfrB,WAAYA,EACZuB,YAAaxB,EAAMwB,YACnBI,UAAWA,EAAUb,KACrBuB,qBAAsBjC,EAAe,uBACrCwB,iBAAkBA,aAAgB,EAAhBA,EAAkBU,MACpC9B,cAAeA,EACf+B,kBAAoC,QAAjB,EAAAxC,EAAMwB,mBAAW,eAAEiB,MACtCjC,8BAA+BA,EAC/ByB,YAAaA,EACb9B,iBAAkBA,EAClBG,oBAAqBA,EACrBoC,eAAgBnC,IAtBX,gCAyBX,C","sources":["file:///app/packages/projects/lite/src/apps/share/views/play-shared-clip/PlaySharedClipView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useBreadcrumbs } from 'libs/shared/hooks/useBreadcrumbs';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Clip, ClipCollection, CurrentUser, InteractiveCollection, Video } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { useCommonVideoProps } from 'shared/hooks/useCommonVideoProps';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { useFetchPointsOfInterest } from 'shared/hooks/useFetchPointsOfInterest';\nimport { useGetRelatedVideos } from 'shared/hooks/useGetRelatedVideos';\nimport { usePresentationAudiences } from 'shared/hooks/usePresentationAudiences';\nimport { useVideoFeatureAccess } from 'shared/hooks/useVideoFeatureAccess';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\nimport { useShouldShowSideTableOfContents } from 'shared/views/play/hooks/useShouldShowTableOfContents';\nimport { PlayClip } from 'shared/views/play-clip/components/play-clip/PlayClip';\n\nimport { ShareLinkViewProps } from 'apps/share/interfaces/ShareLinkViewProps';\n\nexport function PlaySharedClipView(props: ShareLinkViewProps): React.ReactElement {\n const { hasProduct } = useProducts();\n\n const {\n commonVideoProps,\n hasCommonVideoPropsCompleted\n } = useCommonVideoProps({ locationContext: LocationContext.VideoThumbnail });\n const { hasPermissions } = usePermissions();\n const { hasTopicDirectories, hasPlayPageTranscript } = useSettings(null);\n\n const shouldShowSideTableOfContents = useShouldShowSideTableOfContents();\n\n const featureAccess = useVideoFeatureAccess();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const clip = Flight.useBasicFetch<Clip>(ClipRequests.sharedClip(props.objectId, props.shareId));\n const video = Flight.useBasicFetch<Video>(!!clip.data?._parentVideo &&\n VideoRequests.video(clip.data._parentVideo.id));\n const childClips = Flight.useBasicFetch<ClipCollection>(\n !!clip.data?._parentVideo?.id && featureAccess.canViewClips && ClipRequests.videoClips(clip.data._parentVideo.id)\n );\n const interactives = Flight.useBasicFetch<InteractiveCollection>(\n featureAccess.canViewInteractives && InteractiveRequests.videoInteractives(props.objectId)\n );\n \n const relatedVideos = useGetRelatedVideos({\n video: video.data,\n context: props.queryParams.context,\n contextId: props.queryParams.contextId,\n moviesAndTv: props.queryParams.mtv,\n currentUser: currentUser.data\n });\n const audiences = usePresentationAudiences();\n const pointsOfInterest = useFetchPointsOfInterest(props.objectId);\n\n useSetPageMetadata(PageMetadataHelper.getClipMetadata({ content: clip.data }));\n\n useVideoMixin(relatedVideos.videos ?? []);\n useCannotConsumeError(clip);\n useDeepLinks({ id: props.objectId, app: 'clips', shareId: props.shareId });\n\n const breadcrumbs = useBreadcrumbs({ name: clip.data?.name });\n\n const hasLoaded = (\n clip.data &&\n currentUser.hasCompleted &&\n pointsOfInterest.hasCompleted &&\n hasCommonVideoPropsCompleted\n );\n\n if (!hasLoaded)\n return <></>;\n\n return (\n <PlayClip\n shareId={props.shareId}\n clip={clip.data}\n clips={childClips.data?.data}\n interactives={interactives.data?.data}\n originalVideo={video.data}\n currentUser={currentUser.data}\n relatedVideos={relatedVideos}\n hasProduct={hasProduct}\n queryParams={props.queryParams}\n audiences={audiences.data}\n canManageVideoAccess={hasPermissions(PermissionName.ManageVideoAccess)}\n pointsOfInterest={pointsOfInterest?.items}\n featureAccess={featureAccess}\n tableOfContentsId={props.queryParams?.tocId}\n shouldShowSideTableOfContents={shouldShowSideTableOfContents}\n breadcrumbs={breadcrumbs}\n commonVideoProps={commonVideoProps}\n hasTopicDirectories={hasTopicDirectories}\n hasTheatreMode={hasPlayPageTranscript}\n />\n );\n}"],"names":["PlaySharedClipView","props","hasProduct","locationContext","commonVideoProps","hasCommonVideoPropsCompleted","hasPermissions","hasTopicDirectories","hasPlayPageTranscript","shouldShowSideTableOfContents","featureAccess","currentUser","clip","objectId","shareId","video","data","_parentVideo","id","childClips","canViewClips","interactives","canViewInteractives","relatedVideos","context","queryParams","contextId","moviesAndTv","mtv","audiences","pointsOfInterest","content","videos","app","breadcrumbs","name","hasCompleted","clips","originalVideo","canManageVideoAccess","items","tableOfContentsId","tocId","hasTheatreMode"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[2541],{94644:(e,a,t)=>{t.d(a,{r:()=>l});var i=t(50242),r=t(81886),o=t(67058),d=t(14553),n=t(49267),s=t(49075),c={notFound:o.d,forbidden:{rating:d.q,yearLevel:d.q,region:n.a,privacy:d.q},badRequest:s._,internalServerError:s._};function l(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var o;o="number"==typeof e?e:e.status;var d=Object.assign(Object.assign({},c),a);o&&r.Q.Ry.isStatusCodeError(o)&&(o!==i.o.InternalServer?o!==i.o.NotFound?o!==i.o.Forbidden?t.badRequest||r.Q.Ry.throw(new d.badRequest):t.forbidden||r.Q.Ry.throw(new d.forbidden.privacy):t.notFound||r.Q.Ry.throw(new d.notFound):t.internalServerError||r.Q.Ry.throw(new s._))}}},91286:(e,a,t)=>{t.d(a,{v:()=>d});var i=t(32735),r=t(94644);function o(e){return e.map((function(e){return e.statusCode})).join(":")}function d(e,a,t){var d=Array.isArray(e)?e:[e];(0,i.useEffect)((function(){d.forEach((function(e){(0,r.r)(e.statusCode,a,t)}))}),[o(d),a,t])}},27478:(e,a,t)=>{t.r(a),t.d(a,{PlayClipView:()=>A});var i=t(32735),r=t(50242),o=t(23481),d=t(20354),n=t(65858),s=t(78417),c=t(16714),l=t(67058),u=t(33803),v=t(43012),p=t(20768),h=t(31949),m=t(1575),f=t(63719),b=t(26304),y=t(91286),C=t(22902),P=t(15311),g=t(79612),w=t(37802),F=t(76753),V=t(58321),q=t(7179),_=t(49948),R=t(36873),T=t(44110),I=t(35014),k=t(97816),E=t(91442),O=t(80053),S=o.T.encloseNamespace("shared.playClip"),x={notFound:l.d,forbidden:{privacy:u.G}};function A(e){var a,t,o,l,u,A,B,M=e.queryParams,j=M.context,Q=M.contextId,N=M.mtv,U=(0,P.r)().hasProduct,D=(0,V.U)({locationContext:n.LZ.PlayClip,mtv:N}),G=D.commonVideoProps,L=D.hasCommonVideoPropsCompleted,H=(0,C.T)().hasPermissions,Z=(0,w.r)(null),z=Z.hasTopicDirectories,J=Z.hasPlayPageTranscript,K=d.a.useBasicFetch(h.N.currentUser()),W=d.a.useBasicFetch(v.e.clip(e.id)),X=d.a.useBasicFetch(p.b.videoInteractives(e.id)),Y=d.a.useBasicFetch(!!(null===(a=W.data)||void 0===a?void 0:a._parentVideo)&&m.R.video(W.data._parentVideo.id));(0,k.V)([Y.data]);var $=d.a.useBasicFetch(!!(null===(t=W.data)||void 0===t?void 0:t._parentVideo)&&v.e.videoClips(W.data._parentVideo.id)),ee=d.a.useBasicFetch(W.statusCode===r.o.Forbidden&&v.e.clip(e.id,s.r.StripMetadata)),ae=(0,R.k)({video:Y.data,context:j,contextId:Q,moviesAndTv:N,currentUser:K.data}),te=(0,T.i)(),ie=(0,E.a)(),re=(0,_.l)(e.id,!0),oe=(0,I.I)(),de=(0,f.h)({name:null===(o=W.data)||void 0===o?void 0:o.name});return(0,g.M)(F.CG.getClipMetadata({content:W.data,phraseContext:{phraseHandler:S,titlePhrase:"pageTitle",descriptionPhrase:"pageDescription"}})),(0,y.v)(W,x,{forbidden:!0}),(0,k.V)(null!==(l=ae.videos)&&void 0!==l?l:[]),(0,b.b)(ee),(0,q.P)({id:e.id,app:"clips"}),W.data&&K.hasCompleted&&re.hasCompleted&&L?i.createElement(O.N,{clip:W.data,clips:null===(u=$.data)||void 0===u?void 0:u.data,interactives:null===(A=X.data)||void 0===A?void 0:A.data,originalVideo:Y.data,currentUser:K.data,relatedVideos:"playlist"===j?ae:Object.assign(Object.assign({},ae),{videos:[]}),hasProduct:U,queryParams:e.queryParams,audiences:te.data,canManageVideoAccess:H(c.C.ManageVideoAccess),pointsOfInterest:re.items,featureAccess:oe,tableOfContentsId:null===(B=e.queryParams)||void 0===B?void 0:B.tocId,shouldShowSideTableOfContents:ie,breadcrumbs:de,commonVideoProps:G,hasTopicDirectories:z,hasTheatreMode:J}):i.createElement(i.Fragment,null)}A.defaultProps={queryParams:{}}}}]);
|
|
2
|
-
//# sourceMappingURL=2541-
|
|
2
|
+
//# sourceMappingURL=2541-6eb2e67d69-lite.chunk.js.map
|
package/dist/scripts/{2541-e0d70273bd-lite.chunk.js.map → 2541-6eb2e67d69-lite.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/2541-e0d70273bd-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/projects/lite/src/shared/views/play-clip/PlayClipView.tsx"],"sourcesContent":["import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n internalServerError?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError,\n internalServerError: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.InternalServer) {\n if (!ignoreMap.internalServerError)\n Core.ErrorHelper.throw(new UnspecifiedError());\n return;\n }\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import * as React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { VideoPrivateError } from 'libs/shared/errors/videos/video-private/VideoPrivateError';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useBreadcrumbs } from 'libs/shared/hooks/useBreadcrumbs';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Clip, ClipCollection, CurrentUser, InteractiveCollection, Video } from 'libs/shared/interfaces';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { useCommonVideoProps } from 'shared/hooks/useCommonVideoProps';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { useFetchPointsOfInterest } from 'shared/hooks/useFetchPointsOfInterest';\nimport { useGetRelatedVideos } from 'shared/hooks/useGetRelatedVideos';\nimport { usePresentationAudiences } from 'shared/hooks/usePresentationAudiences';\nimport { useVideoFeatureAccess } from 'shared/hooks/useVideoFeatureAccess';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\nimport { useShouldShowSideTableOfContents } from 'shared/views/play/hooks/useShouldShowTableOfContents';\n\nimport { PlayClip } from './components/play-clip/PlayClip';\n\nexport interface PlayViewProps {\n id: string;\n queryParams?: PlayViewQueryParams;\n}\n\nconst namespace = 'shared.playClip';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst clipErrors = {\n notFound: NotFoundError,\n forbidden: {\n privacy: VideoPrivateError\n }\n};\n\nPlayClipView.defaultProps = {\n queryParams: {}\n};\n\nexport function PlayClipView(props: PlayViewProps): JSX.Element {\n const { context, contextId, mtv } = props.queryParams;\n\n const { hasProduct } = useProducts();\n const {\n commonVideoProps,\n hasCommonVideoPropsCompleted\n } = useCommonVideoProps({ locationContext: LocationContext.PlayClip, mtv });\n const { hasPermissions } = usePermissions();\n const { hasTopicDirectories, hasPlayPageTranscript } = useSettings(null);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const clip = Flight.useBasicFetch<Clip>(ClipRequests.clip(props.id));\n\n const interactives = Flight.useBasicFetch<InteractiveCollection>(InteractiveRequests.videoInteractives(props.id));\n const video = Flight.useBasicFetch<Video>(\n !!clip.data?._parentVideo && VideoRequests.video(clip.data._parentVideo.id)\n );\n useVideoMixin([video.data]);\n\n const childClips = Flight.useBasicFetch<ClipCollection>(\n !!clip.data?._parentVideo && ClipRequests.videoClips(clip.data._parentVideo.id)\n );\n\n const strippedClip = Flight.useBasicFetch<Clip>(clip.statusCode === HttpStatus.Forbidden &&\n ClipRequests.clip(props.id, PermissionFilterOption.StripMetadata));\n const relatedVideos = useGetRelatedVideos({\n video: video.data,\n context,\n contextId,\n moviesAndTv: mtv,\n currentUser: currentUser.data\n });\n const audiences = usePresentationAudiences();\n const shouldShowSideTableOfContents = useShouldShowSideTableOfContents();\n\n const pointsOfInterest = useFetchPointsOfInterest(props.id, true);\n \n const featureAccess = useVideoFeatureAccess();\n\n const breadcrumbs = useBreadcrumbs({ name: clip.data?.name });\n\n useSetPageMetadata(PageMetadataHelper.getClipMetadata({\n content: clip.data,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n }\n }));\n\n useHandleObjectError(clip, clipErrors, { forbidden: true });\n useVideoMixin(relatedVideos.videos ?? []);\n useCannotConsumeError(strippedClip);\n useDeepLinks({ id: props.id, app: 'clips' });\n\n const hasLoaded = (\n clip.data &&\n currentUser.hasCompleted &&\n pointsOfInterest.hasCompleted &&\n hasCommonVideoPropsCompleted\n );\n\n if (!hasLoaded)\n return <></>;\n\n return (\n <PlayClip\n clip={clip.data}\n clips={childClips.data?.data}\n interactives={interactives.data?.data}\n originalVideo={video.data}\n currentUser={currentUser.data}\n // we only show up next videos for clips in a playlist\n relatedVideos={context === 'playlist' ? relatedVideos : { ...relatedVideos, videos: []}}\n hasProduct={hasProduct}\n queryParams={props.queryParams}\n audiences={audiences.data}\n canManageVideoAccess={hasPermissions(PermissionName.ManageVideoAccess)}\n pointsOfInterest={pointsOfInterest.items}\n featureAccess={featureAccess}\n tableOfContentsId={props.queryParams?.tocId}\n shouldShowSideTableOfContents={shouldShowSideTableOfContents}\n breadcrumbs={breadcrumbs}\n commonVideoProps={commonVideoProps}\n hasTopicDirectories={hasTopicDirectories}\n hasTheatreMode={hasPlayPageTranscript}\n />\n );\n}"],"names":["defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","internalServerError","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","generateCacheKey","flightObjs","map","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","forEach","getPhrase","clipErrors","PlayClipView","props","queryParams","context","contextId","mtv","hasProduct","locationContext","commonVideoProps","hasCommonVideoPropsCompleted","hasPermissions","hasTopicDirectories","hasPlayPageTranscript","currentUser","clip","id","interactives","video","data","_parentVideo","childClips","strippedClip","relatedVideos","moviesAndTv","audiences","shouldShowSideTableOfContents","pointsOfInterest","featureAccess","breadcrumbs","name","content","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","videos","app","hasCompleted","clips","originalVideo","canManageVideoAccess","items","tableOfContentsId","tocId","hasTheatreMode","defaultProps"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"scripts/2541-6eb2e67d69-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/projects/lite/src/shared/views/play-clip/PlayClipView.tsx"],"sourcesContent":["import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n internalServerError?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError,\n internalServerError: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.InternalServer) {\n if (!ignoreMap.internalServerError)\n Core.ErrorHelper.throw(new UnspecifiedError());\n return;\n }\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import * as React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { VideoPrivateError } from 'libs/shared/errors/videos/video-private/VideoPrivateError';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useBreadcrumbs } from 'libs/shared/hooks/useBreadcrumbs';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Clip, ClipCollection, CurrentUser, InteractiveCollection, Video } from 'libs/shared/interfaces';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { useCommonVideoProps } from 'shared/hooks/useCommonVideoProps';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { useFetchPointsOfInterest } from 'shared/hooks/useFetchPointsOfInterest';\nimport { useGetRelatedVideos } from 'shared/hooks/useGetRelatedVideos';\nimport { usePresentationAudiences } from 'shared/hooks/usePresentationAudiences';\nimport { useVideoFeatureAccess } from 'shared/hooks/useVideoFeatureAccess';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\nimport { useShouldShowSideTableOfContents } from 'shared/views/play/hooks/useShouldShowTableOfContents';\n\nimport { PlayClip } from './components/play-clip/PlayClip';\n\nexport interface PlayViewProps {\n id: string;\n queryParams?: PlayViewQueryParams;\n}\n\nconst namespace = 'shared.playClip';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst clipErrors = {\n notFound: NotFoundError,\n forbidden: {\n privacy: VideoPrivateError\n }\n};\n\nPlayClipView.defaultProps = {\n queryParams: {}\n};\n\nexport function PlayClipView(props: PlayViewProps): JSX.Element {\n const { context, contextId, mtv } = props.queryParams;\n\n const { hasProduct } = useProducts();\n const {\n commonVideoProps,\n hasCommonVideoPropsCompleted\n } = useCommonVideoProps({ locationContext: LocationContext.PlayClip, mtv });\n const { hasPermissions } = usePermissions();\n const { hasTopicDirectories, hasPlayPageTranscript } = useSettings(null);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const clip = Flight.useBasicFetch<Clip>(ClipRequests.clip(props.id));\n\n const interactives = Flight.useBasicFetch<InteractiveCollection>(InteractiveRequests.videoInteractives(props.id));\n const video = Flight.useBasicFetch<Video>(\n !!clip.data?._parentVideo && VideoRequests.video(clip.data._parentVideo.id)\n );\n useVideoMixin([video.data]);\n\n const childClips = Flight.useBasicFetch<ClipCollection>(\n !!clip.data?._parentVideo && ClipRequests.videoClips(clip.data._parentVideo.id)\n );\n\n const strippedClip = Flight.useBasicFetch<Clip>(clip.statusCode === HttpStatus.Forbidden &&\n ClipRequests.clip(props.id, PermissionFilterOption.StripMetadata));\n const relatedVideos = useGetRelatedVideos({\n video: video.data,\n context,\n contextId,\n moviesAndTv: mtv,\n currentUser: currentUser.data\n });\n const audiences = usePresentationAudiences();\n const shouldShowSideTableOfContents = useShouldShowSideTableOfContents();\n\n const pointsOfInterest = useFetchPointsOfInterest(props.id, true);\n \n const featureAccess = useVideoFeatureAccess();\n\n const breadcrumbs = useBreadcrumbs({ name: clip.data?.name });\n\n useSetPageMetadata(PageMetadataHelper.getClipMetadata({\n content: clip.data,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n }\n }));\n\n useHandleObjectError(clip, clipErrors, { forbidden: true });\n useVideoMixin(relatedVideos.videos ?? []);\n useCannotConsumeError(strippedClip);\n useDeepLinks({ id: props.id, app: 'clips' });\n\n const hasLoaded = (\n clip.data &&\n currentUser.hasCompleted &&\n pointsOfInterest.hasCompleted &&\n hasCommonVideoPropsCompleted\n );\n\n if (!hasLoaded)\n return <></>;\n\n return (\n <PlayClip\n clip={clip.data}\n clips={childClips.data?.data}\n interactives={interactives.data?.data}\n originalVideo={video.data}\n currentUser={currentUser.data}\n // we only show up next videos for clips in a playlist\n relatedVideos={context === 'playlist' ? relatedVideos : { ...relatedVideos, videos: []}}\n hasProduct={hasProduct}\n queryParams={props.queryParams}\n audiences={audiences.data}\n canManageVideoAccess={hasPermissions(PermissionName.ManageVideoAccess)}\n pointsOfInterest={pointsOfInterest.items}\n featureAccess={featureAccess}\n tableOfContentsId={props.queryParams?.tocId}\n shouldShowSideTableOfContents={shouldShowSideTableOfContents}\n breadcrumbs={breadcrumbs}\n commonVideoProps={commonVideoProps}\n hasTopicDirectories={hasTopicDirectories}\n hasTheatreMode={hasPlayPageTranscript}\n />\n );\n}"],"names":["defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","internalServerError","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","generateCacheKey","flightObjs","map","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","forEach","getPhrase","clipErrors","PlayClipView","props","queryParams","context","contextId","mtv","hasProduct","locationContext","commonVideoProps","hasCommonVideoPropsCompleted","hasPermissions","hasTopicDirectories","hasPlayPageTranscript","currentUser","clip","id","interactives","video","data","_parentVideo","childClips","strippedClip","relatedVideos","moviesAndTv","audiences","shouldShowSideTableOfContents","pointsOfInterest","featureAccess","breadcrumbs","name","content","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","videos","app","hasCompleted","clips","originalVideo","canManageVideoAccess","items","tableOfContentsId","tocId","hasTheatreMode","defaultProps"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3677],{39902:(e,t,n)=>{n.d(t,{F:()=>p,f:()=>m});var r=n(32735),i=n(20354),a=n(75896);function o(e){return function(e){if(Array.isArray(e))return s(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||c(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e,t){if(e){if("string"==typeof e)return s(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?s(e,t):void 0}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function u(e,t,n){return(t=function(e){var t=function(e){if("object"!=l(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=l(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==l(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var d=50;function m(e,t){var n=a.m.chunk(e,d).map((function(e){return t(a.m.uniq(e))})),r=i.a.useBasicFetchAll(n),o=a.m.flatten(r.data),c=r.data.length?o.reduce((function(e,t){return Object.assign(Object.assign({},e),u({},t.id,t))}),{}):null;return{itemsArr:o,items:c,isFetching:r.isFetching}}function p(e,t,n){var s,m,p,f,v=n||function(e){return"object"===l(e)?e.id:e},h=r.useRef(new Set),y=(p=r.useState([]),f=2,function(e){if(Array.isArray(e))return e}(p)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,a,o,c=[],s=!0,l=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=a.call(n)).done)&&(c.push(r.value),c.length!==t);s=!0);}catch(e){l=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return c}}(p,f)||c(p,f)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),g=y[0],b=y[1];r.useEffect((function(){if(null==e?void 0:e.length){var n=[];e.forEach((function(e){var t=v(e);h.current.has(t)||(n.push(e),h.current.add(t))})),n.length&&b((function(e){return[].concat(o(e),o(a.m.chunk(n,d).map(t)))}))}}),[null==e?void 0:e.length]);var A=i.a.useBasicFetchAll(g),I=a.m.flatten(A.data),E=A.data.length?I.reduce((function(e,t){return Object.assign(Object.assign({},e),u({},v(t),t))}),{}):null;return{hasFirstRequestCompleted:!!(null===(m=null===(s=A.responses)||void 0===s?void 0:s[0])||void 0===m?void 0:m.hasCompleted),itemsArr:I,items:E,isFetching:A.isFetching}}},63719:(e,t,n)=>{n.d(t,{h:()=>c});var r=n(32735),i=n(77316);function a(e,t){if(e){if("string"==typeof e)return o(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(e,t):void 0}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function c(e){var t,n,c=(t=r.useMemo((function(){return i.p.getBuilder()}),[]),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,a,o,c=[],s=!0,l=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=a.call(n)).done)&&(c.push(r.value),c.length!==t);s=!0);}catch(e){l=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return c}}(t,n)||a(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),s=c[0],l=(0,c[1])(s);return l&&e?[].concat(function(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||a(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(l),[Object.assign(Object.assign({},e),{active:!0})]):l}},58321:(e,t,n)=>{n.d(t,{U:()=>f});var r=n(20354),i=n(16714),a=n(39151),o=n(1666),c=n(31949),s=n(22902),l=n(37802),u=n(22490),d=n(82431),m=n(46390),p=n(27638);function f(e){var t,n,f,v=e||{},h=v.locationContext,y=v.mtv,g=v.flightNamespace,b=v.sharedPlaylist,A=(0,m.G)().isPlugin,I=(0,p.u)(h,g),E=I.setFavourite,P=I.canFavourite,V=(0,l.r)(null),C=V.hasTopicDirectories,S=V.isLoadingSettings,w=(0,s.T)(),T=w.hasPermissions,O=w.isLoaded,x=T(i.C.StudentExperience),L=r.a.useBasicFetch(a.L.config()),M=r.a.useBasicFetch(c.N.currentUser()),R=r.a.useBasicFetch((null===(t=M.data)||void 0===t?void 0:t.isAuthenticated)&&o.h.yearGroups(M.data.customerId));return{hasCommonVideoPropsCompleted:!S&&O&&L.hasCompleted&&M.hasCompleted&&(!(null===(n=M.data)||void 0===n?void 0:n.isAuthenticated)||R.hasCompleted),commonVideoProps:{subTextType:"series",getSubTextAppLink:function(e){var t;return"series"in e?b&&!(null===(t=M.data)||void 0===t?void 0:t.isAuthenticated)?null:d.j.getSeriesAppLink(e.series,{mtv:y}):null},isPlugin:A,canFavourite:P,setFavourite:E,imageCdnUrl:null===(f=L.data)||void 0===f?void 0:f.imageCdnUrl,yearGroups:R.data,getClassroomGuideAppLink:u.W.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:u.W.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:u.W.getResourceGuidanceAppLink,showNewVideoIndicator:C,companyLogoFallbackUrl:null,hasStudentExperience:x}}}},44110:(e,t,n)=>{n.d(t,{i:()=>o});var r=n(20354),i=n(89454),a=n(86698),o=function(){var e=(0,a.y)({redirectOnError:!0}),t=e.activePresentation,n=e.getFallbackPresentation,o=t||n();return r.a.useBasicFetch(!!o&&i.O.presentationAudiences(o.id))}},35014:(e,t,n)=>{n.d(t,{I:()=>s});var r=n(16714),i=n(12754),a=n(22902),o=n(15311),c=n(11387);function s(){var e=(0,a.T)(),t=e.hasPermissions,n=e.hasLocalPermissions,s=(0,(0,o.r)().hasProduct)(i.x.Primary);return{canViewGlance:t(r.C.ViewVideoGlance),canViewResources:!0,canViewInteractives:s&&t(r.C.ViewVideoInteractives),canViewClips:s&&t(r.C.ViewVideoClips),canViewCurriculumLinks:t(r.C.ViewCurriculums),canUseActions:n(r.E.UseVideoActions),canViewPublicLayout:!n(r.E.WatchVideos)&&c.C.hasRegionPrefix(),canViewResourceItems:n(r.E.ViewVideoResourceItems),canNavigate:s}}},97816:(e,t,n)=>{n.d(t,{V:()=>o});var r=n(1575),i=n(39902),a=n(31908);function o(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=function(e){return e?Array.isArray(e)?e.filter((function(e){return!!e&&(a.M.isVideo(e)||a.M.isClip(e))})):"data"in e?e.data.filter((function(e){return!!e&&(a.M.isVideo(e)||a.M.isClip(e))})):[]:[]}(e).map((function(e){return e.id}));(0,i.F)(n,(function(e){return r.R.videoMixinAssocs(e,t.flightNamespace)}))}},80053:(e,t,n)=>{n.d(t,{N:()=>J});var r=n(32735),i=n(2948),a=n(28400),o=n(49935),c=n(93850),s=n(61499),l=n(38165),u=n(89456),d=n(71063),m=n(80128),p=n(34055),f=n(4594),v=n(16714),h=n(12754),y=n(22902),g=n(65332),b=n(9907),A=n(59598),I=n(31908),E=n(26492),P=n(22103),V=n(84459),C=n(87851),S=n(11256),w=n(47938),T=n(4171),O=n(78166),x=n(99742),L=n(14070),M=n(97291),R=n(86702),j=n(22490),k=n(29978),N=n(15731),U=n(75861),F=n(28389),G=n(31887),q=n(83345),_=n(75100),D=n(51365),W=n(10671),B=n(10741),H="shared.playClip";function K(e){var t=(0,y.T)().hasPermissions,n=(0,W._)({location:W.i.VideoItem});return r.createElement("section",{className:"play-page-section",id:A.K.ClippedFrom,ref:function(t){var n;t&&(null===(n=e.headingRef)||void 0===n?void 0:n.current)&&e.headingRef.current.set(A.K.ClippedFrom,t)}},r.createElement("h2",{className:"h4 mb-0"},r.createElement(q.x,{namespace:H,phrase:"clippedFrom"})),r.createElement(D.M.Provider,{value:n},r.createElement(_.E4,{videos:[e.originalVideo],getVideoAppLink:function(t,n){var r;return j.W.getAppLink(t,Object.assign(Object.assign({},n),{context:e.queryParams.context,contextId:e.queryParams.contextId,playNext:e.queryParams.playNext,shareId:e.shareId,moviesAndTv:e.queryParams.mtv,includeContext:null===(r=e.currentUser)||void 0===r?void 0:r.isAuthenticated}))},hasPermissions:t,presentationAudiences:e.audiences,getPreviewQuestionsAppLink:function(e){return B.j.getPreviewQuestionsAppLink(e)},commonVideoProps:e.commonVideoProps})))}const Q={main:"ULvZW",expandedToc:"W3k9M",theatreMode:"KOUGv",theatreModeContent:"fWNAc",theatreModePlayPageContainer:"RJ5nP",theatreModeLeftContent:"dllgG"};function Y(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var $=function(e,t,n){return function(r){return n?{application:M.O.VIDEOS,action:L.e.Videos.PREVIEW_PDF,args:[r.id],params:{videoId:e,shareId:t}}:{application:M.O.SIGN_UP,action:L.e.SignUp.SIGN_UP}}};function J(e){var t,n,q,_,D,W,B,H,J,Z,z=(0,p.g)(),X=(0,y.T)().hasPermissions,ee=I.M.getCanBeConsumed(e.clip).canConsume,te=e.hasTheatreMode&&"theatre"===z.mode,ne=(0,F.V)(e.hasTheatreMode,te),re=(0,N.Q)(e.tableOfContentsId,e.hasTheatreMode,te),ie=re.tableOfContentsActiveId,ae=re.setTableOfContentsActiveId,oe=re.controlledId,ce=re.setControlledId,se=re.tableOfContentsExpanded,le=re.onToggleTableOfContents,ue=(0,s.Wp)(e.clip)&&e.featureAccess.canViewGlance,de=(0,U.i)(ue),me=de.headingRef,pe=de.headingElements,fe=pe.map((function(t){var n;return{id:t.id,name:G.d.getSectionHeading(t.id,{clips:e.clips,interactives:e.interactives,resources:null===(n=e.clip.resources)||void 0===n?void 0:n.data,isPlayClipPage:!0})}}));(0,g.D)({setActiveId:ae,headingElements:pe,controlledId:oe,setControlledId:ce}),(0,b.P)(pe,oe);var ve=I.M.isVideoTypeArchived(e.clip),he=X(v.C.StudentExperience),ye=r.useRef(!1);function ge(){var e,t,n,r;ye.current=!(null===(t=null===(e=null==z?void 0:z.playerRef)||void 0===e?void 0:e.current)||void 0===t?void 0:t.isPaused()),null===(r=null===(n=null==z?void 0:z.playerRef)||void 0===n?void 0:n.current)||void 0===r||r.pause()}function be(){var e,t;ye.current&&(null===(t=null===(e=null==z?void 0:z.playerRef)||void 0===e?void 0:e.current)||void 0===t||t.play())}function Ae(){var t,n;return!(!e.originalVideo||!(null===(t=e.clip._canBeConsumed)||void 0===t?void 0:t.value)||!(null===(n=e.currentUser)||void 0===n?void 0:n.isAuthenticated)||!e.hasProduct(h.x.Primary)||he)}var Ie,Ee,Pe="picture-in-picture"===z.mode||e.featureAccess.canViewPublicLayout,Ve=null!==(n=null===(t=e.clips)||void 0===t?void 0:t.filter((function(t){return t.id.toString()!==e.clip.id.toString()})))&&void 0!==n?n:[],Ce={hasTheatreMode:e.hasTheatreMode,shouldShowSideTableOfContents:e.shouldShowSideTableOfContents,tableOfContentsExpanded:se,theatreMode:te},Se=(0,k.l)(Ce),we=(0,k.D)(Ce),Te=(Ie=(0,i.D)(R.y.PLAY_PAGE_CONTAINER_CLASS_NAME),Ee=2,function(e){if(Array.isArray(e))return e}(Ie)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,a,o,c=[],s=!0,l=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=a.call(n)).done)&&(c.push(r.value),c.length!==t);s=!0);}catch(e){l=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return c}}(Ie,Ee)||function(e,t){if(e){if("string"==typeof e)return Y(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Y(e,t):void 0}}(Ie,Ee)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[1];return r.useEffect((function(){Te(te?Q.theatreModePlayPageContainer:"")}),[te]),r.useEffect((function(){return function(){return Te("")}}),[]),r.createElement("div",{className:"px-4 play-page-sections-container ".concat(e.shouldShowSideTableOfContents?"row g-0":"")},r.createElement("main",{className:"".concat(Q.main," ").concat(Se)},!!(null===(q=e.breadcrumbs)||void 0===q?void 0:q.length)&&r.createElement("div",{className:"mb-2"},r.createElement(o.Oo,{breadcrumbs:e.breadcrumbs})),r.createElement(w.W,{restrictions:e.clip._restrictions,yearGroups:e.commonVideoProps.yearGroups,objectId:e.clip.id,objectTypeId:f.E.Clip,canManageVideoAccess:e.canManageVideoAccess}),ve&&r.createElement(E.T,{typeId:e.clip.typeId,hasStudentExperience:he}),r.createElement("section",{id:A.K.Video,className:"mb-2 ".concat(d.M.GLOBAL_PLAYER_SELECTOR),ref:function(e){e&&(null==me?void 0:me.current)&&me.current.set(A.K.Video,e)}},ee&&r.createElement(m.r,{key:e.clip.id,objectId:e.clip.id,objectTypeId:e.clip.typeId,shareId:e.shareId,context:null===(_=e.queryParams)||void 0===_?void 0:_.context,contextId:null===(D=e.queryParams)||void 0===D?void 0:D.contextId,moviesAndTv:null===(W=e.queryParams)||void 0===W?void 0:W.mtv,playNext:null===(B=e.queryParams)||void 0===B?void 0:B.playNext,startTime:null!==(J=null===(H=e.queryParams)||void 0===H?void 0:H.t)&&void 0!==J?J:null===(Z=e.queryParams)||void 0===Z?void 0:Z.startTime,mode:z.mode||"default",location:"play-page"}),r.createElement("div",{className:Pe?"":"d-none"},r.createElement(T.S,{video:e.clip,type:"pip"}))),r.createElement("div",{className:we},r.createElement("div",{className:ne?"".concat(Q.theatreModeLeftContent):""},r.createElement(S.v,{media:e.clip,yearGroups:e.commonVideoProps.yearGroups,audiences:e.audiences,originalVideoAppLink:Ae()?{application:M.O.VIDEOS,action:L.e.Videos.PLAY_VIDEO,args:[e.originalVideo.id,a.m.slugify(e.originalVideo.name)]}:null,featureAccess:e.featureAccess,shareId:e.shareId,showTitlePadlock:!e.commonVideoProps.hasStudentExperience}),ue?r.createElement(l.j,{video:e.clip,pointsOfInterest:e.pointsOfInterest,setStartTime:function(e){var t;return null===(t=z.playerRef.current)||void 0===t?void 0:t.currentTime(e)},getTagAppLink:function(e){return{application:M.O.SEARCH,action:L.e.Search.HOME,params:{tagOrClassification:e.name}}},suppressInteractivity:e.featureAccess.canViewPublicLayout,canViewGlance:ue}):r.createElement(c.a,{video:e.clip,currentUser:e.currentUser,onLaunchImmersiveReader:ge,onExitImmersiveReader:be,getTagAppLink:function(e){return{application:M.O.SEARCH,action:L.e.Search.HOME,params:{tagOrClassification:e.name}}},headingRef:me,suppressInteractivity:e.featureAccess.canViewPublicLayout}),r.createElement(u.M,{video:e.clip,canViewResources:e.featureAccess.canViewResourceItems,imageCdnUrl:e.commonVideoProps.imageCdnUrl,getAppLink:$(e.clip.id,e.shareId,e.featureAccess.canViewResourceItems),analyticsData:{clipId:e.clip.id,clipName:e.clip.name},resourceThumbnailFallbackUrl:x.W.Fallbacks.RESOURCE_THUMBNAIL,headingRef:me}),r.createElement(V.J,{video:e.clip,interactives:e.interactives,analyticsData:{clipId:e.clip.id,clipName:e.clip.name},canViewInteractives:e.featureAccess.canViewInteractives,headingRef:me,commonVideoProps:e.commonVideoProps}),r.createElement(P.O,{clips:Ve||[],video:e.clip,canViewClips:e.featureAccess.canViewClips,audiences:e.audiences,headingRef:me,analyticsData:{clipId:e.clip.id,clipName:e.clip.name},commonVideoProps:e.commonVideoProps}),ue&&r.createElement(c.a,{video:e.clip,currentUser:e.currentUser,onLaunchImmersiveReader:ge,onExitImmersiveReader:be,getTagAppLink:function(e){return{application:M.O.SEARCH,action:L.e.Search.HOME,params:{tagOrClassification:e.name}}},headingRef:me,suppressInteractivity:e.featureAccess.canViewPublicLayout,showHeading:!0}),!!Ae()&&r.createElement(K,{originalVideo:e.originalVideo,shareId:e.shareId,queryParams:e.queryParams,audiences:e.audiences,headingRef:me,currentUser:e.currentUser,commonVideoProps:e.commonVideoProps}),r.createElement(O.Z,{currentVideo:e.clip,relatedVideos:e.relatedVideos,currentUser:e.currentUser,audiences:e.audiences,getVideoAppLink:function(t,n){var r;return j.W.getAppLink(t,Object.assign(Object.assign({},n),{context:e.queryParams.context,contextId:e.queryParams.contextId,playNext:e.queryParams.playNext,shareId:e.shareId,moviesAndTv:e.queryParams.mtv,includeContext:null===(r=e.currentUser)||void 0===r?void 0:r.isAuthenticated}))},moviesAndTv:e.queryParams.mtv,commonVideoProps:e.commonVideoProps})),te&&r.createElement(C.h,{isExpanded:se,setIsExpanded:le,toggleTheatreMode:null,items:fe,activeId:ie,setControlledId:ce,analyticsData:{videoId:e.clip.id,videoName:e.clip.name},showInSide:e.shouldShowSideTableOfContents,isTheatreMode:!0,hasTranscription:e.hasTheatreMode}))),!te&&r.createElement(C.h,{isExpanded:se,setIsExpanded:le,toggleTheatreMode:e.hasTheatreMode?function(e){var t,n,r;null===(r=null===(n=null===(t=z.playerRef)||void 0===t?void 0:t.current)||void 0===n?void 0:n.toggleTheatreMode)||void 0===r||r.call(n,e)}:null,items:fe,activeId:ie,setControlledId:ce,analyticsData:{videoId:e.clip.id,videoName:e.clip.name},showInSide:e.shouldShowSideTableOfContents,isTheatreMode:!1,hasTranscription:e.hasTheatreMode}))}}}]);
|
|
2
|
-
//# sourceMappingURL=3677-
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3677],{39902:(e,t,n)=>{n.d(t,{F:()=>p,f:()=>m});var r=n(32735),i=n(20354),a=n(75896);function o(e){return function(e){if(Array.isArray(e))return s(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||c(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e,t){if(e){if("string"==typeof e)return s(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?s(e,t):void 0}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function u(e,t,n){return(t=function(e){var t=function(e){if("object"!=l(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=l(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==l(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var d=50;function m(e,t){var n=a.m.chunk(e,d).map((function(e){return t(a.m.uniq(e))})),r=i.a.useBasicFetchAll(n),o=a.m.flatten(r.data),c=r.data.length?o.reduce((function(e,t){return Object.assign(Object.assign({},e),u({},t.id,t))}),{}):null;return{itemsArr:o,items:c,isFetching:r.isFetching}}function p(e,t,n){var s,m,p,f,v=n||function(e){return"object"===l(e)?e.id:e},h=r.useRef(new Set),y=(p=r.useState([]),f=2,function(e){if(Array.isArray(e))return e}(p)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,a,o,c=[],s=!0,l=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=a.call(n)).done)&&(c.push(r.value),c.length!==t);s=!0);}catch(e){l=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return c}}(p,f)||c(p,f)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),g=y[0],b=y[1];r.useEffect((function(){if(null==e?void 0:e.length){var n=[];e.forEach((function(e){var t=v(e);h.current.has(t)||(n.push(e),h.current.add(t))})),n.length&&b((function(e){return[].concat(o(e),o(a.m.chunk(n,d).map(t)))}))}}),[null==e?void 0:e.length]);var A=i.a.useBasicFetchAll(g),I=a.m.flatten(A.data),E=A.data.length?I.reduce((function(e,t){return Object.assign(Object.assign({},e),u({},v(t),t))}),{}):null;return{hasFirstRequestCompleted:!!(null===(m=null===(s=A.responses)||void 0===s?void 0:s[0])||void 0===m?void 0:m.hasCompleted),itemsArr:I,items:E,isFetching:A.isFetching}}},63719:(e,t,n)=>{n.d(t,{h:()=>c});var r=n(32735),i=n(77316);function a(e,t){if(e){if("string"==typeof e)return o(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(e,t):void 0}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function c(e){var t,n,c=(t=r.useMemo((function(){return i.p.getBuilder()}),[]),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,a,o,c=[],s=!0,l=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=a.call(n)).done)&&(c.push(r.value),c.length!==t);s=!0);}catch(e){l=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return c}}(t,n)||a(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),s=c[0],l=(0,c[1])(s);return l&&e?[].concat(function(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||a(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(l),[Object.assign(Object.assign({},e),{active:!0})]):l}},58321:(e,t,n)=>{n.d(t,{U:()=>f});var r=n(20354),i=n(16714),a=n(39151),o=n(1666),c=n(31949),s=n(22902),l=n(37802),u=n(22490),d=n(82431),m=n(46390),p=n(27638);function f(e){var t,n,f,v=e||{},h=v.locationContext,y=v.mtv,g=v.flightNamespace,b=v.sharedPlaylist,A=(0,m.G)().isPlugin,I=(0,p.u)(h,g),E=I.setFavourite,P=I.canFavourite,V=(0,l.r)(null),C=V.hasTopicDirectories,S=V.isLoadingSettings,w=(0,s.T)(),T=w.hasPermissions,O=w.isLoaded,x=T(i.C.StudentExperience),L=r.a.useBasicFetch(a.L.config()),M=r.a.useBasicFetch(c.N.currentUser()),R=r.a.useBasicFetch((null===(t=M.data)||void 0===t?void 0:t.isAuthenticated)&&o.h.yearGroups(M.data.customerId));return{hasCommonVideoPropsCompleted:!S&&O&&L.hasCompleted&&M.hasCompleted&&(!(null===(n=M.data)||void 0===n?void 0:n.isAuthenticated)||R.hasCompleted),commonVideoProps:{subTextType:"series",getSubTextAppLink:function(e){var t;return"series"in e?b&&!(null===(t=M.data)||void 0===t?void 0:t.isAuthenticated)?null:d.j.getSeriesAppLink(e.series,{mtv:y}):null},isPlugin:A,canFavourite:P,setFavourite:E,imageCdnUrl:null===(f=L.data)||void 0===f?void 0:f.imageCdnUrl,yearGroups:R.data,getClassroomGuideAppLink:u.W.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:u.W.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:u.W.getResourceGuidanceAppLink,showNewVideoIndicator:C,companyLogoFallbackUrl:null,hasStudentExperience:x}}}},44110:(e,t,n)=>{n.d(t,{i:()=>o});var r=n(20354),i=n(89454),a=n(86698),o=function(){var e=(0,a.y)({redirectOnError:!0}),t=e.activePresentation,n=e.getFallbackPresentation,o=t||n();return r.a.useBasicFetch(!!o&&i.O.presentationAudiences(o.id))}},35014:(e,t,n)=>{n.d(t,{I:()=>s});var r=n(16714),i=n(12754),a=n(22902),o=n(15311),c=n(11387);function s(){var e=(0,a.T)(),t=e.hasPermissions,n=e.hasLocalPermissions,s=(0,(0,o.r)().hasProduct)(i.x.Primary);return{canViewGlance:t(r.C.ViewVideoGlance),canViewResources:!0,canViewInteractives:s&&t(r.C.ViewVideoInteractives),canViewClips:s&&t(r.C.ViewVideoClips),canViewCurriculumLinks:t(r.C.ViewCurriculums),canUseActions:n(r.E.UseVideoActions),canViewPublicLayout:!n(r.E.WatchVideos)&&c.C.hasRegionPrefix(),canViewResourceItems:n(r.E.ViewVideoResourceItems),canNavigate:s}}},97816:(e,t,n)=>{n.d(t,{V:()=>o});var r=n(1575),i=n(39902),a=n(31908);function o(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=function(e){return e?Array.isArray(e)?e.filter((function(e){return!!e&&(a.M.isVideo(e)||a.M.isClip(e))})):"data"in e?e.data.filter((function(e){return!!e&&(a.M.isVideo(e)||a.M.isClip(e))})):[]:[]}(e).map((function(e){return e.id}));(0,i.F)(n,(function(e){return r.R.videoMixinAssocs(e,t.flightNamespace)}))}},80053:(e,t,n)=>{n.d(t,{N:()=>J});var r=n(32735),i=n(2948),a=n(28400),o=n(49935),c=n(93850),s=n(61499),l=n(38165),u=n(89456),d=n(71063),m=n(80128),p=n(34055),f=n(4594),v=n(16714),h=n(12754),y=n(22902),g=n(65332),b=n(9907),A=n(59598),I=n(31908),E=n(26492),P=n(22103),V=n(84459),C=n(87851),S=n(11256),w=n(47938),T=n(4171),O=n(78166),x=n(99742),L=n(14070),M=n(97291),R=n(86702),j=n(22490),k=n(29978),N=n(15731),U=n(75861),F=n(28389),G=n(31887),q=n(83345),_=n(75100),D=n(51365),W=n(10671),B=n(10741),H="shared.playClip";function K(e){var t=(0,y.T)().hasPermissions,n=(0,W._)({location:W.i.VideoItem});return r.createElement("section",{className:"play-page-section",id:A.K.ClippedFrom,ref:function(t){var n;t&&(null===(n=e.headingRef)||void 0===n?void 0:n.current)&&e.headingRef.current.set(A.K.ClippedFrom,t)}},r.createElement("h2",{className:"h4 mb-0"},r.createElement(q.x,{namespace:H,phrase:"clippedFrom"})),r.createElement(D.M.Provider,{value:n},r.createElement(_.E4,{videos:[e.originalVideo],getVideoAppLink:function(t,n){var r;return j.W.getAppLink(t,Object.assign(Object.assign({},n),{context:e.queryParams.context,contextId:e.queryParams.contextId,playNext:e.queryParams.playNext,shareId:e.shareId,moviesAndTv:e.queryParams.mtv,includeContext:null===(r=e.currentUser)||void 0===r?void 0:r.isAuthenticated}))},hasPermissions:t,presentationAudiences:e.audiences,getPreviewQuestionsAppLink:function(e){return B.j.getPreviewQuestionsAppLink(e)},commonVideoProps:e.commonVideoProps})))}const Q={main:"ULvZW",expandedToc:"W3k9M",theatreMode:"KOUGv",theatreModeContent:"fWNAc",theatreModePlayPageContainer:"RJ5nP",theatreModeLeftContent:"dllgG"};function Y(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var $=function(e,t,n){return function(r){return n?{application:M.O.VIDEOS,action:L.e.Videos.PREVIEW_PDF,args:[r.id],params:{videoId:e,shareId:t}}:{application:M.O.SIGN_UP,action:L.e.SignUp.SIGN_UP}}};function J(e){var t,n,q,_,D,W,B,H,J,Z,z=(0,p.g)(),X=(0,y.T)().hasPermissions,ee=I.M.getCanBeConsumed(e.clip).canConsume,te=e.hasTheatreMode&&"theatre"===z.mode,ne=(0,F.V)(e.hasTheatreMode,te),re=(0,N.Q)(e.tableOfContentsId,e.hasTheatreMode,te),ie=re.tableOfContentsActiveId,ae=re.setTableOfContentsActiveId,oe=re.controlledId,ce=re.setControlledId,se=re.tableOfContentsExpanded,le=re.onToggleTableOfContents,ue=(0,s.Wp)(e.clip)&&e.featureAccess.canViewGlance,de=(0,U.i)(ue),me=de.headingRef,pe=de.headingElements,fe=pe.map((function(t){var n;return{id:t.id,name:G.d.getSectionHeading(t.id,{clips:e.clips,interactives:e.interactives,resources:null===(n=e.clip.resources)||void 0===n?void 0:n.data,isPlayClipPage:!0})}}));(0,g.D)({setActiveId:ae,headingElements:pe,controlledId:oe,setControlledId:ce}),(0,b.P)(pe,oe);var ve=I.M.isVideoTypeArchived(e.clip),he=X(v.C.StudentExperience),ye=r.useRef(!1);function ge(){var e,t,n,r;ye.current=!(null===(t=null===(e=null==z?void 0:z.playerRef)||void 0===e?void 0:e.current)||void 0===t?void 0:t.isPaused()),null===(r=null===(n=null==z?void 0:z.playerRef)||void 0===n?void 0:n.current)||void 0===r||r.pause()}function be(){var e,t;ye.current&&(null===(t=null===(e=null==z?void 0:z.playerRef)||void 0===e?void 0:e.current)||void 0===t||t.play())}function Ae(){var t,n;return!(!e.originalVideo||!(null===(t=e.clip._canBeConsumed)||void 0===t?void 0:t.value)||!(null===(n=e.currentUser)||void 0===n?void 0:n.isAuthenticated)||!e.hasProduct(h.x.Primary)||he)}var Ie,Ee,Pe="picture-in-picture"===z.mode||e.featureAccess.canViewPublicLayout,Ve=null!==(n=null===(t=e.clips)||void 0===t?void 0:t.filter((function(t){return t.id.toString()!==e.clip.id.toString()})))&&void 0!==n?n:[],Ce={hasTheatreMode:e.hasTheatreMode,shouldShowSideTableOfContents:e.shouldShowSideTableOfContents,tableOfContentsExpanded:se,theatreMode:te},Se=(0,k.l)(Ce),we=(0,k.D)(Ce),Te=(Ie=(0,i.D)(R.y.PLAY_PAGE_CONTAINER_CLASS_NAME),Ee=2,function(e){if(Array.isArray(e))return e}(Ie)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,a,o,c=[],s=!0,l=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=a.call(n)).done)&&(c.push(r.value),c.length!==t);s=!0);}catch(e){l=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return c}}(Ie,Ee)||function(e,t){if(e){if("string"==typeof e)return Y(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Y(e,t):void 0}}(Ie,Ee)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[1];return r.useEffect((function(){Te(te?Q.theatreModePlayPageContainer:"")}),[te]),r.useEffect((function(){return function(){return Te("")}}),[]),r.createElement("div",{className:"px-4 play-page-sections-container ".concat(e.shouldShowSideTableOfContents?"row g-0":"")},r.createElement("main",{className:"".concat(Q.main," ").concat(Se)},!!(null===(q=e.breadcrumbs)||void 0===q?void 0:q.length)&&r.createElement("div",{className:"mb-2"},r.createElement(o.Oo,{breadcrumbs:e.breadcrumbs})),r.createElement(w.W,{restrictions:e.clip._restrictions,yearGroups:e.commonVideoProps.yearGroups,objectId:e.clip.id,objectTypeId:f.E.Clip,canManageVideoAccess:e.canManageVideoAccess}),ve&&r.createElement(E.T,{typeId:e.clip.typeId,hasStudentExperience:he}),r.createElement("section",{id:A.K.Video,className:"mb-2 ".concat(d.M.GLOBAL_PLAYER_SELECTOR),ref:function(e){e&&(null==me?void 0:me.current)&&me.current.set(A.K.Video,e)}},ee&&r.createElement(m.r,{key:e.clip.id,objectId:e.clip.id,objectTypeId:e.clip.typeId,shareId:e.shareId,context:null===(_=e.queryParams)||void 0===_?void 0:_.context,contextId:null===(D=e.queryParams)||void 0===D?void 0:D.contextId,moviesAndTv:null===(W=e.queryParams)||void 0===W?void 0:W.mtv,playNext:null===(B=e.queryParams)||void 0===B?void 0:B.playNext,startTime:null!==(J=null===(H=e.queryParams)||void 0===H?void 0:H.t)&&void 0!==J?J:null===(Z=e.queryParams)||void 0===Z?void 0:Z.startTime,mode:z.mode||"default",location:"play-page"}),r.createElement("div",{className:Pe?"":"d-none"},r.createElement(T.S,{video:e.clip,type:"pip"}))),r.createElement("div",{className:we},r.createElement("div",{className:ne?"".concat(Q.theatreModeLeftContent):"w-100"},r.createElement(S.v,{media:e.clip,yearGroups:e.commonVideoProps.yearGroups,audiences:e.audiences,originalVideoAppLink:Ae()?{application:M.O.VIDEOS,action:L.e.Videos.PLAY_VIDEO,args:[e.originalVideo.id,a.m.slugify(e.originalVideo.name)]}:null,featureAccess:e.featureAccess,shareId:e.shareId,showTitlePadlock:!e.commonVideoProps.hasStudentExperience}),ue?r.createElement(l.j,{video:e.clip,pointsOfInterest:e.pointsOfInterest,setStartTime:function(e){var t;return null===(t=z.playerRef.current)||void 0===t?void 0:t.currentTime(e)},getTagAppLink:function(e){return{application:M.O.SEARCH,action:L.e.Search.HOME,params:{tagOrClassification:e.name}}},suppressInteractivity:e.featureAccess.canViewPublicLayout,canViewGlance:ue}):r.createElement(c.a,{video:e.clip,currentUser:e.currentUser,onLaunchImmersiveReader:ge,onExitImmersiveReader:be,getTagAppLink:function(e){return{application:M.O.SEARCH,action:L.e.Search.HOME,params:{tagOrClassification:e.name}}},headingRef:me,suppressInteractivity:e.featureAccess.canViewPublicLayout}),r.createElement(u.M,{video:e.clip,canViewResources:e.featureAccess.canViewResourceItems,imageCdnUrl:e.commonVideoProps.imageCdnUrl,getAppLink:$(e.clip.id,e.shareId,e.featureAccess.canViewResourceItems),analyticsData:{clipId:e.clip.id,clipName:e.clip.name},resourceThumbnailFallbackUrl:x.W.Fallbacks.RESOURCE_THUMBNAIL,headingRef:me}),r.createElement(V.J,{video:e.clip,interactives:e.interactives,analyticsData:{clipId:e.clip.id,clipName:e.clip.name},canViewInteractives:e.featureAccess.canViewInteractives,headingRef:me,commonVideoProps:e.commonVideoProps}),r.createElement(P.O,{clips:Ve||[],video:e.clip,canViewClips:e.featureAccess.canViewClips,audiences:e.audiences,headingRef:me,analyticsData:{clipId:e.clip.id,clipName:e.clip.name},commonVideoProps:e.commonVideoProps}),ue&&r.createElement(c.a,{video:e.clip,currentUser:e.currentUser,onLaunchImmersiveReader:ge,onExitImmersiveReader:be,getTagAppLink:function(e){return{application:M.O.SEARCH,action:L.e.Search.HOME,params:{tagOrClassification:e.name}}},headingRef:me,suppressInteractivity:e.featureAccess.canViewPublicLayout,showHeading:!0}),!!Ae()&&r.createElement(K,{originalVideo:e.originalVideo,shareId:e.shareId,queryParams:e.queryParams,audiences:e.audiences,headingRef:me,currentUser:e.currentUser,commonVideoProps:e.commonVideoProps}),r.createElement(O.Z,{currentVideo:e.clip,relatedVideos:e.relatedVideos,currentUser:e.currentUser,audiences:e.audiences,getVideoAppLink:function(t,n){var r;return j.W.getAppLink(t,Object.assign(Object.assign({},n),{context:e.queryParams.context,contextId:e.queryParams.contextId,playNext:e.queryParams.playNext,shareId:e.shareId,moviesAndTv:e.queryParams.mtv,includeContext:null===(r=e.currentUser)||void 0===r?void 0:r.isAuthenticated}))},moviesAndTv:e.queryParams.mtv,commonVideoProps:e.commonVideoProps})),te&&r.createElement(C.h,{isExpanded:se,setIsExpanded:le,toggleTheatreMode:null,items:fe,activeId:ie,setControlledId:ce,analyticsData:{videoId:e.clip.id,videoName:e.clip.name},showInSide:e.shouldShowSideTableOfContents,isTheatreMode:!0,hasTranscription:e.hasTheatreMode}))),!te&&r.createElement(C.h,{isExpanded:se,setIsExpanded:le,toggleTheatreMode:e.hasTheatreMode?function(e){var t,n,r;null===(r=null===(n=null===(t=z.playerRef)||void 0===t?void 0:t.current)||void 0===n?void 0:n.toggleTheatreMode)||void 0===r||r.call(n,e)}:null,items:fe,activeId:ie,setControlledId:ce,analyticsData:{videoId:e.clip.id,videoName:e.clip.name},showInSide:e.shouldShowSideTableOfContents,isTheatreMode:!1,hasTranscription:e.hasTheatreMode}))}}}]);
|
|
2
|
+
//# sourceMappingURL=3677-f48c335f7a-lite.chunk.js.map
|
package/dist/scripts/{3677-9445118a8d-lite.chunk.js.map → 3677-f48c335f7a-lite.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/3677-9445118a8d-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/libs/shared/src/hooks/useBreadcrumbs.ts","file:///app/packages/projects/lite/src/shared/hooks/useCommonVideoProps.ts","file:///app/packages/projects/lite/src/shared/hooks/usePresentationAudiences.ts","file:///app/packages/projects/lite/src/shared/hooks/useVideoFeatureAccess.ts","file:///app/packages/projects/lite/src/shared/hooks/useVideoMixin.ts","file:///app/packages/projects/lite/src/shared/views/play-clip/components/clipped-from/ClippedFrom.tsx","file:///app/packages/projects/lite/src/shared/views/play-clip/components/play-clip/play-clip.scss","file:///app/packages/projects/lite/src/shared/views/play-clip/components/play-clip/PlayClip.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst CHUNK_SIZE = 50;\n\nexport interface UseBatchFetchResult<T extends BaseObject> {\n itemsArr: T[];\n items: { [key: string]: T} | null;\n isFetching: boolean;\n}\n\n/**\n * Used to fetch multiple items by id with Flight. Will fetch 25 items at a time firing off multiple\n * requests if there are more than 25 items.\n * This will return items as null until we have all our items. Items will be returned as an object with\n * their ids as they key for easy mapping\n * \n * @param itemIds \n * @param getRequest \n */\nexport function useBatchFetch<T extends BaseObject>(\n itemIds: string[],\n getRequest: (ids: string[]) => Flight.Request\n): UseBatchFetchResult<T> {\n const chunks = ArrayHelper.chunk<string>(itemIds, CHUNK_SIZE);\n\n const requests = chunks.map(chunk => getRequest(ArrayHelper.uniq(chunk)));\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\n\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce((acc, item) => ({ ...acc, [item.id]: item }), {})\n : null;\n\n return {\n itemsArr,\n items,\n isFetching: responses.isFetching\n };\n}\n\n/**\n * When you need the useBatchFetch() behavior, but your list of objects to hydrate\n * will grow, such as on a scrolling page. useGrowingBatchFetch() will use local state\n * to determine what we've already built a request for and what items are new\n * as to not re-fetch items - Sha\n */\nexport function useGrowingBatchFetch<T>(\n objs: T[],\n getRequest: (items: T[]) => Flight.Request,\n _getKey?: (obj: T) => string\n) {\n const getKey = _getKey || ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const fetchedItems = React.useRef<Set<string>>(new Set<string>());\n\n const [ requests, setRequests ] = React.useState<Flight.Request[]>([]);\n\n React.useEffect(() => {\n if (!objs?.length)\n return;\n\n const unfetchedItems: T[] = [];\n \n objs.forEach(obj => {\n const key = getKey(obj);\n\n if (fetchedItems.current.has(key))\n return;\n\n unfetchedItems.push(obj);\n fetchedItems.current.add(key);\n });\n \n if (!unfetchedItems.length)\n return;\n\n setRequests(r => ([ ...r, ...ArrayHelper.chunk<T>(unfetchedItems, CHUNK_SIZE).map(getRequest) ]));\n }, [objs?.length]);\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\n\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce((acc, item) => ({ ...acc, [getKey(item)]: item }), {})\n : null;\n\n return {\n hasFirstRequestCompleted: !!responses.responses?.[0]?.hasCompleted,\n itemsArr,\n items,\n isFetching: responses.isFetching\n };\n}","import React from 'react';\n\nimport { Breadcrumb } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { BreadcrumbService } from 'libs/shared/services/BreadcrumbService';\n\nexport function useBreadcrumbs(current: Breadcrumb): Breadcrumb[] {\n const [ match, useBuilder ] = React.useMemo(() => BreadcrumbService.getBuilder(), []);\n\n const breadcrumbs = useBuilder(match);\n\n if (!breadcrumbs || !current)\n return breadcrumbs;\n\n return [ ...breadcrumbs, { ...current, active: true }];\n}\n\n","import { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config, CurrentUser, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nimport { usePluginHelper } from './use-plugin-helper/usePluginHelper';\nimport { useLiteFavourites } from './useLiteFavourites';\n\ninterface UseCommonVideoPropsResult {\n hasCommonVideoPropsCompleted: boolean;\n commonVideoProps: CommonVideoProps;\n}\n\ninterface UseCommonVideoPropsOptions {\n locationContext: LocationContext,\n mtv?: boolean;\n flightNamespace?: string;\n sharedPlaylist?: boolean;\n}\n\nexport function useCommonVideoProps(options: UseCommonVideoPropsOptions): UseCommonVideoPropsResult {\n const { locationContext, mtv, flightNamespace, sharedPlaylist } = options || {};\n\n const { isPlugin } = usePluginHelper();\n const { setFavourite, canFavourite } = useLiteFavourites(locationContext, flightNamespace);\n const { hasTopicDirectories, isLoadingSettings } = useSettings(null);\n const { hasPermissions, isLoaded: hasLoadedPermissions } = usePermissions();\n const hasStudentExperience = hasPermissions(PermissionName.StudentExperience);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n function getSubTextAppLink(video: VideoTypes): Core.AppLink {\n if (!('series' in video))\n return null;\n\n /**\n * We do not allow navigating to series on shared playlists when the user is not signed in\n * because most series are customer created and will be empty for public users\n * \n * We do not have to do this for shared series, because all the series links are self referencing\n * - Sha\n */\n if (sharedPlaylist && !currentUser.data?.isAuthenticated)\n return null;\n \n return SeriesAppLinkHelper.getSeriesAppLink(video.series, { mtv });\n }\n\n const hasCommonVideoPropsCompleted = (\n !isLoadingSettings &&\n hasLoadedPermissions &&\n config.hasCompleted &&\n currentUser.hasCompleted &&\n (!currentUser.data?.isAuthenticated || yearGroups.hasCompleted)\n );\n\n return {\n hasCommonVideoPropsCompleted,\n commonVideoProps: {\n subTextType: 'series',\n getSubTextAppLink,\n isPlugin,\n canFavourite,\n setFavourite,\n imageCdnUrl: config.data?.imageCdnUrl,\n yearGroups: yearGroups.data,\n getClassroomGuideAppLink: VideoAppLinkHelper.getClassroomGuideAppLink,\n getInteractiveGuidanceAppLink: VideoAppLinkHelper.getInteractiveGuidanceAppLink,\n getResourceGuidanceAppLink: VideoAppLinkHelper.getResourceGuidanceAppLink,\n showNewVideoIndicator: hasTopicDirectories,\n companyLogoFallbackUrl: null,\n hasStudentExperience\n }\n };\n}","import { Flight } from 'libs/common/react/index';\n\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\nimport { usePresentation } from 'shared/hooks/usePresentation';\n\nexport const usePresentationAudiences = () => {\n const { activePresentation, getFallbackPresentation } = usePresentation({ redirectOnError: true });\n\n const presentation = activePresentation || getFallbackPresentation();\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n !!presentation &&\n AudienceRequests.presentationAudiences(presentation.id)\n );\n\n return audiences;\n};","import { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\n\nimport { LiteRouteHelper } from 'shared/utils/LiteRouteHelper';\n\nexport interface VideoFeaturesHash {\n canViewGlance: boolean;\n canViewResources: boolean;\n canViewInteractives: boolean;\n canViewClips: boolean;\n canUseActions: boolean;\n canViewPublicLayout: boolean;\n canNavigate: boolean;\n canViewCurriculumLinks: boolean;\n canViewResourceItems: boolean;\n}\n\nexport function useVideoFeatureAccess() {\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n const { hasProduct } = useProducts();\n\n const hasNP = hasProduct(ProductId.Primary);\n\n function showPublicLayout(): boolean {\n /**\n * Authenticated users should never see the placeholder\n */\n if (hasLocalPermissions(LocalPermissionName.WatchVideos))\n return false;\n\n /**\n * Accessing a play page unathenticated will have different contextual behabviours:\n * - For a share page, the user should see the video and never the placeholder\n * - For a public browsing page (ie. using a route-prefix) they should see the placeholder\n */\n return LiteRouteHelper.hasRegionPrefix();\n }\n\n return {\n canViewGlance: hasPermissions(PermissionName.ViewVideoGlance),\n canViewResources: true,\n canViewInteractives: hasNP && hasPermissions(PermissionName.ViewVideoInteractives),\n canViewClips: hasNP && hasPermissions(PermissionName.ViewVideoClips),\n canViewCurriculumLinks: hasPermissions(PermissionName.ViewCurriculums),\n canUseActions: hasLocalPermissions(LocalPermissionName.UseVideoActions),\n canViewPublicLayout: showPublicLayout(),\n canViewResourceItems: hasLocalPermissions(LocalPermissionName.ViewVideoResourceItems),\n canNavigate: hasNP\n };\n}","import { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useGrowingBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { Clip, ClipCollection, Video, VideoCollection } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\ntype Types = Video[] | VideoCollection | Clip[] | ClipCollection;\n\nfunction getValidObjects(objects: Types): (Video | Clip)[] {\n if (!objects)\n return [];\n\n if (Array.isArray(objects))\n return objects.filter(o => !!o && (VideoHelper.isVideo(o) || VideoHelper.isClip(o)));\n\n if ('data' in objects)\n return objects.data.filter(o => !!o && (VideoHelper.isVideo(o) || VideoHelper.isClip(o)));\n\n return [];\n}\n\ninterface VideoMixinOptions {\n /**\n * If the videos that are having new data mixed into are sitting on an explicit Flight namespace,\n * providing that namespace here is required\n */\n flightNamespace?: string;\n}\n\nexport function useVideoMixin(objects: Types, options: VideoMixinOptions = {}): void {\n const videoIds = getValidObjects(objects).map(v => v.id);\n\n useGrowingBatchFetch(videoIds, ids => VideoRequests.videoMixinAssocs(ids, options.flightNamespace));\n}","import React from 'react';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { CurrentUser, PresentationAudience, VideoTypes } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\n\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { InteractiveHelpers } from 'shared/utils/InteractiveHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nconst namespace = 'shared.playClip';\n\ninterface ClippedFromProps {\n originalVideo: VideoTypes;\n queryParams: PlayViewQueryParams;\n audiences: PresentationAudience[];\n shareId?: string;\n headingRef: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n currentUser: CurrentUser;\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ClippedFrom(props: ClippedFromProps) {\n const { hasPermissions } = usePermissions();\n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem });\n\n return (\n <section\n className='play-page-section'\n id={PlayPageAnchor.ClippedFrom}\n ref={el => {\n (el && props.headingRef?.current) && props.headingRef.current.set(PlayPageAnchor.ClippedFrom, el);\n }}\n >\n <h2 className='h4 mb-0'><Text namespace={namespace} phrase='clippedFrom' /></h2>\n <VideoActionsContext.Provider value={videoActions}>\n <VideoList\n videos={[props.originalVideo]}\n getVideoAppLink={(v, opts) => VideoAppLinkHelper.getAppLink(v, {\n ...opts,\n context: props.queryParams.context,\n contextId: props.queryParams.contextId,\n playNext: props.queryParams.playNext,\n shareId: props.shareId,\n moviesAndTv: props.queryParams.mtv,\n includeContext: props.currentUser?.isAuthenticated\n })}\n hasPermissions={hasPermissions}\n presentationAudiences={props.audiences}\n getPreviewQuestionsAppLink={interactive => InteractiveHelpers.getPreviewQuestionsAppLink(interactive)}\n commonVideoProps={props.commonVideoProps}\n />\n </VideoActionsContext.Provider>\n </section>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"main\":\"ULvZW\",\"expandedToc\":\"W3k9M\",\"theatreMode\":\"KOUGv\",\"theatreModeContent\":\"fWNAc\",\"theatreModePlayPageContainer\":\"RJ5nP\",\"theatreModeLeftContent\":\"dllgG\"};","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { 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 { PlayPageResources } from 'libs/shared/components/play-page/resources-widget/PlayPageResources';\nimport { SeoConstants } from 'libs/shared/constants/SeoConstants';\nimport { GlobalPlayerConsumer } from 'libs/shared/context/player-context/components/GlobalPlayerConsumer';\nimport { usePlayerContext } from 'libs/shared/context/player-context/PlayerContext';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { HasProductFunc } from 'libs/shared/hooks/UseProducts';\nimport { useTableOfContentsActiveHeading } from 'libs/shared/hooks/useTableOfContentsActiveHeading';\nimport { useTableOfContentsScroll } from 'libs/shared/hooks/useTableOfContentsScroll';\nimport { Clip, CurrentUser, InteractiveMetadata, Link, PointOfInterest, PresentationAudience, Resource, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ArchivedBanner } from 'shared/components/play-page/ArchivedBanner';\nimport { PlayPageClips } from 'shared/components/play-page/components/play-page-clips/PlayPageClips';\nimport { PlayPageInteractives } from 'shared/components/play-page/components/play-page-interactives/PlayPageInteractives';\nimport { TableOfContentsContainer } from 'shared/components/play-page/components/table-of-contents/TableOfContents';\nimport { PlayPageTitleAndActions } from 'shared/components/play-page/components/title-and-actions/PlayPageTitleAndActions';\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 { getContentClassName, 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 { useTheatreStyle } from 'shared/views/play/hooks/useTheatreStyle';\nimport { PlayPageUtils } from 'shared/views/play/PlayPageUtil';\nimport { ClippedFrom } from 'shared/views/play-clip/components/clipped-from/ClippedFrom';\n\nimport styles from './play-clip.scss';\n\nconst getResourceAppLink = (videoId: string, shareId: string, canViewResource: boolean) =>\n (resource: Resource | Link) => {\n if (!canViewResource) {\n return {\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n };\n }\n\n return {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PREVIEW_PDF,\n args: [resource.id],\n params: {\n videoId: videoId,\n shareId: shareId\n }\n };\n };\n\n\ninterface PlayClipProps {\n clip: Clip;\n clips: Clip[];\n interactives: InteractiveMetadata[];\n originalVideo: Video;\n currentUser: CurrentUser;\n relatedVideos: RelatedVideosHash;\n queryParams: PlayViewQueryParams;\n hasProduct: HasProductFunc;\n audiences: PresentationAudience[];\n shareId?: string;\n canManageVideoAccess: boolean;\n pointsOfInterest?: PointOfInterest[];\n featureAccess: VideoFeaturesHash;\n tableOfContentsId: string;\n shouldShowSideTableOfContents: boolean;\n hasTopicDirectories: boolean;\n hasTheatreMode: boolean;\n breadcrumbs?: Breadcrumb[];\n commonVideoProps: CommonVideoProps;\n}\n\nexport function PlayClip(props: PlayClipProps): JSX.Element {\n const playerContext = usePlayerContext();\n\n const { hasPermissions } = usePermissions();\n const { canConsume } = VideoHelper.getCanBeConsumed(props.clip);\n \n const theatreMode = props.hasTheatreMode && playerContext.mode === 'theatre';\n const shouldUseTheareModeStyle = useTheatreStyle(props.hasTheatreMode, theatreMode);\n\n function toggleTheatreMode(value: boolean) {\n playerContext.playerRef?.current?.toggleTheatreMode?.(value);\n }\n\n const {\n tableOfContentsActiveId,\n setTableOfContentsActiveId,\n controlledId,\n setControlledId,\n tableOfContentsExpanded,\n onToggleTableOfContents\n } = usePlayPageTableOfContent(props.tableOfContentsId, props.hasTheatreMode, theatreMode);\n\n const hasGlance = hasGlanceData(props.clip) && props.featureAccess.canViewGlance;\n\n const { headingRef, headingElements } = useSectionHeadings(hasGlance);\n const items = headingElements.map(ele => {\n return {\n id: ele.id as PlayPageAnchor,\n name: PlayPageUtils.getSectionHeading(\n ele.id as PlayPageAnchor,\n {\n clips: props.clips,\n interactives: props.interactives,\n resources: props.clip.resources?.data,\n isPlayClipPage: true\n }\n )\n };\n });\n\n useTableOfContentsActiveHeading({\n setActiveId: setTableOfContentsActiveId,\n headingElements,\n controlledId,\n setControlledId\n });\n\n useTableOfContentsScroll(headingElements, controlledId);\n\n const isArchived = VideoHelper.isVideoTypeArchived(props.clip);\n const hasStudentExperience = hasPermissions(PermissionName.StudentExperience);\n /**\n * Need to use a ref because if we use state, onExitImmersiveReader will have a stale\n * reference of the state. This is because the state is changed in onLaunchImmersiveReader\n * which is passed in at the same time as onExitImmersiveReader\n */\n const shouldPlayOnExitImmersiveReader = React.useRef(false);\n\n function onLaunchImmersiveReader(): void {\n shouldPlayOnExitImmersiveReader.current = !playerContext?.playerRef?.current?.isPaused();\n playerContext?.playerRef?.current?.pause();\n }\n\n function onExitImmersiveReader(): void {\n if (!shouldPlayOnExitImmersiveReader.current)\n return;\n\n playerContext?.playerRef?.current?.play();\n }\n\n function canAccessOriginal(): boolean {\n if (!props.originalVideo || !props.clip._canBeConsumed?.value)\n return false;\n\n if (!props.currentUser?.isAuthenticated)\n return false;\n\n if (!props.hasProduct(ProductId.Primary))\n return false;\n\n if (hasStudentExperience)\n return false;\n\n return true;\n }\n\n function getOriginalVideoAppLink(): Core.AppLink {\n if (!canAccessOriginal())\n return null;\n \n return {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ props.originalVideo.id, TextHelper.slugify(props.originalVideo.name) ]\n };\n }\n\n const showPlayerPlaceholder = playerContext.mode === 'picture-in-picture' || props.featureAccess.canViewPublicLayout;\n\n const otherClips = props.clips?.filter(c => c.id.toString() !== props.clip.id.toString()) ?? [];\n\n const calcClassNameProps = {\n hasTheatreMode: props.hasTheatreMode,\n shouldShowSideTableOfContents: props.shouldShowSideTableOfContents,\n tableOfContentsExpanded,\n theatreMode\n };\n const mainClassName = getMainClassName(calcClassNameProps);\n const contentClassName = getContentClassName(calcClassNameProps);\n\n const [ , setContainerClassName ] = useViewModel(ViewModelKeys.PLAY_PAGE_CONTAINER_CLASS_NAME);\n \n React.useEffect(() => {\n if (!theatreMode) {\n setContainerClassName('');\n } else {\n setContainerClassName(styles.theatreModePlayPageContainer);\n }\n }, [theatreMode]);\n\n React.useEffect(() => {\n return () => setContainerClassName('');\n }, []);\n\n return (\n <div className={`px-4 play-page-sections-container ${props.shouldShowSideTableOfContents ? 'row g-0' : ''}`}>\n <main className={`${styles.main} ${mainClassName}`}>\n {!!props.breadcrumbs?.length && (\n <div className='mb-2'>\n <Breadcrumbs breadcrumbs={props.breadcrumbs} />\n </div>\n )}\n\n <RestrictionBanner\n restrictions={props.clip._restrictions}\n yearGroups={props.commonVideoProps.yearGroups}\n objectId={props.clip.id}\n objectTypeId={MasterType.Clip}\n canManageVideoAccess={props.canManageVideoAccess}\n />\n\n {isArchived && (\n <ArchivedBanner\n typeId={props.clip.typeId}\n hasStudentExperience={hasStudentExperience}\n />\n )}\n\n <section\n id={PlayPageAnchor.Video}\n className={`mb-2 ${SeoConstants.GLOBAL_PLAYER_SELECTOR}`}\n ref={el => { (el && headingRef?.current) && headingRef.current.set(PlayPageAnchor.Video, el); }}\n >\n {canConsume && (\n <GlobalPlayerConsumer\n key={props.clip.id}\n objectId={props.clip.id}\n objectTypeId={props.clip.typeId}\n shareId={props.shareId}\n context={props.queryParams?.context}\n contextId={props.queryParams?.contextId}\n moviesAndTv={props.queryParams?.mtv}\n playNext={props.queryParams?.playNext}\n startTime={props.queryParams?.t ?? props.queryParams?.startTime}\n mode={playerContext.mode || 'default'}\n location='play-page'\n />\n )}\n\n <div className={showPlayerPlaceholder ? '' : 'd-none'}>\n <PlayerPlaceholder\n video={props.clip}\n type='pip'\n />\n </div>\n </section>\n\n <div className={contentClassName}>\n <div className={shouldUseTheareModeStyle ? `${styles.theatreModeLeftContent}` : ''}>\n <PlayPageTitleAndActions\n media={props.clip}\n yearGroups={props.commonVideoProps.yearGroups}\n audiences={props.audiences}\n originalVideoAppLink={getOriginalVideoAppLink()}\n featureAccess={props.featureAccess}\n shareId={props.shareId}\n showTitlePadlock={!props.commonVideoProps.hasStudentExperience}\n />\n\n {/* if no glance render video details here */}\n {hasGlance ? (\n <VideoAtAGlanceV2\n video={props.clip}\n pointsOfInterest={props.pointsOfInterest}\n setStartTime={(time: number) => playerContext.playerRef.current?.currentTime(time)}\n getTagAppLink={tag => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: { tagOrClassification: tag.name }\n })}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n canViewGlance={hasGlance}\n />\n ) : (\n <VideoDetailsWithScrollbarV2\n video={props.clip}\n currentUser={props.currentUser}\n onLaunchImmersiveReader={onLaunchImmersiveReader}\n onExitImmersiveReader={onExitImmersiveReader}\n getTagAppLink={tag => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: { tagOrClassification: tag.name }\n })}\n headingRef={headingRef}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n />\n )}\n\n <PlayPageResources\n video={props.clip}\n canViewResources={props.featureAccess.canViewResourceItems}\n imageCdnUrl={props.commonVideoProps.imageCdnUrl}\n getAppLink={\n getResourceAppLink(props.clip.id, props.shareId, props.featureAccess.canViewResourceItems)\n }\n analyticsData={{ clipId: props.clip.id, clipName: props.clip.name }}\n resourceThumbnailFallbackUrl={ImageUrls.Fallbacks.RESOURCE_THUMBNAIL}\n headingRef={headingRef}\n />\n\n <PlayPageInteractives\n video={props.clip}\n interactives={props.interactives}\n analyticsData={{ clipId: props.clip.id, clipName: props.clip.name }}\n canViewInteractives={props.featureAccess.canViewInteractives}\n headingRef={headingRef}\n commonVideoProps={props.commonVideoProps}\n />\n\n <PlayPageClips\n clips={otherClips || []}\n video={props.clip}\n canViewClips={props.featureAccess.canViewClips}\n audiences={props.audiences}\n headingRef={headingRef}\n analyticsData={{ clipId: props.clip.id, clipName: props.clip.name }}\n commonVideoProps={props.commonVideoProps}\n />\n\n {/* if has glance, render video details here */}\n {hasGlance && (\n <VideoDetailsWithScrollbarV2\n video={props.clip}\n currentUser={props.currentUser}\n onLaunchImmersiveReader={onLaunchImmersiveReader}\n onExitImmersiveReader={onExitImmersiveReader}\n getTagAppLink={tag => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: { tagOrClassification: tag.name }\n })}\n headingRef={headingRef}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n showHeading\n />\n )}\n \n {!!canAccessOriginal() && (\n <ClippedFrom\n originalVideo={props.originalVideo}\n shareId={props.shareId}\n queryParams={props.queryParams}\n audiences={props.audiences}\n headingRef={headingRef}\n currentUser={props.currentUser}\n commonVideoProps={props.commonVideoProps}\n />\n )}\n\n <RelatedVideos\n currentVideo={props.clip}\n relatedVideos={props.relatedVideos}\n currentUser={props.currentUser}\n audiences={props.audiences}\n getVideoAppLink={(v, opts) => VideoAppLinkHelper.getAppLink(v, {\n ...opts,\n context: props.queryParams.context,\n contextId: props.queryParams.contextId,\n playNext: props.queryParams.playNext,\n shareId: props.shareId,\n moviesAndTv: props.queryParams.mtv,\n includeContext: props.currentUser?.isAuthenticated\n })}\n moviesAndTv={props.queryParams.mtv}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n {theatreMode && (\n <TableOfContentsContainer\n isExpanded={tableOfContentsExpanded}\n setIsExpanded={onToggleTableOfContents}\n toggleTheatreMode={ null}\n items={items}\n activeId={tableOfContentsActiveId}\n setControlledId={setControlledId}\n analyticsData={{ videoId: props.clip.id, videoName: props.clip.name }}\n showInSide={props.shouldShowSideTableOfContents}\n isTheatreMode={true}\n hasTranscription={props.hasTheatreMode}\n />\n )}\n </div>\n </main>\n\n {!theatreMode && (\n <TableOfContentsContainer\n isExpanded={tableOfContentsExpanded}\n setIsExpanded={onToggleTableOfContents}\n toggleTheatreMode={props.hasTheatreMode ? toggleTheatreMode : null}\n items={items}\n activeId={tableOfContentsActiveId}\n setControlledId={setControlledId}\n analyticsData={{ videoId: props.clip.id, videoName: props.clip.name }}\n showInSide={props.shouldShowSideTableOfContents}\n isTheatreMode={false}\n hasTranscription={props.hasTheatreMode}\n />\n )}\n </div>\n );\n}\n"],"names":["CHUNK_SIZE","useBatchFetch","itemIds","getRequest","requests","map","chunk","responses","itemsArr","data","items","length","reduce","acc","item","id","isFetching","useGrowingBatchFetch","objs","_getKey","getKey","obj","fetchedItems","Set","setRequests","unfetchedItems","forEach","key","current","has","push","add","r","hasFirstRequestCompleted","hasCompleted","useBreadcrumbs","match","breadcrumbs","useBuilder","active","useCommonVideoProps","options","locationContext","mtv","flightNamespace","sharedPlaylist","isPlugin","u","setFavourite","canFavourite","hasTopicDirectories","isLoadingSettings","hasPermissions","hasLoadedPermissions","isLoaded","hasStudentExperience","config","currentUser","yearGroups","isAuthenticated","customerId","hasCommonVideoPropsCompleted","commonVideoProps","subTextType","getSubTextAppLink","video","series","imageCdnUrl","getClassroomGuideAppLink","getInteractiveGuidanceAppLink","getResourceGuidanceAppLink","showNewVideoIndicator","companyLogoFallbackUrl","usePresentationAudiences","redirectOnError","activePresentation","getFallbackPresentation","presentation","useVideoFeatureAccess","hasLocalPermissions","hasNP","hasProduct","canViewGlance","canViewResources","canViewInteractives","canViewClips","canViewCurriculumLinks","canUseActions","canViewPublicLayout","canViewResourceItems","canNavigate","useVideoMixin","objects","videoIds","Array","isArray","filter","o","getValidObjects","v","ids","namespace","ClippedFrom","props","usePermissions","videoActions","useVideoActions","location","className","PlayPageAnchor","ref","el","headingRef","set","Text","phrase","VideoActionsContext","value","VideoList","videos","originalVideo","getVideoAppLink","opts","VideoAppLinkHelper","context","queryParams","contextId","playNext","shareId","moviesAndTv","includeContext","presentationAudiences","audiences","getPreviewQuestionsAppLink","interactive","InteractiveHelper","getResourceAppLink","videoId","canViewResource","resource","application","action","args","params","PlayClip","playerContext","canConsume","VideoHelper","clip","theatreMode","hasTheatreMode","mode","shouldUseTheareModeStyle","useTheatreStyle","usePlayPageTableOfContent","tableOfContentsId","tableOfContentsActiveId","setTableOfContentsActiveId","controlledId","setControlledId","tableOfContentsExpanded","onToggleTableOfContents","hasGlance","featureAccess","useSectionHeadings","headingElements","ele","name","PlayPageUtil","clips","interactives","resources","isPlayClipPage","useTableOfContentsActiveHeading","setActiveId","useTableOfContentsScroll","isArchived","PermissionName","shouldPlayOnExitImmersiveReader","onLaunchImmersiveReader","playerRef","isPaused","pause","onExitImmersiveReader","play","canAccessOriginal","_canBeConsumed","ProductId","showPlayerPlaceholder","otherClips","c","toString","calcClassNameProps","shouldShowSideTableOfContents","mainClassName","contentClassName","setContainerClassName","Breadcrumbs","RestrictionBanner","restrictions","_restrictions","objectId","objectTypeId","MasterType","canManageVideoAccess","ArchivedBanner","typeId","SeoConstants","GlobalPlayerConsumer","startTime","t","PlayerPlaceholder","type","PlayPageTitleAndActions","media","originalVideoAppLink","TextHelper","showTitlePadlock","VideoAtAGlanceV2","pointsOfInterest","setStartTime","time","currentTime","getTagAppLink","tag","tagOrClassification","suppressInteractivity","PlayPageResources","getAppLink","analyticsData","clipId","clipName","resourceThumbnailFallbackUrl","ImageUrls","PlayPageInteractives","PlayPageClips","showHeading","RelatedVideos","currentVideo","relatedVideos","TableOfContents","isExpanded","setIsExpanded","toggleTheatreMode","activeId","videoName","showInSide","isTheatreMode","hasTranscription"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"scripts/3677-f48c335f7a-lite.chunk.js","mappings":"qgDAOA,IAAMA,EAAa,GAiBb,SAAUC,EACdC,EACAC,GAEA,IAEMC,EAFS,UAA0BF,EAASF,GAE1BK,KAAI,SAAAC,GAAK,OAAIH,EAAW,SAAiBG,GAAO,IAElEC,EAAY,qBAA6BH,GAEzCI,EAAW,YAAoBD,EAAUE,MACzCC,EAAQH,EAAUE,KAAKE,OACzBH,EAASI,QAAO,SAACC,EAAKC,GAAI,OAAK,+BAAMD,GAAG,KAAGC,EAAKC,GAAKD,GAAI,GAAK,CAAC,GAC/D,KAEJ,MAAO,CACLN,SAAAA,EACAE,MAAAA,EACAM,WAAYT,EAAUS,WAE1B,CAQM,SAAUC,EACdC,EACAf,EACAgB,G,YAEMC,EAASD,GAAY,SAACE,GAC1B,MAAmB,WAAf,EAAOA,GACFA,EAAIN,GAENM,CACT,EAEMC,EAAe,SAA0B,IAAIC,KAEmB,G,EAApC,WAAiC,I,EAAG,E,unBAA9DnB,EAAQ,KAAEoB,EAAW,KAE7B,aAAgB,WACd,GAAKN,aAAI,EAAJA,EAAMP,OAAX,CAGA,IAAMc,EAAsB,GAE5BP,EAAKQ,SAAQ,SAAAL,GACX,IAAMM,EAAMP,EAAOC,GAEfC,EAAaM,QAAQC,IAAIF,KAG7BF,EAAeK,KAAKT,GACpBC,EAAaM,QAAQG,IAAIJ,GAC3B,IAEKF,EAAed,QAGpBa,GAAY,SAAAQ,GAAC,kBAAUA,GAAC,EAAK,UAAqBP,EAAgBzB,GAAYK,IAAIF,IAAW,GAjBrF,CAkBV,GAAG,CAACe,aAAI,EAAJA,EAAMP,SAEV,IAAMJ,EAAY,qBAA6BH,GAEzCI,EAAW,YAAoBD,EAAUE,MACzCC,EAAQH,EAAUE,KAAKE,OACzBH,EAASI,QAAO,SAACC,EAAKC,GAAI,OAAK,+BAAMD,GAAG,KAAGO,EAAON,GAAQA,GAAI,GAAK,CAAC,GACpE,KAEJ,MAAO,CACLmB,4BAAoD,QAAxB,EAAmB,QAAnB,EAAA1B,EAAUA,iBAAS,eAAG,UAAE,eAAE2B,cACtD1B,SAAAA,EACAE,MAAAA,EACAM,WAAYT,EAAUS,WAE1B,C,mbClGM,SAAUmB,EAAeP,GAC7B,I,IAAqF,G,EAAvD,WAAc,kBAAM,gBAA8B,GAAE,I,EAAG,E,unBAA7EQ,EAAK,KAEPC,GAAcC,EAFK,MAEMF,GAE/B,OAAKC,GAAgBT,EAGd,GAAP,O,yWAAA,CAAYS,GAAW,gCAAOT,GAAO,CAAEW,QAAQ,MAFtCF,CAGX,C,+JCmBM,SAAUG,EAAoBC,G,UAClC,EAAkEA,GAAW,CAAC,EAAtEC,EAAe,EAAfA,gBAAiBC,EAAG,EAAHA,IAAKC,EAAe,EAAfA,gBAAiBC,EAAc,EAAdA,eAEvCC,GAAa,SAAbA,SACR,GAAuC,IAAAC,GAAkBL,EAAiBE,GAAlEI,EAAY,EAAZA,aAAcC,EAAY,EAAZA,aACtB,GAAmD,OAAY,MAAvDC,EAAmB,EAAnBA,oBAAqBC,EAAiB,EAAjBA,kBAC7B,GAA2D,SAAnDC,EAAc,EAAdA,eAA0BC,EAAoB,EAA9BC,SAClBC,EAAuBH,EAAe,uBAEtCI,EAAS,kBAA6B,cACtCC,EAAc,kBAAkC,mBAChDC,EAAa,mBACD,QAAhB,EAAAD,EAAYhD,YAAI,eAAEkD,kBAAmB,eAA4BF,EAAYhD,KAAKmD,aA4BpF,MAAO,CACLC,8BARCV,GACDE,GACAG,EAAOtB,cACPuB,EAAYvB,iBACM,QAAhB,EAAAuB,EAAYhD,YAAI,eAAEkD,kBAAmBD,EAAWxB,cAKlD4B,iBAAkB,CAChBC,YAAa,SACbC,kBA7BJ,SAA2BC,G,MACzB,MAAM,WAAYA,EAUdpB,KAAmC,QAAhB,EAAAY,EAAYhD,YAAI,eAAEkD,iBAChC,KAEF,qBAAqCM,EAAMC,OAAQ,CAAEvB,IAAAA,IAZnD,IAaX,EAeIG,SAAAA,EACAG,aAAAA,EACAD,aAAAA,EACAmB,YAAwB,QAAX,EAAAX,EAAO/C,YAAI,eAAE0D,YAC1BT,WAAYA,EAAWjD,KACvB2D,yBAA0B,6BAC1BC,8BAA+B,kCAC/BC,2BAA4B,+BAC5BC,sBAAuBrB,EACvBsB,uBAAwB,KACxBjB,qBAAAA,GAGN,C,wECpFakB,EAA2B,WACtC,OAAwD,OAAgB,CAAEC,iBAAiB,IAAnFC,EAAkB,EAAlBA,mBAAoBC,EAAuB,EAAvBA,wBAEtBC,EAAeF,GAAsBC,IAO3C,OALkB,oBACdC,GACF,0BAAuCA,EAAa9D,IAIxD,C,8FCCM,SAAU+D,IACd,OAAgD,SAAxC1B,EAAc,EAAdA,eAAgB2B,EAAmB,EAAnBA,oBAGlBC,GAAQC,GAFS,SAAfA,YAEiB,aAiBzB,MAAO,CACLC,cAAe9B,EAAe,qBAC9B+B,kBAAkB,EAClBC,oBAAqBJ,GAAS5B,EAAe,2BAC7CiC,aAAcL,GAAS5B,EAAe,oBACtCkC,uBAAwBlC,EAAe,qBACvCmC,cAAeR,EAAoB,qBACnCS,qBAlBIT,EAAoB,kBAQjB,sBAWPU,qBAAsBV,EAAoB,4BAC1CW,YAAaV,EAEjB,C,uECvBM,SAAUW,EAAcC,GAA+C,IAA/BnD,EAAA,uDAA6B,CAAC,EACpEoD,EAtBR,SAAyBD,GACvB,OAAKA,EAGDE,MAAMC,QAAQH,GACTA,EAAQI,QAAO,SAAAC,GAAC,QAAMA,IAAM,YAAoBA,IAAM,WAAmBA,GAAG,IAEjF,SAAUL,EACLA,EAAQnF,KAAKuF,QAAO,SAAAC,GAAC,QAAMA,IAAM,YAAoBA,IAAM,WAAmBA,GAAG,IAEnF,GARE,EASX,CAWmBC,CAAgBN,GAASvF,KAAI,SAAA8F,GAAC,OAAIA,EAAEpF,EAAE,KAEvD,OAAqB8E,GAAU,SAAAO,GAAG,OAAI,qBAA+BA,EAAK3D,EAAQG,gBAAgB,GACpG,C,ifCjBMyD,EAAY,kBAYZ,SAAUC,EAAYC,GAC1B,IAAQnD,GAAmB,EAAAoD,EAAA,KAAnBpD,eACFqD,GAAe,EAAAC,EAAA,GAAgB,CAAEC,SAAU,gBAEjD,OACE,2BACEC,UAAU,oBACV7F,GAAI8F,EAAA,cACJC,IAAK,SAAAC,G,MACFA,IAAsB,QAAhB,EAAAR,EAAMS,kBAAU,eAAEpF,UAAY2E,EAAMS,WAAWpF,QAAQqF,IAAIJ,EAAA,cAA4BE,EAChG,GAEA,sBAAIH,UAAU,WAAU,gBAACM,EAAA,EAAI,CAACb,UAAWA,EAAWc,OAAO,iBAC3D,gBAACC,EAAA,WAA4B,CAACC,MAAOZ,GACnC,gBAACa,EAAA,GAAS,CACRC,OAAQ,CAAChB,EAAMiB,eACfC,gBAAiB,SAACtB,EAAGuB,G,MAAS,OAAAC,EAAA,aAA8BxB,EAAG,OAAF,wBACxDuB,GAAI,CACPE,QAASrB,EAAMsB,YAAYD,QAC3BE,UAAWvB,EAAMsB,YAAYC,UAC7BC,SAAUxB,EAAMsB,YAAYE,SAC5BC,QAASzB,EAAMyB,QACfC,YAAa1B,EAAMsB,YAAYlF,IAC/BuF,eAAiC,QAAjB,EAAA3B,EAAM9C,mBAAW,eAAEE,kB,EAErCP,eAAgBA,EAChB+E,sBAAuB5B,EAAM6B,UAC7BC,2BAA4B,SAAAC,GAAW,OAAIC,EAAA,6BAA8CD,EAAY,EACrGxE,iBAAkByC,EAAMzC,oBAKlC,CC3DA,SAAgB,KAAO,QAAQ,YAAc,QAAQ,YAAc,QAAQ,mBAAqB,QAAQ,6BAA+B,QAAQ,uBAAyB,S,sGCkDxK,IAAM0E,EAAqB,SAACC,EAAiBT,EAAiBU,GAAwB,OACpF,SAACC,GACC,OAAKD,EAOE,CACLE,YAAa,WACbC,OAAQ,uBACRC,KAAM,CAACH,EAAS5H,IAChBgI,OAAQ,CACNN,QAASA,EACTT,QAASA,IAZJ,CACLY,YAAa,YACbC,OAAQ,mBAad,CAAC,EAyBG,SAAUG,EAASzC,G,wBACjB0C,GAAgB,SAEd7F,GAAmB,EAAAoD,EAAA,KAAnBpD,eACA8F,GAAeC,EAAA,mBAA6B5C,EAAM6C,MAAlDF,WAEFG,GAAc9C,EAAM+C,gBAAyC,YAAvBL,EAAcM,KACpDC,IAA2B,EAAAC,EAAA,GAAgBlD,EAAM+C,eAAgBD,IAMvE,IAOI,EAAAK,EAAA,GAA0BnD,EAAMoD,kBAAmBpD,EAAM+C,eAAgBD,IAN3EO,GAAuB,GAAvBA,wBACAC,GAA0B,GAA1BA,2BACAC,GAAY,GAAZA,aACAC,GAAe,GAAfA,gBACAC,GAAuB,GAAvBA,wBACAC,GAAuB,GAAvBA,wBAGIC,IAAY,QAAc3D,EAAM6C,OAAS7C,EAAM4D,cAAcjF,cAEnE,IAAwC,EAAAkF,EAAA,GAAmBF,IAAnDlD,GAAU,GAAVA,WAAYqD,GAAe,GAAfA,gBACd3J,GAAQ2J,GAAgBhK,KAAI,SAAAiK,G,MAChC,MAAO,CACLvJ,GAAIuJ,EAAIvJ,GACRwJ,KAAMC,EAAA,oBACJF,EAAIvJ,GACJ,CACE0J,MAAOlE,EAAMkE,MACbC,aAAcnE,EAAMmE,aACpBC,UAA+B,QAApB,EAAApE,EAAM6C,KAAKuB,iBAAS,eAAElK,KACjCmK,gBAAgB,IAIxB,KAEA,EAAAC,EAAA,GAAgC,CAC9BC,YAAajB,GACbQ,gBAAAA,GACAP,aAAAA,GACAC,gBAAAA,MAGF,EAAAgB,EAAA,GAAyBV,GAAiBP,IAE1C,IAAMkB,GAAa7B,EAAA,sBAAgC5C,EAAM6C,MACnD7F,GAAuBH,EAAe6H,EAAA,qBAMtCC,GAAkC,UAAa,GAErD,SAASC,K,YACPD,GAAgCtJ,UAA4C,QAAjC,EAAwB,QAAxB,EAAAqH,aAAa,EAAbA,EAAemC,iBAAS,eAAExJ,eAAO,eAAEyJ,YAC7C,QAAjC,EAAwB,QAAxB,EAAApC,aAAa,EAAbA,EAAemC,iBAAS,eAAExJ,eAAO,SAAE0J,OACrC,CAEA,SAASC,K,QACFL,GAAgCtJ,UAGJ,QAAjC,EAAwB,QAAxB,EAAAqH,aAAa,EAAbA,EAAemC,iBAAS,eAAExJ,eAAO,SAAE4J,OACrC,CAEA,SAASC,K,QACP,SAAKlF,EAAMiB,iBAA2C,QAAzB,EAAAjB,EAAM6C,KAAKsC,sBAAc,eAAErE,UAGlC,QAAjB,EAAAd,EAAM9C,mBAAW,eAAEE,mBAGnB4C,EAAMtB,WAAW0G,EAAA,YAGlBpI,GAIN,CAaA,I,MAAMqI,GAA+C,uBAAvB3C,EAAcM,MAAiChD,EAAM4D,cAAc3E,oBAE3FqG,GAAmF,QAAtE,EAAW,QAAX,EAAAtF,EAAMkE,aAAK,eAAEzE,QAAO,SAAA8F,GAAC,OAAIA,EAAE/K,GAAGgL,aAAexF,EAAM6C,KAAKrI,GAAGgL,UAAU,WAAC,QAAI,GAEvFC,GAAqB,CACzB1C,eAAgB/C,EAAM+C,eACtB2C,8BAA+B1F,EAAM0F,8BACrCjC,wBAAAA,GACAX,YAAAA,IAEI6C,IAAgB,OAAiBF,IACjCG,IAAmB,OAAoBH,IAEnCI,I,IAA0B,OAAa,oC,GAA6C,E,y4BAA/D,GAc/B,OAZA,aAAgB,WAIZA,GAHG/C,GAGmB,+BAFA,GAI1B,GAAG,CAACA,KAEJ,aAAgB,WACd,OAAO,kBAAM+C,GAAsB,GAAG,CACxC,GAAG,IAGD,uBAAKxF,UAAS,4CAAuCL,EAAM0F,8BAAgC,UAAY,KACrG,wBAAMrF,UAAS,UAAK,OAAW,YAAIsF,QACb,QAAjB,EAAA3F,EAAMlE,mBAAW,eAAE1B,SACpB,uBAAKiG,UAAU,QACb,gBAACyF,EAAA,GAAW,CAAChK,YAAakE,EAAMlE,eAIpC,gBAACiK,EAAA,EAAiB,CAChBC,aAAchG,EAAM6C,KAAKoD,cACzB9I,WAAY6C,EAAMzC,iBAAiBJ,WACnC+I,SAAUlG,EAAM6C,KAAKrI,GACrB2L,aAAcC,EAAA,OACdC,qBAAsBrG,EAAMqG,uBAG7B5B,IACC,gBAAC6B,EAAA,EAAc,CACbC,OAAQvG,EAAM6C,KAAK0D,OACnBvJ,qBAAsBA,KAI1B,2BACExC,GAAI8F,EAAA,QACJD,UAAS,eAAUmG,EAAA,0BACnBjG,IAAK,SAAAC,GAASA,IAAMC,cAAU,EAAVA,GAAYpF,UAAYoF,GAAWpF,QAAQqF,IAAIJ,EAAA,QAAsBE,EAAK,GAE7FmC,IACC,gBAAC8D,EAAA,EAAoB,CACnBrL,IAAK4E,EAAM6C,KAAKrI,GAChB0L,SAAUlG,EAAM6C,KAAKrI,GACrB2L,aAAcnG,EAAM6C,KAAK0D,OACzB9E,QAASzB,EAAMyB,QACfJ,QAA0B,QAAjB,EAAArB,EAAMsB,mBAAW,eAAED,QAC5BE,UAA4B,QAAjB,EAAAvB,EAAMsB,mBAAW,eAAEC,UAC9BG,YAA8B,QAAjB,EAAA1B,EAAMsB,mBAAW,eAAElF,IAChCoF,SAA2B,QAAjB,EAAAxB,EAAMsB,mBAAW,eAAEE,SAC7BkF,UAA+B,QAApB,EAAiB,QAAjB,EAAA1G,EAAMsB,mBAAW,eAAEqF,SAAC,QAAqB,QAAjB,EAAA3G,EAAMsB,mBAAW,eAAEoF,UACtD1D,KAAMN,EAAcM,MAAQ,UAC5B5C,SAAS,cAIb,uBAAKC,UAAWgF,GAAwB,GAAK,UAC3C,gBAACuB,EAAA,EAAiB,CAChBlJ,MAAOsC,EAAM6C,KACbgE,KAAK,UAKX,uBAAKxG,UAAWuF,IACd,uBAAKvF,UAAW4C,GAA2B,GAAH,OAAM,0BAAkC,SAC9E,gBAAC6D,EAAA,EAAuB,CACtBC,MAAO/G,EAAM6C,KACb1F,WAAY6C,EAAMzC,iBAAiBJ,WACnC0E,UAAW7B,EAAM6B,UACjBmF,qBAhGL9B,KAGE,CACL7C,YAAa,WACbC,OAAQ,sBACRC,KAAM,CAAEvC,EAAMiB,cAAczG,GAAIyM,EAAA,UAAmBjH,EAAMiB,cAAc+C,QALhE,KAgGCJ,cAAe5D,EAAM4D,cACrBnC,QAASzB,EAAMyB,QACfyF,kBAAmBlH,EAAMzC,iBAAiBP,uBAI3C2G,GACC,gBAACwD,EAAA,EAAgB,CACfzJ,MAAOsC,EAAM6C,KACbuE,iBAAkBpH,EAAMoH,iBACxBC,aAAc,SAACC,GAAgB,MAAC,OAA+B,QAA/B,EAAA5E,EAAcmC,UAAUxJ,eAAO,eAAEkM,YAAYD,EAAK,EAClFE,cAAe,SAAAC,GAAG,MAAK,CACrBpF,YAAa,WACbC,OAAQ,gBACRE,OAAQ,CAAEkF,oBAAqBD,EAAIzD,MACpC,EACD2D,sBAAuB3H,EAAM4D,cAAc3E,oBAC3CN,cAAegF,KAGjB,gBAAC,IAA2B,CAC1BjG,MAAOsC,EAAM6C,KACb3F,YAAa8C,EAAM9C,YACnB0H,wBAAyBA,GACzBI,sBAAuBA,GACvBwC,cAAe,SAAAC,GAAG,MAAK,CACrBpF,YAAa,WACbC,OAAQ,gBACRE,OAAQ,CAAEkF,oBAAqBD,EAAIzD,MACpC,EACDvD,WAAYA,GACZkH,sBAAuB3H,EAAM4D,cAAc3E,sBAI/C,gBAAC2I,EAAA,EAAiB,CAChBlK,MAAOsC,EAAM6C,KACbjE,iBAAkBoB,EAAM4D,cAAc1E,qBACtCtB,YAAaoC,EAAMzC,iBAAiBK,YACpCiK,WACE5F,EAAmBjC,EAAM6C,KAAKrI,GAAIwF,EAAMyB,QAASzB,EAAM4D,cAAc1E,sBAEvE4I,cAAe,CAAEC,OAAQ/H,EAAM6C,KAAKrI,GAAIwN,SAAUhI,EAAM6C,KAAKmB,MAC7DiE,6BAA8BC,EAAA,+BAC9BzH,WAAYA,KAGd,gBAAC0H,EAAA,EAAoB,CACnBzK,MAAOsC,EAAM6C,KACbsB,aAAcnE,EAAMmE,aACpB2D,cAAe,CAAEC,OAAQ/H,EAAM6C,KAAKrI,GAAIwN,SAAUhI,EAAM6C,KAAKmB,MAC7DnF,oBAAqBmB,EAAM4D,cAAc/E,oBACzC4B,WAAYA,GACZlD,iBAAkByC,EAAMzC,mBAG1B,gBAAC6K,EAAA,EAAa,CACZlE,MAAOoB,IAAc,GACrB5H,MAAOsC,EAAM6C,KACb/D,aAAckB,EAAM4D,cAAc9E,aAClC+C,UAAW7B,EAAM6B,UACjBpB,WAAYA,GACZqH,cAAe,CAAEC,OAAQ/H,EAAM6C,KAAKrI,GAAIwN,SAAUhI,EAAM6C,KAAKmB,MAC7DzG,iBAAkByC,EAAMzC,mBAIzBoG,IACC,gBAAC,IAA2B,CAC1BjG,MAAOsC,EAAM6C,KACb3F,YAAa8C,EAAM9C,YACnB0H,wBAAyBA,GACzBI,sBAAuBA,GACvBwC,cAAe,SAAAC,GAAG,MAAK,CACrBpF,YAAa,WACbC,OAAQ,gBACRE,OAAQ,CAAEkF,oBAAqBD,EAAIzD,MACpC,EACDvD,WAAYA,GACZkH,sBAAuB3H,EAAM4D,cAAc3E,oBAC3CoJ,aAAW,MAIZnD,MACD,gBAACnF,EAAW,CACVkB,cAAejB,EAAMiB,cACrBQ,QAASzB,EAAMyB,QACfH,YAAatB,EAAMsB,YACnBO,UAAW7B,EAAM6B,UACjBpB,WAAYA,GACZvD,YAAa8C,EAAM9C,YACnBK,iBAAkByC,EAAMzC,mBAI5B,gBAAC+K,EAAA,EAAa,CACZC,aAAcvI,EAAM6C,KACpB2F,cAAexI,EAAMwI,cACrBtL,YAAa8C,EAAM9C,YACnB2E,UAAW7B,EAAM6B,UACjBX,gBAAiB,SAACtB,EAAGuB,G,MAAS,OAAAC,EAAA,aAA8BxB,EAAG,OAAF,wBACxDuB,GAAI,CACPE,QAASrB,EAAMsB,YAAYD,QAC3BE,UAAWvB,EAAMsB,YAAYC,UAC7BC,SAAUxB,EAAMsB,YAAYE,SAC5BC,QAASzB,EAAMyB,QACfC,YAAa1B,EAAMsB,YAAYlF,IAC/BuF,eAAiC,QAAjB,EAAA3B,EAAM9C,mBAAW,eAAEE,kB,EAErCsE,YAAa1B,EAAMsB,YAAYlF,IAC/BmB,iBAAkByC,EAAMzC,oBAG3BuF,IACC,gBAAC2F,EAAA,EAAwB,CACvBC,WAAYjF,GACZkF,cAAejF,GACfkF,kBAAoB,KACpBzO,MAAOA,GACP0O,SAAUxF,GACVG,gBAAiBA,GACjBsE,cAAe,CAAE5F,QAASlC,EAAM6C,KAAKrI,GAAIsO,UAAW9I,EAAM6C,KAAKmB,MAC/D+E,WAAY/I,EAAM0F,8BAClBsD,eAAe,EACfC,iBAAkBjJ,EAAM+C,oBAM9BD,IACA,gBAAC2F,EAAA,EAAwB,CACvBC,WAAYjF,GACZkF,cAAejF,GACfkF,kBAAmB5I,EAAM+C,eAtTjC,SAA2BjC,G,UAC0B,QAAnD,EAAgC,QAAhC,EAAuB,QAAvB,EAAA4B,EAAcmC,iBAAS,eAAExJ,eAAO,eAAEuN,yBAAiB,gBAAG9H,EACxD,EAoTsE,KAC9D3G,MAAOA,GACP0O,SAAUxF,GACVG,gBAAiBA,GACjBsE,cAAe,CAAE5F,QAASlC,EAAM6C,KAAKrI,GAAIsO,UAAW9I,EAAM6C,KAAKmB,MAC/D+E,WAAY/I,EAAM0F,8BAClBsD,eAAe,EACfC,iBAAkBjJ,EAAM+C,iBAKlC,C","sources":["file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/libs/shared/src/hooks/useBreadcrumbs.ts","file:///app/packages/projects/lite/src/shared/hooks/useCommonVideoProps.ts","file:///app/packages/projects/lite/src/shared/hooks/usePresentationAudiences.ts","file:///app/packages/projects/lite/src/shared/hooks/useVideoFeatureAccess.ts","file:///app/packages/projects/lite/src/shared/hooks/useVideoMixin.ts","file:///app/packages/projects/lite/src/shared/views/play-clip/components/clipped-from/ClippedFrom.tsx","file:///app/packages/projects/lite/src/shared/views/play-clip/components/play-clip/play-clip.scss","file:///app/packages/projects/lite/src/shared/views/play-clip/components/play-clip/PlayClip.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst CHUNK_SIZE = 50;\n\nexport interface UseBatchFetchResult<T extends BaseObject> {\n itemsArr: T[];\n items: { [key: string]: T} | null;\n isFetching: boolean;\n}\n\n/**\n * Used to fetch multiple items by id with Flight. Will fetch 25 items at a time firing off multiple\n * requests if there are more than 25 items.\n * This will return items as null until we have all our items. Items will be returned as an object with\n * their ids as they key for easy mapping\n * \n * @param itemIds \n * @param getRequest \n */\nexport function useBatchFetch<T extends BaseObject>(\n itemIds: string[],\n getRequest: (ids: string[]) => Flight.Request\n): UseBatchFetchResult<T> {\n const chunks = ArrayHelper.chunk<string>(itemIds, CHUNK_SIZE);\n\n const requests = chunks.map(chunk => getRequest(ArrayHelper.uniq(chunk)));\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\n\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce((acc, item) => ({ ...acc, [item.id]: item }), {})\n : null;\n\n return {\n itemsArr,\n items,\n isFetching: responses.isFetching\n };\n}\n\n/**\n * When you need the useBatchFetch() behavior, but your list of objects to hydrate\n * will grow, such as on a scrolling page. useGrowingBatchFetch() will use local state\n * to determine what we've already built a request for and what items are new\n * as to not re-fetch items - Sha\n */\nexport function useGrowingBatchFetch<T>(\n objs: T[],\n getRequest: (items: T[]) => Flight.Request,\n _getKey?: (obj: T) => string\n) {\n const getKey = _getKey || ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const fetchedItems = React.useRef<Set<string>>(new Set<string>());\n\n const [ requests, setRequests ] = React.useState<Flight.Request[]>([]);\n\n React.useEffect(() => {\n if (!objs?.length)\n return;\n\n const unfetchedItems: T[] = [];\n \n objs.forEach(obj => {\n const key = getKey(obj);\n\n if (fetchedItems.current.has(key))\n return;\n\n unfetchedItems.push(obj);\n fetchedItems.current.add(key);\n });\n \n if (!unfetchedItems.length)\n return;\n\n setRequests(r => ([ ...r, ...ArrayHelper.chunk<T>(unfetchedItems, CHUNK_SIZE).map(getRequest) ]));\n }, [objs?.length]);\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\n\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce((acc, item) => ({ ...acc, [getKey(item)]: item }), {})\n : null;\n\n return {\n hasFirstRequestCompleted: !!responses.responses?.[0]?.hasCompleted,\n itemsArr,\n items,\n isFetching: responses.isFetching\n };\n}","import React from 'react';\n\nimport { Breadcrumb } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { BreadcrumbService } from 'libs/shared/services/BreadcrumbService';\n\nexport function useBreadcrumbs(current: Breadcrumb): Breadcrumb[] {\n const [ match, useBuilder ] = React.useMemo(() => BreadcrumbService.getBuilder(), []);\n\n const breadcrumbs = useBuilder(match);\n\n if (!breadcrumbs || !current)\n return breadcrumbs;\n\n return [ ...breadcrumbs, { ...current, active: true }];\n}\n\n","import { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config, CurrentUser, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nimport { usePluginHelper } from './use-plugin-helper/usePluginHelper';\nimport { useLiteFavourites } from './useLiteFavourites';\n\ninterface UseCommonVideoPropsResult {\n hasCommonVideoPropsCompleted: boolean;\n commonVideoProps: CommonVideoProps;\n}\n\ninterface UseCommonVideoPropsOptions {\n locationContext: LocationContext,\n mtv?: boolean;\n flightNamespace?: string;\n sharedPlaylist?: boolean;\n}\n\nexport function useCommonVideoProps(options: UseCommonVideoPropsOptions): UseCommonVideoPropsResult {\n const { locationContext, mtv, flightNamespace, sharedPlaylist } = options || {};\n\n const { isPlugin } = usePluginHelper();\n const { setFavourite, canFavourite } = useLiteFavourites(locationContext, flightNamespace);\n const { hasTopicDirectories, isLoadingSettings } = useSettings(null);\n const { hasPermissions, isLoaded: hasLoadedPermissions } = usePermissions();\n const hasStudentExperience = hasPermissions(PermissionName.StudentExperience);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n function getSubTextAppLink(video: VideoTypes): Core.AppLink {\n if (!('series' in video))\n return null;\n\n /**\n * We do not allow navigating to series on shared playlists when the user is not signed in\n * because most series are customer created and will be empty for public users\n * \n * We do not have to do this for shared series, because all the series links are self referencing\n * - Sha\n */\n if (sharedPlaylist && !currentUser.data?.isAuthenticated)\n return null;\n \n return SeriesAppLinkHelper.getSeriesAppLink(video.series, { mtv });\n }\n\n const hasCommonVideoPropsCompleted = (\n !isLoadingSettings &&\n hasLoadedPermissions &&\n config.hasCompleted &&\n currentUser.hasCompleted &&\n (!currentUser.data?.isAuthenticated || yearGroups.hasCompleted)\n );\n\n return {\n hasCommonVideoPropsCompleted,\n commonVideoProps: {\n subTextType: 'series',\n getSubTextAppLink,\n isPlugin,\n canFavourite,\n setFavourite,\n imageCdnUrl: config.data?.imageCdnUrl,\n yearGroups: yearGroups.data,\n getClassroomGuideAppLink: VideoAppLinkHelper.getClassroomGuideAppLink,\n getInteractiveGuidanceAppLink: VideoAppLinkHelper.getInteractiveGuidanceAppLink,\n getResourceGuidanceAppLink: VideoAppLinkHelper.getResourceGuidanceAppLink,\n showNewVideoIndicator: hasTopicDirectories,\n companyLogoFallbackUrl: null,\n hasStudentExperience\n }\n };\n}","import { Flight } from 'libs/common/react/index';\n\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\nimport { usePresentation } from 'shared/hooks/usePresentation';\n\nexport const usePresentationAudiences = () => {\n const { activePresentation, getFallbackPresentation } = usePresentation({ redirectOnError: true });\n\n const presentation = activePresentation || getFallbackPresentation();\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n !!presentation &&\n AudienceRequests.presentationAudiences(presentation.id)\n );\n\n return audiences;\n};","import { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\n\nimport { LiteRouteHelper } from 'shared/utils/LiteRouteHelper';\n\nexport interface VideoFeaturesHash {\n canViewGlance: boolean;\n canViewResources: boolean;\n canViewInteractives: boolean;\n canViewClips: boolean;\n canUseActions: boolean;\n canViewPublicLayout: boolean;\n canNavigate: boolean;\n canViewCurriculumLinks: boolean;\n canViewResourceItems: boolean;\n}\n\nexport function useVideoFeatureAccess() {\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n const { hasProduct } = useProducts();\n\n const hasNP = hasProduct(ProductId.Primary);\n\n function showPublicLayout(): boolean {\n /**\n * Authenticated users should never see the placeholder\n */\n if (hasLocalPermissions(LocalPermissionName.WatchVideos))\n return false;\n\n /**\n * Accessing a play page unathenticated will have different contextual behabviours:\n * - For a share page, the user should see the video and never the placeholder\n * - For a public browsing page (ie. using a route-prefix) they should see the placeholder\n */\n return LiteRouteHelper.hasRegionPrefix();\n }\n\n return {\n canViewGlance: hasPermissions(PermissionName.ViewVideoGlance),\n canViewResources: true,\n canViewInteractives: hasNP && hasPermissions(PermissionName.ViewVideoInteractives),\n canViewClips: hasNP && hasPermissions(PermissionName.ViewVideoClips),\n canViewCurriculumLinks: hasPermissions(PermissionName.ViewCurriculums),\n canUseActions: hasLocalPermissions(LocalPermissionName.UseVideoActions),\n canViewPublicLayout: showPublicLayout(),\n canViewResourceItems: hasLocalPermissions(LocalPermissionName.ViewVideoResourceItems),\n canNavigate: hasNP\n };\n}","import { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useGrowingBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { Clip, ClipCollection, Video, VideoCollection } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\ntype Types = Video[] | VideoCollection | Clip[] | ClipCollection;\n\nfunction getValidObjects(objects: Types): (Video | Clip)[] {\n if (!objects)\n return [];\n\n if (Array.isArray(objects))\n return objects.filter(o => !!o && (VideoHelper.isVideo(o) || VideoHelper.isClip(o)));\n\n if ('data' in objects)\n return objects.data.filter(o => !!o && (VideoHelper.isVideo(o) || VideoHelper.isClip(o)));\n\n return [];\n}\n\ninterface VideoMixinOptions {\n /**\n * If the videos that are having new data mixed into are sitting on an explicit Flight namespace,\n * providing that namespace here is required\n */\n flightNamespace?: string;\n}\n\nexport function useVideoMixin(objects: Types, options: VideoMixinOptions = {}): void {\n const videoIds = getValidObjects(objects).map(v => v.id);\n\n useGrowingBatchFetch(videoIds, ids => VideoRequests.videoMixinAssocs(ids, options.flightNamespace));\n}","import React from 'react';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { CurrentUser, PresentationAudience, VideoTypes } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\n\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { InteractiveHelpers } from 'shared/utils/InteractiveHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nconst namespace = 'shared.playClip';\n\ninterface ClippedFromProps {\n originalVideo: VideoTypes;\n queryParams: PlayViewQueryParams;\n audiences: PresentationAudience[];\n shareId?: string;\n headingRef: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n currentUser: CurrentUser;\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ClippedFrom(props: ClippedFromProps) {\n const { hasPermissions } = usePermissions();\n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem });\n\n return (\n <section\n className='play-page-section'\n id={PlayPageAnchor.ClippedFrom}\n ref={el => {\n (el && props.headingRef?.current) && props.headingRef.current.set(PlayPageAnchor.ClippedFrom, el);\n }}\n >\n <h2 className='h4 mb-0'><Text namespace={namespace} phrase='clippedFrom' /></h2>\n <VideoActionsContext.Provider value={videoActions}>\n <VideoList\n videos={[props.originalVideo]}\n getVideoAppLink={(v, opts) => VideoAppLinkHelper.getAppLink(v, {\n ...opts,\n context: props.queryParams.context,\n contextId: props.queryParams.contextId,\n playNext: props.queryParams.playNext,\n shareId: props.shareId,\n moviesAndTv: props.queryParams.mtv,\n includeContext: props.currentUser?.isAuthenticated\n })}\n hasPermissions={hasPermissions}\n presentationAudiences={props.audiences}\n getPreviewQuestionsAppLink={interactive => InteractiveHelpers.getPreviewQuestionsAppLink(interactive)}\n commonVideoProps={props.commonVideoProps}\n />\n </VideoActionsContext.Provider>\n </section>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"main\":\"ULvZW\",\"expandedToc\":\"W3k9M\",\"theatreMode\":\"KOUGv\",\"theatreModeContent\":\"fWNAc\",\"theatreModePlayPageContainer\":\"RJ5nP\",\"theatreModeLeftContent\":\"dllgG\"};","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { 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 { PlayPageResources } from 'libs/shared/components/play-page/resources-widget/PlayPageResources';\nimport { SeoConstants } from 'libs/shared/constants/SeoConstants';\nimport { GlobalPlayerConsumer } from 'libs/shared/context/player-context/components/GlobalPlayerConsumer';\nimport { usePlayerContext } from 'libs/shared/context/player-context/PlayerContext';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { HasProductFunc } from 'libs/shared/hooks/UseProducts';\nimport { useTableOfContentsActiveHeading } from 'libs/shared/hooks/useTableOfContentsActiveHeading';\nimport { useTableOfContentsScroll } from 'libs/shared/hooks/useTableOfContentsScroll';\nimport { Clip, CurrentUser, InteractiveMetadata, Link, PointOfInterest, PresentationAudience, Resource, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ArchivedBanner } from 'shared/components/play-page/ArchivedBanner';\nimport { PlayPageClips } from 'shared/components/play-page/components/play-page-clips/PlayPageClips';\nimport { PlayPageInteractives } from 'shared/components/play-page/components/play-page-interactives/PlayPageInteractives';\nimport { TableOfContentsContainer } from 'shared/components/play-page/components/table-of-contents/TableOfContents';\nimport { PlayPageTitleAndActions } from 'shared/components/play-page/components/title-and-actions/PlayPageTitleAndActions';\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 { getContentClassName, 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 { useTheatreStyle } from 'shared/views/play/hooks/useTheatreStyle';\nimport { PlayPageUtils } from 'shared/views/play/PlayPageUtil';\nimport { ClippedFrom } from 'shared/views/play-clip/components/clipped-from/ClippedFrom';\n\nimport styles from './play-clip.scss';\n\nconst getResourceAppLink = (videoId: string, shareId: string, canViewResource: boolean) =>\n (resource: Resource | Link) => {\n if (!canViewResource) {\n return {\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n };\n }\n\n return {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PREVIEW_PDF,\n args: [resource.id],\n params: {\n videoId: videoId,\n shareId: shareId\n }\n };\n };\n\n\ninterface PlayClipProps {\n clip: Clip;\n clips: Clip[];\n interactives: InteractiveMetadata[];\n originalVideo: Video;\n currentUser: CurrentUser;\n relatedVideos: RelatedVideosHash;\n queryParams: PlayViewQueryParams;\n hasProduct: HasProductFunc;\n audiences: PresentationAudience[];\n shareId?: string;\n canManageVideoAccess: boolean;\n pointsOfInterest?: PointOfInterest[];\n featureAccess: VideoFeaturesHash;\n tableOfContentsId: string;\n shouldShowSideTableOfContents: boolean;\n hasTopicDirectories: boolean;\n hasTheatreMode: boolean;\n breadcrumbs?: Breadcrumb[];\n commonVideoProps: CommonVideoProps;\n}\n\nexport function PlayClip(props: PlayClipProps): JSX.Element {\n const playerContext = usePlayerContext();\n\n const { hasPermissions } = usePermissions();\n const { canConsume } = VideoHelper.getCanBeConsumed(props.clip);\n \n const theatreMode = props.hasTheatreMode && playerContext.mode === 'theatre';\n const shouldUseTheareModeStyle = useTheatreStyle(props.hasTheatreMode, theatreMode);\n\n function toggleTheatreMode(value: boolean) {\n playerContext.playerRef?.current?.toggleTheatreMode?.(value);\n }\n\n const {\n tableOfContentsActiveId,\n setTableOfContentsActiveId,\n controlledId,\n setControlledId,\n tableOfContentsExpanded,\n onToggleTableOfContents\n } = usePlayPageTableOfContent(props.tableOfContentsId, props.hasTheatreMode, theatreMode);\n\n const hasGlance = hasGlanceData(props.clip) && props.featureAccess.canViewGlance;\n\n const { headingRef, headingElements } = useSectionHeadings(hasGlance);\n const items = headingElements.map(ele => {\n return {\n id: ele.id as PlayPageAnchor,\n name: PlayPageUtils.getSectionHeading(\n ele.id as PlayPageAnchor,\n {\n clips: props.clips,\n interactives: props.interactives,\n resources: props.clip.resources?.data,\n isPlayClipPage: true\n }\n )\n };\n });\n\n useTableOfContentsActiveHeading({\n setActiveId: setTableOfContentsActiveId,\n headingElements,\n controlledId,\n setControlledId\n });\n\n useTableOfContentsScroll(headingElements, controlledId);\n\n const isArchived = VideoHelper.isVideoTypeArchived(props.clip);\n const hasStudentExperience = hasPermissions(PermissionName.StudentExperience);\n /**\n * Need to use a ref because if we use state, onExitImmersiveReader will have a stale\n * reference of the state. This is because the state is changed in onLaunchImmersiveReader\n * which is passed in at the same time as onExitImmersiveReader\n */\n const shouldPlayOnExitImmersiveReader = React.useRef(false);\n\n function onLaunchImmersiveReader(): void {\n shouldPlayOnExitImmersiveReader.current = !playerContext?.playerRef?.current?.isPaused();\n playerContext?.playerRef?.current?.pause();\n }\n\n function onExitImmersiveReader(): void {\n if (!shouldPlayOnExitImmersiveReader.current)\n return;\n\n playerContext?.playerRef?.current?.play();\n }\n\n function canAccessOriginal(): boolean {\n if (!props.originalVideo || !props.clip._canBeConsumed?.value)\n return false;\n\n if (!props.currentUser?.isAuthenticated)\n return false;\n\n if (!props.hasProduct(ProductId.Primary))\n return false;\n\n if (hasStudentExperience)\n return false;\n\n return true;\n }\n\n function getOriginalVideoAppLink(): Core.AppLink {\n if (!canAccessOriginal())\n return null;\n \n return {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ props.originalVideo.id, TextHelper.slugify(props.originalVideo.name) ]\n };\n }\n\n const showPlayerPlaceholder = playerContext.mode === 'picture-in-picture' || props.featureAccess.canViewPublicLayout;\n\n const otherClips = props.clips?.filter(c => c.id.toString() !== props.clip.id.toString()) ?? [];\n\n const calcClassNameProps = {\n hasTheatreMode: props.hasTheatreMode,\n shouldShowSideTableOfContents: props.shouldShowSideTableOfContents,\n tableOfContentsExpanded,\n theatreMode\n };\n const mainClassName = getMainClassName(calcClassNameProps);\n const contentClassName = getContentClassName(calcClassNameProps);\n\n const [ , setContainerClassName ] = useViewModel(ViewModelKeys.PLAY_PAGE_CONTAINER_CLASS_NAME);\n \n React.useEffect(() => {\n if (!theatreMode) {\n setContainerClassName('');\n } else {\n setContainerClassName(styles.theatreModePlayPageContainer);\n }\n }, [theatreMode]);\n\n React.useEffect(() => {\n return () => setContainerClassName('');\n }, []);\n\n return (\n <div className={`px-4 play-page-sections-container ${props.shouldShowSideTableOfContents ? 'row g-0' : ''}`}>\n <main className={`${styles.main} ${mainClassName}`}>\n {!!props.breadcrumbs?.length && (\n <div className='mb-2'>\n <Breadcrumbs breadcrumbs={props.breadcrumbs} />\n </div>\n )}\n\n <RestrictionBanner\n restrictions={props.clip._restrictions}\n yearGroups={props.commonVideoProps.yearGroups}\n objectId={props.clip.id}\n objectTypeId={MasterType.Clip}\n canManageVideoAccess={props.canManageVideoAccess}\n />\n\n {isArchived && (\n <ArchivedBanner\n typeId={props.clip.typeId}\n hasStudentExperience={hasStudentExperience}\n />\n )}\n\n <section\n id={PlayPageAnchor.Video}\n className={`mb-2 ${SeoConstants.GLOBAL_PLAYER_SELECTOR}`}\n ref={el => { (el && headingRef?.current) && headingRef.current.set(PlayPageAnchor.Video, el); }}\n >\n {canConsume && (\n <GlobalPlayerConsumer\n key={props.clip.id}\n objectId={props.clip.id}\n objectTypeId={props.clip.typeId}\n shareId={props.shareId}\n context={props.queryParams?.context}\n contextId={props.queryParams?.contextId}\n moviesAndTv={props.queryParams?.mtv}\n playNext={props.queryParams?.playNext}\n startTime={props.queryParams?.t ?? props.queryParams?.startTime}\n mode={playerContext.mode || 'default'}\n location='play-page'\n />\n )}\n\n <div className={showPlayerPlaceholder ? '' : 'd-none'}>\n <PlayerPlaceholder\n video={props.clip}\n type='pip'\n />\n </div>\n </section>\n\n <div className={contentClassName}>\n <div className={shouldUseTheareModeStyle ? `${styles.theatreModeLeftContent}` : 'w-100'}>\n <PlayPageTitleAndActions\n media={props.clip}\n yearGroups={props.commonVideoProps.yearGroups}\n audiences={props.audiences}\n originalVideoAppLink={getOriginalVideoAppLink()}\n featureAccess={props.featureAccess}\n shareId={props.shareId}\n showTitlePadlock={!props.commonVideoProps.hasStudentExperience}\n />\n\n {/* if no glance render video details here */}\n {hasGlance ? (\n <VideoAtAGlanceV2\n video={props.clip}\n pointsOfInterest={props.pointsOfInterest}\n setStartTime={(time: number) => playerContext.playerRef.current?.currentTime(time)}\n getTagAppLink={tag => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: { tagOrClassification: tag.name }\n })}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n canViewGlance={hasGlance}\n />\n ) : (\n <VideoDetailsWithScrollbarV2\n video={props.clip}\n currentUser={props.currentUser}\n onLaunchImmersiveReader={onLaunchImmersiveReader}\n onExitImmersiveReader={onExitImmersiveReader}\n getTagAppLink={tag => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: { tagOrClassification: tag.name }\n })}\n headingRef={headingRef}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n />\n )}\n\n <PlayPageResources\n video={props.clip}\n canViewResources={props.featureAccess.canViewResourceItems}\n imageCdnUrl={props.commonVideoProps.imageCdnUrl}\n getAppLink={\n getResourceAppLink(props.clip.id, props.shareId, props.featureAccess.canViewResourceItems)\n }\n analyticsData={{ clipId: props.clip.id, clipName: props.clip.name }}\n resourceThumbnailFallbackUrl={ImageUrls.Fallbacks.RESOURCE_THUMBNAIL}\n headingRef={headingRef}\n />\n\n <PlayPageInteractives\n video={props.clip}\n interactives={props.interactives}\n analyticsData={{ clipId: props.clip.id, clipName: props.clip.name }}\n canViewInteractives={props.featureAccess.canViewInteractives}\n headingRef={headingRef}\n commonVideoProps={props.commonVideoProps}\n />\n\n <PlayPageClips\n clips={otherClips || []}\n video={props.clip}\n canViewClips={props.featureAccess.canViewClips}\n audiences={props.audiences}\n headingRef={headingRef}\n analyticsData={{ clipId: props.clip.id, clipName: props.clip.name }}\n commonVideoProps={props.commonVideoProps}\n />\n\n {/* if has glance, render video details here */}\n {hasGlance && (\n <VideoDetailsWithScrollbarV2\n video={props.clip}\n currentUser={props.currentUser}\n onLaunchImmersiveReader={onLaunchImmersiveReader}\n onExitImmersiveReader={onExitImmersiveReader}\n getTagAppLink={tag => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: { tagOrClassification: tag.name }\n })}\n headingRef={headingRef}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n showHeading\n />\n )}\n \n {!!canAccessOriginal() && (\n <ClippedFrom\n originalVideo={props.originalVideo}\n shareId={props.shareId}\n queryParams={props.queryParams}\n audiences={props.audiences}\n headingRef={headingRef}\n currentUser={props.currentUser}\n commonVideoProps={props.commonVideoProps}\n />\n )}\n\n <RelatedVideos\n currentVideo={props.clip}\n relatedVideos={props.relatedVideos}\n currentUser={props.currentUser}\n audiences={props.audiences}\n getVideoAppLink={(v, opts) => VideoAppLinkHelper.getAppLink(v, {\n ...opts,\n context: props.queryParams.context,\n contextId: props.queryParams.contextId,\n playNext: props.queryParams.playNext,\n shareId: props.shareId,\n moviesAndTv: props.queryParams.mtv,\n includeContext: props.currentUser?.isAuthenticated\n })}\n moviesAndTv={props.queryParams.mtv}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n {theatreMode && (\n <TableOfContentsContainer\n isExpanded={tableOfContentsExpanded}\n setIsExpanded={onToggleTableOfContents}\n toggleTheatreMode={ null}\n items={items}\n activeId={tableOfContentsActiveId}\n setControlledId={setControlledId}\n analyticsData={{ videoId: props.clip.id, videoName: props.clip.name }}\n showInSide={props.shouldShowSideTableOfContents}\n isTheatreMode={true}\n hasTranscription={props.hasTheatreMode}\n />\n )}\n </div>\n </main>\n\n {!theatreMode && (\n <TableOfContentsContainer\n isExpanded={tableOfContentsExpanded}\n setIsExpanded={onToggleTableOfContents}\n toggleTheatreMode={props.hasTheatreMode ? toggleTheatreMode : null}\n items={items}\n activeId={tableOfContentsActiveId}\n setControlledId={setControlledId}\n analyticsData={{ videoId: props.clip.id, videoName: props.clip.name }}\n showInSide={props.shouldShowSideTableOfContents}\n isTheatreMode={false}\n hasTranscription={props.hasTheatreMode}\n />\n )}\n </div>\n );\n}\n"],"names":["CHUNK_SIZE","useBatchFetch","itemIds","getRequest","requests","map","chunk","responses","itemsArr","data","items","length","reduce","acc","item","id","isFetching","useGrowingBatchFetch","objs","_getKey","getKey","obj","fetchedItems","Set","setRequests","unfetchedItems","forEach","key","current","has","push","add","r","hasFirstRequestCompleted","hasCompleted","useBreadcrumbs","match","breadcrumbs","useBuilder","active","useCommonVideoProps","options","locationContext","mtv","flightNamespace","sharedPlaylist","isPlugin","u","setFavourite","canFavourite","hasTopicDirectories","isLoadingSettings","hasPermissions","hasLoadedPermissions","isLoaded","hasStudentExperience","config","currentUser","yearGroups","isAuthenticated","customerId","hasCommonVideoPropsCompleted","commonVideoProps","subTextType","getSubTextAppLink","video","series","imageCdnUrl","getClassroomGuideAppLink","getInteractiveGuidanceAppLink","getResourceGuidanceAppLink","showNewVideoIndicator","companyLogoFallbackUrl","usePresentationAudiences","redirectOnError","activePresentation","getFallbackPresentation","presentation","useVideoFeatureAccess","hasLocalPermissions","hasNP","hasProduct","canViewGlance","canViewResources","canViewInteractives","canViewClips","canViewCurriculumLinks","canUseActions","canViewPublicLayout","canViewResourceItems","canNavigate","useVideoMixin","objects","videoIds","Array","isArray","filter","o","getValidObjects","v","ids","namespace","ClippedFrom","props","usePermissions","videoActions","useVideoActions","location","className","PlayPageAnchor","ref","el","headingRef","set","Text","phrase","VideoActionsContext","value","VideoList","videos","originalVideo","getVideoAppLink","opts","VideoAppLinkHelper","context","queryParams","contextId","playNext","shareId","moviesAndTv","includeContext","presentationAudiences","audiences","getPreviewQuestionsAppLink","interactive","InteractiveHelper","getResourceAppLink","videoId","canViewResource","resource","application","action","args","params","PlayClip","playerContext","canConsume","VideoHelper","clip","theatreMode","hasTheatreMode","mode","shouldUseTheareModeStyle","useTheatreStyle","usePlayPageTableOfContent","tableOfContentsId","tableOfContentsActiveId","setTableOfContentsActiveId","controlledId","setControlledId","tableOfContentsExpanded","onToggleTableOfContents","hasGlance","featureAccess","useSectionHeadings","headingElements","ele","name","PlayPageUtil","clips","interactives","resources","isPlayClipPage","useTableOfContentsActiveHeading","setActiveId","useTableOfContentsScroll","isArchived","PermissionName","shouldPlayOnExitImmersiveReader","onLaunchImmersiveReader","playerRef","isPaused","pause","onExitImmersiveReader","play","canAccessOriginal","_canBeConsumed","ProductId","showPlayerPlaceholder","otherClips","c","toString","calcClassNameProps","shouldShowSideTableOfContents","mainClassName","contentClassName","setContainerClassName","Breadcrumbs","RestrictionBanner","restrictions","_restrictions","objectId","objectTypeId","MasterType","canManageVideoAccess","ArchivedBanner","typeId","SeoConstants","GlobalPlayerConsumer","startTime","t","PlayerPlaceholder","type","PlayPageTitleAndActions","media","originalVideoAppLink","TextHelper","showTitlePadlock","VideoAtAGlanceV2","pointsOfInterest","setStartTime","time","currentTime","getTagAppLink","tag","tagOrClassification","suppressInteractivity","PlayPageResources","getAppLink","analyticsData","clipId","clipName","resourceThumbnailFallbackUrl","ImageUrls","PlayPageInteractives","PlayPageClips","showHeading","RelatedVideos","currentVideo","relatedVideos","TableOfContents","isExpanded","setIsExpanded","toggleTheatreMode","activeId","videoName","showInSide","isTheatreMode","hasTranscription"],"sourceRoot":""}
|