@clickview/lite 0.49.0-rc.2 → 0.49.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 +1 -1
- package/dist/css/4291-lite-69960aaab9.chunk.css +23 -0
- package/dist/css/6723-lite-69960aaab9.chunk.css +23 -0
- package/dist/css/9437-lite-69960aaab9.chunk.css +23 -0
- package/dist/languages/en.json +1 -1
- package/dist/scripts/{6375-f6cac7d19c-lite.chunk.js → 1539-df427c5b98-lite.chunk.js} +2 -2
- package/dist/scripts/1539-df427c5b98-lite.chunk.js.map +1 -0
- package/dist/scripts/194-918a27a783-lite.chunk.js +2 -0
- package/dist/scripts/194-918a27a783-lite.chunk.js.map +1 -0
- package/dist/scripts/{3042-d531f193aa-lite.chunk.js → 3042-32e303014a-lite.chunk.js} +2 -2
- package/dist/scripts/{3042-d531f193aa-lite.chunk.js.map → 3042-32e303014a-lite.chunk.js.map} +1 -1
- package/dist/scripts/32-cf9b8ba599-lite.chunk.js +2 -0
- package/dist/scripts/32-cf9b8ba599-lite.chunk.js.map +1 -0
- package/dist/scripts/{3854-6b20ca6c3b-lite.chunk.js → 3854-9e1422da99-lite.chunk.js} +2 -2
- package/dist/scripts/3854-9e1422da99-lite.chunk.js.map +1 -0
- package/dist/scripts/4291-4ea61b3610-lite.chunk.js +2 -0
- package/dist/scripts/4291-4ea61b3610-lite.chunk.js.map +1 -0
- package/dist/scripts/6723-ece2125bab-lite.chunk.js +2 -0
- package/dist/scripts/6723-ece2125bab-lite.chunk.js.map +1 -0
- package/dist/scripts/{7268-d9bf6e2c2a-lite.chunk.js → 7268-a8484f7697-lite.chunk.js} +2 -2
- package/dist/scripts/{7268-d9bf6e2c2a-lite.chunk.js.map → 7268-a8484f7697-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9087-48c8bfbc09-lite.chunk.js → 9087-55e2aad6ad-lite.chunk.js} +2 -2
- package/dist/scripts/{9087-48c8bfbc09-lite.chunk.js.map → 9087-55e2aad6ad-lite.chunk.js.map} +1 -1
- package/dist/scripts/9437-d9c671743c-lite.chunk.js +2 -0
- package/dist/scripts/9437-d9c671743c-lite.chunk.js.map +1 -0
- package/dist/scripts/{bundle-1335ff3786.min.js → bundle-0f5cfcd378.min.js} +3 -3
- package/dist/scripts/bundle-0f5cfcd378.min.js.map +1 -0
- package/package.json +1 -1
- package/dist/scripts/194-6131a555c8-lite.chunk.js +0 -2
- package/dist/scripts/194-6131a555c8-lite.chunk.js.map +0 -1
- package/dist/scripts/32-5739e73587-lite.chunk.js +0 -2
- package/dist/scripts/32-5739e73587-lite.chunk.js.map +0 -1
- package/dist/scripts/3854-6b20ca6c3b-lite.chunk.js.map +0 -1
- package/dist/scripts/6375-f6cac7d19c-lite.chunk.js.map +0 -1
- package/dist/scripts/bundle-1335ff3786.min.js.map +0 -1
- /package/dist/css/{6375-lite-69960aaab9.chunk.css → 1539-lite-69960aaab9.chunk.css} +0 -0
- /package/dist/scripts/{bundle-1335ff3786.min.js.LICENSE.txt → bundle-0f5cfcd378.min.js.LICENSE.txt} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1539],{49935:(e,a,t)=>{t.d(a,{Oo:()=>d,b2:()=>u});var n=t(32735),i=t(36848),r=t(86764),c=t(3747),l=t(5859),s=t(35223),o=t(83914),m=function(e){var a=e.breadcrumb,t=a.name,r=a.appLink,c=a.active,l=e.withBackIcon;return n.createElement("li",{className:"breadcrumb-item".concat(c?" active":"")},c?n.createElement("strong",null,t):n.createElement(i.F,{appLink:r},l&&n.createElement(o.x,{svgName:s.vn.ChevronLeft,size:o.S.Small}),n.createElement("span",{className:l?"ms-2":""},t)))},d=function(e){var a=e.breadcrumbs,t=(0,c.a)(r.r.XS),i=null==a?void 0:a.length;return!i||t&&i<2?n.createElement(n.Fragment,null):t?n.createElement("nav",{"aria-label":"breadcrumb"},n.createElement("ol",{className:"breadcrumb m-0 p-0"},n.createElement(m,{breadcrumb:a[i-2],withBackIcon:!0}))):n.createElement("nav",{"aria-label":"breadcrumb"},n.createElement("ol",{className:"breadcrumb m-0 p-0"},a.map((function(e,a){return n.createElement(m,{key:a,breadcrumb:e})}))))},u=n.memo((function(e){var a=e.numItems,t=void 0===a?3:a;return(0,c.a)(r.r.XS)?n.createElement("div",{className:"partial-loading-background",style:{height:"1.3125rem",width:"6rem"}}):n.createElement("nav",{"aria-label":"breadcrumb"},n.createElement("ol",{className:"breadcrumb m-0 p-0"},l.u.getPartialLoadingItems({numItems:t}).map((function(e,a){var t=e.width;return n.createElement("li",{key:a,className:"breadcrumb-item"},n.createElement("span",{className:"d-inline-block partial-loading-background",style:{width:t},dangerouslySetInnerHTML:{__html:" "}}))}))))}))},74696:(e,a,t)=>{t.d(a,{S:()=>o});var n=t(32735),i=t(68050),r=t(69111),c=t(9977),l=t(79967);const s={partialOptions:"Gufgq",partialName:"SicQQ",partialDescription:"dPGMq",partialThumbnail:"vZrnb",partialDragHandle:"iq73R"};function o(e){return n.createElement("div",{className:"mx-2"},Array(e.numVideos).fill(null).map((function(a,t){return n.createElement("div",{className:"d-flex",key:t},e.allowBulkActions&&n.createElement("div",{className:"form-check pe-3 pe-sm-2 mx-0 mx-md-2"}),n.createElement(m,Object.assign({},e)))})))}function m(e){var a=(0,l.k)(),t="sm"===c.O.getSize(a,"md"),o=e.withReordering&&!a.xs;return n.createElement(i.Z,{className:"".concat(t?"":"py-2"," flex-grow-1")},n.createElement(r.Z,Object.assign({},c.O.getThumbnailColumns(),{className:"flex-column align-items-flex-start ".concat(t?"pb-2 pe-1":"mb-1 pe-3 pe-md-2")}),n.createElement(i.Z,null,!!o&&n.createElement("div",{className:"d-flex align-items-center justify-content-center col-2"},n.createElement("div",{className:"partial-loading-background ".concat(s.partialDragHandle)})),n.createElement(r.Z,{xs:c.O.getThumbnailColSize(o)},n.createElement("div",{className:"partial-loading-background ".concat(t?"rounded":"rounded-3"," ").concat(s.partialThumbnail)})))),n.createElement(r.Z,Object.assign({},c.O.getDetailsColumns(),{className:t?"pb-2":"px-2"}),n.createElement("div",{className:"partial-loading-background mb-1 ".concat(s.partialName)}),n.createElement("div",{className:"partial-loading-background ".concat(s.partialDescription)})))}o.defaultProps={numVideos:15}},5859:(e,a,t)=>{function n(e,a){(null==a||a>e.length)&&(a=e.length);for(var t=0,n=new Array(a);t<a;t++)n[t]=e[t];return n}t.d(a,{u:()=>r});var i={numItems:5,minWidth:50,maxWidth:100},r={getPartialLoadingItems:function(){var e,a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=Object.assign(Object.assign({},i),a);return(e=Array(t.numItems),function(e){if(Array.isArray(e))return n(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,a){if(e){if("string"==typeof e)return n(e,a);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?n(e,a):void 0}}(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.")}()).map((function(){return{width:"".concat(Math.max(Math.floor(Math.random()*t.maxWidth),t.minWidth),"px")}}))}}},44110:(e,a,t)=>{t.d(a,{i:()=>c});var n=t(20354),i=t(89454),r=t(86698),c=function(){var e=(0,r.y)({redirectOnError:!0}),a=e.activePresentation,t=e.getFallbackPresentation,c=a||t();return n.a.useBasicFetch(!!c&&i.O.presentationAudiences(c.id))}},35014:(e,a,t)=>{t.d(a,{I:()=>m});var n=t(20354),i=t(16714),r=t(12754),c=t(39151),l=t(22902),s=t(15311),o=t(11387);function m(){var e=(0,l.T)(),a=e.hasPermissions,t=e.hasLocalPermissions,m=(0,s.r)().hasProduct,d=n.a.useBasicFetch(c.L.config()),u=m(r.x.Primary);return{canWatchPublicly:function(e){var a,t;return!!e&&!!(null===(t=null===(a=d.data)||void 0===a?void 0:a.allowedPublicVideos)||void 0===t?void 0:t[e])},canViewGlance:a(i.C.ViewVideoGlance),canViewResources:!0,canViewInteractives:u&&a(i.C.ViewVideoInteractives),canViewClips:u&&a(i.C.ViewVideoClips),canViewCurriculumLinks:a(i.C.ViewCurriculums),canUseActions:t(i.E.UseVideoActions),canViewPublicLayout:!t(i.E.WatchVideos)&&o.C.hasRegionPrefix(),canViewResourceItems:t(i.E.ViewVideoResourceItems),canNavigate:u}}},33915:(e,a,t)=>{t.r(a),t.d(a,{VideoInteractivesView:()=>L});var n=t(32735),i=t(81886),r=t(23481),c=t(20354),l=t(28400),s=t(65858),o=t(49935),m=t(13231),d=t(51365),u=t(183),p=t(39151),v=t(1666),b=t(31949),g=t(1575),f=t(22902),h=t(14070),E=t(97291),y=t(10671),V=t(27638),w=t(44110),k=t(35014),N=t(10741),I=t(22490),O=t(16747),x=t(98620),C=t(82431),A=r.T.encloseNamespace("shared.videoMedia");function L(e){var a,t,r,L,P,S=e.videoId,j=(0,V.u)(s.LZ.VideoThumbnail),F=j.setFavourite,T=j.canFavourite,R=(0,y._)({location:y.i.VideoItem}),_=(0,k.I)(),B=c.a.useBasicFetch(b.N.currentUser()),D=c.a.useBasicFetch(B.data.isAuthenticated&&v.h.yearGroups(B.data.customerId)),M=c.a.useBasicFetch(g.R.video(S,null,B.data.id)),W=null===(t=null===(a=M.data)||void 0===a?void 0:a.interactives)||void 0===t?void 0:t.data,Z=(null==W?void 0:W.length)||0,G=c.a.useBasicFetch(p.L.config()),$="".concat(A("interactivesHeading")," (").concat(Z||"",")"),H=(0,w.i)(),Q=(0,f.T)().hasPermissions,U=[{name:null===(r=M.data)||void 0===r?void 0:r.name,appLink:Object.assign(Object.assign({},x.Y.playVideo),{args:[S,l.m.slugify(null===(L=M.data)||void 0===L?void 0:L.name)]})},{name:$,appLink:{application:E.O.VIDEOS,action:h.e.Videos.VIDEO_INTERACTIVES,args:[S]},active:!0}];return n.useEffect((function(){_.canViewInteractives||function(){var e;i.Q.C$.trigger(Object.assign(Object.assign({},x.Y.playVideo),{args:[S,l.m.slugify(null===(e=M.data)||void 0===e?void 0:e.name)]}),{replace:!0})}()}),[_.canViewInteractives]),M.data&&(null==W?void 0:W.length)&&G.hasCompleted?n.createElement(d.M.Provider,{value:R},n.createElement("div",{className:"px-3"},n.createElement("h1",{className:"h2 mb-2"},$),n.createElement("div",{className:"mb-2"},n.createElement(o.Oo,{breadcrumbs:U})),n.createElement(m.E4,{videos:W,yearGroups:D.data,getVideoAppLink:function(a,t){return I.W.getAppLink(a,Object.assign(Object.assign({},t),{context:u.Q.Widget,contextId:e.videoId}))},hasPermissions:Q,getSubTextAppLink:function(e){return C.j.getSeriesAppLink(e.series)},setFavourite:F,canFavourite:T,presentationAudiences:H.data,getPreviewQuestionsAppLink:function(e){return N.j.getPreviewQuestionsAppLink(e)},imageCdnUrl:null===(P=G.data)||void 0===P?void 0:P.imageCdnUrl}))):n.createElement(O.l,null)}},98620:(e,a,t)=>{t.d(a,{Y:()=>r});var n=t(14070),i=t(97291),r={playVideo:{application:i.O.VIDEOS,action:n.e.Videos.PLAY_VIDEO},playClip:{application:i.O.CLIPS,action:n.e.Clips.PLAY_CLIP}}},16747:(e,a,t)=>{t.d(a,{l:()=>l});var n=t(32735),i=t(49935),r=t(74696);const c={partialHeading:"okxfx"};function l(){return n.createElement("div",{className:"px-3"},n.createElement("div",{className:"partial-loading-background mb-2 ".concat(c.partialHeading)}),n.createElement("div",{className:"mb-2"},n.createElement(i.b2,null)),n.createElement(r.S,null))}},68050:(e,a,t)=>{t.d(a,{Z:()=>o});var n=t(95685),i=t.n(n),r=t(32735),c=t(46304),l=t(74512);const s=r.forwardRef((({bsPrefix:e,className:a,as:t="div",...n},r)=>{const s=(0,c.vE)(e,"row"),o=(0,c.pi)(),m=(0,c.zG)(),d=`${s}-cols`,u=[];return o.forEach((e=>{const a=n[e];let t;delete n[e],null!=a&&"object"==typeof a?({cols:t}=a):t=a;const i=e!==m?`-${e}`:"";null!=t&&u.push(`${d}${i}-${t}`)})),(0,l.jsx)(t,{ref:r,...n,className:i()(a,s,...u)})}));s.displayName="Row";const o=s}}]);
|
|
2
|
+
//# sourceMappingURL=1539-df427c5b98-lite.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/1539-df427c5b98-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/breadcrumbs/Breadcrumbs.tsx","file:///app/packages/libs/shared/src/components/video-list/partial-loading/partial-video-list.scss","file:///app/packages/libs/shared/src/components/video-list/partial-loading/PartialVideoList.tsx","file:///app/packages/libs/shared/src/utils/PartialLoadingHelper.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/views/video-media/VideoInteractivesView.tsx","file:///app/packages/projects/lite/src/shared/views/video-media/VideoMediaAppLinks.ts","file:///app/packages/projects/lite/src/shared/views/video-media/partial-loading/partial-video-media-view.scss","file:///app/packages/projects/lite/src/shared/views/video-media/partial-loading/PartialVideoMediaView.tsx","file:///app/node_modules/react-bootstrap/esm/Row.js"],"sourcesContent":["import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { PartialLoadingHelper } from 'libs/shared/utils/PartialLoadingHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { SvgContainer, SvgContainerSize } from '../svg-container/SvgContainer';\n\nexport interface Breadcrumb {\n name: string;\n appLink?: Core.AppLink;\n active?: boolean;\n}\n\ninterface BreadcrumbItemProps {\n breadcrumb: Breadcrumb;\n withBackIcon?: boolean;\n}\n\nexport const BreadcrumbItem = ({ breadcrumb: { name, appLink, active }, withBackIcon }: BreadcrumbItemProps) => (\n <li className={`breadcrumb-item${active ? ' active' : ''}`}>\n {active\n ? <strong>{name}</strong>\n : <AppLink appLink={appLink}>\n {withBackIcon && <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Small} />}\n <span className={withBackIcon ? 'ms-2' : ''}>{name}</span>\n </AppLink>\n }\n </li>\n);\n\ninterface BreadcrumbsProps {\n breadcrumbs: Breadcrumb[];\n}\n\nexport const Breadcrumbs = ({ breadcrumbs }: BreadcrumbsProps) => {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n const length = breadcrumbs?.length;\n\n if (!length || (isMobile && length < 2))\n return <></>;\n\n if (isMobile)\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} withBackIcon />\n </ol>\n </nav>\n );\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {breadcrumbs.map((b, idx) => <BreadcrumbItem key={idx} breadcrumb={b} />)}\n </ol>\n </nav>\n );\n};\n\nexport const PartialBreadcrumbs = React.memo(function({ numItems = 3 }: { numItems?: number; }) {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n if (isMobile) {\n return (\n <div className='partial-loading-background' style={{ height: '1.3125rem', width: '6rem' }} />\n );\n }\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {PartialLoadingHelper.getPartialLoadingItems({ numItems }).map(({ width }, idx) => (\n <li key={idx} className='breadcrumb-item'>\n <span className='d-inline-block partial-loading-background' style={{ width }} dangerouslySetInnerHTML={{ __html: ' ' }} />\n </li>\n ))}\n </ol>\n </nav>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"partialOptions\":\"Gufgq\",\"partialName\":\"SicQQ\",\"partialDescription\":\"dPGMq\",\"partialThumbnail\":\"vZrnb\",\"partialDragHandle\":\"iq73R\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { VideoListHelper } from 'libs/shared/components/video-list/VideoListHelper';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport styles from './partial-video-list.scss';\n\ninterface PartialVideoListProps {\n withReordering?: boolean;\n numVideos?: number;\n allowBulkActions?: boolean;\n}\n\nPartialVideoList.defaultProps = {\n numVideos: 15\n};\n\nexport function PartialVideoList(props: PartialVideoListProps): JSX.Element {\n return (\n <div className='mx-2'>\n {Array(props.numVideos).fill(null).map((_, i) => (\n <div className='d-flex' key={i}>\n {props.allowBulkActions && <div className='form-check pe-3 pe-sm-2 mx-0 mx-md-2' />}\n <PartialVideoItem {...props} />\n </div>\n ))}\n </div>\n );\n}\n\nexport function PartialVideoItem(props: PartialVideoListProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n const size = VideoListHelper.getSize(breakpoints, 'md');\n const isSmall = size === 'sm';\n\n const withDragHandle = props.withReordering && !breakpoints.xs;\n\n return (\n <Row className={`${isSmall ? '' : 'py-2'} flex-grow-1`}>\n <Col {...VideoListHelper.getThumbnailColumns()} className={`flex-column align-items-flex-start ${isSmall ? `pb-2 pe-1` : 'mb-1 pe-3 pe-md-2'}`}>\n <Row>\n {!!withDragHandle && (\n <div className='d-flex align-items-center justify-content-center col-2'>\n <div className={`partial-loading-background ${styles.partialDragHandle}`} />\n </div>\n )}\n <Col xs={VideoListHelper.getThumbnailColSize(withDragHandle)}>\n <div className={`partial-loading-background ${isSmall ? 'rounded' : 'rounded-3'} ${styles.partialThumbnail}`} />\n </Col>\n </Row>\n </Col>\n <Col {...VideoListHelper.getDetailsColumns()} className={isSmall ? 'pb-2' : 'px-2'}>\n <div className={`partial-loading-background mb-1 ${styles.partialName}`} />\n <div className={`partial-loading-background ${styles.partialDescription}`} />\n </Col>\n </Row>\n );\n}\n\n","const DEFAULT_PARTIAL_LOADING_OPTIONS: PartialLoadingOptions = {\n numItems: 5,\n minWidth: 50, // px\n maxWidth: 100 // px\n};\n\nexport interface PartialLoadingOptions {\n numItems?: number;\n minWidth?: number;\n maxWidth?: number;\n}\n\ninterface PartialLoadingItem {\n width: string;\n}\n\nexport const PartialLoadingHelper = {\n getPartialLoadingItems(options: PartialLoadingOptions = {}): PartialLoadingItem[] {\n const opts = {\n ...DEFAULT_PARTIAL_LOADING_OPTIONS,\n ...options\n };\n\n const getRandomFilterWidth = () => Math.max(Math.floor(Math.random() * opts.maxWidth), opts.minWidth);\n\n return [...Array(opts.numItems)].map(() => ({ width: `${getRandomFilterWidth()}px` }));\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 { Flight } from 'libs/common/react/index';\n\nimport { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\nimport { Config } from 'libs/shared/interfaces/models/Config';\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 canWatchPublicly: (videoId: string) => boolean;\n}\n\nexport function useVideoFeatureAccess() {\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n const { hasProduct } = useProducts();\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\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 /**\n * Publicly available video ids are maintained on the backend config. \n */\n function canWatchPublicly(videoId: string): boolean {\n if (!videoId)\n return false;\n\n return !!config.data?.allowedPublicVideos?.[videoId];\n }\n\n return {\n canWatchPublicly,\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 React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { Breadcrumb, Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { RelatedVideosContext } from 'libs/shared/enums/RelatedVideosContext';\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 { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { Config, CurrentUser, Video, YearGroup } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { usePresentationAudiences } from 'shared/hooks/usePresentationAudiences';\nimport { useVideoFeatureAccess } from 'shared/hooks/useVideoFeatureAccess';\nimport { InteractiveHelpers } from 'shared/utils/InteractiveHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\nimport { PartialVideoMediaView } from 'shared/views/video-media/partial-loading/PartialVideoMediaView';\nimport { VideoMediaAppLinks } from 'shared/views/video-media/VideoMediaAppLinks';\n\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nconst namespace = 'shared.videoMedia';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface VideoInteractivesViewProps {\n videoId: string;\n}\n\nexport function VideoInteractivesView(props: VideoInteractivesViewProps): JSX.Element {\n const { videoId } = props;\n const { setFavourite, canFavourite } = useLiteFavourites(LocationContext.VideoThumbnail);\n \n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem });\n const featureAccess = useVideoFeatureAccess();\n\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 const video = Flight.useBasicFetch<Video>(\n VideoRequests.video(videoId, null, currentUser.data.id)\n );\n const content = video.data?.interactives?.data;\n const count = content?.length || 0;\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const title = `${getPhrase('interactivesHeading')} (${count || ''})`;\n\n const audiences = usePresentationAudiences();\n const { hasPermissions } = usePermissions();\n\n const breadcrumbs: Breadcrumb[] = [{\n name: video.data?.name,\n appLink: {\n ...VideoMediaAppLinks.playVideo,\n args: [ videoId, TextHelper.slugify(video.data?.name) ]\n }\n }, {\n name: title,\n appLink: {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.VIDEO_INTERACTIVES,\n args: [videoId]\n },\n active: true\n }];\n\n function redirectToPlaypage(): void {\n Core.AppLinkHelper.trigger({\n ...VideoMediaAppLinks.playVideo,\n args: [ videoId, TextHelper.slugify(video.data?.name) ]\n }, { replace: true });\n }\n\n React.useEffect(() => {\n if (!featureAccess.canViewInteractives) {\n redirectToPlaypage();\n }\n }, [featureAccess.canViewInteractives]);\n\n if (!video.data || !content?.length || !config.hasCompleted)\n return <PartialVideoMediaView />;\n\n return (\n <VideoActionsContext.Provider value={videoActions}>\n <div className='px-3'>\n <h1 className='h2 mb-2'>{title}</h1>\n \n <div className='mb-2'>\n <Breadcrumbs breadcrumbs={breadcrumbs}/>\n </div>\n\n <VideoList\n videos={content}\n yearGroups={yearGroups.data}\n getVideoAppLink={(video, opts) => VideoAppLinkHelper.getAppLink(video, {\n ...opts,\n context: RelatedVideosContext.Widget,\n contextId: props.videoId\n })}\n hasPermissions={hasPermissions}\n getSubTextAppLink={video => SeriesAppLinkHelper.getSeriesAppLink(video.series)}\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n presentationAudiences={audiences.data}\n getPreviewQuestionsAppLink={interactive => InteractiveHelpers.getPreviewQuestionsAppLink(interactive)}\n imageCdnUrl={config.data?.imageCdnUrl}\n />\n </div>\n </VideoActionsContext.Provider>\n );\n}","\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nexport const VideoMediaAppLinks = {\n playVideo: {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO\n },\n playClip: {\n application: AppChannels.CLIPS,\n action: Actions.Clips.PLAY_CLIP\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"partialHeading\":\"okxfx\"};","import React from 'react';\n\nimport { PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\n\nimport styles from './partial-video-media-view.scss';\n\nexport function PartialVideoMediaView(): JSX.Element {\n return (\n <div className='px-3'>\n <div className={`partial-loading-background mb-2 ${styles.partialHeading}`} />\n <div className='mb-2'>\n <PartialBreadcrumbs/>\n </div>\n <PartialVideoList />\n </div>\n );\n}","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useBootstrapPrefix, useBootstrapBreakpoints, useBootstrapMinBreakpoint } from './ThemeProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst Row = /*#__PURE__*/React.forwardRef(({\n bsPrefix,\n className,\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'div',\n ...props\n}, ref) => {\n const decoratedBsPrefix = useBootstrapPrefix(bsPrefix, 'row');\n const breakpoints = useBootstrapBreakpoints();\n const minBreakpoint = useBootstrapMinBreakpoint();\n const sizePrefix = `${decoratedBsPrefix}-cols`;\n const classes = [];\n breakpoints.forEach(brkPoint => {\n const propValue = props[brkPoint];\n delete props[brkPoint];\n let cols;\n if (propValue != null && typeof propValue === 'object') {\n ({\n cols\n } = propValue);\n } else {\n cols = propValue;\n }\n const infix = brkPoint !== minBreakpoint ? `-${brkPoint}` : '';\n if (cols != null) classes.push(`${sizePrefix}${infix}-${cols}`);\n });\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: classNames(className, decoratedBsPrefix, ...classes)\n });\n});\nRow.displayName = 'Row';\nexport default Row;"],"names":["BreadcrumbItem","breadcrumb","name","appLink","active","withBackIcon","className","svgName","size","S","Breadcrumbs","breadcrumbs","isMobile","length","map","b","idx","key","PartialBreadcrumbs","numItems","style","height","width","dangerouslySetInnerHTML","__html","PartialVideoList","props","Array","numVideos","fill","_","i","allowBulkActions","PartialVideoItem","breakpoints","useBreakpoints","isSmall","VideoListHelper","withDragHandle","withReordering","xs","Row","Col","defaultProps","DEFAULT_PARTIAL_LOADING_OPTIONS","minWidth","maxWidth","PartialLoadingHelper","getPartialLoadingItems","options","opts","Math","max","floor","random","usePresentationAudiences","redirectOnError","activePresentation","getFallbackPresentation","presentation","id","useVideoFeatureAccess","hasPermissions","hasLocalPermissions","hasProduct","config","hasNP","canWatchPublicly","videoId","data","allowedPublicVideos","canViewGlance","canViewResources","canViewInteractives","canViewClips","canViewCurriculumLinks","canUseActions","canViewPublicLayout","canViewResourceItems","canNavigate","getPhrase","VideoInteractivesView","u","setFavourite","canFavourite","videoActions","location","featureAccess","currentUser","yearGroups","isAuthenticated","customerId","video","content","interactives","count","title","audiences","args","application","action","replace","redirectToPlaypage","hasCompleted","value","videos","getVideoAppLink","context","contextId","getSubTextAppLink","series","presentationAudiences","getPreviewQuestionsAppLink","interactive","imageCdnUrl","VideoMediaAppLinks","playVideo","playClip","PartialVideoMediaView","bsPrefix","as","Component","ref","decoratedBsPrefix","minBreakpoint","sizePrefix","classes","forEach","brkPoint","propValue","cols","infix","push","displayName"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[194],{93978:(e,a,t)=>{t.r(a),t.d(a,{PlaySharedVideoView:()=>B});var d=t(32735),i=t(20354),s=t(65858),n=t(16714),c=t(89454),r=t(39151),o=t(1666),l=t(28907),u=t(31949),v=t(1575),m=t(27995),h=t(22902),p=t(79612),I=t(76753),g=t(3042),y=t(82817),C=t(7179),P=t(49948),F=t(36873),V=t(27638),b=t(86698),k=t(35014),f=t(97816),x=t(33192),w=t(16857);function B(e){var a,t,B,q,j,A,L,M,T=(0,V.u)(s.LZ.VideoThumbnail),U=T.setFavourite,G=T.canFavourite,N=(0,h.T)().hasPermissions,_=(0,b.y)().activePresentation,E=i.a.useBasicFetch(u.N.currentUser()),O=i.a.useBasicFetch(v.R.sharedVideo(e.objectId,e.shareId,E.data.id)),S=i.a.useBasicFetch(r.L.config()),R=(0,F.k)({video:O.data,context:e.queryParams.context,contextId:e.queryParams.contextId,moviesAndTv:e.queryParams.mtv,currentUser:E.data}),Z=(0,P.l)(e.objectId),z=i.a.useBasicFetch((null===(t=null===(a=O.data)||void 0===a?void 0:a.glance)||void 0===t?void 0:t.theme)?l.r.themeImages(O.data.glance.theme,O.data.glance.type):null),D=i.a.useBasicFetch(!!_&&c.O.audiencesByPresentationId(_.id)),H=i.a.useBasicFetch((null===(B=E.data)||void 0===B?void 0:B.isAuthenticated)&&o.h.yearGroups(E.data.customerId)),J=N(n.C.ViewVideoGlance)&&(null===(j=null===(q=O.data)||void 0===q?void 0:q.glance)||void 0===j?void 0:j.theme);(0,p.M)(I.CG.getVideoMetadata({content:O.data,canonicalLink:x.f.getCanonicalLink({stripPresentationSlug:!0}),allowIndexing:!1})),(0,f.V)(null!==(A=R.videos)&&void 0!==A?A:[]),(0,m.b)(O,{private:w.m}),(0,C.P)({id:e.objectId,app:"videos",shareId:e.shareId});var K=(0,y.M)(e.objectId),Q=O.data&&E.hasCompleted&&S.hasCompleted&&Z.hasCompleted,W=(0,k.I)();return Q?d.createElement("div",{className:"px-3"},d.createElement(g.j,{video:O.data,yearGroups:H.data,curriculums:K,imageCdnUrl:S.data.imageCdnUrl,relatedVideos:R,currentUser:E.data,setFavourite:U,canFavourite:G,pointsOfInterest:null==Z?void 0:Z.items,playNext:null===(L=e.queryParams)||void 0===L?void 0:L.playNext,shareId:e.shareId,glanceTheme:z.data,glanceLoaded:!J||z.hasCompleted,featureAccess:W,audiences:D.data,params:e.queryParams,canManageVideoAccess:N(n.C.ManageVideoAccess),tableOfContentsId:null===(M=e.queryParams)||void 0===M?void 0:M.scrollTo})):d.createElement(d.Fragment,null)}}}]);
|
|
2
|
+
//# sourceMappingURL=194-918a27a783-lite.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/194-918a27a783-lite.chunk.js","mappings":"+aAiCM,SAAUA,EAAoBC,G,oBAClC,GAAuC,IAAAC,GAAkB,qBAAjDC,EAAY,EAAZA,aAAcC,EAAY,EAAZA,aAEdC,GAAmB,SAAnBA,eAGNC,GACE,SADFA,mBAGIC,EAAc,kBAAkC,mBAChDC,EAAQ,kBACZ,gBAA0BP,EAAMQ,SAAUR,EAAMS,QAASH,EAAYI,KAAKC,KAEtEC,EAAS,kBAA6B,cACtCC,GAAgB,OAAoB,CACxCN,MAAOA,EAAMG,KACbI,QAASd,EAAMe,YAAYD,QAC3BE,UAAWhB,EAAMe,YAAYC,UAC7BC,YAAajB,EAAMe,YAAYG,IAC/BZ,YAAaA,EAAYI,OAErBS,GAAmB,OAAyBnB,EAAMQ,UAClDY,EAAc,mBAA8C,QAAlB,EAAU,QAAV,EAAAb,EAAMG,YAAI,eAAEW,cAAM,eAAEC,OAChE,gBAA0Bf,EAAMG,KAAKW,OAAOC,MAAOf,EAAMG,KAAKW,OAAOE,MAAQ,MAC3EC,EAAY,oBACdnB,GACF,8BAA2CA,EAAmBM,KAE1Dc,EAAa,mBACD,QAAhB,EAAAnB,EAAYI,YAAI,eAAEgB,kBAAmB,eAA4BpB,EAAYI,KAAKiB,aAG9EC,EAAmBxB,EAAe,uBACpB,QAAlB,EAAU,QAAV,EAAAG,EAAMG,YAAI,eAAEW,cAAM,eAAEC,QAEtB,OAAmB,sBAAoC,CACrDO,QAAStB,EAAMG,KACfoB,cAAe,qBAA2B,CAAEC,uBAAuB,IACnEC,eAAe,MAGjB,OAAkC,QAApB,EAAAnB,EAAcoB,cAAM,QAAI,KACtC,OAAsB1B,EAAO,CAAE2B,QAAS,OACxC,OAAa,CAAEvB,GAAIX,EAAMQ,SAAU2B,IAAK,SAAU1B,QAAST,EAAMS,UAEjE,IAAM2B,GAAc,OAAepC,EAAMQ,UAEnC6B,EACJ9B,EAAMG,MACNJ,EAAYgC,cACZ1B,EAAO0B,cACPnB,EAAiBmB,aAGbC,GAAgB,SAEtB,OAAKF,EAIH,uBAAKG,UAAU,QACb,gBAAC,IAAQ,CACPjC,MAAOA,EAAMG,KACbe,WAAYA,EAAWf,KACvB0B,YAAaA,EACbK,YAAa7B,EAAOF,KAAK+B,YACzB5B,cAAeA,EACfP,YAAaA,EAAYI,KACzBR,aAAcA,EACdC,aAAcA,EACdgB,iBAAkBA,aAAgB,EAAhBA,EAAkBuB,MACpCC,SAA2B,QAAjB,EAAA3C,EAAMe,mBAAW,eAAE4B,SAC7BlC,QAAST,EAAMS,QACfW,YAAaA,EAAYV,KACzBkC,cAAehB,GAAoBR,EAAYkB,aAC/CC,cAAeA,EACff,UAAWA,EAAUd,KACrBmC,OAAQ7C,EAAMe,YACd+B,qBAAsB1C,EAAe,uBACrC2C,kBAAoC,QAAjB,EAAA/C,EAAMe,mBAAW,eAAEiC,YAtBnC,gCA0BX,C","sources":["file:///app/packages/projects/lite/src/apps/share/views/play-shared-video/PlaySharedVideoView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { ThemeRequests } from 'libs/shared/flight-requests/ThemeRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, CurrentUser, PresentationAudience, Theme, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { PlayPage } from 'shared/components/play-page/PlayPage';\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 { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { usePresentation } from 'shared/hooks/usePresentation';\nimport { useVideoFeatureAccess } from 'shared/hooks/useVideoFeatureAccess';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\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 { setFavourite, canFavourite } = useLiteFavourites(LocationContext.VideoThumbnail);\n\n const { hasPermissions } = usePermissions();\n\n const {\n activePresentation\n } = usePresentation();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<Video>(\n VideoRequests.sharedVideo(props.objectId, props.shareId, currentUser.data.id)\n );\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\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 const glanceTheme = Flight.useBasicFetch<Theme>(video.data?.glance?.theme\n ? ThemeRequests.themeImages(video.data.glance.theme, video.data.glance.type) : null);\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n !!activePresentation &&\n AudienceRequests.audiencesByPresentationId(activePresentation.id)\n );\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const shouldFetchTheme = hasPermissions(PermissionName.ViewVideoGlance) &&\n video.data?.glance?.theme;\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 curriculums = useCurriculums(props.objectId);\n\n const dataLoaded = (\n video.data &&\n currentUser.hasCompleted &&\n config.hasCompleted &&\n pointsOfInterest.hasCompleted\n );\n\n const featureAccess = useVideoFeatureAccess();\n\n if (!dataLoaded)\n return <></>;\n\n return (\n <div className='px-3'>\n <PlayPage\n video={video.data}\n yearGroups={yearGroups.data}\n curriculums={curriculums}\n imageCdnUrl={config.data.imageCdnUrl}\n relatedVideos={relatedVideos}\n currentUser={currentUser.data}\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n pointsOfInterest={pointsOfInterest?.items}\n playNext={props.queryParams?.playNext}\n shareId={props.shareId}\n glanceTheme={glanceTheme.data}\n glanceLoaded={!shouldFetchTheme || glanceTheme.hasCompleted}\n featureAccess={featureAccess}\n audiences={audiences.data}\n params={props.queryParams}\n canManageVideoAccess={hasPermissions(PermissionName.ManageVideoAccess)}\n tableOfContentsId={props.queryParams?.scrollTo}\n />\n </div>\n );\n}"],"names":["PlaySharedVideoView","props","u","setFavourite","canFavourite","hasPermissions","activePresentation","currentUser","video","objectId","shareId","data","id","config","relatedVideos","context","queryParams","contextId","moviesAndTv","mtv","pointsOfInterest","glanceTheme","glance","theme","type","audiences","yearGroups","isAuthenticated","customerId","shouldFetchTheme","content","canonicalLink","stripPresentationSlug","allowIndexing","videos","private","app","curriculums","dataLoaded","hasCompleted","featureAccess","className","imageCdnUrl","items","playNext","glanceLoaded","params","canManageVideoAccess","tableOfContentsId","scrollTo"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3042],{1353:(e,t,n)=>{n.d(t,{$:()=>o});var r=n(32735),a=n(11607),i=n(54610),c=n(67453),l=n(22161);function o(e){var t=e.data;return r.createElement(a.L,{key:t.id,className:"p-1 pe-2 rounded-pill d-inline-flex align-items-center cursor-pointer ".concat(l.Z.tag," ").concat(e.selected?l.Z.selected:""),onClick:function(){return e.onChangeCurriculum(t.id.toString())}},r.createElement("div",{className:"bg-white ".concat(l.Z.cover," rounded-circle border")},r.createElement("img",{src:c.j.createUrl(t.cover.url,{size:i.h2.Small}),alt:t.name,className:"rounded-circle"})),r.createElement("div",{className:"ms-2"},t.name))}},45261:(e,t,n)=>{n.d(t,{h:()=>S});var r,a=n(32735),i=n(44599),c=n(83345);!function(e){e.Subject="CurriculumSubject",e.Audience="CurriculumAudience",e.Area="CurriculumArea",e.Leaf="CurriculumLeaf"}(r||(r={}));var l=n(23481),o=n(23232),u="shared.curriculumLinks",s=l.T.encloseNamespace(u);function d(e){return a.createElement(o.u,{className:"pt-3"},a.createElement(o.u.Image,{src:e.emptyStateUrl,altText:s("emptyInfo"),size:"small"}),a.createElement(o.u.Heading,null,a.createElement(c.x,{namespace:u,phrase:"emptyHeading"})),a.createElement(o.u.Info,null,a.createElement(c.x,{namespace:u,phrase:"emptyInfo"})))}var m=n(22161);function v(e){return v="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},v(e)}function p(e,t,n){var r;return r=function(e,t){if("object"!=v(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=v(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(t),(t="symbol"==v(r)?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var y=/(.*)\s\((.*)?\)/i,h="shared.curriculumLinks",g="text-nowrap font-size-normal rounded-pill py-1 px-2 my-0 d-inline-block";function b(e){function t(){var t=g+" bg-white border";return!e.leaf.name&&e.uiContainsCodes?t+" border-secondary text-secondary":t+" border-dark"}var n=a.useRef();return a.useEffect((function(){if(n.current){var t=n.current.getBoundingClientRect().width;e.trySetMaxCodeWidth(t)}}),[n.current]),a.createElement("div",{className:"d-flex"},e.leaf.description?!e.leaf.name&&e.uiContainsCodes?a.createElement(a.Fragment,null,a.createElement("div",{className:"me-1 align-self-start",style:{minWidth:e.codeWidth?"".concat(e.codeWidth,"px"):"auto"}},a.createElement("h5",{ref:n,className:t()},a.createElement(c.x,{namespace:h,phrase:"noCode"}))),a.createElement("p",{className:"m-0 align-self-center",dangerouslySetInnerHTML:{__html:e.leaf.description}})):e.leaf.name||e.uiContainsCodes?a.createElement(a.Fragment,null,a.createElement("div",{className:"me-1 align-self-start",style:{minWidth:e.codeWidth?"".concat(e.codeWidth,"px"):"auto"}},a.createElement("h5",{ref:n,className:t()},e.leaf.name)),a.createElement("p",{className:"m-0 align-self-center",dangerouslySetInnerHTML:{__html:e.leaf.description}})):a.createElement("p",{className:"m-0",dangerouslySetInnerHTML:{__html:e.leaf.description}}):a.createElement("p",{className:"m-0",dangerouslySetInnerHTML:{__html:e.leaf.name}}))}function E(e){var t,n,i,c={},l=!1;function o(e){var t="mb-2";return e.name||l?t:t+" ms-4 "+m.Z.leafDescriptionOnly}return e.linkSet.areasAndLeaves.forEach((function(e){var t=e[r.Area].map((function(e){return e.name})).join(" - ");c[t]?e[r.Leaf].forEach((function(e){c[t].push(e),e.name&&(l=!0)})):c[t]=e[r.Leaf]})),a.createElement(a.Fragment,null,a.createElement("h3",{className:"".concat(g," text-white bg-dark-blue fw-normal me-1 mb-2")},(t=e.linkSet[r.Audience].name,n=e.linkSet[r.Subject].name,(i=t.match(y))?"".concat(i[1]," • ").concat(i[2]," • ").concat(n):"".concat(t," • ").concat(n))),a.createElement("div",{className:"me-2 ".concat(m.Z.curriculumSubject)},Object.keys(c).map((function(t,n){return a.createElement("div",{key:n,className:m.Z.areaLeafSet},t&&a.createElement("h4",{className:"mb-1 font-size-normal"},t),a.createElement("ul",{className:"list-unstyled"},c[t].map((function(t){return a.createElement("li",{key:t.id,className:o(t)},a.createElement(b,{leaf:t,codeWidth:e.codeWidth,trySetMaxCodeWidth:e.trySetMaxCodeWidth,uiContainsCodes:l}))}))))}))))}function S(e){var t,n,c,l,o=(c=a.useState(0),l=2,function(e){if(Array.isArray(e))return e}(c)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,c,l=[],o=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;o=!1}else for(;!(o=(r=i.call(n)).done)&&(l.push(r.value),l.length!==t);o=!0);}catch(e){u=!0,a=e}finally{try{if(!o&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(u)throw a}}return l}}(c,l)||function(e,t){if(e){if("string"==typeof e)return f(e,t);var n=Object.prototype.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)?f(e,t):void 0}}(c,l)||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.")}()),u=o[0],s=o[1];function v(e){s((function(t){return t>=e?t:e}))}var y={};return null===(t=e.curriculumLinks)||void 0===t||t.forEach((function(e){var t=null,n=null,a=[],i=[];e.forEach((function(e){switch(e.type){case r.Subject:t=e;break;case r.Audience:n=e;break;case r.Area:a.push(e);break;case r.Leaf:i.push(e)}}));var c="".concat(t.id,":").concat(n.id);y[c]?y[c].areasAndLeaves.push(p(p({},r.Area,a),r.Leaf,i)):y[c]=p(p(p({},r.Subject,t),r.Audience,n),"areasAndLeaves",[p(p({},r.Area,a),r.Leaf,i)])})),e.curriculumLinks?(null===(n=e.curriculumLinks)||void 0===n?void 0:n.length)?a.createElement("ul",{className:"list-unstyled m-0"},Object.keys(y).map((function(e,t){return a.createElement("li",{key:"linkset-".concat(t),className:m.Z.curriculumSet},a.createElement(E,{linkSet:y[e],trySetMaxCodeWidth:v,codeWidth:u}))}))):a.createElement(d,{emptyStateUrl:e.emptyStateUrl}):a.createElement(i.Z,null)}},44599:(e,t,n)=>{n.d(t,{Z:()=>i});var r=n(32735);var a=function(){return r.createElement(r.Fragment,null,r.createElement("div",{className:"partial-loading-background rounded-pill py-1 px-2 d-inline-block me-1 mb-2 ".concat("vDcrq")}),r.createElement("div",null,r.createElement("div",{className:"partial-loading-background mb-1 ".concat("GXhoW")}),r.createElement("div",{className:"mb-2 d-flex"},r.createElement("div",{className:"me-1 align-self-start ".concat("goKaS")},r.createElement("div",{className:"partial-loading-background rounded-pill py-1 px-2 d-inline-block w-100 h-100"})),r.createElement("div",{className:"partial-loading-background ".concat("vFew6")}))))};function i(){return r.createElement("div",null,r.createElement("div",{className:"mb-3"},r.createElement(a,null)),r.createElement("div",{className:"mb-3"},r.createElement(a,null)),r.createElement("div",null,r.createElement(a,null)))}},63112:(e,t,n)=>{n.d(t,{o:()=>i});var r=n(32735),a=n(91807),i=r.memo((function(e){var t=e.tagClass,n="partial-loading-background d-inline-block rounded-pill py-1 px-2 mb-1 me-1 text-nowrap ".concat(void 0===t?"":t," ").concat(a.Z.partialTag);return r.createElement("div",{className:"mt-1"},r.createElement("span",{className:n}," "))}))},65163:(e,t,n)=>{n.d(t,{QL:()=>r.Q,eb:()=>r.e});var r=n(16450);n(14244)},3042:(e,t,n)=>{n.d(t,{j:()=>ee});var r=n(32735),a=n(42029),i=n(83345),c=n(49439);const l={copyrightDisclaimer:"z8YoI",overlayContainer:"eJDbJ"};function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var u="shared.copyrightDisclaimer",s=150;function d(e){var t,n,d,m=(n=(0,c.L)({}),d=2,function(e){if(Array.isArray(e))return e}(n)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,c,l=[],o=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;o=!1}else for(;!(o=(r=i.call(n)).done)&&(l.push(r.value),l.length!==t);o=!0);}catch(e){u=!0,a=e}finally{try{if(!o&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(u)throw a}}return l}}(n,d)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var n=Object.prototype.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}}(n,d)||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.")}()),v=m[0],p=m[1];return r.createElement("div",{ref:v,className:e.className},r.createElement("p",{className:"".concat(l.copyrightDisclaimer," mb-1")},r.createElement(i.x,{namespace:u,phrase:"copyrightDisclaimer"})),r.createElement(a.Z,{target:v.current,show:p,placement:e.overflowPlacement&&document.documentElement.clientHeight-(null===(t=v.current)||void 0===t?void 0:t.getBoundingClientRect().bottom)<s?e.overflowPlacement:e.placement},r.createElement("div",{className:"".concat(l.overlayContainer," mw-100 bg-white border rounded-3 p-2")},r.createElement("p",null,r.createElement(i.x,{namespace:u,phrase:"warning"})),r.createElement("p",{className:"fw-semibold mb-0"},r.createElement(i.x,{namespace:u,phrase:"sharing"})))))}var m=n(42648),v=n(23481),p=n(75896),f=n(49985),y=n(65858),h=n(1353),g=n(63112),b=n(65163),E=n(69883),S=n(44599),A=n(45261);function C(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var k="shared.curriculumLinks",N=v.T.encloseNamespace(k);function L(e){var t,n,a,c=e.curriculums,l=c.hasLoaded,o=c.activeCurriculum,u=c.availableCurriculums,s=c.curriculumLinks,d=c.updateCurriculum,v=(n=r.useState(),a=2,function(e){if(Array.isArray(e))return e}(n)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,c,l=[],o=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;o=!1}else for(;!(o=(r=i.call(n)).done)&&(l.push(r.value),l.length!==t);o=!0);}catch(e){u=!0,a=e}finally{try{if(!o&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(u)throw a}}return l}}(n,a)||function(e,t){if(e){if("string"==typeof e)return C(e,t);var n=Object.prototype.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)?C(e,t):void 0}}(n,a)||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.")}()),L=v[0],I=v[1],w=(0,E.Z)();function x(t){var n,r,a=u.find((function(e){return e.id.toString()===t}));(null==a?void 0:a.id)&&(null===(n=null==L?void 0:L.id)||void 0===n?void 0:n.toString())!==(null===(r=null==a?void 0:a.id)||void 0===r?void 0:r.toString())&&(I(a),d(a,(function(){f.k.logUserAction({id:a.id,name:a.id,description:a.description,videoId:e.video.id,videoName:e.video.name},{entity:y.py.Presentation,actionType:y.Vw.Select,descriptor:y.kD.Curriculum,location:y.LZ.PlayPage})}),(function(){I(L),w.error(N("updateFailed"))})))}return r.useEffect((function(){l&&(L||I(null!=o?o:p.m.first(u)))}),[null==o?void 0:o.id,l]),r.createElement(r.Fragment,null,r.createElement("h2",{className:"h5 me-2 h-100"},r.createElement(i.x,{namespace:k,phrase:"heading"})),r.createElement("div",{className:"mb-2"},r.createElement(b.eb,{collection:(null==L?void 0:L.id)?e.curriculums.nonEmptyCurriculums:null,childClassName:"flex-shrink-0",childComponent:function(e){var t;return r.createElement(h.$,Object.assign({},e,{selected:(null===(t=null==L?void 0:L.id)||void 0===t?void 0:t.toString())===e.data.id.toString(),onChangeCurriculum:x}))},partialLoadingComponent:function(){return r.createElement(g.o,null)},widgetDataDeps:[null===(t=null==L?void 0:L.id)||void 0===t?void 0:t.toString()]})),r.createElement("div",{className:"rounded border mb-3 position-relative"},r.createElement(m.$B,{autoHeight:!0,autoHeightMax:e.height},r.createElement("div",{className:"p-3"},l?r.createElement(A.h,{curriculumLinks:s,emptyStateUrl:e.emptyStateUrl,onChangeCurriculum:x}):r.createElement(S.Z,null)))))}var I=n(21473),w=n(18913),x=n(39347),j=n(49087),T=n(92805),U=n(40178),O=n(71063),R=n(10439),M=n(35429),F=n(4594),V=n(16714),P=n(22902),W=n(9907),G=n(31908),_=n(26492),D=n(91479),Z=n(47938),H=n(81024),B=n(78166),$=n(99742),z=n(14070),Y=n(97291),J=n(22490),K=n(76162),Q=n(31261),X=n(99092),q="shared.playPage";function ee(e){var t,n,a,c,l,o,u,s,m,v,p=(0,M.g)(),f=(0,P.T)().hasPermissions,y=G.M.getCanBeConsumed(e.video).canConsume,h=e.featureAccess.canWatchPublicly(e.video.id),g=G.M.isVideoTypeArchived(e.video),b=f(V.C.StudentExperience),E=r.useRef(null),S=r.useRef(null);(0,W.P)([E.current,S.current],e.tableOfContentsId);var A=r.useRef(!1),C=(0,x.W)(e.video)&&e.featureAccess.canViewGlance,k=(0,X.lU)(),N="picture-in-picture"===p.mode||!h&&e.featureAccess.canViewPublicLayout,ee=!(!e.featureAccess.canViewCurriculumLinks||!e.curriculums.customerHasCurriculumLinks);return r.createElement(i.D.Provider,{value:q},r.createElement(Z.W,{restrictions:e.video._restrictions,yearGroups:e.yearGroups,objectId:e.video.id,objectTypeId:F.E.Video,canManageVideoAccess:e.canManageVideoAccess}),g&&r.createElement(_.T,{typeId:e.video.typeId,hasStudentExperience:b}),r.createElement("section",{className:"mb-2 ".concat(O.M.GLOBAL_PLAYER_SELECTOR)},(y||h)&&r.createElement(R.r,{key:e.video.id,objectId:e.video.id,objectTypeId:e.video.typeId,shareId:e.shareId,context:null===(t=e.params)||void 0===t?void 0:t.context,contextId:null===(n=e.params)||void 0===n?void 0:n.contextId,playNext:null===(a=e.params)||void 0===a?void 0:a.playNext,moviesAndTv:null===(c=e.params)||void 0===c?void 0:c.mtv,startTime:null!==(o=null===(l=e.params)||void 0===l?void 0:l.t)&&void 0!==o?o:null===(u=e.params)||void 0===u?void 0:u.startTime,endTime:null===(s=e.params)||void 0===s?void 0:s.endTime,mode:"default",location:"play-page"}),r.createElement("div",{className:N?"":"d-none"},r.createElement(H.S,{video:e.video,appLink:{application:Y.O.SIGN_UP,action:z.e.SignUp.SIGN_UP},type:"picture-in-picture"===p.mode?"pip":"public"}))),r.createElement(D.v,{media:e.video,yearGroups:e.yearGroups,audiences:e.audiences,getSeriesAppLink:function(t){return k.getSeriesAppLink(t,e.params.mtv)},featureAccess:e.featureAccess,shareId:e.shareId}),C&&r.createElement("section",null,r.createElement(w.o,{video:e.video,pointsOfInterest:e.pointsOfInterest,setStartTime:function(e){var t;return null===(t=p.playerRef.current)||void 0===t?void 0:t.currentTime(e)},getTagAppLink:k.getTagAppLink,suppressInteractivity:e.featureAccess.canViewPublicLayout})),r.createElement(I.M,{containerRef:E,video:e.video,canViewResources:e.featureAccess.canViewResources,imageCdnUrl:e.imageCdnUrl,getAppLink:k.getResourceAppLink(e.video.id,e.shareId,e.featureAccess.canViewResources),analyticsData:{videoId:e.video.id,videoName:e.video.name},resourceThumbnailFallbackUrl:$.W.Fallbacks.RESOURCE_THUMBNAIL}),r.createElement(Q.J,{video:e.video,imageCdnUrl:e.imageCdnUrl,analyticsData:{videoId:e.video.id,videoName:e.video.name},canViewInteractives:e.featureAccess.canViewInteractives,containerRef:S,yearGroups:e.yearGroups,setFavourite:e.setFavourite,canFavourite:e.canFavourite}),ee&&r.createElement("section",null,r.createElement(L,{video:e.video,height:U.x,curriculums:e.curriculums,emptyStateUrl:$.W.EmptyStates.CURRICULUM_LINKS})),e.glanceLoaded?r.createElement("section",null,r.createElement(j.X,{video:e.video,onLaunchImmersiveReader:function(){var e,t,n,r;A.current=!(null===(t=null===(e=null==p?void 0:p.playerRef)||void 0===e?void 0:e.current)||void 0===t?void 0:t.isPaused()),null===(r=null===(n=null==p?void 0:p.playerRef)||void 0===n?void 0:n.current)||void 0===r||r.pause()},onExitImmersiveReader:function(){var e,t;A.current&&(null===(t=null===(e=null==p?void 0:p.playerRef)||void 0===e?void 0:e.current)||void 0===t||t.play())},getTagAppLink:k.getTagAppLink,suppressInteractivity:e.featureAccess.canViewPublicLayout,theme:e.glanceTheme})):r.createElement(T.H,null),G.M.isBroadcast(e.video)&&r.createElement(d,{placement:"bottom-end",className:"d-flex justify-content-end mt-n2"}),r.createElement(K.O,{video:e.video,clips:null!==(v=null===(m=e.video.clips)||void 0===m?void 0:m.data)&&void 0!==v?v:[],canViewClips:e.featureAccess.canViewClips,yearGroups:e.yearGroups,imageCdnUrl:e.imageCdnUrl,setFavourite:e.setFavourite,canFavourite:e.canFavourite,analyticsData:{videoId:e.video.id,videoName:e.video.name}}),r.createElement("section",null,r.createElement(B.Z,{currentVideo:e.video,yearGroups:e.yearGroups,relatedVideos:e.relatedVideos,currentUser:e.currentUser,setFavourite:e.setFavourite,canFavourite:e.canFavourite,getVideoAppLink:function(t,n){return J.W.getAppLink(t,Object.assign(Object.assign({},n),{context:e.params.context,contextId:e.params.contextId,playNext:e.params.playNext,shareId:e.shareId,moviesAndTv:e.params.mtv}))},audiences:e.audiences,moviesAndTv:e.params.mtv})))}},22161:(e,t,n)=>{n.d(t,{Z:()=>r});const r={curriculumSubject:"GvGYH",curriculumSet:"d7RK0",areaLeafSet:"XRTAe",closeButton:"N3l5Q",heading:"hAxR4",leafDescriptionOnly:"h66ke",dropdown:"CsG6G",tag:"rdLqY",cover:"etwaD",active:"aDLMe",selected:"BMrSd"}}}]);
|
|
2
|
-
//# sourceMappingURL=3042-
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3042],{1353:(e,t,n)=>{n.d(t,{$:()=>o});var r=n(32735),a=n(11607),i=n(54610),c=n(67453),l=n(22161);function o(e){var t=e.data;return r.createElement(a.L,{key:t.id,className:"p-1 pe-2 rounded-pill d-inline-flex align-items-center cursor-pointer ".concat(l.Z.tag," ").concat(e.selected?l.Z.selected:""),onClick:function(){return e.onChangeCurriculum(t.id.toString())}},r.createElement("div",{className:"bg-white ".concat(l.Z.cover," rounded-circle border")},r.createElement("img",{src:c.j.createUrl(t.cover.url,{size:i.h2.Small}),alt:t.name,className:"rounded-circle"})),r.createElement("div",{className:"ms-2"},t.name))}},45261:(e,t,n)=>{n.d(t,{h:()=>S});var r,a=n(32735),i=n(44599),c=n(83345);!function(e){e.Subject="CurriculumSubject",e.Audience="CurriculumAudience",e.Area="CurriculumArea",e.Leaf="CurriculumLeaf"}(r||(r={}));var l=n(23481),o=n(23232),u="shared.curriculumLinks",s=l.T.encloseNamespace(u);function d(e){return a.createElement(o.u,{className:"pt-3"},a.createElement(o.u.Image,{src:e.emptyStateUrl,altText:s("emptyInfo"),size:"small"}),a.createElement(o.u.Heading,null,a.createElement(c.x,{namespace:u,phrase:"emptyHeading"})),a.createElement(o.u.Info,null,a.createElement(c.x,{namespace:u,phrase:"emptyInfo"})))}var m=n(22161);function v(e){return v="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},v(e)}function p(e,t,n){var r;return r=function(e,t){if("object"!=v(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=v(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(t),(t="symbol"==v(r)?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var y=/(.*)\s\((.*)?\)/i,h="shared.curriculumLinks",g="text-nowrap font-size-normal rounded-pill py-1 px-2 my-0 d-inline-block";function b(e){function t(){var t=g+" bg-white border";return!e.leaf.name&&e.uiContainsCodes?t+" border-secondary text-secondary":t+" border-dark"}var n=a.useRef();return a.useEffect((function(){if(n.current){var t=n.current.getBoundingClientRect().width;e.trySetMaxCodeWidth(t)}}),[n.current]),a.createElement("div",{className:"d-flex"},e.leaf.description?!e.leaf.name&&e.uiContainsCodes?a.createElement(a.Fragment,null,a.createElement("div",{className:"me-1 align-self-start",style:{minWidth:e.codeWidth?"".concat(e.codeWidth,"px"):"auto"}},a.createElement("h5",{ref:n,className:t()},a.createElement(c.x,{namespace:h,phrase:"noCode"}))),a.createElement("p",{className:"m-0 align-self-center",dangerouslySetInnerHTML:{__html:e.leaf.description}})):e.leaf.name||e.uiContainsCodes?a.createElement(a.Fragment,null,a.createElement("div",{className:"me-1 align-self-start",style:{minWidth:e.codeWidth?"".concat(e.codeWidth,"px"):"auto"}},a.createElement("h5",{ref:n,className:t()},e.leaf.name)),a.createElement("p",{className:"m-0 align-self-center",dangerouslySetInnerHTML:{__html:e.leaf.description}})):a.createElement("p",{className:"m-0",dangerouslySetInnerHTML:{__html:e.leaf.description}}):a.createElement("p",{className:"m-0",dangerouslySetInnerHTML:{__html:e.leaf.name}}))}function E(e){var t,n,i,c={},l=!1;function o(e){var t="mb-2";return e.name||l?t:t+" ms-4 "+m.Z.leafDescriptionOnly}return e.linkSet.areasAndLeaves.forEach((function(e){var t=e[r.Area].map((function(e){return e.name})).join(" - ");c[t]?e[r.Leaf].forEach((function(e){c[t].push(e),e.name&&(l=!0)})):c[t]=e[r.Leaf]})),a.createElement(a.Fragment,null,a.createElement("h3",{className:"".concat(g," text-white bg-dark-blue fw-normal me-1 mb-2")},(t=e.linkSet[r.Audience].name,n=e.linkSet[r.Subject].name,(i=t.match(y))?"".concat(i[1]," • ").concat(i[2]," • ").concat(n):"".concat(t," • ").concat(n))),a.createElement("div",{className:"me-2 ".concat(m.Z.curriculumSubject)},Object.keys(c).map((function(t,n){return a.createElement("div",{key:n,className:m.Z.areaLeafSet},t&&a.createElement("h4",{className:"mb-1 font-size-normal"},t),a.createElement("ul",{className:"list-unstyled"},c[t].map((function(t){return a.createElement("li",{key:t.id,className:o(t)},a.createElement(b,{leaf:t,codeWidth:e.codeWidth,trySetMaxCodeWidth:e.trySetMaxCodeWidth,uiContainsCodes:l}))}))))}))))}function S(e){var t,n,c,l,o=(c=a.useState(0),l=2,function(e){if(Array.isArray(e))return e}(c)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,c,l=[],o=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;o=!1}else for(;!(o=(r=i.call(n)).done)&&(l.push(r.value),l.length!==t);o=!0);}catch(e){u=!0,a=e}finally{try{if(!o&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(u)throw a}}return l}}(c,l)||function(e,t){if(e){if("string"==typeof e)return f(e,t);var n=Object.prototype.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)?f(e,t):void 0}}(c,l)||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.")}()),u=o[0],s=o[1];function v(e){s((function(t){return t>=e?t:e}))}var y={};return null===(t=e.curriculumLinks)||void 0===t||t.forEach((function(e){var t=null,n=null,a=[],i=[];e.forEach((function(e){switch(e.type){case r.Subject:t=e;break;case r.Audience:n=e;break;case r.Area:a.push(e);break;case r.Leaf:i.push(e)}}));var c="".concat(t.id,":").concat(n.id);y[c]?y[c].areasAndLeaves.push(p(p({},r.Area,a),r.Leaf,i)):y[c]=p(p(p({},r.Subject,t),r.Audience,n),"areasAndLeaves",[p(p({},r.Area,a),r.Leaf,i)])})),e.curriculumLinks?(null===(n=e.curriculumLinks)||void 0===n?void 0:n.length)?a.createElement("ul",{className:"list-unstyled m-0"},Object.keys(y).map((function(e,t){return a.createElement("li",{key:"linkset-".concat(t),className:m.Z.curriculumSet},a.createElement(E,{linkSet:y[e],trySetMaxCodeWidth:v,codeWidth:u}))}))):a.createElement(d,{emptyStateUrl:e.emptyStateUrl}):a.createElement(i.Z,null)}},44599:(e,t,n)=>{n.d(t,{Z:()=>i});var r=n(32735);var a=function(){return r.createElement(r.Fragment,null,r.createElement("div",{className:"partial-loading-background rounded-pill py-1 px-2 d-inline-block me-1 mb-2 ".concat("vDcrq")}),r.createElement("div",null,r.createElement("div",{className:"partial-loading-background mb-1 ".concat("GXhoW")}),r.createElement("div",{className:"mb-2 d-flex"},r.createElement("div",{className:"me-1 align-self-start ".concat("goKaS")},r.createElement("div",{className:"partial-loading-background rounded-pill py-1 px-2 d-inline-block w-100 h-100"})),r.createElement("div",{className:"partial-loading-background ".concat("vFew6")}))))};function i(){return r.createElement("div",null,r.createElement("div",{className:"mb-3"},r.createElement(a,null)),r.createElement("div",{className:"mb-3"},r.createElement(a,null)),r.createElement("div",null,r.createElement(a,null)))}},63112:(e,t,n)=>{n.d(t,{o:()=>i});var r=n(32735),a=n(91807),i=r.memo((function(e){var t=e.tagClass,n="partial-loading-background d-inline-block rounded-pill py-1 px-2 mb-1 me-1 text-nowrap ".concat(void 0===t?"":t," ").concat(a.Z.partialTag);return r.createElement("div",{className:"mt-1"},r.createElement("span",{className:n}," "))}))},65163:(e,t,n)=>{n.d(t,{QL:()=>r.Q,eb:()=>r.e});var r=n(16450);n(14244)},3042:(e,t,n)=>{n.d(t,{j:()=>ee});var r=n(32735),a=n(42029),i=n(83345),c=n(49439);const l={copyrightDisclaimer:"z8YoI",overlayContainer:"eJDbJ"};function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var u="shared.copyrightDisclaimer",s=150;function d(e){var t,n,d,m=(n=(0,c.L)({}),d=2,function(e){if(Array.isArray(e))return e}(n)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,c,l=[],o=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;o=!1}else for(;!(o=(r=i.call(n)).done)&&(l.push(r.value),l.length!==t);o=!0);}catch(e){u=!0,a=e}finally{try{if(!o&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(u)throw a}}return l}}(n,d)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var n=Object.prototype.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}}(n,d)||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.")}()),v=m[0],p=m[1];return r.createElement("div",{ref:v,className:e.className},r.createElement("p",{className:"".concat(l.copyrightDisclaimer," mb-1")},r.createElement(i.x,{namespace:u,phrase:"copyrightDisclaimer"})),r.createElement(a.Z,{target:v.current,show:p,placement:e.overflowPlacement&&document.documentElement.clientHeight-(null===(t=v.current)||void 0===t?void 0:t.getBoundingClientRect().bottom)<s?e.overflowPlacement:e.placement},r.createElement("div",{className:"".concat(l.overlayContainer," mw-100 bg-white border rounded-3 p-2")},r.createElement("p",null,r.createElement(i.x,{namespace:u,phrase:"warning"})),r.createElement("p",{className:"fw-semibold mb-0"},r.createElement(i.x,{namespace:u,phrase:"sharing"})))))}var m=n(42648),v=n(23481),p=n(75896),f=n(49985),y=n(65858),h=n(1353),g=n(63112),b=n(65163),E=n(69883),S=n(44599),A=n(45261);function C(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var k="shared.curriculumLinks",N=v.T.encloseNamespace(k);function L(e){var t,n,a,c=e.curriculums,l=c.hasLoaded,o=c.activeCurriculum,u=c.availableCurriculums,s=c.curriculumLinks,d=c.updateCurriculum,v=(n=r.useState(),a=2,function(e){if(Array.isArray(e))return e}(n)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,c,l=[],o=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;o=!1}else for(;!(o=(r=i.call(n)).done)&&(l.push(r.value),l.length!==t);o=!0);}catch(e){u=!0,a=e}finally{try{if(!o&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(u)throw a}}return l}}(n,a)||function(e,t){if(e){if("string"==typeof e)return C(e,t);var n=Object.prototype.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)?C(e,t):void 0}}(n,a)||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.")}()),L=v[0],I=v[1],w=(0,E.Z)();function x(t){var n,r,a=u.find((function(e){return e.id.toString()===t}));(null==a?void 0:a.id)&&(null===(n=null==L?void 0:L.id)||void 0===n?void 0:n.toString())!==(null===(r=null==a?void 0:a.id)||void 0===r?void 0:r.toString())&&(I(a),d(a,(function(){f.k.logUserAction({id:a.id,name:a.id,description:a.description,videoId:e.video.id,videoName:e.video.name},{entity:y.py.Presentation,actionType:y.Vw.Select,descriptor:y.kD.Curriculum,location:y.LZ.PlayPage})}),(function(){I(L),w.error(N("updateFailed"))})))}return r.useEffect((function(){l&&(L||I(null!=o?o:p.m.first(u)))}),[null==o?void 0:o.id,l]),r.createElement(r.Fragment,null,r.createElement("h2",{className:"h5 me-2 h-100"},r.createElement(i.x,{namespace:k,phrase:"heading"})),r.createElement("div",{className:"mb-2"},r.createElement(b.eb,{collection:(null==L?void 0:L.id)?e.curriculums.nonEmptyCurriculums:null,childClassName:"flex-shrink-0",childComponent:function(e){var t;return r.createElement(h.$,Object.assign({},e,{selected:(null===(t=null==L?void 0:L.id)||void 0===t?void 0:t.toString())===e.data.id.toString(),onChangeCurriculum:x}))},partialLoadingComponent:function(){return r.createElement(g.o,null)},widgetDataDeps:[null===(t=null==L?void 0:L.id)||void 0===t?void 0:t.toString()]})),r.createElement("div",{className:"rounded border mb-4 position-relative"},r.createElement(m.$B,{autoHeight:!0,autoHeightMax:e.height},r.createElement("div",{className:"p-3"},l?r.createElement(A.h,{curriculumLinks:s,emptyStateUrl:e.emptyStateUrl,onChangeCurriculum:x}):r.createElement(S.Z,null)))))}var I=n(21473),w=n(18913),x=n(39347),j=n(49087),T=n(92805),U=n(40178),O=n(71063),R=n(10439),M=n(35429),F=n(4594),V=n(16714),P=n(22902),W=n(9907),G=n(31908),_=n(26492),D=n(91479),Z=n(47938),H=n(81024),B=n(78166),$=n(99742),z=n(14070),Y=n(97291),J=n(22490),K=n(76162),Q=n(31261),X=n(99092),q="shared.playPage";function ee(e){var t,n,a,c,l,o,u,s,m,v,p=(0,M.g)(),f=(0,P.T)().hasPermissions,y=G.M.getCanBeConsumed(e.video).canConsume,h=e.featureAccess.canWatchPublicly(e.video.id),g=G.M.isVideoTypeArchived(e.video),b=f(V.C.StudentExperience),E=r.useRef(null),S=r.useRef(null);(0,W.P)([E.current,S.current],e.tableOfContentsId);var A=r.useRef(!1),C=(0,x.W)(e.video)&&e.featureAccess.canViewGlance,k=(0,X.lU)(),N="picture-in-picture"===p.mode||!h&&e.featureAccess.canViewPublicLayout,ee=!(!e.featureAccess.canViewCurriculumLinks||!e.curriculums.customerHasCurriculumLinks);return r.createElement(i.D.Provider,{value:q},r.createElement(Z.W,{restrictions:e.video._restrictions,yearGroups:e.yearGroups,objectId:e.video.id,objectTypeId:F.E.Video,canManageVideoAccess:e.canManageVideoAccess}),g&&r.createElement(_.T,{typeId:e.video.typeId,hasStudentExperience:b}),r.createElement("section",{className:"mb-2 ".concat(O.M.GLOBAL_PLAYER_SELECTOR)},(y||h)&&r.createElement(R.r,{key:e.video.id,objectId:e.video.id,objectTypeId:e.video.typeId,shareId:e.shareId,context:null===(t=e.params)||void 0===t?void 0:t.context,contextId:null===(n=e.params)||void 0===n?void 0:n.contextId,playNext:null===(a=e.params)||void 0===a?void 0:a.playNext,moviesAndTv:null===(c=e.params)||void 0===c?void 0:c.mtv,startTime:null!==(o=null===(l=e.params)||void 0===l?void 0:l.t)&&void 0!==o?o:null===(u=e.params)||void 0===u?void 0:u.startTime,endTime:null===(s=e.params)||void 0===s?void 0:s.endTime,mode:"default",location:"play-page"}),r.createElement("div",{className:N?"":"d-none"},r.createElement(H.S,{video:e.video,appLink:{application:Y.O.SIGN_UP,action:z.e.SignUp.SIGN_UP},type:"picture-in-picture"===p.mode?"pip":"public"}))),r.createElement(D.v,{media:e.video,yearGroups:e.yearGroups,audiences:e.audiences,getSeriesAppLink:function(t){return k.getSeriesAppLink(t,e.params.mtv)},featureAccess:e.featureAccess,shareId:e.shareId}),C&&r.createElement("section",null,r.createElement(w.o,{video:e.video,pointsOfInterest:e.pointsOfInterest,setStartTime:function(e){var t;return null===(t=p.playerRef.current)||void 0===t?void 0:t.currentTime(e)},getTagAppLink:k.getTagAppLink,suppressInteractivity:e.featureAccess.canViewPublicLayout})),r.createElement(I.M,{containerRef:E,video:e.video,canViewResources:e.featureAccess.canViewResources,imageCdnUrl:e.imageCdnUrl,getAppLink:k.getResourceAppLink(e.video.id,e.shareId,e.featureAccess.canViewResources),analyticsData:{videoId:e.video.id,videoName:e.video.name},resourceThumbnailFallbackUrl:$.W.Fallbacks.RESOURCE_THUMBNAIL}),r.createElement(Q.J,{video:e.video,imageCdnUrl:e.imageCdnUrl,analyticsData:{videoId:e.video.id,videoName:e.video.name},canViewInteractives:e.featureAccess.canViewInteractives,containerRef:S,yearGroups:e.yearGroups,setFavourite:e.setFavourite,canFavourite:e.canFavourite}),ee&&r.createElement("section",null,r.createElement(L,{video:e.video,height:U.x,curriculums:e.curriculums,emptyStateUrl:$.W.EmptyStates.CURRICULUM_LINKS})),e.glanceLoaded?r.createElement("section",null,r.createElement(j.X,{video:e.video,onLaunchImmersiveReader:function(){var e,t,n,r;A.current=!(null===(t=null===(e=null==p?void 0:p.playerRef)||void 0===e?void 0:e.current)||void 0===t?void 0:t.isPaused()),null===(r=null===(n=null==p?void 0:p.playerRef)||void 0===n?void 0:n.current)||void 0===r||r.pause()},onExitImmersiveReader:function(){var e,t;A.current&&(null===(t=null===(e=null==p?void 0:p.playerRef)||void 0===e?void 0:e.current)||void 0===t||t.play())},getTagAppLink:k.getTagAppLink,suppressInteractivity:e.featureAccess.canViewPublicLayout,theme:e.glanceTheme})):r.createElement(T.H,null),G.M.isBroadcast(e.video)&&r.createElement(d,{placement:"bottom-end",className:"d-flex justify-content-end mt-n2"}),r.createElement(K.O,{video:e.video,clips:null!==(v=null===(m=e.video.clips)||void 0===m?void 0:m.data)&&void 0!==v?v:[],canViewClips:e.featureAccess.canViewClips,yearGroups:e.yearGroups,imageCdnUrl:e.imageCdnUrl,setFavourite:e.setFavourite,canFavourite:e.canFavourite,analyticsData:{videoId:e.video.id,videoName:e.video.name}}),r.createElement("section",null,r.createElement(B.Z,{currentVideo:e.video,yearGroups:e.yearGroups,relatedVideos:e.relatedVideos,currentUser:e.currentUser,setFavourite:e.setFavourite,canFavourite:e.canFavourite,getVideoAppLink:function(t,n){return J.W.getAppLink(t,Object.assign(Object.assign({},n),{context:e.params.context,contextId:e.params.contextId,playNext:e.params.playNext,shareId:e.shareId,moviesAndTv:e.params.mtv}))},audiences:e.audiences,moviesAndTv:e.params.mtv})))}},22161:(e,t,n)=>{n.d(t,{Z:()=>r});const r={curriculumSubject:"GvGYH",curriculumSet:"d7RK0",areaLeafSet:"XRTAe",closeButton:"N3l5Q",heading:"hAxR4",leafDescriptionOnly:"h66ke",dropdown:"CsG6G",tag:"rdLqY",cover:"etwaD",active:"aDLMe",selected:"BMrSd"}}}]);
|
|
2
|
+
//# sourceMappingURL=3042-32e303014a-lite.chunk.js.map
|
package/dist/scripts/{3042-d531f193aa-lite.chunk.js.map → 3042-32e303014a-lite.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/3042-d531f193aa-lite.chunk.js","mappings":"8LAeM,SAAUA,EAAmBC,GACjC,IAAcC,EAAkBD,EAAxBE,KAER,OACE,gBAAC,IAAS,CACRC,IAAKF,EAAcG,GACnBC,UAAS,gFAA2E,QAAU,YAAIL,EAAMM,SAAW,aAAkB,IACrIC,QAAS,kBAAMP,EAAMQ,mBAAmBP,EAAcG,GAAGK,WAAW,GAEpE,uBAAKJ,UAAS,mBAAc,UAAY,2BACtC,uBACEK,IAAK,cAAsBT,EAAcU,MAAMC,IAAK,CAAEC,KAAM,aAC5DC,IAAKb,EAAcc,KACnBV,UAAU,oBAGd,uBAAKA,UAAU,QACZJ,EAAcc,MAIvB,C,uCCpCYC,E,kCAAZ,SAAYA,GACV,8BACA,gCACA,wBACA,uBACD,CALD,CAAYA,IAAAA,EAAc,K,0BCOpBC,EAAY,yBACZC,EAAYC,EAAA,mBAAiCF,GAM7C,SAAUG,EAA0BpB,GACxC,OACE,gBAACqB,EAAA,EAAU,CAAChB,UAAU,QACpB,gBAACgB,EAAA,QAAgB,CAACX,IAAKV,EAAMsB,cAAeC,QAASL,EAAU,aAAcL,KAAK,UAClF,gBAACQ,EAAA,UAAkB,KACjB,gBAACG,EAAA,EAAI,CAACP,UAAWA,EAAWQ,OAAO,kBAErC,gBAACJ,EAAA,OAAe,KACd,gBAACG,EAAA,EAAI,CAACP,UAAWA,EAAWQ,OAAO,eAI3C,C,2tBCfA,IAAMC,EAAwB,mBAExB,EAAY,yBAEZC,EAAkB,0EAkBxB,SAASC,EAAe5B,GACtB,SAAS6B,IACP,IAAMC,EAAYH,EAAkB,mBAGpC,OAAK3B,EAAM+B,KAAKhB,MAAQf,EAAMgC,gBACrBF,EAAY,mCAEdA,EAAY,cACrB,CAEA,IAAMG,EAAU,WAWhB,OATA,aAAgB,WACd,GAAKA,EAAQC,QAAb,CAGA,IAAQC,EAAUF,EAAQC,QAAQE,wBAA1BD,MAERnC,EAAMqC,mBAAmBF,EAJjB,CAKV,GAAG,CAACF,EAAQC,UAGV,uBAAK7B,UAAU,UAENL,EAAM+B,KAAKO,aAOXtC,EAAM+B,KAAKhB,MAAQf,EAAMgC,gBAE1B,gCACE,uBACE3B,UAAU,wBACVkC,MAAO,CAAEC,SAAUxC,EAAMyC,UAAY,GAAH,OAAMzC,EAAMyC,UAAS,MAAO,SAE9D,sBAAIC,IAAKT,EAAS5B,UAAWwB,KAC3B,gBAACL,EAAA,EAAI,CAACP,UAAW,EAAWQ,OAAO,aAGvC,qBAAGpB,UAAU,wBAAwBsC,wBAAyB,CAAEC,OAAQ5C,EAAM+B,KAAKO,gBASpFtC,EAAM+B,KAAKhB,MAASf,EAAMgC,gBAI7B,gCACE,uBACE3B,UAAU,wBACVkC,MAAO,CAAEC,SAAUxC,EAAMyC,UAAY,GAAH,OAAMzC,EAAMyC,UAAS,MAAO,SAE9D,sBAAIC,IAAKT,EAAS5B,UAAWwB,KAA2B7B,EAAM+B,KAAKhB,OAErE,qBAAGV,UAAU,wBAAwBsC,wBAAyB,CAAEC,OAAQ5C,EAAM+B,KAAKO,gBAV9E,qBAAGjC,UAAU,MAAMsC,wBAAyB,CAAEC,OAAQ5C,EAAM+B,KAAKO,eA3BjE,qBAAGjC,UAAU,MAAMsC,wBAAyB,CAAEC,OAAQ5C,EAAM+B,KAAKhB,QA2ClF,CAQA,SAAS8B,EAAkB7C,GACzB,IAuBQ8C,EACAC,EAOAC,EA/BFC,EAA8E,CAAC,EAEjFjB,GAAkB,EAqCtB,SAASkB,EAAkBnB,GACzB,IAAM1B,EAAY,OAElB,OAAK0B,EAAKhB,MAASiB,EAGZ3B,EAFEA,EAAY,SAAW,uBAGlC,CAEA,OA5CAL,EAAMmD,QAAQC,eAAeC,SAAQ,SAAAC,GACnC,IAAMC,EAAWD,EAAetC,EAAewC,MAAMC,KAAI,SAAAC,GAAE,OAAIA,EAAG3C,IAAI,IAAE4C,KAAK,OAEzEV,EAAgBM,GAClBD,EAAetC,EAAe4C,MAAMP,SAAQ,SAAAtB,GAC1CkB,EAAgBM,GAAUM,KAAK9B,GAG3BA,EAAKhB,OACPiB,GAAkB,EACtB,IAKFiB,EAAgBM,GAAYD,EAAetC,EAAe4C,KAC5D,IA6BE,gCACE,sBAAIvD,UAAS,UAAKsB,EAAe,kDA3B7BmB,EAAkB9C,EAAMmD,QAAQnC,EAAe8C,UAAU/C,KACzDgC,EAAiB/C,EAAMmD,QAAQnC,EAAe+C,SAAShD,MAOvDiC,EAA0BF,EAAgBkB,MAAMtC,IAG7C,GAAP,OAAUsB,EAAwB,GAAE,cAAMA,EAAwB,GAAE,cAAMD,GAErE,GAAP,OAAUD,EAAe,cAAMC,KAkB7B,uBAAK1C,UAAS,eAAU,wBACrB4D,OAAOC,KAAKjB,GAAiBQ,KAAI,SAACF,EAAUY,GAC3C,OACE,uBAAKhE,IAAKgE,EAAG9D,UAAW,iBACrBkD,GAAY,sBAAIlD,UAAU,yBAAyBkD,GACpD,sBAAIlD,UAAU,iBACX4C,EAAgBM,GAAUE,KAAI,SAAA1B,GAAI,OACjC,sBAAI5B,IAAK4B,EAAK3B,GAAIC,UAAW6C,EAAkBnB,IAC7C,gBAACH,EAAc,CACbG,KAAMA,EACNU,UAAWzC,EAAMyC,UACjBJ,mBAAoBrC,EAAMqC,mBAC1BL,gBAAiBA,IAEhB,KAKf,KAIR,CAQM,SAAUoC,EAAgBpE,G,YACuB,G,EAAjB,WAAe,G,EAAE,E,k5BAA7CyC,EAAS,KAAE4B,EAAY,KAE/B,SAAShC,EAAmBF,GAW1BkC,GAAa,SAAAC,GACX,OAAIA,GAAcnC,EACTmC,EAEFnC,CACT,GACF,CAUA,IAAMoC,EAAiF,CAAC,EAgDxF,OA9CqB,QAArB,EAAAvE,EAAMwE,uBAAe,SAAEnB,SAAQ,SAAAF,GAC7B,IAAIsB,EAA8C,KAC9CC,EAAgD,KAC9CC,EAA2C,GAC3CC,EAA4C,GAElDzB,EAAQE,SAAQ,SAAAwB,GACd,OAAQA,EAAcC,MACpB,KAAK9D,EAAe+C,QAClBU,EAAUI,EACV,MACF,KAAK7D,EAAe8C,SAClBY,EAAWG,EACX,MACF,KAAK7D,EAAewC,KAClBmB,EAAMd,KAAKgB,GACX,MACF,KAAK7D,EAAe4C,KAClBgB,EAAOf,KAAKgB,GAKlB,IAEA,IAAM1E,EAAM,GAAH,OAAMsE,EAAQrE,GAAE,YAAIsE,EAAStE,IAElCmE,EAAmBpE,GACrBoE,EAAmBpE,GAAKiD,eAAeS,KAAK,EAAD,KACxC7C,EAAewC,KAAOmB,GACtB3D,EAAe4C,KAAOgB,IAM3BL,EAAmBpE,GAAO,EAAH,OACpBa,EAAe+C,QAAUU,GACzBzD,EAAe8C,SAAWY,GAAQ,iBACnB,CAAC,EAAD,KACb1D,EAAewC,KAAOmB,GACtB3D,EAAe4C,KAAOgB,IAG7B,IAEK5E,EAAMwE,iBAGe,QAArB,EAAAxE,EAAMwE,uBAAe,eAAEO,QAK1B,sBAAI1E,UAAU,qBACX4D,OAAOC,KAAKK,GAAoBd,KAAI,SAACuB,EAAYb,GAAC,OACjD,sBAAIhE,IAAG,kBAAagE,GAAK9D,UAAW,mBAClC,gBAACwC,EAAiB,CAChBM,QAASoB,EAAmBS,GAC5B3C,mBAAoBA,EACpBI,UAAWA,IAEV,KAZF,gBAACrB,EAAyB,CAACE,cAAetB,EAAMsB,gBAHhD,gBAAC2D,EAAA,EAAsB,KAmBlC,C,kDClSA,IAAMC,EAA+B,WAAH,OAChC,gCACE,uBAAK7E,UAAS,qFCLS,WDMvB,2BACE,uBAAKA,UAAS,0CCPsB,WDSpC,uBAAKA,UAAU,eACb,uBAAKA,UAAS,gCCVmC,UDW/C,uBAAKA,UAAS,kFAGhB,uBAAKA,UAAS,qCCdyD,aDiB1E,EAGC,SAAU4E,IACd,OACE,2BACE,uBAAK5E,UAAU,QACb,gBAAC6E,EAA4B,OAG/B,uBAAK7E,UAAU,QACb,gBAAC6E,EAA4B,OAG/B,2BACE,gBAACA,EAA4B,OAIrC,C,6DE7BaC,EAAiB,QAAW,YAA+C,QAApCC,SAC5CC,EAAa,0FAAH,YAD0C,IAAG,KAAE,EACsD,YAAI,gBAEzH,OACE,uBAAKhF,UAAU,QACb,wBAAMA,UAAWgF,GAAU,KAGjC,G,2JCfA,SAAgB,oBAAsB,QAAQ,iBAAmB,S,0GCQjE,IAAMpE,EAAY,6BAEZqE,EAAmB,IAQnB,SAAUC,EAAoBvF,GAClC,I,MAA8D,G,GAAlC,OAA+B,CAAC,G,EAAE,E,k5BAAtD0C,EAAG,KAAE8C,EAAU,KAQvB,OACE,uBAAK9C,IAAKA,EAAKrC,UAAWL,EAAMK,WAC9B,qBAAGA,UAAS,UAAK,sBAA0B,UAAS,gBAACmB,EAAA,EAAI,CAACP,UAAWA,EAAWQ,OAAO,yBACvF,gBAACgE,EAAA,EAAO,CACNC,OAAQhD,EAAIR,QACZyD,KAAMH,EACNI,UAAW5F,EAAM6F,mBAXFC,SAASC,gBAAgBC,cAA0B,QAAX,EAAAtD,EAAIR,eAAO,eAAEE,wBAAwB6D,QAE5EX,EAS0CtF,EAAM6F,kBAAoB7F,EAAM4F,WAE1F,uBAAKvF,UAAS,UAAK,mBAAuB,0CACxC,yBAAG,gBAACmB,EAAA,EAAI,CAACP,UAAWA,EAAWQ,OAAO,aACtC,qBAAGpB,UAAU,oBAAmB,gBAACmB,EAAA,EAAI,CAACP,UAAWA,EAAWQ,OAAO,eAK7E,C,sOCxBA,IAAM,EAAY,yBACZP,EAAYC,EAAA,mBAAiC,GAS7C,SAAU+E,EAA6BlG,G,UAC3C,EAMIA,EAAMmG,YALRC,EAAS,EAATA,UACAC,EAAgB,EAAhBA,iBACAC,EAAoB,EAApBA,qBACA9B,EAAe,EAAfA,gBACA+B,EAAgB,EAAhBA,iBAGkF,G,EAA9B,a,EAA8B,E,k5BAA5EC,EAAkB,KAAEC,EAAqB,KAE3CC,GAAS,SAUf,SAASlG,EAAmBmG,G,QACpBC,EAAgBN,EAAqBO,MAAK,SAAAC,GAAC,OAAIA,EAAE1G,GAAGK,aAAekG,CAAY,KAEhFC,aAAa,EAAbA,EAAexG,MAGM,QAAtB,EAAAoG,aAAkB,EAAlBA,EAAoBpG,UAAE,eAAEK,eAAgC,QAAjB,EAAAmG,aAAa,EAAbA,EAAexG,UAAE,eAAEK,cAG9DgG,EAAsBG,GAuBtBL,EAAiBK,GAfC,WAChBG,EAAA,gBAA8B,CAC5B3G,GAAIwG,EAAcxG,GAClBW,KAAM6F,EAAcxG,GACpBkC,YAAasE,EAActE,YAC3B0E,QAAShH,EAAMiH,MAAM7G,GACrB8G,UAAWlH,EAAMiH,MAAMlG,MACtB,CACDoG,OAAQ,kBACRC,WAAY,YACZC,WAAY,gBACZC,SAAU,eAEd,IAnBgB,WAEdb,EAAsBD,GACtBE,EAAOa,MAAMrG,EAAU,gBACzB,IAkBF,CAEA,OA3CA,aAAgB,WACTkF,IAGAI,GACHC,EAAsBJ,QAAAA,EAAoBmB,EAAA,QAAkBlB,IAChE,GAAG,CAAED,aAAgB,EAAhBA,EAAkBjG,GAAIgG,IAsCzB,gCACE,sBAAI/F,UAAU,iBACZ,gBAACmB,EAAA,EAAI,CAACP,UAAW,EAAWQ,OAAO,aAErC,uBAAKpB,UAAU,QACb,gBAAC,KAAa,CACZoH,YAAYjB,aAAkB,EAAlBA,EAAoBpG,IAAKJ,EAAMmG,YAAYuB,oBAAsB,KAC7EC,eAAe,gBACfC,eAAgB,SAAA5H,G,MACd,OACE,gBAACD,EAAA,EAAkB,iBACbC,EAAK,CACTM,UAAgC,QAAtB,EAAAkG,aAAkB,EAAlBA,EAAoBpG,UAAE,eAAEK,cAAeT,EAAME,KAAKE,GAAGK,WAC/DD,mBAAoBA,IAG1B,EACAqH,wBAAyB,kBAAM,gBAAC1C,EAAA,EAAc,KAAG,EACjD2C,eAAgB,CAAuB,QAAtB,EAAAtB,aAAkB,EAAlBA,EAAoBpG,UAAE,eAAEK,eAI7C,uBAAKJ,UAAU,yCACb,gBAAC,KAAU,CAAC0H,YAAU,EAACC,cAAehI,EAAMiI,QAC1C,uBAAK5H,UAAU,OACX+F,EAGE,gBAAChC,EAAA,EAAe,CACdI,gBAAiBA,EACjBlD,cAAetB,EAAMsB,cACrBd,mBAAoBA,IALtB,gBAACyE,EAAA,EAAsB,SAavC,C,gSCvFM,EAAY,kBAuBZ,SAAUiD,GAASlI,G,wBACjBmI,GAAgB,SAEdC,GAAmB,EAAAC,EAAA,KAAnBD,eACAE,EAAeC,EAAA,mBAA6BvI,EAAMiH,OAAlDqB,WACFE,EAAkBxI,EAAMyI,cAAcC,iBAAiB1I,EAAMiH,MAAM7G,IAEnEuI,EAAaJ,EAAA,sBAAgCvI,EAAMiH,OACnD2B,EAAuBR,EAAeS,EAAA,qBAEtCC,EAAe,SAA6B,MAC5CC,EAAkB,SAA6B,OAErD,EAAAC,EAAA,GAAyB,CACvBF,EAAa5G,QACb6G,EAAgB7G,SACflC,EAAMiJ,mBAOT,IAAMC,EAAkC,UAAa,GAE/CC,GAAY,OAAcnJ,EAAMiH,QAAUjH,EAAMyI,cAAcW,cAE9DC,GAAa,UAcbC,EAA+C,uBAAvBnB,EAAcoB,OAAmCf,GAAmBxI,EAAMyI,cAAce,oBAEhHC,MAAwBzJ,EAAMyI,cAAciB,yBAChD1J,EAAMmG,YAAYwD,4BAEpB,OACE,gBAAC,aAAiC,CAACC,MAAO,GACxC,gBAACC,EAAA,EAAiB,CAChBC,aAAc9J,EAAMiH,MAAM8C,cAC1BC,WAAYhK,EAAMgK,WAClBC,SAAUjK,EAAMiH,MAAM7G,GACtB8J,aAAcC,EAAA,QACdC,qBAAsBpK,EAAMoK,uBAG7BzB,GAAc,gBAAC0B,EAAA,EAAc,CAACC,OAAQtK,EAAMiH,MAAMqD,OAAQ1B,qBAAsBA,IAEjF,2BAASvI,UAAS,eAAUkK,EAAA,4BACxBjC,GAAcE,IACd,gBAACgC,EAAA,EAAoB,CACnBrK,IAAKH,EAAMiH,MAAM7G,GACjB6J,SAAUjK,EAAMiH,MAAM7G,GACtB8J,aAAclK,EAAMiH,MAAMqD,OAC1BG,QAASzK,EAAMyK,QACfC,QAAqB,QAAZ,EAAA1K,EAAM2K,cAAM,eAAED,QACvBE,UAAuB,QAAZ,EAAA5K,EAAM2K,cAAM,eAAEC,UACzBC,SAAsB,QAAZ,EAAA7K,EAAM2K,cAAM,eAAEE,SACxBC,YAAyB,QAAZ,EAAA9K,EAAM2K,cAAM,eAAEI,IAC3BC,UAA0B,QAAf,EAAY,QAAZ,EAAAhL,EAAM2K,cAAM,eAAEM,SAAC,QAAgB,QAAZ,EAAAjL,EAAM2K,cAAM,eAAEK,UAC5CE,QAAqB,QAAZ,EAAAlL,EAAM2K,cAAM,eAAEO,QACvB3B,KAAK,UACLjC,SAAS,cAGb,uBAAKjH,UAAWiJ,EAAwB,GAAK,UAC3C,gBAAC6B,EAAA,EAAiB,CAChBlE,MAAOjH,EAAMiH,MACbmE,QAAS,CACPC,YAAa,YACbC,OAAQ,oBAEVxG,KAA6B,uBAAvBqD,EAAcoB,KAAgC,MAAQ,aAKlE,gBAACgC,EAAA,EAAuB,CACtBC,MAAOxL,EAAMiH,MACb+C,WAAYhK,EAAMgK,WAClByB,UAAWzL,EAAMyL,UACjBC,iBAAkB,SAAAC,GAAM,OAAItC,EAAWqC,iBAAiBC,EAAQ3L,EAAM2K,OAAOI,IAAI,EACjFtC,cAAezI,EAAMyI,cACrBgC,QAASzK,EAAMyK,UAGhBtB,GACC,+BACE,gBAACyC,EAAA,EAAc,CACb3E,MAAOjH,EAAMiH,MACb4E,iBAAkB7L,EAAM6L,iBACxBC,aAAc,SAACC,GAAgB,MAAC,OAA+B,QAA/B,EAAA5D,EAAc6D,UAAU9J,eAAO,eAAE+J,YAAYF,EAAK,EAClFG,cAAe7C,EAAW6C,cAC1BC,sBAAuBnM,EAAMyI,cAAce,uBAKjD,gBAAC4C,EAAA,EAAiB,CAChBC,aAAcvD,EACd7B,MAAOjH,EAAMiH,MACbqF,iBAAkBtM,EAAMyI,cAAc6D,iBACtCC,YAAavM,EAAMuM,YACnBC,WACEnD,EAAWoD,mBAAmBzM,EAAMiH,MAAM7G,GAAIJ,EAAMyK,QAASzK,EAAMyI,cAAc6D,kBAEnFI,cAAe,CAAE1F,QAAShH,EAAMiH,MAAM7G,GAAI8G,UAAWlH,EAAMiH,MAAMlG,MACjE4L,6BAA8BC,EAAA,iCAGhC,gBAACC,EAAA,EAAoB,CACnB5F,MAAOjH,EAAMiH,MACbsF,YAAavM,EAAMuM,YACnBG,cAAe,CAAE1F,QAAShH,EAAMiH,MAAM7G,GAAI8G,UAAWlH,EAAMiH,MAAMlG,MACjE+L,oBAAqB9M,EAAMyI,cAAcqE,oBACzCT,aAActD,EACdiB,WAAYhK,EAAMgK,WAClB+C,aAAc/M,EAAM+M,aACpBC,aAAchN,EAAMgN,eAGrBvD,IACC,+BACE,gBAACvD,EAA4B,CAC3Be,MAAOjH,EAAMiH,MACbgB,OAAQ,IACR9B,YAAanG,EAAMmG,YACnB7E,cAAesL,EAAA,kCAKpB5M,EAAMiN,aACL,+BACE,gBAACC,EAAA,EAAyB,CACxBjG,MAAOjH,EAAMiH,MACbkG,wBArHV,W,YACEjE,EAAgChH,UAA4C,QAAjC,EAAwB,QAAxB,EAAAiG,aAAa,EAAbA,EAAe6D,iBAAS,eAAE9J,eAAO,eAAEkL,YAC7C,QAAjC,EAAwB,QAAxB,EAAAjF,aAAa,EAAbA,EAAe6D,iBAAS,eAAE9J,eAAO,SAAEmL,OACrC,EAmHUC,sBAjHV,W,QACOpE,EAAgChH,UAGJ,QAAjC,EAAwB,QAAxB,EAAAiG,aAAa,EAAbA,EAAe6D,iBAAS,eAAE9J,eAAO,SAAEqL,OACrC,EA6GUrB,cAAe7C,EAAW6C,cAC1BC,sBAAuBnM,EAAMyI,cAAce,oBAC3CgE,MAAOxN,EAAMyN,eAIjB,gBAACC,EAAA,EAAmB,MAGrBnF,EAAA,cAAwBvI,EAAMiH,QAAU,gBAAC1B,EAAmB,CAACK,UAAU,aAAavF,UAAU,qCAE/F,gBAACsN,EAAA,EAAa,CACZ1G,MAAOjH,EAAMiH,MACb2G,MAA8B,QAAvB,EAAiB,QAAjB,EAAA5N,EAAMiH,MAAM2G,aAAK,eAAE1N,YAAI,QAAI,GAClC2N,aAAc7N,EAAMyI,cAAcoF,aAClC7D,WAAYhK,EAAMgK,WAClBuC,YAAavM,EAAMuM,YACnBQ,aAAc/M,EAAM+M,aACpBC,aAAchN,EAAMgN,aACpBN,cAAe,CAAE1F,QAAShH,EAAMiH,MAAM7G,GAAI8G,UAAWlH,EAAMiH,MAAMlG,QAGnE,+BACE,gBAAC+M,EAAA,EAAa,CACZC,aAAc/N,EAAMiH,MACpB+C,WAAYhK,EAAMgK,WAClBgE,cAAehO,EAAMgO,cACrBC,YAAajO,EAAMiO,YACnBlB,aAAc/M,EAAM+M,aACpBC,aAAchN,EAAMgN,aACpBkB,gBAAiB,SAACC,EAAGC,GAAI,OAAKC,EAAA,aAA8BF,EAAG,OAAF,wBACxDC,GAAI,CACP1D,QAAS1K,EAAM2K,OAAOD,QACtBE,UAAW5K,EAAM2K,OAAOC,UACxBC,SAAU7K,EAAM2K,OAAOE,SACvBJ,QAASzK,EAAMyK,QACfK,YAAa9K,EAAM2K,OAAOI,MAC1B,EACFU,UAAWzL,EAAMyL,UACjBX,YAAa9K,EAAM2K,OAAOI,OAKpC,C,mCC5PA,SAAgB,kBAAoB,QAAQ,cAAgB,QAAQ,YAAc,QAAQ,YAAc,QAAQ,QAAU,QAAQ,oBAAsB,QAAQ,SAAW,QAAQ,IAAM,QAAQ,MAAQ,QAAQ,OAAS,QAAQ,SAAW,Q","sources":["file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinkItem.tsx","file:///app/packages/libs/shared/src/enums/CurriculumType.ts","file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinksEmptyState.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinks.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/partial-loading/PartialCurriculumLinks.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/partial-loading/partial-curriculum-links.scss","file:///app/packages/libs/shared/src/components/tags/PartialTagItem.tsx","file:///app/packages/libs/shared/src/components/copyright-disclaimer/copyright-disclaimer.scss","file:///app/packages/libs/shared/src/components/copyright-disclaimer/CopyrightDisclaimer.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinksWithScrollbar.tsx","file:///app/packages/projects/lite/src/shared/components/play-page/PlayPage.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/curriculum-links.scss"],"sourcesContent":["import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './curriculum-links.scss';\n\ninterface CurriculumLinkItemProps {\n data: Presentation;\n onChangeCurriculum: (id: string) => any;\n selected: boolean;\n}\n\nexport function CurriculumLinkItem(props: CurriculumLinkItemProps): JSX.Element {\n const { data: curriculumTag } = props;\n\n return (\n <DivButton\n key={curriculumTag.id}\n className={`p-1 pe-2 rounded-pill d-inline-flex align-items-center cursor-pointer ${styles.tag} ${props.selected ? styles.selected : ''}`}\n onClick={() => props.onChangeCurriculum(curriculumTag.id.toString())}\n >\n <div className={`bg-white ${styles.cover} rounded-circle border`}>\n <img\n src={ImageHelper.createUrl(curriculumTag.cover.url, { size: ImageSize.Small })}\n alt={curriculumTag.name}\n className='rounded-circle'\n />\n </div>\n <div className='ms-2'>\n {curriculumTag.name}\n </div>\n </DivButton>\n );\n}","export enum CurriculumType {\n Subject = 'CurriculumSubject',\n Audience = 'CurriculumAudience',\n Area = 'CurriculumArea',\n Leaf = 'CurriculumLeaf'\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'shared.curriculumLinks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CurriculumLinksEmptyStateProps {\n emptyStateUrl: string;\n}\n\nexport function CurriculumLinksEmptyState(props: CurriculumLinksEmptyStateProps): JSX.Element {\n return (\n <EmptyState className='pt-3'>\n <EmptyState.Image src={props.emptyStateUrl} altText={getPhrase('emptyInfo')} size='small'/>\n <EmptyState.Heading>\n <Text namespace={namespace} phrase='emptyHeading' />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='emptyInfo' />\n </EmptyState.Info>\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { PartialCurriculumLinks } from 'libs/shared/components/curriculum-links/partial-loading/PartialCurriculumLinks';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurriculumType } from 'libs/shared/enums/CurriculumType';\nimport { Curriculum } from 'libs/shared/interfaces';\n\nimport { CurriculumLinksEmptyState } from './CurriculumLinksEmptyState';\n\nimport styles from './curriculum-links.scss';\n\nconst BRACKET_SEGMENT_REGEX = /(.*)\\s\\((.*)?\\)/i;\n\nconst namespace = 'shared.curriculumLinks';\n\nconst BASE_PILL_CLASS = 'text-nowrap font-size-normal rounded-pill py-1 px-2 my-0 d-inline-block';\n\ninterface CurriculumStructure {\n [CurriculumType.Subject]: Curriculum<CurriculumType.Subject>;\n [CurriculumType.Audience]: Curriculum<CurriculumType.Audience>;\n areasAndLeaves: Array<{\n [CurriculumType.Area]: Curriculum<CurriculumType.Area>[];\n [CurriculumType.Leaf]: Curriculum<CurriculumType.Leaf>[];\n }>;\n}\n\ninterface CurriculumLeafProps {\n leaf: Curriculum<CurriculumType.Leaf>;\n codeWidth: number;\n trySetMaxCodeWidth: React.Dispatch<React.SetStateAction<number>>;\n uiContainsCodes: boolean;\n}\n\nfunction CurriculumLeaf(props: CurriculumLeafProps): JSX.Element {\n function getCurriculumCodeClass(): string {\n const baseClass = BASE_PILL_CLASS + ' bg-white border';\n\n // If a leaf has no code but the rest of the UI has leaf nodes w/ codes, we show a special \"No code\" pill\n if (!props.leaf.name && props.uiContainsCodes)\n return baseClass + ' border-secondary text-secondary';\n\n return baseClass + ' border-dark';\n }\n\n const codeRef = React.useRef<HTMLDivElement>();\n\n React.useEffect(() => {\n if (!codeRef.current)\n return;\n\n const { width } = codeRef.current.getBoundingClientRect();\n\n props.trySetMaxCodeWidth(width);\n }, [codeRef.current]);\n\n return (\n <div className='d-flex'>\n {(() => {\n if (!props.leaf.description)\n return <p className='m-0' dangerouslySetInnerHTML={{ __html: props.leaf.name }} />;\n\n /**\n * If a leaf has no code but the rest of the UI has leaf nodes\n * with codes, we show a special \"No code\" pill. Example: https://imgur.com/3L1Ela3\n */\n if (!props.leaf.name && props.uiContainsCodes) {\n return (\n <>\n <div\n className='me-1 align-self-start'\n style={{ minWidth: props.codeWidth ? `${props.codeWidth}px` : 'auto' }}\n >\n <h5 ref={codeRef} className={getCurriculumCodeClass()}>\n <Text namespace={namespace} phrase='noCode' />\n </h5>\n </div>\n <p className='m-0 align-self-center' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />\n </>\n );\n }\n\n /**\n * If a leaf has no code and the rest of the UI leaf nodes have no code, we just\n * display the description with a bullet point. Example: https://imgur.com/jzJvmWs\n */\n if (!props.leaf.name && !props.uiContainsCodes)\n return <p className='m-0' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />;\n\n return (\n <>\n <div\n className='me-1 align-self-start'\n style={{ minWidth: props.codeWidth ? `${props.codeWidth}px` : 'auto' }}\n >\n <h5 ref={codeRef} className={getCurriculumCodeClass()}>{props.leaf.name}</h5>\n </div>\n <p className='m-0 align-self-center' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />\n </>\n );\n })()}\n </div>\n );\n}\n\ninterface CurriculumSubjectProps {\n linkSet: CurriculumStructure;\n codeWidth: number;\n trySetMaxCodeWidth: React.Dispatch<React.SetStateAction<number>>;\n}\n\nfunction CurriculumSubject(props: CurriculumSubjectProps): JSX.Element {\n const areaAndLeafSets: { [areaText: string]: Curriculum<CurriculumType.Leaf>[]; } = {};\n\n let uiContainsCodes = false;\n\n props.linkSet.areasAndLeaves.forEach(areaAndLeafSet => {\n const areaText = areaAndLeafSet[CurriculumType.Area].map(ca => ca.name).join(' - ');\n\n if (areaAndLeafSets[areaText]) {\n areaAndLeafSet[CurriculumType.Leaf].forEach(leaf => {\n areaAndLeafSets[areaText].push(leaf);\n\n // We need the info on if _any_ leaf node has a code in it. See why in the comments in `<CurriculumLeaf />`\n if (leaf.name)\n uiContainsCodes = true;\n });\n\n return;\n }\n\n areaAndLeafSets[areaText] = areaAndLeafSet[CurriculumType.Leaf];\n });\n\n function getAudienceText(): string {\n const audienceSegment = props.linkSet[CurriculumType.Audience].name;\n const subjectSegment = props.linkSet[CurriculumType.Subject].name;\n\n /**\n * In some curriculums, such as the UK curriculum, the audience string may contain a year group\n * in brackets. For example, it may be \"Lower Key Stage 2 (Year 4)\".\n * This regex will pull that segment out if it exists.\n */\n const audienceBracketSegments = audienceSegment.match(BRACKET_SEGMENT_REGEX);\n\n if (audienceBracketSegments)\n return `${audienceBracketSegments[1]} • ${audienceBracketSegments[2]} • ${subjectSegment}`;\n\n return `${audienceSegment} • ${subjectSegment}`;\n }\n\n function getLeafStyleClass(leaf: Curriculum<CurriculumType.Leaf>): string {\n const className = 'mb-2';\n\n if (!leaf.name && !uiContainsCodes)\n return className + ' ms-4 ' + styles.leafDescriptionOnly;\n\n return className;\n }\n\n return (\n <>\n <h3 className={`${BASE_PILL_CLASS} text-white bg-dark-blue fw-normal me-1 mb-2`}>\n {getAudienceText()}\n </h3>\n\n <div className={`me-2 ${styles.curriculumSubject}`}>\n {Object.keys(areaAndLeafSets).map((areaText, i) => {\n return (\n <div key={i} className={styles.areaLeafSet} >\n {areaText && <h4 className='mb-1 font-size-normal'>{areaText}</h4>}\n <ul className='list-unstyled'>\n {areaAndLeafSets[areaText].map(leaf => (\n <li key={leaf.id} className={getLeafStyleClass(leaf)}>\n <CurriculumLeaf\n leaf={leaf}\n codeWidth={props.codeWidth}\n trySetMaxCodeWidth={props.trySetMaxCodeWidth}\n uiContainsCodes={uiContainsCodes}\n />\n </li>\n ))}\n </ul>\n </div>\n );\n })}\n </div>\n </>\n );\n}\n\ninterface CurriculumLinksProps {\n curriculumLinks?: Curriculum[][];\n emptyStateUrl: string;\n onChangeCurriculum?: (id: string) => void;\n}\n\nexport function CurriculumLinks(props: CurriculumLinksProps): JSX.Element {\n const [ codeWidth, setCodeWidth ] = React.useState(0);\n\n function trySetMaxCodeWidth(width: number): void {\n /**\n * The width of the curriculum code column should be identical for each leaf node, meaning\n * the leaf description text will be perfectly vertically aligned all the way down.\n * See here for example: https://imgur.com/MbganZf\n * \n * This is achieved by us setting the state for the maximum code width, and forcing all\n * smaller codes to abide by that max width.\n * \n * This value is used in the `<CurriculumLeaf />` component.\n */\n setCodeWidth(currentVal => {\n if (currentVal >= width)\n return currentVal;\n\n return width;\n });\n }\n\n /**\n * Here, we're taking the structure of links from the backend, and restructuring it in a way\n * that resembles the structure of our UI more closely. The general idea is:\n * \n * CurriculumAudience - CurriculumSubject\n * CurriculumAreas\n * CurriculumLeaves\n */\n const curriculumLinkSets: { [subjectAndAudienceIdKey: string]: CurriculumStructure } = {};\n\n props.curriculumLinks?.forEach(linkSet => {\n let subject: Curriculum<CurriculumType.Subject> = null;\n let audience: Curriculum<CurriculumType.Audience> = null;\n const areas: Curriculum<CurriculumType.Area>[] = [];\n const leaves: Curriculum<CurriculumType.Leaf>[] = [];\n\n linkSet.forEach(curriculumObj => {\n switch (curriculumObj.type) {\n case CurriculumType.Subject:\n subject = curriculumObj as Curriculum<CurriculumType.Subject>;\n break;\n case CurriculumType.Audience:\n audience = curriculumObj as Curriculum<CurriculumType.Audience>;\n break;\n case CurriculumType.Area:\n areas.push(curriculumObj as Curriculum<CurriculumType.Area>);\n break;\n case CurriculumType.Leaf:\n leaves.push(curriculumObj as Curriculum<CurriculumType.Leaf>);\n break;\n default:\n break;\n }\n });\n\n const key = `${subject.id}:${audience.id}`;\n\n if (curriculumLinkSets[key]) {\n curriculumLinkSets[key].areasAndLeaves.push({\n [CurriculumType.Area]: areas,\n [CurriculumType.Leaf]: leaves\n });\n\n return;\n }\n\n curriculumLinkSets[key] = {\n [CurriculumType.Subject]: subject,\n [CurriculumType.Audience]: audience,\n areasAndLeaves: [{\n [CurriculumType.Area]: areas,\n [CurriculumType.Leaf]: leaves\n }]\n };\n });\n\n if (!props.curriculumLinks)\n return <PartialCurriculumLinks />;\n\n if (!props.curriculumLinks?.length) {\n return <CurriculumLinksEmptyState emptyStateUrl={props.emptyStateUrl} />;\n }\n\n return (\n <ul className='list-unstyled m-0'>\n {Object.keys(curriculumLinkSets).map((linkSetKey, i) => (\n <li key={`linkset-${i}`} className={styles.curriculumSet}>\n <CurriculumSubject\n linkSet={curriculumLinkSets[linkSetKey]}\n trySetMaxCodeWidth={trySetMaxCodeWidth}\n codeWidth={codeWidth}\n />\n </li>\n ))}\n </ul>\n );\n}","import React from 'react';\n\nimport styles from './partial-curriculum-links.scss';\n\nconst PartialCurriculumLinkSection = () => (\n <>\n <div className={`partial-loading-background rounded-pill py-1 px-2 d-inline-block me-1 mb-2 ${styles.audience}`} />\n <div>\n <div className={`partial-loading-background mb-1 ${styles.area}`} />\n\n <div className='mb-2 d-flex'>\n <div className={`me-1 align-self-start ${styles.code}`}>\n <div className={`partial-loading-background rounded-pill py-1 px-2 d-inline-block w-100 h-100`} />\n </div>\n \n <div className={`partial-loading-background ${styles.description}`} />\n </div>\n </div>\n </>\n);\n\nexport function PartialCurriculumLinks(): JSX.Element {\n return (\n <div>\n <div className='mb-3'>\n <PartialCurriculumLinkSection />\n </div>\n\n <div className='mb-3'>\n <PartialCurriculumLinkSection />\n </div>\n\n <div>\n <PartialCurriculumLinkSection />\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"audience\":\"vDcrq\",\"area\":\"GXhoW\",\"code\":\"goKaS\",\"description\":\"vFew6\"};","import React from 'react';\n\nimport styles from './tags.scss';\n\ninterface PartialTagItemProps {\n tagClass?: string;\n}\n\nexport const PartialTagItem = React.memo(function({ tagClass = '' }: PartialTagItemProps): JSX.Element {\n const classNames = `partial-loading-background d-inline-block rounded-pill py-1 px-2 mb-1 me-1 text-nowrap ${tagClass} ${styles.partialTag}`;\n\n return (\n <div className='mt-1'>\n <span className={classNames}> </span>\n </div>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"copyrightDisclaimer\":\"z8YoI\",\"overlayContainer\":\"eJDbJ\"};","import React from 'react';\nimport { Overlay } from 'react-bootstrap';\nimport { Placement } from 'react-bootstrap/esm/types';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\n\nimport styles from './copyright-disclaimer.scss';\n\nconst namespace = 'shared.copyrightDisclaimer';\n\nconst CONTAINER_HEIGHT = 150; // px\n\ninterface CopyrightDisclaimerProps {\n placement: Placement;\n overflowPlacement?: Placement;\n className?: string;\n}\n\nexport function CopyrightDisclaimer(props: CopyrightDisclaimerProps) {\n const [ ref, isHovering ] = useHoverIntent<HTMLDivElement>({});\n\n function preventOverflow() {\n const spaceBelow = document.documentElement.clientHeight - ref.current?.getBoundingClientRect().bottom;\n\n return spaceBelow < CONTAINER_HEIGHT;\n }\n\n return (\n <div ref={ref} className={props.className}>\n <p className={`${styles.copyrightDisclaimer} mb-1`}><Text namespace={namespace} phrase='copyrightDisclaimer' /></p>\n <Overlay\n target={ref.current}\n show={isHovering}\n placement={props.overflowPlacement && preventOverflow() ? props.overflowPlacement : props.placement}\n >\n <div className={`${styles.overlayContainer} mw-100 bg-white border rounded-3 p-2`}>\n <p><Text namespace={namespace} phrase='warning' /></p>\n <p className='fw-semibold mb-0'><Text namespace={namespace} phrase='sharing' /></p>\n </div>\n </Overlay>\n </div>\n );\n}","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, PresentationDescriptor, UserAction } from 'libs/analytics/interfaces';\n\nimport { CurriculumLinkItem } from 'libs/shared/components/curriculum-links/CurriculumLinkItem';\nimport { PartialTagItem } from 'libs/shared/components/tags/PartialTagItem';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { DynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { CurriculumData, Presentation, Video } from 'libs/shared/interfaces';\n\nimport { PartialCurriculumLinks } from './partial-loading/PartialCurriculumLinks';\nimport { CurriculumLinks } from './CurriculumLinks';\n\nconst namespace = 'shared.curriculumLinks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CurriculumLinksWithScrollbarProps {\n video: Video;\n curriculums: CurriculumData;\n emptyStateUrl: string;\n height?: number;\n}\n\nexport function CurriculumLinksWithScrollbar(props: CurriculumLinksWithScrollbarProps): JSX.Element {\n const {\n hasLoaded,\n activeCurriculum,\n availableCurriculums,\n curriculumLinks,\n updateCurriculum\n } = props.curriculums;\n\n const [ selectedCurriculum, setSelectedCurriculum ] = React.useState<Presentation>();\n\n const alerts = useAlerts();\n\n React.useEffect(() => {\n if (!hasLoaded)\n return;\n\n if (!selectedCurriculum)\n setSelectedCurriculum(activeCurriculum ?? ArrayHelper.first(availableCurriculums));\n }, [ activeCurriculum?.id, hasLoaded ]);\n\n function onChangeCurriculum(curriculumId: string): void {\n const newCurriculum = availableCurriculums.find(c => c.id.toString() === curriculumId);\n\n if (!newCurriculum?.id)\n return;\n\n if (selectedCurriculum?.id?.toString() === newCurriculum?.id?.toString())\n return;\n\n setSelectedCurriculum(newCurriculum);\n\n const onError = () => {\n // If the request to change curriculum fails, we reset the select state and alert the user\n setSelectedCurriculum(selectedCurriculum);\n alerts.error(getPhrase('updateFailed'));\n };\n\n const onSuccess = () => {\n AnalyticsHelper.logUserAction({\n id: newCurriculum.id,\n name: newCurriculum.id,\n description: newCurriculum.description,\n videoId: props.video.id,\n videoName: props.video.name\n }, {\n entity: EntityType.Presentation,\n actionType: UserAction.Select,\n descriptor: PresentationDescriptor.Curriculum,\n location: LocationContext.PlayPage\n });\n };\n\n updateCurriculum(newCurriculum, onSuccess, onError);\n }\n\n return (\n <>\n <h2 className='h5 me-2 h-100'>\n <Text namespace={namespace} phrase='heading' />\n </h2>\n <div className='mb-2'>\n <DynamicWidget\n collection={selectedCurriculum?.id ? props.curriculums.nonEmptyCurriculums : null}\n childClassName='flex-shrink-0'\n childComponent={props => {\n return (\n <CurriculumLinkItem\n {...props}\n selected={selectedCurriculum?.id?.toString() === props.data.id.toString()}\n onChangeCurriculum={onChangeCurriculum}\n />\n );\n }}\n partialLoadingComponent={() => <PartialTagItem />}\n widgetDataDeps={[selectedCurriculum?.id?.toString()]}\n />\n </div>\n\n <div className='rounded border mb-3 position-relative'>\n <Scrollbars autoHeight autoHeightMax={props.height}>\n <div className='p-3'>\n {!hasLoaded\n ? <PartialCurriculumLinks />\n : (\n <CurriculumLinks\n curriculumLinks={curriculumLinks}\n emptyStateUrl={props.emptyStateUrl}\n onChangeCurriculum={onChangeCurriculum}\n />\n )}\n </div>\n </Scrollbars>\n </div>\n </>\n );\n}","import React from 'react';\n\nimport { CopyrightDisclaimer } from 'libs/shared/components/copyright-disclaimer/CopyrightDisclaimer';\nimport { CurriculumLinksWithScrollbar } from 'libs/shared/components/curriculum-links/CurriculumLinksWithScrollbar';\nimport { PlayPageResources } from 'libs/shared/components/play-page/resources/PlayPageResources';\nimport { LanguageNamespaceContext } from 'libs/shared/components/text/Text';\nimport { VideoAtAGlance } from 'libs/shared/components/video-at-a-glance/VideoAtAGlance';\nimport { hasGlanceData } from 'libs/shared/components/video-at-a-glance/VideoAtAGlanceUtils';\nimport { VideoDetailsWithScrollbar } from 'libs/shared/components/video-details/VideoDetails';\nimport { VideoDetailsPartial } from 'libs/shared/components/video-details/VideoDetailsPartial';\nimport { MINIMUM_GLANCE_HEIGHT } from 'libs/shared/constants/MinimumGlanceHeight';\nimport { SeoConstants } from 'libs/shared/constants/SeoConstants';\nimport { GlobalPlayerConsumer } from 'libs/shared/context/player-context/components/GlobalPlayerConsumer';\nimport { usePlayerContext } from 'libs/shared/context/player-context/PlayerContext';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useTableOfContentsScroll } from 'libs/shared/hooks/useTableOfContentsScroll';\nimport { CanFavouriteFunc, CurrentUser, CurriculumData, FavouriteFunc, PointOfInterest, PresentationAudience, Theme, Video, YearGroup } from 'libs/shared/interfaces';\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 { 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 { RelatedVideosHash } from 'shared/hooks/useGetRelatedVideos';\nimport { VideoFeaturesHash } from 'shared/hooks/useVideoFeatureAccess';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { PlayPageClips } from './components/clips/PlayPageClips';\nimport { PlayPageInteractives } from './components/interactives/PlayPageInteractives';\nimport { getAppLinks } from './PlayPageUtils';\n\nconst namespace = 'shared.playPage';\n\ninterface PlayPageProps {\n video: Video;\n yearGroups: YearGroup[];\n imageCdnUrl: string;\n relatedVideos: RelatedVideosHash;\n audiences: PresentationAudience[];\n setFavourite?: FavouriteFunc;\n canFavourite?: CanFavouriteFunc;\n glanceTheme?: Theme;\n glanceLoaded: boolean;\n currentUser: CurrentUser;\n pointsOfInterest?: PointOfInterest[];\n playNext: boolean;\n shareId?: string;\n curriculums: CurriculumData;\n featureAccess: VideoFeaturesHash;\n params?: PlayViewQueryParams;\n canManageVideoAccess: boolean;\n tableOfContentsId: string;\n}\n\nexport function PlayPage(props: PlayPageProps): JSX.Element {\n const playerContext = usePlayerContext();\n\n const { hasPermissions } = usePermissions();\n const { canConsume } = VideoHelper.getCanBeConsumed(props.video);\n const canViewPublicly = props.featureAccess.canWatchPublicly(props.video.id);\n\n const isArchived = VideoHelper.isVideoTypeArchived(props.video);\n const hasStudentExperience = hasPermissions(PermissionName.StudentExperience);\n\n const resourcesRef = React.useRef<HTMLDivElement>(null);\n const interactivesRef = React.useRef<HTMLDivElement>(null);\n\n useTableOfContentsScroll([\n resourcesRef.current,\n interactivesRef.current\n ], props.tableOfContentsId);\n\n /**\n * Need to use a ref because if we use state, onExitImmersiveReader will have a stale\n * reference of the state. This is because the state is changed in onLaunchImmersiveReader\n * which is passed in at the same time as onExitImmersiveReader\n */\n const shouldPlayOnExitImmersiveReader = React.useRef(false);\n\n const hasGlance = hasGlanceData(props.video) && props.featureAccess.canViewGlance;\n\n const appLinkFns = getAppLinks();\n\n function onLaunchImmersiveReader(): void {\n shouldPlayOnExitImmersiveReader.current = !playerContext?.playerRef?.current?.isPaused();\n playerContext?.playerRef?.current?.pause();\n }\n\n function onExitImmersiveReader(): void {\n if (!shouldPlayOnExitImmersiveReader.current)\n return;\n\n playerContext?.playerRef?.current?.play();\n }\n\n const showPlayerPlaceholder = playerContext.mode === 'picture-in-picture' || (!canViewPublicly && props.featureAccess.canViewPublicLayout);\n\n const hasCurriculumLinks = !!(props.featureAccess.canViewCurriculumLinks &&\n props.curriculums.customerHasCurriculumLinks);\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <RestrictionBanner\n restrictions={props.video._restrictions}\n yearGroups={props.yearGroups}\n objectId={props.video.id}\n objectTypeId={MasterType.Video}\n canManageVideoAccess={props.canManageVideoAccess}\n />\n \n {isArchived && <ArchivedBanner typeId={props.video.typeId} hasStudentExperience={hasStudentExperience}/>}\n \n <section className={`mb-2 ${SeoConstants.GLOBAL_PLAYER_SELECTOR}`}>\n {(canConsume || canViewPublicly) &&\n <GlobalPlayerConsumer\n key={props.video.id}\n objectId={props.video.id}\n objectTypeId={props.video.typeId}\n shareId={props.shareId}\n context={props.params?.context}\n contextId={props.params?.contextId}\n playNext={props.params?.playNext}\n moviesAndTv={props.params?.mtv}\n startTime={props.params?.t ?? props.params?.startTime}\n endTime={props.params?.endTime}\n mode='default'\n location='play-page'\n />\n }\n <div className={showPlayerPlaceholder ? '' : 'd-none'}>\n <PlayerPlaceholder\n video={props.video}\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n }}\n type={playerContext.mode === 'picture-in-picture' ? 'pip' : 'public'}\n />\n </div>\n </section>\n\n <PlayPageTitleAndActions\n media={props.video}\n yearGroups={props.yearGroups}\n audiences={props.audiences}\n getSeriesAppLink={series => appLinkFns.getSeriesAppLink(series, props.params.mtv)}\n featureAccess={props.featureAccess}\n shareId={props.shareId}\n />\n \n {hasGlance && (\n <section>\n <VideoAtAGlance\n video={props.video}\n pointsOfInterest={props.pointsOfInterest}\n setStartTime={(time: number) => playerContext.playerRef.current?.currentTime(time)}\n getTagAppLink={appLinkFns.getTagAppLink}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n />\n </section>\n )}\n\n <PlayPageResources\n containerRef={resourcesRef}\n video={props.video}\n canViewResources={props.featureAccess.canViewResources}\n imageCdnUrl={props.imageCdnUrl}\n getAppLink={\n appLinkFns.getResourceAppLink(props.video.id, props.shareId, props.featureAccess.canViewResources)\n }\n analyticsData={{ videoId: props.video.id, videoName: props.video.name }}\n resourceThumbnailFallbackUrl={ImageUrls.Fallbacks.RESOURCE_THUMBNAIL}\n />\n\n <PlayPageInteractives\n video={props.video}\n imageCdnUrl={props.imageCdnUrl}\n analyticsData={{ videoId: props.video.id, videoName: props.video.name }}\n canViewInteractives={props.featureAccess.canViewInteractives}\n containerRef={interactivesRef}\n yearGroups={props.yearGroups}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n />\n\n {hasCurriculumLinks && (\n <section>\n <CurriculumLinksWithScrollbar\n video={props.video}\n height={MINIMUM_GLANCE_HEIGHT}\n curriculums={props.curriculums}\n emptyStateUrl={ImageUrls.EmptyStates.CURRICULUM_LINKS}\n />\n </section>\n )}\n\n {props.glanceLoaded ? (\n <section>\n <VideoDetailsWithScrollbar\n video={props.video}\n onLaunchImmersiveReader={onLaunchImmersiveReader}\n onExitImmersiveReader={onExitImmersiveReader}\n getTagAppLink={appLinkFns.getTagAppLink}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n theme={props.glanceTheme}\n />\n </section>\n ) : (\n <VideoDetailsPartial />\n )}\n\n {VideoHelper.isBroadcast(props.video) && <CopyrightDisclaimer placement='bottom-end' className='d-flex justify-content-end mt-n2' />}\n\n <PlayPageClips\n video={props.video}\n clips={props.video.clips?.data ?? []}\n canViewClips={props.featureAccess.canViewClips}\n yearGroups={props.yearGroups}\n imageCdnUrl={props.imageCdnUrl}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n analyticsData={{ videoId: props.video.id, videoName: props.video.name }}\n />\n\n <section>\n <RelatedVideos\n currentVideo={props.video}\n yearGroups={props.yearGroups}\n relatedVideos={props.relatedVideos}\n currentUser={props.currentUser}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n getVideoAppLink={(v, opts) => VideoAppLinkHelper.getAppLink(v, {\n ...opts,\n context: props.params.context,\n contextId: props.params.contextId,\n playNext: props.params.playNext,\n shareId: props.shareId,\n moviesAndTv: props.params.mtv\n })}\n audiences={props.audiences}\n moviesAndTv={props.params.mtv}\n />\n </section>\n </LanguageNamespaceContext.Provider>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"curriculumSubject\":\"GvGYH\",\"curriculumSet\":\"d7RK0\",\"areaLeafSet\":\"XRTAe\",\"closeButton\":\"N3l5Q\",\"heading\":\"hAxR4\",\"leafDescriptionOnly\":\"h66ke\",\"dropdown\":\"CsG6G\",\"tag\":\"rdLqY\",\"cover\":\"etwaD\",\"active\":\"aDLMe\",\"selected\":\"BMrSd\"};"],"names":["CurriculumLinkItem","props","curriculumTag","data","key","id","className","selected","onClick","onChangeCurriculum","toString","src","cover","url","size","alt","name","CurriculumType","namespace","getPhrase","LanguageService","CurriculumLinksEmptyState","EmptyState","emptyStateUrl","altText","Text","phrase","BRACKET_SEGMENT_REGEX","BASE_PILL_CLASS","CurriculumLeaf","getCurriculumCodeClass","baseClass","leaf","uiContainsCodes","codeRef","current","width","getBoundingClientRect","trySetMaxCodeWidth","description","style","minWidth","codeWidth","ref","dangerouslySetInnerHTML","__html","CurriculumSubject","audienceSegment","subjectSegment","audienceBracketSegments","areaAndLeafSets","getLeafStyleClass","linkSet","areasAndLeaves","forEach","areaAndLeafSet","areaText","Area","map","ca","join","Leaf","push","Audience","Subject","match","Object","keys","i","CurriculumLinks","setCodeWidth","currentVal","curriculumLinkSets","curriculumLinks","subject","audience","areas","leaves","curriculumObj","type","length","linkSetKey","PartialCurriculumLinks","PartialCurriculumLinkSection","PartialTagItem","tagClass","classNames","CONTAINER_HEIGHT","CopyrightDisclaimer","isHovering","Overlay","target","show","placement","overflowPlacement","document","documentElement","clientHeight","bottom","CurriculumLinksWithScrollbar","curriculums","hasLoaded","activeCurriculum","availableCurriculums","updateCurriculum","selectedCurriculum","setSelectedCurriculum","alerts","curriculumId","newCurriculum","find","c","AnalyticsHelper","videoId","video","videoName","entity","actionType","descriptor","location","error","ArrayHelper","collection","nonEmptyCurriculums","childClassName","childComponent","partialLoadingComponent","widgetDataDeps","autoHeight","autoHeightMax","height","PlayPage","playerContext","hasPermissions","usePermissions","canConsume","VideoHelper","canViewPublicly","featureAccess","canWatchPublicly","isArchived","hasStudentExperience","PermissionName","resourcesRef","interactivesRef","useTableOfContentsScroll","tableOfContentsId","shouldPlayOnExitImmersiveReader","hasGlance","canViewGlance","appLinkFns","showPlayerPlaceholder","mode","canViewPublicLayout","hasCurriculumLinks","canViewCurriculumLinks","customerHasCurriculumLinks","value","RestrictionBanner","restrictions","_restrictions","yearGroups","objectId","objectTypeId","MasterType","canManageVideoAccess","ArchivedBanner","typeId","SeoConstants","GlobalPlayerConsumer","shareId","context","params","contextId","playNext","moviesAndTv","mtv","startTime","t","endTime","PlayerPlaceholder","appLink","application","action","PlayPageTitleAndActions","media","audiences","getSeriesAppLink","series","VideoAtAGlance","pointsOfInterest","setStartTime","time","playerRef","currentTime","getTagAppLink","suppressInteractivity","PlayPageResources","containerRef","canViewResources","imageCdnUrl","getAppLink","getResourceAppLink","analyticsData","resourceThumbnailFallbackUrl","ImageUrls","PlayPageInteractives","canViewInteractives","setFavourite","canFavourite","glanceLoaded","VideoDetails","onLaunchImmersiveReader","isPaused","pause","onExitImmersiveReader","play","theme","glanceTheme","VideoDetailsPartial","PlayPageClips","clips","canViewClips","RelatedVideos","currentVideo","relatedVideos","currentUser","getVideoAppLink","v","opts","VideoAppLinkHelper"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"scripts/3042-32e303014a-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinkItem.tsx","file:///app/packages/libs/shared/src/enums/CurriculumType.ts","file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinksEmptyState.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinks.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/partial-loading/PartialCurriculumLinks.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/partial-loading/partial-curriculum-links.scss","file:///app/packages/libs/shared/src/components/tags/PartialTagItem.tsx","file:///app/packages/libs/shared/src/components/copyright-disclaimer/copyright-disclaimer.scss","file:///app/packages/libs/shared/src/components/copyright-disclaimer/CopyrightDisclaimer.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinksWithScrollbar.tsx","file:///app/packages/projects/lite/src/shared/components/play-page/PlayPage.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/curriculum-links.scss"],"sourcesContent":["import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './curriculum-links.scss';\n\ninterface CurriculumLinkItemProps {\n data: Presentation;\n onChangeCurriculum: (id: string) => any;\n selected: boolean;\n}\n\nexport function CurriculumLinkItem(props: CurriculumLinkItemProps): JSX.Element {\n const { data: curriculumTag } = props;\n\n return (\n <DivButton\n key={curriculumTag.id}\n className={`p-1 pe-2 rounded-pill d-inline-flex align-items-center cursor-pointer ${styles.tag} ${props.selected ? styles.selected : ''}`}\n onClick={() => props.onChangeCurriculum(curriculumTag.id.toString())}\n >\n <div className={`bg-white ${styles.cover} rounded-circle border`}>\n <img\n src={ImageHelper.createUrl(curriculumTag.cover.url, { size: ImageSize.Small })}\n alt={curriculumTag.name}\n className='rounded-circle'\n />\n </div>\n <div className='ms-2'>\n {curriculumTag.name}\n </div>\n </DivButton>\n );\n}","export enum CurriculumType {\n Subject = 'CurriculumSubject',\n Audience = 'CurriculumAudience',\n Area = 'CurriculumArea',\n Leaf = 'CurriculumLeaf'\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'shared.curriculumLinks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CurriculumLinksEmptyStateProps {\n emptyStateUrl: string;\n}\n\nexport function CurriculumLinksEmptyState(props: CurriculumLinksEmptyStateProps): JSX.Element {\n return (\n <EmptyState className='pt-3'>\n <EmptyState.Image src={props.emptyStateUrl} altText={getPhrase('emptyInfo')} size='small'/>\n <EmptyState.Heading>\n <Text namespace={namespace} phrase='emptyHeading' />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='emptyInfo' />\n </EmptyState.Info>\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { PartialCurriculumLinks } from 'libs/shared/components/curriculum-links/partial-loading/PartialCurriculumLinks';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurriculumType } from 'libs/shared/enums/CurriculumType';\nimport { Curriculum } from 'libs/shared/interfaces';\n\nimport { CurriculumLinksEmptyState } from './CurriculumLinksEmptyState';\n\nimport styles from './curriculum-links.scss';\n\nconst BRACKET_SEGMENT_REGEX = /(.*)\\s\\((.*)?\\)/i;\n\nconst namespace = 'shared.curriculumLinks';\n\nconst BASE_PILL_CLASS = 'text-nowrap font-size-normal rounded-pill py-1 px-2 my-0 d-inline-block';\n\ninterface CurriculumStructure {\n [CurriculumType.Subject]: Curriculum<CurriculumType.Subject>;\n [CurriculumType.Audience]: Curriculum<CurriculumType.Audience>;\n areasAndLeaves: Array<{\n [CurriculumType.Area]: Curriculum<CurriculumType.Area>[];\n [CurriculumType.Leaf]: Curriculum<CurriculumType.Leaf>[];\n }>;\n}\n\ninterface CurriculumLeafProps {\n leaf: Curriculum<CurriculumType.Leaf>;\n codeWidth: number;\n trySetMaxCodeWidth: React.Dispatch<React.SetStateAction<number>>;\n uiContainsCodes: boolean;\n}\n\nfunction CurriculumLeaf(props: CurriculumLeafProps): JSX.Element {\n function getCurriculumCodeClass(): string {\n const baseClass = BASE_PILL_CLASS + ' bg-white border';\n\n // If a leaf has no code but the rest of the UI has leaf nodes w/ codes, we show a special \"No code\" pill\n if (!props.leaf.name && props.uiContainsCodes)\n return baseClass + ' border-secondary text-secondary';\n\n return baseClass + ' border-dark';\n }\n\n const codeRef = React.useRef<HTMLDivElement>();\n\n React.useEffect(() => {\n if (!codeRef.current)\n return;\n\n const { width } = codeRef.current.getBoundingClientRect();\n\n props.trySetMaxCodeWidth(width);\n }, [codeRef.current]);\n\n return (\n <div className='d-flex'>\n {(() => {\n if (!props.leaf.description)\n return <p className='m-0' dangerouslySetInnerHTML={{ __html: props.leaf.name }} />;\n\n /**\n * If a leaf has no code but the rest of the UI has leaf nodes\n * with codes, we show a special \"No code\" pill. Example: https://imgur.com/3L1Ela3\n */\n if (!props.leaf.name && props.uiContainsCodes) {\n return (\n <>\n <div\n className='me-1 align-self-start'\n style={{ minWidth: props.codeWidth ? `${props.codeWidth}px` : 'auto' }}\n >\n <h5 ref={codeRef} className={getCurriculumCodeClass()}>\n <Text namespace={namespace} phrase='noCode' />\n </h5>\n </div>\n <p className='m-0 align-self-center' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />\n </>\n );\n }\n\n /**\n * If a leaf has no code and the rest of the UI leaf nodes have no code, we just\n * display the description with a bullet point. Example: https://imgur.com/jzJvmWs\n */\n if (!props.leaf.name && !props.uiContainsCodes)\n return <p className='m-0' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />;\n\n return (\n <>\n <div\n className='me-1 align-self-start'\n style={{ minWidth: props.codeWidth ? `${props.codeWidth}px` : 'auto' }}\n >\n <h5 ref={codeRef} className={getCurriculumCodeClass()}>{props.leaf.name}</h5>\n </div>\n <p className='m-0 align-self-center' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />\n </>\n );\n })()}\n </div>\n );\n}\n\ninterface CurriculumSubjectProps {\n linkSet: CurriculumStructure;\n codeWidth: number;\n trySetMaxCodeWidth: React.Dispatch<React.SetStateAction<number>>;\n}\n\nfunction CurriculumSubject(props: CurriculumSubjectProps): JSX.Element {\n const areaAndLeafSets: { [areaText: string]: Curriculum<CurriculumType.Leaf>[]; } = {};\n\n let uiContainsCodes = false;\n\n props.linkSet.areasAndLeaves.forEach(areaAndLeafSet => {\n const areaText = areaAndLeafSet[CurriculumType.Area].map(ca => ca.name).join(' - ');\n\n if (areaAndLeafSets[areaText]) {\n areaAndLeafSet[CurriculumType.Leaf].forEach(leaf => {\n areaAndLeafSets[areaText].push(leaf);\n\n // We need the info on if _any_ leaf node has a code in it. See why in the comments in `<CurriculumLeaf />`\n if (leaf.name)\n uiContainsCodes = true;\n });\n\n return;\n }\n\n areaAndLeafSets[areaText] = areaAndLeafSet[CurriculumType.Leaf];\n });\n\n function getAudienceText(): string {\n const audienceSegment = props.linkSet[CurriculumType.Audience].name;\n const subjectSegment = props.linkSet[CurriculumType.Subject].name;\n\n /**\n * In some curriculums, such as the UK curriculum, the audience string may contain a year group\n * in brackets. For example, it may be \"Lower Key Stage 2 (Year 4)\".\n * This regex will pull that segment out if it exists.\n */\n const audienceBracketSegments = audienceSegment.match(BRACKET_SEGMENT_REGEX);\n\n if (audienceBracketSegments)\n return `${audienceBracketSegments[1]} • ${audienceBracketSegments[2]} • ${subjectSegment}`;\n\n return `${audienceSegment} • ${subjectSegment}`;\n }\n\n function getLeafStyleClass(leaf: Curriculum<CurriculumType.Leaf>): string {\n const className = 'mb-2';\n\n if (!leaf.name && !uiContainsCodes)\n return className + ' ms-4 ' + styles.leafDescriptionOnly;\n\n return className;\n }\n\n return (\n <>\n <h3 className={`${BASE_PILL_CLASS} text-white bg-dark-blue fw-normal me-1 mb-2`}>\n {getAudienceText()}\n </h3>\n\n <div className={`me-2 ${styles.curriculumSubject}`}>\n {Object.keys(areaAndLeafSets).map((areaText, i) => {\n return (\n <div key={i} className={styles.areaLeafSet} >\n {areaText && <h4 className='mb-1 font-size-normal'>{areaText}</h4>}\n <ul className='list-unstyled'>\n {areaAndLeafSets[areaText].map(leaf => (\n <li key={leaf.id} className={getLeafStyleClass(leaf)}>\n <CurriculumLeaf\n leaf={leaf}\n codeWidth={props.codeWidth}\n trySetMaxCodeWidth={props.trySetMaxCodeWidth}\n uiContainsCodes={uiContainsCodes}\n />\n </li>\n ))}\n </ul>\n </div>\n );\n })}\n </div>\n </>\n );\n}\n\ninterface CurriculumLinksProps {\n curriculumLinks?: Curriculum[][];\n emptyStateUrl: string;\n onChangeCurriculum?: (id: string) => void;\n}\n\nexport function CurriculumLinks(props: CurriculumLinksProps): JSX.Element {\n const [ codeWidth, setCodeWidth ] = React.useState(0);\n\n function trySetMaxCodeWidth(width: number): void {\n /**\n * The width of the curriculum code column should be identical for each leaf node, meaning\n * the leaf description text will be perfectly vertically aligned all the way down.\n * See here for example: https://imgur.com/MbganZf\n * \n * This is achieved by us setting the state for the maximum code width, and forcing all\n * smaller codes to abide by that max width.\n * \n * This value is used in the `<CurriculumLeaf />` component.\n */\n setCodeWidth(currentVal => {\n if (currentVal >= width)\n return currentVal;\n\n return width;\n });\n }\n\n /**\n * Here, we're taking the structure of links from the backend, and restructuring it in a way\n * that resembles the structure of our UI more closely. The general idea is:\n * \n * CurriculumAudience - CurriculumSubject\n * CurriculumAreas\n * CurriculumLeaves\n */\n const curriculumLinkSets: { [subjectAndAudienceIdKey: string]: CurriculumStructure } = {};\n\n props.curriculumLinks?.forEach(linkSet => {\n let subject: Curriculum<CurriculumType.Subject> = null;\n let audience: Curriculum<CurriculumType.Audience> = null;\n const areas: Curriculum<CurriculumType.Area>[] = [];\n const leaves: Curriculum<CurriculumType.Leaf>[] = [];\n\n linkSet.forEach(curriculumObj => {\n switch (curriculumObj.type) {\n case CurriculumType.Subject:\n subject = curriculumObj as Curriculum<CurriculumType.Subject>;\n break;\n case CurriculumType.Audience:\n audience = curriculumObj as Curriculum<CurriculumType.Audience>;\n break;\n case CurriculumType.Area:\n areas.push(curriculumObj as Curriculum<CurriculumType.Area>);\n break;\n case CurriculumType.Leaf:\n leaves.push(curriculumObj as Curriculum<CurriculumType.Leaf>);\n break;\n default:\n break;\n }\n });\n\n const key = `${subject.id}:${audience.id}`;\n\n if (curriculumLinkSets[key]) {\n curriculumLinkSets[key].areasAndLeaves.push({\n [CurriculumType.Area]: areas,\n [CurriculumType.Leaf]: leaves\n });\n\n return;\n }\n\n curriculumLinkSets[key] = {\n [CurriculumType.Subject]: subject,\n [CurriculumType.Audience]: audience,\n areasAndLeaves: [{\n [CurriculumType.Area]: areas,\n [CurriculumType.Leaf]: leaves\n }]\n };\n });\n\n if (!props.curriculumLinks)\n return <PartialCurriculumLinks />;\n\n if (!props.curriculumLinks?.length) {\n return <CurriculumLinksEmptyState emptyStateUrl={props.emptyStateUrl} />;\n }\n\n return (\n <ul className='list-unstyled m-0'>\n {Object.keys(curriculumLinkSets).map((linkSetKey, i) => (\n <li key={`linkset-${i}`} className={styles.curriculumSet}>\n <CurriculumSubject\n linkSet={curriculumLinkSets[linkSetKey]}\n trySetMaxCodeWidth={trySetMaxCodeWidth}\n codeWidth={codeWidth}\n />\n </li>\n ))}\n </ul>\n );\n}","import React from 'react';\n\nimport styles from './partial-curriculum-links.scss';\n\nconst PartialCurriculumLinkSection = () => (\n <>\n <div className={`partial-loading-background rounded-pill py-1 px-2 d-inline-block me-1 mb-2 ${styles.audience}`} />\n <div>\n <div className={`partial-loading-background mb-1 ${styles.area}`} />\n\n <div className='mb-2 d-flex'>\n <div className={`me-1 align-self-start ${styles.code}`}>\n <div className={`partial-loading-background rounded-pill py-1 px-2 d-inline-block w-100 h-100`} />\n </div>\n \n <div className={`partial-loading-background ${styles.description}`} />\n </div>\n </div>\n </>\n);\n\nexport function PartialCurriculumLinks(): JSX.Element {\n return (\n <div>\n <div className='mb-3'>\n <PartialCurriculumLinkSection />\n </div>\n\n <div className='mb-3'>\n <PartialCurriculumLinkSection />\n </div>\n\n <div>\n <PartialCurriculumLinkSection />\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"audience\":\"vDcrq\",\"area\":\"GXhoW\",\"code\":\"goKaS\",\"description\":\"vFew6\"};","import React from 'react';\n\nimport styles from './tags.scss';\n\ninterface PartialTagItemProps {\n tagClass?: string;\n}\n\nexport const PartialTagItem = React.memo(function({ tagClass = '' }: PartialTagItemProps): JSX.Element {\n const classNames = `partial-loading-background d-inline-block rounded-pill py-1 px-2 mb-1 me-1 text-nowrap ${tagClass} ${styles.partialTag}`;\n\n return (\n <div className='mt-1'>\n <span className={classNames}> </span>\n </div>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"copyrightDisclaimer\":\"z8YoI\",\"overlayContainer\":\"eJDbJ\"};","import React from 'react';\nimport { Overlay } from 'react-bootstrap';\nimport { Placement } from 'react-bootstrap/esm/types';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\n\nimport styles from './copyright-disclaimer.scss';\n\nconst namespace = 'shared.copyrightDisclaimer';\n\nconst CONTAINER_HEIGHT = 150; // px\n\ninterface CopyrightDisclaimerProps {\n placement: Placement;\n overflowPlacement?: Placement;\n className?: string;\n}\n\nexport function CopyrightDisclaimer(props: CopyrightDisclaimerProps) {\n const [ ref, isHovering ] = useHoverIntent<HTMLDivElement>({});\n\n function preventOverflow() {\n const spaceBelow = document.documentElement.clientHeight - ref.current?.getBoundingClientRect().bottom;\n\n return spaceBelow < CONTAINER_HEIGHT;\n }\n\n return (\n <div ref={ref} className={props.className}>\n <p className={`${styles.copyrightDisclaimer} mb-1`}><Text namespace={namespace} phrase='copyrightDisclaimer' /></p>\n <Overlay\n target={ref.current}\n show={isHovering}\n placement={props.overflowPlacement && preventOverflow() ? props.overflowPlacement : props.placement}\n >\n <div className={`${styles.overlayContainer} mw-100 bg-white border rounded-3 p-2`}>\n <p><Text namespace={namespace} phrase='warning' /></p>\n <p className='fw-semibold mb-0'><Text namespace={namespace} phrase='sharing' /></p>\n </div>\n </Overlay>\n </div>\n );\n}","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, PresentationDescriptor, UserAction } from 'libs/analytics/interfaces';\n\nimport { CurriculumLinkItem } from 'libs/shared/components/curriculum-links/CurriculumLinkItem';\nimport { PartialTagItem } from 'libs/shared/components/tags/PartialTagItem';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { DynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { CurriculumData, Presentation, Video } from 'libs/shared/interfaces';\n\nimport { PartialCurriculumLinks } from './partial-loading/PartialCurriculumLinks';\nimport { CurriculumLinks } from './CurriculumLinks';\n\nconst namespace = 'shared.curriculumLinks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CurriculumLinksWithScrollbarProps {\n video: Video;\n curriculums: CurriculumData;\n emptyStateUrl: string;\n height?: number;\n}\n\nexport function CurriculumLinksWithScrollbar(props: CurriculumLinksWithScrollbarProps): JSX.Element {\n const {\n hasLoaded,\n activeCurriculum,\n availableCurriculums,\n curriculumLinks,\n updateCurriculum\n } = props.curriculums;\n\n const [ selectedCurriculum, setSelectedCurriculum ] = React.useState<Presentation>();\n\n const alerts = useAlerts();\n\n React.useEffect(() => {\n if (!hasLoaded)\n return;\n\n if (!selectedCurriculum)\n setSelectedCurriculum(activeCurriculum ?? ArrayHelper.first(availableCurriculums));\n }, [ activeCurriculum?.id, hasLoaded ]);\n\n function onChangeCurriculum(curriculumId: string): void {\n const newCurriculum = availableCurriculums.find(c => c.id.toString() === curriculumId);\n\n if (!newCurriculum?.id)\n return;\n\n if (selectedCurriculum?.id?.toString() === newCurriculum?.id?.toString())\n return;\n\n setSelectedCurriculum(newCurriculum);\n\n const onError = () => {\n // If the request to change curriculum fails, we reset the select state and alert the user\n setSelectedCurriculum(selectedCurriculum);\n alerts.error(getPhrase('updateFailed'));\n };\n\n const onSuccess = () => {\n AnalyticsHelper.logUserAction({\n id: newCurriculum.id,\n name: newCurriculum.id,\n description: newCurriculum.description,\n videoId: props.video.id,\n videoName: props.video.name\n }, {\n entity: EntityType.Presentation,\n actionType: UserAction.Select,\n descriptor: PresentationDescriptor.Curriculum,\n location: LocationContext.PlayPage\n });\n };\n\n updateCurriculum(newCurriculum, onSuccess, onError);\n }\n\n return (\n <>\n <h2 className='h5 me-2 h-100'>\n <Text namespace={namespace} phrase='heading' />\n </h2>\n <div className='mb-2'>\n <DynamicWidget\n collection={selectedCurriculum?.id ? props.curriculums.nonEmptyCurriculums : null}\n childClassName='flex-shrink-0'\n childComponent={props => {\n return (\n <CurriculumLinkItem\n {...props}\n selected={selectedCurriculum?.id?.toString() === props.data.id.toString()}\n onChangeCurriculum={onChangeCurriculum}\n />\n );\n }}\n partialLoadingComponent={() => <PartialTagItem />}\n widgetDataDeps={[selectedCurriculum?.id?.toString()]}\n />\n </div>\n\n <div className='rounded border mb-4 position-relative'>\n <Scrollbars autoHeight autoHeightMax={props.height}>\n <div className='p-3'>\n {!hasLoaded\n ? <PartialCurriculumLinks />\n : (\n <CurriculumLinks\n curriculumLinks={curriculumLinks}\n emptyStateUrl={props.emptyStateUrl}\n onChangeCurriculum={onChangeCurriculum}\n />\n )}\n </div>\n </Scrollbars>\n </div>\n </>\n );\n}","import React from 'react';\n\nimport { CopyrightDisclaimer } from 'libs/shared/components/copyright-disclaimer/CopyrightDisclaimer';\nimport { CurriculumLinksWithScrollbar } from 'libs/shared/components/curriculum-links/CurriculumLinksWithScrollbar';\nimport { PlayPageResources } from 'libs/shared/components/play-page/resources/PlayPageResources';\nimport { LanguageNamespaceContext } from 'libs/shared/components/text/Text';\nimport { VideoAtAGlance } from 'libs/shared/components/video-at-a-glance/VideoAtAGlance';\nimport { hasGlanceData } from 'libs/shared/components/video-at-a-glance/VideoAtAGlanceUtils';\nimport { VideoDetailsWithScrollbar } from 'libs/shared/components/video-details/VideoDetails';\nimport { VideoDetailsPartial } from 'libs/shared/components/video-details/VideoDetailsPartial';\nimport { MINIMUM_GLANCE_HEIGHT } from 'libs/shared/constants/MinimumGlanceHeight';\nimport { SeoConstants } from 'libs/shared/constants/SeoConstants';\nimport { GlobalPlayerConsumer } from 'libs/shared/context/player-context/components/GlobalPlayerConsumer';\nimport { usePlayerContext } from 'libs/shared/context/player-context/PlayerContext';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useTableOfContentsScroll } from 'libs/shared/hooks/useTableOfContentsScroll';\nimport { CanFavouriteFunc, CurrentUser, CurriculumData, FavouriteFunc, PointOfInterest, PresentationAudience, Theme, Video, YearGroup } from 'libs/shared/interfaces';\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 { 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 { RelatedVideosHash } from 'shared/hooks/useGetRelatedVideos';\nimport { VideoFeaturesHash } from 'shared/hooks/useVideoFeatureAccess';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { PlayPageClips } from './components/clips/PlayPageClips';\nimport { PlayPageInteractives } from './components/interactives/PlayPageInteractives';\nimport { getAppLinks } from './PlayPageUtils';\n\nconst namespace = 'shared.playPage';\n\ninterface PlayPageProps {\n video: Video;\n yearGroups: YearGroup[];\n imageCdnUrl: string;\n relatedVideos: RelatedVideosHash;\n audiences: PresentationAudience[];\n setFavourite?: FavouriteFunc;\n canFavourite?: CanFavouriteFunc;\n glanceTheme?: Theme;\n glanceLoaded: boolean;\n currentUser: CurrentUser;\n pointsOfInterest?: PointOfInterest[];\n playNext: boolean;\n shareId?: string;\n curriculums: CurriculumData;\n featureAccess: VideoFeaturesHash;\n params?: PlayViewQueryParams;\n canManageVideoAccess: boolean;\n tableOfContentsId: string;\n}\n\nexport function PlayPage(props: PlayPageProps): JSX.Element {\n const playerContext = usePlayerContext();\n\n const { hasPermissions } = usePermissions();\n const { canConsume } = VideoHelper.getCanBeConsumed(props.video);\n const canViewPublicly = props.featureAccess.canWatchPublicly(props.video.id);\n\n const isArchived = VideoHelper.isVideoTypeArchived(props.video);\n const hasStudentExperience = hasPermissions(PermissionName.StudentExperience);\n\n const resourcesRef = React.useRef<HTMLDivElement>(null);\n const interactivesRef = React.useRef<HTMLDivElement>(null);\n\n useTableOfContentsScroll([\n resourcesRef.current,\n interactivesRef.current\n ], props.tableOfContentsId);\n\n /**\n * Need to use a ref because if we use state, onExitImmersiveReader will have a stale\n * reference of the state. This is because the state is changed in onLaunchImmersiveReader\n * which is passed in at the same time as onExitImmersiveReader\n */\n const shouldPlayOnExitImmersiveReader = React.useRef(false);\n\n const hasGlance = hasGlanceData(props.video) && props.featureAccess.canViewGlance;\n\n const appLinkFns = getAppLinks();\n\n function onLaunchImmersiveReader(): void {\n shouldPlayOnExitImmersiveReader.current = !playerContext?.playerRef?.current?.isPaused();\n playerContext?.playerRef?.current?.pause();\n }\n\n function onExitImmersiveReader(): void {\n if (!shouldPlayOnExitImmersiveReader.current)\n return;\n\n playerContext?.playerRef?.current?.play();\n }\n\n const showPlayerPlaceholder = playerContext.mode === 'picture-in-picture' || (!canViewPublicly && props.featureAccess.canViewPublicLayout);\n\n const hasCurriculumLinks = !!(props.featureAccess.canViewCurriculumLinks &&\n props.curriculums.customerHasCurriculumLinks);\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <RestrictionBanner\n restrictions={props.video._restrictions}\n yearGroups={props.yearGroups}\n objectId={props.video.id}\n objectTypeId={MasterType.Video}\n canManageVideoAccess={props.canManageVideoAccess}\n />\n \n {isArchived && <ArchivedBanner typeId={props.video.typeId} hasStudentExperience={hasStudentExperience}/>}\n \n <section className={`mb-2 ${SeoConstants.GLOBAL_PLAYER_SELECTOR}`}>\n {(canConsume || canViewPublicly) &&\n <GlobalPlayerConsumer\n key={props.video.id}\n objectId={props.video.id}\n objectTypeId={props.video.typeId}\n shareId={props.shareId}\n context={props.params?.context}\n contextId={props.params?.contextId}\n playNext={props.params?.playNext}\n moviesAndTv={props.params?.mtv}\n startTime={props.params?.t ?? props.params?.startTime}\n endTime={props.params?.endTime}\n mode='default'\n location='play-page'\n />\n }\n <div className={showPlayerPlaceholder ? '' : 'd-none'}>\n <PlayerPlaceholder\n video={props.video}\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n }}\n type={playerContext.mode === 'picture-in-picture' ? 'pip' : 'public'}\n />\n </div>\n </section>\n\n <PlayPageTitleAndActions\n media={props.video}\n yearGroups={props.yearGroups}\n audiences={props.audiences}\n getSeriesAppLink={series => appLinkFns.getSeriesAppLink(series, props.params.mtv)}\n featureAccess={props.featureAccess}\n shareId={props.shareId}\n />\n \n {hasGlance && (\n <section>\n <VideoAtAGlance\n video={props.video}\n pointsOfInterest={props.pointsOfInterest}\n setStartTime={(time: number) => playerContext.playerRef.current?.currentTime(time)}\n getTagAppLink={appLinkFns.getTagAppLink}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n />\n </section>\n )}\n\n <PlayPageResources\n containerRef={resourcesRef}\n video={props.video}\n canViewResources={props.featureAccess.canViewResources}\n imageCdnUrl={props.imageCdnUrl}\n getAppLink={\n appLinkFns.getResourceAppLink(props.video.id, props.shareId, props.featureAccess.canViewResources)\n }\n analyticsData={{ videoId: props.video.id, videoName: props.video.name }}\n resourceThumbnailFallbackUrl={ImageUrls.Fallbacks.RESOURCE_THUMBNAIL}\n />\n\n <PlayPageInteractives\n video={props.video}\n imageCdnUrl={props.imageCdnUrl}\n analyticsData={{ videoId: props.video.id, videoName: props.video.name }}\n canViewInteractives={props.featureAccess.canViewInteractives}\n containerRef={interactivesRef}\n yearGroups={props.yearGroups}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n />\n\n {hasCurriculumLinks && (\n <section>\n <CurriculumLinksWithScrollbar\n video={props.video}\n height={MINIMUM_GLANCE_HEIGHT}\n curriculums={props.curriculums}\n emptyStateUrl={ImageUrls.EmptyStates.CURRICULUM_LINKS}\n />\n </section>\n )}\n\n {props.glanceLoaded ? (\n <section>\n <VideoDetailsWithScrollbar\n video={props.video}\n onLaunchImmersiveReader={onLaunchImmersiveReader}\n onExitImmersiveReader={onExitImmersiveReader}\n getTagAppLink={appLinkFns.getTagAppLink}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n theme={props.glanceTheme}\n />\n </section>\n ) : (\n <VideoDetailsPartial />\n )}\n\n {VideoHelper.isBroadcast(props.video) && <CopyrightDisclaimer placement='bottom-end' className='d-flex justify-content-end mt-n2' />}\n\n <PlayPageClips\n video={props.video}\n clips={props.video.clips?.data ?? []}\n canViewClips={props.featureAccess.canViewClips}\n yearGroups={props.yearGroups}\n imageCdnUrl={props.imageCdnUrl}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n analyticsData={{ videoId: props.video.id, videoName: props.video.name }}\n />\n\n <section>\n <RelatedVideos\n currentVideo={props.video}\n yearGroups={props.yearGroups}\n relatedVideos={props.relatedVideos}\n currentUser={props.currentUser}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n getVideoAppLink={(v, opts) => VideoAppLinkHelper.getAppLink(v, {\n ...opts,\n context: props.params.context,\n contextId: props.params.contextId,\n playNext: props.params.playNext,\n shareId: props.shareId,\n moviesAndTv: props.params.mtv\n })}\n audiences={props.audiences}\n moviesAndTv={props.params.mtv}\n />\n </section>\n </LanguageNamespaceContext.Provider>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"curriculumSubject\":\"GvGYH\",\"curriculumSet\":\"d7RK0\",\"areaLeafSet\":\"XRTAe\",\"closeButton\":\"N3l5Q\",\"heading\":\"hAxR4\",\"leafDescriptionOnly\":\"h66ke\",\"dropdown\":\"CsG6G\",\"tag\":\"rdLqY\",\"cover\":\"etwaD\",\"active\":\"aDLMe\",\"selected\":\"BMrSd\"};"],"names":["CurriculumLinkItem","props","curriculumTag","data","key","id","className","selected","onClick","onChangeCurriculum","toString","src","cover","url","size","alt","name","CurriculumType","namespace","getPhrase","LanguageService","CurriculumLinksEmptyState","EmptyState","emptyStateUrl","altText","Text","phrase","BRACKET_SEGMENT_REGEX","BASE_PILL_CLASS","CurriculumLeaf","getCurriculumCodeClass","baseClass","leaf","uiContainsCodes","codeRef","current","width","getBoundingClientRect","trySetMaxCodeWidth","description","style","minWidth","codeWidth","ref","dangerouslySetInnerHTML","__html","CurriculumSubject","audienceSegment","subjectSegment","audienceBracketSegments","areaAndLeafSets","getLeafStyleClass","linkSet","areasAndLeaves","forEach","areaAndLeafSet","areaText","Area","map","ca","join","Leaf","push","Audience","Subject","match","Object","keys","i","CurriculumLinks","setCodeWidth","currentVal","curriculumLinkSets","curriculumLinks","subject","audience","areas","leaves","curriculumObj","type","length","linkSetKey","PartialCurriculumLinks","PartialCurriculumLinkSection","PartialTagItem","tagClass","classNames","CONTAINER_HEIGHT","CopyrightDisclaimer","isHovering","Overlay","target","show","placement","overflowPlacement","document","documentElement","clientHeight","bottom","CurriculumLinksWithScrollbar","curriculums","hasLoaded","activeCurriculum","availableCurriculums","updateCurriculum","selectedCurriculum","setSelectedCurriculum","alerts","curriculumId","newCurriculum","find","c","AnalyticsHelper","videoId","video","videoName","entity","actionType","descriptor","location","error","ArrayHelper","collection","nonEmptyCurriculums","childClassName","childComponent","partialLoadingComponent","widgetDataDeps","autoHeight","autoHeightMax","height","PlayPage","playerContext","hasPermissions","usePermissions","canConsume","VideoHelper","canViewPublicly","featureAccess","canWatchPublicly","isArchived","hasStudentExperience","PermissionName","resourcesRef","interactivesRef","useTableOfContentsScroll","tableOfContentsId","shouldPlayOnExitImmersiveReader","hasGlance","canViewGlance","appLinkFns","showPlayerPlaceholder","mode","canViewPublicLayout","hasCurriculumLinks","canViewCurriculumLinks","customerHasCurriculumLinks","value","RestrictionBanner","restrictions","_restrictions","yearGroups","objectId","objectTypeId","MasterType","canManageVideoAccess","ArchivedBanner","typeId","SeoConstants","GlobalPlayerConsumer","shareId","context","params","contextId","playNext","moviesAndTv","mtv","startTime","t","endTime","PlayerPlaceholder","appLink","application","action","PlayPageTitleAndActions","media","audiences","getSeriesAppLink","series","VideoAtAGlance","pointsOfInterest","setStartTime","time","playerRef","currentTime","getTagAppLink","suppressInteractivity","PlayPageResources","containerRef","canViewResources","imageCdnUrl","getAppLink","getResourceAppLink","analyticsData","resourceThumbnailFallbackUrl","ImageUrls","PlayPageInteractives","canViewInteractives","setFavourite","canFavourite","glanceLoaded","VideoDetails","onLaunchImmersiveReader","isPaused","pause","onExitImmersiveReader","play","theme","glanceTheme","VideoDetailsPartial","PlayPageClips","clips","canViewClips","RelatedVideos","currentVideo","relatedVideos","currentUser","getVideoAppLink","v","opts","VideoAppLinkHelper"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[32],{94644:(e,a,t)=>{t.d(a,{r:()=>u});var i=t(50242),d=t(81886),n=t(67058),r=t(14553),o=t(49267),s=t(49075),c={notFound:n.d,forbidden:{rating:r.q,yearLevel:r.q,region:o.a,privacy:r.q},badRequest:s._};function u(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 n;n="number"==typeof e?e:e.status;var r=Object.assign(Object.assign({},c),a);n&&d.Q.Ry.isStatusCodeError(n)&&(n!==i.o.NotFound?n!==i.o.Forbidden?t.badRequest||d.Q.Ry.throw(new r.badRequest):t.forbidden||d.Q.Ry.throw(new r.forbidden.privacy):t.notFound||d.Q.Ry.throw(new r.notFound))}}},91286:(e,a,t)=>{t.d(a,{v:()=>r});var i=t(32735),d=t(94644);function n(e){return e.map((function(e){return e.statusCode})).join(":")}function r(e,a,t){var r=Array.isArray(e)?e:[e];(0,i.useEffect)((function(){r.forEach((function(e){(0,d.r)(e.statusCode,a,t)}))}),[n(r),a,t])}},27478:(e,a,t)=>{t.r(a),t.d(a,{PlayClipView:()=>j});var i=t(32735),d=t(50242),n=t(23481),r=t(20354),o=t(65858),s=t(78417),c=t(16714),u=t(67058),l=t(33803),v=t(43012),p=t(39151),h=t(1666),m=t(28907),f=t(31949),g=t(1575),y=t(27995),C=t(91286),b=t(22902),F=t(15311),P=t(79612),w=t(76753),q=t(56871),V=t(7179),R=t(49948),k=t(36873),A=t(27638),B=t(44110),I=t(35014),_=t(97816),O=n.T.encloseNamespace("shared.playClip"),T={notFound:u.d,forbidden:{privacy:l.G}};function j(e){var a,t,n,u,l,j,x,E=e.queryParams,G=E.context,M=E.contextId,U=E.mtv,L=(0,F.r)().hasProduct,N=(0,A.u)(o.LZ.PlayClip),Q=N.setFavourite,S=N.canFavourite,D=(0,b.T)().hasPermissions,H=r.a.useBasicFetch(f.N.currentUser()),Z=r.a.useBasicFetch(p.L.config()),z=r.a.useBasicFetch(v.e.clip(e.id)),J=r.a.useBasicFetch(!!(null===(a=z.data)||void 0===a?void 0:a._parentVideo)&&g.R.video(z.data._parentVideo.id,null,null===(t=H.data)||void 0===t?void 0:t.id)),K=r.a.useBasicFetch(z.statusCode===d.o.Forbidden&&v.e.clip(e.id,s.r.StripMetadata)),W=(0,k.k)({video:J.data,context:G,contextId:M,moviesAndTv:U,currentUser:H.data}),X=(0,B.i)(),Y=r.a.useBasicFetch((null===(n=H.data)||void 0===n?void 0:n.isAuthenticated)&&h.h.yearGroups(H.data.customerId)),$=D(c.C.ViewVideoGlance)&&(null===(l=null===(u=z.data)||void 0===u?void 0:u.glance)||void 0===l?void 0:l.theme),ee=r.a.useBasicFetch($&&m.r.themeImages(z.data.glance.theme,z.data.glance.type)),ae=(0,R.l)(e.id,!0),te=(0,I.I)();return(0,P.M)(w.CG.getClipMetadata({content:z.data,phraseContext:{phraseHandler:O,titlePhrase:"pageTitle",descriptionPhrase:"pageDescription"}})),(0,C.v)(z,T,{forbidden:!0}),(0,_.V)(null!==(j=W.videos)&&void 0!==j?j:[]),(0,y.b)(K),(0,V.P)({id:e.id,app:"clips"}),z.data&&H.hasCompleted&&Z.hasCompleted&&ae.hasCompleted?i.createElement(q.N,{clip:z.data,originalVideo:J.data,currentUser:H.data,yearGroups:Y.data,relatedVideos:"playlist"===G?W:Object.assign(Object.assign({},W),{videos:[]}),canFavourite:S,setFavourite:Q,hasProduct:L,queryParams:e.queryParams,audiences:X.data,imageCdnUrl:Z.data.imageCdnUrl,canManageVideoAccess:D(c.C.ManageVideoAccess),pointsOfInterest:ae.items,glanceTheme:ee.data,glanceLoaded:!$||ee.hasCompleted,featureAccess:te,tableOfContentsId:null===(x=e.queryParams)||void 0===x?void 0:x.scrollTo}):i.createElement(i.Fragment,null)}j.defaultProps={queryParams:{}}}}]);
|
|
2
|
+
//# sourceMappingURL=32-cf9b8ba599-lite.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/32-cf9b8ba599-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}\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};\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.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 { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { ThemeRequests } from 'libs/shared/flight-requests/ThemeRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\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 { Clip, Config, CurrentUser, Theme, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { PlayClip } from 'shared/components/play-clip/PlayClip';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { useFetchPointsOfInterest } from 'shared/hooks/useFetchPointsOfInterest';\nimport { useGetRelatedVideos } from 'shared/hooks/useGetRelatedVideos';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { usePresentationAudiences } from 'shared/hooks/usePresentationAudiences';\nimport { useVideoFeatureAccess } from 'shared/hooks/useVideoFeatureAccess';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\n\nconst namespace = 'shared.playClip';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst clipErrors = {\n notFound: NotFoundError,\n forbidden: {\n privacy: VideoPrivateError\n }\n};\n\ninterface PlayClipViewProps {\n id: string;\n queryParams: PlayViewQueryParams;\n}\n\nPlayClipView.defaultProps = {\n queryParams: {}\n};\n\nexport function PlayClipView(props: PlayClipViewProps): JSX.Element {\n const { context, contextId, mtv } = props.queryParams;\n\n const { hasProduct } = useProducts();\n const { setFavourite, canFavourite } = useLiteFavourites(LocationContext.PlayClip);\n const { hasPermissions } = usePermissions();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const clip = Flight.useBasicFetch<Clip>(ClipRequests.clip(props.id));\n const video = Flight.useBasicFetch<Video>(!!clip.data?._parentVideo &&\n VideoRequests.video(clip.data._parentVideo.id, null, currentUser.data?.id));\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 yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const shouldFetchTheme = hasPermissions(PermissionName.ViewVideoGlance) &&\n clip.data?.glance?.theme;\n \n const glanceTheme = Flight.useBasicFetch<Theme>(\n shouldFetchTheme &&\n ThemeRequests.themeImages(clip.data.glance.theme, clip.data.glance.type)\n );\n const pointsOfInterest = useFetchPointsOfInterest(props.id, true);\n \n const featureAccess = useVideoFeatureAccess();\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 config.hasCompleted &&\n pointsOfInterest.hasCompleted\n );\n\n if (!hasLoaded)\n return <></>;\n\n return (\n <PlayClip\n clip={clip.data}\n originalVideo={video.data}\n currentUser={currentUser.data}\n yearGroups={yearGroups.data}\n // we only show up next videos for clips in a playlist\n relatedVideos={context === 'playlist' ? relatedVideos : { ...relatedVideos, videos: []}}\n canFavourite={canFavourite}\n setFavourite={setFavourite}\n hasProduct={hasProduct}\n queryParams={props.queryParams}\n audiences={audiences.data}\n imageCdnUrl={config.data.imageCdnUrl}\n canManageVideoAccess={hasPermissions(PermissionName.ManageVideoAccess)}\n pointsOfInterest={pointsOfInterest.items}\n glanceTheme={glanceTheme.data}\n glanceLoaded={!shouldFetchTheme || glanceTheme.hasCompleted}\n featureAccess={featureAccess}\n tableOfContentsId={props.queryParams?.scrollTo}\n />\n );\n}"],"names":["defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","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","u","setFavourite","canFavourite","hasPermissions","currentUser","config","clip","id","video","data","_parentVideo","strippedClip","relatedVideos","moviesAndTv","audiences","yearGroups","isAuthenticated","customerId","shouldFetchTheme","glance","theme","glanceTheme","type","pointsOfInterest","featureAccess","content","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","videos","app","hasCompleted","originalVideo","imageCdnUrl","canManageVideoAccess","items","glanceLoaded","tableOfContentsId","scrollTo","defaultProps"],"sourceRoot":""}
|