@clickview/lite 0.55.3-rc.1 → 0.56.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.
Files changed (109) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/css/{431-lite-c2c2516537.chunk.css → 2992-lite-3ecbb95727.chunk.css} +1 -0
  3. package/dist/css/{6054-lite-0b2c72f84f.chunk.css → 3490-lite-74b16654a2.chunk.css} +1 -0
  4. package/dist/css/{4690-lite-e90867b3fe.chunk.css → 4690-lite-656c11bf50.chunk.css} +1 -1
  5. package/dist/css/{729-lite-f72fc7b813.chunk.css → 4860-lite-bd73841f9b.chunk.css} +1 -1
  6. package/dist/css/{1019-lite-bbcf2bff27.chunk.css → 6341-lite-f146164a09.chunk.css} +3 -3
  7. package/dist/css/{4860-lite-f72fc7b813.chunk.css → 729-lite-bd73841f9b.chunk.css} +1 -1
  8. package/dist/css/{8046-lite-036035a6f0.chunk.css → 8046-lite-319bb5a9c1.chunk.css} +1 -1
  9. package/dist/css/{6596-lite-bb28584922.chunk.css → 8784-lite-caf4b7e145.chunk.css} +2 -2
  10. package/dist/css/{2548-lite-bbcf2bff27.chunk.css → 8945-lite-f146164a09.chunk.css} +3 -3
  11. package/dist/css/{9010-lite-bb28584922.chunk.css → 9355-lite-caf4b7e145.chunk.css} +2 -2
  12. package/dist/languages/en.json +1 -1
  13. package/dist/scripts/{1169-3298aa69ad-lite.chunk.js → 1169-e4773094dc-lite.chunk.js} +2 -2
  14. package/dist/scripts/{1169-3298aa69ad-lite.chunk.js.map → 1169-e4773094dc-lite.chunk.js.map} +1 -1
  15. package/dist/scripts/{1379-ca519ec56b-lite.chunk.js → 1379-172a429399-lite.chunk.js} +3 -3
  16. package/dist/scripts/{1379-ca519ec56b-lite.chunk.js.map → 1379-172a429399-lite.chunk.js.map} +1 -1
  17. package/dist/scripts/{184-37af6c4675-lite.chunk.js → 184-e1311aa677-lite.chunk.js} +2 -2
  18. package/dist/scripts/184-e1311aa677-lite.chunk.js.map +1 -0
  19. package/dist/scripts/2215-a511f6f54c-lite.chunk.js +2 -0
  20. package/dist/scripts/2215-a511f6f54c-lite.chunk.js.map +1 -0
  21. package/dist/scripts/2992-c5bec5b43f-lite.chunk.js +2 -0
  22. package/dist/scripts/2992-c5bec5b43f-lite.chunk.js.map +1 -0
  23. package/dist/scripts/3490-4f3b9b1d07-lite.chunk.js +2 -0
  24. package/dist/scripts/3490-4f3b9b1d07-lite.chunk.js.map +1 -0
  25. package/dist/scripts/4013-700c541143-lite.chunk.js +3 -0
  26. package/dist/scripts/4013-700c541143-lite.chunk.js.map +1 -0
  27. package/dist/scripts/{4554-2192c26ee9-lite.chunk.js → 4554-7367f19919-lite.chunk.js} +2 -2
  28. package/dist/scripts/4554-7367f19919-lite.chunk.js.map +1 -0
  29. package/dist/scripts/4690-4abacf2ea2-lite.chunk.js +2 -0
  30. package/dist/scripts/4690-4abacf2ea2-lite.chunk.js.map +1 -0
  31. package/dist/scripts/{5220-07af32c6ce-lite.chunk.js → 5220-04f2f3bb42-lite.chunk.js} +3 -3
  32. package/dist/scripts/5220-04f2f3bb42-lite.chunk.js.map +1 -0
  33. package/dist/scripts/5936-0d3b5a9a2f-lite.chunk.js +2 -0
  34. package/dist/scripts/5936-0d3b5a9a2f-lite.chunk.js.map +1 -0
  35. package/dist/scripts/{624-09b51a9d32-lite.chunk.js → 624-2c9ac733ba-lite.chunk.js} +3 -3
  36. package/dist/scripts/{624-09b51a9d32-lite.chunk.js.map → 624-2c9ac733ba-lite.chunk.js.map} +1 -1
  37. package/dist/scripts/6262-ce32d35813-lite.chunk.js +2 -0
  38. package/dist/scripts/{640-c3ae02d0a7-lite.chunk.js.map → 6262-ce32d35813-lite.chunk.js.map} +1 -1
  39. package/dist/scripts/{2548-c48b8d3e3c-lite.chunk.js → 6341-f07132fa7c-lite.chunk.js} +2 -2
  40. package/dist/scripts/{2548-c48b8d3e3c-lite.chunk.js.map → 6341-f07132fa7c-lite.chunk.js.map} +1 -1
  41. package/dist/scripts/7076-748eef1eba-lite.chunk.js +3 -0
  42. package/dist/scripts/7076-748eef1eba-lite.chunk.js.map +1 -0
  43. package/dist/scripts/{7288-c11287ecc7-lite.chunk.js → 7288-f9ef507dd3-lite.chunk.js} +2 -2
  44. package/dist/scripts/7288-f9ef507dd3-lite.chunk.js.map +1 -0
  45. package/dist/scripts/{729-594be12089-lite.chunk.js → 729-10f6b0cef3-lite.chunk.js} +2 -2
  46. package/dist/scripts/{729-594be12089-lite.chunk.js.map → 729-10f6b0cef3-lite.chunk.js.map} +1 -1
  47. package/dist/scripts/7895-6b9c09a1e1-lite.chunk.js +2 -0
  48. package/dist/scripts/7895-6b9c09a1e1-lite.chunk.js.map +1 -0
  49. package/dist/scripts/8046-485ecb0ed7-lite.chunk.js +2 -0
  50. package/dist/scripts/8046-485ecb0ed7-lite.chunk.js.map +1 -0
  51. package/dist/scripts/8252-146bee4416-lite.chunk.js +2 -0
  52. package/dist/scripts/8252-146bee4416-lite.chunk.js.map +1 -0
  53. package/dist/scripts/8784-d6862c97bc-lite.chunk.js +2 -0
  54. package/dist/scripts/{6596-aa83b99b19-lite.chunk.js.map → 8784-d6862c97bc-lite.chunk.js.map} +1 -1
  55. package/dist/scripts/{1019-8f977b5095-lite.chunk.js → 8945-3ea21e765e-lite.chunk.js} +2 -2
  56. package/dist/scripts/{1019-8f977b5095-lite.chunk.js.map → 8945-3ea21e765e-lite.chunk.js.map} +1 -1
  57. package/dist/scripts/9355-44d72e25e0-lite.chunk.js +2 -0
  58. package/dist/scripts/{9010-fe4907051e-lite.chunk.js.map → 9355-44d72e25e0-lite.chunk.js.map} +1 -1
  59. package/dist/scripts/{9395-e1a02b01ce-lite.chunk.js → 9395-e07cb08942-lite.chunk.js} +3 -3
  60. package/dist/scripts/{9395-e1a02b01ce-lite.chunk.js.map → 9395-e07cb08942-lite.chunk.js.map} +1 -1
  61. package/dist/scripts/{9478-13da35c4ee-lite.chunk.js → 9478-250b1e9dcf-lite.chunk.js} +3 -3
  62. package/dist/scripts/{9478-13da35c4ee-lite.chunk.js.map → 9478-250b1e9dcf-lite.chunk.js.map} +1 -1
  63. package/dist/scripts/{953-225db845ab-lite.chunk.js → 953-e3f732e20e-lite.chunk.js} +3 -3
  64. package/dist/scripts/{953-225db845ab-lite.chunk.js.map → 953-e3f732e20e-lite.chunk.js.map} +1 -1
  65. package/dist/scripts/9569-c6292540d7-lite.chunk.js +2 -0
  66. package/dist/scripts/9569-c6292540d7-lite.chunk.js.map +1 -0
  67. package/dist/scripts/{bundle-360989040d.min.js → bundle-f1c26ac44d.min.js} +3 -3
  68. package/dist/scripts/bundle-f1c26ac44d.min.js.map +1 -0
  69. package/package.json +1 -1
  70. package/dist/scripts/1753-6aa1c10a83-lite.chunk.js +0 -2
  71. package/dist/scripts/1753-6aa1c10a83-lite.chunk.js.map +0 -1
  72. package/dist/scripts/184-37af6c4675-lite.chunk.js.map +0 -1
  73. package/dist/scripts/2142-d6e297d5a7-lite.chunk.js +0 -2
  74. package/dist/scripts/2142-d6e297d5a7-lite.chunk.js.map +0 -1
  75. package/dist/scripts/4013-7b878e3212-lite.chunk.js +0 -3
  76. package/dist/scripts/4013-7b878e3212-lite.chunk.js.map +0 -1
  77. package/dist/scripts/431-0487ecd6e4-lite.chunk.js +0 -2
  78. package/dist/scripts/431-0487ecd6e4-lite.chunk.js.map +0 -1
  79. package/dist/scripts/4554-2192c26ee9-lite.chunk.js.map +0 -1
  80. package/dist/scripts/4690-ab20eb70b5-lite.chunk.js +0 -2
  81. package/dist/scripts/4690-ab20eb70b5-lite.chunk.js.map +0 -1
  82. package/dist/scripts/5220-07af32c6ce-lite.chunk.js.map +0 -1
  83. package/dist/scripts/5936-13efc0f166-lite.chunk.js +0 -2
  84. package/dist/scripts/5936-13efc0f166-lite.chunk.js.map +0 -1
  85. package/dist/scripts/6054-d3677cdee9-lite.chunk.js +0 -2
  86. package/dist/scripts/6054-d3677cdee9-lite.chunk.js.map +0 -1
  87. package/dist/scripts/640-c3ae02d0a7-lite.chunk.js +0 -2
  88. package/dist/scripts/6596-aa83b99b19-lite.chunk.js +0 -2
  89. package/dist/scripts/696-2d01721d18-lite.chunk.js +0 -2
  90. package/dist/scripts/696-2d01721d18-lite.chunk.js.map +0 -1
  91. package/dist/scripts/7076-ec18ce09c9-lite.chunk.js +0 -3
  92. package/dist/scripts/7076-ec18ce09c9-lite.chunk.js.map +0 -1
  93. package/dist/scripts/7288-c11287ecc7-lite.chunk.js.map +0 -1
  94. package/dist/scripts/7895-78f20c123f-lite.chunk.js +0 -2
  95. package/dist/scripts/7895-78f20c123f-lite.chunk.js.map +0 -1
  96. package/dist/scripts/8046-62f4cbb4d1-lite.chunk.js +0 -2
  97. package/dist/scripts/8046-62f4cbb4d1-lite.chunk.js.map +0 -1
  98. package/dist/scripts/9010-fe4907051e-lite.chunk.js +0 -2
  99. package/dist/scripts/bundle-360989040d.min.js.map +0 -1
  100. /package/dist/css/{640-lite-45164266aa.chunk.css → 6262-lite-45164266aa.chunk.css} +0 -0
  101. /package/dist/scripts/{1379-ca519ec56b-lite.chunk.js.LICENSE.txt → 1379-172a429399-lite.chunk.js.LICENSE.txt} +0 -0
  102. /package/dist/scripts/{4013-7b878e3212-lite.chunk.js.LICENSE.txt → 4013-700c541143-lite.chunk.js.LICENSE.txt} +0 -0
  103. /package/dist/scripts/{5220-07af32c6ce-lite.chunk.js.LICENSE.txt → 5220-04f2f3bb42-lite.chunk.js.LICENSE.txt} +0 -0
  104. /package/dist/scripts/{624-09b51a9d32-lite.chunk.js.LICENSE.txt → 624-2c9ac733ba-lite.chunk.js.LICENSE.txt} +0 -0
  105. /package/dist/scripts/{7076-ec18ce09c9-lite.chunk.js.LICENSE.txt → 7076-748eef1eba-lite.chunk.js.LICENSE.txt} +0 -0
  106. /package/dist/scripts/{9395-e1a02b01ce-lite.chunk.js.LICENSE.txt → 9395-e07cb08942-lite.chunk.js.LICENSE.txt} +0 -0
  107. /package/dist/scripts/{9478-13da35c4ee-lite.chunk.js.LICENSE.txt → 9478-250b1e9dcf-lite.chunk.js.LICENSE.txt} +0 -0
  108. /package/dist/scripts/{953-225db845ab-lite.chunk.js.LICENSE.txt → 953-e3f732e20e-lite.chunk.js.LICENSE.txt} +0 -0
  109. /package/dist/scripts/{bundle-360989040d.min.js.LICENSE.txt → bundle-f1c26ac44d.min.js.LICENSE.txt} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/5936-13efc0f166-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/infinite-scroll-footer/infinite-scroll-footer.scss","file:///app/packages/libs/shared/src/components/infinite-scroll-footer/InfiniteScrollFooter.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/interactives-widget/InteractiveWidgetItemV2.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/components/video-owner-text/video-owner-text.scss","file:///app/packages/libs/shared/src/components/video-owner-text/VideoOwnerText.tsx","file:///app/packages/libs/shared/src/components/widgets/items/interactive-widget-item/InteractiveWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/items/interactive-widget-item/interactive-widget-item.scss","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/interfaces/PlayPageAnchor.ts","file:///app/packages/libs/shared/src/utils/PartialLoadingHelper.ts","file:///app/packages/projects/lite/src/apps/interactives/components/play-interactive/PlayInteractive.tsx","file:///app/packages/projects/lite/src/apps/interactives/components/preview-interactive/InteractiveAlertBanner.tsx","file:///app/packages/projects/lite/src/apps/interactives/components/preview-interactive/PreviewInteractive.tsx","file:///app/packages/projects/lite/src/apps/interactives/hooks/interactiveHooks.tsx","file:///app/packages/projects/lite/src/shared/components/play-page/ArchivedBanner.tsx","file:///app/packages/projects/lite/src/shared/components/play-page/RestrictionBanner.tsx","file:///app/packages/projects/lite/src/shared/components/related-videos/RelatedVideos.tsx","file:///app/packages/projects/lite/src/shared/hooks/usePresentationAudiences.ts","file:///app/packages/projects/lite/src/shared/hooks/useShouldPreviewInteractive.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;\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 return (\n <li className={`breadcrumb-item${active ? ' active' : ''}`}>\n {active\n ? <strong>{name}</strong>\n : <AppLink appLink={appLink} ref={ref}>\n {withBackIcon && <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Small} />}\n <span className={withBackIcon ? 'ms-2' : ''}>{name}</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: '&nbsp' }} />\n </li>\n ))}\n </ol>\n </nav>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"VwD1b\",\"spinner\":\"eJ85e\"};","import * as React from 'react';\nimport { Spinner } from 'react-bootstrap';\nimport { useInView } from 'react-intersection-observer';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './infinite-scroll-footer.scss';\n\ninterface InfiniteScrollFooterProps {\n isFetching: boolean;\n fetchNext?: (nextCursor: string) => void;\n nextCursor?: string;\n fetchOnScroll?: boolean;\n}\n\nInfiniteScrollFooter.defaultProps = {\n fetchOnScroll: false\n};\n\nexport function InfiniteScrollFooter(props: InfiniteScrollFooterProps): React.ReactElement {\n const [ ref, inView ] = useInView();\n\n React.useEffect(() => {\n if (!props.fetchOnScroll)\n return;\n\n if (!inView || props.isFetching)\n return;\n\n props.fetchNext?.(props.nextCursor);\n }, [ inView, props.isFetching ]);\n\n return (\n <div className={`p-3 text-center ${styles.container}`} ref={ref}>\n {props.isFetching\n ? <Spinner as='span' animation='border' role='status' className={styles.spinner} />\n : (\n <SvgContainer\n svgName={cvSvgLibrary.ChevronDown}\n className='svg-container cursor-pointer'\n size={SvgContainerSize.Large}\n onClick={() => props.fetchNext?.(props.nextCursor)}\n />\n )\n }\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ThumbnailText } from 'libs/shared/components/thumbnails/thumbnail-text/ThumbnailText';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { CanFavouriteFunc, FavouriteFunc, InteractiveMetadata, YearGroup } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.interactiveWidgetItemV2';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface InteractiveWidgetItemV2Props extends FixedWidgetItemProps<InteractiveMetadata> {\n imageCdnUrl: string;\n questionsAppLink: Core.AppLink;\n setFavourite?: FavouriteFunc;\n canFavourite?: CanFavouriteFunc;\n yearGroups: YearGroup[];\n isPlugin: boolean;\n showOwner?: boolean;\n}\n\nexport const InteractiveWidgetItemV2 = React.memo(function(props: InteractiveWidgetItemV2Props): JSX.Element {\n const { data: interactive, thumbnailSize, preloadImage } = props;\n\n const questionsAppLink: Core.AppLink = {\n ...props.questionsAppLink,\n args: [props.data.id]\n };\n\n const questionsNumber = interactive._timepoints?.value?.length;\n\n return (\n <div className={`flex-shrink-0 px-1 col-6 col-sm-4`}>\n <VideoThumbnail\n type='static'\n textPosition={ThumbnailTextPosition.Independent}\n video={interactive}\n appLink={props.getAppLink(interactive)}\n imageOptions={{ size: thumbnailSize }}\n preload={preloadImage}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n hideDuration={false}\n imageCdnUrl={props.imageCdnUrl}\n isPlugin={props.isPlugin}\n showOwner={props.showOwner}\n />\n\n <div className='mt-2'>\n <ThumbnailText\n {...props}\n video={interactive}\n appLink={props.getAppLink(interactive)}\n />\n </div>\n\n <div className='mt-n1'>\n <AppLink\n appLink={questionsAppLink}\n className='cursor-pointer'\n ariaLabel={`${getPhrase('previewQuestions', { count: questionsNumber, smartCount: questionsNumber })} ${getPhrase('ariaPreview', { name: interactive.name })}`}\n >\n <Text namespace={namespace} phrase='previewQuestions' options={{ count: questionsNumber, smartCount: questionsNumber }}/>\n </AppLink>\n </div>\n </div>\n );\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","// extracted by mini-css-extract-plugin\nexport default {\"avatarContainer\":\"kd18L\",\"cvIcon\":\"smUBc\"};","import React from 'react';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { SvgContainer2 } from 'libs/shared/components/svg-container/SvgContainer2';\nimport { ClickViewPlayLogo } from 'libs/shared/components/svgs/clickview-logo/ClickViewLogo';\nimport { User } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './video-owner-text.scss';\n\ninterface VideoOwnerTextProps {\n owner: User;\n isClickViewCurated: boolean;\n imageCdnUrl: string;\n}\n\nexport function VideoOwnerText(props: VideoOwnerTextProps): JSX.Element {\n if (!props.owner && !props.isClickViewCurated)\n return <></>;\n\n if (props.isClickViewCurated) {\n return (\n <div className='clamp-1 d-flex align-items-center'>\n <div className={`${styles.avatarContainer} me-1 border rounded-circle position-relative`}>\n <SvgContainer2 className={`me-1 ${styles.cvIcon}`}>\n <ClickViewPlayLogo />\n </SvgContainer2>\n </div>\n ClickView\n </div>\n );\n }\n\n const name = UserHelper.getCommunityName(props.owner);\n\n if (!name)\n return <></>;\n\n return (\n <div className='d-flex align-items-center'>\n <div className={`${styles.avatarContainer} me-1`}>\n <Avatar\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(props.owner.name, props.owner.surname)}\n imageUrl={props.owner.avatar?.url}\n />\n </div>\n <div className='clamp-1'>\n {name}\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoOwnerText } from 'libs/shared/components/video-owner-text/VideoOwnerText';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { Clip, InteractiveMetadata, Video } from 'libs/shared/interfaces';\n\nimport styles from './interactive-widget-item.scss';\n\nconst namespace = 'shared.interactiveWidgetItem';\n\nexport interface InteractiveWidgetItemProps extends FixedWidgetItemProps<InteractiveMetadata> {\n video: Video | Clip;\n questionsAppLink: Core.AppLink;\n imageCdnUrl: string;\n}\n\nexport const InteractiveWidgetItem = React.memo(function(props: InteractiveWidgetItemProps): JSX.Element {\n const questionsAppLink: Core.AppLink = {\n ...props.questionsAppLink,\n args: [props.data.id]\n };\n\n return (\n <div className={`flex-shrink-0 px-1 ${styles.item}`}>\n <div className='row m-0 border rounded p-2 h-100'>\n <div className='col-6 p-0'>\n <VideoThumbnail\n video={props.data}\n appLink={props.getAppLink(props.data)}\n type='cosmetic'\n imageOptions={{ size: ImageSize.Small }}\n textPosition={ThumbnailTextPosition.Independent}\n preload\n analyticsOptions={{ location: LocationContext.SlidingListItem }}\n />\n </div>\n\n <div className='col-6 p-0'>\n <div className='ps-2'>\n <AppLink appLink={props.getAppLink(props.data)}>\n <h3 className='h6 mb-1'><span className='clamp-2'>{props.data.name}</span></h3>\n </AppLink>\n\n <VideoOwnerText\n owner={props.data.owner}\n isClickViewCurated={props.data._isClickViewCurated?.value}\n imageCdnUrl={props.imageCdnUrl}\n />\n\n <AppLink className='info-link' appLink={questionsAppLink}>\n <Text namespace={namespace} phrase='previewQuestions' />\n </AppLink>\n </div>\n </div>\n </div>\n </div>\n );\n});\n","// extracted by mini-css-extract-plugin\nexport default {\"item\":\"rXatl\"};","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}","export enum PlayPageAnchor {\n Resources = 'resources',\n Interactives = 'interactives',\n Video = 'video',\n Clips = 'clips',\n CurriculumLinks = 'curriculum-links',\n VideoDetails = 'video-details',\n RelatedVideos = 'related-videos',\n ClippedFrom='clipped-from'\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 React from 'react';\nimport { createHtmlPortalNode, OutPortal } from 'react-reverse-portal';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { CheckMarkStatus } from 'libs/shared/components/check-mark-button/CheckMarkButton';\nimport { RestrictionPadlock } from 'libs/shared/components/video-list/components/restriction-padlock/RestrictionPadlock';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { Config, CurrentUser, InteractiveMetadata, PlayerViewKey, PresentationAudience, UnionShareObject, YearGroup } from 'libs/shared/interfaces';\nimport { AuthToken } from 'libs/shared/interfaces/models/AuthToken';\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 { RelatedVideos } from 'shared/components/related-videos/RelatedVideos';\nimport { RelatedVideosHash } from 'shared/hooks/useGetRelatedVideos';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\nimport { LitePlayerView } from 'shared/views/lite-player/LitePlayerView';\n\ninterface PlayInteractiveProps {\n interactive: InteractiveMetadata;\n yearGroups: YearGroup[];\n currentUser: CurrentUser;\n token: AuthToken;\n config: Config;\n audiences: PresentationAudience[];\n queryParams: PlayViewQueryParams;\n viewKey: PlayerViewKey;\n startTime?: number;\n endTime?: number;\n\n // Share view only\n shareLink?: UnionShareObject;\n sharerInstanceRegion?: string;\n checkMarkStatus?: CheckMarkStatus;\n relatedVideos: RelatedVideosHash;\n isPlugin: boolean;\n}\n\nexport function PlayInteractive(props: PlayInteractiveProps): JSX.Element {\n const locationContext = props.shareLink ?\n LocationContext.PlaySharedInteractive :\n LocationContext.PlayInteractive;\n\n const [ showHeading, setShowHeading ] = React.useState(true);\n\n const isArchived = VideoHelper.isVideoTypeArchived(props.interactive);\n\n const summaryPortalNode = React.useMemo(() => createHtmlPortalNode(), []);\n\n const { setFavourite, canFavourite } = useLiteFavourites(locationContext);\n const { hasPermissions } = usePermissions();\n\n function onShowSummary(showing: boolean): void {\n setShowHeading(!showing);\n }\n\n return (\n <div className='px-3'>\n {isArchived && <ArchivedBanner typeId={props.interactive.typeId} hasStudentExperience />}\n\n <div className='mb-3'>\n <LitePlayerView\n config={props.config}\n video={props.interactive}\n currentUser={props.currentUser}\n shareLink={props.shareLink}\n viewKey={props.viewKey}\n startTime={props.startTime}\n onShowSummary={onShowSummary}\n summaryPortalNode={summaryPortalNode}\n token={props.token}\n />\n </div>\n {/* This wrapping div is here because react seems to not want to play nice\n with adding or removing a node just ahead of an OutPortal */}\n <div>\n {showHeading &&\n <h1 className='h3 d-flex'>\n {props.interactive.name}\n <RestrictionPadlock\n tooltipPlacement='right'\n className='ps-1'\n video={props.interactive}\n yearGroups={props.yearGroups}\n />\n </h1>\n }\n </div>\n <OutPortal node={summaryPortalNode}></OutPortal>\n\n {!hasPermissions(PermissionName.StudentExperience) && (\n <RelatedVideos\n currentVideo={props.interactive}\n yearGroups={props.yearGroups}\n currentUser={props.currentUser}\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n relatedVideos={props.relatedVideos}\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.shareLink?.id,\n moviesAndTv: props.queryParams.mtv\n })}\n moviesAndTv={props.queryParams.mtv}\n isPlugin={props.isPlugin}\n />\n )}\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ToggleSwitch } from 'libs/shared/components/toggle-switch/ToggleSwitch';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'interactives.previewInteractive';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractiveAlertBannerProps {\n isPreviewPreventScrubbingEnabled: boolean;\n isPreviewingPreventScrubbing: boolean;\n toggleStudentMode: () => void;\n isArchived: boolean;\n}\n\nexport function InteractiveAlertBanner(props: InteractiveAlertBannerProps): JSX.Element {\n return (\n <div className='alert text-dark bg-light-blue px-2 rounded d-flex flex-column flex-lg-row justify-content-between mb-3 align-items-center' role='alert'>\n {!props.isArchived ? <Text phrase='alert' /> : (\n <div className='d-flex align-items-center'>\n <SvgContainer\n svgName={cvSvgLibrary.Archive}\n size={SvgContainerSize.Standard}\n className='me-2 svg-container'\n />\n \n <div className='w-100'>\n <p className='fw-semibold mb-0'>{getPhrase('archivedInfoTitle')}</p>\n <p className='mb-1'>{getPhrase('archivedInfo')}</p>\n </div>\n </div>\n )}\n {props.isPreviewPreventScrubbingEnabled && (\n <Tooltip\n title={getPhrase('previewPreventScrubbingExplain')}\n trigger='hover'\n spanHack\n >\n <div className='d-flex mt-1 mt-lg-0'>\n <div className='me-2'><Text phrase='previewPreventScrubbing'/></div>\n <ToggleSwitch on={props.isPreviewingPreventScrubbing} onClick={props.toggleStudentMode} />\n </div>\n </Tooltip>\n )}\n </div>\n );\n}","import * as React from 'react';\nimport { OutPortal } from 'react-reverse-portal';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { Actions as ActionsComponent } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Breadcrumb, Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { InteractiveWidgetItemV2, InteractiveWidgetItemV2Props } from 'libs/shared/components/play-page-v2/interactives-widget/InteractiveWidgetItemV2';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { RestrictionPadlock } from 'libs/shared/components/video-list/components/restriction-padlock/RestrictionPadlock';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget';\nimport { InteractiveWidgetItem, InteractiveWidgetItemProps } from 'libs/shared/components/widgets/items/interactive-widget-item/InteractiveWidgetItem';\nimport { GlobalPlayerConsumer } from 'libs/shared/context/player-context/components/GlobalPlayerConsumer';\nimport { usePlayerContext } from 'libs/shared/context/player-context/PlayerContext';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Clip, Config, CurrentUser, Interactive, InteractiveMetadata, PresentationAudience, Video, YearGroup } from 'libs/shared/interfaces';\nimport { AuthToken } from 'libs/shared/interfaces/models/AuthToken';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { RestrictionBanner } from 'shared/components/play-page/RestrictionBanner';\nimport { RelatedVideos } from 'shared/components/related-videos/RelatedVideos';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { RelatedVideosHash } from 'shared/hooks/useGetRelatedVideos';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { InteractiveAlertBanner } from 'apps/interactives/components/preview-interactive/InteractiveAlertBanner';\nimport { usePreviewPreventInteractive } from 'apps/interactives/hooks/interactiveHooks';\n\nconst namespace = 'interactives.previewInteractive';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getSourceVideo(interactive: InteractiveMetadata): Clip | Video {\n return interactive._parentClip || interactive._parentVideo;\n}\n\ninterface PreviewInteractiveProps {\n interactive: InteractiveMetadata;\n yearGroups: YearGroup[];\n config: Config;\n token?: AuthToken;\n currentUser: CurrentUser;\n queryParams: PlayViewQueryParams;\n audiences: PresentationAudience[];\n isPreviewPreventScrubbingEnabled: boolean;\n relatedVideos: RelatedVideosHash;\n canManageVideoAccess: boolean;\n isPlugin: boolean;\n breadcrumbs?: Breadcrumb[];\n\n // Share view only\n shareId?: string;\n}\n\nexport function PreviewInteractive(props: PreviewInteractiveProps): JSX.Element {\n const locationContext = props.shareId ? LocationContext.PreviewSharedInteractive : LocationContext.PreviewInteractive;\n\n const playerContext = usePlayerContext();\n\n const [ isPreviewingPreventScrubbing, setIsPreviewingPreventScrubbing ] = React.useState(false);\n\n const { canConsume } = VideoHelper.getCanBeConsumed(props.interactive);\n\n const videoActions = useVideoActions({\n location: VideoActionsLocation.PlayPage,\n shareId: props.shareId\n });\n\n const { setFavourite, canFavourite } = useLiteFavourites(locationContext);\n const { hasPlayPageV2 } = useSettings(null);\n\n usePreviewPreventInteractive(isPreviewingPreventScrubbing, togglePreviewPreventScrubbing);\n\n function togglePreviewPreventScrubbing() {\n playerContext.playerRef?.current?.togglePreviewPreventScrubbing?.();\n }\n\n function toggleStudentMode() {\n setIsPreviewingPreventScrubbing(!isPreviewingPreventScrubbing);\n }\n\n const sourceVideo = getSourceVideo(props.interactive);\n\n let otherInteractives: InteractiveMetadata[];\n let backToName: string;\n let backAppLink: Core.AppLink;\n\n if (VideoHelper.isClip(sourceVideo)) {\n otherInteractives = sourceVideo.interactives?.data?.filter(i => {\n return i.id.toString() !== props.interactive.id.toString();\n });\n backToName = sourceVideo.name;\n backAppLink = {\n application: AppChannels.CLIPS,\n action: Actions.Clips.PLAY_CLIP,\n args: [ sourceVideo.id, TextHelper.slugify(sourceVideo.name) ]\n };\n } else {\n otherInteractives = sourceVideo.interactives?.data?.filter(i => {\n return i.id.toString() !== props.interactive.id.toString();\n });\n backToName = sourceVideo.name;\n backAppLink = {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ sourceVideo.id, TextHelper.slugify(sourceVideo.name) ]\n };\n }\n\n const isDraft = props.interactive.status === CurationStatus.Draft;\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <div className='px-4'>\n {props.breadcrumbs?.length &&\n <div className='mb-2'>\n <Breadcrumbs breadcrumbs={props.breadcrumbs} />\n </div>\n }\n\n <RestrictionBanner\n restrictions={props.interactive._restrictions}\n yearGroups={props.yearGroups}\n objectId={props.interactive.id}\n objectTypeId={MasterType.Interactive}\n canManageVideoAccess={props.canManageVideoAccess}\n />\n\n <InteractiveAlertBanner\n isPreviewPreventScrubbingEnabled={props.isPreviewPreventScrubbingEnabled}\n isPreviewingPreventScrubbing={isPreviewingPreventScrubbing}\n toggleStudentMode={toggleStudentMode}\n isArchived={VideoHelper.isVideoTypeArchived(props.interactive)}\n />\n\n <div className='mb-3'>\n {canConsume && (\n <GlobalPlayerConsumer\n key={props.interactive.id}\n objectId={props.interactive.id}\n objectTypeId={props.interactive.typeId}\n shareId={props.shareId}\n startTime={props.queryParams.t ?? props.queryParams.startTime}\n mode='default'\n location='play-page'\n token={props.token}\n />\n )}\n </div>\n <div className='d-flex justify-content-between align-items-center'>\n <div className='inline-block w-100'>\n <div className='ms-2 float-end'>\n <ActionsComponent\n actions={videoActions.getVideoActions(props.interactive)}\n actionsDropdownClassName='btn btn-outline-dark'\n fetchMore={() => videoActions.fetchMoreActions(props.interactive)}\n />\n </div>\n\n <h1 className='h3 mb-2'>\n {isDraft && (\n <div className={`badge draft-badge me-2 align-bottom flex-shrink-0 h-auto lh-base`}>\n <Text phrase='draft' />\n </div>\n )}\n {props.interactive.name}\n <RestrictionPadlock\n tooltipPlacement='right'\n className='ps-1'\n video={props.interactive}\n yearGroups={props.yearGroups}\n />\n </h1>\n {VideoHelper.canViewOriginalVideo(props.interactive) &&\n <div className='mb-1 me-3 clamp-1'>\n <Text phrase='viewOriginal' />&nbsp;<AppLink appLink={backAppLink} className='text-info'>{backToName}</AppLink>\n </div>\n }\n </div>\n </div>\n\n {props.interactive.description &&\n <p>{props.interactive.description}</p>\n }\n\n <div className='mb-3'>\n <OutPortal node={playerContext.questionListPortalNode}></OutPortal>\n </div>\n\n {!!otherInteractives?.length && (\n <div className='pb-3'>\n {!hasPlayPageV2 ? (\n <FixedWidget<InteractiveWidgetItemProps>\n name={getPhrase('otherInteractives', { count: otherInteractives.length })}\n contents={WidgetContents.Interactives}\n collection={otherInteractives}\n prefetched\n getChildAppLink={(interactive: Interactive) => {\n return {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.VIEW_INTERACTIVE,\n args: [ interactive.id, TextHelper.slugify(interactive.name) ]\n };\n }}\n childComponent={InteractiveWidgetItem}\n extraChildComponentProps={{\n video: sourceVideo,\n questionsAppLink: {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.PREVIEW_QUESTIONS\n },\n imageCdnUrl: props.config.imageCdnUrl\n }}\n analyticsData={{ widgetId: 'interactives' }}\n />\n ) : (\n <FixedWidget<InteractiveWidgetItemV2Props>\n name={getPhrase('otherInteractives', { count: otherInteractives.length })}\n contents={WidgetContents.Interactives}\n collection={otherInteractives}\n prefetched\n getChildAppLink={(interactive: Interactive) => {\n return {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.VIEW_INTERACTIVE,\n args: [ interactive.id, TextHelper.slugify(interactive.name) ]\n };\n }}\n childComponent={InteractiveWidgetItemV2}\n extraChildComponentProps={{\n yearGroups: props.yearGroups,\n questionsAppLink: {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.PREVIEW_QUESTIONS\n },\n imageCdnUrl: props.config.imageCdnUrl,\n isPlugin: props.isPlugin\n }}\n analyticsData={{ widgetId: 'interactives' }}\n />\n )}\n </div>\n )}\n\n <RelatedVideos\n currentVideo={props.interactive}\n yearGroups={props.yearGroups}\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n currentUser={props.currentUser}\n audiences={props.audiences}\n relatedVideos={props.relatedVideos}\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 </div>\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\n\nexport function usePreviewPreventInteractive(\n previewPreventInteractive: boolean,\n togglePreviewPreventInteractive: () => void\n): void {\n React.useEffect(() => {\n togglePreviewPreventInteractive();\n }, [previewPreventInteractive]);\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType } from 'libs/analytics/interfaces';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.playPage';\n\ninterface ArchivedBannerProps {\n typeId: MasterType;\n hasStudentExperience: boolean;\n}\n\nfunction mapTypeId(typeId: MasterType): string {\n switch (typeId) {\n case MasterType.Video:\n return 'video';\n case MasterType.Clip:\n return 'clip';\n case MasterType.Interactive:\n return 'interactive';\n default:\n return '';\n }\n}\n\nexport function ArchivedBanner(props: ArchivedBannerProps): JSX.Element {\n const getPhrase = LanguageService.encloseNamespace(namespace);\n const type = mapTypeId(props.typeId);\n\n return (\n <div className='alert bg-light-blue p-3 rounded-3 d-flex justify-content-between align-items-center'>\n <SvgContainer\n svgName={cvSvgLibrary.Archive}\n size={SvgContainerSize.Standard}\n className='me-2 svg-container'\n />\n \n <div className='w-100'>\n <p className='fw-semibold mb-0'>{getPhrase('archivedInfoTitle', { type })}</p>\n {(!props.hasStudentExperience || type === EntityType.Video) && (\n <p className='mb-1'>{getPhrase('archivedInfo', { type: `${type}s` })}</p>\n )}\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { RestrictionType } from 'libs/shared/enums/RestrictionType';\nimport { Restrictions, YearGroup } from 'libs/shared/interfaces';\nimport { RestrictionHelper } from 'libs/shared/utils/RestrictionHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'shared.playPage';\n\ninterface RestrictionBannerProps {\n restrictions: Restrictions;\n yearGroups: YearGroup[];\n objectId: string;\n objectTypeId: MasterType;\n canManageVideoAccess: boolean;\n}\n\nexport function RestrictionBanner(props: RestrictionBannerProps): JSX.Element {\n if (!props.restrictions?.value?.length || !props.yearGroups || !props.canManageVideoAccess)\n return <></>;\n\n const restriction = RestrictionHelper.getWeightedRestriction(props.restrictions.value);\n\n if (restriction.type !== RestrictionType.Custom)\n return <></>;\n\n const baseClassName = RestrictionHelper.mapRestrictionToClass(props.restrictions);\n const className = `${baseClassName} fw-semibold p-2 rounded mb-3 d-flex justify-content-between align-items-center`;\n\n return (\n <div className={className}>\n <div className='d-flex align-items-center'>\n <SvgContainer\n svgName={RestrictionHelper.mapRestrictionToSvg(props.restrictions)}\n size={SvgContainerSize.Large}\n />\n <span className='ps-1'>\n {RestrictionHelper.mapRestrictionToText(props.restrictions, props.yearGroups)}\n </span>\n </div>\n \n <AppLink\n appLink={{\n application: AppChannels.DEFAULT,\n action: Actions.Default.APPROVE_VIDEO,\n params: {\n objectId: props.objectId,\n objectTypeId: props.objectTypeId\n }\n }}\n className='btn btn-outline-dark'\n >\n <Text namespace={namespace} phrase='approve' />\n </AppLink>\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { CanFavouriteFunc, CurrentUser, FavouriteFunc, PresentationAudience, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { RelatedVideosHash } from 'shared/hooks/useGetRelatedVideos';\nimport { InteractiveHelpers } from 'shared/utils/InteractiveHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nconst namespace = 'shared.relatedVideos';\n\ninterface RelatedVideosProps {\n currentVideo: VideoTypes;\n yearGroups: YearGroup[];\n relatedVideos: RelatedVideosHash;\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n currentUser: CurrentUser;\n audiences: PresentationAudience[];\n getVideoAppLink: (video: VideoTypes, opts: GetVideoAppLinkOptions) => Core.AppLink;\n moviesAndTv: boolean;\n isPlugin: boolean;\n headingRef?: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n}\n\nexport function RelatedVideos(props: RelatedVideosProps): JSX.Element {\n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem });\n const { hasPermissions } = usePermissions();\n\n if (!props.currentUser?.isAuthenticated) // Don't render if user is unauthenticated\n return <></>;\n\n if (props.relatedVideos.hasError) // Don't render if request has errored\n return <></>;\n\n if (props.relatedVideos.hasCompleted && !props.relatedVideos.videos?.length) // Don't render if response is empty\n return <></>;\n\n if (!props.relatedVideos.isFetching && !props.relatedVideos.hasCompleted) // Don't render if request is never made\n return <></>;\n\n // We don't support autoplaying from interactives. This means the related videos heading won't say \"Up next\"\n const canAutoplay = !VideoHelper.isInteractive(props.currentVideo);\n\n return (\n <section\n id={PlayPageAnchor.RelatedVideos}\n className='play-page-section'\n ref={el => {\n (el && props.headingRef?.current\n && !!props.relatedVideos.videos?.length)\n && props.headingRef.current.set(PlayPageAnchor.RelatedVideos, el);\n }}\n >\n <VideoActionsContext.Provider value={videoActions}>\n <h2 className='h4 mb-0'>\n <Text namespace={namespace} phrase={canAutoplay ? 'upNext' : 'relatedVideos'} />\n </h2>\n {props.relatedVideos.hasCompleted ? (\n <VideoList\n videos={props.relatedVideos.videos}\n yearGroups={props.yearGroups}\n getSubTextAppLink={video => {\n return SeriesAppLinkHelper.getSeriesAppLink(video.series, props.moviesAndTv ? { mtv: true } : null);\n }}\n getVideoAppLink={props.getVideoAppLink}\n hasPermissions={hasPermissions}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n presentationAudiences={props.audiences}\n getPreviewQuestionsAppLink={interactive => InteractiveHelpers.getPreviewQuestionsAppLink(interactive)}\n isPlugin={props.isPlugin}\n getClassroomGuideAppLink={VideoAppLinkHelper.getClassroomGuideAppLink}\n getInteractiveGuidanceAppLink={VideoAppLinkHelper.getInteractiveGuidanceAppLink}\n getResourceGuidanceAppLink={VideoAppLinkHelper.getResourceGuidanceAppLink}\n />\n ) : <PartialVideoList />\n }\n {props.relatedVideos.hasMore && (\n <InfiniteScrollFooter\n isFetching={props.relatedVideos.isFetching}\n fetchNext={props.relatedVideos.fetchNext}\n />\n )}\n </VideoActionsContext.Provider>\n </section>\n );\n}","import { Flight } from 'libs/common/react/index';\n\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\nimport { usePresentation } from 'shared/hooks/usePresentation';\n\nexport const usePresentationAudiences = () => {\n const { activePresentation, getFallbackPresentation } = usePresentation({ redirectOnError: true });\n\n const presentation = activePresentation || getFallbackPresentation();\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n !!presentation &&\n AudienceRequests.presentationAudiences(presentation.id)\n );\n\n return audiences;\n};","import { Flight } from 'libs/common/flight';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\nimport { CurrentUser } from 'libs/shared/interfaces';\n\nexport function useShouldPreviewInteractive() {\n const { hasPermissions } = usePermissions();\n const { hasProduct } = useProducts();\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n return !hasPermissions(PermissionName.StudentExperience) &&\n hasProduct(ProductId.Primary) &&\n currentUser.data.isAuthenticated;\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","className","svgName","size","S","Breadcrumbs","breadcrumbs","isMobile","length","collapse","setCollapse","shouldFocus","setShouldFocus","expandRef","characterLength","reduce","prev","next","current","focus","first","second","secondLast","last","rest","slice","onClick","map","idx","key","PartialBreadcrumbs","numItems","style","height","width","dangerouslySetInnerHTML","__html","InfiniteScrollFooter","inView","fetchOnScroll","isFetching","fetchNext","nextCursor","Spinner","as","animation","role","SvgContainer","defaultProps","namespace","InteractiveWidgetItemV2","interactive","data","thumbnailSize","preloadImage","questionsAppLink","args","id","questionsNumber","_timepoints","value","type","textPosition","video","getAppLink","imageOptions","preload","analyticsData","analyticsOptions","setFavourite","canFavourite","hideDuration","imageCdnUrl","isPlugin","showOwner","ariaLabel","count","smartCount","phrase","options","PartialVideoList","Array","numVideos","fill","_","i","allowBulkActions","PartialVideoItem","breakpoints","useBreakpoints","isSmall","VideoListHelper","withDragHandle","withReordering","xs","Row","Col","VideoOwnerText","owner","isClickViewCurated","SvgContainer2","UserHelper","Avatar","initials","surname","imageUrl","avatar","url","InteractiveWidgetItem","VideoThumbnail","ThumbnailTextPosition","location","AppLink","_isClickViewCurated","Text","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","generateCacheKey","flightObjs","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","isArray","useEffect","forEach","PlayPageAnchor","DEFAULT_PARTIAL_LOADING_OPTIONS","minWidth","maxWidth","PartialLoadingHelper","getPartialLoadingItems","opts","Math","max","floor","random","PlayInteractive","locationContext","shareLink","showHeading","setShowHeading","isArchived","summaryPortalNode","u","hasPermissions","typeId","hasStudentExperience","config","currentUser","viewKey","startTime","onShowSummary","showing","token","tooltipPlacement","yearGroups","node","currentVideo","relatedVideos","audiences","getVideoAppLink","v","context","queryParams","contextId","playNext","shareId","moviesAndTv","mtv","LanguageService","InteractiveAlertBanner","isPreviewPreventScrubbingEnabled","Tooltip","title","trigger","spanHack","ToggleSwitch","on","isPreviewingPreventScrubbing","toggleStudentMode","PreviewInteractive","previewPreventInteractive","togglePreviewPreventInteractive","playerContext","setIsPreviewingPreventScrubbing","canConsume","VideoHelper","videoActions","useVideoActions","useLiteFavourites","hasPlayPageV2","useSettings","playerRef","togglePreviewPreventScrubbing","otherInteractives","backToName","backAppLink","sourceVideo","_parentClip","_parentVideo","interactives","filter","toString","application","action","TextHelper","isDraft","CurationStatus","RestrictionBanner","restrictions","_restrictions","objectId","objectTypeId","MasterType","canManageVideoAccess","GlobalPlayerConsumer","t","mode","Actions","actions","getVideoActions","actionsDropdownClassName","fetchMore","fetchMoreActions","RestrictionPadlock","description","questionListPortalNode","contents","WidgetContents","collection","prefetched","getChildAppLink","childComponent","extraChildComponentProps","widgetId","RelatedVideos","VideoAppLinkHelper","ArchivedBanner","mapTypeId","baseClassName","params","isAuthenticated","hasError","hasCompleted","videos","canAutoplay","el","headingRef","set","getSubTextAppLink","series","presentationAudiences","getPreviewQuestionsAppLink","getClassroomGuideAppLink","getInteractiveGuidanceAppLink","getResourceGuidanceAppLink","hasMore","usePresentationAudiences","redirectOnError","activePresentation","getFallbackPresentation","presentation","useShouldPreviewInteractive","hasProduct","CHUNK_SIZE","useVideoMixin","objects","hydratedVideos","Set","o","getValidObjects","videoIds","request","setRequest","unhydratedVideos","has","push","add","r","newRequests","chunk","flightNamespace","bsPrefix","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([[6054],{63719:(e,t,a)=>{a.d(t,{h:()=>c});var r=a(32735),n=a(77316);function i(e,t){if(e){if("string"==typeof e)return o(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?o(e,t):void 0}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=Array(t);a<t;a++)r[a]=e[a];return r}function c(e){var t,a,c=(t=r.useMemo((function(){return n.p.getBuilder()}),[]),a=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var r,n,i,o,c=[],s=!0,u=!1;try{if(i=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;s=!1}else for(;!(s=(r=i.call(a)).done)&&(c.push(r.value),c.length!==t);s=!0);}catch(e){u=!0,n=e}finally{try{if(!s&&null!=a.return&&(o=a.return(),Object(o)!==o))return}finally{if(u)throw n}}return c}}(t,a)||i(t,a)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),s=c[0],u=(0,c[1])(s);return u&&e?[].concat(function(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||i(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.")}()}(u),[Object.assign(Object.assign({},e),{active:!0})]):u}},90690:(e,t,a)=>{a.r(t),a.d(t,{InteractiveView:()=>V});var r=a(32735),n=a(50242),i=a(20354),o=a(60051),c=a(78417),s=a(16714),u=a(61990),d=a(33803),l=a(39151),v=a(1666),m=a(20768),f=a(47812),y=a(31949),b=a(63719),h=a(26304),p=a(91286),g=a(22902),P=a(79612),w=a(37802),A=a(76753),S=a(51855),k=a(7179),C=a(36873),F=a(44110),I=a(53073),M=a(97816),q=a(84062),B=a(25758),j={notFound:u.l,forbidden:{privacy:d.G}};function V(e){var t,a,u,d,V,x,E=(0,g.T)().hasPermissions,G=(0,S.G)().isPlugin,O=i.a.useBasicFetch(l.L.config()),T=i.a.useBasicFetch(y.N.token()),U=i.a.useBasicFetch(y.N.currentUser()),_=i.a.useBasicFetch((null===(t=U.data)||void 0===t?void 0:t.isAuthenticated)&&v.h.yearGroups(U.data.customerId)),K=i.a.useBasicFetch(m.b.interactiveMetadata(e.id)),L=(0,I.f)(),N=i.a.useBasicFetch(K.statusCode===n.o.Forbidden&&m.b.interactiveMetadata(e.id,c.r.StripMetadata)),$=i.a.useBasicFetch(L&&K.data&&m.b.interactive(K.data.interactiveId)),z=(0,F.i)(),D=i.a.useBasicFetch(f.k.createViewKey(e.id,o.f.MasterObject)),H=(0,C.k)({video:K.data,context:e.queryParams.context,contextId:e.queryParams.contextId,moviesAndTv:e.queryParams.mtv,currentUser:U.data});(0,k.P)({id:e.id,app:"interactives"}),(0,p.v)(K,j,{forbidden:!0}),(0,h.b)(N),(0,P.M)(A.CG.getInteractiveMetadata({content:K.data})),(0,M.V)(null!==(a=H.videos)&&void 0!==a?a:[]);var J=(0,w.r)(null),Q=J.hasPlayPageV2,R=J.isLoadingSettings,W=(0,b.h)({name:null===(u=K.data)||void 0===u?void 0:u.name});return K.data&&O.hasCompleted&&U.hasCompleted&&(!L||$.hasCompleted)&&D.hasCompleted&&!R&&T.hasCompleted?L?r.createElement(B.x,{config:O.data,yearGroups:_.data,currentUser:U.data,queryParams:e.queryParams,interactive:K.data,isPreviewPreventScrubbingEnabled:$.data.preventScrubbing,audiences:z.data,relatedVideos:H,canManageVideoAccess:E(s.C.ManageVideoAccess),isPlugin:G,breadcrumbs:Q&&W,token:T.data}):r.createElement(q.M,{interactive:K.data,currentUser:U.data,config:O.data,yearGroups:_.data,audiences:z.data,queryParams:e.queryParams,viewKey:D.data,relatedVideos:H,startTime:null!==(V=null===(d=e.queryParams)||void 0===d?void 0:d.t)&&void 0!==V?V:null===(x=e.queryParams)||void 0===x?void 0:x.startTime,isPlugin:G,token:T.data}):r.createElement(r.Fragment,null)}}}]);
2
- //# sourceMappingURL=6054-d3677cdee9-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/6054-d3677cdee9-lite.chunk.js","mappings":"ohBAKM,SAAUA,EAAeC,GAC7B,I,IAAqF,G,EAAvD,WAAc,kBAAM,gBAA8B,GAAE,I,EAAG,E,unBAA7EC,EAAK,KAEPC,GAAcC,EAFK,MAEMF,GAE/B,OAAKC,GAAgBF,EAGd,GAAP,O,yWAAA,CAAYE,GAAW,gCAAOF,GAAO,CAAEI,QAAQ,MAFtCF,CAGX,C,8WCsBMG,EAAc,CAClBC,SAAU,IACVC,UAAW,CACTC,QAAS,MASP,SAAUC,EAAgBC,G,gBACtBC,GAAmB,SAAnBA,eACAC,GAAa,SAAbA,SAEFC,EAAS,kBAA6B,cACtCC,EAAQ,kBAAgC,aACxCC,EAAc,kBAAkC,mBAChDC,EAAa,mBACD,QAAhB,EAAAD,EAAYE,YAAI,eAAEC,kBAAmB,eAA4BH,EAAYE,KAAKE,aAG9EC,EAAsB,kBAC1B,wBAAwCV,EAAMW,KAE1CC,GAA2B,SAC3BC,EAA8B,kBAClCH,EAAoBI,aAAe,eACjC,wBAAwCd,EAAMW,GAAI,oBAEhDI,EAAc,kBAClBH,GAA4BF,EAAoBH,MAChD,gBAAgCG,EAAoBH,KAAKS,gBAErDC,GAAY,SACZC,EAAU,kBAAoC,kBAA6BlB,EAAMW,GAAI,mBAErFQ,GAAgB,OAAoB,CACxCC,MAAOV,EAAoBH,KAC3Bc,QAASrB,EAAMsB,YAAYD,QAC3BE,UAAWvB,EAAMsB,YAAYC,UAC7BC,YAAaxB,EAAMsB,YAAYG,IAC/BpB,YAAaA,EAAYE,QAG3B,OAAa,CAAEI,GAAIX,EAAMW,GAAIe,IAAK,kBAElC,OAAqBhB,EAAqBf,EAAa,CAAEE,WAAW,KACpE,OAAsBgB,IACtB,OAAmB,4BAA0C,CAAEc,QAASjB,EAAoBH,SAE5F,OAAkC,QAApB,EAAAY,EAAcS,cAAM,QAAI,IAEtC,OAA6C,OAAY,MAAjDC,EAAa,EAAbA,cAAeC,EAAiB,EAAjBA,kBACjBtC,GAAc,OAAe,CAAEuC,KAA8B,QAAxB,EAAArB,EAAoBH,YAAI,eAAEwB,OAYrE,OATErB,EAAoBH,MACpBJ,EAAO6B,cACP3B,EAAY2B,gBACVpB,GAA4BG,EAAYiB,eAC1Cd,EAAQc,eACPF,GACD1B,EAAM4B,aAMJpB,EAEA,gBAAC,IAAkB,CACjBT,OAAQA,EAAOI,KACfD,WAAYA,EAAWC,KACvBF,YAAaA,EAAYE,KACzBe,YAAatB,EAAMsB,YACnBP,YAAaL,EAAoBH,KACjC0B,iCAAkClB,EAAYR,KAAK2B,iBACnDjB,UAAWA,EAAUV,KACrBY,cAAeA,EACfgB,qBAAsBlC,EAAe,uBACrCC,SAAUA,EACVV,YAAaqC,GAAiBrC,EAC9BY,MAAOA,EAAMG,OAMjB,gBAAC,IAAe,CACdQ,YAAaL,EAAoBH,KACjCF,YAAaA,EAAYE,KACzBJ,OAAQA,EAAOI,KACfD,WAAYA,EAAWC,KACvBU,UAAWA,EAAUV,KACrBe,YAAatB,EAAMsB,YACnBJ,QAASA,EAAQX,KACjBY,cAAeA,EACfiB,UAA+B,QAApB,EAAiB,QAAjB,EAAApC,EAAMsB,mBAAW,eAAEe,SAAC,QAAqB,QAAjB,EAAArC,EAAMsB,mBAAW,eAAEc,UACtDlC,SAAUA,EACVE,MAAOA,EAAMG,OAjCR,gCAoCX,C","sources":["file:///app/packages/libs/shared/src/hooks/useBreadcrumbs.ts","file:///app/packages/projects/lite/src/apps/interactives/views/interactive-view/InteractiveView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Breadcrumb } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { BreadcrumbService } from 'libs/shared/services/BreadcrumbService';\n\nexport function useBreadcrumbs(current: Breadcrumb): Breadcrumb[] {\n const [ match, useBuilder ] = React.useMemo(() => BreadcrumbService.getBuilder(), []);\n\n const breadcrumbs = useBuilder(match);\n\n if (!breadcrumbs || !current)\n return breadcrumbs;\n\n return [ ...breadcrumbs, { ...current, active: true }];\n}\n\n","import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Flight } from 'libs/common/flight';\n\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { VideoNotFoundError } from 'libs/shared/errors/videos/video-not-found/VideoNotFoundError';\nimport { VideoPrivateError } from 'libs/shared/errors/videos/video-private/VideoPrivateError';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useBreadcrumbs } from 'libs/shared/hooks/useBreadcrumbs';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config, CurrentUser, Interactive, InteractiveMetadata, PlayerViewKey, YearGroup } from 'libs/shared/interfaces';\nimport { AuthToken } from 'libs/shared/interfaces/models/AuthToken';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { useGetRelatedVideos } from 'shared/hooks/useGetRelatedVideos';\nimport { usePresentationAudiences } from 'shared/hooks/usePresentationAudiences';\nimport { useShouldPreviewInteractive } from 'shared/hooks/useShouldPreviewInteractive';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\n\nimport { PlayInteractive } from 'apps/interactives/components/play-interactive/PlayInteractive';\nimport { PreviewInteractive } from 'apps/interactives/components/preview-interactive/PreviewInteractive';\n\nconst videoErrors = {\n notFound: VideoNotFoundError,\n forbidden: {\n privacy: VideoPrivateError\n }\n};\n\ninterface InteractiveViewProps {\n id: string;\n queryParams: PlayViewQueryParams;\n}\n\nexport function InteractiveView(props: InteractiveViewProps): JSX.Element {\n const { hasPermissions } = usePermissions();\n const { isPlugin } = usePluginHelper();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const token = Flight.useBasicFetch<AuthToken>(UserRequests.token());\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 interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InteractiveRequests.interactiveMetadata(props.id)\n );\n const shouldPreviewInteractive = useShouldPreviewInteractive();\n const strippedInteractiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n interactiveMetadata.statusCode === HttpStatus.Forbidden &&\n InteractiveRequests.interactiveMetadata(props.id, PermissionFilterOption.StripMetadata)\n );\n const interactive = Flight.useBasicFetch<Interactive>(\n shouldPreviewInteractive && interactiveMetadata.data &&\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId)\n );\n const audiences = usePresentationAudiences();\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(PlayerRequests.createViewKey(props.id, MediaIdType.MasterObject));\n\n const relatedVideos = useGetRelatedVideos({\n video: interactiveMetadata.data,\n context: props.queryParams.context,\n contextId: props.queryParams.contextId,\n moviesAndTv: props.queryParams.mtv,\n currentUser: currentUser.data\n });\n\n useDeepLinks({ id: props.id, app: 'interactives' });\n\n useHandleObjectError(interactiveMetadata, videoErrors, { forbidden: true });\n useCannotConsumeError(strippedInteractiveMetadata);\n useSetPageMetadata(PageMetadataHelper.getInteractiveMetadata({ content: interactiveMetadata.data }));\n\n useVideoMixin(relatedVideos.videos ?? []);\n\n const { hasPlayPageV2, isLoadingSettings } = useSettings(null);\n const breadcrumbs = useBreadcrumbs({ name: interactiveMetadata.data?.name });\n\n const hasLoaded = (\n interactiveMetadata.data &&\n config.hasCompleted &&\n currentUser.hasCompleted &&\n (!shouldPreviewInteractive || interactive.hasCompleted) &&\n viewKey.hasCompleted &&\n !isLoadingSettings &&\n token.hasCompleted\n );\n\n if (!hasLoaded)\n return <></>;\n\n if (shouldPreviewInteractive) {\n return (\n <PreviewInteractive\n config={config.data}\n yearGroups={yearGroups.data}\n currentUser={currentUser.data}\n queryParams={props.queryParams}\n interactive={interactiveMetadata.data}\n isPreviewPreventScrubbingEnabled={interactive.data.preventScrubbing}\n audiences={audiences.data}\n relatedVideos={relatedVideos}\n canManageVideoAccess={hasPermissions(PermissionName.ManageVideoAccess)}\n isPlugin={isPlugin}\n breadcrumbs={hasPlayPageV2 && breadcrumbs}\n token={token.data}\n />\n );\n }\n\n return (\n <PlayInteractive\n interactive={interactiveMetadata.data}\n currentUser={currentUser.data}\n config={config.data}\n yearGroups={yearGroups.data}\n audiences={audiences.data}\n queryParams={props.queryParams}\n viewKey={viewKey.data}\n relatedVideos={relatedVideos}\n startTime={props.queryParams?.t ?? props.queryParams?.startTime}\n isPlugin={isPlugin}\n token={token.data}\n />\n );\n}"],"names":["useBreadcrumbs","current","match","breadcrumbs","useBuilder","active","videoErrors","notFound","forbidden","privacy","InteractiveView","props","hasPermissions","isPlugin","config","token","currentUser","yearGroups","data","isAuthenticated","customerId","interactiveMetadata","id","shouldPreviewInteractive","strippedInteractiveMetadata","statusCode","interactive","interactiveId","audiences","viewKey","relatedVideos","video","context","queryParams","contextId","moviesAndTv","mtv","app","content","videos","hasPlayPageV2","isLoadingSettings","name","hasCompleted","isPreviewPreventScrubbingEnabled","preventScrubbing","canManageVideoAccess","startTime","t"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[640],{49935:(e,t,r)=>{r.d(t,{Oo:()=>p,b2:()=>y});var n=r(32735),a=r(23481),o=r(36848),i=r(86764),l=r(3747),c=r(5859),s=r(35223),u=r(83914);function m(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,i,l=[],c=!0,s=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=o.call(r)).done)&&(l.push(n.value),l.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return f(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?f(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.")}()}function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var d=a.T.encloseNamespace("shared.breadcrumbComponent"),b=n.forwardRef((function(e,t){var r=e.breadcrumb,a=r.name,i=r.appLink,l=r.active,c=e.withBackIcon;return n.createElement("li",{className:"breadcrumb-item".concat(l?" active":"")},l?n.createElement("strong",null,a):n.createElement(o.F,{appLink:i,ref:t},c&&n.createElement(u.x,{svgName:s.vn.ChevronLeft,size:u.S.Small}),n.createElement("span",{className:c?"ms-2":""},a)))})),p=function(e){var t=e.breadcrumbs,r=(0,l.a)(i.r.XS),a=(null==t?void 0:t.length)||0,o=m(n.useState(!1),2),c=o[0],s=o[1],u=m(n.useState(!1),2),f=u[0],p=u[1],y=n.useRef();if(n.useEffect((function(){var e,r=null!==(e=null==t?void 0:t.reduce((function(e,t){return e+t.name.length}),0))&&void 0!==e?e:0;a>4&&r>64&&s(!0)}),[null==t?void 0:t.length]),n.useLayoutEffect((function(){var e;f&&(null===(e=y.current)||void 0===e||e.focus())}),[y.current,f]),!a||r&&a<2)return n.createElement(n.Fragment,null);if(r)return n.createElement("nav",{"aria-label":"breadcrumb"},n.createElement("ol",{className:"breadcrumb m-0 p-0"},n.createElement(b,{breadcrumb:t[a-2],withBackIcon:!0})));var v=n.createElement(b,{breadcrumb:t[0]}),h=a>2?n.createElement(b,{breadcrumb:t[1]}):n.createElement(n.Fragment,null),g=a>3?n.createElement(b,{breadcrumb:t[a-2]}):n.createElement(n.Fragment,null),E=a>1?n.createElement(b,{breadcrumb:t[a-1]}):n.createElement(n.Fragment,null),S=t.slice(2,a-2);return n.createElement("nav",{"aria-label":"breadcrumb"},n.createElement("ol",{className:"breadcrumb m-0 p-0"},v,h,c?n.createElement("li",{className:"breadcrumb-item"},n.createElement("button",{className:"btn-link",onClick:function(){s(!1),p(!0)},"aria-label":d("expand")},"...")):S.map((function(e,t){return n.createElement(b,{key:t,breadcrumb:e,ref:0===t?y:null})})),g,E))},y=n.memo((function(e){var t=e.numItems,r=void 0===t?3:t;return(0,l.a)(i.r.XS)?n.createElement("div",{className:"partial-loading-background",style:{height:"1.3125rem",width:"6rem"}}):n.createElement("nav",{"aria-label":"breadcrumb"},n.createElement("ol",{className:"breadcrumb m-0 p-0"},c.u.getPartialLoadingItems({numItems:r}).map((function(e,t){var r=e.width;return n.createElement("li",{key:t,className:"breadcrumb-item"},n.createElement("span",{className:"d-inline-block partial-loading-background",style:{width:r},dangerouslySetInnerHTML:{__html:"&nbsp"}}))}))))}))},23201:(e,t,r)=>{r.d(t,{A:()=>s});var n=r(32735),a=r(92802),o=r(2102),i=r(83345),l=r(33936),c="shared.formButtons";function s(e){var t=(0,a.u6)(),r=(0,l.l)(t);return n.createElement(o.m,{variant:e.variant||"primary",type:"submit",disabled:!r,size:e.size,className:e.className?e.className:"",showSpinner:t.isSubmitting},e.submitText?n.createElement(n.Fragment,null,e.submitText):n.createElement(i.x,{namespace:c,phrase:e.isNew?"create":"save"}))}},38365:(e,t,r)=>{r.d(t,{n:()=>S,W:()=>O});var n=r(32735),a=r(80247),o=r(80130),i=r(92802),l=r(91967),c=r(1048),s=r(36848),u=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(n=Object.getOwnPropertySymbols(e);a<n.length;a++)t.indexOf(n[a])<0&&Object.prototype.propertyIsEnumerable.call(e,n[a])&&(r[n[a]]=e[n[a]])}return r};function m(e){var t=e.label,r=e.checkboxLabelClassName,a=e.checkboxLabelFontWeight,i=e.className,l=u(e,["label","checkboxLabelClassName","checkboxLabelFontWeight","className"]);return n.createElement(o.Z.Group,{className:"form-group"},n.createElement("div",{className:"form-check ".concat(i||"")},n.createElement(S,Object.assign({className:"form-check-input"},l)),n.createElement(o.Z.Label,{className:"form-check-label cursor-pointer ".concat("normal"===a?"fw-normal":""," \n ").concat(r),htmlFor:l.id},t),e.checkboxAppLink&&e.checkboxAppLinkText&&n.createElement(n.Fragment,null,n.createElement("span",null," "),n.createElement(s.F,{appLink:e.checkboxAppLink,className:"info-link"},e.checkboxAppLinkText))))}var f=r(83914),d=r(83345),b=r(73814),p=r(35223);function y(e){var t=(0,i.u6)().values[e.fieldName];return"string"!=typeof t?n.createElement(n.Fragment,null):n.createElement("div",{className:"float-end text-secondary fw-normal"},t.length,"/",e.limit," characters")}const v={revealPassword:"jCfI0",passwordInput:"RBJnf",passwordContainer:"d78lK",passwordContainerDisabled:"asbVo",infoTooltip:"wzyOG",spinner:"CycFx"};function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var g=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(n=Object.getOwnPropertySymbols(e);a<n.length;a++)t.indexOf(n[a])<0&&Object.prototype.propertyIsEnumerable.call(e,n[a])&&(r[n[a]]=e[n[a]])}return r},E="shared.formField";function S(e){var t,r,o=e.children,s=e.showLoadingSpinner,u=g(e,["children","showLoadingSpinner"]),m=(t=n.useState(e.type),r=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,i,l=[],c=!0,s=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=o.call(r)).done)&&(l.push(n.value),l.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw a}}return l}}(t,r)||function(e,t){if(e){if("string"==typeof e)return h(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?h(e,t):void 0}}(t,r)||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.")}()),d=m[0],b=m[1],y=l.q.isFunction(o)?function(e){return o(e)}:n.Children.count(o)?o:null;if("password"!==u.type)return s?n.createElement("div",{className:"position-relative"},n.createElement(i.gN,Object.assign({},c.t.omit(u,["formSize"])),y),n.createElement("div",{className:v.spinner},n.createElement(a.Z,{animation:"border",size:"sm"}))):n.createElement(i.gN,Object.assign({},c.t.omit(u,["formSize"])),y);var E="position-relative ".concat(v.passwordContainer);return u.className&&(E+=" ".concat(u.className)),u.disabled&&(E+=" ".concat(v.passwordContainerDisabled)),n.createElement("div",{className:E},n.createElement(i.gN,Object.assign({},c.t.omit(u,["formSize","type","className"]),{type:d,className:"".concat(v.passwordInput," border-0 w-100 h-100 outline-none rounded")}),y),"password"===u.type&&n.createElement(f.x,{svgName:"password"===d?p.vn.VisibleOn:p.vn.VisibleOff,className:"svg-container cursor-pointer ".concat(v.revealPassword),onClick:function(){b("password"===d?"text":"password")}}))}function O(e){var t=e.label,r=e.className,a=e.showCharacterCounter,l=e.showRequiredStar,s=e.infoTooltip,u=e.infoTooltipPlacement,h=e.infoText,O=e.formSize,w=e.showOptionalLabel,N=g(e,["label","className","showCharacterCounter","showRequiredStar","infoTooltip","infoTooltipPlacement","infoText","formSize","showOptionalLabel"]),x=(0,i.u6)(),A=x.errors,I=x.touched,k=function(){};if("checkbox"===N.type){var j=c.t.omit(e,["formSize","infoTooltipPlacement"]);return e.disabled&&(j.onChange=k),n.createElement(m,Object.assign({},j))}var C=Object.assign(Object.assign({},N),{className:b.w.getCustomFormControlClassName(A,I,N.name,O,r,"string"==typeof e.as?e.as:null)});return e.disabled&&(C.onChange=k),n.createElement(o.Z.Group,{className:"form-group"},!!t&&n.createElement(o.Z.Label,{htmlFor:N.id,className:"d-flex align-items-center"},t,l&&n.createElement("span",{className:"text-danger"},"*"),s&&n.createElement(f.x,{className:"svg-container text-secondary ".concat(v.infoTooltip),svgName:p.vn.Info,title:s,tooltipPlacement:u,tooltipSpanHack:!0}),w&&n.createElement("span",{className:"text-secondary"}," ",n.createElement(d.x,{namespace:E,phrase:"optional"})),!!a&&!!N.maxLength&&n.createElement("div",{className:"ms-auto"},n.createElement(y,{fieldName:N.name,limit:N.maxLength}))),n.createElement(S,Object.assign({},C,{"aria-errormessage":"".concat(N.name,"Error")})),!!h&&n.createElement(o.Z.Text,{className:"text-secondary"},h),n.createElement(i.Bc,{name:N.name},(function(e){return n.createElement(o.Z.Control.Feedback,{id:"".concat(N.name,"Error"),type:"invalid",role:"status"},e)})))}S.defaultProps={autoComplete:"off"},O.defaultProps={autoComplete:"off",infoTooltipPlacement:"top"}},82644:(e,t,r)=>{r.d(t,{b:()=>u,n:()=>s});var n=r(32735),a=r(92802),o=r(91967),i=r(1048);function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var c=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(n=Object.getOwnPropertySymbols(e);a<n.length;a++)t.indexOf(n[a])<0&&Object.prototype.propertyIsEnumerable.call(e,n[a])&&(r[n[a]]=e[n[a]])}return r};function s(e){var t=e.castInitialValues,r=e.castValuesOnSubmit,s=e.initialValues,u=e.onSubmit,m=c(e,["castInitialValues","castValuesOnSubmit","initialValues","onSubmit"]),f=t&&e.validationSchema?e.validationSchema.cast(function(e){if(!e)return{};var t=i.t.deepClone(e);return function e(r){Object.keys(t).forEach((function(n){t.hasOwnProperty(n)&&(i.t.isObject(r[n])?e(r[n]):null===t[n]&&delete t[n])}))}(t),t}(s)):s,d={allowInitialSubmit:e.allowInitialSubmit};return n.createElement(a.J9,Object.assign({enableReinitialize:!0},m,{initialValues:f,onSubmit:function(t,n){var a=n.setSubmitting,o=n.resetForm,i=n.setFieldError,c=r&&e.validationSchema?e.validationSchema.cast(t):t;u(c,(function(){var e,t,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(r.reset&&o(),r.errors)for(var n=0,c=Object.entries(r.errors);n<c.length;n++){var s=(e=c[n],t=2,function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,i,l=[],c=!0,s=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=o.call(r)).done)&&(l.push(n.value),l.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(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.")}()),u=s[0],m=s[1];i(u,m)}a(!1)}))},initialStatus:d}),o.q.isFunction(e.children)?function(t){return e.children(t)}:n.Children.count(e.children)?e.children:null)}function u(){return(0,a.u6)()}s.defaultProps={castInitialValues:!0,castValuesOnSubmit:!0}},10935:(e,t,r)=>{r.d(t,{n:()=>a});var n=r(99940),a={requestExport:function(e){return{url:"/api/domain/v2/export",key:"request:export",type:n.k.POST,data:e,normalize:!1}}}},73814:(e,t,r)=>{r.d(t,{w:()=>a});var n=r(92802),a={getCustomFormControlClassName:function(e,t,r,a,o,i){var l="";return l=function(e,t){var r="";return r="select"===e?"form-select":"form-control","sm"===t&&(r+=" ".concat(r,"-sm")),"lg"===t&&(r+=" ".concat(r,"-lg")),r}(i,a),(0,n.u9)(t,r)&&(0,n.u9)(e,r)&&(l+=" is-invalid"),o&&(l+=" ".concat(o)),l}}},5859:(e,t,r)=>{function n(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}r.d(t,{u:()=>o});var a={numItems:5,minWidth:50,maxWidth:100},o={getPartialLoadingItems:function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=Object.assign(Object.assign({},a),t);return(e=Array(r.numItems),function(e){if(Array.isArray(e))return n(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return n(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(e,t):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()*r.maxWidth),r.minWidth),"px")}}))}}},81803:(e,t,r)=>{r.d(t,{d:()=>b});var n=r(32735),a=r(81886),o=r(23481),i=r(49935),l=r(22902),c=r(14070),s=r(97291),u=r(96368);function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var f="settings.settingsLayout",d=function(e){var t=(0,l.T)().hasPermissions,r=(0,u.e)();if(e)return t(e);var n=a.Q.C$.getCurrentAppLink();return n.application!==s.O.SETTINGS||r.some((function(e){return e.modules.some((function(e){return"appLink"in e&&e.appLink.action===n.action}))}))};function b(e){var t,r=d(e.requiredPermissions);if(n.useEffect((function(){r||a.Q.C$.trigger({application:s.O.SETTINGS,action:c.e.Settings.HOME},{replace:!0})}),[r]),!r)return n.createElement(n.Fragment,null);var l,u=e.breadcrumbs.map((function(t,r){return{name:t,appLink:{application:s.O.SETTINGS,action:c.e.Settings.HOME},active:r===e.breadcrumbs.length-1}}));return n.createElement("div",{className:"px-3"},n.createElement("div",{className:"d-flex align-items-center justify-content-between"},n.createElement("h1",{className:"h2"},e.heading),null===(t=e.headingButton)||void 0===t?void 0:t.call(e)),n.createElement("div",{className:"pb-3"},n.createElement(i.Oo,{breadcrumbs:[{name:o.T.getPhrase(f,"settingsBreadcrumb"),appLink:{application:s.O.SETTINGS,action:c.e.Settings.HOME}}].concat((l=u,function(e){if(Array.isArray(e))return m(e)}(l)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(l)||function(e,t){if(e){if("string"==typeof e)return m(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?m(e,t):void 0}}(l)||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.")}()))})),e.description&&n.createElement(n.Fragment,null,n.createElement("p",null,e.description),n.createElement("hr",null)),e.children)}},80640:(e,t,r)=>{r.r(t),r.d(t,{ExportLibrariesView:()=>P});var n=r(32735),a=r(23481),o=r(20354),i=r(49985),l=r(65858),c=r(82644),s=r(10935),u=r(98064),m=r(31949),f=r(69883),d=r(81803),b=r(80130),p=r(92802),y=r(5173),v=r(23201),h=r(38365),g=r(83345);function E(e){return function(e){if(Array.isArray(e))return S(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return S(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?S(e,t):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.")}()}function S(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var O={primary:["primary","elementary"],secondary:["secondary","middle"],tertiary:["high","tertiary","university","fe/he"],other:["movies","tv","distributor"]},w={orderLibraries:function(e){var t=e.reduce((function(e,t){return Object.keys(O).some((function(r){var n,a=r;if(!O[a].some((function(e){return t.name.toLowerCase().includes(e.toLowerCase())})))return!1;var o=null!==(n=e[a])&&void 0!==n?n:[];return e[a]=[].concat(E(o),[t]),!0}))||e.other.push(t),e}),{other:[]});return Object.keys(O).reduce((function(e,r){var n=r;return t[n]&&e.push.apply(e,E(t[n])),e}),[])}};const N={formatSelect:"ZLQpe"};function x(e,t){if(e){if("string"==typeof e)return A(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?A(e,t):void 0}}function A(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var I="settings.exportLibraries",k=a.T.encloseNamespace(I),j={csv:"CSV","marc-21":"MARC 21","marc-21-v2":"MARC 21 V2","marc-xml":"MARC XML"},C=y.Ry().shape({libraryIds:y.IX().of(y.Z_()).required((function(){return k("libraryIdsRequired")})).min(1),format:y.Z_().required((function(){return k("formatRequired")}))});function L(e){var t=(0,p.u6)(),r=n.useMemo((function(){return w.orderLibraries(e.libraries)}),[e.libraries]);return n.createElement(p.l0,null,n.createElement(b.Z.Label,{className:"mb-2"},n.createElement(g.x,{namespace:I,phrase:"selectLibraries"})),r.map((function(e,r){var a="library-".concat(r);return n.createElement(h.W,{key:r,type:"checkbox",label:e.name,checkboxLabelFontWeight:"normal",name:a,id:a,checked:!!t.values.libraryIds.some((function(t){return t.toString()===e.id.toString()})),onChange:function(){var r,n=function(e){if(Array.isArray(e))return A(e)}(r=t.values.libraryIds)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(r)||x(r)||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.")}(),a=n.findIndex((function(t){return t.toString()===e.id.toString()}));-1===a?n.push(e.id):n.splice(a,1),t.setFieldValue("libraryIds",n)}})})),t.errors.libraryIds&&n.createElement(b.Z.Control.Feedback,{type:"invalid",className:"d-block mb-3"},t.errors.libraryIds),n.createElement("div",{className:N.formatSelect},n.createElement(h.W,{as:"select",label:k("exportAs"),name:"format",id:"format",value:t.values.format||""},n.createElement("option",{value:""},k("selectAFormat")),Object.entries(j).map((function(e){var t,r,a=(r=2,function(e){if(Array.isArray(e))return e}(t=e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,i,l=[],c=!0,s=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=o.call(r)).done)&&(l.push(n.value),l.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw a}}return l}}(t,r)||x(t,r)||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.")}()),o=a[0],i=a[1];return n.createElement("option",{key:o,value:o},i)})))),n.createElement(v.A,{variant:"dark",submitText:k("export")}))}var T=a.T.encloseNamespace("settings.exportLibraries"),F=["customLibrary","sharedLibrary","hostedLibrary"];function P(){var e=o.a.useGetFetchAsync(),t=(0,f.Z)(),r=o.a.useBasicFetch(u.D.domainLibraries(F)),a=o.a.useBasicFetch(m.N.currentUser());return r.data&&a.data?n.createElement(d.d,{heading:T("heading"),breadcrumbs:[T("heading")],description:T("info")},n.createElement(c.n,{onSubmit:function(r,n){var o={key:"lite.library.video.report",data:{firstName:a.data.givenName,email:a.data.email,customerId:a.data.customerId,formats:[r.format],libraryIds:r.libraryIds}},c=s.n.requestExport(o);e(c).then((function(){return function(e){t.success(T("success")),i.k.logUserAction(e,{actionType:l.Vw.Export,entity:l.py.FileGeneratorJob,location:l.LZ.Settings})}(o)})).catch((function(){return t.error(T("error"))})).finally((function(){return n({reset:!0})}))},validationSchema:C,initialValues:{format:"",libraryIds:[]}},n.createElement(L,{libraries:r.data}))):n.createElement(n.Fragment,null)}}}]);
2
- //# sourceMappingURL=640-c3ae02d0a7-lite.chunk.js.map
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[6596],{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")}}))}}},70067:(e,a,i)=>{i.r(a),i.d(a,{PlaySharedClipViewV2:()=>S});var t=i(32735),n=i(20354),r=i(65858),c=i(16714),s=i(43012),o=i(39151),d=i(1666),l=i(20768),u=i(31949),p=i(1575),m=i(26304),v=i(22902),g=i(15311),h=i(79612),I=i(76753),y=i(51855),f=i(7179),A=i(49948),P=i(36873),C=i(27638),E=i(44110),b=i(35014),V=i(97816),O=i(81812),F=i(14085);function S(e){var a,i,S,x,L,G,k=(0,g.r)().hasProduct,R=(0,C.u)(r.LZ.VideoThumbnail),T=R.setFavourite,w=R.canFavourite,U=(0,v.T)().hasPermissions,q=(0,y.G)().isPlugin,N=(0,O.a)(),M=(0,b.I)(),j=n.a.useBasicFetch(u.N.currentUser()),_=n.a.useBasicFetch(o.L.config()),W=n.a.useBasicFetch(s.e.sharedClip(e.objectId,e.shareId)),B=n.a.useBasicFetch(!!(null===(a=W.data)||void 0===a?void 0:a._parentVideo)&&p.R.video(W.data._parentVideo.id)),D=n.a.useBasicFetch(!!(null===(S=null===(i=W.data)||void 0===i?void 0:i._parentVideo)||void 0===S?void 0:S.id)&&M.canViewClips&&s.e.videoClips(W.data._parentVideo.id)),H=n.a.useBasicFetch(M.canViewInteractives&&l.b.videoInteractives(e.objectId)),K=(0,P.k)({video:B.data,context:e.queryParams.context,contextId:e.queryParams.contextId,moviesAndTv:e.queryParams.mtv,currentUser:j.data}),Q=(0,E.i)(),Y=n.a.useBasicFetch((null===(x=j.data)||void 0===x?void 0:x.isAuthenticated)&&d.h.yearGroups(j.data.customerId)),Z=(0,A.l)(e.objectId);return(0,h.M)(I.CG.getClipMetadata({content:W.data})),(0,V.V)(null!==(L=K.videos)&&void 0!==L?L:[]),(0,m.b)(W),(0,f.P)({id:e.objectId,app:"clips",shareId:e.shareId}),W.data&&j.hasCompleted&&_.hasCompleted&&Z.hasCompleted?t.createElement(F.S,{shareId:e.shareId,clip:W.data,clips:D.data,interactives:H.data,originalVideo:B.data,currentUser:j.data,yearGroups:Y.data,relatedVideos:K,canFavourite:w,setFavourite:T,hasProduct:k,queryParams:e.queryParams,audiences:Q.data,imageCdnUrl:_.data.imageCdnUrl,canManageVideoAccess:U(c.C.ManageVideoAccess),pointsOfInterest:null==Z?void 0:Z.items,featureAccess:M,tableOfContentsId:null===(G=e.queryParams)||void 0===G?void 0:G.tocId,shouldShowSideTableOfContents:N,isPlugin:q}):t.createElement(t.Fragment,null)}},44110:(e,a,i)=>{i.d(a,{i:()=>c});var t=i(20354),n=i(89454),r=i(86698),c=function(){var e=(0,r.y)({redirectOnError:!0}),a=e.activePresentation,i=e.getFallbackPresentation,c=a||i();return t.a.useBasicFetch(!!c&&n.O.presentationAudiences(c.id))}},14085:(e,a,i)=>{i.d(a,{S:()=>H});var t=i(32735),n=i(28400),r=i(49935),c=i(5640),s=i(8887),o=i(51184),d=i(64921),l=i(95812),u=i(53709),p=i(71063),m=i(10439),v=i(35429),g=i(4594),h=i(16714),I=i(12754),y=i(22902),f=i(65332),A=i(76196),P=i(59598),C=i(31908),E=i(26492),b=i(9465),V=i(91479),O=i(47938),F=i(81024),S=i(78166),x=i(99742),L=i(14070),G=i(97291),k=i(22490),R=i(63010),T=i(14476),w=i(53256),U=i(83345),q=i(13231),N=i(51365),M=i(10671),j=i(10741),_="shared.playClipV2";function W(e){var a=(0,y.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(U.x,{namespace:_,phrase:"clippedFrom"})),t.createElement(N.M.Provider,{value:i},t.createElement(q.E4,{videos:[e.originalVideo],yearGroups:e.yearGroups,setFavourite:e.setFavourite,canFavourite:e.canFavourite,getVideoAppLink:function(a,i){return k.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 B={main:"iQ0Ie",expandedToc:"sIoV8"};var D=function(e,a,i){return function(t){return i?{application:G.O.VIDEOS,action:L.e.Videos.PREVIEW_PDF,args:[t.id],params:{videoId:e,shareId:a}}:{application:G.O.SIGN_UP,action:L.e.SignUp.SIGN_UP}}};function H(e){var a,i,U,q,N,M,j,_,H,K,Q=(0,v.g)(),Y=(0,y.T)().hasPermissions,Z=C.M.getCanBeConsumed(e.clip).canConsume,J=(0,R.Q)(e.tableOfContentsId),$=J.tableOfContentsActiveId,z=J.setTableOfContentsActiveId,X=J.controlledId,ee=J.setControlledId,ae=J.tableOfContentsExpanded,ie=J.onToggleTableOfContents,te=(0,o.Wp)(e.clip)&&e.featureAccess.canViewGlance,ne=(0,T.i)(te),re=ne.headingRef,ce=ne.headingElements,se=ce.map((function(a){var i;return{id:a.id,name:w.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,f.D)({setActiveId:z,headingElements:ce,controlledId:X,setControlledId:ee}),(0,A.P)(ce,X);var oe=C.M.isVideoTypeArchived(e.clip),de=Y(h.C.StudentExperience),le=t.useRef(!1);function ue(){var e,a,i,t;le.current=!(null===(a=null===(e=null==Q?void 0:Q.playerRef)||void 0===e?void 0:e.current)||void 0===a?void 0:a.isPaused()),null===(t=null===(i=null==Q?void 0:Q.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==Q?void 0:Q.playerRef)||void 0===e?void 0:e.current)||void 0===a||a.play())}function me(){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(I.x.Primary)||de)}var ve="picture-in-picture"===Q.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":"")},t.createElement("main",{className:"".concat(B.main," ").concat(e.shouldShowSideTableOfContents&&ae?B.expandedToc:e.shouldShowSideTableOfContents&&!ae?"pe-4":void 0)},!!(null===(U=e.breadcrumbs)||void 0===U?void 0:U.length)&&t.createElement("div",{className:"mb-2"},t.createElement(r.Oo,{breadcrumbs:e.breadcrumbs})),t.createElement(O.W,{restrictions:e.clip._restrictions,yearGroups:e.yearGroups,objectId:e.clip.id,objectTypeId:g.E.Clip,canManageVideoAccess:e.canManageVideoAccess}),oe&&t.createElement(E.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(m.r,{key:e.clip.id,objectId:e.clip.id,objectTypeId:e.clip.typeId,shareId:e.shareId,context:null===(q=e.queryParams)||void 0===q?void 0:q.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===(K=e.queryParams)||void 0===K?void 0:K.startTime,mode:"default",location:"play-page"}),t.createElement("div",{className:ve?"":"d-none"},t.createElement(F.S,{video:e.clip,type:"pip"}))),t.createElement(V.v,{media:e.clip,yearGroups:e.yearGroups,audiences:e.audiences,originalVideoAppLink:me()?{application:G.O.VIDEOS,action:L.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=Q.playerRef.current)||void 0===a?void 0:a.currentTime(e)},getTagAppLink:function(e){return{application:G.O.SEARCH,action:L.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:G.O.SEARCH,action:L.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:x.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(c.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:G.O.SEARCH,action:L.e.Search.HOME,params:{tagOrClassification:e.name}}},headingRef:re,suppressInteractivity:e.featureAccess.canViewPublicLayout,showHeading:!0}),!!me()&&t.createElement(W,{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:k.W.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:k.W.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:k.W.getResourceGuidanceAppLink}),t.createElement(S.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 k.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(b.h,{isExpanded:ae,setIsExpanded:ie,items:se,activeId:$,setControlledId:ee,analyticsData:{clipId:e.clip.id,clipName:e.clip.name},showInSide:e.shouldShowSideTableOfContents}))}}}]);
2
- //# sourceMappingURL=6596-aa83b99b19-lite.chunk.js.map
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[696],{35348:(e,t,n)=>{n.d(t,{x:()=>o});var r=n(32735),i=n(10038);function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function o(){var e,t,n=r.useRef(null),o=r.useRef(0);r.useEffect((function(){n.current.clientHeight&&(o.current=n.current.clientHeight)}),[]);var c,l,u=(c=r.useState((null===(e=n.current)||void 0===e?void 0:e.scrollHeight)>o.current),l=2,function(e){if(Array.isArray(e))return e}(c)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,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}}(c,l)||function(e,t){if(e){if("string"==typeof e)return a(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)?a(e,t):void 0}}(c,l)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),s=u[0],d=u[1];return(0,i.H)((function(){var e;n.current.clientHeight&&(o.current=n.current.clientHeight,d((null===(e=n.current)||void 0===e?void 0:e.scrollHeight)>o.current))})),r.useEffect((function(){var e,t;(null===(e=n.current)||void 0===e?void 0:e.scrollHeight)&&d((null===(t=n.current)||void 0===t?void 0:t.scrollHeight)>o.current)}),[null===(t=n.current)||void 0===t?void 0:t.scrollHeight,o.current]),{containerRef:n,showButton:s}}},60696:(e,t,n)=>{n.r(t),n.d(t,{SeriesView:()=>ue});var r=n(32735),i=n(70680),a=n(23481),o=n(20354),c=n(65858),l=n(44522),u=n(49935),s=n(11607),d=n(83345),f=n(35348);const p={text:"wLJpg",seeMore:"x5t0p"};function v(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 m="shared.expandableText";function h(e){var t,n,i=e.text,a=e.lines,o=void 0===a?2:a,c=(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 v(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)?v(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.")}()),l=c[0],u=c[1],h=(0,f.x)(),y=h.containerRef,b=h.showButton;return r.createElement("div",{className:"d-flex overflow-hidden"},r.createElement("div",{className:"".concat(l?"":"clamp-".concat(o)," ").concat(p.text),ref:y},!l&&b&&r.createElement(s.L,{onClick:function(){return u(!0)},className:"ms-1 info-text hover-text-underline ".concat(p.seeMore)},r.createElement(d.x,{namespace:m,phrase:"seeMore"})),r.createElement("p",{className:"mb-0 d-inline"},i),l&&r.createElement(s.L,{onClick:function(){return u(!1)},className:"ms-1 info-text hover-text-underline d-inline"},r.createElement(d.x,{namespace:m,phrase:"seeLess"}))))}var y=n(71020),b=n(74696),g=n(13231),S=n(79718),E=n(7733),w=n(51365),k=n(16714),A=n(23788),x=n(21750),O=n(39151),I=n(1666),L=n(60011),j=n(31949),C=n(63719),P=n(56520),T=n(91286),N=n(60115),F=n(22902),H=n(79612),_=n(76753),R=n(35223),B=n(68140),G=n(14070),V=n(97291),M=n(64364);function U(e){return U="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},U(e)}function D(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,J(r.key),r)}}function J(e){var t=function(e,t){if("object"!=U(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=U(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==U(t)?t:t+""}function W(e,t,n){return t=Z(t),function(e,t){if(t&&("object"==U(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,Q()?Reflect.construct(t,n||[],Z(e).constructor):t.apply(e,n))}function Q(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Q=function(){return!!e})()}function Z(e){return Z=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Z(e)}function $(e,t){return $=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},$(e,t)}var K="shared.seriesNotFoundError",q=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),W(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&&$(e,t)}(t,e),n=t,(r=[{key:"name",get:function(){return"SeriesNotFoundError"}},{key:"heading",get:function(){return a.T.getPhrase(K,"heading")}},{key:"description",get:function(){return a.T.getPhrase(K,"description")}}])&&D(n.prototype,r),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r}(M.H),z=n(51855),X=n(10671),Y=n(7179),ee=n(27638),te=n(44110),ne=n(97816),re=n(10741),ie=n(33192),ae=n(22490),oe=n(82431),ce=a.T.encloseNamespace("shared.series"),le=function(e){return E.o[e.name.charCodeAt(0)%E.o.length]};function ue(e){var t,n,a,s,d=(0,i.I0)(),f=(0,ee.u)(c.LZ.VideoThumbnail),p=f.setFavourite,v=f.canFavourite,m=(0,F.T)(),E=m.hasPermissions,M=m.hasLocalPermissions,U=(0,z.G)().isPlugin,D=(0,P.R0)(),J=D.openInCurationStudioLabel,W=D.isUserCurator,Q=D.getOpenInCurationStudioLink;(0,Y.P)({id:e.id,app:"series",shareId:e.shareId});var Z=o.a.useBasicFetch(O.L.config()),$=o.a.useBasicFetch(j.N.currentUser()),K=o.a.useBasicFetch((null===(t=$.data)||void 0===t?void 0:t.isAuthenticated)&&I.h.yearGroups($.data.customerId)),ue=o.a.useBasicFetch(e.shareId?L.J.sharedSeries(e.id,e.shareId):L.J.series(e.id)),se=(0,te.i)();(0,H.M)(_.CG.getSeriesMetadata({content:ue.data,phraseContext:{phraseHandler:ce,titlePhrase:"pageTitle",descriptionPhrase:"pageDescription"},canonicalLink:ie.f.getCanonicalLink({stripPresentationSlug:!0}),allowIndexing:ie.f.allowIndexing()}));var de=(0,X._)({location:X.i.VideoItem,shareId:e.shareId}),fe=o.a.useBasicFetch(e.classificationId&&x.x.path(e.classificationId));function pe(e){return!ie.f.isBot()||!e}function ve(t){var n;return pe(t)?L.J.seriesVideos(e.id,null===(n=$.data)||void 0===n?void 0:n.id,he,t):null}function me(e){return o.a.getFetch(d)(ve(e))}var he=!!$.data&&B.d.getOrSetSortType($.data.id,e.sort,A.D.Series),ye={classificationId:e.classificationId,mtv:e.moviesAndTv},be=(0,N.K)(!!$.data&&ve,me),ge=be.items,Se=be.isFetching,Ee=be.nextCursor;(0,ne.V)(ge),(0,T.v)(ue,{notFound:q});var we=!E(k.C.StudentExperience)&&M(k.E.UseSeriesActions),ke=(0,C.h)({name:null===(n=ue.data)||void 0===n?void 0:n.name});return r.createElement(w.M.Provider,{value:de},r.createElement("div",{className:"px-3"},Z.data&&ue.data?r.createElement(l.p,{heading:ue.data.name,banner:ue.data.banner,imageCdnUrl:Z.data.imageCdnUrl,actions:function(){var e,t,n;if(U||!we)return[];var r=[{label:ce("share"),appLink:ue&&{application:V.O.DEFAULT,action:G.e.Default.SHARE,args:[null===(e=ue.data)||void 0===e?void 0:e.id],params:{entityType:"series"}},svgName:R.vn.Share2,className:"btn btn-outline-dark me-2",button:!0}];return W&&r.push({label:J,href:Q(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:le(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"},!ue.data||e.classificationId&&!fe.data?r.createElement(u.b2,null):r.createElement(u.Oo,{breadcrumbs:ke}),r.createElement("div",{className:"d-flex align-items-center"},(null===(s=ue.data)||void 0===s?void 0:s.description)&&r.createElement("div",{className:"mb-0 ".concat(e.classificationId?"pt-2":"")},r.createElement(h,{text:ue.data.description})),ue.data&&r.createElement("div",{className:"ms-auto"},r.createElement(S.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 oe.j.getSeriesAppLink(ue.data,Object.assign(Object.assign({},ye),{sort:e}))}})))),ge?r.createElement(r.Fragment,null,r.createElement(g.E4,{videos:ge,yearGroups:K.data,getVideoAppLink:e.getVideoAppLink,hasPermissions:E,getSubTextAppLink:function(e){return oe.j.getSeriesAppLink(null==e?void 0:e.series,Object.assign(Object.assign({},ye),{sort:he}))},setFavourite:p,canFavourite:v,presentationAudiences:e.moviesAndTv?null:se.data,getPreviewQuestionsAppLink:function(e){return re.j.getPreviewQuestionsAppLink(e)},isPlugin:U,getClassroomGuideAppLink:ae.W.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:ae.W.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:ae.W.getResourceGuidanceAppLink}),(Se||Ee)&&pe(Ee)&&r.createElement(y._,{isFetching:Se,fetchNext:me,nextCursor:Ee})):r.createElement(b.S,null))))}}}]);
2
- //# sourceMappingURL=696-2d01721d18-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/696-2d01721d18-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/hooks/useExpandableTextButton.ts","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/projects/lite/src/shared/errors/series/series-not-found/SeriesNotFoundError.ts","file:///app/packages/projects/lite/src/shared/views/series/SeriesView.tsx"],"sourcesContent":["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}","// extracted by mini-css-extract-plugin\nexport default {\"text\":\"wLJpg\",\"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 text: string;\n lines?: number;\n}\n\nconst namespace = 'shared.expandableText';\n\nexport function ExpandableText(props: ExpandableTextProps): JSX.Element {\n const { text, lines = 2 } = props;\n const [ expanded, setExpanded ] = React.useState(false);\n\n const { containerRef, showButton } = useExpandableTextButton();\n\n return (\n <div className='d-flex overflow-hidden'>\n <div className={`${expanded ? '' : `clamp-${lines}`} ${styles.text}`} ref={containerRef}>\n {(!expanded && showButton) && (\n <DivButton\n onClick={() => setExpanded(true)}\n className={`ms-1 info-text hover-text-underline ${styles.seeMore}`}\n >\n <Text namespace={namespace} phrase='seeMore' />\n </DivButton>\n )}\n <p className='mb-0 d-inline'>{text}</p>\n {expanded && (\n <DivButton\n onClick={() => setExpanded(false)}\n className={`ms-1 info-text hover-text-underline d-inline`}\n >\n <Text namespace={namespace} phrase='seeLess' />\n </DivButton>\n )}\n </div>\n </div>\n );\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}\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 (!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 text={series.data.description}/>\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":["useExpandableTextButton","containerRef","memoClientHeight","current","clientHeight","scrollHeight","showButton","setShowButton","namespace","ExpandableText","props","text","lines","expanded","setExpanded","className","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","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":""}