@clickview/lite 0.53.4 → 0.53.6-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/css/{6094-lite-bcd14ea6d2.chunk.css → 1019-lite-bbcf2bff27.chunk.css} +3 -2
- package/dist/css/{1329-lite-be86e46c78.chunk.css → 1329-lite-458183b24f.chunk.css} +2 -2
- package/dist/css/{1838-lite-e6a28b84ed.chunk.css → 1838-lite-981a5e0783.chunk.css} +1 -1
- package/dist/css/{1760-lite-bcd14ea6d2.chunk.css → 2548-lite-bbcf2bff27.chunk.css} +3 -2
- package/dist/css/{3969-lite-29e14c7861.chunk.css → 3969-lite-ed58852d97.chunk.css} +2 -2
- package/dist/css/{422-lite-dace5f41de.chunk.css → 422-lite-b8c1fd1dee.chunk.css} +1 -1
- package/dist/css/{4502-lite-92be6697e7.chunk.css → 4502-lite-eaf1a1113c.chunk.css} +1 -1
- package/dist/css/{5220-lite-9832e2c2fb.chunk.css → 5220-lite-8a8d5d035f.chunk.css} +1 -1
- package/dist/css/{537-lite-56a3fc7e48.chunk.css → 537-lite-4de4c47713.chunk.css} +1 -1
- package/dist/css/{6489-lite-9045df4bb9.chunk.css → 6489-lite-e271aaed2d.chunk.css} +1 -1
- package/dist/css/{6544-lite-d46c2d634c.chunk.css → 6544-lite-319ed51ccc.chunk.css} +1 -1
- package/dist/css/{5549-lite-97ed26d0aa.chunk.css → 6596-lite-bb28584922.chunk.css} +2 -1
- package/dist/css/{841-lite-27b6485cd1.chunk.css → 841-lite-46ef623835.chunk.css} +1 -1
- package/dist/css/{8522-lite-2f2797038e.chunk.css → 8522-lite-f100606ec5.chunk.css} +1 -1
- package/dist/css/{8801-lite-c88eb54bee.chunk.css → 8801-lite-d34200ab29.chunk.css} +2 -2
- package/dist/css/{3640-lite-97ed26d0aa.chunk.css → 9010-lite-bb28584922.chunk.css} +2 -1
- package/dist/languages/en.json +1 -1
- package/dist/scripts/{1760-8d51aa0b08-lite.chunk.js → 1019-8f977b5095-lite.chunk.js} +2 -2
- package/dist/scripts/{1760-8d51aa0b08-lite.chunk.js.map → 1019-8f977b5095-lite.chunk.js.map} +1 -1
- package/dist/scripts/1080-509aa6e738-lite.chunk.js +2 -0
- package/dist/scripts/1080-509aa6e738-lite.chunk.js.map +1 -0
- package/dist/scripts/1169-e64f0dbd67-lite.chunk.js +2 -0
- package/dist/scripts/1169-e64f0dbd67-lite.chunk.js.map +1 -0
- package/dist/scripts/1329-bdbbf6c7fd-lite.chunk.js +3 -0
- package/dist/scripts/1329-bdbbf6c7fd-lite.chunk.js.map +1 -0
- package/dist/scripts/{1379-976d20185f-lite.chunk.js → 1379-ca519ec56b-lite.chunk.js} +3 -3
- package/dist/scripts/{1379-976d20185f-lite.chunk.js.map → 1379-ca519ec56b-lite.chunk.js.map} +1 -1
- package/dist/scripts/1518-4f76dbeee8-lite.chunk.js +2 -0
- package/dist/scripts/1518-4f76dbeee8-lite.chunk.js.map +1 -0
- package/dist/scripts/{1838-87fb96ee2c-lite.chunk.js → 1838-95081e8dea-lite.chunk.js} +1 -1
- package/dist/scripts/{1838-87fb96ee2c-lite.chunk.js.map → 1838-95081e8dea-lite.chunk.js.map} +1 -1
- package/dist/scripts/184-6ce393c251-lite.chunk.js +2 -0
- package/dist/scripts/184-6ce393c251-lite.chunk.js.map +1 -0
- package/dist/scripts/{2004-3005565af0-lite.chunk.js → 2004-e20d72976c-lite.chunk.js} +3 -3
- package/dist/scripts/{2004-3005565af0-lite.chunk.js.map → 2004-e20d72976c-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2094-58390aa60a-lite.chunk.js → 2094-a16bbca3a3-lite.chunk.js} +2 -2
- package/dist/scripts/2094-a16bbca3a3-lite.chunk.js.map +1 -0
- package/dist/scripts/2142-c46ca4050f-lite.chunk.js +2 -0
- package/dist/scripts/2142-c46ca4050f-lite.chunk.js.map +1 -0
- package/dist/scripts/2199-be40da7440-lite.chunk.js +2 -0
- package/dist/scripts/2199-be40da7440-lite.chunk.js.map +1 -0
- package/dist/scripts/2548-c48b8d3e3c-lite.chunk.js +2 -0
- package/dist/scripts/2548-c48b8d3e3c-lite.chunk.js.map +1 -0
- package/dist/scripts/3969-6d7c342d0c-lite.chunk.js +2 -0
- package/dist/scripts/3969-6d7c342d0c-lite.chunk.js.map +1 -0
- package/dist/scripts/3999-317a4538c6-lite.chunk.js +3 -0
- package/dist/scripts/3999-317a4538c6-lite.chunk.js.map +1 -0
- package/dist/scripts/{422-ee640f76c5-lite.chunk.js → 422-a63a7eb901-lite.chunk.js} +1 -1
- package/dist/scripts/{422-ee640f76c5-lite.chunk.js.map → 422-a63a7eb901-lite.chunk.js.map} +1 -1
- package/dist/scripts/{4502-af4903784e-lite.chunk.js → 4502-a7d60fa257-lite.chunk.js} +1 -1
- package/dist/scripts/{4502-af4903784e-lite.chunk.js.map → 4502-a7d60fa257-lite.chunk.js.map} +1 -1
- package/dist/scripts/{4554-c0d7490a46-lite.chunk.js → 4554-b9aa07891f-lite.chunk.js} +2 -2
- package/dist/scripts/4554-b9aa07891f-lite.chunk.js.map +1 -0
- package/dist/scripts/{4591-379f0fe588-lite.chunk.js → 4591-21c0094f28-lite.chunk.js} +2 -2
- package/dist/scripts/{4591-379f0fe588-lite.chunk.js.map → 4591-21c0094f28-lite.chunk.js.map} +1 -1
- package/dist/scripts/{4683-ce52da47d8-lite.chunk.js → 4683-d3afe2dfa8-lite.chunk.js} +2 -2
- package/dist/scripts/4683-d3afe2dfa8-lite.chunk.js.map +1 -0
- package/dist/scripts/5220-291b2243ad-lite.chunk.js +3 -0
- package/dist/scripts/5220-291b2243ad-lite.chunk.js.map +1 -0
- package/dist/scripts/537-6efb9bc099-lite.chunk.js +3 -0
- package/dist/scripts/537-6efb9bc099-lite.chunk.js.map +1 -0
- package/dist/scripts/5660-6711768c20-lite.chunk.js +2 -0
- package/dist/scripts/5660-6711768c20-lite.chunk.js.map +1 -0
- package/dist/scripts/5936-e839cb8193-lite.chunk.js +2 -0
- package/dist/scripts/5936-e839cb8193-lite.chunk.js.map +1 -0
- package/dist/scripts/{624-bf0ff6257f-lite.chunk.js → 624-09b51a9d32-lite.chunk.js} +3 -3
- package/dist/scripts/{624-bf0ff6257f-lite.chunk.js.map → 624-09b51a9d32-lite.chunk.js.map} +1 -1
- package/dist/scripts/6450-f16821bf09-lite.chunk.js +2 -0
- package/dist/scripts/6450-f16821bf09-lite.chunk.js.map +1 -0
- package/dist/scripts/6489-c242844567-lite.chunk.js +3 -0
- package/dist/scripts/6489-c242844567-lite.chunk.js.map +1 -0
- package/dist/scripts/6544-07898e3fa3-lite.chunk.js +2 -0
- package/dist/scripts/6544-07898e3fa3-lite.chunk.js.map +1 -0
- package/dist/scripts/6596-848fbf79bb-lite.chunk.js +2 -0
- package/dist/scripts/6596-848fbf79bb-lite.chunk.js.map +1 -0
- package/dist/scripts/{6741-1c125dbc6c-lite.chunk.js → 6741-fe09fea334-lite.chunk.js} +3 -3
- package/dist/scripts/{6741-1c125dbc6c-lite.chunk.js.map → 6741-fe09fea334-lite.chunk.js.map} +1 -1
- package/dist/scripts/6752-0d139a6c9a-lite.chunk.js +2 -0
- package/dist/scripts/6752-0d139a6c9a-lite.chunk.js.map +1 -0
- package/dist/scripts/696-fa78eb455f-lite.chunk.js +2 -0
- package/dist/scripts/696-fa78eb455f-lite.chunk.js.map +1 -0
- package/dist/scripts/{7234-ef6ab1e557-lite.chunk.js → 7234-d15fe07f0e-lite.chunk.js} +2 -2
- package/dist/scripts/{7234-ef6ab1e557-lite.chunk.js.map → 7234-d15fe07f0e-lite.chunk.js.map} +1 -1
- package/dist/scripts/729-594be12089-lite.chunk.js +2 -0
- package/dist/scripts/729-594be12089-lite.chunk.js.map +1 -0
- package/dist/scripts/{7293-3e6ad36a7a-lite.chunk.js → 7293-35871fc150-lite.chunk.js} +2 -2
- package/dist/scripts/7293-35871fc150-lite.chunk.js.map +1 -0
- package/dist/scripts/{8192-e2d9a26cc5-lite.chunk.js → 8192-eb7054ccc6-lite.chunk.js} +2 -2
- package/dist/scripts/{8192-e2d9a26cc5-lite.chunk.js.map → 8192-eb7054ccc6-lite.chunk.js.map} +1 -1
- package/dist/scripts/841-11af1334bf-lite.chunk.js +3 -0
- package/dist/scripts/841-11af1334bf-lite.chunk.js.map +1 -0
- package/dist/scripts/{8522-b4b217640c-lite.chunk.js → 8522-8e9c576bf6-lite.chunk.js} +1 -1
- package/dist/scripts/{8522-b4b217640c-lite.chunk.js.map → 8522-8e9c576bf6-lite.chunk.js.map} +1 -1
- package/dist/scripts/8801-3a7652eb35-lite.chunk.js +2 -0
- package/dist/scripts/8801-3a7652eb35-lite.chunk.js.map +1 -0
- package/dist/scripts/9010-ef7ea501ee-lite.chunk.js +2 -0
- package/dist/scripts/9010-ef7ea501ee-lite.chunk.js.map +1 -0
- package/dist/scripts/9139-22fb64f542-lite.chunk.js +2 -0
- package/dist/scripts/9139-22fb64f542-lite.chunk.js.map +1 -0
- package/dist/scripts/9173-e45847aa35-lite.chunk.js +2 -0
- package/dist/scripts/9173-e45847aa35-lite.chunk.js.map +1 -0
- package/dist/scripts/{9395-e9b5cdbdce-lite.chunk.js → 9395-e1a02b01ce-lite.chunk.js} +3 -3
- package/dist/scripts/{9395-e9b5cdbdce-lite.chunk.js.map → 9395-e1a02b01ce-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9478-abfa7ed3cc-lite.chunk.js → 9478-13da35c4ee-lite.chunk.js} +3 -3
- package/dist/scripts/{9478-abfa7ed3cc-lite.chunk.js.map → 9478-13da35c4ee-lite.chunk.js.map} +1 -1
- package/dist/scripts/{953-bf3d621a33-lite.chunk.js → 953-225db845ab-lite.chunk.js} +3 -3
- package/dist/scripts/{953-bf3d621a33-lite.chunk.js.map → 953-225db845ab-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9899-68b030d4e2-lite.chunk.js → 9899-fa58471776-lite.chunk.js} +2 -2
- package/dist/scripts/{9899-68b030d4e2-lite.chunk.js.map → 9899-fa58471776-lite.chunk.js.map} +1 -1
- package/dist/scripts/bundle-7f9a9b650d.min.js +3 -0
- package/dist/scripts/bundle-7f9a9b650d.min.js.map +1 -0
- package/package.json +1 -1
- package/dist/scripts/1080-4173ce26bd-lite.chunk.js +0 -2
- package/dist/scripts/1080-4173ce26bd-lite.chunk.js.map +0 -1
- package/dist/scripts/1169-d090f0a147-lite.chunk.js +0 -2
- package/dist/scripts/1169-d090f0a147-lite.chunk.js.map +0 -1
- package/dist/scripts/1329-d48379c043-lite.chunk.js +0 -3
- package/dist/scripts/1329-d48379c043-lite.chunk.js.map +0 -1
- package/dist/scripts/1518-9756fde01e-lite.chunk.js +0 -2
- package/dist/scripts/1518-9756fde01e-lite.chunk.js.map +0 -1
- package/dist/scripts/184-ee581fa2e0-lite.chunk.js +0 -2
- package/dist/scripts/184-ee581fa2e0-lite.chunk.js.map +0 -1
- package/dist/scripts/2094-58390aa60a-lite.chunk.js.map +0 -1
- package/dist/scripts/2199-476ac5922f-lite.chunk.js +0 -2
- package/dist/scripts/2199-476ac5922f-lite.chunk.js.map +0 -1
- package/dist/scripts/3640-1ac0a110f4-lite.chunk.js +0 -2
- package/dist/scripts/3640-1ac0a110f4-lite.chunk.js.map +0 -1
- package/dist/scripts/3969-c0160d0139-lite.chunk.js +0 -2
- package/dist/scripts/3969-c0160d0139-lite.chunk.js.map +0 -1
- package/dist/scripts/4063-786732e7b0-lite.chunk.js +0 -2
- package/dist/scripts/4063-786732e7b0-lite.chunk.js.map +0 -1
- package/dist/scripts/4273-de24896b28-lite.chunk.js +0 -3
- package/dist/scripts/4273-de24896b28-lite.chunk.js.map +0 -1
- package/dist/scripts/4554-c0d7490a46-lite.chunk.js.map +0 -1
- package/dist/scripts/4683-ce52da47d8-lite.chunk.js.map +0 -1
- package/dist/scripts/4850-5ddd277550-lite.chunk.js +0 -2
- package/dist/scripts/4850-5ddd277550-lite.chunk.js.map +0 -1
- package/dist/scripts/5220-85898810a6-lite.chunk.js +0 -3
- package/dist/scripts/5220-85898810a6-lite.chunk.js.map +0 -1
- package/dist/scripts/537-de7445d41a-lite.chunk.js +0 -3
- package/dist/scripts/537-de7445d41a-lite.chunk.js.map +0 -1
- package/dist/scripts/5549-e0ed88aaa1-lite.chunk.js +0 -2
- package/dist/scripts/5549-e0ed88aaa1-lite.chunk.js.map +0 -1
- package/dist/scripts/5660-a356acdbca-lite.chunk.js +0 -2
- package/dist/scripts/5660-a356acdbca-lite.chunk.js.map +0 -1
- package/dist/scripts/5936-92d9cea005-lite.chunk.js +0 -2
- package/dist/scripts/5936-92d9cea005-lite.chunk.js.map +0 -1
- package/dist/scripts/6094-8546003d79-lite.chunk.js +0 -2
- package/dist/scripts/6094-8546003d79-lite.chunk.js.map +0 -1
- package/dist/scripts/6450-601f889072-lite.chunk.js +0 -2
- package/dist/scripts/6450-601f889072-lite.chunk.js.map +0 -1
- package/dist/scripts/6489-532a022587-lite.chunk.js +0 -3
- package/dist/scripts/6489-532a022587-lite.chunk.js.map +0 -1
- package/dist/scripts/6544-ae27efabab-lite.chunk.js +0 -2
- package/dist/scripts/6544-ae27efabab-lite.chunk.js.map +0 -1
- package/dist/scripts/6752-5dddab5e0b-lite.chunk.js +0 -2
- package/dist/scripts/6752-5dddab5e0b-lite.chunk.js.map +0 -1
- package/dist/scripts/6852-9dfd47d085-lite.chunk.js +0 -2
- package/dist/scripts/6852-9dfd47d085-lite.chunk.js.map +0 -1
- package/dist/scripts/7293-3e6ad36a7a-lite.chunk.js.map +0 -1
- package/dist/scripts/841-73ef4ba5ec-lite.chunk.js +0 -3
- package/dist/scripts/841-73ef4ba5ec-lite.chunk.js.map +0 -1
- package/dist/scripts/8801-222a1b2e99-lite.chunk.js +0 -2
- package/dist/scripts/8801-222a1b2e99-lite.chunk.js.map +0 -1
- package/dist/scripts/9139-49023800c6-lite.chunk.js +0 -2
- package/dist/scripts/9139-49023800c6-lite.chunk.js.map +0 -1
- package/dist/scripts/9173-f9708ec0de-lite.chunk.js +0 -2
- package/dist/scripts/9173-f9708ec0de-lite.chunk.js.map +0 -1
- package/dist/scripts/bundle-e72459b30e.min.js +0 -3
- package/dist/scripts/bundle-e72459b30e.min.js.map +0 -1
- /package/dist/css/{4273-lite-a3c7435ba4.chunk.css → 3999-lite-a3c7435ba4.chunk.css} +0 -0
- /package/dist/css/{4063-lite-f72fc7b813.chunk.css → 4860-lite-f72fc7b813.chunk.css} +0 -0
- /package/dist/css/{4850-lite-f72fc7b813.chunk.css → 729-lite-f72fc7b813.chunk.css} +0 -0
- /package/dist/scripts/{1329-d48379c043-lite.chunk.js.LICENSE.txt → 1329-bdbbf6c7fd-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{1379-976d20185f-lite.chunk.js.LICENSE.txt → 1379-ca519ec56b-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{2004-3005565af0-lite.chunk.js.LICENSE.txt → 2004-e20d72976c-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{4273-de24896b28-lite.chunk.js.LICENSE.txt → 3999-317a4538c6-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{5220-85898810a6-lite.chunk.js.LICENSE.txt → 5220-291b2243ad-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{537-de7445d41a-lite.chunk.js.LICENSE.txt → 537-6efb9bc099-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{624-bf0ff6257f-lite.chunk.js.LICENSE.txt → 624-09b51a9d32-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6489-532a022587-lite.chunk.js.LICENSE.txt → 6489-c242844567-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6741-1c125dbc6c-lite.chunk.js.LICENSE.txt → 6741-fe09fea334-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{841-73ef4ba5ec-lite.chunk.js.LICENSE.txt → 841-11af1334bf-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9395-e9b5cdbdce-lite.chunk.js.LICENSE.txt → 9395-e1a02b01ce-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9478-abfa7ed3cc-lite.chunk.js.LICENSE.txt → 9478-13da35c4ee-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{953-bf3d621a33-lite.chunk.js.LICENSE.txt → 953-225db845ab-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-e72459b30e.min.js.LICENSE.txt → bundle-7f9a9b650d.min.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/3999-317a4538c6-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/calendar/flight-request/CalendarRequests.ts","file:///app/packages/libs/shared/src/apps/subjects/components/audience-item/audience-item.scss","file:///app/packages/libs/shared/src/apps/subjects/components/audience-item/AudienceItem.tsx","file:///app/packages/libs/shared/src/apps/upload/utils/FileExtensionsHelper.ts","file:///app/packages/libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx","file:///app/packages/libs/shared/src/components/table-of-contents-list/table-of-contents-list.scss","file:///app/packages/libs/shared/src/components/table-of-contents-list/TableOfContentsList.tsx","file:///app/packages/libs/shared/src/enums/FeedbackType.ts","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/flight-requests/FeedbackRequests.ts","file:///app/packages/libs/shared/src/flight-requests/FollowRequests.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/hooks/usePrevious.ts","file:///app/packages/libs/shared/src/hooks/useTableOfContentsActiveHeading.tsx","file:///app/packages/libs/shared/src/hooks/useTableOfContentsScroll.tsx","file:///app/packages/libs/shared/src/utils/FeedbackFormHelper.ts","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/classification-header-details/ClassificationHeaderDetails.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/empty-state/CuratedClassificationEmptyState.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/table-of-contents/table-of-contents.scss","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/table-of-contents/TableOfContents.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/teacher-only/TeacherOnlyEmptyState.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/classification-coming-soon/ClassificationComingSoon.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/audience-filter/AudienceFilter.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/audiences/ClassificationDashboardAudiences.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/classification-tabs/classification-tabs.scss","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/classification-tabs/ClassificationTabs.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/classification-dashboard-nav/ClassificationDashboardNav.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/ClassificationDashboard.tsx","file:///app/packages/libs/shared/src/apps/subjects/hooks/useGetTopicsWidgets.ts","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/partial-loading/PartialClassificationDashboard.tsx","file:///app/packages/projects/lite/src/apps/subjects/errors/TopicNotFoundError.ts","file:///app/packages/projects/lite/src/apps/sign-up/utils/SignUpHelper.ts","file:///app/packages/projects/lite/src/apps/subjects/views/classification/ClassificationViewUtils.ts","file:///app/packages/projects/lite/src/apps/subjects/views/classification/curated-classification-view.scss","file:///app/packages/projects/lite/src/apps/subjects/views/classification/CuratedClassificationView.tsx","file:///app/packages/projects/lite/src/apps/subjects/hooks/useFetchClassificationDashboard.ts","file:///app/packages/libs/shared/src/components/pill-tab-selector/pill-tab-selector.scss"],"sourcesContent":["import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarEvent, CalendarEventContentType } from 'libs/shared/interfaces';\n\nexport const CalendarRequests = {\n calendarEvents(\n from: string,\n to: string,\n presentationId: string\n ): Flight.PublicRequest {\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/discover/special-events/content', { from, to, presentationId }),\n publicUrl: UrlHelper.urlBuilder(`/api/discover/special-events/content`, { from, to, presentationId }),\n key: `presentation:${presentationId}:events:from:${from}:to${to}`\n };\n },\n\n nextTopicSpecialEvent(\n classificationId: string,\n presentationId: string\n ): Flight.PublicRequest {\n const params = {\n presentationId,\n limit: 1,\n from: DateHelper.format(new Date(), 'YYYY-MM-DD'),\n objectType: CalendarEventContentType.Classification\n };\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/discover/special-events/object/${classificationId}/next-events`, params),\n publicUrl: UrlHelper.urlBuilder(`/api/discover/special-events/object/${classificationId}/next-events`, params),\n key: `presentation:${presentationId}:events:classification:${classificationId}`,\n formatData: (events: CalendarEvent[]) => ArrayHelper.first(events)\n };\n }\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"disabled\":\"pERi4\",\"disabledHighlighted\":\"AxyWm\"};","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\nimport styles from './audience-item.scss';\n\nconst namespace = 'shared.audienceItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction lowerCaseToTitleCase(str: string): string {\n return str.split(' ').map((s: string) => s.charAt(0).toUpperCase() + s.substring(1)).join(' ');\n}\n\nfunction getColourClass(highlight: boolean, isDisabled: boolean): string {\n if (highlight) return isDisabled ? `${styles.disabledHighlighted} text-light` : 'bg-gray-900 text-light';\n if (isDisabled) return `${styles.disabled} text-secondary`;\n return 'bg-light';\n}\n\ninterface AudienceItemProps {\n audience: PresentationAudience;\n highlight: boolean;\n setAudience?: (audience: PresentationAudience, highlight: boolean) => void;\n isDisabled?: boolean;\n extraClasses?: string;\n}\n\nAudienceItem.defaultProps = {\n extraClasses: ''\n};\n\nexport function AudienceItem(props: AudienceItemProps): React.ReactElement {\n const { audience, highlight, setAudience, isDisabled, extraClasses } = props;\n\n const colourClass = getColourClass(highlight, isDisabled);\n const cursorClass = isDisabled ? 'cursor-default' : 'cursor-pointer';\n const className = `rounded-pill d-inline-block me-1 user-select-none ${cursorClass} ${colourClass} ${extraClasses}`;\n\n const onClick = () => {\n if (isDisabled || !FunctionHelper.isFunction(setAudience))\n return;\n\n setAudience(audience, !highlight);\n };\n\n return (\n <button\n className={className}\n onClick={onClick}\n role='checkbox'\n aria-checked={highlight}\n aria-label={`${getPhrase('ariaFilter')} ${audience.name}`}\n >\n {lowerCaseToTitleCase(audience.name)}\n </button>\n );\n}","import * as _ from 'underscore';\n\n/**\n * This are kept as separate variables for when we eventually need a single group of them.\n * For example when we add image upload support.\n */\n\nconst pdfExtensions = ['pdf'];\nconst docExtensions = [ 'doc', 'docx', 'dotx', 'dot', 'rtf', 'docm', 'odt' ];\nconst textExtensions = [ 'csv', 'txt' ];\nconst excelExtensions = [ 'xls', 'xlt', 'xlsx' ];\nconst imageExtensions = [ 'jpg', 'tif', 'png', 'bmp', 'gif', 'jpeg' ];\nconst videoMimeType = 'video/*';\nconst archiveExtensions = [ 'zip', 'rar' ];\nconst powerPointExtensions = [ 'ppt', 'pot', 'pps', 'pptx' ];\n\nconst subtitleExtensions = ['srt'];\n\nconst FileExtensions = {\n IMAGES: `.${imageExtensions.join(',.')}`,\n VIDEO: videoMimeType,\n MIXED_MEDIA: `.${imageExtensions.join(',.')},${videoMimeType}`,\n RESOURCES: `.${[\n ...docExtensions,\n ...excelExtensions,\n ...powerPointExtensions,\n ...pdfExtensions,\n ...textExtensions,\n ...imageExtensions,\n ...archiveExtensions\n ].join(',.')}`,\n SUBTITLES: `.${subtitleExtensions.join(',.')}`\n};\n\nconst FileExtensionHelper = {\n getResourceType(extension: string): string {\n const ext = extension.toLowerCase();\n\n if (_.contains(docExtensions, ext)) return 'document';\n if (_.contains(excelExtensions, ext)) return 'excel';\n if (_.contains(powerPointExtensions, ext)) return 'powerpoint';\n if (_.contains(pdfExtensions, ext)) return 'pdf';\n\n if (_.contains(textExtensions, ext)) return 'text';\n if (_.contains(imageExtensions, ext)) return 'image';\n if (_.contains(archiveExtensions, ext)) return 'archive';\n if (_.contains(subtitleExtensions, ext)) return 'subtitle';\n\n return '';\n }\n};\n\nexport { FileExtensions, FileExtensionHelper };","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 p-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","// extracted by mini-css-extract-plugin\nexport default {\"itemsWrapper\":\"m6mGm\",\"anchorWrapper\":\"QptZj\",\"default\":\"_AZa8\",\"selectedItem\":\"Nuiel\",\"disabled\":\"WIzWJ\",\"floatIcon\":\"ARudn\",\"arrowIcon\":\"tEF5Q\",\"listIcon\":\"Ql2wi\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\n\nimport { EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport styles from './table-of-contents-list.scss';\n\nexport interface TableOfContentsItem<T=string> {\n name: string;\n id: T;\n tocIndentation?: number;\n}\n\ninterface TableOfContentsProps<T> {\n items: TableOfContentsItem<T>[];\n activeId: string;\n appLink?: Core.AppLink;\n analyticsData?: HashObject;\n setControlledId: (arg: string) => void;\n // set to true if the TOC is controlled by a local state rather than query params\n localState?: boolean;\n getAppLink?: (args: TableOfContentsItem<T>) => Core.AppLink;\n onItemClick?: (args: TableOfContentsItem<T>) => void;\n}\n\nexport function TableOfContentsList<T extends string>(props: TableOfContentsProps<T>): JSX.Element {\n const analyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.Widget,\n location: LocationContext.TableOfContents\n };\n\n function onItemSelect(item: TableOfContentsItem<T>) {\n ScrollHelper.preventScrollTop();\n props.setControlledId(item.id);\n \n props.onItemClick?.(item);\n \n setTimeout(() => document.getElementById(item.id)?.focus());\n }\n\n return (\n <div className={`${styles.itemsWrapper}`}>\n {props.items.map((item, idx) => {\n if (props.localState) {\n return (\n <DivButton\n key={item.id}\n className={`${styles.anchorWrapper} ${props.activeId === item.id ? styles.selectedItem : ''}`}\n onClick={() => {\n onItemSelect(item);\n }}\n >\n <div className={`${!props.activeId && idx === 0 ? styles.default : ''} `}>\n {item.name}\n </div>\n </DivButton>\n );\n }\n\n return (\n <AppLink\n key={item.id}\n appLink={props.getAppLink(item)}\n appLinkOptions={{ replace: true }}\n className={`${styles.anchorWrapper} ${props.activeId === item.id ? styles.selectedItem : ''}`}\n onClick={() => {\n onItemSelect(item);\n }}\n analyticsData={{\n ...props.analyticsData,\n id: item.id,\n name: item.name\n }}\n analyticsOptions={analyticsOptions}\n >\n <div className={`${!props.activeId && idx === 0 ? styles.default : ''} ${item.tocIndentation ? 'ms-3' : ''}`}>\n {item.name}\n </div>\n </AppLink>\n );\n })}\n </div>\n );\n}","export enum FeedbackType {\n Other,\n SuggestImprovement,\n ReportBug,\n RequestVideo,\n RaiseIssue,\n GivePraise,\n Footer,\n RequestLivestream\n}","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/react/index';\n\nimport { FeedbackFormRequest } from 'libs/shared/interfaces/requests/FeedbackFormRequest';\n\nexport const FeedbackRequests = {\n submitFeedback(requestData: FeedbackFormRequest, formValues: Record<string, string>): Flight.Request {\n return {\n url: '{gateway}/v1/feedback',\n key: 'submit:feedback',\n type: HttpVerbs.POST,\n data: {\n ...requestData,\n ...formValues\n }\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';\n\nconst endpoints = {\n follow: () => `/api/domain/v1/subjects/classifications/following`,\n unfollow: (ids: string[]) => UrlHelper.urlBuilder('/api/domain/v1/subjects/classifications/following', { id: ids })\n};\n\nexport const FollowRequests = {\n /**\n * @param data - array of object ids the user is going to follow\n */\n follow(\n ids: string[],\n userId: string,\n success?: (data: string[]) => void,\n error?: () => void\n ): Flight.Request {\n return {\n url: endpoints.follow(),\n key: `follow:${ids.join(',')}`,\n type: HttpVerbs.POST,\n data: ids,\n formatData: () => {\n return ids.map(id => ({\n id,\n followers: {\n data: [userId]\n }\n }));\n },\n success,\n error,\n invalidationKeys: [ ...ids.map(id => `classification:${id}`), 'my:subject:preferences', 'classifications' ]\n };\n },\n\n unfollow(ids: string[], userId: string, success?: () => void, error?: () => void): Flight.Request {\n return {\n url: endpoints.unfollow(ids),\n key: `unfollow:${ids.join(',')}`,\n type: HttpVerbs.DELETE,\n formatData: () => {\n return ids.map(id => ({\n id,\n followers: {\n data: []\n }\n }));\n },\n success,\n error,\n invalidationKeys: [ ...ids.map(id => `classification:${id}`), 'my:subject:preferences', 'classifications' ]\n };\n }\n};\n","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import React from 'react';\n\n// https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state\nexport function usePrevious<T>(value: T): T {\n const ref = React.useRef<T>();\n React.useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n}","import React from 'react';\n\ntype TableOfContentsActiveOption = {\n setActiveId: (id: string) => void;\n headingElements: Element[];\n controlledId?: string;\n setControlledId?: (arg: string) => void;\n}\n\nlet timer: number;\n\nexport const useTableOfContentsActiveHeading = (\n { setActiveId, headingElements, controlledId, setControlledId }: TableOfContentsActiveOption\n) => {\n const scrollPositionRef = React.useRef(0);\n\n React.useEffect(() => {\n const callback = (headings: IntersectionObserverEntry[]) => {\n headings.forEach(heading => {\n if (controlledId) {\n setActiveId(controlledId);\n // can use scrollEnd event when the new event type is supported\n timer = window.setTimeout(() => {\n setControlledId('');\n }, 800);\n return;\n }\n if (heading.isIntersecting) {\n setActiveId(heading.target.id);\n scrollPositionRef.current = window.scrollY;\n } else {\n const scrollDistance = scrollPositionRef.current - window.scrollY;\n const isScrollingUp = scrollDistance > 0;\n const curIndex = headingElements.findIndex(h => h.id === heading.target.id);\n const prevHeading = headingElements[curIndex - 1];\n if (isScrollingUp && prevHeading?.id) {\n setActiveId(prevHeading?.id);\n }\n }\n });\n };\n\n const observer = new IntersectionObserver(callback, {\n // rootMargin top: same as the cv-nav-height\n rootMargin: '-67px 0px -80% 0px'\n });\n\n headingElements.forEach(element => observer.observe(element));\n\n return () => {\n timer && window.clearTimeout(timer);\n observer.disconnect();\n };\n }, [ setActiveId, headingElements.length, controlledId ]);\n};\n\n","import React from 'react';\n\nimport { usePrevious } from './usePrevious';\n\nconst HEADER_OFFSET = 80; // Size of header + some extra spacing\n\nexport const useTableOfContentsScroll = (elements: Element[], activeId: string) => {\n const [ hasDoneInitialScroll, setHasDoneInitialScroll ] = React.useState(false);\n\n const previousId = usePrevious(activeId);\n const currentId = activeId;\n\n React.useLayoutEffect(() => {\n if (!hasDoneInitialScroll || previousId !== currentId) {\n const target = elements.find(heading => heading && (heading?.id === currentId));\n\n if (target) {\n const rec = target.getBoundingClientRect();\n\n window.scrollBy({\n top: rec.top - HEADER_OFFSET,\n behavior: 'smooth'\n });\n \n if (!hasDoneInitialScroll)\n setHasDoneInitialScroll(true);\n }\n }\n }, [ elements, previousId, currentId, hasDoneInitialScroll ]);\n};","import Dropzone from 'dropzone';\n\nimport { UploadItem } from 'libs/shared/apps/upload/services/UploadService';\nimport { FileExtensions } from 'libs/shared/apps/upload/utils/FileExtensionsHelper';\nimport { InstanceRegion } from 'libs/shared/enums/InstanceRegion';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { UserRole } from 'libs/shared/enums/UserRole';\nimport { CurrentUser, Customer } from 'libs/shared/interfaces';\nimport { FeedbackUserDetails } from 'libs/shared/interfaces/requests/FeedbackFormRequest';\n\nexport const FeedbackFormHelper = {\n getUserInfo: (\n currentUser: CurrentUser,\n customer: Customer\n ): FeedbackUserDetails => {\n return {\n id: currentUser.id,\n username: currentUser.username,\n email: currentUser.email,\n userType: currentUser.role === UserRole.Admin ? 'Admin' : 'Staff',\n customerId: currentUser.customerId,\n cvcId: customer.crmId,\n customerName: customer.name,\n instanceRegion: currentUser.instanceRegion,\n contentRegion: currentUser.contentRegion,\n firstName: currentUser.givenName,\n lastName: currentUser.familyName\n };\n },\n\n mapInstanceRegionToTag: (instanceRegion: InstanceRegion): string => {\n switch (instanceRegion) {\n case InstanceRegion.AU:\n return 'au';\n case InstanceRegion.NZ:\n return 'nz';\n case InstanceRegion.UK:\n return 'uk';\n case InstanceRegion.US:\n return 'us';\n }\n },\n\n getTags: (currentUser: CurrentUser, product: ProductId, hasStudentExperience: boolean, extraTags: string[]) => {\n const tags = [\n product,\n ...extraTags\n ];\n\n tags.push(hasStudentExperience ? 'student' : 'staff');\n \n if (currentUser.role === UserRole.Admin)\n tags.push('administrator');\n \n const regionTag = FeedbackFormHelper.mapInstanceRegionToTag(currentUser.instanceRegion);\n \n if (regionTag)\n tags.push(regionTag);\n\n return tags;\n },\n\n categorizeFiles(files: UploadItem[]) {\n return files.reduce((result, file) => {\n const fileInfo = file.get('fileInfo');\n if (Dropzone.isValidFile(file.get('file'), FileExtensions.VIDEO)) {\n result.videoUrls.push(fileInfo?.url);\n } else {\n result.imageUrls.push(fileInfo?.url);\n }\n return result;\n }, {\n imageUrls: [],\n videoUrls: []\n });\n }\n};","import React from 'react';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ClassificationCounts } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { Classification } from 'libs/shared/interfaces';\n\nconst namespace = 'subject.classificationHeaderDetails';\n\nconst Separator = ({ className }: { className: string }) =>\n <span className={className}>•</span>;\n\ninterface ClassificationHeaderDetailsProps {\n classification: Classification & ClassificationCounts;\n}\n\nexport function ClassificationHeaderDetails(props: ClassificationHeaderDetailsProps): React.ReactElement {\n // TODO: read counts from classification metadata and externalMetadata when data has been cleaned up \n const { childDashboardVideoCount, childDashboardResourceCount, childClassificationCount } = props.classification;\n\n return (\n <p className='mb-n1 font-size-normal fw-normal mt-1'>\n {!!childClassificationCount && (\n <Text\n namespace={namespace}\n phrase='topics'\n options={{ count: childClassificationCount.toLocaleString(), smartCount: childClassificationCount }}\n />\n )}\n\n {!!childDashboardVideoCount && (\n <>\n <Separator className='mx-2' />\n <Text\n namespace={namespace}\n phrase='videos'\n options={{ count: childDashboardVideoCount.toLocaleString(), smartCount: childDashboardVideoCount }}\n />\n </>\n )}\n {!!childDashboardResourceCount && (\n <>\n <Separator className='mx-2' />\n <Text\n namespace={namespace}\n phrase='resources'\n options={{ count: childDashboardResourceCount.toLocaleString(), smartCount: childDashboardResourceCount }}\n />\n </>\n )}\n </p>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { CuratedDashboard, DashboardStatus } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'subjects.curatedClassificationEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CuratedClassificationEmptyStateProps {\n dashboard: CuratedDashboard;\n imageUrl: string;\n isReadonly: boolean;\n addWidgetApplink?: () => Core.AppLink;\n}\n\nexport function CuratedClassificationEmptyState(props: CuratedClassificationEmptyStateProps): JSX.Element {\n const isArchived = props.dashboard?.status === DashboardStatus.Archived;\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} altText={getPhrase('headingForNP')} />\n {!props.isReadonly ? (\n <EmptyState.Heading>\n <Text phrase='headingForNP' />\n </EmptyState.Heading>\n ) : (\n <>\n <EmptyState.Heading>\n <Text namespace={namespace} phrase='headingForCurator' />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='info' />\n </EmptyState.Info>\n <Tooltip title={isArchived ? LanguageService.getPhrase(namespace, 'archivedCtaTooltip') : ''} spanHack>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'add')}\n appLink={props.addWidgetApplink?.()}\n className='btn btn-dark'\n icon={cvSvgLibrary.Plus}\n disabled={isArchived}\n />\n </Tooltip>\n </>\n )}\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"k1iOO\",\"mobile\":\"QwoBj\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { TableOfContentsList } from 'libs/shared/components/table-of-contents-list/TableOfContentsList';\nimport { CuratedWidget } from 'libs/shared/interfaces';\nimport { ContextService } from 'libs/shared/services/ContextService';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './table-of-contents.scss';\n\ninterface TableOfContentsContainerProps {\n widgets: CuratedWidget[];\n title: string;\n activeId: string;\n appLink?: Core.AppLink;\n clickable?: boolean;\n analyticsData?: HashObject;\n setControlledId: (arg: string) => void;\n isSmallScreen?: boolean;\n}\ninterface TableOfContentsProps extends TableOfContentsContainerProps {\n getAppLink: (widget: CuratedWidget) => Core.AppLink\n}\n\nfunction TableOfContentsMobile(props: TableOfContentsProps) {\n const [ isExpanded, setIsExpanded ] = React.useState(false);\n\n function logUserAction() {\n const analyticsOptions = {\n actionType: !isExpanded ? UserAction.Open : UserAction.Hide,\n entity: EntityType.TableOfContents,\n location: LocationContext.Dashboard\n };\n\n AnalyticsHelper.logUserAction(props.analyticsData, analyticsOptions);\n }\n\n function onClickIcon() {\n setIsExpanded(!isExpanded);\n logUserAction();\n }\n\n return (\n <div className={`${styles.mobile} d-inline-flex gap-1`}>\n \n {isExpanded && (\n <div className='bg-white px-3 pt-3 pb-2 border border-dark rounded-1 ps-3'>\n <h2 className='h5'>{props.title}</h2>\n <TableOfContentsList\n items={props.widgets.map(widget => (\n { name: widget.name, id: widget.id, tocIndentation: widget.metadata.tocIndentation }\n ))}\n activeId={props.activeId}\n appLink={props.appLink}\n analyticsData={props.analyticsData}\n setControlledId={props.setControlledId}\n getAppLink={props.getAppLink}\n onItemClick={() => setIsExpanded(false)}\n />\n </div>\n )}\n <div className={styles.container}>\n <IconButton\n className='btn btn-outline-dark'\n svgName={cvSvgLibrary.TableOfContents}\n onClick={onClickIcon}\n />\n </div>\n </div>\n );\n}\n\nfunction TableOfContents(props: TableOfContentsProps): JSX.Element {\n return (\n <aside className='col-3 order-1'>\n <div className={`${styles.container} ps-3`}>\n <h2 className='h5'>{props.title}</h2>\n \n <TableOfContentsList\n items={props.widgets.map(widget => (\n { name: widget.name, id: widget.id, tocIndentation: widget.metadata.tocIndentation }\n ))}\n activeId={props.activeId}\n appLink={props.appLink}\n analyticsData={props.analyticsData}\n setControlledId={props.setControlledId}\n getAppLink={props.getAppLink}\n />\n </div>\n </aside>\n );\n}\n\nexport function TableOfContentsContainer(props: TableOfContentsContainerProps): JSX.Element {\n function getAppLink(widget: CuratedWidget): Core.AppLink {\n const currentAppLink = ContextService.getCurrentRoute().appLink;\n \n const params: HashObject = currentAppLink.params\n ? { ...(currentAppLink.params as HashObject) }\n : {};\n\n params.tocId = widget.id;\n\n return {\n ...currentAppLink,\n params\n };\n }\n\n return (\n <>\n {!props.isSmallScreen\n ? <TableOfContents {...props} getAppLink={getAppLink} />\n : <TableOfContentsMobile {...props} getAppLink={getAppLink} />\n }\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'subjects.teacherOnlyEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface TeacherOnlyEmptyStateProps {\n imageUrl: string;\n ctaAppLink?: () => Core.AppLink;\n}\n\nexport function TeacherOnlyEmptyState(props: TeacherOnlyEmptyStateProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} altText={getPhrase('heading')} />\n <EmptyState.Heading>\n <Text phrase='heading' />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text phrase='info' />\n </EmptyState.Info>\n\n <EmptyState.Cta\n text={getPhrase('cta')}\n appLink={props.ctaAppLink?.()}\n className='btn btn-dark'\n />\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, SignUpDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ActionButton } from 'libs/shared/components/actions/ActionButton';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { Classification } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'subjects.classificationComingSoon';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ComingSoonProps {\n data: Classification;\n onToggleFollow?: () => void;\n canFollowSubjects: boolean;\n imageUrl: string;\n showFollowButtonSpinner: boolean;\n showSignUp: boolean;\n signUpAppLink: Core.AppLink;\n}\n\nexport function ClassificationComingSoon(props: ComingSoonProps): JSX.Element {\n const isFollowing = !!props.data.followers?.data?.length;\n function onClick(): void {\n props.onToggleFollow?.();\n }\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState className='pt-0'>\n <EmptyState.Image src={props.imageUrl} altText={getPhrase('comingSoon')} />\n\n <EmptyState.Heading>\n <Text phrase='comingSoon' />\n </EmptyState.Heading>\n\n <EmptyState.Info>\n <Text phrase={props.showSignUp ? 'infoAnon' : 'info'} />\n </EmptyState.Info>\n\n {props.canFollowSubjects && (\n <ActionButton\n svgName={isFollowing ? cvSvgLibrary.BellFilled : cvSvgLibrary.Bell}\n onClick={onClick}\n showSpinner={props.showFollowButtonSpinner}\n className={`btn follow-btn me-2 ${isFollowing ? 'btn-outline-dark' : 'btn-dark'}`}\n >\n <Text phrase={isFollowing ? 'following' : 'follow'} />\n </ActionButton>\n )}\n\n {props.showSignUp && !props.canFollowSubjects && (\n <AppLink\n appLink={props.signUpAppLink}\n className='btn btn-dark d-none d-lg-inline-block'\n analyticsOptions={{\n actionType: UserAction.Click,\n location: LocationContext.ClassificationComingSoon,\n entity: EntityType.AppLink,\n workflowPhase: WorkflowPhase.Start,\n descriptor: SignUpDescriptors.SignUp\n }}\n analyticsData={{}}\n tag='button'\n >\n {getPhrase('signUp')}\n </AppLink>\n )}\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n","import * as React from 'react';\n\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Core } from 'libs/common/core';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AudienceItem } from 'libs/shared/apps/subjects/components/audience-item/AudienceItem';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { PresentationAudience } from 'libs/shared/interfaces';\nimport { PartialLoadingHelper } from 'libs/shared/utils/PartialLoadingHelper';\n\nconst namespace = 'subjects.audienceFilter';\n\ninterface AudienceFilterProps {\n audiences: PresentationAudience[];\n activeAudiences?: PresentationAudience[];\n disabled?: boolean;\n appLink: Core.AppLink;\n disablePersist?: boolean;\n}\n\nexport function AudienceFilter(props: AudienceFilterProps): React.ReactElement {\n const { audiences, activeAudiences, appLink } = props;\n\n const isDisabled = props.disabled || !appLink;\n\n const [ , setActiveAudiences ] = useViewModel<PresentationAudience[]>(\n SharedViewModelKeys.AUDIENCE_FILTER,\n undefined,\n { storage: StorageType.SessionStorage }\n );\n\n React.useEffect(() => {\n if (!props.disablePersist)\n setActiveAudiences(activeAudiences);\n }, [activeAudiences]);\n\n function onToggleAudience(audience: PresentationAudience, isSelected: boolean): void {\n if (isDisabled)\n return;\n\n const activeAudienceNames = isSelected\n ? [ ...(activeAudiences?.map(a => a.name) ?? []), audience.name ]\n : activeAudiences.map(a => a.name).filter(name => name !== audience.name);\n\n const getParams = () => {\n const otherParams = ObjectHelper.omit(appLink.params, ['a']);\n\n if (!activeAudienceNames.length)\n return otherParams;\n\n return Object.assign({}, otherParams, { a: activeAudienceNames });\n };\n\n Core.AppLinkHelper.trigger({\n ...appLink,\n params: getParams()\n }, { replace: true });\n }\n\n function onClickClearAudiences(): void {\n if (isDisabled)\n return;\n\n const params = ObjectHelper.omit(appLink.params, ['a']);\n\n Core.AppLinkHelper.trigger({\n ...appLink,\n params\n }, { replace: true });\n }\n\n if (!audiences || !audiences.length)\n return <></>;\n\n return (\n <div className='d-flex flex-wrap row-gap-2'>\n {audiences.map((a: PresentationAudience) => (\n <AudienceItem\n key={a.masterId}\n audience={a}\n highlight={!isDisabled && !!activeAudiences?.find(aa => aa.masterId === a.masterId)}\n setAudience={onToggleAudience}\n isDisabled={isDisabled}\n />\n ))}\n {(!isDisabled && !!activeAudiences && !!Object.keys(activeAudiences).length) && (\n <DivButton className='info-link d-inline-block ms-1' onClick={onClickClearAudiences}>\n <Text namespace={namespace} phrase='clear' />\n </DivButton>\n )}\n </div>\n );\n}\n\nconst PARTIAL_AUDIENCES = PartialLoadingHelper.getPartialLoadingItems({ numItems: 6 });\n\nexport const PartialAudienceFilter = () => (\n <div className={'d-flex flex-wrap row-gap-2'}>\n {PARTIAL_AUDIENCES.map(({ width }, idx) => (\n <span\n key={idx}\n className='rounded-pill partial-loading-background me-1'\n dangerouslySetInnerHTML={{ __html: ' ' }}\n style={{ width }}\n />\n ))}\n </div>\n);","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AudienceFilter } from 'libs/shared/apps/subjects/components/audience-filter/AudienceFilter';\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\ninterface ClassificationDashboardAudiencesProps {\n audiences: PresentationAudience[];\n activeAudiences: PresentationAudience[];\n appLink: Core.AppLink;\n isReadonly: boolean;\n disablePersist: boolean;\n}\n\nexport function ClassificationDashboardAudiences(props: ClassificationDashboardAudiencesProps): JSX.Element {\n return (\n <AudienceFilter\n audiences={props.audiences}\n activeAudiences={props.activeAudiences}\n disabled={props.isReadonly}\n appLink={props.appLink}\n disablePersist={props.disablePersist}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"curatedTopicTab\":\"CmVlO\",\"tabTransition\":\"rX31t\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PillTab, PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { WidgetAppLinks } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { useProductTipsContext } from 'libs/shared/context/product-tips-context/ProductTipsContext';\nimport { Breakpoints, useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classification, Presentation } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { useDirectoryTabProductTipSwitcher } from '../../../hooks/useDirectoryTabProductTipSwitcher';\n\nimport styles from './classification-tabs.scss';\n\nconst namespace = 'shared.classificationDashboard';\n\nexport type ClassificationTab = 'new-releases' | 'all-topics' | 'curated-topic' | 'video-list';\n\nfunction getTabs(\n props: ClassificationTabsProps,\n breakpoints: Breakpoints,\n activeTab: ClassificationTab,\n isHighlighting: boolean\n): PillTab[] {\n const showText = breakpoints.lg || breakpoints.xl || breakpoints.xxl || breakpoints.xs;\n\n function getTopicTabClassName(): string {\n let className = isHighlighting ? styles.tabTransition : '';\n\n if (breakpoints.xs)\n return className + ' w-100';\n\n if (showText)\n return className = ` ${styles.curatedTopicTab}`;\n\n return className;\n }\n\n if (TopicsHelper.isTopLevelTopic(props.classification)) {\n return [{\n name: showText ? LanguageService.getPhrase(namespace, 'newReleases') : '',\n appLink: !props.isReadonly ? props.appLinks?.classification?.(props.classification) : null,\n active: activeTab === 'new-releases',\n svgName: cvSvgLibrary.Sparkle,\n analyticsData: {\n id: 'new-releases',\n classificationId: props.classification.id,\n classificationName: props.classification.name,\n presentationId: props.presentation.id,\n presentationDescription: props.presentation.description,\n name: LanguageService.getPhrase(namespace, 'newReleases'),\n url: Core.AppLinkHelper.getHref(props.appLinks?.classification?.(props.classification))\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n },\n className: `${breakpoints.xs ? 'w-100' : ''} ${isHighlighting ? styles.tabTransition : ''}`\n \n }, {\n name: showText ? LanguageService.getPhrase(namespace, 'allTopics') : '',\n appLink: !props.isReadonly ? props.appLinks?.classificationDirectory?.(props.classification) : null,\n active: activeTab === 'all-topics',\n svgName: cvSvgLibrary.Grid,\n analyticsData: {\n id: 'all-topics',\n classificationId: props.classification.id,\n classificationName: props.classification.name,\n presentationId: props.presentation.id,\n presentationDescription: props.presentation.description,\n name: LanguageService.getPhrase(namespace, 'allTopics'),\n url: Core.AppLinkHelper.getHref(props.appLinks?.classificationDirectory?.(props.classification))\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n },\n className: `${breakpoints.xs ? 'w-100' : ''} ${isHighlighting ? styles.tabTransition : ''}`\n }];\n }\n\n return [{\n name: showText ? LanguageService.getPhrase(namespace, 'topic') : '',\n appLink: !props.isReadonly ? props.appLinks?.classification?.(props.classification) : null,\n active: activeTab === 'curated-topic',\n svgName: cvSvgLibrary.Rectangles,\n analyticsData: {\n id: 'curated-topic',\n classificationId: props.classification.id,\n classificationName: props.classification.name,\n presentationId: props.presentation.id,\n presentationDescription: props.presentation.description,\n name: LanguageService.getPhrase(namespace, 'topic'),\n url: Core.AppLinkHelper.getHref(props.appLinks?.classification?.(props.classification))\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n },\n className: getTopicTabClassName()\n }, {\n name: showText ? LanguageService.getPhrase(namespace, 'videoList') : '',\n appLink: !props.isReadonly ? props.appLinks?.classificationVideos?.(props.classification) : null,\n active: activeTab === 'video-list',\n svgName: cvSvgLibrary.WidgetSeries,\n analyticsData: {\n id: 'video-list',\n classificationId: props.classification.id,\n classificationName: props.classification.name,\n presentationId: props.presentation.id,\n presentationDescription: props.presentation.description,\n name: LanguageService.getPhrase(namespace, 'videoList'),\n url: Core.AppLinkHelper.getHref(props.appLinks?.classificationVideos?.(props.classification))\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n },\n className: `${breakpoints.xs ? 'w-100' : ''} ${isHighlighting ? styles.tabTransition : ''}`\n }];\n}\n\ninterface ClassificationTabsProps {\n classification: Classification;\n presentation: Presentation;\n appLinks: WidgetAppLinks;\n activeTab: ClassificationTab;\n isReadonly: boolean;\n}\n\nexport function ClassificationTabs(props: ClassificationTabsProps): JSX.Element {\n const breakpoints = useBreakpoints();\n const { tab, isHighlighting } = useDirectoryTabProductTipSwitcher(props.activeTab);\n\n const { setProductTipRef } = useProductTipsContext('topics-directory-tab');\n\n return (\n <PillTabSelector\n borderRadius='sm'\n containerRef={el => setProductTipRef(el)}\n className={breakpoints.xs ? 'w-100' : ''}\n listClassName='d-flex flex-nowrap'\n tabs={getTabs(props, breakpoints, tab, isHighlighting)}\n />\n );\n}","import React from 'react';\n\nimport { Breadcrumb, Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { WidgetAppLinks } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classification, CuratedDashboard, Presentation, PresentationAudience } from 'libs/shared/interfaces';\nimport { AudienceHelper } from 'libs/shared/utils/audience-helper/AudienceHelper';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { ClassificationDashboardAudiences } from '../audiences/ClassificationDashboardAudiences';\nimport { ClassificationTab, ClassificationTabs } from '../classification-tabs/ClassificationTabs';\n\nfunction shouldHideAudiences(\n audiences: PresentationAudience[],\n activeAudiences: PresentationAudience[],\n isEmpty: boolean,\n isComingSoon: boolean\n): boolean {\n if (isComingSoon)\n return true;\n\n if (isEmpty && !activeAudiences?.length)\n return true;\n\n if (!AudienceHelper.shouldShowAudiences(audiences))\n return true;\n\n return false;\n}\n\ninterface ClassificationDashboardNavProps {\n dashboard: CuratedDashboard;\n classification: Classification;\n presentation: Presentation;\n appLinks: WidgetAppLinks;\n activeTab: ClassificationTab;\n audiences: PresentationAudience[];\n activeAudiences: PresentationAudience[];\n getBreadcrumbs: () => Breadcrumb[];\n\n hasTopicDirectoryDashboard: boolean;\n hasTopicVideosDashboard: boolean;\n isComingSoon: boolean;\n isEmpty: boolean;\n isViewingCurrentPresentation: boolean;\n isReadonly: boolean;\n disableAudiences: boolean;\n}\n\nexport function ClassificationDashboardNav(props: ClassificationDashboardNavProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n const hideAudiences = shouldHideAudiences(\n props.audiences,\n props.activeAudiences,\n props.isEmpty,\n props.isComingSoon\n );\n\n function canShowTabs(): boolean {\n if (!props.classification || !props.dashboard)\n return false;\n\n if (CuratedDashboardHelper.isSystemGeneratedDashboard(props.dashboard.widgets))\n return false;\n\n /**\n * For our top-level topics, we can show the topic tab if the topic has a directory dashboard.\n */\n if (TopicsHelper.isTopLevelTopic(props.classification))\n return props.hasTopicDirectoryDashboard;\n\n /**\n * For our lower level topics, we can show the video tab if the topic has one\n */\n if (props.hasTopicVideosDashboard)\n return true;\n\n return false;\n }\n\n function getContainerClass(): string {\n let className = 'd-flex flex-column py-3 mb-3';\n\n if (!props.isComingSoon)\n className += ' border-bottom';\n\n if ((canShowTabs() || hideAudiences) && !breakpoints.xs)\n return className;\n\n return className + ' row-gap-3';\n }\n\n function getTopRowClass(): string {\n if (hideAudiences) {\n if (breakpoints.xs)\n return 'd-flex flex-column justify-content-between row-gap-3';\n\n return 'd-flex align-items-center justify-content-between';\n }\n\n let className = '';\n\n className += 'd-flex align-items-center justify-content-between mb-1';\n\n if (breakpoints.xs)\n className += ' row-gap-3 mb-0';\n\n return className;\n }\n\n function getBottomRowClass(): string {\n let className = 'd-flex align-items-end justify-content-between';\n\n if (breakpoints.xs)\n className += ' row-gap-3 flex-wrap';\n\n return className;\n }\n\n return (\n <div className={getContainerClass()}>\n <div className={getTopRowClass()}>\n <Breadcrumbs breadcrumbs={props.getBreadcrumbs?.()} />\n\n {canShowTabs() && hideAudiences && (\n <ClassificationTabs\n classification={props.classification}\n activeTab={props.activeTab}\n appLinks={props.appLinks}\n presentation={props.presentation}\n isReadonly={props.isReadonly}\n />\n )}\n </div>\n\n <div className={getBottomRowClass()}>\n {!hideAudiences && (\n <ClassificationDashboardAudiences\n audiences={props.audiences}\n activeAudiences={props.activeAudiences}\n appLink={props.appLinks.audience?.()}\n isReadonly={props.isReadonly || props.disableAudiences}\n disablePersist={!props.isViewingCurrentPresentation}\n />\n )}\n\n {canShowTabs() && !hideAudiences && (\n <ClassificationTabs\n classification={props.classification}\n activeTab={props.activeTab}\n appLinks={props.appLinks}\n presentation={props.presentation}\n isReadonly={props.isReadonly}\n />\n )}\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsOptions, HashObject, LocationContext } from 'libs/analytics/interfaces';\n\nimport { ClassificationHeaderDetails } from 'libs/shared/apps/subjects/components/classification-dashboard/classification-header-details/ClassificationHeaderDetails';\nimport { CuratedClassificationEmptyState } from 'libs/shared/apps/subjects/components/classification-dashboard/empty-state/CuratedClassificationEmptyState';\nimport { TableOfContentsContainer } from 'libs/shared/apps/subjects/components/classification-dashboard/table-of-contents/TableOfContents';\nimport { TeacherOnlyEmptyState } from 'libs/shared/apps/subjects/components/classification-dashboard/teacher-only/TeacherOnlyEmptyState';\nimport { useGetTopicsWidgets } from 'libs/shared/apps/subjects/hooks/useGetTopicsWidgets';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { BannerHeader } from 'libs/shared/components/banner-header/BannerHeader';\nimport { Breadcrumb } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { DashboardFeedbackData } from 'libs/shared/components/feedback-form/FeedbackForm';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoSubTextType } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { WidgetAppLinks } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { LocalPermissionName } from 'libs/shared/enums/PermissionName';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { SettingsHash } from 'libs/shared/hooks/useSettings';\nimport { useTableOfContentsActiveHeading } from 'libs/shared/hooks/useTableOfContentsActiveHeading';\nimport { useTableOfContentsScroll } from 'libs/shared/hooks/useTableOfContentsScroll';\nimport { CalendarEvent, CalendarEventContentType, CanFavouriteFunc, Classification, CuratedDashboard, CuratedWidget, CuratedWidgetQueryParams, DashboardStatus, DashboardTargetType, FavouriteFunc, Presentation, PresentationAudience, YearGroup } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { ClassificationComingSoon } from './classification-coming-soon/ClassificationComingSoon';\nimport { ClassificationDashboardNav } from './classification-dashboard-nav/ClassificationDashboardNav';\nimport { ClassificationTab } from './classification-tabs/ClassificationTabs';\n\nconst namespace = 'shared.classificationDashboard';\n\nfunction isHeadingWidget(widget: CuratedWidget) {\n return widget.widgetId === WidgetTypeId.Blurb && widget.templateId === WidgetTemplate.Heading;\n}\n\nfunction isTopicWidget(widget: CuratedWidget) {\n return widget.widgetId === WidgetTypeId.CuratedClassifications || widget.widgetId === WidgetTypeId.Classifications;\n}\n\ninterface ClassificationDashboardProps {\n dashboard: CuratedDashboard;\n classification: Classification;\n presentation: Presentation;\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n resourceThumbnailFallbackImageUrl: string;\n hasTopicDirectoryDashboard: boolean;\n hasTopicVideosDashboard: boolean;\n tab: ClassificationTab;\n specialEvent?: CalendarEvent;\n\n audiences: PresentationAudience[];\n activeAudiences?: PresentationAudience[];\n\n getWidgetContentRequest: (\n id: string,\n params: CuratedWidgetQueryParams,\n widgetTemplate: WidgetTemplate\n ) => Flight.Request;\n\n getBannerActions?: () => ActionOptions[];\n getBreadcrumbs?: () => Breadcrumb[];\n onToggleFollow?: (classification: Classification, locationContext: LocationContext) => void;\n setFavourite?: FavouriteFunc;\n canFavourite?: CanFavouriteFunc;\n canFollowSubjects: boolean;\n onSubmitFeedback?: (feedback: DashboardFeedbackData) => Promise<void>;\n\n appLinks?: WidgetAppLinks;\n\n imageCdnUrl: string\n emptyImageUrl: string;\n comingSoonImageUrl?: string;\n\n analyticsOptions?: AnalyticsOptions;\n analyticsData?: HashObject;\n\n scrollToWidgetId?: string;\n tableOfContentsId?: string;\n\n // Means the dashboard contains no linked or working filters\n isReadonly?: boolean;\n\n // Means the dashboard is being previewed by ClickView staff either in product or in curator\n isPreviewing?: boolean;\n\n // Means the parent topic for the dashboard has a status of \"Coming Soon\"\n isComingSoon?: boolean;\n\n showFollowButtonSpinner?: boolean;\n \n isViewCurrentPresentation?: boolean;\n\n yearGroups?: YearGroup[];\n\n // By default widgets will always be lazyloaded. We override this behaviour only in extenuating \n // circumstances, such as dynamic rendering for SEO.\n lazyLoad?: boolean;\n\n moviesAndTv?: boolean;\n\n isTeacherOnly?: boolean;\n\n // Fallback url to display for the company logo. Only used by Streamable Learning atm\n companyLogoFallbackUrl?: string;\n\n subTextType?: VideoSubTextType;\n \n contentType?: CalendarEventContentType;\n\n isBot?: boolean;\n\n isPlugin: boolean;\n\n settings?: SettingsHash;\n}\n\nClassificationDashboard.defaultProps = {\n appLinks: {}\n};\n\nexport function ClassificationDashboard(props: ClassificationDashboardProps): JSX.Element {\n const { widgets, videoList, videoListWidgetId } = useGetTopicsWidgets(props.dashboard, props.activeAudiences);\n\n const isSmallScreen = useMediaQuery(MediaQueryStrings.LGDown);\n const headingRef = React.useRef<Set<Element>>(new Set());\n\n const initialEmptyWidgets = React.useMemo(() => {\n return widgets.reduce((acc: HashObject<boolean>, widget) => {\n acc[widget.id] = false;\n return acc;\n }, {});\n }, [widgets?.length]);\n\n const [ emptyWidgets, setEmptyWidgets ] = React.useState(initialEmptyWidgets);\n\n const [ controlledId, setControlledId ] = React.useState(props.tableOfContentsId);\n\n const [ tableOfContentActiveId, setTableOfContentActiveId ] = React.useState<string>('');\n\n const headingElements = Array.from(headingRef.current);\n useTableOfContentsScroll(headingElements, controlledId);\n useTableOfContentsActiveHeading({\n setActiveId: setTableOfContentActiveId,\n headingElements,\n controlledId,\n setControlledId\n });\n\n function shouldShowEmptyState(): boolean {\n if (props.isComingSoon)\n return false;\n\n if (props.isTeacherOnly)\n return false;\n\n if (!props.dashboard)\n return true;\n\n if (props.dashboard.status === DashboardStatus.Archived && !props.isReadonly)\n return true;\n\n if (props.dashboard.status === DashboardStatus.Draft && !props.isPreviewing)\n return true;\n\n if (!widgets?.length)\n return true;\n\n if (videoList && videoList.length)\n return false;\n\n return Object.values(emptyWidgets).every(state => !!state);\n }\n\n function getWidgetContentRequest(id: string, widgetTypeId: WidgetTypeId, template: WidgetTemplate): Flight.Request {\n const params = CuratedDashboardHelper.getWidgetParams(\n widgetTypeId,\n template,\n CuratedDashboardHelper.getDashboardTargetType(props.dashboard),\n props.activeAudiences?.map(a => a.masterId)\n );\n\n return props.getWidgetContentRequest(id, params, template);\n }\n\n const showEmptyState = shouldShowEmptyState();\n\n React.useEffect(() => {\n /**\n * When we add the first widget of the dashboard, the showEmptyState is `true`, the WidgetContainer is not going to be rendered to lazyload the `content`\n * so we set the emptyWidget to initial make sure the widget container is rendered to lazyload `widget.content`\n * and let the WidgetContainer to re-set the empty state based on the actual `widget.content` from backend\n */\n if (showEmptyState) {\n setEmptyWidgets(initialEmptyWidgets);\n }\n }, [widgets?.length]);\n\n const onSetIsEmpty = React.useCallback((widgetId: string, isEmpty: boolean) => {\n if (emptyWidgets[widgetId] === isEmpty)\n return;\n\n const newEmptyState = {\n ...emptyWidgets,\n [widgetId]: isEmpty\n };\n\n // The logic beneath this if-block doesn't apply to classification directories. This is because\n // classification directories don't support audience filtering, so widgets should never be empty,\n // meaning headings should never be hidden.\n if (CuratedDashboardHelper.isType(props.dashboard, DashboardTargetType.ClassificationDirectory)) {\n setEmptyWidgets(newEmptyState);\n return;\n }\n\n let index = 0;\n\n /**\n * Every time a widget is identified as empty, we check each heading blurb widget\n * to see if it should be hidden. This will be the case when all widgets beneath a heading\n * (up until the next heading) are empty.\n */\n while (index < widgets.length) {\n const currentWidget = widgets[index];\n\n if (!isHeadingWidget(currentWidget)) {\n index++;\n continue;\n }\n\n let isHeadingEmpty = true;\n let subWidgetIndex = index + 1;\n\n while (isHeadingEmpty && subWidgetIndex < widgets.length) {\n const headingSubWidget = widgets[subWidgetIndex];\n\n if (isHeadingWidget(headingSubWidget))\n break;\n\n if (!newEmptyState[headingSubWidget.id] && !isTopicWidget(headingSubWidget))\n isHeadingEmpty = false;\n\n subWidgetIndex++;\n }\n\n index = subWidgetIndex;\n\n newEmptyState[currentWidget.id] = isHeadingEmpty;\n }\n\n setEmptyWidgets(newEmptyState);\n }, [ emptyWidgets, widgets ]);\n\n function hideWidget(widget: CuratedWidget): boolean {\n return isHeadingWidget(widget) && emptyWidgets[widget.id];\n }\n\n function useLargeDashboardSpacing(): boolean {\n const target = CuratedDashboardHelper.getDashboardTargetType(props.dashboard);\n\n if (props.moviesAndTv || target === DashboardTargetType.ClassificationVideos)\n return false;\n\n return true;\n }\n\n function getWidgetHeading(widget: CuratedWidget, index: number): string {\n if (widget.widgetId === WidgetTypeId.ClassificationDashboardExternalMedia) {\n const previousWidget = widgets[index - 1];\n\n if (emptyWidgets[previousWidget.id])\n return widget.name.replace('Other videos', 'Videos');\n\n return widget.name;\n }\n\n return widget.name;\n }\n\n const widgetsInTableOfContents = widgets.filter(w => {\n return !hideWidget(w) && !!w.metadata?.showInTableOfContents;\n });\n\n const isTopicOnlyDashboard = widgets.every(isTopicWidget);\n\n const shouldShowTableOfContents = widgetsInTableOfContents.length >= 2;\n const shouldShowSideTableOfContents = shouldShowTableOfContents && !isSmallScreen;\n\n const shouldShowTopicCounts = props.hasTopicDirectoryDashboard && TopicsHelper.isTopLevelTopic(props.classification);\n\n /**\n * We don't put the .topic-dashboard class when we're in a movies and tv classification\n * because we don't want the extra padding between widgets.\n */\n return (\n <div className={`bg-white px-4 ${useLargeDashboardSpacing() ? 'dashboard-spacing-lg' : ''}`}>\n <BannerHeader\n heading={props.classification.name}\n banner={props.classification.banner}\n imageCdnUrl={props.imageCdnUrl}\n actions={props.getBannerActions?.()}\n actionsDropdownClassName='btn btn-outline-dark'\n specialEvent={props.specialEvent}\n calendarTheme={{\n background: 'bg-light-blue',\n border: 'border-light-blue'\n }}\n showComingSoon={props.isComingSoon}\n detailsComponent={shouldShowTopicCounts\n ? () => <ClassificationHeaderDetails classification={props.classification} />\n : null\n }\n />\n\n <ClassificationDashboardNav\n dashboard={props.dashboard}\n classification={props.classification}\n presentation={props.presentation}\n appLinks={props.appLinks}\n activeTab={props.tab}\n audiences={props.audiences}\n activeAudiences={props.activeAudiences}\n getBreadcrumbs={props.getBreadcrumbs}\n hasTopicDirectoryDashboard={props.hasTopicDirectoryDashboard}\n hasTopicVideosDashboard={props.hasTopicVideosDashboard}\n isComingSoon={props.isComingSoon}\n isEmpty={showEmptyState}\n isViewingCurrentPresentation={props.isViewCurrentPresentation}\n isReadonly={props.isReadonly}\n disableAudiences={isTopicOnlyDashboard}\n />\n\n {props.isComingSoon && (\n <ClassificationComingSoon\n imageUrl={props.comingSoonImageUrl}\n data={props.classification}\n canFollowSubjects={props.canFollowSubjects}\n showFollowButtonSpinner={props.showFollowButtonSpinner}\n onToggleFollow={() => props.onToggleFollow(props.classification, LocationContext.ClassificationComingSoon)}\n showSignUp={!props.hasLocalPermissions(LocalPermissionName.FollowComingSoonTopics)}\n signUpAppLink={props.appLinks.signUp?.()}\n />\n )}\n\n {!props.isComingSoon && (\n <div className={`${shouldShowSideTableOfContents ? 'row no-wrap' : ''}`}>\n {shouldShowTableOfContents && (\n <TableOfContentsContainer\n widgets={widgetsInTableOfContents}\n title={props.classification.name}\n activeId={tableOfContentActiveId}\n clickable={!props.isReadonly}\n analyticsData={props.analyticsData}\n setControlledId={setControlledId}\n isSmallScreen={isSmallScreen}\n />\n )}\n\n <div className={shouldShowSideTableOfContents ? 'col-9 order-0' : ''}>\n {widgets.map((widget, idx) => {\n if (hideWidget(widget))\n return <React.Fragment key={widget.id}></React.Fragment>;\n\n return (\n <WidgetContainerView\n headingElementRef={headingRef}\n key={widget.id}\n id={widget.id}\n name={getWidgetHeading(widget, idx)}\n description={widget.description}\n classification={props.classification}\n templateId={widget.templateId}\n widgetTypeId={widget.widgetId}\n audiences={props.audiences}\n getContentRequest={getWidgetContentRequest}\n setIsEmpty={onSetIsEmpty}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n appLinks={props.appLinks}\n yearGroups={props.yearGroups}\n presentation={props.presentation}\n analyticsData={props.analyticsData}\n isScrollToTargetWidget={props.scrollToWidgetId === widget.id}\n imageCdnUrl={props.imageCdnUrl}\n onSubmitFeedback={props.onSubmitFeedback}\n metadata={widget.metadata}\n isBot={props.isBot}\n hasTableOfContents={shouldShowSideTableOfContents}\n lazyLoad={props.lazyLoad}\n dashboardTarget={CuratedDashboardHelper.getDashboardTargetType(props.dashboard)}\n widgetIndex={idx}\n hasPermissions={props.hasPermissions}\n hasLocalPermissions={props.hasLocalPermissions}\n isPreviewing={props.isReadonly}\n companyLogoFallbackUrl={props.companyLogoFallbackUrl}\n subTextType={props.subTextType}\n contentType={props.contentType}\n resourceThumbnailFallbackImageUrl={props.resourceThumbnailFallbackImageUrl}\n preferences={widget.preferences}\n onToggleFollowClassification={props.onToggleFollow}\n isPlugin={props.isPlugin}\n settings={props.settings}\n />\n );\n })}\n </div>\n\n {!!videoList?.length && (\n <>\n <WidgetHeader name={LanguageService.getPhrase(namespace, 'videos')} description='' />\n <VideoList\n videos={videoList}\n yearGroups={props.yearGroups}\n getVideoAppLink={(v, opts) => props.appLinks.videoType(v, { ...opts, contextId: videoListWidgetId })}\n getSubTextAppLink={props.appLinks.subText}\n hasPermissions={props.hasPermissions}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n presentationAudiences={props.audiences}\n companyLogoFallbackUrl={props.companyLogoFallbackUrl}\n subTextType={props.subTextType}\n getPreviewQuestionsAppLink={props.appLinks.previewQuestions}\n isPlugin={props.isPlugin}\n getClassroomGuideAppLink={props.appLinks.classroomGuide}\n getInteractiveGuidanceAppLink={props.appLinks.interactiveGuidance}\n getResourceGuidanceAppLink={props.appLinks.resourceGuidance}\n />\n </>\n )}\n </div>\n )}\n\n {showEmptyState && (\n <CuratedClassificationEmptyState\n dashboard={props.dashboard}\n isReadonly={props.isReadonly}\n imageUrl={props.emptyImageUrl}\n addWidgetApplink={props.appLinks.widgetWizard}\n />\n )}\n\n {props.isTeacherOnly && (\n <TeacherOnlyEmptyState\n imageUrl={props.emptyImageUrl}\n ctaAppLink={() => props.appLinks.allTopics(props.classification.presentationId)}\n />\n )}\n </div>\n );\n}","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { DashboardRequests } from 'libs/shared/flight-requests/DashboardRequests';\nimport { CuratedDashboard, CuratedMediaWidget, CuratedWidget, PresentationAudience, Video } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nexport interface Response {\n widgets: CuratedWidget[];\n\n videoList?: Video[];\n videoListWidgetId?: string;\n}\n\n/**\n * This hook helps us with custom logic for to display system generated dashboards in a slightly\n * different way.\n */\nexport function useGetTopicsWidgets(dashboard: CuratedDashboard, activeAudiences: PresentationAudience[]): Response {\n const {\n isSystemGeneratedDashboard,\n systemGeneratedVideoWidget\n } = React.useMemo(() => {\n if (!dashboard) {\n return {\n isSystemGeneratedDashboard: false,\n systemGeneratedVideoWidget: null\n };\n }\n\n const isSystemGeneratedDashboard = CuratedDashboardHelper.isSystemGeneratedDashboard(dashboard.widgets);\n\n return {\n isSystemGeneratedDashboard,\n systemGeneratedVideoWidget: dashboard.widgets.find(widget => {\n return widget.widgetId === WidgetTypeId.ClassificationPinnedVideos;\n })\n };\n }, [dashboard?.id]);\n\n const systemGeneratedVideoContent = Flight.useBasicFetch<CuratedMediaWidget<Video[]>>(\n !!systemGeneratedVideoWidget &&\n DashboardRequests.dashboardWidgetContent(\n systemGeneratedVideoWidget?.id,\n CuratedDashboardHelper.getWidgetParams(\n systemGeneratedVideoWidget.widgetId,\n systemGeneratedVideoWidget.templateId,\n CuratedDashboardHelper.getDashboardTargetType(dashboard),\n activeAudiences?.map(a => a.masterId)\n ),\n systemGeneratedVideoWidget?.templateId\n )\n );\n\n // Non system generated dashboards are returned as per usual\n if (!isSystemGeneratedDashboard)\n return { widgets: ArrayHelper.sortBy(dashboard?.widgets, 'index') };\n\n // System generated dashboard have the video widget removed and returned as a separate video list\n return {\n widgets: dashboard?.widgets?.filter(widget => widget.widgetId !== WidgetTypeId.ClassificationPinnedVideos) ?? [],\n videoList: systemGeneratedVideoContent.data?.content ?? [],\n videoListWidgetId: systemGeneratedVideoWidget?.id\n };\n}","import React from 'react';\n\nimport { PartialAudienceFilter } from 'libs/shared/apps/subjects/components/audience-filter/AudienceFilter';\nimport { PartialBannerHeader } from 'libs/shared/components/banner-header/BannerHeader';\nimport { PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\n\nexport function PartialClassificationDashboard(): JSX.Element {\n return (\n <div className='bg-white px-4'>\n <PartialBannerHeader />\n\n <div className='d-flex flex-column row-gap-3 py-3 mb-3 border-bottom'>\n <PartialBreadcrumbs />\n <PartialAudienceFilter />\n </div>\n </div>\n );\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ErrorCta, ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'subjects.topicNotFoundError';\n\nexport class TopicNotFoundError extends ErrorPageError {\n constructor() {\n super('Topic doesn\\'t exist');\n }\n\n // @ts-ignore\n public get name(): string {\n return 'TopicNotFoundError';\n }\n\n // @ts-ignore\n public get heading(): string {\n return LanguageService.getPhrase(namespace, 'heading');\n }\n\n // @ts-ignore\n public get description(): string {\n return LanguageService.getPhrase(namespace, 'description');\n }\n\n // @ts-ignore\n public get cta(): ErrorCta {\n return {\n text: LanguageService.getPhrase(namespace, 'cta'),\n appLink: {\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.CLASSIFICATION_ALL\n }\n };\n }\n}","import { Core } from 'libs/common/backbone/index';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nexport const SignUpHelper = {\n getSignUpAppLink: (): Core.AppLink => {\n const appLink: Core.AppLink = {\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n };\n\n const redirectUrl = Core.AppLinkHelper.getHref(Core.AppLinkHelper.getCurrentAppLink());\n\n if (redirectUrl !== '/')\n appLink.params = { redirectUrl };\n\n return appLink;\n }\n};","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { WidgetAppLinks } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { RelatedVideosContext } from 'libs/shared/enums/RelatedVideosContext';\nimport { Classification, DashboardTargetType, Playlist, PlaylistCollection, Resource, Series, SeriesCollection, Video, VideoCollection } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { ClassificationAppLinkHelper } from 'shared/utils/ClassificationAppLinkHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\nimport { SignUpHelper } from 'apps/sign-up/utils/SignUpHelper';\n\nexport interface ClassificationViewQueryParams {\n a?: string[];\n dashboardId?: string;\n preview?: 'true';\n tocId?: string;\n mtv?: boolean;\n}\n\nconst OMITTED_PARAMS = [ 'preview', 'dashboardId', 'skipPrompt' ];\n\n/**\n * Checks if the classification would have any content with\n * no filters applied\n */\nexport function hasNoContentUnfiltered(classification: Classification): boolean {\n if (!classification)\n return false;\n\n return (\n classification.series?.count === 0 &&\n classification.pinnedVideos?.count === 0 &&\n classification.playlists?.count === 0\n );\n}\n\ninterface HeroVideoWithVideoList {\n heroVideo: Video;\n videoList: Video[];\n}\n\nexport function extractHeroVideo(\n series: SeriesCollection,\n playlists: PlaylistCollection,\n videos: VideoCollection,\n classification: Classification\n): HeroVideoWithVideoList {\n if (!series || !playlists || !videos || !classification)\n return {\n heroVideo: null,\n videoList: videos && videos.data\n };\n\n // If the subject has no series/playlists, and has only 1 video, that video is displayed as the hero.\n if (!series.data.length && !playlists.data.length && videos.data.length === 1) {\n return {\n heroVideo: ArrayHelper.first(videos.data),\n videoList: []\n };\n }\n\n const pinnedVideoIndex = videos.data.findIndex(video => video.id === classification.pinnedVideoMasterId);\n\n if (pinnedVideoIndex === -1)\n return {\n heroVideo: null,\n videoList: videos.data\n };\n\n return {\n heroVideo: videos.data[pinnedVideoIndex],\n videoList: videos.data.filter(vid => vid.id !== classification.pinnedVideoMasterId)\n };\n}\nconst getPhrase = LanguageService.encloseNamespace('subjects.classification');\n\nexport function getBannerActions(\n classification: Classification,\n canFollowSubjects: boolean,\n onFollow: () => void,\n showFollowButtonSpinner: boolean,\n isSmallScreen: boolean\n): ActionOptions[] {\n if (!canFollowSubjects)\n return [];\n\n const isFollowing = !!classification.followers?.data?.length;\n\n return [{\n label: getPhrase(isFollowing ? 'following' : 'follow'),\n onClick: onFollow,\n svgName: isFollowing ? cvSvgLibrary.BellFilled : cvSvgLibrary.Bell,\n className: `btn follow-btn ${isFollowing ? 'btn-outline-dark' : 'btn-dark'}`,\n button: true,\n tooltip: (isFollowing || isSmallScreen) ? undefined : getPhrase('followBtnTooltip'),\n showSpinner: showFollowButtonSpinner\n }];\n}\n\nexport function getClassificationAppLinks(\n classification: Classification,\n targetType: DashboardTargetType,\n params: ClassificationViewQueryParams\n): WidgetAppLinks {\n return {\n audience: () => {\n switch (targetType) {\n case DashboardTargetType.ClassificationDirectory: {\n return null;\n }\n case DashboardTargetType.ClassificationVideos: {\n return {\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.CLASSIFICATION_VIDEOS,\n args: [ classification.id, TextHelper.slugify(classification.name) ],\n params\n };\n }\n default: {\n return ClassificationAppLinkHelper.getAppLink(classification, params);\n }\n }\n },\n \n classification: (_classification: Classification | null) => {\n const appLinkClassification = _classification || classification;\n\n return ClassificationAppLinkHelper.getAppLink(\n appLinkClassification,\n ObjectHelper.omit(params, OMITTED_PARAMS)\n );\n },\n\n classificationDirectory: (_classification: Classification) => {\n const appLinkClassification = _classification || classification;\n\n return {\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.CLASSIFICATION_TOPICS,\n args: [ appLinkClassification.id, TextHelper.slugify(appLinkClassification.name) ],\n params: ObjectHelper.omit(params, OMITTED_PARAMS)\n };\n },\n\n classificationVideos: (_classification: Classification) => {\n const appLinkClassification = _classification || classification;\n\n return {\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.CLASSIFICATION_VIDEOS,\n args: [ appLinkClassification.id, TextHelper.slugify(appLinkClassification.name) ],\n params: ObjectHelper.omit(params, OMITTED_PARAMS)\n };\n },\n\n videoType: (video: Video, opts: GetVideoAppLinkOptions) => (\n VideoAppLinkHelper.getAppLink(video, {\n ...opts,\n context: RelatedVideosContext.Widget,\n moviesAndTv: params.mtv\n })\n ),\n\n allTopics: (presentationId: string) => ({\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.CLASSIFICATION_ALL,\n params: { presentationId }\n }),\n\n series: (series: Series) => {\n return SeriesAppLinkHelper.getSeriesAppLink(series, {\n classificationId: classification.id,\n mtv: params.mtv ? true : undefined\n });\n },\n\n subText: (video: Video) => SeriesAppLinkHelper.getSeriesAppLink(video.series, {\n classificationId: classification.id,\n mtv: params.mtv ? true : undefined\n }),\n\n playlist: (playlist: Playlist) => ({\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.PLAYLIST,\n args: [ playlist.id, TextHelper.slugify(playlist.name) ],\n params: {\n classificationId: classification.id,\n mtv: params.mtv ? true : undefined\n }\n }),\n\n resource: (resource: Resource, videoId: string, canViewResources: boolean) => {\n if (!canViewResources) {\n return {\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n };\n }\n\n return {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PREVIEW_PDF,\n args: [resource.id],\n params: {\n videoId\n }\n };\n },\n\n signUp: SignUpHelper.getSignUpAppLink,\n\n classroomGuide: VideoAppLinkHelper.getClassroomGuideAppLink,\n interactiveGuidance: VideoAppLinkHelper.getInteractiveGuidanceAppLink,\n resourceGuidance: VideoAppLinkHelper.getResourceGuidanceAppLink\n };\n}","// extracted by mini-css-extract-plugin\nexport default {\"followButton\":\"HlRXj\"};","import React from 'react';\n\nimport { LocationUtils } from 'libs/common/backbone/core';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, ToggleDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { CalendarRequests } from 'libs/shared/apps/calendar/flight-request/CalendarRequests';\nimport { ClassificationDashboard } from 'libs/shared/apps/subjects/components/classification-dashboard/ClassificationDashboard';\nimport { PartialClassificationDashboard } from 'libs/shared/apps/subjects/components/classification-dashboard/partial-loading/PartialClassificationDashboard';\nimport { PreviewBanner } from 'libs/shared/apps/subjects/components/preview-banner/PreviewBanner';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Breadcrumb } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { DashboardFeedbackData } from 'libs/shared/components/feedback-form/FeedbackForm';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { FeedbackType } from 'libs/shared/enums/FeedbackType';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { DashboardRequests } from 'libs/shared/flight-requests/DashboardRequests';\nimport { FeedbackRequests } from 'libs/shared/flight-requests/FeedbackRequests';\nimport { FollowRequests } from 'libs/shared/flight-requests/FollowRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useBreadcrumbs } from 'libs/shared/hooks/useBreadcrumbs';\nimport { useCurationStudio } from 'libs/shared/hooks/useCurationStudio';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { CalendarEvent, Classification, Config, CurrentUser, Customer, DashboardTargetType, Presentation, PresentationAudience, RegionAlternative, YearGroup } from 'libs/shared/interfaces';\nimport { AudienceHelper } from 'libs/shared/utils/audience-helper/AudienceHelper';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\nimport { FeedbackFormHelper } from 'libs/shared/utils/FeedbackFormHelper';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { usePresentation } from 'shared/hooks/usePresentation';\nimport { ClassificationAppLinkHelper } from 'shared/utils/ClassificationAppLinkHelper';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\n\nimport { TopicNotFoundError } from 'apps/subjects/errors/TopicNotFoundError';\nimport { useFetchClassificationDashboard } from 'apps/subjects/hooks/useFetchClassificationDashboard';\n\nimport { ClassificationViewQueryParams, getClassificationAppLinks } from './ClassificationViewUtils';\n\nimport styles from './curated-classification-view.scss';\n\ninterface CuratedClassificationViewProps {\n id: string;\n queryParams?: ClassificationViewQueryParams;\n targetType: DashboardTargetType;\n}\n\nCuratedClassificationView.defaultProps = {\n queryParams: {}\n};\n\nconst namespace = 'subjects.classification';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function CuratedClassificationView(props: CuratedClassificationViewProps): React.ReactElement {\n const [ showFollowButtonSpinner, setShowFollowButtonSpinner ] = React.useState<boolean>(false);\n\n const alerts = useAlerts();\n const fetchAsync = Flight.useGetFetchAsync();\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n const { isPlugin } = usePluginHelper();\n const settings = useSettings(null);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const { openInCurationStudioLabel, isUserCurator, getOpenInCurationStudioLink } = useCurationStudio();\n\n const customer = Flight.useBasicFetch<Customer>(\n hasPermissions(PermissionName.CanSubmitFeedback) &&\n currentUser.data &&\n CustomerRequests.customer(currentUser.data.customerId)\n );\n\n const classification = Flight.useBasicFetch<Classification>(\n ClassificationRequests.classification(props.id, currentUser.data?.id)\n );\n\n const presentation = Flight.useBasicFetch<Presentation>(\n classification.data &&\n ClassificationRequests.presentationById(classification.data.presentationId)\n );\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n classification.data &&\n AudienceRequests.audiencesByPresentationId(classification.data.presentationId)\n );\n\n const specialEvent = Flight.useBasicFetch<CalendarEvent>(\n classification.data &&\n CalendarRequests.nextTopicSpecialEvent(props.id, classification.data.presentationId)\n );\n\n const {\n activePresentation,\n availablePresentations,\n canAccessPresentation\n } = usePresentation();\n\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const path = Flight.useBasicFetch<Classification[]>(ClassificationRequests.path(props.id));\n\n const {\n dashboard,\n hasTopicDirectoryDashboard,\n hasTopicVideosDashboard,\n isPreviewing,\n isTeacherOnly\n } = useFetchClassificationDashboard(props.id, props.queryParams, props.targetType);\n\n const regionAlternatives = Flight.useBasicFetch<RegionAlternative[]>(\n ClassificationRequests.regionAlternatives(props.id)\n );\n\n useSetPageMetadata(PageMetadataHelper.getClassificationMetadata({\n content: classification.data,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n },\n canonicalLink: SeoHelper.getCanonicalLink({ stripPresentationSlug: true }),\n allowIndexing: SeoHelper.allowIndexing(),\n hrefLang: SeoHelper.getContentHrefLang(regionAlternatives.data, () => (\n ClassificationAppLinkHelper.getAppLink(classification.data)\n ))\n }));\n\n useHandleObjectError(classification, {\n notFound: TopicNotFoundError\n });\n useDeepLinks({ id: props.id, app: 'topics' });\n\n const isViewCurrentPresentation = activePresentation?.id === presentation.data?.id;\n \n const isSmallScreen = useMediaQuery(MediaQueryStrings.MDDown);\n const isMobile = useMediaQuery(MediaQueryStrings.SMDown);\n\n const { setFavourite, canFavourite } = useLiteFavourites(LocationContext.ExpandableVideoThumbnail);\n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem });\n\n const canFollowSubjects = hasPermissions(PermissionName.FollowSubjects);\n const isComingSoon = (\n classification.data?.status === ClassificationStatus.ComingSoon &&\n !isPreviewing\n );\n\n /**\n * We use the current active audiences to re-fetch content for that specific audience set.\n */\n const activeAudiences = AudienceHelper.getActiveAudiencesFromParams(audiences.data, props.queryParams);\n const activeAudienceIds = activeAudiences?.map(a => a.masterId) ?? [];\n\n const targetType = CuratedDashboardHelper.getDashboardTargetType(dashboard.data);\n\n /**\n * Following\n */\n function onToggleFollow(followedClassification: Classification, location: LocationContext) {\n if (!canFollowSubjects || !classification)\n return;\n\n const isTogglingCurrentTopic = followedClassification.id.toString() === classification.data?.id?.toString();\n\n if (isTogglingCurrentTopic)\n setShowFollowButtonSpinner(true);\n\n const isFollowing = TopicsHelper.isFollowing(followedClassification);\n\n const request = isFollowing\n ? FollowRequests.unfollow\n : FollowRequests.follow;\n\n fetchAsync(request([followedClassification.id], currentUser.data?.id))\n .then(() => {\n AnalyticsHelper.logUserAction(analyticsData, {\n location,\n actionType: UserAction.Follow,\n workflowPhase: WorkflowPhase.Complete,\n descriptor: isFollowing ? ToggleDescriptor.Off : ToggleDescriptor.On,\n entity: EntityType.Classification\n });\n\n if (!isTogglingCurrentTopic) {\n alerts.success(getPhrase(isFollowing ? 'unfollowed' : 'followed', { name: followedClassification.name }));\n }\n })\n .finally(() => {\n if (isTogglingCurrentTopic)\n setShowFollowButtonSpinner(false);\n });\n }\n\n async function onSubmitFeedback(feedback: DashboardFeedbackData): Promise<void> {\n const promise = await fetchAsync<void>(FeedbackRequests.submitFeedback({\n type: FeedbackType.Footer,\n user: FeedbackFormHelper.getUserInfo(currentUser.data, customer.data),\n tags: FeedbackFormHelper.getTags(\n currentUser.data,\n ProductId.Primary,\n hasPermissions(PermissionName.StudentExperience),\n [ 'topics', 'in product feedback' ]\n )\n }, {\n reaction: feedback.type,\n feedback: feedback.content,\n location: 'Topic Footer',\n presentationName: presentation.data.description,\n presentationId: presentation.data.id,\n dashboardName: dashboard.data.name,\n dashboardId: dashboard.data.id,\n classificationName: classification.data.name,\n classificationId: classification.data.id,\n currentPageUrl: LocationUtils.GetCurrentUrl()\n }));\n\n AnalyticsHelper.logUserAction({\n feedbackType: feedback.type,\n content: feedback.content,\n presentationId: presentation.data.id,\n classificationId: classification.data.id,\n dashboardId: dashboard.data.id\n }, {\n actionType: UserAction.Submit,\n location: LocationContext.ClassificationFooter,\n entity: EntityType.Feedback,\n workflowPhase: WorkflowPhase.Complete\n });\n\n return promise;\n }\n\n function getBannerActions(): ActionOptions[] {\n const isFollowing = !!classification.data?.followers?.data?.length;\n\n if (!canFollowSubjects)\n return [];\n\n const actions: ActionOptions[] = [{\n label: isMobile ? '' : getPhrase(isFollowing ? 'following' : 'follow'),\n onClick: () => onToggleFollow(classification.data, LocationContext.Banner),\n svgName: isFollowing ? cvSvgLibrary.BellFilled : cvSvgLibrary.Bell,\n className: `btn follow-btn me-2 ${isFollowing ? 'btn-outline-dark' : 'btn-dark'} ${styles.followButton}`,\n button: true,\n tooltip: (isFollowing || isSmallScreen) ? undefined : getPhrase('followBtnTooltip'),\n showSpinner: showFollowButtonSpinner\n }];\n\n if (isUserCurator)\n actions.push({\n label: openInCurationStudioLabel,\n href: getOpenInCurationStudioLink(MasterType.Subject, classification.data?.id, presentation.data?.id),\n openInNewTab: true\n });\n \n return actions;\n }\n\n const appLinks = getClassificationAppLinks(classification.data, targetType, props.queryParams);\n\n const breadcrumbs = useBreadcrumbs({ name: classification.data?.name });\n function getBreadcrumbs(): () => Breadcrumb[] {\n if (!canAccessPresentation(presentation.data?.id))\n return;\n\n return () => breadcrumbs;\n }\n \n /**\n * Additional topics data to be mixed in with lower-level component analytics collection\n */\n const analyticsData = {\n presentationId: presentation.data?.id,\n presentationName: presentation.data?.name,\n currentClassificationId: classification.data?.id,\n currentClassificationName: classification.data?.name,\n followingCurrentClassification: !!classification.data?.followers?.data?.length,\n activeAudienceNames: activeAudiences?.length ? activeAudiences.map(a => a.name) : null,\n activeAudienceIds: activeAudienceIds.length ? activeAudienceIds : null\n };\n\n const dataLoaded = !!config.data\n && dashboard.hasCompleted\n && !!classification.data\n && !!presentation.data\n && !!path.data\n && !!availablePresentations\n && !!audiences.data\n && specialEvent.hasCompleted;\n\n if (!dataLoaded)\n return <PartialClassificationDashboard />;\n\n return (\n <VideoActionsContext.Provider value={videoActions}>\n <div className='position-relative'>\n {!!(isPreviewing && dashboard.data) && <PreviewBanner status={dashboard.data.status} type='topic' />}\n <ClassificationDashboard\n dashboard={dashboard.data}\n classification={classification.data}\n getWidgetContentRequest={DashboardRequests.dashboardWidgetContent}\n getBreadcrumbs={getBreadcrumbs()}\n hasPermissions={hasPermissions}\n hasLocalPermissions={hasLocalPermissions}\n presentation={presentation.data}\n onToggleFollow={onToggleFollow}\n getBannerActions={getBannerActions}\n audiences={props.queryParams.mtv ? null : audiences.data}\n activeAudiences={activeAudiences}\n analyticsData={analyticsData}\n imageCdnUrl={config.data.imageCdnUrl}\n resourceThumbnailFallbackImageUrl={ImageUrls.Fallbacks.RESOURCE_THUMBNAIL}\n emptyImageUrl={isTeacherOnly ? ImageUrls.EmptyStates.Topics.TEACHER_ONLY : ImageUrls.EmptyStates.Topics.TOPIC}\n isComingSoon={isComingSoon}\n showFollowButtonSpinner={showFollowButtonSpinner}\n comingSoonImageUrl={ImageUrls.EmptyStates.Topics.COMING_SOON}\n appLinks={appLinks}\n isPreviewing={isPreviewing}\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n isViewCurrentPresentation={isViewCurrentPresentation}\n canFollowSubjects={canFollowSubjects}\n onSubmitFeedback={\n hasPermissions(PermissionName.CanSubmitFeedback) &&\n onSubmitFeedback\n }\n tableOfContentsId={props.queryParams.tocId}\n yearGroups={yearGroups.data}\n lazyLoad={!SeoHelper.isBot()}\n moviesAndTv={props.queryParams.mtv}\n isTeacherOnly={isTeacherOnly}\n specialEvent={specialEvent.data}\n isBot={SeoHelper.isBot()}\n hasTopicDirectoryDashboard={hasTopicDirectoryDashboard}\n hasTopicVideosDashboard={hasTopicVideosDashboard}\n tab={TopicsHelper.getActiveTopicTab(classification.data, props.targetType)}\n // just... one... more.. prop....\n isPlugin={isPlugin}\n settings={settings}\n />\n </div>\n </VideoActionsContext.Provider>\n );\n}\n","import { useSettings } from 'libs/shared/hooks/useSettings';\nimport { DashboardTargetType } from 'libs/shared/interfaces';\n\nimport { useFetchCuratedDashboard } from 'shared/utils/DashboardHelper';\n\nimport { ClassificationViewQueryParams } from '../views/classification/ClassificationViewUtils';\n\nexport function useFetchClassificationDashboard(\n id: string,\n queryParams: ClassificationViewQueryParams,\n targetType: DashboardTargetType\n) {\n const { hasTopicDirectories, hasTopicVideoListFeature } = useSettings(null);\n\n const {\n dashboard: curatedTopicDashboard,\n isPreviewing,\n isTeacherOnly\n } = useFetchCuratedDashboard({\n classificationId: id,\n queryParams: queryParams,\n targetType: DashboardTargetType.Classification\n });\n\n const { dashboard: directoryDashboard } = useFetchCuratedDashboard({\n classificationId: id,\n queryParams: queryParams,\n targetType: DashboardTargetType.ClassificationDirectory\n });\n\n const { dashboard: videosDashboard } = useFetchCuratedDashboard({\n classificationId: id,\n queryParams: queryParams,\n targetType: DashboardTargetType.ClassificationVideos\n });\n\n function getDashboard() {\n switch (targetType) {\n case DashboardTargetType.Classification:\n return curatedTopicDashboard;\n case DashboardTargetType.ClassificationDirectory:\n return directoryDashboard;\n case DashboardTargetType.ClassificationVideos:\n return videosDashboard;\n }\n }\n\n return {\n dashboard: getDashboard(),\n hasTopicDirectoryDashboard: hasTopicDirectories && !!directoryDashboard.data,\n hasTopicVideosDashboard: hasTopicVideoListFeature && !!videosDashboard.data,\n isTeacherOnly,\n isPreviewing\n };\n}","// extracted by mini-css-extract-plugin\nexport default {\"pillTabSelector\":\"Hdi6o\",\"tab\":\"RvNxr\",\"minWidth\":\"GHSz9\",\"radiusSmall\":\"VhJJa\",\"tabLink\":\"WFyvo\"};"],"names":["CalendarRequests","calendarEvents","from","to","presentationId","url","publicUrl","key","nextTopicSpecialEvent","classificationId","params","limit","Date","objectType","formatData","events","getPhrase","LanguageService","AudienceItem","props","audience","highlight","setAudience","isDisabled","extraClasses","colourClass","getColourClass","className","onClick","FunctionHelper","role","name","split","map","s","charAt","toUpperCase","substring","join","defaultProps","pdfExtensions","docExtensions","textExtensions","excelExtensions","imageExtensions","videoMimeType","archiveExtensions","powerPointExtensions","subtitleExtensions","FileExtensions","IMAGES","VIDEO","MIXED_MEDIA","RESOURCES","SUBTITLES","FileExtensionHelper","getResourceType","extension","ext","toLowerCase","TabContents","tab","svgName","count","type","data","PillTabSelector","ref","containerRef","borderRadius","listClassName","tabs","index","active","appLink","analyticsData","analyticsOptions","onSelect","onSelectTab","TableOfContentsList","actionType","entity","location","onItemSelect","item","ScrollHelper","setControlledId","id","onItemClick","setTimeout","document","getElementById","focus","items","idx","localState","DivButton","activeId","AppLink","getAppLink","appLinkOptions","replace","tocIndentation","FeedbackType","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","FeedbackRequests","submitFeedback","requestData","formValues","endpoints","ids","FollowRequests","follow","userId","success","error","followers","invalidationKeys","unfollow","generateCacheKey","flightObjs","obj","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","forEach","usePrevious","value","current","timer","useTableOfContentsActiveHeading","setActiveId","headingElements","controlledId","scrollPositionRef","observer","IntersectionObserver","headings","heading","window","isIntersecting","target","scrollY","isScrollingUp","curIndex","findIndex","h","prevHeading","rootMargin","element","observe","clearTimeout","disconnect","length","useTableOfContentsScroll","elements","hasDoneInitialScroll","setHasDoneInitialScroll","previousId","currentId","find","rec","getBoundingClientRect","scrollBy","top","behavior","FeedbackFormHelper","getUserInfo","currentUser","customer","username","email","userType","customerId","cvcId","crmId","customerName","instanceRegion","contentRegion","firstName","givenName","lastName","familyName","mapInstanceRegionToTag","getTags","product","hasStudentExperience","extraTags","tags","push","regionTag","categorizeFiles","files","reduce","result","file","fileInfo","get","videoUrls","imageUrls","namespace","Separator","ClassificationHeaderDetails","classification","childDashboardVideoCount","childDashboardResourceCount","childClassificationCount","Text","phrase","options","toLocaleString","smartCount","CuratedClassificationEmptyState","isArchived","dashboard","EmptyState","src","imageUrl","altText","isReadonly","Tooltip","title","spanHack","text","addWidgetApplink","icon","disabled","TableOfContentsMobile","isExpanded","setIsExpanded","widgets","widget","metadata","IconButton","AnalyticsHelper","TableOfContents","TableOfContentsContainer","currentAppLink","ContextService","tocId","isSmallScreen","TeacherOnlyEmptyState","ctaAppLink","ClassificationComingSoon","isFollowing","showSignUp","canFollowSubjects","ActionButton","onToggleFollow","showSpinner","showFollowButtonSpinner","signUpAppLink","workflowPhase","descriptor","SignUp","tag","AudienceFilter","audiences","activeAudiences","setActiveAudiences","SharedViewModelKeys","undefined","storage","onToggleAudience","isSelected","otherParams","activeAudienceNames","a","filter","ObjectHelper","Object","assign","disablePersist","masterId","aa","keys","PARTIAL_AUDIENCES","PartialLoadingHelper","numItems","PartialAudienceFilter","width","dangerouslySetInnerHTML","__html","style","ClassificationDashboardAudiences","getTabs","breakpoints","activeTab","isHighlighting","showText","lg","xl","xxl","xs","TopicsHelper","appLinks","classificationName","presentation","presentationDescription","description","classificationDirectory","classificationVideos","ClassificationTabs","useBreakpoints","useDirectoryTabProductTipSwitcher","setProductTipRef","el","ClassificationDashboardNav","isEmpty","hideAudiences","isComingSoon","AudienceHelper","canShowTabs","hasTopicDirectoryDashboard","hasTopicVideosDashboard","getTopRowClass","Breadcrumbs","breadcrumbs","getBreadcrumbs","getBottomRowClass","disableAudiences","isViewingCurrentPresentation","isHeadingWidget","widgetId","WidgetTypeId","templateId","WidgetTemplate","isTopicWidget","ClassificationDashboard","isSystemGeneratedDashboard","systemGeneratedVideoWidget","systemGeneratedVideoContent","DashboardRequests","videoList","content","videoListWidgetId","useGetTopicsWidgets","headingRef","Set","initialEmptyWidgets","acc","emptyWidgets","setEmptyWidgets","tableOfContentsId","tableOfContentActiveId","setTableOfContentActiveId","getWidgetContentRequest","widgetTypeId","template","showEmptyState","isTeacherOnly","isPreviewing","values","every","state","onSetIsEmpty","newEmptyState","currentWidget","isHeadingEmpty","subWidgetIndex","headingSubWidget","hideWidget","getWidgetHeading","previousWidget","widgetsInTableOfContents","w","showInTableOfContents","isTopicOnlyDashboard","shouldShowTableOfContents","shouldShowSideTableOfContents","shouldShowTopicCounts","moviesAndTv","BannerHeader","banner","imageCdnUrl","actions","getBannerActions","actionsDropdownClassName","specialEvent","calendarTheme","background","border","showComingSoon","detailsComponent","isViewCurrentPresentation","comingSoonImageUrl","hasLocalPermissions","signUp","clickable","WidgetContainerView","headingElementRef","getContentRequest","setIsEmpty","setFavourite","canFavourite","yearGroups","isScrollToTargetWidget","scrollToWidgetId","onSubmitFeedback","isBot","hasTableOfContents","lazyLoad","dashboardTarget","widgetIndex","hasPermissions","companyLogoFallbackUrl","subTextType","contentType","resourceThumbnailFallbackImageUrl","preferences","onToggleFollowClassification","isPlugin","settings","WidgetHeader","VideoList","videos","getVideoAppLink","v","opts","videoType","contextId","getSubTextAppLink","subText","presentationAudiences","getPreviewQuestionsAppLink","previewQuestions","getClassroomGuideAppLink","classroomGuide","getInteractiveGuidanceAppLink","interactiveGuidance","getResourceGuidanceAppLink","resourceGuidance","emptyImageUrl","widgetWizard","allTopics","PartialClassificationDashboard","TopicNotFoundError","application","action","ErrorPageError","SignUpHelper","getSignUpAppLink","redirectUrl","OMITTED_PARAMS","CuratedClassificationView","queryParams","setShowFollowButtonSpinner","alerts","fetchAsync","usePermissions","usePluginHelper","useSettings","config","ConfigRequests","UserRequests","useCurationStudio","openInCurationStudioLabel","isUserCurator","getOpenInCurationStudioLink","PermissionName","CustomerRequests","ClassificationRequests","AudienceRequests","usePresentation","activePresentation","availablePresentations","canAccessPresentation","isAuthenticated","path","targetType","hasTopicDirectories","hasTopicVideoListFeature","curatedTopicDashboard","directoryDashboard","videosDashboard","getDashboard","useFetchClassificationDashboard","regionAlternatives","useSetPageMetadata","PageMetadataHelper","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","canonicalLink","SeoHelper","stripPresentationSlug","allowIndexing","hrefLang","ClassificationAppLinkHelper","useDeepLinks","app","isMobile","useLiteFavourites","u","videoActions","useVideoActions","ClassificationStatus","activeAudienceIds","followedClassification","isTogglingCurrentTopic","toString","request","then","args","TextHelper","_classification","appLinkClassification","video","VideoAppLinkHelper","context","RelatedVideosContext","mtv","series","SeriesAppLinkHelper","playlist","resource","videoId","canViewResources","getClassificationAppLinks","useBreadcrumbs","presentationName","currentClassificationId","currentClassificationName","followingCurrentClassification","hasCompleted","VideoActionsContext","PreviewBanner","label","button","tooltip","href","MasterType","openInNewTab","ImageUrls","feedback","user","ProductId","reaction","dashboardName","dashboardId","currentPageUrl","promise","feedbackType"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[422],{92869:(e,t,n)=>{n.d(t,{t:()=>c});var a=n(48088),r=n(95846),c={preventScrollTop:function(){a.Radio.channel(r.G.SHELL).trigger("prevent:scroll:top")}}},75097:(e,t,n)=>{n.d(t,{U:()=>c});var a=n(32735),r=n(95245);function c(e){var t=e.count,n=void 0===t?6:t;return a.createElement("div",{className:"d-flex"},a.createElement("div",{className:"d-flex ps-1"},Array(n).fill(null).map((function(e,t){return a.createElement("div",{key:t,className:"".concat(r.Z.partialButton," partial-loading-background mx-1")})}))))}},37395:(e,t,n)=>{n.d(t,{t:()=>u});var a=n(32735),r=n(98269),c=n(92869),l=n(49985),o=n(65858),s=n(36848),i=n(83345);function m(e,t,n){var a;if(!t)return null;var r=null!==(a=e.params)&&void 0!==a?a:{};return n?(null==r?void 0:r.previous)?{application:e.application,action:e.action,args:e.args,params:Object.assign(Object.assign({},r),{cursor:null==r?void 0:r.previous,previous:null})}:{application:e.application,action:e.action,args:e.args,params:Object.assign(Object.assign({},r),{cursor:null,previous:null})}:{application:e.application,action:e.action,args:e.args,params:Object.assign(Object.assign({},r),{cursor:t,previous:r.cursor})}}function u(e){var t=e.appLink,n=e.cursors,u=e.className,d=e.buttonVariant,p=e.prevHack,f=e.scrollTop,g=e.onClick;function v(e){t&&!f&&c.t.preventScrollTop(),l.k.logUserAction({page:e},{location:o.LZ.Pagination,entity:o.py.Pagination,actionType:o.Vw.Navigate}),g&&g(n[e])}return t?a.createElement(i.D.Provider,{value:"shared.pagination"},a.createElement("div",{className:u},a.createElement(s.F,{appLink:m(t,n.previous,p),className:"btn btn-".concat(d," me-1 ").concat(n.previous?"":"disabled"),onClick:function(){return v("previous")},style:{display:"inline-block"}},a.createElement(i.x,{phrase:"previous"})),a.createElement(s.F,{appLink:m(t,n.next),className:"btn btn-".concat(d," ").concat(n.next?"":"disabled"),onClick:function(){return v("next")},style:{display:"inline-block"}},a.createElement(i.x,{phrase:"next"})))):a.createElement(i.D.Provider,{value:"shared.pagination"},a.createElement("div",{className:u},a.createElement(r.Z,{variant:d,className:"me-1 ".concat(n.previous?"":"disabled"),onClick:function(){return v("previous")}},a.createElement(i.x,{phrase:"previous"})),a.createElement(r.Z,{variant:d,className:"btn ".concat(n.next?"":"disabled"),onClick:function(){return v("next")}},a.createElement(i.x,{phrase:"next"}))))}u.defaultProps={className:"py-2",buttonVariant:"secondary"}},16930:(e,t,n)=>{n.d(t,{W:()=>u,f:()=>i});var a=n(32735),r=n(23481),c=n(83914),l=n(35223);const o="VSAPU",s="kgeXh";var i,m=r.T.encloseNamespace("shared.widgetButton");!function(e){e[e.Left=0]="Left",e[e.Right=1]="Right"}(i||(i={}));var u=a.memo((function(e){var t,n,r,u=e.direction===i.Left,d=u?l.vn.ChevronLeft:l.vn.ChevronRight;return e.hide?a.createElement(a.Fragment,null):a.createElement("div",{className:"_ejId",style:"videos"===(null===(n=e.state)||void 0===n?void 0:n.contents)?{paddingBottom:56.25/(null===(r=e.state)||void 0===r?void 0:r.viewableItems)+"%"}:{height:"100%"}},e.useGradientBackdrop&&a.createElement("div",{className:u?"".concat("Pt3nx"," ").concat(e.leftGradientClassName):"".concat("ZuAif"," ").concat(e.rightGradientClassName)}),!e.hideExtendedClickableArea&&a.createElement("button",{onClick:e.onClick,className:"".concat("AtsWP"," ").concat(u?o:s),tabIndex:-1}),a.createElement("button",{className:"".concat((t="BVcIS",t+=u?" ".concat(o," ").concat(e.leftButtonClassName):" ".concat(s," ").concat(e.rightButtonClassName))," ").concat("gAsE9"," ").concat(e.className||""),onClick:e.onClick,"aria-label":m(u?"previous":"next")},e.hoverText&&a.createElement("span",{className:"ps-3 pe-2 ".concat("APA36")},e.hoverText),a.createElement(c.x,{svgName:d,size:c.S.Medium,className:"svg-container d-inline-block ".concat("Ev4hr")})))}))},14177:(e,t,n)=>{n.d(t,{$:()=>S});var a=n(32735),r=n(70680),c=n(81886),l=n(20354),o=n(79447),s=n(83914),i=n(83345),m=n(4594),u=n(76881),d=n(35223),p="userManager.wizardInProgress";function f(e){var t=Math.floor(e.totalItemsComplete/e.totalItems*100)||0;return a.createElement("div",null,a.createElement("div",{className:"d-flex align-items-center mb-2"},a.createElement("h2",{className:"h5 mb-0"},a.createElement(i.x,{namespace:p,phrase:"heading",options:{percentage:t,actionName:e.actionName}})),a.createElement(s.x,{svgName:d.vn.CircleCheck})),a.createElement("p",null,a.createElement(i.x,{namespace:p,phrase:"info".concat(e.actionVerb)})),a.createElement("p",{className:"mb-1"},a.createElement("span",{className:"text-info"},e.progressVerbPhrase?a.createElement("span",null,e.progressVerbPhrase):a.createElement(i.x,{namespace:p,phrase:"progressVerb".concat(e.actionVerb)}))," ",e.objectType===m.E.User&&e.userType?a.createElement(i.x,{namespace:p,phrase:e.userType===u.Y.Learner?"progressStudents":"progressStaff",options:{totalComplete:e.totalItemsComplete,total:e.totalItems,smartCount:e.totalItems}}):e.objectType===m.E.Video?a.createElement(i.x,{namespace:p,phrase:"progressVideos",options:{totalComplete:e.totalItemsComplete,total:e.totalItems,smartCount:e.totalItems}}):a.createElement(i.x,{namespace:p,phrase:"progressItems",options:{totalComplete:e.totalItemsComplete,total:e.totalItems,smartCount:e.totalItems}})),a.createElement(o.Z,{variant:"info",now:t}))}var g="userManager.wizardSubmitted";function v(e){return a.createElement("div",null,a.createElement("div",{className:"d-flex align-items-center mb-2"},a.createElement("h2",{className:"h5 mb-0"},e.actionName?a.createElement(i.x,{namespace:g,phrase:"heading",options:{actionName:e.actionName}}):a.createElement(i.x,{namespace:g,phrase:"headingGeneric"})),a.createElement(s.x,{svgName:d.vn.CircleCheck})),a.createElement("p",null,a.createElement(i.x,{namespace:g,phrase:"info".concat(e.actionVerb)})),a.createElement("p",{className:"mb-1 text-info"},a.createElement(i.x,{namespace:g,phrase:"preparing"})),a.createElement(o.Z,{variant:"info",now:0}))}var b=n(58739),E=n(94644),h=n(89476);function y(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,c,l,o=[],s=!0,i=!1;try{if(c=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=c.call(n)).done)&&(o.push(a.value),o.length!==t);s=!0);}catch(e){i=!0,r=e}finally{try{if(!s&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(i)throw r}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return N(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)?N(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function N(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 x=2e3,C=3;function S(e){var t=y(a.useState(null),2),n=t[0],o=t[1],s=y(a.useState(0),2),i=s[0],m=s[1],u=a.useRef(),d=(0,h.f)(),p=(0,r.I0)();function g(){e.pollJob(N,S)}function N(t){o(t),t.status===b.K.Completed||t.status===b.K.CompletedWithError||t.status===b.K.Failed?window.setTimeout((function(){!function(){var t;e.navLockId&&d.unlock(e.navLockId);var n={jobId:e.jobId};e.userType&&(n.userType=e.userType,p({type:l.a.Actions.INVALIDATE,keys:["school:users","user:count","search:aggregation","search:users"],request:null})),e.statusCompleteAppLink?c.Q.C$.trigger(Object.assign(Object.assign({},e.statusCompleteAppLink),{params:n})):null===(t=e.onStatusCompleted)||void 0===t||t.call(e)}()}),2e3):u.current=window.setTimeout(g,x)}function S(t){i===C&&(window.clearTimeout(u.current),e.navLockId&&d.unlock(e.navLockId),(0,E.r)(t)),m((function(e){return e+1})),u.current=window.setTimeout(g,x)}return a.useEffect((function(){return g(),function(){u.current&&window.clearTimeout(u.current)}}),[]),n&&n.status!==b.K.Submitted&&n.status!==b.K.Queued&&n.status!==b.K.Pending&&0!==n.totalItems?a.createElement(f,{totalItems:n.totalItems,totalItemsComplete:n.processedItems,userType:e.userType,objectType:e.objectType,actionName:e.actionName,actionVerb:e.actionVerb,progressVerbPhrase:e.progressVerbPhrase}):a.createElement(v,{actionName:e.actionName,actionVerb:e.actionVerb})}},81514:(e,t,n)=>{n.d(t,{V:()=>c});var a=n(86764),r=n(3747);function c(){var e=(0,r.a)(a.r.XS),t=(0,r.a)(a.r.SM),n=(0,r.a)(a.r.MD),c=(0,r.a)(a.r.LG),l=(0,r.a)(a.r.XL),o=(0,r.a)(a.r.XXL),s=a.r.LG;return e&&(s=a.r.XS),t&&(s=a.r.SM),n&&(s=a.r.MD),c&&(s=a.r.LG),l&&(s=a.r.XL),o&&(s=a.r.XXL),s}},299:(e,t,n)=>{n.d(t,{X:()=>l});var a=n(32735),r=n(69217),c=n(94631),l=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.idField,l=void 0===n?"id":n,o=t.persistNamespace,s=t.initialState?t.initialState:new Map,i=a.useRef(s),m=(0,r.N)(),u=(0,c.D)(e),d=(0,c.D)(o);function p(){i.current.clear(),m()}function f(e){return"number"==typeof e?e=e.toString():"string"!=typeof e&&(e=e[l].toString()),i.current.get(e)}function g(){return!!(null==e?void 0:e.length)&&e.every(f)}function v(e){e.forEach((function(e){i.current.set(e,!0)})),m()}return a.useEffect((function(){t.initialState||o&&d===o||(null==u?void 0:u.map((function(e){return e[l]})).join())!==(null==e?void 0:e.map((function(e){return e[l]})).join())&&p()}),[u,d,e,t.initialState]),a.useEffect((function(){var e;(null===(e=t.preselectedIds)||void 0===e?void 0:e.length)&&v(t.preselectedIds)}),[]),{onToggleBulk:function(){var t=!g();e.forEach((function(e){t?i.current.set(e[l].toString(),!0):i.current.delete(e[l].toString())})),m()},onToggleItem:function(e){var t=!i.current.get(e.toString());t?i.current.set(e.toString(),t):i.current.delete(e.toString()),m()},getSelected:function(){return Array.from(i.current.keys())},isChecked:f,bulkChecked:g(),deselectAll:function(){(null==e?void 0:e.length)&&(e.forEach((function(e){i.current.delete(e[l].toString())})),m())},hasSomeSelections:function(){return!!(null==e?void 0:e.length)&&!!e.find((function(e){return f(e)}))},setSelected:v,getSelectedCount:function(){return i.current.size},reset:p,getMap:function(){return i.current}}}},94631:(e,t,n)=>{n.d(t,{D:()=>r});var a=n(32735);function r(e){var t=a.useRef();return a.useEffect((function(){t.current=e})),t.current}},10373:(e,t,n)=>{n.r(t),n.d(t,{RosteringSyncListView:()=>Ve});var a=n(32735),r=n(70680),c=n(23481),l=n(20354),o=n(75097),s=n(49935);const i={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"};function m(){return a.createElement("div",{className:"d-flex striped-row rounded py-3 ".concat(i.row)},a.createElement("div",{className:"".concat(i.checkboxColumn," d-flex justify-content-center")},a.createElement("div",{className:"partial-loading-background ".concat(i.partialCheckbox," ms-0")})),a.createElement("div",{className:"".concat(i.actionColumn)},a.createElement("div",{className:"partial-loading-background ".concat(i.action)})),a.createElement("div",{className:"".concat(i.usersColumn)},a.createElement("div",{className:"partial-loading-background ".concat(i.users)})),a.createElement("div",{className:"".concat(i.dateColumn)},a.createElement("div",{className:"partial-loading-background ".concat(i.date)})),a.createElement("div",{className:"".concat(i.performedByColumn)},a.createElement("div",{className:"partial-loading-background ".concat(i.performedBy)})),a.createElement("div",{className:"".concat(i.seeMoreColumn)}," "))}function u(){return a.createElement("div",{className:"d-flex py-2 mb-1"},a.createElement("div",{className:"".concat(i.checkboxColumn)}," "),a.createElement("div",{className:"".concat(i.actionColumn)},a.createElement("div",{className:"partial-loading-background ".concat(i.heading)})),a.createElement("div",{className:"".concat(i.usersColumn)},a.createElement("div",{className:"partial-loading-background ".concat(i.heading)})),a.createElement("div",{className:"".concat(i.dateColumn)},a.createElement("div",{className:"partial-loading-background ".concat(i.heading)})),a.createElement("div",{className:"".concat(i.performedByColumn)},a.createElement("div",{className:"partial-loading-background ".concat(i.heading)})),a.createElement("div",{className:"".concat(i.seeMoreColumn)}," "))}function d(){return a.createElement(a.Fragment,null,a.createElement("div",{className:"mb-3 mt-n1"},a.createElement(u,null),a.createElement("div",{className:"striped-list no-full-width"},a.createElement(m,null),a.createElement(m,null),a.createElement(m,null),a.createElement(m,null),a.createElement(m,null),a.createElement(m,null),a.createElement(m,null),a.createElement(m,null),a.createElement(m,null),a.createElement(m,null),a.createElement(m,null),a.createElement(m,null))))}function p(){return a.createElement(a.Fragment,null,a.createElement("div",{className:"partial-loading-background mb-2 ".concat(i.partialHeading)}),a.createElement("div",{className:"pb-3"},a.createElement("div",{className:"d-flex justify-content-between"},a.createElement(s.b2,null),a.createElement("div",{className:"partial-loading-background ".concat(i.partialJobCount)}))),a.createElement("div",{className:"d-flex align-items-center pb-2"},a.createElement("div",{className:"partial-loading-background ".concat(i.partialCheckbox)}),a.createElement("div",{className:"ms-4 ps-3"},a.createElement(o.U,{count:3})),a.createElement("div",{className:"ms-auto partial-loading-background ".concat(i.partialExportButton)})),a.createElement(d,null))}var f=n(31647),g=n(110),v=n(58739);const b={complete:"nAOdH",failed:"xkFpC",inProgress:"BjR3y",scheduled:"Ux2b9"};var E=c.T.encloseNamespace("rostering.syncJobsStatusBadge");function h(e){return a.createElement("div",{className:function(){var t="rounded-pill px-2 d-inline-flex align-items-center fw-semibold";switch(e.status){case v.K.Completed:case v.K.CompletedWithError:return"".concat(t," ").concat(b.complete);case v.K.Failed:return"".concat(t," ").concat(b.failed);case v.K.InProgress:case v.K.Pending:case v.K.Queued:case v.K.Submitted:return"".concat(t," ").concat(b.inProgress);case"scheduled":return"".concat(t," ").concat(b.scheduled)}}()},function(){switch(e.status){case v.K.Completed:case v.K.CompletedWithError:return E("complete");case v.K.Failed:return E("failed");case v.K.InProgress:case v.K.Pending:case v.K.Queued:case v.K.Submitted:return E("inProgress");case"scheduled":return E("scheduled")}}())}var y=n(83914),N=n(35223);const x={colored:"MLlUi",avatar:"Z1jn_",logoWrapper:"OAeff",cog:"I7V_R",checkboxPlaceholder:"LTmrp",source:"zYMOT",date:"mnJQP",status:"Pm1Aa",performedBy:"oy6Vm",placeholder:"o0RDO"};var C=c.T.encloseNamespace("rostering.scheduledSyncJobItem");function S(e){return a.createElement("div",{className:x.colored},a.createElement("div",{className:"px-4 py-3 d-flex align-items-center"},a.createElement("div",{className:x.checkboxPlaceholder}),a.createElement("div",{className:"".concat(x.source," px-2")}),a.createElement("div",{className:"".concat(x.date," px-2")},g.O.format(e.scheduledDate,"DD/MM/YYYY, hh:mmA")),a.createElement("div",{className:"".concat(x.status," px-2")},a.createElement(h,{status:"scheduled"})),a.createElement("div",{className:"".concat(x.performedBy," px-2 d-flex align-items-center")},a.createElement("div",{className:"".concat(x.cog," me-2 rounded-circle text-white bg-dark d-flex align-items-center justify-content-center")},a.createElement(y.x,{svgName:N.vn.Cog,className:"svg-container"})),C("performedBy")),a.createElement("div",{className:"cursor-pointer d-flex justify-content-end ".concat(x.placeholder)})))}var k=n(65654),I=n(56050),w=n(97514),j=n(20789),P={getCellStyle:function(e){return{width:e,flex:"".concat(e," 0 auto")}}},T=n(89965);const A={colored:"aU1VO",seeMore:"Nfc8Q"};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}var O=c.T.encloseNamespace("shared.bulkJobsAccordionItem");function J(e){var t,n,r=(t=a.useState(!!e.forceExpand&&e.forceExpand(e.job)),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,c,l,o=[],s=!0,i=!1;try{if(c=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=c.call(n)).done)&&(o.push(a.value),o.length!==t);s=!0);}catch(e){i=!0,r=e}finally{try{if(!s&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(i)throw r}}return o}}(t,n)||function(e,t){if(e){if("string"==typeof e)return L(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?L(e,t):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),c=r[0],l=r[1],o=!!e.disableExpand&&e.disableExpand(e.job);return a.createElement("div",{className:"".concat(A.colored," ").concat(o?"":"cursor-pointer"),onClick:function(){o||l((function(e){return!e}))}},a.createElement("div",{className:"px-4 py-3 d-flex align-items-center"},a.createElement("div",{style:P.getCellStyle(60),onClick:function(e){return e.stopPropagation()}},a.createElement(T.X,{id:e.job.id,checked:e.isChecked(e.job.id),onChange:function(){return e.onToggleCheckbox(e.job.id)}})),e.columns.map((function(t){var n=t.render,r=t.renderClassName,c=t.width,l=t.id;return a.createElement("div",{className:"".concat(null!=r?r:""),key:l,style:P.getCellStyle(c)},n(e.job))})),a.createElement("div",{className:"d-flex justify-content-end ".concat(o?"":"cursor-pointer"),style:P.getCellStyle(200)},!o&&a.createElement("div",{className:"".concat(A.seeMore," text-info")},O(c?"seeLess":"seeMore")))),c&&a.createElement("div",{className:"bg-white border-bottom cursor-default",onClick:function(e){return e.stopPropagation()}},e.jobDetailsComponent(e.job)))}var K=n(93659);function B(e){return a.createElement(K.J,{queryParams:e.queryParams,mainFilters:e.filters,appLink:e.appLink,analyticsOptions:e.analyticsOptions,hideHeading:!0,hideDivider:!0,constantIndices:[]})}var R=n(37395),V=n(2102),M=n(83345),F=n(69883),D=n(299),U=n(75795);const G={bulkCheckbox:"XeoQi"};function H(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 Z="shared.bulkJobsAccordions",q=c.T.encloseNamespace(Z);function X(e){var t,n,r,c=(n=a.useState(!1),r=2,function(e){if(Array.isArray(e))return e}(n)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,c,l,o=[],s=!0,i=!1;try{if(c=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=c.call(n)).done)&&(o.push(a.value),o.length!==t);s=!0);}catch(e){i=!0,r=e}finally{try{if(!s&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(i)throw r}}return o}}(n,r)||function(e,t){if(e){if("string"==typeof e)return H(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)?H(e,t):void 0}}(n,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),l=c[0],o=c[1],s=(0,D.X)(e.jobs.data),i=(0,F.Z)();return a.createElement("div",{className:"".concat(G.container," pe-3")},a.createElement("div",{className:"d-flex align-items-center pb-2 mt-3"},a.createElement(T.X,{className:G.bulkCheckbox,id:"bulk-audit-log-checkbox",checked:s.bulkChecked,onChange:s.onToggleBulk,indeterminate:s.hasSomeSelections()}),a.createElement("div",{className:"ms-4"},a.createElement(B,{queryParams:e.queryParams,appLink:e.appLink,filters:e.filters})),a.createElement(V.m,{variant:"dark",className:"ms-auto",onClick:function(){if(!l){o(!0);var t=s.getSelected();e.onClickExport(t).then((function(){return i.success(q("exportSuccess"))})).catch((function(){return i.error(q("exportError"))})).finally((function(){return o(!1)}))}},disabled:!s.hasSomeSelections()||l,showSpinner:l},a.createElement(M.x,{namespace:Z,phrase:"export"}))),a.createElement("div",{className:"d-flex no-wrap mb-2 fw-semibold px-4 py-2"},a.createElement("div",{style:P.getCellStyle(60)}),e.columns.map((function(e){var t=e.id,n=e.header,r=e.headerClassName,c=e.width;return a.createElement("div",{key:t,className:r,style:P.getCellStyle(c)},n)})),a.createElement("div",{style:P.getCellStyle(200)})),!!e.pinnedComponent&&e.pinnedComponent(),!!e.jobs.data.length&&e.jobs.data.map((function(t){return a.createElement(J,{key:t.id,job:t,onToggleCheckbox:s.onToggleItem,isChecked:s.isChecked,jobDetailsComponent:e.jobDetailsComponent,onClickExport:e.onClickExport,imageCdnUrl:e.imageCdnUrl,onPollJob:e.onPollJob,columns:e.columns,forceExpand:e.forceExpand,disableExpand:e.disableExpand})})),!!(null===(t=e.jobs.pagination)||void 0===t?void 0:t.cursors)&&a.createElement(R.t,{className:"p-0 text-end pb-3 mt-3",cursors:e.jobs.pagination.cursors,appLink:U.O.getCurrentRoute().appLink,buttonVariant:"outline-dark"}))}var _=n(89725),W=n(10874),$=n(80247),Y=n(14177);function Q(e){return e.jobId?a.createElement("div",null,a.createElement("div",{className:"mb-4"},a.createElement(Y.$,{jobId:e.jobId,pollJob:e.onPollJob(e.jobId),onStatusCompleted:e.onCompleted,actionName:"Sync",actionVerb:"Update",progressVerbPhrase:c.T.getPhrase("rostering.syncJobPolling","progressVerb")}))):a.createElement("div",{className:"text-center"},a.createElement($.Z,{as:"div",animation:"border",role:"status"}))}const z={failed:"BSIaY",tag:"NOJhh"};function ee(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,c,l,o=[],s=!0,i=!1;try{if(c=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=c.call(n)).done)&&(o.push(a.value),o.length!==t);s=!0);}catch(e){i=!0,r=e}finally{try{if(!s&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(i)throw r}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return te(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)?te(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function te(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 ne="rostering.syncJobSummary";function ae(e){var t=ee(a.useState(null),2),n=t[0],r=t[1],c=ee(a.useState(!1),2),l=c[0],o=c[1];function s(e){var t="",r="";switch(e){case"staff":t="bg-navy",r=N.vn.Staff;break;case"learners":t="bg-blue",r=N.vn.GraduationCap;break;case"classrooms":t="bg-teal",r=N.vn.Classrooms}var c=Object.keys(n[e]).filter((function(e){return"totalProcessed"!==e&&"totalSucceeded"!==e}));return a.createElement("div",{className:"col"},a.createElement("div",{className:"py-3 ps-2 pe-3 rounded border border-light"},a.createElement("div",{className:"d-flex align-items-center px-2 mb-2"},a.createElement("div",{className:"".concat(t," ").concat(z.badge," d-flex align-items-center rounded-circle text-white ps-0 me-2")},a.createElement(y.x,{className:"svg-container ".concat(z.svg),size:y.S.Standard,svgName:r})),a.createElement(M.x,{namespace:ne,phrase:e})),a.createElement("ul",{className:"mb-0"},null==c?void 0:c.map((function(t){return a.createElement("li",{className:"mb-2",key:t},a.createElement("div",{className:"d-flex"},a.createElement("div",{className:"rounded-pill me-2 px-2 d-inline-flex align-items-center fw-semibold ".concat("errored"===t?z.failed:z.tag)},n[e][t]),a.createElement(M.x,{namespace:ne,phrase:t})))})))))}return a.useEffect((function(){n||(o(!0),e.getJobSummary(e.job.id).then((function(e){r(e)})).finally((function(){o(!1)})))}),[e.job.id]),a.createElement(a.Fragment,null,l&&!n&&a.createElement("div",{className:"text-center py-3"},a.createElement($.Z,{as:"div",animation:"border",role:"status"})),!!n&&a.createElement("div",{className:"row gx-3 mt-2"},s("staff"),s("learners"),s("classrooms")))}var re=c.T.encloseNamespace("rostering.syncJobDetails");function ce(e){var t=e.job.status===v.K.Completed||e.job.status===v.K.CompletedWithError,n=(0,F.Z)();return a.createElement("div",{className:"py-3 px-4"},a.createElement("div",{className:"d-flex justify-content-between"},e.job.status!==v.K.InProgress&&a.createElement("h1",{className:"h4"},re("heading")),t&&a.createElement(W.h,{className:"btn btn-outline-dark fw-semibold",svgName:N.vn.Download,onClick:function(){e.onClickExport([e.job.id]).then((function(){n.success(re("exportSuccess"))})).catch((function(){n.error(re("exportError"))}))}},re("export"))),function(){switch(e.job.status){case v.K.InProgress:case v.K.Pending:case v.K.Queued:case v.K.Submitted:return a.createElement(Q,{jobId:e.job.id,onCompleted:e.onCompleted,onPollJob:e.onPollJob});case v.K.Failed:return a.createElement(a.Fragment,null);case v.K.Completed:case v.K.CompletedWithError:return a.createElement(ae,{job:e.job,getJobSummary:e.getJobSummary});default:return a.createElement(a.Fragment,null)}}())}var le=n(86794),oe=n(76177),se=n(55171),ie=n(64818);const me={avatar:"B8miR",logoWrapper:"higtD",cog:"bNPxa"};var ue="rostering.syncJobsAccordion",de=c.T.encloseNamespace(ue),pe=[v.K.InProgress,v.K.Pending,v.K.Queued,v.K.Submitted];function fe(e){var t=[w.x$.SortBy([{id:"newest",name:c.T.getPhrase(ue,"newest"),default:!0},{id:"oldest",name:c.T.getPhrase(ue,"oldest")}]),w.x$.JobStatus()],n=[{id:"id",header:de("syncFrom"),headerClassName:"px-2 py-1",renderClassName:"px-2",render:function(e){var t,n=null===(t=e.metadata)||void 0===t?void 0:t.source;if(!n)return a.createElement(a.Fragment,null);var r=se.e.Rostering.sources[n];if(!r)throw new I.H("Unsupported rostering sync source, please add it to HardCoded rostering source");return a.createElement("div",{className:"bg-white rounded-circle border ".concat(me.logoWrapper," d-flex align-items-center justify-content-center")},a.createElement(oe.u,{spanHack:!0,title:r.name},a.createElement("img",{src:r.iconUrl,alt:r.name})))},width:120},{id:"dateCreated",header:de("date"),headerClassName:"px-2 py-1",renderClassName:"px-2",render:function(e){return g.O.format(e.dateCreated,"DD/MM/YYYY, hh:mmA")},width:220},{id:"status",header:de("status"),headerClassName:"px-2 py-1",renderClassName:"px-2",render:function(e){return a.createElement(h,{status:e.status})},width:200},{id:"submitterName",header:de("performedBy"),headerClassName:"px-2",renderClassName:"px-2",render:function(t){return function(e,t){return e.submittedByClickView?a.createElement("div",{className:"d-flex align-items-center"},a.createElement(le.b,{className:"me-2 rounded-circle border",size:y.S.Large},a.createElement(_.F,null)),e.submitterName):e.submitterName?a.createElement("div",{className:"d-flex align-items-center"},a.createElement("div",{className:"me-2 ".concat(me.avatar)},a.createElement(j.q,{imageCdnUrl:t.imageCdnUrl,initials:ie.l.getInitials(e.submitterName.split(" ")[0],e.submitterName.split(" ")[1])})),e.submitterName):a.createElement("div",{className:"me-2 d-flex align-items-center"},a.createElement("div",{className:"".concat(me.cog," me-2 rounded-circle text-white bg-dark d-flex align-items-center justify-content-center")},a.createElement(y.x,{svgName:N.vn.Cog,className:"svg-container"})),de("scheduledSubmitter"))}(t,e)},width:200}];return a.createElement(X,Object.assign({},e,{filters:t,jobDetailsComponent:function(t){return a.createElement(ce,{job:t,getJobSummary:e.getJobSummary,onPollJob:e.onPollJob,onClickExport:e.onClickExport,onCompleted:e.onCompleted})},columns:n,forceExpand:function(e){return pe.includes(e.status)},disableExpand:function(e){return e.status===v.K.Failed}}))}var ge=n(62394),ve=n(16714),be=n(39151),Ee=n(44538),he=n(31949),ye=n(79612),Ne=n(14070),xe=n(97291),Ce=n(29613),Se=n(44230),ke=n(81803),Ie=n(23232),we=n(99742),je="rostering.districtRosterEmptyState";function Pe(){return a.createElement(Ie.u,null,a.createElement(Ie.u.Image,{src:we.W.EmptyStates.Rostering.DISTRICT_ROSTERING}),a.createElement(Ie.u.Heading,null,a.createElement(M.x,{namespace:je,phrase:"emptyHeading"})),a.createElement(Ie.u.Info,{className:"w-50 mb-2"},a.createElement(M.x,{namespace:je,phrase:"emptyInfo"})),a.createElement(Ie.u.Info,{className:"w-50 mb-1 fw-semibold"},a.createElement(M.x,{namespace:je,phrase:"strongInfo"})))}var Te="rostering.noResults";function Ae(){return a.createElement(Ie.u,null,a.createElement(Ie.u.Image,{src:we.W.EmptyStates.Rostering.EMPTY_RESULTS}),a.createElement(Ie.u.Heading,null,a.createElement(M.x,{namespace:Te,phrase:"emptyHeading"})),a.createElement(Ie.u.Info,{className:"w-50 mb-1"},a.createElement(M.x,{namespace:Te,phrase:"emptyInfo"})))}var Le="rostering.noSyncJobs",Oe=c.T.encloseNamespace(Le);function Je(e){return a.createElement(Ie.u,null,a.createElement(Ie.u.Image,{src:we.W.EmptyStates.Rostering.NO_SYNC_JOBS}),a.createElement(Ie.u.Heading,null,a.createElement(M.x,{namespace:Le,phrase:"emptyHeading"})),a.createElement(Ie.u.Info,{className:"w-50 mb-3"},a.createElement(M.x,{namespace:Le,phrase:"emptyInfo"})),a.createElement(Ie.u.Cta,{className:"btn btn-dark",onClick:e.onStartFullSync,text:Oe("emptyCta")}))}var Ke=n(52834),Be=n(56736),Re=c.T.encloseNamespace("rostering.syncList");function Ve(e){var t,n=l.a.useBasicFetch(Ee.K.getSyncList(e.queryParams)),c=l.a.useBasicFetch(be.L.config()),o=l.a.useBasicFetch(he.N.currentUser()),s=l.a.useBasicFetch(Ee.K.getRostering()),i=l.a.useBasicFetch(o.data&&s.data&&Ee.K.getSyncScheduleSettings(s.data.id)),m=n.hasCompleted&&c.hasCompleted&&i.hasCompleted&&s.hasCompleted,u=l.a.useGetFetchAsync(),d=(0,r.I0)();function g(e){return u(Ee.K.getJobSummary(e))}function v(e){return function(t,n){return u(Ce.q.getJobProgress(e,t,n))}}function b(){d({type:l.a.Actions.INVALIDATE,keys:["rostering:sync"],request:null})}function E(e){return u(Ce.q.sendJobReports(e))}(0,ye.M)({title:Re("pageTitle")}),a.useEffect((function(){return function(){Se.e.unlockContentWidth()}}),[]);var h=m&&"Active"===(null===(t=s.data)||void 0===t?void 0:t.status),y=(0,Be.B)(o.data),N=y.syncNow,x=y.fullSync;return a.createElement(ke.d,{heading:Re("heading"),breadcrumbs:[Re("breadcrumb")],headingButton:function(){return h?a.createElement(k.G,{onSyncNow:N,onFullSync:x}):a.createElement(a.Fragment,null)},requiredPermissions:ve.C.Rostering},h&&a.createElement(f.E,{active:"syncJobs",appLinks:{syncJobs:{application:xe.O.SETTINGS,action:Ne.e.Settings.ROSTERING},settings:{application:xe.O.SETTINGS,action:Ne.e.Settings.ROSTERING_SETTINGS}}}),function(){var t,r;if("Managed"===(null===(t=s.data)||void 0===t?void 0:t.status))return a.createElement(Pe,null);if("None"===(null===(r=s.data)||void 0===r?void 0:r.status))return a.createElement(Ke.y,null);if(!m)return a.createElement(p,null);if(!n.data.data.length&&!e.queryParams)return a.createElement(Je,{onStartFullSync:N});var l=ge.y.getScheduledJobBySetting(i.data);return a.createElement(a.Fragment,null,a.createElement(fe,{jobs:n.data,queryParams:e.queryParams,appLink:{application:xe.O.SETTINGS,action:Ne.e.Settings.ROSTERING},onClickExport:E,getJobSummary:g,imageCdnUrl:c.data.imageCdnUrl,onPollJob:v,onCompleted:b,pinnedComponent:l?function(){return a.createElement(S,{scheduledDate:l})}:null}),!n.data.data.length&&e.queryParams&&a.createElement(Ae,null))}())}},79447:(e,t,n)=>{n.d(t,{Z:()=>p});var a=n(95685),r=n.n(a),c=n(32735),l=n(46304),o=n(58661),s=n(74512);const i=1e3;function m(e,t,n){const a=(e-t)/(n-t)*100;return Math.round(a*i)/i}function u({min:e,now:t,max:n,label:a,visuallyHidden:c,striped:l,animated:o,className:i,style:u,variant:d,bsPrefix:p,...f},g){return(0,s.jsx)("div",{ref:g,...f,role:"progressbar",className:r()(i,`${p}-bar`,{[`bg-${d}`]:d,[`${p}-bar-animated`]:o,[`${p}-bar-striped`]:o||l}),style:{width:`${m(t,e,n)}%`,...u},"aria-valuenow":t,"aria-valuemin":e,"aria-valuemax":n,children:c?(0,s.jsx)("span",{className:"visually-hidden",children:a}):a})}const d=c.forwardRef((({isChild:e=!1,...t},n)=>{const a={min:0,max:100,animated:!1,visuallyHidden:!1,striped:!1,...t};if(a.bsPrefix=(0,l.vE)(a.bsPrefix,"progress"),e)return u(a,n);const{min:i,now:m,max:d,label:p,visuallyHidden:f,striped:g,animated:v,bsPrefix:b,variant:E,className:h,children:y,...N}=a;return(0,s.jsx)("div",{ref:n,...N,className:r()(h,b),children:y?(0,o.UI)(y,(e=>(0,c.cloneElement)(e,{isChild:!0}))):u({min:i,now:m,max:d,label:p,visuallyHidden:f,striped:g,animated:v,bsPrefix:b,variant:E},n)})}));d.displayName="ProgressBar";const p=d}}]);
|
|
2
|
-
//# sourceMappingURL=422-
|
|
2
|
+
//# sourceMappingURL=422-a63a7eb901-lite.chunk.js.map
|