@clickview/lite 0.50.1-rc.0 → 0.50.1-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +2 -2
- package/dist/css/{1313-lite-b05099b818.chunk.css → 1313-lite-6b1a20b3fe.chunk.css} +1 -1
- package/dist/css/{1402-lite-9489903efd.chunk.css → 1402-lite-8a07733b96.chunk.css} +1 -1
- package/dist/css/{3588-lite-f083d46330.chunk.css → 1407-lite-be6668ef3a.chunk.css} +1 -1
- package/dist/css/{5725-lite-789978250c.chunk.css → 1539-lite-a5772fefdb.chunk.css} +1 -1
- package/dist/css/{5769-lite-16efb24b77.chunk.css → 1567-lite-2ab4d6f863.chunk.css} +1 -1
- package/dist/css/{1602-lite-90df7cca5c.chunk.css → 1602-lite-8fb6cea449.chunk.css} +1 -1
- package/dist/css/{9818-lite-dca6b9e86d.chunk.css → 1850-lite-e9e8c03964.chunk.css} +1 -1
- package/dist/css/{2446-lite-6b11bdfdc1.chunk.css → 2446-lite-dfc41ecbea.chunk.css} +1 -1
- package/dist/css/{9211-lite-f00eb0266e.chunk.css → 2507-lite-9516182bdb.chunk.css} +1 -1
- package/dist/css/{2724-lite-24da60896e.chunk.css → 2724-lite-669b5b8120.chunk.css} +1 -1
- package/dist/css/{3070-lite-c0909f46f3.chunk.css → 3070-lite-6af4bd0c76.chunk.css} +1 -1
- package/dist/css/{3397-lite-dfab7385b6.chunk.css → 3397-lite-5b25e3a686.chunk.css} +1 -1
- package/dist/css/{3403-lite-4b92798a0c.chunk.css → 3403-lite-89bcc16133.chunk.css} +1 -1
- package/dist/css/{458-lite-c8a3139b8b.chunk.css → 3515-lite-66473d08ed.chunk.css} +1 -1
- package/dist/css/{1407-lite-f083d46330.chunk.css → 3588-lite-be6668ef3a.chunk.css} +1 -1
- package/dist/css/{3895-lite-b05099b818.chunk.css → 3895-lite-6b1a20b3fe.chunk.css} +1 -1
- package/dist/css/{4151-lite-fcc0fc8753.chunk.css → 4151-lite-9cbe9bba57.chunk.css} +1 -1
- package/dist/css/{3515-lite-c8a3139b8b.chunk.css → 458-lite-66473d08ed.chunk.css} +1 -1
- package/dist/css/{5114-lite-38330c6187.chunk.css → 5114-lite-06a1ac179b.chunk.css} +1 -1
- package/dist/css/{5242-lite-58cdcd1ec4.chunk.css → 5242-lite-3e960b685e.chunk.css} +1 -1
- package/dist/css/{5364-lite-93bfe767eb.chunk.css → 5364-lite-e8c416fe79.chunk.css} +1 -1
- package/dist/css/{1539-lite-789978250c.chunk.css → 5725-lite-a5772fefdb.chunk.css} +1 -1
- package/dist/css/{6759-lite-16efb24b77.chunk.css → 5769-lite-2ab4d6f863.chunk.css} +1 -1
- package/dist/css/{5803-lite-d1315afce2.chunk.css → 5803-lite-625e484692.chunk.css} +1 -1
- package/dist/css/{5810-lite-ba174cfe3d.chunk.css → 5810-lite-1224500e4d.chunk.css} +1 -1
- package/dist/css/{6181-lite-7558375a74.chunk.css → 6181-lite-ca9f6aeba1.chunk.css} +1 -1
- package/dist/css/{6189-lite-4c33c1b5c4.chunk.css → 6189-lite-20e4d47423.chunk.css} +1 -1
- package/dist/css/{6309-lite-a23dc59ecd.chunk.css → 6309-lite-bd0968a2c8.chunk.css} +1 -1
- package/dist/css/{6531-lite-9431296610.chunk.css → 6531-lite-1f6f3c392c.chunk.css} +1 -1
- package/dist/css/{1567-lite-16efb24b77.chunk.css → 6759-lite-2ab4d6f863.chunk.css} +1 -1
- package/dist/css/{6803-lite-16efb24b77.chunk.css → 6803-lite-2ab4d6f863.chunk.css} +1 -1
- package/dist/css/{6850-lite-769c93cb9e.chunk.css → 6850-lite-c1a8731a93.chunk.css} +1 -1
- package/dist/css/{7533-lite-d0ae59ec54.chunk.css → 7533-lite-206fce5dbd.chunk.css} +1 -1
- package/dist/css/{7777-lite-8067dea624.chunk.css → 7777-lite-48d916f95c.chunk.css} +1 -1
- package/dist/css/{8218-lite-fe8c54917b.chunk.css → 8218-lite-f54139cf27.chunk.css} +1 -1
- package/dist/css/{8316-lite-9083a6565c.chunk.css → 8316-lite-6036f465f0.chunk.css} +1 -1
- package/dist/css/{8354-lite-bc431d9d01.chunk.css → 8354-lite-8228cb401d.chunk.css} +1 -1
- package/dist/css/{8987-lite-95b3d79328.chunk.css → 8987-lite-6cd15b48d2.chunk.css} +1 -1
- package/dist/css/{9068-lite-c0341005e4.chunk.css → 9068-lite-c3a9ace963.chunk.css} +1 -1
- package/dist/css/{2507-lite-f00eb0266e.chunk.css → 9211-lite-9516182bdb.chunk.css} +1 -1
- package/dist/css/{9329-lite-a259b19412.chunk.css → 9329-lite-5f15379e31.chunk.css} +1 -1
- package/dist/css/{9417-lite-9083a6565c.chunk.css → 9417-lite-6036f465f0.chunk.css} +1 -1
- package/dist/css/{1850-lite-dca6b9e86d.chunk.css → 9818-lite-e9e8c03964.chunk.css} +1 -1
- package/dist/css/{lite-app-28b7b96628.css → lite-app-212404ee3a.css} +1 -1
- package/dist/scripts/{1313-455608bc46-lite.chunk.js → 1313-5a7170fb69-lite.chunk.js} +1 -1
- package/dist/scripts/{1313-455608bc46-lite.chunk.js.map → 1313-5a7170fb69-lite.chunk.js.map} +1 -1
- package/dist/scripts/{1402-d40dc88741-lite.chunk.js → 1402-39cb29d725-lite.chunk.js} +1 -1
- package/dist/scripts/{1402-d40dc88741-lite.chunk.js.map → 1402-39cb29d725-lite.chunk.js.map} +1 -1
- package/dist/scripts/{1407-3592ec24f2-lite.chunk.js → 1407-3bab3f00f6-lite.chunk.js} +1 -1
- package/dist/scripts/{1407-3592ec24f2-lite.chunk.js.map → 1407-3bab3f00f6-lite.chunk.js.map} +1 -1
- package/dist/scripts/{1567-edcff759b1-lite.chunk.js → 1567-b3141bc14f-lite.chunk.js} +1 -1
- package/dist/scripts/{1567-edcff759b1-lite.chunk.js.map → 1567-b3141bc14f-lite.chunk.js.map} +1 -1
- package/dist/scripts/{1602-173a4f272a-lite.chunk.js → 1602-dfe6928d65-lite.chunk.js} +1 -1
- package/dist/scripts/{1602-173a4f272a-lite.chunk.js.map → 1602-dfe6928d65-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2446-acc94130ed-lite.chunk.js → 2446-eaa1d2ee7d-lite.chunk.js} +2 -2
- package/dist/scripts/{2446-acc94130ed-lite.chunk.js.map → 2446-eaa1d2ee7d-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2507-bb4e17b1b3-lite.chunk.js → 2507-fc744cab62-lite.chunk.js} +1 -1
- package/dist/scripts/{2507-bb4e17b1b3-lite.chunk.js.map → 2507-fc744cab62-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2724-ee3a51e0c9-lite.chunk.js → 2724-060fdde41c-lite.chunk.js} +1 -1
- package/dist/scripts/{2724-ee3a51e0c9-lite.chunk.js.map → 2724-060fdde41c-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3070-fb8eb47716-lite.chunk.js → 3070-b148205227-lite.chunk.js} +1 -1
- package/dist/scripts/{3070-fb8eb47716-lite.chunk.js.map → 3070-b148205227-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3397-bb32e2287f-lite.chunk.js → 3397-cd6acb96c4-lite.chunk.js} +1 -1
- package/dist/scripts/{3397-bb32e2287f-lite.chunk.js.map → 3397-cd6acb96c4-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3403-12c460d3f6-lite.chunk.js → 3403-d42b7125ae-lite.chunk.js} +1 -1
- package/dist/scripts/{3403-12c460d3f6-lite.chunk.js.map → 3403-d42b7125ae-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3515-4de2fd7070-lite.chunk.js → 3515-0d5feefbe3-lite.chunk.js} +1 -1
- package/dist/scripts/{3515-4de2fd7070-lite.chunk.js.map → 3515-0d5feefbe3-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3588-62e61bc526-lite.chunk.js → 3588-1c1c264291-lite.chunk.js} +2 -2
- package/dist/scripts/{3588-62e61bc526-lite.chunk.js.map → 3588-1c1c264291-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3895-a54621a8c4-lite.chunk.js → 3895-cbeb003a0a-lite.chunk.js} +1 -1
- package/dist/scripts/{3895-a54621a8c4-lite.chunk.js.map → 3895-cbeb003a0a-lite.chunk.js.map} +1 -1
- package/dist/scripts/{4151-ad0c6f107f-lite.chunk.js → 4151-bb1e8aafcb-lite.chunk.js} +1 -1
- package/dist/scripts/{4151-ad0c6f107f-lite.chunk.js.map → 4151-bb1e8aafcb-lite.chunk.js.map} +1 -1
- package/dist/scripts/{458-35c635a2ce-lite.chunk.js → 458-e3aaac093b-lite.chunk.js} +1 -1
- package/dist/scripts/{458-35c635a2ce-lite.chunk.js.map → 458-e3aaac093b-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5114-fcfd260e0b-lite.chunk.js → 5114-15c4180b16-lite.chunk.js} +1 -1
- package/dist/scripts/{5114-fcfd260e0b-lite.chunk.js.map → 5114-15c4180b16-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5242-2d752ff85e-lite.chunk.js → 5242-e2f40bdd0e-lite.chunk.js} +1 -1
- package/dist/scripts/{5242-2d752ff85e-lite.chunk.js.map → 5242-e2f40bdd0e-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5364-b081f5e1ca-lite.chunk.js → 5364-fe4a00711f-lite.chunk.js} +1 -1
- package/dist/scripts/{5364-b081f5e1ca-lite.chunk.js.map → 5364-fe4a00711f-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5725-6792ca3e92-lite.chunk.js → 5725-1592727a8f-lite.chunk.js} +1 -1
- package/dist/scripts/{5725-6792ca3e92-lite.chunk.js.map → 5725-1592727a8f-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5769-34ad224f5f-lite.chunk.js → 5769-e9f596e2b2-lite.chunk.js} +1 -1
- package/dist/scripts/{5769-34ad224f5f-lite.chunk.js.map → 5769-e9f596e2b2-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5803-0005a9eb66-lite.chunk.js → 5803-7db6af5411-lite.chunk.js} +1 -1
- package/dist/scripts/{5803-0005a9eb66-lite.chunk.js.map → 5803-7db6af5411-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5810-a652483b8e-lite.chunk.js → 5810-c81d69aea8-lite.chunk.js} +2 -2
- package/dist/scripts/{5810-a652483b8e-lite.chunk.js.map → 5810-c81d69aea8-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6102-f1851eca08-lite.chunk.js → 6102-38e3abf2fa-lite.chunk.js} +3 -3
- package/dist/scripts/{6102-f1851eca08-lite.chunk.js.map → 6102-38e3abf2fa-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6181-7a4fc8e1e1-lite.chunk.js → 6181-55d2689d74-lite.chunk.js} +1 -1
- package/dist/scripts/{6181-7a4fc8e1e1-lite.chunk.js.map → 6181-55d2689d74-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6189-ce9f0eeb31-lite.chunk.js → 6189-b45080fab7-lite.chunk.js} +1 -1
- package/dist/scripts/{6189-ce9f0eeb31-lite.chunk.js.map → 6189-b45080fab7-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6309-dd3a8e7f21-lite.chunk.js → 6309-36ea0c9f2c-lite.chunk.js} +2 -2
- package/dist/scripts/{6309-dd3a8e7f21-lite.chunk.js.map → 6309-36ea0c9f2c-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6415-9d8b88c713-lite.chunk.js → 6415-5ac1a71471-lite.chunk.js} +1 -1
- package/dist/scripts/{6415-9d8b88c713-lite.chunk.js.map → 6415-5ac1a71471-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6531-597262a181-lite.chunk.js → 6531-1325be9fb1-lite.chunk.js} +1 -1
- package/dist/scripts/{6531-597262a181-lite.chunk.js.map → 6531-1325be9fb1-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6759-3f36472a49-lite.chunk.js → 6759-a7e1119553-lite.chunk.js} +1 -1
- package/dist/scripts/{6759-3f36472a49-lite.chunk.js.map → 6759-a7e1119553-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6803-2275c83d96-lite.chunk.js → 6803-222bfeea55-lite.chunk.js} +1 -1
- package/dist/scripts/{6803-2275c83d96-lite.chunk.js.map → 6803-222bfeea55-lite.chunk.js.map} +1 -1
- package/dist/scripts/6850-16bec85d3c-lite.chunk.js +3 -0
- package/dist/scripts/6850-16bec85d3c-lite.chunk.js.map +1 -0
- package/dist/scripts/{6948-84a5f8d76f-lite.chunk.js → 6948-23ec6a6370-lite.chunk.js} +2 -2
- package/dist/scripts/6948-23ec6a6370-lite.chunk.js.map +1 -0
- package/dist/scripts/{7533-e079b2af18-lite.chunk.js → 7533-9edee544c6-lite.chunk.js} +1 -1
- package/dist/scripts/{7533-e079b2af18-lite.chunk.js.map → 7533-9edee544c6-lite.chunk.js.map} +1 -1
- package/dist/scripts/{7777-f0937ef1f5-lite.chunk.js → 7777-1c3490134e-lite.chunk.js} +1 -1
- package/dist/scripts/{7777-f0937ef1f5-lite.chunk.js.map → 7777-1c3490134e-lite.chunk.js.map} +1 -1
- package/dist/scripts/{8218-f3b81c7287-lite.chunk.js → 8218-088530bdf7-lite.chunk.js} +1 -1
- package/dist/scripts/{8218-f3b81c7287-lite.chunk.js.map → 8218-088530bdf7-lite.chunk.js.map} +1 -1
- package/dist/scripts/8316-ba6bae1f29-lite.chunk.js +2 -0
- package/dist/scripts/8316-ba6bae1f29-lite.chunk.js.map +1 -0
- package/dist/scripts/{8354-e30261b594-lite.chunk.js → 8354-d07c3bef5a-lite.chunk.js} +1 -1
- package/dist/scripts/{8354-e30261b594-lite.chunk.js.map → 8354-d07c3bef5a-lite.chunk.js.map} +1 -1
- package/dist/scripts/{8987-32190552fa-lite.chunk.js → 8987-c0c2790aab-lite.chunk.js} +1 -1
- package/dist/scripts/{8987-32190552fa-lite.chunk.js.map → 8987-c0c2790aab-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9068-562c30f718-lite.chunk.js → 9068-554aa0d22b-lite.chunk.js} +1 -1
- package/dist/scripts/{9068-562c30f718-lite.chunk.js.map → 9068-554aa0d22b-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9211-d4c7016679-lite.chunk.js → 9211-0381d3e715-lite.chunk.js} +1 -1
- package/dist/scripts/{9211-d4c7016679-lite.chunk.js.map → 9211-0381d3e715-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9329-5cf6baab9d-lite.chunk.js → 9329-798d826fc4-lite.chunk.js} +1 -1
- package/dist/scripts/{9329-5cf6baab9d-lite.chunk.js.map → 9329-798d826fc4-lite.chunk.js.map} +1 -1
- package/dist/scripts/9417-aa8d198d40-lite.chunk.js +2 -0
- package/dist/scripts/9417-aa8d198d40-lite.chunk.js.map +1 -0
- package/dist/scripts/{9818-f63bdbbac4-lite.chunk.js → 9818-a2fa140139-lite.chunk.js} +1 -1
- package/dist/scripts/{9818-f63bdbbac4-lite.chunk.js.map → 9818-a2fa140139-lite.chunk.js.map} +1 -1
- package/dist/scripts/bundle-bb2e18c8ca.min.js +3 -0
- package/dist/scripts/{bundle-d20cb66d1a.min.js.map → bundle-bb2e18c8ca.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/6850-8770bfeefb-lite.chunk.js +0 -3
- package/dist/scripts/6850-8770bfeefb-lite.chunk.js.map +0 -1
- package/dist/scripts/6948-84a5f8d76f-lite.chunk.js.map +0 -1
- package/dist/scripts/8316-dad1824a5f-lite.chunk.js +0 -2
- package/dist/scripts/8316-dad1824a5f-lite.chunk.js.map +0 -1
- package/dist/scripts/9417-70c6489c67-lite.chunk.js +0 -2
- package/dist/scripts/9417-70c6489c67-lite.chunk.js.map +0 -1
- package/dist/scripts/bundle-d20cb66d1a.min.js +0 -3
- /package/dist/scripts/{2446-acc94130ed-lite.chunk.js.LICENSE.txt → 2446-eaa1d2ee7d-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{3588-62e61bc526-lite.chunk.js.LICENSE.txt → 3588-1c1c264291-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{5810-a652483b8e-lite.chunk.js.LICENSE.txt → 5810-c81d69aea8-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6102-f1851eca08-lite.chunk.js.LICENSE.txt → 6102-38e3abf2fa-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6309-dd3a8e7f21-lite.chunk.js.LICENSE.txt → 6309-36ea0c9f2c-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6850-8770bfeefb-lite.chunk.js.LICENSE.txt → 6850-16bec85d3c-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-d20cb66d1a.min.js.LICENSE.txt → bundle-bb2e18c8ca.min.js.LICENSE.txt} +0 -0
package/dist/scripts/{1402-d40dc88741-lite.chunk.js.map → 1402-39cb29d725-lite.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/1402-d40dc88741-lite.chunk.js","mappings":"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","sources":["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/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/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/libs/shared/src/hooks/UseInfiniteScroll.ts","file:///app/packages/libs/shared/src/hooks/UseInfiniteList.ts","file:///app/packages/projects/lite/src/apps/watch-history/flight-requests/VideoHistoryRequests.ts","file:///app/packages/projects/lite/src/apps/watch-history/components/watch-history-video-list/WatchHistoryVideoList.tsx","file:///app/packages/projects/lite/src/apps/watch-history/views/watch-history/empty-state/WatchHistoryEmptyState.tsx","file:///app/packages/projects/lite/src/apps/watch-history/views/watch-history/partial-loading/partial-watch-history.scss","file:///app/packages/projects/lite/src/apps/watch-history/views/watch-history/partial-loading/PartialWatchHistory.tsx","file:///app/packages/projects/lite/src/apps/watch-history/views/watch-history/WatchHistoryView.tsx","file:///app/packages/projects/lite/src/shared/hooks/usePresentationAudiences.ts","file:///app/packages/projects/lite/src/shared/hooks/useVideoMixin.ts"],"sourcesContent":["// 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}","// extracted by mini-css-extract-plugin\nexport default {\"partialOptions\":\"Gufgq\",\"partialName\":\"SicQQ\",\"partialDescription\":\"dPGMq\",\"partialThumbnail\":\"vZrnb\",\"partialDragHandle\":\"iq73R\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { VideoListHelper } from 'libs/shared/components/video-list/VideoListHelper';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport styles from './partial-video-list.scss';\n\ninterface PartialVideoListProps {\n withReordering?: boolean;\n numVideos?: number;\n allowBulkActions?: boolean;\n}\n\nPartialVideoList.defaultProps = {\n numVideos: 15\n};\n\nexport function PartialVideoList(props: PartialVideoListProps): JSX.Element {\n return (\n <div className='mx-2'>\n {Array(props.numVideos).fill(null).map((_, i) => (\n <div className='d-flex' key={i}>\n {props.allowBulkActions && <div className='form-check pe-3 pe-sm-2 mx-0 mx-md-2' />}\n <PartialVideoItem {...props} />\n </div>\n ))}\n </div>\n );\n}\n\nexport function PartialVideoItem(props: PartialVideoListProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n const size = VideoListHelper.getSize(breakpoints, 'md');\n const isSmall = size === 'sm';\n\n const withDragHandle = props.withReordering && !breakpoints.xs;\n\n return (\n <Row className={`${isSmall ? '' : 'py-2'} flex-grow-1`}>\n <Col {...VideoListHelper.getThumbnailColumns()} className={`flex-column align-items-flex-start ${isSmall ? `pb-2 pe-1` : 'mb-1 pe-3 pe-md-2'}`}>\n <Row>\n {!!withDragHandle && (\n <div className='d-flex align-items-center justify-content-center col-2'>\n <div className={`partial-loading-background ${styles.partialDragHandle}`} />\n </div>\n )}\n <Col xs={VideoListHelper.getThumbnailColSize(withDragHandle)}>\n <div className={`partial-loading-background ${isSmall ? 'rounded' : 'rounded-3'} ${styles.partialThumbnail}`} />\n </Col>\n </Row>\n </Col>\n <Col {...VideoListHelper.getDetailsColumns()} className={isSmall ? 'pb-2' : 'px-2'}>\n <div className={`partial-loading-background mb-1 ${styles.partialName}`} />\n <div className={`partial-loading-background ${styles.partialDescription}`} />\n </Col>\n </Row>\n );\n}\n\n","import { 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 React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { Flight } from 'libs/common/flight';\nimport { ApplicationState, HashObject } from 'libs/common/react/interfaces';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nexport interface UseBatchFetchResult<T extends BaseObject> {\n items: { [key: string]: T} | null;\n isFetching: boolean;\n}\n\n/**\n * Used to fetch multiple items by id with Flight. Will fetch 25 items at a time firing off multiple\n * requests if there are more than 25 items.\n * This will return items as null until we have all our items. Items will be returned as an object with\n * their ids as they key for easy mapping\n * \n * @param itemIds \n * @param getRequest \n */\nexport function useBatchFetch<T extends BaseObject>(\n itemIds: string[],\n getRequest: (ids: string[]) => Flight.Request\n): UseBatchFetchResult<T> {\n const [ idBatches, setIdBatches ] = React.useState<string[][]>([]);\n\n React.useEffect(() => {\n if (!itemIds?.length)\n return;\n\n const newBatches = [...idBatches];\n newBatches.push([]);\n\n itemIds.forEach(id => {\n if (newBatches.find(batch => batch.find(_id => _id === id)))\n return;\n\n newBatches[newBatches.length - 1].push(id);\n });\n\n setIdBatches(newBatches.filter(batch => batch.length));\n }, [itemIds ? itemIds.join(',') : null]);\n\n const dispatch = useDispatch();\n\n const state = useSelector((state: ApplicationState) => state);\n\n React.useEffect(() => {\n idBatches.forEach(idBatch => {\n const request = getRequest(idBatch);\n const response = Flight.getResponse<T[]>(state, request.key);\n\n if (response.shouldFetch)\n Flight.fetch(dispatch, request);\n });\n }, [idBatches?.length]);\n\n if (!idBatches?.length)\n return { items: null, isFetching: false };\n \n const items: { [key: string]: T} = {};\n\n /* Used locally to only return our items if we've fetched all of them */\n const responses: HashObject<Flight.Response<T[]>> = {};\n \n idBatches.forEach((idBatch, i) => {\n const request = getRequest(idBatch);\n const response = Flight.getResponse<T[]>(state, request.key);\n responses[i] = response;\n\n if (response.data)\n response.data.forEach(v => items[v.id] = v);\n });\n\n return {\n items: Object.keys(responses).some(k => !!responses[k].data) ? items : null,\n isFetching: !!Object.keys(responses).some(k => responses[k].isFetching)\n };\n}","import { useEffect } from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nconst SCROLL_TOLERANCE = 400; // value in px\n\ninterface UseInfiniteScrollOptions {\n fetchNextPage: () => void;\n hasMore: boolean;\n isFetching: boolean;\n scrollContainer?: HTMLElement;\n}\n\nexport function useInfiniteScroll(options: UseInfiniteScrollOptions): void {\n const handleScroll = (): void => {\n if (options.isFetching)\n return;\n\n if (!options.scrollContainer) {\n const currentScrollHeight = window.innerHeight + document.documentElement.scrollTop;\n \n const totalHeight = document.documentElement.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n } else {\n const { scrollContainer } = options;\n const currentScrollHeight = scrollContainer.getBoundingClientRect().height + scrollContainer.scrollTop;\n \n const totalHeight = scrollContainer.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n }\n\n options.fetchNextPage();\n };\n\n useEffect(() => {\n const onScroll = FunctionHelper.throttle(handleScroll, 200);\n\n const scrollContainer = options.scrollContainer || window;\n\n if (options.hasMore)\n scrollContainer.addEventListener('scroll', onScroll);\n\n return () => scrollContainer.removeEventListener('scroll', onScroll);\n }, [ options.hasMore, options.fetchNextPage, options.scrollContainer ]);\n}","import { useEffect, useState } from 'react';\n\nimport { HttpStatus, HttpStatusClass } from 'libs/common/backbone/enums/HttpStatus';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { BaseObject, BasePaginatedCollection } from 'libs/shared/interfaces';\n\nimport { useInfiniteScroll } from './UseInfiniteScroll';\nimport { useSelectAllPages } from './UseSelectAllPages';\n\nexport interface UseInfiniteListResult<T extends BaseObject> {\n items: T[];\n hasMore: boolean;\n isFetching: boolean;\n nextCursor: string;\n totalItems?: number;\n hasFirstPageCompleted: boolean;\n}\n\n/**\n * Hook to extract an infinite list from the application state,\n * save it locally in state and only update when new data\n * is fetched.\n * \n * @param getRequest - callback function to get the request for each page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n * \n * @param fetchNext - callback function to fetch a page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n */\nexport function useInfiniteList<TObject = BaseObject, TResponse = BasePaginatedCollection<TObject>>(\n getRequest: ((cursor?: string) => Flight.Request) | false,\n fetchNext: ((cursor?: string) => void) | false,\n onError?: (pageNumber: number, statusCode: HttpStatus) => void,\n getItems?: (responseData: TResponse) => TObject[],\n getCursor?: (responseData: TResponse) => string,\n scrollContainer?: HTMLElement\n): UseInfiniteListResult<TObject> {\n const [ pagesFetched, setPagesFetched ] = useState(0);\n\n const fetchNextFn = fetchNext as (cursor?: string) => void;\n\n function getKey(cursor?: string): string {\n if (!getRequest)\n return null;\n\n const request = getRequest(cursor);\n\n if (!request)\n return null;\n\n return request.key;\n }\n\n const response = useSelectAllPages<TObject, TResponse>(\n getKey,\n getItems,\n getCursor\n );\n\n function fetchNextPage(): void {\n if (!fetchNext || !getRequest || !response)\n return;\n\n setPagesFetched(currentVal => currentVal + 1);\n return fetchNextFn(response.nextCursor);\n }\n\n useInfiniteScroll({\n fetchNextPage,\n hasMore: !!response?.nextCursor,\n isFetching: response?.isFetching,\n scrollContainer\n });\n\n useEffect(() => {\n if (!response)\n return;\n\n if (response.shouldInitialFetch && fetchNext) {\n fetchNextFn();\n setPagesFetched(currentVal => currentVal + 1);\n }\n }, [ response?.shouldInitialFetch, fetchNext ]);\n\n useEffect(() => {\n if (!response?.statusCode || !FunctionHelper.isFunction(onError))\n return;\n\n const httpStatusClass: HttpStatusClass = +(response.statusCode?.toString()?.substr(0, 1));\n\n if (httpStatusClass !== HttpStatusClass.ClientError && httpStatusClass !== HttpStatusClass.ServerError)\n return;\n\n onError(pagesFetched, response.statusCode);\n }, [response?.statusCode]);\n\n return {\n items: response?.items,\n hasMore: !!response?.nextCursor,\n nextCursor: response?.nextCursor,\n isFetching: response?.isFetching,\n totalItems: response?.totalItems,\n hasFirstPageCompleted: response?.hasFirstPageCompleted\n };\n}","\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { VideoHistoryCollection } from 'libs/shared/interfaces';\n\nexport const VideoHistoryRequests = {\n userVideoHistory(\n cursor?: string,\n success?: (data: HashObject) => void,\n error?: (Xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n let key = 'video:history';\n let url = `{gateway}/v1/users/me/watch-history`;\n\n if (cursor) {\n key += `:${cursor}`;\n url += `?cursor=${cursor}`;\n }\n\n return {\n key,\n url,\n formatData: (historyCollection: VideoHistoryCollection) => {\n return {\n data: historyCollection.data.map(historyData => {\n // Convert last watched times from UTC to local time\n const lastTimeWatchedLocal = DateHelper.format(historyData.lastTimeWatched);\n const lastDateWatchedLocal = DateHelper.format(lastTimeWatchedLocal, 'YYYY-MM-DD');\n\n return {\n ...historyData,\n lastTimeWatched: lastTimeWatchedLocal,\n lastDateWatched: lastDateWatchedLocal\n };\n }),\n pagination: historyCollection.pagination\n };\n },\n success,\n error,\n always\n };\n },\n\n videoHistory(\n ids: string[],\n namespace?: string,\n success?: (data: HashObject) => void,\n error?: (Xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n const params = ids.sort().map(i => `videoId=${i}`);\n\n return {\n key: `video:history:videos:${params.join('&')}`,\n url: `{gateway}/v1/videos/history?${params.join('&')}`,\n normalizeOptions: {\n namespace\n },\n formatData: (historyCollection: HashObject[]) => {\n if (!historyCollection?.length)\n return historyCollection;\n\n /**\n * Data is formatted to enable it to be merged with the existing video object in the store\n * Where we need to merge more history properties with the video object, map them below.\n */\n return historyCollection.map((watchHistory: HashObject) => ({\n id: watchHistory.videoId,\n lastProgressPoint: watchHistory.lastProgressPoint\n }));\n },\n success,\n error,\n always\n };\n }\n};","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { CanFavouriteFunc, FavouriteFunc, PresentationAudience, VideoHistory, VideoTypes, YearGroup } from 'libs/shared/interfaces';\n\nimport { InteractiveHelpers } from 'shared/utils/InteractiveHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nconst namespace = 'watchHistory.watchHistoryVideoList';\n\nfunction formatDate(date: string): string {\n const diff = DateHelper.timeSince(new Date(date), 'day');\n\n if (diff === 0)\n return LanguageService.getPhrase(namespace, 'today');\n\n if (diff === 1)\n return LanguageService.getPhrase(namespace, 'yesterday');\n\n return DateHelper.format(date, 'Do MMMM');\n}\n\ninterface WatchHistoryVideoListProps {\n videoHistory: VideoHistory[];\n videos: VideoTypes[];\n yearGroups: YearGroup[];\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n presentationAudiences?: PresentationAudience[];\n imageCdnUrl?: string;\n isPlugin: boolean;\n}\n\nexport function WatchHistoryVideoList(props: WatchHistoryVideoListProps): JSX.Element {\n const { hasPermissions } = usePermissions();\n\n const historyGroups = ArrayHelper.groupBy(props.videoHistory, 'lastDateWatched');\n\n const videoGroups: { [index: string]: VideoTypes[] } = {};\n\n const sortedDates = Object.keys(historyGroups).sort().reverse();\n\n // Map video history to video objects and mixin lastProgressPoint\n sortedDates.forEach(date => {\n videoGroups[date] = historyGroups[date].map(history => {\n const video = props.videos.find(v => v.id.toString() === history.videoId.toString());\n\n if (!video)\n return null;\n\n return {\n ...video,\n lastProgressPoint: history.lastProgressPoint\n };\n }).filter(Boolean);\n });\n\n const sortedDatesGroupCount = sortedDates.reduce((dateCounts: HashObject, currentDate: string) => {\n const dateTotal = videoGroups[currentDate].length;\n const runningTotal = dateTotal + (dateCounts.runningTotal ?? 0);\n\n return {\n ...dateCounts,\n runningTotal,\n [currentDate]: runningTotal - dateTotal\n };\n }, {});\n\n return (\n <>\n {sortedDates.map(date => {\n // TODO: Fix bug where watch history endpoint returns workspace videos that cannot be fetched/displayed.\n // This is caused by 1 user sharing their workspace video with another user.\n if (!videoGroups[date].length)\n return <React.Fragment key={date}></React.Fragment>;\n\n return (\n <div key={date} className='pb-3'>\n <h2 className='h4'>{formatDate(date)}</h2>\n <VideoList\n videos={videoGroups[date]}\n yearGroups={props.yearGroups}\n getVideoAppLink={VideoAppLinkHelper.getAppLink}\n getSubTextAppLink={video => SeriesAppLinkHelper.getSeriesAppLink(video.series)}\n hasPermissions={hasPermissions}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n startingPositionIndex={sortedDatesGroupCount[date]}\n presentationAudiences={props.presentationAudiences}\n getPreviewQuestionsAppLink={interactive => InteractiveHelpers.getPreviewQuestionsAppLink(interactive)}\n imageCdnUrl={props.imageCdnUrl}\n isPlugin={props.isPlugin}\n getClassroomGuideAppLink={VideoAppLinkHelper.getClassroomGuideAppLink}\n getInteractiveGuidanceAppLink={VideoAppLinkHelper.getInteractiveGuidanceAppLink}\n getResourceGuidanceAppLink={VideoAppLinkHelper.getResourceGuidanceAppLink}\n />\n </div>\n );\n })}\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, SignUpDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'watchHistory.watchHistoryEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function WatchHistoryEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.WATCH_HISTORY} altText={getPhrase('info')} />\n\n <EmptyState.Heading><Text phrase='heading' /></EmptyState.Heading>\n <EmptyState.Info><Text phrase='info' /></EmptyState.Info>\n\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'cta')}\n appLink={{\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.HOME\n }}\n />\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n\nexport function WatchHistoryPublicEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.WATCH_HISTORY_PUBLIC} altText={getPhrase('publicInfo')}/>\n <EmptyState.Heading><Text phrase='publicHeading' /></EmptyState.Heading>\n <EmptyState.Info><Text phrase='publicInfo' /></EmptyState.Info>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'publicCta')}\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n }}\n analyticsData={{}}\n analyticsOptions={{\n actionType: UserAction.Click,\n location: LocationContext.WatchHistoryLanding,\n entity: EntityType.AppLink,\n workflowPhase: WorkflowPhase.Start,\n descriptor: SignUpDescriptors.SignUp\n }}\n />\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialDate\":\"vq4eE\"};","import React from 'react';\n\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\n\nimport styles from './partial-watch-history.scss';\n\nexport function PartialWatchHistory(): JSX.Element {\n return (\n <>\n <div className='mb-3'>\n <div className={`${styles.partialDate} mb-2 partial-loading-background`} />\n <PartialVideoList numVideos={2} />\n </div>\n\n <div className='mb-3'>\n <div className={`${styles.partialDate} mb-2 partial-loading-background`} />\n <PartialVideoList numVideos={3} />\n </div>\n\n <div className='mb-3'>\n <div className={`${styles.partialDate} mb-2 partial-loading-background`} />\n <PartialVideoList numVideos={2} />\n </div>\n\n <div className='mb-3'>\n <div className={`${styles.partialDate} mb-2 partial-loading-background`} />\n <PartialVideoList numVideos={5} />\n </div>\n </>\n );\n}","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { LocalPermissionName } from 'libs/shared/enums/PermissionName';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, CurrentUser, VideoHistory, YearGroup } from 'libs/shared/interfaces';\n\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { usePresentationAudiences } from 'shared/hooks/usePresentationAudiences';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\n\nimport { WatchHistoryVideoList } from 'apps/watch-history/components/watch-history-video-list/WatchHistoryVideoList';\nimport { VideoHistoryRequests } from 'apps/watch-history/flight-requests/VideoHistoryRequests';\n\nimport { WatchHistoryEmptyState, WatchHistoryPublicEmptyState } from './empty-state/WatchHistoryEmptyState';\nimport { PartialWatchHistory } from './partial-loading/PartialWatchHistory';\n\nconst namespace = 'watchHistory.watchHistory';\n\nexport function WatchHistoryView(): JSX.Element {\n useSetPageMetadata({ title: LanguageService.getPhrase(namespace, 'pageTitle') });\n const dispatch = useDispatch();\n const alerts = useAlerts();\n const { hasLocalPermissions } = usePermissions();\n\n const { setFavourite, canFavourite } = useLiteFavourites(LocationContext.VideoThumbnail);\n const { isPlugin } = usePluginHelper();\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem });\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const getUserVideoHistoryRequest = (cursor?: string) => {\n return VideoHistoryRequests.userVideoHistory(cursor);\n };\n\n const fetchNext = (cursor?: string) => {\n return Flight.getFetch(dispatch)(getUserVideoHistoryRequest(cursor));\n };\n\n const shouldFetch = !hasLocalPermissions(LocalPermissionName.ViewWatchHistoryLanding) && currentUser.hasCompleted;\n\n const {\n items: videoHistory,\n hasMore,\n isFetching\n } = useInfiniteList<VideoHistory>(shouldFetch ? getUserVideoHistoryRequest : false, fetchNext, onError);\n\n function onError(pageNumber: number, httpStatus: HttpStatus): void {\n if (pageNumber === 1)\n return handleHttpError(httpStatus);\n\n alerts.error(LanguageService.getPhrase(namespace, 'error'));\n }\n\n const videoIds = videoHistory?.map(v => v.videoId) ?? [];\n\n const videosFetchResult = useBatchFetch(videoIds, (ids: string[]) => {\n return VideoRequests.watchHistoryVideos(ids);\n });\n\n const videosMap = videosFetchResult.items ?? {};\n\n const videos = Object.keys(videosMap).map(id => videosMap[id]);\n\n useVideoMixin(videos);\n \n const audiences = usePresentationAudiences();\n\n if (hasLocalPermissions(LocalPermissionName.ViewWatchHistoryLanding))\n return <WatchHistoryPublicEmptyState />;\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <div className='px-3'>\n <h1 className='h2'><Text phrase='heading' /></h1>\n {(() => {\n if (!videoHistory)\n return <PartialWatchHistory />;\n\n if (!videoHistory.length)\n return <WatchHistoryEmptyState />;\n\n if (!videos.length)\n return <PartialWatchHistory />;\n\n return (\n <VideoActionsContext.Provider value={videoActions}>\n <WatchHistoryVideoList\n videoHistory={videoHistory}\n videos={videos}\n presentationAudiences={audiences.data}\n yearGroups={yearGroups.data}\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n imageCdnUrl={config.data?.imageCdnUrl}\n isPlugin={isPlugin}\n />\n {(hasMore || isFetching) && <InfiniteScrollFooter isFetching={isFetching} fetchNext={fetchNext} />}\n </VideoActionsContext.Provider>\n );\n })()}\n </div>\n </LanguageNamespaceContext.Provider>\n );\n}","import { Flight } from 'libs/common/react/index';\n\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\nimport { usePresentation } from 'shared/hooks/usePresentation';\n\nexport const usePresentationAudiences = () => {\n const { activePresentation, getFallbackPresentation } = usePresentation({ redirectOnError: true });\n\n const presentation = activePresentation || getFallbackPresentation();\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n !!presentation &&\n AudienceRequests.presentationAudiences(presentation.id)\n );\n\n return audiences;\n};","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\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\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 = [\n ...r,\n VideoRequests.videoMixinAssocs(unhydratedVideos, options.flightNamespace)\n ];\n\n if (currentUser.data?.isAuthenticated)\n newRequests.push(ClassificationRequests.hasCurriculumLinks(unhydratedVideos, null, options.flightNamespace));\n\n return newRequests;\n });\n }, [ videoIds?.length, currentUser.hasCompleted ]);\n\n Flight.useBasicFetchAll(request);\n}"],"names":["InfiniteScrollFooter","props","ref","inView","fetchOnScroll","isFetching","fetchNext","nextCursor","className","Spinner","as","animation","role","SvgContainer","svgName","size","S","onClick","defaultProps","PartialVideoList","Array","numVideos","fill","map","_","i","key","allowBulkActions","PartialVideoItem","breakpoints","useBreakpoints","isSmall","VideoListHelper","withDragHandle","withReordering","xs","Row","Col","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","useBatchFetch","itemIds","getRequest","idBatches","setIdBatches","length","newBatches","push","forEach","id","find","batch","_id","filter","join","dispatch","state","idBatch","request","shouldFetch","items","responses","response","data","v","Object","keys","some","k","SCROLL_TOLERANCE","useInfiniteList","onError","getItems","getCursor","scrollContainer","options","handleScroll","useState","pagesFetched","setPagesFetched","fetchNextFn","cursor","fetchNextPage","currentVal","hasMore","getBoundingClientRect","height","scrollTop","scrollHeight","window","innerHeight","document","documentElement","useEffect","onScroll","FunctionHelper","addEventListener","removeEventListener","shouldInitialFetch","httpStatusClass","toString","substr","HttpStatus","totalItems","hasFirstPageCompleted","VideoHistoryRequests","userVideoHistory","success","error","always","url","formatData","historyCollection","historyData","lastTimeWatchedLocal","lastTimeWatched","lastDateWatchedLocal","lastDateWatched","pagination","videoHistory","ids","namespace","params","sort","normalizeOptions","watchHistory","videoId","lastProgressPoint","WatchHistoryVideoList","hasPermissions","usePermissions","historyGroups","ArrayHelper","videoGroups","sortedDates","reverse","date","history","video","videos","Boolean","sortedDatesGroupCount","reduce","dateCounts","currentDate","dateTotal","runningTotal","diff","DateHelper","Date","LanguageService","formatDate","VideoList","yearGroups","getVideoAppLink","VideoAppLinkHelper","getSubTextAppLink","SeriesAppLinkHelper","series","setFavourite","canFavourite","startingPositionIndex","presentationAudiences","getPreviewQuestionsAppLink","interactive","InteractiveHelper","imageCdnUrl","isPlugin","getClassroomGuideAppLink","getInteractiveGuidanceAppLink","getResourceGuidanceAppLink","getPhrase","WatchHistoryEmptyState","value","EmptyState","src","ImageUrls","altText","Text","phrase","text","appLink","application","action","WatchHistoryPublicEmptyState","analyticsData","analyticsOptions","actionType","location","entity","workflowPhase","descriptor","SignUp","PartialWatchHistory","WatchHistoryView","useSetPageMetadata","title","alerts","hasLocalPermissions","useLiteFavourites","u","usePluginHelper","currentUser","UserRequests","videoActions","useVideoActions","isAuthenticated","CustomerRequests","customerId","config","ConfigRequests","getUserVideoHistoryRequest","hasCompleted","pageNumber","httpStatus","videoIds","videosMap","VideoRequests","useVideoMixin","audiences","usePresentationAudiences","VideoActionsContext","redirectOnError","activePresentation","getFallbackPresentation","presentation","objects","hydratedVideos","Set","isArray","o","getValidObjects","setRequest","unhydratedVideos","current","has","add","r","newRequests","flightNamespace"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"scripts/1402-39cb29d725-lite.chunk.js","mappings":"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","sources":["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/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/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/libs/shared/src/hooks/UseInfiniteScroll.ts","file:///app/packages/libs/shared/src/hooks/UseInfiniteList.ts","file:///app/packages/projects/lite/src/apps/watch-history/flight-requests/VideoHistoryRequests.ts","file:///app/packages/projects/lite/src/apps/watch-history/components/watch-history-video-list/WatchHistoryVideoList.tsx","file:///app/packages/projects/lite/src/apps/watch-history/views/watch-history/empty-state/WatchHistoryEmptyState.tsx","file:///app/packages/projects/lite/src/apps/watch-history/views/watch-history/partial-loading/partial-watch-history.scss","file:///app/packages/projects/lite/src/apps/watch-history/views/watch-history/partial-loading/PartialWatchHistory.tsx","file:///app/packages/projects/lite/src/apps/watch-history/views/watch-history/WatchHistoryView.tsx","file:///app/packages/projects/lite/src/shared/hooks/usePresentationAudiences.ts","file:///app/packages/projects/lite/src/shared/hooks/useVideoMixin.ts"],"sourcesContent":["// 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}","// extracted by mini-css-extract-plugin\nexport default {\"partialOptions\":\"Gufgq\",\"partialName\":\"SicQQ\",\"partialDescription\":\"dPGMq\",\"partialThumbnail\":\"vZrnb\",\"partialDragHandle\":\"iq73R\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { VideoListHelper } from 'libs/shared/components/video-list/VideoListHelper';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport styles from './partial-video-list.scss';\n\ninterface PartialVideoListProps {\n withReordering?: boolean;\n numVideos?: number;\n allowBulkActions?: boolean;\n}\n\nPartialVideoList.defaultProps = {\n numVideos: 15\n};\n\nexport function PartialVideoList(props: PartialVideoListProps): JSX.Element {\n return (\n <div className='mx-2'>\n {Array(props.numVideos).fill(null).map((_, i) => (\n <div className='d-flex' key={i}>\n {props.allowBulkActions && <div className='form-check pe-3 pe-sm-2 mx-0 mx-md-2' />}\n <PartialVideoItem {...props} />\n </div>\n ))}\n </div>\n );\n}\n\nexport function PartialVideoItem(props: PartialVideoListProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n const size = VideoListHelper.getSize(breakpoints, 'md');\n const isSmall = size === 'sm';\n\n const withDragHandle = props.withReordering && !breakpoints.xs;\n\n return (\n <Row className={`${isSmall ? '' : 'py-2'} flex-grow-1`}>\n <Col {...VideoListHelper.getThumbnailColumns()} className={`flex-column align-items-flex-start ${isSmall ? `pb-2 pe-1` : 'mb-1 pe-3 pe-md-2'}`}>\n <Row>\n {!!withDragHandle && (\n <div className='d-flex align-items-center justify-content-center col-2'>\n <div className={`partial-loading-background ${styles.partialDragHandle}`} />\n </div>\n )}\n <Col xs={VideoListHelper.getThumbnailColSize(withDragHandle)}>\n <div className={`partial-loading-background ${isSmall ? 'rounded' : 'rounded-3'} ${styles.partialThumbnail}`} />\n </Col>\n </Row>\n </Col>\n <Col {...VideoListHelper.getDetailsColumns()} className={isSmall ? 'pb-2' : 'px-2'}>\n <div className={`partial-loading-background mb-1 ${styles.partialName}`} />\n <div className={`partial-loading-background ${styles.partialDescription}`} />\n </Col>\n </Row>\n );\n}\n\n","import { 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 React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { Flight } from 'libs/common/flight';\nimport { ApplicationState, HashObject } from 'libs/common/react/interfaces';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nexport interface UseBatchFetchResult<T extends BaseObject> {\n items: { [key: string]: T} | null;\n isFetching: boolean;\n}\n\n/**\n * Used to fetch multiple items by id with Flight. Will fetch 25 items at a time firing off multiple\n * requests if there are more than 25 items.\n * This will return items as null until we have all our items. Items will be returned as an object with\n * their ids as they key for easy mapping\n * \n * @param itemIds \n * @param getRequest \n */\nexport function useBatchFetch<T extends BaseObject>(\n itemIds: string[],\n getRequest: (ids: string[]) => Flight.Request\n): UseBatchFetchResult<T> {\n const [ idBatches, setIdBatches ] = React.useState<string[][]>([]);\n\n React.useEffect(() => {\n if (!itemIds?.length)\n return;\n\n const newBatches = [...idBatches];\n newBatches.push([]);\n\n itemIds.forEach(id => {\n if (newBatches.find(batch => batch.find(_id => _id === id)))\n return;\n\n newBatches[newBatches.length - 1].push(id);\n });\n\n setIdBatches(newBatches.filter(batch => batch.length));\n }, [itemIds ? itemIds.join(',') : null]);\n\n const dispatch = useDispatch();\n\n const state = useSelector((state: ApplicationState) => state);\n\n React.useEffect(() => {\n idBatches.forEach(idBatch => {\n const request = getRequest(idBatch);\n const response = Flight.getResponse<T[]>(state, request.key);\n\n if (response.shouldFetch)\n Flight.fetch(dispatch, request);\n });\n }, [idBatches?.length]);\n\n if (!idBatches?.length)\n return { items: null, isFetching: false };\n \n const items: { [key: string]: T} = {};\n\n /* Used locally to only return our items if we've fetched all of them */\n const responses: HashObject<Flight.Response<T[]>> = {};\n \n idBatches.forEach((idBatch, i) => {\n const request = getRequest(idBatch);\n const response = Flight.getResponse<T[]>(state, request.key);\n responses[i] = response;\n\n if (response.data)\n response.data.forEach(v => items[v.id] = v);\n });\n\n return {\n items: Object.keys(responses).some(k => !!responses[k].data) ? items : null,\n isFetching: !!Object.keys(responses).some(k => responses[k].isFetching)\n };\n}","import { useEffect } from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nconst SCROLL_TOLERANCE = 400; // value in px\n\ninterface UseInfiniteScrollOptions {\n fetchNextPage: () => void;\n hasMore: boolean;\n isFetching: boolean;\n scrollContainer?: HTMLElement;\n}\n\nexport function useInfiniteScroll(options: UseInfiniteScrollOptions): void {\n const handleScroll = (): void => {\n if (options.isFetching)\n return;\n\n if (!options.scrollContainer) {\n const currentScrollHeight = window.innerHeight + document.documentElement.scrollTop;\n \n const totalHeight = document.documentElement.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n } else {\n const { scrollContainer } = options;\n const currentScrollHeight = scrollContainer.getBoundingClientRect().height + scrollContainer.scrollTop;\n \n const totalHeight = scrollContainer.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n }\n\n options.fetchNextPage();\n };\n\n useEffect(() => {\n const onScroll = FunctionHelper.throttle(handleScroll, 200);\n\n const scrollContainer = options.scrollContainer || window;\n\n if (options.hasMore)\n scrollContainer.addEventListener('scroll', onScroll);\n\n return () => scrollContainer.removeEventListener('scroll', onScroll);\n }, [ options.hasMore, options.fetchNextPage, options.scrollContainer ]);\n}","import { useEffect, useState } from 'react';\n\nimport { HttpStatus, HttpStatusClass } from 'libs/common/backbone/enums/HttpStatus';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { BaseObject, BasePaginatedCollection } from 'libs/shared/interfaces';\n\nimport { useInfiniteScroll } from './UseInfiniteScroll';\nimport { useSelectAllPages } from './UseSelectAllPages';\n\nexport interface UseInfiniteListResult<T extends BaseObject> {\n items: T[];\n hasMore: boolean;\n isFetching: boolean;\n nextCursor: string;\n totalItems?: number;\n hasFirstPageCompleted: boolean;\n}\n\n/**\n * Hook to extract an infinite list from the application state,\n * save it locally in state and only update when new data\n * is fetched.\n * \n * @param getRequest - callback function to get the request for each page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n * \n * @param fetchNext - callback function to fetch a page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n */\nexport function useInfiniteList<TObject = BaseObject, TResponse = BasePaginatedCollection<TObject>>(\n getRequest: ((cursor?: string) => Flight.Request) | false,\n fetchNext: ((cursor?: string) => void) | false,\n onError?: (pageNumber: number, statusCode: HttpStatus) => void,\n getItems?: (responseData: TResponse) => TObject[],\n getCursor?: (responseData: TResponse) => string,\n scrollContainer?: HTMLElement\n): UseInfiniteListResult<TObject> {\n const [ pagesFetched, setPagesFetched ] = useState(0);\n\n const fetchNextFn = fetchNext as (cursor?: string) => void;\n\n function getKey(cursor?: string): string {\n if (!getRequest)\n return null;\n\n const request = getRequest(cursor);\n\n if (!request)\n return null;\n\n return request.key;\n }\n\n const response = useSelectAllPages<TObject, TResponse>(\n getKey,\n getItems,\n getCursor\n );\n\n function fetchNextPage(): void {\n if (!fetchNext || !getRequest || !response)\n return;\n\n setPagesFetched(currentVal => currentVal + 1);\n return fetchNextFn(response.nextCursor);\n }\n\n useInfiniteScroll({\n fetchNextPage,\n hasMore: !!response?.nextCursor,\n isFetching: response?.isFetching,\n scrollContainer\n });\n\n useEffect(() => {\n if (!response)\n return;\n\n if (response.shouldInitialFetch && fetchNext) {\n fetchNextFn();\n setPagesFetched(currentVal => currentVal + 1);\n }\n }, [ response?.shouldInitialFetch, fetchNext ]);\n\n useEffect(() => {\n if (!response?.statusCode || !FunctionHelper.isFunction(onError))\n return;\n\n const httpStatusClass: HttpStatusClass = +(response.statusCode?.toString()?.substr(0, 1));\n\n if (httpStatusClass !== HttpStatusClass.ClientError && httpStatusClass !== HttpStatusClass.ServerError)\n return;\n\n onError(pagesFetched, response.statusCode);\n }, [response?.statusCode]);\n\n return {\n items: response?.items,\n hasMore: !!response?.nextCursor,\n nextCursor: response?.nextCursor,\n isFetching: response?.isFetching,\n totalItems: response?.totalItems,\n hasFirstPageCompleted: response?.hasFirstPageCompleted\n };\n}","\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { VideoHistoryCollection } from 'libs/shared/interfaces';\n\nexport const VideoHistoryRequests = {\n userVideoHistory(\n cursor?: string,\n success?: (data: HashObject) => void,\n error?: (Xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n let key = 'video:history';\n let url = `{gateway}/v1/users/me/watch-history`;\n\n if (cursor) {\n key += `:${cursor}`;\n url += `?cursor=${cursor}`;\n }\n\n return {\n key,\n url,\n formatData: (historyCollection: VideoHistoryCollection) => {\n return {\n data: historyCollection.data.map(historyData => {\n // Convert last watched times from UTC to local time\n const lastTimeWatchedLocal = DateHelper.format(historyData.lastTimeWatched);\n const lastDateWatchedLocal = DateHelper.format(lastTimeWatchedLocal, 'YYYY-MM-DD');\n\n return {\n ...historyData,\n lastTimeWatched: lastTimeWatchedLocal,\n lastDateWatched: lastDateWatchedLocal\n };\n }),\n pagination: historyCollection.pagination\n };\n },\n success,\n error,\n always\n };\n },\n\n videoHistory(\n ids: string[],\n namespace?: string,\n success?: (data: HashObject) => void,\n error?: (Xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n const params = ids.sort().map(i => `videoId=${i}`);\n\n return {\n key: `video:history:videos:${params.join('&')}`,\n url: `{gateway}/v1/videos/history?${params.join('&')}`,\n normalizeOptions: {\n namespace\n },\n formatData: (historyCollection: HashObject[]) => {\n if (!historyCollection?.length)\n return historyCollection;\n\n /**\n * Data is formatted to enable it to be merged with the existing video object in the store\n * Where we need to merge more history properties with the video object, map them below.\n */\n return historyCollection.map((watchHistory: HashObject) => ({\n id: watchHistory.videoId,\n lastProgressPoint: watchHistory.lastProgressPoint\n }));\n },\n success,\n error,\n always\n };\n }\n};","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { CanFavouriteFunc, FavouriteFunc, PresentationAudience, VideoHistory, VideoTypes, YearGroup } from 'libs/shared/interfaces';\n\nimport { InteractiveHelpers } from 'shared/utils/InteractiveHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nconst namespace = 'watchHistory.watchHistoryVideoList';\n\nfunction formatDate(date: string): string {\n const diff = DateHelper.timeSince(new Date(date), 'day');\n\n if (diff === 0)\n return LanguageService.getPhrase(namespace, 'today');\n\n if (diff === 1)\n return LanguageService.getPhrase(namespace, 'yesterday');\n\n return DateHelper.format(date, 'Do MMMM');\n}\n\ninterface WatchHistoryVideoListProps {\n videoHistory: VideoHistory[];\n videos: VideoTypes[];\n yearGroups: YearGroup[];\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n presentationAudiences?: PresentationAudience[];\n imageCdnUrl?: string;\n isPlugin: boolean;\n}\n\nexport function WatchHistoryVideoList(props: WatchHistoryVideoListProps): JSX.Element {\n const { hasPermissions } = usePermissions();\n\n const historyGroups = ArrayHelper.groupBy(props.videoHistory, 'lastDateWatched');\n\n const videoGroups: { [index: string]: VideoTypes[] } = {};\n\n const sortedDates = Object.keys(historyGroups).sort().reverse();\n\n // Map video history to video objects and mixin lastProgressPoint\n sortedDates.forEach(date => {\n videoGroups[date] = historyGroups[date].map(history => {\n const video = props.videos.find(v => v.id.toString() === history.videoId.toString());\n\n if (!video)\n return null;\n\n return {\n ...video,\n lastProgressPoint: history.lastProgressPoint\n };\n }).filter(Boolean);\n });\n\n const sortedDatesGroupCount = sortedDates.reduce((dateCounts: HashObject, currentDate: string) => {\n const dateTotal = videoGroups[currentDate].length;\n const runningTotal = dateTotal + (dateCounts.runningTotal ?? 0);\n\n return {\n ...dateCounts,\n runningTotal,\n [currentDate]: runningTotal - dateTotal\n };\n }, {});\n\n return (\n <>\n {sortedDates.map(date => {\n // TODO: Fix bug where watch history endpoint returns workspace videos that cannot be fetched/displayed.\n // This is caused by 1 user sharing their workspace video with another user.\n if (!videoGroups[date].length)\n return <React.Fragment key={date}></React.Fragment>;\n\n return (\n <div key={date} className='pb-3'>\n <h2 className='h4'>{formatDate(date)}</h2>\n <VideoList\n videos={videoGroups[date]}\n yearGroups={props.yearGroups}\n getVideoAppLink={VideoAppLinkHelper.getAppLink}\n getSubTextAppLink={video => SeriesAppLinkHelper.getSeriesAppLink(video.series)}\n hasPermissions={hasPermissions}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n startingPositionIndex={sortedDatesGroupCount[date]}\n presentationAudiences={props.presentationAudiences}\n getPreviewQuestionsAppLink={interactive => InteractiveHelpers.getPreviewQuestionsAppLink(interactive)}\n imageCdnUrl={props.imageCdnUrl}\n isPlugin={props.isPlugin}\n getClassroomGuideAppLink={VideoAppLinkHelper.getClassroomGuideAppLink}\n getInteractiveGuidanceAppLink={VideoAppLinkHelper.getInteractiveGuidanceAppLink}\n getResourceGuidanceAppLink={VideoAppLinkHelper.getResourceGuidanceAppLink}\n />\n </div>\n );\n })}\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, SignUpDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'watchHistory.watchHistoryEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function WatchHistoryEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.WATCH_HISTORY} altText={getPhrase('info')} />\n\n <EmptyState.Heading><Text phrase='heading' /></EmptyState.Heading>\n <EmptyState.Info><Text phrase='info' /></EmptyState.Info>\n\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'cta')}\n appLink={{\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.HOME\n }}\n />\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n\nexport function WatchHistoryPublicEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.WATCH_HISTORY_PUBLIC} altText={getPhrase('publicInfo')}/>\n <EmptyState.Heading><Text phrase='publicHeading' /></EmptyState.Heading>\n <EmptyState.Info><Text phrase='publicInfo' /></EmptyState.Info>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'publicCta')}\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n }}\n analyticsData={{}}\n analyticsOptions={{\n actionType: UserAction.Click,\n location: LocationContext.WatchHistoryLanding,\n entity: EntityType.AppLink,\n workflowPhase: WorkflowPhase.Start,\n descriptor: SignUpDescriptors.SignUp\n }}\n />\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialDate\":\"vq4eE\"};","import React from 'react';\n\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\n\nimport styles from './partial-watch-history.scss';\n\nexport function PartialWatchHistory(): JSX.Element {\n return (\n <>\n <div className='mb-3'>\n <div className={`${styles.partialDate} mb-2 partial-loading-background`} />\n <PartialVideoList numVideos={2} />\n </div>\n\n <div className='mb-3'>\n <div className={`${styles.partialDate} mb-2 partial-loading-background`} />\n <PartialVideoList numVideos={3} />\n </div>\n\n <div className='mb-3'>\n <div className={`${styles.partialDate} mb-2 partial-loading-background`} />\n <PartialVideoList numVideos={2} />\n </div>\n\n <div className='mb-3'>\n <div className={`${styles.partialDate} mb-2 partial-loading-background`} />\n <PartialVideoList numVideos={5} />\n </div>\n </>\n );\n}","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { LocalPermissionName } from 'libs/shared/enums/PermissionName';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, CurrentUser, VideoHistory, YearGroup } from 'libs/shared/interfaces';\n\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { usePresentationAudiences } from 'shared/hooks/usePresentationAudiences';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\n\nimport { WatchHistoryVideoList } from 'apps/watch-history/components/watch-history-video-list/WatchHistoryVideoList';\nimport { VideoHistoryRequests } from 'apps/watch-history/flight-requests/VideoHistoryRequests';\n\nimport { WatchHistoryEmptyState, WatchHistoryPublicEmptyState } from './empty-state/WatchHistoryEmptyState';\nimport { PartialWatchHistory } from './partial-loading/PartialWatchHistory';\n\nconst namespace = 'watchHistory.watchHistory';\n\nexport function WatchHistoryView(): JSX.Element {\n useSetPageMetadata({ title: LanguageService.getPhrase(namespace, 'pageTitle') });\n const dispatch = useDispatch();\n const alerts = useAlerts();\n const { hasLocalPermissions } = usePermissions();\n\n const { setFavourite, canFavourite } = useLiteFavourites(LocationContext.VideoThumbnail);\n const { isPlugin } = usePluginHelper();\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem });\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const getUserVideoHistoryRequest = (cursor?: string) => {\n return VideoHistoryRequests.userVideoHistory(cursor);\n };\n\n const fetchNext = (cursor?: string) => {\n return Flight.getFetch(dispatch)(getUserVideoHistoryRequest(cursor));\n };\n\n const shouldFetch = !hasLocalPermissions(LocalPermissionName.ViewWatchHistoryLanding) && currentUser.hasCompleted;\n\n const {\n items: videoHistory,\n hasMore,\n isFetching\n } = useInfiniteList<VideoHistory>(shouldFetch ? getUserVideoHistoryRequest : false, fetchNext, onError);\n\n function onError(pageNumber: number, httpStatus: HttpStatus): void {\n if (pageNumber === 1)\n return handleHttpError(httpStatus);\n\n alerts.error(LanguageService.getPhrase(namespace, 'error'));\n }\n\n const videoIds = videoHistory?.map(v => v.videoId) ?? [];\n\n const videosFetchResult = useBatchFetch(videoIds, (ids: string[]) => {\n return VideoRequests.watchHistoryVideos(ids);\n });\n\n const videosMap = videosFetchResult.items ?? {};\n\n const videos = Object.keys(videosMap).map(id => videosMap[id]);\n\n useVideoMixin(videos);\n \n const audiences = usePresentationAudiences();\n\n if (hasLocalPermissions(LocalPermissionName.ViewWatchHistoryLanding))\n return <WatchHistoryPublicEmptyState />;\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <div className='px-3'>\n <h1 className='h2'><Text phrase='heading' /></h1>\n {(() => {\n if (!videoHistory)\n return <PartialWatchHistory />;\n\n if (!videoHistory.length)\n return <WatchHistoryEmptyState />;\n\n if (!videos.length)\n return <PartialWatchHistory />;\n\n return (\n <VideoActionsContext.Provider value={videoActions}>\n <WatchHistoryVideoList\n videoHistory={videoHistory}\n videos={videos}\n presentationAudiences={audiences.data}\n yearGroups={yearGroups.data}\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n imageCdnUrl={config.data?.imageCdnUrl}\n isPlugin={isPlugin}\n />\n {(hasMore || isFetching) && <InfiniteScrollFooter isFetching={isFetching} fetchNext={fetchNext} />}\n </VideoActionsContext.Provider>\n );\n })()}\n </div>\n </LanguageNamespaceContext.Provider>\n );\n}","import { Flight } from 'libs/common/react/index';\n\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\nimport { usePresentation } from 'shared/hooks/usePresentation';\n\nexport const usePresentationAudiences = () => {\n const { activePresentation, getFallbackPresentation } = usePresentation({ redirectOnError: true });\n\n const presentation = activePresentation || getFallbackPresentation();\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n !!presentation &&\n AudienceRequests.presentationAudiences(presentation.id)\n );\n\n return audiences;\n};","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\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\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 = [\n ...r,\n VideoRequests.videoMixinAssocs(unhydratedVideos, options.flightNamespace)\n ];\n\n if (currentUser.data?.isAuthenticated)\n newRequests.push(ClassificationRequests.hasCurriculumLinks(unhydratedVideos, null, options.flightNamespace));\n\n return newRequests;\n });\n }, [ videoIds?.length, currentUser.hasCompleted ]);\n\n Flight.useBasicFetchAll(request);\n}"],"names":["InfiniteScrollFooter","props","ref","inView","fetchOnScroll","isFetching","fetchNext","nextCursor","className","Spinner","as","animation","role","SvgContainer","svgName","size","S","onClick","defaultProps","PartialVideoList","Array","numVideos","fill","map","_","i","key","allowBulkActions","PartialVideoItem","breakpoints","useBreakpoints","isSmall","VideoListHelper","withDragHandle","withReordering","xs","Row","Col","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","useBatchFetch","itemIds","getRequest","idBatches","setIdBatches","length","newBatches","push","forEach","id","find","batch","_id","filter","join","dispatch","state","idBatch","request","shouldFetch","items","responses","response","data","v","Object","keys","some","k","SCROLL_TOLERANCE","useInfiniteList","onError","getItems","getCursor","scrollContainer","options","handleScroll","useState","pagesFetched","setPagesFetched","fetchNextFn","cursor","fetchNextPage","currentVal","hasMore","getBoundingClientRect","height","scrollTop","scrollHeight","window","innerHeight","document","documentElement","useEffect","onScroll","FunctionHelper","addEventListener","removeEventListener","shouldInitialFetch","httpStatusClass","toString","substr","HttpStatus","totalItems","hasFirstPageCompleted","VideoHistoryRequests","userVideoHistory","success","error","always","url","formatData","historyCollection","historyData","lastTimeWatchedLocal","lastTimeWatched","lastDateWatchedLocal","lastDateWatched","pagination","videoHistory","ids","namespace","params","sort","normalizeOptions","watchHistory","videoId","lastProgressPoint","WatchHistoryVideoList","hasPermissions","usePermissions","historyGroups","ArrayHelper","videoGroups","sortedDates","reverse","date","history","video","videos","Boolean","sortedDatesGroupCount","reduce","dateCounts","currentDate","dateTotal","runningTotal","diff","DateHelper","Date","LanguageService","formatDate","VideoList","yearGroups","getVideoAppLink","VideoAppLinkHelper","getSubTextAppLink","SeriesAppLinkHelper","series","setFavourite","canFavourite","startingPositionIndex","presentationAudiences","getPreviewQuestionsAppLink","interactive","InteractiveHelper","imageCdnUrl","isPlugin","getClassroomGuideAppLink","getInteractiveGuidanceAppLink","getResourceGuidanceAppLink","getPhrase","WatchHistoryEmptyState","value","EmptyState","src","ImageUrls","altText","Text","phrase","text","appLink","application","action","WatchHistoryPublicEmptyState","analyticsData","analyticsOptions","actionType","location","entity","workflowPhase","descriptor","SignUp","PartialWatchHistory","WatchHistoryView","useSetPageMetadata","title","alerts","hasLocalPermissions","useLiteFavourites","u","usePluginHelper","currentUser","UserRequests","videoActions","useVideoActions","isAuthenticated","CustomerRequests","customerId","config","ConfigRequests","getUserVideoHistoryRequest","hasCompleted","pageNumber","httpStatus","videoIds","videosMap","VideoRequests","useVideoMixin","audiences","usePresentationAudiences","VideoActionsContext","redirectOnError","activePresentation","getFallbackPresentation","presentation","objects","hydratedVideos","Set","isArray","o","getValidObjects","setRequest","unhydratedVideos","current","has","add","r","newRequests","flightNamespace"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1407],{93978:(e,a,t)=>{t.r(a),t.d(a,{PlaySharedVideoView:()=>A});var i=t(32735),d=t(20354),s=t(65858),c=t(16714),n=t(89454),o=t(43012),r=t(39151),l=t(1666),u=t(20768),v=t(28907),m=t(31949),h=t(1575),I=t(26304),p=t(22902),g=t(79612),C=t(76753),y=t(5988),P=t(51855),F=t(82817),V=t(7179),b=t(49948),k=t(36873),w=t(27638),B=t(86698),f=t(35014),x=t(97816),j=t(33192),q=t(16857);function A(e){var a,t,A,G,L,M,U,N,T=(0,w.u)(s.LZ.VideoThumbnail),_=T.setFavourite,E=T.canFavourite,O=(0,P.G)().isPlugin,S=(0,p.T)().hasPermissions,R=(0,B.y)().activePresentation,Z=(0,f.I)(),z=d.a.useBasicFetch(h.R.sharedVideo(e.objectId,e.shareId)),D=d.a.useBasicFetch(Z.canViewClips&&o.e.videoClips(e.objectId)),H=d.a.useBasicFetch(Z.canViewInteractives&&u.b.videoInteractives(e.objectId)),J=d.a.useBasicFetch(m.N.currentUser()),K=d.a.useBasicFetch(r.L.config()),Q=(0,k.k)({video:z.data,context:e.queryParams.context,contextId:e.queryParams.contextId,moviesAndTv:e.queryParams.mtv,currentUser:J.data}),W=(0,b.l)(e.objectId),X=d.a.useBasicFetch((null===(t=null===(a=z.data)||void 0===a?void 0:a.glance)||void 0===t?void 0:t.theme)?v.r.themeImages(z.data.glance.theme,z.data.glance.type):null),Y=d.a.useBasicFetch(!!R&&n.O.audiencesByPresentationId(R.id)),$=d.a.useBasicFetch((null===(A=J.data)||void 0===A?void 0:A.isAuthenticated)&&l.h.yearGroups(J.data.customerId)),ee=S(c.C.ViewVideoGlance)&&(null===(L=null===(G=z.data)||void 0===G?void 0:G.glance)||void 0===L?void 0:L.theme);(0,g.M)(C.CG.getVideoMetadata({content:z.data,canonicalLink:j.f.getCanonicalLink({stripPresentationSlug:!0}),allowIndexing:!1})),(0,x.V)(null!==(M=Q.videos)&&void 0!==M?M:[]),(0,I.b)(z,{private:q.m}),(0,V.P)({id:e.objectId,app:"videos",shareId:e.shareId});var ae=(0,F.M)(e.objectId);return z.data&&J.hasCompleted&&K.hasCompleted&&W.hasCompleted?i.createElement("div",{className:"px-3"},i.createElement(y.j,{video:z.data,clips:D.data,interactives:H.data,yearGroups:$.data,curriculums:ae,imageCdnUrl:K.data.imageCdnUrl,relatedVideos:Q,currentUser:J.data,setFavourite:_,canFavourite:E,pointsOfInterest:null==W?void 0:W.items,playNext:null===(U=e.queryParams)||void 0===U?void 0:U.playNext,shareId:e.shareId,glanceTheme:X.data,glanceLoaded:!ee||X.hasCompleted,featureAccess:Z,audiences:Y.data,params:e.queryParams,canManageVideoAccess:S(c.C.ManageVideoAccess),tableOfContentsId:null===(N=e.queryParams)||void 0===N?void 0:N.tocId,isPlugin:O})):i.createElement(i.Fragment,null)}}}]);
|
|
2
|
-
//# sourceMappingURL=1407-
|
|
2
|
+
//# sourceMappingURL=1407-3bab3f00f6-lite.chunk.js.map
|
package/dist/scripts/{1407-3592ec24f2-lite.chunk.js.map → 1407-3bab3f00f6-lite.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/1407-
|
|
1
|
+
{"version":3,"file":"scripts/1407-3bab3f00f6-lite.chunk.js","mappings":"idAoCM,SAAUA,EAAoBC,G,oBAClC,GAAuC,IAAAC,GAAkB,qBAAjDC,EAAY,EAAZA,aAAcC,EAAY,EAAZA,aAEdC,GAAa,SAAbA,SAEAC,GAAmB,SAAnBA,eAGNC,GACE,SADFA,mBAGIC,GAAgB,SAEhBC,EAAQ,kBAA4B,gBAA0BR,EAAMS,SAAUT,EAAMU,UACpFC,EAAQ,kBAA6BJ,EAAcK,cAAgB,eAAwBZ,EAAMS,WACjGI,EAAe,kBACnBN,EAAcO,qBAAuB,sBAAsCd,EAAMS,WAE7EM,EAAc,kBAAkC,mBAChDC,EAAS,kBAA6B,cACtCC,GAAgB,OAAoB,CACxCT,MAAOA,EAAMU,KACbC,QAASnB,EAAMoB,YAAYD,QAC3BE,UAAWrB,EAAMoB,YAAYC,UAC7BC,YAAatB,EAAMoB,YAAYG,IAC/BR,YAAaA,EAAYG,OAErBM,GAAmB,OAAyBxB,EAAMS,UAClDgB,EAAc,mBAA8C,QAAlB,EAAU,QAAV,EAAAjB,EAAMU,YAAI,eAAEQ,cAAM,eAAEC,OAChE,gBAA0BnB,EAAMU,KAAKQ,OAAOC,MAAOnB,EAAMU,KAAKQ,OAAOE,MAAQ,MAC3EC,EAAY,oBACdvB,GACF,8BAA2CA,EAAmBwB,KAE1DC,EAAa,mBACD,QAAhB,EAAAhB,EAAYG,YAAI,eAAEc,kBAAmB,eAA4BjB,EAAYG,KAAKe,aAG9EC,GAAmB7B,EAAe,uBACpB,QAAlB,EAAU,QAAV,EAAAG,EAAMU,YAAI,eAAEQ,cAAM,eAAEC,QAEtB,OAAmB,sBAAoC,CACrDQ,QAAS3B,EAAMU,KACfkB,cAAe,qBAA2B,CAAEC,uBAAuB,IACnEC,eAAe,MAGjB,OAAkC,QAApB,EAAArB,EAAcsB,cAAM,QAAI,KACtC,OAAsB/B,EAAO,CAAEgC,QAAS,OACxC,OAAa,CAAEV,GAAI9B,EAAMS,SAAUgC,IAAK,SAAU/B,QAASV,EAAMU,UAEjE,IAAMgC,IAAc,OAAe1C,EAAMS,UASzC,OANED,EAAMU,MACNH,EAAY4B,cACZ3B,EAAO2B,cACPnB,EAAiBmB,aAOjB,uBAAKC,UAAU,QACb,gBAAC,IAAQ,CACPpC,MAAOA,EAAMU,KACbP,MAAOA,EAAMO,KACbL,aAAcA,EAAaK,KAC3Ba,WAAYA,EAAWb,KACvBwB,YAAaA,GACbG,YAAa7B,EAAOE,KAAK2B,YACzB5B,cAAeA,EACfF,YAAaA,EAAYG,KACzBhB,aAAcA,EACdC,aAAcA,EACdqB,iBAAkBA,aAAgB,EAAhBA,EAAkBsB,MACpCC,SAA2B,QAAjB,EAAA/C,EAAMoB,mBAAW,eAAE2B,SAC7BrC,QAASV,EAAMU,QACfe,YAAaA,EAAYP,KACzB8B,cAAed,IAAoBT,EAAYkB,aAC/CpC,cAAeA,EACfsB,UAAWA,EAAUX,KACrB+B,OAAQjD,EAAMoB,YACd8B,qBAAsB7C,EAAe,uBACrC8C,kBAAoC,QAAjB,EAAAnD,EAAMoB,mBAAW,eAAEgC,MACtChD,SAAUA,KAzBP,gCA6BX,C","sources":["file:///app/packages/projects/lite/src/apps/share/views/play-shared-video/PlaySharedVideoView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { ThemeRequests } from 'libs/shared/flight-requests/ThemeRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Clip, Config, CurrentUser, InteractiveMetadata, PresentationAudience, Theme, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { PlayPage } from 'shared/components/play-page/PlayPage';\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useCurriculums } from 'shared/hooks/useCurriculums';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { useFetchPointsOfInterest } from 'shared/hooks/useFetchPointsOfInterest';\nimport { useGetRelatedVideos } from 'shared/hooks/useGetRelatedVideos';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { usePresentation } from 'shared/hooks/usePresentation';\nimport { useVideoFeatureAccess } from 'shared/hooks/useVideoFeatureAccess';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\n\nimport { ShareLinkPrivateError } from 'apps/share/errors/share-link-private/ShareLinkPrivateError';\nimport { ShareLinkViewProps } from 'apps/share/interfaces/ShareLinkViewProps';\n\nexport function PlaySharedVideoView(props: ShareLinkViewProps): React.ReactElement {\n const { setFavourite, canFavourite } = useLiteFavourites(LocationContext.VideoThumbnail);\n\n const { isPlugin } = usePluginHelper();\n\n const { hasPermissions } = usePermissions();\n\n const {\n activePresentation\n } = usePresentation();\n\n const featureAccess = useVideoFeatureAccess();\n\n const video = Flight.useBasicFetch<Video>(VideoRequests.sharedVideo(props.objectId, props.shareId));\n const clips = Flight.useBasicFetch<Clip[]>(featureAccess.canViewClips && ClipRequests.videoClips(props.objectId));\n const interactives = Flight.useBasicFetch<InteractiveMetadata[]>(\n featureAccess.canViewInteractives && InteractiveRequests.videoInteractives(props.objectId)\n );\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const relatedVideos = useGetRelatedVideos({\n video: video.data,\n context: props.queryParams.context,\n contextId: props.queryParams.contextId,\n moviesAndTv: props.queryParams.mtv,\n currentUser: currentUser.data\n });\n const pointsOfInterest = useFetchPointsOfInterest(props.objectId);\n const glanceTheme = Flight.useBasicFetch<Theme>(video.data?.glance?.theme\n ? ThemeRequests.themeImages(video.data.glance.theme, video.data.glance.type) : null);\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n !!activePresentation &&\n AudienceRequests.audiencesByPresentationId(activePresentation.id)\n );\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const shouldFetchTheme = hasPermissions(PermissionName.ViewVideoGlance) &&\n video.data?.glance?.theme;\n\n useSetPageMetadata(PageMetadataHelper.getVideoMetadata({\n content: video.data,\n canonicalLink: SeoHelper.getCanonicalLink({ stripPresentationSlug: true }),\n allowIndexing: false\n }));\n\n useVideoMixin(relatedVideos.videos ?? []);\n useCannotConsumeError(video, { private: ShareLinkPrivateError });\n useDeepLinks({ id: props.objectId, app: 'videos', shareId: props.shareId });\n\n const curriculums = useCurriculums(props.objectId);\n\n const dataLoaded = (\n video.data &&\n currentUser.hasCompleted &&\n config.hasCompleted &&\n pointsOfInterest.hasCompleted\n );\n\n if (!dataLoaded)\n return <></>;\n\n return (\n <div className='px-3'>\n <PlayPage\n video={video.data}\n clips={clips.data}\n interactives={interactives.data}\n yearGroups={yearGroups.data}\n curriculums={curriculums}\n imageCdnUrl={config.data.imageCdnUrl}\n relatedVideos={relatedVideos}\n currentUser={currentUser.data}\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n pointsOfInterest={pointsOfInterest?.items}\n playNext={props.queryParams?.playNext}\n shareId={props.shareId}\n glanceTheme={glanceTheme.data}\n glanceLoaded={!shouldFetchTheme || glanceTheme.hasCompleted}\n featureAccess={featureAccess}\n audiences={audiences.data}\n params={props.queryParams}\n canManageVideoAccess={hasPermissions(PermissionName.ManageVideoAccess)}\n tableOfContentsId={props.queryParams?.tocId}\n isPlugin={isPlugin}\n />\n </div>\n );\n}"],"names":["PlaySharedVideoView","props","u","setFavourite","canFavourite","isPlugin","hasPermissions","activePresentation","featureAccess","video","objectId","shareId","clips","canViewClips","interactives","canViewInteractives","currentUser","config","relatedVideos","data","context","queryParams","contextId","moviesAndTv","mtv","pointsOfInterest","glanceTheme","glance","theme","type","audiences","id","yearGroups","isAuthenticated","customerId","shouldFetchTheme","content","canonicalLink","stripPresentationSlug","allowIndexing","videos","private","app","curriculums","hasCompleted","className","imageCdnUrl","items","playNext","glanceLoaded","params","canManageVideoAccess","tableOfContentsId","tocId"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1567],{49935:(e,a,t)=>{t.d(a,{Oo:()=>u,b2:()=>d});var n=t(32735),i=t(36848),r=t(86764),c=t(3747),l=t(5859),s=t(35223),o=t(83914),m=function(e){var a=e.breadcrumb,t=a.name,r=a.appLink,c=a.active,l=e.withBackIcon;return n.createElement("li",{className:"breadcrumb-item".concat(c?" active":"")},c?n.createElement("strong",null,t):n.createElement(i.F,{appLink:r},l&&n.createElement(o.x,{svgName:s.vn.ChevronLeft,size:o.S.Small}),n.createElement("span",{className:l?"ms-2":""},t)))},u=function(e){var a=e.breadcrumbs,t=(0,c.a)(r.r.XS),i=null==a?void 0:a.length;return!i||t&&i<2?n.createElement(n.Fragment,null):t?n.createElement("nav",{"aria-label":"breadcrumb"},n.createElement("ol",{className:"breadcrumb m-0 p-0"},n.createElement(m,{breadcrumb:a[i-2],withBackIcon:!0}))):n.createElement("nav",{"aria-label":"breadcrumb"},n.createElement("ol",{className:"breadcrumb m-0 p-0"},a.map((function(e,a){return n.createElement(m,{key:a,breadcrumb:e})}))))},d=n.memo((function(e){var a=e.numItems,t=void 0===a?3:a;return(0,c.a)(r.r.XS)?n.createElement("div",{className:"partial-loading-background",style:{height:"1.3125rem",width:"6rem"}}):n.createElement("nav",{"aria-label":"breadcrumb"},n.createElement("ol",{className:"breadcrumb m-0 p-0"},l.u.getPartialLoadingItems({numItems:t}).map((function(e,a){var t=e.width;return n.createElement("li",{key:a,className:"breadcrumb-item"},n.createElement("span",{className:"d-inline-block partial-loading-background",style:{width:t},dangerouslySetInnerHTML:{__html:" "}}))}))))}))},74696:(e,a,t)=>{t.d(a,{S:()=>o});var n=t(32735),i=t(68050),r=t(69111),c=t(9977),l=t(79967);const s={partialOptions:"Gufgq",partialName:"SicQQ",partialDescription:"dPGMq",partialThumbnail:"vZrnb",partialDragHandle:"iq73R"};function o(e){return n.createElement("div",{className:"mx-2"},Array(e.numVideos).fill(null).map((function(a,t){return n.createElement("div",{className:"d-flex",key:t},e.allowBulkActions&&n.createElement("div",{className:"form-check pe-3 pe-sm-2 mx-0 mx-md-2"}),n.createElement(m,Object.assign({},e)))})))}function m(e){var a=(0,l.k)(),t="sm"===c.O.getSize(a,"md"),o=e.withReordering&&!a.xs;return n.createElement(i.Z,{className:"".concat(t?"":"py-2"," flex-grow-1")},n.createElement(r.Z,Object.assign({},c.O.getThumbnailColumns(),{className:"flex-column align-items-flex-start ".concat(t?"pb-2 pe-1":"mb-1 pe-3 pe-md-2")}),n.createElement(i.Z,null,!!o&&n.createElement("div",{className:"d-flex align-items-center justify-content-center col-2"},n.createElement("div",{className:"partial-loading-background ".concat(s.partialDragHandle)})),n.createElement(r.Z,{xs:c.O.getThumbnailColSize(o)},n.createElement("div",{className:"partial-loading-background ".concat(t?"rounded":"rounded-3"," ").concat(s.partialThumbnail)})))),n.createElement(r.Z,Object.assign({},c.O.getDetailsColumns(),{className:t?"pb-2":"px-2"}),n.createElement("div",{className:"partial-loading-background mb-1 ".concat(s.partialName)}),n.createElement("div",{className:"partial-loading-background ".concat(s.partialDescription)})))}o.defaultProps={numVideos:15}},5859:(e,a,t)=>{function n(e,a){(null==a||a>e.length)&&(a=e.length);for(var t=0,n=Array(a);t<a;t++)n[t]=e[t];return n}t.d(a,{u:()=>r});var i={numItems:5,minWidth:50,maxWidth:100},r={getPartialLoadingItems:function(){var e,a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=Object.assign(Object.assign({},i),a);return(e=Array(t.numItems),function(e){if(Array.isArray(e))return n(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,a){if(e){if("string"==typeof e)return n(e,a);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?n(e,a):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).map((function(){return{width:"".concat(Math.max(Math.floor(Math.random()*t.maxWidth),t.minWidth),"px")}}))}}},44110:(e,a,t)=>{t.d(a,{i:()=>c});var n=t(20354),i=t(89454),r=t(86698),c=function(){var e=(0,r.y)({redirectOnError:!0}),a=e.activePresentation,t=e.getFallbackPresentation,c=a||t();return n.a.useBasicFetch(!!c&&i.O.presentationAudiences(c.id))}},35014:(e,a,t)=>{t.d(a,{I:()=>s});var n=t(16714),i=t(12754),r=t(22902),c=t(15311),l=t(11387);function s(){var e=(0,r.T)(),a=e.hasPermissions,t=e.hasLocalPermissions,s=(0,(0,c.r)().hasProduct)(i.x.Primary);return{canViewGlance:a(n.C.ViewVideoGlance),canViewResources:!0,canViewInteractives:s&&a(n.C.ViewVideoInteractives),canViewClips:s&&a(n.C.ViewVideoClips),canViewCurriculumLinks:a(n.C.ViewCurriculums),canUseActions:t(n.E.UseVideoActions),canViewPublicLayout:!t(n.E.WatchVideos)&&l.C.hasRegionPrefix(),canViewResourceItems:t(n.E.ViewVideoResourceItems),canNavigate:s}}},33915:(e,a,t)=>{t.r(a),t.d(a,{VideoInteractivesView:()=>S});var n=t(32735),i=t(81886),r=t(23481),c=t(20354),l=t(28400),s=t(65858),o=t(49935),m=t(13231),u=t(51365),d=t(183),p=t(39151),v=t(1666),g=t(20768),b=t(31949),f=t(1575),E=t(22902),h=t(14070),k=t(97291),I=t(51855),V=t(10671),y=t(27638),w=t(44110),N=t(35014),A=t(10741),L=t(22490),O=t(16747),C=t(98620),x=t(82431),P=r.T.encloseNamespace("shared.videoMedia");function S(e){var a,t,r,S,j=e.videoId,F=(0,y.u)(s.LZ.VideoThumbnail),G=F.setFavourite,T=F.canFavourite,R=(0,I.G)().isPlugin,W=(0,V._)({location:V.i.VideoItem}),_=(0,N.I)(),B=c.a.useBasicFetch(b.N.currentUser()),D=c.a.useBasicFetch(B.data.isAuthenticated&&v.h.yearGroups(B.data.customerId)),M=c.a.useBasicFetch(f.R.video(j)),Z=c.a.useBasicFetch(_.canViewInteractives&&g.b.videoInteractives(j)),H=null==Z?void 0:Z.data,Q=(null==H?void 0:H.length)||0,U=c.a.useBasicFetch(p.L.config()),Y="".concat(P("interactivesHeading")," (").concat(Q||"",")"),q=(0,w.i)(),z=(0,E.T)().hasPermissions,X=[{name:null===(a=M.data)||void 0===a?void 0:a.name,appLink:Object.assign(Object.assign({},C.Y.playVideo),{args:[j,l.m.slugify(null===(t=M.data)||void 0===t?void 0:t.name)]})},{name:Y,appLink:{application:k.O.VIDEOS,action:h.e.Videos.VIDEO_INTERACTIVES,args:[j,l.m.slugify(null===(r=M.data)||void 0===r?void 0:r.name)]},active:!0}];return n.useEffect((function(){_.canViewInteractives||function(){var e;i.Q.C$.trigger(Object.assign(Object.assign({},C.Y.playVideo),{args:[j,l.m.slugify(null===(e=M.data)||void 0===e?void 0:e.name)]}),{replace:!0})}()}),[_.canViewInteractives]),M.data&&(null==H?void 0:H.length)&&U.hasCompleted?n.createElement(u.M.Provider,{value:W},n.createElement("div",{className:"px-3"},n.createElement("h1",{className:"h2 mb-2"},Y),n.createElement("div",{className:"mb-2"},n.createElement(o.Oo,{breadcrumbs:X})),n.createElement(m.E4,{videos:H,yearGroups:D.data,getVideoAppLink:function(a,t){return L.W.getAppLink(a,Object.assign(Object.assign({},t),{context:d.Q.Widget,contextId:e.videoId}))},hasPermissions:z,getSubTextAppLink:function(e){return x.j.getSeriesAppLink(e.series)},setFavourite:G,canFavourite:T,presentationAudiences:q.data,getPreviewQuestionsAppLink:function(e){return A.j.getPreviewQuestionsAppLink(e)},imageCdnUrl:null===(S=U.data)||void 0===S?void 0:S.imageCdnUrl,isPlugin:R,getClassroomGuideAppLink:L.W.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:L.W.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:L.W.getResourceGuidanceAppLink}))):n.createElement(O.l,null)}},98620:(e,a,t)=>{t.d(a,{Y:()=>r});var n=t(14070),i=t(97291),r={playVideo:{application:i.O.VIDEOS,action:n.e.Videos.PLAY_VIDEO},playClip:{application:i.O.CLIPS,action:n.e.Clips.PLAY_CLIP}}},16747:(e,a,t)=>{t.d(a,{l:()=>l});var n=t(32735),i=t(49935),r=t(74696);const c={partialHeading:"okxfx"};function l(){return n.createElement("div",{className:"px-3"},n.createElement("div",{className:"partial-loading-background mb-2 ".concat(c.partialHeading)}),n.createElement("div",{className:"mb-2"},n.createElement(i.b2,null)),n.createElement(r.S,null))}}}]);
|
|
2
|
-
//# sourceMappingURL=1567-
|
|
2
|
+
//# sourceMappingURL=1567-b3141bc14f-lite.chunk.js.map
|
package/dist/scripts/{1567-edcff759b1-lite.chunk.js.map → 1567-b3141bc14f-lite.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/1567-edcff759b1-lite.chunk.js","mappings":"6NAuBaA,EAAiB,SAAH,WAAMC,WAAcC,EAAI,EAAJA,KAAMC,EAAO,EAAPA,QAASC,EAAM,EAANA,OAAUC,EAAY,EAAZA,aAAY,OAClF,sBAAIC,UAAS,yBAAoBF,EAAS,UAAY,KACnDA,EACG,8BAASF,GACT,gBAAC,IAAO,CAACC,QAASA,GACjBE,GAAgB,gBAAC,IAAY,CAACE,QAAS,iBAA0BC,KAAM,EAAAC,EAAA,QACxE,wBAAMH,UAAWD,EAAe,OAAS,IAAKH,IAG/C,EAOMQ,EAAc,SAAH,GAAyC,IAAnCC,EAAW,EAAXA,YACtBC,GAAW,OAAc,QAEzBC,EAASF,aAAW,EAAXA,EAAaE,OAE5B,OAAKA,GAAWD,GAAYC,EAAS,EAC5B,iCAELD,EAEA,oCAAgB,cACd,sBAAIN,UAAU,sBACZ,gBAACN,EAAc,CAACC,WAAYU,EAAYE,EAAS,GAAIR,cAAY,MAMvE,oCAAgB,cACd,sBAAIC,UAAU,sBACXK,EAAYG,KAAI,SAACC,EAAGC,GAAG,OAAK,gBAAChB,EAAc,CAACiB,IAAKD,EAAKf,WAAYc,GAAK,KAIhF,EAEaG,EAAqB,QAAW,YAAiD,QAAtCC,SAAAA,OAAQ,IAAG,IAAC,EAGlE,OAFiB,OAAc,QAI3B,uBAAKb,UAAU,6BAA6Bc,MAAO,CAAEC,OAAQ,YAAaC,MAAO,UAKnF,oCAAgB,cACd,sBAAIhB,UAAU,sBACX,2BAA4C,CAAEa,SAAAA,IAAYL,KAAI,WAAYE,GAAG,IAAZM,EAAK,EAALA,MAAK,OACrE,sBAAIL,IAAKD,EAAKV,UAAU,mBACtB,wBAAMA,UAAU,4CAA4Cc,MAAO,CAAEE,MAAAA,GAASC,wBAAyB,CAAEC,OAAQ,WAC9G,KAKf,G,6FCpFA,SAAgB,eAAiB,QAAQ,YAAc,QAAQ,mBAAqB,QAAQ,iBAAmB,QAAQ,kBAAoB,SCiBrI,SAAUC,EAAiBC,GAC/B,OACE,uBAAKpB,UAAU,QACZqB,MAAMD,EAAME,WAAWC,KAAK,MAAMf,KAAI,SAACgB,EAAGC,GAAC,OAC1C,uBAAKzB,UAAU,SAASW,IAAKc,GAC1BL,EAAMM,kBAAoB,uBAAK1B,UAAU,yCAC1C,gBAAC2B,EAAgB,iBAAKP,IAClB,IAId,CAEM,SAAUO,EAAiBP,GAC/B,IAAMQ,GAAc,EAAAC,EAAA,KAGdC,EAAmB,OADZC,EAAA,UAAwBH,EAAa,MAG5CI,EAAiBZ,EAAMa,iBAAmBL,EAAYM,GAE5D,OACE,gBAACC,EAAA,EAAG,CAACnC,UAAS,UAAK8B,EAAU,GAAK,OAAM,iBACtC,gBAACM,EAAA,EAAG,iBAAKL,EAAA,wBAAqC,CAAE/B,UAAS,6CAAwC8B,EAAU,YAAc,uBACvH,gBAACK,EAAA,EAAG,OACCH,GACD,uBAAKhC,UAAU,0DACb,uBAAKA,UAAS,qCAAgC,wBAGlD,gBAACoC,EAAA,EAAG,CAACF,GAAIH,EAAA,sBAAoCC,IAC3C,uBAAKhC,UAAS,qCAAgC8B,EAAU,UAAY,YAAW,YAAI,yBAIzF,gBAACM,EAAA,EAAG,iBAAKL,EAAA,sBAAmC,CAAE/B,UAAW8B,EAAU,OAAS,SAC1E,uBAAK9B,UAAS,0CAAqC,iBACnD,uBAAKA,UAAS,qCAAgC,yBAItD,CA7CAmB,EAAiBkB,aAAe,CAC9Bf,UAAW,G,wICfb,IAAMgB,EAAyD,CAC7DzB,SAAU,EACV0B,SAAU,GACVC,SAAU,KAaCC,EAAuB,CAClCC,uBAAsB,WAAoC,I,EAAnCC,EAAA,uDAAiC,CAAC,EACjDC,EAAO,OAAH,wBACLN,GACAK,GAKL,O,EAAWtB,MAAMuB,EAAK/B,U,omBAAWL,KAAI,iBAAO,CAAEQ,MAAO,GAAF,OAFhB6B,KAAKC,IAAID,KAAKE,MAAMF,KAAKG,SAAWJ,EAAKJ,UAAWI,EAAKL,UAEd,MAAM,GACtF,E,wECnBWU,EAA2B,WACtC,OAAwD,OAAgB,CAAEC,iBAAiB,IAAnFC,EAAkB,EAAlBA,mBAAoBC,EAAuB,EAAvBA,wBAEtBC,EAAeF,GAAsBC,IAO3C,OALkB,oBACdC,GACF,0BAAuCA,EAAaC,IAIxD,C,8FCCM,SAAUC,IACd,OAAgD,SAAxCC,EAAc,EAAdA,eAAgBC,EAAmB,EAAnBA,oBAGlBC,GAAQC,GAFS,SAAfA,YAEiB,aAiBzB,MAAO,CACLC,cAAeJ,EAAe,qBAC9BK,kBAAkB,EAClBC,oBAAqBJ,GAASF,EAAe,2BAC7CO,aAAcL,GAASF,EAAe,oBACtCQ,uBAAwBR,EAAe,qBACvCS,cAAeR,EAAoB,qBACnCS,qBAlBIT,EAAoB,kBAQjB,sBAWPU,qBAAsBV,EAAoB,4BAC1CW,YAAaV,EAEjB,C,kXCfMW,EAAY,qBADA,qBAOZ,SAAUC,EAAsBlD,G,YAC5BmD,EAAYnD,EAAZmD,QACR,GAAuC,IAAAC,GAAkB,qBAAjDC,EAAY,EAAZA,aAAcC,EAAY,EAAZA,aACdC,GAAa,SAAbA,SAEFC,GAAe,OAAgB,CAAEC,SAAU,gBAC3CC,GAAgB,SAEhBC,EAAc,kBAAkC,mBAChDC,EAAa,kBACjBD,EAAYE,KAAKC,iBAAmB,eAA4BH,EAAYE,KAAKE,aAG7EC,EAAQ,kBAA4B,UAAoBb,IACxDc,EAAe,kBACnBP,EAAchB,qBAAuB,sBAAsCS,IAEvEe,EAAUD,aAAY,EAAZA,EAAcJ,KACxBM,GAAQD,aAAO,EAAPA,EAAS/E,SAAU,EAE3BiF,EAAS,kBAA6B,cAEtCC,EAAQ,GAAH,OAAMpB,EAAU,uBAAsB,aAAKkB,GAAS,GAAE,KAE3DG,GAAY,SACVlC,GAAmB,SAAnBA,eAEFnD,EAA4B,CAAC,CACjCT,KAAgB,QAAV,EAAAwF,EAAMH,YAAI,eAAErF,KAClBC,QAAS,OAAF,wBACF,eAA4B,CAC/B8F,KAAM,CAAEpB,EAAS,YAA6B,QAAV,EAAAa,EAAMH,YAAI,eAAErF,UAEjD,CACDA,KAAM6F,EACN5F,QAAS,CACP+F,YAAa,WACbC,OAAS,8BACTF,KAAM,CAAEpB,EAAS,YAA6B,QAAV,EAAAa,EAAMH,YAAI,eAAErF,QAElDE,QAAQ,IAgBV,OANA,aAAgB,WACTgF,EAAchB,qBARrB,W,MACE,eAA2B,OAAD,wBACrB,eAA4B,CAC/B6B,KAAM,CAAEpB,EAAS,YAA6B,QAAV,EAAAa,EAAMH,YAAI,eAAErF,SAC/C,CAAEkG,SAAS,GAChB,CAIIC,EAEJ,GAAG,CAACjB,EAAchB,sBAEbsB,EAAMH,OAASK,aAAO,EAAPA,EAAS/E,SAAWiF,EAAOQ,aAI7C,gBAAC,aAA4B,CAACC,MAAOrB,GACnC,uBAAK5E,UAAU,QACb,sBAAIA,UAAU,WAAWyF,GAEzB,uBAAKzF,UAAU,QACb,gBAAC,KAAW,CAACK,YAAaA,KAG5B,gBAAC,KAAS,CACR6F,OAAQZ,EACRN,WAAYA,EAAWC,KACvBkB,gBAAiB,SAACf,EAAOxC,GAAI,OAAK,eAA8BwC,EAAO,OAAF,wBAChExC,GAAI,CACPwD,QAAS,WACTC,UAAWjF,EAAMmD,UACjB,EACFf,eAAgBA,EAChB8C,kBAAmB,SAAAlB,GAAK,OAAI,qBAAqCA,EAAMmB,OAAO,EAC9E9B,aAAcA,EACdC,aAAcA,EACd8B,sBAAuBd,EAAUT,KACjCwB,2BAA4B,SAAAC,GAAW,OAAI,+BAA8CA,EAAY,EACrGC,YAAwB,QAAX,EAAAnB,EAAOP,YAAI,eAAE0B,YAC1BhC,SAAUA,EACViC,yBAA0B,6BAC1BC,8BAA+B,kCAC/BC,2BAA4B,mCA7B3B,gBAAC,IAAqB,KAkCjC,C,6DCjIaC,EAAqB,CAChCC,UAAW,CACTpB,YAAa,WACbC,OAAQ,uBAEVoB,SAAU,CACRrB,YAAa,UACbC,OAAQ,qB,wECVZ,SAAgB,eAAiB,SCM3B,SAAUqB,IACd,OACE,uBAAKlH,UAAU,QACb,uBAAKA,UAAS,0CAAqC,oBACnD,uBAAKA,UAAU,QACb,gBAAC,KAAkB,OAErB,gBAACmB,EAAA,EAAgB,MAGvB,C","sources":["file:///app/packages/libs/shared/src/components/breadcrumbs/Breadcrumbs.tsx","file:///app/packages/libs/shared/src/components/video-list/partial-loading/partial-video-list.scss","file:///app/packages/libs/shared/src/components/video-list/partial-loading/PartialVideoList.tsx","file:///app/packages/libs/shared/src/utils/PartialLoadingHelper.ts","file:///app/packages/projects/lite/src/shared/hooks/usePresentationAudiences.ts","file:///app/packages/projects/lite/src/shared/hooks/useVideoFeatureAccess.ts","file:///app/packages/projects/lite/src/shared/views/video-media/VideoInteractivesView.tsx","file:///app/packages/projects/lite/src/shared/views/video-media/VideoMediaAppLinks.ts","file:///app/packages/projects/lite/src/shared/views/video-media/partial-loading/partial-video-media-view.scss","file:///app/packages/projects/lite/src/shared/views/video-media/partial-loading/PartialVideoMediaView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { PartialLoadingHelper } from 'libs/shared/utils/PartialLoadingHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { SvgContainer, SvgContainerSize } from '../svg-container/SvgContainer';\n\nexport interface Breadcrumb {\n name: string;\n appLink?: Core.AppLink;\n active?: boolean;\n}\n\ninterface BreadcrumbItemProps {\n breadcrumb: Breadcrumb;\n withBackIcon?: boolean;\n}\n\nexport const BreadcrumbItem = ({ breadcrumb: { name, appLink, active }, withBackIcon }: BreadcrumbItemProps) => (\n <li className={`breadcrumb-item${active ? ' active' : ''}`}>\n {active\n ? <strong>{name}</strong>\n : <AppLink appLink={appLink}>\n {withBackIcon && <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Small} />}\n <span className={withBackIcon ? 'ms-2' : ''}>{name}</span>\n </AppLink>\n }\n </li>\n);\n\ninterface BreadcrumbsProps {\n breadcrumbs: Breadcrumb[];\n}\n\nexport const Breadcrumbs = ({ breadcrumbs }: BreadcrumbsProps) => {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n const length = breadcrumbs?.length;\n\n if (!length || (isMobile && length < 2))\n return <></>;\n\n if (isMobile)\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} withBackIcon />\n </ol>\n </nav>\n );\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {breadcrumbs.map((b, idx) => <BreadcrumbItem key={idx} breadcrumb={b} />)}\n </ol>\n </nav>\n );\n};\n\nexport const PartialBreadcrumbs = React.memo(function({ numItems = 3 }: { numItems?: number; }) {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n if (isMobile) {\n return (\n <div className='partial-loading-background' style={{ height: '1.3125rem', width: '6rem' }} />\n );\n }\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {PartialLoadingHelper.getPartialLoadingItems({ numItems }).map(({ width }, idx) => (\n <li key={idx} className='breadcrumb-item'>\n <span className='d-inline-block partial-loading-background' style={{ width }} dangerouslySetInnerHTML={{ __html: ' ' }} />\n </li>\n ))}\n </ol>\n </nav>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"partialOptions\":\"Gufgq\",\"partialName\":\"SicQQ\",\"partialDescription\":\"dPGMq\",\"partialThumbnail\":\"vZrnb\",\"partialDragHandle\":\"iq73R\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { VideoListHelper } from 'libs/shared/components/video-list/VideoListHelper';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport styles from './partial-video-list.scss';\n\ninterface PartialVideoListProps {\n withReordering?: boolean;\n numVideos?: number;\n allowBulkActions?: boolean;\n}\n\nPartialVideoList.defaultProps = {\n numVideos: 15\n};\n\nexport function PartialVideoList(props: PartialVideoListProps): JSX.Element {\n return (\n <div className='mx-2'>\n {Array(props.numVideos).fill(null).map((_, i) => (\n <div className='d-flex' key={i}>\n {props.allowBulkActions && <div className='form-check pe-3 pe-sm-2 mx-0 mx-md-2' />}\n <PartialVideoItem {...props} />\n </div>\n ))}\n </div>\n );\n}\n\nexport function PartialVideoItem(props: PartialVideoListProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n const size = VideoListHelper.getSize(breakpoints, 'md');\n const isSmall = size === 'sm';\n\n const withDragHandle = props.withReordering && !breakpoints.xs;\n\n return (\n <Row className={`${isSmall ? '' : 'py-2'} flex-grow-1`}>\n <Col {...VideoListHelper.getThumbnailColumns()} className={`flex-column align-items-flex-start ${isSmall ? `pb-2 pe-1` : 'mb-1 pe-3 pe-md-2'}`}>\n <Row>\n {!!withDragHandle && (\n <div className='d-flex align-items-center justify-content-center col-2'>\n <div className={`partial-loading-background ${styles.partialDragHandle}`} />\n </div>\n )}\n <Col xs={VideoListHelper.getThumbnailColSize(withDragHandle)}>\n <div className={`partial-loading-background ${isSmall ? 'rounded' : 'rounded-3'} ${styles.partialThumbnail}`} />\n </Col>\n </Row>\n </Col>\n <Col {...VideoListHelper.getDetailsColumns()} className={isSmall ? 'pb-2' : 'px-2'}>\n <div className={`partial-loading-background mb-1 ${styles.partialName}`} />\n <div className={`partial-loading-background ${styles.partialDescription}`} />\n </Col>\n </Row>\n );\n}\n\n","const DEFAULT_PARTIAL_LOADING_OPTIONS: PartialLoadingOptions = {\n numItems: 5,\n minWidth: 50, // px\n maxWidth: 100 // px\n};\n\nexport interface PartialLoadingOptions {\n numItems?: number;\n minWidth?: number;\n maxWidth?: number;\n}\n\ninterface PartialLoadingItem {\n width: string;\n}\n\nexport const PartialLoadingHelper = {\n getPartialLoadingItems(options: PartialLoadingOptions = {}): PartialLoadingItem[] {\n const opts = {\n ...DEFAULT_PARTIAL_LOADING_OPTIONS,\n ...options\n };\n\n const getRandomFilterWidth = () => Math.max(Math.floor(Math.random() * opts.maxWidth), opts.minWidth);\n\n return [...Array(opts.numItems)].map(() => ({ width: `${getRandomFilterWidth()}px` }));\n }\n};","import { Flight } from 'libs/common/react/index';\n\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\nimport { usePresentation } from 'shared/hooks/usePresentation';\n\nexport const usePresentationAudiences = () => {\n const { activePresentation, getFallbackPresentation } = usePresentation({ redirectOnError: true });\n\n const presentation = activePresentation || getFallbackPresentation();\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n !!presentation &&\n AudienceRequests.presentationAudiences(presentation.id)\n );\n\n return audiences;\n};","import { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\n\nimport { LiteRouteHelper } from 'shared/utils/LiteRouteHelper';\n\nexport interface VideoFeaturesHash {\n canViewGlance: boolean;\n canViewResources: boolean;\n canViewInteractives: boolean;\n canViewClips: boolean;\n canUseActions: boolean;\n canViewPublicLayout: boolean;\n canNavigate: boolean;\n canViewCurriculumLinks: boolean;\n canViewResourceItems: boolean;\n}\n\nexport function useVideoFeatureAccess() {\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n const { hasProduct } = useProducts();\n\n const hasNP = hasProduct(ProductId.Primary);\n\n function showPublicLayout(): boolean {\n /**\n * Authenticated users should never see the placeholder\n */\n if (hasLocalPermissions(LocalPermissionName.WatchVideos))\n return false;\n\n /**\n * Accessing a play page unathenticated will have different contextual behabviours:\n * - For a share page, the user should see the video and never the placeholder\n * - For a public browsing page (ie. using a route-prefix) they should see the placeholder\n */\n return LiteRouteHelper.hasRegionPrefix();\n }\n\n return {\n canViewGlance: hasPermissions(PermissionName.ViewVideoGlance),\n canViewResources: true,\n canViewInteractives: hasNP && hasPermissions(PermissionName.ViewVideoInteractives),\n canViewClips: hasNP && hasPermissions(PermissionName.ViewVideoClips),\n canViewCurriculumLinks: hasPermissions(PermissionName.ViewCurriculums),\n canUseActions: hasLocalPermissions(LocalPermissionName.UseVideoActions),\n canViewPublicLayout: showPublicLayout(),\n canViewResourceItems: hasLocalPermissions(LocalPermissionName.ViewVideoResourceItems),\n canNavigate: hasNP\n };\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { Breadcrumb, Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { RelatedVideosContext } from 'libs/shared/enums/RelatedVideosContext';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { Config, CurrentUser, InteractiveMetadata, Video, YearGroup } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { usePresentationAudiences } from 'shared/hooks/usePresentationAudiences';\nimport { useVideoFeatureAccess } from 'shared/hooks/useVideoFeatureAccess';\nimport { InteractiveHelpers } from 'shared/utils/InteractiveHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\nimport { PartialVideoMediaView } from 'shared/views/video-media/partial-loading/PartialVideoMediaView';\nimport { VideoMediaAppLinks } from 'shared/views/video-media/VideoMediaAppLinks';\n\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nconst namespace = 'shared.videoMedia';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface VideoInteractivesViewProps {\n videoId: string;\n}\n\nexport function VideoInteractivesView(props: VideoInteractivesViewProps): JSX.Element {\n const { videoId } = props;\n const { setFavourite, canFavourite } = useLiteFavourites(LocationContext.VideoThumbnail);\n const { isPlugin } = usePluginHelper();\n \n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem });\n const featureAccess = useVideoFeatureAccess();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(videoId));\n const interactives = Flight.useBasicFetch<InteractiveMetadata[]>(\n featureAccess.canViewInteractives && InteractiveRequests.videoInteractives(videoId)\n );\n const content = interactives?.data;\n const count = content?.length || 0;\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const title = `${getPhrase('interactivesHeading')} (${count || ''})`;\n\n const audiences = usePresentationAudiences();\n const { hasPermissions } = usePermissions();\n\n const breadcrumbs: Breadcrumb[] = [{\n name: video.data?.name,\n appLink: {\n ...VideoMediaAppLinks.playVideo,\n args: [ videoId, TextHelper.slugify(video.data?.name) ]\n }\n }, {\n name: title,\n appLink: {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.VIDEO_INTERACTIVES,\n args: [ videoId, TextHelper.slugify(video.data?.name) ]\n },\n active: true\n }];\n\n function redirectToPlaypage(): void {\n Core.AppLinkHelper.trigger({\n ...VideoMediaAppLinks.playVideo,\n args: [ videoId, TextHelper.slugify(video.data?.name) ]\n }, { replace: true });\n }\n\n React.useEffect(() => {\n if (!featureAccess.canViewInteractives) {\n redirectToPlaypage();\n }\n }, [featureAccess.canViewInteractives]);\n\n if (!video.data || !content?.length || !config.hasCompleted)\n return <PartialVideoMediaView />;\n\n return (\n <VideoActionsContext.Provider value={videoActions}>\n <div className='px-3'>\n <h1 className='h2 mb-2'>{title}</h1>\n \n <div className='mb-2'>\n <Breadcrumbs breadcrumbs={breadcrumbs}/>\n </div>\n\n <VideoList\n videos={content}\n yearGroups={yearGroups.data}\n getVideoAppLink={(video, opts) => VideoAppLinkHelper.getAppLink(video, {\n ...opts,\n context: RelatedVideosContext.Widget,\n contextId: props.videoId\n })}\n hasPermissions={hasPermissions}\n getSubTextAppLink={video => SeriesAppLinkHelper.getSeriesAppLink(video.series)}\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n presentationAudiences={audiences.data}\n getPreviewQuestionsAppLink={interactive => InteractiveHelpers.getPreviewQuestionsAppLink(interactive)}\n imageCdnUrl={config.data?.imageCdnUrl}\n isPlugin={isPlugin}\n getClassroomGuideAppLink={VideoAppLinkHelper.getClassroomGuideAppLink}\n getInteractiveGuidanceAppLink={VideoAppLinkHelper.getInteractiveGuidanceAppLink}\n getResourceGuidanceAppLink={VideoAppLinkHelper.getResourceGuidanceAppLink}\n />\n </div>\n </VideoActionsContext.Provider>\n );\n}","\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nexport const VideoMediaAppLinks = {\n playVideo: {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO\n },\n playClip: {\n application: AppChannels.CLIPS,\n action: Actions.Clips.PLAY_CLIP\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"partialHeading\":\"okxfx\"};","import React from 'react';\n\nimport { PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\n\nimport styles from './partial-video-media-view.scss';\n\nexport function PartialVideoMediaView(): JSX.Element {\n return (\n <div className='px-3'>\n <div className={`partial-loading-background mb-2 ${styles.partialHeading}`} />\n <div className='mb-2'>\n <PartialBreadcrumbs/>\n </div>\n <PartialVideoList />\n </div>\n );\n}"],"names":["BreadcrumbItem","breadcrumb","name","appLink","active","withBackIcon","className","svgName","size","S","Breadcrumbs","breadcrumbs","isMobile","length","map","b","idx","key","PartialBreadcrumbs","numItems","style","height","width","dangerouslySetInnerHTML","__html","PartialVideoList","props","Array","numVideos","fill","_","i","allowBulkActions","PartialVideoItem","breakpoints","useBreakpoints","isSmall","VideoListHelper","withDragHandle","withReordering","xs","Row","Col","defaultProps","DEFAULT_PARTIAL_LOADING_OPTIONS","minWidth","maxWidth","PartialLoadingHelper","getPartialLoadingItems","options","opts","Math","max","floor","random","usePresentationAudiences","redirectOnError","activePresentation","getFallbackPresentation","presentation","id","useVideoFeatureAccess","hasPermissions","hasLocalPermissions","hasNP","hasProduct","canViewGlance","canViewResources","canViewInteractives","canViewClips","canViewCurriculumLinks","canUseActions","canViewPublicLayout","canViewResourceItems","canNavigate","getPhrase","VideoInteractivesView","videoId","u","setFavourite","canFavourite","isPlugin","videoActions","location","featureAccess","currentUser","yearGroups","data","isAuthenticated","customerId","video","interactives","content","count","config","title","audiences","args","application","action","replace","redirectToPlaypage","hasCompleted","value","videos","getVideoAppLink","context","contextId","getSubTextAppLink","series","presentationAudiences","getPreviewQuestionsAppLink","interactive","imageCdnUrl","getClassroomGuideAppLink","getInteractiveGuidanceAppLink","getResourceGuidanceAppLink","VideoMediaAppLinks","playVideo","playClip","PartialVideoMediaView"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"scripts/1567-b3141bc14f-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/breadcrumbs/Breadcrumbs.tsx","file:///app/packages/libs/shared/src/components/video-list/partial-loading/partial-video-list.scss","file:///app/packages/libs/shared/src/components/video-list/partial-loading/PartialVideoList.tsx","file:///app/packages/libs/shared/src/utils/PartialLoadingHelper.ts","file:///app/packages/projects/lite/src/shared/hooks/usePresentationAudiences.ts","file:///app/packages/projects/lite/src/shared/hooks/useVideoFeatureAccess.ts","file:///app/packages/projects/lite/src/shared/views/video-media/VideoInteractivesView.tsx","file:///app/packages/projects/lite/src/shared/views/video-media/VideoMediaAppLinks.ts","file:///app/packages/projects/lite/src/shared/views/video-media/partial-loading/partial-video-media-view.scss","file:///app/packages/projects/lite/src/shared/views/video-media/partial-loading/PartialVideoMediaView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { PartialLoadingHelper } from 'libs/shared/utils/PartialLoadingHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { SvgContainer, SvgContainerSize } from '../svg-container/SvgContainer';\n\nexport interface Breadcrumb {\n name: string;\n appLink?: Core.AppLink;\n active?: boolean;\n}\n\ninterface BreadcrumbItemProps {\n breadcrumb: Breadcrumb;\n withBackIcon?: boolean;\n}\n\nexport const BreadcrumbItem = ({ breadcrumb: { name, appLink, active }, withBackIcon }: BreadcrumbItemProps) => (\n <li className={`breadcrumb-item${active ? ' active' : ''}`}>\n {active\n ? <strong>{name}</strong>\n : <AppLink appLink={appLink}>\n {withBackIcon && <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Small} />}\n <span className={withBackIcon ? 'ms-2' : ''}>{name}</span>\n </AppLink>\n }\n </li>\n);\n\ninterface BreadcrumbsProps {\n breadcrumbs: Breadcrumb[];\n}\n\nexport const Breadcrumbs = ({ breadcrumbs }: BreadcrumbsProps) => {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n const length = breadcrumbs?.length;\n\n if (!length || (isMobile && length < 2))\n return <></>;\n\n if (isMobile)\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} withBackIcon />\n </ol>\n </nav>\n );\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {breadcrumbs.map((b, idx) => <BreadcrumbItem key={idx} breadcrumb={b} />)}\n </ol>\n </nav>\n );\n};\n\nexport const PartialBreadcrumbs = React.memo(function({ numItems = 3 }: { numItems?: number; }) {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n if (isMobile) {\n return (\n <div className='partial-loading-background' style={{ height: '1.3125rem', width: '6rem' }} />\n );\n }\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {PartialLoadingHelper.getPartialLoadingItems({ numItems }).map(({ width }, idx) => (\n <li key={idx} className='breadcrumb-item'>\n <span className='d-inline-block partial-loading-background' style={{ width }} dangerouslySetInnerHTML={{ __html: ' ' }} />\n </li>\n ))}\n </ol>\n </nav>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"partialOptions\":\"Gufgq\",\"partialName\":\"SicQQ\",\"partialDescription\":\"dPGMq\",\"partialThumbnail\":\"vZrnb\",\"partialDragHandle\":\"iq73R\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { VideoListHelper } from 'libs/shared/components/video-list/VideoListHelper';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport styles from './partial-video-list.scss';\n\ninterface PartialVideoListProps {\n withReordering?: boolean;\n numVideos?: number;\n allowBulkActions?: boolean;\n}\n\nPartialVideoList.defaultProps = {\n numVideos: 15\n};\n\nexport function PartialVideoList(props: PartialVideoListProps): JSX.Element {\n return (\n <div className='mx-2'>\n {Array(props.numVideos).fill(null).map((_, i) => (\n <div className='d-flex' key={i}>\n {props.allowBulkActions && <div className='form-check pe-3 pe-sm-2 mx-0 mx-md-2' />}\n <PartialVideoItem {...props} />\n </div>\n ))}\n </div>\n );\n}\n\nexport function PartialVideoItem(props: PartialVideoListProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n const size = VideoListHelper.getSize(breakpoints, 'md');\n const isSmall = size === 'sm';\n\n const withDragHandle = props.withReordering && !breakpoints.xs;\n\n return (\n <Row className={`${isSmall ? '' : 'py-2'} flex-grow-1`}>\n <Col {...VideoListHelper.getThumbnailColumns()} className={`flex-column align-items-flex-start ${isSmall ? `pb-2 pe-1` : 'mb-1 pe-3 pe-md-2'}`}>\n <Row>\n {!!withDragHandle && (\n <div className='d-flex align-items-center justify-content-center col-2'>\n <div className={`partial-loading-background ${styles.partialDragHandle}`} />\n </div>\n )}\n <Col xs={VideoListHelper.getThumbnailColSize(withDragHandle)}>\n <div className={`partial-loading-background ${isSmall ? 'rounded' : 'rounded-3'} ${styles.partialThumbnail}`} />\n </Col>\n </Row>\n </Col>\n <Col {...VideoListHelper.getDetailsColumns()} className={isSmall ? 'pb-2' : 'px-2'}>\n <div className={`partial-loading-background mb-1 ${styles.partialName}`} />\n <div className={`partial-loading-background ${styles.partialDescription}`} />\n </Col>\n </Row>\n );\n}\n\n","const DEFAULT_PARTIAL_LOADING_OPTIONS: PartialLoadingOptions = {\n numItems: 5,\n minWidth: 50, // px\n maxWidth: 100 // px\n};\n\nexport interface PartialLoadingOptions {\n numItems?: number;\n minWidth?: number;\n maxWidth?: number;\n}\n\ninterface PartialLoadingItem {\n width: string;\n}\n\nexport const PartialLoadingHelper = {\n getPartialLoadingItems(options: PartialLoadingOptions = {}): PartialLoadingItem[] {\n const opts = {\n ...DEFAULT_PARTIAL_LOADING_OPTIONS,\n ...options\n };\n\n const getRandomFilterWidth = () => Math.max(Math.floor(Math.random() * opts.maxWidth), opts.minWidth);\n\n return [...Array(opts.numItems)].map(() => ({ width: `${getRandomFilterWidth()}px` }));\n }\n};","import { Flight } from 'libs/common/react/index';\n\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\nimport { usePresentation } from 'shared/hooks/usePresentation';\n\nexport const usePresentationAudiences = () => {\n const { activePresentation, getFallbackPresentation } = usePresentation({ redirectOnError: true });\n\n const presentation = activePresentation || getFallbackPresentation();\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n !!presentation &&\n AudienceRequests.presentationAudiences(presentation.id)\n );\n\n return audiences;\n};","import { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\n\nimport { LiteRouteHelper } from 'shared/utils/LiteRouteHelper';\n\nexport interface VideoFeaturesHash {\n canViewGlance: boolean;\n canViewResources: boolean;\n canViewInteractives: boolean;\n canViewClips: boolean;\n canUseActions: boolean;\n canViewPublicLayout: boolean;\n canNavigate: boolean;\n canViewCurriculumLinks: boolean;\n canViewResourceItems: boolean;\n}\n\nexport function useVideoFeatureAccess() {\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n const { hasProduct } = useProducts();\n\n const hasNP = hasProduct(ProductId.Primary);\n\n function showPublicLayout(): boolean {\n /**\n * Authenticated users should never see the placeholder\n */\n if (hasLocalPermissions(LocalPermissionName.WatchVideos))\n return false;\n\n /**\n * Accessing a play page unathenticated will have different contextual behabviours:\n * - For a share page, the user should see the video and never the placeholder\n * - For a public browsing page (ie. using a route-prefix) they should see the placeholder\n */\n return LiteRouteHelper.hasRegionPrefix();\n }\n\n return {\n canViewGlance: hasPermissions(PermissionName.ViewVideoGlance),\n canViewResources: true,\n canViewInteractives: hasNP && hasPermissions(PermissionName.ViewVideoInteractives),\n canViewClips: hasNP && hasPermissions(PermissionName.ViewVideoClips),\n canViewCurriculumLinks: hasPermissions(PermissionName.ViewCurriculums),\n canUseActions: hasLocalPermissions(LocalPermissionName.UseVideoActions),\n canViewPublicLayout: showPublicLayout(),\n canViewResourceItems: hasLocalPermissions(LocalPermissionName.ViewVideoResourceItems),\n canNavigate: hasNP\n };\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { Breadcrumb, Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { RelatedVideosContext } from 'libs/shared/enums/RelatedVideosContext';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { Config, CurrentUser, InteractiveMetadata, Video, YearGroup } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { usePresentationAudiences } from 'shared/hooks/usePresentationAudiences';\nimport { useVideoFeatureAccess } from 'shared/hooks/useVideoFeatureAccess';\nimport { InteractiveHelpers } from 'shared/utils/InteractiveHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\nimport { PartialVideoMediaView } from 'shared/views/video-media/partial-loading/PartialVideoMediaView';\nimport { VideoMediaAppLinks } from 'shared/views/video-media/VideoMediaAppLinks';\n\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nconst namespace = 'shared.videoMedia';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface VideoInteractivesViewProps {\n videoId: string;\n}\n\nexport function VideoInteractivesView(props: VideoInteractivesViewProps): JSX.Element {\n const { videoId } = props;\n const { setFavourite, canFavourite } = useLiteFavourites(LocationContext.VideoThumbnail);\n const { isPlugin } = usePluginHelper();\n \n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem });\n const featureAccess = useVideoFeatureAccess();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(videoId));\n const interactives = Flight.useBasicFetch<InteractiveMetadata[]>(\n featureAccess.canViewInteractives && InteractiveRequests.videoInteractives(videoId)\n );\n const content = interactives?.data;\n const count = content?.length || 0;\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const title = `${getPhrase('interactivesHeading')} (${count || ''})`;\n\n const audiences = usePresentationAudiences();\n const { hasPermissions } = usePermissions();\n\n const breadcrumbs: Breadcrumb[] = [{\n name: video.data?.name,\n appLink: {\n ...VideoMediaAppLinks.playVideo,\n args: [ videoId, TextHelper.slugify(video.data?.name) ]\n }\n }, {\n name: title,\n appLink: {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.VIDEO_INTERACTIVES,\n args: [ videoId, TextHelper.slugify(video.data?.name) ]\n },\n active: true\n }];\n\n function redirectToPlaypage(): void {\n Core.AppLinkHelper.trigger({\n ...VideoMediaAppLinks.playVideo,\n args: [ videoId, TextHelper.slugify(video.data?.name) ]\n }, { replace: true });\n }\n\n React.useEffect(() => {\n if (!featureAccess.canViewInteractives) {\n redirectToPlaypage();\n }\n }, [featureAccess.canViewInteractives]);\n\n if (!video.data || !content?.length || !config.hasCompleted)\n return <PartialVideoMediaView />;\n\n return (\n <VideoActionsContext.Provider value={videoActions}>\n <div className='px-3'>\n <h1 className='h2 mb-2'>{title}</h1>\n \n <div className='mb-2'>\n <Breadcrumbs breadcrumbs={breadcrumbs}/>\n </div>\n\n <VideoList\n videos={content}\n yearGroups={yearGroups.data}\n getVideoAppLink={(video, opts) => VideoAppLinkHelper.getAppLink(video, {\n ...opts,\n context: RelatedVideosContext.Widget,\n contextId: props.videoId\n })}\n hasPermissions={hasPermissions}\n getSubTextAppLink={video => SeriesAppLinkHelper.getSeriesAppLink(video.series)}\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n presentationAudiences={audiences.data}\n getPreviewQuestionsAppLink={interactive => InteractiveHelpers.getPreviewQuestionsAppLink(interactive)}\n imageCdnUrl={config.data?.imageCdnUrl}\n isPlugin={isPlugin}\n getClassroomGuideAppLink={VideoAppLinkHelper.getClassroomGuideAppLink}\n getInteractiveGuidanceAppLink={VideoAppLinkHelper.getInteractiveGuidanceAppLink}\n getResourceGuidanceAppLink={VideoAppLinkHelper.getResourceGuidanceAppLink}\n />\n </div>\n </VideoActionsContext.Provider>\n );\n}","\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nexport const VideoMediaAppLinks = {\n playVideo: {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO\n },\n playClip: {\n application: AppChannels.CLIPS,\n action: Actions.Clips.PLAY_CLIP\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"partialHeading\":\"okxfx\"};","import React from 'react';\n\nimport { PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\n\nimport styles from './partial-video-media-view.scss';\n\nexport function PartialVideoMediaView(): JSX.Element {\n return (\n <div className='px-3'>\n <div className={`partial-loading-background mb-2 ${styles.partialHeading}`} />\n <div className='mb-2'>\n <PartialBreadcrumbs/>\n </div>\n <PartialVideoList />\n </div>\n );\n}"],"names":["BreadcrumbItem","breadcrumb","name","appLink","active","withBackIcon","className","svgName","size","S","Breadcrumbs","breadcrumbs","isMobile","length","map","b","idx","key","PartialBreadcrumbs","numItems","style","height","width","dangerouslySetInnerHTML","__html","PartialVideoList","props","Array","numVideos","fill","_","i","allowBulkActions","PartialVideoItem","breakpoints","useBreakpoints","isSmall","VideoListHelper","withDragHandle","withReordering","xs","Row","Col","defaultProps","DEFAULT_PARTIAL_LOADING_OPTIONS","minWidth","maxWidth","PartialLoadingHelper","getPartialLoadingItems","options","opts","Math","max","floor","random","usePresentationAudiences","redirectOnError","activePresentation","getFallbackPresentation","presentation","id","useVideoFeatureAccess","hasPermissions","hasLocalPermissions","hasNP","hasProduct","canViewGlance","canViewResources","canViewInteractives","canViewClips","canViewCurriculumLinks","canUseActions","canViewPublicLayout","canViewResourceItems","canNavigate","getPhrase","VideoInteractivesView","videoId","u","setFavourite","canFavourite","isPlugin","videoActions","location","featureAccess","currentUser","yearGroups","data","isAuthenticated","customerId","video","interactives","content","count","config","title","audiences","args","application","action","replace","redirectToPlaypage","hasCompleted","value","videos","getVideoAppLink","context","contextId","getSubTextAppLink","series","presentationAudiences","getPreviewQuestionsAppLink","interactive","imageCdnUrl","getClassroomGuideAppLink","getInteractiveGuidanceAppLink","getResourceGuidanceAppLink","VideoMediaAppLinks","playVideo","playClip","PartialVideoMediaView"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1602],{90690:(e,a,t)=>{t.r(a),t.d(a,{InteractiveView:()=>I});var i=t(32735),r=t(50242),d=t(20354),s=t(60051),c=t(78417),n=t(16714),u=t(61990),o=t(33803),l=t(39151),v=t(1666),m=t(20768),h=t(47812),P=t(31949),b=t(26304),p=t(91286),y=t(22902),g=t(79612),f=t(76753),F=t(51855),q=t(7179),C=t(36873),M=t(44110),k=t(53073),w=t(97816),B=t(84062),V=t(25758),G={notFound:u.l,forbidden:{privacy:o.G}};function I(e){var a,t,u,o,I,x=(0,y.T)().hasPermissions,A=(0,F.G)().isPlugin,E=d.a.useBasicFetch(l.L.config()),T=d.a.useBasicFetch(P.N.currentUser()),U=d.a.useBasicFetch((null===(a=T.data)||void 0===a?void 0:a.isAuthenticated)&&v.h.yearGroups(T.data.customerId)),_=d.a.useBasicFetch(m.b.interactiveMetadata(e.id)),S=(0,k.f)(),K=d.a.useBasicFetch(_.statusCode===r.o.Forbidden&&m.b.interactiveMetadata(e.id,c.r.StripMetadata)),j=d.a.useBasicFetch(S&&_.data&&m.b.interactive(_.data.interactiveId)),L=(0,M.i)(),N=d.a.useBasicFetch(h.k.createViewKey(e.id,s.f.MasterObject)),O=(0,C.k)({video:_.data,context:e.queryParams.context,contextId:e.queryParams.contextId,moviesAndTv:e.queryParams.mtv,currentUser:T.data});return(0,q.P)({id:e.id,app:"interactives"}),(0,p.v)(_,G,{forbidden:!0}),(0,b.b)(K),(0,g.M)(f.CG.getInteractiveMetadata({content:_.data})),(0,w.V)(null!==(t=O.videos)&&void 0!==t?t:[]),_.data&&E.hasCompleted&&T.hasCompleted&&(!S||j.hasCompleted)&&N.hasCompleted?S?i.createElement(V.x,{config:E.data,yearGroups:U.data,currentUser:T.data,queryParams:e.queryParams,interactive:_.data,isPreviewPreventScrubbingEnabled:j.data.preventScrubbing,audiences:L.data,relatedVideos:O,canManageVideoAccess:x(n.C.ManageVideoAccess),isPlugin:A}):i.createElement(B.M,{interactive:_.data,currentUser:T.data,config:E.data,yearGroups:U.data,audiences:L.data,queryParams:e.queryParams,viewKey:N.data,relatedVideos:O,startTime:null!==(o=null===(u=e.queryParams)||void 0===u?void 0:u.t)&&void 0!==o?o:null===(I=e.queryParams)||void 0===I?void 0:I.startTime,isPlugin:A}):i.createElement(i.Fragment,null)}}}]);
|
|
2
|
-
//# sourceMappingURL=1602-
|
|
2
|
+
//# sourceMappingURL=1602-dfe6928d65-lite.chunk.js.map
|
package/dist/scripts/{1602-173a4f272a-lite.chunk.js.map → 1602-dfe6928d65-lite.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/1602-
|
|
1
|
+
{"version":3,"file":"scripts/1602-dfe6928d65-lite.chunk.js","mappings":"ybAiCMA,EAAc,CAClBC,SAAU,IACVC,UAAW,CACTC,QAAS,MASP,SAAUC,EAAgBC,G,cACtBC,GAAmB,SAAnBA,eACAC,GAAa,SAAbA,SAEFC,EAAS,kBAA6B,cACtCC,EAAc,kBAAkC,mBAChDC,EAAa,mBACD,QAAhB,EAAAD,EAAYE,YAAI,eAAEC,kBAAmB,eAA4BH,EAAYE,KAAKE,aAG9EC,EAAsB,kBAC1B,wBAAwCT,EAAMU,KAE1CC,GAA2B,SAC3BC,EAA8B,kBAClCH,EAAoBI,aAAe,eACjC,wBAAwCb,EAAMU,GAAI,oBAEhDI,EAAc,kBAClBH,GAA4BF,EAAoBH,MAChD,gBAAgCG,EAAoBH,KAAKS,gBAErDC,GAAY,SACZC,EAAU,kBAAoC,kBAA6BjB,EAAMU,GAAI,mBAErFQ,GAAgB,OAAoB,CACxCC,MAAOV,EAAoBH,KAC3Bc,QAASpB,EAAMqB,YAAYD,QAC3BE,UAAWtB,EAAMqB,YAAYC,UAC7BC,YAAavB,EAAMqB,YAAYG,IAC/BpB,YAAaA,EAAYE,OAmB3B,OAhBA,OAAa,CAAEI,GAAIV,EAAMU,GAAIe,IAAK,kBAElC,OAAqBhB,EAAqBd,EAAa,CAAEE,WAAW,KACpE,OAAsBe,IACtB,OAAmB,4BAA0C,CAAEc,QAASjB,EAAoBH,SAE5F,OAAkC,QAApB,EAAAY,EAAcS,cAAM,QAAI,IAGpClB,EAAoBH,MACpBH,EAAOyB,cACPxB,EAAYwB,gBACVjB,GAA4BG,EAAYc,eAC1CX,EAAQW,aAMNjB,EAEA,gBAAC,IAAkB,CACjBR,OAAQA,EAAOG,KACfD,WAAYA,EAAWC,KACvBF,YAAaA,EAAYE,KACzBe,YAAarB,EAAMqB,YACnBP,YAAaL,EAAoBH,KACjCuB,iCAAkCf,EAAYR,KAAKwB,iBACnDd,UAAWA,EAAUV,KACrBY,cAAeA,EACfa,qBAAsB9B,EAAe,uBACrCC,SAAUA,IAMd,gBAAC,IAAe,CACdY,YAAaL,EAAoBH,KACjCF,YAAaA,EAAYE,KACzBH,OAAQA,EAAOG,KACfD,WAAYA,EAAWC,KACvBU,UAAWA,EAAUV,KACrBe,YAAarB,EAAMqB,YACnBJ,QAASA,EAAQX,KACjBY,cAAeA,EACfc,UAA+B,QAApB,EAAiB,QAAjB,EAAAhC,EAAMqB,mBAAW,eAAEY,SAAC,QAAqB,QAAjB,EAAAjC,EAAMqB,mBAAW,eAAEW,UACtD9B,SAAUA,IA9BL,gCAiCX,C","sources":["file:///app/packages/projects/lite/src/apps/interactives/views/interactive-view/InteractiveView.tsx"],"sourcesContent":["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 { 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 { Config, CurrentUser, Interactive, InteractiveMetadata, PlayerViewKey, YearGroup } from 'libs/shared/interfaces';\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 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 hasLoaded = (\n interactiveMetadata.data &&\n config.hasCompleted &&\n currentUser.hasCompleted &&\n (!shouldPreviewInteractive || interactive.hasCompleted) &&\n viewKey.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 />\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 />\n );\n}"],"names":["videoErrors","notFound","forbidden","privacy","InteractiveView","props","hasPermissions","isPlugin","config","currentUser","yearGroups","data","isAuthenticated","customerId","interactiveMetadata","id","shouldPreviewInteractive","strippedInteractiveMetadata","statusCode","interactive","interactiveId","audiences","viewKey","relatedVideos","video","context","queryParams","contextId","moviesAndTv","mtv","app","content","videos","hasCompleted","isPreviewPreventScrubbingEnabled","preventScrubbing","canManageVideoAccess","startTime","t"],"sourceRoot":""}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
/*! For license information please see 2446-
|
|
1
|
+
/*! For license information please see 2446-eaa1d2ee7d-lite.chunk.js.LICENSE.txt */
|
|
2
2
|
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[2446],{2381:(e,t,n)=>{n.d(t,{q:()=>c});var r=n(5173),a=n(23481),o="playlists.validation",c=r.Ry().shape({name:r.Z_().max(250,(function(){return a.T.getPhrase(o,"nameExceeds")})).required((function(){return a.T.getPhrase(o,"nameRequired")})),description:r.Z_().max(16e3,(function(){return a.T.getPhrase(o,"descriptionExceeds")})).nullable()})},75919:(e,t,n)=>{n.d(t,{N:()=>o});var r=n(32735);const a={annotation:"LkdHB",above:"ROdbm",below:"OzyHx",left:"W9EBF",right:"zhio2",divider:"cdR_p",imageContainer:"QZZMF"};function o(e){return r.createElement("div",{className:(t="d-flex align-items-center text-center position-relative w-100 ".concat(a.imageContainer),"center"===e.contentPosition&&(t+=" px-5 justify-content-center"),"right"===e.contentPosition&&(t+=" me-n5 justify-content-end"),t)},!!e.annotationUrl&&r.createElement("div",{className:function(){var t=a.annotation;switch(e.annotationPosition){case"top-left":t+=" ".concat(a.above," ").concat(a.left);break;case"top-right":t+=" ".concat(a.above," ").concat(a.right);break;case"bottom-left":t+=" ".concat(a.below," ").concat(a.left);break;case"bottom-right":t+=" ".concat(a.below," ").concat(a.right)}return e.annotationClassName&&(t+=" ".concat(e.annotationClassName)),t}()},r.createElement("img",{className:"img-fluid",src:e.annotationUrl})),e.children,"right"===e.contentPosition&&r.createElement("div",{className:a.divider}));var t}o.defaultProps={contentPosition:"center"}},2248:(e,t,n)=>{n.d(t,{L:()=>p});var r=n(32735),a=n(60376),o=n(83914),c=n(2786),i=n(83345),l=n(72639),s=n(79967),u=n(35223),m=n(87114);const d={dot:"AlRQD",logo:"L42gR",blackBar:"ESCxm",topNav:"a3G_4",leftNav:"YxGVV",belowHeader:"jc_cg",leftNavIcon:"U6i6r",leftNavText:"LnYlW",presentationPlaceholderIcon:"Ljaju",presentationIcon:"QdwPq",presentationPlaceholderText:"af06V",curriculumIcon:"N7T4T",curriculumIconSmall:"_6xrUg",curriculumContainer:"Z65qX",iconPlaceholder:"CKOXL",shadow:"zygeJ",presentationName:"Oj7Dt"};var f="onboarding.mockLayout";function h(){return r.createElement("div",{className:"d-flex align-items-center justify-content-center mb-2 px-3"},r.createElement("div",{className:"".concat(d.leftNavIcon," rounded-circle")}),r.createElement("div",{className:"".concat(d.leftNavText," rounded-pill")}))}function p(e){var t,n,p=(0,s.k)();return r.createElement("div",{className:"border border-dark border-2 bg-white rounded-3 user-select-none overflow-hidden position-relative h-100 w-100"},!!e.editingCurriculum&&r.createElement("div",{className:"w-100 h-100 position-absolute ".concat(d.shadow)},r.createElement("div",{className:"d-flex align-items-center h-100 w-50 ".concat(d.curriculumContainer)},r.createElement("div",{className:"bg-white rounded-3 border p-3 w-100"},r.createElement("h2",{className:"h6 text-start"},r.createElement(i.x,{namespace:f,phrase:"curriculum"})),e.curriculum?r.createElement("div",{className:"d-flex align-items-center"},r.createElement("div",{className:"".concat(d.curriculumIcon," rounded-circle me-2 border")},r.createElement(a.f,{imageUrl:null===(t=e.curriculum.cover)||void 0===t?void 0:t.url})),r.createElement("div",{className:"text-start"},e.curriculum.name)):r.createElement("div",{className:"d-flex align-items-center text-secondary"},r.createElement("div",{className:"me-2 rounded-circle p-1 ".concat(d.iconPlaceholder)},r.createElement(a.f,{svgSize:o.S.Large,textVariant:"secondary",svgName:u.vn.GraduationCap})),r.createElement(i.x,{namespace:f,phrase:"selectCurriculum"}))))),r.createElement("div",{className:"bg-dark d-flex px-3 py-2 ".concat(d.blackBar)},r.createElement("div",{className:"rounded-circle me-2 ".concat(d.dot)}),r.createElement("div",{className:"rounded-circle me-2 ".concat(d.dot)}),r.createElement("div",{className:"rounded-circle ".concat(d.dot)})),r.createElement("div",{className:"border-bottom px-3 py-2 d-flex align-items-center ".concat(d.topNav)},r.createElement("div",{className:"".concat(d.logo," me-4")},p.xs?r.createElement(c.bc,null):r.createElement(c.$S,null)),r.createElement("div",{className:"form-control w-75 d-flex justify-content-start"},r.createElement(o.x,{svgName:u.vn.Search})),!!e.curriculum&&r.createElement("div",{className:"".concat(d.curriculumIconSmall," rounded-circle ms-2 me-n1 border")},r.createElement(a.f,{imageUrl:null===(n=e.curriculum.cover)||void 0===n?void 0:n.url}))),r.createElement("div",{className:"d-flex ".concat(d.belowHeader)},r.createElement("div",{className:"".concat(d.leftNav," border-end")},r.createElement("div",{className:"d-flex flex-column pt-3 h-100"},r.createElement(h,null),r.createElement(h,null),r.createElement(h,null),r.createElement(h,null),r.createElement(h,null),r.createElement("div",{className:"d-flex align-items-end h-100 w-100"},r.createElement("div",{className:"border-top p-3 w-100"},r.createElement("div",{className:"d-flex align-items-center"},r.createElement("div",{className:"".concat(function(){if(!e.presentation)return d.presentationPlaceholderIcon;switch(m.i.getMappedPresentationLevel(e.presentation.learningLevel)){case l.p.Level_1:return"bg-indigo ".concat(d.presentationIcon);case l.p.Level_3:return"bg-blue ".concat(d.presentationIcon);default:case l.p.Level_2:return"bg-green ".concat(d.presentationIcon)}}()," text-white rounded")},r.createElement(o.x,{svgName:u.vn.School,size:o.S.Large})),e.presentation?r.createElement("span",{className:"fw-semibold text-truncate ".concat(d.presentationName)},e.presentation.name):r.createElement("div",{className:"".concat(d.presentationPlaceholderText," fw-semibold")},r.createElement(i.x,{namespace:f,phrase:"schoolLevel"}))))))),r.createElement("div",{className:"w-100 h-100 overflow-hidden"},e.children)))}},62007:(e,t,n)=>{n.d(t,{u:()=>u});var r=n(32735),a=n(5465),o=n(89118),c=n(54610),i=n(2248);const l={banner:"CQxNy",title:"NzV5V",description1:"kjCZi",description2:"cBeyJ",placeholder:"Ks_Tl",playlistName:"eFPqz",thumbnailCol:"dgCQ7",videoInfoCol:"pzfE2"};function s(e){return r.createElement("li",{className:"row mb-2"},r.createElement("div",{className:"col-lg-4 col-5 ".concat(l.thumbnailCol)},e.video?r.createElement(o.u,{video:e.video,type:"cosmetic",hideDuration:!0,imageOptions:{size:c.h2.Medium}}):r.createElement(a.oy,{type:a.mS.Video,extraClasses:"position-relative rounded-3 ".concat(l.placeholder)})),r.createElement("div",{className:"col-lg-8 col-7 ".concat(l.videoInfoCol)},r.createElement("div",{className:"".concat(l.title," rounded-pill bg-grey mb-1")}),r.createElement("div",{className:"".concat(l.description1," rounded-pill bg-grey mb-1")}),r.createElement("div",{className:"".concat(l.description2," rounded-pill bg-grey mb-1")})))}function u(e){var t,n,a,o=e.hidePlaceholders?0:Math.max(6-(null!==(n=null===(t=e.videos)||void 0===t?void 0:t.length)&&void 0!==n?n:0),0);return r.createElement(i.L,{presentation:e.presentation,curriculum:e.curriculum},r.createElement("div",{className:"bg-teal ".concat(l.banner," position-relative")},e.name&&r.createElement("div",{className:"h5 text-white mb-0 ".concat(l.playlistName)},e.name)),r.createElement("ul",{className:"list-unstyled mb-0 w-100 p-2"},null===(a=e.videos)||void 0===a?void 0:a.map((function(e){return r.createElement(s,{key:e.id,video:e})})),new Array(o).fill(0).map((function(e,t){return r.createElement(s,{key:t})}))))}},82718:(e,t,n)=>{n.r(t),n.d(t,{OnboardingCreatePlaylistView:()=>T});var r=n(32735),a=n(23481),o=n(57900),c=n(2948),i=n(20354),l=n(65858),s=n(2381),u=n(83345),m=n(55171),d=n(54610),f=n(5112),h=n(31949),p=n(99742),v=n(86702),y=n(82817),g=n(86698),b=n(75359),E=n(12058),N=n(40695),x=n(75919),w=n(62007),L=n(73190),P=n(90815);const I={annotation:"EYKMF"};function k(e){return k="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},k(e)}function C(){C=function(){return t};var e,t={},n=Object.prototype,r=n.hasOwnProperty,a=Object.defineProperty||function(e,t,n){e[t]=n.value},o="function"==typeof Symbol?Symbol:{},c=o.iterator||"@@iterator",i=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag";function s(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{s({},"")}catch(e){s=function(e,t,n){return e[t]=n}}function u(e,t,n,r){var o=t&&t.prototype instanceof y?t:y,c=Object.create(o.prototype),i=new j(r||[]);return a(c,"_invoke",{value:I(e,n,i)}),c}function m(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}t.wrap=u;var d="suspendedStart",f="suspendedYield",h="executing",p="completed",v={};function y(){}function g(){}function b(){}var E={};s(E,c,(function(){return this}));var N=Object.getPrototypeOf,x=N&&N(N(T([])));x&&x!==n&&r.call(x,c)&&(E=x);var w=b.prototype=y.prototype=Object.create(E);function L(e){["next","throw","return"].forEach((function(t){s(e,t,(function(e){return this._invoke(t,e)}))}))}function P(e,t){function n(a,o,c,i){var l=m(e[a],e,o);if("throw"!==l.type){var s=l.arg,u=s.value;return u&&"object"==k(u)&&r.call(u,"__await")?t.resolve(u.__await).then((function(e){n("next",e,c,i)}),(function(e){n("throw",e,c,i)})):t.resolve(u).then((function(e){s.value=e,c(s)}),(function(e){return n("throw",e,c,i)}))}i(l.arg)}var o;a(this,"_invoke",{value:function(e,r){function a(){return new t((function(t,a){n(e,r,t,a)}))}return o=o?o.then(a,a):a()}})}function I(t,n,r){var a=d;return function(o,c){if(a===h)throw Error("Generator is already running");if(a===p){if("throw"===o)throw c;return{value:e,done:!0}}for(r.method=o,r.arg=c;;){var i=r.delegate;if(i){var l=O(i,r);if(l){if(l===v)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(a===d)throw a=p,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);a=h;var s=m(t,n,r);if("normal"===s.type){if(a=r.done?p:f,s.arg===v)continue;return{value:s.arg,done:r.done}}"throw"===s.type&&(a=p,r.method="throw",r.arg=s.arg)}}}function O(t,n){var r=n.method,a=t.iterator[r];if(a===e)return n.delegate=null,"throw"===r&&t.iterator.return&&(n.method="return",n.arg=e,O(t,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),v;var o=m(a,t.iterator,n.arg);if("throw"===o.type)return n.method="throw",n.arg=o.arg,n.delegate=null,v;var c=o.arg;return c?c.done?(n[t.resultName]=c.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,v):c:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,v)}function S(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function _(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function j(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(S,this),this.reset(!0)}function T(t){if(t||""===t){var n=t[c];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var a=-1,o=function n(){for(;++a<t.length;)if(r.call(t,a))return n.value=t[a],n.done=!1,n;return n.value=e,n.done=!0,n};return o.next=o}}throw new TypeError(k(t)+" is not iterable")}return g.prototype=b,a(w,"constructor",{value:b,configurable:!0}),a(b,"constructor",{value:g,configurable:!0}),g.displayName=s(b,l,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===g||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,b):(e.__proto__=b,s(e,l,"GeneratorFunction")),e.prototype=Object.create(w),e},t.awrap=function(e){return{__await:e}},L(P.prototype),s(P.prototype,i,(function(){return this})),t.AsyncIterator=P,t.async=function(e,n,r,a,o){void 0===o&&(o=Promise);var c=new P(u(e,n,r,a),o);return t.isGeneratorFunction(n)?c:c.next().then((function(e){return e.done?e.value:c.next()}))},L(w),s(w,l,"Generator"),s(w,c,(function(){return this})),s(w,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),n=[];for(var r in t)n.push(r);return n.reverse(),function e(){for(;n.length;){var r=n.pop();if(r in t)return e.value=r,e.done=!1,e}return e.done=!0,e}},t.values=T,j.prototype={constructor:j,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(_),!t)for(var n in this)"t"===n.charAt(0)&&r.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var n=this;function a(r,a){return i.type="throw",i.arg=t,n.next=r,a&&(n.method="next",n.arg=e),!!a}for(var o=this.tryEntries.length-1;o>=0;--o){var c=this.tryEntries[o],i=c.completion;if("root"===c.tryLoc)return a("end");if(c.tryLoc<=this.prev){var l=r.call(c,"catchLoc"),s=r.call(c,"finallyLoc");if(l&&s){if(this.prev<c.catchLoc)return a(c.catchLoc,!0);if(this.prev<c.finallyLoc)return a(c.finallyLoc)}else if(l){if(this.prev<c.catchLoc)return a(c.catchLoc,!0)}else{if(!s)throw Error("try statement without catch or finally");if(this.prev<c.finallyLoc)return a(c.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev<a.finallyLoc){var o=a;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var c=o?o.completion:{};return c.type=e,c.arg=t,o?(this.method="next",this.next=o.finallyLoc,v):this.complete(c)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),v},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),_(n),v}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;_(n)}return a}}throw Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:T(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=e),v}},t}function O(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,c,i=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(i.push(r.value),i.length!==t);l=!0);}catch(e){s=!0,a=e}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw a}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return S(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?S(e,t):void 0}}(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 S(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var _=function(e,t,n,r){return new(n||(n=Promise))((function(a,o){function c(e){try{l(r.next(e))}catch(e){o(e)}}function i(e){try{l(r.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(c,i)}l((r=r.apply(e,t||[])).next())}))},j="onboarding.createPlaylist";function T(e){var t=O((0,c.D)(v.y.ONBOARDING_VIDEOS_V2,[],{storage:o.Z1.LocalStorage}),1)[0],n=O((0,c.D)(v.y.ONBOARDING_LOADER,{}),2)[1],k=i.a.useBasicFetch(h.N.currentUser()),S=(0,L.Q)(e.redirectUrl),T=S.onClickBack,A=S.exitOnboarding,V=S.onSaveError,F=S.completeStepAsync,B=(0,P.H)().logEvent,z=(0,g.y)().preferredPresentation,G=(0,y.M)().preferredCurriculum,D=i.a.useGetFetchAsync(),R=r.useState(function(){var e=a.T.getPhrase(j,"firstPlaylist"),t=k.data.givenName;return t.endsWith("s")?"".concat(t,"' ").concat(e):"".concat(t,"'s ").concat(e)}()),U=O(R,2),q=U[0],M=U[1],Z={name:q,videos:t.map((function(e){var t;return{id:e.data.id,name:e.data.name,thumbnailUrl:null===(t=e.data.thumbnail)||void 0===t?void 0:t.url,videoSubjectId:e.classificationId,videoSubjectName:e.classificationName}})),presentationId:z.id,presentationName:z.name,presentationDescription:z.description};return r.createElement(N.z,{namespace:j},r.createElement(N.z.Left,{className:"bg-dark-blue d-flex flex-column align-items-end justify-content-center"},r.createElement(x.N,{annotationUrl:p.W.OnboardingV2.CreatePlaylist.ANNOTATION,annotationPosition:"top-left",annotationClassName:"ms-5 ".concat(I.annotation),contentPosition:"right"},r.createElement(w.u,{presentation:z,curriculum:G,videos:t.map((function(e){return e.data})),name:q}))),r.createElement(N.z.Right,{hasCustomButtons:!1,onClickBack:T,onClickComeBackLater:A,onClickNext:function(){return _(this,void 0,void 0,C().mark((function e(){return C().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(B(l.Vw.Click,l.Ix.Next,Z),s.q.isValidSync({name:q})){e.next=3;break}return e.abrupt("return");case 3:return e.prev=3,e.next=6,D(f.C.createPlaylist(k.data.id,{name:q,cover:{fileId:m.e.Onboarding.Playlist.COVER_FILE_ID,fileIdType:d.z9.ImageAPIv2},banner:{fileId:m.e.Onboarding.Playlist.BANNER_FILE_ID,fileIdType:d.z9.ImageAPIv2},videos:t.map((function(e){return{id:e.data.id}}))}));case 6:return n("playlistName",q),e.next=9,F();case 9:e.next=15;break;case 11:return e.prev=11,e.t0=e.catch(3),V(),e.abrupt("return",Promise.reject());case 15:case"end":return e.stop()}}),e,null,[[3,11]])})))},disableNext:!s.q.isValidSync({name:q})},r.createElement(b.W,null,r.createElement(u.x,{phrase:"heading"})),r.createElement(E.X,null,r.createElement(u.x,{phrase:"info"})),r.createElement("form",{onSubmit:function(e){return e.preventDefault()},className:"pb-3"},r.createElement("label",{htmlFor:"name",className:"form-label"},r.createElement(u.x,{phrase:"label"})),r.createElement("input",{id:"name",className:"form-control form-control-lg",placeholder:a.T.getPhrase(j,"placeholder"),name:"name",value:q,onChange:function(e){return M(e.target.value)},onFocus:function(){B(l.Vw.Focus,l.Ix.PlaylistName,Z)},onBlur:function(){B(l.Vw.Blur,l.Ix.PlaylistName,Z)}})),r.createElement(E.X,null,r.createElement(u.x,{phrase:"noWorries"}))))}}}]);
|
|
3
|
-
//# sourceMappingURL=2446-
|
|
3
|
+
//# sourceMappingURL=2446-eaa1d2ee7d-lite.chunk.js.map
|