@clickview/lite 0.75.0-rc.2 → 0.75.0-rc.4
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/{119-lite-a1f592f602.chunk.css → 1243-lite-13eda8f6a0.chunk.css} +2 -4
- package/dist/css/{7230-lite-36ff6e6d53.chunk.css → 1867-lite-8baa8af02b.chunk.css} +3 -5
- package/dist/css/{5241-lite-baab687563.chunk.css → 4203-lite-9ffab89741.chunk.css} +3 -5
- package/dist/css/{8364-lite-99938dea56.chunk.css → 5193-lite-d434056013.chunk.css} +1 -0
- package/dist/css/{7339-lite-05c396fed3.chunk.css → 6756-lite-839687d3d7.chunk.css} +1 -0
- package/dist/css/{9527-lite-1d2221b6a8.chunk.css → 7103-lite-fef3024f61.chunk.css} +2 -4
- package/dist/css/{8856-lite-827b34aed7.chunk.css → 8856-lite-c114ab5c89.chunk.css} +1 -1
- package/dist/languages/en.json +1 -1
- package/dist/scripts/104-0c03791b45-lite.chunk.js +2 -0
- package/dist/scripts/104-0c03791b45-lite.chunk.js.map +1 -0
- package/dist/scripts/1074-4f6b136f9a-lite.chunk.js +2 -0
- package/dist/scripts/1074-4f6b136f9a-lite.chunk.js.map +1 -0
- package/dist/scripts/1087-861be5211f-lite.chunk.js +2 -0
- package/dist/scripts/1087-861be5211f-lite.chunk.js.map +1 -0
- package/dist/scripts/1192-d409863a3c-lite.chunk.js +2 -0
- package/dist/scripts/1192-d409863a3c-lite.chunk.js.map +1 -0
- package/dist/scripts/1199-d2fcbb547e-lite.chunk.js +2 -0
- package/dist/scripts/1199-d2fcbb547e-lite.chunk.js.map +1 -0
- package/dist/scripts/121-1b744469ee-lite.chunk.js +2 -0
- package/dist/scripts/121-1b744469ee-lite.chunk.js.map +1 -0
- package/dist/scripts/{1221-502395e693-lite.chunk.js → 1221-1109d5379d-lite.chunk.js} +3 -3
- package/dist/scripts/1221-1109d5379d-lite.chunk.js.map +1 -0
- package/dist/scripts/1243-ede924125c-lite.chunk.js +2 -0
- package/dist/scripts/1243-ede924125c-lite.chunk.js.map +1 -0
- package/dist/scripts/147-44ee7e9a78-lite.chunk.js +2 -0
- package/dist/scripts/147-44ee7e9a78-lite.chunk.js.map +1 -0
- package/dist/scripts/1491-ab92a040e5-lite.chunk.js +2 -0
- package/dist/scripts/1491-ab92a040e5-lite.chunk.js.map +1 -0
- package/dist/scripts/{1610-7f58bb25a9-lite.chunk.js → 1610-bb6eff2ff1-lite.chunk.js} +2 -2
- package/dist/scripts/1610-bb6eff2ff1-lite.chunk.js.map +1 -0
- package/dist/scripts/{7230-71f8d6d1bd-lite.chunk.js → 1867-3b447a1b85-lite.chunk.js} +2 -2
- package/dist/scripts/{7230-71f8d6d1bd-lite.chunk.js.map → 1867-3b447a1b85-lite.chunk.js.map} +1 -1
- package/dist/scripts/{218-297de74688-lite.chunk.js → 218-f6cc4a3b6a-lite.chunk.js} +2 -2
- package/dist/scripts/218-f6cc4a3b6a-lite.chunk.js.map +1 -0
- package/dist/scripts/2258-ed7383502f-lite.chunk.js +3 -0
- package/dist/scripts/2258-ed7383502f-lite.chunk.js.map +1 -0
- package/dist/scripts/{2968-c4c0114915-lite.chunk.js → 2968-13e56eeff8-lite.chunk.js} +1 -1
- package/dist/scripts/2968-13e56eeff8-lite.chunk.js.map +1 -0
- package/dist/scripts/3268-2736356687-lite.chunk.js +2 -0
- package/dist/scripts/{3268-faca1bf46e-lite.chunk.js.map → 3268-2736356687-lite.chunk.js.map} +1 -1
- package/dist/scripts/3597-eaae787997-lite.chunk.js +3 -0
- package/dist/scripts/3597-eaae787997-lite.chunk.js.map +1 -0
- package/dist/scripts/3836-425334ab13-lite.chunk.js +2 -0
- package/dist/scripts/{3836-f2a0c9f713-lite.chunk.js.map → 3836-425334ab13-lite.chunk.js.map} +1 -1
- package/dist/scripts/3837-e4c5bb738b-lite.chunk.js +2 -0
- package/dist/scripts/3837-e4c5bb738b-lite.chunk.js.map +1 -0
- package/dist/scripts/4185-7178e5a716-lite.chunk.js +2 -0
- package/dist/scripts/4185-7178e5a716-lite.chunk.js.map +1 -0
- package/dist/scripts/4203-ee50e89841-lite.chunk.js +3 -0
- package/dist/scripts/4203-ee50e89841-lite.chunk.js.map +1 -0
- package/dist/scripts/4598-bcd3f6f8a7-lite.chunk.js +2 -0
- package/dist/scripts/{4598-2b1daca7ae-lite.chunk.js.map → 4598-bcd3f6f8a7-lite.chunk.js.map} +1 -1
- package/dist/scripts/{4722-d96da2a258-lite.chunk.js → 4722-9eb591621a-lite.chunk.js} +3 -3
- package/dist/scripts/4722-9eb591621a-lite.chunk.js.map +1 -0
- package/dist/scripts/4948-f21dad2ca1-lite.chunk.js +2 -0
- package/dist/scripts/4948-f21dad2ca1-lite.chunk.js.map +1 -0
- package/dist/scripts/{5153-079b4125ae-lite.chunk.js → 5153-cf62a95421-lite.chunk.js} +3 -3
- package/dist/scripts/5153-cf62a95421-lite.chunk.js.map +1 -0
- package/dist/scripts/6137-bc8b193237-lite.chunk.js +2 -0
- package/dist/scripts/6137-bc8b193237-lite.chunk.js.map +1 -0
- package/dist/scripts/6756-cfd00009e4-lite.chunk.js +3 -0
- package/dist/scripts/6756-cfd00009e4-lite.chunk.js.map +1 -0
- package/dist/scripts/6790-36ce6dda04-lite.chunk.js +2 -0
- package/dist/scripts/6790-36ce6dda04-lite.chunk.js.map +1 -0
- package/dist/scripts/705-10a85bae7a-lite.chunk.js +2 -0
- package/dist/scripts/705-10a85bae7a-lite.chunk.js.map +1 -0
- package/dist/scripts/7103-14bd3771d2-lite.chunk.js +2 -0
- package/dist/scripts/7103-14bd3771d2-lite.chunk.js.map +1 -0
- package/dist/scripts/7148-d966512e45-lite.chunk.js +2 -0
- package/dist/scripts/7148-d966512e45-lite.chunk.js.map +1 -0
- package/dist/scripts/7205-12a6b2ac55-lite.chunk.js +2 -0
- package/dist/scripts/7205-12a6b2ac55-lite.chunk.js.map +1 -0
- package/dist/scripts/7438-38f60d3e8e-lite.chunk.js +2 -0
- package/dist/scripts/7438-38f60d3e8e-lite.chunk.js.map +1 -0
- package/dist/scripts/7480-e0749592fc-lite.chunk.js +2 -0
- package/dist/scripts/7480-e0749592fc-lite.chunk.js.map +1 -0
- package/dist/scripts/8010-e9163f5bee-lite.chunk.js +2 -0
- package/dist/scripts/8010-e9163f5bee-lite.chunk.js.map +1 -0
- package/dist/scripts/8410-1f1fd5ccf0-lite.chunk.js +3 -0
- package/dist/scripts/8410-1f1fd5ccf0-lite.chunk.js.map +1 -0
- package/dist/scripts/8705-ecd20ef6cb-lite.chunk.js +2 -0
- package/dist/scripts/8705-ecd20ef6cb-lite.chunk.js.map +1 -0
- package/dist/scripts/8856-4da691f96f-lite.chunk.js +2 -0
- package/dist/scripts/8856-4da691f96f-lite.chunk.js.map +1 -0
- package/dist/scripts/9003-fc8e674468-lite.chunk.js +2 -0
- package/dist/scripts/9003-fc8e674468-lite.chunk.js.map +1 -0
- package/dist/scripts/9042-add0f1c2e2-lite.chunk.js +2 -0
- package/dist/scripts/9042-add0f1c2e2-lite.chunk.js.map +1 -0
- package/dist/scripts/9103-4eec16d73b-lite.chunk.js +2 -0
- package/dist/scripts/9103-4eec16d73b-lite.chunk.js.map +1 -0
- package/dist/scripts/9134-a6a5fc92cf-lite.chunk.js +2 -0
- package/dist/scripts/9134-a6a5fc92cf-lite.chunk.js.map +1 -0
- package/dist/scripts/9266-f0ad8d5cb3-lite.chunk.js +2 -0
- package/dist/scripts/9266-f0ad8d5cb3-lite.chunk.js.map +1 -0
- package/dist/scripts/9620-3746c84350-lite.chunk.js +3 -0
- package/dist/scripts/9620-3746c84350-lite.chunk.js.map +1 -0
- package/dist/scripts/9740-9d50d31b72-lite.chunk.js +2 -0
- package/dist/scripts/9740-9d50d31b72-lite.chunk.js.map +1 -0
- package/dist/scripts/{bundle-95a6fc2722.min.js → bundle-fc60888464.min.js} +3 -3
- package/dist/scripts/{bundle-95a6fc2722.min.js.map → bundle-fc60888464.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/104-b62a8447f0-lite.chunk.js +0 -2
- package/dist/scripts/104-b62a8447f0-lite.chunk.js.map +0 -1
- package/dist/scripts/107-989ac2dc47-lite.chunk.js +0 -2
- package/dist/scripts/107-989ac2dc47-lite.chunk.js.map +0 -1
- package/dist/scripts/119-e3a8bd94dd-lite.chunk.js +0 -2
- package/dist/scripts/119-e3a8bd94dd-lite.chunk.js.map +0 -1
- package/dist/scripts/1199-a2ac2338d0-lite.chunk.js +0 -2
- package/dist/scripts/1199-a2ac2338d0-lite.chunk.js.map +0 -1
- package/dist/scripts/121-bf7a153eb8-lite.chunk.js +0 -2
- package/dist/scripts/121-bf7a153eb8-lite.chunk.js.map +0 -1
- package/dist/scripts/1221-502395e693-lite.chunk.js.map +0 -1
- package/dist/scripts/1400-43b37bfa8d-lite.chunk.js +0 -2
- package/dist/scripts/1400-43b37bfa8d-lite.chunk.js.map +0 -1
- package/dist/scripts/1610-7f58bb25a9-lite.chunk.js.map +0 -1
- package/dist/scripts/218-297de74688-lite.chunk.js.map +0 -1
- package/dist/scripts/2258-4d0639c9fe-lite.chunk.js +0 -3
- package/dist/scripts/2258-4d0639c9fe-lite.chunk.js.map +0 -1
- package/dist/scripts/2968-c4c0114915-lite.chunk.js.map +0 -1
- package/dist/scripts/3268-faca1bf46e-lite.chunk.js +0 -2
- package/dist/scripts/3836-f2a0c9f713-lite.chunk.js +0 -2
- package/dist/scripts/3837-fe321e8deb-lite.chunk.js +0 -2
- package/dist/scripts/3837-fe321e8deb-lite.chunk.js.map +0 -1
- package/dist/scripts/4025-306e0fbdd5-lite.chunk.js +0 -2
- package/dist/scripts/4025-306e0fbdd5-lite.chunk.js.map +0 -1
- package/dist/scripts/4164-5d3af57b67-lite.chunk.js +0 -2
- package/dist/scripts/4164-5d3af57b67-lite.chunk.js.map +0 -1
- package/dist/scripts/4185-e8e40dab72-lite.chunk.js +0 -2
- package/dist/scripts/4185-e8e40dab72-lite.chunk.js.map +0 -1
- package/dist/scripts/4562-545f04c53f-lite.chunk.js +0 -2
- package/dist/scripts/4562-545f04c53f-lite.chunk.js.map +0 -1
- package/dist/scripts/4598-2b1daca7ae-lite.chunk.js +0 -2
- package/dist/scripts/4722-d96da2a258-lite.chunk.js.map +0 -1
- package/dist/scripts/4948-66ba60c8e3-lite.chunk.js +0 -2
- package/dist/scripts/4948-66ba60c8e3-lite.chunk.js.map +0 -1
- package/dist/scripts/5153-079b4125ae-lite.chunk.js.map +0 -1
- package/dist/scripts/5241-163f5ac64c-lite.chunk.js +0 -3
- package/dist/scripts/5241-163f5ac64c-lite.chunk.js.map +0 -1
- package/dist/scripts/5349-bc0fcb4083-lite.chunk.js +0 -2
- package/dist/scripts/5349-bc0fcb4083-lite.chunk.js.map +0 -1
- package/dist/scripts/6135-a878a9cff0-lite.chunk.js +0 -3
- package/dist/scripts/6135-a878a9cff0-lite.chunk.js.map +0 -1
- package/dist/scripts/6509-23fdb20a4b-lite.chunk.js +0 -2
- package/dist/scripts/6509-23fdb20a4b-lite.chunk.js.map +0 -1
- package/dist/scripts/6790-5086b72662-lite.chunk.js +0 -2
- package/dist/scripts/6790-5086b72662-lite.chunk.js.map +0 -1
- package/dist/scripts/7148-432ab72091-lite.chunk.js +0 -2
- package/dist/scripts/7148-432ab72091-lite.chunk.js.map +0 -1
- package/dist/scripts/7205-2428f775a5-lite.chunk.js +0 -2
- package/dist/scripts/7205-2428f775a5-lite.chunk.js.map +0 -1
- package/dist/scripts/7339-5793c921bb-lite.chunk.js +0 -3
- package/dist/scripts/7339-5793c921bb-lite.chunk.js.map +0 -1
- package/dist/scripts/7438-a5f96e58fc-lite.chunk.js +0 -2
- package/dist/scripts/7438-a5f96e58fc-lite.chunk.js.map +0 -1
- package/dist/scripts/7926-6b040931aa-lite.chunk.js +0 -2
- package/dist/scripts/7926-6b040931aa-lite.chunk.js.map +0 -1
- package/dist/scripts/8536-f75009dd87-lite.chunk.js +0 -2
- package/dist/scripts/8536-f75009dd87-lite.chunk.js.map +0 -1
- package/dist/scripts/8687-549a2d9278-lite.chunk.js +0 -3
- package/dist/scripts/8687-549a2d9278-lite.chunk.js.map +0 -1
- package/dist/scripts/8856-df102acdff-lite.chunk.js +0 -2
- package/dist/scripts/8856-df102acdff-lite.chunk.js.map +0 -1
- package/dist/scripts/9134-42dc2390ce-lite.chunk.js +0 -2
- package/dist/scripts/9134-42dc2390ce-lite.chunk.js.map +0 -1
- package/dist/scripts/9266-c5d6705147-lite.chunk.js +0 -2
- package/dist/scripts/9266-c5d6705147-lite.chunk.js.map +0 -1
- package/dist/scripts/9284-402a14d41c-lite.chunk.js +0 -2
- package/dist/scripts/9284-402a14d41c-lite.chunk.js.map +0 -1
- package/dist/scripts/9470-11c8c2ca71-lite.chunk.js +0 -2
- package/dist/scripts/9470-11c8c2ca71-lite.chunk.js.map +0 -1
- package/dist/scripts/9527-111c8586a7-lite.chunk.js +0 -2
- package/dist/scripts/9527-111c8586a7-lite.chunk.js.map +0 -1
- package/dist/scripts/9528-2b478f4ca8-lite.chunk.js +0 -3
- package/dist/scripts/9528-2b478f4ca8-lite.chunk.js.map +0 -1
- package/dist/scripts/9591-230bcf0935-lite.chunk.js +0 -2
- package/dist/scripts/9591-230bcf0935-lite.chunk.js.map +0 -1
- /package/dist/css/{8687-lite-6787cc731a.chunk.css → 3597-lite-6787cc731a.chunk.css} +0 -0
- /package/dist/css/{5349-lite-829df3b4e7.chunk.css → 6137-lite-829df3b4e7.chunk.css} +0 -0
- /package/dist/css/{9470-lite-edb2d29928.chunk.css → 8010-lite-edb2d29928.chunk.css} +0 -0
- /package/dist/css/{6135-lite-41bdd1c5a3.chunk.css → 8410-lite-41bdd1c5a3.chunk.css} +0 -0
- /package/dist/css/{121-lite-1337d9acf0.chunk.css → 9042-lite-1337d9acf0.chunk.css} +0 -0
- /package/dist/css/{9528-lite-6787cc731a.chunk.css → 9620-lite-6787cc731a.chunk.css} +0 -0
- /package/dist/scripts/{1221-502395e693-lite.chunk.js.LICENSE.txt → 1221-1109d5379d-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{2258-4d0639c9fe-lite.chunk.js.LICENSE.txt → 2258-ed7383502f-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{4722-d96da2a258-lite.chunk.js.LICENSE.txt → 3597-eaae787997-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{5153-079b4125ae-lite.chunk.js.LICENSE.txt → 4203-ee50e89841-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{5241-163f5ac64c-lite.chunk.js.LICENSE.txt → 4722-9eb591621a-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6135-a878a9cff0-lite.chunk.js.LICENSE.txt → 5153-cf62a95421-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{7339-5793c921bb-lite.chunk.js.LICENSE.txt → 6756-cfd00009e4-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{8687-549a2d9278-lite.chunk.js.LICENSE.txt → 8410-1f1fd5ccf0-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9528-2b478f4ca8-lite.chunk.js.LICENSE.txt → 9620-3746c84350-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-95a6fc2722.min.js.LICENSE.txt → bundle-fc60888464.min.js.LICENSE.txt} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/121-bf7a153eb8-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/utils/AnalyticsRequestUtils.ts","file:///app/packages/libs/shared/src/apps/analytics/flight-requests/InteractiveResultsRequests.ts","file:///app/packages/libs/shared/src/apps/share-v2/enums/ShareType.ts","file:///app/packages/libs/shared/src/apps/share-v2/utils/ShareHelper.ts","file:///app/packages/libs/shared/src/apps/share/utils/ShareLinkHelper.ts","file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/libs/shared/src/apps/share/components/shared-by-me/empty-state/SharedByMeEmptyState.tsx","file:///app/packages/libs/shared/src/apps/share/components/shared-by-me/share-status-indicator/share-status-indicator.scss","file:///app/packages/libs/shared/src/apps/share/components/shared-by-me/share-status-indicator/ShareStatusIndicator.tsx","file:///app/packages/libs/shared/src/apps/share/components/shared-by-me/table/SharedByMeTableUtils.tsx","file:///app/packages/libs/shared/src/apps/share/components/shared-by-me/table/SharedByMeTable.tsx","file:///app/packages/libs/shared/src/utils/ShareHelper.ts","file:///app/packages/projects/lite/src/apps/share/views/shared-by-me/partial-loading/partial-shared-by-me-table.scss","file:///app/packages/projects/lite/src/apps/share/views/shared-by-me/partial-loading/PartialSharedByMeTable.tsx","file:///app/packages/projects/lite/src/apps/share/views/shared-by-me/SharedByMeViewUtils.tsx","file:///app/packages/projects/lite/src/apps/share/views/shared-by-me/SharedByMeView.tsx","file:///app/packages/projects/lite/src/shared/hooks/useSharedByMeTable.ts","file:///app/packages/projects/lite/src/shared/utils/ObjectAppLinkHelper.ts"],"sourcesContent":["import { AnalyticsRequestFilter } from 'libs/shared/interfaces';\n\nexport function getAnalyticsRequestKey(baseKey: string, filter: AnalyticsRequestFilter, extra?: string): string {\n if (!filter)\n return baseKey;\n\n let key = `${baseKey}:${filter.start}:${filter.end}`;\n\n const userIdKey = Array.isArray(filter.userId) ? filter.userId.sort().join(':') : filter.userId;\n const groupIdKey = Array.isArray(filter.groupId) ? filter.groupId.sort().join(':') : filter.groupId;\n const customerIdKey = Array.isArray(filter.customerId) ? filter.customerId.sort().join(':') : filter.customerId;\n\n if (userIdKey)\n key += `:${userIdKey}`;\n\n if (groupIdKey)\n key += `:${groupIdKey}`;\n\n if (customerIdKey)\n key += `:${customerIdKey}`;\n\n if (extra)\n key += `:${extra}`;\n\n return key;\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/react/index';\n\nimport { MarkInteractiveAnswer } from 'libs/shared/apps/analytics/interfaces/MarkInteractiveAnswer';\nimport { InteractiveResultsReport } from 'libs/shared/apps/analytics/interfaces/requests/InteractiveResultsReport';\nimport { InteractivesPendingReviewsRequest } from 'libs/shared/apps/analytics/interfaces/requests/InteractivesPendingReviewsRequest';\nimport { AnalyticsRequestFilter, CurrentUser, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\ninterface InteractiveResultFilters {\n currentUserId: string;\n currentCustomerId: string;\n dateRange?: { start: string, end: string }\n userIds?: string | string[];\n classroomsAndGroups?: string | string[];\n}\n\nfunction getInteractiveResultFilters(\n currentUser: CurrentUser,\n filter: AnalyticsRequestFilter\n): InteractiveResultFilters {\n return {\n currentUserId: currentUser.id,\n currentCustomerId: currentUser.customerId,\n dateRange: filter ? { start: filter.start, end: filter.end } : undefined,\n userIds: filter?.userId,\n classroomsAndGroups: filter?.groupId\n };\n}\n\nexport const InteractiveResultsRequests = {\n /** \n * This endpoint returns data with a lot of duplicated ids,\n * e.g. student answers to the same question will have the same id.\n * Because of that, we don't normalize.\n */\n interactiveResultSet(\n interactiveId: string,\n interactiveMetadataId: string,\n currentUser: CurrentUser,\n filter?: AnalyticsRequestFilter,\n includePublicResults?: boolean,\n success?: (data: InteractiveResultSet) => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: includePublicResults ?\n `/api/domain/v3/analytics/interactives/${interactiveId}/metadata/${interactiveMetadataId}` :\n `/api/domain/v2/analytics/interactives/${interactiveId}/metadata/${interactiveMetadataId}`,\n key: getAnalyticsRequestKey(`interactive:result:set:${interactiveId}:${interactiveMetadataId}`, filter),\n data: getInteractiveResultFilters(currentUser, filter),\n type: HttpVerbs.POST,\n normalize: false,\n success,\n error,\n always\n };\n },\n \n /**\n * As the response from `interactiveResultSet` isn't normalised, we need to invalidate the cache\n * to update the results data.\n */\n mark(\n interactiveId: string,\n interactiveMetadataId: string,\n answerId: string,\n data: MarkInteractiveAnswer,\n success?: () => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `/api/domain/v1/analytics/answers/${answerId}`,\n key: `mark:answer:${answerId}:${data.resultId}`,\n type: HttpVerbs.PUT,\n data,\n normalize: false,\n invalidationKeys: `interactive:result:set:${interactiveId}:${interactiveMetadataId}`,\n success,\n error,\n always\n };\n },\n\n pendingReviews(data: InteractivesPendingReviewsRequest): Flight.Request {\n return {\n url: `/api/domain/v1/analytics/interactives/pending-reviews/summary`,\n key: `interactives:pending:reviews`,\n type: HttpVerbs.POST,\n data\n };\n },\n\n interactiveResultsReport(data: InteractiveResultsReport): Flight.Request {\n return {\n url: '/api/domain/v3/analytics/interactives/report',\n key: 'interactive:results:report',\n data,\n type: HttpVerbs.POST,\n normalize: false\n };\n }\n};","export enum ShareType {\n Link = 'Link',\n Classroom = 'Classroom',\n Open = 'Open',\n Live = 'Live'\n}","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareRecipient } from 'libs/shared/apps/share-v2/interfaces/ShareRecipient';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { Classroom } from 'libs/shared/interfaces';\n\nexport const ShareHelper = {\n getFlattenedRecipients(shares: Share[]): ShareRecipient[] {\n return ArrayHelper.flatten(shares.map(s => s.recipients ?? []));\n },\n\n getFlattenedUniqueScopes(shares: Share[]): string[] {\n const recipients = ShareHelper.getFlattenedRecipients(shares);\n return ArrayHelper.uniq(recipients.map(r => r.scopeId?.toString())).filter(x => !!x);\n },\n \n getClassroomIdFromShare(share: Share): string | undefined {\n const firstRecipient = share.recipients?.[0];\n \n if (!firstRecipient) return;\n \n if (firstRecipient.scopeId)\n return firstRecipient.scopeId.toString();\n \n if (firstRecipient.recipientId && firstRecipient.recipientTypeId === MasterType.Classroom)\n return firstRecipient.recipientId.toString();\n },\n\n getClassroomForShare(share: Share, classrooms: Classroom[]): Classroom | undefined {\n const classroomId = ShareHelper.getClassroomIdFromShare(share);\n \n if (!classroomId) return;\n \n return classrooms.find(classroom => classroom.id.toString() === classroomId.toString());\n },\n\n getRecipientsCount(share: Share, type?: MasterType.ClassroomGroup | MasterType.User): number {\n if (!type) return share.recipients?.length ?? 0;\n \n return share.recipients?.filter(r => r.recipientTypeId === type).length ?? 0;\n },\n\n hasShareExpired(share: Share): boolean {\n if (share.expireDate) {\n const now = new Date();\n const expireDate = new Date(share.expireDate);\n\n if (DateHelper.isAfter(now, expireDate))\n return true;\n }\n\n return false;\n },\n\n calculateDaysToExpiry(share: Share): number | undefined {\n if (!share.expireDate) return;\n\n const remainingDays = DateHelper.diffBetween(new Date(share.expireDate), new Date(), 'day') || 1;\n const smartCount = remainingDays === 0 ? 1 : remainingDays; // Prevent zero count\n\n return smartCount;\n }\n};","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SharePrivacyResponse } from 'libs/shared/apps/share/interfaces/responses/SharePrivacyResponse';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ShareLinkStatus } from 'libs/shared/enums/ShareLinkStatus';\nimport { BaseObject, YearGroup } from 'libs/shared/interfaces';\nimport { RestrictionHelper } from 'libs/shared/utils/RestrictionHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nconst namespace = 'share.shareLinkInfo';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface GetIconAndTextOptions {\n linkExpireDate: string;\n isPasswordProtected: boolean;\n privacy: SharePrivacyResponse;\n status: ShareLinkStatus;\n entityTypeId: MasterType;\n hasStudentExp: boolean;\n entity: BaseObject;\n yearGroups: YearGroup[];\n}\n\n\nexport const ShareLinkHelper = {\n getPrivateIconAndText: (options: GetIconAndTextOptions) => {\n const { entityTypeId, privacy, hasStudentExp, entity, yearGroups } = options;\n \n if (entityTypeId === MasterType.Topic || entityTypeId === MasterType.Series)\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase(hasStudentExp ? 'justMySchoolTeachers' : 'justMySchoolDescription') };\n \n /**\n * This is mainly for typescript, privacy will be an array for playlists\n * but that is handled above\n */\n if (Array.isArray(privacy))\n return;\n \n switch (privacy.privacy) {\n case 'public':\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase('publicDescription') };\n case 'protected':\n if (privacy.overrideRestrictions)\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase('clickViewOnly') };\n return {\n icon: cvSvgLibrary.Lock,\n text: ShareLinkHelper.getRespectRatingText(entity, yearGroups, hasStudentExp)\n };\n case 'just_my_customer':\n if (privacy.overrideRestrictions)\n return { icon: cvSvgLibrary.Lock, text: getPhrase(hasStudentExp ? 'justMySchoolTeachers' : 'justMySchoolDescription') };\n return {\n icon: cvSvgLibrary.Lock,\n text: ShareLinkHelper.getRespectRatingText(entity, yearGroups, hasStudentExp)\n };\n /**\n * Because we plan to add restricted management later \n * for the time being we treat is the same as private \n */\n case 'restricted':\n case 'private':\n return { icon: cvSvgLibrary.Lock, text: getPhrase('privateDescription') };\n default:\n return {};\n }\n },\n\n getIconAndText: (options: GetIconAndTextOptions) => {\n const { linkExpireDate, isPasswordProtected, status } = options;\n if (!linkExpireDate && !isPasswordProtected)\n return ShareLinkHelper.getPrivateIconAndText(options);\n \n if (!linkExpireDate)\n return { icon: cvSvgLibrary.Lock, text: getPhrase('password') };\n \n const isToday = DateHelper.isToday(linkExpireDate);\n const dayDifference = DateHelper.diffBetween(linkExpireDate, new Date(), 'day');\n \n if (!isPasswordProtected) {\n let text = isToday\n ? getPhrase('expiryToday')\n : getPhrase('expiry', { days: dayDifference });\n \n if (status === ShareLinkStatus.Expired)\n text = getPhrase('expired');\n \n return { icon: cvSvgLibrary.Timer, text };\n }\n \n let text = isToday\n ? getPhrase('passwordExpiryToday')\n : getPhrase('passwordExpiry', { days: dayDifference });\n \n if (status === ShareLinkStatus.Expired)\n text = getPhrase('passwordExpired');\n \n return { icon: cvSvgLibrary.Lock, text };\n },\n\n getRespectRatingText(video: BaseObject, yearGroups: YearGroup[], hasStudentExp: boolean) {\n if (!video || !yearGroups)\n return null;\n \n if (hasStudentExp)\n return getPhrase('justMySchoolTeachers');\n \n if (!VideoHelper.isVideoType(video))\n return getPhrase('collectionRating');\n \n const restriction = RestrictionHelper.getWeightedRestriction(video._restrictions?.value);\n \n /**\n * Restrictions without a year level are teacher restricitons, which means only admins can see it.\n */\n if (restriction && !restriction.yearGroup)\n return getPhrase('onlyAdmins');\n \n const rating = VideoHelper.getRating(video);\n \n let maxYearGroup: YearGroup;\n let minAllowedYearGroup: YearGroup;\n \n for (const yearGroup of yearGroups) {\n /**\n * If our year level is our new highest so far, save it\n */\n if (!maxYearGroup || yearGroup.value > maxYearGroup.value)\n maxYearGroup = yearGroup;\n \n /**\n * If the restriction is higher than this year level, skip it.\n */\n if (restriction && yearGroup.value <= restriction.yearGroup)\n continue;\n \n /**\n * If therating is higher than this year level's rating value, skip it.\n */\n if (rating && yearGroup.rating.value < rating.value)\n continue;\n \n /**\n * If our year level is the new lowest so far, save it\n */\n if (!minAllowedYearGroup || yearGroup.value < minAllowedYearGroup.value)\n minAllowedYearGroup = yearGroup;\n }\n \n /**\n * If no year levels are allowed, then it's staff only.\n */\n if (!minAllowedYearGroup)\n return getPhrase('onlyStaff');\n \n \n /**\n * If there's only one year level, and it's allowed, then we can just\n * say that everyone in your school can access it.\n */\n if (yearGroups.length === 1)\n return getPhrase('clickViewOnly');\n \n /**\n * We differentiate the copy if it's the highest year level or not. \n * Basically if we need to say \"X and above\" or not.\n */\n if (minAllowedYearGroup.value === maxYearGroup.value)\n return getPhrase('maxYearGroup', { yearGroup: maxYearGroup.name });\n \n return getPhrase('yearGroupRange', { yearGroup: minAllowedYearGroup.name });\n }\n};","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst CHUNK_SIZE = 50;\n\nexport interface UseBatchFetchResult<T extends BaseObject> {\n itemsArr: T[];\n items: { [key: string]: T} | null;\n isFetching: boolean;\n hasCompleted: boolean;\n}\n\n/**\n * Used to fetch multiple items by id with Flight. Will fetch 25 items at a time firing off multiple\n * requests if there are more than 25 items.\n * This will return items as null until we have all our items. Items will be returned as an object with\n * their ids as they key for easy mapping\n * \n * @param itemIds \n * @param getRequest \n */\nexport function useBatchFetch<T extends BaseObject>(\n itemIds: string[],\n getRequest: (ids: string[]) => Flight.Request\n): UseBatchFetchResult<T> {\n const chunks = ArrayHelper.chunk<string>(itemIds, CHUNK_SIZE);\n\n const requests = chunks.map(chunk => getRequest(ArrayHelper.uniq(chunk)));\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\n\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce((acc, item) => ({ ...acc, [item.id]: item }), {})\n : null;\n\n return {\n itemsArr,\n items,\n isFetching: responses.isFetching,\n hasCompleted: responses.hasCompleted\n };\n}\n\n/**\n * When you need the useBatchFetch() behavior, but your list of objects to hydrate\n * will grow, such as on a scrolling page. useGrowingBatchFetch() will use local state\n * to determine what we've already built a request for and what items are new\n * as to not re-fetch items - Sha\n */\nexport function useGrowingBatchFetch<TResponse, TObjects = string>(\n objs: TObjects[],\n getRequest: (items: TObjects[]) => Flight.Request,\n _getKey?: (obj: TObjects) => string\n) {\n const getKey = _getKey ?? ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const { fetchItems, ...data } = useGrowingBatchFetchFunc<TResponse, TObjects>({ getRequest, _getKey });\n\n React.useEffect(() => {\n if (!objs?.length)\n return;\n\n fetchItems(objs);\n }, [objs?.map(getKey).join(',')]);\n\n return data;\n}\n\ninterface UseGrowingBatchFetchFuncOptions<TObjects> {\n getRequest: (items: TObjects[]) => Flight.Request;\n _getKey?: (obj: TObjects) => string;\n}\n\n/**\n * When you need the useGrowingBatchFetch() behaviour, but need to trigger the\n * fetch manually and update the objects - Nish \n */\nexport function useGrowingBatchFetchFunc<TResponse, TObjects = string>(\n options: UseGrowingBatchFetchFuncOptions<TObjects>\n) {\n const getKey = options._getKey ?? ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const fetchedItems = React.useRef<Set<string>>(new Set<string>());\n const [ requests, setRequests ] = React.useState<Flight.Request[]>([]);\n\n function fetchItems(objs: TObjects[]) {\n if (!objs?.length)\n return;\n\n const unfetchedItems: TObjects[] = [];\n \n objs.forEach(obj => {\n const key = getKey(obj);\n\n if (fetchedItems.current.has(key))\n return;\n\n unfetchedItems.push(obj);\n fetchedItems.current.add(key);\n });\n \n if (!unfetchedItems.length)\n return;\n \n setRequests(r => ([ ...r, ...ArrayHelper.chunk<TObjects>(unfetchedItems, CHUNK_SIZE).map(options.getRequest) ]));\n }\n\n const responses = Flight.useBasicFetchAll<TResponse[]>(requests);\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce<Record<string, TResponse>>((acc, item) => ({ ...acc, [getKey(item)]: item }), {})\n : null;\n\n return {\n hasFirstRequestCompleted: !!responses.responses?.[0]?.hasCompleted,\n itemsArr,\n items,\n isFetching: responses.isFetching,\n fetchItems\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';\n\nconst namespace = 'share.sharedByMeEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SharedByMeEmptyStateProps {\n imageUrl: string;\n appLink?: Core.AppLink;\n useInteractiveCopy?: boolean;\n}\n\nexport function SharedByMeEmptyState(props: SharedByMeEmptyStateProps): JSX.Element {\n return (\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} size='small'/>\n <EmptyState.Heading>\n {getPhrase(props.useInteractiveCopy ? 'interactivesHeading' : 'genericHeading')}\n </EmptyState.Heading>\n <EmptyState.Info>{getPhrase(props.useInteractiveCopy ? 'interactivesInfo' : 'genericInfo')}</EmptyState.Info>\n {!!props.appLink &&\n <EmptyState.Cta appLink={props.appLink} text={getPhrase('cta')} />\n }\n </EmptyState>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"indicatorContainer\":\"T6YAv\",\"indicator\":\"_MRHG\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { ShareLinkStatus } from 'libs/shared/enums/ShareLinkStatus';\nimport { ShareType } from 'libs/shared/enums/ShareType';\nimport { UnionShareObject } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './share-status-indicator.scss';\n\nconst namespace = 'share.shareStatusIndicator';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getStatusPhrase(share: UnionShareObject): string {\n if (share.type === ShareType.DirectShare)\n return getPhrase('active');\n\n switch (share.status) {\n case ShareLinkStatus.Active:\n return getPhrase('active');\n\n case ShareLinkStatus.Expired:\n return getPhrase('expired');\n }\n}\n\nfunction getBgColourClassName(share: UnionShareObject): string {\n if (share.type === ShareType.DirectShare)\n return 'bg-success';\n \n switch (share.status) {\n case ShareLinkStatus.Active:\n return 'bg-success';\n\n case ShareLinkStatus.Expired:\n return 'bg-gray-500';\n }\n}\n\ninterface ShareStatusIndicatorProps {\n share: UnionShareObject;\n}\n\n/**\n * TODO: add support for deleted share links (currently the api doesn't return these.)\n */\nexport function ShareStatusIndicator(props: ShareStatusIndicatorProps): JSX.Element {\n if (props.share.type === ShareType.DirectShare && !props.share.recipients?.length)\n return <></>;\n\n if (props.share.type === ShareType.ShareLink && props.share.isPasswordProtected) {\n return (\n <Tooltip title={getPhrase('passwordProtected')} spanHack>\n <SvgContainer svgName={cvSvgLibrary.Lock} size={SvgContainerSize.Small} />\n </Tooltip>\n );\n }\n\n return (\n <Tooltip\n title={getStatusPhrase(props.share)}\n spanHack\n spanHackClassName={styles.indicatorContainer}\n >\n <div className={`${styles.indicator} ${getBgColourClassName(props.share)}`} />\n </Tooltip>\n );\n}","import React from 'react';\nimport { Column } from 'react-table';\nimport { format as formatDate } from 'timeago.js';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport {\n ShareStatusIndicator\n} from 'libs/shared/apps/share/components/shared-by-me/share-status-indicator/ShareStatusIndicator';\nimport { SharedObjectImage } from 'libs/shared/apps/share/components/shared-object-image/SharedObjectImage';\nimport {\n AnonymousSharedToAvatar,\n SharedLinkAvatar,\n SharedToAvatarList\n} from 'libs/shared/apps/share/components/shared-to-avatar-list/SharedToAvatarList';\nimport { ShareHelper } from 'libs/shared/apps/share/utils/ShareHelper';\nimport { ShareLinkHelper } from 'libs/shared/apps/share/utils/ShareLinkHelper';\nimport { SharableEntity, SharableRecipient, ShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ShareType } from 'libs/shared/enums/ShareType';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject, UnionShareObject, YearGroup } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nconst namespace = 'share.sharedByMeTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getDateShared(share: UnionShareObject): string {\n if (share.type === ShareType.ShareLink || !share?.recipients?.length)\n return share.dateCreated;\n\n const datesShared = share.recipients.map(r => r.dateShared);\n\n datesShared.sort((date1, date2) => {\n if (DateHelper.isSame(date1, date2))\n return 0;\n\n return DateHelper.isAfter(date1, date2) ? 1 : -2;\n });\n\n\n if (!datesShared.length)\n return '';\n\n return ArrayHelper.last(datesShared);\n}\n\ninterface SharedByMeTableData {\n share: UnionShareObject;\n sharedObject: SharableEntity;\n dateShared: string;\n sharedToData: {\n share: UnionShareObject;\n sharedObject: SharableEntity;\n recipients?: BaseObject[];\n };\n viewCount: number;\n}\n\ntype TableDataGroupings = { [date: string]: SharedByMeTableData[] };\n\ninterface GetColumnsOptions {\n index: number;\n dateHeading: string;\n getObjectAppLink: (object: BaseObject) => Core.AppLink;\n getObjectActions: (object: BaseObject) => ActionOptions[];\n imageCdnUrl: string;\n showStatus?: boolean;\n showViewCount?: boolean;\n breakpoints?: Breakpoints;\n yearGroups?: YearGroup[];\n}\n\nexport function getColumns(options: GetColumnsOptions): Column<SharedByMeTableData>[] {\n const {\n index,\n dateHeading,\n getObjectAppLink,\n getObjectActions,\n imageCdnUrl,\n showStatus,\n showViewCount,\n breakpoints,\n yearGroups\n } = options;\n const isMobile = breakpoints && (breakpoints.xs || breakpoints.sm);\n\n const columns: Column<SharedByMeTableData>[] = [\n {\n Header: showStatus ? '' : dateHeading,\n accessor: 'sharedObject',\n id: 'image',\n Cell: ({ value }) => (\n <div className='w-100'>\n <SharedObjectImage\n object={value}\n appLink={getObjectAppLink(value)}\n showVideoMetadata\n locationContext={LocationContext.SharedByMe}\n />\n </div>\n ),\n minWidth: 140,\n maxWidth: 30\n },\n {\n accessor: 'sharedObject',\n id: 'name',\n Cell: ({ value }) => {\n function getSubTextPhrase(): string {\n switch (value.typeId) {\n case MasterType.Series: return 'series';\n case MasterType.Playlist: return 'playlist';\n }\n }\n\n if (value.name) {\n if (VideoHelper.isVideoType(value) && !VideoHelper.getCanBeConsumed(value)?.canNavigate) {\n return (\n <span className='clamp-2'>\n {value.name}\n </span>\n );\n }\n\n const subTextPhrase = getSubTextPhrase();\n\n return (\n <div className='clamp-2'>\n {subTextPhrase &&\n <TitleSubText>\n <Text namespace={namespace} phrase={subTextPhrase} />\n </TitleSubText>\n }\n {VideoHelper.isVideoType(value) && (\n <VideoSubText\n type='series'\n video={value}\n appLink={'series' in value && value.series ? getObjectAppLink(value.series) : null}\n analyticsOptions={{ location: LocationContext.Insights }}\n />\n )}\n <AppLink\n appLink={getObjectAppLink(value)}\n analyticsData={{ id: value.id, name: value.name }}\n analyticsOptions={{\n entity: ShareViewHelper.getAnalyticsEntity(value.type),\n actionType: UserAction.Click,\n location: LocationContext.SharedByMe\n }}\n >\n {value.name}\n </AppLink>\n </div>\n );\n }\n\n return <span><Text namespace={namespace} phrase='videoUnavailable' /></span>;\n },\n width: 60\n },\n {\n Header: index === 0 ? getPhrase('sharedTo') : '',\n accessor: 'sharedToData',\n Cell: ({ value }) => {\n const { share, sharedObject, recipients } = value;\n\n if (!recipients) {\n const iconAndText = share.type === ShareType.ShareLink && ShareLinkHelper.getIconAndText({\n entity: sharedObject,\n entityTypeId: sharedObject.typeId,\n hasStudentExp: false,\n isPasswordProtected: share.isPasswordProtected,\n linkExpireDate: share.linkExpireDate,\n privacy: {\n privacy: share.privacy,\n overrideRestrictions: share.overrideRestrictions\n },\n status: share.status,\n yearGroups: yearGroups ?? []\n });\n\n return <SharedLinkAvatar text={iconAndText?.text} />;\n }\n \n if (!recipients?.length)\n return <AnonymousSharedToAvatar />;\n\n return (\n <SharedToAvatarList\n recipients={recipients}\n imageCdnUrl={imageCdnUrl}\n maxAvatars={isMobile ? 1 : 2}\n />\n );\n },\n width: 40\n },\n !isMobile && {\n Header: index === 0 ? getPhrase('shared') : '',\n id: 'dateShared',\n accessor: s => formatDate(s.dateShared),\n width: 40\n },\n {\n accessor: 'sharedObject',\n id: 'actions',\n Cell: ({ value }) => (\n <Actions\n actions={getObjectActions(value)}\n className='w-100 justify-content-end pe-2'\n />\n ),\n width: 20\n }\n ];\n\n const statusColumn: Column<SharedByMeTableData> = {\n Header: dateHeading,\n accessor: 'share',\n id: 'status',\n Cell: ({ value }) => (\n <ShareStatusIndicator share={value} />\n ),\n width: 5\n };\n\n const viewCountColumn: Column<SharedByMeTableData> = {\n Header: getPhrase('views'),\n accessor: 'viewCount',\n width: 30\n };\n\n if (showStatus)\n columns.splice(0, 0, statusColumn);\n\n if (showViewCount)\n columns.splice(columns.length - 1, 0, viewCountColumn);\n\n return columns.filter((Boolean));\n}\n\nexport function useGetData(\n sentShares: UnionShareObject[],\n sharedObjects: Record<string, SharableEntity>,\n shareRecipients: Record<string, SharableRecipient>,\n groupByDate: boolean\n): TableDataGroupings {\n const tableData: SharedByMeTableData[] = [];\n\n sentShares.forEach(s => {\n const sharedObject = sharedObjects?.[s.objectId];\n\n let recipients: BaseObject[] | null = null;\n\n if (s.type === ShareType.DirectShare) {\n recipients = [];\n\n s.recipients?.forEach(r => {\n const recipient = shareRecipients?.[r.id];\n\n if (recipient)\n recipients.push(recipient);\n });\n }\n\n // Skip if we don't have access to the shared object (e.g. if it's been deleted)\n if (sharedObject)\n tableData.push({\n share: s,\n sharedObject,\n sharedToData: {\n share: s,\n sharedObject,\n recipients\n },\n dateShared: getDateShared(s),\n viewCount: s.viewCount ?? 0\n });\n });\n\n if (!groupByDate)\n return { [getPhrase('title')]: tableData };\n\n return ShareHelper.groupByDateShared(tableData);\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { SHARES_TABLE_THEME } from 'libs/shared/apps/share/constants/TableTheme';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Table } from 'libs/shared/components/table/Table';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject, UnionShareObject, YearGroup } from 'libs/shared/interfaces';\n\nimport { SharableEntity, SharableRecipient } from '../../../views/share/ShareViewHelper';\n\nimport { getColumns, useGetData } from './SharedByMeTableUtils';\n\ninterface SharedByMeTableProps {\n sentShares: UnionShareObject[];\n sharedObjects: Record<string, SharableEntity>;\n shareRecipients: Record<string, SharableRecipient>;\n getObjectAppLink: (object: BaseObject) => Core.AppLink;\n getObjectActions: (object: BaseObject) => ActionOptions[];\n groupByDateShared?: boolean;\n showStatus?: boolean;\n showViewCount?: boolean;\n breakpoints?: Breakpoints;\n imageCdnUrl: string;\n yearGroups?: YearGroup[];\n}\n\nexport function SharedByMeTable(props: SharedByMeTableProps): JSX.Element {\n const data = useGetData(\n props.sentShares,\n props.sharedObjects,\n props.shareRecipients,\n !!props.groupByDateShared\n );\n\n return (\n <>\n {Object.keys(data).map((heading, index) => (\n <Table\n key={index}\n columns={getColumns({\n index,\n dateHeading: heading,\n getObjectAppLink: props.getObjectAppLink,\n getObjectActions: props.getObjectActions,\n imageCdnUrl: props.imageCdnUrl,\n showStatus: props.showStatus,\n showViewCount: props.showViewCount,\n breakpoints: props.breakpoints,\n yearGroups: props.yearGroups\n })}\n data={data[heading]}\n theme={SHARES_TABLE_THEME}\n />\n ))}\n </>\n );\n}","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ShareType } from 'libs/shared/enums/ShareType';\nimport { DirectShare, ShareRecipient, UnionShareObject } from 'libs/shared/interfaces';\n\nexport const ShareHelper = {\n getDirectShares(sentShares: UnionShareObject[]): DirectShare[] {\n return sentShares?.filter(s => s.type === ShareType.DirectShare) as DirectShare[] ?? [];\n },\n \n getRecipients(sentShares: UnionShareObject[]): ShareRecipient[] {\n return ArrayHelper.flatten(ShareHelper.getDirectShares(sentShares).map(d => d.recipients ?? []));\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"imageColumn\":\"uIOaA\",\"nameColumn\":\"Nta2B\",\"sharedToColumn\":\"XTJBC\",\"dateSharedColumn\":\"HdARK\",\"actionsColumn\":\"DXyZw\",\"heading\":\"XZ6o7\",\"image\":\"MolfU\",\"name\":\"MM43m\",\"avatar\":\"EboYM\",\"date\":\"by_XM\",\"actions\":\"_S2M_\"};","import React from 'react';\n\nimport styles from './partial-shared-by-me-table.scss';\n\nfunction PartialRow(): JSX.Element {\n return (\n <div className={`d-flex striped-row rounded`}>\n <div className={`d-flex align-items-center justify-content-center p-2 ${styles.imageColumn}`}>\n <div className={`partial-loading-background rounded w-100 ${styles.image}`} />\n </div>\n <div className={`d-flex align-items-center p-2 ${styles.nameColumn}`}>\n <div className={`partial-loading-background w-75 ${styles.name}`} />\n </div>\n <div className={`d-flex align-items-center p-2 ${styles.sharedToColumn}`}>\n <div className={`partial-loading-background ${styles.avatar}`} />\n </div>\n <div className={`d-none d-md-flex align-items-center p-2 ${styles.dateSharedColumn}`}>\n <div className={`partial-loading-background ${styles.date}`} />\n </div>\n <div className={`d-flex align-items-center justify-content-end p-2 ${styles.actionsColumn}`}>\n <div className={`partial-loading-background rounded me-2 ${styles.actions}`} />\n </div>\n </div>\n );\n}\n\ninterface PartialHeaderProps {\n fullHeader?: boolean;\n}\n\nfunction PartialHeader(props: PartialHeaderProps): JSX.Element {\n return (\n <div className='d-flex mb-1'>\n <div className={`${styles.imageColumn} p-2`}>\n <div className={`partial-loading-background ${styles.heading}`} />\n </div>\n <div className={`${styles.nameColumn} p-2`}>\n \n </div>\n <div className={`${styles.sharedToColumn} p-2`}>\n {props.fullHeader\n ? <div className={`partial-loading-background ${styles.heading}`} />\n : <> </>\n }\n </div>\n <div className={`${styles.dateSharedColumn} p-2 d-none d-md-flex`}>\n {props.fullHeader\n ? <div className={`partial-loading-background ${styles.heading}`} />\n : <> </>\n }\n </div>\n <div className={`${styles.actionsColumn} p-2`}>\n \n </div>\n </div>\n );\n}\n\nexport function PartialSharedByMeTable(): JSX.Element {\n return (\n <>\n <div className='mb-3'>\n <PartialHeader fullHeader />\n\n <div className='striped-list no-full-width'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n\n <div className='mb-3'>\n <PartialHeader />\n\n <div className='striped-list no-full-width'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n\n <div className='mb-3'>\n <PartialHeader />\n\n <div className='striped-list no-full-width'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { SharableEntityType } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject, Config } from 'libs/shared/interfaces';\nimport { AnalyticsRouteHelper } from 'libs/shared/utils/AnalyticsRouteHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'liteShare.sharedByMe';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getShareActionOptions(sharedObject: BaseObject, entityType: SharableEntityType): ActionOptions {\n return {\n label: getPhrase('editShareSettings'),\n appLink: {\n application: AppChannels.SHARE,\n action: Actions.Share.SHARE,\n args: [sharedObject.id],\n params: { entityType }\n }\n };\n}\n\ninterface SeeUsageActionProps {\n label: string;\n url?: string;\n}\n\nfunction SeeUsageAction(props: SeeUsageActionProps): JSX.Element {\n return (\n <Tooltip title={props.label} spanHack>\n <a\n href={props.url}\n target='_blank'\n >\n <SvgContainer svgName={cvSvgLibrary.Analytics} />\n </a>\n </Tooltip>\n );\n}\n\nfunction getSharedObjectActions(\n sharedObject: BaseObject,\n isMobile: boolean,\n config: Config\n): ActionOptions[] {\n let entityType: SharableEntityType;\n let analyticsPhrase = 'viewUsage';\n\n if (VideoHelper.isVideo(sharedObject))\n entityType = 'video';\n\n if (VideoHelper.isInteractive(sharedObject)) {\n entityType = 'interactive';\n analyticsPhrase = 'viewResults';\n }\n\n if (VideoHelper.isClip(sharedObject))\n entityType = 'clip';\n\n if (sharedObject.typeId === MasterType.Series)\n entityType = 'series';\n\n if (sharedObject.typeId === MasterType.Playlist)\n entityType = 'playlist';\n\n if (VideoHelper.isVideoType(sharedObject)) {\n const { canConsume } = VideoHelper.getCanBeConsumed(sharedObject);\n\n if (!canConsume)\n return [];\n }\n\n const sharedObjectActions = [getShareActionOptions(sharedObject, entityType)];\n\n const objectUrl = AnalyticsRouteHelper.getObjectUrl(config, sharedObject);\n if (objectUrl) {\n sharedObjectActions.push({\n label: !isMobile\n ? () => <SeeUsageAction label={getPhrase(analyticsPhrase)} url={objectUrl} />\n : getPhrase(analyticsPhrase),\n\n className: 'btn btn-link',\n button: !isMobile,\n href: AnalyticsRouteHelper.getObjectUrl(config, sharedObject),\n openInNewTab: true\n });\n }\n\n return sharedObjectActions;\n}\n\nexport function useGetSharedObjectActions(breakpoints: Breakpoints): ((object: BaseObject) => ActionOptions[]) | null {\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const isMobile = breakpoints.xs || breakpoints.sm;\n\n return React.useCallback((object: BaseObject) =>\n getSharedObjectActions(object, isMobile, config.data), [isMobile]);\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SharedByMeEmptyState } from 'libs/shared/apps/share/components/shared-by-me/empty-state/SharedByMeEmptyState';\nimport { SharedByMeTable } from 'libs/shared/apps/share/components/shared-by-me/table/SharedByMeTable';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { useSharedByMeTable } from 'shared/hooks/useSharedByMeTable';\nimport { getObjectAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport { SharesHeader } from 'apps/share/components/shares-header/SharesHeader';\n\nimport { PartialSharedByMeTable } from './partial-loading/PartialSharedByMeTable';\nimport {\n useGetSharedObjectActions\n} from './SharedByMeViewUtils';\n\nconst namespace = 'liteShare.sharedByMe';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function SharedByMeView(): JSX.Element {\n const { hasPermissions } = usePermissions();\n const { hasShareFlowV2 } = useSettings(null);\n\n const breakpoints = useBreakpoints();\n\n const {\n sentShares,\n sharedObjects,\n shareRecipients,\n isFetching,\n showPartialLoading,\n nextCursor,\n hasMore,\n fetchNext,\n imageCdnUrl,\n yearGroups\n } = useSharedByMeTable();\n\n const hasMyShares = hasPermissions(PermissionName.ViewMyShares) && hasShareFlowV2;\n\n React.useEffect(() => {\n if (hasMyShares)\n Core.AppLinkHelper.trigger({\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.HOME\n }, { replace: true });\n }, [hasMyShares]);\n\n useSetPageMetadata({ title: getPhrase('sharedByMe') });\n\n const getSharedObjectActions = useGetSharedObjectActions(breakpoints);\n\n return (\n <div className='px-3'>\n {!hasMyShares && <SharesHeader />}\n\n {(() => {\n if (showPartialLoading)\n return <PartialSharedByMeTable />;\n\n if (!sentShares.length)\n return (\n <SharedByMeEmptyState\n appLink={{ application: AppChannels.DASHBOARD, action: Actions.Dashboard.HOME }}\n imageUrl={ImageUrls.EmptyStates.Share.SHARED_WITH_ME}\n />\n );\n\n return (\n <>\n <SharedByMeTable\n sentShares={sentShares}\n sharedObjects={sharedObjects.items}\n shareRecipients={shareRecipients.items}\n getObjectAppLink={getObjectAppLink}\n getObjectActions={getSharedObjectActions}\n groupByDateShared\n breakpoints={breakpoints}\n yearGroups={yearGroups}\n imageCdnUrl={imageCdnUrl}\n />\n {(hasMore || isFetching) &&\n <InfiniteScrollFooter isFetching={isFetching} fetchNext={fetchNext} nextCursor={nextCursor} />\n }\n </>\n );\n })()}\n </div>\n );\n}","import { Flight } from 'libs/common/react/index';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { InteractiveResultsRequests } from 'libs/shared/apps/analytics/flight-requests/InteractiveResultsRequests';\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { GetSentItemsParams } from 'libs/shared/apps/share/interfaces/requests/GetSentItemsParams';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { UseBatchFetchResult, useGrowingBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { BaseObject, Config, CurrentUser, UnionShareObject, YearGroup } from 'libs/shared/interfaces';\nimport { ShareHelper } from 'libs/shared/utils/ShareHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\n\nexport function getBatchFetchResultAsArray(result: UseBatchFetchResult<BaseObject>): BaseObject[] {\n return result.items ? Object.values(result.items) : [];\n}\n\nexport function useSharedByMeTable(\n params?: GetSentItemsParams,\n interactiveInsights?: boolean,\n shouldFetch: boolean = true\n) {\n const fetch = Flight.useGetFetch();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n /**\n * Fetch sent shares\n */\n const getRequest = (cursor?: string) => shouldFetch && ShareRequests.sentShare({\n cursor,\n ...params\n });\n const fetchNext = (cursor?: string) => fetch(getRequest(cursor));\n const {\n items: sentShares,\n hasMore,\n isFetching: isFetchingSentShares,\n nextCursor,\n hasFirstPageCompleted\n } = useInfiniteList<UnionShareObject>(getRequest, fetchNext);\n\n /**\n * Fetch shared objects\n */\n const sharedObjects = useGrowingBatchFetch(\n sentShares?.map(obj => obj.objectId),\n ShareRequests.sharedObjectsById\n );\n\n /**\n * Fetch recipients\n */\n const shareRecipients = useGrowingBatchFetch(\n ShareHelper.getRecipients(sentShares).map(obj => obj.id),\n objs => (ShareRequests.getRecipientsById(objs, currentUser.data.customerId))\n );\n \n\n /**\n * Fetch which interactives required marking\n */\n const interactivesPendingReview = useGrowingBatchFetch(\n interactiveInsights ? ObjectHelper.values(sharedObjects.items || []) : [],\n objs => InteractiveResultsRequests.pendingReviews({\n interactives: objs\n .filter(VideoHelper.isInteractive)\n .map(obj => ({ interactiveId: obj.interactiveId, metadataId: obj.id })),\n filters: {\n currentCustomerId: currentUser.data.customerId,\n currentUserId: currentUser.data.id\n }\n }),\n obj => `${obj.id}:${obj.interactiveId}`\n );\n \n const isFetching = isFetchingSentShares\n || sharedObjects.isFetching\n || shareRecipients.isFetching\n || interactivesPendingReview.isFetching\n || yearGroups.isFetching;\n\n const showPartialLoading = !hasFirstPageCompleted || (sentShares?.length && !sharedObjects.hasFirstRequestCompleted);\n\n return {\n sentShares,\n sharedObjects,\n shareRecipients,\n yearGroups: yearGroups.data,\n interactivesPendingReview,\n isFetching,\n showPartialLoading,\n nextCursor,\n hasMore,\n fetchNext,\n imageCdnUrl: config.data?.imageCdnUrl\n };\n}","import { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { SharableEntityType } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BaseObject, Series } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { AssignAppLinkHelper } from 'apps/assign/utils/AssignAppLinkHelper';\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nconst INSIGHTS_WHITELIST = [\n MasterType.Video,\n MasterType.Clip,\n MasterType.Interactive\n];\n\nexport function getObjectAppLink(object: BaseObject): Core.AppLink {\n if (VideoHelper.isInteractive(object)) {\n return {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.VIEW_INTERACTIVE,\n args: [ object.id, TextHelper.slugify(object.name) ]\n };\n }\n\n if (VideoHelper.isClip(object)) {\n return {\n application: AppChannels.CLIPS,\n action: Actions.Clips.PLAY_CLIP,\n args: [ object.id, TextHelper.slugify(object.name) ]\n };\n }\n\n if (VideoHelper.isVideo(object)) {\n return {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ object.id, TextHelper.slugify(object.name) ]\n };\n }\n\n if (object.typeId === MasterType.Playlist) {\n return {\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.PLAYLIST,\n args: [ object.id, TextHelper.slugify(object.name) ]\n };\n }\n\n if (object.typeId === MasterType.Series) {\n return SeriesAppLinkHelper.getSeriesAppLink(object as Series);\n }\n}\n\nexport function getInsightsOverviewAppLink(share: Share, params?: HashObject): Core.AppLink {\n if (!share)\n return null;\n\n if (!INSIGHTS_WHITELIST.includes(share.objectTypeId))\n return getObjectAppLink({ id: share.objectId.toString(), typeId: share.objectTypeId });\n\n if (share.type === ShareType.Classroom) {\n const classroomId = ShareHelper.getClassroomIdFromShare(share);\n\n return {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.INSIGHTS_OVERVIEW,\n args: [ classroomId, share.shareId ],\n params\n };\n }\n\n if (share.type === ShareType.Open) {\n return {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.OPEN_CLASSROOM_INSIGHTS_OVERVIEW,\n args: [share.shareId],\n params\n };\n }\n\n return {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INSIGHTS_OVERVIEW,\n args: [share.shareId],\n params\n };\n}\n\nexport function getInsightsHeatmapAppLink(share: Share, params?: HashObject): Core.AppLink {\n if (!share)\n return null;\n\n if (!INSIGHTS_WHITELIST.includes(share.objectTypeId))\n return getObjectAppLink({ id: share.objectId.toString(), typeId: share.objectTypeId });\n\n if (share.type === ShareType.Classroom) {\n const classroomId = ShareHelper.getClassroomIdFromShare(share);\n\n return {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.INSIGHTS_HEATMAP,\n args: [ classroomId, share.shareId ],\n params\n };\n }\n\n if (share.type === ShareType.Open) {\n return {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.OPEN_CLASSROOM_INSIGHTS_HEATMAP,\n args: [share.shareId],\n params\n };\n }\n\n return {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INSIGHTS_HEATMAP,\n args: [share.shareId],\n params\n };\n}\n\nexport function getInsightsQuestionsAppLink(share: Share, params?: HashObject): Core.AppLink {\n if (!share)\n return null;\n\n if (!INSIGHTS_WHITELIST.includes(share.objectTypeId))\n return getObjectAppLink({ id: share.objectId.toString(), typeId: share.objectTypeId });\n\n if (share.type === ShareType.Classroom) {\n const classroomId = ShareHelper.getClassroomIdFromShare(share);\n\n return {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.INSIGHTS_QUESTIONS,\n args: [ classroomId, share.shareId ],\n params\n };\n }\n\n if (share.type === ShareType.Open) {\n return {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.OPEN_CLASSROOM_INSIGHTS_QUESTIONS,\n args: [share.shareId],\n params\n };\n }\n\n return {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INSIGHTS_QUESTIONS,\n args: [share.shareId],\n params\n };\n}\n\nexport function getInsightsStudentsAppLink(share: Share, params?: HashObject): Core.AppLink {\n if (!share)\n return null;\n \n if (!INSIGHTS_WHITELIST.includes(share.objectTypeId))\n return getObjectAppLink({ id: share.objectId.toString(), typeId: share.objectTypeId });\n\n if (share.type === ShareType.Classroom) {\n const classroomId = ShareHelper.getClassroomIdFromShare(share);\n\n return {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.INSIGHTS_STUDENTS,\n args: [ classroomId, share.shareId ],\n params\n };\n }\n\n if (share.type === ShareType.Open) {\n return {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.OPEN_CLASSROOM_INSIGHTS_STUDENTS,\n args: [share.shareId],\n params\n };\n }\n\n return {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INSIGHTS_STUDENTS,\n args: [share.shareId],\n params\n };\n}\n\nexport function getShareOptionsAppLink(share: Share): Core.AppLink {\n if (!share) return;\n\n const entityType = getSharableEntityType(share);\n\n if (share.type === ShareType.Link) {\n return {\n application: AppChannels.SHARE,\n action: Actions.Share.SHARE,\n args: [share.objectId],\n params: { entityType }\n };\n }\n\n return AssignAppLinkHelper.assignDetails({\n objectId: share.objectId.toString(),\n shareId: share.shareId,\n entityType\n });\n}\n\nexport function getDeleteShareAppLink(share: Share): Core.AppLink {\n if (!share) return;\n\n const entityType = getSharableEntityType(share);\n\n if (share.type === ShareType.Link) {\n return {\n application: AppChannels.SHARE,\n action: Actions.Share.DELETE_SHARE_LINK,\n args: [share.objectId],\n params: {\n entityType,\n previousAppLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.HOME\n } as Core.AppLink\n }\n };\n }\n\n const actions: Record<ShareType, string> = {\n [ShareType.Classroom]: Actions.Share.DELETE_ASSIGNMENT,\n [ShareType.Open]: Actions.Share.DELETE_OPEN_CLASSROOM,\n [ShareType.Link]: '',\n [ShareType.Live]: ''\n };\n\n const previousActions: Record<ShareType, string> = {\n [ShareType.Classroom]: Actions.Classrooms.CLASSROOM_HOME,\n [ShareType.Open]: Actions.Classrooms.OPEN_CLASSROOMS,\n [ShareType.Link]: '',\n [ShareType.Live]: ''\n };\n \n const action = actions[share.type];\n const previousAction = previousActions[share.type];\n\n if (!action || !previousAction) return;\n \n return {\n application: AppChannels.SHARE,\n action: action,\n args: [share.shareId],\n params: {\n previousAppLink: {\n application: AppChannels.CLASSROOMS,\n action: previousAction,\n args: [ShareHelper.getClassroomIdFromShare(share)]\n } as Core.AppLink\n }\n };\n}\n\nexport function getInsightsReportAppLink(share: Share): Core.AppLink {\n if (!share) return;\n if (share.objectTypeId !== MasterType.Interactive) return;\n\n return {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_GENERATE_REPORT,\n args: [share.objectId]\n };\n}\n\nfunction getSharableEntityType(share: Share): SharableEntityType {\n if (share.objectTypeId === MasterType.Video)\n return 'video';\n\n if (share.objectTypeId === MasterType.Interactive)\n return 'interactive';\n \n if (share.objectTypeId === MasterType.Clip)\n return 'clip';\n\n if (share.objectTypeId === MasterType.Series)\n return 'series';\n\n if (share.objectTypeId === MasterType.Playlist)\n return 'playlist';\n}"],"names":["getAnalyticsRequestKey","baseKey","filter","extra","key","start","end","userIdKey","Array","isArray","userId","sort","join","groupIdKey","groupId","customerIdKey","customerId","getInteractiveResultFilters","currentUser","currentUserId","id","currentCustomerId","dateRange","undefined","userIds","classroomsAndGroups","InteractiveResultsRequests","interactiveResultSet","interactiveId","interactiveMetadataId","includePublicResults","success","error","always","url","data","type","HttpVerbs","normalize","mark","answerId","resultId","invalidationKeys","pendingReviews","interactiveResultsReport","ShareType","ShareHelper","getFlattenedRecipients","shares","map","s","recipients","getFlattenedUniqueScopes","r","scopeId","toString","x","getClassroomIdFromShare","share","firstRecipient","recipientId","recipientTypeId","getClassroomForShare","classrooms","classroomId","find","classroom","getRecipientsCount","length","hasShareExpired","expireDate","now","Date","calculateDaysToExpiry","remainingDays","getPhrase","ShareLinkHelper","getPrivateIconAndText","options","entityTypeId","privacy","hasStudentExp","entity","yearGroups","icon","text","overrideRestrictions","getRespectRatingText","getIconAndText","linkExpireDate","isPasswordProtected","status","isToday","dayDifference","days","video","restriction","_restrictions","value","yearGroup","maxYearGroup","minAllowedYearGroup","rating","name","CHUNK_SIZE","useBatchFetch","itemIds","getRequest","requests","chunk","responses","itemsArr","items","reduce","acc","item","isFetching","hasCompleted","useGrowingBatchFetch","objs","_getKey","getKey","obj","useGrowingBatchFetchFunc","fetchItems","fetchedItems","Set","setRequests","hasFirstRequestCompleted","unfetchedItems","forEach","current","has","push","add","LanguageService","SharedByMeEmptyState","props","EmptyState","src","imageUrl","size","useInteractiveCopy","appLink","getStatusPhrase","ShareLinkStatus","getBgColourClassName","ShareStatusIndicator","Tooltip","title","spanHack","SvgContainer","svgName","S","spanHackClassName","className","getDateShared","dateCreated","datesShared","dateShared","date1","date2","DateHelper","ArrayHelper","getColumns","index","dateHeading","getObjectAppLink","getObjectActions","imageCdnUrl","showStatus","showViewCount","breakpoints","isMobile","xs","sm","columns","Header","accessor","Cell","SharedObjectImage","object","showVideoMetadata","locationContext","minWidth","maxWidth","VideoHelper","canNavigate","subTextPhrase","typeId","MasterType","getSubTextPhrase","TitleSubText","Text","namespace","phrase","VideoSubText","series","analyticsOptions","location","AppLink","analyticsData","ShareViewHelper","actionType","width","sharedObject","iconAndText","SharedToAvatarList","maxAvatars","Actions","actions","statusColumn","viewCountColumn","splice","Boolean","SharedByMeTable","sentShares","sharedObjects","shareRecipients","groupByDate","tableData","groupByDateShared","objectId","recipient","sharedToData","viewCount","Object","keys","heading","Table","theme","getDirectShares","getRecipients","d","PartialRow","PartialHeader","fullHeader","PartialSharedByMeTable","getShareActionOptions","entityType","label","application","action","args","params","SeeUsageAction","href","target","SharedByMeView","hasPermissions","usePermissions","hasShareFlowV2","useSettings","useBreakpoints","interactiveInsights","shouldFetch","fetch","UserRequests","config","ConfigRequests","isAuthenticated","CustomerRequests","cursor","ShareRequests","fetchNext","hasMore","isFetchingSentShares","nextCursor","hasFirstPageCompleted","interactivesPendingReview","ObjectHelper","I","interactives","metadataId","filters","showPartialLoading","useSharedByMeTable","hasMyShares","PermissionName","replace","useSetPageMetadata","getSharedObjectActions","analyticsPhrase","canConsume","sharedObjectActions","objectUrl","AnalyticsRouteHelper","button","openInNewTab","useGetSharedObjectActions","SharesHeader","InfiniteScrollFooter","ImageUrls","INSIGHTS_WHITELIST","getInsightsOverviewAppLink","includes","objectTypeId","shareId","getInsightsHeatmapAppLink","getInsightsQuestionsAppLink","getInsightsStudentsAppLink","getShareOptionsAppLink","getSharableEntityType","getDeleteShareAppLink","previousAppLink","previousActions","previousAction"],"sourceRoot":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/1221-502395e693-lite.chunk.js","mappings":";8JASMA,EAA4C,CAChDC,UAAW,YAUAC,EAAgB,CAC3BC,YAAW,SACTC,GAEA,MAAO,CACLC,IAAK,sBACLC,IAAK,kBACLC,KAAM,SACNH,KAAAA,EACAJ,iBAAAA,EACAQ,iBAAkB,CAAE,gBAAiB,8BAAF,OAAgCJ,EAAKK,WAE5E,EAEAC,YAAW,SACTC,EACAP,GAEA,MAAO,CACLC,IAAK,uBAAF,OAAyBM,GAC5BL,IAAK,kBACLC,KAAM,QACNH,KAAAA,EACAJ,iBAAAA,EACAQ,iBAAkB,CAAE,iCAAkC,YAAF,OAAcG,IAEtE,EAEAC,YAAW,SACTD,GAEA,MAAO,CACLJ,KAAM,WACNF,IAAK,uBAAF,OAAyBM,GAC5BL,IAAK,kBACLN,iBAAAA,EACAQ,iBAAkB,CAAE,iCAAkC,gBAAiB,YAAF,OAAcG,IAEvF,EAEAE,SAAQ,SACNF,GAEA,MAAO,CACLN,IAAK,uBAAF,OAAyBM,GAC5BL,IAAK,YAAF,OAAcK,GACjBG,cAAe,YAAF,OAAcH,GAC3BJ,KAAM,QACNP,iBAAAA,EAEJ,EAEAe,cAAa,WACqB,IAAhCC,EAAA,uDAA8B,CAAC,EAEzBV,EAAMW,OAAOC,OAAOF,GAAQG,OAAOC,KAAK,KAE9C,MAAO,CACLf,IAAM,eAAqB,2BAA4BW,GACvDV,IAAK,iBAAF,OAAmBA,GACtBC,KAAM,QACNc,WAAW,EAEf,EAEAC,aAAY,SACVC,GAEA,MAAO,CACLlB,IAAK,eAAqB,qCAAsC,CAAEI,SAAUc,IAC5EjB,IAAK,kCAAF,OAAoCiB,GACvCvB,iBAAAA,EAEJ,EAEAwB,gBAAe,SACbpB,GAEA,MAAO,CACLG,KAAM,SACNF,IAAK,eAAqB,qCAAsC,OAAF,UAAOD,IACrEE,IAAK,yCAAF,OAA2CF,EAAKK,UACnDD,iBAAkB,CAAC,kCAAD,OAAoCJ,EAAKK,UAAY,iBACvET,iBAAAA,EAEJ,EAEAyB,WAAU,SAACF,GACT,MAAO,CACLlB,IAAK,wBAAF,OAA0BkB,EAAE,WAC/BjB,IAAK,WAAF,OAAaiB,GAChBF,WAAW,EAEf,EAEAK,oBAAmB,SACjBjB,GAEA,MAAO,CACLJ,IAAK,+BAAF,OAAiCI,GACpCH,IAAK,8BAAF,OAAgCG,GACnCF,KAAM,QACNP,iBAAAA,EAEJ,EAEA2B,mBAAkB,SAAChB,GACjB,MAAO,CACLN,IAAK,uBAAF,OAAyBM,EAAO,YACnCL,IAAK,mBAAF,OAAqBK,EAAO,YAC/BJ,KAAM,SAEV,EAEAqB,oBAAmB,SAACjB,GAClB,MAAO,CACLN,IAAK,uBAAF,OAAyBM,EAAO,YACnCL,IAAK,gBAAF,OAAkBK,EAAO,YAEhC,EAEAkB,iBAAgB,SAACC,GACf,MAAO,CACLzB,IAAK,oCAAF,OAAsCyB,GACzCxB,IAAK,wBAAF,OAA0BwB,GAEjC,oDC3II,SAAUC,EAAaC,GAC3B,OACE,wBAAMT,GAAE,UAAKS,EAAMC,KAAI,SAASC,UAAS,UAAKF,EAAME,UAAS,6BAA6BC,KAAK,UAAUH,EAAMI,SAEnH,kFCVA,QAAuB,QAAvB,EAA+C,QAA/C,EAAiE,wgCCQjE,SAASC,EAA0BC,GACjC,OAAQA,GACN,KAAKC,EAAA,QACL,KAAKA,EAAA,cACL,KAAKA,EAAA,OACH,MDbwR,QCe1R,KAAKA,EAAA,UACL,KAAKA,EAAA,WACH,MDjB6T,QCmB/T,KAAKA,EAAA,SACH,MDpB6S,QCsB/S,QACE,MAAO,GAEb,CAKM,SAAUC,EAAYR,GAC1B,OACE,uBAAKE,UAAU,UACZF,EAAMI,SAGb,CAuEA,IAAMK,EAAiD,CACrDC,MAAO,EACPC,KD7GgF,SCuL5EC,EAAkE,CACtEC,KDxLiX,QCyLjXF,KAAM,IAgBRH,EAAYM,cACZ,SAAuBd,GACrB,OACE,uBAAKE,UAAS,UD5M+H,QC4MtG,0BAAkBF,EAAME,UAAYF,EAAME,UAAY,KAC1FF,EAAMI,SAGb,EAyCAI,EAAYO,KA9MZ,SAAmBf,GACjB,OACE,uBAAKE,UAAS,UAAK,EAAW,YAAIF,EAAME,UAAYF,EAAME,UAAY,KACnEF,EAAMI,SAGb,EAyMAI,EAAYQ,UA5LZ,SAAmBhB,GACjB,IAAyD,IAArB,YAAe,GAAM,GAAjDiB,EAAS,KAAEC,EAAY,KACuB,IAA1B,WAAuB,IAAG,GAA9CC,EAAK,KAAEC,EAAQ,KAevB,OAbA,aAAgB,WACd,GAAKpB,EAAMqB,SAAX,CAMA,IAAMC,EAAM,IAAIC,MAGhB,OAFAD,EAAIE,OAAS,kBAAMN,GAAa,EAAK,EACrCI,EAAIG,IAAMzB,EAAMqB,SACT,kBAAMC,EAAIE,OAAS,IAAI,CAL7B,CAHC,IAAM,EAAQxB,EAAM0B,eAAeC,KAAKC,MAAMD,KAAKE,SAAW7B,EAAM0B,eAAeI,SACnFV,EAAS,EAAMW,MAQnB,GAAG,CAAC/B,EAAMqB,WAGR,uBACEnB,UAAS,UAAK,EAAW,YAAI,EAAoB,YAAI,EAAc,aACnE8B,MAAO,CAAEC,gBAAiBd,EAAQ,QAAH,OAAWA,EAAK,MAAO,KAErDF,GACC,gCACE,uBAAKf,UDtF0L,QCsFlK8B,MAAO,CAAEC,gBAAiB,QAAF,OAAUjC,EAAMqB,SAAQ,SAC7E,uBAAKnB,UAAS,UDvF0M,QCuFhL,YAAIG,EAA0BL,EAAMM,cAC1E,uBAAKJ,UDxFyO,SCyF5O,uBAAKA,UDzFuP,QCyF9NuB,IAAKzB,EAAMqB,SAAUa,IAAKlC,EAAMmC,WAO5E,EA2JA3B,EAAY4B,wBA3IZ,SAAiCpC,GAC/B,IAAMqC,EAAgC,CACpCJ,gBAAiBjC,EAAMqB,SAAW,QAAH,OAAWrB,EAAMqB,SAAQ,MAAO,IAMjE,OAHIrB,EAAMsC,kBACRD,EAASC,gBAAkBtC,EAAMsC,iBAGjC,uBACEpC,UAAS,UAAK,EAAW,YAAI,EAAoB,YAAIO,EAAaT,EAAMuC,WAAa,SAAQ,8BAC7FP,MAAOK,EACPF,MAAOnC,EAAMmC,OAGnB,EA6HA3B,EAAYgC,MAvHN,SAAqBxC,GACzB,OACE,uBAAKE,UAAS,UDvIgF,QCuI/D,YAAIF,EAAME,UAAYF,EAAME,UAAY,KACpEF,EAAMI,SAGb,EAkHAI,EAAYiC,OAvGZ,SAAgBzC,SACR0C,GAAgB1C,aAAK,EAALA,EAAO2C,gBAAiBC,EAAA,GAE9C,OACE,uBAAK1C,UAAU,uBACVF,EAAM6C,iBACP7C,EAAM6C,gBAER,uBAAK3C,WAAW,OD9J0I,QC8JlH,oBAAoC,QAAf,EAAAF,EAAME,iBAAS,eAAE4C,gBAC5E,gBAACJ,EAAa,OAEf1C,EAAMI,SAGb,EA0FAI,EAAYuC,QApFZ,SAAiB/C,GACf,OACE,uBAAKE,WAAW,OD5KqG,QC4KrE,kDAAmDF,aAAK,EAALA,EAAOE,YACvGF,EAAMI,SAGb,EA+EAI,EAAYwC,YAnEZ,SAAqBhD,GACnB,IAAMiD,EAAiBrC,EAAkBZ,EAAMkD,OAAS,QACxD,OACE,uBAAKhD,WAAW,OD/LqU,QC+LtS+C,EAAgB,aAAcjD,EAAME,YAChFF,EAAMI,SAGb,EA6DAI,EAAY2C,QA1CZ,SAAiBnD,GACf,OACE,uBAAKE,WAAW,OAAW,oDDxN2J,QCwN9EF,aAAK,EAALA,EAAOE,YAC5GF,EAAMI,SAGb,mJChNM,SAAUgD,EAA0BzE,GACxC,IAAM0E,EAAc,kBAAkC,mBAChDC,EAAY,kBAAgC,mBAA6B3E,IAsBzE4E,EApBN,WACE,IAAKD,EAAUlF,OAASiF,EAAYjF,KAClC,OAAO,KAET,OAAQkF,EAAUlF,KAAKoF,cACrB,KAAK,UACH,OAAO,gBAA0BF,EAAUlF,KAAKK,SAAUE,GAC5D,KAAK,SACH,OAAO,eAAwB2E,EAAUlF,KAAKK,SAAUE,GAC1D,KAAK,gBACH,OAAO,8BAA8C2E,EAAUlF,KAAKK,SAAUE,GAChF,KAAK,aACH,OAAO,sBAAmC2E,EAAUlF,KAAKK,SAAUE,GACrE,KAAK,YACH,OAAO,mBAAsC2E,EAAUlF,KAAKK,SAAU4E,EAAYjF,KAAKmB,IACzF,KAAK,WACH,OAAO,iBAA4B+D,EAAUlF,KAAKK,SAAUE,GAElE,CAEwB8E,GAGxB,OAFiB,kBAAwBF,GAEzBnF,IAClB,6OCxCA,SAAgB,cAAgB,QAAQ,UAAY,QAAQ,MAAQ,u3PCuB9DH,EAAY,qBACZyF,EAAYC,EAAA,mBAAiC1F,GAS7C,SAAU2F,EAAiB5D,GAC/B,IAAkD,IAAlB,WAAe,IAAG,GAA1C6D,EAAO,KAAEC,EAAU,KACkC,IAArB,YAAe,GAAM,GAArDC,EAAW,KAAEC,EAAc,KACyB,IAAlB,WAAe,IAAG,GAApDC,EAAY,KAAEC,EAAe,KAE/BC,EAAa,uBAEbC,GAAiB,EAAAhB,EAAA,GAAuCpD,EAAMrB,SAkCpE,IAAKyF,EACH,OAAO,iCAET,IAAMC,EAAeC,EAAA,YAAsBC,EAAA,cAA4BH,GAAiB,CAAEI,KAAM,aAEhG,OACE,gBAAChE,EAAA,EAAW,KACV,gBAACA,EAAA,YAAqB,CACpB2B,MAAOiC,EAAenE,KACtBoB,SAAUgD,EACV/D,WAAY8D,EAAeK,OAC3B/C,eAAgB,OAElB,gBAAClB,EAAA,QAAiB,KAChB,gBAACA,EAAA,SAAkB,MACnB,gBAACA,EAAA,UAAmB,KAClB,gBAACA,EAAA,gBAAyB,KACxB,wBAAMkE,SAjDhB,SAAwBC,qIACH,GAAnBA,EAAEC,iBAEGf,EAAO,iDAMU,OAHtBG,GAAe,GAAM,kBAGOG,EAAyBjG,EAAA,mBAA+B2F,IAAS,OAA1E,IAEbgB,OAFEA,EAAc,EAAH,WAEF,EAAXA,EAAalG,WAAYqB,EAAMrB,QAAO,iBAElB,OADtBuF,EAAgBR,EAAU,0BAC1BM,GAAe,GAAO,2BAIxBc,EAAA,aAAkC9E,EAAMrB,QAASkF,GAC3CkB,EAAO,eAA2B/E,EAAMgF,SAC9C,gBAA4BD,GAAM,sDAEZ,QAAlB,OAAME,oBAAY,eAAEC,UAAWC,EAAA,WAAmB,iBAE9B,OADtBjB,EAAgBR,EAAU,0BAC1BM,GAAe,GAAO,2BAIxBE,EAAgBR,EAAU,qBAC1BM,GAAe,GAAO,yDAEzB,EAmBmC9D,UAAU,qBAClC,uBAAKA,UAAU,cACb,yBAAOA,UAAU,KAAKkF,QAAQ,iBAC5B,gBAACC,EAAA,EAAI,CAACpH,UAAWA,EAAWqH,OAAO,UAErC,yBACE/F,GAAG,gBACHhB,KAAK,OACL2B,UAAS,uCAAkC,QAAY,YAAI+D,EAAe,aAAe,IACzFsB,YAAa7B,EAAU,eACvB8B,SAAU,SAAAb,GAAC,OAAIb,EAAWa,EAAEc,OAAOC,MAAM,EACzCA,MAAO7B,EACP8B,aAAa,MAAK,oBACA,sBAGnB1B,GACC,gBAAClE,EAAA,EAAY,CAACG,UAAU,OAAOD,KAAK,gBAAgBgE,IAIxD,gBAAC2B,EAAA,EAAa,CACZC,QAAQ,OACR9B,YAAaA,EACbxF,KAAK,SACL2B,UAAU,oBACV4F,SAAU/B,IAAgBF,GAE1B,gBAACwB,EAAA,EAAI,CAACpH,UAAWA,EAAWqH,OAAO,iBAQnD,wGC/HA,SAAgB,KAAO,QAAQ,cAAgB,QAAQ,MAAQ,QAAQ,KAAO,QAAQ,eAAiB,QAAQ,cAAgB,QAAQ,MAAQ,QAAQ,UAAY,QAAQ,WAAa,QAAQ,MAAQ,QAAQ,eAAiB,ygCCS1N,IAAMS,EAA4B,CACvC,CAAEhE,MAAOiE,EAAA,kBACT,CAAEjE,MAAOiE,EAAA,kBACT,CAAEjE,MAAOiE,EAAA,kBACT,CAAEjE,MAAOiE,EAAA,kBACT,CAAEjE,MAAOiE,EAAA,mBAGEC,EAAoC,CAC/C,CAAElE,MAAOiE,EAAA,0BACT,CAAEjE,MAAOiE,EAAA,0BACT,CAAEjE,MAAOiE,EAAA,0BACT,CAAEjE,MAAOiE,EAAA,0BACT,CAAEjE,MAAOiE,EAAA,0BACT,CAAEjE,MAAOiE,EAAA,0BACT,CAAEjE,MAAOiE,EAAA,0BACT,CAAEjE,MAAOiE,EAAA,0BACT,CAAEjE,MAAOiE,EAAA,2BAYX,SAAS3F,EAA0BC,GACjC,OAAQA,GACN,KAAKC,EAAA,QACL,KAAKA,EAAA,cACL,KAAKA,EAAA,OACH,OAAO,YAET,KAAKA,EAAA,UACL,KAAKA,EAAA,WACH,OAAO,QAET,KAAKA,EAAA,SACH,OAAO,aAET,QACE,MAAO,GAEb,CAyBM,SAAU2F,EAAUlG,SACiC,IAArB,YAAe,GAAM,GAAjDiB,EAAS,KAAEC,EAAY,KACuB,IAA1B,WAAuB,IAAG,GAA9CC,EAAK,KAAEC,EAAQ,KAEjBC,EAAWiD,EAAA,YAAsBtE,EAAMqB,SAAU,CAAEmD,KAAM,aACzD2B,EAAaF,EAuBnB,OArBA,aAAgB,WACd,IAAI5E,GAAa8E,GAAoC,IAAtBA,EAAWrE,OAA1C,CAGA,IAfoBsE,EAedjF,GAfciF,EAeSD,GAdfxE,KAAKC,MAAMD,KAAKE,SAAWuE,EAAStE,SAgB9CX,EAAMY,OACRX,EAASD,EAAMY,MALT,CAOV,GAAG,IAEH,aAAgB,WACd,GAAKV,EAAL,CAGA,IAAMC,EAAM,IAAIC,MAGhB,OAFAD,EAAIE,OAAS,kBAAMN,GAAa,EAAK,EACrCI,EAAIG,IAAMJ,EACH,kBAAMC,EAAIE,OAAS,IAAI,CALtB,CAMV,GAAG,IAGD,uBAAKtB,UAAU,UACXF,EAAMqG,cACNrG,EAAMqG,gBAEN,uBACEnG,UAAS,UAAK,OAAW,YAAIiB,EAAQ,oCAAsC,aAE1EA,EACC,uBAAKjB,UAAU,YAAYuB,IAAKN,EAAOmF,WAAW,IACjDrF,GACC,gCACE,uBAAKf,UAAW,OAAa8B,MAAO,CAAEC,gBAAiB,QAAF,OAAUZ,EAAQ,SACvE,uBAAKnB,UAAS,UAAK,iBAAqB,YAAIG,EAA0BL,EAAMM,cAC1E,uBAAKJ,UAAW,iBACd,uBAAKA,UAAW,QAAcuB,IAAKJ,EAAUa,IAAKlC,EAAMmC,YAQtE,uBAAKjC,UAAS,UAAK,QAAY,iCAC7B,uBAAKA,UAAS,sDAAiD,mBACjD,QAAX,EAAAF,EAAMuG,aAAK,eAAEC,KAAI,SAACC,EAAMnI,GACvB,OAAImI,EAAKC,KACA,gBAAC,WAAc,CAACpI,IAAKA,IAG5B,qBAAGA,IAAKA,EAAKyG,KAAM0B,EAAKpI,IAAK6B,UAAU,wBAAwByG,QAASF,EAAKE,SAC1EF,EAAKG,KAGZ,KAGD5G,EAAMI,UAIf","sources":["file:///app/packages/libs/shared/src/apps/share-v2/flight-requests/ShareRequests.ts","file:///app/packages/libs/shared/src/components/forms/form-feedback/FormFeedback.tsx","file:///app/packages/libs/shared/src/components/launchpad/v2/launchpad-v2.scss","file:///app/packages/libs/shared/src/components/launchpad/v2/LaunchpadV2.tsx","file:///app/packages/projects/lite/src/apps/share/hooks/useFetchSharedResource.ts","file:///app/packages/projects/lite/src/apps/share/views/video-pincode/video-pincode.scss","file:///app/packages/projects/lite/src/apps/share/views/video-pincode/VideoPincodeView.tsx","file:///app/packages/projects/lite/src/shared/components/launchpad/launchpad.scss","file:///app/packages/projects/lite/src/shared/components/launchpad/Launchpad.tsx"],"sourcesContent":["import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { CreateShareLinkRequest } from 'libs/shared/apps/share-v2/interfaces/CreateShareLinkRequest';\nimport { CreateShareRequest } from 'libs/shared/apps/share-v2/interfaces/CreateShareRequest';\nimport { UpdateShareRequest } from 'libs/shared/apps/share-v2/interfaces/UpdateShareRequest';\n\nconst normalizeOptions: Flight.NormalizeOptions = {\n namespace: 'share-v2'\n};\n\nexport interface GetSentSharesParams {\n cursor?: string;\n scopeId?: string;\n objectTypeId?: number;\n type?: ShareType\n}\n\nexport const ShareRequests = {\n createShare(\n data: CreateShareRequest\n ): Flight.Request {\n return {\n url: '{gateway}/v2/shares',\n key: 'create:share-v2',\n type: HttpVerbs.POST,\n data,\n normalizeOptions,\n invalidationKeys: [ 'sent:share-v2', `get:share-v2:shares:object:${data.objectId}` ]\n };\n },\n\n updateShare(\n shareId: string,\n data: UpdateShareRequest\n ): Flight.Request {\n return {\n url: `{gateway}/v2/shares/${shareId}`,\n key: `update:share-v2`,\n type: HttpVerbs.PUT,\n data,\n normalizeOptions,\n invalidationKeys: [ 'share-v2:permanent-link:object', `share-v2:${shareId}` ]\n };\n },\n \n deleteShare(\n shareId: string\n ): Flight.Request {\n return {\n type: HttpVerbs.DELETE,\n url: `{gateway}/v2/shares/${shareId}`,\n key: `delete:share-v2`,\n normalizeOptions,\n invalidationKeys: [ 'share-v2:permanent-link:object', 'sent:share-v2', `share-v2:${shareId}` ]\n };\n },\n\n getShare(\n shareId: string\n ): Flight.Request {\n return {\n url: `{gateway}/v2/shares/${shareId}`,\n key: `share-v2:${shareId}`,\n bootstrapName: `share-v2:${shareId}`,\n type: HttpVerbs.GET,\n normalizeOptions\n };\n },\n\n getSentShares(\n params: GetSentSharesParams = {}\n ): Flight.Request {\n const key = Object.values(params).sort().join(':');\n\n return {\n url: UrlHelper.urlBuilder('{gateway}/v2/shares/sent', params),\n key: `sent:share-v2:${key}`,\n type: HttpVerbs.GET,\n normalize: false\n };\n },\n\n getShareLink(\n id: string\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder('{gateway}/v2/shares/permanent-link', { objectId: id }),\n key: `share-v2:permanent-link:object:${id}`,\n normalizeOptions\n };\n },\n\n createShareLink(\n data: CreateShareLinkRequest\n ): Flight.Request {\n return {\n type: HttpVerbs.POST,\n url: UrlHelper.urlBuilder('{gateway}/v2/shares/permanent-link', { ...data }),\n key: `create:share-v2:permanent-link:object:${data.objectId}`,\n invalidationKeys: [ `share-v2:permanent-link:object:${data.objectId}`, 'sent:share-v2' ],\n normalizeOptions\n };\n },\n\n getPrivacy(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}/access`,\n key: `privacy:${id}`,\n normalize: false\n };\n },\n \n getSharesByObjectId(\n objectId: string | number\n ): Flight.Request {\n return {\n url: `{gateway}/v2/shares/objects/${objectId}`,\n key: `get:share-v2:shares:object:${objectId}`,\n type: HttpVerbs.GET,\n normalizeOptions\n };\n },\n\n createSharePincode(shareId: string): Flight.Request {\n return {\n url: `{gateway}/v2/shares/${shareId}/pincode`,\n key: `create:share-v2:${shareId}:pincode`,\n type: HttpVerbs.POST\n };\n },\n\n getPincodeByShareId(shareId: string): Flight.Request {\n return {\n url: `{gateway}/v2/shares/${shareId}/pincode`,\n key: `get:share-v2:${shareId}:pincode`\n };\n },\n\n getPincodeByCode(code: string): Flight.Request {\n return {\n url: `{gateway}/v2/shares/pincode?code=${code}`,\n key: `get:share-v2:pincode:${code}`\n };\n }\n};\n","import React from 'react';\n\ninterface FormFeedbackProps extends React.PropsWithChildren {\n name: string;\n className?: string;\n}\n\nexport function FormFeedback(props: FormFeedbackProps) {\n return (\n <span id={`${props.name}Error`} className={`${props.className} invalid-feedback d-block`} role='status'>{props.children}</span>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"left\":\"s6wnJ\",\"leftWithImage\":\"UFQ2T\",\"bgCover\":\"Tp9_3\",\"bgFull\":\"AlF2T\",\"right\":\"eoZzJ\",\"rightContent\":\"RVyLM\",\"narrowContent\":\"INvJ0\",\"logo\":\"YHNgA\",\"buttonContainer\":\"ZW85Q\",\"blur\":\"Mtlg9\",\"imageContainer\":\"NxEjh\",\"imagePosition\":\"NN9cV\",\"image\":\"PkJ8J\",\"thumbnail\":\"y0V3Z\",\"tallposter\":\"Wrg5x\",\"cover\":\"x3h8F\",\"contentBody\":\"aLd5V\",\"contentBodyBase\":\"uQ2rm\"};","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { ClickViewLogo } from 'libs/shared/components/svgs/clickview-logo/ClickViewLogo';\nimport { MasterType } from 'libs/shared/enums/MasterType';\n\nimport styles from './launchpad-v2.scss';\n\nfunction mapObjectTypeToImageClass(objectType: MasterType): string {\n switch (objectType) {\n case MasterType.Video:\n case MasterType.Interactive:\n case MasterType.Clip:\n return styles.thumbnail;\n\n case MasterType.Subject:\n case MasterType.Playlist:\n return styles.cover;\n\n case MasterType.Series:\n return styles.tallposter;\n\n default:\n return '';\n }\n}\n\ninterface LaunchpadV2Props {\n}\n\nexport function LaunchpadV2(props: React.PropsWithChildren<LaunchpadV2Props>): JSX.Element {\n return (\n <div className='d-flex'>\n {props.children}\n </div>\n );\n}\n\ninterface LeftPanelProps {\n className?: string;\n}\n\n\nfunction LeftPanel(props: React.PropsWithChildren<LeftPanelProps>): JSX.Element {\n return (\n <div className={`${styles.left} ${props.className ? props.className : ''}`}>\n {props.children}\n </div>\n );\n}\n\ninterface LeftImageProps {\n objectType?: MasterType;\n title?: string;\n imageUrl?: string;\n fallbackImages: LaunchImage[];\n}\n\ninterface LaunchImage {\n bgUrl: string;\n}\n\nfunction LeftImage(props: LeftImageProps): JSX.Element {\n const [ showImage, setShowImage ] = React.useState(false);\n const [ image, setImage ] = React.useState<string>('');\n\n React.useEffect(() => {\n if (!props.imageUrl) {\n const image = props.fallbackImages[Math.floor(Math.random() * props.fallbackImages.length)];\n setImage(image.bgUrl);\n return;\n }\n\n const img = new Image();\n img.onload = () => setShowImage(true);\n img.src = props.imageUrl;\n return () => img.onload = null;\n }, [props.imageUrl]);\n\n return (\n <div\n className={`${styles.left} ${styles.leftWithImage} ${styles.bgCover} bg-light`}\n style={{ backgroundImage: image ? `url('${image}')` : '' }}\n >\n {showImage &&\n <>\n <div className={styles.blur} style={{ backgroundImage: `url('${props.imageUrl}')` }} />\n <div className={`${styles.imageContainer} ${mapObjectTypeToImageClass(props.objectType)}`}>\n <div className={styles.imagePosition}>\n <img className={styles.image} src={props.imageUrl} alt={props.title} />\n </div>\n </div>\n </>\n }\n </div>\n );\n}\n\ntype ImageSizeType = 'cover' | 'full';\n\ninterface LeftImageWithBackgroundProps {\n imageUrl: string;\n imageSize?: ImageSizeType;\n backgroundColor?: string;\n title?: string;\n}\n\nconst imageSizeMap: {[key in ImageSizeType]: string} = {\n cover: styles.bgCover,\n full: styles.bgFull\n};\n\nfunction LeftImageWithBackground(props: LeftImageWithBackgroundProps): JSX.Element {\n const bgStyles: React.CSSProperties = {\n backgroundImage: props.imageUrl ? `url(\"${props.imageUrl}\")` : ''\n };\n\n if (props.backgroundColor)\n bgStyles.backgroundColor = props.backgroundColor;\n \n return (\n <div\n className={`${styles.left} ${styles.leftWithImage} ${imageSizeMap[props.imageSize || 'cover']} d-flex align-items-center`}\n style={bgStyles}\n title={props.title}\n />\n );\n}\n\ninterface RightPanelProps {\n className?: string;\n}\n\nexport function RightPanel(props: React.PropsWithChildren<RightPanelProps>): JSX.Element {\n return (\n <div className={`${styles.right} ${props.className ? props.className : ''}`}>\n {props.children}\n </div>\n );\n}\n\ninterface HeaderProps {\n bannerComponent?: JSX.Element;\n logoComponent?: () => JSX.Element;\n className?: {\n logoContainer?: string;\n }\n}\n\n\nfunction Header(props: React.PropsWithChildren<HeaderProps>): JSX.Element {\n const LogoComponent = props?.logoComponent || ClickViewLogo;\n \n return (\n <div className='position-relative'>\n {!!props.bannerComponent &&\n props.bannerComponent\n }\n <div className={classNames(styles.logo, 'position-absolute', props.className?.logoContainer)}>\n <LogoComponent />\n </div>\n {props.children}\n </div>\n );\n}\n\ninterface ContentProps {\n className?: string;\n}\n\nfunction Content(props: React.PropsWithChildren<ContentProps>): JSX.Element {\n return (\n <div className={classNames(styles.rightContent, 'd-flex flex-column justify-content-center h-100', props?.className)}>\n {props.children}\n </div>\n );\n}\n\ninterface ContentBodyProps {\n className?: string;\n width?: 'base' | 'full';\n}\n\nconst widthClassNameMap: {[key in ContentBodyProps['width']]: string} = {\n base: styles.contentBodyBase,\n full: ''\n};\n\nfunction ContentBody(props: React.PropsWithChildren<ContentBodyProps>): JSX.Element {\n const widthClassName = widthClassNameMap[props.width || 'base'];\n return (\n <div className={classNames(styles.contentBody, widthClassName, 'm-auto p-3', props.className)}>\n {props.children}\n </div>\n );\n}\n\ninterface NarrowContentProps {\n className?: string;\n}\n\nLaunchpadV2.NarrowContent = NarrowContent;\nfunction NarrowContent(props: React.PropsWithChildren<NarrowContentProps>): JSX.Element {\n return (\n <div className={`${styles.narrowContent} mx-auto w-100 ${props.className ? props.className : ''}`}>\n {props.children}\n </div>\n );\n}\n\ninterface ButtonsProps {\n className?: string;\n}\n\nfunction Buttons(props: React.PropsWithChildren<ButtonsProps>): JSX.Element {\n return (\n <div className={classNames('position-fixed bg-white d-flex align-items-center', styles.buttonContainer, props?.className)}>\n {props.children}\n </div>\n );\n}\n\n/**\n * Intended ussage below:\n * \n * <LaunchpadV2>\n * <LaunchpadV2.Left>\n * // Your LHS content here\n * </LaunchpadV2.Left>\n * <LaunchpadV2.Right>\n * <LaunchpadV2.Header />\n * <LaunchpadV2.Content>\n * // Can omit this if it needs to be full width\n * <LaunchpadV2.ContentBody width=\"...\">\n * // Your main content here\n * </LaunchpadV2.ContentBody>\n * </LaunchpadV2.Content>\n * \n * // Omit this and put your buttons in content\n * // if you want your buttons immediately under your content rather \n * // than at the bottom of the screen\n * <LaunchpadV2.Buttons />\n * \n * </LaunchpadV2.Right>\n * </LaunchpadV2>\n * \n * - Sha\n */\n\nLaunchpadV2.Left = LeftPanel;\nLaunchpadV2.LeftImage = LeftImage;\nLaunchpadV2.LeftImageWithBackground = LeftImageWithBackground;\nLaunchpadV2.Right = RightPanel;\nLaunchpadV2.Header = Header;\nLaunchpadV2.Content = Content;\nLaunchpadV2.ContentBody = ContentBody;\nLaunchpadV2.Buttons = Buttons;\n","import { Flight } from 'libs/common/flight';\n\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { PlaylistRequests } from 'libs/shared/flight-requests/PlaylistRequests';\nimport { SeriesRequests } from 'libs/shared/flight-requests/SeriesRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { CurrentUser, ShareLink } from 'libs/shared/interfaces';\n\nexport function useFetchSharedResource<T>(shareId: string): T {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const shareLink = Flight.useBasicFetch<ShareLink>(ShareRequests.getShareObject(shareId));\n\n function getResourceRequest(): Flight.Request {\n if (!shareLink.data || !currentUser.data)\n return null;\n\n switch (shareLink.data.objectTypeId) {\n case MasterType.Video:\n return VideoRequests.publicVideo(shareLink.data.objectId, shareId);\n case MasterType.Clip:\n return ClipRequests.publicClip(shareLink.data.objectId, shareId);\n case MasterType.Interactive:\n return InteractiveRequests.publicInteractiveMetadata(shareLink.data.objectId, shareId);\n case MasterType.Playlist:\n return PlaylistRequests.getSharedPlaylist(shareLink.data.objectId, shareId);\n case MasterType.Subject:\n return ClassificationRequests.classification(shareLink.data.objectId, currentUser.data.id);\n case MasterType.Series:\n return SeriesRequests.sharedSeries(shareLink.data.objectId, shareId);\n }\n }\n\n const resourceRequest = getResourceRequest();\n const resource = Flight.useBasicFetch<T>(resourceRequest);\n\n return resource.data;\n}","// extracted by mini-css-extract-plugin\nexport default {\"formContainer\":\"ldJEo\",\"toggleEye\":\"VUsmU\",\"input\":\"DRd0y\"};","import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { SharableEntity, ShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { SharePincode } from 'libs/shared/apps/share-v2/interfaces/SharePincode';\nimport { FormFeedback } from 'libs/shared/components/forms/form-feedback/FormFeedback';\nimport { LaunchpadV2 } from 'libs/shared/components/launchpad/v2/LaunchpadV2';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport { LAUNCHPAD_FALLBACK_IMAGES } from 'shared/components/launchpad/Launchpad';\n\nimport { ShareLinkFilterHelpers } from 'apps/share/filters/share-link-filter/ShareLinkFilterHelpers';\nimport { useFetchSharedResource } from 'apps/share/hooks/useFetchSharedResource';\n\nimport styles from './video-pincode.scss';\n\nconst namespace = 'share.videoPincode';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface PincodeViewProps {\n shareId: string;\n appLink: Core.AppLink;\n}\n\n// Metadata handled by C# share endpoint\n// eslint-disable-next-line rulesdir/require-view-title\nexport function VideoPincodeView(props: PincodeViewProps): JSX.Element {\n const [ pincode, setPincode ] = React.useState('');\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n const [ errorMessage, setErrorMessage ] = React.useState('');\n\n const fetchAsync = Flight.useGetFetchAsync();\n\n const sharedResource = useFetchSharedResource<SharableEntity>(props.shareId);\n\n async function onSubmit(e: React.FormEvent): Promise<void> {\n e.preventDefault();\n\n if (!pincode)\n return;\n\n setShowSpinner(true);\n\n try {\n const pincodeData = await fetchAsync<SharePincode>(ShareRequests.getPincodeByCode(pincode));\n\n if (pincodeData?.shareId !== props.shareId) {\n setErrorMessage(getPhrase('incorrectPincodeError'));\n setShowSpinner(false);\n return;\n }\n\n ShareLinkFilterHelpers.setPincode(props.shareId, pincode);\n const href = Core.AppLinkHelper.getHref(props.appLink);\n Core.LocationUtils.PageLoad(href);\n } catch (error) {\n if (error.responseJSON?.status === HttpStatus.NotFound) {\n setErrorMessage(getPhrase('incorrectPincodeError'));\n setShowSpinner(false);\n return;\n }\n\n setErrorMessage(getPhrase('ajaxErrorMessage'));\n setShowSpinner(false);\n }\n }\n\n if (!sharedResource)\n return <></>;\n\n const leftImageUrl = ImageHelper.createUrl(ShareViewHelper.getImageUrl(sharedResource), { size: ImageSize.Large });\n\n return (\n <LaunchpadV2>\n <LaunchpadV2.LeftImage\n title={sharedResource.name}\n imageUrl={leftImageUrl}\n objectType={sharedResource.typeId}\n fallbackImages={LAUNCHPAD_FALLBACK_IMAGES}\n />\n <LaunchpadV2.Right>\n <LaunchpadV2.Header />\n <LaunchpadV2.Content>\n <LaunchpadV2.NarrowContent>\n <form onSubmit={onSubmit} className='position-relative'>\n <div className='form-group'>\n <label className='h2' htmlFor='link-password'>\n <Text namespace={namespace} phrase='info' />\n </label>\n <input\n id='link-password'\n type='text'\n className={`form-control form-control-lg ${styles.input} ${errorMessage ? 'is-invalid' : ''}`}\n placeholder={getPhrase('placeholder')}\n onChange={e => setPincode(e.target.value)}\n value={pincode}\n autoComplete='off'\n aria-errormessage='linkPasswordError'\n />\n\n {errorMessage && (\n <FormFeedback className='mb-3' name='linkPassword'>{errorMessage}</FormFeedback>\n )}\n </div>\n\n <SpinnerButton\n variant='dark'\n showSpinner={showSpinner}\n type='submit'\n className='w-100 mt-3 btn-lg'\n disabled={showSpinner || !pincode}\n >\n <Text namespace={namespace} phrase='confirm' />\n </SpinnerButton>\n </form>\n </LaunchpadV2.NarrowContent>\n </LaunchpadV2.Content>\n </LaunchpadV2.Right>\n </LaunchpadV2>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"left\":\"vIypY\",\"leftTextImage\":\"YViNj\",\"right\":\"MkD4u\",\"blur\":\"X6mCh\",\"imageContainer\":\"bc7kz\",\"imagePosition\":\"JOhEj\",\"image\":\"Ef2QR\",\"thumbnail\":\"Gdurb\",\"tallposter\":\"fjVNK\",\"cover\":\"o3j31\",\"linksContainer\":\"AT9Dk\"};","import React from 'react';\n\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport styles from './launchpad.scss';\n\nexport const LAUNCHPAD_FALLBACK_IMAGES = [\n { bgUrl: ImageUrls.LaunchPad.BG_1 },\n { bgUrl: ImageUrls.LaunchPad.BG_2 },\n { bgUrl: ImageUrls.LaunchPad.BG_3 },\n { bgUrl: ImageUrls.LaunchPad.BG_4 },\n { bgUrl: ImageUrls.LaunchPad.BG_5 }\n];\n\nexport const LAUNCHPAD_PRODUCT_FALLBACK_IMAGES = [\n { bgUrl: ImageUrls.LaunchPad.PRODUCT.BG_1 },\n { bgUrl: ImageUrls.LaunchPad.PRODUCT.BG_2 },\n { bgUrl: ImageUrls.LaunchPad.PRODUCT.BG_3 },\n { bgUrl: ImageUrls.LaunchPad.PRODUCT.BG_4 },\n { bgUrl: ImageUrls.LaunchPad.PRODUCT.BG_5 },\n { bgUrl: ImageUrls.LaunchPad.PRODUCT.BG_6 },\n { bgUrl: ImageUrls.LaunchPad.PRODUCT.BG_7 },\n { bgUrl: ImageUrls.LaunchPad.PRODUCT.BG_8 },\n { bgUrl: ImageUrls.LaunchPad.PRODUCT.BG_9 }\n];\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst XMAS_URLS: LaunchImage[] = [\n { bgUrl: '/images/launchpad/xmas/2024-promo1-bg.png' },\n { bgUrl: '/images/launchpad/xmas/2024-promo2-bg.png' },\n { bgUrl: '/images/launchpad/xmas/2024-promo3-bg.png' },\n { bgUrl: '/images/launchpad/xmas/2024-promo4-bg.png' },\n { bgUrl: '/images/launchpad/xmas/2024-promo5-bg.png' }\n];\n\nfunction mapObjectTypeToImageClass(objectType: MasterType): string {\n switch (objectType) {\n case MasterType.Video:\n case MasterType.Interactive:\n case MasterType.Clip:\n return styles.thumbnail;\n\n case MasterType.Subject:\n case MasterType.Playlist:\n return styles.cover;\n\n case MasterType.Series:\n return styles.tallposter;\n\n default:\n return '';\n }\n}\n\ninterface LaunchpadLink {\n url: string;\n text: string;\n onClick?: () => void;\n hide?: boolean;\n}\n\ninterface LaunchpadProps {\n objectType?: MasterType;\n title?: string;\n imageUrl?: string;\n links?: LaunchpadLink[];\n leftComponent?: () => JSX.Element;\n}\n\ninterface LaunchImage {\n bgUrl: string;\n}\n\nfunction getRandomImage(urlLists: LaunchImage[]): LaunchImage {\n return urlLists[Math.floor(Math.random() * urlLists.length)];\n}\n\nexport function Launchpad(props: React.PropsWithChildren<LaunchpadProps>): JSX.Element {\n const [ showImage, setShowImage ] = React.useState(false);\n const [ image, setImage ] = React.useState<string>('');\n\n const imageUrl = ImageHelper.createUrl(props.imageUrl, { size: ImageSize.Large });\n const IMAGE_URLS = LAUNCHPAD_PRODUCT_FALLBACK_IMAGES;\n\n React.useEffect(() => {\n if (imageUrl || !IMAGE_URLS || IMAGE_URLS.length === 0)\n return;\n\n const image = getRandomImage(IMAGE_URLS);\n\n if (image.bgUrl) {\n setImage(image.bgUrl);\n }\n }, []);\n\n React.useEffect(() => {\n if (!imageUrl)\n return;\n\n const img = new Image();\n img.onload = () => setShowImage(true);\n img.src = imageUrl;\n return () => img.onload = null;\n }, []);\n\n return (\n <div className='d-flex'>\n { props.leftComponent ?\n props.leftComponent()\n :\n <div\n className={`${styles.left} ${image ? 'bg-blue d-flex align-items-center' : 'bg-light'}`}\n >\n {image ?\n <img className='img-fluid' src={image} draggable={false} /> :\n (showImage &&\n <>\n <div className={styles.blur} style={{ backgroundImage: `url('${imageUrl}')` }} />\n <div className={`${styles.imageContainer} ${mapObjectTypeToImageClass(props.objectType)}`}>\n <div className={styles.imagePosition}>\n <img className={styles.image} src={imageUrl} alt={props.title} />\n </div>\n </div>\n </>\n )\n }\n </div>\n }\n <div className={`${styles.right} bg-white d-flex flex-column`}>\n <div className={`position-absolute d-flex align-items-center ${styles.linksContainer}`}>\n {props.links?.map((link, key) => {\n if (link.hide)\n return <React.Fragment key={key}></React.Fragment>;\n\n return (\n <a key={key} href={link.url} className='info-link fw-semibold' onClick={link.onClick}>\n {link.text}\n </a>\n );\n })}\n </div>\n\n {props.children}\n </div>\n </div>\n );\n}"],"names":["normalizeOptions","namespace","ShareRequests","createShare","data","url","key","type","invalidationKeys","objectId","updateShare","shareId","deleteShare","getShare","bootstrapName","getSentShares","params","Object","values","sort","join","normalize","getShareLink","id","createShareLink","getPrivacy","getSharesByObjectId","createSharePincode","getPincodeByShareId","getPincodeByCode","code","FormFeedback","props","name","className","role","children","mapObjectTypeToImageClass","objectType","MasterType","LaunchpadV2","imageSizeMap","cover","full","widthClassNameMap","base","NarrowContent","Left","LeftImage","showImage","setShowImage","image","setImage","imageUrl","img","Image","onload","src","fallbackImages","Math","floor","random","length","bgUrl","style","backgroundImage","alt","title","LeftImageWithBackground","bgStyles","backgroundColor","imageSize","Right","Header","LogoComponent","logoComponent","ClickViewLogo","bannerComponent","logoContainer","Content","ContentBody","widthClassName","width","Buttons","useFetchSharedResource","currentUser","shareLink","resourceRequest","objectTypeId","getResourceRequest","getPhrase","LanguageService","VideoPincodeView","pincode","setPincode","showSpinner","setShowSpinner","errorMessage","setErrorMessage","fetchAsync","sharedResource","leftImageUrl","ImageHelper","ShareViewHelper","size","typeId","onSubmit","e","preventDefault","pincodeData","ShareLinkFilterHelpers","href","appLink","responseJSON","status","HttpStatus","htmlFor","Text","phrase","placeholder","onChange","target","value","autoComplete","SpinnerButton","variant","disabled","LAUNCHPAD_FALLBACK_IMAGES","ImageUrls","LAUNCHPAD_PRODUCT_FALLBACK_IMAGES","Launchpad","IMAGE_URLS","urlLists","leftComponent","draggable","links","map","link","hide","onClick","text"],"sourceRoot":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1400],{79095:(e,t,n)=>{n.d(t,{j:()=>B});var a=n(32735),r=n(92802),i=n(75896),o=n(23201),c=n(82644),s=n(83345),l=n(24833),u=n(99705),m=n(12778),d=new RegExp(/^(?!-)[A-Za-z0-9-]+([\-\.]{1}[a-z0-9]+)*\.[A-Za-z]{2,6}$/),p=function(e){var t=e.domains,n=e.selectedOption,a={domains:[]};return t.forEach((function(e,r){("allowed"===n||e.domain)&&(e.domain?t.find((function(t,n){return n!==r&&t.domain===e.domain&&e.hasChanged}))?a.domains[r]={domain:"domain-duplicated"}:d.test(e.domain)||(a.domains[r]={domain:"domain-invalid"}):a.domains[r]={domain:"domain-empty"})})),a.domains.length?a:{}},f=n(91693),v=n(35223),y=n(23481),b=n(86974),g=n(15611),h=n(66122);const E={domainFieldContainer:"F9EW7"};function S(e){return S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},S(e)}function A(e,t,n){return(t=function(e){var t=function(e){if("object"!=S(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=S(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==S(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var w="settings.domainField",O=y.T.encloseNamespace(w),C={"domain-duplicated":"domainDuplicatedErrorMessage","domain-not-certified":"domainNotCertifiedErrorMessage","domain-invalid":"domainInvalidErrorMessage","domain-empty":"domainEmptyErrorMessage","domain-already-exists":{requestingAccess:"joinRequestsDomainAlreadyExistsErrorMessage",automaticAccess:"accessBehaviourDomainAlreadyExistsErrorMessage"}};function N(e){var t=(0,r.u6)(),n=e.index,i=e.domain,o=e.view,c=e.appLinks,u=e.onChangeDomain,m=e.removeDomainField,d=A(A({},l.C.RequestingAccess,c.automaticAccess.action),l.C.AutomaticAccess,c.requestingAccess.action),p={application:c[o].application,action:d[o],args:c[o].args};function f(e){return(0,r.u9)(t.errors,"domains.".concat(e,".domain"))}return a.createElement("div",{className:E.domainFieldContainer},a.createElement(b.w,{type:"text",name:"domains.".concat(n,".domain"),className:"form-control form-control-lg ".concat(f(n)?"is-invalid":""),placeholder:O("domainPlaceholder"),value:i.domain,onChange:function(e){return function(e,t){e.preventDefault();var n=Object.assign(Object.assign({},i),{domain:e.currentTarget.value,hasChanged:!0});u(n,t)}(e,n)},onClickClear:function(){return m(n)},autoComplete:"off",showClearButton:0!==n||!!i.domain,"aria-errormessage":"domains.".concat(n,".domainError")}),f(n)&&a.createElement(h.A,{name:"domains.".concat(n,".domain")},function(e,t){var n=f(e);switch(n){case"domain-duplicated":case"domain-invalid":case"domain-not-certified":case"domain-empty":return a.createElement(s.x,{namespace:w,phrase:C[n],options:{domain:t}});case"domain-already-exists":return a.createElement(a.Fragment,null,a.createElement(s.x,{namespace:w,phrase:C[n][o],options:{domain:t}}),a.createElement(g.F,{appLink:p,className:"text-red text-underline"},a.createElement(s.x,{namespace:w,phrase:"viewLinkText"})),a.createElement("span",null,"."))}}(n,i.domain)))}var T="settings.domainFields";function k(e){var t=(0,r.u6)(),n=t.values.domains,o=e.view,c=e.errors,l=e.appLinks,u=e.addDomainField,m=e.onChangeDomain,d=e.removeDomainField;return a.useEffect((function(){(null==c?void 0:c.length)&&c.forEach((function(e){var a=i.m.findIndex(n,(function(t){return t.hasChanged&&t.domain===e.domain}));t.setFieldError("domains.".concat(a,".domain"),e.errorCode)}))}),[c]),a.createElement(a.Fragment,null,a.createElement(r.F2,{name:"domains",render:function(){return a.createElement(a.Fragment,null,n.length>0&&n.map((function(e,t){return a.createElement(N,{key:t,domain:e,index:t,appLinks:l,onChangeDomain:m,removeDomainField:d,view:o})})))}}),a.createElement("div",null,a.createElement(f.h,{svgName:v.vn.Plus,className:"ms-3 btn btn-link text-info",onClick:u},a.createElement(s.x,{namespace:T,phrase:"addButtonLabel"}))))}var I=n(58357);const j={radioDescription:"Q4JXA"};var x="settings.domainSettingsRadio",L=y.T.encloseNamespace(x),R={automaticAccess:{none:{label:"accessBehaviourNoneLabel",description:"accessBehaviorNoneDescription"},allowed:{label:"accessBehaviourAllowedLabel",description:"accessBehaviourAllowedDescription"}},requestingAccess:{none:{label:"joinRequestsNoneLabel",description:"joinRequestsNoneDescription"},allowed:{label:"joinRequestsAllowedLabel",description:"joinRequestsAllowedDescription"},any:{label:"joinRequestsAnyLabel",description:"joinRequestsAnyDescription"}}};function q(e){var t=e.option,n=e.selectedOption,r=e.view,i=e.hasDescription,o=e.url,c=e.onSelectValue,l=e.children;return a.createElement("div",{className:"mb-3"},a.createElement(I.Z,{type:"radio",id:t,label:L(R[r][t].label),className:"fw-normal",value:t,onChange:function(){return c(t)},checked:n===t}),n===t&&a.createElement(a.Fragment,null,i&&a.createElement("p",{className:"".concat(j.radioDescription," mb-0")},a.createElement(s.x,{namespace:x,phrase:R[r][t].description})," ",!!o&&a.createElement("a",{className:"text-info",target:"_blank",href:o},a.createElement(s.x,{namespace:x,phrase:"learnMore"}))),l))}function F(e){return F="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},F(e)}function D(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}function M(e,t,n){return(t=function(e){var t=function(e){if("object"!=F(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=F(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==F(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var P="settings.domainSettingsForm",V=M(M({},l.C.RequestingAccess,{none:"joinRequestsNoneInfoMessage",allowed:"joinRequestsAllowedInfoMessage",any:"joinRequestsAnyInfoMessage"}),l.C.AutomaticAccess,{none:"accessBehaviourNoneInfoMessage",allowed:"accessBehaviourAllowedInfoMessage"});function W(e){var t=e.view,n=e.options,c=e.errors,l=e.appLinks,d=(0,r.u6)(),p=d.values,f=p.domains,v=p.selectedOption;function y(e){d.setFieldValue("selectedOption",e),d.setErrors({}),f.length||b()}function b(){var e;d.setFieldValue("domains",[].concat(function(e){if(Array.isArray(e))return D(e)}(e=f)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return D(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?D(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),[{domain:""}]))}function g(e){f.length>1?d.setFieldValue("domains",i.m.removeItemFromIndex(f,e)):d.setFieldValue("domains",i.m.cloneAndReplaceAtIdx(f,e,Object.assign(Object.assign({},f[e]),{domain:""}))),E(e)}function h(e,t){d.setFieldValue("domains",i.m.cloneAndReplaceAtIdx(f,t,e)),E(t)}function E(e){if(d.errors.domains){var t=d.errors.domains,n=i.m.removeItemFromIndex(t,e);d.setErrors(n.filter((function(e){return e})).length?{domains:n}:{})}}return a.createElement(r.l0,null,a.createElement("div",{className:"col-12 col-md-7 card p-3 mb-3"},n.map((function(e){return a.createElement("div",{key:e},"none"===e&&a.createElement(q,{option:e,selectedOption:v,hasDescription:!0,view:t,onSelectValue:y}),"allowed"===e&&a.createElement(q,{option:e,selectedOption:v,view:t,hasDescription:!0,url:m.o.getLiteArticle(u.b.AccessSettings,"articles"),onSelectValue:y},a.createElement(k,{errors:c,view:t,appLinks:l,addDomainField:b,onChangeDomain:h,removeDomainField:g})),"any"===e&&a.createElement(q,{option:e,view:t,selectedOption:v,hasDescription:!0,url:m.o.getLiteArticle(u.b.AccessSettings,"articles"),onSelectValue:y}))})),a.createElement("div",{className:"d-flex"},a.createElement("div",{className:"rounded p-2 bg-light-blue text-info fw-semibold"},a.createElement(s.x,{namespace:P,phrase:V[t][v]})))),a.createElement(o.A,{isNew:!1,variant:"dark"}))}function B(e){var t=e.initialValues,n=e.view,r=e.options,i=e.errors,o=e.appLinks,s=e.onSaveChanges;return a.createElement(c.n,{initialValues:t,validate:p,validateOnChange:!1,validateOnBlur:!1,onSubmit:s},a.createElement(W,{view:n,options:r,errors:i,appLinks:o}))}},61807:(e,t,n)=>{n.d(t,{L:()=>u});var a=n(32735),r=n(81886),i=n(23481),o=n(65858),c=n(38502),s="settings.domainSettingsTabs",l=i.T.encloseNamespace(s);function u(e){var t=e.active,n=e.appLinks;return a.createElement("div",{className:"mb-3"},a.createElement(c.r,{tabs:[{name:l("requestingAccess"),appLink:n.requestingAccess,active:"requesting-access"===t,analyticsData:{name:l("requestingAccess"),url:r.Q.C$.getHref(n.requestingAccess)},analyticsOptions:{actionType:o.Vw.Click,entity:o.py.Url,location:o.LZ.MagicTabs}},{name:l("teacherInvites"),appLink:n.teacherInvites,active:"teacher-invites"===t,analyticsData:{name:i.T.getPhrase(s,"teacherInvites"),url:r.Q.C$.getHref(n.teacherInvites)},analyticsOptions:{actionType:o.Vw.Click,entity:o.py.Url,location:o.LZ.MagicTabs}},{name:l("automaticAccess"),appLink:n.automaticAccess,active:"automatic-access"===t,analyticsData:{name:i.T.getPhrase(s,"automaticAccess"),url:r.Q.C$.getHref(n.automaticAccess)},analyticsOptions:{actionType:o.Vw.Click,entity:o.py.Url,location:o.LZ.MagicTabs}}]}))}},86974:(e,t,n)=>{n.d(t,{w:()=>i});var a=n(32735);function r(){return a.createElement("svg",{viewBox:"0 0 24 24"},a.createElement("path",{d:"M11.959 10.641l4.402-4.296a.964.964 0 0 1 1.358 0 .951.951 0 0 1 0 1.35l-4.403 4.297 4.403 4.378a.951.951 0 0 1 0 1.35.964.964 0 0 1-1.358 0l-4.402-4.378-4.32 4.378a.964.964 0 0 1-1.358 0 .951.951 0 0 1 0-1.35l4.32-4.378-4.32-4.362a.951.951 0 0 1 0-1.35.964.964 0 0 1 1.358 0l4.32 4.361z"}))}var i=a.forwardRef((function(e,t){var n=e.onClickClear,i=e.showClearButton,o=e.clearClassName,c=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]])}return n}(e,["onClickClear","showClearButton","clearClassName"]);return a.createElement("div",{className:"position-relative"},a.createElement("input",Object.assign({},c,{ref:t,className:"".concat(e.className," ").concat("aYpO7")})),(!!e.value||i)&&a.createElement("span",{className:"".concat("ygMgF"," position-absolute cursor-pointer text-secondary ").concat(o||""),role:"button",onClick:n,onKeyDown:function(e){return"Enter"===e.key&&n()},tabIndex:0},a.createElement("div",{className:"d-inline-block svg-container md"},a.createElement(r,null))))}))},23201:(e,t,n)=>{n.d(t,{A:()=>l});var a=n(32735),r=n(92802),i=n(2102),o=n(83345),c=n(33936),s="shared.formButtons";function l(e){var t=(0,r.u6)(),n=(0,c.l)(t);return a.createElement(i.m,{variant:e.variant||"primary",type:"submit",disabled:!n,size:e.size,className:e.className?e.className:"",showSpinner:t.isSubmitting},e.submitText?a.createElement(a.Fragment,null,e.submitText):a.createElement(o.x,{namespace:s,phrase:e.isNew?"create":"save"}))}},66122:(e,t,n)=>{n.d(t,{A:()=>r});var a=n(32735);function r(e){return a.createElement("span",{id:"".concat(e.name,"Error"),className:"".concat(e.className," invalid-feedback d-block"),role:"status"},e.children)}},82644:(e,t,n)=>{n.d(t,{b:()=>u,n:()=>l});var a=n(32735),r=n(92802),i=n(91967),o=n(1048);function c(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 s=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]])}return n};function l(e){var t=e.castInitialValues,n=e.castValuesOnSubmit,l=e.initialValues,u=e.onSubmit,m=s(e,["castInitialValues","castValuesOnSubmit","initialValues","onSubmit"]),d=t&&e.validationSchema?e.validationSchema.cast(function(e){if(!e)return{};var t=o.t.deepClone(e);return function e(n){Object.keys(t).forEach((function(a){t.hasOwnProperty(a)&&(o.t.isObject(n[a])?e(n[a]):null===t[a]&&delete t[a])}))}(t),t}(l)):l,p={allowInitialSubmit:e.allowInitialSubmit};return a.createElement(r.J9,Object.assign({enableReinitialize:!0},m,{initialValues:d,onSubmit:function(t,a){var r=a.setSubmitting,i=a.resetForm,o=a.setFieldError,s=n&&e.validationSchema?e.validationSchema.cast(t):t;u(s,(function(){var e,t,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(n.reset&&i(),n.errors)for(var a=0,s=Object.entries(n.errors);a<s.length;a++){var l=(e=s[a],t=2,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,i,o,c=[],s=!0,l=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=i.call(n)).done)&&(c.push(a.value),c.length!==t);s=!0);}catch(e){l=!0,r=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw r}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return c(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)?c(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),u=l[0],m=l[1];o(u,m)}r(!1)}))},initialStatus:p}),i.q.isFunction(e.children)?function(t){return e.children(t)}:a.Children.count(e.children)?e.children:null)}function u(){return(0,r.u6)()}l.defaultProps={castInitialValues:!0,castValuesOnSubmit:!0}},38502:(e,t,n)=>{n.d(t,{r:()=>m});var a=n(32735),r=n(49985),i=n(15611),o=n(18559),c=n(11607),s=n(83914),l=n(22771);function u(e){return a.createElement(a.Fragment,null,!!e.tab.svgName&&a.createElement("div",{className:e.tab.name?"pe-1":""},a.createElement(s.x,{svgName:e.tab.svgName})),e.tab.name,"number"==typeof e.tab.count&&a.createElement("div",{className:"ps-2"},a.createElement(o.C,{type:o.g.Count,data:e.tab.count})))}function m(e){var t;return a.createElement("nav",{className:null!==(t=e.className)&&void 0!==t?t:"",ref:e.containerRef},a.createElement("ul",{className:"\n list-unstyled d-inline-block m-0 ".concat(l.Z.pillTabSelector,"\n ").concat(e.borderRadius?l.Z.radiusSmall:"","\n ").concat(e.listClassName,"\n ")},e.tabs.map((function(e,t){return a.createElement("li",{className:"\n p-0 ".concat(l.Z.tab," ").concat(e.active?"btn btn-dark":"btn btn-outline-dark","\n ").concat(e.name?l.Z.minWidth:""," ").concat(e.className,"\n "),key:t},e.appLink?a.createElement(i.F,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(l.Z.tabLink,"\n ")},a.createElement(u,{tab:e})):a.createElement(c.L,{className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(l.Z.tabLink,"\n "),onClick:function(){return function(e){!e.active&&e.onSelect&&(e.onSelect(),e.analyticsData&&e.analyticsOptions&&r.k.logUserAction(e.analyticsData,e.analyticsOptions))}(e)}},a.createElement(u,{tab:e})))}))))}m.defaultProps={borderRadius:"lg"}},24833:(e,t,n)=>{var a;n.d(t,{C:()=>a}),function(e){e.RequestingAccess="requestingAccess",e.TeacherInvites="teacherInvites",e.AutomaticAccess="automaticAccess"}(a||(a={}))},23371:(e,t,n)=>{var a;n.d(t,{W:()=>a}),function(e){e.Request="request",e.AutoJoin="auto-join",e.NoRequest="no-request"}(a||(a={}))},99705:(e,t,n)=>{var a,r;n.d(t,{b:()=>r}),function(e){e.AddToPlaylist="115005679748",e.EditSsoAccounts="8202508040345",e.LibraryEditor="360001974533",e.VideoAccess="360000153947",e.AddFromOnline="360011718234",e.UploadToLibraryEditor="360012069334",e.PBTErrorCodes="360012421153",e.ManuelReview="360020004534",e.LibraryReview="360000163788"}(a||(a={})),function(e){e.Integrations="4407268725529",e.Classrooms="4405362551833",e.MakeInteractive="4405370510873",e.EditSsoAccounts="8202605666073",e.UploadToLibraryEditor="10672936659865",e.AddFromLite="10671345281561",e.ManageSsoYearGroups="14691130889241",e.ContentReview="18525199576601",e.ContentPermissions="14692125209497",e.AccessSettings="27927466562201",e.ContentGuidelines="24133696186009",e.FoxtelFaq="24133519542169",e.ViviIntegration="23826297956377",e.AppleTvIntegration="25832373739929",e.RssFeed="32567445635097",e.ManageGroupPermissions="35407217335705"}(r||(r={}))},93802:(e,t,n)=>{n.d(t,{y:()=>l});var a=n(75896),r=n(23371);function i(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}function c(e,t){return!!a.m.findWhere(t,{accessType:e})}function s(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),a=1;a<t;a++)n[a-1]=arguments[a];return e.filter((function(e){return n.some((function(t){return t===e.accessType}))}))}var l={getInitialJoinRequests:function(e){var t=s(e,r.W.Request,r.W.NoRequest);return c(r.W.Request,t)?{selectedOption:"allowed",domains:t}:c(r.W.NoRequest,t)?{selectedOption:"none",domains:[]}:{selectedOption:"any",domains:[]}},getInitialAccessBehaviour:function(e){var t=s(e,r.W.AutoJoin);return c(r.W.AutoJoin,t)?{selectedOption:"allowed",domains:t}:{selectedOption:"none",domains:[]}},formatRequestData:function(e,t,n){var a=t.domains,o=t.selectedOption,c=s(e,r.W.AutoJoin),l=s(e,r.W.Request,r.W.NoRequest);if(n===r.W.Request){var u=[];switch(o){case"none":u=[{accessType:r.W.NoRequest,domain:""}];break;case"allowed":u=a.map((function(e){return Object.assign(Object.assign({},e),{accessType:r.W.Request})}))}return[].concat(i(c),i(u))}if(n===r.W.AutoJoin){var m=[];return"allowed"===o&&(m=a.map((function(e){return Object.assign(Object.assign({},e),{accessType:r.W.AutoJoin})}))),[].concat(i(l),i(m))}}}},81803:(e,t,n)=>{n.d(t,{d:()=>f});var a=n(32735),r=n(81886),i=n(23481),o=n(49935),c=n(22902),s=n(14070),l=n(97291),u=n(96368);function m(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 d="settings.settingsLayout",p=function(e){var t=(0,c.T)().hasPermissions,n=(0,u.e)();if(e)return t(e);var a=r.Q.C$.getCurrentAppLink();return a.application!==l.O.SETTINGS||n.some((function(e){return e.modules.some((function(e){return"appLink"in e&&e.appLink.action===a.action}))}))};function f(e){var t,n=p(e.requiredPermissions);if(a.useEffect((function(){n||r.Q.C$.trigger({application:l.O.SETTINGS,action:s.e.Settings.HOME},{replace:!0})}),[n]),!n)return a.createElement(a.Fragment,null);var c,u=e.breadcrumbs.map((function(t,n){return{name:t,appLink:{application:l.O.SETTINGS,action:s.e.Settings.HOME},active:n===e.breadcrumbs.length-1}}));return a.createElement("div",{className:"px-3"},a.createElement("div",{className:"d-flex align-items-center justify-content-between"},a.createElement("h1",{className:"h2"},e.heading),null===(t=e.headingButton)||void 0===t?void 0:t.call(e)),a.createElement("div",{className:"pb-3"},a.createElement(o.Oo,{breadcrumbs:[{name:i.T.getPhrase(d,"settingsBreadcrumb"),appLink:{application:l.O.SETTINGS,action:s.e.Settings.HOME}}].concat((c=u,function(e){if(Array.isArray(e))return m(e)}(c)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(c)||function(e,t){if(e){if("string"==typeof e)return m(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)?m(e,t):void 0}}(c)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()))})),e.description&&a.createElement(a.Fragment,null,a.createElement("p",null,e.description),a.createElement("hr",null)),e.children)}},68598:(e,t,n)=>{n.d(t,{W:()=>s});var a=n(24833),r=n(14070),i=n(97291);function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function c(e,t,n){return(t=function(e){var t=function(e){if("object"!=o(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=o(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==o(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var s=c(c(c({},a.C.RequestingAccess,{application:i.O.SETTINGS,action:r.e.Settings.REQUESTING_ACCESS}),a.C.TeacherInvites,{application:i.O.SETTINGS,action:r.e.Settings.TEACHER_INVITES}),a.C.AutomaticAccess,{application:i.O.SETTINGS,action:r.e.Settings.AUTOMATIC_ACCESS})},71966:(e,t,n)=>{n.d(t,{B:()=>r});var a=n(99940),r={domains:function(e){return{url:"{gateway}/v1/customers/".concat(e,"/approved-domains"),key:"domains",normalize:!1}},updateDomains:function(e,t){return{url:"{gateway}/v1/customers/".concat(e,"/approved-domains"),key:"update:domains",type:a.k.PUT,data:t,normalize:!1,invalidationKeys:["domains"]}}}},96268:(e,t,n)=>{n.d(t,{W:()=>l});var a=n(32735),r=n(81886),i=n(65858),o=n(37802),c=n(14070),s=n(97291);function l(){var e=(0,o.r)(i.LZ.Settings),t=e.isLoadingSettings,n=e.domainSettings;a.useEffect((function(){t||n||r.Q.C$.trigger({application:s.O.SETTINGS,action:c.e.Settings.HOME},{replace:!0})}),[n,t])}},22771:(e,t,n)=>{n.d(t,{Z:()=>a});const a={pillTabSelector:"Hdi6o",tab:"RvNxr",minWidth:"GHSz9",radiusSmall:"VhJJa",tabLink:"WFyvo"}}}]);
|
|
2
|
-
//# sourceMappingURL=1400-43b37bfa8d-lite.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/1400-43b37bfa8d-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/utils/validation/DomainSettingsValidationSchema.ts","file:///app/packages/libs/shared/src/apps/domain-settings/domain-fields/domain-field/DomainField.scss","file:///app/packages/libs/shared/src/apps/domain-settings/domain-fields/domain-field/DomainField.tsx","file:///app/packages/libs/shared/src/apps/domain-settings/domain-fields/DomainFields.tsx","file:///app/packages/libs/shared/src/apps/domain-settings/domain-settings-radio/DomainSettingsRadio.scss","file:///app/packages/libs/shared/src/apps/domain-settings/domain-settings-radio/DomainSettingsRadio.tsx","file:///app/packages/libs/shared/src/apps/domain-settings/domain-settings-form/DomainSettingsForm.tsx","file:///app/packages/libs/shared/src/apps/domain-settings/domain-settings-tabs/DomainSettingsTabs.tsx","file:///app/packages/libs/shared/src/images/components/CloseIcon.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/general/clear-input/ClearableInput.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/general/clear-input/clearable-input.scss","file:///app/packages/libs/shared/src/components/forms/form-buttons/FormButtons.tsx","file:///app/packages/libs/shared/src/components/forms/form-feedback/FormFeedback.tsx","file:///app/packages/libs/shared/src/components/forms/form-wrapper/FormWrapper.tsx","file:///app/packages/libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx","file:///app/packages/libs/shared/src/enums/AccessSettingsGroup.ts","file:///app/packages/libs/shared/src/enums/AccessType.ts","file:///app/packages/libs/shared/src/enums/SupportArticle.ts","file:///app/packages/libs/shared/src/utils/DomainSettingsFormHelper.ts","file:///app/packages/projects/lite/src/apps/settings/components/settings-layout/SettingsLayout.tsx","file:///app/packages/projects/lite/src/apps/settings/constants/AccessSettingsAppLinks.ts","file:///app/packages/projects/lite/src/apps/settings/flight-requests/DomainRequests.ts","file:///app/packages/projects/lite/src/apps/settings/hooks/useDomainSettingsSwitch.ts","file:///app/packages/libs/shared/src/components/pill-tab-selector/pill-tab-selector.scss"],"sourcesContent":["import { ApprovedDomain, DomainSettingsModel } from 'libs/shared/interfaces/domains/ApprovedDomain';\nimport { ApprovedDomainError } from 'libs/shared/interfaces/domains/ApprovedDomainErrorResponse';\n\nconst domainRegex = new RegExp(\n /^(?!-)[A-Za-z0-9-]+([\\-\\.]{1}[a-z0-9]+)*\\.[A-Za-z]{2,6}$/\n);\n\nexport const DomainValidation = (values: DomainSettingsModel) => {\n const { domains, selectedOption } = values;\n const errors: { domains: { domain: ApprovedDomainError }[] } = { domains: []};\n\n domains.forEach((domain, index: number) => {\n if (selectedOption !== 'allowed' && !domain.domain)\n return;\n\n if (!domain.domain) {\n errors.domains[index] = { domain: 'domain-empty' };\n return;\n }\n\n const duplicateDomain = domains.find(\n (currentDomain: ApprovedDomain, currentIndex: number) =>\n currentIndex !== index &&\n currentDomain.domain === domain.domain &&\n domain.hasChanged\n );\n if (duplicateDomain) {\n errors.domains[index] = { domain: 'domain-duplicated' };\n return;\n }\n\n if (!domainRegex.test(domain.domain)) {\n errors.domains[index] = { domain: 'domain-invalid' };\n return;\n }\n });\n\n return errors.domains.length ? errors : {};\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"domainFieldContainer\":\"F9EW7\"};","import React from 'react';\nimport { getIn, useFormikContext } from 'formik';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ClearableInput } from 'libs/shared/apps/sign-up/components/general/clear-input/ClearableInput';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FormFeedback } from 'libs/shared/components/forms/form-feedback/FormFeedback';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { AccessSettingsGroup } from 'libs/shared/enums/AccessSettingsGroup';\nimport { AccessSettingAppLinks } from 'libs/shared/interfaces/domains/AccessSettingAppLinks';\nimport { ApprovedDomain, DomainSettingsModel } from 'libs/shared/interfaces/domains/ApprovedDomain';\nimport { ApprovedDomainError } from 'libs/shared/interfaces/domains/ApprovedDomainErrorResponse';\n\nimport styles from './DomainField.scss';\n\nconst namespace = 'settings.domainField';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype ViewMap = {\n [key in AccessSettingsGroup]?: string;\n}\n\ntype ErrorMessagePhraseMap = {\n [key in ApprovedDomainError]?: string | ViewMap;\n};\n\nconst errorMessagePhraseMap: ErrorMessagePhraseMap = {\n 'domain-duplicated': 'domainDuplicatedErrorMessage',\n 'domain-not-certified': 'domainNotCertifiedErrorMessage',\n 'domain-invalid': 'domainInvalidErrorMessage',\n 'domain-empty': 'domainEmptyErrorMessage',\n 'domain-already-exists': {\n requestingAccess: 'joinRequestsDomainAlreadyExistsErrorMessage',\n automaticAccess: 'accessBehaviourDomainAlreadyExistsErrorMessage'\n }\n};\n\ninterface DomainFieldProps {\n index: number,\n domain: ApprovedDomain,\n view: AccessSettingsGroup\n appLinks: AccessSettingAppLinks\n onChangeDomain: (domain: ApprovedDomain, index: number) => void,\n removeDomainField: (index: number) => void,\n}\n\nexport function DomainField(props: DomainFieldProps) {\n const formikProps = useFormikContext<DomainSettingsModel>();\n const { index, domain, view, appLinks, onChangeDomain, removeDomainField } = props;\n \n const actionMap: { [view: string]: string } = {\n [AccessSettingsGroup.RequestingAccess]: appLinks.automaticAccess.action,\n [AccessSettingsGroup.AutomaticAccess]: appLinks.requestingAccess.action\n };\n\n const viewAppLink = {\n application: appLinks[view].application,\n action: actionMap[view],\n args: appLinks[view].args\n };\n \n function getDomainErrorCode(index: number): ApprovedDomainError {\n return getIn(formikProps.errors, `domains.${index}.domain`);\n }\n\n function getDomainErrorMessage(index: number, domain: string): JSX.Element {\n const domainErrorCode = getDomainErrorCode(index);\n switch (domainErrorCode) {\n case 'domain-duplicated':\n case 'domain-invalid':\n case 'domain-not-certified':\n case 'domain-empty':\n return (\n <Text\n namespace={namespace}\n phrase={errorMessagePhraseMap[domainErrorCode] as string}\n options={{ domain }}\n />\n );\n case 'domain-already-exists':\n return (\n <>\n <Text\n namespace={namespace}\n phrase={(errorMessagePhraseMap[domainErrorCode] as ViewMap)[view]}\n options={{ domain }}\n />\n <AppLink\n appLink={viewAppLink}\n className='text-red text-underline'\n >\n <Text namespace={namespace} phrase={'viewLinkText'}/>\n </AppLink>\n <span>.</span>\n </>\n );\n }\n }\n\n function handleChange(e: React.FormEvent<HTMLInputElement>, index: number) {\n e.preventDefault();\n const updatedDomain: ApprovedDomain = { ...domain, domain: e.currentTarget.value, hasChanged: true };\n onChangeDomain(updatedDomain, index);\n }\n\n return (\n <div className={styles.domainFieldContainer}>\n <ClearableInput\n type='text'\n name={`domains.${index}.domain`}\n className={`form-control form-control-lg ${getDomainErrorCode(index) ? 'is-invalid' : ''}`}\n placeholder={getPhrase('domainPlaceholder')}\n value={domain.domain}\n onChange={e => handleChange(e, index)}\n onClickClear={() => removeDomainField(index)}\n autoComplete='off'\n showClearButton={index !== 0 || !!domain.domain}\n aria-errormessage={`domains.${index}.domainError`}\n />\n {\n getDomainErrorCode(index) &&\n <FormFeedback name={`domains.${index}.domain`}>{getDomainErrorMessage(index, domain.domain)}</FormFeedback>\n }\n </div>\n );\n}","import React from 'react';\nimport { FieldArray, useFormikContext } from 'formik';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { AccessSettingsGroup } from 'libs/shared/enums/AccessSettingsGroup';\nimport { AccessSettingAppLinks } from 'libs/shared/interfaces/domains/AccessSettingAppLinks';\nimport { ApprovedDomain, DomainSettingsModel } from 'libs/shared/interfaces/domains/ApprovedDomain';\nimport { ApprovedDomainErrorResponse } from 'libs/shared/interfaces/domains/ApprovedDomainErrorResponse';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { DomainField } from './domain-field/DomainField';\n\nconst namespace = 'settings.domainFields';\n\ninterface DomainFieldsProps {\n errors: ApprovedDomainErrorResponse[],\n view: AccessSettingsGroup,\n appLinks: AccessSettingAppLinks\n addDomainField: () => void,\n onChangeDomain: (domain: ApprovedDomain, index: number) => void,\n removeDomainField: (index: number) => void,\n}\n\nexport function DomainFields(props: DomainFieldsProps) {\n const formikProps = useFormikContext<DomainSettingsModel>();\n const { domains } = formikProps.values;\n const { view, errors, appLinks, addDomainField, onChangeDomain, removeDomainField } = props;\n\n React.useEffect(() => {\n if (errors?.length) {\n errors.forEach(error => {\n const errorIndex = ArrayHelper.findIndex(\n domains,\n domain => domain.hasChanged && domain.domain === error.domain\n );\n formikProps.setFieldError(`domains.${errorIndex}.domain`, error.errorCode);\n });\n }\n }, [errors]);\n\n return (\n <>\n <FieldArray\n name='domains'\n render={() => {\n return (\n <>\n {domains.length > 0 &&\n domains.map((domain: ApprovedDomain, index) => (\n <DomainField\n key={index}\n domain={domain}\n index={index}\n appLinks={appLinks}\n onChangeDomain={onChangeDomain}\n removeDomainField={removeDomainField}\n view={view}\n />\n ))}\n </>\n );\n }}\n />\n <div>\n <IconButton\n svgName={cvSvgLibrary.Plus}\n className={`ms-3 btn btn-link text-info`}\n onClick={addDomainField}\n >\n <Text namespace={namespace} phrase='addButtonLabel' />\n </IconButton>\n </div>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"radioDescription\":\"Q4JXA\"};","import React from 'react';\nimport { FormCheck } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { AccessSettingsGroup } from 'libs/shared/enums/AccessSettingsGroup';\nimport { DomainSettingsOption } from 'libs/shared/interfaces/domains/ApprovedDomain';\n\nimport styles from './DomainSettingsRadio.scss';\n\nconst namespace = 'settings.domainSettingsRadio';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype RadioPhraseMap = {\n [key in AccessSettingsGroup]?: {\n [key in DomainSettingsOption]?: {\n label: string,\n description?: string\n }\n }\n}\n\nconst radioPhraseMap: RadioPhraseMap = {\n automaticAccess: {\n none: {\n label: 'accessBehaviourNoneLabel',\n description: 'accessBehaviorNoneDescription'\n },\n allowed: {\n label: 'accessBehaviourAllowedLabel',\n description: 'accessBehaviourAllowedDescription'\n }\n },\n requestingAccess: {\n none: {\n label: 'joinRequestsNoneLabel',\n description: 'joinRequestsNoneDescription'\n },\n allowed: {\n label: 'joinRequestsAllowedLabel',\n description: 'joinRequestsAllowedDescription'\n },\n any: {\n label: 'joinRequestsAnyLabel',\n description: 'joinRequestsAnyDescription'\n }\n }\n};\n\ninterface DomainSettingsRadioProps {\n option: DomainSettingsOption;\n selectedOption: DomainSettingsOption;\n view: AccessSettingsGroup,\n hasDescription?: boolean;\n url?: string;\n onSelectValue: (option: DomainSettingsOption) => void;\n children?: JSX.Element;\n}\n\nexport function DomainSettingsRadio(props: DomainSettingsRadioProps) {\n const { option, selectedOption, view, hasDescription, url, onSelectValue, children } = props;\n\n return (\n <div className='mb-3'>\n <FormCheck\n type='radio'\n id={option}\n label={getPhrase(radioPhraseMap[view][option].label)}\n className='fw-normal'\n value={option}\n onChange={() => onSelectValue(option)}\n checked={selectedOption === option}\n />\n {selectedOption === option && (\n <>\n {hasDescription && (\n <p className={`${styles.radioDescription} mb-0`}>\n <Text namespace={namespace} phrase={radioPhraseMap[view][option].description} />\n \n {!!url &&\n <a className='text-info' target='_blank' href={url}>\n <Text namespace={namespace} phrase='learnMore' />\n </a>\n }\n </p>\n )}\n {children}\n </>\n )}\n </div>\n );\n}\n","import React from 'react';\nimport { Form, FormikErrors, useFormikContext } from 'formik';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { FormButtons } from 'libs/shared/components/forms/form-buttons/FormButtons';\nimport { FormSubmissionOptions, FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { AccessSettingsGroup } from 'libs/shared/enums/AccessSettingsGroup';\nimport { LiteSupportArticle } from 'libs/shared/enums/SupportArticle';\nimport { AccessSettingAppLinks } from 'libs/shared/interfaces/domains/AccessSettingAppLinks';\nimport { ApprovedDomain, DomainSettingsModel, DomainSettingsOption } from 'libs/shared/interfaces/domains/ApprovedDomain';\nimport { ApprovedDomainErrorResponse } from 'libs/shared/interfaces/domains/ApprovedDomainErrorResponse';\nimport { ArticleHelper } from 'libs/shared/utils/ArticleHelper';\nimport { DomainValidation } from 'libs/shared/utils/validation/DomainSettingsValidationSchema';\n\nimport { DomainFields } from '../domain-fields/DomainFields';\nimport { DomainSettingsRadio } from '../domain-settings-radio/DomainSettingsRadio';\n\nconst namespace = 'settings.domainSettingsForm';\n\ntype InfoMessageMap = {\n [key in AccessSettingsGroup]?: {\n [key in DomainSettingsOption]?: string;\n }\n}\n\nconst infoMessagePhraseMap: InfoMessageMap = {\n [AccessSettingsGroup.RequestingAccess]: {\n none: 'joinRequestsNoneInfoMessage',\n allowed: 'joinRequestsAllowedInfoMessage',\n any: 'joinRequestsAnyInfoMessage'\n },\n [AccessSettingsGroup.AutomaticAccess]: {\n none: 'accessBehaviourNoneInfoMessage',\n allowed: 'accessBehaviourAllowedInfoMessage'\n }\n};\n\ninterface DomainSettingsFormProps {\n view: AccessSettingsGroup,\n options: DomainSettingsOption[],\n errors: ApprovedDomainErrorResponse[]\n appLinks: AccessSettingAppLinks\n}\n\nfunction DomainSettingsForm(props: DomainSettingsFormProps): JSX.Element {\n const { view, options, errors, appLinks } = props;\n const formikProps = useFormikContext<DomainSettingsModel>();\n const { domains, selectedOption } = formikProps.values;\n\n function onSelectValue(value: DomainSettingsOption): void {\n formikProps.setFieldValue('selectedOption', value);\n formikProps.setErrors({});\n\n if (!domains.length) {\n addDomainField();\n }\n }\n\n function addDomainField() {\n formikProps.setFieldValue('domains', [ ...domains, { domain: '' }]);\n }\n\n function removeDomainField(index: number) {\n if (domains.length > 1) {\n formikProps.setFieldValue('domains', ArrayHelper.removeItemFromIndex(domains, index));\n } else {\n formikProps.setFieldValue('domains', ArrayHelper.cloneAndReplaceAtIdx(domains, index, {\n ...domains[index], domain: '' }));\n }\n clearFieldError(index);\n }\n\n function onChangeDomain(domain: ApprovedDomain, index: number) {\n formikProps.setFieldValue('domains', ArrayHelper.cloneAndReplaceAtIdx(domains, index, domain));\n clearFieldError(index);\n }\n \n function clearFieldError(index: number) {\n if (formikProps.errors.domains) {\n const domainErrors = formikProps.errors.domains as Partial<ApprovedDomain>[];\n const updatedDomainErrors =\n ArrayHelper.removeItemFromIndex<Partial<ApprovedDomain>>(domainErrors, index);\n \n formikProps.setErrors(\n updatedDomainErrors.filter(err => err).length\n ? ({ domains: updatedDomainErrors } as FormikErrors<DomainSettingsModel>)\n : {}\n );\n }\n }\n\n return (\n <Form>\n <div className='col-12 col-md-7 card p-3 mb-3'>\n {options.map(option => (\n <div key={option}>\n {option === 'none' && (\n <DomainSettingsRadio\n option={option}\n selectedOption={selectedOption}\n hasDescription\n view={view}\n onSelectValue={onSelectValue}\n />\n )}\n {option === 'allowed' && (\n <DomainSettingsRadio\n option={option}\n selectedOption={selectedOption}\n view={view}\n hasDescription\n url={ArticleHelper.getLiteArticle(LiteSupportArticle.AccessSettings, 'articles')}\n onSelectValue={onSelectValue}\n >\n <DomainFields\n errors={errors}\n view={view}\n appLinks={appLinks}\n addDomainField={addDomainField}\n onChangeDomain={onChangeDomain}\n removeDomainField={removeDomainField}\n />\n </DomainSettingsRadio>\n )}\n {option === 'any' && (\n <DomainSettingsRadio\n option={option}\n view={view}\n selectedOption={selectedOption}\n hasDescription\n url={ArticleHelper.getLiteArticle(LiteSupportArticle.AccessSettings, 'articles')}\n onSelectValue={onSelectValue}\n />\n )}\n </div>\n ))}\n\n <div className='d-flex'>\n <div className='rounded p-2 bg-light-blue text-info fw-semibold'>\n <Text namespace={namespace} phrase={infoMessagePhraseMap[view][selectedOption]} />\n </div>\n </div>\n </div>\n <FormButtons<DomainSettingsModel> isNew={false} variant='dark'/>\n </Form>\n );\n}\n\ninterface DomainSettingsProps {\n initialValues: DomainSettingsModel,\n view: AccessSettingsGroup,\n options: DomainSettingsOption[],\n errors?: ApprovedDomainErrorResponse[],\n appLinks: AccessSettingAppLinks\n onSaveChanges: (\n values: DomainSettingsModel,\n onDone: (options?: FormSubmissionOptions<DomainSettingsModel>) => void\n ) => void,\n}\n\nexport function DomainSettingsFormWrapper(props: DomainSettingsProps) {\n const { initialValues, view, options, errors, appLinks, onSaveChanges } = props;\n\n return (\n <FormWrapper<DomainSettingsModel>\n initialValues={initialValues}\n validate={DomainValidation}\n validateOnChange={false}\n validateOnBlur={false}\n onSubmit={onSaveChanges}\n >\n <DomainSettingsForm view={view} options={options} errors={errors} appLinks={appLinks}></DomainSettingsForm>\n </FormWrapper>\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, UserAction } from 'libs/analytics/interfaces';\n\nimport { PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { AccessSettingAppLinks } from 'libs/shared/interfaces/domains/AccessSettingAppLinks';\n\nconst namespace = 'settings.domainSettingsTabs';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface DomainSettingsTabsProps {\n active: 'requesting-access' | 'teacher-invites' | 'automatic-access',\n appLinks: AccessSettingAppLinks\n}\n\nexport function DomainSettingsTabs(props: DomainSettingsTabsProps): JSX.Element {\n const { active, appLinks } = props;\n \n return (\n <div className='mb-3'>\n <PillTabSelector\n tabs={[{\n name: getPhrase('requestingAccess'),\n appLink: appLinks.requestingAccess,\n active: active === 'requesting-access',\n analyticsData: {\n name: getPhrase('requestingAccess'),\n url: Core.AppLinkHelper.getHref(appLinks.requestingAccess)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n }, {\n name: getPhrase('teacherInvites'),\n appLink: appLinks.teacherInvites,\n active: active === 'teacher-invites',\n analyticsData: {\n name: LanguageService.getPhrase(namespace, 'teacherInvites'),\n url: Core.AppLinkHelper.getHref(appLinks.teacherInvites)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n }, {\n name: getPhrase('automaticAccess'),\n appLink: appLinks.automaticAccess,\n active: active === 'automatic-access',\n analyticsData: {\n name: LanguageService.getPhrase(namespace, 'automaticAccess'),\n url: Core.AppLinkHelper.getHref(appLinks.automaticAccess)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n }]}\n />\n </div>\n );\n}","import React from 'react';\n\nexport function CloseIcon(): JSX.Element {\n return (\n <svg viewBox='0 0 24 24'>\n <path d='M11.959 10.641l4.402-4.296a.964.964 0 0 1 1.358 0 .951.951 0 0 1 0 1.35l-4.403 4.297 4.403 4.378a.951.951 0 0 1 0 1.35.964.964 0 0 1-1.358 0l-4.402-4.378-4.32 4.378a.964.964 0 0 1-1.358 0 .951.951 0 0 1 0-1.35l4.32-4.378-4.32-4.362a.951.951 0 0 1 0-1.35.964.964 0 0 1 1.358 0l4.32 4.361z'/>\n </svg>\n );\n}","import React from 'react';\n\nimport { CloseIcon } from 'libs/shared/images/components/CloseIcon';\n\nimport styles from './clearable-input.scss';\n\ninterface ClearInputProps extends React.HTMLProps<HTMLInputElement> {\n showClearButton?: boolean;\n onClickClear: () => void;\n clearClassName?: string;\n}\n\nexport const ClearableInput = React.forwardRef((\n props: ClearInputProps,\n ref: React.ForwardedRef<HTMLInputElement>\n) => {\n const { onClickClear, showClearButton, clearClassName, ...inputProps } = props;\n\n return (\n <div className='position-relative'>\n <input\n {...inputProps}\n ref={ref}\n className={`${props.className} ${styles.clearableInput}`}\n />\n {(!!props.value || showClearButton) &&\n <span\n className={`${styles.clearInput} position-absolute cursor-pointer text-secondary ${clearClassName || ''}`}\n role='button'\n onClick={onClickClear}\n onKeyDown={(e: React.KeyboardEvent) => e.key === 'Enter' && onClickClear()}\n tabIndex={0}\n >\n <div className='d-inline-block svg-container md'>\n <CloseIcon />\n </div>\n </span>\n }\n </div>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"clearInput\":\"ygMgF\",\"clearableInput\":\"aYpO7\"};","import * as React from 'react';\nimport { ButtonProps } from 'react-bootstrap';\nimport { useFormikContext } from 'formik';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FormSize } from 'libs/shared/components/forms/form-field/FormField';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useCanSubmitForm } from 'libs/shared/hooks/UseCanSubmitForm';\n\nconst namespace = 'shared.formButtons';\n\ninterface FormButtonsProps {\n isNew?: boolean;\n submitText?: string;\n variant?: ButtonProps['variant'];\n size?: FormSize;\n className?: string;\n}\n\nexport function FormButtons<Values extends HashObject>(props: FormButtonsProps): JSX.Element {\n const formikProps = useFormikContext<Values>();\n\n const canSubmit = useCanSubmitForm(formikProps);\n\n return (\n <SpinnerButton\n variant={props.variant || 'primary'}\n type='submit'\n disabled={!canSubmit}\n size={props.size}\n className={props.className ? props.className : ''}\n showSpinner={formikProps.isSubmitting}\n >\n {props.submitText\n ? <>{props.submitText}</>\n : <Text namespace={namespace} phrase={props.isNew ? 'create' : 'save'} />}\n </SpinnerButton>\n );\n}\n","import React from 'react';\n\ninterface FormFeedbackProps extends React.PropsWithChildren {\n name: string;\n className?: string;\n}\n\nexport function FormFeedback(props: FormFeedbackProps) {\n return (\n <span id={`${props.name}Error`} className={`${props.className} invalid-feedback d-block`} role='status'>{props.children}</span>\n );\n}","import * as React from 'react';\nimport { Formik, FormikConfig, FormikContextType, FormikErrors, FormikHelpers, FormikProps, FormikValues, useFormikContext } from 'formik';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\n/**\n * Note: This currently doesn't support arrays, but the need for arrays as initial\n * form data has not yet come up\n */\nfunction omitNullInitialValues<Values extends FormikValues>(initialValues: Values): Values {\n if (!initialValues)\n return {} as Values;\n\n const values = ObjectHelper.deepClone(initialValues);\n\n function omitChildValues(child: Values): void {\n Object.keys(values).forEach((key: keyof Values) => {\n if (!values.hasOwnProperty(key))\n return;\n \n if (ObjectHelper.isObject(child[key]))\n omitChildValues(child[key]);\n else if (values[key] === null)\n delete values[key];\n });\n }\n\n omitChildValues(values);\n return values;\n}\n\n// Omit attributes from FormikConfig that are defined in FormWrapperProps.\ntype ModifiedFormikConfig<Values extends FormikValues> = Omit<FormikConfig<Values>, 'initialValues' | 'onSubmit'>;\n\ninterface InitialStatus {\n allowInitialSubmit: boolean;\n}\n\nexport type FormSubmissionOptions<FormValues = FormikValues> = {\n reset?: boolean;\n errors?: FormikErrors<FormValues>;\n};\n\ninterface FormWrapperProps<FormValues extends FormikValues, ApiValues extends FormikValues> {\n initialValues: Partial<FormValues | ApiValues>;\n onSubmit: (data: FormValues, onDone: (options?: FormSubmissionOptions<FormValues>) => void) => void;\n castInitialValues?: boolean; // cast to validationSchema\n castValuesOnSubmit?: boolean; // cast to validationSchema\n allowInitialSubmit?: boolean; // if true, useCanSubmitForm will allow submit without any user changes.\n}\n\nFormWrapper.defaultProps = {\n castInitialValues: true,\n castValuesOnSubmit: true\n};\n\nexport function FormWrapper<\n FormValues extends FormikValues = FormikValues,\n ApiValues extends FormikValues = FormValues,\n ExtraProps = HashObject\n>(props: ModifiedFormikConfig<FormValues> & ExtraProps & FormWrapperProps<FormValues, ApiValues>): JSX.Element {\n const { castInitialValues, castValuesOnSubmit, initialValues, onSubmit, ...formikProps } = props;\n\n /**\n * If castInitialValues is true, cast initialValues to the validationSchema.\n * This will ensure that any data fetched from the api conforms to the expected form data shape.\n */\n const formattedInitialValues: FormValues = castInitialValues && props.validationSchema\n ? props.validationSchema.cast(omitNullInitialValues(initialValues))\n : initialValues;\n\n const onSubmitHandler = (\n values: FormValues,\n { setSubmitting, resetForm, setFieldError }: FormikHelpers<FormValues>\n ) => {\n /**\n * validationSchema.cast will coerce the values to the types defined in validationSchema.\n * This is useful for trimming inputs:\n * e.g. if a value field has type Yup.string().trim(), it will be automatically trimmed.\n */\n const formattedData = castValuesOnSubmit && props.validationSchema\n ? props.validationSchema.cast(values)\n : values;\n\n onSubmit(formattedData, (options: FormSubmissionOptions<FormValues> = {}) => {\n options.reset && resetForm();\n\n if (options.errors) {\n for (const [ key, value ] of Object.entries(options.errors)) {\n setFieldError(key, value);\n }\n }\n\n setSubmitting(false);\n });\n };\n\n const initialStatus: InitialStatus = {\n allowInitialSubmit: props.allowInitialSubmit\n };\n\n return (\n <Formik<FormValues, ExtraProps>\n enableReinitialize\n {...(formikProps as ModifiedFormikConfig<FormValues> & ExtraProps)}\n initialValues={formattedInitialValues}\n onSubmit={onSubmitHandler}\n initialStatus={initialStatus}\n >\n {FunctionHelper.isFunction(props.children)\n ? (f: FormikProps<FormValues>) => (props.children as (f: FormikProps<FormValues>) => React.ReactNode)(f)\n : React.Children.count(props.children) ? props.children : null\n }\n </Formik>\n );\n}\n\nexport function useFormikContextWrapper<T>(): FormikContextType<T> {\n return useFormikContext<T>();\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport { SvgContainer } from '../svg-container/SvgContainer';\n\nimport styles from './pill-tab-selector.scss';\n\ninterface TabContentsProps {\n tab: PillTab;\n}\n\nfunction TabContents(props: TabContentsProps): JSX.Element {\n return (\n <>\n {!!props.tab.svgName && (\n <div className={props.tab.name ? 'pe-1' : ''}>\n <SvgContainer svgName={props.tab.svgName} />\n </div>\n )}\n\n {props.tab.name}\n\n {typeof (props.tab.count) === 'number' && (\n <div className='ps-2'>\n <Badge type={BadgeType.Count} data={props.tab.count} />\n </div>\n )}\n </>\n );\n}\n\nexport interface PillTab {\n name: string;\n active: boolean;\n svgName?: string;\n\n className?: string;\n\n appLink?: Core.AppLink;\n onSelect?: () => void;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n count?: number;\n}\n\ninterface PillTabSelectorProps {\n tabs: PillTab[];\n containerRef?: (el: HTMLElement) => void;\n listClassName?: string;\n className?: string;\n borderRadius?: 'sm' | 'lg'\n}\n\nPillTabSelector.defaultProps = {\n borderRadius: 'lg'\n};\n\nexport function PillTabSelector(props: PillTabSelectorProps): JSX.Element {\n function onSelectTab(tab: PillTab): void {\n if (tab.active || !tab.onSelect)\n return;\n\n tab.onSelect();\n\n if (tab.analyticsData && tab.analyticsOptions)\n AnalyticsHelper.logUserAction(tab.analyticsData, tab.analyticsOptions);\n }\n\n return (\n <nav className={props.className ?? ''} ref={props.containerRef}>\n <ul className={`\n list-unstyled d-inline-block m-0 ${styles.pillTabSelector}\n ${props.borderRadius ? styles.radiusSmall : ''}\n ${props.listClassName}\n `}>\n {props.tabs.map((tab, index) => {\n return (\n <li\n className={`\n p-0 ${styles.tab} ${tab.active ? 'btn btn-dark' : 'btn btn-outline-dark'}\n ${tab.name ? styles.minWidth : ''} ${tab.className}\n `}\n key={index}\n >\n {tab.appLink ? (\n <AppLink\n appLink={tab.appLink}\n analyticsData={tab.analyticsData}\n analyticsOptions={tab.analyticsOptions}\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n >\n <TabContents tab={tab} />\n </AppLink>\n ) : (\n <DivButton\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n onClick={() => onSelectTab(tab)}\n >\n <TabContents tab={tab} />\n </DivButton>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n );\n}\n","export enum AccessSettingsGroup {\n RequestingAccess = 'requestingAccess',\n TeacherInvites = 'teacherInvites',\n AutomaticAccess = 'automaticAccess'\n}","export enum AccessType {\n Request = 'request',\n AutoJoin = 'auto-join',\n NoRequest = 'no-request'\n}","// Article name mapped to article ID on support site. Used by `ArticleHelper`\n\nexport enum OnlineSupportArticle {\n AddToPlaylist = '115005679748',\n EditSsoAccounts = '8202508040345',\n\n // LE\n LibraryEditor = '360001974533',\n VideoAccess = '360000153947',\n AddFromOnline = '360011718234',\n UploadToLibraryEditor = '360012069334',\n PBTErrorCodes = '360012421153',\n ManuelReview = '360020004534',\n LibraryReview = '360000163788',\n}\n\nexport enum LiteSupportArticle {\n Integrations = '4407268725529',\n Classrooms = '4405362551833',\n MakeInteractive = '4405370510873',\n EditSsoAccounts = '8202605666073',\n UploadToLibraryEditor = '10672936659865',\n AddFromLite = '10671345281561',\n ManageSsoYearGroups = '14691130889241',\n ContentReview = '18525199576601',\n ContentPermissions = '14692125209497',\n AccessSettings = '27927466562201',\n ContentGuidelines = '24133696186009',\n FoxtelFaq = '24133519542169',\n ViviIntegration = '23826297956377',\n AppleTvIntegration = '25832373739929',\n RssFeed = '32567445635097',\n ManageGroupPermissions = '35407217335705'\n}\n","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AccessType } from 'libs/shared/enums/AccessType';\nimport { ApprovedDomain, DomainSettingsModel } from 'libs/shared/interfaces/domains/ApprovedDomain';\n\nfunction has(accessType: AccessType, domains: ApprovedDomain[]): boolean {\n return !!ArrayHelper.findWhere(domains, { accessType });\n}\n\nfunction getFilteredDomains(domains: ApprovedDomain[], ...accessTypes: AccessType[]): ApprovedDomain[] {\n return domains.filter(domain => accessTypes.some(accessType => accessType === domain.accessType));\n}\n\nexport const DomainSettingsFormHelper = {\n getInitialJoinRequests(domains: ApprovedDomain[]): DomainSettingsModel {\n const filteredDomains = getFilteredDomains(domains, AccessType.Request, AccessType.NoRequest);\n \n if (has(AccessType.Request, filteredDomains))\n return { selectedOption: 'allowed', domains: filteredDomains };\n\n if (has(AccessType.NoRequest, filteredDomains))\n return { selectedOption: 'none', domains: []};\n \n return { selectedOption: 'any', domains: []};\n },\n getInitialAccessBehaviour(domains: ApprovedDomain[]): DomainSettingsModel {\n const filteredDomains = getFilteredDomains(domains, AccessType.AutoJoin);\n\n if (has(AccessType.AutoJoin, filteredDomains))\n return { selectedOption: 'allowed', domains: filteredDomains };\n\n return { selectedOption: 'none', domains: []};\n },\n formatRequestData(\n prevDomains: ApprovedDomain[],\n values: DomainSettingsModel,\n accessType: AccessType\n ): ApprovedDomain[] {\n const { domains, selectedOption } = values;\n const prevAutoJoinDomains = getFilteredDomains(prevDomains, AccessType.AutoJoin);\n const prevRequestDomains = getFilteredDomains(prevDomains, AccessType.Request, AccessType.NoRequest);\n\n if (accessType === AccessType.Request) {\n let requestDomains: ApprovedDomain[] = [];\n switch (selectedOption) {\n case 'none':\n requestDomains = [{ accessType: AccessType.NoRequest, domain: '' }];\n break;\n case 'allowed':\n requestDomains = domains.map(domain => ({ ...domain, accessType: AccessType.Request }));\n break;\n case 'any':\n }\n return [ ...prevAutoJoinDomains, ...requestDomains ];\n }\n\n if (accessType === AccessType.AutoJoin) {\n let autoJoinDomains: ApprovedDomain[] = [];\n switch (selectedOption) {\n case 'allowed':\n autoJoinDomains = domains.map(domain => ({ ...domain, accessType: AccessType.AutoJoin }));\n break;\n case 'none':\n }\n return [ ...prevRequestDomains, ...autoJoinDomains ];\n }\n }\n};\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { useGetSettingsGroups } from 'apps/settings/hooks/useGetSettingsGroups';\n\nconst namespace = 'settings.settingsLayout';\n\n/**\n * Checks if the current user has permission to access the settings module\n */\nexport const useCanAccessSettings = (requiredPermissions: PermissionName | PermissionName[]): boolean => {\n const { hasPermissions } = usePermissions();\n const settingsGroups = useGetSettingsGroups();\n\n /**\n * TODO: Update all settings pages to pasas required permissions, because checking the \n * `useGetSettingsGroups()` values clearly doesnt work for settings pages with multiple\n * applinks inside of them. - Sha\n */\n if (requiredPermissions)\n return hasPermissions(requiredPermissions);\n\n const currentRoute = Core.AppLinkHelper.getCurrentAppLink();\n\n /**\n * Allows us to have popups sitting in other locations be used\n * by our settings pages. For example the manage video access popup\n * in the \"videos with restricted access\" page - Sha\n */\n if (currentRoute.application !== AppChannels.SETTINGS)\n return true;\n\n return settingsGroups.some(group => {\n return group.modules.some(settingsModule => {\n if ('appLink' in settingsModule) {\n return settingsModule.appLink.action === currentRoute.action;\n }\n\n return false;\n });\n });\n};\n\ninterface SettingsLayoutProps {\n heading: string;\n breadcrumbs: string[];\n description?: string;\n requiredPermissions?: PermissionName | PermissionName[];\n headingButton?: () => JSX.Element;\n}\n\nexport function SettingsLayout(props: React.PropsWithChildren<SettingsLayoutProps>): JSX.Element {\n const canAccess = useCanAccessSettings(props.requiredPermissions);\n\n React.useEffect(() => {\n if (!canAccess) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n }, { replace: true });\n }\n }, [canAccess]);\n\n if (!canAccess)\n return <></>;\n\n const breadcrumbs = props.breadcrumbs.map((name, i) => ({\n name,\n appLink: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n },\n active: i === props.breadcrumbs.length - 1\n }));\n\n return (\n <div className='px-3'>\n <div className='d-flex align-items-center justify-content-between'>\n <h1 className='h2'>{props.heading}</h1>\n {props.headingButton?.()}\n </div>\n <div className='pb-3'>\n <Breadcrumbs\n breadcrumbs={[\n {\n name: LanguageService.getPhrase(namespace, 'settingsBreadcrumb'),\n appLink: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n }\n },\n ...breadcrumbs\n ]}\n />\n </div>\n {props.description &&\n <>\n <p>{props.description}</p>\n <hr />\n </>\n }\n\n {props.children}\n </div>\n );\n}","import { Core } from 'libs/common/backbone/index';\n\nimport { AccessSettingsGroup } from 'libs/shared/enums/AccessSettingsGroup';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nexport const AccessSettingsAppLinks: { [key in AccessSettingsGroup]: Core.AppLink } = {\n [AccessSettingsGroup.RequestingAccess]: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.REQUESTING_ACCESS\n },\n [AccessSettingsGroup.TeacherInvites]: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.TEACHER_INVITES\n },\n [AccessSettingsGroup.AutomaticAccess]: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.AUTOMATIC_ACCESS\n }\n};\n","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/flight';\n\nimport { ApprovedDomain } from 'libs/shared/interfaces/domains/ApprovedDomain';\n\nexport const DomainRequests = {\n domains(customerId: string): Flight.Request {\n return {\n url: `{gateway}/v1/customers/${customerId}/approved-domains`,\n key: 'domains',\n normalize: false\n };\n },\n updateDomains(\n customerId: string,\n data: ApprovedDomain[]\n ): Flight.Request {\n return {\n url: `{gateway}/v1/customers/${customerId}/approved-domains`,\n key: 'update:domains',\n type: HttpVerbs.PUT,\n data,\n normalize: false,\n invalidationKeys: ['domains']\n };\n }\n};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { useSettings } from 'libs/shared/hooks/useSettings';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nexport function useDomainSettingsSwitch() {\n const { isLoadingSettings, domainSettings } = useSettings(LocationContext.Settings);\n\n React.useEffect(() => {\n if (isLoadingSettings)\n return;\n\n if (!domainSettings) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n }, { replace: true });\n }\n }, [ domainSettings, isLoadingSettings ]);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"pillTabSelector\":\"Hdi6o\",\"tab\":\"RvNxr\",\"minWidth\":\"GHSz9\",\"radiusSmall\":\"VhJJa\",\"tabLink\":\"WFyvo\"};"],"names":["domainRegex","RegExp","DomainValidation","values","domains","selectedOption","errors","forEach","domain","index","find","currentDomain","currentIndex","hasChanged","test","length","namespace","getPhrase","LanguageService","errorMessagePhraseMap","requestingAccess","automaticAccess","props","formikProps","view","appLinks","onChangeDomain","removeDomainField","actionMap","AccessSettingsGroup","action","viewAppLink","application","args","getDomainErrorCode","className","ClearableInput","type","name","placeholder","value","onChange","e","preventDefault","updatedDomain","currentTarget","handleChange","onClickClear","autoComplete","showClearButton","FormFeedback","domainErrorCode","Text","phrase","options","AppLink","appLink","getDomainErrorMessage","DomainFields","addDomainField","error","errorIndex","ArrayHelper","setFieldError","errorCode","render","map","key","IconButton","svgName","onClick","radioPhraseMap","none","label","description","allowed","any","option","hasDescription","url","onSelectValue","children","FormCheck","id","checked","target","href","infoMessagePhraseMap","DomainSettingsForm","setFieldValue","setErrors","clearFieldError","domainErrors","updatedDomainErrors","filter","err","ArticleHelper","FormButtons","isNew","variant","DomainSettingsFormWrapper","initialValues","onSaveChanges","FormWrapper","validate","validateOnChange","validateOnBlur","onSubmit","DomainSettingsTabs","active","tabs","analyticsData","analyticsOptions","actionType","entity","location","teacherInvites","CloseIcon","viewBox","d","ref","clearClassName","inputProps","role","onKeyDown","tabIndex","canSubmit","disabled","size","showSpinner","isSubmitting","submitText","castInitialValues","castValuesOnSubmit","formattedInitialValues","validationSchema","cast","omitChildValues","child","Object","keys","hasOwnProperty","omitNullInitialValues","initialStatus","allowInitialSubmit","enableReinitialize","setSubmitting","resetForm","formattedData","reset","entries","f","useFormikContextWrapper","defaultProps","TabContents","tab","count","data","PillTabSelector","containerRef","borderRadius","listClassName","onSelect","onSelectTab","AccessType","OnlineSupportArticle","LiteSupportArticle","has","accessType","getFilteredDomains","accessTypes","some","DomainSettingsFormHelper","getInitialJoinRequests","filteredDomains","getInitialAccessBehaviour","formatRequestData","prevDomains","prevAutoJoinDomains","prevRequestDomains","requestDomains","autoJoinDomains","useCanAccessSettings","requiredPermissions","hasPermissions","settingsGroups","currentRoute","group","modules","settingsModule","SettingsLayout","canAccess","replace","breadcrumbs","i","heading","headingButton","AccessSettingsAppLinks","DomainRequests","customerId","normalize","updateDomains","invalidationKeys","useDomainSettingsSwitch","isLoadingSettings","domainSettings"],"sourceRoot":""}
|