@clickview/lite 0.73.1 → 0.74.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +2 -2
- package/dist/css/{7122-lite-a094f8fe17.chunk.css → 7122-lite-e0652641e4.chunk.css} +1 -1
- package/dist/css/{4499-lite-c43d17524f.chunk.css → 7150-lite-60d455ba66.chunk.css} +1 -1
- package/dist/css/{lite-app-10d57977f3.css → lite-app-98b3200025.css} +1 -1
- package/dist/languages/en.json +1 -1
- package/dist/scripts/{1362-061cd588c0-lite.chunk.js → 1362-56810ef4c8-lite.chunk.js} +3 -3
- package/dist/scripts/1362-56810ef4c8-lite.chunk.js.map +1 -0
- package/dist/scripts/{1367-12750422b0-lite.chunk.js → 1367-e0481edee3-lite.chunk.js} +2 -2
- package/dist/scripts/1367-e0481edee3-lite.chunk.js.map +1 -0
- package/dist/scripts/{1735-c0f3f1238a-lite.chunk.js → 1735-e4cdbc46ed-lite.chunk.js} +3 -3
- package/dist/scripts/1735-e4cdbc46ed-lite.chunk.js.map +1 -0
- package/dist/scripts/{324-6d6ee95d5d-lite.chunk.js → 324-e7a99b7d52-lite.chunk.js} +2 -2
- package/dist/scripts/{324-6d6ee95d5d-lite.chunk.js.map → 324-e7a99b7d52-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3252-22fac3da15-lite.chunk.js → 3252-50b5c19f19-lite.chunk.js} +1 -1
- package/dist/scripts/{3252-22fac3da15-lite.chunk.js.map → 3252-50b5c19f19-lite.chunk.js.map} +1 -1
- package/dist/scripts/3677-4904f30c6a-lite.chunk.js +2 -0
- package/dist/scripts/3677-4904f30c6a-lite.chunk.js.map +1 -0
- package/dist/scripts/{3781-7a9ddc7736-lite.chunk.js → 3781-e092f92668-lite.chunk.js} +2 -2
- package/dist/scripts/{3781-7a9ddc7736-lite.chunk.js.map → 3781-e092f92668-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3823-e38a508a3c-lite.chunk.js → 3823-0dc1972eb2-lite.chunk.js} +2 -2
- package/dist/scripts/3823-0dc1972eb2-lite.chunk.js.map +1 -0
- package/dist/scripts/3915-abd9a65a08-lite.chunk.js +2 -0
- package/dist/scripts/3915-abd9a65a08-lite.chunk.js.map +1 -0
- package/dist/scripts/{3978-09fb1f250e-lite.chunk.js → 3978-a551dd2648-lite.chunk.js} +2 -2
- package/dist/scripts/3978-a551dd2648-lite.chunk.js.map +1 -0
- package/dist/scripts/{4013-d31272b42a-lite.chunk.js → 4013-6f68d7031e-lite.chunk.js} +1 -1
- package/dist/scripts/{4013-d31272b42a-lite.chunk.js.map → 4013-6f68d7031e-lite.chunk.js.map} +1 -1
- package/dist/scripts/{4014-4225ce1eb6-lite.chunk.js → 4014-3eccce2f89-lite.chunk.js} +3 -3
- package/dist/scripts/4014-3eccce2f89-lite.chunk.js.map +1 -0
- package/dist/scripts/{4050-cf35c4ec45-lite.chunk.js → 4050-ffe5b6ae6d-lite.chunk.js} +2 -2
- package/dist/scripts/{4050-cf35c4ec45-lite.chunk.js.map → 4050-ffe5b6ae6d-lite.chunk.js.map} +1 -1
- package/dist/scripts/{4061-525ef00f69-lite.chunk.js → 4061-100002abf6-lite.chunk.js} +2 -2
- package/dist/scripts/4061-100002abf6-lite.chunk.js.map +1 -0
- package/dist/scripts/4191-9a08c4b205-lite.chunk.js +2 -0
- package/dist/scripts/4191-9a08c4b205-lite.chunk.js.map +1 -0
- package/dist/scripts/{4358-b21c24f96a-lite.chunk.js → 4358-a1bbca8249-lite.chunk.js} +1 -1
- package/dist/scripts/{4358-b21c24f96a-lite.chunk.js.map → 4358-a1bbca8249-lite.chunk.js.map} +1 -1
- package/dist/scripts/{4400-8c36fb4ab5-lite.chunk.js → 4400-755a158a52-lite.chunk.js} +2 -2
- package/dist/scripts/4400-755a158a52-lite.chunk.js.map +1 -0
- package/dist/scripts/4806-13c9302b2c-lite.chunk.js +2 -0
- package/dist/scripts/4806-13c9302b2c-lite.chunk.js.map +1 -0
- package/dist/scripts/{5135-864055ab0b-lite.chunk.js → 5135-166ec46620-lite.chunk.js} +2 -2
- package/dist/scripts/5135-166ec46620-lite.chunk.js.map +1 -0
- package/dist/scripts/{5143-286c66de2b-lite.chunk.js → 5143-d6c4a357ea-lite.chunk.js} +2 -2
- package/dist/scripts/5143-d6c4a357ea-lite.chunk.js.map +1 -0
- package/dist/scripts/{5743-a764171a6d-lite.chunk.js → 5743-14700e4f76-lite.chunk.js} +2 -2
- package/dist/scripts/5743-14700e4f76-lite.chunk.js.map +1 -0
- package/dist/scripts/{6030-5db8cc1bc4-lite.chunk.js → 6030-c2e07df714-lite.chunk.js} +2 -2
- package/dist/scripts/6030-c2e07df714-lite.chunk.js.map +1 -0
- package/dist/scripts/{618-4334f9451b-lite.chunk.js → 618-996d8b560b-lite.chunk.js} +2 -2
- package/dist/scripts/618-996d8b560b-lite.chunk.js.map +1 -0
- package/dist/scripts/{6207-f444184025-lite.chunk.js → 6207-be843186e0-lite.chunk.js} +1 -1
- package/dist/scripts/{6207-f444184025-lite.chunk.js.map → 6207-be843186e0-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6413-c4333e80d4-lite.chunk.js → 6413-caaae6a383-lite.chunk.js} +3 -3
- package/dist/scripts/{6413-c4333e80d4-lite.chunk.js.map → 6413-caaae6a383-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6646-24a34f7d99-lite.chunk.js → 6646-c5775f6553-lite.chunk.js} +3 -3
- package/dist/scripts/6646-c5775f6553-lite.chunk.js.map +1 -0
- package/dist/scripts/{6909-8a45942b63-lite.chunk.js → 6909-6805b6a0d9-lite.chunk.js} +2 -2
- package/dist/scripts/6909-6805b6a0d9-lite.chunk.js.map +1 -0
- package/dist/scripts/7064-b3bafc599f-lite.chunk.js +2 -0
- package/dist/scripts/7064-b3bafc599f-lite.chunk.js.map +1 -0
- package/dist/scripts/7122-dbf374af58-lite.chunk.js +2 -0
- package/dist/scripts/7122-dbf374af58-lite.chunk.js.map +1 -0
- package/dist/scripts/7150-93a205975c-lite.chunk.js +2 -0
- package/dist/scripts/7150-93a205975c-lite.chunk.js.map +1 -0
- package/dist/scripts/{7234-85d4acaa33-lite.chunk.js → 7234-bcddfe2112-lite.chunk.js} +2 -2
- package/dist/scripts/7234-bcddfe2112-lite.chunk.js.map +1 -0
- package/dist/scripts/{7383-690bc234f1-lite.chunk.js → 7383-02d4956304-lite.chunk.js} +2 -2
- package/dist/scripts/7383-02d4956304-lite.chunk.js.map +1 -0
- package/dist/scripts/{7873-2e64f4eb37-lite.chunk.js → 7873-0ce0523a28-lite.chunk.js} +2 -2
- package/dist/scripts/{7873-2e64f4eb37-lite.chunk.js.map → 7873-0ce0523a28-lite.chunk.js.map} +1 -1
- package/dist/scripts/{8248-050265ed2d-lite.chunk.js → 8248-41dad9bf71-lite.chunk.js} +3 -3
- package/dist/scripts/8248-41dad9bf71-lite.chunk.js.map +1 -0
- package/dist/scripts/8385-6ef08fa319-lite.chunk.js +2 -0
- package/dist/scripts/8385-6ef08fa319-lite.chunk.js.map +1 -0
- package/dist/scripts/{8451-1cb649a3f3-lite.chunk.js → 8451-0103210a8f-lite.chunk.js} +2 -2
- package/dist/scripts/8451-0103210a8f-lite.chunk.js.map +1 -0
- package/dist/scripts/8630-80f676dcda-lite.chunk.js +2 -0
- package/dist/scripts/8630-80f676dcda-lite.chunk.js.map +1 -0
- package/dist/scripts/8891-5118c47b59-lite.chunk.js +2 -0
- package/dist/scripts/8891-5118c47b59-lite.chunk.js.map +1 -0
- package/dist/scripts/8982-b9e53e43ec-lite.chunk.js +2 -0
- package/dist/scripts/8982-b9e53e43ec-lite.chunk.js.map +1 -0
- package/dist/scripts/{9186-daf77d7174-lite.chunk.js → 9186-c1d2615458-lite.chunk.js} +2 -2
- package/dist/scripts/9186-c1d2615458-lite.chunk.js.map +1 -0
- package/dist/scripts/{9241-dbac9cb9f9-lite.chunk.js → 9241-2386134dd3-lite.chunk.js} +2 -2
- package/dist/scripts/9241-2386134dd3-lite.chunk.js.map +1 -0
- package/dist/scripts/{9345-30ccf524c5-lite.chunk.js → 9345-0a7f58bb53-lite.chunk.js} +3 -3
- package/dist/scripts/9345-0a7f58bb53-lite.chunk.js.map +1 -0
- package/dist/scripts/9352-d4b2dc16a8-lite.chunk.js +2 -0
- package/dist/scripts/9352-d4b2dc16a8-lite.chunk.js.map +1 -0
- package/dist/scripts/{9503-275c13891d-lite.chunk.js → 9503-715c46ecc1-lite.chunk.js} +2 -2
- package/dist/scripts/9503-715c46ecc1-lite.chunk.js.map +1 -0
- package/dist/scripts/9630-ca2a850260-lite.chunk.js +2 -0
- package/dist/scripts/9630-ca2a850260-lite.chunk.js.map +1 -0
- package/dist/scripts/{9767-d69fdc31b0-lite.chunk.js → 9767-1b583ceb6c-lite.chunk.js} +2 -2
- package/dist/scripts/9767-1b583ceb6c-lite.chunk.js.map +1 -0
- package/dist/scripts/9894-7c119a8fe3-lite.chunk.js +2 -0
- package/dist/scripts/9894-7c119a8fe3-lite.chunk.js.map +1 -0
- package/dist/scripts/bundle-5b65703152.min.js +3 -0
- package/dist/scripts/{bundle-0075afb6af.min.js.map → bundle-5b65703152.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/1362-061cd588c0-lite.chunk.js.map +0 -1
- package/dist/scripts/1367-12750422b0-lite.chunk.js.map +0 -1
- package/dist/scripts/1735-c0f3f1238a-lite.chunk.js.map +0 -1
- package/dist/scripts/3677-20958f59d3-lite.chunk.js +0 -2
- package/dist/scripts/3677-20958f59d3-lite.chunk.js.map +0 -1
- package/dist/scripts/3823-e38a508a3c-lite.chunk.js.map +0 -1
- package/dist/scripts/3915-a1f15d687a-lite.chunk.js +0 -2
- package/dist/scripts/3915-a1f15d687a-lite.chunk.js.map +0 -1
- package/dist/scripts/3978-09fb1f250e-lite.chunk.js.map +0 -1
- package/dist/scripts/4014-4225ce1eb6-lite.chunk.js.map +0 -1
- package/dist/scripts/4061-525ef00f69-lite.chunk.js.map +0 -1
- package/dist/scripts/4191-7612e1713c-lite.chunk.js +0 -2
- package/dist/scripts/4191-7612e1713c-lite.chunk.js.map +0 -1
- package/dist/scripts/4400-8c36fb4ab5-lite.chunk.js.map +0 -1
- package/dist/scripts/4499-1365934bf2-lite.chunk.js +0 -2
- package/dist/scripts/4499-1365934bf2-lite.chunk.js.map +0 -1
- package/dist/scripts/4806-384760d9c9-lite.chunk.js +0 -2
- package/dist/scripts/4806-384760d9c9-lite.chunk.js.map +0 -1
- package/dist/scripts/5135-864055ab0b-lite.chunk.js.map +0 -1
- package/dist/scripts/5143-286c66de2b-lite.chunk.js.map +0 -1
- package/dist/scripts/5743-a764171a6d-lite.chunk.js.map +0 -1
- package/dist/scripts/6030-5db8cc1bc4-lite.chunk.js.map +0 -1
- package/dist/scripts/618-4334f9451b-lite.chunk.js.map +0 -1
- package/dist/scripts/6646-24a34f7d99-lite.chunk.js.map +0 -1
- package/dist/scripts/6909-8a45942b63-lite.chunk.js.map +0 -1
- package/dist/scripts/7064-3ccf1b82d1-lite.chunk.js +0 -2
- package/dist/scripts/7064-3ccf1b82d1-lite.chunk.js.map +0 -1
- package/dist/scripts/7122-352fdd3516-lite.chunk.js +0 -2
- package/dist/scripts/7122-352fdd3516-lite.chunk.js.map +0 -1
- package/dist/scripts/7234-85d4acaa33-lite.chunk.js.map +0 -1
- package/dist/scripts/7383-690bc234f1-lite.chunk.js.map +0 -1
- package/dist/scripts/8248-050265ed2d-lite.chunk.js.map +0 -1
- package/dist/scripts/8385-083e882d77-lite.chunk.js +0 -2
- package/dist/scripts/8385-083e882d77-lite.chunk.js.map +0 -1
- package/dist/scripts/8451-1cb649a3f3-lite.chunk.js.map +0 -1
- package/dist/scripts/8630-0945271ea2-lite.chunk.js +0 -2
- package/dist/scripts/8630-0945271ea2-lite.chunk.js.map +0 -1
- package/dist/scripts/8891-393bb5bdaf-lite.chunk.js +0 -2
- package/dist/scripts/8891-393bb5bdaf-lite.chunk.js.map +0 -1
- package/dist/scripts/8982-8c21fab48a-lite.chunk.js +0 -2
- package/dist/scripts/8982-8c21fab48a-lite.chunk.js.map +0 -1
- package/dist/scripts/9186-daf77d7174-lite.chunk.js.map +0 -1
- package/dist/scripts/9241-dbac9cb9f9-lite.chunk.js.map +0 -1
- package/dist/scripts/9345-30ccf524c5-lite.chunk.js.map +0 -1
- package/dist/scripts/9352-04db4c533d-lite.chunk.js +0 -2
- package/dist/scripts/9352-04db4c533d-lite.chunk.js.map +0 -1
- package/dist/scripts/9503-275c13891d-lite.chunk.js.map +0 -1
- package/dist/scripts/9630-285237c980-lite.chunk.js +0 -2
- package/dist/scripts/9630-285237c980-lite.chunk.js.map +0 -1
- package/dist/scripts/9767-d69fdc31b0-lite.chunk.js.map +0 -1
- package/dist/scripts/9894-10943e41f7-lite.chunk.js +0 -2
- package/dist/scripts/9894-10943e41f7-lite.chunk.js.map +0 -1
- package/dist/scripts/bundle-0075afb6af.min.js +0 -3
- /package/dist/scripts/{1362-061cd588c0-lite.chunk.js.LICENSE.txt → 1362-56810ef4c8-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{1735-c0f3f1238a-lite.chunk.js.LICENSE.txt → 1735-e4cdbc46ed-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{4014-4225ce1eb6-lite.chunk.js.LICENSE.txt → 4014-3eccce2f89-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{4050-cf35c4ec45-lite.chunk.js.LICENSE.txt → 4050-ffe5b6ae6d-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6413-c4333e80d4-lite.chunk.js.LICENSE.txt → 6413-caaae6a383-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6646-24a34f7d99-lite.chunk.js.LICENSE.txt → 6646-c5775f6553-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{8248-050265ed2d-lite.chunk.js.LICENSE.txt → 8248-41dad9bf71-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9345-30ccf524c5-lite.chunk.js.LICENSE.txt → 9345-0a7f58bb53-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-0075afb6af.min.js.LICENSE.txt → bundle-5b65703152.min.js.LICENSE.txt} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/1367-12750422b0-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx","file:///app/packages/libs/shared/src/enums/SupportArticle.ts","file:///app/packages/projects/lite/src/apps/settings/components/restricted-videos-tabs/RestrictedVideosTabs.tsx","file:///app/packages/projects/lite/src/apps/settings/components/settings-layout/SettingsLayout.tsx","file:///app/packages/projects/lite/src/apps/settings/flight-requests/ContentReviewSettingsRequests.ts","file:///app/packages/projects/lite/src/apps/settings/views/content-review/no-items-empty-state/NoItemsEmptyState.tsx","file:///app/packages/projects/lite/src/apps/settings/views/content-review/turned-off-empty-state/TurnedOffEmptyState.tsx","file:///app/packages/projects/lite/src/apps/settings/views/content-review/ContentReviewView.tsx","file:///app/packages/projects/lite/src/shared/flight-requests/RestrictionRequests.ts","file:///app/packages/projects/lite/src/shared/hooks/useCommonVideoProps.ts","file:///app/packages/libs/shared/src/components/pill-tab-selector/pill-tab-selector.scss"],"sourcesContent":["import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport { SvgContainer } from '../svg-container/SvgContainer';\n\nimport styles from './pill-tab-selector.scss';\n\ninterface TabContentsProps {\n tab: PillTab;\n}\n\nfunction TabContents(props: TabContentsProps): JSX.Element {\n return (\n <>\n {!!props.tab.svgName && (\n <div className={props.tab.name ? 'pe-1' : ''}>\n <SvgContainer svgName={props.tab.svgName} />\n </div>\n )}\n\n {props.tab.name}\n\n {typeof (props.tab.count) === 'number' && (\n <div className='ps-2'>\n <Badge type={BadgeType.Count} data={props.tab.count} />\n </div>\n )}\n </>\n );\n}\n\nexport interface PillTab {\n name: string;\n active: boolean;\n svgName?: string;\n\n className?: string;\n\n appLink?: Core.AppLink;\n onSelect?: () => void;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n count?: number;\n}\n\ninterface PillTabSelectorProps {\n tabs: PillTab[];\n containerRef?: (el: HTMLElement) => void;\n listClassName?: string;\n className?: string;\n borderRadius?: 'sm' | 'lg'\n}\n\nPillTabSelector.defaultProps = {\n borderRadius: 'lg'\n};\n\nexport function PillTabSelector(props: PillTabSelectorProps): JSX.Element {\n function onSelectTab(tab: PillTab): void {\n if (tab.active || !tab.onSelect)\n return;\n\n tab.onSelect();\n\n if (tab.analyticsData && tab.analyticsOptions)\n AnalyticsHelper.logUserAction(tab.analyticsData, tab.analyticsOptions);\n }\n\n return (\n <nav className={props.className ?? ''} ref={props.containerRef}>\n <ul className={`\n list-unstyled d-inline-block m-0 ${styles.pillTabSelector}\n ${props.borderRadius ? styles.radiusSmall : ''}\n ${props.listClassName}\n `}>\n {props.tabs.map((tab, index) => {\n return (\n <li\n className={`\n p-0 ${styles.tab} ${tab.active ? 'btn btn-dark' : 'btn btn-outline-dark'}\n ${tab.name ? styles.minWidth : ''} ${tab.className}\n `}\n key={index}\n >\n {tab.appLink ? (\n <AppLink\n appLink={tab.appLink}\n analyticsData={tab.analyticsData}\n analyticsOptions={tab.analyticsOptions}\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n >\n <TabContents tab={tab} />\n </AppLink>\n ) : (\n <DivButton\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n onClick={() => onSelectTab(tab)}\n >\n <TabContents tab={tab} />\n </DivButton>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n );\n}\n","// Article name mapped to article ID on support site. Used by `ArticleHelper`\n\nexport enum OnlineSupportArticle {\n AddToPlaylist = '115005679748',\n EditSsoAccounts = '8202508040345',\n\n // LE\n LibraryEditor = '360001974533',\n VideoAccess = '360000153947',\n AddFromOnline = '360011718234',\n UploadToLibraryEditor = '360012069334',\n PBTErrorCodes = '360012421153',\n ManuelReview = '360020004534',\n LibraryReview = '360000163788',\n}\n\nexport enum LiteSupportArticle {\n Integrations = '4407268725529',\n Classrooms = '4405362551833',\n MakeInteractive = '4405370510873',\n EditSsoAccounts = '8202605666073',\n UploadToLibraryEditor = '10672936659865',\n AddFromLite = '10671345281561',\n ManageSsoYearGroups = '14691130889241',\n ContentReview = '18525199576601',\n ContentPermissions = '14692125209497',\n AccessSettings = '27927466562201',\n ContentGuidelines = '24133696186009',\n FoxtelFaq = '24133519542169',\n ViviIntegration = '23826297956377',\n AppleTvIntegration = '25832373739929',\n RssFeed = '32567445635097',\n ManageGroupPermissions = '35407217335705'\n}\n","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'settings.restrictedVideosTabs';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst APPLINKS = {\n restrictedVideos: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.VIDEO_RESTRICTIONS\n },\n contentReview: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.CONTENT_REVIEW\n },\n contentReviewSettings: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.CONTENT_REVIEW_SETTINGS\n }\n};\n\ninterface RestrictionTabsProps {\n active: 'restricted-videos' | 'content-review' | 'content-review-settings'\n}\n\nexport function RestrictionTabs(props: RestrictionTabsProps): JSX.Element {\n return (\n <div className='mb-3'>\n <PillTabSelector\n tabs={[{\n name: getPhrase('restrictedVideos'),\n appLink: APPLINKS.restrictedVideos,\n active: props.active === 'restricted-videos',\n analyticsData: {\n name: getPhrase('restrictedVideos'),\n url: AppLinkHelper.getHref(APPLINKS.restrictedVideos)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n }, {\n name: getPhrase('contentReview'),\n appLink: APPLINKS.contentReview,\n active: props.active === 'content-review',\n analyticsData: {\n name: LanguageService.getPhrase(namespace, 'contentReview'),\n url: AppLinkHelper.getHref(APPLINKS.contentReview)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n }, {\n name: getPhrase('contentReviewSettings'),\n appLink: APPLINKS.contentReviewSettings,\n active: props.active === 'content-review-settings',\n analyticsData: {\n name: LanguageService.getPhrase(namespace, 'contentReviewSettings'),\n url: AppLinkHelper.getHref(APPLINKS.contentReviewSettings)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n }]}\n />\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { useGetSettingsGroups } from 'apps/settings/hooks/useGetSettingsGroups';\n\nconst namespace = 'settings.settingsLayout';\n\n/**\n * Checks if the current user has permission to access the settings module\n */\nexport const useCanAccessSettings = (requiredPermissions: PermissionName | PermissionName[]): boolean => {\n const { hasPermissions } = usePermissions();\n const settingsGroups = useGetSettingsGroups();\n\n /**\n * TODO: Update all settings pages to pasas required permissions, because checking the \n * `useGetSettingsGroups()` values clearly doesnt work for settings pages with multiple\n * applinks inside of them. - Sha\n */\n if (requiredPermissions)\n return hasPermissions(requiredPermissions);\n\n const currentRoute = Core.AppLinkHelper.getCurrentAppLink();\n\n /**\n * Allows us to have popups sitting in other locations be used\n * by our settings pages. For example the manage video access popup\n * in the \"videos with restricted access\" page - Sha\n */\n if (currentRoute.application !== AppChannels.SETTINGS)\n return true;\n\n return settingsGroups.some(group => {\n return group.modules.some(settingsModule => {\n if ('appLink' in settingsModule) {\n return settingsModule.appLink.action === currentRoute.action;\n }\n\n return false;\n });\n });\n};\n\ninterface SettingsLayoutProps {\n heading: string;\n breadcrumbs: string[];\n description?: string;\n requiredPermissions?: PermissionName | PermissionName[];\n headingButton?: () => JSX.Element;\n}\n\nexport function SettingsLayout(props: React.PropsWithChildren<SettingsLayoutProps>): JSX.Element {\n const canAccess = useCanAccessSettings(props.requiredPermissions);\n\n React.useEffect(() => {\n if (!canAccess) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n }, { replace: true });\n }\n }, [canAccess]);\n\n if (!canAccess)\n return <></>;\n\n const breadcrumbs = props.breadcrumbs.map((name, i) => ({\n name,\n appLink: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n },\n active: i === props.breadcrumbs.length - 1\n }));\n\n return (\n <div className='px-3'>\n <div className='d-flex align-items-center justify-content-between'>\n <h1 className='h2'>{props.heading}</h1>\n {props.headingButton?.()}\n </div>\n <div className='pb-3'>\n <Breadcrumbs\n breadcrumbs={[\n {\n name: LanguageService.getPhrase(namespace, 'settingsBreadcrumb'),\n appLink: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n }\n },\n ...breadcrumbs\n ]}\n />\n </div>\n {props.description &&\n <>\n <p>{props.description}</p>\n <hr />\n </>\n }\n\n {props.children}\n </div>\n );\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/flight';\n\nexport const ContentReviewSettingsRequests = {\n getLibraryReviewPeriod(): Flight.Request {\n return {\n url: `{gateway}/v1/library-reviews`,\n key: `coming:soon:settings`,\n normalize: false\n };\n },\n\n setLibraryReviewPeriod(\n period: number\n ): Flight.Request {\n return {\n url: `{gateway}/v1/library-reviews`,\n key: `update:coming:soon:settings`,\n invalidationKeys: 'coming:soon:settings',\n type: HttpVerbs.POST,\n data: {\n reviewPeriod: period\n },\n normalize: false\n };\n },\n\n deleteLibraryReviewPeriod(): Flight.Request {\n return {\n url: `{gateway}/v1/library-reviews`,\n key: `delete:coming:soon:settings`,\n invalidationKeys: 'coming:soon:settings',\n type: HttpVerbs.DELETE,\n normalize: false\n };\n }\n};","import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nconst namespace = 'settings.noItemsEmptyState';\n\nexport function NoItemsEmptyState(): JSX.Element {\n return (\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.ContentReview.NO_ITEMS} size='small'/>\n <EmptyState.Heading><Text namespace={namespace} phrase='heading' /></EmptyState.Heading>\n <EmptyState.Info><Text namespace={namespace} phrase='info' /></EmptyState.Info>\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { LiteSupportArticle } from 'libs/shared/enums/SupportArticle';\nimport { ArticleHelper } from 'libs/shared/utils/ArticleHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'settings.turnedOffEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function TurnedOffEmptyState(): JSX.Element {\n const href = ArticleHelper.getLiteArticle(LiteSupportArticle.ContentReview);\n\n return (\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.ContentReview.TURNED_OFF} size='small' />\n <EmptyState.Heading><Text namespace={namespace} phrase='heading' /></EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='info' /> \n <AppLink\n className='info-link'\n appLink={{\n application: AppChannels.SETTINGS,\n action: Actions.Settings.CONTENT_REVIEW_SETTINGS\n }}\n >\n <Text namespace={namespace} phrase='contentReviewSettings' />\n </AppLink>\n </EmptyState.Info>\n <EmptyState.Cta\n href={href}\n text={getPhrase('learnMore')}\n className='btn btn-link info-link'\n />\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Pagination } from 'libs/shared/components/pagination/Pagination';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { RestrictionType } from 'libs/shared/enums/RestrictionType';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { VideoTypesCollection } from 'libs/shared/interfaces';\nimport { RestrictionHelper } from 'libs/shared/utils/RestrictionHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { RestrictionRequests } from 'shared/flight-requests/RestrictionRequests';\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { useCommonVideoProps } from 'shared/hooks/useCommonVideoProps';\nimport { InteractiveHelpers } from 'shared/utils/InteractiveHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { RestrictionTabs } from 'apps/settings/components/restricted-videos-tabs/RestrictedVideosTabs';\nimport { SettingsLayout } from 'apps/settings/components/settings-layout/SettingsLayout';\nimport { ContentReviewSettingsRequests } from 'apps/settings/flight-requests/ContentReviewSettingsRequests';\nimport { LibraryReviewPeriodResponse } from 'apps/settings/interfaces/coming-soon/responses/LibraryReviewPeriodResponse';\nimport { NoItemsEmptyState } from 'apps/settings/views/content-review/no-items-empty-state/NoItemsEmptyState';\nimport { TurnedOffEmptyState } from 'apps/settings/views/content-review/turned-off-empty-state/TurnedOffEmptyState';\n\nconst namespace = 'settings.contentReview';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ContentReviewViewProps {\n cursor?: string;\n}\n\nexport function ContentReviewView(props: ContentReviewViewProps): JSX.Element {\n useSetPageMetadata({ title: getPhrase('pageTitle') });\n\n const { commonVideoProps } = useCommonVideoProps({ locationContext: LocationContext.VideoThumbnail });\n\n const videos = Flight.useBasicFetch<VideoTypesCollection>(\n RestrictionRequests.getRestrictedObjects([RestrictionType.Custom], props.cursor)\n );\n\n const libraryReview = Flight.useBasicFetch<LibraryReviewPeriodResponse>(\n ContentReviewSettingsRequests.getLibraryReviewPeriod()\n );\n\n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem });\n const { hasPermissions } = usePermissions();\n\n const dataLoaded = (\n videos.hasCompleted &&\n libraryReview.hasCompleted\n );\n\n return (\n <SettingsLayout\n heading={getPhrase('heading')}\n breadcrumbs={[getPhrase('heading')]}\n requiredPermissions={PermissionName.ManageVideoAccess}\n >\n <RestrictionTabs active='content-review' />\n\n {(() => {\n if (!dataLoaded)\n return <PartialVideoList />;\n\n if ((!libraryReview.data?.reviewPeriod))\n return <TurnedOffEmptyState />;\n\n if (!videos.data?.data?.length)\n return <NoItemsEmptyState />;\n\n return (\n <>\n <div className='d-flex justify-content-between mb-2'>\n <p className='h4'>\n <Text namespace={namespace} phrase='count' options={{ smartCount: videos.data.count }} />\n </p>\n <AppLink\n appLink={{\n application: AppChannels.SETTINGS,\n action: Actions.Settings.APPROVE_ALL_VIDEOS\n }}\n className='btn btn-dark'\n >\n <Text namespace={namespace} phrase='approveAll' />\n </AppLink>\n </div>\n <hr />\n <VideoActionsContext.Provider value={videoActions}>\n <VideoList\n videos={videos.data.data.filter(v =>\n !!RestrictionHelper.getRestrictionByType(v, RestrictionType.Custom))}\n getVideoAppLink={VideoAppLinkHelper.getAppLink}\n hasPermissions={hasPermissions}\n // we want to show rating badge not year level badge all the time\n presentationAudiences={[]}\n getPreviewQuestionsAppLink={interactive => InteractiveHelpers.getPreviewQuestionsAppLink(interactive)}\n commonVideoProps={commonVideoProps}\n />\n </VideoActionsContext.Provider>\n {videos.data.pagination?.cursors &&\n <div className='clearfix'>\n <Pagination\n cursors={videos.data.pagination.cursors}\n appLink={{\n application: AppChannels.SETTINGS,\n action: Actions.Settings.CONTENT_REVIEW\n }}\n buttonVariant='outline-dark'\n className='py-2 float-end'\n />\n </div>\n }\n </>\n );\n })()}\n </SettingsLayout>\n );\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { SharedWithStatements } from 'libs/shared/constants/WithStatements';\nimport { RestrictionType } from 'libs/shared/enums/RestrictionType';\n\nimport { AddRestrictionRequest } from 'shared/interfaces/requests/AddRestrictionRequest';\n\nexport const RestrictionRequests = {\n getRestrictions(id: string): Flight.Request {\n return {\n key: `restrictions:${id}`,\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/restrictions`, { id })\n };\n },\n\n addRestriction(data: AddRestrictionRequest): Flight.Request {\n return {\n type: HttpVerbs.POST,\n key: `restrictions:${data.objectTypeId}:${data.objectId}:add`,\n url: `{gateway}/v1/restrictions`,\n data: [data],\n invalidationKeys: ['restrictions']\n };\n },\n\n\n deleteRestrictions(objectId: string): Flight.Request {\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/restrictions', { objectId }),\n key: 'restrictions:delete',\n type: HttpVerbs.DELETE,\n invalidationKeys: ['restrictions']\n };\n },\n\n\n getRestrictedObjects(\n type: RestrictionType[],\n cursor?: string\n ): Flight.Request {\n const params: any = {\n 'type': type,\n 'query.video': SharedWithStatements.VIDEO_COLLECTION,\n 'query.interactive': SharedWithStatements.INTERACTIVE_COLLECTION,\n 'query.clip': SharedWithStatements.CLIP_COLLECTION\n };\n\n if (cursor)\n params.cursor = cursor;\n\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/restrictions/objects', params),\n key: `restrictions:objects:${type.sort().join(',')}:${cursor}`\n };\n },\n\n approveAll(): Flight.Request {\n return {\n url: '{gateway}/v1/library-reviews/restrictions',\n key: 'restrictions:approve:all',\n type: HttpVerbs.DELETE\n };\n }\n};","import { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config, CurrentUser, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nimport { usePluginHelper } from './use-plugin-helper/usePluginHelper';\nimport { useLiteFavourites } from './useLiteFavourites';\n\ninterface UseCommonVideoPropsResult {\n hasCommonVideoPropsCompleted: boolean;\n commonVideoProps: CommonVideoProps;\n}\n\ninterface UseCommonVideoPropsOptions {\n locationContext: LocationContext,\n mtv?: boolean;\n flightNamespace?: string;\n sharedPlaylist?: boolean;\n}\n\nexport function useCommonVideoProps(options: UseCommonVideoPropsOptions): UseCommonVideoPropsResult {\n const { locationContext, mtv, flightNamespace, sharedPlaylist } = options || {};\n\n const { isPlugin } = usePluginHelper();\n const { setFavourite, canFavourite } = useLiteFavourites(locationContext, flightNamespace);\n const { hasTopicDirectories, isLoadingSettings } = useSettings(null);\n const { hasPermissions, isLoaded: hasLoadedPermissions } = usePermissions();\n const hasStudentExperience = hasPermissions(PermissionName.StudentExperience);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n function getSubTextAppLink(video: VideoTypes): Core.AppLink {\n if (!('series' in video))\n return null;\n\n /**\n * We do not allow navigating to series on shared playlists when the user is not signed in\n * because most series are customer created and will be empty for public users\n * \n * We do not have to do this for shared series, because all the series links are self referencing\n * - Sha\n */\n if (sharedPlaylist && !currentUser.data?.isAuthenticated)\n return null;\n \n return SeriesAppLinkHelper.getSeriesAppLink(video.series, { mtv });\n }\n\n const hasCommonVideoPropsCompleted = (\n !isLoadingSettings &&\n hasLoadedPermissions &&\n config.hasCompleted &&\n currentUser.hasCompleted &&\n (!currentUser.data?.isAuthenticated || yearGroups.hasCompleted)\n );\n\n return {\n hasCommonVideoPropsCompleted,\n commonVideoProps: {\n subTextType: 'series',\n getSubTextAppLink,\n isPlugin,\n canFavourite,\n setFavourite,\n imageCdnUrl: config.data?.imageCdnUrl,\n yearGroups: yearGroups.data,\n getClassroomGuideAppLink: VideoAppLinkHelper.getClassroomGuideAppLink,\n getInteractiveGuidanceAppLink: VideoAppLinkHelper.getInteractiveGuidanceAppLink,\n getResourceGuidanceAppLink: VideoAppLinkHelper.getResourceGuidanceAppLink,\n showNewVideoIndicator: hasTopicDirectories,\n companyLogoFallbackUrl: null,\n hasStudentExperience\n }\n };\n}","// extracted by mini-css-extract-plugin\nexport default {\"pillTabSelector\":\"Hdi6o\",\"tab\":\"RvNxr\",\"minWidth\":\"GHSz9\",\"radiusSmall\":\"VhJJa\",\"tabLink\":\"WFyvo\"};"],"names":["TabContents","props","tab","svgName","className","name","count","type","data","PillTabSelector","ref","containerRef","borderRadius","listClassName","tabs","map","index","active","key","appLink","analyticsData","analyticsOptions","onClick","onSelect","onSelectTab","defaultProps","OnlineSupportArticle","LiteSupportArticle","namespace","getPhrase","APPLINKS","restrictedVideos","application","action","contentReview","contentReviewSettings","RestrictionTabs","url","actionType","entity","location","useCanAccessSettings","requiredPermissions","hasPermissions","settingsGroups","currentRoute","some","group","modules","settingsModule","SettingsLayout","canAccess","replace","breadcrumbs","i","length","heading","headingButton","description","children","ContentReviewSettingsRequests","getLibraryReviewPeriod","normalize","setLibraryReviewPeriod","period","invalidationKeys","reviewPeriod","deleteLibraryReviewPeriod","NoItemsEmptyState","EmptyState","src","ImageUrls","size","Text","phrase","LanguageService","TurnedOffEmptyState","href","ArticleHelper","AppLink","text","ContentReviewView","useSetPageMetadata","title","commonVideoProps","useCommonVideoProps","locationContext","videos","RestrictionRequests","RestrictionType","cursor","libraryReview","videoActions","useVideoActions","usePermissions","dataLoaded","hasCompleted","PermissionName","options","smartCount","VideoActionsContext","value","VideoList","filter","v","RestrictionHelper","getVideoAppLink","VideoAppLinkHelper","presentationAudiences","getPreviewQuestionsAppLink","interactive","InteractiveHelper","pagination","cursors","Pagination","buttonVariant","PartialVideoList","getRestrictions","id","addRestriction","objectTypeId","objectId","deleteRestrictions","getRestrictedObjects","params","sort","join","approveAll","mtv","flightNamespace","sharedPlaylist","isPlugin","u","setFavourite","canFavourite","hasTopicDirectories","isLoadingSettings","hasLoadedPermissions","isLoaded","hasStudentExperience","config","currentUser","yearGroups","isAuthenticated","customerId","hasCommonVideoPropsCompleted","subTextType","getSubTextAppLink","video","series","imageCdnUrl","getClassroomGuideAppLink","getInteractiveGuidanceAppLink","getResourceGuidanceAppLink","showNewVideoIndicator","companyLogoFallbackUrl"],"sourceRoot":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/1735-c0f3f1238a-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/onboarding/hooks/useOnboardingPathway.ts","file:///app/packages/libs/shared/src/components/launchpad/v2/launchpad-v2.scss","file:///app/packages/libs/shared/src/components/launchpad/v2/LaunchpadV2.tsx","file:///app/packages/projects/lite/src/apps/onboarding/components/heading/onboarding-screen-heading.scss","file:///app/packages/projects/lite/src/apps/onboarding/components/heading/OnboardingScreenHeading.tsx","file:///app/packages/projects/lite/src/apps/onboarding/components/info/OnboardingScreenInfo.tsx","file:///app/packages/projects/lite/src/apps/onboarding/components/progress-bar/OnboardingProgressBar.tsx","file:///app/packages/projects/lite/src/apps/onboarding/components/progress-bar/onboarding-progress-bar.scss","file:///app/packages/projects/lite/src/apps/onboarding/components/layout/OnboardingLayout.tsx","file:///app/packages/projects/lite/src/apps/onboarding/hooks/useOnboardingCallbacks.ts","file:///app/packages/projects/lite/src/apps/onboarding/hooks/useOnboardingEventLogger.ts","file:///app/packages/projects/lite/src/apps/sign-up/flight-requests/UpgradeRequests.ts"],"sourcesContent":["import React from 'react';\n\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { OnboardingScreenAppLinks } from 'libs/shared/apps/onboarding/interfaces/OnboardingScreenAppLinks';\nimport { OnboardingPathway, OnboardingPathwayHelper } from 'libs/shared/apps/onboarding/utils/OnboardingPathwayHelper';\nimport { JobTitles } from 'libs/shared/apps/sign-up/interfaces/JobTitles';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { PlaylistRequests } from 'libs/shared/flight-requests/PlaylistRequests';\nimport { PreferenceRequests } from 'libs/shared/flight-requests/PreferenceRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Classification, CurrentUser, Customer, PlaylistCollection, Presentation, User } from 'libs/shared/interfaces';\nimport { ContextService } from 'libs/shared/services/ContextService';\n\nimport { PlaylistCollectionIdentifier } from '../../playlists/interfaces';\n\nexport interface GetPathwayOptions {\n jobTitleOverride?: JobTitles;\n preferredPresentationOverride?: Presentation;\n}\n\nexport function useOnboardingPathway(appLinks: OnboardingScreenAppLinks) {\n const [ hasPlaylist, setHasPlaylist ] = useViewModel<boolean>('has:playlist', null);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const user = Flight.useBasicFetch<User>(currentUser.data?.isAuthenticated && UserRequests.user(currentUser.data.id));\n const customer = Flight.useBasicFetch<Customer>(\n currentUser.data?.isAuthenticated && CustomerRequests.customer(currentUser.data.customerId)\n );\n\n const presentations = Flight.useBasicFetch<Presentation[]>(\n ClassificationRequests.availablePresentations(PresentationType.Subject)\n );\n const preferredPresentation = Flight.useBasicFetch<Presentation>(\n ClassificationRequests.presentation(PresentationType.Subject)\n );\n const curriculums = Flight.useBasicFetch<Presentation[]>(\n ClassificationRequests.availablePresentations(PresentationType.Curriculum)\n );\n const playlists = Flight.useBasicFetch<PlaylistCollection>(\n PlaylistRequests.getUserPlaylists(new PlaylistCollectionIdentifier())\n );\n const preferredSubjects = Flight.useBasicFetch<Classification[]>(\n PreferenceRequests.mySubjectPreferences()\n );\n const { hasPermissions } = usePermissions();\n\n React.useEffect(() => {\n if (!playlists.hasCompleted)\n return;\n\n if (hasPlaylist !== !!playlists.data?.data?.length)\n setHasPlaylist(!!playlists.data?.data?.length);\n }, [playlists.hasCompleted]);\n\n const hasLoadedPathway = (\n currentUser.hasCompleted &&\n user.hasCompleted &&\n customer.hasCompleted &&\n presentations.hasCompleted &&\n curriculums.hasCompleted &&\n preferredPresentation.hasCompleted &&\n playlists.hasCompleted &&\n preferredSubjects.hasCompleted &&\n hasPlaylist !== null\n );\n\n const { userSettings } = useSettings(null);\n\n function getPathway(options: GetPathwayOptions = {}): OnboardingPathway {\n const jobTitle = options.jobTitleOverride || user.data?.userProfile?.metadata?.jobTitle;\n const presentation = options.preferredPresentationOverride || preferredPresentation.data;\n\n if (!hasLoadedPathway) {\n return {\n screens: {},\n currentScreen: null,\n totalScreens: 0,\n totalScreensInProgressBar: 0,\n hasCompletedAllSteps: false\n };\n }\n\n return OnboardingPathwayHelper.getOnboardingPathway({\n jobTitle,\n userSettings: userSettings.data,\n presentations: presentations.data,\n curriculums: curriculums.data,\n preferredSubjects: preferredSubjects.data,\n preferredPresentation: presentation,\n appLink: ContextService.getCurrentRoute().appLink,\n appLinks,\n masterUser: user.data,\n customer: customer.data,\n hasPlaylist,\n hasPermissions,\n currentUser: currentUser.data\n });\n }\n\n return {\n getPathway,\n hasLoadedPathway\n };\n}","// extracted by mini-css-extract-plugin\nexport default {\"left\":\"s6wnJ\",\"leftWithImage\":\"UFQ2T\",\"bgCover\":\"Tp9_3\",\"bgFull\":\"AlF2T\",\"right\":\"eoZzJ\",\"rightContent\":\"RVyLM\",\"narrowContent\":\"INvJ0\",\"logo\":\"YHNgA\",\"buttonContainer\":\"ZW85Q\",\"blur\":\"Mtlg9\",\"imageContainer\":\"NxEjh\",\"imagePosition\":\"NN9cV\",\"image\":\"PkJ8J\",\"thumbnail\":\"y0V3Z\",\"tallposter\":\"Wrg5x\",\"cover\":\"x3h8F\",\"contentBody\":\"aLd5V\",\"contentBodyBase\":\"uQ2rm\"};","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { ClickViewLogo } from 'libs/shared/components/svgs/clickview-logo/ClickViewLogo';\nimport { MasterType } from 'libs/shared/enums/MasterType';\n\nimport styles from './launchpad-v2.scss';\n\nfunction mapObjectTypeToImageClass(objectType: MasterType): string {\n switch (objectType) {\n case MasterType.Video:\n case MasterType.Interactive:\n case MasterType.Clip:\n return styles.thumbnail;\n\n case MasterType.Subject:\n case MasterType.Playlist:\n return styles.cover;\n\n case MasterType.Series:\n return styles.tallposter;\n\n default:\n return '';\n }\n}\n\ninterface LaunchpadV2Props {\n}\n\nexport function LaunchpadV2(props: React.PropsWithChildren<LaunchpadV2Props>): JSX.Element {\n return (\n <div className='d-flex'>\n {props.children}\n </div>\n );\n}\n\ninterface LeftPanelProps {\n className?: string;\n}\n\n\nfunction LeftPanel(props: React.PropsWithChildren<LeftPanelProps>): JSX.Element {\n return (\n <div className={`${styles.left} ${props.className ? props.className : ''}`}>\n {props.children}\n </div>\n );\n}\n\ninterface LeftImageProps {\n objectType?: MasterType;\n title?: string;\n imageUrl?: string;\n fallbackImages: LaunchImage[];\n}\n\ninterface LaunchImage {\n bgUrl: string;\n}\n\nfunction LeftImage(props: LeftImageProps): JSX.Element {\n const [ showImage, setShowImage ] = React.useState(false);\n const [ image, setImage ] = React.useState<string>('');\n\n React.useEffect(() => {\n if (!props.imageUrl) {\n const image = props.fallbackImages[Math.floor(Math.random() * props.fallbackImages.length)];\n setImage(image.bgUrl);\n return;\n }\n\n const img = new Image();\n img.onload = () => setShowImage(true);\n img.src = props.imageUrl;\n return () => img.onload = null;\n }, [props.imageUrl]);\n\n return (\n <div\n className={`${styles.left} ${styles.leftWithImage} ${styles.bgCover} bg-light`}\n style={{ backgroundImage: image ? `url('${image}')` : '' }}\n >\n {showImage &&\n <>\n <div className={styles.blur} style={{ backgroundImage: `url('${props.imageUrl}')` }} />\n <div className={`${styles.imageContainer} ${mapObjectTypeToImageClass(props.objectType)}`}>\n <div className={styles.imagePosition}>\n <img className={styles.image} src={props.imageUrl} alt={props.title} />\n </div>\n </div>\n </>\n }\n </div>\n );\n}\n\ntype ImageSizeType = 'cover' | 'full';\n\ninterface LeftImageWithBackgroundProps {\n imageUrl: string;\n imageSize?: ImageSizeType;\n backgroundColor?: string;\n title?: string;\n}\n\nconst imageSizeMap: {[key in ImageSizeType]: string} = {\n cover: styles.bgCover,\n full: styles.bgFull\n};\n\nfunction LeftImageWithBackground(props: LeftImageWithBackgroundProps): JSX.Element {\n const bgStyles: React.CSSProperties = {\n backgroundImage: props.imageUrl ? `url(\"${props.imageUrl}\")` : ''\n };\n\n if (props.backgroundColor)\n bgStyles.backgroundColor = props.backgroundColor;\n \n return (\n <div\n className={`${styles.left} ${styles.leftWithImage} ${imageSizeMap[props.imageSize || 'cover']} d-flex align-items-center`}\n style={bgStyles}\n title={props.title}\n />\n );\n}\n\ninterface RightPanelProps {\n className?: string;\n}\n\nexport function RightPanel(props: React.PropsWithChildren<RightPanelProps>): JSX.Element {\n return (\n <div className={`${styles.right} ${props.className ? props.className : ''}`}>\n {props.children}\n </div>\n );\n}\n\ninterface HeaderProps {\n bannerComponent?: JSX.Element;\n logoComponent?: () => JSX.Element;\n className?: {\n logoContainer?: string;\n }\n}\n\n\nfunction Header(props: React.PropsWithChildren<HeaderProps>): JSX.Element {\n const LogoComponent = props?.logoComponent || ClickViewLogo;\n \n return (\n <div className='position-relative'>\n {!!props.bannerComponent &&\n props.bannerComponent\n }\n <div className={classNames(styles.logo, 'position-absolute', props.className?.logoContainer)}>\n <LogoComponent />\n </div>\n {props.children}\n </div>\n );\n}\n\ninterface ContentProps {\n className?: string;\n}\n\nfunction Content(props: React.PropsWithChildren<ContentProps>): JSX.Element {\n return (\n <div className={classNames(styles.rightContent, 'd-flex flex-column justify-content-center h-100', props?.className)}>\n {props.children}\n </div>\n );\n}\n\ninterface ContentBodyProps {\n className?: string;\n width?: 'base' | 'full';\n}\n\nconst widthClassNameMap: {[key in ContentBodyProps['width']]: string} = {\n base: styles.contentBodyBase,\n full: ''\n};\n\nfunction ContentBody(props: React.PropsWithChildren<ContentBodyProps>): JSX.Element {\n const widthClassName = widthClassNameMap[props.width || 'base'];\n return (\n <div className={classNames(styles.contentBody, widthClassName, 'm-auto p-3', props.className)}>\n {props.children}\n </div>\n );\n}\n\ninterface NarrowContentProps {\n className?: string;\n}\n\nLaunchpadV2.NarrowContent = NarrowContent;\nfunction NarrowContent(props: React.PropsWithChildren<NarrowContentProps>): JSX.Element {\n return (\n <div className={`${styles.narrowContent} mx-auto w-100 ${props.className ? props.className : ''}`}>\n {props.children}\n </div>\n );\n}\n\ninterface ButtonsProps {\n className?: string;\n}\n\nfunction Buttons(props: React.PropsWithChildren<ButtonsProps>): JSX.Element {\n return (\n <div className={classNames('position-fixed bg-white d-flex align-items-center', styles.buttonContainer, props?.className)}>\n {props.children}\n </div>\n );\n}\n\n/**\n * Intended ussage below:\n * \n * <LaunchpadV2>\n * <LaunchpadV2.Left>\n * // Your LHS content here\n * </LaunchpadV2.Left>\n * <LaunchpadV2.Right>\n * <LaunchpadV2.Header />\n * <LaunchpadV2.Content>\n * // Can omit this if it needs to be full width\n * <LaunchpadV2.ContentBody width=\"...\">\n * // Your main content here\n * </LaunchpadV2.ContentBody>\n * </LaunchpadV2.Content>\n * \n * // Omit this and put your buttons in content\n * // if you want your buttons immediately under your content rather \n * // than at the bottom of the screen\n * <LaunchpadV2.Buttons />\n * \n * </LaunchpadV2.Right>\n * </LaunchpadV2>\n * \n * - Sha\n */\n\nLaunchpadV2.Left = LeftPanel;\nLaunchpadV2.LeftImage = LeftImage;\nLaunchpadV2.LeftImageWithBackground = LeftImageWithBackground;\nLaunchpadV2.Right = RightPanel;\nLaunchpadV2.Header = Header;\nLaunchpadV2.Content = Content;\nLaunchpadV2.ContentBody = ContentBody;\nLaunchpadV2.Buttons = Buttons;\n","// extracted by mini-css-extract-plugin\nexport default {\"heading\":\"Y1xND\"};","import React from 'react';\n\nimport styles from './onboarding-screen-heading.scss';\n\ninterface OnboardingScreenHeadingProps {\n className?: string;\n}\n\nexport function OnboardingScreenHeading(props: React.PropsWithChildren<OnboardingScreenHeadingProps>): JSX.Element {\n return (\n <h1 className={`${styles.heading} ${props.className}`}>\n {props.children}\n </h1>\n );\n}","import React from 'react';\n\ninterface OnboardingScreenInfoProps {\n className?: string;\n}\n\nexport function OnboardingScreenInfo(props: React.PropsWithChildren<OnboardingScreenInfoProps>): JSX.Element {\n return (\n <p className={props.className}>\n {props.children}\n </p>\n );\n}","import React from 'react';\n\nimport { OnboardingPathway, OnboardingPathwayHelper } from 'libs/shared/apps/onboarding/utils/OnboardingPathwayHelper';\n\nimport styles from './onboarding-progress-bar.scss';\n\ninterface OnboardingProgressBarProps {\n pathway: OnboardingPathway;\n}\n\nexport function OnboardingProgressBar(props: OnboardingProgressBarProps): JSX.Element {\n /**\n * We only want to generate the progress bar once per view, otherwise the bar\n * may change out of sync with the current screen after switching pathways.\n */\n const {\n totalScreensInProgressBar,\n currentStepProgressBarNumber,\n progressBarPercentage,\n showProgressBar\n } = React.useMemo(() => OnboardingPathwayHelper.getProgress(props.pathway), []);\n\n if (!showProgressBar)\n return <></>;\n\n return (\n <div className={`${styles.progressBar} position-absolute rounded-pill bg-light-blue d-flex align-items-center`}>\n <div className={styles.currentStep}>\n {currentStepProgressBarNumber} / {totalScreensInProgressBar}\n </div>\n <div className='flex-grow-1 h-50'>\n <div className='h-100 rounded-pill bg-green' style={{ width: `${progressBarPercentage}%` }} />\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"progressBar\":\"AZBhg\",\"currentStep\":\"fWxc8\"};","import React from 'react';\n\nimport { useOnboardingPathway } from 'libs/shared/apps/onboarding/hooks/useOnboardingPathway';\nimport { LaunchpadV2 } from 'libs/shared/components/launchpad/v2/LaunchpadV2';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nimport { getOnboardingAppLinks } from 'apps/onboarding/utils/OnboardingAppLinkHelper';\n\nimport { OnboardingProgressBar } from '../progress-bar/OnboardingProgressBar';\n\nconst namespace = 'onboarding.onboardingLayout';\n\ninterface OnboardingLayoutProps {\n namespace?: string;\n}\n\nexport function OnboardingLayout(props: React.PropsWithChildren<OnboardingLayoutProps>): JSX.Element {\n const { hasLoadedPathway } = useOnboardingPathway(getOnboardingAppLinks());\n\n if (!hasLoadedPathway)\n return <></>;\n\n return (\n <LanguageNamespaceContext.Provider value={props.namespace}>\n <LaunchpadV2>\n {props.children}\n </LaunchpadV2>\n </LanguageNamespaceContext.Provider>\n );\n}\n\ninterface LeftPanelProps {\n className?: string;\n}\n\nfunction LeftPanel(props: React.PropsWithChildren<LeftPanelProps>): JSX.Element {\n return (\n <LaunchpadV2.Left className={props.className}>\n {props.children}\n </LaunchpadV2.Left>\n );\n}\n\ntype SharedRightPanelProps = {\n className?: string;\n};\n\nexport type OnboardingRightPanelProps = SharedRightPanelProps & ({\n hasCustomButtons: false;\n onClickComeBackLater?: () => void;\n onClickAreYouATeacher?: () => void;\n onClickBack: () => void;\n onClickNext: () => Promise<void>;\n disableNext?: boolean;\n nextText?: string;\n} | {\n hasCustomButtons: true;\n});\n\nfunction RightPanel(props: React.PropsWithChildren<OnboardingRightPanelProps>): JSX.Element {\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n\n const appLinks = getOnboardingAppLinks();\n const { getPathway, hasLoadedPathway } = useOnboardingPathway(appLinks);\n const pathway = getPathway();\n\n async function onClickNext(): Promise<void> {\n if (props.hasCustomButtons === true)\n return;\n\n setShowSpinner(true);\n\n try {\n await props.onClickNext();\n } catch {\n setShowSpinner(false);\n }\n }\n\n if (!hasLoadedPathway)\n return <></>;\n\n const currentScreenInfo = pathway.screens[pathway.currentScreen];\n\n return (\n <LaunchpadV2.Right className={props.className}>\n <LaunchpadV2.Header>\n <OnboardingProgressBar pathway={pathway} />\n </LaunchpadV2.Header>\n\n <LaunchpadV2.Content>\n {props.children}\n </LaunchpadV2.Content>\n\n {props.hasCustomButtons === false && (\n <LaunchpadV2.Buttons>\n {props.onClickComeBackLater && (\n <button className='btn btn-link btn-lg text-info' onClick={props.onClickComeBackLater}>\n <Text namespace={namespace} phrase='comeBackLater' />\n </button>\n )}\n\n {props.onClickAreYouATeacher && (\n <button className='btn btn-link btn-lg text-info text-start' onClick={props.onClickAreYouATeacher}>\n <Text namespace={namespace} phrase='areYouATeacher' />\n </button>\n )}\n\n <div className='d-flex ms-auto'>\n {!!currentScreenInfo?.previous && (\n <button className='btn btn-outline-dark btn-lg me-2' onClick={props.onClickBack}>\n <Text namespace={namespace} phrase='back' />\n </button>\n )}\n <SpinnerButton\n className={`${props.disableNext ? 'disabled' : ''}`}\n onClick={onClickNext}\n disabled={props.disableNext}\n showSpinner={showSpinner}\n variant='dark'\n size='lg'\n >\n {props.nextText ? (\n props.nextText\n ) : (\n <Text\n namespace={namespace}\n phrase={\n !currentScreenInfo?.next\n ? 'finish'\n : currentScreenInfo?.next === currentScreenInfo?.previous\n ? 'save'\n : 'next'}\n />\n )}\n </SpinnerButton>\n </div>\n </LaunchpadV2.Buttons>\n )}\n </LaunchpadV2.Right>\n );\n}\n\nOnboardingLayout.Left = LeftPanel;\nOnboardingLayout.Right = RightPanel;","import { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { OnboardingDescriptor, UserAction } from 'libs/analytics/interfaces';\n\nimport { OnboardingScreenConfigs } from 'libs/shared/apps/onboarding/constants/OnboardingScreenConfigs';\nimport { GetPathwayOptions, useOnboardingPathway } from 'libs/shared/apps/onboarding/hooks/useOnboardingPathway';\nimport { OnboardingPathwayHelper } from 'libs/shared/apps/onboarding/utils/OnboardingPathwayHelper';\nimport { SettingKind } from 'libs/shared/enums/SettingKind';\nimport { SettingName } from 'libs/shared/enums/SettingName';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { CurrentUser } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { useOnboardingEventLogger } from 'apps/onboarding/hooks/useOnboardingEventLogger';\nimport { getOnboardingAppLinks, onFinishOnboarding } from 'apps/onboarding/utils/OnboardingAppLinkHelper';\n\nconst namespace = 'onboarding.hooks';\n\ninterface CompleteStepOptions extends GetPathwayOptions {\n isExiting?: boolean;\n}\n\ninterface ExitStepOptions {\n hasLoader?: boolean;\n}\n\nexport function useOnboardingCallbacks(redirectUrl: string) {\n const appLinks = getOnboardingAppLinks(redirectUrl);\n const { getPathway } = useOnboardingPathway(appLinks);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const pathway = getPathway();\n const screenConfig = OnboardingScreenConfigs[pathway.currentScreen];\n const alerts = useAlerts();\n\n const { logEvent } = useOnboardingEventLogger();\n\n const { updateSettingAsync } = useSettings(screenConfig?.analyticsLocation);\n\n async function completeStepAsync(options: CompleteStepOptions = { isExiting: false }): Promise<void> {\n await updateSettingAsync(currentUser.data.id, {\n name: screenConfig?.setting,\n value: true,\n kind: SettingKind.Permanent\n });\n\n if (options.isExiting) {\n exitOnboarding({ hasLoader: true });\n return;\n }\n\n const pathway = getPathway(options);\n\n const currentNode = pathway.screens[pathway.currentScreen];\n const nextScreenId = currentNode?.next;\n\n if (!nextScreenId) {\n completeOnboarding();\n return;\n }\n\n const nextAppLink = OnboardingPathwayHelper.getNextAppLink(pathway, appLinks);\n Core.AppLinkHelper.trigger(nextAppLink);\n }\n\n function onSaveError(): void {\n alerts.error(LanguageService.getPhrase(namespace, 'saveError'));\n }\n\n function onClickBack(): void {\n logEvent(UserAction.Click, OnboardingDescriptor.Back);\n\n const previousAppLink = OnboardingPathwayHelper.getPreviousAppLink(pathway, appLinks);\n Core.AppLinkHelper.trigger(previousAppLink);\n }\n\n function exitOnboarding(options: ExitStepOptions = { hasLoader: false }): void {\n logEvent(UserAction.Click, OnboardingDescriptor.ComeBackLater);\n\n updateSettingAsync(currentUser.data.id, {\n name: SettingName.HasExitedOnboarding,\n value: true,\n kind: SettingKind.Permanent\n }).then(() => {\n if (options.hasLoader) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.ONBOARDING,\n action: Actions.Onboarding.COMPLETED_LOADER,\n params: { redirectUrl }\n });\n return;\n }\n\n onFinishOnboarding(redirectUrl);\n });\n }\n\n function completeOnboarding(): void {\n logEvent(UserAction.Complete, OnboardingDescriptor.Complete);\n\n updateSettingAsync(currentUser.data.id, {\n name: SettingName.HasCompletedOnboardingV2,\n value: true,\n kind: SettingKind.Permanent\n }).then(() => {\n Core.AppLinkHelper.trigger({\n application: AppChannels.ONBOARDING,\n action: Actions.Onboarding.COMPLETED_LOADER,\n params: { redirectUrl }\n });\n });\n }\n\n return {\n onClickBack,\n exitOnboarding,\n onSaveError,\n completeStepAsync,\n completeOnboarding\n };\n}","import { Flight } from 'libs/common/react/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, OnboardingDescriptor, UserAction } from 'libs/analytics/interfaces';\n\nimport { OnboardingScreenConfigs } from 'libs/shared/apps/onboarding/constants/OnboardingScreenConfigs';\nimport { GetPathwayOptions, useOnboardingPathway } from 'libs/shared/apps/onboarding/hooks/useOnboardingPathway';\nimport { OnboardingPathwayHelper } from 'libs/shared/apps/onboarding/utils/OnboardingPathwayHelper';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useIsKDM } from 'libs/shared/hooks/UseIsKdm';\nimport { CurrentUser, User } from 'libs/shared/interfaces';\nimport { Prospect } from 'libs/shared/interfaces/models/Prospect';\n\nimport { getOnboardingAppLinks } from 'apps/onboarding/utils/OnboardingAppLinkHelper';\nimport { UpgradeRequests } from 'apps/sign-up/flight-requests/UpgradeRequests';\n\nimport { useIsTertiary } from './useIsTertiary';\n\nexport function useOnboardingEventLogger() {\n const appLinks = getOnboardingAppLinks();\n const { getPathway } = useOnboardingPathway(appLinks);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const user = Flight.useBasicFetch<User>(UserRequests.user(currentUser.data.id));\n const prospect = Flight.useBasicFetch<Prospect>(UpgradeRequests.currentProspect());\n\n const isKDM = useIsKDM();\n const isTertiary = useIsTertiary();\n\n const pathwayName = isKDM ? 'kdm' : 'teacher';\n\n function logEvent(\n actionType: UserAction,\n descriptor: OnboardingDescriptor,\n additionalData: HashObject = {},\n pathwayOptions: GetPathwayOptions = {}\n ): void {\n const pathway = getPathway(pathwayOptions);\n const screenConfig = OnboardingScreenConfigs[pathway.currentScreen];\n\n const currentProgress = OnboardingPathwayHelper.getProgress(pathway);\n\n const currentNode = pathway.screens[pathway.currentScreen];\n const nextScreenId = currentNode?.next;\n const previousScreenId = currentNode?.previous;\n\n const userData = {\n jobTitle: user.data?.userProfile?.metadata?.jobTitle,\n prospectId: prospect.data?.id\n };\n\n AnalyticsHelper.logUserAction({\n currentScreen: screenConfig?.id,\n nextScreen: nextScreenId,\n previousScreen: previousScreenId,\n progress: currentProgress,\n pathway: pathwayName,\n isTertiary,\n ...userData,\n ...OnboardingPathwayHelper.getOnboardingScreenStates(pathway),\n ...additionalData\n }, {\n actionType,\n descriptor,\n location: screenConfig?.analyticsLocation,\n entity: EntityType.User\n });\n }\n\n return { logEvent };\n}","import { Flight } from 'libs/common/flight';\n\nexport const UpgradeRequests = {\n currentProspect(): Flight.Request {\n return {\n url: '/api/prospects/current',\n key: 'prospect:current'\n };\n },\n getLookups(prospectId: string): Flight.Request {\n return {\n url: `/api/prospects/${prospectId}/lookups`,\n key: `prospect:${prospectId}`\n };\n }\n};"],"names":["useOnboardingPathway","appLinks","hasPlaylist","setHasPlaylist","currentUser","user","data","isAuthenticated","id","customer","customerId","presentations","preferredPresentation","curriculums","playlists","preferredSubjects","hasPermissions","hasCompleted","length","hasLoadedPathway","userSettings","getPathway","options","jobTitle","jobTitleOverride","userProfile","metadata","presentation","preferredPresentationOverride","appLink","masterUser","screens","currentScreen","totalScreens","totalScreensInProgressBar","hasCompletedAllSteps","mapObjectTypeToImageClass","objectType","MasterType","LaunchpadV2","props","className","children","imageSizeMap","cover","full","widthClassNameMap","base","NarrowContent","Left","LeftImage","showImage","setShowImage","image","setImage","imageUrl","img","Image","onload","src","fallbackImages","Math","floor","random","bgUrl","style","backgroundImage","alt","title","LeftImageWithBackground","bgStyles","backgroundColor","imageSize","Right","Header","LogoComponent","logoComponent","ClickViewLogo","bannerComponent","logoContainer","Content","ContentBody","widthClassName","width","Buttons","OnboardingScreenHeading","OnboardingScreenInfo","OnboardingProgressBar","OnboardingPathwayHelper","pathway","currentStepProgressBarNumber","progressBarPercentage","showProgressBar","namespace","OnboardingLayout","value","showSpinner","setShowSpinner","currentScreenInfo","hasCustomButtons","onClickComeBackLater","onClick","Text","phrase","onClickAreYouATeacher","previous","onClickBack","SpinnerButton","disableNext","onClickNext","disabled","variant","size","nextText","next","useOnboardingCallbacks","redirectUrl","screenConfig","alerts","logEvent","updateSettingAsync","analyticsLocation","exitOnboarding","hasLoader","name","kind","then","application","action","params","completeOnboarding","previousAppLink","onSaveError","error","completeStepAsync","isExiting","setting","currentNode","nextAppLink","useOnboardingEventLogger","prospect","isKDM","isTertiary","pathwayName","actionType","descriptor","additionalData","currentProgress","nextScreenId","previousScreenId","userData","prospectId","nextScreen","previousScreen","progress","location","entity","UpgradeRequests","currentProspect","url","key","getLookups"],"sourceRoot":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3677],{39902:(e,t,n)=>{n.d(t,{F:()=>p,f:()=>m});var r=n(32735),i=n(20354),a=n(75896);function o(e){return function(e){if(Array.isArray(e))return s(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||c(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e,t){if(e){if("string"==typeof e)return s(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?s(e,t):void 0}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function l(e){return l="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},l(e)}function u(e,t,n){return(t=function(e){var t=function(e){if("object"!=l(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=l(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==l(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var d=50;function m(e,t){var n=a.m.chunk(e,d).map((function(e){return t(a.m.uniq(e))})),r=i.a.useBasicFetchAll(n),o=a.m.flatten(r.data),c=r.data.length?o.reduce((function(e,t){return Object.assign(Object.assign({},e),u({},t.id,t))}),{}):null;return{itemsArr:o,items:c,isFetching:r.isFetching}}function p(e,t,n){var s,m,p,f,v=n||function(e){return"object"===l(e)?e.id:e},h=r.useRef(new Set),y=(p=r.useState([]),f=2,function(e){if(Array.isArray(e))return e}(p)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,a,o,c=[],s=!0,l=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=a.call(n)).done)&&(c.push(r.value),c.length!==t);s=!0);}catch(e){l=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return c}}(p,f)||c(p,f)||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.")}()),g=y[0],b=y[1];r.useEffect((function(){if(null==e?void 0:e.length){var n=[];e.forEach((function(e){var t=v(e);h.current.has(t)||(n.push(e),h.current.add(t))})),n.length&&b((function(e){return[].concat(o(e),o(a.m.chunk(n,d).map(t)))}))}}),[null==e?void 0:e.length]);var A=i.a.useBasicFetchAll(g),I=a.m.flatten(A.data),P=A.data.length?I.reduce((function(e,t){return Object.assign(Object.assign({},e),u({},v(t),t))}),{}):null;return{hasFirstRequestCompleted:!!(null===(m=null===(s=A.responses)||void 0===s?void 0:s[0])||void 0===m?void 0:m.hasCompleted),itemsArr:I,items:P,isFetching:A.isFetching}}},63719:(e,t,n)=>{n.d(t,{h:()=>c});var r=n(32735),i=n(77316);function a(e,t){if(e){if("string"==typeof e)return o(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(e,t):void 0}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function c(e){var t,n,c=(t=r.useMemo((function(){return i.p.getBuilder()}),[]),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,a,o,c=[],s=!0,l=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=a.call(n)).done)&&(c.push(r.value),c.length!==t);s=!0);}catch(e){l=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return c}}(t,n)||a(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),s=c[0],l=(0,c[1])(s);return l&&e?[].concat(function(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||a(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(l),[Object.assign(Object.assign({},e),{active:!0})]):l}},58321:(e,t,n)=>{n.d(t,{U:()=>f});var r=n(20354),i=n(16714),a=n(39151),o=n(1666),c=n(31949),s=n(22902),l=n(37802),u=n(22490),d=n(82431),m=n(46390),p=n(27638);function f(e){var t,n,f,v=e||{},h=v.locationContext,y=v.mtv,g=v.flightNamespace,b=v.sharedPlaylist,A=(0,m.G)().isPlugin,I=(0,p.u)(h,g),P=I.setFavourite,E=I.canFavourite,V=(0,l.r)(null),C=V.hasTopicDirectories,S=V.isLoadingSettings,w=(0,s.T)(),T=w.hasPermissions,O=w.isLoaded,x=T(i.C.StudentExperience),L=r.a.useBasicFetch(a.L.config()),M=r.a.useBasicFetch(c.N.currentUser()),R=r.a.useBasicFetch((null===(t=M.data)||void 0===t?void 0:t.isAuthenticated)&&o.h.yearGroups(M.data.customerId));return{hasCommonVideoPropsCompleted:!S&&O&&L.hasCompleted&&M.hasCompleted&&(!(null===(n=M.data)||void 0===n?void 0:n.isAuthenticated)||R.hasCompleted),commonVideoProps:{subTextType:"series",getSubTextAppLink:function(e){var t;return"series"in e?b&&!(null===(t=M.data)||void 0===t?void 0:t.isAuthenticated)?null:d.j.getSeriesAppLink(e.series,{mtv:y}):null},isPlugin:A,canFavourite:E,setFavourite:P,imageCdnUrl:null===(f=L.data)||void 0===f?void 0:f.imageCdnUrl,yearGroups:R.data,getClassroomGuideAppLink:u.W.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:u.W.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:u.W.getResourceGuidanceAppLink,showNewVideoIndicator:C,companyLogoFallbackUrl:null,hasStudentExperience:x}}}},44110:(e,t,n)=>{n.d(t,{i:()=>o});var r=n(20354),i=n(89454),a=n(86698),o=function(){var e=(0,a.y)({redirectOnError:!0}),t=e.activePresentation,n=e.getFallbackPresentation,o=t||n();return r.a.useBasicFetch(!!o&&i.O.presentationAudiences(o.id))}},35014:(e,t,n)=>{n.d(t,{I:()=>m});var r=n(20354),i=n(55171),a=n(16714),o=n(12754),c=n(31949),s=n(22902),l=n(15311),u=n(37802),d=n(11387);function m(e){var t=(0,s.T)(),n=t.hasPermissions,m=t.hasLocalPermissions,p=(0,l.r)().hasProduct,f=r.a.useBasicFetch(c.N.currentUser()),v=(0,u.r)(null).hasPlayPageTranscript,h=p(o.x.Primary);return{canViewGlance:n(a.C.ViewVideoGlance),canViewResources:!0,canViewInteractives:h&&n(a.C.ViewVideoInteractives),canViewClips:h&&n(a.C.ViewVideoClips),canViewCurriculumLinks:n(a.C.ViewCurriculums),canUseActions:m(a.E.UseVideoActions),canViewPublicLayout:!m(a.E.WatchVideos)&&d.C.hasRegionPrefix(),canViewResourceItems:m(a.E.ViewVideoResourceItems),canNavigate:h,canViewTranscript:function(e){var t;return(null===(t=f.data)||void 0===t?void 0:t.isAuthenticated)?v:!!e&&i.e.PublicTranscriptVideoIds.includes(e)}(e)}}},97816:(e,t,n)=>{n.d(t,{V:()=>o});var r=n(1575),i=n(39902),a=n(31908);function o(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=function(e){return e?Array.isArray(e)?e.filter((function(e){return!!e&&(a.M.isVideo(e)||a.M.isClip(e))})):"data"in e?e.data.filter((function(e){return!!e&&(a.M.isVideo(e)||a.M.isClip(e))})):[]:[]}(e).map((function(e){return e.id}));(0,i.F)(n,(function(e){return r.R.videoMixinAssocs(e,t.flightNamespace)}))}},80053:(e,t,n)=>{n.d(t,{N:()=>J});var r=n(32735),i=n(2948),a=n(28400),o=n(49935),c=n(93850),s=n(61499),l=n(38165),u=n(89456),d=n(71063),m=n(80128),p=n(35429),f=n(4594),v=n(16714),h=n(12754),y=n(22902),g=n(65332),b=n(9907),A=n(59598),I=n(31908),P=n(26492),E=n(22103),V=n(84459),C=n(87851),S=n(11256),w=n(47938),T=n(4171),O=n(78166),x=n(99742),L=n(14070),M=n(97291),R=n(86702),j=n(22490),k=n(29978),N=n(15731),U=n(75861),F=n(28389),G=n(31887),q=n(83345),_=n(75100),D=n(51365),W=n(10671),B=n(10741),H="shared.playClip";function K(e){var t=(0,y.T)().hasPermissions,n=(0,W._)({location:W.i.VideoItem});return r.createElement("section",{className:"play-page-section",id:A.K.ClippedFrom,ref:function(t){var n;t&&(null===(n=e.headingRef)||void 0===n?void 0:n.current)&&e.headingRef.current.set(A.K.ClippedFrom,t)}},r.createElement("h2",{className:"h4 mb-0"},r.createElement(q.x,{namespace:H,phrase:"clippedFrom"})),r.createElement(D.M.Provider,{value:n},r.createElement(_.E4,{videos:[e.originalVideo],getVideoAppLink:function(t,n){var r;return j.W.getAppLink(t,Object.assign(Object.assign({},n),{context:e.queryParams.context,contextId:e.queryParams.contextId,playNext:e.queryParams.playNext,shareId:e.shareId,moviesAndTv:e.queryParams.mtv,includeContext:null===(r=e.currentUser)||void 0===r?void 0:r.isAuthenticated}))},hasPermissions:t,presentationAudiences:e.audiences,getPreviewQuestionsAppLink:function(e){return B.j.getPreviewQuestionsAppLink(e)},commonVideoProps:e.commonVideoProps})))}const Q={main:"ULvZW",expandedToc:"W3k9M",theatreMode:"KOUGv",theatreModeContent:"fWNAc",theatreModePlayPageContainer:"RJ5nP",theatreModeLeftContent:"dllgG"};function Y(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){return function(r){return n?{application:M.O.VIDEOS,action:L.e.Videos.PREVIEW_PDF,args:[r.id],params:{videoId:e,shareId:t}}:{application:M.O.SIGN_UP,action:L.e.SignUp.SIGN_UP}}};function J(e){var t,n,q,_,D,W,B,H,J,Z,z=(0,p.g)(),X=(0,y.T)().hasPermissions,ee=I.M.getCanBeConsumed(e.clip).canConsume,te=e.hasTheatreMode&&"theatre"===z.mode,ne=(0,F.V)(e.hasTheatreMode,te),re=(0,N.Q)(e.tableOfContentsId,e.hasTheatreMode,te),ie=re.tableOfContentsActiveId,ae=re.setTableOfContentsActiveId,oe=re.controlledId,ce=re.setControlledId,se=re.tableOfContentsExpanded,le=re.onToggleTableOfContents,ue=(0,s.Wp)(e.clip)&&e.featureAccess.canViewGlance,de=(0,U.i)(ue),me=de.headingRef,pe=de.headingElements,fe=pe.map((function(t){var n;return{id:t.id,name:G.d.getSectionHeading(t.id,{clips:e.clips,interactives:e.interactives,resources:null===(n=e.clip.resources)||void 0===n?void 0:n.data,isPlayClipPage:!0})}}));(0,g.D)({setActiveId:ae,headingElements:pe,controlledId:oe,setControlledId:ce}),(0,b.P)(pe,oe);var ve=I.M.isVideoTypeArchived(e.clip),he=X(v.C.StudentExperience),ye=r.useRef(!1);function ge(){var e,t,n,r;ye.current=!(null===(t=null===(e=null==z?void 0:z.playerRef)||void 0===e?void 0:e.current)||void 0===t?void 0:t.isPaused()),null===(r=null===(n=null==z?void 0:z.playerRef)||void 0===n?void 0:n.current)||void 0===r||r.pause()}function be(){var e,t;ye.current&&(null===(t=null===(e=null==z?void 0:z.playerRef)||void 0===e?void 0:e.current)||void 0===t||t.play())}function Ae(){var t,n;return!(!e.originalVideo||!(null===(t=e.clip._canBeConsumed)||void 0===t?void 0:t.value)||!(null===(n=e.currentUser)||void 0===n?void 0:n.isAuthenticated)||!e.hasProduct(h.x.Primary)||he)}var Ie,Pe,Ee="picture-in-picture"===z.mode||e.featureAccess.canViewPublicLayout,Ve=null!==(n=null===(t=e.clips)||void 0===t?void 0:t.filter((function(t){return t.id.toString()!==e.clip.id.toString()})))&&void 0!==n?n:[],Ce={hasTheatreMode:e.hasTheatreMode,shouldShowSideTableOfContents:e.shouldShowSideTableOfContents,tableOfContentsExpanded:se,theatreMode:te},Se=(0,k.l)(Ce),we=(0,k.D)(Ce),Te=(Ie=(0,i.D)(R.y.PLAY_PAGE_CONTAINER_CLASS_NAME),Pe=2,function(e){if(Array.isArray(e))return e}(Ie)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,a,o,c=[],s=!0,l=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=a.call(n)).done)&&(c.push(r.value),c.length!==t);s=!0);}catch(e){l=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return c}}(Ie,Pe)||function(e,t){if(e){if("string"==typeof e)return Y(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)?Y(e,t):void 0}}(Ie,Pe)||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.")}())[1];return r.useEffect((function(){Te(te?Q.theatreModePlayPageContainer:"")}),[te]),r.useEffect((function(){return function(){return Te("")}}),[]),r.createElement("div",{className:"px-4 play-page-sections-container ".concat(e.shouldShowSideTableOfContents?"row g-0":"")},r.createElement("main",{className:"".concat(Q.main," ").concat(Se)},!!(null===(q=e.breadcrumbs)||void 0===q?void 0:q.length)&&r.createElement("div",{className:"mb-2"},r.createElement(o.Oo,{breadcrumbs:e.breadcrumbs})),r.createElement(w.W,{restrictions:e.clip._restrictions,yearGroups:e.commonVideoProps.yearGroups,objectId:e.clip.id,objectTypeId:f.E.Clip,canManageVideoAccess:e.canManageVideoAccess}),ve&&r.createElement(P.T,{typeId:e.clip.typeId,hasStudentExperience:he}),r.createElement("section",{id:A.K.Video,className:"mb-2 ".concat(d.M.GLOBAL_PLAYER_SELECTOR),ref:function(e){e&&(null==me?void 0:me.current)&&me.current.set(A.K.Video,e)}},ee&&r.createElement(m.r,{key:e.clip.id,objectId:e.clip.id,objectTypeId:e.clip.typeId,shareId:e.shareId,context:null===(_=e.queryParams)||void 0===_?void 0:_.context,contextId:null===(D=e.queryParams)||void 0===D?void 0:D.contextId,moviesAndTv:null===(W=e.queryParams)||void 0===W?void 0:W.mtv,playNext:null===(B=e.queryParams)||void 0===B?void 0:B.playNext,startTime:null!==(J=null===(H=e.queryParams)||void 0===H?void 0:H.t)&&void 0!==J?J:null===(Z=e.queryParams)||void 0===Z?void 0:Z.startTime,mode:z.mode||"default",location:"play-page"}),r.createElement("div",{className:Ee?"":"d-none"},r.createElement(T.S,{video:e.clip,type:"pip"}))),r.createElement("div",{className:we},r.createElement("div",{className:ne?"".concat(Q.theatreModeLeftContent):"w-100"},r.createElement(S.v,{media:e.clip,yearGroups:e.commonVideoProps.yearGroups,audiences:e.audiences,originalVideoAppLink:Ae()?{application:M.O.VIDEOS,action:L.e.Videos.PLAY_VIDEO,args:[e.originalVideo.id,a.m.slugify(e.originalVideo.name)]}:null,featureAccess:e.featureAccess,shareId:e.shareId,showTitlePadlock:!e.commonVideoProps.hasStudentExperience}),ue?r.createElement(l.j,{video:e.clip,pointsOfInterest:e.pointsOfInterest,setStartTime:function(e){var t;return null===(t=z.playerRef.current)||void 0===t?void 0:t.currentTime(e)},getTagAppLink:function(e){return{application:M.O.SEARCH,action:L.e.Search.HOME,params:{tagOrClassification:e.name}}},suppressInteractivity:e.featureAccess.canViewPublicLayout,canViewGlance:ue}):r.createElement(c.a,{video:e.clip,currentUser:e.currentUser,onLaunchImmersiveReader:ge,onExitImmersiveReader:be,getTagAppLink:function(e){return{application:M.O.SEARCH,action:L.e.Search.HOME,params:{tagOrClassification:e.name}}},headingRef:me,suppressInteractivity:e.featureAccess.canViewPublicLayout}),r.createElement(u.M,{video:e.clip,canViewResources:e.featureAccess.canViewResourceItems,imageCdnUrl:e.commonVideoProps.imageCdnUrl,getAppLink:$(e.clip.id,e.shareId,e.featureAccess.canViewResourceItems),analyticsData:{clipId:e.clip.id,clipName:e.clip.name},resourceThumbnailFallbackUrl:x.W.Fallbacks.RESOURCE_THUMBNAIL,headingRef:me}),r.createElement(V.J,{video:e.clip,interactives:e.interactives,analyticsData:{clipId:e.clip.id,clipName:e.clip.name},canViewInteractives:e.featureAccess.canViewInteractives,headingRef:me,commonVideoProps:e.commonVideoProps}),r.createElement(E.O,{clips:Ve||[],video:e.clip,canViewClips:e.featureAccess.canViewClips,audiences:e.audiences,headingRef:me,analyticsData:{clipId:e.clip.id,clipName:e.clip.name},commonVideoProps:e.commonVideoProps}),ue&&r.createElement(c.a,{video:e.clip,currentUser:e.currentUser,onLaunchImmersiveReader:ge,onExitImmersiveReader:be,getTagAppLink:function(e){return{application:M.O.SEARCH,action:L.e.Search.HOME,params:{tagOrClassification:e.name}}},headingRef:me,suppressInteractivity:e.featureAccess.canViewPublicLayout,showHeading:!0}),!!Ae()&&r.createElement(K,{originalVideo:e.originalVideo,shareId:e.shareId,queryParams:e.queryParams,audiences:e.audiences,headingRef:me,currentUser:e.currentUser,commonVideoProps:e.commonVideoProps}),r.createElement(O.Z,{currentVideo:e.clip,relatedVideos:e.relatedVideos,currentUser:e.currentUser,audiences:e.audiences,getVideoAppLink:function(t,n){var r;return j.W.getAppLink(t,Object.assign(Object.assign({},n),{context:e.queryParams.context,contextId:e.queryParams.contextId,playNext:e.queryParams.playNext,shareId:e.shareId,moviesAndTv:e.queryParams.mtv,includeContext:null===(r=e.currentUser)||void 0===r?void 0:r.isAuthenticated}))},moviesAndTv:e.queryParams.mtv,commonVideoProps:e.commonVideoProps})),te&&r.createElement(C.h,{isExpanded:se,setIsExpanded:le,toggleTheatreMode:null,items:fe,activeId:ie,setControlledId:ce,analyticsData:{videoId:e.clip.id,videoName:e.clip.name},showInSide:e.shouldShowSideTableOfContents,isTheatreMode:!0,hasTranscription:e.hasTheatreMode}))),!te&&r.createElement(C.h,{isExpanded:se,setIsExpanded:le,toggleTheatreMode:e.hasTheatreMode?function(e){var t,n,r;null===(r=null===(n=null===(t=z.playerRef)||void 0===t?void 0:t.current)||void 0===n?void 0:n.toggleTheatreMode)||void 0===r||r.call(n,e)}:null,items:fe,activeId:ie,setControlledId:ce,analyticsData:{videoId:e.clip.id,videoName:e.clip.name},showInSide:e.shouldShowSideTableOfContents,isTheatreMode:!1,hasTranscription:e.hasTheatreMode}))}}}]);
|
|
2
|
-
//# sourceMappingURL=3677-20958f59d3-lite.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/3677-20958f59d3-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/libs/shared/src/hooks/useBreadcrumbs.ts","file:///app/packages/projects/lite/src/shared/hooks/useCommonVideoProps.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/hooks/useVideoMixin.ts","file:///app/packages/projects/lite/src/shared/views/play-clip/components/clipped-from/ClippedFrom.tsx","file:///app/packages/projects/lite/src/shared/views/play-clip/components/play-clip/play-clip.scss","file:///app/packages/projects/lite/src/shared/views/play-clip/components/play-clip/PlayClip.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst CHUNK_SIZE = 50;\n\nexport interface UseBatchFetchResult<T extends BaseObject> {\n itemsArr: T[];\n items: { [key: string]: T} | null;\n isFetching: boolean;\n}\n\n/**\n * Used to fetch multiple items by id with Flight. Will fetch 25 items at a time firing off multiple\n * requests if there are more than 25 items.\n * This will return items as null until we have all our items. Items will be returned as an object with\n * their ids as they key for easy mapping\n * \n * @param itemIds \n * @param getRequest \n */\nexport function useBatchFetch<T extends BaseObject>(\n itemIds: string[],\n getRequest: (ids: string[]) => Flight.Request\n): UseBatchFetchResult<T> {\n const chunks = ArrayHelper.chunk<string>(itemIds, CHUNK_SIZE);\n\n const requests = chunks.map(chunk => getRequest(ArrayHelper.uniq(chunk)));\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\n\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce((acc, item) => ({ ...acc, [item.id]: item }), {})\n : null;\n\n return {\n itemsArr,\n items,\n isFetching: responses.isFetching\n };\n}\n\n/**\n * When you need the useBatchFetch() behavior, but your list of objects to hydrate\n * will grow, such as on a scrolling page. useGrowingBatchFetch() will use local state\n * to determine what we've already built a request for and what items are new\n * as to not re-fetch items - Sha\n */\nexport function useGrowingBatchFetch<T>(\n objs: T[],\n getRequest: (items: T[]) => Flight.Request,\n _getKey?: (obj: T) => string\n) {\n const getKey = _getKey || ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const fetchedItems = React.useRef<Set<string>>(new Set<string>());\n\n const [ requests, setRequests ] = React.useState<Flight.Request[]>([]);\n\n React.useEffect(() => {\n if (!objs?.length)\n return;\n\n const unfetchedItems: T[] = [];\n \n objs.forEach(obj => {\n const key = getKey(obj);\n\n if (fetchedItems.current.has(key))\n return;\n\n unfetchedItems.push(obj);\n fetchedItems.current.add(key);\n });\n \n if (!unfetchedItems.length)\n return;\n\n setRequests(r => ([ ...r, ...ArrayHelper.chunk<T>(unfetchedItems, CHUNK_SIZE).map(getRequest) ]));\n }, [objs?.length]);\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\n\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce((acc, item) => ({ ...acc, [getKey(item)]: item }), {})\n : null;\n\n return {\n hasFirstRequestCompleted: !!responses.responses?.[0]?.hasCompleted,\n itemsArr,\n items,\n isFetching: responses.isFetching\n };\n}","import React from 'react';\n\nimport { Breadcrumb } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { BreadcrumbService } from 'libs/shared/services/BreadcrumbService';\n\nexport function useBreadcrumbs(current: Breadcrumb): Breadcrumb[] {\n const [ match, useBuilder ] = React.useMemo(() => BreadcrumbService.getBuilder(), []);\n\n const breadcrumbs = useBuilder(match);\n\n if (!breadcrumbs || !current)\n return breadcrumbs;\n\n return [ ...breadcrumbs, { ...current, active: true }];\n}\n\n","import { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config, CurrentUser, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nimport { usePluginHelper } from './use-plugin-helper/usePluginHelper';\nimport { useLiteFavourites } from './useLiteFavourites';\n\ninterface UseCommonVideoPropsResult {\n hasCommonVideoPropsCompleted: boolean;\n commonVideoProps: CommonVideoProps;\n}\n\ninterface UseCommonVideoPropsOptions {\n locationContext: LocationContext,\n mtv?: boolean;\n flightNamespace?: string;\n sharedPlaylist?: boolean;\n}\n\nexport function useCommonVideoProps(options: UseCommonVideoPropsOptions): UseCommonVideoPropsResult {\n const { locationContext, mtv, flightNamespace, sharedPlaylist } = options || {};\n\n const { isPlugin } = usePluginHelper();\n const { setFavourite, canFavourite } = useLiteFavourites(locationContext, flightNamespace);\n const { hasTopicDirectories, isLoadingSettings } = useSettings(null);\n const { hasPermissions, isLoaded: hasLoadedPermissions } = usePermissions();\n const hasStudentExperience = hasPermissions(PermissionName.StudentExperience);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n function getSubTextAppLink(video: VideoTypes): Core.AppLink {\n if (!('series' in video))\n return null;\n\n /**\n * We do not allow navigating to series on shared playlists when the user is not signed in\n * because most series are customer created and will be empty for public users\n * \n * We do not have to do this for shared series, because all the series links are self referencing\n * - Sha\n */\n if (sharedPlaylist && !currentUser.data?.isAuthenticated)\n return null;\n \n return SeriesAppLinkHelper.getSeriesAppLink(video.series, { mtv });\n }\n\n const hasCommonVideoPropsCompleted = (\n !isLoadingSettings &&\n hasLoadedPermissions &&\n config.hasCompleted &&\n currentUser.hasCompleted &&\n (!currentUser.data?.isAuthenticated || yearGroups.hasCompleted)\n );\n\n return {\n hasCommonVideoPropsCompleted,\n commonVideoProps: {\n subTextType: 'series',\n getSubTextAppLink,\n isPlugin,\n canFavourite,\n setFavourite,\n imageCdnUrl: config.data?.imageCdnUrl,\n yearGroups: yearGroups.data,\n getClassroomGuideAppLink: VideoAppLinkHelper.getClassroomGuideAppLink,\n getInteractiveGuidanceAppLink: VideoAppLinkHelper.getInteractiveGuidanceAppLink,\n getResourceGuidanceAppLink: VideoAppLinkHelper.getResourceGuidanceAppLink,\n showNewVideoIndicator: hasTopicDirectories,\n companyLogoFallbackUrl: null,\n hasStudentExperience\n }\n };\n}","import { Flight } from 'libs/common/react/index';\n\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\nimport { usePresentation } from 'shared/hooks/usePresentation';\n\nexport const usePresentationAudiences = () => {\n const { activePresentation, getFallbackPresentation } = usePresentation({ redirectOnError: true });\n\n const presentation = activePresentation || getFallbackPresentation();\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n !!presentation &&\n AudienceRequests.presentationAudiences(presentation.id)\n );\n\n return audiences;\n};","import { Flight } from 'libs/common/react/index';\n\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { CurrentUser } from 'libs/shared/interfaces';\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 canViewTranscript: boolean;\n}\n\nexport function useVideoFeatureAccess(videoId?: string) {\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n const { hasProduct } = useProducts();\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const { hasPlayPageTranscript } = useSettings(null);\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 function shouldShowTranscript(videoId: string): boolean {\n if (currentUser.data?.isAuthenticated)\n return hasPlayPageTranscript;\n\n if (!videoId)\n return false;\n\n return HardCoded.PublicTranscriptVideoIds.includes(videoId);\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 canViewTranscript: shouldShowTranscript(videoId)\n };\n}","import { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useGrowingBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { Clip, ClipCollection, Video, VideoCollection } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\ntype Types = Video[] | VideoCollection | Clip[] | ClipCollection;\n\nfunction getValidObjects(objects: Types): (Video | Clip)[] {\n if (!objects)\n return [];\n\n if (Array.isArray(objects))\n return objects.filter(o => !!o && (VideoHelper.isVideo(o) || VideoHelper.isClip(o)));\n\n if ('data' in objects)\n return objects.data.filter(o => !!o && (VideoHelper.isVideo(o) || VideoHelper.isClip(o)));\n\n return [];\n}\n\ninterface VideoMixinOptions {\n /**\n * If the videos that are having new data mixed into are sitting on an explicit Flight namespace,\n * providing that namespace here is required\n */\n flightNamespace?: string;\n}\n\nexport function useVideoMixin(objects: Types, options: VideoMixinOptions = {}): void {\n const videoIds = getValidObjects(objects).map(v => v.id);\n\n useGrowingBatchFetch(videoIds, ids => VideoRequests.videoMixinAssocs(ids, options.flightNamespace));\n}","import React from 'react';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { CurrentUser, PresentationAudience, VideoTypes } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\n\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { InteractiveHelpers } from 'shared/utils/InteractiveHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nconst namespace = 'shared.playClip';\n\ninterface ClippedFromProps {\n originalVideo: VideoTypes;\n queryParams: PlayViewQueryParams;\n audiences: PresentationAudience[];\n shareId?: string;\n headingRef: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n currentUser: CurrentUser;\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ClippedFrom(props: ClippedFromProps) {\n const { hasPermissions } = usePermissions();\n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem });\n\n return (\n <section\n className='play-page-section'\n id={PlayPageAnchor.ClippedFrom}\n ref={el => {\n (el && props.headingRef?.current) && props.headingRef.current.set(PlayPageAnchor.ClippedFrom, el);\n }}\n >\n <h2 className='h4 mb-0'><Text namespace={namespace} phrase='clippedFrom' /></h2>\n <VideoActionsContext.Provider value={videoActions}>\n <VideoList\n videos={[props.originalVideo]}\n getVideoAppLink={(v, opts) => VideoAppLinkHelper.getAppLink(v, {\n ...opts,\n context: props.queryParams.context,\n contextId: props.queryParams.contextId,\n playNext: props.queryParams.playNext,\n shareId: props.shareId,\n moviesAndTv: props.queryParams.mtv,\n includeContext: props.currentUser?.isAuthenticated\n })}\n hasPermissions={hasPermissions}\n presentationAudiences={props.audiences}\n getPreviewQuestionsAppLink={interactive => InteractiveHelpers.getPreviewQuestionsAppLink(interactive)}\n commonVideoProps={props.commonVideoProps}\n />\n </VideoActionsContext.Provider>\n </section>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"main\":\"ULvZW\",\"expandedToc\":\"W3k9M\",\"theatreMode\":\"KOUGv\",\"theatreModeContent\":\"fWNAc\",\"theatreModePlayPageContainer\":\"RJ5nP\",\"theatreModeLeftContent\":\"dllgG\"};","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { Breadcrumb, Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { VideoDetailsWithScrollbarV2 } from 'libs/shared/components/play-page/details/VideoDetailsV2';\nimport { hasGlanceData } from 'libs/shared/components/play-page/glance/VideoAtAGlanceUtilsV2';\nimport { VideoAtAGlanceV2 } from 'libs/shared/components/play-page/glance/VideoAtAGlanceV2';\nimport { PlayPageResources } from 'libs/shared/components/play-page/resources-widget/PlayPageResources';\nimport { SeoConstants } from 'libs/shared/constants/SeoConstants';\nimport { GlobalPlayerConsumer } from 'libs/shared/context/player-context/components/GlobalPlayerConsumer';\nimport { usePlayerContext } from 'libs/shared/context/player-context/PlayerContext';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { HasProductFunc } from 'libs/shared/hooks/UseProducts';\nimport { useTableOfContentsActiveHeading } from 'libs/shared/hooks/useTableOfContentsActiveHeading';\nimport { useTableOfContentsScroll } from 'libs/shared/hooks/useTableOfContentsScroll';\nimport { Clip, CurrentUser, InteractiveMetadata, Link, PointOfInterest, PresentationAudience, Resource, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ArchivedBanner } from 'shared/components/play-page/ArchivedBanner';\nimport { PlayPageClips } from 'shared/components/play-page/components/play-page-clips/PlayPageClips';\nimport { PlayPageInteractives } from 'shared/components/play-page/components/play-page-interactives/PlayPageInteractives';\nimport { TableOfContentsContainer } from 'shared/components/play-page/components/table-of-contents/TableOfContents';\nimport { PlayPageTitleAndActions } from 'shared/components/play-page/components/title-and-actions/PlayPageTitleAndActions';\nimport { RestrictionBanner } from 'shared/components/play-page/RestrictionBanner';\nimport { PlayerPlaceholder } from 'shared/components/player-placeholder/PlayerPlaceholder';\nimport { RelatedVideos } from 'shared/components/related-videos/RelatedVideos';\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\nimport { RelatedVideosHash } from 'shared/hooks/useGetRelatedVideos';\nimport { VideoFeaturesHash } from 'shared/hooks/useVideoFeatureAccess';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\nimport { getContentClassName, getMainClassName } from 'shared/views/play/components/play-page/PlayPageUtils';\nimport { usePlayPageTableOfContent } from 'shared/views/play/hooks/usePlayPageTableOfContent';\nimport { useSectionHeadings } from 'shared/views/play/hooks/useSectionHeadings';\nimport { useTheatreStyle } from 'shared/views/play/hooks/useTheatreStyle';\nimport { PlayPageUtils } from 'shared/views/play/PlayPageUtil';\nimport { ClippedFrom } from 'shared/views/play-clip/components/clipped-from/ClippedFrom';\n\nimport styles from './play-clip.scss';\n\nconst getResourceAppLink = (videoId: string, shareId: string, canViewResource: boolean) =>\n (resource: Resource | Link) => {\n if (!canViewResource) {\n return {\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n };\n }\n\n return {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PREVIEW_PDF,\n args: [resource.id],\n params: {\n videoId: videoId,\n shareId: shareId\n }\n };\n };\n\n\ninterface PlayClipProps {\n clip: Clip;\n clips: Clip[];\n interactives: InteractiveMetadata[];\n originalVideo: Video;\n currentUser: CurrentUser;\n relatedVideos: RelatedVideosHash;\n queryParams: PlayViewQueryParams;\n hasProduct: HasProductFunc;\n audiences: PresentationAudience[];\n shareId?: string;\n canManageVideoAccess: boolean;\n pointsOfInterest?: PointOfInterest[];\n featureAccess: VideoFeaturesHash;\n tableOfContentsId: string;\n shouldShowSideTableOfContents: boolean;\n hasTopicDirectories: boolean;\n hasTheatreMode: boolean;\n breadcrumbs?: Breadcrumb[];\n commonVideoProps: CommonVideoProps;\n}\n\nexport function PlayClip(props: PlayClipProps): JSX.Element {\n const playerContext = usePlayerContext();\n\n const { hasPermissions } = usePermissions();\n const { canConsume } = VideoHelper.getCanBeConsumed(props.clip);\n \n const theatreMode = props.hasTheatreMode && playerContext.mode === 'theatre';\n const shouldUseTheareModeStyle = useTheatreStyle(props.hasTheatreMode, theatreMode);\n\n function toggleTheatreMode(value: boolean) {\n playerContext.playerRef?.current?.toggleTheatreMode?.(value);\n }\n\n const {\n tableOfContentsActiveId,\n setTableOfContentsActiveId,\n controlledId,\n setControlledId,\n tableOfContentsExpanded,\n onToggleTableOfContents\n } = usePlayPageTableOfContent(props.tableOfContentsId, props.hasTheatreMode, theatreMode);\n\n const hasGlance = hasGlanceData(props.clip) && props.featureAccess.canViewGlance;\n\n const { headingRef, headingElements } = useSectionHeadings(hasGlance);\n const items = headingElements.map(ele => {\n return {\n id: ele.id as PlayPageAnchor,\n name: PlayPageUtils.getSectionHeading(\n ele.id as PlayPageAnchor,\n {\n clips: props.clips,\n interactives: props.interactives,\n resources: props.clip.resources?.data,\n isPlayClipPage: true\n }\n )\n };\n });\n\n useTableOfContentsActiveHeading({\n setActiveId: setTableOfContentsActiveId,\n headingElements,\n controlledId,\n setControlledId\n });\n\n useTableOfContentsScroll(headingElements, controlledId);\n\n const isArchived = VideoHelper.isVideoTypeArchived(props.clip);\n const hasStudentExperience = hasPermissions(PermissionName.StudentExperience);\n /**\n * Need to use a ref because if we use state, onExitImmersiveReader will have a stale\n * reference of the state. This is because the state is changed in onLaunchImmersiveReader\n * which is passed in at the same time as onExitImmersiveReader\n */\n const shouldPlayOnExitImmersiveReader = React.useRef(false);\n\n function onLaunchImmersiveReader(): void {\n shouldPlayOnExitImmersiveReader.current = !playerContext?.playerRef?.current?.isPaused();\n playerContext?.playerRef?.current?.pause();\n }\n\n function onExitImmersiveReader(): void {\n if (!shouldPlayOnExitImmersiveReader.current)\n return;\n\n playerContext?.playerRef?.current?.play();\n }\n\n function canAccessOriginal(): boolean {\n if (!props.originalVideo || !props.clip._canBeConsumed?.value)\n return false;\n\n if (!props.currentUser?.isAuthenticated)\n return false;\n\n if (!props.hasProduct(ProductId.Primary))\n return false;\n\n if (hasStudentExperience)\n return false;\n\n return true;\n }\n\n function getOriginalVideoAppLink(): Core.AppLink {\n if (!canAccessOriginal())\n return null;\n \n return {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ props.originalVideo.id, TextHelper.slugify(props.originalVideo.name) ]\n };\n }\n\n const showPlayerPlaceholder = playerContext.mode === 'picture-in-picture' || props.featureAccess.canViewPublicLayout;\n\n const otherClips = props.clips?.filter(c => c.id.toString() !== props.clip.id.toString()) ?? [];\n\n const calcClassNameProps = {\n hasTheatreMode: props.hasTheatreMode,\n shouldShowSideTableOfContents: props.shouldShowSideTableOfContents,\n tableOfContentsExpanded,\n theatreMode\n };\n const mainClassName = getMainClassName(calcClassNameProps);\n const contentClassName = getContentClassName(calcClassNameProps);\n\n const [ , setContainerClassName ] = useViewModel(ViewModelKeys.PLAY_PAGE_CONTAINER_CLASS_NAME);\n \n React.useEffect(() => {\n if (!theatreMode) {\n setContainerClassName('');\n } else {\n setContainerClassName(styles.theatreModePlayPageContainer);\n }\n }, [theatreMode]);\n\n React.useEffect(() => {\n return () => setContainerClassName('');\n }, []);\n\n return (\n <div className={`px-4 play-page-sections-container ${props.shouldShowSideTableOfContents ? 'row g-0' : ''}`}>\n <main className={`${styles.main} ${mainClassName}`}>\n {!!props.breadcrumbs?.length && (\n <div className='mb-2'>\n <Breadcrumbs breadcrumbs={props.breadcrumbs} />\n </div>\n )}\n\n <RestrictionBanner\n restrictions={props.clip._restrictions}\n yearGroups={props.commonVideoProps.yearGroups}\n objectId={props.clip.id}\n objectTypeId={MasterType.Clip}\n canManageVideoAccess={props.canManageVideoAccess}\n />\n\n {isArchived && (\n <ArchivedBanner\n typeId={props.clip.typeId}\n hasStudentExperience={hasStudentExperience}\n />\n )}\n\n <section\n id={PlayPageAnchor.Video}\n className={`mb-2 ${SeoConstants.GLOBAL_PLAYER_SELECTOR}`}\n ref={el => { (el && headingRef?.current) && headingRef.current.set(PlayPageAnchor.Video, el); }}\n >\n {canConsume && (\n <GlobalPlayerConsumer\n key={props.clip.id}\n objectId={props.clip.id}\n objectTypeId={props.clip.typeId}\n shareId={props.shareId}\n context={props.queryParams?.context}\n contextId={props.queryParams?.contextId}\n moviesAndTv={props.queryParams?.mtv}\n playNext={props.queryParams?.playNext}\n startTime={props.queryParams?.t ?? props.queryParams?.startTime}\n mode={playerContext.mode || 'default'}\n location='play-page'\n />\n )}\n\n <div className={showPlayerPlaceholder ? '' : 'd-none'}>\n <PlayerPlaceholder\n video={props.clip}\n type='pip'\n />\n </div>\n </section>\n\n <div className={contentClassName}>\n <div className={shouldUseTheareModeStyle ? `${styles.theatreModeLeftContent}` : 'w-100'}>\n <PlayPageTitleAndActions\n media={props.clip}\n yearGroups={props.commonVideoProps.yearGroups}\n audiences={props.audiences}\n originalVideoAppLink={getOriginalVideoAppLink()}\n featureAccess={props.featureAccess}\n shareId={props.shareId}\n showTitlePadlock={!props.commonVideoProps.hasStudentExperience}\n />\n\n {/* if no glance render video details here */}\n {hasGlance ? (\n <VideoAtAGlanceV2\n video={props.clip}\n pointsOfInterest={props.pointsOfInterest}\n setStartTime={(time: number) => playerContext.playerRef.current?.currentTime(time)}\n getTagAppLink={tag => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: { tagOrClassification: tag.name }\n })}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n canViewGlance={hasGlance}\n />\n ) : (\n <VideoDetailsWithScrollbarV2\n video={props.clip}\n currentUser={props.currentUser}\n onLaunchImmersiveReader={onLaunchImmersiveReader}\n onExitImmersiveReader={onExitImmersiveReader}\n getTagAppLink={tag => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: { tagOrClassification: tag.name }\n })}\n headingRef={headingRef}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n />\n )}\n\n <PlayPageResources\n video={props.clip}\n canViewResources={props.featureAccess.canViewResourceItems}\n imageCdnUrl={props.commonVideoProps.imageCdnUrl}\n getAppLink={\n getResourceAppLink(props.clip.id, props.shareId, props.featureAccess.canViewResourceItems)\n }\n analyticsData={{ clipId: props.clip.id, clipName: props.clip.name }}\n resourceThumbnailFallbackUrl={ImageUrls.Fallbacks.RESOURCE_THUMBNAIL}\n headingRef={headingRef}\n />\n\n <PlayPageInteractives\n video={props.clip}\n interactives={props.interactives}\n analyticsData={{ clipId: props.clip.id, clipName: props.clip.name }}\n canViewInteractives={props.featureAccess.canViewInteractives}\n headingRef={headingRef}\n commonVideoProps={props.commonVideoProps}\n />\n\n <PlayPageClips\n clips={otherClips || []}\n video={props.clip}\n canViewClips={props.featureAccess.canViewClips}\n audiences={props.audiences}\n headingRef={headingRef}\n analyticsData={{ clipId: props.clip.id, clipName: props.clip.name }}\n commonVideoProps={props.commonVideoProps}\n />\n\n {/* if has glance, render video details here */}\n {hasGlance && (\n <VideoDetailsWithScrollbarV2\n video={props.clip}\n currentUser={props.currentUser}\n onLaunchImmersiveReader={onLaunchImmersiveReader}\n onExitImmersiveReader={onExitImmersiveReader}\n getTagAppLink={tag => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: { tagOrClassification: tag.name }\n })}\n headingRef={headingRef}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n showHeading\n />\n )}\n \n {!!canAccessOriginal() && (\n <ClippedFrom\n originalVideo={props.originalVideo}\n shareId={props.shareId}\n queryParams={props.queryParams}\n audiences={props.audiences}\n headingRef={headingRef}\n currentUser={props.currentUser}\n commonVideoProps={props.commonVideoProps}\n />\n )}\n\n <RelatedVideos\n currentVideo={props.clip}\n relatedVideos={props.relatedVideos}\n currentUser={props.currentUser}\n audiences={props.audiences}\n getVideoAppLink={(v, opts) => VideoAppLinkHelper.getAppLink(v, {\n ...opts,\n context: props.queryParams.context,\n contextId: props.queryParams.contextId,\n playNext: props.queryParams.playNext,\n shareId: props.shareId,\n moviesAndTv: props.queryParams.mtv,\n includeContext: props.currentUser?.isAuthenticated\n })}\n moviesAndTv={props.queryParams.mtv}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n {theatreMode && (\n <TableOfContentsContainer\n isExpanded={tableOfContentsExpanded}\n setIsExpanded={onToggleTableOfContents}\n toggleTheatreMode={ null}\n items={items}\n activeId={tableOfContentsActiveId}\n setControlledId={setControlledId}\n analyticsData={{ videoId: props.clip.id, videoName: props.clip.name }}\n showInSide={props.shouldShowSideTableOfContents}\n isTheatreMode={true}\n hasTranscription={props.hasTheatreMode}\n />\n )}\n </div>\n </main>\n\n {!theatreMode && (\n <TableOfContentsContainer\n isExpanded={tableOfContentsExpanded}\n setIsExpanded={onToggleTableOfContents}\n toggleTheatreMode={props.hasTheatreMode ? toggleTheatreMode : null}\n items={items}\n activeId={tableOfContentsActiveId}\n setControlledId={setControlledId}\n analyticsData={{ videoId: props.clip.id, videoName: props.clip.name }}\n showInSide={props.shouldShowSideTableOfContents}\n isTheatreMode={false}\n hasTranscription={props.hasTheatreMode}\n />\n )}\n </div>\n );\n}\n"],"names":["CHUNK_SIZE","useBatchFetch","itemIds","getRequest","requests","map","chunk","responses","itemsArr","data","items","length","reduce","acc","item","id","isFetching","useGrowingBatchFetch","objs","_getKey","getKey","obj","fetchedItems","Set","setRequests","unfetchedItems","forEach","key","current","has","push","add","r","hasFirstRequestCompleted","hasCompleted","useBreadcrumbs","match","breadcrumbs","useBuilder","active","useCommonVideoProps","options","locationContext","mtv","flightNamespace","sharedPlaylist","isPlugin","u","setFavourite","canFavourite","hasTopicDirectories","isLoadingSettings","hasPermissions","hasLoadedPermissions","isLoaded","hasStudentExperience","config","currentUser","yearGroups","isAuthenticated","customerId","hasCommonVideoPropsCompleted","commonVideoProps","subTextType","getSubTextAppLink","video","series","imageCdnUrl","getClassroomGuideAppLink","getInteractiveGuidanceAppLink","getResourceGuidanceAppLink","showNewVideoIndicator","companyLogoFallbackUrl","usePresentationAudiences","redirectOnError","activePresentation","getFallbackPresentation","presentation","useVideoFeatureAccess","videoId","hasLocalPermissions","hasProduct","hasPlayPageTranscript","hasNP","canViewGlance","canViewResources","canViewInteractives","canViewClips","canViewCurriculumLinks","canUseActions","canViewPublicLayout","canViewResourceItems","canNavigate","canViewTranscript","shouldShowTranscript","useVideoMixin","objects","videoIds","Array","isArray","filter","o","getValidObjects","v","ids","namespace","ClippedFrom","props","usePermissions","videoActions","useVideoActions","location","className","PlayPageAnchor","ref","el","headingRef","set","Text","phrase","VideoActionsContext","value","VideoList","videos","originalVideo","getVideoAppLink","opts","VideoAppLinkHelper","context","queryParams","contextId","playNext","shareId","moviesAndTv","includeContext","presentationAudiences","audiences","getPreviewQuestionsAppLink","interactive","InteractiveHelper","getResourceAppLink","canViewResource","resource","application","action","args","params","PlayClip","playerContext","canConsume","VideoHelper","clip","theatreMode","hasTheatreMode","mode","shouldUseTheareModeStyle","useTheatreStyle","usePlayPageTableOfContent","tableOfContentsId","tableOfContentsActiveId","setTableOfContentsActiveId","controlledId","setControlledId","tableOfContentsExpanded","onToggleTableOfContents","hasGlance","featureAccess","useSectionHeadings","headingElements","ele","name","PlayPageUtil","clips","interactives","resources","isPlayClipPage","useTableOfContentsActiveHeading","setActiveId","useTableOfContentsScroll","isArchived","PermissionName","shouldPlayOnExitImmersiveReader","onLaunchImmersiveReader","playerRef","isPaused","pause","onExitImmersiveReader","play","canAccessOriginal","_canBeConsumed","ProductId","showPlayerPlaceholder","otherClips","c","toString","calcClassNameProps","shouldShowSideTableOfContents","mainClassName","contentClassName","setContainerClassName","Breadcrumbs","RestrictionBanner","restrictions","_restrictions","objectId","objectTypeId","MasterType","canManageVideoAccess","ArchivedBanner","typeId","SeoConstants","GlobalPlayerConsumer","startTime","t","PlayerPlaceholder","type","PlayPageTitleAndActions","media","originalVideoAppLink","TextHelper","showTitlePadlock","VideoAtAGlanceV2","pointsOfInterest","setStartTime","time","currentTime","getTagAppLink","tag","tagOrClassification","suppressInteractivity","PlayPageResources","getAppLink","analyticsData","clipId","clipName","resourceThumbnailFallbackUrl","ImageUrls","PlayPageInteractives","PlayPageClips","showHeading","RelatedVideos","currentVideo","relatedVideos","TableOfContents","isExpanded","setIsExpanded","toggleTheatreMode","activeId","videoName","showInSide","isTheatreMode","hasTranscription"],"sourceRoot":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/3823-e38a508a3c-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/subjects/components/audience-item/audience-item.scss","file:///app/packages/libs/shared/src/apps/subjects/components/audience-item/AudienceItem.tsx","file:///app/packages/libs/shared/src/hooks/UseOnSaveAll.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/audience-item/partial-loading/PartialAudiences.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/preferences/audience-preferences/audience-preferences.scss","file:///app/packages/libs/shared/src/apps/subjects/components/preferences/audience-preferences/AudiencePreferences.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/preferences/audience-preferences/partial-loading/PartialAudiencePreferences.tsx","file:///app/packages/projects/lite/src/apps/settings/views/preferences/audiences/AudiencePreferencesView.tsx"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"disabled\":\"pERi4\",\"disabledHighlighted\":\"AxyWm\",\"badge\":\"KmfP8\"};","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\nimport styles from './audience-item.scss';\n\nconst namespace = 'shared.audienceItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction lowerCaseToTitleCase(str: string): string {\n return str.split(' ').map((s: string) => s.charAt(0).toUpperCase() + s.substring(1)).join(' ');\n}\n\nfunction getColourClass(highlight: boolean, isDisabled: boolean): string {\n if (highlight) return isDisabled ? `${styles.disabledHighlighted} text-light` : 'bg-gray-900 text-light';\n if (isDisabled) return `${styles.disabled} text-secondary`;\n return 'bg-light';\n}\n\ninterface AudienceItemProps {\n audience: PresentationAudience;\n highlight: boolean;\n setAudience?: (audience: PresentationAudience, highlight: boolean) => void;\n isDisabled?: boolean;\n extraClasses?: string;\n}\n\nAudienceItem.defaultProps = {\n extraClasses: ''\n};\n\nexport function AudienceItem(props: AudienceItemProps): React.ReactElement {\n const { audience, highlight, setAudience, isDisabled, extraClasses } = props;\n\n const colourClass = getColourClass(highlight, isDisabled);\n const cursorClass = isDisabled ? 'cursor-default' : 'cursor-pointer';\n const className = `${styles.badge} lh-1 rounded-pill d-inline-block me-1 user-select-none ${cursorClass} ${colourClass} ${extraClasses}`;\n\n const onClick = () => {\n if (isDisabled || !FunctionHelper.isFunction(setAudience))\n return;\n\n setAudience(audience, !highlight);\n };\n\n return (\n <button\n type='button'\n className={className}\n onClick={onClick}\n role='checkbox'\n aria-checked={highlight}\n aria-label={`${getPhrase('ariaFilter')} ${audience.name}`}\n disabled={isDisabled}\n >\n {lowerCaseToTitleCase(audience.name)}\n </button>\n );\n}","import React from 'react';\n\ntype ReturnValue = [\n () => void,\n React.Dispatch<React.SetStateAction<number>>\n];\n\n/**\n * This hook solves a problem where you want to trigger an \"onSuccess\" callback function\n * only after the last of multiple API calls have completed.\n * \n * Example: the user clicks a \"Save\" button, which triggers 2 API calls. You have a callback function\n * that you want to run after both API calls have succeeded. This hook will help you do that of you pass it\n * the callback function and set the counter to 2.\n */\nexport const useOnSaveAll = (onDone: () => void): ReturnValue => {\n const [ counter, setCounter ] = React.useState(1);\n\n function onSave(): void {\n setCounter(val => val - 1);\n }\n\n React.useEffect(() => {\n if (counter > 0)\n return;\n \n onDone();\n }, [counter]);\n\n return [ onSave, setCounter ];\n};","import * as React from 'react';\n\ninterface PartialAudiencesProps {\n count?: number;\n width?: number;\n height?: number;\n align?: 'left' | 'center';\n}\n\nexport function PartialAudiences({ width = 90, height = 35, count = 5, align = 'left' }: PartialAudiencesProps): JSX.Element {\n const justifyClass = align === 'center' ? 'justify-content-center' : 'justify-content-start';\n\n return (\n <ul className={`d-flex flex-wrap ps-0 m-0 ${justifyClass}`}>\n {Array(count).fill(null).map((item, i) => (\n <li\n key={i}\n className='partial-loading-background mx-1 mb-1 rounded-pill list-unstyled'\n style={{ height: `${height}px`, width: `${width}px` }}\n />\n ))}\n </ul>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"audienceList\":\"gGUpk\",\"imageContainer\":\"mLKC0\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AudienceItem } from 'libs/shared/apps/subjects/components/audience-item';\nimport { OnboardingFooter } from 'libs/shared/apps/subjects/components/preferences/footer/OnboardingFooter';\nimport { OnboardingHelper } from 'libs/shared/apps/subjects/utils/OnboardingHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { ToggleSwitch } from 'libs/shared/components/toggle-switch/ToggleSwitch';\nimport { BulkOnboardingPreferencesState } from 'libs/shared/enums/BulkOnboardingPreferencesState';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useOnSaveAll } from 'libs/shared/hooks/UseOnSaveAll';\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\nimport styles from './audience-preferences.scss';\n\nconst namespace = 'subjects.audiencePreferences';\n\ninterface AudiencePreferencesProps {\n options: PresentationAudience[];\n preselections: PresentationAudience[];\n bulkPreferencesState: BulkOnboardingPreferencesState;\n saveChanges: (\n newAudiences: PresentationAudience[],\n oldAudiences: PresentationAudience[],\n bulkState: BulkOnboardingPreferencesState,\n onSuccess: () => void,\n onError: () => void\n ) => void;\n \n isOnboarding?: boolean;\n backButtonAppLink?: Core.AppLink;\n nextAppLink?: Core.AppLink;\n}\n\nexport function AudiencePreferences(props: AudiencePreferencesProps): JSX.Element {\n const [ selectedAudiences, setSelectedAudiences ] = React.useState<string[]>([]);\n const [ showSpinner, setShowSpinner ] = React.useState<boolean>(false);\n\n const [ bulkPreferencesState, setBulkPreferencesState ] = React.useState<BulkOnboardingPreferencesState>(\n props.bulkPreferencesState\n );\n\n const hasBulkSelectedLevels = OnboardingHelper.hasBulkSelectedLevels(bulkPreferencesState);\n\n const alerts = useAlerts();\n\n /**\n * Set initial selections\n */\n React.useEffect(() => {\n if (!props.preselections?.length) {\n setSelectedAudiences([]);\n return;\n }\n\n const preselectedIds = props.preselections.map(audience => audience.masterId);\n setSelectedAudiences(ArrayHelper.uniq([ ...selectedAudiences, ...preselectedIds ]));\n }, []);\n\n const [ onSuccess, setCounter ] = useOnSaveAll(() => {\n setShowSpinner(false);\n\n if (!props.isOnboarding)\n alerts.success(LanguageService.getPhrase(namespace, 'success'));\n\n if (props.nextAppLink)\n Core.AppLinkHelper.trigger(props.nextAppLink);\n });\n\n function hasChangedAudiences(selectedAudiences: string[]): boolean {\n if (!props.preselections)\n return false;\n\n const preselectedIds = props.preselections.map(p => p.masterId);\n return preselectedIds.sort().toString() !== selectedAudiences.sort().toString();\n }\n\n function hasChangedBulkState(): boolean {\n return props.bulkPreferencesState !== bulkPreferencesState;\n }\n\n function isValid(): boolean {\n if (!selectedAudiences.length && !hasBulkSelectedLevels)\n return false;\n\n const hasChanged = hasChangedBulkState() || hasChangedAudiences(selectedAudiences);\n\n if (!props.isOnboarding && !hasChanged)\n return false;\n\n return true;\n }\n\n function onSave(): void {\n if (!isValid())\n return;\n\n // If they have selected the bulk option, we do not want to clear their preferences or save any changes.\n if (!hasChangedAudiences(selectedAudiences) && !hasChangedBulkState()) {\n if (props.nextAppLink) {\n Core.AppLinkHelper.trigger(props.nextAppLink);\n }\n\n return;\n }\n\n setShowSpinner(true);\n\n const newAudiences = selectedAudiences\n .filter(id => !props.preselections?.find(level => level.masterId === id))\n .map(id => props.options?.find(level => level.masterId === id));\n\n const oldAudiences = props.preselections?.filter(level => !selectedAudiences.includes(level.masterId));\n\n let onSaveCounter = 0;\n\n if (newAudiences?.length)\n onSaveCounter++;\n\n if (oldAudiences?.length)\n onSaveCounter++;\n\n if (hasChangedBulkState())\n onSaveCounter++;\n\n setCounter(onSaveCounter);\n\n props.saveChanges(\n newAudiences,\n oldAudiences,\n bulkPreferencesState,\n onSuccess,\n () => {\n alerts.error(LanguageService.getPhrase(namespace, 'error'));\n setShowSpinner(false);\n }\n );\n }\n\n function onSelectLevel(audience: PresentationAudience): void {\n const newSelections = ArrayHelper.addOrRemoveImmutable(selectedAudiences, audience.masterId);\n setSelectedAudiences(newSelections);\n }\n\n function onToggleSelectAll(): void {\n const newBulkState = OnboardingHelper.getNextBulkState(bulkPreferencesState, 'audiences');\n\n setBulkPreferencesState(newBulkState);\n\n const hasBulkSelectedLevels = OnboardingHelper.hasBulkSelectedLevels(newBulkState);\n\n if (hasBulkSelectedLevels)\n setSelectedAudiences([]);\n }\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <form className='p-3'>\n <div className='position-relative'>\n <ul className={`d-flex flex-wrap justify-content-center mx-auto mb-0 ps-0 py-3 ${styles.audienceList}`}>\n {props.options.map(option => (\n <AudienceItem\n key={option.masterId}\n audience={option}\n highlight={selectedAudiences.includes(option.masterId)}\n setAudience={onSelectLevel}\n isDisabled={hasBulkSelectedLevels}\n />\n ))}\n </ul>\n </div>\n\n <OnboardingFooter justify={props.backButtonAppLink ? 'between' : 'end'}>\n <div>\n {!!props.backButtonAppLink && (\n <AppLink appLink={props.backButtonAppLink} className='btn btn-outline-dark'>\n <Text phrase='back' />\n </AppLink>\n )}\n </div>\n\n <div className='d-flex align-items-center justify-content-end'>\n <div className='d-flex me-3'>\n <p onClick={onToggleSelectAll} className='me-2 mb-0 fw-bold'>\n <Text phrase='allLevels' />\n </p>\n <ToggleSwitch\n onClick={onToggleSelectAll}\n on={hasBulkSelectedLevels}\n hideOutline\n />\n </div>\n\n <SpinnerButton\n variant='dark'\n disabled={!isValid()}\n onClick={onSave}\n showSpinner={showSpinner}\n >\n <Text phrase={props.isOnboarding ? 'next' : 'save'} />\n </SpinnerButton>\n </div>\n </OnboardingFooter>\n </form>\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\n\nimport { PartialAudiences } from 'libs/shared/apps/subjects/components/audience-item';\n\nexport function PartialAudiencePreferences(): JSX.Element {\n return (\n <div className='p-3'>\n <div className='w-100 mx-auto py-3'>\n <PartialAudiences align='center' />\n </div>\n </div>\n );\n}","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { AudiencePreferences } from 'libs/shared/apps/subjects/components/preferences/audience-preferences/AudiencePreferences';\nimport { PartialAudiencePreferences } from 'libs/shared/apps/subjects/components/preferences/audience-preferences/partial-loading/PartialAudiencePreferences';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { BulkOnboardingPreferencesState } from 'libs/shared/enums/BulkOnboardingPreferencesState';\nimport { SettingKind } from 'libs/shared/enums/SettingKind';\nimport { SettingName } from 'libs/shared/enums/SettingName';\nimport { PreferenceRequests } from 'libs/shared/flight-requests/PreferenceRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { CurrentUser, Presentation, PresentationAudience } from 'libs/shared/interfaces';\nimport { AudienceHelper } from 'libs/shared/utils/audience-helper/AudienceHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { PreferencesLayout } from 'apps/settings/components/preferences/PreferencesLayout';\n\nconst namespace = 'settings.audiencePreferences';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function AudiencePreferencesView(): JSX.Element {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n useSetPageMetadata({ title: getPhrase('pageTitle') });\n\n const availablePresentations = Flight.useBasicFetch<Presentation[]>(PreferenceRequests.availablePresentations());\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(PreferenceRequests.allLevelPreferences());\n const preselections = Flight.useBasicFetch<PresentationAudience[]>(\n PreferenceRequests.myLevelPreferences()\n );\n\n const {\n bulkOnboardingPreferencesState, isLoadingSettings, updateSetting\n } = useSettings(LocationContext.PreferencesSettings);\n\n const canAccess = !!audiences.data?.length && AudienceHelper.shouldShowAudiences(audiences.data);\n\n // Redirect away if the user's presentation does not have more than 1 audience\n React.useEffect(() => {\n if (!audiences.hasCompleted)\n return;\n\n if (!canAccess) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.SETTINGS,\n action: Actions.Settings.TOPIC_PREFERENCES\n }, { replace: true });\n }\n }, [audiences.hasCompleted]);\n\n const dispatch = useDispatch();\n\n function onSave(\n newAudiences: PresentationAudience[],\n oldAudiences: PresentationAudience[],\n bulkState: BulkOnboardingPreferencesState,\n onSuccess: () => void,\n onError: () => void\n ): void {\n if (bulkState !== bulkOnboardingPreferencesState) {\n const newSetting = {\n name: SettingName.BulkOnboardingPreferencesState,\n value: bulkState,\n kind: SettingKind.Permanent\n };\n\n updateSetting(\n currentUser.data.id,\n newSetting,\n onSuccess,\n onError\n );\n }\n\n if (newAudiences?.length)\n Flight.fetch(dispatch, PreferenceRequests.followLevels(newAudiences, onSuccess, onError));\n\n if (oldAudiences?.length)\n Flight.fetch(dispatch, PreferenceRequests.unfollowLevels(oldAudiences, onSuccess, onError));\n }\n\n const dataLoaded = (\n !!audiences.hasCompleted &&\n !!preselections.hasCompleted &&\n !isLoadingSettings\n );\n\n return (\n <PreferencesLayout\n availablePresentations={availablePresentations.data}\n audiences={audiences.data}\n >\n <p className='mt-3'><Text namespace={namespace} phrase='info' /></p>\n\n {(dataLoaded && canAccess) ? (\n <AudiencePreferences\n options={audiences.data}\n preselections={preselections.data}\n bulkPreferencesState={bulkOnboardingPreferencesState}\n saveChanges={onSave}\n />\n ) : <PartialAudiencePreferences />}\n </PreferencesLayout>\n );\n}"],"names":["getPhrase","LanguageService","AudienceItem","props","audience","highlight","setAudience","isDisabled","extraClasses","colourClass","getColourClass","cursorClass","className","type","onClick","FunctionHelper","role","name","disabled","split","map","s","charAt","toUpperCase","substring","join","defaultProps","useOnSaveAll","onDone","counter","setCounter","val","PartialAudiences","width","height","count","align","justifyClass","Array","fill","item","i","key","style","namespace","AudiencePreferences","selectedAudiences","setSelectedAudiences","showSpinner","setShowSpinner","bulkPreferencesState","setBulkPreferencesState","hasBulkSelectedLevels","OnboardingHelper","alerts","preselections","length","preselectedIds","masterId","ArrayHelper","isOnboarding","success","nextAppLink","onSuccess","hasChangedAudiences","p","sort","toString","hasChangedBulkState","isValid","hasChanged","onSelectLevel","newSelections","onToggleSelectAll","newBulkState","value","options","option","includes","OnboardingFooter","justify","backButtonAppLink","AppLink","appLink","Text","phrase","ToggleSwitch","on","hideOutline","SpinnerButton","variant","newAudiences","filter","id","find","level","oldAudiences","onSaveCounter","saveChanges","error","PartialAudiencePreferences","AudiencePreferencesView","currentUser","UserRequests","useSetPageMetadata","title","availablePresentations","PreferenceRequests","audiences","useSettings","bulkOnboardingPreferencesState","isLoadingSettings","updateSetting","canAccess","data","AudienceHelper","hasCompleted","application","action","replace","dispatch","dataLoaded","PreferencesLayout","bulkState","onError","newSetting","SettingName","kind","SettingKind"],"sourceRoot":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3915],{94644:(e,t,n)=>{n.d(t,{r:()=>u});var i=n(50242),r=n(81886),a=n(67058),o=n(14553),s=n(49267),l=n(49075),c={notFound:a.d,forbidden:{rating:o.q,yearLevel:o.q,region:s.a,privacy:o.q},badRequest:l._,internalServerError:l._};function u(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var a;a="number"==typeof e?e:e.status;var o=Object.assign(Object.assign({},c),t);a&&r.Q.Ry.isStatusCodeError(a)&&(a!==i.o.InternalServer?a!==i.o.NotFound?a!==i.o.Forbidden?n.badRequest||r.Q.Ry.throw(new o.badRequest):n.forbidden||r.Q.Ry.throw(new o.forbidden.privacy):n.notFound||r.Q.Ry.throw(new o.notFound):n.internalServerError||r.Q.Ry.throw(new l._))}}},60115:(e,t,n)=>{n.d(t,{K:()=>c});var i=n(32735),r=n(50242),a=n(91967),o=400,s=n(45719);function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=Array(t);n<t;n++)i[n]=e[n];return i}function c(e,t,n,c,u,d){var v,m,p,h,f=(v=(0,i.useState)(0),m=2,function(e){if(Array.isArray(e))return e}(v)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var i,r,a,o,s=[],l=!0,c=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(i=a.call(n)).done)&&(s.push(i.value),s.length!==t);l=!0);}catch(e){c=!0,r=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw r}}return s}}(v,m)||function(e,t){if(e){if("string"==typeof e)return l(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)?l(e,t):void 0}}(v,m)||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.")}()),g=f[0],C=f[1],b=t,V=(0,s.P)((function(t){if(!e)return null;var n=e(t);return n?n.key:null}),c,u);return p={fetchNextPage:function(){if(t&&e&&V)return C((function(e){return e+1})),b(V.nextCursor)},hasMore:!!(null==V?void 0:V.nextCursor),isFetching:null==V?void 0:V.isFetching,scrollContainer:d},h=function(){if(!p.isFetching){if(p.scrollContainer){var e=p.scrollContainer;if(e.getBoundingClientRect().height+e.scrollTop<e.scrollHeight-o)return}else if(window.innerHeight+document.documentElement.scrollTop<document.documentElement.scrollHeight-o)return;p.fetchNextPage()}},(0,i.useEffect)((function(){var e=a.q.throttle(h,200),t=p.scrollContainer||window;return p.hasMore&&t.addEventListener("scroll",e),function(){return t.removeEventListener("scroll",e)}}),[p.hasMore,p.fetchNextPage,p.scrollContainer]),(0,i.useEffect)((function(){V&&V.shouldInitialFetch&&t&&(b(),C((function(e){return e+1})))}),[null==V?void 0:V.shouldInitialFetch,t]),(0,i.useEffect)((function(){var e,t;if((null==V?void 0:V.statusCode)&&a.q.isFunction(n)){var i=+(null===(t=null===(e=V.statusCode)||void 0===e?void 0:e.toString())||void 0===t?void 0:t.substr(0,1));i!==r.k.ClientError&&i!==r.k.ServerError||n(g,V.statusCode)}}),[null==V?void 0:V.statusCode]),{items:null==V?void 0:V.items,hasMore:!!(null==V?void 0:V.nextCursor),nextCursor:null==V?void 0:V.nextCursor,isFetching:null==V?void 0:V.isFetching,totalItems:null==V?void 0:V.totalItems,hasFirstPageCompleted:null==V?void 0:V.hasFirstPageCompleted}}},58321:(e,t,n)=>{n.d(t,{U:()=>p});var i=n(20354),r=n(16714),a=n(39151),o=n(1666),s=n(31949),l=n(22902),c=n(37802),u=n(22490),d=n(82431),v=n(46390),m=n(27638);function p(e){var t,n,p,h=e||{},f=h.locationContext,g=h.mtv,C=h.flightNamespace,b=h.sharedPlaylist,V=(0,v.G)().isPlugin,w=(0,m.u)(f,C),y=w.setFavourite,E=w.canFavourite,I=(0,c.r)(null),P=I.hasTopicDirectories,F=I.isLoadingSettings,A=(0,l.T)(),L=A.hasPermissions,k=A.isLoaded,x=L(r.C.StudentExperience),O=i.a.useBasicFetch(a.L.config()),S=i.a.useBasicFetch(s.N.currentUser()),N=i.a.useBasicFetch((null===(t=S.data)||void 0===t?void 0:t.isAuthenticated)&&o.h.yearGroups(S.data.customerId));return{hasCommonVideoPropsCompleted:!F&&k&&O.hasCompleted&&S.hasCompleted&&(!(null===(n=S.data)||void 0===n?void 0:n.isAuthenticated)||N.hasCompleted),commonVideoProps:{subTextType:"series",getSubTextAppLink:function(e){var t;return"series"in e?b&&!(null===(t=S.data)||void 0===t?void 0:t.isAuthenticated)?null:d.j.getSeriesAppLink(e.series,{mtv:g}):null},isPlugin:V,canFavourite:E,setFavourite:y,imageCdnUrl:null===(p=O.data)||void 0===p?void 0:p.imageCdnUrl,yearGroups:N.data,getClassroomGuideAppLink:u.W.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:u.W.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:u.W.getResourceGuidanceAppLink,showNewVideoIndicator:P,companyLogoFallbackUrl:null,hasStudentExperience:x}}}},44110:(e,t,n)=>{n.d(t,{i:()=>o});var i=n(20354),r=n(89454),a=n(86698),o=function(){var e=(0,a.y)({redirectOnError:!0}),t=e.activePresentation,n=e.getFallbackPresentation,o=t||n();return i.a.useBasicFetch(!!o&&r.O.presentationAudiences(o.id))}},35014:(e,t,n)=>{n.d(t,{I:()=>v});var i=n(20354),r=n(55171),a=n(16714),o=n(12754),s=n(31949),l=n(22902),c=n(15311),u=n(37802),d=n(11387);function v(e){var t=(0,l.T)(),n=t.hasPermissions,v=t.hasLocalPermissions,m=(0,c.r)().hasProduct,p=i.a.useBasicFetch(s.N.currentUser()),h=(0,u.r)(null).hasPlayPageTranscript,f=m(o.x.Primary);return{canViewGlance:n(a.C.ViewVideoGlance),canViewResources:!0,canViewInteractives:f&&n(a.C.ViewVideoInteractives),canViewClips:f&&n(a.C.ViewVideoClips),canViewCurriculumLinks:n(a.C.ViewCurriculums),canUseActions:v(a.E.UseVideoActions),canViewPublicLayout:!v(a.E.WatchVideos)&&d.C.hasRegionPrefix(),canViewResourceItems:v(a.E.ViewVideoResourceItems),canNavigate:f,canViewTranscript:function(e){var t;return(null===(t=p.data)||void 0===t?void 0:t.isAuthenticated)?h:!!e&&r.e.PublicTranscriptVideoIds.includes(e)}(e)}}},33915:(e,t,n)=>{n.r(t),n.d(t,{VideoInteractivesView:()=>T});var i=n(32735),r=n(81886),a=n(23481),o=n(20354),s=n(28400),l=n(65858),c=n(49935),u=n(87801),d=n(75100),v=n(51365),m=n(183),p=n(94644),h=n(20768),f=n(31949),g=n(1575),C=n(69883),b=n(60115),V=n(22902),w=n(79612),y=n(14070),E=n(97291),I=n(10671),P=n(58321),F=n(44110),A=n(35014),L=n(10741),k=n(22490),x=n(9212),O=n(98620),S="shared.videoMedia",N=a.T.encloseNamespace(S);function T(e){var t,n,T,R,j=e.videoId,G=o.a.useGetFetch(),_=(0,C.Z)(),U=(0,P.U)({locationContext:l.LZ.VideoThumbnail}),M=U.commonVideoProps,Q=U.hasCommonVideoPropsCompleted,q=(0,I._)({location:I.i.VideoItem}),B=(0,A.I)(),H=(0,F.i)(),W=(0,V.T)().hasPermissions,D=o.a.useBasicFetch(f.N.currentUser()),Y=o.a.useBasicFetch(g.R.video(j));function K(e){return h.b.videoInteractives(j,null,e)}function Z(e){return G(K(e))}(0,w.M)({title:Y.data?N("videoInteractivesViewPageTitle",{video:null===(t=Y.data)||void 0===t?void 0:t.name}):""});var $=(0,b.K)(!!B.canViewInteractives&&K,Z,(function(e,t){if(1===e)return(0,p.r)(t);_.error(a.T.getPhrase(S,"errorInteractives"))})),z=$.items,J=$.hasMore,X=$.isFetching,ee=N("interactivesHeading"),te=[{name:null===(n=Y.data)||void 0===n?void 0:n.name,appLink:Object.assign(Object.assign({},O.Y.playVideo),{args:[j,s.m.slugify(null===(T=Y.data)||void 0===T?void 0:T.name)]})},{name:ee,appLink:{application:E.O.VIDEOS,action:y.e.Videos.VIDEO_INTERACTIVES,args:[j,s.m.slugify(null===(R=Y.data)||void 0===R?void 0:R.name)]},active:!0}];return i.useEffect((function(){B.canViewInteractives||function(){var e;r.Q.C$.trigger(Object.assign(Object.assign({},O.Y.playVideo),{args:[j,s.m.slugify(null===(e=Y.data)||void 0===e?void 0:e.name)]}),{replace:!0})}()}),[B.canViewInteractives]),Y.data&&(null==z?void 0:z.length)&&Q?i.createElement(v.M.Provider,{value:q},i.createElement("div",{className:"px-3"},i.createElement("h1",{className:"h2 mb-2"},ee),i.createElement("div",{className:"mb-2"},i.createElement(c.Oo,{breadcrumbs:te})),i.createElement(d.E4,{videos:z,getVideoAppLink:function(t,n){var i;return k.W.getAppLink(t,Object.assign(Object.assign({},n),{context:m.Q.Widget,contextId:e.videoId,includeContext:null===(i=D.data)||void 0===i?void 0:i.isAuthenticated}))},hasPermissions:W,presentationAudiences:H.data,getPreviewQuestionsAppLink:function(e){return L.j.getPreviewQuestionsAppLink(e)},showOwner:!0,commonVideoProps:M}),(J||X)&&i.createElement(u._,{isFetching:X,fetchNext:Z}))):i.createElement(x.l,null)}},98620:(e,t,n)=>{n.d(t,{Y:()=>a});var i=n(14070),r=n(97291),a={playVideo:{application:r.O.VIDEOS,action:i.e.Videos.PLAY_VIDEO},playClip:{application:r.O.CLIPS,action:i.e.Clips.PLAY_CLIP}}},9212:(e,t,n)=>{n.d(t,{l:()=>s});var i=n(32735),r=n(49935),a=n(1860);const o={partialHeading:"okxfx"};function s(){return i.createElement("div",{className:"px-3"},i.createElement("div",{className:"partial-loading-background mb-2 ".concat(o.partialHeading)}),i.createElement("div",{className:"mb-2"},i.createElement(r.b2,null)),i.createElement(a.S,null))}}}]);
|
|
2
|
-
//# sourceMappingURL=3915-a1f15d687a-lite.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/3915-a1f15d687a-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseInfiniteScroll.ts","file:///app/packages/libs/shared/src/hooks/UseInfiniteList.ts","file:///app/packages/projects/lite/src/shared/hooks/useCommonVideoProps.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 { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n internalServerError?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError,\n internalServerError: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.InternalServer) {\n if (!ignoreMap.internalServerError)\n Core.ErrorHelper.throw(new UnspecifiedError());\n return;\n }\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { 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}","import { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config, CurrentUser, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nimport { usePluginHelper } from './use-plugin-helper/usePluginHelper';\nimport { useLiteFavourites } from './useLiteFavourites';\n\ninterface UseCommonVideoPropsResult {\n hasCommonVideoPropsCompleted: boolean;\n commonVideoProps: CommonVideoProps;\n}\n\ninterface UseCommonVideoPropsOptions {\n locationContext: LocationContext,\n mtv?: boolean;\n flightNamespace?: string;\n sharedPlaylist?: boolean;\n}\n\nexport function useCommonVideoProps(options: UseCommonVideoPropsOptions): UseCommonVideoPropsResult {\n const { locationContext, mtv, flightNamespace, sharedPlaylist } = options || {};\n\n const { isPlugin } = usePluginHelper();\n const { setFavourite, canFavourite } = useLiteFavourites(locationContext, flightNamespace);\n const { hasTopicDirectories, isLoadingSettings } = useSettings(null);\n const { hasPermissions, isLoaded: hasLoadedPermissions } = usePermissions();\n const hasStudentExperience = hasPermissions(PermissionName.StudentExperience);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n function getSubTextAppLink(video: VideoTypes): Core.AppLink {\n if (!('series' in video))\n return null;\n\n /**\n * We do not allow navigating to series on shared playlists when the user is not signed in\n * because most series are customer created and will be empty for public users\n * \n * We do not have to do this for shared series, because all the series links are self referencing\n * - Sha\n */\n if (sharedPlaylist && !currentUser.data?.isAuthenticated)\n return null;\n \n return SeriesAppLinkHelper.getSeriesAppLink(video.series, { mtv });\n }\n\n const hasCommonVideoPropsCompleted = (\n !isLoadingSettings &&\n hasLoadedPermissions &&\n config.hasCompleted &&\n currentUser.hasCompleted &&\n (!currentUser.data?.isAuthenticated || yearGroups.hasCompleted)\n );\n\n return {\n hasCommonVideoPropsCompleted,\n commonVideoProps: {\n subTextType: 'series',\n getSubTextAppLink,\n isPlugin,\n canFavourite,\n setFavourite,\n imageCdnUrl: config.data?.imageCdnUrl,\n yearGroups: yearGroups.data,\n getClassroomGuideAppLink: VideoAppLinkHelper.getClassroomGuideAppLink,\n getInteractiveGuidanceAppLink: VideoAppLinkHelper.getInteractiveGuidanceAppLink,\n getResourceGuidanceAppLink: VideoAppLinkHelper.getResourceGuidanceAppLink,\n showNewVideoIndicator: hasTopicDirectories,\n companyLogoFallbackUrl: null,\n hasStudentExperience\n }\n };\n}","import { Flight } from 'libs/common/react/index';\n\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\nimport { usePresentation } from 'shared/hooks/usePresentation';\n\nexport const usePresentationAudiences = () => {\n const { activePresentation, getFallbackPresentation } = usePresentation({ redirectOnError: true });\n\n const presentation = activePresentation || getFallbackPresentation();\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n !!presentation &&\n AudienceRequests.presentationAudiences(presentation.id)\n );\n\n return audiences;\n};","import { Flight } from 'libs/common/react/index';\n\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { CurrentUser } from 'libs/shared/interfaces';\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 canViewTranscript: boolean;\n}\n\nexport function useVideoFeatureAccess(videoId?: string) {\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n const { hasProduct } = useProducts();\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const { hasPlayPageTranscript } = useSettings(null);\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 function shouldShowTranscript(videoId: string): boolean {\n if (currentUser.data?.isAuthenticated)\n return hasPlayPageTranscript;\n\n if (!videoId)\n return false;\n\n return HardCoded.PublicTranscriptVideoIds.includes(videoId);\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 canViewTranscript: shouldShowTranscript(videoId)\n };\n}","import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { 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 { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { RelatedVideosContext } from 'libs/shared/enums/RelatedVideosContext';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\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 { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { CurrentUser, InteractiveMetadata, Video } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { useCommonVideoProps } from 'shared/hooks/useCommonVideoProps';\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\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 fetch = Flight.useGetFetch();\n const alerts = useAlerts();\n\n const {\n commonVideoProps,\n hasCommonVideoPropsCompleted\n } = useCommonVideoProps({ locationContext: LocationContext.VideoThumbnail });\n\n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem });\n const featureAccess = useVideoFeatureAccess();\n const audiences = usePresentationAudiences();\n const { hasPermissions } = usePermissions();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(videoId));\n\n useSetPageMetadata({\n title: video.data ? getPhrase('videoInteractivesViewPageTitle', { video: video.data?.name }) : ''\n });\n\n function getInteractivesRequest(cursor?: string) {\n return InteractiveRequests.videoInteractives(videoId, null, cursor);\n }\n\n function fetchNext(cursor?: string) {\n return fetch(getInteractivesRequest(cursor));\n }\n\n function onError(pageNumber: number, httpStatus: HttpStatus): void {\n if (pageNumber === 1)\n return handleHttpError(httpStatus);\n\n alerts.error(LanguageService.getPhrase(namespace, 'errorInteractives'));\n }\n\n const { items: interactives, hasMore, isFetching } = useInfiniteList<InteractiveMetadata>(\n featureAccess.canViewInteractives ? getInteractivesRequest : false,\n fetchNext,\n onError\n );\n\n const title = getPhrase('interactivesHeading');\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 || !interactives?.length || !hasCommonVideoPropsCompleted)\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={interactives}\n getVideoAppLink={(video, opts) => VideoAppLinkHelper.getAppLink(video, {\n ...opts,\n context: RelatedVideosContext.Widget,\n contextId: props.videoId,\n includeContext: currentUser.data?.isAuthenticated\n })}\n hasPermissions={hasPermissions}\n presentationAudiences={audiences.data}\n getPreviewQuestionsAppLink={interactive => InteractiveHelpers.getPreviewQuestionsAppLink(interactive)}\n showOwner\n commonVideoProps={commonVideoProps}\n />\n {(hasMore || isFetching) && (\n <InfiniteScrollFooter isFetching={isFetching} fetchNext={fetchNext} />\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\n// eslint-disable-next-line rulesdir/require-view-title\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":["defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","internalServerError","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","SCROLL_TOLERANCE","useInfiniteList","getRequest","fetchNext","onError","getItems","getCursor","scrollContainer","options","handleScroll","useState","pagesFetched","setPagesFetched","fetchNextFn","response","cursor","request","key","fetchNextPage","currentVal","nextCursor","hasMore","isFetching","getBoundingClientRect","height","scrollTop","scrollHeight","window","innerHeight","document","documentElement","useEffect","onScroll","FunctionHelper","addEventListener","removeEventListener","shouldInitialFetch","httpStatusClass","toString","substr","HttpStatus","items","totalItems","hasFirstPageCompleted","useCommonVideoProps","locationContext","mtv","flightNamespace","sharedPlaylist","isPlugin","u","setFavourite","canFavourite","hasTopicDirectories","isLoadingSettings","hasPermissions","hasLoadedPermissions","isLoaded","hasStudentExperience","config","currentUser","yearGroups","data","isAuthenticated","customerId","hasCommonVideoPropsCompleted","hasCompleted","commonVideoProps","subTextType","getSubTextAppLink","video","series","imageCdnUrl","getClassroomGuideAppLink","getInteractiveGuidanceAppLink","getResourceGuidanceAppLink","showNewVideoIndicator","companyLogoFallbackUrl","usePresentationAudiences","redirectOnError","activePresentation","getFallbackPresentation","presentation","id","useVideoFeatureAccess","videoId","hasLocalPermissions","hasProduct","hasPlayPageTranscript","hasNP","canViewGlance","canViewResources","canViewInteractives","canViewClips","canViewCurriculumLinks","canUseActions","canViewPublicLayout","canViewResourceItems","canNavigate","canViewTranscript","shouldShowTranscript","namespace","getPhrase","VideoInteractivesView","props","fetch","alerts","videoActions","location","featureAccess","audiences","getInteractivesRequest","title","name","pageNumber","httpStatus","error","interactives","breadcrumbs","appLink","args","application","action","active","replace","redirectToPlaypage","length","value","className","videos","getVideoAppLink","opts","context","contextId","includeContext","presentationAudiences","getPreviewQuestionsAppLink","interactive","showOwner","VideoMediaAppLinks","playVideo","playClip","PartialVideoMediaView","PartialVideoList"],"sourceRoot":""}
|