@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/7150-93a205975c-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/search/components/search-filters/PartialSearchFilters.tsx","file:///app/packages/libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx","file:///app/packages/libs/shared/src/components/rostering/rostering-header/RosteringSettingHeader.tsx","file:///app/packages/libs/shared/src/components/rostering/sync-action-button-group/sync-action-button-group.scss","file:///app/packages/libs/shared/src/components/rostering/sync-action-button-group/SyncActionButtonGroup.tsx","file:///app/packages/libs/shared/src/components/rostering/utils/RosteringHelper.ts","file:///app/packages/libs/shared/src/components/tags/PartialTagItem.tsx","file:///app/packages/libs/shared/src/components/widgets/items/tag-widget-item/TagWidgetItem.tsx","file:///app/packages/libs/shared/src/components/wizard/status/statuses/in-progress/WizardInProgress.tsx","file:///app/packages/libs/shared/src/components/wizard/status/statuses/submitted/WizardSubmitted.tsx","file:///app/packages/libs/shared/src/components/wizard/status/polling/WizardPolling.tsx","file:///app/packages/libs/shared/src/flight-requests/RosteringRequests.ts","file:///app/packages/libs/shared/src/hooks/useBulkCheckboxManager.ts","file:///app/packages/libs/shared/src/hooks/useLockContentWidth.ts","file:///app/packages/projects/lite/src/apps/settings/components/settings-layout/SettingsLayout.tsx","file:///app/packages/libs/shared/src/components/rostering/no-results-empty-state/NoResultsEmptyState.tsx","file:///app/packages/libs/shared/src/components/rostering/partial-loading/partial-sync-jobs-list.scss","file:///app/packages/libs/shared/src/components/rostering/partial-loading/PartialSyncJobsTable.tsx","file:///app/packages/libs/shared/src/components/rostering/partial-loading/PartialSyncJobsList.tsx","file:///app/packages/libs/shared/src/components/bulk-job-accordion/BulkJobsAccordionHelper.ts","file:///app/packages/libs/shared/src/components/rostering/sync-status-badge/sync-status-badge.scss","file:///app/packages/libs/shared/src/components/rostering/sync-status-badge/SyncStatusBadge.tsx","file:///app/packages/libs/shared/src/components/rostering/scheduled-sync-job-item/scheduled-sync-job-item.scss","file:///app/packages/libs/shared/src/components/rostering/scheduled-sync-job-item/ScheduledSyncJobItem.tsx","file:///app/packages/libs/shared/src/components/bulk-job-accordion/bulk-jobs-accordion-item/bulk-jobs-accordion-item.scss","file:///app/packages/libs/shared/src/components/bulk-job-accordion/bulk-jobs-accordion-item/BulkJobsAccordionItem.tsx","file:///app/packages/libs/shared/src/components/bulk-jobs-filters/BulkJobsFilters.tsx","file:///app/packages/libs/shared/src/components/bulk-job-accordion/bulk-jobs-accordion.scss","file:///app/packages/libs/shared/src/components/bulk-job-accordion/BulkJobsAccordion.tsx","file:///app/packages/libs/shared/src/components/rostering/sync-job-polling/SyncJobPolling.tsx","file:///app/packages/libs/shared/src/components/rostering/sync-job-summary/sync-job-summary.scss","file:///app/packages/libs/shared/src/components/rostering/sync-job-summary/SyncJobSummary.tsx","file:///app/packages/libs/shared/src/components/rostering/sync-job-details/SyncJobDetails.tsx","file:///app/packages/libs/shared/src/components/rostering/sync-jobs-accordion/sync-jobs-accordion.scss","file:///app/packages/libs/shared/src/components/rostering/sync-jobs-accordion/SyncJobsAccordion.tsx","file:///app/packages/projects/lite/src/apps/settings/views/rostering/rostering-sync-list/district-rostering-empty-state/DistrictRosteringEmptyState.tsx","file:///app/packages/projects/lite/src/apps/settings/views/rostering/rostering-sync-list/no-sync-jobs-empty-state/NoSyncJobsEmptyState.tsx","file:///app/packages/projects/lite/src/apps/settings/views/rostering/rostering-sync-list/RosteringSyncListView.tsx","file:///app/packages/projects/lite/src/apps/settings/views/rostering/rostering-sync-list/requires-set-up-empty-state/RequiresSetUpEmptyState.tsx","file:///app/packages/projects/lite/src/apps/settings/views/rostering/utils/useSyncRostering.ts","file:///app/packages/libs/shared/src/components/pill-tab-selector/pill-tab-selector.scss","file:///app/node_modules/react-bootstrap/esm/ProgressBar.js"],"sourcesContent":["import * as React from 'react';\n\nimport styles from './search-filters.scss';\n\ninterface PartialSearchFiltersProps {\n count?: number;\n}\n\nexport function PartialSearchFilters({ count = 6 }: PartialSearchFiltersProps): JSX.Element {\n return (\n <div className='d-flex'>\n <div className='d-flex ps-1'>\n {Array(count).fill(null).map((item, index) => (\n <div key={index} className={`${styles.partialButton} partial-loading-background mx-1`} />\n ))}\n </div>\n </div>\n );\n}","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","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\n\nconst namespace = 'rostering.settingHeader';\n\nexport interface RosteringSettingHeaderAppLinks {\n syncJobs: Core.AppLink;\n settings: Core.AppLink;\n}\n\ninterface RosteringSettingHeaderProps {\n appLinks?: RosteringSettingHeaderAppLinks;\n active: keyof RosteringSettingHeaderAppLinks;\n className?: string;\n}\n\nexport function RosteringSettingHeader(props: RosteringSettingHeaderProps): JSX.Element {\n const tabs = [{\n name: LanguageService.getPhrase(namespace, 'syncJobs'),\n appLink: props.appLinks?.syncJobs,\n active: props.active === 'syncJobs'\n \n }, {\n name: LanguageService.getPhrase(namespace, 'settings'),\n appLink: props.appLinks?.settings,\n active: props.active === 'settings'\n \n }];\n\n return (\n <div className={props.className}>\n <PillTabSelector tabs={tabs} />\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"rightButton\":\"GcqRT\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\n\nimport styles from './sync-action-button-group.scss';\n\nconst namespace = 'rostering.syncActionButtonGroup';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SyncActionButtonGroupProps {\n onSyncNow?: () => void;\n onFullSync?: () => void;\n}\n\nexport function SyncActionButtonGroup(props: SyncActionButtonGroupProps): JSX.Element {\n return (\n <div className='btn-group px-2' role='group'>\n <Tooltip title={getPhrase('syncNowTooltip')} spanHack placement='left' spanHackClassName={styles.buttonBorder}>\n <button type='button' className={`btn btn-outline-dark ${styles.leftButton}`} onClick={props?.onSyncNow}>{getPhrase('syncNow')}</button>\n </Tooltip>\n {/* todo hide the dropdown for v1 */}\n {/* <button type='button' className={`btn dropdown-toggle btn-outline-dark ${styles.rightButton}`} data-bs-toggle='dropdown'>\n </button>\n <div className='dropdown-menu'>\n <Tooltip title={getPhrase('fullSyncTooltip')} spanHack placement='left' >\n <div className='dropdown-item cursor-pointer' onClick={props?.onFullSync}>{getPhrase('fullSync')}</div>\n </Tooltip>\n </div> */}\n </div>\n );\n}","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { ScheduleSettingResponse } from 'libs/shared/interfaces';\n\nconst now = new Date();\n\nexport const RosteringHelper = {\n parseUTCToLocal(\n {\n utcHour,\n utcWeekdays,\n utcMinute = 0\n }: {\n utcHour: number,\n utcWeekdays: number[],\n utcMinute: number\n }\n ) {\n const local = utcWeekdays.map(weekday => DateHelper.buildLocalDateFromUTC(weekday, utcHour, utcMinute));\n\n const localWeekdays = local.map(w => w.getDay());\n const localHour = DateHelper.format(ArrayHelper.first(local), 'HH');\n return { hour: +localHour, daysOfWeek: localWeekdays, minute: utcMinute };\n },\n\n // calculating next scheduled job by schedule setting\n getScheduledJobBySetting (setting: ScheduleSettingResponse): Date | null {\n if (!setting || !setting.fullSyncSchedule || !setting.fullSyncSchedule.enabled)\n return null;\n\n const schedule = RosteringHelper.parseUTCToLocal({\n utcHour: setting.fullSyncSchedule.hour,\n utcWeekdays: setting.fullSyncSchedule.daysOfWeek,\n utcMinute: setting.fullSyncSchedule.minute\n });\n const scheduledDate = new Date();\n const weekdayOfToday = now.getDay();\n\n const scheduledWeekday = schedule.daysOfWeek.sort((a, b) => a - b);\n const scheduledToday = schedule.daysOfWeek.includes(weekdayOfToday);\n const hour = schedule.hour;\n const minute = schedule?.minute ?? 0;\n\n if (scheduledToday) {\n scheduledDate.setHours(hour, minute, 0, 0);\n if (now < scheduledDate) {\n return scheduledDate;\n }\n }\n\n const nextScheduledDate = new Date();\n let nextScheduledWeekday = scheduledWeekday.find(d => d > weekdayOfToday);\n if (!nextScheduledWeekday) {\n // cannot find next scheduled date in the current week, must be next week\n nextScheduledWeekday = scheduledWeekday[0];\n }\n // use absolute value of gap to make sure next scheduled date is in the futrue\n const gap = Math.abs(nextScheduledWeekday - weekdayOfToday);\n nextScheduledDate.setDate(now.getDate() + gap);\n nextScheduledDate.setHours(hour, 0, 0, 0);\n return nextScheduledDate;\n }\n};","import React from 'react';\n\nimport styles from './tags.scss';\n\ninterface PartialTagItemProps {\n tagClass?: string;\n}\n\nexport const PartialTagItem = React.memo(function({ tagClass = '' }: PartialTagItemProps): JSX.Element {\n const classNames = `partial-loading-background d-inline-block rounded-pill py-1 px-2 mb-1 me-1 text-nowrap ${tagClass} ${styles.partialTag}`;\n\n return (\n <div className='mt-1'>\n <span className={classNames}> </span>\n </div>\n );\n});","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { FilterOption } from 'libs/shared/apps/search/interfaces';\nimport { TagItem } from 'libs/shared/components/tags/TagItem';\nimport { BaseObject, Tag } from 'libs/shared/interfaces';\n\nexport interface TagWidgetItemProps {\n appLink: Core.AppLink;\n data: Tag;\n selectedItems?: BaseObject[];\n onClick?: (data: Tag | FilterOption) => void;\n}\n\nexport function TagWidgetItem(props: TagWidgetItemProps): JSX.Element {\n const isSelected = props.selectedItems.find(selection => selection.id === props.data.id);\n\n const colorClass = isSelected ? `bg-gray-900 text-white` : 'bg-light';\n\n return (\n <TagItem\n tag={props.data}\n appLink={props.appLink}\n tagClass={`no-decoration ${colorClass} lh-1`}\n onClick={() => props.onClick(props.data)}\n />\n );\n}","import React from 'react';\nimport { ProgressBar } from 'react-bootstrap';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { WizardActionVerb } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'userManager.wizardInProgress';\n\ninterface WizardInProgressProps {\n userType?: UserGroup;\n totalItems: number;\n totalItemsComplete: number;\n actionName: string;\n actionVerb: WizardActionVerb;\n objectType?: MasterType;\n progressVerbPhrase?: string;\n}\n\nexport function WizardInProgress(props: WizardInProgressProps): JSX.Element {\n const percentage = Math.floor(props.totalItemsComplete / props.totalItems * 100) || 0;\n\n function renderProgressText() {\n if (props.objectType === MasterType.User && props.userType) {\n return (\n <Text\n namespace={namespace}\n phrase={props.userType === UserGroup.Learner ? 'progressStudents' : 'progressStaff'}\n options={{ totalComplete: props.totalItemsComplete, total: props.totalItems, smartCount: props.totalItems }}\n />\n );\n }\n\n if (props.objectType === MasterType.Video) {\n return (\n <Text\n namespace={namespace}\n phrase='progressVideos'\n options={{ totalComplete: props.totalItemsComplete, total: props.totalItems, smartCount: props.totalItems }}\n />\n );\n }\n\n return (\n <Text\n namespace={namespace}\n phrase='progressItems'\n options={{ totalComplete: props.totalItemsComplete, total: props.totalItems, smartCount: props.totalItems }}\n />\n );\n }\n\n return (\n <div>\n <div className='d-flex align-items-center mb-2'>\n <h2 className='h5 mb-0'>\n <Text namespace={namespace} phrase='heading' options={{ percentage, actionName: props.actionName }} />\n </h2>\n <SvgContainer svgName={cvSvgLibrary.CheckCircle} />\n </div>\n\n <p>\n <Text namespace={namespace} phrase={`info${props.actionVerb}`} />\n </p>\n\n <p className='mb-1'>\n <span className='text-info'>\n {props.progressVerbPhrase ? (\n <span>{props.progressVerbPhrase}</span>\n ) : (\n <Text namespace={namespace} phrase={`progressVerb${props.actionVerb}`} />\n )}\n </span>\n \n {renderProgressText()}\n </p>\n <ProgressBar variant='info' now={percentage} />\n </div>\n );\n}","import React from 'react';\nimport { ProgressBar } from 'react-bootstrap';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { WizardActionVerb } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'userManager.wizardSubmitted';\n\ninterface WizardSubmittedProps {\n actionName?: string;\n actionVerb: WizardActionVerb;\n}\n\nexport function WizardSubmitted(props: WizardSubmittedProps): JSX.Element {\n return (\n <div>\n <div className='d-flex align-items-center mb-2'>\n <h2 className='h5 mb-0'>\n {props.actionName\n ? <Text namespace={namespace} phrase='heading' options={{ actionName: props.actionName }} />\n : <Text namespace={namespace} phrase='headingGeneric' />\n }\n </h2>\n <SvgContainer svgName={cvSvgLibrary.CheckCircle} />\n </div>\n\n <p>\n <Text namespace={namespace} phrase={`info${props.actionVerb}`} />\n </p>\n\n <p className='mb-1 text-info'>\n <Text namespace={namespace} phrase='preparing' />\n </p>\n <ProgressBar variant='info' now={0} />\n </div>\n );\n}","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { WizardInProgress } from 'libs/shared/components/wizard/status/statuses/in-progress/WizardInProgress';\nimport { WizardSubmitted } from 'libs/shared/components/wizard/status/statuses/submitted/WizardSubmitted';\nimport { BatchJobStatus } from 'libs/shared/enums/BatchJobStatus';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { useNavLock } from 'libs/shared/hooks/useNavLock';\nimport { BatchJobProgress, WizardActionVerb } from 'libs/shared/interfaces';\n\nconst POLLING_INTERVAL = 2000;\nconst MAX_CONSECUTIVE_ERROR_COUNT = 3; // If the polling endpoint errors 3 times in a row, we will cancel\n\nexport type WizardPollJobFn = (onSuccess: (progress: BatchJobProgress) => void, onError: (xhr: Xhr) => void) => void;\n\ninterface WizardPollingProps {\n jobId: string;\n userType?: UserGroup;\n statusCompleteAppLink?: Core.AppLink;\n onStatusCompleted?: () => void;\n pollJob: WizardPollJobFn;\n actionName: string;\n navLockId?: string;\n actionVerb: WizardActionVerb;\n objectType?: MasterType;\n progressVerbPhrase?: string;\n}\n\nexport function WizardPolling(props: WizardPollingProps): JSX.Element {\n const [ progress, setProgress ] = React.useState<BatchJobProgress>(null);\n const [ consecutiveErrorCount, setConsecutiveErrorCount ] = React.useState(0);\n\n const timeoutIdRef = React.useRef<number>(null);\n\n const navLock = useNavLock();\n const dispatch = useDispatch();\n\n // Kick off polling for the running batch job. Polling will be stopped if user navigates away.\n React.useEffect(() => {\n pollJob();\n\n return () => {\n if (!timeoutIdRef.current)\n return;\n\n window.clearTimeout(timeoutIdRef.current);\n };\n }, []);\n\n function pollJob(): void {\n props.pollJob(onPollSuccess, onPollError);\n }\n\n function onPollSuccess(currentProgress: BatchJobProgress): void {\n setProgress(currentProgress);\n\n // Job is considered completed if status matches any of the following values\n const jobHasCompleted = (\n currentProgress.status === BatchJobStatus.Completed ||\n currentProgress.status === BatchJobStatus.CompletedWithError ||\n currentProgress.status === BatchJobStatus.Failed\n );\n\n if (!jobHasCompleted) {\n timeoutIdRef.current = window.setTimeout(pollJob, POLLING_INTERVAL);\n return;\n }\n\n /**\n * When the job progress is 100%, we want to provide 2 seconds for the\n * progress bar animation to complete before navigating to the \"complete\"\n * view. Otherwise it's a little bit jarring.\n */\n window.setTimeout(() => {\n onCompleteJob();\n }, 2000);\n }\n\n function onPollError(xhr: Xhr): void {\n if (consecutiveErrorCount === MAX_CONSECUTIVE_ERROR_COUNT) {\n window.clearTimeout(timeoutIdRef.current);\n if (props.navLockId)\n navLock.unlock(props.navLockId);\n handleHttpError(xhr);\n }\n\n setConsecutiveErrorCount(currentVal => currentVal + 1);\n timeoutIdRef.current = window.setTimeout(pollJob, POLLING_INTERVAL);\n }\n\n function onCompleteJob(): void {\n if (props.navLockId)\n navLock.unlock(props.navLockId);\n\n const params: HashObject = { jobId: props.jobId };\n\n if (props.userType) {\n params.userType = props.userType;\n\n // Clear all user's in flight cache. This way any users updated in bulk actions will have up to date data.\n dispatch({\n type: Flight.Actions.INVALIDATE,\n keys: [ 'school:users', 'user:count', 'search:aggregation', 'search:users' ],\n request: null\n });\n }\n if (props.statusCompleteAppLink) {\n Core.AppLinkHelper.trigger({\n ...props.statusCompleteAppLink,\n params: params\n });\n return;\n }\n\n props.onStatusCompleted?.();\n }\n\n const hasNotStarted = !!(\n !progress ||\n progress.status === BatchJobStatus.Submitted ||\n progress.status === BatchJobStatus.Queued ||\n progress.status === BatchJobStatus.Pending\n );\n\n if (hasNotStarted || progress.totalItems === 0)\n return <WizardSubmitted actionName={props.actionName} actionVerb={props.actionVerb} />;\n\n return (\n <WizardInProgress\n totalItems={progress.totalItems}\n totalItemsComplete={progress.processedItems}\n userType={props.userType}\n objectType={props.objectType}\n actionName={props.actionName}\n actionVerb={props.actionVerb}\n progressVerbPhrase={props.progressVerbPhrase}\n />\n );\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { BulkJobsQueryParams } from 'libs/shared/components/bulk-jobs-filters/BulkJobsFilters';\nimport { BatchJobStatus } from 'libs/shared/enums/BatchJobStatus';\nimport { BatchJobType } from 'libs/shared/enums/BatchJobType';\nimport { BatchJob, ScheduleSettingRequest } from 'libs/shared/interfaces';\nimport { CreateBatchJobRequest } from 'libs/shared/interfaces';\n\nexport const RosteringRequests = {\n getRostering(): Flight.Request {\n return {\n url: `{gateway}/v1/users/me/rostering`,\n key: `rostering`\n };\n },\n\n getSyncList(queryParams: BulkJobsQueryParams): Flight.Request {\n const params: HashObject = {};\n if (queryParams.cursor)\n params.cursor = queryParams.cursor;\n\n if (queryParams.sort) {\n if (queryParams.sort === 'oldest')\n params.order = 'ASC';\n else\n params.order = 'DESC';\n }\n\n if (queryParams.jobStatus) {\n const statuses = [];\n if (queryParams.jobStatus.includes('completed')) {\n statuses.push(...[ BatchJobStatus.Completed, BatchJobStatus.CompletedWithError ]);\n }\n if (queryParams.jobStatus.includes('failed')) {\n statuses.push(BatchJobStatus.Failed);\n }\n if (queryParams.jobStatus.includes('inProgress')) {\n statuses.push(...[\n BatchJobStatus.Submitted,\n BatchJobStatus.Queued,\n BatchJobStatus.Pending,\n BatchJobStatus.InProgress ]);\n }\n params.status = statuses;\n }\n\n params.type = BatchJobType.Rostering;\n\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/batch/jobs', params),\n key: `rostering:sync:${queryParams.cursor}:${queryParams.sort}:${queryParams.jobStatus}`\n };\n },\n\n createJob(\n data: CreateBatchJobRequest,\n success?: (job: BatchJob) => void,\n error?: () => void\n ): Flight.Request {\n return {\n url: '{gateway}/v1/batch/jobs',\n key: 'rostering:sync',\n type: HttpVerbs.POST,\n invalidationKeys: ['rostering:sync'],\n data,\n success,\n error\n };\n },\n\n getJobSummary(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/batch/jobs/${id}/summary`,\n key: `job:summary:${id}`\n };\n },\n\n getSyncScheduleSettings(integrationId: string): Flight.SimulatedRequest {\n return {\n url: `{gateway}/v1/rostering/${integrationId}/schedule`,\n key: `sync-settings:${integrationId}`\n };\n },\n\n updateScheduleSetting(\n data: ScheduleSettingRequest,\n integrationId: string,\n success?: () => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n type: HttpVerbs.PUT,\n url: `{gateway}/v1/rostering/${integrationId}/schedule`,\n key: `update:sync-settings:${data.customerId}:${integrationId}`,\n invalidationKeys: [`sync-settings:${integrationId}`],\n data,\n success,\n error,\n always\n };\n }\n};","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { useForceUpdate } from 'libs/shared/hooks/useForceUpdate';\nimport { usePrevious } from 'libs/shared/hooks/usePrevious';\n\ntype CheckboxItemsState = Map<string, boolean>;\n\nexport interface BulkCheckboxManager {\n onToggleBulk: () => void;\n onToggleItem: (id: string) => void;\n getSelected: () => string[];\n isChecked: (item: string | number | HashObject<string>) => boolean;\n bulkChecked: boolean;\n deselectAll: () => void;\n hasSomeSelections: () => boolean;\n setSelected: (ids: string[]) => void;\n getSelectedCount: () => number;\n reset: () => void;\n getMap: () => Map<string, boolean>;\n}\n\nexport interface BulkCheckboxManagerOptions {\n idField?: string; // For objects like `PresentationAudiences` that don't use `id` as their identifier field\n persistNamespace?: string;\n preselectedIds?: string[];\n initialState?: CheckboxItemsState;\n}\n\n/**\n * @param collection - The collection you are keeping track of with checkboxes\n * @param options - See interface above\n */\nexport const useBulkCheckboxManager = (collection: HashObject[], options: BulkCheckboxManagerOptions = {}) => {\n const { idField = 'id', persistNamespace } = options;\n\n const initial = options.initialState ? options.initialState : new Map<string, boolean>();\n\n const items = React.useRef<CheckboxItemsState>(initial);\n \n const forceUpdate = useForceUpdate();\n\n const prevCollection = usePrevious(collection);\n const prevNamespace = usePrevious(persistNamespace);\n\n /**\n * This hook will clear the state of this hook when a user navigates between pages\n * if a persistNamespace was not provided\n */\n React.useEffect(() => {\n /**\n * If we're being passed initial state, we don't want to clear the state\n */\n if (options.initialState)\n return;\n\n /**\n * If we've been given a persist namespace, we don't want to clear our\n * selections while the namespace stays the same\n */\n if (persistNamespace && prevNamespace === persistNamespace)\n return;\n\n /**\n * Don't reinitialize if the ids of the new and old collection\n * are identical\n */\n const prevIds = prevCollection?.map(i => i[idField]).join();\n const ids = collection?.map(i => i[idField]).join();\n\n if (prevIds === ids)\n return;\n\n reset();\n }, [ prevCollection, prevNamespace, collection, options.initialState ]);\n\n React.useEffect(() => {\n if (!options.preselectedIds?.length)\n return;\n\n setSelected(options.preselectedIds);\n }, []);\n\n function reset(): void {\n items.current.clear();\n forceUpdate();\n }\n\n // When toggled on, all checkbox items will be enabled. Vice versa if toggled off\n function onToggleBulk(): void {\n const setValue = !isBulkChecked();\n\n collection.forEach(item => {\n if (setValue)\n items.current.set(item[idField].toString(), true);\n else\n items.current.delete(item[idField].toString());\n });\n\n forceUpdate();\n }\n\n // Toggles a single item\n function onToggleItem(id: string): void {\n const nextItemState = !items.current.get(id.toString());\n\n if (nextItemState)\n items.current.set(id.toString(), nextItemState);\n else\n items.current.delete(id.toString());\n \n forceUpdate();\n }\n\n // Returns the state of the item passed in\n function isChecked(item: string | number | HashObject<string>): boolean {\n if (typeof item === 'number')\n item = item.toString();\n else if (typeof item !== 'string')\n item = item[idField].toString();\n\n return items.current.get(item);\n }\n\n function getSelected(): string[] {\n return Array.from(items.current.keys());\n }\n\n function deselectAll(): void {\n if (!collection?.length) return;\n\n collection.forEach(item => {\n items.current.delete(item[idField].toString());\n });\n forceUpdate();\n }\n\n // Returns true if at least 1 item is checked\n function hasSomeSelections(): boolean {\n if (!collection?.length)\n return false;\n\n return !!collection.find(item => isChecked(item));\n }\n\n function isBulkChecked(): boolean {\n if (!collection?.length)\n return false;\n\n return collection.every(isChecked);\n }\n\n function setSelected(ids: string[]): void {\n ids.forEach(id => {\n items.current.set(id, true);\n });\n forceUpdate();\n }\n\n function getSelectedCount(): number {\n return items.current.size;\n }\n\n function getMap(): Map<string, boolean> {\n return items.current;\n }\n\n return {\n onToggleBulk,\n onToggleItem,\n getSelected,\n isChecked,\n bulkChecked: isBulkChecked(),\n deselectAll,\n hasSomeSelections,\n setSelected,\n getSelectedCount,\n reset,\n getMap\n };\n};","import React from 'react';\n\nimport { LayoutHelper } from 'libs/shared/utils/LayoutHelper';\n\nexport function useLockContentWidth(): void {\n React.useEffect(() => {\n LayoutHelper.lockContentWidth();\n return () => LayoutHelper.unlockContentWidth();\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}","\nimport React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'rostering.noResults';\n\ninterface NoResultsEmptyStateProps {\n imageCdnUrl: string;\n}\n\nexport function NoResultsEmptyState(props: NoResultsEmptyStateProps): JSX.Element {\n return (\n <EmptyState>\n <EmptyState.Image src={props.imageCdnUrl} />\n <EmptyState.Heading><Text namespace={namespace} phrase='emptyHeading' /></EmptyState.Heading>\n <EmptyState.Info className='w-50 mb-1'><Text namespace={namespace} phrase='emptyInfo' /></EmptyState.Info>\n </EmptyState>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialHeading\":\"MwUCZ\",\"partialJobCount\":\"MUELm\",\"partialCheckbox\":\"dShe9\",\"partialExportButton\":\"VL4Tq\",\"row\":\"z_hGc\",\"checkboxColumn\":\"IacDe\",\"actionColumn\":\"_JoZe\",\"usersColumn\":\"BtHPO\",\"dateColumn\":\"jpr0N\",\"performedByColumn\":\"XP4Lf\",\"seeMoreColumn\":\"A8_Nf\",\"heading\":\"uThGf\",\"action\":\"PFOGb\",\"users\":\"pXZx8\",\"date\":\"VWS_a\",\"performedBy\":\"vZeC9\"};","import React from 'react';\n\nimport styles from './partial-sync-jobs-list.scss';\n\nfunction PartialRow(): JSX.Element {\n return (\n <div className={`d-flex striped-row rounded py-3 ${styles.row}`}>\n <div className={`${styles.checkboxColumn} d-flex justify-content-center`}>\n <div className={`partial-loading-background ${styles.partialCheckbox} ms-0`} />\n </div>\n <div className={`${styles.actionColumn}`}>\n <div className={`partial-loading-background ${styles.action}`} />\n </div>\n <div className={`${styles.usersColumn}`}>\n <div className={`partial-loading-background ${styles.users}`} />\n </div>\n <div className={`${styles.dateColumn}`}>\n <div className={`partial-loading-background ${styles.date}`} />\n </div>\n <div className={`${styles.performedByColumn}`}>\n <div className={`partial-loading-background ${styles.performedBy}`} />\n </div>\n <div className={`${styles.seeMoreColumn}`}>\n \n </div>\n </div>\n );\n}\n\nfunction PartialHeader(): JSX.Element {\n return (\n <div className='d-flex py-2 mb-1'>\n <div className={`${styles.checkboxColumn}`}>\n \n </div>\n <div className={`${styles.actionColumn}`}>\n <div className={`partial-loading-background ${styles.heading}`} />\n </div>\n <div className={`${styles.usersColumn}`}>\n <div className={`partial-loading-background ${styles.heading}`} />\n </div>\n <div className={`${styles.dateColumn}`}>\n <div className={`partial-loading-background ${styles.heading}`} />\n </div>\n <div className={`${styles.performedByColumn}`}>\n <div className={`partial-loading-background ${styles.heading}`} />\n </div>\n <div className={`${styles.seeMoreColumn}`}>\n \n </div>\n </div>\n );\n}\n\nexport function PartialSyncJobsTable(): JSX.Element {\n return (\n <>\n <div className='mb-3 mt-n1'>\n <PartialHeader />\n\n <div className='striped-list no-full-width'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n </>\n );\n}","import React from 'react';\n\nimport { PartialSearchFilters } from 'libs/shared/apps/search/components/search-filters/PartialSearchFilters';\nimport { PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\n\nimport { PartialSyncJobsTable } from './PartialSyncJobsTable';\n\nimport styles from './partial-sync-jobs-list.scss';\n\nexport function PartialSyncJobsList(): JSX.Element {\n return (\n <>\n <div className={`partial-loading-background mb-2 ${styles.partialHeading}`} />\n\n <div className='pb-3'>\n <div className='d-flex justify-content-between'>\n <PartialBreadcrumbs />\n\n <div className={`partial-loading-background ${styles.partialJobCount}`} />\n </div>\n </div>\n\n <div className='d-flex align-items-center pb-2'>\n <div className={`partial-loading-background ${styles.partialCheckbox}`} />\n\n <div className='ms-4 ps-3'>\n <PartialSearchFilters count={3} />\n </div>\n\n <div className={`ms-auto partial-loading-background ${styles.partialExportButton}`} />\n </div>\n\n <PartialSyncJobsTable />\n </>\n );\n}","import { BulkJobsAccordionColumn, BulkJobsAccordionTableSize } from 'libs/shared/components/bulk-job-accordion/BulkJobsAccordion';\n\ntype BulkJobsTableColumn = BulkJobsAccordionColumn['id'] | 'actions';\n\nexport const BulkJobAccordionHelper = {\n getCellStyle(width: number) {\n return { width, flex: `${width} 0 auto` };\n },\n\n getColumnCellWidth(column: BulkJobsTableColumn, size: BulkJobsAccordionTableSize = 'std'): number {\n switch (column) {\n case 'checkboxes':\n return 60;\n case 'status':\n return size === 'std' ? 200 : 100;\n case 'id':\n return size === 'std' ? 120 : 85;\n case 'dateCreated':\n return size === 'std' ? 220 : 180;\n case 'submitterName':\n return size === 'std' ? 200 : 180;\n case 'actions':\n return size === 'std' ? 200 : 80;\n default:\n return size === 'std' ? 200 : 100;\n }\n },\n\n getColumnCellStyle(column: BulkJobsTableColumn, size: BulkJobsAccordionTableSize) {\n return BulkJobAccordionHelper.getCellStyle(BulkJobAccordionHelper.getColumnCellWidth(column, size));\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"complete\":\"nAOdH\",\"failed\":\"xkFpC\",\"inProgress\":\"BjR3y\",\"scheduled\":\"Ux2b9\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { BatchJobStatus } from 'libs/shared/enums/BatchJobStatus';\n\nimport styles from './sync-status-badge.scss';\n\nconst namespace = 'rostering.syncJobsStatusBadge';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SyncStatusBadgeProps {\n status: BatchJobStatus | 'scheduled';\n}\n\nexport function SyncStatusBadge(props: SyncStatusBadgeProps): JSX.Element {\n function getClassName(): string {\n const baseClass = 'rounded-pill px-2 d-inline-flex align-items-center fw-semibold';\n\n switch (props.status) {\n case BatchJobStatus.Completed:\n case BatchJobStatus.CompletedWithError:\n return `${baseClass} ${styles.complete}`;\n case BatchJobStatus.Failed:\n return `${baseClass} ${styles.failed}`;\n case BatchJobStatus.InProgress:\n case BatchJobStatus.Pending:\n case BatchJobStatus.Queued:\n case BatchJobStatus.Submitted:\n return `${baseClass} ${styles.inProgress}`;\n case 'scheduled':\n return `${baseClass} ${styles.scheduled}`;\n }\n }\n\n function getName(): string {\n switch (props.status) {\n case BatchJobStatus.Completed:\n case BatchJobStatus.CompletedWithError:\n return getPhrase('complete');\n case BatchJobStatus.Failed:\n return getPhrase('failed');\n case BatchJobStatus.InProgress:\n case BatchJobStatus.Pending:\n case BatchJobStatus.Queued:\n case BatchJobStatus.Submitted:\n return getPhrase('inProgress');\n case 'scheduled':\n return getPhrase('scheduled');\n }\n }\n\n return (\n <div className={getClassName()}>\n {getName()}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"colored\":\"MLlUi\",\"avatar\":\"Z1jn_\",\"logoWrapper\":\"OAeff\",\"cog\":\"I7V_R\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { BulkJobsAccordionTableSize } from 'libs/shared/components/bulk-job-accordion/BulkJobsAccordion';\nimport { BulkJobAccordionHelper } from 'libs/shared/components/bulk-job-accordion/BulkJobsAccordionHelper';\nimport { SyncStatusBadge } from 'libs/shared/components/rostering/sync-status-badge/SyncStatusBadge';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './scheduled-sync-job-item.scss';\n\n\nconst namespace = 'rostering.scheduledSyncJobItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SyncJobsAccordionItemProps {\n scheduledDate: Date;\n size?: BulkJobsAccordionTableSize;\n}\n\nexport function ScheduledSyncJobItem(props: SyncJobsAccordionItemProps): JSX.Element {\n const size = props.size || 'std';\n return (\n <div className={styles.colored}>\n <div className='px-4 py-3 d-flex align-items-center'>\n {/* no checkbox for scheduled job but need a placeholder for styling */}\n <div style={BulkJobAccordionHelper.getColumnCellStyle('checkboxes', size)}></div>\n\n <div className='px-2' style={BulkJobAccordionHelper.getColumnCellStyle('id', size)}>\n {/* scheduled job don't have source logo, we keep it as placeholder*/}\n </div>\n\n <div className='px-2' style={BulkJobAccordionHelper.getColumnCellStyle('dateCreated', size)}>{DateHelper.format(props.scheduledDate, 'DD/MM/YYYY, hh:mmA')}</div>\n\n <div className='px-2' style={BulkJobAccordionHelper.getColumnCellStyle('status', size)}><SyncStatusBadge status='scheduled' /></div>\n\n <div className='px-2 d-flex align-items-center' style={BulkJobAccordionHelper.getColumnCellStyle('submitterName', size)}>\n <div className={`${styles.cog} me-2 rounded-circle text-white bg-dark d-flex align-items-center justify-content-center`}>\n <SvgContainer\n svgName={cvSvgLibrary.Cog}\n className='svg-container'\n />\n </div>\n {getPhrase('performedBy')}\n </div>\n\n <div className={`cursor-pointer d-flex justify-content-end`} style={BulkJobAccordionHelper.getColumnCellStyle('actions', size)}></div>\n\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"colored\":\"aU1VO\",\"seeMore\":\"Nfc8Q\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { BulkJobsAccordionColumn, BulkJobsAccordionTableSize } from 'libs/shared/components/bulk-job-accordion/BulkJobsAccordion';\nimport { BulkJobAccordionHelper } from 'libs/shared/components/bulk-job-accordion/BulkJobsAccordionHelper';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { WizardPollJobFn } from 'libs/shared/components/wizard/status/polling/WizardPolling';\nimport { BatchJob } from 'libs/shared/interfaces';\n\nimport styles from './bulk-jobs-accordion-item.scss';\n\nconst namespace = 'shared.bulkJobsAccordionItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SyncJobsAccordionItemProps {\n job: BatchJob;\n onToggleCheckbox: (id: string) => void;\n isChecked: (id: string) => boolean;\n jobDetailsComponent: (job: BatchJob) => JSX.Element;\n onClickExport: (ids: string[]) => Promise<void>;\n imageCdnUrl: string;\n onPollJob?: (id: string) => WizardPollJobFn;\n columns: BulkJobsAccordionColumn[];\n forceExpand?: (job: BatchJob) => boolean;\n disableExpand?: (job: BatchJob) => boolean;\n tableSize?: BulkJobsAccordionTableSize;\n}\n\nexport function BulkJobsAccordionItem(props: SyncJobsAccordionItemProps): JSX.Element {\n const [ isExpanded, setIsExpanded ] = React.useState(props.forceExpand ? props.forceExpand(props.job) : false);\n const isDisabled = props.disableExpand ? props.disableExpand(props.job) : false;\n\n function onClick() {\n if (isDisabled)\n return;\n setIsExpanded(s => !s);\n }\n\n return (\n <div className={`${styles.colored} ${isDisabled ? '' : 'cursor-pointer'}`} onClick={onClick}>\n <div className='p-4 d-flex align-items-center'>\n <div style={BulkJobAccordionHelper.getCellStyle(60)} onClick={e => e.stopPropagation()}>\n <Checkbox\n id={props.job.id}\n checked={props.isChecked(props.job.id)}\n onChange={() => props.onToggleCheckbox(props.job.id)}\n />\n </div>\n \n {props.columns.map(({ render, renderClassName, width, id }) => (\n <div className={`${renderClassName ?? ''}`} key={id} style={BulkJobAccordionHelper.getCellStyle(width)}>{render(props.job)}</div>\n ))}\n \n <div className={`d-flex justify-content-end ${isDisabled ? '' : 'cursor-pointer'}`} style={BulkJobAccordionHelper.getColumnCellStyle('actions', props.tableSize)}>\n {!isDisabled && (<div className={`${styles.seeMore} text-info`}>\n {isExpanded ? getPhrase('seeLess') : getPhrase('seeMore')}\n </div>\n )}\n </div>\n </div>\n \n {isExpanded && (\n <div className='bg-white border-bottom cursor-default' onClick={e => e.stopPropagation()}>\n {props.jobDetailsComponent(props.job)}\n </div>\n )}\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { SearchFilters } from 'libs/shared/apps/search/components/search-filters/SearchFilters';\nimport { SearchFilter } from 'libs/shared/apps/search/interfaces';\nimport { BatchJobType } from 'libs/shared/enums/BatchJobType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\n\nexport interface BulkJobsQueryParams {\n cursor: string;\n userType?: UserGroup | UserGroup[];\n bulkActionType?: BatchJobType | BatchJobType[];\n sort: 'newest' | 'oldest';\n jobStatus?: string[];\n}\n\ninterface BulkJobsFiltersProps {\n queryParams: BulkJobsQueryParams;\n appLink: Core.AppLink;\n filters: SearchFilter[];\n analyticsOptions?: AnalyticsOptions;\n}\n\nexport function BulkJobsFilters(props: BulkJobsFiltersProps): JSX.Element {\n return (\n <SearchFilters\n queryParams={props.queryParams}\n mainFilters={props.filters}\n appLink={props.appLink}\n analyticsOptions={props.analyticsOptions}\n hideHeading\n hideDivider\n constantIndices={[]}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"bulkCheckbox\":\"XeoQi\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SearchFilter } from 'libs/shared/apps/search/interfaces';\nimport { BulkJobsAccordionItem } from 'libs/shared/components/bulk-job-accordion/bulk-jobs-accordion-item/BulkJobsAccordionItem';\nimport { BulkJobAccordionHelper } from 'libs/shared/components/bulk-job-accordion/BulkJobsAccordionHelper';\nimport { BulkJobsFilters, BulkJobsQueryParams } from 'libs/shared/components/bulk-jobs-filters/BulkJobsFilters';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { Pagination } from 'libs/shared/components/pagination/Pagination';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { WizardPollJobFn } from 'libs/shared/components/wizard/status/polling/WizardPolling';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useBulkCheckboxManager } from 'libs/shared/hooks/useBulkCheckboxManager';\nimport { BatchJob, BatchJobCollection } from 'libs/shared/interfaces';\nimport { ContextService } from 'libs/shared/services/ContextService';\n\nimport styles from './bulk-jobs-accordion.scss';\n\nconst namespace = 'shared.bulkJobsAccordions';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface BulkJobsAccordionColumn {\n id: keyof BatchJob | 'checkboxes';\n header: string;\n headerClassName?: string;\n render: (val: BatchJob) => JSX.Element | string;\n renderClassName?: string;\n width: number;\n}\n\nexport type BulkJobsAccordionTableSize = 'std' | 'sm';\n\ninterface BulkJobsAccordionProps {\n jobs: BatchJobCollection;\n queryParams: BulkJobsQueryParams;\n appLink: Core.AppLink;\n onClickExport: (ids: string[]) => Promise<void>;\n jobDetailsComponent: (job: BatchJob) => JSX.Element;\n pinnedComponent?: () => JSX.Element;\n imageCdnUrl: string;\n onPollJob?: (id: string) => WizardPollJobFn;\n columns: BulkJobsAccordionColumn[];\n filters: SearchFilter[];\n forceExpand?: (job: BatchJob) => boolean;\n disableExpand?: (job: BatchJob) => boolean;\n containerClassName?: string;\n tableSize?: BulkJobsAccordionTableSize;\n}\n\nexport function BulkJobsAccordion(props: BulkJobsAccordionProps): JSX.Element {\n const [ showExportSpinner, setShowExportSpinner ] = React.useState(false);\n \n const CheckboxHelper = useBulkCheckboxManager(props.jobs.data);\n const alerts = useAlerts();\n\n function onClickExport(): void {\n if (showExportSpinner)\n return;\n\n setShowExportSpinner(true);\n\n const selectedIds = CheckboxHelper.getSelected();\n\n props.onClickExport(selectedIds)\n .then(() => alerts.success(getPhrase('exportSuccess')))\n .catch(() => alerts.error(getPhrase('exportError')))\n .finally(() => setShowExportSpinner(false));\n }\n\n return (\n <div className={`${props.containerClassName} pe-3`}>\n <div className='d-flex align-items-center pb-2 mt-3'>\n {/* bulk checkbox */}\n <Checkbox\n className={styles.bulkCheckbox}\n id='bulk-audit-log-checkbox'\n checked={CheckboxHelper.bulkChecked}\n onChange={CheckboxHelper.onToggleBulk}\n indeterminate={CheckboxHelper.hasSomeSelections()}\n />\n\n <div className='ms-4'>\n <BulkJobsFilters\n queryParams={props.queryParams}\n appLink={props.appLink}\n filters={props.filters}\n />\n </div>\n\n <SpinnerButton\n variant='dark'\n className='ms-auto'\n onClick={onClickExport}\n disabled={!CheckboxHelper.hasSomeSelections() || showExportSpinner}\n showSpinner={showExportSpinner}\n >\n <Text namespace={namespace} phrase='export' />\n </SpinnerButton>\n </div>\n \n {/* table columns header */}\n <div className='d-flex no-wrap mb-2 fw-semibold px-4 py-2'>\n <div style={BulkJobAccordionHelper.getCellStyle(60)}></div>\n {props.columns.map(({ id, header, headerClassName, width }) => (\n <div key={id} className={headerClassName} style={BulkJobAccordionHelper.getCellStyle(width)}>{header}</div>\n ))}\n {/* placeholder column header for see-more action */}\n <div style={BulkJobAccordionHelper.getColumnCellStyle('actions', props.tableSize)}></div>\n </div>\n\n {/* table content*/}\n {/* pinned content at the top if has*/}\n {!!props.pinnedComponent && props.pinnedComponent()}\n\n {/* main content */}\n {!!props.jobs.data.length && props.jobs.data.map(job => {\n return (\n <BulkJobsAccordionItem\n key={job.id}\n job={job}\n onToggleCheckbox={CheckboxHelper.onToggleItem}\n isChecked={CheckboxHelper.isChecked}\n jobDetailsComponent={props.jobDetailsComponent}\n onClickExport={props.onClickExport}\n imageCdnUrl={props.imageCdnUrl}\n onPollJob={props.onPollJob}\n columns={props.columns}\n forceExpand={props.forceExpand}\n disableExpand={props.disableExpand}\n tableSize={props.tableSize}\n />\n );\n })}\n\n {/* pagination */}\n {!!props.jobs.pagination?.cursors && (\n <Pagination\n className='p-0 text-end pb-3 mt-3'\n cursors={props.jobs.pagination.cursors}\n appLink={ContextService.getCurrentRoute().appLink}\n buttonVariant='outline-dark'\n />\n )}\n </div>\n );\n}","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { WizardPolling, WizardPollJobFn } from 'libs/shared/components/wizard/status/polling/WizardPolling';\n\ninterface SyncJobPollingProps {\n jobId: string;\n onCompleted: () => void;\n onPollJob: (id: string) => WizardPollJobFn;\n}\n\nexport function SyncJobPolling(props: SyncJobPollingProps): JSX.Element {\n if (!props.jobId)\n return (\n <div className='text-center'>\n <Spinner as='div' animation='border' role='status' />\n </div>\n );\n\n return (\n <div>\n <div className='mb-4'>\n <WizardPolling\n jobId={props.jobId}\n pollJob={props.onPollJob(props.jobId)}\n onStatusCompleted={props.onCompleted}\n actionName='Sync'\n actionVerb='Update'\n progressVerbPhrase={LanguageService.getPhrase('rostering.syncJobPolling', 'progressVerb')}\n />\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"failed\":\"BSIaY\",\"tag\":\"NOJhh\"};","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { BatchJob, RosteringSyncBatchJobSummary } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './sync-job-summary.scss';\n\nconst namespace = 'rostering.syncJobSummary';\n\ninterface SyncJobSummaryProps {\n job: BatchJob;\n getJobSummary: (id: string) => Promise<RosteringSyncBatchJobSummary>;\n}\n\nexport function SyncJobSummary(props: SyncJobSummaryProps): JSX.Element {\n const [ summary, setSummary ] = React.useState<RosteringSyncBatchJobSummary>(null);\n const [ isFetchingSummary, setIsFetchingSummary ] = React.useState(false);\n function onFetchSummary() {\n setIsFetchingSummary(true);\n\n props.getJobSummary(props.job.id)\n .then(result => {\n setSummary(result);\n }).finally(() => {\n setIsFetchingSummary(false);\n });\n }\n\n React.useEffect(() => {\n if (!summary) {\n onFetchSummary();\n }\n }, [props.job.id]);\n\n function getCategoryList(name: keyof RosteringSyncBatchJobSummary) {\n let bgColor = '';\n let icon = '';\n switch (name) {\n case 'staff':\n bgColor = 'bg-navy';\n icon = cvSvgLibrary.Staff;\n break;\n case 'learners':\n bgColor = 'bg-blue';\n icon = cvSvgLibrary.GraduationCap;\n break;\n case 'classrooms':\n bgColor = 'bg-teal';\n icon = cvSvgLibrary.Classrooms;\n break;\n\n default:\n break;\n }\n\n const displayedSummaryKeys = Object.keys(summary[name]).filter(k => {\n return k !== 'totalProcessed' && k !== 'totalSucceeded';\n });\n\n return (\n <div className='col'>\n <div className='py-3 ps-2 pe-3 rounded border'>\n <div className='d-flex align-items-center px-2 mb-2'>\n <div className={`${bgColor} ${styles.badge} d-flex align-items-center rounded-circle text-white ps-0 me-2`}>\n <SvgContainer\n className={`svg-container ${styles.svg}`}\n size={SvgContainerSize.Standard}\n svgName={icon}\n />\n </div>\n <Text namespace={namespace} phrase={name}/>\n </div>\n <ul className='mb-0'>\n {displayedSummaryKeys?.map((k: string) => {\n return (\n <li className='mb-2' key={k}>\n <div className='d-flex'>\n <div className={`rounded-pill me-2 px-2 d-inline-flex align-items-center fw-semibold ${k === 'errored' ? styles.failed : styles.tag}`}>{(summary[name] as HashObject)[k]}</div>\n <Text namespace={namespace} phrase={k}/>\n </div>\n </li>\n );\n })}\n </ul>\n </div>\n </div>\n );\n }\n return (\n <>\n {(isFetchingSummary && !summary) && (\n <div className='text-center py-3'>\n <Spinner as='div' animation='border' role='status' />\n </div>\n )}\n {!!summary && (\n <div className='row gx-3 mt-2'>\n {getCategoryList('staff')}\n {getCategoryList('learners')}\n {getCategoryList('classrooms')}\n </div>\n )}\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SyncJobPolling } from 'libs/shared/components/rostering/sync-job-polling/SyncJobPolling';\nimport { SyncJobSummary } from 'libs/shared/components/rostering/sync-job-summary/SyncJobSummary';\nimport { WizardPollJobFn } from 'libs/shared/components/wizard/status/polling/WizardPolling';\nimport { BatchJobStatus } from 'libs/shared/enums/BatchJobStatus';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { BatchJob, RosteringSyncBatchJobSummary } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'rostering.syncJobDetails';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SyncJobDetailsProps {\n job: BatchJob;\n summary?: RosteringSyncBatchJobSummary;\n getJobSummary: (id: string) => Promise<RosteringSyncBatchJobSummary>;\n onClickExport: (ids: string[]) => Promise<void>;\n onPollJob?: (id: string) => WizardPollJobFn;\n onCompleted?: () => void;\n}\n\nexport function SyncJobDetails(props: SyncJobDetailsProps): JSX.Element {\n const canExport = props.job.status === BatchJobStatus.Completed\n || props.job.status === BatchJobStatus.CompletedWithError;\n\n const alerts = useAlerts();\n\n function getContent() {\n switch (props.job.status) {\n case BatchJobStatus.InProgress:\n case BatchJobStatus.Pending:\n case BatchJobStatus.Queued:\n case BatchJobStatus.Submitted:\n return (\n <SyncJobPolling\n jobId={props.job.id}\n onCompleted={props.onCompleted}\n onPollJob={props.onPollJob}\n />\n );\n\n case BatchJobStatus.Failed:\n // failed job cannot be expanded, since we don't have helpful error message for now\n return <></>;\n\n case BatchJobStatus.Completed:\n case BatchJobStatus.CompletedWithError:\n return <SyncJobSummary job={props.job} getJobSummary={props.getJobSummary} />;\n\n default:\n return <></>;\n }\n }\n\n function onClickExport() {\n props.onClickExport([props.job.id])\n .then(() => {\n alerts.success(getPhrase('exportSuccess'));\n })\n .catch(() => {\n alerts.error(getPhrase('exportError'));\n });\n }\n\n return (\n <div className='py-3 px-4' >\n <div className='d-flex justify-content-between'>\n {props.job.status !== BatchJobStatus.InProgress && <h1 className='h4'>{getPhrase('heading')}</h1>}\n \n {canExport && (\n <IconButton\n className='btn btn-outline-dark fw-semibold'\n svgName={cvSvgLibrary.Download}\n onClick={onClickExport}\n >\n {getPhrase('export')}\n </IconButton>\n )}\n </div>\n \n {getContent()}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"avatar\":\"B8miR\",\"logoWrapper\":\"higtD\",\"cog\":\"bNPxa\"};","import React from 'react';\n\nimport { DevError } from 'libs/common/backbone/errors/DevError';\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { FilterOption } from 'libs/shared/apps/search/interfaces';\nimport { Filters } from 'libs/shared/apps/search/utils/FilterHelper';\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { BulkJobsAccordion, BulkJobsAccordionColumn, BulkJobsAccordionTableSize } from 'libs/shared/components/bulk-job-accordion/BulkJobsAccordion';\nimport { BulkJobAccordionHelper } from 'libs/shared/components/bulk-job-accordion/BulkJobsAccordionHelper';\nimport { BulkJobsQueryParams } from 'libs/shared/components/bulk-jobs-filters/BulkJobsFilters';\nimport { ClickViewAvatar } from 'libs/shared/components/clickview-avatar/ClickViewAvatar';\nimport { SyncJobDetails } from 'libs/shared/components/rostering/sync-job-details/SyncJobDetails';\nimport { SyncStatusBadge } from 'libs/shared/components/rostering/sync-status-badge/SyncStatusBadge';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { SvgContainer2 } from 'libs/shared/components/svg-container/SvgContainer2';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { WizardPollJobFn } from 'libs/shared/components/wizard/status/polling/WizardPolling';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { BatchJobStatus } from 'libs/shared/enums/BatchJobStatus';\nimport { BatchJob, BatchJobCollection, RosteringSyncBatchJobSummary, RosteringSyncMetadata } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './sync-jobs-accordion.scss';\n\nconst namespace = 'rostering.syncJobsAccordion';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SyncJobsAccordionsProps {\n jobs: BatchJobCollection;\n queryParams: BulkJobsQueryParams;\n appLink: Core.AppLink;\n onClickExport: (ids: string[]) => Promise<void>;\n getJobSummary: (id: string) => Promise<RosteringSyncBatchJobSummary>;\n imageCdnUrl: string;\n onPollJob?: (id: string) => WizardPollJobFn;\n onCompleted?: () => void;\n pinnedComponent?: () => JSX.Element;\n containerClassName?: string;\n tableSize?: BulkJobsAccordionTableSize;\n}\n\nfunction getSortOptions(): FilterOption[] {\n return [{\n id: 'newest',\n name: LanguageService.getPhrase(namespace, 'newest'),\n default: true\n },\n {\n id: 'oldest',\n name: LanguageService.getPhrase(namespace, 'oldest')\n }];\n}\n\nconst IN_PROGRESS_GROUP = [\n BatchJobStatus.InProgress,\n BatchJobStatus.Pending,\n BatchJobStatus.Queued,\n BatchJobStatus.Submitted\n];\n\nfunction renderSubmiter(job: BatchJob, props: SyncJobsAccordionsProps): JSX.Element {\n if (job.submittedByClickView) {\n return (\n <div className='d-flex align-items-center'>\n <SvgContainer2 className='me-2 rounded-circle border' size={SvgContainerSize.Large}>\n <ClickViewAvatar />\n </SvgContainer2>\n {job.submitterName}\n </div>\n );\n }\n\n if (job.submitterName) {\n return (\n <div className='d-flex align-items-center'>\n <div className={`me-2 flex-shrink-0 ${styles.avatar}`}>\n <Avatar\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(job.submitterName.split(' ')[0], job.submitterName.split(' ')[1])}\n />\n </div>\n {job.submitterName}\n </div>\n );\n }\n // if job.submitterName is null it's triggered by scheduled sync\n return (\n <div className='me-2 d-flex align-items-center'>\n <div className={`${styles.cog} me-2 rounded-circle text-white bg-dark d-flex align-items-center justify-content-center`}>\n <SvgContainer\n svgName={cvSvgLibrary.Cog}\n className='svg-container'\n />\n </div>\n {getPhrase('scheduledSubmitter')}\n </div>\n );\n}\n\nexport function SyncJobsAccordion(props: SyncJobsAccordionsProps): JSX.Element {\n const filters = [\n Filters.SortBy(getSortOptions()),\n Filters.JobStatus()\n ];\n\n const columns: BulkJobsAccordionColumn[] = [{\n id: 'id',\n header: getPhrase('syncFrom'),\n headerClassName: 'px-2 py-1',\n renderClassName: 'px-2',\n render: job => {\n const rosterSource = (job.metadata as RosteringSyncMetadata)?.source;\n // unknown roster source\n if (!rosterSource)\n return <></>;\n\n const source = HardCoded.Rostering.sources[rosterSource];\n if (!source) {\n throw new DevError('Unsupported rostering sync source, please add it to HardCoded rostering source');\n }\n\n return (\n <div className={`bg-white rounded-circle border ${styles.logoWrapper} d-flex align-items-center justify-content-center`}>\n <Tooltip spanHack title={source.name}>\n <img src={source.iconUrl} alt={source.name}/>\n </Tooltip>\n </div>\n );\n },\n width: BulkJobAccordionHelper.getColumnCellWidth('id', props.tableSize)\n }, {\n id: 'dateCreated',\n header: getPhrase('date'),\n headerClassName: 'px-2 py-1',\n renderClassName: 'px-2',\n render: job => DateHelper.format(job.dateCreated, 'DD/MM/YYYY, hh:mmA'),\n width: BulkJobAccordionHelper.getColumnCellWidth('dateCreated', props.tableSize)\n }, {\n id: 'status',\n header: getPhrase('status'),\n headerClassName: 'px-2 py-1',\n renderClassName: 'px-2',\n render: job => (\n <SyncStatusBadge status={job.status}/>\n ),\n width: BulkJobAccordionHelper.getColumnCellWidth('status', props.tableSize)\n }, {\n id: 'submitterName',\n header: getPhrase('performedBy'),\n headerClassName: 'px-2',\n renderClassName: 'px-2',\n render: job => renderSubmiter(job, props),\n width: BulkJobAccordionHelper.getColumnCellWidth('submitterName', props.tableSize)\n }];\n\n function forceExpand(job: BatchJob) {\n return IN_PROGRESS_GROUP.includes(job.status);\n }\n\n function disableExpand(job: BatchJob) {\n return job.status === BatchJobStatus.Failed;\n }\n\n return (\n <BulkJobsAccordion\n {...props}\n filters={filters}\n jobDetailsComponent={job => (\n <SyncJobDetails\n job={job}\n getJobSummary={props.getJobSummary}\n onPollJob={props.onPollJob}\n onClickExport={props.onClickExport}\n onCompleted={props.onCompleted}\n />\n )}\n columns={columns}\n forceExpand={forceExpand}\n disableExpand={disableExpand}\n />\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 = 'rostering.districtRosterEmptyState';\n\nexport function DistrictRosteringEmptyState(): JSX.Element {\n return (\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Rostering.DISTRICT_ROSTERING} />\n <EmptyState.Heading><Text namespace={namespace} phrase='emptyHeading' /></EmptyState.Heading>\n <EmptyState.Info className='w-50 mb-2'><Text namespace={namespace} phrase='emptyInfo' /></EmptyState.Info>\n <EmptyState.Info className='w-50 mb-1 fw-semibold'><Text namespace={namespace} phrase='strongInfo' /></EmptyState.Info>\n {/* <EmptyState.Cta\n href={href}\n text={getPhrase('emptyCta')}\n className='btn btn-link info-link'\n openInNewTab\n /> */}\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nconst namespace = 'rostering.noSyncJobs';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\ninterface NoSyncJobsEmptyStateProps {\n onStartFullSync: () => void;\n}\n\nexport function NoSyncJobsEmptyState(props: NoSyncJobsEmptyStateProps): JSX.Element {\n return (\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Rostering.NO_SYNC_JOBS} />\n <EmptyState.Heading><Text namespace={namespace} phrase='emptyHeading' /></EmptyState.Heading>\n <EmptyState.Info className='w-50 mb-3'><Text namespace={namespace} phrase='emptyInfo' /></EmptyState.Info>\n {/* <EmptyState.Cta\n href={href}\n text={getPhrase('learnMore')}\n className='btn btn-link info-link'\n openInNewTab\n /> */}\n <EmptyState.Cta\n className='btn btn-dark'\n onClick={props.onStartFullSync}\n text={getPhrase('emptyCta')}\n />\n </EmptyState>\n );\n}","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { BulkJobsQueryParams } from 'libs/shared/components/bulk-jobs-filters/BulkJobsFilters';\nimport { NoResultsEmptyState } from 'libs/shared/components/rostering/no-results-empty-state/NoResultsEmptyState';\nimport { PartialSyncJobsList } from 'libs/shared/components/rostering/partial-loading/PartialSyncJobsList';\nimport { RosteringSettingHeader } from 'libs/shared/components/rostering/rostering-header/RosteringSettingHeader';\nimport { ScheduledSyncJobItem } from 'libs/shared/components/rostering/scheduled-sync-job-item/ScheduledSyncJobItem';\nimport { SyncActionButtonGroup } from 'libs/shared/components/rostering/sync-action-button-group/SyncActionButtonGroup';\nimport { SyncJobsAccordion } from 'libs/shared/components/rostering/sync-jobs-accordion/SyncJobsAccordion';\nimport { RosteringHelper } from 'libs/shared/components/rostering/utils/RosteringHelper';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { RosteringRequests } from 'libs/shared/flight-requests/RosteringRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { BatchJobCollection, BatchJobProgress, Config, CurrentUser, RosteringResponse, RosteringSyncBatchJobSummary, ScheduleSettingResponse } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { JobRequests } from 'shared/flight-requests/JobRequests';\n\nimport { SettingsLayout } from 'apps/settings/components/settings-layout/SettingsLayout';\nimport { DistrictRosteringEmptyState } from 'apps/settings/views/rostering/rostering-sync-list/district-rostering-empty-state/DistrictRosteringEmptyState';\nimport { NoSyncJobsEmptyState } from 'apps/settings/views/rostering/rostering-sync-list/no-sync-jobs-empty-state/NoSyncJobsEmptyState';\nimport { RequiresSetUpEmptyState } from 'apps/settings/views/rostering/rostering-sync-list/requires-set-up-empty-state/RequiresSetUpEmptyState';\nimport { useSyncRostering } from 'apps/settings/views/rostering/utils/useSyncRostering';\n\nconst namespace = 'rostering.syncList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface RosteringSyncListViewProps {\n queryParams: BulkJobsQueryParams;\n}\n\nexport function RosteringSyncListView(props: RosteringSyncListViewProps): JSX.Element {\n const syncJobs = Flight.useBasicFetch<BatchJobCollection>(RosteringRequests.getSyncList(props.queryParams));\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const rostering = Flight.useBasicFetch<RosteringResponse>(RosteringRequests.getRostering());\n const settings = Flight.useBasicFetch<ScheduleSettingResponse>(currentUser.data && rostering.data &&\n RosteringRequests.getSyncScheduleSettings(rostering.data.id));\n\n const dataLoaded = syncJobs.hasCompleted && config.hasCompleted && settings.hasCompleted && rostering.hasCompleted;\n\n useLockContentWidth();\n\n const fetchAsync = Flight.useGetFetchAsync();\n\n const dispatch = useDispatch();\n\n useSetPageMetadata({ title: getPhrase('pageTitle') });\n\n function getJobSummary(id: string): Promise<RosteringSyncBatchJobSummary> {\n return fetchAsync(RosteringRequests.getJobSummary(id));\n }\n\n function onPollJob(id: string) {\n return function(onSuccess: (progress: BatchJobProgress) => void, onError: (xhr: Xhr) => void) {\n return fetchAsync(JobRequests.getJobProgress(id, onSuccess, onError));\n };\n }\n\n function onCompleted() {\n dispatch({\n type: Flight.Actions.INVALIDATE,\n keys: ['rostering:sync'],\n request: null\n });\n }\n\n function onClickExport(jobIds: string[]): Promise<void> {\n return fetchAsync<void>(JobRequests.sendJobReports(jobIds));\n }\n\n function getContent() {\n // controlled by district\n if (rostering.data?.status === 'Managed')\n return <DistrictRosteringEmptyState/>;\n\n // has not set up rostering\n if (rostering.data?.status === 'None')\n return <RequiresSetUpEmptyState/>;\n\n if (!dataLoaded)\n return <PartialSyncJobsList />;\n\n if (!syncJobs.data.data.length && !props.queryParams)\n return <NoSyncJobsEmptyState onStartFullSync={syncNow}/>;\n\n const nextScheduled = RosteringHelper.getScheduledJobBySetting(settings.data);\n\n return (\n <>\n <SyncJobsAccordion\n jobs={syncJobs.data}\n queryParams={props.queryParams}\n appLink={{\n application: AppChannels.SETTINGS,\n action: Actions.Settings.ROSTERING\n }}\n onClickExport={onClickExport}\n getJobSummary={getJobSummary}\n imageCdnUrl={config.data.imageCdnUrl}\n onPollJob={onPollJob}\n onCompleted={onCompleted}\n pinnedComponent={\n nextScheduled\n ? () => <ScheduledSyncJobItem scheduledDate={nextScheduled} />\n : null\n }\n />\n {!syncJobs.data.data.length && props.queryParams && (\n <NoResultsEmptyState imageCdnUrl={ImageUrls.EmptyStates.Rostering.EMPTY_RESULTS} />\n )}\n </>\n );\n }\n\n const showTabAndButton = dataLoaded && rostering.data?.status === 'Active';\n\n const { syncNow, fullSync } = useSyncRostering(currentUser.data);\n\n function renderButton() {\n if (!showTabAndButton)\n return <></>;\n return <SyncActionButtonGroup onSyncNow={syncNow} onFullSync={fullSync}/>;\n }\n\n return (\n <SettingsLayout\n heading={getPhrase('heading')}\n breadcrumbs={[getPhrase('breadcrumb')]}\n headingButton={renderButton}\n requiredPermissions={PermissionName.Rostering}\n >\n {showTabAndButton && (\n <RosteringSettingHeader\n active='syncJobs'\n appLinks={{\n syncJobs: { application: AppChannels.SETTINGS, action: Actions.Settings.ROSTERING },\n settings: { application: AppChannels.SETTINGS, action: Actions.Settings.ROSTERING_SETTINGS }\n }}\n />\n )}\n {getContent()}\n </SettingsLayout>\n );\n}","import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { ExternalLink } from 'libs/shared/components/external-link/ExternalLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ArticleHelper } from 'libs/shared/utils/ArticleHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nconst namespace = 'rostering.requiresSetUp';\n\nexport function RequiresSetUpEmptyState(): JSX.Element {\n return (\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Rostering.REQUIRES_SET_UP} />\n <EmptyState.Heading><Text namespace={namespace} phrase='emptyHeading' /></EmptyState.Heading>\n <EmptyState.Info className='w-50 mb-3'><Text namespace={namespace} phrase='emptyInfo' /></EmptyState.Info>\n \n {/* <EmptyState.Cta\n href={href}\n text={getPhrase('emptyCta')}\n className='btn btn-link info-link'\n openInNewTab\n /> */}\n \n <ExternalLink\n className='btn btn-dark'\n href={ArticleHelper.getSupportRequestUrl()}\n newTab\n >\n <Text namespace={namespace} phrase='button'/>\n </ExternalLink>\n \n </EmptyState>\n );\n}","import { AlertType, BaseAlert } from 'libs/common/backbone/services/BaseAlertService';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { BatchDataType } from 'libs/shared/enums/BatchDataType';\nimport { BatchJobName } from 'libs/shared/enums/BatchJobName';\nimport { BatchJobType } from 'libs/shared/enums/BatchJobType';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { RosteringRequests } from 'libs/shared/flight-requests/RosteringRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { CurrentUser } from 'libs/shared/interfaces';\n\nconst namespace = 'rostering.syncUtils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport const useSyncRostering = (currentUser: CurrentUser) => {\n const fetchAsync = Flight.useGetFetchAsync();\n\n const alerts = useAlerts();\n\n if (!currentUser) {\n return { syncNow: () => {}, fullSync: () => {} };\n }\n\n function syncNow() {\n const alert: BaseAlert = {\n type: AlertType.Success,\n heading: getPhrase('startSyncAlertHeading'),\n message: getPhrase('startSyncAlertBody'),\n appLinkText: getPhrase('startSyncAlertAppLinkText'),\n appLinkClassName: 'info-link'\n };\n\n const data = {\n name: BatchJobName.Rostering,\n type: BatchJobType.Rostering,\n metadata: {\n targetMasterId: currentUser.customerId,\n targetMasterType: MasterType.Customer\n },\n customerId: currentUser.customerId,\n dataType: BatchDataType.Learner\n };\n fetchAsync(RosteringRequests.createJob(\n data,\n () => {\n alerts.success(alert);\n },\n () => {\n alerts.error(getPhrase('error'));\n }\n ));\n }\n\n function fullSync() {\n // todo\n }\n return { fullSync, syncNow };\n};","// extracted by mini-css-extract-plugin\nexport default {\"pillTabSelector\":\"Hdi6o\",\"tab\":\"RvNxr\",\"minWidth\":\"GHSz9\",\"radiusSmall\":\"VhJJa\",\"tabLink\":\"WFyvo\"};","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { cloneElement } from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport { map } from './ElementChildren';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst ROUND_PRECISION = 1000;\n\n/**\n * Validate that children, if any, are instances of `ProgressBar`.\n */\nfunction onlyProgressBar(props, propName, componentName) {\n const children = props[propName];\n if (!children) {\n return null;\n }\n let error = null;\n React.Children.forEach(children, child => {\n if (error) {\n return;\n }\n\n /**\n * Compare types in a way that works with libraries that patch and proxy\n * components like react-hot-loader.\n *\n * see https://github.com/gaearon/react-hot-loader#checking-element-types\n */\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n const element = /*#__PURE__*/_jsx(ProgressBar, {});\n if (child.type === element.type) return;\n const childType = child.type;\n const childIdentifier = /*#__PURE__*/React.isValidElement(child) ? childType.displayName || childType.name || childType : child;\n error = new Error(`Children of ${componentName} can contain only ProgressBar ` + `components. Found ${childIdentifier}.`);\n });\n return error;\n}\nfunction getPercentage(now, min, max) {\n const percentage = (now - min) / (max - min) * 100;\n return Math.round(percentage * ROUND_PRECISION) / ROUND_PRECISION;\n}\nfunction renderProgressBar({\n min,\n now,\n max,\n label,\n visuallyHidden,\n striped,\n animated,\n className,\n style,\n variant,\n bsPrefix,\n ...props\n}, ref) {\n return /*#__PURE__*/_jsx(\"div\", {\n ref: ref,\n ...props,\n role: \"progressbar\",\n className: classNames(className, `${bsPrefix}-bar`, {\n [`bg-${variant}`]: variant,\n [`${bsPrefix}-bar-animated`]: animated,\n [`${bsPrefix}-bar-striped`]: animated || striped\n }),\n style: {\n width: `${getPercentage(now, min, max)}%`,\n ...style\n },\n \"aria-valuenow\": now,\n \"aria-valuemin\": min,\n \"aria-valuemax\": max,\n children: visuallyHidden ? /*#__PURE__*/_jsx(\"span\", {\n className: \"visually-hidden\",\n children: label\n }) : label\n });\n}\nconst ProgressBar = /*#__PURE__*/React.forwardRef(({\n isChild = false,\n ...rest\n}, ref) => {\n const props = {\n min: 0,\n max: 100,\n animated: false,\n visuallyHidden: false,\n striped: false,\n ...rest\n };\n props.bsPrefix = useBootstrapPrefix(props.bsPrefix, 'progress');\n if (isChild) {\n return renderProgressBar(props, ref);\n }\n const {\n min,\n now,\n max,\n label,\n visuallyHidden,\n striped,\n animated,\n bsPrefix,\n variant,\n className,\n children,\n ...wrapperProps\n } = props;\n return /*#__PURE__*/_jsx(\"div\", {\n ref: ref,\n ...wrapperProps,\n className: classNames(className, bsPrefix),\n children: children ? map(children, child => /*#__PURE__*/cloneElement(child, {\n isChild: true\n })) : renderProgressBar({\n min,\n now,\n max,\n label,\n visuallyHidden,\n striped,\n animated,\n bsPrefix,\n variant\n }, ref)\n });\n});\nProgressBar.displayName = 'ProgressBar';\nexport default ProgressBar;"],"names":["PartialSearchFilters","count","className","Array","fill","map","item","index","key","TabContents","props","tab","svgName","name","type","data","PillTabSelector","ref","containerRef","borderRadius","listClassName","tabs","active","appLink","analyticsData","analyticsOptions","onClick","onSelect","onSelectTab","defaultProps","namespace","RosteringSettingHeader","appLinks","syncJobs","settings","getPhrase","LanguageService","SyncActionButtonGroup","role","Tooltip","title","spanHack","placement","spanHackClassName","onSyncNow","now","Date","RosteringHelper","parseUTCToLocal","utcHour","utcWeekdays","utcMinute","local","weekday","localWeekdays","w","getDay","hour","daysOfWeek","minute","getScheduledJobBySetting","setting","fullSyncSchedule","enabled","schedule","scheduledDate","weekdayOfToday","scheduledWeekday","sort","a","b","scheduledToday","includes","setHours","nextScheduledDate","nextScheduledWeekday","find","d","gap","Math","abs","setDate","getDate","PartialTagItem","tagClass","classNames","TagWidgetItem","colorClass","selectedItems","selection","id","tag","WizardInProgress","percentage","floor","totalItemsComplete","totalItems","Text","phrase","options","actionName","SvgContainer","actionVerb","progressVerbPhrase","objectType","MasterType","userType","UserGroup","totalComplete","total","smartCount","ProgressBar","variant","WizardSubmitted","POLLING_INTERVAL","MAX_CONSECUTIVE_ERROR_COUNT","WizardPolling","progress","setProgress","consecutiveErrorCount","setConsecutiveErrorCount","timeoutIdRef","navLock","useNavLock","dispatch","pollJob","onPollSuccess","onPollError","currentProgress","status","BatchJobStatus","window","setTimeout","navLockId","unlock","params","jobId","keys","request","statusCompleteAppLink","onStatusCompleted","onCompleteJob","current","xhr","clearTimeout","currentVal","processedItems","RosteringRequests","getRostering","url","getSyncList","queryParams","cursor","order","jobStatus","statuses","push","createJob","success","error","invalidationKeys","getJobSummary","getSyncScheduleSettings","integrationId","updateScheduleSetting","always","customerId","useBulkCheckboxManager","collection","idField","persistNamespace","initial","initialState","Map","items","forceUpdate","prevCollection","prevNamespace","reset","clear","isChecked","toString","get","isBulkChecked","length","every","setSelected","ids","forEach","set","i","join","preselectedIds","onToggleBulk","setValue","onToggleItem","nextItemState","getSelected","from","bulkChecked","deselectAll","hasSomeSelections","getSelectedCount","size","getMap","useLockContentWidth","useCanAccessSettings","requiredPermissions","hasPermissions","settingsGroups","currentRoute","application","some","group","modules","settingsModule","action","SettingsLayout","canAccess","replace","breadcrumbs","heading","headingButton","description","children","NoResultsEmptyState","EmptyState","src","imageCdnUrl","PartialRow","PartialHeader","PartialSyncJobsTable","PartialSyncJobsList","BulkJobAccordionHelper","getCellStyle","width","flex","getColumnCellWidth","column","getColumnCellStyle","SyncStatusBadge","baseClass","getClassName","getName","ScheduledSyncJobItem","style","DateHelper","BulkJobsAccordionItem","forceExpand","job","isExpanded","setIsExpanded","isDisabled","disableExpand","s","e","stopPropagation","Checkbox","checked","onChange","onToggleCheckbox","columns","render","renderClassName","tableSize","jobDetailsComponent","BulkJobsFilters","SearchFilters","mainFilters","filters","hideHeading","hideDivider","constantIndices","BulkJobsAccordion","showExportSpinner","setShowExportSpinner","CheckboxHelper","jobs","alerts","containerClassName","indeterminate","SpinnerButton","selectedIds","onClickExport","then","disabled","showSpinner","header","headerClassName","pinnedComponent","onPollJob","pagination","cursors","Pagination","ContextService","buttonVariant","SyncJobPolling","onCompleted","Spinner","as","animation","SyncJobSummary","summary","setSummary","isFetchingSummary","setIsFetchingSummary","getCategoryList","bgColor","icon","displayedSummaryKeys","Object","filter","k","S","result","SyncJobDetails","canExport","IconButton","getContent","IN_PROGRESS_GROUP","SyncJobsAccordion","default","rosterSource","metadata","source","HardCoded","DevError","iconUrl","alt","dateCreated","submittedByClickView","SvgContainer2","ClickViewAvatar","submitterName","Avatar","initials","UserHelper","split","renderSubmiter","DistrictRosteringEmptyState","ImageUrls","NoSyncJobsEmptyState","onStartFullSync","text","RosteringSyncListView","config","ConfigRequests","currentUser","UserRequests","rostering","dataLoaded","hasCompleted","fetchAsync","onSuccess","onError","JobRequests","jobIds","useSetPageMetadata","showTabAndButton","useSyncRostering","syncNow","fullSync","onFullSync","PermissionName","RequiresSetUpEmptyState","nextScheduled","href","newTab","alert","message","appLinkText","appLinkClassName","targetMasterId","targetMasterType","dataType","B","getPercentage","min","max","round","renderProgressBar","label","visuallyHidden","striped","animated","bsPrefix","isChild","rest","wrapperProps","child","cloneElement","displayName"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[7234],{27572:(e,t,n)=>{n.d(t,{U:()=>u});var a=n(32735),r=n(91967),i=n(86348),o=n(68626),s=n(79967),l=n(80143),c=n(38129);var u=a.memo((function(e){var t,n=e.data,u=e.context,d=e.thumbnailSize,m=e.preloadImage,v=e.presentationAudiences,p=null===(t=null==n?void 0:n.subjectPresentationAudiences)||void 0===t?void 0:t.data,f=(0,l.n)(p,v),h=(0,s.k)(),y="JSM4l";return u.type===c.l9.LargeRow&&(y="YYpNz"),a.createElement("div",{className:"px-1 flex-shrink-0 position-relative ".concat(y)},a.createElement(i.u,{video:e.data,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,hideTitle:e.hideTitle,showVideoGuidance:e.showVideoGuidance,type:e.preventPopout||h.xs?"static":"popout",textPosition:o.z.Below,appLink:e.getAppLink(n),imageOptions:{size:d},preload:m,audience:f,hideRating:!!f,hideDuration:!1,onClickRemove:r.q.isFunction(e.onClickRemoveItem)&&function(){return e.onClickRemoveItem(n.id,n.name)},removeButtonTooltip:e.removeButtonTooltip,commonVideoProps:e.commonVideoProps}))}))},39902:(e,t,n)=>{n.d(t,{F:()=>v,f:()=>m});var a=n(32735),r=n(20354),i=n(75896);function o(e){return function(e){if(Array.isArray(e))return l(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||s(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(e,t){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}}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}function c(e){return c="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},c(e)}function u(e,t,n){return(t=function(e){var t=function(e){if("object"!=c(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=c(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==c(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=i.m.chunk(e,d).map((function(e){return t(i.m.uniq(e))})),a=r.a.useBasicFetchAll(n),o=i.m.flatten(a.data),s=a.data.length?o.reduce((function(e,t){return Object.assign(Object.assign({},e),u({},t.id,t))}),{}):null;return{itemsArr:o,items:s,isFetching:a.isFetching}}function v(e,t,n){var l,m,v,p,f=n||function(e){return"object"===c(e)?e.id:e},h=a.useRef(new Set),y=(v=a.useState([]),p=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 a,r,i,o,s=[],l=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=i.call(n)).done)&&(s.push(a.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,p)||s(v,p)||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];a.useEffect((function(){if(null==e?void 0:e.length){var n=[];e.forEach((function(e){var t=f(e);h.current.has(t)||(n.push(e),h.current.add(t))})),n.length&&b((function(e){return[].concat(o(e),o(i.m.chunk(n,d).map(t)))}))}}),[null==e?void 0:e.length]);var C=r.a.useBasicFetchAll(g),P=i.m.flatten(C.data),A=C.data.length?P.reduce((function(e,t){return Object.assign(Object.assign({},e),u({},f(t),t))}),{}):null;return{hasFirstRequestCompleted:!!(null===(m=null===(l=C.responses)||void 0===l?void 0:l[0])||void 0===m?void 0:m.hasCompleted),itemsArr:P,items:A,isFetching:C.isFetching}}},57234:(e,t,n)=>{n.r(t),n.d(t,{PopupPluginView:()=>Z});var a=n(32735),r=n(43823),i=n(95846),o=n(81886),s=n(23481),l=n(20354),c=n(65858),u=n(4201),d=n(11518),m=n(27572),v=n(16714),p=n(58704),f=n(89454),h=n(63419),y=n(98064),g=n(31949),b=n(35286),C=n(22902),P=n(79612),A=n(37802),L=n(38129),S=n(13126),k=n(31908),w=n(14070),E=n(97291),T=n(58321),V=n(86698),F=n(23737),N=n(22490),M=n(28400),I=n(31549),j=n(15611),O=n(12528),x=n(83914),D=n(54610),U=n(67453),G=n(35223),R=n(71750),B=n(98073);const H={leftNavIcon:"ssG3i"};var W=s.T.encloseNamespace("default.popupPlugin");function z(e){return a.createElement("li",{className:"col-6 mb-3"},a.createElement(j.F,{appLink:e.appLink,className:"border rounded-3 d-flex align-items-center\n justify-content-center flex-column text-decoration-none h-100 py-3 px-1 text-center"},a.createElement("div",{className:"".concat(H.leftNavIcon," ").concat(e.iconClassName," mx-auto mb-3")},a.createElement(O.f,{imageUrl:U.j.createUrl(e.imageUrl,{size:D.h2.Small}),svgName:e.svgName,svgSize:x.S.Large})),a.createElement("div",{className:"h6"},e.name)))}function Y(e){var t=e.hasPermissions,n=e.moviesAndTvDashboard,r=e.libraries;function i(n){switch(n){case R.P.StudentFeed:return t(v.C.StudentExperience)&&e.hasClassrooms;case R.P.Discover:return t(v.C.ViewDiscover);case R.P.MoviesAndTv:return t(v.C.ViewMoviesTv);case R.P.Libraries:return!!(null==r?void 0:r.length)&&(!t(v.C.StudentExperience)||t(v.C.ViewLibraries));case R.P.Classrooms:return t(v.C.ViewClassrooms);case R.P.MyShares:return t(v.C.ViewMyShares)&&e.hasShareFlowV2;default:return!0}}return a.createElement("ul",{className:"list-unstyled row row-cols-md-5"},i(R.P.StudentFeed)&&a.createElement(z,{id:R.P.StudentFeed,appLink:B.T[R.P.StudentFeed].appLink,name:W("home"),iconClassName:"bg-purple",svgName:G.vn.House}),i(R.P.Discover)&&a.createElement(z,{id:R.P.Discover,appLink:B.T[R.P.Discover].appLink,name:W("discover"),iconClassName:"bg-blue",svgName:G.vn.Compass}),i(R.P.MoviesAndTv)&&!!n&&a.createElement(z,{id:R.P.MoviesAndTv,appLink:B.T[R.P.MoviesAndTv].appLink,name:W("moviesAndTv"),iconClassName:"bg-indigo",svgName:G.vn.Popcorn}),a.createElement(z,{id:R.P.Playlists,appLink:B.T[R.P.Playlists].appLink,name:W("playlists"),iconClassName:"bg-green",svgName:G.vn.Playlist}),a.createElement(z,{id:R.P.MyVideos,appLink:B.T[R.P.MyVideos].appLink,name:W("myVideos"),iconClassName:"bg-orange",svgName:G.vn.Video}),i(R.P.MyShares)&&a.createElement(z,{id:R.P.MyShares,appLink:B.T[R.P.MyShares].appLink,name:W("myShares"),iconClassName:"bg-ultramarine",svgName:G.vn.Share}),i(R.P.Libraries)&&I.g.sort(r).map((function(e,t){var n,r,i,o;return a.createElement(z,{key:t,id:R.P.Library,name:e.name,appLink:Object.assign(Object.assign({},B.T[R.P.Library].appLink),{args:[e.id,M.m.slugify(e.name)]}),iconClassName:"bg-teal",imageUrl:null===(r=null===(n=e.owner)||void 0===n?void 0:n.logo)||void 0===r?void 0:r.url,svgName:!(null===(o=null===(i=e.owner)||void 0===i?void 0:i.logo)||void 0===o?void 0:o.url)&&G.vn.Library})})))}var _=n(1575),q=n(39902),$=n(97816),Q=n(87821);function J(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var K=s.T.encloseNamespace("default.popupPlugin");function Z(){var e,t=(0,u.of)().focusSearchBar,n=(0,A.r)(null).hasNewSearch;(0,P.M)({title:K("title")});var s=(0,V.y)().activePresentation,M=(0,C.T)(),I=M.hasPermissions,j=M.isLoaded,O=(0,A.r)(null),x=O.hasShareFlowV2,D=O.hasClassrooms,U=(0,T.U)({locationContext:c.LZ.VideoThumbnail}),G=U.commonVideoProps,R=U.hasCommonVideoPropsCompleted,B=l.a.useBasicFetch(g.N.currentUser()),H=l.a.useBasicFetch(s&&f.O.audiencesByPresentationId(s.id)),W=function(){var e,t,n,r=l.a.useBasicFetch(Q.p.userVideoHistory()),i=(0,q.f)(null!==(n=null===(t=null===(e=r.data)||void 0===e?void 0:e.data)||void 0===t?void 0:t.map((function(e){return e.videoId})))&&void 0!==n?n:[],_.R.watchHistoryVideos),o=a.useMemo((function(){var e,t,n,a=new Map;return null===(t=null===(e=r.data)||void 0===e?void 0:e.data)||void 0===t||t.forEach((function(e){var t;if(!a.has(e.videoId)){var n=null===(t=i.items)||void 0===t?void 0:t[e.videoId];n&&a.set(e.videoId,n)}})),function(e){if(Array.isArray(e))return J(e)}(n=a.values())||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(n)||function(e,t){if(e){if("string"==typeof e)return J(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)?J(e,t):void 0}}(n)||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.")}()}),[i.items,r.data]);return(0,$.V)(o),{data:o,hasCompleted:!i.isFetching}}(),z=l.a.useBasicFetch(B.data&&h.P.getFavourites(B.data.id)),Z=l.a.useBasicFetch(I(v.C.ViewLibraries)&&y.D.domainLibraries(["customLibrary","sharedLibrary"])),X=(0,F.y)({targetType:L.ku.MoviesAndTv,queryParams:{}}).dashboard;return l.a.useBasicFetch(!!(null===(e=Z.data)||void 0===e?void 0:e.length)&&y.D.librariesWithOwnerLogos(Z.data.map((function(e){return e.id})))),(0,b.L)(i.G.SHELL,o.Q.Vy.ROUTE,(function(e){o.Q.C$.getHref(e)&&(S.e.enableNav(),n||r.Radio.channel(i.G.SHELL).once("routing:end",t))})),X.hasCompleted&&j&&(!I(v.C.ViewLibraries)||Z.hasCompleted)&&R?a.createElement("div",{className:"px-4"},a.createElement(Y,{hasPermissions:I,moviesAndTvDashboard:X.data,libraries:Z.data,hasShareFlowV2:x,hasClassrooms:D}),W.hasCompleted?a.createElement("div",{className:"mb-3"},a.createElement(d.kM,{name:K("recentlyWatched"),collection:W.data||[],contents:p.z.Videos,childComponent:m.U,extraChildComponentProps:{presentationAudiences:H.data,showVideoGuidance:k.M.showVideoGuidance(I),onClickRemoveItem:null,commonVideoProps:G},getChildAppLink:function(e){var t;return N.W.getAppLink(e,{includeContext:null===(t=B.data)||void 0===t?void 0:t.isAuthenticated})},appLink:{application:E.O.WATCH_HISTORY,action:w.e.WatchHistory.HOME},prefetched:!0})):a.createElement("div",{className:"mb-3"},a.createElement(d.j7,null)),z.hasCompleted?a.createElement(d.kM,{name:K("favourites"),collection:z.data.data||[],contents:p.z.Videos,childComponent:m.U,extraChildComponentProps:{presentationAudiences:H.data,showVideoGuidance:k.M.showVideoGuidance(I),onClickRemoveItem:null,commonVideoProps:G},getChildAppLink:function(e){var t;return N.W.getAppLink(e,{includeContext:null===(t=B.data)||void 0===t?void 0:t.isAuthenticated})},appLink:{application:E.O.DEFAULT,action:w.e.MyFavourites.MY_FAVOURITES},prefetched:!0}):a.createElement(d.j7,null)):a.createElement(a.Fragment,null)}},87821:(e,t,n)=>{n.d(t,{p:()=>o});var a=n(99940),r=n(110);function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var o={userVideoHistory:function(e,t,n,a){var i="video:history",o="{gateway}/v1/users/me/watch-history";return e&&(i+=":".concat(e),o+="?cursor=".concat(e)),{key:i,url:o,formatData:function(e){return{data:e.data.map((function(e){var t=r.O.format(e.lastTimeWatched),n=r.O.format(t,"YYYY-MM-DD");return Object.assign(Object.assign({},e),{lastTimeWatched:t,lastDateWatched:n})})),pagination:e.pagination}},success:t,error:n,always:a}},videoHistory:function(e,t,n,a,r){var i=e.sort().map((function(e){return"videoId=".concat(e)}));return{key:"video:history:videos:".concat(i.join("&")),url:"{gateway}/v1/videos/history?".concat(i.join("&")),normalizeOptions:{namespace:t},formatData:function(e){return(null==e?void 0:e.length)?e.map((function(e){return{id:e.videoId,lastProgressPoint:e.lastProgressPoint}})):e},success:n,error:a,always:r}},removeFromHistory:function(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return{url:"{gateway}/v1/users/me/videos/".concat(e,"/watch-history"),key:"remove:video:history:".concat(e),type:a.k.DELETE,invalidationKeys:["video:history"].concat((t=n,function(e){if(Array.isArray(e))return i(e)}(t)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(t)||function(e,t){if(e){if("string"==typeof e)return i(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)?i(e,t):void 0}}(t)||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.")}()))}}}},58321:(e,t,n)=>{n.d(t,{U:()=>p});var a=n(20354),r=n(16714),i=n(39151),o=n(1666),s=n(31949),l=n(22902),c=n(37802),u=n(22490),d=n(82431),m=n(46390),v=n(27638);function p(e){var t,n,p,f=e||{},h=f.locationContext,y=f.mtv,g=f.flightNamespace,b=f.sharedPlaylist,C=(0,m.G)().isPlugin,P=(0,v.u)(h,g),A=P.setFavourite,L=P.canFavourite,S=(0,c.r)(null),k=S.hasTopicDirectories,w=S.isLoadingSettings,E=(0,l.T)(),T=E.hasPermissions,V=E.isLoaded,F=T(r.C.StudentExperience),N=a.a.useBasicFetch(i.L.config()),M=a.a.useBasicFetch(s.N.currentUser()),I=a.a.useBasicFetch((null===(t=M.data)||void 0===t?void 0:t.isAuthenticated)&&o.h.yearGroups(M.data.customerId));return{hasCommonVideoPropsCompleted:!w&&V&&N.hasCompleted&&M.hasCompleted&&(!(null===(n=M.data)||void 0===n?void 0:n.isAuthenticated)||I.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:C,canFavourite:L,setFavourite:A,imageCdnUrl:null===(p=N.data)||void 0===p?void 0:p.imageCdnUrl,yearGroups:I.data,getClassroomGuideAppLink:u.W.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:u.W.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:u.W.getResourceGuidanceAppLink,showNewVideoIndicator:k,companyLogoFallbackUrl:null,hasStudentExperience:F}}}},97816:(e,t,n)=>{n.d(t,{V:()=>o});var a=n(1575),r=n(39902),i=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&&(i.M.isVideo(e)||i.M.isClip(e))})):"data"in e?e.data.filter((function(e){return!!e&&(i.M.isVideo(e)||i.M.isClip(e))})):[]:[]}(e).map((function(e){return e.id}));(0,r.F)(n,(function(e){return a.R.videoMixinAssocs(e,t.flightNamespace)}))}}}]);
|
|
2
|
-
//# sourceMappingURL=7234-
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[7234],{27572:(e,t,n)=>{n.d(t,{U:()=>u});var a=n(32735),i=n(91967),r=n(86348),o=n(68626),s=n(79967),l=n(80143),c=n(38129);var u=a.memo((function(e){var t,n=e.data,u=e.context,d=e.thumbnailSize,m=e.preloadImage,p=e.presentationAudiences,v=null===(t=null==n?void 0:n.subjectPresentationAudiences)||void 0===t?void 0:t.data,f=(0,l.n)(v,p),h=(0,s.k)(),y="JSM4l";return u.type===c.l9.LargeRow&&(y="YYpNz"),a.createElement("div",{className:"px-1 flex-shrink-0 position-relative ".concat(y)},a.createElement(r.u,{video:e.data,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,hideTitle:e.hideTitle,showVideoGuidance:e.showVideoGuidance,type:e.preventPopout||h.xs?"static":"popout",textPosition:o.z.Below,appLink:e.getAppLink(n),imageOptions:{size:d},preload:m,audience:f,hideRating:!!f,hideDuration:!1,onClickRemove:i.q.isFunction(e.onClickRemoveItem)&&function(){return e.onClickRemoveItem(n.id,n.name)},removeButtonTooltip:e.removeButtonTooltip,commonVideoProps:e.commonVideoProps}))}))},39902:(e,t,n)=>{n.d(t,{F:()=>p,f:()=>m});var a=n(32735),i=n(20354),r=n(75896);function o(e){return function(e){if(Array.isArray(e))return l(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||s(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(e,t){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}}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}function c(e){return c="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},c(e)}function u(e,t,n){return(t=function(e){var t=function(e){if("object"!=c(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=c(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==c(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=r.m.chunk(e,d).map((function(e){return t(r.m.uniq(e))})),a=i.a.useBasicFetchAll(n),o=r.m.flatten(a.data),s=a.data.length?o.reduce((function(e,t){return Object.assign(Object.assign({},e),u({},t.id,t))}),{}):null;return{itemsArr:o,items:s,isFetching:a.isFetching}}function p(e,t,n){var l,m,p,v,f=n||function(e){return"object"===c(e)?e.id:e},h=a.useRef(new Set),y=(p=a.useState([]),v=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 a,i,r,o,s=[],l=!0,c=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=r.call(n)).done)&&(s.push(a.value),s.length!==t);l=!0);}catch(e){c=!0,i=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw i}}return s}}(p,v)||s(p,v)||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];a.useEffect((function(){if(null==e?void 0:e.length){var n=[];e.forEach((function(e){var t=f(e);h.current.has(t)||(n.push(e),h.current.add(t))})),n.length&&b((function(e){return[].concat(o(e),o(r.m.chunk(n,d).map(t)))}))}}),[null==e?void 0:e.length]);var C=i.a.useBasicFetchAll(g),P=r.m.flatten(C.data),A=C.data.length?P.reduce((function(e,t){return Object.assign(Object.assign({},e),u({},f(t),t))}),{}):null;return{hasFirstRequestCompleted:!!(null===(m=null===(l=C.responses)||void 0===l?void 0:l[0])||void 0===m?void 0:m.hasCompleted),itemsArr:P,items:A,isFetching:C.isFetching}}},57234:(e,t,n)=>{n.r(t),n.d(t,{PopupPluginView:()=>Z});var a=n(32735),i=n(43823),r=n(95846),o=n(81886),s=n(23481),l=n(20354),c=n(65858),u=n(4201),d=n(11518),m=n(27572),p=n(16714),v=n(58704),f=n(89454),h=n(63419),y=n(98064),g=n(31949),b=n(35286),C=n(22902),P=n(79612),A=n(37802),L=n(38129),S=n(13126),k=n(31908),w=n(14070),E=n(97291),T=n(58321),V=n(86698),F=n(23737),N=n(22490),M=n(28400),I=n(31549),j=n(15611),O=n(12528),x=n(83914),D=n(54610),U=n(67453),G=n(35223),R=n(71750),B=n(98073);const H={leftNavIcon:"ssG3i"};var W=s.T.encloseNamespace("default.popupPlugin");function z(e){return a.createElement("li",{className:"col-6 mb-3"},a.createElement(j.F,{appLink:e.appLink,className:"border rounded-3 d-flex align-items-center\n justify-content-center flex-column text-decoration-none h-100 py-3 px-1 text-center"},a.createElement("div",{className:"".concat(H.leftNavIcon," ").concat(e.iconClassName," mx-auto mb-3")},a.createElement(O.f,{imageUrl:U.j.createUrl(e.imageUrl,{size:D.h2.Small}),svgName:e.svgName,svgSize:x.S.Large})),a.createElement("div",{className:"h6"},e.name)))}function Y(e){var t=e.hasPermissions,n=e.moviesAndTvDashboard,i=e.libraries;function r(n){switch(n){case R.P.StudentFeed:return t(p.C.StudentExperience)&&e.hasClassrooms;case R.P.Discover:return t(p.C.ViewDiscover);case R.P.MoviesAndTv:return t(p.C.ViewMoviesTv);case R.P.Libraries:return!!(null==i?void 0:i.length)&&(!t(p.C.StudentExperience)||t(p.C.ViewLibraries));case R.P.Classrooms:return t(p.C.ViewClassrooms);case R.P.MyShares:return t(p.C.ViewMyShares)&&e.hasShareFlowV2;default:return!0}}return a.createElement("ul",{className:"list-unstyled row row-cols-md-5"},r(R.P.StudentFeed)&&a.createElement(z,{id:R.P.StudentFeed,appLink:B.T[R.P.StudentFeed].appLink,name:W("home"),iconClassName:"bg-purple",svgName:G.vn.House}),r(R.P.Discover)&&a.createElement(z,{id:R.P.Discover,appLink:B.T[R.P.Discover].appLink,name:W("discover"),iconClassName:"bg-blue",svgName:G.vn.Compass}),r(R.P.MoviesAndTv)&&!!n&&a.createElement(z,{id:R.P.MoviesAndTv,appLink:B.T[R.P.MoviesAndTv].appLink,name:W("moviesAndTv"),iconClassName:"bg-indigo",svgName:G.vn.Popcorn}),a.createElement(z,{id:R.P.Playlists,appLink:B.T[R.P.Playlists].appLink,name:W("playlists"),iconClassName:"bg-green",svgName:G.vn.Playlist}),a.createElement(z,{id:R.P.MyVideos,appLink:B.T[R.P.MyVideos].appLink,name:W("myVideos"),iconClassName:"bg-orange",svgName:G.vn.Video}),r(R.P.MyShares)&&a.createElement(z,{id:R.P.MyShares,appLink:B.T[R.P.MyShares].appLink,name:W("myShares"),iconClassName:"bg-ultramarine",svgName:G.vn.Share}),r(R.P.Libraries)&&I.g.sort(i).map((function(e,t){var n,i,r,o;return a.createElement(z,{key:t,id:R.P.Library,name:e.name,appLink:Object.assign(Object.assign({},B.T[R.P.Library].appLink),{args:[e.id,M.m.slugify(e.name)]}),iconClassName:"bg-teal",imageUrl:null===(i=null===(n=e.owner)||void 0===n?void 0:n.logo)||void 0===i?void 0:i.url,svgName:!(null===(o=null===(r=e.owner)||void 0===r?void 0:r.logo)||void 0===o?void 0:o.url)&&G.vn.Library})})))}var _=n(1575),q=n(39902),$=n(97816),Q=n(87821);function J(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var K=s.T.encloseNamespace("default.popupPlugin");function Z(){var e,t=(0,u.of)().focusSearchBar,n=(0,A.r)(null).hasNewSearch;(0,P.M)({title:K("title")});var s=(0,V.y)().activePresentation,M=(0,C.T)(),I=M.hasPermissions,j=M.isLoaded,O=(0,A.r)(null),x=O.hasShareFlowV2,D=O.hasClassrooms,U=(0,T.U)({locationContext:c.LZ.VideoThumbnail}),G=U.commonVideoProps,R=U.hasCommonVideoPropsCompleted,B=l.a.useBasicFetch(g.N.currentUser()),H=l.a.useBasicFetch(s&&f.O.audiencesByPresentationId(s.id)),W=function(){var e,t,n,i=l.a.useBasicFetch(Q.p.userVideoHistory()),r=(0,q.f)(null!==(n=null===(t=null===(e=i.data)||void 0===e?void 0:e.data)||void 0===t?void 0:t.map((function(e){return e.videoId})))&&void 0!==n?n:[],_.R.watchHistoryVideos),o=a.useMemo((function(){var e,t,n,a=new Map;return null===(t=null===(e=i.data)||void 0===e?void 0:e.data)||void 0===t||t.forEach((function(e){var t;if(!a.has(e.videoId)){var n=null===(t=r.items)||void 0===t?void 0:t[e.videoId];n&&a.set(e.videoId,n)}})),function(e){if(Array.isArray(e))return J(e)}(n=a.values())||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(n)||function(e,t){if(e){if("string"==typeof e)return J(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)?J(e,t):void 0}}(n)||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.")}()}),[r.items,i.data]);return(0,$.V)(o),{data:o,hasCompleted:!r.isFetching}}(),z=l.a.useBasicFetch(B.data&&h.P.getFavourites(B.data.id)),Z=l.a.useBasicFetch(I(p.C.ViewLibraries)&&y.D.domainLibraries(["customLibrary","sharedLibrary"])),X=(0,F.y)({targetType:L.ku.MoviesAndTv,queryParams:{}}).dashboard;return l.a.useBasicFetch(!!(null===(e=Z.data)||void 0===e?void 0:e.length)&&y.D.librariesWithOwnerLogos(Z.data.map((function(e){return e.id})))),(0,b.L)(r.G.SHELL,o.Q.Vy.ROUTE,(function(e){o.Q.C$.getHref(e)&&(S.e.enableNav(),n||i.Radio.channel(r.G.SHELL).once("routing:end",t))})),X.hasCompleted&&j&&(!I(p.C.ViewLibraries)||Z.hasCompleted)&&R?a.createElement("div",{className:"px-4"},a.createElement(Y,{hasPermissions:I,moviesAndTvDashboard:X.data,libraries:Z.data,hasShareFlowV2:x,hasClassrooms:D}),W.hasCompleted?a.createElement("div",{className:"mb-3"},a.createElement(d.kM,{name:K("recentlyWatched"),collection:W.data||[],contents:v.z.Videos,childComponent:m.U,extraChildComponentProps:{presentationAudiences:H.data,showVideoGuidance:k.M.showVideoGuidance(I),onClickRemoveItem:null,commonVideoProps:G},getChildAppLink:function(e){var t;return N.W.getAppLink(e,{includeContext:null===(t=B.data)||void 0===t?void 0:t.isAuthenticated})},appLink:{application:E.O.WATCH_HISTORY,action:w.e.WatchHistory.HOME},prefetched:!0})):a.createElement("div",{className:"mb-3"},a.createElement(d.j7,null)),z.hasCompleted?a.createElement(d.kM,{name:K("favourites"),collection:z.data.data||[],contents:v.z.Videos,childComponent:m.U,extraChildComponentProps:{presentationAudiences:H.data,showVideoGuidance:k.M.showVideoGuidance(I),onClickRemoveItem:null,commonVideoProps:G},getChildAppLink:function(e){var t;return N.W.getAppLink(e,{includeContext:null===(t=B.data)||void 0===t?void 0:t.isAuthenticated})},appLink:{application:E.O.DEFAULT,action:w.e.MyFavourites.MY_FAVOURITES},prefetched:!0}):a.createElement(d.j7,null)):a.createElement(a.Fragment,null)}},87821:(e,t,n)=>{n.d(t,{p:()=>o});var a=n(99940),i=n(110);function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var o={userVideoHistory:function(e,t,n,a){var r="video:history",o="{gateway}/v1/users/me/watch-history";return e&&(r+=":".concat(e),o+="?cursor=".concat(e)),{key:r,url:o,formatData:function(e){return{data:e.data.map((function(e){var t=i.O.format(e.lastTimeWatched),n=i.O.format(t,"YYYY-MM-DD");return Object.assign(Object.assign({},e),{lastTimeWatched:t,lastDateWatched:n})})),pagination:e.pagination}},success:t,error:n,always:a}},videoHistory:function(e,t,n,a,i){var r=e.sort().map((function(e){return"videoId=".concat(e)}));return{key:"video:history:videos:".concat(r.join("&")),url:"{gateway}/v1/videos/history?".concat(r.join("&")),normalizeOptions:{namespace:t},formatData:function(e){return(null==e?void 0:e.length)?e.map((function(e){return{id:e.videoId,lastProgressPoint:e.lastProgressPoint}})):e},success:n,error:a,always:i}},removeFromHistory:function(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return{url:"{gateway}/v1/users/me/videos/".concat(e,"/watch-history"),key:"remove:video:history:".concat(e),type:a.k.DELETE,invalidationKeys:["video:history"].concat((t=n,function(e){if(Array.isArray(e))return r(e)}(t)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(t)||function(e,t){if(e){if("string"==typeof e)return r(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)?r(e,t):void 0}}(t)||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.")}()))}}}},58321:(e,t,n)=>{n.d(t,{U:()=>v});var a=n(20354),i=n(16714),r=n(39151),o=n(1666),s=n(31949),l=n(22902),c=n(37802),u=n(22490),d=n(82431),m=n(46390),p=n(27638);function v(e){var t,n,v,f=e||{},h=f.locationContext,y=f.mtv,g=f.flightNamespace,b=f.sharedPlaylist,C=(0,m.G)(),P=C.isPlugin,A=C.params,L=(0,p.u)(h,g),S=L.setFavourite,k=L.canFavourite,w=(0,c.r)(null),E=w.hasTopicDirectories,T=w.isLoadingSettings,V=(0,l.T)(),F=V.hasPermissions,N=V.isLoaded,M=F(i.C.StudentExperience),I=a.a.useBasicFetch(r.L.config()),j=a.a.useBasicFetch(s.N.currentUser()),O=a.a.useBasicFetch((null===(t=j.data)||void 0===t?void 0:t.isAuthenticated)&&o.h.yearGroups(j.data.customerId));return{hasCommonVideoPropsCompleted:!T&&N&&I.hasCompleted&&j.hasCompleted&&(!(null===(n=j.data)||void 0===n?void 0:n.isAuthenticated)||O.hasCompleted),commonVideoProps:{subTextType:"series",getSubTextAppLink:function(e){var t;return"series"in e?b&&!(null===(t=j.data)||void 0===t?void 0:t.isAuthenticated)?null:d.j.getSeriesAppLink(e.series,{mtv:y}):null},isPlugin:P,isPluginPopup:!!(null==A?void 0:A.popup),canFavourite:k,setFavourite:S,imageCdnUrl:null===(v=I.data)||void 0===v?void 0:v.imageCdnUrl,yearGroups:O.data,getClassroomGuideAppLink:u.W.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:u.W.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:u.W.getResourceGuidanceAppLink,showNewVideoIndicator:E,companyLogoFallbackUrl:null,hasStudentExperience:M}}}},97816:(e,t,n)=>{n.d(t,{V:()=>o});var a=n(1575),i=n(39902),r=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&&(r.M.isVideo(e)||r.M.isClip(e))})):"data"in e?e.data.filter((function(e){return!!e&&(r.M.isVideo(e)||r.M.isClip(e))})):[]:[]}(e).map((function(e){return e.id}));(0,i.F)(n,(function(e){return a.R.videoMixinAssocs(e,t.flightNamespace)}))}}}]);
|
|
2
|
+
//# sourceMappingURL=7234-bcddfe2112-lite.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/7234-bcddfe2112-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/widgets/items/popout-video-widget-item/PopoutVideoWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/items/popout-video-widget-item/popout-video-widget-item.scss","file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/projects/lite/src/apps/default/views/popup-plugin/components/nav-tiles.scss","file:///app/packages/projects/lite/src/apps/default/views/popup-plugin/components/Navtiles.tsx","file:///app/packages/projects/lite/src/apps/default/views/popup-plugin/PopupPluginView.tsx","file:///app/packages/projects/lite/src/apps/default/views/popup-plugin/hooks/useGetVideoHistoryVideos.ts","file:///app/packages/projects/lite/src/apps/watch-history/flight-requests/VideoHistoryRequests.ts","file:///app/packages/projects/lite/src/shared/hooks/useCommonVideoProps.ts","file:///app/packages/projects/lite/src/shared/hooks/useVideoMixin.ts"],"sourcesContent":["import React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { PresentationAudience, VideoTypes, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport styles from './popout-video-widget-item.scss';\n\nexport interface PopoutVideoWidgetItemProps extends FixedWidgetItemProps<VideoTypes> {\n presentationAudiences: PresentationAudience[];\n showVideoGuidance: boolean;\n hideTitle?: boolean;\n hideSeries?: boolean;\n onClickRemoveItem: (videoId: string, videoName: string) => void;\n removeButtonTooltip?: string;\n preventPopout?: boolean;\n showNewVideoIndicator?: boolean;\n commonVideoProps: CommonVideoProps;\n}\n\nexport const PopoutVideoWidgetItem = React.memo(function(props: PopoutVideoWidgetItemProps): JSX.Element {\n const { data: video, context, thumbnailSize, preloadImage, presentationAudiences } = props;\n \n const videoAudiences = video?.subjectPresentationAudiences?.data;\n const mergedAudience = useMergeAudiences(videoAudiences, presentationAudiences);\n\n const breakpoints = useBreakpoints();\n\n let width = styles.rowWidth;\n\n if (context.type === WidgetType.LargeRow)\n width = styles.largeRowWidth;\n\n return (\n <div className={`px-1 flex-shrink-0 position-relative ${width}`}>\n <VideoThumbnail\n video={props.data}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n hideTitle={props.hideTitle}\n showVideoGuidance={props.showVideoGuidance}\n type={props.preventPopout || breakpoints.xs ? 'static' : 'popout'}\n textPosition={ThumbnailTextPosition.Below}\n appLink={props.getAppLink(video)}\n imageOptions={{ size: thumbnailSize }}\n preload={preloadImage}\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n hideDuration={false}\n onClickRemove={FunctionHelper.isFunction(props.onClickRemoveItem)\n && (() => props.onClickRemoveItem(video.id, video.name))}\n removeButtonTooltip={props.removeButtonTooltip}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"rowWidth\":\"JSM4l\",\"largeRowWidth\":\"YYpNz\"};","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}","// extracted by mini-css-extract-plugin\nexport default {\"leftNavIcon\":\"ssG3i\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { LibraryHelper } from 'libs/shared/apps/libraries/utils/LibraryHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { CuratedDashboard, Library } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { LeftNavId } from 'shared/enums/LeftNavId';\nimport { LeftNavConfig } from 'shared/views/left-nav/LeftNavConfig';\n\nimport styles from './nav-tiles.scss';\n\nconst namespace = 'default.popupPlugin';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface NavItemTileProps {\n id: LeftNavId;\n name: string;\n imageUrl?: string;\n iconClassName: string;\n svgName: string;\n appLink: Core.AppLink;\n}\n\nfunction NavItemTile(props: NavItemTileProps): JSX.Element {\n return (\n <li className='col-6 mb-3'>\n <AppLink\n appLink={props.appLink}\n className={`border rounded-3 d-flex align-items-center\n justify-content-center flex-column text-decoration-none h-100 py-3 px-1 text-center`}\n >\n <div className={`${styles.leftNavIcon} ${props.iconClassName} mx-auto mb-3`}>\n <IconCircle\n imageUrl={ImageHelper.createUrl(props.imageUrl, { size: ImageSize.Small })}\n svgName={props.svgName}\n svgSize={SvgContainerSize.Large}\n />\n </div>\n <div className='h6'>\n {props.name}\n </div>\n </AppLink>\n </li>\n );\n}\n\ninterface NavTilesProps {\n hasPermissions: HasPermissionsFunc;\n moviesAndTvDashboard: CuratedDashboard;\n libraries: Library[];\n hasShareFlowV2?: boolean;\n hasClassrooms?: boolean;\n}\n\nexport function NavTiles(props: NavTilesProps): JSX.Element {\n const { hasPermissions, moviesAndTvDashboard, libraries } = props;\n\n function shouldShowLibraries(): boolean {\n if (!libraries?.length)\n return false;\n\n if (!hasPermissions(PermissionName.StudentExperience))\n return true;\n\n return hasPermissions(PermissionName.ViewLibraries);\n }\n\n function showNavItem(leftNavId: LeftNavId) {\n switch (leftNavId) {\n case LeftNavId.StudentFeed: return hasPermissions(PermissionName.StudentExperience) && props.hasClassrooms;\n case LeftNavId.Discover: return hasPermissions(PermissionName.ViewDiscover);\n case LeftNavId.MoviesAndTv: return hasPermissions(PermissionName.ViewMoviesTv);\n case LeftNavId.Libraries: return shouldShowLibraries();\n case LeftNavId.Classrooms: return hasPermissions(PermissionName.ViewClassrooms);\n case LeftNavId.MyShares: return hasPermissions(PermissionName.ViewMyShares) && props.hasShareFlowV2;\n default: return true;\n }\n }\n\n return (\n <ul className='list-unstyled row row-cols-md-5'>\n {showNavItem(LeftNavId.StudentFeed) && (\n <NavItemTile\n id={LeftNavId.StudentFeed}\n appLink={LeftNavConfig[LeftNavId.StudentFeed].appLink}\n name={getPhrase('home')}\n iconClassName='bg-purple'\n svgName={cvSvgLibrary.House}\n />\n )}\n {showNavItem(LeftNavId.Discover) && (\n <NavItemTile\n id={LeftNavId.Discover}\n appLink={LeftNavConfig[LeftNavId.Discover].appLink}\n name={getPhrase('discover')}\n iconClassName='bg-blue'\n svgName={cvSvgLibrary.Compass}\n />\n )}\n {showNavItem(LeftNavId.MoviesAndTv) && !!moviesAndTvDashboard && (\n <NavItemTile\n id={LeftNavId.MoviesAndTv}\n appLink={LeftNavConfig[LeftNavId.MoviesAndTv].appLink}\n name={getPhrase('moviesAndTv')}\n iconClassName='bg-indigo'\n svgName={cvSvgLibrary.Popcorn}\n />\n )}\n <NavItemTile\n id={LeftNavId.Playlists}\n appLink={LeftNavConfig[LeftNavId.Playlists].appLink}\n name={getPhrase('playlists')}\n iconClassName='bg-green'\n svgName={cvSvgLibrary.Playlist}\n />\n <NavItemTile\n id={LeftNavId.MyVideos}\n appLink={LeftNavConfig[LeftNavId.MyVideos].appLink}\n name={getPhrase('myVideos')}\n iconClassName='bg-orange'\n svgName={cvSvgLibrary.Video}\n />\n {showNavItem(LeftNavId.MyShares) && (\n <NavItemTile\n id={LeftNavId.MyShares}\n appLink={LeftNavConfig[LeftNavId.MyShares].appLink}\n name={getPhrase('myShares')}\n iconClassName='bg-ultramarine'\n svgName={cvSvgLibrary.Share}\n />\n )}\n {showNavItem(LeftNavId.Libraries) && (\n LibraryHelper.sort(libraries).map((library, index) => (\n <NavItemTile\n key={index}\n id={LeftNavId.Library}\n name={library.name}\n appLink={{\n ...LeftNavConfig[LeftNavId.Library].appLink,\n args: [ library.id, TextHelper.slugify(library.name) ]\n }}\n iconClassName='bg-teal'\n imageUrl={library.owner?.logo?.url}\n svgName={!(library.owner?.logo?.url) && cvSvgLibrary.Library}\n />\n ))\n )}\n </ul>\n );\n}\n","import React from 'react';\nimport { Radio } from 'backbone';\n\nimport { CommonChannels } from 'libs/common/backbone/constants/CommonChannels';\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { useFocusSearchBar } from 'libs/shared/components/search-bar/SearchUtils';\nimport { FixedWidget, PartialFixedWidget } from 'libs/shared/components/widgets/fixed-widget';\nimport { PopoutVideoWidgetItem } from 'libs/shared/components/widgets/items/popout-video-widget-item/PopoutVideoWidgetItem';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { FavouriteRequests } from 'libs/shared/flight-requests/FavouriteRequests';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useListenOn } from 'libs/shared/hooks/UseListenOn';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { CurrentUser, DashboardTargetType, Library, PresentationAudience, VideoTypesCollection } from 'libs/shared/interfaces';\nimport { LayoutHelper } from 'libs/shared/utils/LayoutHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { useCommonVideoProps } from 'shared/hooks/useCommonVideoProps';\nimport { usePresentation } from 'shared/hooks/usePresentation';\nimport { useFetchCuratedDashboard } from 'shared/utils/DashboardHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { NavTiles } from 'apps/default/views/popup-plugin/components/Navtiles';\nimport { useGetVideoHistory } from 'apps/default/views/popup-plugin/hooks/useGetVideoHistoryVideos';\n\nconst namespace = 'default.popupPlugin';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\n\nexport function PopupPluginView(): JSX.Element {\n const { focusSearchBar } = useFocusSearchBar();\n const { hasNewSearch } = useSettings(null);\n\n useSetPageMetadata({ title: getPhrase('title') });\n\n /**\n * Required for video widgets\n */\n const { activePresentation } = usePresentation();\n const { hasPermissions, isLoaded } = usePermissions();\n const { hasShareFlowV2, hasClassrooms } = useSettings(null);\n const {\n commonVideoProps,\n hasCommonVideoPropsCompleted\n } = useCommonVideoProps({ locationContext: LocationContext.VideoThumbnail });\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n activePresentation &&\n AudienceRequests.audiencesByPresentationId(activePresentation.id)\n );\n\n /**\n * Watch history videos\n */\n const videoHistory = useGetVideoHistory();\n\n /**\n * Favourite videos\n */\n const favouriteVideos = Flight.useBasicFetch<VideoTypesCollection>(\n currentUser.data && FavouriteRequests.getFavourites(currentUser.data.id)\n );\n\n /**\n * Required for displaying our Nav item tiles.\n */\n const libraries = Flight.useBasicFetch<Library[]>(\n hasPermissions(PermissionName.ViewLibraries) &&\n LibraryRequests.domainLibraries([ 'customLibrary', 'sharedLibrary' ])\n );\n const {\n dashboard: moviesAndTvDashboard\n } = useFetchCuratedDashboard({\n targetType: DashboardTargetType.MoviesAndTv,\n queryParams: {}\n });\n Flight.useBasicFetch(!!libraries.data?.length &&\n LibraryRequests.librariesWithOwnerLogos(libraries.data.map(s => s.id)));\n\n useListenOn(CommonChannels.SHELL, Core.EventNames.ROUTE, appLink => {\n /**\n * Ignore applinks with no href. Like the embed popup - Sha\n */\n if (!Core.AppLinkHelper.getHref(appLink))\n return;\n\n /**\n * Enable the nav as we leave our popup view - Sha\n */\n LayoutHelper.enableNav();\n\n if (hasNewSearch)\n return;\n \n /**\n * Re-focus the search bar when the routing has ended.\n * We need to do this because the user may be mid typing, but the layout\n * re-render causes the search bar to lose focus - Sha\n */\n Radio.channel(CommonChannels.SHELL).once('routing:end', focusSearchBar);\n });\n\n const hasLoaded = (\n moviesAndTvDashboard.hasCompleted &&\n isLoaded &&\n (!hasPermissions(PermissionName.ViewLibraries) || libraries.hasCompleted) &&\n hasCommonVideoPropsCompleted\n );\n\n if (!hasLoaded)\n return <></>;\n\n return (\n <div className='px-4'>\n <NavTiles\n hasPermissions={hasPermissions}\n moviesAndTvDashboard={moviesAndTvDashboard.data}\n libraries={libraries.data}\n hasShareFlowV2={hasShareFlowV2}\n hasClassrooms={hasClassrooms}\n />\n\n {videoHistory.hasCompleted ?\n <div className='mb-3'>\n <FixedWidget\n name={getPhrase('recentlyWatched')}\n collection={videoHistory.data || []}\n contents={WidgetContents.Videos}\n childComponent={PopoutVideoWidgetItem}\n extraChildComponentProps={{\n presentationAudiences: audiences.data,\n showVideoGuidance: VideoHelper.showVideoGuidance(hasPermissions),\n onClickRemoveItem: null,\n commonVideoProps\n }}\n getChildAppLink={v =>\n VideoAppLinkHelper.getAppLink(v, { includeContext: currentUser.data?.isAuthenticated })}\n appLink={{\n application: AppChannels.WATCH_HISTORY,\n action: Actions.WatchHistory.HOME\n }}\n prefetched\n />\n </div> :\n <div className='mb-3'><PartialFixedWidget /></div>\n }\n\n {favouriteVideos.hasCompleted ?\n <FixedWidget\n name={getPhrase('favourites')}\n collection={favouriteVideos.data.data || []}\n contents={WidgetContents.Videos}\n childComponent={PopoutVideoWidgetItem}\n extraChildComponentProps={{\n presentationAudiences: audiences.data,\n showVideoGuidance: VideoHelper.showVideoGuidance(hasPermissions),\n onClickRemoveItem: null,\n commonVideoProps\n }}\n getChildAppLink={v =>\n VideoAppLinkHelper.getAppLink(v, { includeContext: currentUser.data?.isAuthenticated })}\n appLink={{\n application: AppChannels.DEFAULT,\n action: Actions.MyFavourites.MY_FAVOURITES\n }}\n prefetched\n /> :\n <PartialFixedWidget />\n }\n </div>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { VideoHistoryCollection, VideoTypes } from 'libs/shared/interfaces';\n\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\n\nimport { VideoHistoryRequests } from 'apps/watch-history/flight-requests/VideoHistoryRequests';\n\nexport function useGetVideoHistory() {\n const videoHistory = Flight.useBasicFetch<VideoHistoryCollection>(VideoHistoryRequests.userVideoHistory());\n\n const videosFetchResult = useBatchFetch<VideoTypes>(\n videoHistory.data?.data?.map(v => v.videoId) ?? [],\n VideoRequests.watchHistoryVideos\n );\n\n /**\n * We must do this to get the videos back into the correct order - Sha\n */\n const videoHistoryVideos = React.useMemo(() => {\n const videosMap = new Map<string, VideoTypes>();\n\n videoHistory.data?.data?.forEach(history => {\n if (videosMap.has(history.videoId))\n return;\n\n const video = videosFetchResult.items?.[history.videoId];\n\n if (video)\n videosMap.set(history.videoId, video);\n });\n\n return [...videosMap.values()];\n }, [ videosFetchResult.items, videoHistory.data ]);\n \n useVideoMixin(videoHistoryVideos);\n\n return {\n data: videoHistoryVideos,\n hasCompleted: !videosFetchResult.isFetching\n };\n}","\nimport { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { VideoHistoryCollection } from 'libs/shared/interfaces';\n\nexport const VideoHistoryRequests = {\n userVideoHistory(\n cursor?: string,\n success?: (data: HashObject) => void,\n error?: (Xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n let key = 'video:history';\n let url = `{gateway}/v1/users/me/watch-history`;\n\n if (cursor) {\n key += `:${cursor}`;\n url += `?cursor=${cursor}`;\n }\n\n return {\n key,\n url,\n formatData: (historyCollection: VideoHistoryCollection) => {\n return {\n data: historyCollection.data.map(historyData => {\n // Convert last watched times from UTC to local time\n const lastTimeWatchedLocal = DateHelper.format(historyData.lastTimeWatched);\n const lastDateWatchedLocal = DateHelper.format(lastTimeWatchedLocal, 'YYYY-MM-DD');\n\n return {\n ...historyData,\n lastTimeWatched: lastTimeWatchedLocal,\n lastDateWatched: lastDateWatchedLocal\n };\n }),\n pagination: historyCollection.pagination\n };\n },\n success,\n error,\n always\n };\n },\n\n videoHistory(\n ids: string[],\n namespace?: string,\n success?: (data: HashObject) => void,\n error?: (Xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n const params = ids.sort().map(i => `videoId=${i}`);\n\n return {\n key: `video:history:videos:${params.join('&')}`,\n url: `{gateway}/v1/videos/history?${params.join('&')}`,\n normalizeOptions: {\n namespace\n },\n formatData: (historyCollection: HashObject[]) => {\n if (!historyCollection?.length)\n return historyCollection;\n\n /**\n * Data is formatted to enable it to be merged with the existing video object in the store\n * Where we need to merge more history properties with the video object, map them below.\n */\n return historyCollection.map((watchHistory: HashObject) => ({\n id: watchHistory.videoId,\n lastProgressPoint: watchHistory.lastProgressPoint\n }));\n },\n success,\n error,\n always\n };\n },\n\n removeFromHistory(videoId: string, invalidationKeys: string[] = []): Flight.Request {\n return {\n url: `{gateway}/v1/users/me/videos/${videoId}/watch-history`,\n key: `remove:video:history:${videoId}`,\n type: HttpVerbs.DELETE,\n invalidationKeys: [\n 'video:history',\n ...invalidationKeys\n ]\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, params } = 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 isPluginPopup: !!params?.popup,\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 { 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}"],"names":["PopoutVideoWidgetItem","props","video","data","context","thumbnailSize","preloadImage","presentationAudiences","videoAudiences","subjectPresentationAudiences","mergedAudience","breakpoints","useBreakpoints","width","type","className","VideoThumbnail","analyticsData","analyticsOptions","hideTitle","showVideoGuidance","preventPopout","xs","textPosition","ThumbnailTextPosition","appLink","getAppLink","imageOptions","size","preload","audience","hideRating","hideDuration","onClickRemove","FunctionHelper","onClickRemoveItem","id","name","removeButtonTooltip","commonVideoProps","CHUNK_SIZE","useBatchFetch","itemIds","getRequest","requests","map","chunk","responses","itemsArr","items","length","reduce","acc","item","isFetching","useGrowingBatchFetch","objs","_getKey","getKey","obj","fetchedItems","Set","setRequests","unfetchedItems","forEach","key","current","has","push","add","r","hasFirstRequestCompleted","hasCompleted","getPhrase","LanguageService","NavItemTile","AppLink","iconClassName","IconCircle","imageUrl","ImageHelper","svgName","svgSize","SvgContainer","S","NavTiles","hasPermissions","moviesAndTvDashboard","libraries","showNavItem","leftNavId","LeftNavId","PermissionName","hasClassrooms","hasShareFlowV2","LeftNavConfig","LibraryHelper","library","index","args","TextHelper","owner","logo","url","PopupPluginView","focusSearchBar","hasNewSearch","useSettings","useSetPageMetadata","title","activePresentation","usePresentation","usePermissions","isLoaded","useCommonVideoProps","locationContext","hasCommonVideoPropsCompleted","currentUser","UserRequests","audiences","AudienceRequests","videoHistory","VideoHistoryRequests","videosFetchResult","v","videoId","VideoRequests","videoHistoryVideos","videosMap","Map","history","set","values","useVideoMixin","useGetVideoHistory","favouriteVideos","FavouriteRequests","LibraryRequests","targetType","queryParams","dashboard","s","CommonChannels","LayoutHelper","Radio","once","collection","contents","WidgetContents","childComponent","extraChildComponentProps","VideoHelper","getChildAppLink","VideoAppLinkHelper","includeContext","isAuthenticated","application","action","prefetched","userVideoHistory","cursor","success","error","always","formatData","historyCollection","historyData","lastTimeWatchedLocal","lastTimeWatched","lastDateWatchedLocal","lastDateWatched","pagination","ids","namespace","params","sort","i","join","normalizeOptions","watchHistory","lastProgressPoint","removeFromHistory","invalidationKeys","options","mtv","flightNamespace","sharedPlaylist","isPlugin","u","setFavourite","canFavourite","hasTopicDirectories","isLoadingSettings","hasLoadedPermissions","hasStudentExperience","config","yearGroups","customerId","subTextType","getSubTextAppLink","series","isPluginPopup","popup","imageCdnUrl","getClassroomGuideAppLink","getInteractiveGuidanceAppLink","getResourceGuidanceAppLink","showNewVideoIndicator","companyLogoFallbackUrl","objects","videoIds","Array","isArray","filter","o","getValidObjects"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[7383],{38502:(e,t,n)=>{n.d(t,{r:()=>u});var a=n(32735),i=n(49985),r=n(15611),s=n(18559),c=n(11607),o=n(83914),l=n(22771);function d(e){return a.createElement(a.Fragment,null,!!e.tab.svgName&&a.createElement("div",{className:e.tab.name?"pe-1":""},a.createElement(o.x,{svgName:e.tab.svgName})),e.tab.name,"number"==typeof e.tab.count&&a.createElement("div",{className:"ps-2"},a.createElement(s.C,{type:s.g.Count,data:e.tab.count})))}function u(e){var t;return a.createElement("nav",{className:null!==(t=e.className)&&void 0!==t?t:"",ref:e.containerRef},a.createElement("ul",{className:"\n list-unstyled d-inline-block m-0 ".concat(l.Z.pillTabSelector,"\n ").concat(e.borderRadius?l.Z.radiusSmall:"","\n ").concat(e.listClassName,"\n ")},e.tabs.map((function(e,t){return a.createElement("li",{className:"\n p-0 ".concat(l.Z.tab," ").concat(e.active?"btn btn-dark":"btn btn-outline-dark","\n ").concat(e.name?l.Z.minWidth:""," ").concat(e.className,"\n "),key:t},e.appLink?a.createElement(r.F,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(l.Z.tabLink,"\n ")},a.createElement(d,{tab:e})):a.createElement(c.L,{className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(l.Z.tabLink,"\n "),onClick:function(){return function(e){!e.active&&e.onSelect&&(e.onSelect(),e.analyticsData&&e.analyticsOptions&&i.k.logUserAction(e.analyticsData,e.analyticsOptions))}(e)}},a.createElement(d,{tab:e})))}))))}u.defaultProps={borderRadius:"lg"}},99705:(e,t,n)=>{var a,i;n.d(t,{b:()=>i}),function(e){e.AddToPlaylist="115005679748",e.EditSsoAccounts="8202508040345",e.LibraryEditor="360001974533",e.VideoAccess="360000153947",e.AddFromOnline="360011718234",e.UploadToLibraryEditor="360012069334",e.PBTErrorCodes="360012421153",e.ManuelReview="360020004534",e.LibraryReview="360000163788"}(a||(a={})),function(e){e.Integrations="4407268725529",e.Classrooms="4405362551833",e.MakeInteractive="4405370510873",e.EditSsoAccounts="8202605666073",e.UploadToLibraryEditor="10672936659865",e.AddFromLite="10671345281561",e.ManageSsoYearGroups="14691130889241",e.ContentReview="18525199576601",e.ContentPermissions="14692125209497",e.AccessSettings="27927466562201",e.ContentGuidelines="24133696186009",e.FoxtelFaq="24133519542169",e.ViviIntegration="23826297956377",e.AppleTvIntegration="25832373739929",e.RssFeed="32567445635097",e.ManageGroupPermissions="35407217335705"}(i||(i={}))},23224:(e,t,n)=>{n.d(t,{j:()=>m});var a=n(32735),i=n(39202),r=n(23481),s=n(65858),c=n(38502),o=n(14070),l=n(97291),d="settings.restrictedVideosTabs",u=r.T.encloseNamespace(d),p={restrictedVideos:{application:l.O.SETTINGS,action:o.e.Settings.VIDEO_RESTRICTIONS},contentReview:{application:l.O.SETTINGS,action:o.e.Settings.CONTENT_REVIEW},contentReviewSettings:{application:l.O.SETTINGS,action:o.e.Settings.CONTENT_REVIEW_SETTINGS}};function m(e){return a.createElement("div",{className:"mb-3"},a.createElement(c.r,{tabs:[{name:u("restrictedVideos"),appLink:p.restrictedVideos,active:"restricted-videos"===e.active,analyticsData:{name:u("restrictedVideos"),url:i.C$.getHref(p.restrictedVideos)},analyticsOptions:{actionType:s.Vw.Click,entity:s.py.Url,location:s.LZ.MagicTabs}},{name:u("contentReview"),appLink:p.contentReview,active:"content-review"===e.active,analyticsData:{name:r.T.getPhrase(d,"contentReview"),url:i.C$.getHref(p.contentReview)},analyticsOptions:{actionType:s.Vw.Click,entity:s.py.Url,location:s.LZ.MagicTabs}},{name:u("contentReviewSettings"),appLink:p.contentReviewSettings,active:"content-review-settings"===e.active,analyticsData:{name:r.T.getPhrase(d,"contentReviewSettings"),url:i.C$.getHref(p.contentReviewSettings)},analyticsOptions:{actionType:s.Vw.Click,entity:s.py.Url,location:s.LZ.MagicTabs}}]}))}},81803:(e,t,n)=>{n.d(t,{d:()=>v});var a=n(32735),i=n(81886),r=n(23481),s=n(49935),c=n(22902),o=n(14070),l=n(97291),d=n(96368);function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var p="settings.settingsLayout",m=function(e){var t=(0,c.T)().hasPermissions,n=(0,d.e)();if(e)return t(e);var a=i.Q.C$.getCurrentAppLink();return a.application!==l.O.SETTINGS||n.some((function(e){return e.modules.some((function(e){return"appLink"in e&&e.appLink.action===a.action}))}))};function v(e){var t,n=m(e.requiredPermissions);if(a.useEffect((function(){n||i.Q.C$.trigger({application:l.O.SETTINGS,action:o.e.Settings.HOME},{replace:!0})}),[n]),!n)return a.createElement(a.Fragment,null);var c,d=e.breadcrumbs.map((function(t,n){return{name:t,appLink:{application:l.O.SETTINGS,action:o.e.Settings.HOME},active:n===e.breadcrumbs.length-1}}));return a.createElement("div",{className:"px-3"},a.createElement("div",{className:"d-flex align-items-center justify-content-between"},a.createElement("h1",{className:"h2"},e.heading),null===(t=e.headingButton)||void 0===t?void 0:t.call(e)),a.createElement("div",{className:"pb-3"},a.createElement(s.Oo,{breadcrumbs:[{name:r.T.getPhrase(p,"settingsBreadcrumb"),appLink:{application:l.O.SETTINGS,action:o.e.Settings.HOME}}].concat((c=d,function(e){if(Array.isArray(e))return u(e)}(c)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(c)||function(e,t){if(e){if("string"==typeof e)return u(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?u(e,t):void 0}}(c)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()))})),e.description&&a.createElement(a.Fragment,null,a.createElement("p",null,e.description),a.createElement("hr",null)),e.children)}},97383:(e,t,n)=>{n.r(t),n.d(t,{VideoRestrictionsView:()=>j});var a=n(32735),i=n(23481),r=n(20354),s=n(65858),c=n(15611),o=n(37395),l=n(83345),d=n(1860),u=n(75100),p=n(51365),m=n(16714),v=n(5345),g=n(22902),E=n(79612),y=n(26361),b=n(14070),T=n(97291),f=n(21491),S=n(58321),k=n(10741),C=n(22490),N=n(23224),h=n(81803),L=n(97958),I=n(99705),O=n(12778),w=n(99742),A="settings.videoRestrictions",R=i.T.encloseNamespace(A);function V(){var e=O.o.getLiteArticle(I.b.ContentReview);return a.createElement(L.u,null,a.createElement(L.u.Image,{src:w.W.EmptyStates.ContentReview.RESTRICTED_VIDEOS}),a.createElement(L.u.Heading,null,a.createElement(l.x,{namespace:A,phrase:"emptyHeading"})),a.createElement(L.u.Cta,{href:e,text:R("emptyCta"),className:"btn btn-link info-link"}))}var P="settings.videoRestrictions",x=i.T.encloseNamespace(P),G={application:T.O.SETTINGS,action:b.e.Settings.CONTENT_PERMISSIONS};function j(e){var t,n,i,L,I;(0,E.M)({title:x("pageTitle")});var O=(0,S.U)({locationContext:s.LZ.VideoThumbnail}).commonVideoProps,w=(0,g.T)().hasPermissions,A=r.a.useBasicFetch(f.I.getRestrictedObjects([v.c.User],e.cursor));return a.createElement(h.d,{heading:x("heading"),breadcrumbs:[x("breadcrumb")],requiredPermissions:m.C.ManageVideoAccess},a.createElement(N.j,{active:"restricted-videos"}),a.createElement("div",{className:"d-flex justify-content-between align-items-center"},a.createElement("p",{className:"mb-0"},a.createElement(l.x,{namespace:P,phrase:"description"})," ",a.createElement(c.F,{appLink:G,className:"info-link"},a.createElement(l.x,{namespace:P,phrase:"contentPermissions"})))),a.createElement("hr",null),!A.hasCompleted&&a.createElement(d.S,null),A.hasCompleted&&!(null===(n=null===(t=A.data)||void 0===t?void 0:t.data)||void 0===n?void 0:n.length)&&a.createElement(V,null),!!(null===(L=null===(i=A.data)||void 0===i?void 0:i.data)||void 0===L?void 0:L.length)&&a.createElement(a.Fragment,null,a.createElement(p.M.Provider,{value:{getVideoActions:function(e,t){return[{order:1,label:x("manageVideoAccess"),button:!0,className:"btn btn-outline-dark text-nowrap",appLink:{application:T.O.DEFAULT,action:b.e.Default.MANAGE_ACCCESS,params:{objectId:e.id,objectTypeId:e.typeId}},analyticsOptions:Object.assign(Object.assign({},t.analyticsOptions),{actionType:s.Vw.SetAccess,workflowPhase:s.eu.Start}),analyticsData:t.analyticsData}]}}},a.createElement(u.E4,{videos:A.data.data.filter((function(e){return!!y.l.getRestrictionByType(e,v.c.User)})),getVideoAppLink:C.W.getAppLink,hasPermissions:w,presentationAudiences:[],getPreviewQuestionsAppLink:function(e){return k.j.getPreviewQuestionsAppLink(e)},commonVideoProps:O})),(null===(I=A.data.pagination)||void 0===I?void 0:I.cursors)&&a.createElement("div",{className:"clearfix"},a.createElement(o.t,{cursors:A.data.pagination.cursors,appLink:{application:T.O.SETTINGS,action:b.e.Settings.VIDEO_RESTRICTIONS},buttonVariant:"outline-dark",className:"py-2 float-end"}))))}},21491:(e,t,n)=>{n.d(t,{I:()=>s});var a=n(99940),i=n(97395),r=n(62803),s={getRestrictions:function(e){return{key:"restrictions:".concat(e),url:i._.urlBuilder("{gateway}/v1/objects/restrictions",{id:e})}},addRestriction:function(e){return{type:a.k.POST,key:"restrictions:".concat(e.objectTypeId,":").concat(e.objectId,":add"),url:"{gateway}/v1/restrictions",data:[e],invalidationKeys:["restrictions"]}},deleteRestrictions:function(e){return{url:i._.urlBuilder("{gateway}/v1/restrictions",{objectId:e}),key:"restrictions:delete",type:a.k.DELETE,invalidationKeys:["restrictions"]}},getRestrictedObjects:function(e,t){var n={type:e,"query.video":r.v.VIDEO_COLLECTION,"query.interactive":r.v.INTERACTIVE_COLLECTION,"query.clip":r.v.CLIP_COLLECTION};return t&&(n.cursor=t),{url:i._.urlBuilder("{gateway}/v1/restrictions/objects",n),key:"restrictions:objects:".concat(e.sort().join(","),":").concat(t)}},approveAll:function(){return{url:"{gateway}/v1/library-reviews/restrictions",key:"restrictions:approve:all",type:a.k.DELETE}}}},58321:(e,t,n)=>{n.d(t,{U:()=>v});var a=n(20354),i=n(16714),r=n(39151),s=n(1666),c=n(31949),o=n(22902),l=n(37802),d=n(22490),u=n(82431),p=n(46390),m=n(27638);function v(e){var t,n,v,g=e||{},E=g.locationContext,y=g.mtv,b=g.flightNamespace,T=g.sharedPlaylist,f=(0,p.G)().isPlugin,S=(0,m.u)(E,b),k=S.setFavourite,C=S.canFavourite,N=(0,l.r)(null),h=N.hasTopicDirectories,L=N.isLoadingSettings,I=(0,o.T)(),O=I.hasPermissions,w=I.isLoaded,A=O(i.C.StudentExperience),R=a.a.useBasicFetch(r.L.config()),V=a.a.useBasicFetch(c.N.currentUser()),P=a.a.useBasicFetch((null===(t=V.data)||void 0===t?void 0:t.isAuthenticated)&&s.h.yearGroups(V.data.customerId));return{hasCommonVideoPropsCompleted:!L&&w&&R.hasCompleted&&V.hasCompleted&&(!(null===(n=V.data)||void 0===n?void 0:n.isAuthenticated)||P.hasCompleted),commonVideoProps:{subTextType:"series",getSubTextAppLink:function(e){var t;return"series"in e?T&&!(null===(t=V.data)||void 0===t?void 0:t.isAuthenticated)?null:u.j.getSeriesAppLink(e.series,{mtv:y}):null},isPlugin:f,canFavourite:C,setFavourite:k,imageCdnUrl:null===(v=R.data)||void 0===v?void 0:v.imageCdnUrl,yearGroups:P.data,getClassroomGuideAppLink:d.W.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:d.W.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:d.W.getResourceGuidanceAppLink,showNewVideoIndicator:h,companyLogoFallbackUrl:null,hasStudentExperience:A}}}},22771:(e,t,n)=>{n.d(t,{Z:()=>a});const a={pillTabSelector:"Hdi6o",tab:"RvNxr",minWidth:"GHSz9",radiusSmall:"VhJJa",tabLink:"WFyvo"}}}]);
|
|
2
|
-
//# sourceMappingURL=7383-
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[7383],{38502:(e,t,n)=>{n.d(t,{r:()=>d});var a=n(32735),i=n(49985),r=n(15611),s=n(18559),c=n(11607),o=n(83914),l=n(22771);function u(e){return a.createElement(a.Fragment,null,!!e.tab.svgName&&a.createElement("div",{className:e.tab.name?"pe-1":""},a.createElement(o.x,{svgName:e.tab.svgName})),e.tab.name,"number"==typeof e.tab.count&&a.createElement("div",{className:"ps-2"},a.createElement(s.C,{type:s.g.Count,data:e.tab.count})))}function d(e){var t;return a.createElement("nav",{className:null!==(t=e.className)&&void 0!==t?t:"",ref:e.containerRef},a.createElement("ul",{className:"\n list-unstyled d-inline-block m-0 ".concat(l.Z.pillTabSelector,"\n ").concat(e.borderRadius?l.Z.radiusSmall:"","\n ").concat(e.listClassName,"\n ")},e.tabs.map((function(e,t){return a.createElement("li",{className:"\n p-0 ".concat(l.Z.tab," ").concat(e.active?"btn btn-dark":"btn btn-outline-dark","\n ").concat(e.name?l.Z.minWidth:""," ").concat(e.className,"\n "),key:t},e.appLink?a.createElement(r.F,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(l.Z.tabLink,"\n ")},a.createElement(u,{tab:e})):a.createElement(c.L,{className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(l.Z.tabLink,"\n "),onClick:function(){return function(e){!e.active&&e.onSelect&&(e.onSelect(),e.analyticsData&&e.analyticsOptions&&i.k.logUserAction(e.analyticsData,e.analyticsOptions))}(e)}},a.createElement(u,{tab:e})))}))))}d.defaultProps={borderRadius:"lg"}},99705:(e,t,n)=>{var a,i;n.d(t,{b:()=>i}),function(e){e.AddToPlaylist="115005679748",e.EditSsoAccounts="8202508040345",e.LibraryEditor="360001974533",e.VideoAccess="360000153947",e.AddFromOnline="360011718234",e.UploadToLibraryEditor="360012069334",e.PBTErrorCodes="360012421153",e.ManuelReview="360020004534",e.LibraryReview="360000163788"}(a||(a={})),function(e){e.Integrations="4407268725529",e.Classrooms="4405362551833",e.MakeInteractive="4405370510873",e.EditSsoAccounts="8202605666073",e.UploadToLibraryEditor="10672936659865",e.AddFromLite="10671345281561",e.ManageSsoYearGroups="14691130889241",e.ContentReview="18525199576601",e.ContentPermissions="14692125209497",e.AccessSettings="27927466562201",e.ContentGuidelines="24133696186009",e.FoxtelFaq="24133519542169",e.ViviIntegration="23826297956377",e.AppleTvIntegration="25832373739929",e.RssFeed="32567445635097",e.ManageGroupPermissions="35407217335705"}(i||(i={}))},23224:(e,t,n)=>{n.d(t,{j:()=>m});var a=n(32735),i=n(39202),r=n(23481),s=n(65858),c=n(38502),o=n(14070),l=n(97291),u="settings.restrictedVideosTabs",d=r.T.encloseNamespace(u),p={restrictedVideos:{application:l.O.SETTINGS,action:o.e.Settings.VIDEO_RESTRICTIONS},contentReview:{application:l.O.SETTINGS,action:o.e.Settings.CONTENT_REVIEW},contentReviewSettings:{application:l.O.SETTINGS,action:o.e.Settings.CONTENT_REVIEW_SETTINGS}};function m(e){return a.createElement("div",{className:"mb-3"},a.createElement(c.r,{tabs:[{name:d("restrictedVideos"),appLink:p.restrictedVideos,active:"restricted-videos"===e.active,analyticsData:{name:d("restrictedVideos"),url:i.C$.getHref(p.restrictedVideos)},analyticsOptions:{actionType:s.Vw.Click,entity:s.py.Url,location:s.LZ.MagicTabs}},{name:d("contentReview"),appLink:p.contentReview,active:"content-review"===e.active,analyticsData:{name:r.T.getPhrase(u,"contentReview"),url:i.C$.getHref(p.contentReview)},analyticsOptions:{actionType:s.Vw.Click,entity:s.py.Url,location:s.LZ.MagicTabs}},{name:d("contentReviewSettings"),appLink:p.contentReviewSettings,active:"content-review-settings"===e.active,analyticsData:{name:r.T.getPhrase(u,"contentReviewSettings"),url:i.C$.getHref(p.contentReviewSettings)},analyticsOptions:{actionType:s.Vw.Click,entity:s.py.Url,location:s.LZ.MagicTabs}}]}))}},81803:(e,t,n)=>{n.d(t,{d:()=>v});var a=n(32735),i=n(81886),r=n(23481),s=n(49935),c=n(22902),o=n(14070),l=n(97291),u=n(96368);function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var p="settings.settingsLayout",m=function(e){var t=(0,c.T)().hasPermissions,n=(0,u.e)();if(e)return t(e);var a=i.Q.C$.getCurrentAppLink();return a.application!==l.O.SETTINGS||n.some((function(e){return e.modules.some((function(e){return"appLink"in e&&e.appLink.action===a.action}))}))};function v(e){var t,n=m(e.requiredPermissions);if(a.useEffect((function(){n||i.Q.C$.trigger({application:l.O.SETTINGS,action:o.e.Settings.HOME},{replace:!0})}),[n]),!n)return a.createElement(a.Fragment,null);var c,u=e.breadcrumbs.map((function(t,n){return{name:t,appLink:{application:l.O.SETTINGS,action:o.e.Settings.HOME},active:n===e.breadcrumbs.length-1}}));return a.createElement("div",{className:"px-3"},a.createElement("div",{className:"d-flex align-items-center justify-content-between"},a.createElement("h1",{className:"h2"},e.heading),null===(t=e.headingButton)||void 0===t?void 0:t.call(e)),a.createElement("div",{className:"pb-3"},a.createElement(s.Oo,{breadcrumbs:[{name:r.T.getPhrase(p,"settingsBreadcrumb"),appLink:{application:l.O.SETTINGS,action:o.e.Settings.HOME}}].concat((c=u,function(e){if(Array.isArray(e))return d(e)}(c)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(c)||function(e,t){if(e){if("string"==typeof e)return d(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)?d(e,t):void 0}}(c)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()))})),e.description&&a.createElement(a.Fragment,null,a.createElement("p",null,e.description),a.createElement("hr",null)),e.children)}},97383:(e,t,n)=>{n.r(t),n.d(t,{VideoRestrictionsView:()=>j});var a=n(32735),i=n(23481),r=n(20354),s=n(65858),c=n(15611),o=n(37395),l=n(83345),u=n(1860),d=n(75100),p=n(51365),m=n(16714),v=n(5345),g=n(22902),E=n(79612),y=n(26361),b=n(14070),T=n(97291),f=n(21491),S=n(58321),k=n(10741),C=n(22490),N=n(23224),h=n(81803),L=n(97958),I=n(99705),O=n(12778),w=n(99742),A="settings.videoRestrictions",R=i.T.encloseNamespace(A);function V(){var e=O.o.getLiteArticle(I.b.ContentReview);return a.createElement(L.u,null,a.createElement(L.u.Image,{src:w.W.EmptyStates.ContentReview.RESTRICTED_VIDEOS}),a.createElement(L.u.Heading,null,a.createElement(l.x,{namespace:A,phrase:"emptyHeading"})),a.createElement(L.u.Cta,{href:e,text:R("emptyCta"),className:"btn btn-link info-link"}))}var P="settings.videoRestrictions",x=i.T.encloseNamespace(P),G={application:T.O.SETTINGS,action:b.e.Settings.CONTENT_PERMISSIONS};function j(e){var t,n,i,L,I;(0,E.M)({title:x("pageTitle")});var O=(0,S.U)({locationContext:s.LZ.VideoThumbnail}).commonVideoProps,w=(0,g.T)().hasPermissions,A=r.a.useBasicFetch(f.I.getRestrictedObjects([v.c.User],e.cursor));return a.createElement(h.d,{heading:x("heading"),breadcrumbs:[x("breadcrumb")],requiredPermissions:m.C.ManageVideoAccess},a.createElement(N.j,{active:"restricted-videos"}),a.createElement("div",{className:"d-flex justify-content-between align-items-center"},a.createElement("p",{className:"mb-0"},a.createElement(l.x,{namespace:P,phrase:"description"})," ",a.createElement(c.F,{appLink:G,className:"info-link"},a.createElement(l.x,{namespace:P,phrase:"contentPermissions"})))),a.createElement("hr",null),!A.hasCompleted&&a.createElement(u.S,null),A.hasCompleted&&!(null===(n=null===(t=A.data)||void 0===t?void 0:t.data)||void 0===n?void 0:n.length)&&a.createElement(V,null),!!(null===(L=null===(i=A.data)||void 0===i?void 0:i.data)||void 0===L?void 0:L.length)&&a.createElement(a.Fragment,null,a.createElement(p.M.Provider,{value:{getVideoActions:function(e,t){return[{order:1,label:x("manageVideoAccess"),button:!0,className:"btn btn-outline-dark text-nowrap",appLink:{application:T.O.DEFAULT,action:b.e.Default.MANAGE_ACCCESS,params:{objectId:e.id,objectTypeId:e.typeId}},analyticsOptions:Object.assign(Object.assign({},t.analyticsOptions),{actionType:s.Vw.SetAccess,workflowPhase:s.eu.Start}),analyticsData:t.analyticsData}]}}},a.createElement(d.E4,{videos:A.data.data.filter((function(e){return!!y.l.getRestrictionByType(e,v.c.User)})),getVideoAppLink:C.W.getAppLink,hasPermissions:w,presentationAudiences:[],getPreviewQuestionsAppLink:function(e){return k.j.getPreviewQuestionsAppLink(e)},commonVideoProps:O})),(null===(I=A.data.pagination)||void 0===I?void 0:I.cursors)&&a.createElement("div",{className:"clearfix"},a.createElement(o.t,{cursors:A.data.pagination.cursors,appLink:{application:T.O.SETTINGS,action:b.e.Settings.VIDEO_RESTRICTIONS},buttonVariant:"outline-dark",className:"py-2 float-end"}))))}},21491:(e,t,n)=>{n.d(t,{I:()=>s});var a=n(99940),i=n(97395),r=n(62803),s={getRestrictions:function(e){return{key:"restrictions:".concat(e),url:i._.urlBuilder("{gateway}/v1/objects/restrictions",{id:e})}},addRestriction:function(e){return{type:a.k.POST,key:"restrictions:".concat(e.objectTypeId,":").concat(e.objectId,":add"),url:"{gateway}/v1/restrictions",data:[e],invalidationKeys:["restrictions"]}},deleteRestrictions:function(e){return{url:i._.urlBuilder("{gateway}/v1/restrictions",{objectId:e}),key:"restrictions:delete",type:a.k.DELETE,invalidationKeys:["restrictions"]}},getRestrictedObjects:function(e,t){var n={type:e,"query.video":r.v.VIDEO_COLLECTION,"query.interactive":r.v.INTERACTIVE_COLLECTION,"query.clip":r.v.CLIP_COLLECTION};return t&&(n.cursor=t),{url:i._.urlBuilder("{gateway}/v1/restrictions/objects",n),key:"restrictions:objects:".concat(e.sort().join(","),":").concat(t)}},approveAll:function(){return{url:"{gateway}/v1/library-reviews/restrictions",key:"restrictions:approve:all",type:a.k.DELETE}}}},58321:(e,t,n)=>{n.d(t,{U:()=>v});var a=n(20354),i=n(16714),r=n(39151),s=n(1666),c=n(31949),o=n(22902),l=n(37802),u=n(22490),d=n(82431),p=n(46390),m=n(27638);function v(e){var t,n,v,g=e||{},E=g.locationContext,y=g.mtv,b=g.flightNamespace,T=g.sharedPlaylist,f=(0,p.G)(),S=f.isPlugin,k=f.params,C=(0,m.u)(E,b),N=C.setFavourite,h=C.canFavourite,L=(0,l.r)(null),I=L.hasTopicDirectories,O=L.isLoadingSettings,w=(0,o.T)(),A=w.hasPermissions,R=w.isLoaded,V=A(i.C.StudentExperience),P=a.a.useBasicFetch(r.L.config()),x=a.a.useBasicFetch(c.N.currentUser()),G=a.a.useBasicFetch((null===(t=x.data)||void 0===t?void 0:t.isAuthenticated)&&s.h.yearGroups(x.data.customerId));return{hasCommonVideoPropsCompleted:!O&&R&&P.hasCompleted&&x.hasCompleted&&(!(null===(n=x.data)||void 0===n?void 0:n.isAuthenticated)||G.hasCompleted),commonVideoProps:{subTextType:"series",getSubTextAppLink:function(e){var t;return"series"in e?T&&!(null===(t=x.data)||void 0===t?void 0:t.isAuthenticated)?null:d.j.getSeriesAppLink(e.series,{mtv:y}):null},isPlugin:S,isPluginPopup:!!(null==k?void 0:k.popup),canFavourite:h,setFavourite:N,imageCdnUrl:null===(v=P.data)||void 0===v?void 0:v.imageCdnUrl,yearGroups:G.data,getClassroomGuideAppLink:u.W.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:u.W.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:u.W.getResourceGuidanceAppLink,showNewVideoIndicator:I,companyLogoFallbackUrl:null,hasStudentExperience:V}}}},22771:(e,t,n)=>{n.d(t,{Z:()=>a});const a={pillTabSelector:"Hdi6o",tab:"RvNxr",minWidth:"GHSz9",radiusSmall:"VhJJa",tabLink:"WFyvo"}}}]);
|
|
2
|
+
//# sourceMappingURL=7383-02d4956304-lite.chunk.js.map
|