@clickview/lite 0.58.1 → 0.58.2-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/scripts/1041-29107d9409-lite.chunk.js +2 -0
- package/dist/scripts/1041-29107d9409-lite.chunk.js.map +1 -0
- package/dist/scripts/{1080-563b65eb58-lite.chunk.js → 1080-48ce32d627-lite.chunk.js} +2 -2
- package/dist/scripts/1080-48ce32d627-lite.chunk.js.map +1 -0
- package/dist/scripts/{1169-f2120c91cc-lite.chunk.js → 1169-1443c8a778-lite.chunk.js} +2 -2
- package/dist/scripts/1169-1443c8a778-lite.chunk.js.map +1 -0
- package/dist/scripts/143-efbc6a41c5-lite.chunk.js +2 -0
- package/dist/scripts/143-efbc6a41c5-lite.chunk.js.map +1 -0
- package/dist/scripts/{170-94b806dc73-lite.chunk.js → 170-233a87b708-lite.chunk.js} +3 -3
- package/dist/scripts/170-233a87b708-lite.chunk.js.map +1 -0
- package/dist/scripts/2015-d1bc58c0eb-lite.chunk.js +2 -0
- package/dist/scripts/2015-d1bc58c0eb-lite.chunk.js.map +1 -0
- package/dist/scripts/204-4f5b47b73f-lite.chunk.js +2 -0
- package/dist/scripts/204-4f5b47b73f-lite.chunk.js.map +1 -0
- package/dist/scripts/{2153-7663eb7803-lite.chunk.js → 2153-02090c64f8-lite.chunk.js} +2 -2
- package/dist/scripts/2153-02090c64f8-lite.chunk.js.map +1 -0
- package/dist/scripts/2215-39ee2a2b3f-lite.chunk.js +2 -0
- package/dist/scripts/2215-39ee2a2b3f-lite.chunk.js.map +1 -0
- package/dist/scripts/{2340-d1548f6362-lite.chunk.js → 2340-62c86fabb2-lite.chunk.js} +2 -2
- package/dist/scripts/2340-62c86fabb2-lite.chunk.js.map +1 -0
- package/dist/scripts/2571-c280e72eff-lite.chunk.js +2 -0
- package/dist/scripts/2571-c280e72eff-lite.chunk.js.map +1 -0
- package/dist/scripts/{4013-3d2edd41fb-lite.chunk.js → 4013-2aff1769f5-lite.chunk.js} +3 -3
- package/dist/scripts/4013-2aff1769f5-lite.chunk.js.map +1 -0
- package/dist/scripts/{490-002054a946-lite.chunk.js → 490-62ca33b520-lite.chunk.js} +2 -2
- package/dist/scripts/490-62ca33b520-lite.chunk.js.map +1 -0
- package/dist/scripts/4944-a780ed2439-lite.chunk.js +2 -0
- package/dist/scripts/4944-a780ed2439-lite.chunk.js.map +1 -0
- package/dist/scripts/{5220-40dd0842b5-lite.chunk.js → 5220-e0074ed079-lite.chunk.js} +3 -3
- package/dist/scripts/5220-e0074ed079-lite.chunk.js.map +1 -0
- package/dist/scripts/{5224-09e451b12f-lite.chunk.js → 5224-53cabe5c40-lite.chunk.js} +2 -2
- package/dist/scripts/5224-53cabe5c40-lite.chunk.js.map +1 -0
- package/dist/scripts/{5836-f212660b94-lite.chunk.js → 5836-03975cbcf8-lite.chunk.js} +2 -2
- package/dist/scripts/5836-03975cbcf8-lite.chunk.js.map +1 -0
- package/dist/scripts/{5936-f1e642e93f-lite.chunk.js → 5936-71d764494c-lite.chunk.js} +2 -2
- package/dist/scripts/5936-71d764494c-lite.chunk.js.map +1 -0
- package/dist/scripts/{6118-d069072bb6-lite.chunk.js → 6118-e4ebf5a2c1-lite.chunk.js} +2 -2
- package/dist/scripts/6118-e4ebf5a2c1-lite.chunk.js.map +1 -0
- package/dist/scripts/{6263-c665ac8df6-lite.chunk.js → 6263-fca75a8668-lite.chunk.js} +2 -2
- package/dist/scripts/6263-fca75a8668-lite.chunk.js.map +1 -0
- package/dist/scripts/{6599-c87f4f5ec1-lite.chunk.js → 6599-d8f1b255c5-lite.chunk.js} +3 -3
- package/dist/scripts/6599-d8f1b255c5-lite.chunk.js.map +1 -0
- package/dist/scripts/{6741-1ee9b683c7-lite.chunk.js → 6741-638b658087-lite.chunk.js} +3 -3
- package/dist/scripts/6741-638b658087-lite.chunk.js.map +1 -0
- package/dist/scripts/6934-5688ca7ce7-lite.chunk.js +2 -0
- package/dist/scripts/6934-5688ca7ce7-lite.chunk.js.map +1 -0
- package/dist/scripts/{7234-d1a173cb25-lite.chunk.js → 7234-8664150dd4-lite.chunk.js} +2 -2
- package/dist/scripts/7234-8664150dd4-lite.chunk.js.map +1 -0
- package/dist/scripts/{7556-69f8cb3b20-lite.chunk.js → 7556-276466341c-lite.chunk.js} +3 -3
- package/dist/scripts/7556-276466341c-lite.chunk.js.map +1 -0
- package/dist/scripts/{7709-57c48d288e-lite.chunk.js → 7709-adf3f9328f-lite.chunk.js} +2 -2
- package/dist/scripts/7709-adf3f9328f-lite.chunk.js.map +1 -0
- package/dist/scripts/{839-f8478d27f8-lite.chunk.js → 839-aaf4cad363-lite.chunk.js} +1 -1
- package/dist/scripts/{839-f8478d27f8-lite.chunk.js.map → 839-aaf4cad363-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9139-456a0f14a5-lite.chunk.js → 9139-e8c1a686af-lite.chunk.js} +2 -2
- package/dist/scripts/9139-e8c1a686af-lite.chunk.js.map +1 -0
- package/dist/scripts/{9173-e03b30b436-lite.chunk.js → 9173-90aa484be4-lite.chunk.js} +2 -2
- package/dist/scripts/9173-90aa484be4-lite.chunk.js.map +1 -0
- package/dist/scripts/9284-c0cee27d0e-lite.chunk.js +2 -0
- package/dist/scripts/9284-c0cee27d0e-lite.chunk.js.map +1 -0
- package/dist/scripts/{9395-70cd9ae3a1-lite.chunk.js → 9395-355efbc0e7-lite.chunk.js} +3 -3
- package/dist/scripts/{9395-70cd9ae3a1-lite.chunk.js.map → 9395-355efbc0e7-lite.chunk.js.map} +1 -1
- package/dist/scripts/{953-45aa51744b-lite.chunk.js → 953-b3b777612b-lite.chunk.js} +3 -3
- package/dist/scripts/{953-45aa51744b-lite.chunk.js.map → 953-b3b777612b-lite.chunk.js.map} +1 -1
- package/dist/scripts/bundle-22b3c87b82.min.js +3 -0
- package/dist/scripts/bundle-22b3c87b82.min.js.map +1 -0
- package/package.json +1 -1
- package/dist/scripts/1080-563b65eb58-lite.chunk.js.map +0 -1
- package/dist/scripts/1169-f2120c91cc-lite.chunk.js.map +0 -1
- package/dist/scripts/143-4ea7a69434-lite.chunk.js +0 -2
- package/dist/scripts/143-4ea7a69434-lite.chunk.js.map +0 -1
- package/dist/scripts/170-94b806dc73-lite.chunk.js.map +0 -1
- package/dist/scripts/204-2b19b80cc1-lite.chunk.js +0 -2
- package/dist/scripts/204-2b19b80cc1-lite.chunk.js.map +0 -1
- package/dist/scripts/2153-7663eb7803-lite.chunk.js.map +0 -1
- package/dist/scripts/2215-5e8af1456d-lite.chunk.js +0 -2
- package/dist/scripts/2215-5e8af1456d-lite.chunk.js.map +0 -1
- package/dist/scripts/2340-d1548f6362-lite.chunk.js.map +0 -1
- package/dist/scripts/3525-45e28232cf-lite.chunk.js +0 -2
- package/dist/scripts/3525-45e28232cf-lite.chunk.js.map +0 -1
- package/dist/scripts/4013-3d2edd41fb-lite.chunk.js.map +0 -1
- package/dist/scripts/490-002054a946-lite.chunk.js.map +0 -1
- package/dist/scripts/4944-b565b5c501-lite.chunk.js +0 -2
- package/dist/scripts/4944-b565b5c501-lite.chunk.js.map +0 -1
- package/dist/scripts/5220-40dd0842b5-lite.chunk.js.map +0 -1
- package/dist/scripts/5224-09e451b12f-lite.chunk.js.map +0 -1
- package/dist/scripts/5836-f212660b94-lite.chunk.js.map +0 -1
- package/dist/scripts/5936-f1e642e93f-lite.chunk.js.map +0 -1
- package/dist/scripts/6118-d069072bb6-lite.chunk.js.map +0 -1
- package/dist/scripts/6263-c665ac8df6-lite.chunk.js.map +0 -1
- package/dist/scripts/6599-c87f4f5ec1-lite.chunk.js.map +0 -1
- package/dist/scripts/6741-1ee9b683c7-lite.chunk.js.map +0 -1
- package/dist/scripts/6934-1f439ec9a2-lite.chunk.js +0 -2
- package/dist/scripts/6934-1f439ec9a2-lite.chunk.js.map +0 -1
- package/dist/scripts/7234-d1a173cb25-lite.chunk.js.map +0 -1
- package/dist/scripts/7556-69f8cb3b20-lite.chunk.js.map +0 -1
- package/dist/scripts/7709-57c48d288e-lite.chunk.js.map +0 -1
- package/dist/scripts/8813-1e58ad1895-lite.chunk.js +0 -2
- package/dist/scripts/8813-1e58ad1895-lite.chunk.js.map +0 -1
- package/dist/scripts/9139-456a0f14a5-lite.chunk.js.map +0 -1
- package/dist/scripts/9173-e03b30b436-lite.chunk.js.map +0 -1
- package/dist/scripts/9284-80c3abfe62-lite.chunk.js +0 -2
- package/dist/scripts/9284-80c3abfe62-lite.chunk.js.map +0 -1
- package/dist/scripts/bundle-7da429ea24.min.js +0 -3
- package/dist/scripts/bundle-7da429ea24.min.js.map +0 -1
- /package/dist/css/{3525-lite-6ab6e749cb.chunk.css → 1041-lite-6ab6e749cb.chunk.css} +0 -0
- /package/dist/css/{8813-lite-6ab6e749cb.chunk.css → 2015-lite-6ab6e749cb.chunk.css} +0 -0
- /package/dist/scripts/{170-94b806dc73-lite.chunk.js.LICENSE.txt → 170-233a87b708-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{4013-3d2edd41fb-lite.chunk.js.LICENSE.txt → 4013-2aff1769f5-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{5220-40dd0842b5-lite.chunk.js.LICENSE.txt → 5220-e0074ed079-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6599-c87f4f5ec1-lite.chunk.js.LICENSE.txt → 6599-d8f1b255c5-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6741-1ee9b683c7-lite.chunk.js.LICENSE.txt → 6741-638b658087-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{7556-69f8cb3b20-lite.chunk.js.LICENSE.txt → 7556-276466341c-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9395-70cd9ae3a1-lite.chunk.js.LICENSE.txt → 9395-355efbc0e7-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{953-45aa51744b-lite.chunk.js.LICENSE.txt → 953-b3b777612b-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-7da429ea24.min.js.LICENSE.txt → bundle-22b3c87b82.min.js.LICENSE.txt} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/2153-7663eb7803-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/hooks/useBreadcrumbs.ts","file:///app/packages/libs/shared/src/utils/PartialLoadingHelper.ts","file:///app/packages/projects/lite/src/apps/dashboard/views/dashboard-widget/partial-loading/partial-dashboard-widget-view.scss","file:///app/packages/projects/lite/src/apps/dashboard/views/dashboard-widget/partial-loading/PartialDashboardWidgetView.tsx","file:///app/packages/projects/lite/src/apps/dashboard/views/dashboard-widget/CuratedDashboardWidgetView.tsx","file:///app/packages/projects/lite/src/shared/hooks/usePresentationAudiences.ts","file:///app/packages/projects/lite/src/shared/hooks/useVideoMixin.ts","file:///app/node_modules/react-bootstrap/esm/Row.js"],"sourcesContent":["import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\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\nconst namespace = 'shared.breadcrumbComponent';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst COLLAPSE_CHARACTER_COUNT = 64;\nconst MAX_SEGMENT_LENGTH = 48;\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 = React.forwardRef((\n props: BreadcrumbItemProps,\n ref: React.ForwardedRef<HTMLElement>\n) => {\n const { breadcrumb: { name, appLink, active }, withBackIcon } = props;\n\n let trimmedName = name;\n let title: string = null;\n\n if (trimmedName.length > MAX_SEGMENT_LENGTH) {\n trimmedName = name.slice(0, MAX_SEGMENT_LENGTH) + '...';\n\n // Only setting the title when we trim, because otherwise it's really not needed - Sha\n title = name;\n }\n\n return (\n <li\n className={`breadcrumb-item${active ? ' active' : ''}`}\n title={title}\n >\n {active\n ? <strong>{trimmedName}</strong>\n : <AppLink appLink={appLink} ref={ref}>\n {withBackIcon && <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Small} />}\n <span className={withBackIcon ? 'ms-2' : ''}>{trimmedName}</span>\n </AppLink>\n }\n </li>\n );\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 || 0;\n \n const [ collapse, setCollapse ] = React.useState(false);\n const [ shouldFocus, setShouldFocus ] = React.useState(false);\n const expandRef = React.useRef<HTMLElement>();\n\n React.useEffect(() => {\n const characterLength = breadcrumbs?.reduce((prev, next) => prev + next.name.length, 0) ?? 0;\n\n if (length > 4 && characterLength > COLLAPSE_CHARACTER_COUNT)\n setCollapse(true);\n }, [breadcrumbs?.length]);\n\n /**\n * Focus our first expanded item the first time it appears.\n */\n React.useLayoutEffect(() => {\n if (shouldFocus)\n expandRef.current?.focus();\n }, [ expandRef.current, shouldFocus ]);\n\n function onClickExpand() {\n setCollapse(false);\n setShouldFocus(true);\n }\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 const first = <BreadcrumbItem breadcrumb={breadcrumbs[0]} />;\n const second = length > 2 ? <BreadcrumbItem breadcrumb={breadcrumbs[1]} /> : <></>;\n const secondLast = length > 3 ? <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} /> : <></>;\n const last = length > 1 ? <BreadcrumbItem breadcrumb={breadcrumbs[length - 1]} /> : <></>;\n const rest = breadcrumbs.slice(2, length - 2);\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {first}\n {second}\n {collapse ?\n <li className='breadcrumb-item'>\n <button\n className='btn-link'\n onClick={onClickExpand}\n aria-label={getPhrase('expand')}\n >\n ...\n </button>\n </li> :\n rest.map((breadcrumb, idx) => (\n <BreadcrumbItem\n key={idx}\n breadcrumb={breadcrumb}\n ref={idx === 0 ? expandRef : null}\n />\n ))\n }\n {secondLast}\n {last}\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","import React from 'react';\n\nimport { Breadcrumb } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { BreadcrumbService } from 'libs/shared/services/BreadcrumbService';\n\nexport function useBreadcrumbs(current: Breadcrumb): Breadcrumb[] {\n const [ match, useBuilder ] = React.useMemo(() => BreadcrumbService.getBuilder(), []);\n\n const breadcrumbs = useBuilder(match);\n\n if (!breadcrumbs || !current)\n return breadcrumbs;\n\n return [ ...breadcrumbs, { ...current, active: true }];\n}\n\n","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};","// extracted by mini-css-extract-plugin\nexport default {\"partialHeading\":\"RSm4L\"};","import React from 'react';\n\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\n\nimport styles from './partial-dashboard-widget-view.scss';\n\nexport function PartialDashboardWidgetView(): JSX.Element {\n return (\n <div className='px-3'>\n <div className={`partial-loading-background mb-2 ${styles.partialHeading}`} />\n <PartialVideoList />\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { 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 { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { DashboardRequests } from 'libs/shared/flight-requests/DashboardRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useBreadcrumbs } from 'libs/shared/hooks/useBreadcrumbs';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { CuratedWidget, CuratedWidgetData, CurrentUser, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { usePresentationAudiences } from 'shared/hooks/usePresentationAudiences';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\nimport { InteractiveHelpers } from 'shared/utils/InteractiveHelper';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nimport { PartialDashboardWidgetView } from './partial-loading/PartialDashboardWidgetView';\n\nconst namespace = 'dashboard.dashboardWidget';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CuratedDashboardWidgetViewQueryParams {\n widgetId?: string;\n}\n\nexport function CuratedDashboardWidgetView(props: CuratedDashboardWidgetViewQueryParams): JSX.Element {\n const { widgetId } = props;\n\n const { setFavourite, canFavourite } = useLiteFavourites(LocationContext.VideoThumbnail);\n\n const { isPlugin } = usePluginHelper();\n \n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem });\n\n const widget = Flight.useBasicFetch<CuratedWidget<CuratedWidgetData, Video[]>>(\n widgetId && DashboardRequests.dashboardWidgetContent(widgetId)\n );\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 videos = widget.data?.content;\n useVideoMixin(videos);\n\n useSetPageMetadata(PageMetadataHelper.getDefaultMetadata({\n title: widget.data?.name,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n },\n canonicalLink: SeoHelper.getCanonicalLink({ stripPresentationSlug: true }),\n allowIndexing: SeoHelper.allowIndexing()\n }));\n\n const audiences = usePresentationAudiences();\n const { hasPermissions } = usePermissions();\n\n const breadcrumbs = useBreadcrumbs({ name: widget.data?.name });\n\n if (!widget.data || !videos?.length)\n return <PartialDashboardWidgetView />;\n\n return (\n <VideoActionsContext.Provider value={videoActions}>\n <div className='px-3'>\n <h1 className='h2 mb-2'>{widget.data.name}</h1>\n <Breadcrumbs breadcrumbs={breadcrumbs} />\n <VideoList\n videos={videos}\n yearGroups={yearGroups.data}\n getVideoAppLink={(video, opts) => VideoAppLinkHelper.getAppLink(video, {\n ...opts,\n context: RelatedVideosContext.Widget,\n contextId: props.widgetId\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 isPlugin={isPlugin}\n getClassroomGuideAppLink={VideoAppLinkHelper.getClassroomGuideAppLink}\n getInteractiveGuidanceAppLink={VideoAppLinkHelper.getInteractiveGuidanceAppLink}\n getResourceGuidanceAppLink={VideoAppLinkHelper.getResourceGuidanceAppLink}\n />\n </div>\n </VideoActionsContext.Provider>\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 React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { Clip, ClipCollection, CurrentUser, Video, VideoCollection } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nconst CHUNK_SIZE = 50;\n\ntype Types = Video[] | VideoCollection | Clip[] | ClipCollection;\n\nfunction getValidObjects(objects: Types): (Video | Clip)[] {\n if (!objects)\n return [];\n\n if (Array.isArray(objects))\n return objects.filter(o => !!o && (VideoHelper.isVideo(o) || VideoHelper.isClip(o)));\n\n if ('data' in objects)\n return objects.data.filter(o => !!o && (VideoHelper.isVideo(o) || VideoHelper.isClip(o)));\n\n return [];\n}\n\ninterface VideoMixinOptions {\n /**\n * If the videos that are having new data mixed into are sitting on an explicit Flight namespace,\n * providing that namespace here is required\n */\n flightNamespace?: string;\n}\n\nexport function useVideoMixin(objects: Types, options: VideoMixinOptions = {}): void {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const hydratedVideos = React.useRef<Set<string>>(new Set<string>());\n\n const videos = getValidObjects(objects);\n\n const videoIds = videos.map(v => v.id);\n\n const [ request, setRequest ] = React.useState<Flight.Request[]>([]);\n\n React.useEffect(() => {\n if (!videoIds?.length || !currentUser.hasCompleted)\n return;\n\n const unhydratedVideos: string[] = [];\n\n videoIds.forEach(id => {\n if (!hydratedVideos.current.has(id)) {\n unhydratedVideos.push(id);\n hydratedVideos.current.add(id);\n }\n });\n \n if (!unhydratedVideos.length)\n return;\n\n setRequest(r => {\n const newRequests = [...r] ;\n\n ArrayHelper.chunk<string>(unhydratedVideos, CHUNK_SIZE).forEach(chunk => {\n newRequests.push(VideoRequests.videoMixinAssocs(chunk, options.flightNamespace));\n\n if (currentUser.data?.isAuthenticated)\n newRequests.push(ClassificationRequests.hasCurriculumLinks(chunk, null, options.flightNamespace));\n });\n\n return newRequests;\n });\n }, [ videoIds?.length, currentUser.hasCompleted ]);\n\n Flight.useBasicFetchAll(request);\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":["getPhrase","BreadcrumbItem","props","ref","breadcrumb","name","appLink","active","withBackIcon","trimmedName","title","length","slice","className","svgName","size","S","Breadcrumbs","breadcrumbs","isMobile","collapse","setCollapse","shouldFocus","setShouldFocus","expandRef","characterLength","reduce","prev","next","current","focus","first","second","secondLast","last","rest","onClick","map","idx","key","PartialBreadcrumbs","numItems","style","height","width","dangerouslySetInnerHTML","__html","PartialVideoList","Array","numVideos","fill","_","i","allowBulkActions","PartialVideoItem","breakpoints","useBreakpoints","isSmall","VideoListHelper","withDragHandle","withReordering","xs","Row","Col","defaultProps","useBreadcrumbs","match","useBuilder","DEFAULT_PARTIAL_LOADING_OPTIONS","minWidth","maxWidth","PartialLoadingHelper","getPartialLoadingItems","options","opts","Math","max","floor","random","PartialDashboardWidgetView","LanguageService","CuratedDashboardWidgetView","widgetId","useLiteFavourites","u","setFavourite","canFavourite","isPlugin","usePluginHelper","videoActions","useVideoActions","location","widget","DashboardRequests","currentUser","UserRequests","yearGroups","data","isAuthenticated","CustomerRequests","customerId","videos","content","useVideoMixin","useSetPageMetadata","PageMetadataHelper","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","canonicalLink","SeoHelper","stripPresentationSlug","allowIndexing","audiences","usePresentationAudiences","hasPermissions","usePermissions","VideoActionsContext","value","VideoList","getVideoAppLink","video","VideoAppLinkHelper","context","RelatedVideosContext","contextId","getSubTextAppLink","SeriesAppLinkHelper","series","presentationAudiences","getPreviewQuestionsAppLink","interactive","InteractiveHelper","getClassroomGuideAppLink","getInteractiveGuidanceAppLink","getResourceGuidanceAppLink","redirectOnError","activePresentation","getFallbackPresentation","presentation","id","CHUNK_SIZE","objects","hydratedVideos","Set","isArray","filter","o","getValidObjects","videoIds","v","request","setRequest","hasCompleted","unhydratedVideos","forEach","has","push","add","r","newRequests","chunk","flightNamespace","bsPrefix","as","Component","decoratedBsPrefix","minBreakpoint","sizePrefix","classes","brkPoint","propValue","cols","infix","displayName"],"sourceRoot":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[2215],{56577:(e,t,n)=>{n.d(t,{D:()=>d});var r=n(32735),i=n(11607),a=n(83345),o=n(10038);function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}const l={text:"wLJpg",collapsed:"ZxMAG",seeMore:"x5t0p"};function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var s="shared.expandableText";function d(e){var t,n,d=e.lines,f=void 0===d?2:d,p=(t=r.useState(!1),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,a,o,c=[],l=!0,u=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=a.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){u=!0,i=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(u)throw i}}return c}}(t,n)||function(e,t){if(e){if("string"==typeof e)return u(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?u(e,t):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),v=p[0],m=p[1],h=function(){var e,t,n=r.useRef(null),i=r.useRef(0);r.useEffect((function(){var e;(null===(e=n.current)||void 0===e?void 0:e.clientHeight)&&(i.current=n.current.clientHeight)}),[]);var a=function(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,a,o,c=[],l=!0,u=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=a.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){u=!0,i=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(u)throw i}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}(e,t)||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.")}()}(r.useState((null===(e=n.current)||void 0===e?void 0:e.scrollHeight)>i.current),2),l=a[0],u=a[1];return(0,o.H)((function(){var e,t;(null===(e=n.current)||void 0===e?void 0:e.clientHeight)&&(i.current=n.current.clientHeight,u((null===(t=n.current)||void 0===t?void 0:t.scrollHeight)>i.current))})),r.useEffect((function(){var e,t;(null===(e=n.current)||void 0===e?void 0:e.scrollHeight)&&u((null===(t=n.current)||void 0===t?void 0:t.scrollHeight)>i.current)}),[null===(t=n.current)||void 0===t?void 0:t.scrollHeight,i.current]),{containerRef:n,showButton:l}}(),y=h.containerRef,b=h.showButton,g=e.children;return r.createElement("div",{className:"d-flex overflow-hidden"},r.createElement("div",{style:{"--lines":f},className:"".concat(v?"":l.collapsed," ").concat(l.text),ref:y},!v&&b&&r.createElement(i.L,{onClick:function(){return m(!0)},className:"ms-1 text-info hover-text-underline ".concat(l.seeMore)},r.createElement(a.x,{namespace:s,phrase:"seeMore"})),r.createElement(g,{expanded:v}),v&&r.createElement(i.L,{onClick:function(){return m(!1)},className:"ms-1 text-info hover-text-underline d-inline"},r.createElement(a.x,{namespace:s,phrase:"seeLess"}))))}},62215:(e,t,n)=>{n.r(t),n.d(t,{SeriesView:()=>re});var r=n(32735),i=n(70680),a=n(23481),o=n(20354),c=n(65858),l=n(44522),u=n(49935),s=n(56577),d=n(71020),f=n(74696),p=n(13231),v=n(79718),m=n(7733),h=n(51365),y=n(16714),b=n(23788),g=n(21750),E=n(39151),S=n(1666),w=n(60011),A=n(31949),k=n(63719),O=n(56520),x=n(91286),I=n(60115),L=n(22902),j=n(79612),C=n(76753),P=n(35223),T=n(68140),N=n(14070),F=n(97291),H=n(64364);function _(e){return _="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},_(e)}function B(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,G(r.key),r)}}function G(e){var t=function(e,t){if("object"!=_(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=_(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==_(t)?t:t+""}function R(e,t,n){return t=M(t),function(e,t){if(t&&("object"==_(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,V()?Reflect.construct(t,n||[],M(e).constructor):t.apply(e,n))}function V(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(V=function(){return!!e})()}function M(e){return M=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},M(e)}function D(e,t){return D=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},D(e,t)}var U="shared.seriesNotFoundError",J=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),R(this,t,["Series doesn't exist"])}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&D(e,t)}(t,e),n=t,(r=[{key:"name",get:function(){return"SeriesNotFoundError"}},{key:"heading",get:function(){return a.T.getPhrase(U,"heading")}},{key:"description",get:function(){return a.T.getPhrase(U,"description")}}])&&B(n.prototype,r),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r}(H.H),W=n(51855),Z=n(10671),Q=n(7179),$=n(27638),K=n(44110),q=n(97816),z=n(10741),X=n(33192),Y=n(22490),ee=n(82431),te=a.T.encloseNamespace("shared.series"),ne=function(e){return m.o[e.name.charCodeAt(0)%m.o.length]};function re(e){var t,n,a,m,H=(0,i.I0)(),_=(0,$.u)(c.LZ.VideoThumbnail),B=_.setFavourite,G=_.canFavourite,R=(0,L.T)(),V=R.hasPermissions,M=R.hasLocalPermissions,D=(0,W.G)().isPlugin,U=(0,O.R0)(),re=U.openInCurationStudioLabel,ie=U.isUserCurator,ae=U.getOpenInCurationStudioLink;(0,Q.P)({id:e.id,app:"series",shareId:e.shareId});var oe=o.a.useBasicFetch(E.L.config()),ce=o.a.useBasicFetch(A.N.currentUser()),le=o.a.useBasicFetch((null===(t=ce.data)||void 0===t?void 0:t.isAuthenticated)&&S.h.yearGroups(ce.data.customerId)),ue=o.a.useBasicFetch(e.shareId?w.J.sharedSeries(e.id,e.shareId):w.J.series(e.id)),se=(0,K.i)();(0,j.M)(C.CG.getSeriesMetadata({content:ue.data,phraseContext:{phraseHandler:te,titlePhrase:"pageTitle",descriptionPhrase:"pageDescription"},canonicalLink:X.f.getCanonicalLink({stripPresentationSlug:!0}),allowIndexing:X.f.allowIndexing()}));var de=(0,Z._)({location:Z.i.VideoItem,shareId:e.shareId}),fe=o.a.useBasicFetch(e.classificationId&&g.x.path(e.classificationId));function pe(e){return!X.f.isBot()||!e}function ve(t){var n;return pe(t)?w.J.seriesVideos(e.id,null===(n=ce.data)||void 0===n?void 0:n.id,he,t):null}function me(e){return o.a.getFetch(H)(ve(e))}var he=!!ce.data&&T.d.getOrSetSortType(ce.data.id,e.sort,b.D.Series),ye={classificationId:e.classificationId,mtv:e.moviesAndTv},be=(0,I.K)(!!ce.data&&ve,me),ge=be.items,Ee=be.isFetching,Se=be.nextCursor;(0,q.V)(ge),(0,x.v)(ue,{notFound:J});var we=!V(y.C.StudentExperience)&&M(y.E.UseSeriesActions),Ae=(0,k.h)({name:null===(n=ue.data)||void 0===n?void 0:n.name});return r.createElement(h.M.Provider,{value:de},r.createElement("div",{className:"px-3"},oe.data&&ue.data?r.createElement(l.p,{heading:ue.data.name,banner:ue.data.banner,imageCdnUrl:oe.data.imageCdnUrl,actions:function(){var e,t,n;if(D||!we)return[];var r=[{label:te("share"),appLink:ue&&{application:F.O.DEFAULT,action:N.e.Default.SHARE,args:[null===(e=ue.data)||void 0===e?void 0:e.id],params:{entityType:"series"}},svgName:P.vn.Share2,className:"btn btn-outline-dark me-2",button:!0}];return ie&&r.push({label:re,href:ae(null===(t=ue.data)||void 0===t?void 0:t.typeId,null===(n=ue.data)||void 0===n?void 0:n.id),openInNewTab:!0}),r}(),actionsDropdownClassName:"btn btn-outline-dark",blockColourClass:ne(ue.data)}):r.createElement(l.v,null),r.createElement("div",null,r.createElement("div",{className:(null===(a=ue.data)||void 0===a?void 0:a.description)||e.moviesAndTv&&fe.data?"border-bottom py-3 mb-3":"pt-3 mb-2"},e.hideBreadCrumbs?r.createElement(r.Fragment,null):!ue.data||e.classificationId&&!fe.data?r.createElement(u.b2,null):r.createElement(u.Oo,{breadcrumbs:Ae}),r.createElement("div",{className:"d-flex align-items-center"},(null===(m=ue.data)||void 0===m?void 0:m.description)&&r.createElement("div",{className:"mb-0 ".concat(e.classificationId?"pt-2":"")},r.createElement(s.D,{lines:2},(function(){return r.createElement("p",{className:"mb-0 d-inline"},ue.data.description)}))),ue.data&&r.createElement("div",{className:"ms-auto"},r.createElement(v.p,{variant:"outline-dark",type:he,analyticsOptions:{location:c.LZ.VideoListHeader,entity:c.py.Video,actionType:c.Vw.Sort,workflowPhase:c.eu.Complete},getSortAppLink:function(e){return ee.j.getSeriesAppLink(ue.data,Object.assign(Object.assign({},ye),{sort:e}))}})))),ge?r.createElement(r.Fragment,null,r.createElement(p.E4,{videos:ge,yearGroups:le.data,getVideoAppLink:e.getVideoAppLink,hasPermissions:V,getSubTextAppLink:function(e){return ee.j.getSeriesAppLink(null==e?void 0:e.series,Object.assign(Object.assign({},ye),{sort:he}))},setFavourite:B,canFavourite:G,presentationAudiences:e.moviesAndTv?null:se.data,getPreviewQuestionsAppLink:function(e){return z.j.getPreviewQuestionsAppLink(e)},isPlugin:D,getClassroomGuideAppLink:Y.W.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:Y.W.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:Y.W.getResourceGuidanceAppLink}),(Ee||Se)&&pe(Se)&&r.createElement(d._,{isFetching:Ee,fetchNext:me,nextCursor:Se})):r.createElement(f.S,null))))}}}]);
|
|
2
|
-
//# sourceMappingURL=2215-5e8af1456d-lite.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/2215-5e8af1456d-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/expandable-text/expandable-text.scss","file:///app/packages/libs/shared/src/components/expandable-text/ExpandableText.tsx","file:///app/packages/libs/shared/src/hooks/useExpandableTextButton.ts","file:///app/packages/projects/lite/src/shared/errors/series/series-not-found/SeriesNotFoundError.ts","file:///app/packages/projects/lite/src/shared/views/series/SeriesView.tsx"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"text\":\"wLJpg\",\"collapsed\":\"ZxMAG\",\"seeMore\":\"x5t0p\"};","import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useExpandableTextButton } from 'libs/shared/hooks/useExpandableTextButton';\n\nimport styles from './expandable-text.scss';\n\ninterface ExpandableTextProps {\n children: (props: {expanded: boolean}) => JSX.Element;\n lines?: number;\n}\n\nconst namespace = 'shared.expandableText';\n\nexport function ExpandableText(props: ExpandableTextProps): JSX.Element {\n const { lines = 2 } = props;\n const [ expanded, setExpanded ] = React.useState(false);\n\n const { containerRef, showButton } = useExpandableTextButton();\n const TextComponent = props.children;\n\n return (\n <div className='d-flex overflow-hidden'>\n <div\n style={{ '--lines': lines } as unknown as React.CSSProperties}\n className={`${expanded ? '' : styles.collapsed} ${styles.text}`} ref={containerRef}>\n {(!expanded && showButton) && (\n <DivButton\n onClick={() => setExpanded(true)}\n className={`ms-1 text-info hover-text-underline ${styles.seeMore}`}\n >\n <Text namespace={namespace} phrase='seeMore' />\n </DivButton>\n )}\n\n <TextComponent expanded={expanded} />\n\n {expanded && (\n <DivButton\n onClick={() => setExpanded(false)}\n className={`ms-1 text-info hover-text-underline d-inline`}\n >\n <Text namespace={namespace} phrase='seeLess' />\n </DivButton>\n )}\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\n\nexport function useExpandableTextButton() {\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n const memoClientHeight = React.useRef<number>(0);\n\n React.useEffect(() => {\n if (containerRef.current?.clientHeight)\n // memo the initial clientHeight, cuz after expand and collapse the clientHeight will change\n memoClientHeight.current = containerRef.current.clientHeight;\n }, []);\n\n const [ showButton, setShowButton ] = React.useState(containerRef.current?.scrollHeight > memoClientHeight.current);\n\n useResizeListener(() => {\n if (containerRef.current?.clientHeight) {\n // update memo value on resize\n memoClientHeight.current = containerRef.current.clientHeight;\n setShowButton(containerRef.current?.scrollHeight > memoClientHeight.current);\n }\n });\n\n React.useEffect(() => {\n if (containerRef.current?.scrollHeight) {\n setShowButton(containerRef.current?.scrollHeight > memoClientHeight.current);\n }\n }, [ containerRef.current?.scrollHeight, memoClientHeight.current ]);\n\n return { containerRef, showButton };\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\n\nconst namespace = 'shared.seriesNotFoundError';\n\nexport class SeriesNotFoundError extends ErrorPageError {\n constructor() {\n super('Series doesn\\'t exist');\n }\n\n // @ts-ignore\n public get name(): string {\n return 'SeriesNotFoundError';\n }\n\n // @ts-ignore\n public get heading(): string {\n return LanguageService.getPhrase(namespace, 'heading');\n }\n\n // @ts-ignore\n public get description(): string {\n return LanguageService.getPhrase(namespace, 'description');\n }\n}","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { BannerHeader, PartialBannerHeader } from 'libs/shared/components/banner-header/BannerHeader';\nimport { Breadcrumbs, PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { ExpandableText } from 'libs/shared/components/expandable-text/ExpandableText';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoSortSelect } from 'libs/shared/components/video-sort-select/VideoSortSelect';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { VideoSortType } from 'libs/shared/enums/VideoSortType';\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { SeriesRequests } from 'libs/shared/flight-requests/SeriesRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useBreadcrumbs } from 'libs/shared/hooks/useBreadcrumbs';\nimport { useCurationStudio } from 'libs/shared/hooks/useCurationStudio';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Classification, Config, CurrentUser, Series, Video, YearGroup } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoSortHelper } from 'libs/shared/utils/VideoSortHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { SeriesNotFoundError } from 'shared/errors/series/series-not-found/SeriesNotFoundError';\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { usePresentationAudiences } from 'shared/hooks/usePresentationAudiences';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\nimport { InteractiveHelpers } from 'shared/utils/InteractiveHelper';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nconst namespace = 'shared.series';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst getFallbackBannerColourClass = (series: Series): string => {\n return BG_COLOUR_CLASS_NAMES[series.name.charCodeAt(0) % BG_COLOUR_CLASS_NAMES.length];\n};\n\ninterface SeriesViewProps {\n id: string;\n getVideoAppLink: (video: Video, opts: GetVideoAppLinkOptions) => Core.AppLink;\n classificationId?: string;\n shareId?: string;\n moviesAndTv?: boolean;\n sort?: VideoSortType;\n hideBreadCrumbs?: boolean;\n}\n\nexport function SeriesView(props: SeriesViewProps): JSX.Element {\n const dispatch = useDispatch();\n const { setFavourite, canFavourite } = useLiteFavourites(LocationContext.VideoThumbnail);\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n const { isPlugin } = usePluginHelper();\n const { openInCurationStudioLabel, isUserCurator, getOpenInCurationStudioLink } = useCurationStudio();\n\n useDeepLinks({ id: props.id, app: 'series', shareId: props.shareId });\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const series = Flight.useBasicFetch<Series>(props.shareId\n ? SeriesRequests.sharedSeries(props.id, props.shareId)\n : SeriesRequests.series(props.id));\n\n const audiences = usePresentationAudiences();\n\n useSetPageMetadata(PageMetadataHelper.getSeriesMetadata({\n content: series.data,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n },\n canonicalLink: SeoHelper.getCanonicalLink({ stripPresentationSlug: true }),\n allowIndexing: SeoHelper.allowIndexing()\n }));\n\n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem, shareId: props.shareId });\n\n const topicPath = Flight.useBasicFetch<Classification[]>(\n props.classificationId &&\n ClassificationRequests.path(props.classificationId)\n );\n\n /**\n * Infinite scrolling will be restricted for public browsing as a crawler/bot.\n * The rationale behind this is that we don't want to preload or allow crawlers\n * to enumerate the entirety of our series collections. Some series have > 10k videos\n * and they don't all need to be indexed (i.e. old news/current affair series).\n * \n * Public browsing by regular users will continue to paginate, along with authenticated\n * users. - Mike\n */\n function shouldFetch(cursor?: string) {\n if (SeoHelper.isBot() && cursor)\n return false;\n\n return true;\n }\n\n function getVideosRequest(cursor?: string) {\n if (!shouldFetch(cursor))\n return null;\n\n return SeriesRequests.seriesVideos(props.id, currentUser.data?.id, sort, cursor);\n }\n\n function fetchNext(cursor?: string) {\n return Flight.getFetch(dispatch)(getVideosRequest(cursor));\n }\n\n function getBannerActions(): ActionOptions[] {\n if (isPlugin || !showHeaderActions) {\n return [];\n }\n\n const actions: ActionOptions[] = [{\n label: getPhrase('share'),\n appLink: series && {\n application: AppChannels.DEFAULT,\n action: Actions.Default.SHARE,\n args: [series.data?.id],\n params: { entityType: 'series' }\n },\n svgName: cvSvgLibrary.Share2,\n className: 'btn btn-outline-dark me-2',\n button: true\n }];\n\n if (isUserCurator)\n actions.push({\n label: openInCurationStudioLabel,\n href: getOpenInCurationStudioLink(series.data?.typeId, series.data?.id),\n openInNewTab: true\n });\n\n return actions;\n }\n\n // Must be before the video fetching, as the getVideosRequest has a closure over the sort\n const sort = !!currentUser.data && VideoSortHelper.getOrSetSortType(\n currentUser.data.id,\n props.sort,\n VideoSortType.Series\n );\n\n const seriesParams = {\n classificationId: props.classificationId,\n mtv: props.moviesAndTv\n };\n\n const {\n items: videos,\n isFetching,\n nextCursor\n } = useInfiniteList<Video>(currentUser.data ? getVideosRequest : false, fetchNext);\n\n useVideoMixin(videos);\n\n useHandleObjectError(series, {\n notFound: SeriesNotFoundError\n });\n\n const showHeaderActions = !hasPermissions(PermissionName.StudentExperience) &&\n hasLocalPermissions(LocalPermissionName.UseSeriesActions);\n\n const breadcrumbs = useBreadcrumbs({ name: series.data?.name });\n\n return (\n <VideoActionsContext.Provider value={videoActions}>\n <div className='px-3'>\n {config.data && series.data\n ? (\n <BannerHeader\n heading={series.data.name}\n banner={series.data.banner}\n imageCdnUrl={config.data.imageCdnUrl}\n actions={getBannerActions()}\n actionsDropdownClassName='btn btn-outline-dark'\n blockColourClass={getFallbackBannerColourClass(series.data)}\n />\n ) : <PartialBannerHeader />\n }\n \n <div>\n <div className={series.data?.description || (props.moviesAndTv && topicPath.data) ? 'border-bottom py-3 mb-3' : 'pt-3 mb-2'}>\n {(() => {\n if (props.hideBreadCrumbs)\n return <></>;\n\n if (!series.data || (props.classificationId && !topicPath.data))\n return <PartialBreadcrumbs />;\n\n return (\n <Breadcrumbs breadcrumbs={breadcrumbs} />\n );\n })()}\n\n <div className='d-flex align-items-center'>\n {series.data?.description && (\n <div className={`mb-0 ${props.classificationId ? 'pt-2' : ''}`}>\n <ExpandableText lines={2}>\n {() => <p className='mb-0 d-inline'>{series.data.description}</p>}\n </ExpandableText>\n </div>\n )}\n\n {series.data && (\n <div className='ms-auto'>\n <VideoSortSelect\n variant='outline-dark'\n type={sort}\n analyticsOptions={{\n location: LocationContext.VideoListHeader,\n entity: EntityType.Video,\n actionType: UserAction.Sort,\n workflowPhase: WorkflowPhase.Complete\n }}\n getSortAppLink={sort => {\n return SeriesAppLinkHelper.getSeriesAppLink(series.data, { ...seriesParams, sort });\n }}\n />\n </div>\n )}\n </div>\n </div>\n\n {(() => {\n if (!videos)\n return <PartialVideoList />;\n\n return (\n <>\n <VideoList\n videos={videos}\n yearGroups={yearGroups.data}\n getVideoAppLink={props.getVideoAppLink}\n hasPermissions={hasPermissions}\n getSubTextAppLink={video =>\n SeriesAppLinkHelper.getSeriesAppLink(video?.series, { ...seriesParams, sort })}\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n presentationAudiences={props.moviesAndTv ? null : audiences.data}\n getPreviewQuestionsAppLink={interactive => InteractiveHelpers.getPreviewQuestionsAppLink(interactive)}\n isPlugin={isPlugin}\n getClassroomGuideAppLink={VideoAppLinkHelper.getClassroomGuideAppLink}\n getInteractiveGuidanceAppLink={VideoAppLinkHelper.getInteractiveGuidanceAppLink}\n getResourceGuidanceAppLink={VideoAppLinkHelper.getResourceGuidanceAppLink}\n />\n {(isFetching || nextCursor) && shouldFetch(nextCursor) && (\n <InfiniteScrollFooter\n isFetching={isFetching}\n fetchNext={fetchNext}\n nextCursor={nextCursor}\n />\n )}\n </>\n );\n })()}\n </div>\n </div>\n </VideoActionsContext.Provider>\n );\n}\n"],"names":["namespace","ExpandableText","props","lines","expanded","setExpanded","containerRef","memoClientHeight","current","clientHeight","scrollHeight","showButton","setShowButton","useExpandableTextButton","TextComponent","children","className","style","ref","DivButton","onClick","Text","phrase","SeriesNotFoundError","LanguageService","ErrorPageError","getPhrase","getFallbackBannerColourClass","series","name","charCodeAt","SeriesView","dispatch","useLiteFavourites","u","setFavourite","canFavourite","usePermissions","hasPermissions","hasLocalPermissions","isPlugin","usePluginHelper","useCurationStudio","openInCurationStudioLabel","isUserCurator","getOpenInCurationStudioLink","useDeepLinks","id","app","shareId","config","ConfigRequests","currentUser","UserRequests","yearGroups","data","isAuthenticated","CustomerRequests","customerId","SeriesRequests","audiences","usePresentationAudiences","useSetPageMetadata","PageMetadataHelper","content","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","canonicalLink","SeoHelper","stripPresentationSlug","allowIndexing","videoActions","useVideoActions","location","topicPath","classificationId","ClassificationRequests","shouldFetch","cursor","getVideosRequest","sort","fetchNext","VideoSortHelper","VideoSortType","seriesParams","mtv","moviesAndTv","videos","items","isFetching","nextCursor","useVideoMixin","notFound","showHeaderActions","PermissionName","breadcrumbs","useBreadcrumbs","VideoActionsContext","value","BannerHeader","heading","banner","imageCdnUrl","actions","label","appLink","application","action","args","params","entityType","svgName","button","push","href","typeId","openInNewTab","getBannerActions","actionsDropdownClassName","blockColourClass","description","hideBreadCrumbs","Breadcrumbs","VideoSortSelect","variant","type","analyticsOptions","entity","actionType","workflowPhase","getSortAppLink","SeriesAppLinkHelper","VideoList","getVideoAppLink","getSubTextAppLink","video","presentationAudiences","getPreviewQuestionsAppLink","interactive","InteractiveHelper","getClassroomGuideAppLink","VideoAppLinkHelper","getInteractiveGuidanceAppLink","getResourceGuidanceAppLink","InfiniteScrollFooter","PartialVideoList"],"sourceRoot":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/2340-d1548f6362-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/caret/Caret.tsx","file:///app/packages/libs/shared/src/components/caret/caret.scss","file:///app/packages/libs/shared/src/components/library-folder/library-folder.scss","file:///app/packages/libs/shared/src/components/library-folder/LibraryFolder.tsx","file:///app/packages/libs/shared/src/components/folder-list/FolderList.tsx","file:///app/packages/libs/shared/src/components/folder-list/partial-loading/partial-folder-list.scss","file:///app/packages/libs/shared/src/components/folder-list/partial-loading/PartialFolderList.tsx","file:///app/packages/projects/lite/src/apps/libraries/hooks/UseFetchAllChildFolders.ts","file:///app/packages/projects/lite/src/apps/libraries/hooks/UseHandleLibraryType.ts","file:///app/packages/projects/lite/src/apps/libraries/views/library-folder/empty-state/LibraryFolderEmptyState.tsx","file:///app/packages/projects/lite/src/apps/libraries/components/library-folder-videos/LibraryFolderVideos.tsx","file:///app/packages/projects/lite/src/apps/libraries/views/library-folder/partial-loading/library-folder-partial-loading.scss","file:///app/packages/projects/lite/src/apps/libraries/views/library-folder/partial-loading/LibraryFolderPartialLoading.tsx","file:///app/packages/projects/lite/src/apps/libraries/views/library-folder/LibraryFolderView.tsx","file:///app/packages/projects/lite/src/apps/libraries/views/library-folder/LibraryFolderViewUtils.ts"],"sourcesContent":["import React from 'react';\n\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { SvgContainer } from '../svg-container/SvgContainer';\n\nimport styles from './caret.scss';\n\ntype CaretDirection = 'left' | 'right' | 'up' | 'down';\n\n\nconst getDirectionClass = (direction: CaretDirection) => {\n switch (direction) {\n case 'up':\n return styles.up;\n case 'down':\n return styles.down;\n case 'right':\n return styles.right;\n case 'left':\n return styles.left;\n }\n};\n\ninterface CaretProps {\n direction?: CaretDirection;\n className?: string;\n}\n\nCaret.defaultProps = {\n direction: 'right'\n};\n\nexport function Caret(props: CaretProps): JSX.Element {\n return (\n <SvgContainer\n svgName={cvSvgLibrary.Caret}\n className={`${getDirectionClass(props.direction)} svg-container d-inline-block ${props.className}`}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"up\":\"JAT0R\",\"down\":\"ld41u\",\"left\":\"jZTRR\",\"right\":\"HHkPe\"};","// extracted by mini-css-extract-plugin\nexport default {\"actions\":\"cN3nB\",\"actionsContainer\":\"xM37V\",\"dropStyle\":\"kvCLS\",\"dragStyle\":\"md9Na\"};","import React from 'react';\n\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Core } from 'libs/common/core';\n\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DragDropMoveWrapper } from 'libs/shared/components/drag-drop-move/DragDropMoveWrapper';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Folder } from 'libs/shared/interfaces';\n\nimport styles from './library-folder.scss';\n\ninterface LibraryFolderProps {\n folder: Folder;\n drag?: boolean;\n drop?: boolean;\n getAppLink: (f: Folder) => Core.AppLink;\n getFolderActions?: (f: Folder) => ActionOptions[];\n}\n\nexport function LibraryFolder(props: LibraryFolderProps): JSX.Element {\n const thumbnailUrl = props.folder.thumbnail\n ? UrlHelper.urlBuilder(props.folder.thumbnail.url, { size: ImageSize.Small })\n : null;\n\n const actions = props.getFolderActions?.(props.folder);\n\n return (\n <DragDropMoveWrapper\n draggable={props.drag && { id: props.folder.id, data: props.folder }}\n droppable={props.drop && { id: props.folder.id, data: props.folder }}\n dropStye={styles.dropStyle}\n dragStyle={styles.dragStyle}\n >\n <div className='position-relative'>\n <AppLink\n className='rounded-3 d-block text-decoration-none'\n appLink={props.getAppLink(props.folder)}\n title={props.folder.name}\n >\n <BaseImage\n data={thumbnailUrl}\n imageType={ImageType.Thumbnails}\n imageClassName='rounded-top-lg'\n >\n <ImageFallback\n name={props.folder.name}\n type={ImageFallbackType.Folder}\n extraClasses='rounded-top-lg'\n />\n </BaseImage>\n <h3 className='bg-white border-start border-end border-bottom rounded-bottom-lg font-size-normal fw-semibold mb-0 p-2'>\n <span className='text-truncate d-block'>{props.folder.name}</span>\n </h3>\n </AppLink>\n {actions?.length &&\n <Actions\n actions={actions}\n className={styles.actionsContainer}\n actionsDropdownClassName={styles.actions}\n // Intentionally setting to the default SVG size\n dropdownToggleSvgSize={null}\n />\n }\n </div>\n </DragDropMoveWrapper>\n );\n}","import React from 'react';\n\nimport { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Core } from 'libs/common/core';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Caret } from 'libs/shared/components/caret/Caret';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { LibraryFolder } from 'libs/shared/components/library-folder/LibraryFolder';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Folder } from 'libs/shared/interfaces';\n\nconst namespace = 'libraries.folderList';\n\nconst EXPANDED_FOLDERS_KEY = 'has:expanded:library:folders';\n\nfunction useGetFolderLimit(): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xxl || breakpoints.xl || breakpoints.lg)\n return 6;\n\n if (breakpoints.md)\n return 4;\n\n return 3;\n}\n\ninterface FolderListProps {\n folders: Folder[];\n getAppLink: (folder: Folder) => Core.AppLink;\n expandFolders?: boolean;\n showHeading?: boolean;\n getFolderActions?: (f: Folder) => ActionOptions[];\n drag?: boolean;\n drop?: boolean;\n extraButtons?: JSX.Element;\n}\n\nFolderList.defaultProps = {\n showHeading: true\n};\n\nexport function FolderList(props: FolderListProps): JSX.Element {\n const [ _hasExpandedFolders, setHasExpandedFolders ] = React.useState(\n LocalStorageHelper.get(EXPANDED_FOLDERS_KEY) || false\n );\n\n const hasExpandedFolders = props.expandFolders || _hasExpandedFolders;\n\n const folderLimit = useGetFolderLimit();\n\n function onToggleFolderView(): void {\n setHasExpandedFolders(!hasExpandedFolders);\n LocalStorageHelper.set(EXPANDED_FOLDERS_KEY, !hasExpandedFolders);\n }\n\n const displayableFolders = hasExpandedFolders ? props.folders : props.folders.slice(0, folderLimit);\n\n const canToggleCollapsedView = props.folders.length > folderLimit && !props.expandFolders;\n\n return (\n <>\n <div className='d-flex justify-content-between align-items-center'>\n {props.showHeading &&\n <DivButton\n className={`d-inline-flex align-items-center mb-2 px-2 ${!canToggleCollapsedView ? 'cursor-default' : ''}`}\n onClick={onToggleFolderView}\n >\n {canToggleCollapsedView && (\n <Caret direction={hasExpandedFolders ? 'down' : 'right'} />\n )}\n <h2 className='h4 mb-0'>\n <Text namespace={namespace} phrase='folders' options={{ count: props.folders.length }} />\n </h2>\n </DivButton>\n }\n\n {!!(!hasExpandedFolders && canToggleCollapsedView) && (\n <div className='d-flex justify-content-end justify-self-end px-2'>\n <DivButton onClick={onToggleFolderView} className='text-dark hover-text-underline d-inline-block'>\n <Text namespace={namespace} phrase='seeAll' options={{ count: props.folders.length }} />\n </DivButton>\n </div>\n )}\n {!!(hasExpandedFolders && canToggleCollapsedView) && (\n <div className='d-flex justify-content-end justify-self-end px-2'>\n <DivButton onClick={onToggleFolderView} className='text-dark hover-text-underline d-inline-block'>\n <Text namespace={namespace} phrase='seeLess' />\n </DivButton>\n </div>\n )}\n\n {props.extraButtons ? props.extraButtons : <></>}\n </div>\n\n <div className='row mx-1'>\n {displayableFolders.map(f => (\n <div key={f.id} className='col-4 col-md-3 col-lg-2 px-1 pb-3'>\n <LibraryFolder\n folder={f}\n getAppLink={props.getAppLink}\n getFolderActions={props.getFolderActions}\n drag={props.drag}\n drop={props.drop}\n />\n </div>\n ))}\n </div>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialFolderHeading\":\"dhbsL\",\"partialFolderThumbnail\":\"CI9vk\",\"partialFolderName\":\"l0Nll\"};","import React from 'react';\n\nimport styles from './partial-folder-list.scss';\n\nconst PartialFolder = () => (\n <div className='col-4 col-md-3 col-lg-2 px-1 pb-3'>\n <div className={`${styles.partialFolderThumbnail} partial-loading-background rounded-top-lg`} />\n <div className={`${styles.partialFolderName} partial-loading-background border-bottom rounded-bottom-lg font-size-normal mb-0 p-2`}>\n \n </div>\n </div>\n);\n\nexport function PartialFolderList({ count = 3 }: { count?: number; }): JSX.Element {\n return (\n <>\n <div className={`${styles.partialFolderHeading} h4 mb-2 partial-loading-background`}> </div>\n <div className='row mx-n1'>\n {Array(count).fill(null).map((_, i) => <PartialFolder key={i} />)}\n </div>\n </>\n );\n}","import { Flight } from 'libs/common/flight';\n\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { useFetchAll } from 'libs/shared/hooks/UseFetchAll';\nimport { SelectAllPagesResult, useSelectAllPages } from 'libs/shared/hooks/UseSelectAllPages';\nimport { Folder } from 'libs/shared/interfaces';\n\nexport function useFetchAllChildFolders(parentId?: string): SelectAllPagesResult<Folder> {\n const fetch = Flight.useGetFetch();\n\n function getRequest(cursor?: string): Flight.Request {\n return LibraryRequests.childFolders(parentId, cursor);\n }\n \n function fetchNext(cursor?: string): void {\n fetch(getRequest(cursor));\n }\n\n useFetchAll(!!parentId && getRequest, !!parentId && fetchNext);\n\n return (useSelectAllPages<Folder>(!!parentId && ((cursor?: string) => getRequest(cursor).key)));\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { MasterObjectTypes } from 'libs/shared/enums/MasterObjectTypes';\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { Library } from 'libs/shared/interfaces';\n\n/**\n * This hook prevents the libraries UI to be used for anything \n * other than customer libraries i.e Hosted, Exchange, Workspace etc\n */\nexport function useHandleLibraryType(request: Flight.Response<Library>): void {\n React.useEffect(() => {\n if (!request.hasCompleted || request.hasError)\n return;\n\n if (request.data.type !== MasterObjectTypes.CustomLibrary)\n Core.ErrorHelper.throw(new NotFoundError());\n }, [request.hasCompleted]);\n}","import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nconst namespace = 'libraries.libraryFolderEmptyState';\n\nexport function LibraryFolderEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Libraries.FOLDER} />\n\n <EmptyState.Heading><Text phrase='heading' /></EmptyState.Heading>\n\n <EmptyState.Info><Text phrase='info' /></EmptyState.Info>\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { EntityType, LocationContext, SearchSourceDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { SourceFilterOptions } from 'libs/shared/apps/search/interfaces';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { useFocusSearchBar } from 'libs/shared/components/search-bar/SearchUtils';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoSortSelect } from 'libs/shared/components/video-sort-select/VideoSortSelect';\nimport { RelatedVideosContext } from 'libs/shared/enums/RelatedVideosContext';\nimport { VideoSortType } from 'libs/shared/enums/VideoSortType';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { CanFavouriteFunc, FavouriteFunc, Library, PresentationAudience, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { InteractiveHelpers } from 'shared/utils/InteractiveHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { LibraryFolderEmptyState } from 'apps/libraries/views/library-folder/empty-state/LibraryFolderEmptyState';\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nconst namespace = 'libraries.libraryFolderVideos';\n\ninterface LibraryFolderVideosProps {\n folderId: string;\n videos: VideoTypes[];\n yearGroups: YearGroup[];\n hasSubFolders: boolean;\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n audiences: PresentationAudience[];\n libraries: Library[];\n\n getSortAppLink: (sort: VideoSortType) => Core.AppLink;\n sort: VideoSortType;\n\n isFetching: boolean;\n hasMore: boolean;\n fetchNext: (cursor: string) => void;\n nextCursor?: string;\n imageCdnUrl?: string;\n isPlugin: boolean;\n}\n\nexport function LibraryFolderVideos(props: LibraryFolderVideosProps): JSX.Element {\n const { focusSearchBar } = useFocusSearchBar();\n const { hasPermissions } = usePermissions();\n\n if (!props.videos.length && !props.hasSubFolders)\n return <LibraryFolderEmptyState />;\n\n if (!props.videos.length)\n return <></>;\n\n return (\n <div>\n {/* With no subfolders, we don't show this subheading, and the sort is moved up to the parent component */}\n {props.hasSubFolders && (\n <div className='d-flex justify-content-between align-items-center'>\n <h2 className='h4 mb-0'>\n <Text namespace={namespace} phrase='videos' />\n </h2>\n\n <div className='d-flex'>\n <IconButton\n svgName={cvSvgLibrary.Search}\n appLink={{\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: {\n source: SourceFilterOptions.School\n }\n }}\n className='btn btn-outline-dark d-none d-sm-inline-block'\n onClick={focusSearchBar}\n analyticsData={{}}\n analyticsOptions={{\n entity: EntityType.SearchResults,\n location: LocationContext.Libraries,\n actionType: UserAction.Click,\n descriptor: SearchSourceDescriptor.School\n }}\n >\n <Text namespace={namespace} phrase='searchLibrary' options={{ smartCount: props.libraries?.length }} />\n </IconButton>\n <VideoSortSelect\n variant='outline-dark'\n type={props.sort}\n getSortAppLink={props.getSortAppLink}\n analyticsOptions={{\n location: LocationContext.VideoListHeader,\n entity: EntityType.Video,\n actionType: UserAction.Sort,\n workflowPhase: WorkflowPhase.Complete\n }}\n />\n </div>\n </div>\n )}\n\n <VideoList\n videos={props.videos}\n yearGroups={props.yearGroups}\n getVideoAppLink={(v, opts) => VideoAppLinkHelper.getAppLink(v, {\n ...opts,\n context: RelatedVideosContext.Folder,\n contextId: props.folderId\n })}\n getSubTextAppLink={video => SeriesAppLinkHelper.getSeriesAppLink(video.series)}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n presentationAudiences={props.audiences}\n hasPermissions={hasPermissions}\n getPreviewQuestionsAppLink={interactive => InteractiveHelpers.getPreviewQuestionsAppLink(interactive)}\n imageCdnUrl={props.imageCdnUrl}\n isPlugin={props.isPlugin}\n getClassroomGuideAppLink={VideoAppLinkHelper.getClassroomGuideAppLink}\n getInteractiveGuidanceAppLink={VideoAppLinkHelper.getInteractiveGuidanceAppLink}\n getResourceGuidanceAppLink={VideoAppLinkHelper.getResourceGuidanceAppLink}\n />\n\n {(props.hasMore || props.isFetching) && (\n <InfiniteScrollFooter\n isFetching={props.isFetching}\n fetchNext={props.fetchNext}\n nextCursor={props.nextCursor}\n />\n )}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"subheading\":\"IJZtA\"};","import React from 'react';\n\nimport { PartialFolderList } from 'libs/shared/components/folder-list/partial-loading/PartialFolderList';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\n\nimport styles from './library-folder-partial-loading.scss';\n\nexport function LibraryFolderPartialLoading(): JSX.Element {\n return (\n <>\n <div className='m-3'>\n <PartialFolderList />\n </div>\n\n <div className='mx-3 mb-3'>\n <div className={`${styles.subheading} partial-loading-background mb-2`} />\n <PartialVideoList />\n </div>\n </>\n );\n}","import React from 'react';\nimport { useDispatch } from 'react-redux';\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 { EntityType, LocationContext, SearchSourceDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { SourceFilterOptions } from 'libs/shared/apps/search/interfaces';\nimport { BannerHeader, PartialBannerHeader } from 'libs/shared/components/banner-header/BannerHeader';\nimport { Breadcrumbs, PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { FolderList } from 'libs/shared/components/folder-list/FolderList';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { useFocusSearchBar } from 'libs/shared/components/search-bar/SearchUtils';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { VideoSortSelect } from 'libs/shared/components/video-sort-select/VideoSortSelect';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { VideoSortType } from 'libs/shared/enums/VideoSortType';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useBreadcrumbs } from 'libs/shared/hooks/useBreadcrumbs';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, CurrentUser, Folder, Library, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoSortHelper } from 'libs/shared/utils/VideoSortHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { usePresentationAudiences } from 'shared/hooks/usePresentationAudiences';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\n\nimport { LibraryFolderVideos } from 'apps/libraries/components/library-folder-videos/LibraryFolderVideos';\nimport { useFetchAllChildFolders } from 'apps/libraries/hooks/UseFetchAllChildFolders';\nimport { useHandleLibraryType } from 'apps/libraries/hooks/UseHandleLibraryType';\n\nimport { LibraryFolderPartialLoading } from './partial-loading/LibraryFolderPartialLoading';\nimport { getFolderAppLink, getFolderBgColourClass } from './LibraryFolderViewUtils';\n\nconst namespace = 'libraries.libraryFolder';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface LibraryFolderViewProps {\n libraryId: string;\n folderId: string;\n sort?: VideoSortType;\n}\n\nexport function LibraryFolderView(props: LibraryFolderViewProps): JSX.Element {\n const dispatch = useDispatch();\n const alerts = useAlerts();\n const { focusSearchBar } = useFocusSearchBar();\n const { isPlugin } = usePluginHelper();\n\n const libraries = Flight.useBasicFetch<Library[]>(LibraryRequests.domainLibraries([ 'customLibrary', 'sharedLibrary' ]));\n const library = Flight.useBasicFetch<Library>(LibraryRequests.library(props.libraryId));\n const folder = Flight.useBasicFetch<Folder>(LibraryRequests.folder(props.folderId));\n const subfolders = useFetchAllChildFolders(props.folderId);\n\n const user = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n user.data?.isAuthenticated && CustomerRequests.yearGroups(user.data.customerId)\n );\n\n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem });\n const { setFavourite, canFavourite } = useLiteFavourites(LocationContext.VideoThumbnail);\n const breadcrumbs = useBreadcrumbs({ name: folder.data?.name });\n const audiences = usePresentationAudiences();\n\n useSetPageMetadata({ title: folder.data?.name });\n\n useHandleObjectError([ library, folder ]);\n useHandleLibraryType(library);\n\n const sort = !!user.data && VideoSortHelper.getOrSetSortType(user.data.id, props.sort);\n\n const {\n items: videos,\n hasMore,\n isFetching,\n nextCursor\n } = useInfiniteList<VideoTypes>(getVideosRequest, fetchNext, onError);\n\n useVideoMixin(videos);\n\n function getVideosRequest(cursor?: string): Flight.Request {\n return VideoRequests.collectionVideos(props.folderId, sort, cursor);\n }\n\n function fetchNext(cursor?: string): void {\n return Flight.getFetch(dispatch)(getVideosRequest(cursor));\n }\n\n function onError(pageNumber: number, httpStatus: HttpStatus): void {\n if (pageNumber === 1)\n return handleHttpError(httpStatus);\n\n alerts.error(getPhrase('error'));\n }\n\n const hasNoSubfolders = !!(subfolders.hasCompleted && !subfolders.items?.length);\n\n return (\n <VideoActionsContext.Provider value={videoActions}>\n {(library.data && folder.data && config.data)\n ? (\n <BannerHeader\n heading={folder.data.name}\n banner={folder.data.banner}\n imageCdnUrl={config.data.imageCdnUrl}\n blockColourClass={getFolderBgColourClass(folder.data)}\n logo={library.data.owner?.logo}\n />\n ) : <PartialBannerHeader />\n }\n\n <div className={`d-flex justify-content-between align-items-center py-3 mx-3 ${hasNoSubfolders ? '' : 'border-bottom'}`}>\n {(library.data && folder.data)\n ? <Breadcrumbs breadcrumbs={breadcrumbs} />\n : <PartialBreadcrumbs />\n }\n \n <div className='d-flex'>\n {(hasNoSubfolders || !videos?.length) &&\n <IconButton\n svgName={cvSvgLibrary.Search}\n appLink={{\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: {\n source: SourceFilterOptions.School\n }\n }}\n className='btn btn-outline-dark d-none d-sm-inline-block'\n onClick={focusSearchBar}\n analyticsData={{}}\n analyticsOptions={{\n entity: EntityType.SearchResults,\n location: LocationContext.Libraries,\n actionType: UserAction.Click,\n descriptor: SearchSourceDescriptor.School\n }}\n >\n <Text namespace={namespace} phrase='searchLibrary' options={{ smartCount: libraries.data?.length ?? 1 }} />\n </IconButton>\n }\n {(hasNoSubfolders && folder.data) && (\n <VideoSortSelect\n variant='outline-dark'\n type={sort}\n getSortAppLink={sort => getFolderAppLink(props.libraryId, folder.data, sort)}\n analyticsOptions={{\n location: LocationContext.VideoListHeader,\n entity: EntityType.Video,\n actionType: UserAction.Sort,\n workflowPhase: WorkflowPhase.Complete\n }}\n />\n )}\n </div>\n </div>\n\n {(videos && subfolders) ? (\n <>\n {!!subfolders.items?.length && (\n <div className='px-2 py-3'>\n <FolderList\n folders={subfolders.items}\n getAppLink={(f: Folder) => getFolderAppLink(props.libraryId, f, sort)}\n expandFolders={!videos.length}\n />\n </div>\n )}\n\n <div className='px-3 pb-3'>\n <LibraryFolderVideos\n folderId={props.folderId}\n videos={videos}\n yearGroups={yearGroups.data}\n hasSubFolders={!!subfolders.items?.length}\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n hasMore={hasMore}\n isFetching={isFetching}\n fetchNext={fetchNext}\n nextCursor={nextCursor}\n sort={sort}\n getSortAppLink={sort => getFolderAppLink(props.libraryId, folder.data, sort)}\n audiences={audiences.data}\n libraries={libraries.data}\n imageCdnUrl={config.data?.imageCdnUrl}\n isPlugin={isPlugin}\n />\n </div>\n </>\n ) : <LibraryFolderPartialLoading />}\n </VideoActionsContext.Provider>\n );\n}","import { Core } from 'libs/common/core';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { Folder, Library } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nexport function getFolderAppLink(libraryId: string, folder: Folder, sort: string): Core.AppLink {\n if (!libraryId || !folder)\n return null;\n\n return {\n application: AppChannels.LIBRARIES,\n action: Actions.Libraries.FOLDER,\n args: [ libraryId, folder.id, TextHelper.slugify(folder.name) ],\n params: {\n sort\n }\n };\n}\n\nexport function getFolderBgColourClass(folder: Folder | Library): string {\n let charCode = 0;\n\n for (let i = 0; i < folder.name?.length ?? 0; i++) {\n charCode += folder.name.charCodeAt(i);\n }\n\n return BG_COLOUR_CLASS_NAMES[charCode % BG_COLOUR_CLASS_NAMES.length];\n}"],"names":["getDirectionClass","direction","Caret","props","SvgContainer","svgName","className","defaultProps","LibraryFolder","thumbnailUrl","folder","thumbnail","UrlHelper","url","size","actions","getFolderActions","DragDropMoveWrapper","draggable","drag","id","data","droppable","drop","dropStye","dragStyle","AppLink","appLink","getAppLink","title","name","BaseImage","imageType","imageClassName","ImageFallback","type","extraClasses","length","Actions","actionsDropdownClassName","dropdownToggleSvgSize","namespace","EXPANDED_FOLDERS_KEY","FolderList","breakpoints","LocalStorageHelper","_hasExpandedFolders","setHasExpandedFolders","hasExpandedFolders","expandFolders","folderLimit","useBreakpoints","xxl","xl","lg","md","onToggleFolderView","displayableFolders","folders","slice","canToggleCollapsedView","showHeading","DivButton","onClick","Text","phrase","options","count","extraButtons","map","f","key","PartialFolder","PartialFolderList","Array","fill","_","i","useFetchAllChildFolders","parentId","fetch","getRequest","cursor","useHandleLibraryType","request","hasCompleted","hasError","LibraryFolderEmptyState","value","EmptyState","src","ImageUrls","LibraryFolderVideos","focusSearchBar","hasPermissions","usePermissions","videos","hasSubFolders","IconButton","application","action","params","source","analyticsData","analyticsOptions","entity","location","actionType","descriptor","smartCount","libraries","VideoSortSelect","variant","sort","getSortAppLink","workflowPhase","VideoList","yearGroups","getVideoAppLink","v","opts","VideoAppLinkHelper","context","RelatedVideosContext","contextId","folderId","getSubTextAppLink","video","SeriesAppLinkHelper","series","setFavourite","canFavourite","presentationAudiences","audiences","getPreviewQuestionsAppLink","interactive","InteractiveHelper","imageCdnUrl","isPlugin","getClassroomGuideAppLink","getInteractiveGuidanceAppLink","getResourceGuidanceAppLink","hasMore","isFetching","InfiniteScrollFooter","fetchNext","nextCursor","LibraryFolderPartialLoading","PartialVideoList","getPhrase","LanguageService","LibraryFolderView","dispatch","alerts","usePluginHelper","LibraryRequests","library","libraryId","subfolders","user","UserRequests","config","ConfigRequests","isAuthenticated","CustomerRequests","customerId","videoActions","useVideoActions","useLiteFavourites","u","breadcrumbs","useBreadcrumbs","usePresentationAudiences","useSetPageMetadata","VideoSortHelper","getVideosRequest","pageNumber","httpStatus","error","items","VideoRequests","useVideoMixin","hasNoSubfolders","VideoActionsContext","BannerHeader","heading","banner","blockColourClass","logo","owner","Breadcrumbs","getFolderAppLink","args","getFolderBgColourClass","charCode","charCodeAt"],"sourceRoot":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3525],{94644:(e,a,i)=>{i.d(a,{r:()=>l});var t=i(50242),n=i(81886),r=i(67058),o=i(14553),s=i(49267),c=i(49075),d={notFound:r.d,forbidden:{rating:o.q,yearLevel:o.q,region:s.a,privacy:o.q},badRequest:c._};function l(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var r;r="number"==typeof e?e:e.status;var o=Object.assign(Object.assign({},d),a);r&&n.Q.Ry.isStatusCodeError(r)&&(r!==t.o.NotFound?r!==t.o.Forbidden?i.badRequest||n.Q.Ry.throw(new o.badRequest):i.forbidden||n.Q.Ry.throw(new o.forbidden.privacy):i.notFound||n.Q.Ry.throw(new o.notFound))}}},91286:(e,a,i)=>{i.d(a,{v:()=>o});var t=i(32735),n=i(94644);function r(e){return e.map((function(e){return e.statusCode})).join(":")}function o(e,a,i){var o=Array.isArray(e)?e:[e];(0,t.useEffect)((function(){o.forEach((function(e){(0,n.r)(e.statusCode,a,i)}))}),[r(o),a,i])}},5859:(e,a,i)=>{function t(e,a){(null==a||a>e.length)&&(a=e.length);for(var i=0,t=Array(a);i<a;i++)t[i]=e[i];return t}i.d(a,{u:()=>r});var n={numItems:5,minWidth:50,maxWidth:100},r={getPartialLoadingItems:function(){var e,a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=Object.assign(Object.assign({},n),a);return(e=Array(i.numItems),function(e){if(Array.isArray(e))return t(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 t(e,a);var i={}.toString.call(e).slice(8,-1);return"Object"===i&&e.constructor&&(i=e.constructor.name),"Map"===i||"Set"===i?Array.from(e):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?t(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()*i.maxWidth),i.minWidth),"px")}}))}}},44110:(e,a,i)=>{i.d(a,{i:()=>o});var t=i(20354),n=i(89454),r=i(86698),o=function(){var e=(0,r.y)({redirectOnError:!0}),a=e.activePresentation,i=e.getFallbackPresentation,o=a||i();return t.a.useBasicFetch(!!o&&n.O.presentationAudiences(o.id))}},36073:(e,a,i)=>{i.r(a),i.d(a,{PlayClipViewV2:()=>U});var t=i(32735),n=i(50242),r=i(23481),o=i(20354),s=i(65858),c=i(78417),d=i(16714),l=i(67058),u=i(33803),p=i(43012),v=i(39151),m=i(1666),g=i(20768),f=i(31949),y=i(1575),h=i(63719),I=i(26304),A=i(91286),P=i(22902),b=i(15311),C=i(79612),E=i(76753),V=i(51855),F=i(7179),O=i(49948),R=i(36873),S=i(27638),x=i(44110),L=i(35014),w=i(97816),G=i(81812),T=i(14085),k=r.T.encloseNamespace("shared.playClipV2"),q={notFound:l.d,forbidden:{privacy:u.G}};function U(e){var a,i,r,l,u,U,N,M,j=e.queryParams,_=j.context,B=j.contextId,W=j.mtv,D=(0,b.r)().hasProduct,H=(0,S.u)(s.LZ.PlayClip),Q=H.setFavourite,K=H.canFavourite,Y=(0,P.T)().hasPermissions,Z=(0,V.G)().isPlugin,J=o.a.useBasicFetch(f.N.currentUser()),$=o.a.useBasicFetch(v.L.config()),z=o.a.useBasicFetch(p.e.clip(e.id)),X=o.a.useBasicFetch(g.b.videoInteractives(e.id)),ee=o.a.useBasicFetch(!!(null===(a=z.data)||void 0===a?void 0:a._parentVideo)&&y.R.video(z.data._parentVideo.id));(0,w.V)([ee.data]);var ae=o.a.useBasicFetch(!!(null===(i=z.data)||void 0===i?void 0:i._parentVideo)&&p.e.videoClips(z.data._parentVideo.id)),ie=o.a.useBasicFetch(z.statusCode===n.o.Forbidden&&p.e.clip(e.id,c.r.StripMetadata)),te=(0,R.k)({video:ee.data,context:_,contextId:B,moviesAndTv:W,currentUser:J.data}),ne=(0,x.i)(),re=o.a.useBasicFetch((null===(r=J.data)||void 0===r?void 0:r.isAuthenticated)&&m.h.yearGroups(J.data.customerId)),oe=(0,G.a)(),se=(0,O.l)(e.id,!0),ce=(0,L.I)(),de=(0,h.h)({name:null===(l=z.data)||void 0===l?void 0:l.name});return(0,C.M)(E.CG.getClipMetadata({content:z.data,phraseContext:{phraseHandler:k,titlePhrase:"pageTitle",descriptionPhrase:"pageDescription"}})),(0,A.v)(z,q,{forbidden:!0}),(0,w.V)(null!==(u=te.videos)&&void 0!==u?u:[]),(0,I.b)(ie),(0,F.P)({id:e.id,app:"clips"}),z.data&&J.hasCompleted&&$.hasCompleted&&se.hasCompleted?t.createElement(T.S,{clip:z.data,clips:null===(U=ae.data)||void 0===U?void 0:U.data,interactives:null===(N=X.data)||void 0===N?void 0:N.data,originalVideo:ee.data,currentUser:J.data,yearGroups:re.data,relatedVideos:"playlist"===_?te:Object.assign(Object.assign({},te),{videos:[]}),canFavourite:K,setFavourite:Q,hasProduct:D,queryParams:e.queryParams,audiences:ne.data,imageCdnUrl:$.data.imageCdnUrl,canManageVideoAccess:Y(d.C.ManageVideoAccess),pointsOfInterest:se.items,featureAccess:ce,tableOfContentsId:null===(M=e.queryParams)||void 0===M?void 0:M.tocId,shouldShowSideTableOfContents:oe,isPlugin:Z,breadcrumbs:de}):t.createElement(t.Fragment,null)}U.defaultProps={queryParams:{}}},14085:(e,a,i)=>{i.d(a,{S:()=>H});var t=i(32735),n=i(28400),r=i(49935),o=i(5640),s=i(56940),c=i(51184),d=i(64921),l=i(95812),u=i(53709),p=i(71063),v=i(10439),m=i(35429),g=i(4594),f=i(16714),y=i(12754),h=i(22902),I=i(65332),A=i(76196),P=i(59598),b=i(31908),C=i(26492),E=i(9465),V=i(91479),F=i(47938),O=i(81024),R=i(78166),S=i(99742),x=i(14070),L=i(97291),w=i(22490),G=i(63010),T=i(14476),k=i(53256),q=i(83345),U=i(13231),N=i(51365),M=i(10671),j=i(10741),_="shared.playClipV2";function B(e){var a=(0,h.T)().hasPermissions,i=(0,M._)({location:M.i.VideoItem});return t.createElement("section",{className:"play-page-section",id:P.K.ClippedFrom,ref:function(a){var i;a&&(null===(i=e.headingRef)||void 0===i?void 0:i.current)&&e.headingRef.current.set(P.K.ClippedFrom,a)}},t.createElement("h2",{className:"h4 mb-0"},t.createElement(q.x,{namespace:_,phrase:"clippedFrom"})),t.createElement(N.M.Provider,{value:i},t.createElement(U.E4,{videos:[e.originalVideo],yearGroups:e.yearGroups,setFavourite:e.setFavourite,canFavourite:e.canFavourite,getVideoAppLink:function(a,i){return w.W.getAppLink(a,Object.assign(Object.assign({},i),{context:e.queryParams.context,contextId:e.queryParams.contextId,playNext:e.queryParams.playNext,shareId:e.shareId,moviesAndTv:e.queryParams.mtv}))},hasPermissions:a,presentationAudiences:e.audiences,getPreviewQuestionsAppLink:function(e){return j.j.getPreviewQuestionsAppLink(e)},isPlugin:e.isPlugin,getClassroomGuideAppLink:e.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:e.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:e.getResourceGuidanceAppLink})))}const W={main:"iQ0Ie",expandedToc:"sIoV8"};var D=function(e,a,i){return function(t){return i?{application:L.O.VIDEOS,action:x.e.Videos.PREVIEW_PDF,args:[t.id],params:{videoId:e,shareId:a}}:{application:L.O.SIGN_UP,action:x.e.SignUp.SIGN_UP}}};function H(e){var a,i,q,U,N,M,j,_,H,Q,K=(0,m.g)(),Y=(0,h.T)().hasPermissions,Z=b.M.getCanBeConsumed(e.clip).canConsume,J=(0,G.Q)(e.tableOfContentsId),$=J.tableOfContentsActiveId,z=J.setTableOfContentsActiveId,X=J.controlledId,ee=J.setControlledId,ae=J.tableOfContentsExpanded,ie=J.onToggleTableOfContents,te=(0,c.Wp)(e.clip)&&e.featureAccess.canViewGlance,ne=(0,T.i)(te),re=ne.headingRef,oe=ne.headingElements,se=oe.map((function(a){var i;return{id:a.id,name:k.d.getSectionHeading(a.id,{clips:e.clips,interactives:e.interactives,resources:null===(i=e.clip.resources)||void 0===i?void 0:i.data,isPlayClipPage:!0})}}));(0,I.D)({setActiveId:z,headingElements:oe,controlledId:X,setControlledId:ee}),(0,A.P)(oe,X);var ce=b.M.isVideoTypeArchived(e.clip),de=Y(f.C.StudentExperience),le=t.useRef(!1);function ue(){var e,a,i,t;le.current=!(null===(a=null===(e=null==K?void 0:K.playerRef)||void 0===e?void 0:e.current)||void 0===a?void 0:a.isPaused()),null===(t=null===(i=null==K?void 0:K.playerRef)||void 0===i?void 0:i.current)||void 0===t||t.pause()}function pe(){var e,a;le.current&&(null===(a=null===(e=null==K?void 0:K.playerRef)||void 0===e?void 0:e.current)||void 0===a||a.play())}function ve(){var a,i;return!(!e.originalVideo||!(null===(a=e.clip._canBeConsumed)||void 0===a?void 0:a.value)||!(null===(i=e.currentUser)||void 0===i?void 0:i.isAuthenticated)||!e.hasProduct(y.x.Primary)||de)}var me="picture-in-picture"===K.mode||e.featureAccess.canViewPublicLayout,ge=null!==(i=null===(a=e.clips)||void 0===a?void 0:a.filter((function(a){return a.id.toString()!==e.clip.id.toString()})))&&void 0!==i?i:[];return t.createElement("div",{className:"px-4 play-page-sections-container ".concat(e.shouldShowSideTableOfContents?"row g-0":"")},t.createElement("main",{className:"".concat(W.main," ").concat(e.shouldShowSideTableOfContents&&ae?"".concat(W.expandedToc," col-9"):e.shouldShowSideTableOfContents&&!ae?"pe-4":void 0)},!!(null===(q=e.breadcrumbs)||void 0===q?void 0:q.length)&&t.createElement("div",{className:"mb-2"},t.createElement(r.Oo,{breadcrumbs:e.breadcrumbs})),t.createElement(F.W,{restrictions:e.clip._restrictions,yearGroups:e.yearGroups,objectId:e.clip.id,objectTypeId:g.E.Clip,canManageVideoAccess:e.canManageVideoAccess}),ce&&t.createElement(C.T,{typeId:e.clip.typeId,hasStudentExperience:de}),t.createElement("section",{id:P.K.Video,className:"mb-2 ".concat(p.M.GLOBAL_PLAYER_SELECTOR),ref:function(e){e&&(null==re?void 0:re.current)&&re.current.set(P.K.Video,e)}},Z&&t.createElement(v.r,{key:e.clip.id,objectId:e.clip.id,objectTypeId:e.clip.typeId,shareId:e.shareId,context:null===(U=e.queryParams)||void 0===U?void 0:U.context,contextId:null===(N=e.queryParams)||void 0===N?void 0:N.contextId,moviesAndTv:null===(M=e.queryParams)||void 0===M?void 0:M.mtv,playNext:null===(j=e.queryParams)||void 0===j?void 0:j.playNext,startTime:null!==(H=null===(_=e.queryParams)||void 0===_?void 0:_.t)&&void 0!==H?H:null===(Q=e.queryParams)||void 0===Q?void 0:Q.startTime,mode:"default",location:"play-page"}),t.createElement("div",{className:me?"":"d-none"},t.createElement(O.S,{video:e.clip,type:"pip"}))),t.createElement(V.v,{media:e.clip,yearGroups:e.yearGroups,audiences:e.audiences,originalVideoAppLink:ve()?{application:L.O.VIDEOS,action:x.e.Videos.PLAY_VIDEO,args:[e.originalVideo.id,n.m.slugify(e.originalVideo.name)]}:null,featureAccess:e.featureAccess,shareId:e.shareId}),te?t.createElement(d.j,{video:e.clip,pointsOfInterest:e.pointsOfInterest,setStartTime:function(e){var a;return null===(a=K.playerRef.current)||void 0===a?void 0:a.currentTime(e)},getTagAppLink:function(e){return{application:L.O.SEARCH,action:x.e.Search.HOME,params:{tagOrClassification:e.name}}},suppressInteractivity:e.featureAccess.canViewPublicLayout,canViewGlance:te}):t.createElement(s.a,{video:e.clip,currentUser:e.currentUser,onLaunchImmersiveReader:ue,onExitImmersiveReader:pe,getTagAppLink:function(e){return{application:L.O.SEARCH,action:x.e.Search.HOME,params:{tagOrClassification:e.name}}},headingRef:re,suppressInteractivity:e.featureAccess.canViewPublicLayout}),t.createElement(u.M,{video:e.clip,canViewResources:e.featureAccess.canViewResourceItems,imageCdnUrl:e.imageCdnUrl,getAppLink:D(e.clip.id,e.shareId,e.featureAccess.canViewResourceItems),analyticsData:{clipId:e.clip.id,clipName:e.clip.name},resourceThumbnailFallbackUrl:S.W.Fallbacks.RESOURCE_THUMBNAIL,headingRef:re}),t.createElement(l.J,{video:e.clip,interactives:e.interactives,imageCdnUrl:e.imageCdnUrl,analyticsData:{clipId:e.clip.id,clipName:e.clip.name},canViewInteractives:e.featureAccess.canViewInteractives,headingRef:re,yearGroups:e.yearGroups,setFavourite:e.setFavourite,canFavourite:e.canFavourite,isPlugin:e.isPlugin}),t.createElement(o.O,{clips:ge||[],video:e.clip,canViewClips:e.featureAccess.canViewClips,yearGroups:e.yearGroups,audiences:e.audiences,imageCdnUrl:e.imageCdnUrl,setFavourite:e.setFavourite,canFavourite:e.canFavourite,headingRef:re,analyticsData:{clipId:e.clip.id,clipName:e.clip.name},isPlugin:e.isPlugin}),te&&t.createElement(s.a,{video:e.clip,currentUser:e.currentUser,onLaunchImmersiveReader:ue,onExitImmersiveReader:pe,getTagAppLink:function(e){return{application:L.O.SEARCH,action:x.e.Search.HOME,params:{tagOrClassification:e.name}}},headingRef:re,suppressInteractivity:e.featureAccess.canViewPublicLayout,showHeading:!0}),!!ve()&&t.createElement(B,{originalVideo:e.originalVideo,setFavourite:e.setFavourite,canFavourite:e.canFavourite,yearGroups:e.yearGroups,shareId:e.shareId,queryParams:e.queryParams,audiences:e.audiences,headingRef:re,isPlugin:e.isPlugin,getClassroomGuideAppLink:w.W.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:w.W.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:w.W.getResourceGuidanceAppLink}),t.createElement(R.Z,{currentVideo:e.clip,yearGroups:e.yearGroups,relatedVideos:e.relatedVideos,setFavourite:e.setFavourite,canFavourite:e.canFavourite,currentUser:e.currentUser,audiences:e.audiences,getVideoAppLink:function(a,i){return w.W.getAppLink(a,Object.assign(Object.assign({},i),{context:e.queryParams.context,contextId:e.queryParams.contextId,playNext:e.queryParams.playNext,shareId:e.shareId,moviesAndTv:e.queryParams.mtv}))},moviesAndTv:e.queryParams.mtv,isPlugin:e.isPlugin})),t.createElement(E.h,{isExpanded:ae,setIsExpanded:ie,items:se,activeId:$,setControlledId:ee,analyticsData:{clipId:e.clip.id,clipName:e.clip.name},showInSide:e.shouldShowSideTableOfContents}))}}}]);
|
|
2
|
-
//# sourceMappingURL=3525-45e28232cf-lite.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/3525-45e28232cf-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/libs/shared/src/utils/PartialLoadingHelper.ts","file:///app/packages/projects/lite/src/shared/hooks/usePresentationAudiences.ts","file:///app/packages/projects/lite/src/shared/views/play-clip/v2/PlayClipViewV2.tsx","file:///app/packages/projects/lite/src/shared/views/play-clip/v2/components/clipped-from/ClippedFrom.tsx","file:///app/packages/projects/lite/src/shared/views/play-clip/v2/components/play-clip/play-clip-v2.scss","file:///app/packages/projects/lite/src/shared/views/play-clip/v2/components/play-clip/PlayClipV2.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}","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 * 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 { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useBreadcrumbs } from 'libs/shared/hooks/useBreadcrumbs';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Clip, ClipCollection, Config, CurrentUser, InteractiveCollection, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\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';\nimport { useShouldShowSideTableOfContents } from 'shared/views/play/v2/hooks/useShouldShowTableOfContents';\n\nimport { PlayViewProps } from '../PlayClipViewContainer';\n\nimport { PlayClipV2 } from './components/play-clip/PlayClipV2';\n\nconst namespace = 'shared.playClipV2';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst clipErrors = {\n notFound: NotFoundError,\n forbidden: {\n privacy: VideoPrivateError\n }\n};\n\nPlayClipViewV2.defaultProps = {\n queryParams: {}\n};\n\nexport function PlayClipViewV2(props: PlayViewProps): 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 { isPlugin } = usePluginHelper();\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\n const interactives = Flight.useBasicFetch<InteractiveCollection>(InteractiveRequests.videoInteractives(props.id));\n const video = Flight.useBasicFetch<Video>(\n !!clip.data?._parentVideo && VideoRequests.video(clip.data._parentVideo.id)\n );\n useVideoMixin([video.data]);\n\n const childClips = Flight.useBasicFetch<ClipCollection>(\n !!clip.data?._parentVideo && ClipRequests.videoClips(clip.data._parentVideo.id)\n );\n\n const strippedClip = Flight.useBasicFetch<Clip>(clip.statusCode === HttpStatus.Forbidden &&\n ClipRequests.clip(props.id, PermissionFilterOption.StripMetadata));\n const relatedVideos = useGetRelatedVideos({\n video: video.data,\n context,\n contextId,\n moviesAndTv: mtv,\n currentUser: currentUser.data\n });\n const audiences = usePresentationAudiences();\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const shouldShowSideTableOfContents = useShouldShowSideTableOfContents();\n\n const pointsOfInterest = useFetchPointsOfInterest(props.id, true);\n \n const featureAccess = useVideoFeatureAccess();\n\n const breadcrumbs = useBreadcrumbs({ name: clip.data?.name });\n\n useSetPageMetadata(PageMetadataHelper.getClipMetadata({\n content: clip.data,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n }\n }));\n\n useHandleObjectError(clip, clipErrors, { forbidden: true });\n useVideoMixin(relatedVideos.videos ?? []);\n useCannotConsumeError(strippedClip);\n useDeepLinks({ id: props.id, app: 'clips' });\n\n const hasLoaded = (\n clip.data &&\n currentUser.hasCompleted &&\n config.hasCompleted &&\n pointsOfInterest.hasCompleted\n );\n\n if (!hasLoaded)\n return <></>;\n\n return (\n <PlayClipV2\n clip={clip.data}\n clips={childClips.data?.data}\n interactives={interactives.data?.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 featureAccess={featureAccess}\n tableOfContentsId={props.queryParams?.tocId}\n shouldShowSideTableOfContents={shouldShowSideTableOfContents}\n isPlugin={isPlugin}\n breadcrumbs={breadcrumbs}\n />\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { CanFavouriteFunc, FavouriteFunc, PresentationAudience, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\n\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { InteractiveHelpers } from 'shared/utils/InteractiveHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nconst namespace = 'shared.playClipV2';\n\ninterface ClippedFromProps {\n originalVideo: VideoTypes;\n yearGroups: YearGroup[];\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n queryParams: PlayViewQueryParams;\n audiences: PresentationAudience[];\n shareId?: string;\n headingRef: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n isPlugin: boolean;\n getInteractiveGuidanceAppLink: (id: string, type: MasterType) => Core.AppLink;\n getResourceGuidanceAppLink: (id: string, type: MasterType) => Core.AppLink;\n getClassroomGuideAppLink: (id: string, type: MasterType) => Core.AppLink;\n}\n\nexport function ClippedFrom(props: ClippedFromProps) {\n const { hasPermissions } = usePermissions();\n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem });\n\n return (\n <section\n className='play-page-section'\n id={PlayPageAnchor.ClippedFrom}\n ref={el => {\n (el && props.headingRef?.current) && props.headingRef.current.set(PlayPageAnchor.ClippedFrom, el);\n }}\n >\n <h2 className='h4 mb-0'><Text namespace={namespace} phrase='clippedFrom' /></h2>\n <VideoActionsContext.Provider value={videoActions}>\n <VideoList\n videos={[props.originalVideo]}\n yearGroups={props.yearGroups}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n getVideoAppLink={(v, opts) => VideoAppLinkHelper.getAppLink(v, {\n ...opts,\n context: props.queryParams.context,\n contextId: props.queryParams.contextId,\n playNext: props.queryParams.playNext,\n shareId: props.shareId,\n moviesAndTv: props.queryParams.mtv\n })}\n hasPermissions={hasPermissions}\n presentationAudiences={props.audiences}\n getPreviewQuestionsAppLink={interactive => InteractiveHelpers.getPreviewQuestionsAppLink(interactive)}\n isPlugin={props.isPlugin}\n getClassroomGuideAppLink={props.getClassroomGuideAppLink}\n getInteractiveGuidanceAppLink={props.getInteractiveGuidanceAppLink}\n getResourceGuidanceAppLink={props.getResourceGuidanceAppLink}\n />\n </VideoActionsContext.Provider>\n </section>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"main\":\"iQ0Ie\",\"expandedToc\":\"sIoV8\"};","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { Breadcrumb, Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PlayPageClips } from 'libs/shared/components/play-page-v2/clips-widget/PlayPageClips';\nimport { VideoDetailsWithScrollbarV2 } from 'libs/shared/components/play-page-v2/details/VideoDetailsV2';\nimport { hasGlanceData } from 'libs/shared/components/play-page-v2/glance/VideoAtAGlanceUtilsV2';\nimport { VideoAtAGlanceV2 } from 'libs/shared/components/play-page-v2/glance/VideoAtAGlanceV2';\nimport { PlayPageInteractives } from 'libs/shared/components/play-page-v2/interactives-widget/PlayPageInteractives';\nimport { PlayPageResources } from 'libs/shared/components/play-page-v2/resources-widget/PlayPageResources';\nimport { SeoConstants } from 'libs/shared/constants/SeoConstants';\nimport { GlobalPlayerConsumer } from 'libs/shared/context/player-context/components/GlobalPlayerConsumer';\nimport { usePlayerContext } from 'libs/shared/context/player-context/PlayerContext';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { HasProductFunc } from 'libs/shared/hooks/UseProducts';\nimport { useTableOfContentsActiveHeading } from 'libs/shared/hooks/useTableOfContentsActiveHeading';\nimport { useTableOfContentsScroll } from 'libs/shared/hooks/useTableOfContentsScroll';\nimport { CanFavouriteFunc, Clip, CurrentUser, FavouriteFunc, InteractiveMetadata, Link, PointOfInterest, PresentationAudience, Resource, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ArchivedBanner } from 'shared/components/play-page/ArchivedBanner';\nimport { TableOfContentsContainer } from 'shared/components/play-page/components/table-of-contents/TableOfContents';\nimport { PlayPageTitleAndActions } from 'shared/components/play-page/components/title-and-actions/PlayPageTitleAndActions';\nimport { RestrictionBanner } from 'shared/components/play-page/RestrictionBanner';\nimport { PlayerPlaceholder } from 'shared/components/player-placeholder/PlayerPlaceholder';\nimport { RelatedVideos } from 'shared/components/related-videos/RelatedVideos';\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { RelatedVideosHash } from 'shared/hooks/useGetRelatedVideos';\nimport { VideoFeaturesHash } from 'shared/hooks/useVideoFeatureAccess';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\nimport { usePlayPageTableOfContent } from 'shared/views/play/v2/hooks/usePlayPageTableOfContent';\nimport { useSectionHeadings } from 'shared/views/play/v2/hooks/useSectionHeadings';\nimport { PlayPageUtils } from 'shared/views/play/v2/PlayPageUtilV2';\nimport { ClippedFrom } from 'shared/views/play-clip/v2/components/clipped-from/ClippedFrom';\n\nimport styles from './play-clip-v2.scss';\n\nconst getResourceAppLink = (videoId: string, shareId: string, canViewResource: boolean) =>\n (resource: Resource | Link) => {\n if (!canViewResource) {\n return {\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n };\n }\n\n return {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PREVIEW_PDF,\n args: [resource.id],\n params: {\n videoId: videoId,\n shareId: shareId\n }\n };\n };\n\n\ninterface PlayClipV2Props {\n clip: Clip;\n clips: Clip[];\n interactives: InteractiveMetadata[];\n originalVideo: Video;\n currentUser: CurrentUser;\n yearGroups: YearGroup[];\n relatedVideos: RelatedVideosHash;\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n queryParams: PlayViewQueryParams;\n hasProduct: HasProductFunc;\n audiences: PresentationAudience[];\n imageCdnUrl: string;\n shareId?: string;\n canManageVideoAccess: boolean;\n pointsOfInterest?: PointOfInterest[];\n featureAccess: VideoFeaturesHash;\n tableOfContentsId: string;\n shouldShowSideTableOfContents: boolean;\n isPlugin: boolean;\n breadcrumbs?: Breadcrumb[];\n}\n\nexport function PlayClipV2(props: PlayClipV2Props): JSX.Element {\n const playerContext = usePlayerContext();\n\n const { hasPermissions } = usePermissions();\n const { canConsume } = VideoHelper.getCanBeConsumed(props.clip);\n \n const {\n tableOfContentsActiveId,\n setTableOfContentsActiveId,\n controlledId,\n setControlledId,\n tableOfContentsExpanded,\n onToggleTableOfContents\n } = usePlayPageTableOfContent(props.tableOfContentsId);\n\n const hasGlance = hasGlanceData(props.clip) && props.featureAccess.canViewGlance;\n\n const { headingRef, headingElements } = useSectionHeadings(hasGlance);\n const items = headingElements.map(ele => {\n return {\n id: ele.id as PlayPageAnchor,\n name: PlayPageUtils.getSectionHeading(\n ele.id as PlayPageAnchor,\n {\n clips: props.clips,\n interactives: props.interactives,\n resources: props.clip.resources?.data,\n isPlayClipPage: true\n }\n )\n };\n });\n\n useTableOfContentsActiveHeading({\n setActiveId: setTableOfContentsActiveId,\n headingElements,\n controlledId,\n setControlledId\n });\n\n useTableOfContentsScroll(headingElements, controlledId);\n\n const isArchived = VideoHelper.isVideoTypeArchived(props.clip);\n const hasStudentExperience = hasPermissions(PermissionName.StudentExperience);\n /**\n * Need to use a ref because if we use state, onExitImmersiveReader will have a stale\n * reference of the state. This is because the state is changed in onLaunchImmersiveReader\n * which is passed in at the same time as onExitImmersiveReader\n */\n const shouldPlayOnExitImmersiveReader = React.useRef(false);\n\n function onLaunchImmersiveReader(): void {\n shouldPlayOnExitImmersiveReader.current = !playerContext?.playerRef?.current?.isPaused();\n playerContext?.playerRef?.current?.pause();\n }\n\n function onExitImmersiveReader(): void {\n if (!shouldPlayOnExitImmersiveReader.current)\n return;\n\n playerContext?.playerRef?.current?.play();\n }\n\n function canAccessOriginal(): boolean {\n if (!props.originalVideo || !props.clip._canBeConsumed?.value)\n return false;\n\n if (!props.currentUser?.isAuthenticated)\n return false;\n\n if (!props.hasProduct(ProductId.Primary))\n return false;\n\n if (hasStudentExperience)\n return false;\n\n return true;\n }\n\n function getOriginalVideoAppLink(): Core.AppLink {\n if (!canAccessOriginal())\n return null;\n \n return {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ props.originalVideo.id, TextHelper.slugify(props.originalVideo.name) ]\n };\n }\n\n const showPlayerPlaceholder = playerContext.mode === 'picture-in-picture' || props.featureAccess.canViewPublicLayout;\n\n const otherClips = props.clips?.filter(c => c.id.toString() !== props.clip.id.toString()) ?? [];\n\n function getMainClassName() {\n if (props.shouldShowSideTableOfContents && tableOfContentsExpanded) {\n return `${styles.expandedToc} col-9`;\n }\n if (props.shouldShowSideTableOfContents && !tableOfContentsExpanded)\n return 'pe-4';\n }\n\n return (\n <div className={`px-4 play-page-sections-container ${props.shouldShowSideTableOfContents ? 'row g-0' : ''}`}>\n <main className={`${styles.main} ${getMainClassName()}`}>\n {!!props.breadcrumbs?.length &&\n <div className='mb-2'>\n <Breadcrumbs breadcrumbs={props.breadcrumbs} />\n </div>\n }\n\n <RestrictionBanner\n restrictions={props.clip._restrictions}\n yearGroups={props.yearGroups}\n objectId={props.clip.id}\n objectTypeId={MasterType.Clip}\n canManageVideoAccess={props.canManageVideoAccess}\n />\n\n {isArchived && (\n <ArchivedBanner\n typeId={props.clip.typeId}\n hasStudentExperience={hasStudentExperience}\n />\n )}\n\n <section\n id={PlayPageAnchor.Video}\n className={`mb-2 ${SeoConstants.GLOBAL_PLAYER_SELECTOR}`}\n ref={el => { (el && headingRef?.current) && headingRef.current.set(PlayPageAnchor.Video, el); }}\n >\n {canConsume && (\n <GlobalPlayerConsumer\n key={props.clip.id}\n objectId={props.clip.id}\n objectTypeId={props.clip.typeId}\n shareId={props.shareId}\n context={props.queryParams?.context}\n contextId={props.queryParams?.contextId}\n moviesAndTv={props.queryParams?.mtv}\n playNext={props.queryParams?.playNext}\n startTime={props.queryParams?.t ?? props.queryParams?.startTime}\n mode='default'\n location='play-page'\n />\n )}\n <div className={showPlayerPlaceholder ? '' : 'd-none'}>\n <PlayerPlaceholder\n video={props.clip}\n type='pip'\n />\n </div>\n </section>\n\n <PlayPageTitleAndActions\n media={props.clip}\n yearGroups={props.yearGroups}\n audiences={props.audiences}\n originalVideoAppLink={getOriginalVideoAppLink()}\n featureAccess={props.featureAccess}\n shareId={props.shareId}\n />\n\n {/* if no glance render video details here */}\n {hasGlance ? (\n <VideoAtAGlanceV2\n video={props.clip}\n pointsOfInterest={props.pointsOfInterest}\n setStartTime={(time: number) => playerContext.playerRef.current?.currentTime(time)}\n getTagAppLink={tag => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: { tagOrClassification: tag.name }\n })}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n canViewGlance={hasGlance}\n />\n ) : (\n <VideoDetailsWithScrollbarV2\n video={props.clip}\n currentUser={props.currentUser}\n onLaunchImmersiveReader={onLaunchImmersiveReader}\n onExitImmersiveReader={onExitImmersiveReader}\n getTagAppLink={tag => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: { tagOrClassification: tag.name }\n })}\n headingRef={headingRef}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n />\n )}\n\n <PlayPageResources\n video={props.clip}\n canViewResources={props.featureAccess.canViewResourceItems}\n imageCdnUrl={props.imageCdnUrl}\n getAppLink={\n getResourceAppLink(props.clip.id, props.shareId, props.featureAccess.canViewResourceItems)\n }\n analyticsData={{ clipId: props.clip.id, clipName: props.clip.name }}\n resourceThumbnailFallbackUrl={ImageUrls.Fallbacks.RESOURCE_THUMBNAIL}\n headingRef={headingRef}\n />\n\n <PlayPageInteractives\n video={props.clip}\n interactives={props.interactives}\n imageCdnUrl={props.imageCdnUrl}\n analyticsData={{ clipId: props.clip.id, clipName: props.clip.name }}\n canViewInteractives={props.featureAccess.canViewInteractives}\n headingRef={headingRef}\n yearGroups={props.yearGroups}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n isPlugin={props.isPlugin}\n />\n\n <PlayPageClips\n clips={otherClips || []}\n video={props.clip}\n canViewClips={props.featureAccess.canViewClips}\n yearGroups={props.yearGroups}\n audiences={props.audiences}\n imageCdnUrl={props.imageCdnUrl}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n headingRef={headingRef}\n analyticsData={{ clipId: props.clip.id, clipName: props.clip.name }}\n isPlugin={props.isPlugin}\n />\n\n {/* if has glance, render video details here */}\n {hasGlance && (\n <VideoDetailsWithScrollbarV2\n video={props.clip}\n currentUser={props.currentUser}\n onLaunchImmersiveReader={onLaunchImmersiveReader}\n onExitImmersiveReader={onExitImmersiveReader}\n getTagAppLink={tag => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: { tagOrClassification: tag.name }\n })}\n headingRef={headingRef}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n showHeading\n />\n )}\n \n {!!canAccessOriginal() && (\n <ClippedFrom\n originalVideo={props.originalVideo}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n yearGroups={props.yearGroups}\n shareId={props.shareId}\n queryParams={props.queryParams}\n audiences={props.audiences}\n headingRef={headingRef}\n isPlugin={props.isPlugin}\n getClassroomGuideAppLink={VideoAppLinkHelper.getClassroomGuideAppLink}\n getInteractiveGuidanceAppLink={VideoAppLinkHelper.getInteractiveGuidanceAppLink}\n getResourceGuidanceAppLink={VideoAppLinkHelper.getResourceGuidanceAppLink}\n />\n )}\n\n <RelatedVideos\n currentVideo={props.clip}\n yearGroups={props.yearGroups}\n relatedVideos={props.relatedVideos}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n currentUser={props.currentUser}\n audiences={props.audiences}\n getVideoAppLink={(v, opts) => VideoAppLinkHelper.getAppLink(v, {\n ...opts,\n context: props.queryParams.context,\n contextId: props.queryParams.contextId,\n playNext: props.queryParams.playNext,\n shareId: props.shareId,\n moviesAndTv: props.queryParams.mtv\n })}\n moviesAndTv={props.queryParams.mtv}\n isPlugin={props.isPlugin}\n />\n\n </main>\n\n <TableOfContentsContainer\n isExpanded={tableOfContentsExpanded}\n setIsExpanded={onToggleTableOfContents}\n items={items}\n activeId={tableOfContentsActiveId}\n setControlledId={setControlledId}\n analyticsData={{ clipId: props.clip.id, clipName: props.clip.name }}\n showInSide={props.shouldShowSideTableOfContents}\n />\n \n </div>\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","DEFAULT_PARTIAL_LOADING_OPTIONS","numItems","minWidth","maxWidth","PartialLoadingHelper","getPartialLoadingItems","options","opts","width","Math","max","floor","random","usePresentationAudiences","redirectOnError","activePresentation","getFallbackPresentation","presentation","id","getPhrase","clipErrors","PlayClipViewV2","props","queryParams","context","contextId","mtv","hasProduct","u","setFavourite","canFavourite","hasPermissions","isPlugin","currentUser","config","clip","interactives","video","data","_parentVideo","childClips","strippedClip","relatedVideos","moviesAndTv","audiences","yearGroups","isAuthenticated","customerId","shouldShowSideTableOfContents","pointsOfInterest","featureAccess","breadcrumbs","name","content","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","videos","app","hasCompleted","clips","originalVideo","imageCdnUrl","canManageVideoAccess","items","tableOfContentsId","tocId","defaultProps","namespace","ClippedFrom","usePermissions","videoActions","useVideoActions","location","className","PlayPageAnchor","ref","el","headingRef","current","set","Text","phrase","VideoActionsContext","value","VideoList","getVideoAppLink","v","VideoAppLinkHelper","playNext","shareId","presentationAudiences","getPreviewQuestionsAppLink","interactive","InteractiveHelper","getClassroomGuideAppLink","getInteractiveGuidanceAppLink","getResourceGuidanceAppLink","getResourceAppLink","videoId","canViewResource","resource","application","action","args","params","PlayClipV2","playerContext","canConsume","VideoHelper","usePlayPageTableOfContent","tableOfContentsActiveId","setTableOfContentsActiveId","controlledId","setControlledId","tableOfContentsExpanded","onToggleTableOfContents","hasGlance","canViewGlance","useSectionHeadings","headingElements","ele","resources","isPlayClipPage","useTableOfContentsActiveHeading","setActiveId","useTableOfContentsScroll","isArchived","hasStudentExperience","PermissionName","shouldPlayOnExitImmersiveReader","onLaunchImmersiveReader","playerRef","isPaused","pause","onExitImmersiveReader","play","canAccessOriginal","_canBeConsumed","ProductId","showPlayerPlaceholder","mode","canViewPublicLayout","otherClips","filter","c","toString","length","Breadcrumbs","RestrictionBanner","restrictions","_restrictions","objectId","objectTypeId","MasterType","ArchivedBanner","typeId","SeoConstants","GlobalPlayerConsumer","key","startTime","t","PlayerPlaceholder","type","PlayPageTitleAndActions","media","originalVideoAppLink","TextHelper","VideoAtAGlanceV2","setStartTime","time","currentTime","getTagAppLink","tag","tagOrClassification","suppressInteractivity","PlayPageResources","canViewResources","canViewResourceItems","getAppLink","analyticsData","clipId","clipName","resourceThumbnailFallbackUrl","ImageUrls","PlayPageInteractives","canViewInteractives","PlayPageClips","canViewClips","showHeading","RelatedVideos","currentVideo","TableOfContents","isExpanded","setIsExpanded","activeId","showInSide"],"sourceRoot":""}
|