@clickview/lite 0.70.0-rc.0 → 0.70.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/scripts/3978-ac2acbd10d-lite.chunk.js +2 -0
- package/dist/scripts/3978-ac2acbd10d-lite.chunk.js.map +1 -0
- package/dist/scripts/{9630-400b514621-lite.chunk.js → 9630-cf529251e5-lite.chunk.js} +2 -2
- package/dist/scripts/9630-cf529251e5-lite.chunk.js.map +1 -0
- package/dist/scripts/{bundle-764d01afb0.min.js → bundle-bffc2efc17.min.js} +3 -3
- package/dist/scripts/{bundle-764d01afb0.min.js.map → bundle-bffc2efc17.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/3978-af7373e58a-lite.chunk.js +0 -2
- package/dist/scripts/3978-af7373e58a-lite.chunk.js.map +0 -1
- package/dist/scripts/9630-400b514621-lite.chunk.js.map +0 -1
- /package/dist/scripts/{bundle-764d01afb0.min.js.LICENSE.txt → bundle-bffc2efc17.min.js.LICENSE.txt} +0 -0
package/package.json
CHANGED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3978],{39902:(e,t,n)=>{n.d(t,{F:()=>m,f:()=>f});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)||u(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 u(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 c(e){return c="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},c(e)}function l(e,t,n){return(t=function(e){var t=function(e){if("object"!=c(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=c(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==c(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 f(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),u=r.data.length?o.reduce((function(e,t){return Object.assign(Object.assign({},e),l({},t.id,t))}),{}):null;return{itemsArr:o,items:u,isFetching:r.isFetching}}function m(e,t,n){var s,f,m,v,p=n||function(e){return"object"===c(e)?e.id:e},h=r.useRef(new Set),y=(m=r.useState([]),v=2,function(e){if(Array.isArray(e))return e}(m)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,a,o,u=[],s=!0,c=!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)&&(u.push(r.value),u.length!==t);s=!0);}catch(e){c=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw i}}return u}}(m,v)||u(m,v)||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.")}()),b=y[0],g=y[1];r.useEffect((function(){if(null==e?void 0:e.length){var n=[];e.forEach((function(e){var t=p(e);h.current.has(t)||(n.push(e),h.current.add(t))})),n.length&&g((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(b),C=a.m.flatten(A.data),I=A.data.length?C.reduce((function(e,t){return Object.assign(Object.assign({},e),l({},p(t),t))}),{}):null;return{hasFirstRequestCompleted:!!(null===(f=null===(s=A.responses)||void 0===s?void 0:s[0])||void 0===f?void 0:f.hasCompleted),itemsArr:C,items:I,isFetching:A.isFetching}}},63719:(e,t,n)=>{n.d(t,{h:()=>u});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 u(e){var t,n,u=(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,u=[],s=!0,c=!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)&&(u.push(r.value),u.length!==t);s=!0);}catch(e){c=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw i}}return u}}(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=u[0],c=(0,u[1])(s);return c&&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.")}()}(c),[Object.assign(Object.assign({},e),{active:!0})]):c}},93978:(e,t,n)=>{n.r(t),n.d(t,{PlaySharedVideoView:()=>x});var r=n(32735),i=n(20354),a=n(65858),o=n(16714),u=n(89454),s=n(43012),c=n(20768),l=n(31949),d=n(1575),f=n(63719),m=n(26304),v=n(22902),p=n(79612),h=n(37802),y=n(76753),b=n(10094),g=n(58321),A=n(82817),C=n(7179),I=n(49948),V=n(36873),w=n(86698),S=n(35014),j=n(97816),P=n(33192),F=n(57695),k=n(91442),O=n(16857);function x(e){var t,n,x,L,T,M,B,E,R,U=(0,g.U)({locationContext:a.LZ.VideoThumbnail}),G=U.commonVideoProps,q=U.hasCommonVideoPropsCompleted,N=(0,v.T)().hasPermissions,_=(0,S.I)(),W=(0,k.a)(),D=(0,w.y)().activePresentation,$=(0,h.r)(null).hasPlayPageTranscript,Z=i.a.useBasicFetch(l.N.currentUser()),z=i.a.useBasicFetch(d.R.sharedVideo(e.objectId,e.shareId)),H=i.a.useBasicFetch(_.canViewClips&&s.e.videoClips(e.objectId)),J=i.a.useBasicFetch(_.canViewInteractives&&c.b.videoInteractives(e.objectId)),K=(0,V.k)({video:z.data,context:e.queryParams.context,contextId:e.queryParams.contextId,moviesAndTv:e.queryParams.mtv,currentUser:Z.data}),Q=(0,I.l)(e.objectId),X=i.a.useBasicFetch(!!D&&u.O.audiencesByPresentationId(D.id)),Y=$&&!!(null===(n=null===(t=z.data)||void 0===t?void 0:t._isClickViewCurated)||void 0===n?void 0:n.value),ee=i.a.useBasicFetch(Y&&(null===(x=Z.data)||void 0===x?void 0:x.contentRegion)&&b.F.chaptersAndSubtitles(e.objectId,Z.data.contentRegion)),te=(null==ee?void 0:ee.data)||{},ne=te.subtitles,re=te.chapters,ie=ne&&ne.length>0?ne.map((function(e){return b.F.subtitleVtt(e.url,e)})):[],ae=i.a.useBasicFetchAll(ie);(0,p.M)(y.CG.getVideoMetadata({content:z.data,canonicalLink:P.f.getCanonicalLink({stripPresentationSlug:!0}),allowIndexing:!1})),(0,j.V)(null!==(L=K.videos)&&void 0!==L?L:[]),(0,m.b)(z,{private:O.m}),(0,C.P)({id:e.objectId,app:"videos",shareId:e.shareId});var oe=(0,f.h)({name:null===(T=z.data)||void 0===T?void 0:T.name}),ue=(0,A.M)(e.objectId);return z.data&&Z.hasCompleted&&Q.hasCompleted&&q?r.createElement("div",{className:"px-3"},r.createElement(F.j,{video:z.data,clips:null===(M=H.data)||void 0===M?void 0:M.data,interactives:null===(B=J.data)||void 0===B?void 0:B.data,curriculums:ue,relatedVideos:K,currentUser:Z.data,pointsOfInterest:null==Q?void 0:Q.items,playNext:null===(E=e.queryParams)||void 0===E?void 0:E.playNext,shareId:e.shareId,featureAccess:_,audiences:X.data,params:e.queryParams,canManageVideoAccess:N(o.C.ManageVideoAccess),tableOfContentsId:null===(R=e.queryParams)||void 0===R?void 0:R.tocId,shouldShowSideTableOfContents:W,breadcrumbs:oe,commonVideoProps:G,hasTheatreMode:$,shouldShowTranscript:Y,vttSubtitles:ae.data||[],subtitles:ne||[],chapters:re})):r.createElement(r.Fragment,null)}},10094:(e,t,n)=>{n.d(t,{F:()=>a});var r=n(97395),i=n(78417),a={chaptersAndSubtitles:function(e,t){var n={query:"subtitles,chapters",permissionFilterOption:i.r.StripMetadata,contentRegion:t};return{url:r._.urlBuilder("{gateway}/v1/objects/".concat(e),n),key:"videos:".concat(e,":subtitles:").concat(i.r.StripMetadata),formatData:function(e){return{subtitles:e.subtitles.data,chapters:e.chapters.data}}}},subtitleVtt:function(e,t){return{url:"{player}/srt-to-vtt?url=".concat(e),key:"subtitle:".concat(e),formatData:function(e){return Object.assign(Object.assign({},t),{vtt:e})}}}}},58321:(e,t,n)=>{n.d(t,{U:()=>v});var r=n(20354),i=n(16714),a=n(39151),o=n(1666),u=n(31949),s=n(22902),c=n(37802),l=n(22490),d=n(82431),f=n(46390),m=n(27638);function v(e){var t,n,v,p=e||{},h=p.locationContext,y=p.mtv,b=p.flightNamespace,g=p.sharedPlaylist,A=(0,f.G)().isPlugin,C=(0,m.u)(h,b),I=C.setFavourite,V=C.canFavourite,w=(0,c.r)(null),S=w.hasTopicDirectories,j=w.isLoadingSettings,P=(0,s.T)(),F=P.hasPermissions,k=P.isLoaded,O=F(i.C.StudentExperience),x=r.a.useBasicFetch(a.L.config()),L=r.a.useBasicFetch(u.N.currentUser()),T=r.a.useBasicFetch((null===(t=L.data)||void 0===t?void 0:t.isAuthenticated)&&o.h.yearGroups(L.data.customerId));return{hasCommonVideoPropsCompleted:!j&&k&&x.hasCompleted&&L.hasCompleted&&(!(null===(n=L.data)||void 0===n?void 0:n.isAuthenticated)||T.hasCompleted),commonVideoProps:{subTextType:"series",getSubTextAppLink:function(e){var t;return"series"in e?g&&!(null===(t=L.data)||void 0===t?void 0:t.isAuthenticated)?null:d.j.getSeriesAppLink(e.series,{mtv:y}):null},isPlugin:A,canFavourite:V,setFavourite:I,imageCdnUrl:null===(v=x.data)||void 0===v?void 0:v.imageCdnUrl,yearGroups:T.data,getClassroomGuideAppLink:l.W.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:l.W.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:l.W.getResourceGuidanceAppLink,showNewVideoIndicator:S,companyLogoFallbackUrl:null,hasStudentExperience:O}}}},35014:(e,t,n)=>{n.d(t,{I:()=>s});var r=n(16714),i=n(12754),a=n(22902),o=n(15311),u=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)&&u.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)}))}}}]);
|
|
2
|
-
//# sourceMappingURL=3978-af7373e58a-lite.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/3978-af7373e58a-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/apps/share/views/play-shared-video/PlaySharedVideoView.tsx","file:///app/packages/projects/lite/src/shared/flight-requests/TranscriptRequests.ts","file:///app/packages/projects/lite/src/shared/hooks/useCommonVideoProps.ts","file:///app/packages/projects/lite/src/shared/hooks/useVideoFeatureAccess.ts","file:///app/packages/projects/lite/src/shared/hooks/useVideoMixin.ts"],"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 * as React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useBreadcrumbs } from 'libs/shared/hooks/useBreadcrumbs';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { ClipCollection, CurrentUser, InteractiveCollection, PresentationAudience, Video, VttSubtitleResponse } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { TranscriptRequests, TranscriptResponse } from 'shared/flight-requests/TranscriptRequests';\nimport { useCommonVideoProps } from 'shared/hooks/useCommonVideoProps';\nimport { useCurriculums } from 'shared/hooks/useCurriculums';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { useFetchPointsOfInterest } from 'shared/hooks/useFetchPointsOfInterest';\nimport { useGetRelatedVideos } from 'shared/hooks/useGetRelatedVideos';\nimport { usePresentation } from 'shared/hooks/usePresentation';\nimport { useVideoFeatureAccess } from 'shared/hooks/useVideoFeatureAccess';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\nimport { PlayPage } from 'shared/views/play/components/play-page/PlayPage';\nimport { useShouldShowSideTableOfContents } from 'shared/views/play/hooks/useShouldShowTableOfContents';\n\nimport { ShareLinkPrivateError } from 'apps/share/errors/share-link-private/ShareLinkPrivateError';\nimport { ShareLinkViewProps } from 'apps/share/interfaces/ShareLinkViewProps';\n\nexport function PlaySharedVideoView(props: ShareLinkViewProps): React.ReactElement {\n const {\n commonVideoProps,\n hasCommonVideoPropsCompleted\n } = useCommonVideoProps({ locationContext: LocationContext.VideoThumbnail });\n\n const { hasPermissions } = usePermissions();\n\n const featureAccess = useVideoFeatureAccess();\n\n const shouldShowSideTableOfContents = useShouldShowSideTableOfContents();\n\n const { activePresentation } = usePresentation();\n const { hasPlayPageTranscript } = useSettings(null);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<Video>(\n VideoRequests.sharedVideo(props.objectId, props.shareId)\n );\n const clips = Flight.useBasicFetch<ClipCollection>(\n featureAccess.canViewClips && ClipRequests.videoClips(props.objectId)\n );\n const interactives = Flight.useBasicFetch<InteractiveCollection>(\n featureAccess.canViewInteractives && InteractiveRequests.videoInteractives(props.objectId)\n );\n const relatedVideos = useGetRelatedVideos({\n video: video.data,\n context: props.queryParams.context,\n contextId: props.queryParams.contextId,\n moviesAndTv: props.queryParams.mtv,\n currentUser: currentUser.data\n });\n const pointsOfInterest = useFetchPointsOfInterest(props.objectId);\n \n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n !!activePresentation &&\n AudienceRequests.audiencesByPresentationId(activePresentation.id)\n );\n\n const shouldFetchTranscript = hasPlayPageTranscript && !!video.data?._isClickViewCurated?.value;\n const transcript = Flight.useBasicFetch<TranscriptResponse>(\n shouldFetchTranscript && currentUser.data?.contentRegion &&\n TranscriptRequests.chaptersAndSubtitles(props.objectId, currentUser.data.contentRegion)\n );\n const { subtitles, chapters } = transcript?.data || {};\n \n const captionsRequests = (subtitles && subtitles.length > 0)\n ? subtitles.map(subtitle => TranscriptRequests.subtitleVtt(subtitle.url, subtitle))\n : [];\n const captions = Flight.useBasicFetchAll<VttSubtitleResponse>(captionsRequests);\n\n useSetPageMetadata(PageMetadataHelper.getVideoMetadata({\n content: video.data,\n canonicalLink: SeoHelper.getCanonicalLink({ stripPresentationSlug: true }),\n allowIndexing: false\n }));\n\n useVideoMixin(relatedVideos.videos ?? []);\n useCannotConsumeError(video, { private: ShareLinkPrivateError });\n useDeepLinks({ id: props.objectId, app: 'videos', shareId: props.shareId });\n\n const breadcrumbs = useBreadcrumbs({ name: video.data?.name });\n\n const curriculums = useCurriculums(props.objectId);\n\n const dataLoaded = (\n video.data &&\n currentUser.hasCompleted &&\n pointsOfInterest.hasCompleted &&\n hasCommonVideoPropsCompleted\n );\n\n if (!dataLoaded)\n return <></>;\n\n return (\n <div className='px-3'>\n <PlayPage\n video={video.data}\n clips={clips.data?.data}\n interactives={interactives.data?.data}\n curriculums={curriculums}\n relatedVideos={relatedVideos}\n currentUser={currentUser.data}\n pointsOfInterest={pointsOfInterest?.items}\n playNext={props.queryParams?.playNext}\n shareId={props.shareId}\n featureAccess={featureAccess}\n audiences={audiences.data}\n params={props.queryParams}\n canManageVideoAccess={hasPermissions(PermissionName.ManageVideoAccess)}\n tableOfContentsId={props.queryParams?.tocId}\n shouldShowSideTableOfContents={shouldShowSideTableOfContents}\n breadcrumbs={breadcrumbs}\n commonVideoProps={commonVideoProps}\n hasTheatreMode={hasPlayPageTranscript}\n shouldShowTranscript={shouldFetchTranscript}\n vttSubtitles={captions.data || []}\n subtitles={subtitles || []}\n chapters={chapters}\n />\n </div>\n );\n}","import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\nimport { Chapter, Subtitle } from 'libs/shared/interfaces';\n\nexport interface TranscriptResponse {\n subtitles: Subtitle[];\n chapters: Chapter[];\n}\n\nexport const TranscriptRequests = {\n chaptersAndSubtitles(videoId: string, contentRegion?: string): Flight.Request {\n const queryStringObj = {\n query: 'subtitles,chapters',\n permissionFilterOption: PermissionFilterOption.StripMetadata,\n contentRegion\n };\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${videoId}`, queryStringObj),\n key: `videos:${videoId}:subtitles:${PermissionFilterOption.StripMetadata}`,\n formatData: (data: any) => {\n return { subtitles: data.subtitles.data, chapters: data.chapters.data };\n }\n };\n },\n\n subtitleVtt(url: string, subtitleObj: Subtitle) {\n return {\n url: `{player}/srt-to-vtt?url=${url}`,\n key: `subtitle:${url}`,\n formatData: (data: any) => {\n return {\n ...subtitleObj,\n vtt: data\n };\n }\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 { 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}"],"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","PlaySharedVideoView","props","locationContext","commonVideoProps","hasCommonVideoPropsCompleted","hasPermissions","featureAccess","shouldShowSideTableOfContents","activePresentation","hasPlayPageTranscript","currentUser","video","objectId","shareId","clips","canViewClips","interactives","canViewInteractives","relatedVideos","context","queryParams","contextId","moviesAndTv","mtv","pointsOfInterest","audiences","shouldFetchTranscript","_isClickViewCurated","value","transcript","contentRegion","subtitles","chapters","captionsRequests","subtitle","url","captions","content","canonicalLink","stripPresentationSlug","allowIndexing","videos","private","app","name","curriculums","className","playNext","params","canManageVideoAccess","tableOfContentsId","tocId","hasTheatreMode","shouldShowTranscript","vttSubtitles","TranscriptRequests","chaptersAndSubtitles","videoId","queryStringObj","query","permissionFilterOption","formatData","subtitleVtt","subtitleObj","vtt","useCommonVideoProps","options","flightNamespace","sharedPlaylist","isPlugin","u","setFavourite","canFavourite","hasTopicDirectories","isLoadingSettings","hasLoadedPermissions","isLoaded","hasStudentExperience","config","yearGroups","isAuthenticated","customerId","subTextType","getSubTextAppLink","series","imageCdnUrl","getClassroomGuideAppLink","getInteractiveGuidanceAppLink","getResourceGuidanceAppLink","showNewVideoIndicator","companyLogoFallbackUrl","useVideoFeatureAccess","hasLocalPermissions","hasNP","hasProduct","canViewGlance","canViewResources","canViewCurriculumLinks","canUseActions","canViewPublicLayout","canViewResourceItems","canNavigate","useVideoMixin","objects","videoIds","Array","isArray","filter","o","getValidObjects","v","ids"],"sourceRoot":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/9630-400b514621-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/UseBatchFetch.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/hooks/useBreadcrumbs.ts","file:///app/packages/projects/lite/src/shared/flight-requests/TranscriptRequests.ts","file:///app/packages/projects/lite/src/shared/hooks/useCommonVideoProps.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/PlayView.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 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 { 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 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 { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\nimport { Chapter, Subtitle } from 'libs/shared/interfaces';\n\nexport interface TranscriptResponse {\n subtitles: Subtitle[];\n chapters: Chapter[];\n}\n\nexport const TranscriptRequests = {\n chaptersAndSubtitles(videoId: string, contentRegion?: string): Flight.Request {\n const queryStringObj = {\n query: 'subtitles,chapters',\n permissionFilterOption: PermissionFilterOption.StripMetadata,\n contentRegion\n };\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${videoId}`, queryStringObj),\n key: `videos:${videoId}:subtitles:${PermissionFilterOption.StripMetadata}`,\n formatData: (data: any) => {\n return { subtitles: data.subtitles.data, chapters: data.chapters.data };\n }\n };\n },\n\n subtitleVtt(url: string, subtitleObj: Subtitle) {\n return {\n url: `{player}/srt-to-vtt?url=${url}`,\n key: `subtitle:${url}`,\n formatData: (data: any) => {\n return {\n ...subtitleObj,\n vtt: data\n };\n }\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 { 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 * as React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\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 { VideoNotFoundError } from 'libs/shared/errors/videos/video-not-found/VideoNotFoundError';\nimport { VideoPrivateError } from 'libs/shared/errors/videos/video-private/VideoPrivateError';\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\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 { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { ClipCollection, CurrentUser, InteractiveCollection, PresentationAudience, RegionAlternative, Video, VttSubtitleResponse } from 'libs/shared/interfaces';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { TranscriptRequests, TranscriptResponse } from 'shared/flight-requests/TranscriptRequests';\nimport { useCommonVideoProps } from 'shared/hooks/useCommonVideoProps';\nimport { useCurriculums } from 'shared/hooks/useCurriculums';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { useFetchPointsOfInterest } from 'shared/hooks/useFetchPointsOfInterest';\nimport { useGetRelatedVideos } from 'shared/hooks/useGetRelatedVideos';\nimport { usePresentation } from 'shared/hooks/usePresentation';\nimport { useVideoFeatureAccess } from 'shared/hooks/useVideoFeatureAccess';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\nimport { useShouldShowSideTableOfContents } from 'shared/views/play/hooks/useShouldShowTableOfContents';\n\nimport { PlayPage } from './components/play-page/PlayPage';\n\nconst namespace = 'shared.play';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst videoErrors = {\n notFound: VideoNotFoundError,\n forbidden: {\n privacy: VideoPrivateError\n }\n};\n\nexport interface PlayViewProps {\n id: string;\n queryParams?: PlayViewQueryParams;\n}\n\nPlayView.defaultProps = {\n queryParams: {}\n};\n\n\nexport function PlayView(props: PlayViewProps): React.ReactElement {\n const { context, contextId, playNext, mtv } = props.queryParams;\n\n const {\n commonVideoProps,\n hasCommonVideoPropsCompleted\n } = useCommonVideoProps({ locationContext: LocationContext.PlayPage, mtv });\n\n const { hasPermissions } = usePermissions();\n\n const { activePresentation } = usePresentation();\n const { hasPlayPageTranscript } = useSettings(null);\n\n const featureAccess = useVideoFeatureAccess();\n\n const streamableLibrary = Flight.useBasicFetch<HashObject>(LibraryRequests.streamableLearning());\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.id));\n const clips = Flight.useBasicFetch<ClipCollection>(\n featureAccess.canViewClips && ClipRequests.videoClips(props.id)\n );\n const interactives = Flight.useBasicFetch<InteractiveCollection>(\n featureAccess.canViewInteractives && InteractiveRequests.videoInteractives(props.id)\n );\n \n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n activePresentation &&\n AudienceRequests.audiencesByPresentationId(activePresentation.id)\n );\n const shouldShowTranscript = hasPlayPageTranscript && !!video.data?._isClickViewCurated?.value;\n const transcript = Flight.useBasicFetch<TranscriptResponse>(\n shouldShowTranscript && currentUser.data?.contentRegion &&\n TranscriptRequests.chaptersAndSubtitles(props.id, currentUser.data.contentRegion)\n );\n const { subtitles, chapters } = transcript?.data || {};\n\n const captionsRequests = (subtitles && subtitles.length > 0)\n ? subtitles.map(subtitle => TranscriptRequests.subtitleVtt(subtitle.url, subtitle))\n : [];\n const captions = Flight.useBasicFetchAll<VttSubtitleResponse>(captionsRequests);\n\n const shouldShowSideTableOfContents = useShouldShowSideTableOfContents();\n\n const strippedVideo = Flight.useBasicFetch<Video>(video.statusCode === HttpStatus.Forbidden &&\n VideoRequests.video(props.id, PermissionFilterOption.StripMetadata));\n\n const curriculums = useCurriculums(props.id);\n\n const relatedVideos = useGetRelatedVideos({\n video: video.data,\n context,\n contextId,\n moviesAndTv: mtv,\n currentUser: currentUser.data\n });\n const pointsOfInterest = useFetchPointsOfInterest(props.id, true);\n\n const regionAlternatives = Flight.useBasicFetch<RegionAlternative[]>(\n VideoRequests.regionAlternatives(props.id)\n );\n\n const breadcrumbs = useBreadcrumbs({ name: video.data?.name });\n\n useSetPageMetadata(PageMetadataHelper.getVideoMetadata({\n content: video.data,\n regionAlternatives: regionAlternatives.data,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n },\n canonicalLink: SeoHelper.getCanonicalLink({\n stripPresentationSlug: true,\n customAppLink: VideoAppLinkHelper.getAppLink(video.data)\n }),\n allowIndexing: SeoHelper.allowIndexing(),\n hrefLang: SeoHelper.getContentHrefLang(regionAlternatives.data, (id: string, name: string) => ({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ id, TextHelper.slugify(name) ]\n }))\n }));\n\n useHandleObjectError(video, videoErrors, { forbidden: true });\n useVideoMixin(relatedVideos.videos ?? []);\n useDeepLinks({ id: props.id, app: 'videos' });\n useCannotConsumeError(strippedVideo);\n\n React.useEffect(() => {\n if (!video.data || !streamableLibrary.data)\n return;\n\n if (video.data.libraries?.data.find(library => library.id === streamableLibrary.data.objectId))\n Core.ErrorHelper.throw(new NotFoundError());\n }, [ video.hasCompleted, streamableLibrary.hasCompleted ]);\n\n const dataLoaded = (\n video.data &&\n currentUser.hasCompleted &&\n pointsOfInterest.hasCompleted &&\n hasCommonVideoPropsCompleted\n );\n\n if (!dataLoaded)\n return <></>;\n\n return (\n <PlayPage\n video={video.data}\n clips={clips.data?.data}\n interactives={interactives.data?.data}\n curriculums={curriculums}\n relatedVideos={relatedVideos}\n currentUser={currentUser.data}\n pointsOfInterest={pointsOfInterest.items}\n playNext={playNext}\n featureAccess={featureAccess}\n audiences={audiences.data}\n params={props.queryParams}\n canManageVideoAccess={hasPermissions(PermissionName.ManageVideoAccess)}\n shouldShowSideTableOfContents={shouldShowSideTableOfContents}\n tableOfContentsId={props.queryParams?.tocId}\n breadcrumbs={breadcrumbs}\n commonVideoProps={commonVideoProps}\n hasTheatreMode={hasPlayPageTranscript}\n shouldShowTranscript={shouldShowTranscript}\n vttSubtitles={captions.data || []}\n subtitles={subtitles || []}\n chapters={chapters}\n />\n );\n}\n"],"names":["defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","internalServerError","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","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","generateCacheKey","flightObjs","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","useBreadcrumbs","match","breadcrumbs","useBuilder","active","TranscriptRequests","chaptersAndSubtitles","videoId","contentRegion","queryStringObj","query","permissionFilterOption","url","formatData","subtitles","chapters","subtitleVtt","subtitleObj","vtt","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","useVideoFeatureAccess","hasLocalPermissions","hasNP","hasProduct","canViewGlance","canViewResources","canViewInteractives","canViewClips","canViewCurriculumLinks","canUseActions","canViewPublicLayout","canViewResourceItems","canNavigate","useVideoMixin","objects","videoIds","filter","o","getValidObjects","v","ids","getPhrase","videoErrors","PlayView","props","queryParams","context","contextId","playNext","activePresentation","hasPlayPageTranscript","featureAccess","streamableLibrary","clips","interactives","audiences","shouldShowTranscript","_isClickViewCurated","value","transcript","captionsRequests","subtitle","captions","shouldShowSideTableOfContents","strippedVideo","curriculums","relatedVideos","moviesAndTv","pointsOfInterest","regionAlternatives","name","content","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","canonicalLink","stripPresentationSlug","customAppLink","allowIndexing","hrefLang","application","action","args","videos","app","libraries","find","library","objectId","params","canManageVideoAccess","tableOfContentsId","tocId","hasTheatreMode","vttSubtitles","defaultProps"],"sourceRoot":""}
|
/package/dist/scripts/{bundle-764d01afb0.min.js.LICENSE.txt → bundle-bffc2efc17.min.js.LICENSE.txt}
RENAMED
|
File without changes
|