@clickview/lite 0.75.0-rc.9 → 0.75.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/css/{7103-lite-fef3024f61.chunk.css → 2878-lite-d8e0bf912a.chunk.css} +1 -1
- package/dist/css/{1243-lite-13eda8f6a0.chunk.css → 3615-lite-240342ff8e.chunk.css} +1 -1
- package/dist/css/{1867-lite-8baa8af02b.chunk.css → 4630-lite-0157b1c437.chunk.css} +1 -1
- package/dist/css/{4203-lite-9ffab89741.chunk.css → 8362-lite-10810fdef2.chunk.css} +1 -1
- package/dist/languages/en.json +1 -1
- package/dist/scripts/{104-7ee25cbbb8-lite.chunk.js → 104-da7394bcfa-lite.chunk.js} +2 -2
- package/dist/scripts/104-da7394bcfa-lite.chunk.js.map +1 -0
- package/dist/scripts/1192-bb27568f21-lite.chunk.js +2 -0
- package/dist/scripts/1192-bb27568f21-lite.chunk.js.map +1 -0
- package/dist/scripts/1199-cf2cb206b5-lite.chunk.js +2 -0
- package/dist/scripts/1199-cf2cb206b5-lite.chunk.js.map +1 -0
- package/dist/scripts/1502-9836df10cd-lite.chunk.js +2 -0
- package/dist/scripts/1502-9836df10cd-lite.chunk.js.map +1 -0
- package/dist/scripts/{1610-9ccecc428a-lite.chunk.js → 1610-0edaa98d40-lite.chunk.js} +2 -2
- package/dist/scripts/{1610-9ccecc428a-lite.chunk.js.map → 1610-0edaa98d40-lite.chunk.js.map} +1 -1
- package/dist/scripts/{7103-3b181ec69b-lite.chunk.js → 2878-487c4a8e1a-lite.chunk.js} +2 -2
- package/dist/scripts/2878-487c4a8e1a-lite.chunk.js.map +1 -0
- package/dist/scripts/{3057-1ae8087b3a-lite.chunk.js → 3057-a5bc753736-lite.chunk.js} +1 -1
- package/dist/scripts/{3057-1ae8087b3a-lite.chunk.js.map → 3057-a5bc753736-lite.chunk.js.map} +1 -1
- package/dist/scripts/3268-7be966dc82-lite.chunk.js +3 -0
- package/dist/scripts/3268-7be966dc82-lite.chunk.js.map +1 -0
- package/dist/scripts/{1243-72f3d31787-lite.chunk.js → 3615-a0da361aa5-lite.chunk.js} +2 -2
- package/dist/scripts/3615-a0da361aa5-lite.chunk.js.map +1 -0
- package/dist/scripts/{3872-6fe7371d39-lite.chunk.js → 3872-cf9a6bdae8-lite.chunk.js} +1 -1
- package/dist/scripts/{3872-6fe7371d39-lite.chunk.js.map → 3872-cf9a6bdae8-lite.chunk.js.map} +1 -1
- package/dist/scripts/4125-6d34b8b8f2-lite.chunk.js +2 -0
- package/dist/scripts/4125-6d34b8b8f2-lite.chunk.js.map +1 -0
- package/dist/scripts/4598-e25e9e03d6-lite.chunk.js +2 -0
- package/dist/scripts/4598-e25e9e03d6-lite.chunk.js.map +1 -0
- package/dist/scripts/{1867-0823a787c3-lite.chunk.js → 4630-4a35ecbf2b-lite.chunk.js} +2 -2
- package/dist/scripts/4630-4a35ecbf2b-lite.chunk.js.map +1 -0
- package/dist/scripts/6475-f019242ec2-lite.chunk.js +2 -0
- package/dist/scripts/6475-f019242ec2-lite.chunk.js.map +1 -0
- package/dist/scripts/{6695-4e01b4a18c-lite.chunk.js → 6695-4ae0acad94-lite.chunk.js} +1 -1
- package/dist/scripts/{6695-4e01b4a18c-lite.chunk.js.map → 6695-4ae0acad94-lite.chunk.js.map} +1 -1
- package/dist/scripts/6756-3c7f911759-lite.chunk.js +3 -0
- package/dist/scripts/6756-3c7f911759-lite.chunk.js.map +1 -0
- package/dist/scripts/6790-1695fcf576-lite.chunk.js +2 -0
- package/dist/scripts/6790-1695fcf576-lite.chunk.js.map +1 -0
- package/dist/scripts/7438-35b887a48e-lite.chunk.js +2 -0
- package/dist/scripts/7438-35b887a48e-lite.chunk.js.map +1 -0
- package/dist/scripts/{8323-d6d1d07ce5-lite.chunk.js → 8323-5694456903-lite.chunk.js} +2 -2
- package/dist/scripts/{8323-d6d1d07ce5-lite.chunk.js.map → 8323-5694456903-lite.chunk.js.map} +1 -1
- package/dist/scripts/{4203-83f90f92f3-lite.chunk.js → 8362-ed5df8f4fc-lite.chunk.js} +3 -3
- package/dist/scripts/8362-ed5df8f4fc-lite.chunk.js.LICENSE.txt +1 -0
- package/dist/scripts/{4203-83f90f92f3-lite.chunk.js.map → 8362-ed5df8f4fc-lite.chunk.js.map} +1 -1
- package/dist/scripts/{8732-3e8332e620-lite.chunk.js → 8732-dc5182fb69-lite.chunk.js} +1 -1
- package/dist/scripts/{8732-3e8332e620-lite.chunk.js.map → 8732-dc5182fb69-lite.chunk.js.map} +1 -1
- package/dist/scripts/8856-08061bbec5-lite.chunk.js +2 -0
- package/dist/scripts/8856-08061bbec5-lite.chunk.js.map +1 -0
- package/dist/scripts/{8957-bc83ea1180-lite.chunk.js → 8957-b3f0dbb85d-lite.chunk.js} +1 -1
- package/dist/scripts/{8957-bc83ea1180-lite.chunk.js.map → 8957-b3f0dbb85d-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9042-544d97a05d-lite.chunk.js → 9042-7c30ffd4f0-lite.chunk.js} +2 -2
- package/dist/scripts/9042-7c30ffd4f0-lite.chunk.js.map +1 -0
- package/dist/scripts/9134-b0ae877597-lite.chunk.js +2 -0
- package/dist/scripts/9134-b0ae877597-lite.chunk.js.map +1 -0
- package/dist/scripts/{bundle-cf4c360278.min.js → bundle-941a464ef0.min.js} +3 -3
- package/dist/scripts/{bundle-cf4c360278.min.js.map → bundle-941a464ef0.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/104-7ee25cbbb8-lite.chunk.js.map +0 -1
- package/dist/scripts/1074-6dadbd8187-lite.chunk.js +0 -2
- package/dist/scripts/1074-6dadbd8187-lite.chunk.js.map +0 -1
- package/dist/scripts/1192-6ac54d734b-lite.chunk.js +0 -2
- package/dist/scripts/1192-6ac54d734b-lite.chunk.js.map +0 -1
- package/dist/scripts/1199-dc45a88be8-lite.chunk.js +0 -2
- package/dist/scripts/1199-dc45a88be8-lite.chunk.js.map +0 -1
- package/dist/scripts/1243-72f3d31787-lite.chunk.js.map +0 -1
- package/dist/scripts/1867-0823a787c3-lite.chunk.js.map +0 -1
- package/dist/scripts/3268-aa893d0068-lite.chunk.js +0 -2
- package/dist/scripts/3268-aa893d0068-lite.chunk.js.map +0 -1
- package/dist/scripts/4598-f5120153c2-lite.chunk.js +0 -2
- package/dist/scripts/4598-f5120153c2-lite.chunk.js.map +0 -1
- package/dist/scripts/6475-502e390010-lite.chunk.js +0 -2
- package/dist/scripts/6475-502e390010-lite.chunk.js.map +0 -1
- package/dist/scripts/6756-20c0ab9591-lite.chunk.js +0 -3
- package/dist/scripts/6756-20c0ab9591-lite.chunk.js.map +0 -1
- package/dist/scripts/6790-df00506bec-lite.chunk.js +0 -2
- package/dist/scripts/6790-df00506bec-lite.chunk.js.map +0 -1
- package/dist/scripts/7103-3b181ec69b-lite.chunk.js.map +0 -1
- package/dist/scripts/7438-1162aba8b6-lite.chunk.js +0 -2
- package/dist/scripts/7438-1162aba8b6-lite.chunk.js.map +0 -1
- package/dist/scripts/8856-361fe76b7a-lite.chunk.js +0 -2
- package/dist/scripts/8856-361fe76b7a-lite.chunk.js.map +0 -1
- package/dist/scripts/9003-36ab592cc5-lite.chunk.js +0 -2
- package/dist/scripts/9003-36ab592cc5-lite.chunk.js.map +0 -1
- package/dist/scripts/9042-544d97a05d-lite.chunk.js.map +0 -1
- package/dist/scripts/9134-7037c2c47a-lite.chunk.js +0 -2
- package/dist/scripts/9134-7037c2c47a-lite.chunk.js.map +0 -1
- /package/dist/scripts/{4203-83f90f92f3-lite.chunk.js.LICENSE.txt → 3268-7be966dc82-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6756-20c0ab9591-lite.chunk.js.LICENSE.txt → 6756-3c7f911759-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{8323-d6d1d07ce5-lite.chunk.js.LICENSE.txt → 8323-5694456903-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-cf4c360278.min.js.LICENSE.txt → bundle-941a464ef0.min.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/8856-08061bbec5-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/hooks/UseFetchInteractiveResults.ts","file:///app/packages/libs/shared/src/apps/share-v2/flight-requests/ShareRequests.ts","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/student-results-table/StudentResultsEmptyState.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/student-results-table/StudentResultsTableFilters.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/student-results-table/StudentResultsTable.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/interactive-insights-students/partial-loading/partial-interactive-insights-students.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/interactive-insights-students/partial-loading/PartialInteractiveInsightsStudents.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/interactive-insights-students/InteractiveInsightsStudents.tsx","file:///app/packages/projects/lite/src/apps/my-shares/hooks/useAnonSessions.ts","file:///app/packages/projects/lite/src/apps/my-shares/hooks/useInsightsClassroomStudents.ts","file:///app/packages/projects/lite/src/apps/my-shares/hooks/useInsightsInteractiveResults.ts","file:///app/packages/projects/lite/src/apps/my-shares/flight-requests/VideoViewsV2Requests.ts","file:///app/packages/projects/lite/src/apps/my-shares/hooks/useInsightEngagement.ts","file:///app/packages/projects/lite/src/apps/my-shares/views/heatmap/InsightsHeatmapView.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/interactive/overview/InteractiveInsightsOverviewView.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/interactive/overview/InteractiveInsightsOverviewUtils.ts","file:///app/packages/projects/lite/src/apps/my-shares/views/interactive/questions/InteractiveInsightsQuestionsView.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/interactive/students/InteractiveInsightsStudentsView.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/students-not-watched/InsightStudentsNotWatched.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/students-watched/InsightStudentsWatched.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/video-insights-overview/partial-loading/partial-video-insights-overview.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/video-insights-overview/partial-loading/PartialVideoInsightsOverview.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/video-insights-overview/VideoInsightsOvervew.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/video/overview/VideoInsightsOverviewView.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/video/overview/VideoInsightsOverviewUtils.ts","file:///app/packages/projects/lite/src/apps/my-shares/views/base-insights-view/useInsightsView.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/base-insights-view/BaseInsightsView.tsx"],"sourcesContent":["import { Flight } from 'libs/common/flight';\n\nimport { InteractiveResultsRequests } from 'libs/shared/apps/analytics/flight-requests/InteractiveResultsRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { AnalyticsRequestFilter, CurrentUser, Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\n\nexport function useFetchInteractiveResults(\n interactiveMetadataId: string,\n requestFilter?: AnalyticsRequestFilter,\n shareId?: string\n): Flight.Response<InteractiveResultSet> {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(!!interactiveMetadataId &&\n InteractiveRequests.interactiveMetadata(interactiveMetadataId));\n\n const interactive = Flight.useBasicFetch<Interactive>(!!interactiveMetadata.data?.interactiveId &&\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId));\n\n const shouldFetchResults = !!currentUser.data && !!interactive.data;\n\n return Flight.useBasicFetch<InteractiveResultSet>(shouldFetchResults &&\n InteractiveResultsRequests.interactiveResultSet(\n interactiveMetadata.data.interactiveId,\n interactiveMetadata.data.id,\n currentUser.data,\n requestFilter,\n shareId\n ));\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { 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' ]\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}`, 'get:share-v2:shares:object' ]\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}`, 'get:share-v2:shares:object' ]\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', `get:share-v2:shares:object:${data.objectId}` ],\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 { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n internalServerError?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError,\n internalServerError: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.InternalServer) {\n if (!ignoreMap.internalServerError)\n Core.ErrorHelper.throw(new UnspecifiedError());\n return;\n }\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import 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 { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { FilterStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\n\nconst namespace = 'shared.studentResultsTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface StudentResultsEmptyStateProps {\n filter: FilterStudentsBy;\n notCompletedImageUrl: string;\n helpingHandImageUrl: string;\n markingRequiredImageUrl: string;\n emptyStateImageUrl: string;\n}\n\nexport function StudentResultsEmptyState(props: StudentResultsEmptyStateProps) {\n if (props.filter === 'not_completed') {\n return (\n <EmptyState className='bg-white rounded-bottom py-5'>\n <EmptyState.Image src={props.notCompletedImageUrl} size='small' />\n <EmptyState.Info>\n {getPhrase('notCompletedDescription')}\n </EmptyState.Info>\n </EmptyState>\n );\n }\n if (props.filter === 'marking_required') {\n return (\n <EmptyState className='bg-white rounded-bottom py-5'>\n <EmptyState.Image src={props.markingRequiredImageUrl} size='small' />\n <EmptyState.Info>\n {getPhrase('markingRequiredDescription')}\n </EmptyState.Info>\n </EmptyState>\n );\n }\n\n if (props.filter === 'helping_hand') {\n return (\n <EmptyState className='bg-white rounded-bottom py-5'>\n <EmptyState.Image src={props.helpingHandImageUrl} size='small' />\n <EmptyState.Info>\n {getPhrase('helpingHandDescription')}\n </EmptyState.Info>\n </EmptyState>\n );\n }\n\n return (\n <EmptyState className='bg-white rounded-bottom py-5'>\n <EmptyState.Image src={props.emptyStateImageUrl} size='small' />\n <EmptyState.Heading>\n {getPhrase('emptyStateHeading')}\n </EmptyState.Heading>\n <EmptyState.Info>\n {getPhrase('emptyStateDescription')}\n </EmptyState.Info>\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { FilterStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'shared.studentResultsTable';\n\ninterface StudentResultsTableFiltersProps {\n filter: FilterStudentsBy;\n setFilter: (filter: FilterStudentsBy) => void;\n}\n\nexport function StudentResultsTableFilterButtons(props: StudentResultsTableFiltersProps) {\n function toggleFilter(selectedFilter: FilterStudentsBy) {\n const updatedFilter = props.filter === selectedFilter ? null : selectedFilter;\n\n props.setFilter(updatedFilter);\n }\n\n function isFilterSelected(filter: FilterStudentsBy) {\n return props.filter === filter;\n }\n\n function getClassName(filter: FilterStudentsBy) {\n return `btn btn-outline-dark ${isFilterSelected(filter) ? 'bg-dark text-white' : ''}`;\n }\n\n return (\n <div className='d-flex align-items-center mb-3'>\n <p className='h6 mb-0'><Text namespace={namespace} phrase='filters' /></p>\n <div className='d-flex border-start ps-3 ms-3 gap-2'>\n <button className={getClassName('not_completed')} onClick={() => toggleFilter('not_completed')}>\n <Text namespace={namespace} phrase='notCompletedFilter' />\n </button>\n <button className={getClassName('marking_required')} onClick={() => toggleFilter('marking_required')}>\n <Text namespace={namespace} phrase='markingRequiredFilter' />\n </button>\n <button className={getClassName('helping_hand')} onClick={() => toggleFilter('helping_hand')}>\n <Text namespace={namespace} phrase='helpingHandFilter' />\n </button>\n </div>\n </div>\n );\n}","import React from 'react';\nimport { Cell, Row, SortingRule } from 'react-table';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { StudentResultsEmptyState } from 'libs/shared/apps/analytics/components/student-results/student-results-table/StudentResultsEmptyState';\nimport { StudentResultsTableFilterButtons } from 'libs/shared/apps/analytics/components/student-results/student-results-table/StudentResultsTableFilters';\nimport { StudentResultsWithSummary } from 'libs/shared/apps/analytics/interfaces/StudentResultsWithSummary';\nimport { FilterStudentsBy, getSortStudents, SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { Table, TableTheme } from 'libs/shared/components/table/Table';\nimport { Config, Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport {\n highlightColumns,\n highlightRows,\n RESULTS_COL_WIDTH,\n useGetFixedColumns,\n useGetResultColumns,\n useGetResultsTableData\n} from './StudentResultsTableUtils';\n\nimport styles from './student-results-table.scss';\n\nconst fixedTableTheme: TableTheme = {\n table: `${styles.fixedTable} bg-white rounded-start border border-end-0`,\n header: `${styles.header} border-bottom`,\n headerRow: 'h-100',\n headerCell: 'd-flex align-items-center justify-content-start',\n row: styles.row\n};\n\nconst resultsTableTheme: TableTheme = {\n header: `${styles.header} fw-bold`,\n headerRow: 'h-100',\n headerCell: `${styles.interactionHeaderCellOuter} bg-white border-bottom`,\n row: `${styles.row} ${styles.resultsRow}`,\n cell: styles.resultsCellOuter\n};\n\ninterface StudentResultsTableProps {\n interactive: Interactive;\n interactiveMetadata: InteractiveMetadata;\n results: InteractiveResultSet;\n\n /**\n * As the table data is memoized, it must be prompted to recalculate.\n * Toggle `refreshTable` to do so.\n */\n refreshTable: boolean;\n config?: Config;\n selectedStudentId?: string;\n emptyStateImageUrl?: string;\n notCompletedImageUrl?: string;\n helpingHandImageUrl?: string;\n markingRequiredImageUrl?: string;\n anonymiseUsers?: boolean;\n sortBy?: SortStudentsBy;\n filterBy?: FilterStudentsBy;\n viewStudentResults: (\n student: AnonUser,\n interactiveMetadataId: string,\n interactionId?: string\n ) => void;\n}\n\nexport function StudentResultsTable(props: StudentResultsTableProps): JSX.Element {\n const [ sortBy, setSortBy ] = React.useState<SortingRule<StudentResultsWithSummary>[]>(\n getSortStudents(props.sortBy, 'score')\n );\n const [ filter, setFilter ] = React.useState<FilterStudentsBy>(props.filterBy);\n\n const ref = React.useRef<HTMLDivElement>(null);\n\n const fixedColumns = useGetFixedColumns(props.results, props.anonymiseUsers, props.config?.imageCdnUrl);\n const resultColumns = useGetResultColumns(\n props.interactive,\n props.interactiveMetadata,\n props.results,\n onColumnHover,\n props.refreshTable\n );\n const data = useGetResultsTableData(\n props.interactive,\n props.results,\n props.refreshTable,\n props.anonymiseUsers,\n ArrayHelper.first(sortBy),\n filter\n );\n\n function onSelectStudent({ original }: Row<StudentResultsWithSummary>): void {\n props.viewStudentResults(original.user, props.interactiveMetadata.id);\n }\n\n function onSelectStudentResponse(cell: Cell<StudentResultsWithSummary>): void {\n props.viewStudentResults(\n cell.row.original.user,\n props.interactiveMetadata.id,\n cell.column.id\n );\n }\n\n function onColumnHover(index?: number): void {\n highlightColumns(ref.current, index);\n }\n\n function onRowHover(index?: number): void {\n highlightRows(ref.current, index);\n }\n\n return (\n <div>\n {!!props.results.students.length && <StudentResultsTableFilterButtons filter={filter} setFilter={setFilter} />}\n\n {!data.length && (\n <StudentResultsEmptyState\n emptyStateImageUrl={props.emptyStateImageUrl}\n helpingHandImageUrl={props.helpingHandImageUrl}\n markingRequiredImageUrl={props.markingRequiredImageUrl}\n notCompletedImageUrl={props.notCompletedImageUrl}\n filter={filter}\n />\n )}\n\n {!!data.length && (\n <div ref={ref} className={`d-flex${data.length ? ` ${styles.hasResults}` : ''}`}>\n <Table\n columns={fixedColumns}\n data={data}\n theme={fixedTableTheme}\n onSelectRow={onSelectStudent}\n onRowMouseOver={row => onRowHover(row.index)}\n onRowMouseLeave={() => onRowHover()}\n enableSort\n manualSort\n onSort={setSortBy}\n initialSortBy={sortBy}\n />\n <Table\n columns={resultColumns}\n data={data}\n theme={resultsTableTheme}\n enableSlider\n scrollIncrement={RESULTS_COL_WIDTH * 8}\n onSelectCell={onSelectStudentResponse}\n scrollContainerClassName='rounded-end border border-start-0 border'\n />\n </div>\n )}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialInsights\":\"qSeTe\"};","import React from 'react';\n\nimport styles from './partial-interactive-insights-students.scss';\n\nexport function PartialInteractiveInsightsStudents() {\n return (\n <div>\n <div className='d-flex align-items-center mb-3'>\n <p className='h6 px-4 mb-0 me-4 partial-loading-background'> </p>\n <div className='row g-2 w-50'>\n <div className='col-3'>\n <div className='p-2 rounded-1 partial-loading-background'> </div>\n </div>\n <div className='col-3'>\n <div className='p-2 rounded-1 partial-loading-background'> </div>\n </div>\n <div className='col-3'>\n <div className='p-2 rounded-1 partial-loading-background'> </div>\n </div>\n </div>\n </div>\n <div className='row g-3 mb-5'>\n <div className='col-12'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { StudentResultsTable } from 'libs/shared/apps/analytics/components/student-results/student-results-table/StudentResultsTable';\nimport { FilterStudentsBy, SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { Config, Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { PartialInteractiveInsightsStudents } from 'apps/my-shares/components/interactive-insights-students/partial-loading/PartialInteractiveInsightsStudents';\n\ninterface InteractiveInsightsStudentsProps {\n interactive: Interactive;\n interactiveMetadata: InteractiveMetadata;\n results: InteractiveResultSet;\n isFetching: boolean;\n sortBy: SortStudentsBy;\n filterBy: FilterStudentsBy;\n anonymiseUsers: boolean;\n config: Config;\n viewStudentResults: (\n user: AnonUser,\n interactiveMetadataId: string,\n interactionId?: string\n ) => void;\n hasDataLoaded: boolean;\n}\n\nexport function InteractiveInsightsStudents(props: InteractiveInsightsStudentsProps) {\n return (\n <>\n {!props.hasDataLoaded &&\n <PartialInteractiveInsightsStudents />\n }\n\n {props.hasDataLoaded &&\n <StudentResultsTable\n interactive={props.interactive}\n interactiveMetadata={props.interactiveMetadata}\n results={props.results}\n refreshTable={props.isFetching}\n viewStudentResults={props.viewStudentResults}\n emptyStateImageUrl={ImageUrls.Insights.NO_RESPONSES}\n sortBy={props.sortBy}\n filterBy={props.filterBy}\n anonymiseUsers={props.anonymiseUsers}\n notCompletedImageUrl={ImageUrls.Insights.JIGSAW}\n markingRequiredImageUrl={ImageUrls.Insights.CLIPBOARD}\n helpingHandImageUrl={ImageUrls.Insights.SPEECH_BUBBLE_HEART}\n config={props.config}\n />\n }\n </>\n );\n}","import { Flight } from 'libs/common/react/index';\n\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { AnonSession } from 'libs/shared/apps/share/interfaces/AnonSession';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nfunction toAnonUser(anonSession: AnonSession) {\n return { sessionId: anonSession.sessionId, name: anonSession.sessionName } as AnonUser;\n}\n\nexport function useAnonSessions(shareId: string) {\n const anonSessions = Flight.useBasicFetch<AnonSession[]>(ShareRequests.getAnonSessions(shareId));\n\n const anonSessionMap = anonSessions.data\n ?.reduce<Record<string, AnonUser>>((prev, next) => {\n return {\n ...prev,\n [next.sessionId]: toAnonUser(next)\n };\n }, {});\n\n return {\n items: anonSessionMap || {},\n hasCompleted: anonSessions.hasCompleted\n };\n}","import { Flight } from 'libs/common/react/index';\n\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { useFetchAll } from 'libs/shared/hooks/UseFetchAll';\nimport { User } from 'libs/shared/interfaces/models/User';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\n\nexport function useInsightsClassroomStudents(shareId: string) {\n const fetch = Flight.useGetFetch();\n\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(shareId));\n \n const classroomId = share.data?.type === ShareType.Classroom &&\n share.data?.recipients?.find(r => r.recipientTypeId === MasterType.Classroom)?.recipientId;\n\n const getRequest = (cursor: string) => ClassroomRequests.getClassroomStudents(classroomId, cursor);\n const result = useFetchAll<User>(classroomId && getRequest, cursor => fetch(getRequest(cursor)));\n\n return {\n ...result,\n hasCompleted: !classroomId || result.hasCompleted\n };\n}","import { Flight } from 'libs/common/react/index';\n\nimport { useFetchInteractiveResults } from 'libs/shared/apps/analytics/hooks/UseFetchInteractiveResults';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { InteractiveResult, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport { useAnonSessions } from 'apps/my-shares/hooks/useAnonSessions';\nimport { useInsightsClassroomStudents } from 'apps/my-shares/hooks/useInsightsClassroomStudents';\n\nconst EMPTY_INTERACTIVE_RESULTS: InteractiveResult[] = [\n {\n id: '0',\n attempts: [{ id: '0', answeredAt: 0, answers: []}]\n }\n];\n\nexport function useInsightsInteractiveResults(shareId: string) {\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(shareId));\n const results = useFetchInteractiveResults(share.data?.objectId, null, shareId);\n\n const anonSessions = useAnonSessions(shareId);\n\n const classroomStudents = useInsightsClassroomStudents(shareId);\n\n useHandleObjectError(results);\n\n const hasCompleted = (\n results.hasCompleted &&\n anonSessions.hasCompleted &&\n classroomStudents.hasCompleted\n );\n\n if (!hasCompleted) {\n return {\n data: null as InteractiveResultSet,\n hasCompleted: false\n };\n }\n\n const studentHash = new Set<string>();\n const students = results.data.students.map(s => {\n if (s.user) {\n studentHash.add(s.user.id);\n return s;\n }\n\n /**\n * Set the user to our anon user, so we can display the name they entered\n * when completing the interactive - Sha\n */\n return {\n ...s,\n user: anonSessions.items[s.sessionId] || { sessionId: s.sessionId } as AnonUser\n };\n });\n\n /**\n * If we have classroom students, we're adding any students who haven't attempted to the list\n * with an empty attempt. This is so the student list can show all classroom students - Sha\n */\n if (classroomStudents?.items?.length) {\n students.push(...classroomStudents.items\n .filter(s => !studentHash.has(s.id))\n .map(user => ({ user, results: EMPTY_INTERACTIVE_RESULTS })));\n }\n\n return {\n hasCompleted,\n data: {\n ...results.data,\n students\n }\n };\n}","import { Flight } from 'libs/common/react/index';\n\nimport { StreamAggregationType } from 'libs/shared/apps/analytics/interfaces/StreamAggregationType';\n\nexport const VideoViewsV2Requests = {\n shareViews(shareId: string): Flight.Request {\n return {\n url: `{gateway}/v2/analytics/streams/shares/${shareId}/users/count`,\n key: `video:views:v2:share:${shareId}`,\n normalize: false\n };\n },\n\n shareAggregation(shareId: string, type: StreamAggregationType): Flight.Request {\n return {\n url: `{gateway}/v2/analytics/streams/shares/${shareId}/aggregation/${type}`,\n key: `video:views:v2:share:aggregation:${shareId}:${type}`,\n normalize: false\n };\n },\n\n shareHeatMap(shareId: string): Flight.Request {\n return {\n url: `{gateway}/v2/analytics/streams/shares/${shareId}/heat-map`,\n key: `video:views:v2:share:heatmap:${shareId}`,\n normalize: false\n };\n },\n\n shareHeatMapAggregation(shareId: string): Flight.Request {\n return {\n url: `{gateway}/v2/analytics/streams/shares/${shareId}/aggregation/heat-map`,\n key: `video:views:v2:share:heatmap:aggregation:${shareId}`,\n normalize: false\n };\n }\n};","import { Flight } from 'libs/common/react/index';\n\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { Engagement } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport { VideoViewsV2Requests } from 'apps/my-shares/flight-requests/VideoViewsV2Requests';\nimport { useAnonSessions } from 'apps/my-shares/hooks/useAnonSessions';\n\nexport function useInsightEngagement(shareId: string) {\n const engagement = Flight.useBasicFetch<Engagement[]>(\n VideoViewsV2Requests.shareHeatMap(shareId)\n );\n\n const anonSessions = useAnonSessions(shareId);\n\n const userIds = engagement.data?.map(u => u.userId).filter(id => !!id) || [];\n const users = useBatchFetch<AnonUser>(userIds, UserRequests.getById);\n\n const userMap = {\n ...anonSessions.items,\n ...users.items\n };\n \n const viewers = engagement.data?.map(e => {\n const user = userMap[e.userId || e.sessionId] || { sessionId: e.sessionId } as AnonUser;\n return { ...user, percentage: e.engagementRate } as AnonUser;\n });\n\n return {\n engagement: engagement.data,\n users: viewers,\n hasCompleted: (\n engagement.hasCompleted &&\n anonSessions.hasCompleted &&\n (!userIds?.length || users.hasCompleted)\n )\n };\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { InteractiveResultsRequests } from 'libs/shared/apps/analytics/flight-requests/InteractiveResultsRequests';\nimport { GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { InteractivesPendingReviews } from 'libs/shared/apps/analytics/interfaces/response/InteractivesPendingReviewsResponse';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\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 { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Classroom, Config, CurrentUser, Engagement, PlayerViewKey, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InsightsHeatmap } from 'apps/my-shares/components/insights-heatmap/InsightsHeatmap';\nimport { VideoViewsV2Requests } from 'apps/my-shares/flight-requests/VideoViewsV2Requests';\nimport { useInsightEngagement } from 'apps/my-shares/hooks/useInsightEngagement';\nimport { useInsightsClassroomStudents } from 'apps/my-shares/hooks/useInsightsClassroomStudents';\nimport { getInsightsInteractiveTabs, getInsightsVideoTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\n\nconst namespace = 'shared.insightsHeatmap';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightsHeatmapViewProps {\n shareId: string;\n}\n\nexport function InsightsHeatmapView(props: InsightsHeatmapViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(ViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const { hasPermissions } = usePermissions();\n\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(props.shareId));\n \n const classroomId = ShareHelper.getClassroomIdFromShare(share.data);\n const classroom = Flight.useBasicFetch<Classroom>(classroomId && ClassroomRequests.getClassroom(classroomId));\n\n const classroomStudents = useInsightsClassroomStudents(props.shareId);\n \n const videoRequest = share.data && VideoHelper.getVideoRequest(share.data.objectId, share.data.objectTypeId);\n const video = Flight.useBasicFetch<VideoTypes>(videoRequest);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const pendingReviewsRequest = VideoHelper.isInteractive(video.data) && InteractiveResultsRequests.pendingReviews({\n interactives: [video.data].map(obj => ({\n interactiveId: obj.interactiveId,\n metadataId: obj.id,\n shareId: props.shareId\n })),\n filters: {\n currentCustomerId: currentUser.data.customerId,\n currentUserId: currentUser.data.id\n }\n });\n const pendingReviews = Flight.useBasicFetch<InteractivesPendingReviews[]>(pendingReviewsRequest);\n const markingRequired = pendingReviews.data?.[0]?.pendingReviewCount > 0;\n\n const aggregateEngagement = Flight.useBasicFetch<Engagement>(\n VideoViewsV2Requests.shareHeatMapAggregation(props.shareId)\n );\n\n const { users, engagement, hasCompleted } = useInsightEngagement(props.shareId);\n\n const yearGroupsCount = Flight.useBasicFetch<GroupedAnalyticsCount[]>(\n VideoViewsV2Requests.shareAggregation(props.shareId, 'year_group')\n );\n\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(\n share.data?.objectId &&\n PlayerRequests.createViewKey(share.data.objectId, MediaIdType.MasterObject)\n );\n\n useSetPageMetadata({ title: video.data ? getPhrase('pageTitle', { video: video.data?.name }) : null });\n useHandleObjectError([ share, video ]);\n\n const hasDataLoaded =\n share.hasCompleted &&\n video.hasCompleted &&\n config.hasCompleted &&\n aggregateEngagement.hasCompleted &&\n yearGroupsCount.hasCompleted &&\n viewKey.hasCompleted &&\n yearGroups.hasCompleted;\n\n function getInsightsTabs() {\n if (share.data?.objectTypeId === MasterType.Interactive)\n return getInsightsInteractiveTabs(share.data, 'heatmap');\n\n return getInsightsVideoTabs(share.data, 'heatmap');\n }\n\n return (\n <div className='px-3'>\n <InsightsHeader\n video={video.data}\n tabs={getInsightsTabs()}\n hasAnalytics={hasPermissions(PermissionName.ViewCustomerAnalytics)}\n analyticsWebUrl={config.data?.analyticsWebUrl}\n share={share.data}\n yearGroups={yearGroups.data}\n classroom={classroom.data}\n markingRequired={markingRequired}\n />\n <InsightsHeatmap\n aggregateEngagement={aggregateEngagement.data}\n individualEngagement={engagement}\n yearGroups={yearGroupsCount.data}\n config={config.data}\n users={users}\n viewKey={viewKey.data}\n hasDataLoaded={hasDataLoaded}\n tableDataLoaded={hasCompleted}\n anonymiseUsers={anonymiseUsers}\n classroomStudents={classroomStudents.items}\n />\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { groupStudents } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { ScoreThresholdInsights } from 'libs/shared/constants/ScoreThresholds';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Classroom, Config, CurrentUser, Engagement, Interactive, InteractiveMetadata, YearGroup } from 'libs/shared/interfaces';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InteractiveInsightsOverview } from 'apps/my-shares/components/interactive-insights-overview/InteractiveInsightsOverview';\nimport { VideoViewsV2Requests } from 'apps/my-shares/flight-requests/VideoViewsV2Requests';\nimport { useInsightsClassroomStudents } from 'apps/my-shares/hooks/useInsightsClassroomStudents';\nimport { useInsightsInteractiveResults } from 'apps/my-shares/hooks/useInsightsInteractiveResults';\nimport { getInsightsInteractiveTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\nimport { getInteractiveInsightsAppLinks } from 'apps/my-shares/views/interactive/overview/InteractiveInsightsOverviewUtils';\n\nconst namespace = 'insights.interactiveInsightsOverviewView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractiveInsightsViewProps {\n shareId: string;\n}\n\nexport function InteractiveInsightsOverviewView(props: InteractiveInsightsViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const { hasPermissions } = usePermissions();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(props.shareId));\n \n const classroomId = ShareHelper.getClassroomIdFromShare(share.data);\n const classroom = Flight.useBasicFetch<Classroom>(classroomId && ClassroomRequests.getClassroom(classroomId));\n\n const classroomStudents = useInsightsClassroomStudents(props.shareId);\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n share.data?.objectId &&\n InteractiveRequests.interactiveMetadata(share.data.objectId)\n );\n\n const interactive = Flight.useBasicFetch<Interactive>(\n interactiveMetadata.data?.interactiveId &&\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId)\n );\n\n const results = useInsightsInteractiveResults(props.shareId);\n\n const engagement = Flight.useBasicFetch<Engagement[]>(\n VideoViewsV2Requests.shareHeatMap(props.shareId)\n );\n\n const aggregateEngagement = Flight.useBasicFetch<Engagement>(\n VideoViewsV2Requests.shareHeatMapAggregation(props.shareId)\n );\n\n const osCount = Flight.useBasicFetch<GroupedAnalyticsCount[]>(\n VideoViewsV2Requests.shareAggregation(props.shareId, 'os_name')\n );\n\n useSetPageMetadata({ title: interactiveMetadata.data ? getPhrase('pageTitle', { video: interactiveMetadata.data?.name }) : null });\n\n useHandleObjectError([ share, interactive, interactiveMetadata ]);\n\n const hasDataLoaded =\n config.hasCompleted &&\n interactiveMetadata.hasCompleted &&\n interactive.data &&\n aggregateEngagement.hasCompleted &&\n engagement.hasCompleted &&\n osCount.hasCompleted &&\n results.hasCompleted &&\n yearGroups.hasCompleted;\n\n const interactiveInsightsAppLinks = getInteractiveInsightsAppLinks(share.data);\n\n const studentGroups = hasDataLoaded && groupStudents(interactive.data, results.data, ScoreThresholdInsights);\n const markingRequired = studentGroups && studentGroups.markingRequired.length > 0;\n\n return (\n <div className='px-3'>\n <InsightsHeader\n video={interactiveMetadata.data}\n tabs={getInsightsInteractiveTabs(share.data, 'insights')}\n hasAnalytics={hasPermissions(PermissionName.ViewCustomerAnalytics)}\n analyticsWebUrl={config.data?.analyticsWebUrl}\n share={share.data}\n yearGroups={yearGroups.data}\n classroom={classroom.data}\n markingRequired={markingRequired}\n />\n\n <InteractiveInsightsOverview\n aggregateEngagement={aggregateEngagement.data}\n individualEngagement={engagement.data}\n interactive={interactive.data}\n interactiveMetadata={interactiveMetadata.data}\n interactiveInsightsAppLinks={interactiveInsightsAppLinks}\n classroomStudents={classroomStudents.items}\n results={results.data}\n osCount={osCount.data}\n config={config.data}\n anonymiseUsers={anonymiseUsers}\n hasDataLoaded={hasDataLoaded}\n share={share.data}\n />\n </div>\n );\n}","import { HashObject } from 'libs/common/react/interfaces';\n\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\n\nimport { getInsightsHeatmapAppLink, getInsightsQuestionsAppLink, getInsightsStudentsAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nexport function getInteractiveInsightsAppLinks(share: Share, params?: HashObject) {\n return {\n resultsAppLink: getInsightsStudentsAppLink(share, params),\n questionsAppLink: getInsightsQuestionsAppLink(share, params),\n heatmapAppLink: getInsightsHeatmapAppLink(share, params)\n };\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { groupStudents } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { ScoreThresholdInsights } from 'libs/shared/constants/ScoreThresholds';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Classroom, Config, CurrentUser, Interactive, InteractiveMetadata, YearGroup } from 'libs/shared/interfaces';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InteractiveInsightsQuestions } from 'apps/my-shares/components/interactive-insights-questions/InteractiveInsightsQuestions';\nimport { useInsightsInteractiveResults } from 'apps/my-shares/hooks/useInsightsInteractiveResults';\nimport { getInsightsInteractiveTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\n\nconst namespace = 'shared.interactiveInsightsQuestionsView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractiveInsightsQuestionsViewProps {\n shareId: string;\n interactionId: string;\n sortBy: SortStudentsBy;\n}\n\nexport function InteractiveInsightsQuestionsView(props: InteractiveInsightsQuestionsViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const { hasPermissions } = usePermissions();\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 && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(props.shareId));\n \n const classroomId = ShareHelper.getClassroomIdFromShare(share.data);\n const classroom = Flight.useBasicFetch<Classroom>(classroomId && ClassroomRequests.getClassroom(classroomId));\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n share.data?.objectId &&\n InteractiveRequests.interactiveMetadata(share.data?.objectId)\n );\n\n const interactive = Flight.useBasicFetch<Interactive>(interactiveMetadata.data?.interactiveId &&\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId));\n\n const results = useInsightsInteractiveResults(props.shareId);\n\n useSetPageMetadata({ title: interactiveMetadata.data ? getPhrase('pageTitle', { video: interactiveMetadata.data?.name }) : null });\n useHandleObjectError([ share, interactive, interactiveMetadata ]);\n\n const hasDataLoaded = interactive.data && interactiveMetadata.data && !!results.data && !!yearGroups.data;\n \n const studentGroups = hasDataLoaded && groupStudents(interactive.data, results.data, ScoreThresholdInsights);\n const markingRequired = studentGroups && studentGroups.markingRequired.length > 0;\n\n return (\n <div className='px-3'>\n <InsightsHeader\n tabs={getInsightsInteractiveTabs(share.data, 'questions')}\n video={interactiveMetadata.data}\n hasAnalytics={hasPermissions(PermissionName.ViewCustomerAnalytics)}\n analyticsWebUrl={config.data?.analyticsWebUrl}\n share={share.data}\n yearGroups={yearGroups.data}\n classroom={classroom.data}\n markingRequired={markingRequired}\n />\n\n <InteractiveInsightsQuestions\n interactive={interactive.data}\n interactiveMetadata={interactiveMetadata.data}\n interactionId={props.interactionId}\n config={config.data}\n sortBy={props.sortBy}\n isFetching={!results.hasCompleted || interactive.isFetching}\n anonymiseUsers={anonymiseUsers}\n results={results.data}\n hasDataLoaded={hasDataLoaded}\n />\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { groupStudents } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { FilterStudentsBy, SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { ScoreThresholdInsights } from 'libs/shared/constants/ScoreThresholds';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Classroom, Config, CurrentUser, Interactive, InteractiveMetadata, YearGroup } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InteractiveInsightsStudents } from 'apps/my-shares/components/interactive-insights-students/InteractiveInsightsStudents';\nimport { useInsightsInteractiveResults } from 'apps/my-shares/hooks/useInsightsInteractiveResults';\nimport { getInsightsInteractiveTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\n\nconst namespace = 'insights.interactiveInsightsStudents';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractiveInsightsStudentsViewProps {\n shareId: string;\n sortBy: SortStudentsBy;\n filterBy: FilterStudentsBy;\n}\n\nexport function InteractiveInsightsStudentsView(props: InteractiveInsightsStudentsViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n const { hasPermissions } = usePermissions();\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 && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(props.shareId));\n \n const classroomId = ShareHelper.getClassroomIdFromShare(share.data);\n const classroom = Flight.useBasicFetch<Classroom>(classroomId && ClassroomRequests.getClassroom(classroomId));\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n share.data?.objectId &&\n InteractiveRequests.interactiveMetadata(share.data.objectId)\n );\n\n const interactive = Flight.useBasicFetch<Interactive>(interactiveMetadata.data?.interactiveId &&\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId));\n\n const results = useInsightsInteractiveResults(props.shareId);\n\n const hasDataLoaded = interactive.data && interactiveMetadata.data && !!results.data && !!yearGroups.data;\n\n const studentGroups = hasDataLoaded && groupStudents(interactive.data, results.data, ScoreThresholdInsights);\n const markingRequired = studentGroups && studentGroups.markingRequired.length > 0;\n\n useSetPageMetadata({ title: interactiveMetadata.data ? getPhrase('pageTitle', { video: interactiveMetadata.data?.name }) : null });\n useHandleObjectError([ share, interactive, interactiveMetadata ]);\n\n function viewStudentResults(\n user: AnonUser,\n interactiveMetadataId: string,\n interactionId?: string\n ) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_STUDENT_RESULTS,\n params: {\n studentId: user.id,\n shareId: props.shareId,\n interactionId,\n sessionId: user.sessionId\n }\n });\n }\n\n return (\n <div className='px-3'>\n <InsightsHeader\n tabs={getInsightsInteractiveTabs(share.data, 'results')}\n video={interactiveMetadata.data}\n hasAnalytics={hasPermissions(PermissionName.ViewCustomerAnalytics)}\n analyticsWebUrl={config.data?.analyticsWebUrl}\n share={share.data}\n yearGroups={yearGroups.data}\n classroom={classroom.data}\n markingRequired={markingRequired}\n />\n\n <InteractiveInsightsStudents\n interactiveMetadata={interactiveMetadata.data}\n viewStudentResults={viewStudentResults}\n interactive={interactive.data}\n results={results.data}\n filterBy={props.filterBy}\n sortBy={props.sortBy}\n isFetching={!results.hasCompleted}\n anonymiseUsers={anonymiseUsers}\n hasDataLoaded={hasDataLoaded}\n config={config.data}\n />\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { InsightStudentList } from 'libs/shared/apps/analytics/components/insight-student-list/InsightStudentList';\nimport { User } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.insightStudentsNotWatched';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightStudentsNotWatchedProps {\n students: User[];\n imageCdnUrl: string;\n imageUrl: string;\n heatmapAppLink: Core.AppLink;\n watchedIds: string[];\n anonymiseUsers: boolean;\n}\n\nexport function InsightStudentsNotWatched(props: InsightStudentsNotWatchedProps) {\n const studentsNotWatched = props.students?.filter(student => !props.watchedIds?.includes(student.id)) || [];\n\n return (\n <InsightCard\n title={getPhrase('title')}\n svgName={cvSvgLibrary.Puzzle}\n svgClassName='bg-light-teal text-teal'\n >\n <InsightStudentList\n students={studentsNotWatched}\n imageCdnUrl={props.imageCdnUrl}\n imageUrl={props.imageUrl}\n description={getPhrase('studentsDisplay')}\n anonymiseUsers={props.anonymiseUsers}\n />\n </InsightCard>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { InsightStudentList } from 'libs/shared/apps/analytics/components/insight-student-list/InsightStudentList';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.insightStudentsWatched';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightWatchedProps {\n students: AnonUser[];\n imageCdnUrl: string;\n heatmapAppLink: Core.AppLink;\n imageUrl: string;\n anonymiseUsers: boolean;\n}\n\nexport function InsightStudentsWatched(props: InsightWatchedProps) {\n return (\n <InsightCard\n title={getPhrase('title')}\n svgName={cvSvgLibrary.Flag}\n svgClassName='bg-light-indigo text-indigo'\n count={props.students.length}\n >\n <InsightStudentList\n students={props.students}\n imageCdnUrl={props.imageCdnUrl}\n imageUrl={props.imageUrl}\n description={getPhrase('studentsDisplay')}\n appLink={props.heatmapAppLink}\n appLinkText={getPhrase('viewAll')}\n anonymiseUsers={props.anonymiseUsers}\n />\n </InsightCard>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialInsights\":\"oHwkx\"};","import React from 'react';\n\nimport styles from './partial-video-insights-overview.scss';\n\nexport function PartialVideoInsightsOverview() {\n return (\n <div>\n <h2 className='h4 w-25 partial-loading-background'> </h2>\n <div className='row g-3 mb-5'>\n <div className='col-12'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n </div>\n\n <h2 className='h4 w-25 partial-loading-background'> </h2>\n <div className='row g-3 mb-5'>\n <div className='col-6'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n <div className='col-6'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { InsightDevices } from 'libs/shared/apps/analytics/components/insights/devices/InsightDevices';\nimport { InsightHeatmap } from 'libs/shared/apps/analytics/components/insights/heatmap/InsightHeatmap';\nimport { InsightStudentsNotWatched } from 'libs/shared/apps/analytics/components/insights/students-not-watched/InsightStudentsNotWatched';\nimport { InsightStudentsWatched } from 'libs/shared/apps/analytics/components/insights/students-watched/InsightStudentsWatched';\nimport { GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { getEngagementRate } from 'libs/shared/apps/analytics/utils/EngagementUtils';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Config, Engagement, User, Video } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { InsightsShareMask } from 'apps/my-shares/components/insights-mask/InsightsShareMask';\nimport { PartialVideoInsightsOverview } from 'apps/my-shares/components/video-insights-overview/partial-loading/PartialVideoInsightsOverview';\n\nconst namespace = 'insights.videoInsightsOverview';\n\ninterface VideoInsightsOverviewProps {\n hasDataLoaded: boolean;\n hasClassrooms: boolean;\n anonymiseUsers: boolean;\n videoInsightsAppLinks: HashObject;\n config: Config;\n video: Video;\n classroomStudents: User[];\n viewers: AnonUser[];\n individualEngagement: Engagement[];\n aggregateEngagement: Engagement;\n share: Share;\n osCount: GroupedAnalyticsCount[];\n}\n\nexport function VideoInsightsOverview(props: VideoInsightsOverviewProps) {\n const hasData = props.hasDataLoaded && !!props.viewers?.length;\n\n function getStudentsList() {\n if (!props.viewers) return [];\n\n return Object.values(props.viewers);\n }\n\n return (\n <>\n {!props.hasDataLoaded && <PartialVideoInsightsOverview />}\n\n {props.hasDataLoaded &&\n <InsightsShareMask video={props.video} hasData={hasData} share={props.share}>\n <section className='mb-5'>\n <h2 className='h4'>\n <Text namespace={namespace} phrase='studentViewing' />\n <span>: {getStudentsList().length}{props.classroomStudents ? `/${props.classroomStudents.length}` : ''}</span>\n </h2>\n <div className='row g-3'>\n {!!props.classroomStudents?.length && (\n <div className='col-12 col-md'>\n <InsightStudentsNotWatched\n students={props.classroomStudents}\n watchedIds={props.viewers?.map(u => u.id)}\n imageCdnUrl={props.config.imageCdnUrl}\n heatmapAppLink={props.videoInsightsAppLinks.heatmapAppLink}\n imageUrl={ImageUrls.Insights.AVATAR}\n anonymiseUsers={props.anonymiseUsers}\n />\n </div>\n )}\n <div className='col-12 col-md'>\n <InsightStudentsWatched\n students={getStudentsList()}\n imageCdnUrl={props.config.imageCdnUrl}\n heatmapAppLink={props.videoInsightsAppLinks.heatmapAppLink}\n imageUrl={ImageUrls.Insights.AVATAR}\n anonymiseUsers={props.anonymiseUsers}\n />\n </div>\n </div>\n </section>\n <section className='mb-5'>\n <h2 className='h4'>\n <Text\n namespace={namespace}\n phrase={props.hasClassrooms ? 'classEngagement' : 'engagement'}\n />\n </h2>\n <div className='row g-3'>\n <div className='col-12 col-md-6'>\n <InsightDevices\n osCount={props.osCount}\n />\n </div>\n <div className='col-12 col-md-6'>\n <InsightHeatmap\n engagement={props.aggregateEngagement}\n heatmapAppLink={props.videoInsightsAppLinks.heatmapAppLink}\n engagementRate={getEngagementRate(props.individualEngagement)}\n />\n </div>\n </div>\n </section>\n </InsightsShareMask>\n }\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Classroom, Config, CurrentUser, Engagement, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { VideoInsightsOverview } from 'apps/my-shares/components/video-insights-overview/VideoInsightsOvervew';\nimport { VideoViewsV2Requests } from 'apps/my-shares/flight-requests/VideoViewsV2Requests';\nimport { useInsightEngagement } from 'apps/my-shares/hooks/useInsightEngagement';\nimport { useInsightsClassroomStudents } from 'apps/my-shares/hooks/useInsightsClassroomStudents';\nimport { getInsightsVideoTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\nimport { getVideoInsightsAppLinks } from 'apps/my-shares/views/video/overview/VideoInsightsOverviewUtils';\n\nconst namespace = 'insights.videoInsightsOverviewView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface VideoInsightsViewProps {\n shareId: string;\n}\n\nexport function VideoInsightsOverviewView(props: VideoInsightsViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const { hasClassrooms } = useSettings(null);\n\n const { hasPermissions } = usePermissions();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(props.shareId));\n\n const classroomId = ShareHelper.getClassroomIdFromShare(share.data);\n const classroom = Flight.useBasicFetch<Classroom>(classroomId && ClassroomRequests.getClassroom(classroomId));\n\n const classroomStudents = useInsightsClassroomStudents(props.shareId);\n\n const videoRequest = share.data && VideoHelper.getVideoRequest(share.data.objectId, share.data.objectTypeId);\n const video = Flight.useBasicFetch<VideoTypes>(videoRequest);\n\n useSetPageMetadata({ title: video.data ? getPhrase('pageTitle', { video: video.data?.name }) : null });\n useHandleObjectError([ share, video ]);\n\n const engagement = Flight.useBasicFetch<Engagement[]>(\n VideoViewsV2Requests.shareHeatMap(props.shareId)\n );\n\n const aggregateEngagement = Flight.useBasicFetch<Engagement>(\n VideoViewsV2Requests.shareHeatMapAggregation(props.shareId)\n );\n\n const osCount = Flight.useBasicFetch<GroupedAnalyticsCount[]>(\n VideoViewsV2Requests.shareAggregation(props.shareId, 'os_name')\n );\n\n const { users, hasCompleted } = useInsightEngagement(props.shareId);\n \n const hasDataLoaded =\n config.hasCompleted &&\n video.hasCompleted &&\n engagement.hasCompleted &&\n aggregateEngagement.hasCompleted &&\n osCount.hasCompleted &&\n yearGroups.data &&\n hasCompleted;\n\n const videoInsightsAppLinks = getVideoInsightsAppLinks(share.data);\n\n return (\n <div className='px-3'>\n <InsightsHeader\n video={video.data}\n classroom={classroom.data}\n tabs={getInsightsVideoTabs(share.data, 'insights')}\n hasAnalytics={hasPermissions(PermissionName.ViewCustomerAnalytics)}\n analyticsWebUrl={config.data?.analyticsWebUrl}\n share={share.data}\n yearGroups={yearGroups.data}\n />\n\n <VideoInsightsOverview\n hasDataLoaded={!!hasDataLoaded}\n hasClassrooms={hasClassrooms}\n anonymiseUsers={anonymiseUsers}\n videoInsightsAppLinks={videoInsightsAppLinks}\n config={config.data}\n video={video.data}\n classroomStudents={classroomStudents.items}\n viewers={users}\n individualEngagement={engagement.data}\n aggregateEngagement={aggregateEngagement.data}\n share={share.data}\n osCount={osCount.data}\n />\n </div>\n );\n}","import { HashObject } from 'libs/common/react/interfaces';\n\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\n\nimport { getInsightsHeatmapAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nexport function getVideoInsightsAppLinks(share: Share, params?: HashObject) {\n return {\n heatmapAppLink: getInsightsHeatmapAppLink(share, params)\n };\n}","import React from 'react';\n\nimport { FilterStudentsBy, SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { MasterType } from 'libs/shared/enums/MasterType';\n\nimport { InsightsTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\nimport { InsightsHeatmapView } from 'apps/my-shares/views/heatmap/InsightsHeatmapView';\nimport { InteractiveInsightsOverviewView } from 'apps/my-shares/views/interactive/overview/InteractiveInsightsOverviewView';\nimport { InteractiveInsightsQuestionsView } from 'apps/my-shares/views/interactive/questions/InteractiveInsightsQuestionsView';\nimport { InteractiveInsightsStudentsView } from 'apps/my-shares/views/interactive/students/InteractiveInsightsStudentsView';\nimport { VideoInsightsOverviewView } from 'apps/my-shares/views/video/overview/VideoInsightsOverviewView';\n\ninterface UseInsightsViewOptions {\n share: Share | undefined;\n tab: InsightsTabs;\n interactionId: string;\n sortBy: SortStudentsBy;\n filterBy: FilterStudentsBy;\n}\n\ntype ShareContext = Omit<UseInsightsViewOptions, 'tab'>;\ntype ViewFn = (ctx: ShareContext) => JSX.Element;\ntype ViewRegistry = Partial<Record<MasterType, Partial<Record<InsightsTabs, ViewFn>>>>;\n\nconst INSIGHTS_VIEWS: ViewRegistry = {\n [MasterType.Video]: {\n insights: ctx => <VideoInsightsOverviewView shareId={ctx.share.shareId} />,\n heatmap: ctx => <InsightsHeatmapView shareId={ctx.share.shareId} />\n },\n [MasterType.Clip]: {\n insights: ctx => <VideoInsightsOverviewView shareId={ctx.share.shareId} />,\n heatmap: ctx => <InsightsHeatmapView shareId={ctx.share.shareId} />\n },\n [MasterType.Interactive]: {\n insights: ctx => <InteractiveInsightsOverviewView shareId={ctx.share.shareId} />,\n heatmap: ctx => <InsightsHeatmapView shareId={ctx.share.shareId} />,\n questions: ctx => (\n <InteractiveInsightsQuestionsView\n interactionId={ctx.interactionId}\n sortBy={ctx.sortBy}\n shareId={ctx.share.shareId}\n />\n ),\n results: ctx => (\n <InteractiveInsightsStudentsView\n filterBy={ctx.filterBy}\n sortBy={ctx.sortBy}\n shareId={ctx.share.shareId}\n />\n )\n }\n};\n\n/**\n * Takes any Share object and a tab, and returns the corresponding \"insights\" view.\n * This is just a utility hook, and as such doesn't need to set the page title directly.\n */\n// eslint-disable-next-line rulesdir/require-view-title\nexport function useInsightsView(options: UseInsightsViewOptions): JSX.Element {\n const { share, tab } = options;\n const viewFn = INSIGHTS_VIEWS[share?.objectTypeId]?.[tab];\n\n if (viewFn)\n return viewFn(options);\n\n return <></>;\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\n\nimport { FilterStudentsBy, SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\n\nimport { getShareOptionsAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport { InsightsTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\nimport { useInsightsView } from 'apps/my-shares/views/base-insights-view/useInsightsView';\n\ninterface BaseInsightsViewProps {\n shareId: string;\n tab: InsightsTabs;\n interactionId: string;\n sortBy: SortStudentsBy;\n filterBy: FilterStudentsBy;\n showShareOptions?: boolean;\n}\n\n/**\n * BaseInsightsView is a generic component that renders different \"insights\" views based on the provided share.\n * The child views will handle setting the page title and other specific details.\n * \n * It also handles the logic for showing share options if `showShareOptions` is true - which is currently used\n * in our used in our LCE emails.\n */\n// eslint-disable-next-line rulesdir/require-view-title\nexport function BaseInsightsView(props: BaseInsightsViewProps): JSX.Element {\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(props.shareId));\n\n const view = useInsightsView({\n share: share.data,\n tab: props.tab,\n interactionId: props.interactionId,\n sortBy: props.sortBy,\n filterBy: props.filterBy\n });\n\n React.useEffect(() => {\n if (!props.showShareOptions) return;\n if (!share.data) return;\n\n const appLink = getShareOptionsAppLink(share.data);\n \n if (!appLink) return;\n\n Core.AppLinkHelper.trigger(appLink);\n }, [ share.data, props.showShareOptions ]);\n\n return (\n <>\n {view}\n </>\n );\n}"],"names":["useFetchInteractiveResults","interactiveMetadataId","requestFilter","shareId","currentUser","interactiveMetadata","interactive","data","interactiveId","shouldFetchResults","I","id","normalizeOptions","namespace","ShareRequests","createShare","url","key","type","invalidationKeys","updateShare","deleteShare","getShare","bootstrapName","getSentShares","params","Object","values","sort","join","normalize","getShareLink","objectId","createShareLink","getPrivacy","getSharesByObjectId","createSharePincode","getPincodeByShareId","getPincodeByCode","code","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","internalServerError","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","CHUNK_SIZE","useBatchFetch","itemIds","getRequest","requests","map","chunk","responses","itemsArr","items","length","reduce","acc","item","isFetching","hasCompleted","useGrowingBatchFetch","objs","_getKey","getKey","obj","useGrowingBatchFetchFunc","fetchItems","options","fetchedItems","Set","setRequests","hasFirstRequestCompleted","unfetchedItems","forEach","current","has","push","add","r","generateCacheKey","flightObjs","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","getPhrase","LanguageService","StudentResultsEmptyState","props","filter","EmptyState","className","src","notCompletedImageUrl","size","markingRequiredImageUrl","helpingHandImageUrl","emptyStateImageUrl","StudentResultsTableFilterButtons","toggleFilter","selectedFilter","updatedFilter","setFilter","getClassName","isFilterSelected","Text","phrase","onClick","fixedTableTheme","table","header","headerRow","headerCell","row","resultsTableTheme","cell","StudentResultsTable","sortBy","setSortBy","filterBy","ref","fixedColumns","results","anonymiseUsers","config","imageCdnUrl","resultColumns","index","refreshTable","ArrayHelper","onRowHover","students","Table","columns","theme","onSelectRow","original","viewStudentResults","user","onRowMouseOver","onRowMouseLeave","enableSort","manualSort","onSort","initialSortBy","enableSlider","scrollIncrement","onSelectCell","column","scrollContainerClassName","PartialInteractiveInsightsStudents","InteractiveInsightsStudents","hasDataLoaded","ImageUrls","useAnonSessions","anonSessions","prev","next","sessionId","anonSession","name","sessionName","useInsightsClassroomStudents","fetch","share","classroomId","recipients","find","recipientTypeId","recipientId","cursor","result","EMPTY_INTERACTIVE_RESULTS","attempts","answeredAt","answers","useInsightsInteractiveResults","classroomStudents","studentHash","s","VideoViewsV2Requests","useInsightEngagement","engagement","userIds","u","userId","users","UserRequests","userMap","viewers","e","percentage","engagementRate","InsightsHeatmapView","useLockContentWidth","hasPermissions","usePermissions","ShareHelper","classroom","ClassroomRequests","videoRequest","VideoHelper","objectTypeId","video","ConfigRequests","yearGroups","CustomerRequests","customerId","pendingReviewsRequest","InteractiveResultsRequests","interactives","metadataId","filters","currentCustomerId","currentUserId","markingRequired","pendingReviewCount","aggregateEngagement","yearGroupsCount","viewKey","PlayerRequests","MediaIdType","useSetPageMetadata","title","InsightsHeader","tabs","MasterType","getInsightsTabs","hasAnalytics","PermissionName","analyticsWebUrl","InsightsHeatmap","individualEngagement","tableDataLoaded","InteractiveInsightsOverviewView","SharedViewModelKeys","InteractiveRequests","osCount","interactiveInsightsAppLinks","resultsAppLink","questionsAppLink","heatmapAppLink","getInteractiveInsightsAppLinks","studentGroups","InteractiveInsightsOverview","InteractiveInsightsQuestionsView","InteractiveInsightsQuestions","interactionId","InteractiveInsightsStudentsView","application","action","studentId","InsightStudentsNotWatched","studentsNotWatched","student","watchedIds","includes","InsightCard","svgName","svgClassName","InsightStudentList","imageUrl","description","InsightStudentsWatched","count","appLink","appLinkText","PartialVideoInsightsOverview","VideoInsightsOverview","hasData","getStudentsList","InsightsShareMask","videoInsightsAppLinks","hasClassrooms","InsightDevices","InsightHeatmap","VideoInsightsOverviewView","useSettings","getVideoInsightsAppLinks","INSIGHTS_VIEWS","insights","ctx","heatmap","questions","BaseInsightsView","view","tab","viewFn","useInsightsView","showShareOptions"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[8957],{27150:(e,t,r)=>{r.d(t,{A:()=>U,$:()=>A});var n=r(32735),a=r(23481),s=r(81886),o=r(15611),i=r(83345),l="userManager.userWizardBackButtons";function c(e){return"status"===e.currentStep?n.createElement(n.Fragment,null):n.createElement(o.F,{className:"btn btn-link me-2",appLink:e.appLinks.userManager},n.createElement(i.x,{namespace:l,phrase:"cancel"}))}var u=r(98269),d=r(24453),m=r(45541),p=r(96728),f="userManager.userWizardHeader";function v(e){var t=(0,m.V)(),r=t.duplicateSets,a=t.hasExistingUsers,s=n.useContext(p.e),l=s.disableNext,c=s.onClickConfirm,v=!!(null==r?void 0:r.length),g=d.O.getCurrentContext().appLink;return g.action===e.appLinks.userUploadStatus.polling.action||g.action===e.appLinks.userUploadStatus.complete.action?n.createElement(n.Fragment,null):function(){switch(g.action){case e.appLinks.userUploadPopup.action:case e.appLinks.userUploadReviewAccounts.action:return!v&&!a;case e.appLinks.userUploadFixDuplicates.action:case e.appLinks.userUploadReviewExistingAccounts.action:return!a;default:return!0}}()?n.createElement(u.Z,{className:l?"disabled":"",variant:"dark",onClick:c,disabled:l},n.createElement(i.x,{namespace:f,phrase:"create"})):n.createElement(o.F,{className:"btn btn-dark ".concat(l?"disabled":""),appLink:function(){switch(g.action){case e.appLinks.userUploadReviewAccounts.action:if(v)return e.appLinks.userUploadFixDuplicates;if(a&&e.canAddExistingUsers)return e.appLinks.userUploadReviewExistingAccounts;case e.appLinks.userUploadFixDuplicates.action:if(a&&e.canAddExistingUsers)return e.appLinks.userUploadReviewExistingAccounts;case e.appLinks.userUploadReviewExistingAccounts.action:if(e.canAddExistingUsers)return e.appLinks.userUploadConfirmation;default:return null}}(),disabled:l},n.createElement(i.x,{namespace:f,phrase:"next"}))}var g=r(19717),b=r(17291),y=r(79352),h=r(76881),E=r(89476);const k={wizardContent:"hHr3C"};var C="userManager.bulkUserUploadWizardLayout",U="bulk:user:upload:nav:lock";function A(e){var t=(0,m.V)(),r=t.users,o=t.setUsers,i=(0,E.f)();return n.useEffect(function(){if(r)return i.lock({id:U,title:a.T.getPhrase(C,"navLockTitle"),text:a.T.getPhrase(C,"navLockBody"),appLinkWhitelist:g.b.getWizardAppLinks(e.appLinks),onConfirmUnlock:function(){o(null)}}),function(){i.unlock(U)};s.Q.C$.trigger(e.appLinks.userManager,{replace:!0})},[]),n.useEffect(function(){(null==r?void 0:r.length)||(i.unlock(U),s.Q.C$.trigger(e.appLinks.userManager,{replace:!0}))},[null==r?void 0:r.length]),r?n.createElement(p.D,null,n.createElement("div",{className:"px-3"},n.createElement(b.C,{title:a.T.getPhrase(C,"bulkUpload"),currentStep:e.currentStep,loaded:!0,continueButton:n.createElement(v,{currentStep:e.currentStep,appLinks:e.appLinks,canAddExistingUsers:e.canAddExistingUsers}),backButton:n.createElement(c,{currentStep:e.currentStep,appLinks:e.appLinks}),breadcrumbs:[{name:a.T.getPhrase(C,"settingsBreadcrumb"),appLink:e.appLinks.settings},{name:a.T.getPhrase(C,e.userType===h.Y.Learner?"studentManager":"staffManager"),appLink:e.appLinks.userManager},{name:a.T.getPhrase(C,"bulkUpload"),active:!0}]}),n.createElement("div",{className:"row g-0"},n.createElement("div",{className:"col-2"},n.createElement(y.a,{steps:g.b.getSteps(e.userType,e.canAddExistingUsers),currentStep:e.currentStep})),n.createElement("div",{className:"col-10 ".concat(k.wizardContent)},e.children)))):n.createElement(n.Fragment,null)}},26055:(e,t,r)=>{r.d(t,{A:()=>n});var n=r(32735).createContext(null)},45541:(e,t,r)=>{r.d(t,{V:()=>u});var n=r(2948),a=r(38143),s=r(39739);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 i(e,t,r){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 r=t.call(e,"string");if("object"!=o(r))return r;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:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function c(e,t){return Object.keys(e||{}).reduce(function(r,n){return t[n]||(r[n]=e[n]),r},{})}var u=function(){var e,t,r,o=(t=(0,n.D)(a.g.BULK_USER_UPLOAD),r=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,s,o,i=[],l=!0,c=!1;try{if(s=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=s.call(r)).done)&&(i.push(n.value),i.length!==t);l=!0);}catch(e){c=!0,a=e}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(c)throw a}}return i}}(t,r)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(e,t):void 0}}(t,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),u=o[0],d=o[1];function m(e){var t=s.P.getNewDuplicates(e);d("duplicateSets",t)}return{users:null==u?void 0:u.users,invalidUsers:null==u?void 0:u.invalidUsers,hasValidatedUsers:!!(null==u?void 0:u.invalidUsers),existingUsersHash:(null==u?void 0:u.existingUsersHash)||{},hasExistingUsers:!!Object.keys((null==u?void 0:u.existingUsersHash)||{}).length,existingUserToAdd:null==u?void 0:u.existingUserToAdd,duplicateSets:null==u?void 0:u.duplicateSets,newUsers:(null===(e=null==u?void 0:u.users)||void 0===e?void 0:e.filter(function(e){var t;return!(null===(t=null==u?void 0:u.existingUsersHash)||void 0===t?void 0:t[e.lookupId])}))||[],setUsers:function(e){d({users:e,invalidUsers:null,existingUsersHash:null}),m(e)},setInvalidUsers:function(e){return d("invalidUsers",e)},setExistingUsers:function(e){return d("existingUsersHash",e)},updateUser:function(e){var t=u.users.map(function(t){return t.lookupId!==e.lookupId?t:e});d({users:t,invalidUsers:c(null==u?void 0:u.invalidUsers,i({},e.lookupId,!0)),existingUsersHash:null==u?void 0:u.existingUsersHash}),m(t)},deleteUsers:function(e){var t,r=e.reduce(function(e,t){return e[t]=!0,e},{}),n=u.users.filter(function(e){return!r[e.lookupId]});d({users:n,invalidUsers:c(null==u?void 0:u.invalidUsers,r),existingUsersHash:c(null==u?void 0:u.existingUsersHash,r),existingUserToAdd:null===(t=null==u?void 0:u.existingUserToAdd)||void 0===t?void 0:t.filter(function(e){return!!(null==u?void 0:u.existingUsersHash[e.lookupId])})}),m(n)}}}},12458:(e,t,r)=>{r.d(t,{I:()=>l});var n=r(1048),a=r(49985),s=r(65858),o=r(58739),i=["userIdMap","params","action","subAction","allUsersSelected","allUsersCount","scrollContainer"],l={getAnalyticsActionName:function(e){if(!(null==e?void 0:e.action))return null;switch(e.action){case"activation":return(null==e?void 0:e.subAction)?"deactivate"===e.subAction?"Deactivate":"Reactivate":"Deactivate / reactivate";case"addToClassroom":return"Add to classroom";case"changeYearGroup":return"Change year level";case"delete":return"Delete user";case"resetEmail":return"Send password reset email";case"activationEmail":return"Send account activation email";case"resetPassword":return"Reset password";case"yearGroupRollover":return"Annual year level rollover";case"removeFromSchool":return"Remove user";default:return null}},onClickNext:function(e,t){if(e){var r={userCount:e.userIdMap.size,step:t},o=l.getAnalyticsActionName(e);o&&(r.action=o);var c=n.t.omit(e,i);Object.keys(c).length&&(r.actionData=c),a.k.logUserAction(r,{location:s.LZ.BulkUserActionsWizard,workflowPhase:s.eu.Next,actionType:s.Vw.BulkAction,entity:s.py.User})}},logYearGroupRolloverEntry:function(e){a.k.logUserAction({action:l.getAnalyticsActionName({action:"yearGroupRollover"})},{entity:s.py.User,actionType:s.Vw.BulkAction,workflowPhase:s.eu.Start,location:e})},getJobStatus:function(e){switch(e){case o.K.Completed:return"Success";case o.K.CompletedWithError:return"Completed with some errors";case o.K.Failed:return"Failed";default:return null}}}},17291:(e,t,r)=>{r.d(t,{C:()=>o});var n=r(32735),a=r(49935),s=r(96728);function o(e){var t=n.useContext(s.e).showButtons;return n.createElement("div",{className:"d-flex justify-content-between"},e.hideHeader?n.createElement("div",null):n.createElement("div",null,n.createElement("h1",{className:"h2"},e.title),e.breadcrumbs&&n.createElement("div",{className:"pb-3"},n.createElement(a.Oo,{breadcrumbs:e.breadcrumbs}))),e.loaded&&t&&n.createElement("div",{className:"d-flex align-items-center"},e.backButton,e.continueButton))}},469:(e,t,r)=>{r.d(t,{q:()=>F});var n=r(32735),a=r(70680),s=r(20354),o=r(49985),i=r(65858),l=r(12458),c=r(11607),u=r(83345);function d(e){var t=e.childComponent;return n.createElement("ul",{className:"m-0 list-unstyled striped-list"},e.objects.map(function(r){return n.createElement(t,{key:r.id,object:r,objectType:e.objectType})}))}var m=r(4594),p=r(76881),f="userManager.wizardCompletedWithError";function v(e){var t;return(null===(t=e.erroredObjects)||void 0===t?void 0:t.length)?n.createElement(u.D.Provider,{value:f},n.createElement("div",{className:"pb-3"},n.createElement("div",{className:"d-flex justify-content-between"},n.createElement("div",null,n.createElement("h2",{className:"h4 mb-3"},n.createElement(u.x,{phrase:"Create"===e.actionVerb?"headingCreate":"headingAction"})),n.createElement("p",null,n.createElement(u.x,{phrase:e.objectType===m.E.User?"Create"===e.actionVerb?e.userType===p.Y.Learner?"totalCreatedStudents":"totalCreatedStaff":e.userType===p.Y.Learner?"totalActionedStudents":"totalActionedStaff":e.objectType===m.E.Video?"totalActionedVideos":"totalActionedItems",options:{totalUpdated:e.totalObjects-e.totalErroredResults,totalObjects:e.totalObjects}})))),n.createElement("div",{className:"d-flex align-items-cetner justify-content-between mb-2"},n.createElement("p",{className:"fw-semibold mb-0"},n.createElement(u.x,{phrase:"Create"===e.actionVerb?"unsuccessfulCreations":"unsuccessfulActions",options:{smartCount:e.totalErroredResults}})),!!e.actionButton&&n.createElement(c.L,{className:"info-link",onClick:function(){return e.actionButton.onClick(e.erroredObjects)}},e.actionButton.text)),n.createElement(d,{objects:e.erroredObjects,objectType:e.objectType,childComponent:function(t){return e.getErrorListItem(t.object)}}))):n.createElement(n.Fragment,null)}var g=r(98269),b=r(12778);const y={imageWidth:"Gjry1"};var h="userManager.wizardFailed";function E(e){var t=b.o.getSupportRequestUrl();return n.createElement("div",{className:"d-flex flex-column align-items-center"},n.createElement("div",{className:"".concat(y.imageWidth," text-center py-4")},n.createElement("img",{className:"img-fluid",src:e.failedImageUrl})),n.createElement("h2",{className:"h3"},n.createElement(u.x,{namespace:h,phrase:"heading"})),n.createElement("p",{className:"mb-0"},n.createElement(u.x,{namespace:h,phrase:"Create"===e.actionVerb?"failedCreate":"failedAction"})),!!t&&n.createElement("p",null,n.createElement(u.x,{namespace:h,phrase:"contactSupport",options:{href:t,linkClass:"info-link"}})),e.onClickTryAgain&&n.createElement(g.Z,{variant:"outline-dark",className:t?"":"mt-3",onClick:e.onClickTryAgain},n.createElement(u.x,{namespace:h,phrase:"tryAgain"})))}var k=r(15611);const C={imageWidth:"picjj"};var U="userManager.wizardSucceeded";function A(e){return n.createElement("div",{className:"d-flex flex-column align-items-center"},n.createElement("div",{className:"".concat(C.imageWidth," text-center pt-4 pb-2")},n.createElement("img",{className:"img-fluid",src:e.successImageUrl})),n.createElement("h2",{className:"h3"},n.createElement(u.x,{namespace:U,phrase:"success"})),n.createElement("p",{className:"text-center",dangerouslySetInnerHTML:{__html:e.message}}),e.finishAppLink&&n.createElement(k.F,{className:"btn btn-dark",appLink:e.finishAppLink,onClick:e.onFinish},n.createElement(u.x,{namespace:U,phrase:"finish"})))}var S,x=r(96728),j=r(58739),w=r(38389);!function(e){e[e.All=0]="All",e[e.NoAction=1]="NoAction",e[e.Succeed=2]="Succeed",e[e.Failed=3]="Failed"}(S||(S={}));var T=r(60115),L=r(64818),N=r(89476);function I(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function F(e){var t,r,c=(0,a.I0)(),u=function(e,t){var r,n=(0,a.I0)(),o=function(r){return t(e,S.Failed,r)},i=(0,T.K)(o,function(e){return s.a.getFetch(n)(o(e))}),l=i.items,c=i.isFetching,u=null!==(r=null==l?void 0:l.map(function(e){return!e.objectData&&e.metadata&&"firstname"in e.metadata?{name:e.metadata.firstname,surname:e.metadata.surname,userType:L.l.getUserType(e.metadata),username:e.metadata.username,errorCode:e.status}:Object.assign(Object.assign({},e.objectData),{errorCode:e.status})}))&&void 0!==r?r:[];return{isFetching:c,objects:u,count:u.length}}(e.job.id,e.getResultsRequest),d=(0,N.f)(),m=n.useContext(x.e),p=m.setShowButtons,f=m.showButtons,g=(t=n.useState(!1),r=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,s,o,i=[],l=!0,c=!1;try{if(s=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=s.call(r)).done)&&(i.push(n.value),i.length!==t);l=!0);}catch(e){c=!0,a=e}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(c)throw a}}return i}}(t,r)||function(e,t){if(e){if("string"==typeof e)return I(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?I(e,t):void 0}}(t,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),b=g[0],y=g[1];return n.useEffect(function(){e.job.type===w.m.RolloverYearGroup&&c({type:s.a.Actions.INVALIDATE,keys:["year:group:rollover:status"],request:null})},[e.job.type]),n.useEffect(function(){var t;if(!e.preventLoggingAnalytics&&!b){y(!0);var r=Object.assign(Object.assign({},null!==(t=e.analyticsData)&&void 0!==t?t:{}),{id:e.job.id,userCount:e.summary.totalProcessed,totalSucceeded:e.summary.totalSucceeded,totalErrored:e.summary.totalErrored,totalNoAction:e.summary.totalNoAction}),n=l.I.getJobStatus(e.job.status);n&&(r.status=n);var a={workflowPhase:i.eu.Complete};e.analyticsOptions&&(a=o.k.mergeOptions(e.analyticsOptions,a)),o.k.logUserAction(r,a)}},[e.preventLoggingAnalytics,b]),n.useEffect(function(){e.navLockId&&d.unlock(e.navLockId)},[]),n.useEffect(function(){switch(e.job.status){case j.K.Completed:case j.K.Failed:f&&p(!1);break;case j.K.CompletedWithError:f||p(!0)}},[e.job.status]),e.job.status===j.K.Completed?n.createElement(A,{message:e.actionSucceededMessage,successImageUrl:e.successImageUrl,actionVerb:e.actionVerb,finishAppLink:e.finishAppLink,onFinish:e.onFinish}):e.job.status===j.K.CompletedWithError?n.createElement(v,{erroredObjects:u.objects,totalObjects:e.objectCount,totalErroredResults:u.count,userType:null==e?void 0:e.userType,currentUser:e.currentUser,imageCdnUrl:e.imageCdnUrl,actionVerb:e.actionVerb,objectType:e.objectType,getErrorListItem:e.getErrorListItem,actionButton:e.errorActionButton}):n.createElement(E,{onClickTryAgain:e.onClickTryAgain,failedImageUrl:e.failedImageUrl,actionVerb:e.actionVerb})}},79352:(e,t,r)=>{r.d(t,{a:()=>l});var n=r(32735),a=r(23481),s=r(15611),o=a.T.encloseNamespace("shared.wizardStepList");function i(e){var t,r,a,o,i,l=n.createElement(n.Fragment,null,n.createElement("div",{className:"d-flex"},!e.hideStepNumber&&n.createElement("div",{className:"flex-shrink-0 flex-grow-0"},"".concat(e.index+1,".")," "),n.createElement("div",null,e.text)),e.subText&&n.createElement("div",{className:"ms-2 ps-1 pt-1"},e.subText)),c="px-2 py-1 mb-1 rounded d-inline-block";return e.isSelected&&(c+=" ".concat((null===(t=e.theme)||void 0===t?void 0:t.isSelectedOverride)||"bg-light-blue fw-semibold")),!e.isSelected&&e.isCompleted&&(c+=" ".concat((null===(r=e.theme)||void 0===r?void 0:r.isCompletedOverride)||"text-info")),n.createElement("li",{className:null===(a=e.theme)||void 0===a?void 0:a.item},e.isCompleted&&e.appLink?n.createElement(s.F,{appLink:e.appLink,className:"".concat(c," ").concat((null===(o=e.theme)||void 0===o?void 0:o.itemContent)||"")},l):n.createElement("div",{className:"".concat(c," ").concat((null===(i=e.theme)||void 0===i?void 0:i.itemContent)||"")},l))}function l(e){var t,r=e.steps.reduce(function(t,r,n){return r.id===e.currentStep&&(t=n+1),t},1);return n.createElement(n.Fragment,null,n.createElement("h2",{className:"h4"},o("stepNumber",{currentStep:r,totalSteps:e.steps.length})),n.createElement("ol",{className:"list-unstyled ".concat((null===(t=e.theme)||void 0===t?void 0:t.itemsContainer)||"")},e.steps.map(function(t,a){var s=t.id===e.currentStep,o=r>a+1;return n.createElement(i,{index:a,key:t.id,text:t.text,subText:t.subText,isSelected:s,isCompleted:o,appLink:!e.disableAppLinks&&t.appLink,disabled:t.disabled,theme:e.theme})})))}},58739:(e,t,r)=>{var n;r.d(t,{K:()=>n}),function(e){e[e.Submitted=0]="Submitted",e[e.Queued=1]="Queued",e[e.Pending=2]="Pending",e[e.InProgress=3]="InProgress",e[e.Completed=4]="Completed",e[e.CompletedWithError=5]="CompletedWithError",e[e.Failed=6]="Failed"}(n||(n={}))},94644:(e,t,r)=>{r.d(t,{r:()=>u});var n=r(50242),a=r(81886),s=r(67058),o=r(14553),i=r(49267),l=r(49075),c={notFound:s.d,forbidden:{rating:o.q,yearLevel:o.q,region:i.a,privacy:o.q},badRequest:l._,internalServerError:l._};function u(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var s;s="number"==typeof e?e:e.status;var o=Object.assign(Object.assign({},c),t);s&&a.Q.Ry.isStatusCodeError(s)&&(s!==n.o.InternalServer?s!==n.o.NotFound?s!==n.o.Forbidden?r.badRequest||a.Q.Ry.throw(new o.badRequest):r.forbidden||a.Q.Ry.throw(new o.forbidden.privacy):r.notFound||a.Q.Ry.throw(new o.notFound):r.internalServerError||a.Q.Ry.throw(new l._))}}},91286:(e,t,r)=>{r.d(t,{v:()=>o});var n=r(32735),a=r(94644);function s(e){return e.map(function(e){return e.statusCode}).join(":")}function o(e,t,r){var o=Array.isArray(e)?e:[e];(0,n.useEffect)(function(){o.forEach(function(e){(0,a.r)(e.statusCode,t,r)})},[s(o),t,r])}},60115:(e,t,r)=>{r.d(t,{K:()=>c});var n=r(32735),a=r(50242),s=r(91967),o=400,i=r(45719);function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function c(e,t,r,c,u,d){var m,p,f,v,g=(m=(0,n.useState)(0),p=2,function(e){if(Array.isArray(e))return e}(m)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,s,o,i=[],l=!0,c=!1;try{if(s=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=s.call(r)).done)&&(i.push(n.value),i.length!==t);l=!0);}catch(e){c=!0,a=e}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(c)throw a}}return i}}(m,p)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(e,t):void 0}}(m,p)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),b=g[0],y=g[1],h=t,E=(0,i.P)(function(t){if(!e)return null;var r=e(t);return r?r.key:null},c,u);return f={fetchNextPage:function(){if(t&&e&&E)return y(function(e){return e+1}),h(E.nextCursor)},hasMore:!!(null==E?void 0:E.nextCursor),isFetching:null==E?void 0:E.isFetching,scrollContainer:d},v=function(){if(!f.isFetching){if(f.scrollContainer){var e=f.scrollContainer;if(e.getBoundingClientRect().height+e.scrollTop<e.scrollHeight-o)return}else if(window.innerHeight+document.documentElement.scrollTop<document.documentElement.scrollHeight-o)return;f.fetchNextPage()}},(0,n.useEffect)(function(){var e=s.q.throttle(v,200),t=f.scrollContainer||window;return f.hasMore&&t.addEventListener("scroll",e),function(){return t.removeEventListener("scroll",e)}},[f.hasMore,f.fetchNextPage,f.scrollContainer]),(0,n.useEffect)(function(){E&&E.shouldInitialFetch&&t&&(h(),y(function(e){return e+1}))},[null==E?void 0:E.shouldInitialFetch,t]),(0,n.useEffect)(function(){var e,t;if((null==E?void 0:E.statusCode)&&s.q.isFunction(r)){var n=+(null===(t=null===(e=E.statusCode)||void 0===e?void 0:e.toString())||void 0===t?void 0:t.substr(0,1));n!==a.k.ClientError&&n!==a.k.ServerError||r(b,E.statusCode)}},[null==E?void 0:E.statusCode]),{items:null==E?void 0:E.items,hasMore:!!(null==E?void 0:E.nextCursor),nextCursor:null==E?void 0:E.nextCursor,isFetching:null==E?void 0:E.isFetching,totalItems:null==E?void 0:E.totalItems,hasFirstPageCompleted:null==E?void 0:E.hasFirstPageCompleted}}},18957:(e,t,r)=>{r.r(t),r.d(t,{BulkUserUploadStatusCompleteView:()=>j});var n=r(32735),a=r(70680),s=r(23481),o=r(81886),i=r(20354),l=r(65858),c=r(27150),u=r(26055),d=r(43820),m=r(45541),p=r(149),f=r(19717),v=r(469),g=r(4594),b=r(76881),y=r(39151),h=r(31949),E=r(91286),k=r(79612),C=r(99742),U=r(29613),A=r(18087),S="userManager.bulkUserUploadStatusCompleted",x=s.T.encloseNamespace(S);function j(e){var t,r,j=(0,m.V)(),w=j.users,T=j.existingUserToAdd,L=j.existingUsersHash,N=(0,A.Y)(e.userType),I=i.a.useBasicFetch(h.N.currentUser()),F=i.a.useBasicFetch(y.L.config()),O=i.a.useBasicFetch(U.q.getJob(e.jobId)),R=i.a.useBasicFetch(U.q.getJobSummary(e.jobId));(0,E.v)(O),(0,k.M)({title:s.T.getPhrase(S,"pageTitle")});var P=(0,a.I0)(),B=p.b.useCreateJobErrorAlert(),M=f.b.getNewUsers(w,L);function V(t){o.Q.C$.trigger(Object.assign(Object.assign({},N.userUploadStatus.polling),{params:{userType:e.userType,jobId:t.id}}))}var W=(null!==(t=null==M?void 0:M.length)&&void 0!==t?t:0)+(null!==(r=null==T?void 0:T.length)&&void 0!==r?r:0),q=!!(O.data&&F.data&&I.data&&R.data);return n.createElement(u.A.Provider,{value:d.a.Primary},n.createElement(c.$,{appLinks:N,userType:e.userType,currentStep:"status",canAddExistingUsers:!0},!!q&&n.createElement(v.q,{job:O.data,summary:R.data,objectCount:w.length,objectType:g.E.User,userType:e.userType,finishAppLink:N.userManager,imageCdnUrl:F.data.imageCdnUrl,successImageUrl:C.W.SUCCESS,failedImageUrl:C.W.WIZARD_ERROR,currentUser:I.data,onClickTryAgain:function(){var t=f.b.getJobData({users:M,existingUsers:T,customerId:I.data.customerId,userType:e.userType});i.a.fetch(P,U.q.createJob(t,V,B))},getResultsRequest:U.q.getJobResults,actionSucceededMessage:e.userType===b.Y.Learner?x("createStudentsSuccess",{smartCount:W}):x("createStaffSuccess",{smartCount:W}),navLockId:c.A,actionVerb:"Create",analyticsOptions:{location:l.LZ.BulkUserUploadWizard,entity:l.py.User,actionType:l.Vw.Create,descriptor:l.yh.Bulk},preventLoggingAnalytics:!w,getErrorListItem:function(e){return p.b.getErrorListItem(e,F.data.imageCdnUrl,I.data)}})))}},29613:(e,t,r)=>{r.d(t,{q:()=>o});var n=r(99940),a=r(97395),s=r(149),o={createJob:function(e,t,r){return{url:"{gateway}/v1/batch/jobs",key:"create:job",type:n.k.POST,data:e,success:t,error:r}},getJobs:function(e){var t={},r=[],n=[];return e.cursor&&(t.cursor=e.cursor),e.sort&&("oldest"===e.sort?t.order="ASC":t.order="DESC"),e.bulkActionType?(r=Array.isArray(e.bulkActionType)?e.bulkActionType:[e.bulkActionType],t.type=r):t.type=s.O,e.userType&&(n=Array.isArray(e.userType)?e.userType:[e.userType],t.dataType=n),{url:a._.urlBuilder("{gateway}/v1/batch/jobs",t),key:"batch:jobs:".concat(e.cursor,":").concat(e.sort,":").concat(r.sort().join(":"),":").concat(n.sort().join(":"))}},getJob:function(e){return{url:"{gateway}/v1/batch/jobs/".concat(e),key:"job:".concat(e)}},getJobProgress:function(e,t,r){return{url:"{gateway}/v1/batch/jobs/".concat(e,"/progress"),key:"job:".concat(e,":progress"),invalidationKeys:"job:".concat(e,":progress"),success:t,error:r}},getJobResults:function(e,t,r,n,s){var o={status:t};return r&&(o.cursor=r),{url:a._.urlBuilder("{gateway}/v1/batch/jobs/".concat(e,"/results"),o),key:"job:".concat(e,":results:").concat(t,":").concat(r),success:n,error:s}},getYearGroupRolloverStatus:function(e){return{url:"{gateway}/v1/batch/validations/customers/".concat(e,"/year-group-roll-over"),key:"year:group:rollover:status"}},sendJobReports:function(e){return{url:"{gateway}/v1/batch/results/export",key:"send:job:reports:".concat(e.sort().join(":")),type:n.k.POST,data:{jobIds:e}}},getJobSummary:function(e){return{url:"{gateway}/v1/batch/jobs/".concat(e,"/summary"),key:"job:summary:".concat(e)}}}}}]);
|
|
2
|
-
//# sourceMappingURL=8957-
|
|
2
|
+
//# sourceMappingURL=8957-b3f0dbb85d-lite.chunk.js.map
|