@clickview/lite 0.83.0-rc.0 → 0.83.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.
Files changed (153) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/css/2074-lite-ac8da6c78b.chunk.css +4 -0
  3. package/dist/languages/en.json +1 -1
  4. package/dist/scripts/{1199-01cc084886-lite.chunk.js → 1199-da55d69853-lite.chunk.js} +1 -1
  5. package/dist/scripts/{1199-01cc084886-lite.chunk.js.map → 1199-da55d69853-lite.chunk.js.map} +1 -1
  6. package/dist/scripts/1202-d96ad80884-lite.chunk.js +2 -0
  7. package/dist/scripts/1202-d96ad80884-lite.chunk.js.map +1 -0
  8. package/dist/scripts/{4208-0706461da6-lite.chunk.js → 1336-1826f6e582-lite.chunk.js} +2 -2
  9. package/dist/scripts/1336-1826f6e582-lite.chunk.js.map +1 -0
  10. package/dist/scripts/1938-c52383e98d-lite.chunk.js +3 -0
  11. package/dist/scripts/1938-c52383e98d-lite.chunk.js.map +1 -0
  12. package/dist/scripts/2074-39b86b9a22-lite.chunk.js +2 -0
  13. package/dist/scripts/2074-39b86b9a22-lite.chunk.js.map +1 -0
  14. package/dist/scripts/{2664-907153c03b-lite.chunk.js → 2664-87c8cbfa7f-lite.chunk.js} +2 -2
  15. package/dist/scripts/2664-87c8cbfa7f-lite.chunk.js.map +1 -0
  16. package/dist/scripts/2888-2596e106a5-lite.chunk.js +2 -0
  17. package/dist/scripts/2888-2596e106a5-lite.chunk.js.map +1 -0
  18. package/dist/scripts/289-669c0c8222-lite.chunk.js +2 -0
  19. package/dist/scripts/289-669c0c8222-lite.chunk.js.map +1 -0
  20. package/dist/scripts/{9911-8892b6dbfe-lite.chunk.js → 3612-8c6423bd51-lite.chunk.js} +2 -2
  21. package/dist/scripts/{9911-8892b6dbfe-lite.chunk.js.map → 3612-8c6423bd51-lite.chunk.js.map} +1 -1
  22. package/dist/scripts/3836-bf1359bed7-lite.chunk.js +3 -0
  23. package/dist/scripts/3836-bf1359bed7-lite.chunk.js.map +1 -0
  24. package/dist/scripts/3840-98c79fc0d8-lite.chunk.js +2 -0
  25. package/dist/scripts/3840-98c79fc0d8-lite.chunk.js.map +1 -0
  26. package/dist/scripts/3893-2856933742-lite.chunk.js +2 -0
  27. package/dist/scripts/3893-2856933742-lite.chunk.js.map +1 -0
  28. package/dist/scripts/4006-9dfe9cec1b-lite.chunk.js +3 -0
  29. package/dist/scripts/4006-9dfe9cec1b-lite.chunk.js.map +1 -0
  30. package/dist/scripts/{4177-2d876c7b14-lite.chunk.js → 4177-285ddf9ae3-lite.chunk.js} +2 -2
  31. package/dist/scripts/4177-285ddf9ae3-lite.chunk.js.map +1 -0
  32. package/dist/scripts/{4578-27028d26eb-lite.chunk.js → 4578-7578bcf17a-lite.chunk.js} +2 -2
  33. package/dist/scripts/4578-7578bcf17a-lite.chunk.js.map +1 -0
  34. package/dist/scripts/{4621-7fb0a05bcb-lite.chunk.js → 4621-1f79d94416-lite.chunk.js} +2 -2
  35. package/dist/scripts/4621-1f79d94416-lite.chunk.js.map +1 -0
  36. package/dist/scripts/4806-f36469abb7-lite.chunk.js +2 -0
  37. package/dist/scripts/4806-f36469abb7-lite.chunk.js.map +1 -0
  38. package/dist/scripts/{4948-ba684e5f4f-lite.chunk.js → 4948-de1c75e7fb-lite.chunk.js} +1 -1
  39. package/dist/scripts/{4948-ba684e5f4f-lite.chunk.js.map → 4948-de1c75e7fb-lite.chunk.js.map} +1 -1
  40. package/dist/scripts/4985-bdfa839f8f-lite.chunk.js +2 -0
  41. package/dist/scripts/4985-bdfa839f8f-lite.chunk.js.map +1 -0
  42. package/dist/scripts/{5554-f1f3baf822-lite.chunk.js → 5554-17bb3b86fc-lite.chunk.js} +2 -2
  43. package/dist/scripts/5554-17bb3b86fc-lite.chunk.js.map +1 -0
  44. package/dist/scripts/5579-a9c152057f-lite.chunk.js +2 -0
  45. package/dist/scripts/5579-a9c152057f-lite.chunk.js.map +1 -0
  46. package/dist/scripts/5712-e784cfe89c-lite.chunk.js +2 -0
  47. package/dist/scripts/5712-e784cfe89c-lite.chunk.js.map +1 -0
  48. package/dist/scripts/6070-a390fdce21-lite.chunk.js +2 -0
  49. package/dist/scripts/6070-a390fdce21-lite.chunk.js.map +1 -0
  50. package/dist/scripts/{6909-ba75701156-lite.chunk.js → 6909-a9b8930e37-lite.chunk.js} +2 -2
  51. package/dist/scripts/6909-a9b8930e37-lite.chunk.js.map +1 -0
  52. package/dist/scripts/7401-833bc4a088-lite.chunk.js +2 -0
  53. package/dist/scripts/7401-833bc4a088-lite.chunk.js.map +1 -0
  54. package/dist/scripts/{7617-211f084b70-lite.chunk.js → 7617-9d34c841e6-lite.chunk.js} +2 -2
  55. package/dist/scripts/7617-9d34c841e6-lite.chunk.js.map +1 -0
  56. package/dist/scripts/7742-342db3ce4f-lite.chunk.js +2 -0
  57. package/dist/scripts/7742-342db3ce4f-lite.chunk.js.map +1 -0
  58. package/dist/scripts/7843-f6033528ce-lite.chunk.js +2 -0
  59. package/dist/scripts/7843-f6033528ce-lite.chunk.js.map +1 -0
  60. package/dist/scripts/787-dcb3a0a26c-lite.chunk.js +2 -0
  61. package/dist/scripts/787-dcb3a0a26c-lite.chunk.js.map +1 -0
  62. package/dist/scripts/8077-bfb3530f78-lite.chunk.js +3 -0
  63. package/dist/scripts/8077-bfb3530f78-lite.chunk.js.map +1 -0
  64. package/dist/scripts/{3392-f7f8cb65e5-lite.chunk.js → 8133-ffcff3b7fc-lite.chunk.js} +3 -3
  65. package/dist/scripts/8133-ffcff3b7fc-lite.chunk.js.map +1 -0
  66. package/dist/scripts/8364-ff63447d36-lite.chunk.js +3 -0
  67. package/dist/scripts/8364-ff63447d36-lite.chunk.js.map +1 -0
  68. package/dist/scripts/8672-6967ce8a23-lite.chunk.js +2 -0
  69. package/dist/scripts/8672-6967ce8a23-lite.chunk.js.map +1 -0
  70. package/dist/scripts/{9042-fd7e79b891-lite.chunk.js → 9042-fdc5ecb459-lite.chunk.js} +1 -1
  71. package/dist/scripts/{9042-fd7e79b891-lite.chunk.js.map → 9042-fdc5ecb459-lite.chunk.js.map} +1 -1
  72. package/dist/scripts/9295-4242401e60-lite.chunk.js +2 -0
  73. package/dist/scripts/9295-4242401e60-lite.chunk.js.map +1 -0
  74. package/dist/scripts/{9742-3f6b75484a-lite.chunk.js → 9742-5f99d74bb0-lite.chunk.js} +2 -2
  75. package/dist/scripts/9742-5f99d74bb0-lite.chunk.js.map +1 -0
  76. package/dist/scripts/979-4b893e5603-lite.chunk.js +2 -0
  77. package/dist/scripts/979-4b893e5603-lite.chunk.js.map +1 -0
  78. package/dist/scripts/9911-9272b96e46-lite.chunk.js +2 -0
  79. package/dist/scripts/9911-9272b96e46-lite.chunk.js.map +1 -0
  80. package/dist/scripts/bundle-dcea87749e.min.js +3 -0
  81. package/dist/scripts/{bundle-f926852f33.min.js.map → bundle-dcea87749e.min.js.map} +1 -1
  82. package/package.json +1 -1
  83. package/dist/scripts/1074-fdce06d863-lite.chunk.js +0 -2
  84. package/dist/scripts/1074-fdce06d863-lite.chunk.js.map +0 -1
  85. package/dist/scripts/1938-e067e06dac-lite.chunk.js +0 -3
  86. package/dist/scripts/1938-e067e06dac-lite.chunk.js.map +0 -1
  87. package/dist/scripts/2664-907153c03b-lite.chunk.js.map +0 -1
  88. package/dist/scripts/2970-024b1dd55d-lite.chunk.js +0 -2
  89. package/dist/scripts/2970-024b1dd55d-lite.chunk.js.map +0 -1
  90. package/dist/scripts/3392-f7f8cb65e5-lite.chunk.js.map +0 -1
  91. package/dist/scripts/3836-2c82a9fbf7-lite.chunk.js +0 -3
  92. package/dist/scripts/3836-2c82a9fbf7-lite.chunk.js.map +0 -1
  93. package/dist/scripts/3840-59e5e53cda-lite.chunk.js +0 -2
  94. package/dist/scripts/3840-59e5e53cda-lite.chunk.js.map +0 -1
  95. package/dist/scripts/4177-2d876c7b14-lite.chunk.js.map +0 -1
  96. package/dist/scripts/4208-0706461da6-lite.chunk.js.map +0 -1
  97. package/dist/scripts/4578-27028d26eb-lite.chunk.js.map +0 -1
  98. package/dist/scripts/4598-8f5266e4c2-lite.chunk.js +0 -2
  99. package/dist/scripts/4598-8f5266e4c2-lite.chunk.js.map +0 -1
  100. package/dist/scripts/4621-7fb0a05bcb-lite.chunk.js.map +0 -1
  101. package/dist/scripts/4806-a6f31d703c-lite.chunk.js +0 -2
  102. package/dist/scripts/4806-a6f31d703c-lite.chunk.js.map +0 -1
  103. package/dist/scripts/4985-7e02d5df40-lite.chunk.js +0 -2
  104. package/dist/scripts/4985-7e02d5df40-lite.chunk.js.map +0 -1
  105. package/dist/scripts/5554-f1f3baf822-lite.chunk.js.map +0 -1
  106. package/dist/scripts/5712-7cee70c6b4-lite.chunk.js +0 -2
  107. package/dist/scripts/5712-7cee70c6b4-lite.chunk.js.map +0 -1
  108. package/dist/scripts/6550-d99e0ed75d-lite.chunk.js +0 -2
  109. package/dist/scripts/6550-d99e0ed75d-lite.chunk.js.map +0 -1
  110. package/dist/scripts/6909-ba75701156-lite.chunk.js.map +0 -1
  111. package/dist/scripts/7148-1ced1b5dce-lite.chunk.js +0 -2
  112. package/dist/scripts/7148-1ced1b5dce-lite.chunk.js.map +0 -1
  113. package/dist/scripts/7568-55e9b01367-lite.chunk.js +0 -3
  114. package/dist/scripts/7568-55e9b01367-lite.chunk.js.map +0 -1
  115. package/dist/scripts/7617-211f084b70-lite.chunk.js.map +0 -1
  116. package/dist/scripts/7742-514844bd1a-lite.chunk.js +0 -2
  117. package/dist/scripts/7742-514844bd1a-lite.chunk.js.map +0 -1
  118. package/dist/scripts/7843-cbebf1a786-lite.chunk.js +0 -2
  119. package/dist/scripts/7843-cbebf1a786-lite.chunk.js.map +0 -1
  120. package/dist/scripts/8077-870bd8e245-lite.chunk.js +0 -3
  121. package/dist/scripts/8077-870bd8e245-lite.chunk.js.map +0 -1
  122. package/dist/scripts/843-4dbc5df109-lite.chunk.js +0 -3
  123. package/dist/scripts/843-4dbc5df109-lite.chunk.js.map +0 -1
  124. package/dist/scripts/8735-e74a148502-lite.chunk.js +0 -2
  125. package/dist/scripts/8735-e74a148502-lite.chunk.js.map +0 -1
  126. package/dist/scripts/8856-2d332952ae-lite.chunk.js +0 -2
  127. package/dist/scripts/8856-2d332952ae-lite.chunk.js.map +0 -1
  128. package/dist/scripts/904-2784e45cfc-lite.chunk.js +0 -2
  129. package/dist/scripts/904-2784e45cfc-lite.chunk.js.map +0 -1
  130. package/dist/scripts/9295-eb130a0b17-lite.chunk.js +0 -2
  131. package/dist/scripts/9295-eb130a0b17-lite.chunk.js.map +0 -1
  132. package/dist/scripts/9528-4e954d9dff-lite.chunk.js +0 -2
  133. package/dist/scripts/9528-4e954d9dff-lite.chunk.js.map +0 -1
  134. package/dist/scripts/9742-3f6b75484a-lite.chunk.js.map +0 -1
  135. package/dist/scripts/979-6a70a0e616-lite.chunk.js +0 -2
  136. package/dist/scripts/979-6a70a0e616-lite.chunk.js.map +0 -1
  137. package/dist/scripts/bundle-f926852f33.min.js +0 -3
  138. /package/dist/css/{9528-lite-4a892bdbf2.chunk.css → 1202-lite-4a892bdbf2.chunk.css} +0 -0
  139. /package/dist/css/{7148-lite-856c02f000.chunk.css → 2888-lite-856c02f000.chunk.css} +0 -0
  140. /package/dist/css/{904-lite-2435a34b13.chunk.css → 289-lite-2435a34b13.chunk.css} +0 -0
  141. /package/dist/css/{9911-lite-2b4142796a.chunk.css → 3612-lite-2b4142796a.chunk.css} +0 -0
  142. /package/dist/css/{8856-lite-f8e496136d.chunk.css → 5579-lite-f8e496136d.chunk.css} +0 -0
  143. /package/dist/css/{6550-lite-45dc286aab.chunk.css → 6070-lite-45dc286aab.chunk.css} +0 -0
  144. /package/dist/css/{2970-lite-5a317efacd.chunk.css → 787-lite-5a317efacd.chunk.css} +0 -0
  145. /package/dist/css/{843-lite-db31e36b79.chunk.css → 8364-lite-db31e36b79.chunk.css} +0 -0
  146. /package/dist/css/{8735-lite-856c02f000.chunk.css → 9911-lite-856c02f000.chunk.css} +0 -0
  147. /package/dist/scripts/{1938-e067e06dac-lite.chunk.js.LICENSE.txt → 1938-c52383e98d-lite.chunk.js.LICENSE.txt} +0 -0
  148. /package/dist/scripts/{3392-f7f8cb65e5-lite.chunk.js.LICENSE.txt → 3836-bf1359bed7-lite.chunk.js.LICENSE.txt} +0 -0
  149. /package/dist/scripts/{3836-2c82a9fbf7-lite.chunk.js.LICENSE.txt → 4006-9dfe9cec1b-lite.chunk.js.LICENSE.txt} +0 -0
  150. /package/dist/scripts/{7568-55e9b01367-lite.chunk.js.LICENSE.txt → 8077-bfb3530f78-lite.chunk.js.LICENSE.txt} +0 -0
  151. /package/dist/scripts/{8077-870bd8e245-lite.chunk.js.LICENSE.txt → 8133-ffcff3b7fc-lite.chunk.js.LICENSE.txt} +0 -0
  152. /package/dist/scripts/{843-4dbc5df109-lite.chunk.js.LICENSE.txt → 8364-ff63447d36-lite.chunk.js.LICENSE.txt} +0 -0
  153. /package/dist/scripts/{bundle-f926852f33.min.js.LICENSE.txt → bundle-dcea87749e.min.js.LICENSE.txt} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/8856-2d332952ae-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/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 { 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 showSeparateNameColumns?: boolean;\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(\n props.results,\n props.anonymiseUsers,\n props.config?.imageCdnUrl,\n props.showSeparateNameColumns\n );\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 props.showSeparateNameColumns\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 function getFixedTableTheme(): TableTheme {\n if (resultColumns.length)\n return fixedTableTheme;\n\n return {\n ...fixedTableTheme,\n table: `${styles.fixedTable} bg-white rounded border`\n };\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 && resultColumns.length ? ` ${styles.hasResults}` : ''}`}>\n <Table\n columns={fixedColumns}\n data={data}\n theme={getFixedTableTheme()}\n onSelectRow={onSelectStudent}\n onRowMouseOver={row => onRowHover(row.index)}\n onRowMouseLeave={() => onRowHover()}\n enableSort\n manualSort\n onSort={setSortBy}\n initialSortBy={sortBy}\n />\n {!!resultColumns.length &&\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 }\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'>&nbsp;</p>\n <div className='row g-2 w-50'>\n <div className='col-3'>\n <div className='p-2 rounded-1 partial-loading-background'>&nbsp;</div>\n </div>\n <div className='col-3'>\n <div className='p-2 rounded-1 partial-loading-background'>&nbsp;</div>\n </div>\n <div className='col-3'>\n <div className='p-2 rounded-1 partial-loading-background'>&nbsp;</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 hideStaffResults: boolean;\n showSeparateNameColumns?: 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 || props.hideStaffResults}\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 showSeparateNameColumns\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 isFetching: anonSessions.isFetching\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 { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { 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 { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\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 [hideStaffResults] = useViewModel<boolean>(SharedViewModelKeys.HIDE_STAFF_RESULTS);\n\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\n const students = results.data.students.map(s => {\n // Domain is returning userType as a number - Sha\n const userType = s.user?.userType as unknown as number;\n if (hideStaffResults && userType === 1)\n return null;\n\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 }).filter(s => !!s);\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, isPlaceholder: true })));\n }\n\n const isFetching = share.isFetching\n || results.isFetching\n || anonSessions.isFetching\n || classroomStudents.isFetching;\n\n return {\n hasCompleted,\n isFetching,\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 { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\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 [hideStaffResults] = useViewModel<boolean>(SharedViewModelKeys.HIDE_STAFF_RESULTS);\n\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 function getAnonUser(e: Engagement): AnonUser {\n if (e.userId) {\n const user = users.items?.[e.userId];\n\n if (!user)\n return { id: e.userId, deleted: true } as AnonUser;\n\n return user;\n }\n\n const anonSession = anonSessions.items?.[e.sessionId];\n if (anonSession)\n return anonSession;\n\n return { sessionId: e.sessionId } as AnonUser;\n }\n \n const userMap = {\n ...anonSessions.items,\n ...users.items\n };\n\n const filteredEngagement = engagement.data?.filter(e => {\n const user = userMap[e.userId || e.sessionId];\n\n if (!user)\n return e;\n\n // Video views is returning userType as a number - Sha\n const userType = user.userType as unknown as number;\n if (userType === 1 && hideStaffResults)\n return null;\n\n return e;\n }).filter(e => !!e);\n\n const viewers = engagement\n .data?.map(e => ({ ...getAnonUser(e), percentage: e.engagementRate }));\n\n return {\n engagement: filteredEngagement,\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 const [hideStaffResults] = useViewModel<boolean>(ViewModelKeys.HIDE_STAFF_RESULTS);\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 hasData={!!engagement?.length}\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 hideStaffResults={hideStaffResults}\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 hasData={!!results.data?.students.length}\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 hasData={!!results.data?.students.length}\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 const [hideStaffResults] = useViewModel<boolean>(SharedViewModelKeys.HIDE_STAFF_RESULTS);\n\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 hasData={!!results.data?.students.length}\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 // Must be isFetching, not hasCompleted, as we need to refresh the table when the results are updated\n isFetching={results.isFetching}\n anonymiseUsers={anonymiseUsers}\n hasDataLoaded={hasDataLoaded}\n config={config.data}\n hideStaffResults={hideStaffResults}\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'>&nbsp;</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'>&nbsp;</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 hasData={hasDataLoaded && !!users?.length}\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","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","join","options","fetchedItems","Set","setRequests","hasFirstRequestCompleted","unfetchedItems","forEach","key","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","namespace","phrase","onClick","fixedTableTheme","table","header","headerRow","headerCell","row","resultsTableTheme","cell","StudentResultsTable","sortBy","setSortBy","filterBy","ref","fixedColumns","results","anonymiseUsers","config","imageCdnUrl","showSeparateNameColumns","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","hideStaffResults","ImageUrls","useAnonSessions","anonSessions","prev","next","sessionId","anonSession","name","sessionName","useInsightsClassroomStudents","fetch","share","classroomId","type","recipients","find","recipientTypeId","recipientId","cursor","result","EMPTY_INTERACTIVE_RESULTS","attempts","answeredAt","answers","useInsightsInteractiveResults","objectId","classroomStudents","studentHash","s","userType","isPlaceholder","VideoViewsV2Requests","url","normalize","useInsightEngagement","SharedViewModelKeys","engagement","userIds","u","userId","users","UserRequests","userMap","filteredEngagement","e","viewers","deleted","getAnonUser","percentage","engagementRate","InsightsHeatmapView","useLockContentWidth","hasPermissions","usePermissions","ShareRequests","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","hasData","InsightsHeatmap","individualEngagement","tableDataLoaded","InteractiveInsightsOverviewView","InteractiveRequests","osCount","interactiveInsightsAppLinks","params","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","getStudentsList","Object","values","InsightsShareMask","videoInsightsAppLinks","hasClassrooms","InsightDevices","InsightHeatmap","VideoInsightsOverviewView","useSettings","getVideoInsightsAppLinks","INSIGHTS_VIEWS","insights","ctx","heatmap","questions","BaseInsightsView","view","tab","viewFn","useInsightsView","showShareOptions"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[904],{34079:(e,t,n)=>{n.d(t,{O:()=>s});var r=n(32735),a=n(23481),o=n(40782),i=n(36532),l=a.T.encloseNamespace("interactives.pendingIndicator");function c(e){var t="d-flex align-items-center h-100";return t+=e.showLabel?" justify-content-between":" justify-content-center",e.className&&(t+=" ".concat(e.className)),t}function s(e){var t=e.title,n=e.showLabel,a=e.tooltipClassName,s=e.showIndicator,u=void 0===s||s,d=function(){return r.createElement("div",{className:c(e)},!!n&&r.createElement("em",null,l("pending")),!!u&&r.createElement(o.O,null))};return t?r.createElement(i.u,{title:t,spanHack:!0,spanHackClassName:a||"h-100 w-100 d-flex align-items-center"},r.createElement(d,null)):r.createElement(d,null)}},97364:(e,t,n)=>{n.d(t,{C:()=>o,P:()=>a});var r=n(94892);function a(e,t){switch(e){case"score_desc":return[{id:t,desc:!0}];case"score_asc":return[{id:t,desc:!1}];default:return[]}}function o(e,t){return"marking_required"===e&&!t.awaitingMarking||"helping_hand"===e&&t.percentCorrect>=r.T.HIGH||"not_completed"===e&&!t.unanswered}},6748:(e,t,n)=>{n.d(t,{i:()=>O});var r=n(32735),a=n(42648),o=n(35509),i=n(91967),l=n(15611),c=n(17808),s=n(1287),u=n(83914),d=n(90281),m={opacity:"0.8",cursor:"grabbing"},v=n(35223);function f(e){return function(e){if(Array.isArray(e))return h(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||g(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function g(e,t){if(e){if("string"==typeof e)return h(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?h(e,t):void 0}}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function p(e){var t,n,r,a;return{canScrollLeft:(null===(t=e.current)||void 0===t?void 0:t.scrollLeft)>0,canScrollRight:(null===(n=e.current)||void 0===n?void 0:n.scrollLeft)+1<(null===(r=e.current)||void 0===r?void 0:r.scrollWidth)-(null===(a=e.current)||void 0===a?void 0:a.clientWidth)}}const y={sortIndicator:"gFhu0",scrollContainer:"sWUp9",scrollbarTrack:"Vn2qM"};function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var S=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n};function w(e){var t,n;return e.column.canSort?r.createElement("span",{className:"".concat(y.sortIndicator,"\n ").concat(e.column.isSorted?"":"text-secondary","\n ").concat(null!==(n=null===(t=e.theme)||void 0===t?void 0:t.sortIndicator)&&void 0!==n?n:"")},r.createElement(u.x,{svgName:e.column.isSortedDesc||!e.column.isSorted?v.vn.ArrowRight:v.vn.ArrowLeft,size:u.S.Small})):r.createElement(r.Fragment,null)}function E(e){var t,n,a,u,d,v,g,h,p={columns:e.columns,data:e.data,disableSortBy:!e.enableSort,manualSortBy:e.manualSort,autoResetHiddenColumns:e.autoResetHiddenColumns,autoResetSortBy:e.autoResetSortBy,initialState:{sortBy:e.initialSortBy||[]}};e.initialSelectedRowIds&&(p.initialState={selectedRowIds:(g=e.initialSelectedRowIds,h={},g.forEach(function(e){return h[e]=!0}),h)}),e.getRowId&&(p.getRowId=e.getRowId);var y,S=o.useTable.apply(void 0,[p].concat((y=function(e){var t=[o.useSortBy,o.useRowSelect,"flex"===e.layout?o.useFlexLayout:o.useBlockLayout];return e.allowFiltering&&(t=[].concat(f(t),[o.useFilters])),e.allowGlobalFiltering&&(t=[].concat(f(t),[o.useGlobalFilter])),t}(Object.assign({},e)),function(e){if(Array.isArray(e))return b(e)}(y)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(y)||function(e,t){if(e){if("string"==typeof e)return b(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?b(e,t):void 0}}(y)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()))),E=S.getTableProps,O=S.getTableBodyProps,I=S.headerGroups,j=S.rows,k=S.prepareRow,R=S.toggleAllRowsSelected,C=S.setGlobalFilter,A=S.setHiddenColumns,N=S.state.sortBy;function L(){return!j.length&&e.emptyState?e.emptyState:j.map(function(t){k(t);var n=function(t){var n,r,a,o,l,c=i.q.isFunction(null===(n=e.theme)||void 0===n?void 0:n.row)?e.theme.row(t):null!==(a=null===(r=e.theme)||void 0===r?void 0:r.row)&&void 0!==a?a:"";return t.isSelected&&(null===(o=e.theme)||void 0===o?void 0:o.selectedRow)&&(c+=" ".concat(null===(l=e.theme)||void 0===l?void 0:l.selectedRow)),e.onSelectRow&&(c+=" cursor-pointer"),e.enableSortableRows&&(c+=" cursor-grab"),c}(t),a=!!e.getRowAppLink&&e.getRowAppLink(t);function o(){e.onSelectRow&&(e.allowSelectMultipleRows||R(!1),e.onSelectRow(t),t.toggleRowSelected(!0))}function c(e,i){var c=function(e,t){return"dragAttributes"in e&&"dragListeners"in e?Object.assign(Object.assign(Object.assign({},e.dragAttributes),e.dragListeners),{"aria-roledescription":"Sortable row",ref:t}):{}}(e,i);return a?r.createElement("div",{role:"row",key:t.id},r.createElement(l.F,Object.assign({},e,c,{className:n,appLink:a}),F(t))):r.createElement("div",Object.assign({},e,c,{key:t.id,role:"row",className:n,onClick:o}),F(t))}var u=t.getRowProps();return e.enableSortableRows?r.createElement(s.W,{id:t.original.id,key:t.id,childProps:u,childComponent:r.forwardRef(function(e,t){return c(e,t)})}):c(u)})}function F(t){return t.cells.map(function(n){var a=function(t,n){var r,a,o="";return"function"==typeof(null===(r=e.theme)||void 0===r?void 0:r.cell)&&(o=e.theme.cell(t,n)),"string"==typeof(null===(a=e.theme)||void 0===a?void 0:a.cell)&&(o=e.theme.cell),e.onSelectCell&&(o+=" cursor-pointer"),o}(t,n);return r.createElement("div",Object.assign({key:n.column.id},n.getCellProps(),{className:a,onClick:function(){e.onSelectCell&&e.onSelectCell(n)}}),n.render("Cell"))})}return r.useEffect(function(){e.onSort&&e.onSort(N)},[N]),r.useEffect(function(){e.globalFilter&&C(e.globalFilter)},[e.globalFilter]),r.useEffect(function(){e.hiddenColumns&&A(e.hiddenColumns)},[e.hiddenColumns&&e.hiddenColumns.length]),r.createElement("div",Object.assign({},E(),{className:null!==(n=null===(t=e.theme)||void 0===t?void 0:t.table)&&void 0!==n?n:""}),r.createElement("div",{className:null!==(u=null===(a=e.theme)||void 0===a?void 0:a.header)&&void 0!==u?u:""},I.map(function(t){var n,a;return r.createElement("div",Object.assign({},t.getHeaderGroupProps(),{className:null!==(a=null===(n=e.theme)||void 0===n?void 0:n.headerRow)&&void 0!==a?a:""}),t.headers.map(function(t){var n,a;return r.createElement("div",Object.assign({},t.getHeaderProps(t.getSortByToggleProps()),{className:null!==(a=null===(n=e.theme)||void 0===n?void 0:n.headerCell)&&void 0!==a?a:""}),t.render("Header",{renderSortIndicator:function(){return r.createElement(w,{column:t,theme:e.theme})}}),!t.hideSortIndicator&&r.createElement(w,{column:t,theme:e.theme}))}))})),r.createElement("div",Object.assign({},O(),{className:null!==(v=null===(d=e.theme)||void 0===d?void 0:d.body)&&void 0!==v?v:""}),e.enableSortableRows?r.createElement(c.Q,{ids:j.map(function(e){return e.original.id}),getDragOverlay:function(t){var n,a,o=j.findIndex(function(e){return e.original.id===t}),i=j[o];return r.createElement("div",Object.assign({},e,{className:(n=e.theme,a="g-0 ",n&&(a+=n.row),a),style:m}),F(i))},onSortEnd:e.onSortingRowsEnd},L()):L()))}function O(e){var t=e.enableSlider,n=e.scrollIncrement,o=e.scrollable,l=S(e,["enableSlider","scrollIncrement","scrollable"]),c=function(){var e,t,n=r.useRef(null),a=(e=r.useState(p(n)),t=2,function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],c=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw a}}return l}}(e,t)||g(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),o=a[0],l=a[1],c=i.q.throttle(function(){l(p(n))},200),s=r.useCallback(function(e){var t;n.current&&(null===(t=n.current)||void 0===t||t.removeEventListener("scroll",c)),e&&(l(p(n)),e.addEventListener("scroll",c)),n.current=e},[]);return r.useEffect(function(){(null==n?void 0:n.current)&&l(p(n))},[n]),{ref:s,scrollState:o,scroll:function(e){var t;null===(t=n.current)||void 0===t||t.scrollBy({left:e,top:0,behavior:"smooth"})}}}(),s=c.ref,u=c.scrollState,m=c.scroll;if(o)return r.createElement(a.$B,{renderTrackHorizontal:function(){return r.createElement("div",{className:y.scrollbarTrack})},autoHeightMax:1e4,autoHeight:!0},r.createElement(E,Object.assign({},l)));if(!t)return r.createElement(E,Object.assign({},l));function v(e){m(n*("right"===e?1:-1))}return r.createElement("div",{className:"mx-n4 overflow-x-hidden overflow-y-hidden"},r.createElement("div",{className:"px-4"},r.createElement("div",{className:"position-relative"},r.createElement(d.W,{direction:d.f.Left,onClick:function(){return v("left")},hide:!u.canScrollLeft}),r.createElement("div",{className:"".concat(y.scrollContainer," ").concat(e.scrollContainerClassName),ref:s},r.createElement(E,Object.assign({},l))),r.createElement(d.W,{direction:d.f.Right,onClick:function(){return v("right")},hide:!u.canScrollRight}))))}O.defaultProps={scrollIncrement:250,scrollable:!1,layout:"flex"}},54405:(e,t,n)=>{n.d(t,{X:()=>r});var r={interactive:function(){return{url:"/mocks/insights/interactive.json",key:"demo:interactive",normalize:!1}},interactiveMetadata:function(){return{url:"/mocks/insights/interactive-metadata.json",key:"demo:interactive:metadata",normalize:!1}},interactiveResults:function(){return{url:"/mocks/insights/interactive-results.json",key:"demo:interactive:results",normalize:!1}},videoViews:function(){return{url:"/mocks/insights/video-views.json",key:"demo:video:views",normalize:!1}},users:function(){return{url:"/mocks/insights/users.json",key:"demo:users",normalize:!1}},individualHeatmap:function(){return{url:"/mocks/insights/individual-heatmap.json",key:"demo:individual:heatmap",normalize:!1}},aggregateHeatmap:function(){return{url:"/mocks/insights/aggregate-heatmap.json",key:"demo:aggregate:heatmap",normalize:!1}}}},9566:(e,t,n)=>{n.d(t,{$Z:()=>g,G6:()=>m,GJ:()=>f,VE:()=>y,_w:()=>v,po:()=>p,vJ:()=>h});var r=n(23481),a=n(110),o=n(33518),i=n(2510),l=n(4594),c=n(35223),s=n(14070),u=n(97291),d=r.T.encloseNamespace("myShares.demoInsights"),m={type:i.y.Link,privacy:o.e.JustMySchool,objectId:"0",objectTypeId:l.E.Interactive,viewCount:28,accessCount:15,dateCreated:(new Date).toISOString(),dateShared:(new Date).toISOString(),expireDate:null,link:{shortenedEmbedUrl:"",shortenedUrl:""},shareId:"0",ownerCustomerId:0,ownerId:0,recipients:[],options:{preventScrubbing:!1,immediateFeedback:!1}},v=Object.assign(Object.assign({},m),{type:i.y.Open,expireDate:a.O.add(new Date(m.dateCreated),30,"days").toISOString(),privacy:o.e.PinCode}),f={share:m,sharedObject:null,shareRecipients:null,dateShared:a.O.subtract(new Date,7,"days").toISOString()},g=Object.assign(Object.assign({},f),{share:v}),h={application:u.O.MY_SHARES,action:s.e.MyShares.INTERACTIVE_OVERVIEW_DEMO},p={application:u.O.MY_SHARES,action:s.e.MyShares.INTERACTIVE_OVERVIEW_OPEN_CLASSROOM_DEMO},y={svgName:c.vn.Analytics,label:d("demoInsights"),appLink:h,group:"insights",className:"btn btn-outline-dark"}},71519:(e,t,n)=>{n.r(t),n.d(t,{InteractiveInsightsQuestionsDemoView:()=>S});var r=n(32735),a=n(23481),o=n(2948),i=n(20354),l=n(26025),c=n(2510),s=n(38143),u=n(39151),d=n(54405),m=n(93322),v=n(79612),f=n(9540),g=n(48705),h=n(9566),p=n(10447);function y(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var b=a.T.encloseNamespace("shared.interactiveInsightsQuestionsView");function S(e){var t,n,a,S,w,E=(S=(0,o.D)(s.g.ANONYMISE_USERS),w=1,function(e){if(Array.isArray(e))return e}(S)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],c=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw a}}return l}}(S,w)||function(e,t){if(e){if("string"==typeof e)return y(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?y(e,t):void 0}}(S,w)||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.")}())[0];(0,m.F)();var O=i.a.useBasicFetch(u.L.config()),I=i.a.useBasicFetch(d.X.interactiveMetadata()),j=i.a.useBasicFetch(d.X.interactive()),k=l.B.getAudienceAppLinkParams(),R=l.B.getDateRangeAppLinkParams(),C=i.a.useBasicFetch(d.X.interactiveResults());(0,v.M)({title:I.data?b("pageTitle",{video:null===(t=I.data)||void 0===t?void 0:t.name}):null});var A=j.data&&I.data&&!!C.data,N=Object.assign(Object.assign({},k),R),L=e.type===c.y.Open?h._w:h.G6;return r.createElement("div",{className:"px-3"},r.createElement(f.j,{tabs:(0,p.aq)(null===(n=I.data)||void 0===n?void 0:n.id,"questions",N,e.type),video:I.data,dateRangeAppLinkParams:R,share:Object.assign(Object.assign({},L),{objectId:null===(a=I.data)||void 0===a?void 0:a.id}),yearGroups:[],markingRequired:e.type!==c.y.Open,isDemo:!0,hasData:!0}),r.createElement(g.x,{interactive:j.data,interactiveMetadata:I.data,interactionId:e.interactionId,config:O.data,sortBy:e.sortBy,isFetching:C.isFetching||j.isFetching,anonymiseUsers:E,results:C.data,hasDataLoaded:A,isDemo:!0}))}}}]);
2
- //# sourceMappingURL=904-2784e45cfc-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/904-2784e45cfc-lite.chunk.js","mappings":"mLAQMA,EAAY,qBADA,iCAGlB,SAASC,EAAaC,GACpB,IAAIC,EAAY,kCAOhB,OALAA,GAAaD,EAAME,UAAY,2BAA6B,0BAExDF,EAAMC,YACRA,GAAa,IAAJ,OAAQD,EAAMC,YAElBA,CACT,CAUM,SAAUE,EAAiBH,GAC/B,IAAQI,EAA6DJ,EAA7DI,MAAOF,EAAsDF,EAAtDE,UAAWG,EAA2CL,EAA3CK,iBAAgB,EAA2BL,EAAzBM,cAAAA,OAAa,IAAG,GAAI,EAE1DC,EAAY,WAAH,OACb,uBAAKN,UAAWF,EAAaC,MACxBE,GACD,0BAAKJ,EAAU,cAEdQ,GACD,gBAAC,IAAmB,MAElB,EAGR,OAAKF,EAIH,gBAAC,IAAO,CAACA,MAAOA,EAAOI,UAAQ,EAACC,kBAAmBJ,GAAoB,yCACrE,gBAACE,EAAS,OAJL,gBAACA,EAAS,KAOrB,C,0DC5CM,SAAUG,EAAgBC,EAAwBC,GACtD,OAAQD,GACN,IAAK,aAAc,MAAO,CAAC,CAAEC,GAAAA,EAAIC,MAAM,IACvC,IAAK,YAAa,MAAO,CAAC,CAAED,GAAAA,EAAIC,MAAM,IACtC,QAAS,MAAO,GAEpB,CAIM,SAAUC,EAAoBC,EAA0BC,GAC5D,MAAe,qBAAXD,IAAkCC,EAAQC,iBAG/B,iBAAXF,GAA6BC,EAAQE,gBAAkB,UAG5C,kBAAXH,IAA+BC,EAAQG,UAI7C,C,wIC5BaC,EAAoB,CAAEC,QAAS,MAAOC,OAAQ,Y,4uBC+C3D,SAASC,EAAqBC,G,YAI5B,MAAO,CAAEC,eAHwB,QAAX,EAAAD,EAAIE,eAAO,eAAEC,YAAa,EAGxBC,gBAFW,QAAX,EAAAJ,EAAIE,eAAO,eAAEC,YAAa,GAAgB,QAAX,EAAAH,EAAIE,eAAO,eAAEG,cAAyB,QAAX,EAAAL,EAAIE,eAAO,eAAEI,aAGjG,CCnDA,SAAgB,cAAgB,QAAQ,gBAAkB,QAAQ,eAAiB,S,sbCuDnF,SAASC,EAAoC/B,G,QAC3C,OAAKA,EAAMgC,OAAOC,QAIhB,wBACEhC,UAAS,UACJ,gBAAoB,mBACtBD,EAAMgC,OAAOE,SAA8B,GAAnB,iBAAqB,mBACpB,QAA1B,EAAW,QAAX,EAAAlC,EAAMmC,aAAK,eAAEC,qBAAa,QAAI,KAGhC,gBAACC,EAAA,EAAY,CACXC,QAAUtC,EAAMgC,OAAOO,eAAiBvC,EAAMgC,OAAOE,SACjD,gBACA,eAEJM,KAAMH,EAAAI,EAAA,SAfH,gCAmBX,CAyEA,SAASC,EAAgC1C,G,gBFpHP2C,EAC1BC,EEoHAC,EAAgC,CACpCC,QAAS9C,EAAM8C,QACfC,KAAM/C,EAAM+C,KACZC,eAAgBhD,EAAMiD,WACtBC,aAAclD,EAAMmD,WACpBC,uBAAwBpD,EAAMoD,uBAC9BC,gBAAiBrD,EAAMqD,gBACvBC,aAAc,CACZ3C,OAAQX,EAAMuD,eAAiB,KAI/BvD,EAAMwD,wBACRX,EAAaS,aAAe,CAAEG,gBFlIAd,EEkIkC3C,EAAMwD,sBFjIlEZ,EAAkC,CAAC,EAEzCD,EAAIe,QAAQ,SAAA9C,GAAE,OAAIgC,EAAOhC,IAAM,CAAI,GAE5BgC,KE+HH5C,EAAM2D,WACRd,EAAac,SAAW3D,EAAM2D,UAEhC,I,EAAA,EAUI,EAAAC,SAAA,WAAQ,GAAIf,GAAY,Q,EFvKxB,SAA2C7C,GAC/C,IAAI6D,EAA2B,CAC7B,EAAAC,UACA,EAAAC,aACiB,SAAjB/D,EAAMgE,OAAoB,EAAAC,cAAgB,EAAAC,gBAe5C,OAZIlE,EAAMmE,iBACRN,EAAU,GAAH,SACFA,GAAO,CACV,EAAAO,cAGApE,EAAMqE,uBACRR,EAAU,GAAH,SACFA,GAAO,CACV,EAAAS,mBAGGT,CACT,CEmJmCU,CAAU,iBAASvE,I,smBATlDwE,EAAa,EAAbA,cACAC,EAAiB,EAAjBA,kBACAC,EAAY,EAAZA,aACAC,EAAI,EAAJA,KACAC,EAAU,EAAVA,WACAC,EAAqB,EAArBA,sBACAC,EAAe,EAAfA,gBACAC,EAAgB,EAAhBA,iBACSpE,EAAM,EAAfqE,MAASrE,OAoBX,SAASsE,IACP,OAAKN,EAAKO,QAAUlF,EAAMmF,WACjBnF,EAAMmF,WAERR,EAAKS,IAAI,SAAAC,GACdT,EAAWS,GAEX,IAAMpF,EAxBV,SAA2BoF,G,cACrBpF,EAAYqF,EAAA,aAAqC,QAAX,EAAAtF,EAAMmC,aAAK,eAAEkD,KACnDrF,EAAMmC,MAAMkD,IAAIA,GACA,QAAhB,EAAW,QAAX,EAAArF,EAAMmC,aAAK,eAAEkD,WAAG,QAAI,GAWxB,OATIA,EAAIE,aAAyB,QAAX,EAAAvF,EAAMmC,aAAK,eAAEqD,eACjCvF,GAAa,IAAJ,OAAmB,QAAX,EAAAD,EAAMmC,aAAK,eAAEqD,cAE5BxF,EAAMyF,cACRxF,GAAa,mBAEXD,EAAM0F,qBACRzF,GAAa,gBAERA,CACT,CASsB0F,CAAkBN,GAC9BO,IAAe5F,EAAM6F,eAAiB7F,EAAM6F,cAAcR,GAEhE,SAASS,IACF9F,EAAMyF,cAGNzF,EAAM+F,yBACTlB,GAAsB,GAExB7E,EAAMyF,YAAYJ,GAClBA,EAAIW,mBAAkB,GACxB,CAeA,SAASC,EAAUjG,EAAkEwB,GACnF,IAAM0E,EAdR,SAA0BlG,EAAkEwB,GAC1F,MAAI,mBAAoBxB,GAAS,kBAAmBA,EAC3C,OAAP,sCACKA,EAAMmG,gBACNnG,EAAMoG,eAAa,CACtB,uBAAwB,eACxB5E,IAAAA,IAIG,CAAC,CACV,CAGwB6E,CAAiBrG,EAAOwB,GAE9C,OAAIoE,EAEA,uBACEU,KAAK,MACLC,IAAKlB,EAAIzE,IAET,gBAAC4F,EAAA,EAAO,iBACFxG,EACAkG,EAAa,CACjBjG,UAAWA,EACXwG,QAASb,IAERc,EAAYrB,KAOnB,uCACMrF,EACAkG,EAAa,CACjBK,IAAKlB,EAAIzE,GACT0F,KAAK,MACLrG,UAAWA,EACX0G,QAASb,IAERY,EAAYrB,GAGnB,CAEA,IAAMuB,EAAWvB,EAAIwB,cAErB,OAAI7G,EAAM0F,mBAEN,gBAACoB,EAAA,EAAmB,CAClBlG,GAAIyE,EAAI0B,SAASnG,GACjB2F,IAAKlB,EAAIzE,GACToG,WAAYJ,EACZK,eAAgB,aACd,SAACjH,EAAyBwB,GAAoC,OAAMyE,EAAUjG,EAAOwB,EAAI,KAM1FyE,EAAUW,EACnB,EACF,CAyCA,SAASF,EAAYrB,GACnB,OAAOA,EAAI6B,MAAM9B,IAAI,SAAA+B,GACnB,IAAMC,EAjBV,SAA0B/B,EAAa8B,G,QACjCC,EAAgB,GAWpB,MATiC,mBAAX,QAAX,EAAApH,EAAMmC,aAAK,eAAEgF,QACtBC,EAAgBpH,EAAMmC,MAAMgF,KAAK9B,EAAK8B,IAEP,iBAAX,QAAX,EAAAnH,EAAMmC,aAAK,eAAEgF,QACtBC,EAAgBpH,EAAMmC,MAAMgF,MAE1BnH,EAAMqH,eACRD,GAAiB,mBAEZA,CACT,CAI0BE,CAAiBjC,EAAK8B,GAM5C,OACE,qCAAKZ,IAAKY,EAAKnF,OAAOpB,IAAQuG,EAAKI,eAAc,CAAEtH,UAAWmH,EAAeT,QAL/E,WACE3G,EAAMqH,cAAgBrH,EAAMqH,aAAaF,EAC3C,IAIKA,EAAKK,OAAO,QAGnB,EACF,CAuBA,OArBA,YAAgB,WACTxH,EAAMyH,QAGXzH,EAAMyH,OAAO9G,EACf,EAAG,CAACA,IAEJ,YAAgB,WACTX,EAAM0H,cAGX5C,EAAgB9E,EAAM0H,aACxB,EAAG,CAAC1H,EAAM0H,eAEV,YAAgB,WACT1H,EAAM2H,eAGX5C,EAAiB/E,EAAM2H,cACzB,EAAG,CAAC3H,EAAM2H,eAAiB3H,EAAM2H,cAAczC,SAG7C,uCAASV,IAAe,CAAEvE,UAA6B,QAAlB,EAAW,QAAX,EAAAD,EAAMmC,aAAK,eAAEyF,aAAK,QAAI,KACzD,uBAAK3H,UAA8B,QAAnB,EAAW,QAAX,EAAAD,EAAMmC,aAAK,eAAE0F,cAAM,QAAI,IACpCnD,EAAaU,IAAI,SAAA0C,G,QAAe,OAC/B,uCAASA,EAAYC,sBAAqB,CAAE9H,UAAiC,QAAtB,EAAW,QAAX,EAAAD,EAAMmC,aAAK,eAAE6F,iBAAS,QAAI,KAC9EF,EAAYG,QAAQ7C,IAAI,SAAApD,G,QAAU,OACjC,uCAASA,EAAOkG,eAAelG,EAAOmG,wBAAuB,CAAElI,UAAkC,QAAvB,EAAW,QAAX,EAAAD,EAAMmC,aAAK,eAAEiG,kBAAU,QAAI,KAClGpG,EAAOwF,OAAO,SAAU,CAAEa,oBAAqB,WAAF,OAAQ,gBAACtG,EAAa,CAACC,OAAQA,EAAQG,MAAOnC,EAAMmC,OAAS,KACxGH,EAAqBsG,mBACtB,gBAACvG,EAAa,CAACC,OAAQA,EAAQG,MAAOnC,EAAMmC,Q,OAOxD,uCAASsC,IAAmB,CAAExE,UAA4B,QAAjB,EAAW,QAAX,EAAAD,EAAMmC,aAAK,eAAEoG,YAAI,QAAI,KAC1DvI,EAAM0F,mBACN,gBAAC8C,EAAA,EAAwB,CACvB7F,IAAKgC,EAAKS,IAAI,SAAAC,GAAG,OAAIA,EAAI0B,SAASnG,EAAE,GACpC6H,eAvFV,SAAwB7H,GACtB,IAV+BuB,EAC3BlC,EASEyI,EAAW/D,EAAKgE,UAAU,SAAAC,GAAI,OAAIA,EAAK7B,SAASnG,KAAOA,CAAE,GACzDyE,EAAMV,EAAK+D,GAEjB,OACE,uCACM1I,EAAK,CACTC,WAhB2BkC,EAgBQnC,EAAMmC,MAfzClC,EAAY,OAEZkC,IACFlC,GAAakC,EAAMkD,KAEdpF,GAWH4I,MAAOzH,IAENsF,EAAYrB,GAGnB,EA2EUyD,UAAW9I,EAAM+I,kBAEhB9D,KAGHA,KAKV,CAgBM,SAAU+D,EAA4BhJ,GAC1C,IAAQiJ,EAA6DjJ,EAA7DiJ,aAAcC,EAA+ClJ,EAA/CkJ,gBAAiBC,EAA8BnJ,EAA9BmJ,WAAeC,EAAU,EAAKpJ,EAA/D,iDAEN,EFhWI,WACJ,I,IAAMqJ,EAAQ,SAA6B,MAC0D,G,EAA7D,WAAiC9H,EAAqB8H,I,EAAO,E,unBAA7FC,EAAW,KAAEC,EAAc,KAU7BC,EAAoBlE,EAAA,WAR1B,WACEiE,EAAehI,EAAqB8H,GACtC,EAM4D,KAEtD7H,EAAM,cAAkB,SAACiI,G,MACzBJ,EAAM3H,UACK,QAAb,EAAA2H,EAAM3H,eAAO,SAAEgI,oBAAoB,SAAUF,IAG3CC,IACFF,EAAehI,EAAqB8H,IACpCI,EAAGE,iBAAiB,SAAUH,IAGhCH,EAAM3H,QAAU+H,CAClB,EAAG,IAQH,OANA,YAAgB,YACVJ,aAAK,EAALA,EAAO3H,UACT6H,EAAehI,EAAqB8H,GAExC,EAAG,CAACA,IAEG,CAAE7H,IAAAA,EAAK8H,YAAAA,EAAaM,OAzB3B,SAAgBC,G,MACD,QAAb,EAAAR,EAAM3H,eAAO,SAAEmI,SAAS,CAAEC,KAAMD,EAAUE,IAAK,EAAGC,SAAU,UAC9D,EAwBF,CE8TuCC,GAA7BzI,EAAG,EAAHA,IAAK8H,EAAW,EAAXA,YAAaM,EAAM,EAANA,OAE1B,GAAIT,EACF,OACE,gBAAC,KAAU,CACTe,sBAAuB,WAAF,OAAQ,uBAAKjK,UAAW,kBAAyB,EACtEkK,cAAe,IACfC,YAAU,GAEV,gBAAC1H,EAAS,iBAAK0G,KAKrB,IAAKH,EACH,OAAO,gBAACvG,EAAS,iBAAK0G,IAExB,SAASiB,EAAcC,GACrBV,EAAOV,GAAiC,UAAdoB,EAAwB,GAAK,GACzD,CAEA,OACE,uBAAKrK,UAAU,6CACb,uBAAKA,UAAU,QACb,uBAAKA,UAAU,qBACb,gBAACsK,EAAAC,EAAY,CACXF,UAAWC,EAAA,OACX5D,QAAS,WAAF,OAAQ0D,EAAc,OAAO,EACpCI,MAAOnB,EAAY7H,gBAErB,uBAAKxB,UAAS,UAAK,kBAAsB,YAAID,EAAM0K,0BAA4BlJ,IAAKA,GAClF,gBAACkB,EAAS,iBAAK0G,KAEjB,gBAACmB,EAAAC,EAAY,CACXF,UAAWC,EAAA,QACX5D,QAAS,WAAF,OAAQ0D,EAAc,QAAQ,EACrCI,MAAOnB,EAAY1H,mBAM/B,CAnDAoH,EAAM2B,aAAe,CACnBzB,gBAAiB,IACjBC,YAAY,EACZnF,OAAQ,O,mCCpZH,IAAM4G,EAAuB,CAClCC,YAAW,WACT,MAAO,CACLC,IAAK,mCACLvE,IAAK,mBACLwE,WAAW,EAEf,EAEAC,oBAAmB,WACjB,MAAO,CACLF,IAAK,4CACLvE,IAAK,4BACLwE,WAAW,EAEf,EAEAE,mBAAkB,WAChB,MAAO,CACLH,IAAK,2CACLvE,IAAK,2BACLwE,WAAW,EAEf,EAEAG,WAAU,WACR,MAAO,CACLJ,IAAK,mCACLvE,IAAK,mBACLwE,WAAW,EAEf,EAEAI,MAAK,WACH,MAAO,CACLL,IAAK,6BACLvE,IAAK,aACLwE,WAAW,EAEf,EAEAK,kBAAiB,WACf,MAAO,CACLN,IAAK,0CACLvE,IAAK,0BACLwE,WAAW,EAEf,EAEAM,iBAAgB,WACd,MAAO,CACLP,IAAK,yCACLvE,IAAK,yBACLwE,WAAW,EAEf,E,iLCxCIjL,EAAY,qBADA,yBAKLwL,EAA6B,CACxCC,KAAM,SACNC,QAAS,iBACTC,SAAU,IACVC,aAAc,gBACdC,UAAW,GACXC,YAAa,GACbC,aAAa,IAAIC,MAAOC,cACxBC,YAAY,IAAIF,MAAOC,cACvBE,WAAY,KACZC,KAAM,CACJC,kBAAmB,GACnBC,aAAc,IAEhBC,QAAS,IACTC,gBAAiB,EACjBC,QAAS,EACTC,WAAY,GACZC,QAAS,CACPC,kBAAkB,EAClBC,mBAAmB,IAIVC,EAAkC,+BAC1CtB,GAAmB,CACtBC,KAAM,SACNU,WAAY,QAAe,IAAIH,KAAKR,EAAoBO,aAAc,GAAI,QAAQE,cAClFP,QAAS,cAGEqB,EAAoD,CAC/DC,MAAOxB,EACPyB,aAAc,KACdC,gBAAiB,KACjBhB,WAAY,aAAoB,IAAIF,KArCR,EAqCuC,QAAQC,eAGhEkB,EAA6C,+BACrDJ,GAA8B,CACjCC,MAAOF,IAGIM,EAAsC,CACjDC,YAAa,cACbC,OAAQ,wCAGGC,EAAqD,CAChEF,YAAa,cACbC,OAAQ,uDAGGE,EAAsC,CACjDhL,QAAS,eACTiL,MAAOzN,EAAU,gBACjB2G,QAASyG,EACTM,MAAO,WACPvN,UAAW,uB,wVC1Db,IACMH,EAAY,qBADA,2CASZ,SAAU2N,EAAqCzN,G,cAC5C0N,G,GAAkB,OAAsB,qB,EAAoC,E,o4BAA9D,IAErB,SAEA,IAAMC,EAAS,kBAA6B,cAEtC3C,EAAsB,kBAC1B,2BAGIH,EAAc,kBAAkC,mBAEhD+C,EAAwB,+BACxBC,EAAyB,gCAEzBC,EAAU,kBAA2C,2BAE3D,OAAmB,CAAE1N,MAAO4K,EAAoBjI,KAAOjD,EAAU,YAAa,CAAEiO,MAA+B,QAAxB,EAAA/C,EAAoBjI,YAAI,eAAEiL,OAAU,OAE3H,IAAMC,EAAgBpD,EAAY9H,MAAQiI,EAAoBjI,QAAU+K,EAAQ/K,KAE1EmL,EAAS,OAAH,wBACPN,GACAC,GAGCf,EAAQ9M,EAAMuL,OAAS,SAAiB,KAAqC,KAEnF,OACE,uBAAKtL,UAAU,QACb,gBAAC,IAAc,CACbkO,MAAM,QAAuD,QAAxB,EAAAnD,EAAoBjI,YAAI,eAAEnC,GAAI,YAAasN,EAAQlO,EAAMuL,MAC9FwC,MAAO/C,EAAoBjI,KAC3B8K,uBAAwBA,EACxBf,MAAK,+BACAA,GAAK,CACRrB,SAAkC,QAAxB,EAAAT,EAAoBjI,YAAI,eAAEnC,KAEtCwN,WAAY,GACZC,gBAAiBrO,EAAMuL,OAAS,SAChC+C,QAAM,EACNC,SAAO,IAGT,gBAAC,IAA4B,CAC3B1D,YAAaA,EAAY9H,KACzBiI,oBAAqBA,EAAoBjI,KACzCyL,cAAexO,EAAMwO,cACrBb,OAAQA,EAAO5K,KACfpC,OAAQX,EAAMW,OACd8N,WAAYX,EAAQW,YAAc5D,EAAY4D,WAC9Cf,eAAgBA,EAChBI,QAASA,EAAQ/K,KACjBkL,cAAeA,EACfK,QAAM,IAId,C","sources":["file:///app/packages/libs/shared/src/apps/analytics/components/pending-indicator/PendingIndicator.tsx","file:///app/packages/libs/shared/src/apps/analytics/utils/StudentTableUtils.ts","file:///app/packages/libs/shared/src/constants/DragOverlayStyles.ts","file:///app/packages/libs/shared/src/components/table/TableUtils.ts","file:///app/packages/libs/shared/src/components/table/table.scss","file:///app/packages/libs/shared/src/components/table/Table.tsx","file:///app/packages/libs/shared/src/flight-requests/InsightsDemoRequests.ts","file:///app/packages/projects/lite/src/apps/my-shares/constants/MySharesDemoInsights.ts","file:///app/packages/projects/lite/src/apps/my-shares/views/demo/questions/InteractiveInsightsQuestionsDemoView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { PercentageIndicator } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\n\nconst namespace = 'interactives.pendingIndicator';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getClassName(props: PendingIndicatorProps): string {\n let className = 'd-flex align-items-center h-100';\n\n className += props.showLabel ? ' justify-content-between' : ' justify-content-center';\n\n if (props.className)\n className += ` ${props.className}`;\n\n return className;\n}\n\ninterface PendingIndicatorProps {\n title?: string;\n className?: string;\n showLabel?: boolean;\n tooltipClassName?: string;\n showIndicator?: boolean;\n}\n\nexport function PendingIndicator(props: PendingIndicatorProps): JSX.Element {\n const { title, showLabel, tooltipClassName, showIndicator = true } = props;\n\n const Indicator = () => (\n <div className={getClassName(props)}>\n {!!showLabel &&\n <em>{getPhrase('pending')}</em>\n }\n {!!showIndicator &&\n <PercentageIndicator />\n }\n </div>\n );\n\n if (!title)\n return <Indicator />;\n\n return (\n <Tooltip title={title} spanHack spanHackClassName={tooltipClassName || 'h-100 w-100 d-flex align-items-center'}>\n <Indicator />\n </Tooltip>\n );\n}","import { SortingRule } from 'react-table';\n\nimport { ResultsSummary } from 'libs/shared/apps/analytics/interfaces/ResultsSummary';\nimport { ScoreThresholdInsights } from 'libs/shared/constants/ScoreThresholds';\n\nexport type SortStudentsBy = 'score_desc' | 'score_asc';\n\nexport function getSortStudents(sortBy: SortStudentsBy, id: string): SortingRule<any>[] {\n switch (sortBy) {\n case 'score_desc': return [{ id, desc: true }];\n case 'score_asc': return [{ id, desc: false }];\n default: return [];\n }\n}\n\nexport type FilterStudentsBy = 'not_completed' | 'marking_required' | 'helping_hand';\n\nexport function shouldFilterStudent(filter: FilterStudentsBy, summary: ResultsSummary): boolean {\n if (filter === 'marking_required' && !summary.awaitingMarking)\n return true;\n\n if (filter === 'helping_hand' && summary.percentCorrect >= ScoreThresholdInsights.HIGH)\n return true;\n\n if (filter === 'not_completed' && !summary.unanswered)\n return true;\n \n return false;\n}\n\n","export const DragOverlayStyles = { opacity: '0.8', cursor: 'grabbing' };","import React from 'react';\nimport { PluginHook, useBlockLayout, useFilters, useFlexLayout, useGlobalFilter, useRowSelect, useSortBy } from 'react-table';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\ninterface PluginOptions {\n allowFiltering?: boolean;\n allowGlobalFiltering?: boolean;\n layout?: 'flex' | 'block';\n}\n\nexport function getPlugins<T extends HashObject>(props: PluginOptions): PluginHook<T>[] {\n let plugins: PluginHook<T>[] = [\n useSortBy,\n useRowSelect,\n props.layout === 'flex' ? useFlexLayout : useBlockLayout\n ];\n\n if (props.allowFiltering)\n plugins = [\n ...plugins,\n useFilters\n ];\n\n if (props.allowGlobalFiltering)\n plugins = [\n ...plugins,\n useGlobalFilter\n ];\n\n return plugins;\n}\n\nexport function getSelectedRowIds(ids: string[]): Record<string, boolean> {\n const idHash: Record<string, boolean> = {};\n\n ids.forEach(id => idHash[id] = true);\n\n return idHash;\n}\n\ninterface TableScrollState {\n canScrollLeft: boolean;\n canScrollRight: boolean;\n}\n\nfunction calculateScrollState(ref: React.MutableRefObject<HTMLDivElement>): TableScrollState {\n const canScrollLeft = ref.current?.scrollLeft > 0;\n const canScrollRight = (ref.current?.scrollLeft + 1) < ref.current?.scrollWidth - ref.current?.clientWidth;\n\n return { canScrollLeft, canScrollRight };\n}\n\ninterface UseTableScroll {\n ref: (el: HTMLDivElement) => void;\n scrollState: TableScrollState;\n scroll: (scrollBy: number) => void;\n}\n\nexport function useTableScroll(): UseTableScroll {\n const elRef = React.useRef<HTMLDivElement>(null);\n const [ scrollState, setScrollState ] = React.useState<TableScrollState>(calculateScrollState(elRef));\n\n function onScroll(): void {\n setScrollState(calculateScrollState(elRef));\n }\n\n function scroll(scrollBy: number): void {\n elRef.current?.scrollBy({ left: scrollBy, top: 0, behavior: 'smooth' });\n }\n\n const throttledOnScroll = FunctionHelper.throttle(onScroll, 200);\n\n const ref = React.useCallback((el: HTMLDivElement) => {\n if (elRef.current) {\n elRef.current?.removeEventListener('scroll', throttledOnScroll);\n }\n\n if (el) {\n setScrollState(calculateScrollState(elRef));\n el.addEventListener('scroll', throttledOnScroll);\n }\n\n elRef.current = el;\n }, []);\n\n React.useEffect(() => {\n if (elRef?.current) {\n setScrollState(calculateScrollState(elRef));\n }\n }, [elRef]);\n\n return { ref, scrollState, scroll };\n}","// extracted by mini-css-extract-plugin\nexport default {\"sortIndicator\":\"gFhu0\",\"scrollContainer\":\"sWUp9\",\"scrollbarTrack\":\"Vn2qM\"};","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\nimport {\n Cell,\n Column as BaseColumn,\n HeaderGroup,\n HeaderProps as BaseHeaderProps,\n IdType,\n Row,\n SortingRule,\n TableOptions,\n TableRowProps,\n useTable } from 'react-table';\nimport { DragEndEvent } from '@dnd-kit/core';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SortableContainerWrapper } from 'libs/shared/components/sortable/SortableContainerWrapper';\nimport { PropsWithSortableItemProps, SortableItemWrapper } from 'libs/shared/components/sortable/SortableItemWrapper';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { WidgetButton, WidgetButtonDirection } from 'libs/shared/components/widgets/widget-button/WidgetButton';\nimport { DragOverlayStyles } from 'libs/shared/constants/DragOverlayStyles';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { getPlugins, getSelectedRowIds, useTableScroll } from './TableUtils';\n\nimport styles from './table.scss';\n\nexport interface TableTheme {\n table?: string;\n header?: string;\n headerRow?: string;\n headerCell?: string;\n body?: string;\n row?: string | ((row: Row<any>) => string);\n selectedRow?: string;\n cell?: string | ((row?: Row<any>, cell?: Cell<any, any>) => string);\n sortIndicator?: string;\n}\n\nexport type HeaderProps<T extends HashObject> = BaseHeaderProps<T> & {\n renderSortIndicator: () => void;\n}\n\nexport type Column<T extends HashObject> = BaseColumn<T> & {\n hideSortIndicator?: boolean;\n}\n\ninterface SortIndicatorProps<T extends HashObject> {\n column: HeaderGroup<T>;\n theme?: TableTheme;\n}\n\nfunction SortIndicator<T extends HashObject>(props: SortIndicatorProps<T>): JSX.Element {\n if (!props.column.canSort)\n return <></>;\n\n return (\n <span\n className={\n `${styles.sortIndicator}\n ${!props.column.isSorted ? 'text-secondary' : ''}\n ${props.theme?.sortIndicator ?? ''}`\n }\n >\n <SvgContainer\n svgName={(props.column.isSortedDesc || !props.column.isSorted)\n ? cvSvgLibrary.ArrowRight\n : cvSvgLibrary.ArrowLeft\n }\n size={SvgContainerSize.Small}\n />\n </span>\n );\n}\n\ninterface BaseTableProps<T extends HashObject> {\n /**\n * Must be memoized.\n */\n data: T[];\n\n /**\n * Must be memoized.\n * \n * For documentation on Column Options, see https://react-table.tanstack.com/docs/api/useTable#column-options\n */\n columns: Column<T>[];\n\n theme?: TableTheme;\n\n onSelectRow?: (row: Row<T>) => void;\n\n onSelectCell?: (cell: Cell<T>) => void;\n\n onRowMouseOver?: (row: Row<T>) => void;\n\n onRowMouseLeave?: (row: Row<T>) => void;\n\n allowSelectMultipleRows?: boolean;\n\n initialSelectedRowIds?: string[];\n\n getRowId?: (row: T) => string;\n\n getRowAppLink?: (row: Row<T>) => Core.AppLink;\n\n enableSort?: boolean;\n\n manualSort?: boolean;\n\n onSort?: (sortingRule: SortingRule<T>[]) => void;\n \n // Opt-in to utilise react-table's useFilter hook.\n allowFiltering?: boolean;\n\n // Opt-in to utilise react-table's useGlobalFilter hook.\n allowGlobalFiltering?: boolean;\n\n // Use either a flex layout or a block layout. Default is flex.\n layout?: 'flex' | 'block';\n\n // Used by useGlobalFilter hook, needs to be enabled by prop above.\n globalFilter?: string;\n\n // Set initial state of hidden columns in react-table.\n hiddenColumns?: IdType<T>[];\n\n // Determine whether hidden columns should be preserved on a table update event.\n autoResetHiddenColumns?: boolean;\n\n // Determine whether sort order state should be preserved on a table update event.\n autoResetSortBy?: boolean;\n\n // Determine whether rows are sortable by drag and drop\n enableSortableRows?: boolean;\n\n onSortingRowsEnd?: (event: DragEndEvent) => void;\n\n // Set initial state of sorting in react-table\n initialSortBy?: SortingRule<T>[];\n\n emptyState?: JSX.Element;\n}\n \ntype SortableRowProps = PropsWithSortableItemProps<TableRowProps>;\n\nfunction BaseTable<T extends HashObject>(props: BaseTableProps<T>): JSX.Element {\n const tableOptions: TableOptions<T> = {\n columns: props.columns,\n data: props.data,\n disableSortBy: !props.enableSort,\n manualSortBy: props.manualSort,\n autoResetHiddenColumns: props.autoResetHiddenColumns,\n autoResetSortBy: props.autoResetSortBy,\n initialState: {\n sortBy: props.initialSortBy || []\n }\n };\n\n if (props.initialSelectedRowIds)\n tableOptions.initialState = { selectedRowIds: getSelectedRowIds(props.initialSelectedRowIds) };\n\n if (props.getRowId)\n tableOptions.getRowId = props.getRowId;\n\n const {\n getTableProps,\n getTableBodyProps,\n headerGroups,\n rows,\n prepareRow,\n toggleAllRowsSelected,\n setGlobalFilter,\n setHiddenColumns,\n state: { sortBy }\n } = useTable<T>(tableOptions, ...getPlugins<T>({ ...props }));\n\n function getTableRowsClass(row: Row<T>) {\n let className = FunctionHelper.isFunction(props.theme?.row)\n ? props.theme.row(row)\n : props.theme?.row ?? '';\n\n if (row.isSelected && props.theme?.selectedRow)\n className += ` ${props.theme?.selectedRow}`;\n\n if (props.onSelectRow)\n className += ' cursor-pointer';\n\n if (props.enableSortableRows)\n className += ' cursor-grab';\n\n return className;\n }\n\n function renderTableRows() {\n if (!rows.length && props.emptyState)\n return props.emptyState;\n \n return rows.map(row => {\n prepareRow(row);\n \n const className = getTableRowsClass(row);\n const rowAppLink = !!props.getRowAppLink && props.getRowAppLink(row);\n\n function onClickRow(): void {\n if (!props.onSelectRow)\n return;\n\n if (!props.allowSelectMultipleRows)\n toggleAllRowsSelected(false);\n \n props.onSelectRow(row);\n row.toggleRowSelected(true);\n }\n\n function getSortableProps(props: TableRowProps | PropsWithSortableItemProps<TableRowProps>, ref?: any) {\n if ('dragAttributes' in props && 'dragListeners' in props) {\n return {\n ...props.dragAttributes,\n ...props.dragListeners,\n 'aria-roledescription': 'Sortable row',\n ref\n };\n }\n\n return {};\n }\n\n function renderRow(props: TableRowProps | PropsWithSortableItemProps<TableRowProps>, ref?: any): JSX.Element {\n const sortableProps = getSortableProps(props, ref);\n\n if (rowAppLink) {\n return (\n <div\n role='row'\n key={row.id}\n >\n <AppLink\n {...props}\n {...sortableProps}\n className={className}\n appLink={rowAppLink}\n >\n {renderCells(row)}\n </AppLink>\n </div>\n );\n }\n\n return (\n <div\n {...props}\n {...sortableProps}\n key={row.id}\n role='row'\n className={className}\n onClick={onClickRow}\n >\n {renderCells(row)}\n </div>\n );\n }\n\n const rowProps = row.getRowProps();\n\n if (props.enableSortableRows) {\n return (\n <SortableItemWrapper\n id={row.original.id}\n key={row.id}\n childProps={rowProps}\n childComponent={React.forwardRef(\n (props: SortableRowProps, ref: React.LegacyRef<HTMLDivElement>) => (renderRow(props, ref))\n )}\n />\n );\n }\n\n return renderRow(rowProps);\n });\n }\n\n function getDragOverlayClassName(theme: TableTheme): string {\n let className = 'g-0 ';\n\n if (theme)\n className += theme.row;\n\n return className;\n }\n\n function getDragOverlay(id: string) {\n const rowIndex = rows.findIndex(item => item.original.id === id);\n const row = rows[rowIndex];\n \n return (\n <div\n {...props}\n className={getDragOverlayClassName(props.theme)}\n style={DragOverlayStyles}\n >\n {renderCells(row)}\n </div>\n );\n }\n\n function getCellClassName(row: Row<T>, cell: Cell<T>): string {\n let cellClassName = '';\n\n if (typeof props.theme?.cell === 'function')\n cellClassName = props.theme.cell(row, cell);\n\n if (typeof props.theme?.cell === 'string')\n cellClassName = props.theme.cell;\n\n if (props.onSelectCell)\n cellClassName += ' cursor-pointer';\n\n return cellClassName;\n }\n\n function renderCells(row: Row<T>): JSX.Element[] {\n return row.cells.map(cell => {\n const cellClassName = getCellClassName(row, cell);\n\n function onClickCell(): void {\n props.onSelectCell && props.onSelectCell(cell);\n }\n\n return (\n <div key={cell.column.id} {...cell.getCellProps()} className={cellClassName} onClick={onClickCell} >\n {cell.render('Cell')}\n </div>\n );\n });\n }\n\n React.useEffect(() => {\n if (!props.onSort)\n return;\n\n props.onSort(sortBy);\n }, [sortBy]);\n\n React.useEffect(() => {\n if (!props.globalFilter)\n return;\n\n setGlobalFilter(props.globalFilter);\n }, [props.globalFilter]);\n\n React.useEffect(() => {\n if (!props.hiddenColumns)\n return;\n\n setHiddenColumns(props.hiddenColumns);\n }, [props.hiddenColumns && props.hiddenColumns.length]);\n\n return (\n <div {...getTableProps()} className={props.theme?.table ?? ''}>\n <div className={props.theme?.header ?? ''}>\n {headerGroups.map(headerGroup => (\n <div {...headerGroup.getHeaderGroupProps()} className={props.theme?.headerRow ?? ''}>\n {headerGroup.headers.map(column => (\n <div {...column.getHeaderProps(column.getSortByToggleProps())} className={props.theme?.headerCell ?? ''}>\n {column.render('Header', { renderSortIndicator: () => <SortIndicator column={column} theme={props.theme} /> })}\n {!(column as Column<T>).hideSortIndicator &&\n <SortIndicator column={column} theme={props.theme} />\n }\n </div>\n ))}\n </div>\n ))}\n </div>\n <div {...getTableBodyProps()} className={props.theme?.body ?? ''}>\n { props.enableSortableRows ? (\n <SortableContainerWrapper\n ids={rows.map(row => row.original.id)}\n getDragOverlay={getDragOverlay}\n onSortEnd={props.onSortingRowsEnd}\n >\n {renderTableRows()}\n </SortableContainerWrapper>\n ) : (\n renderTableRows()\n )}\n </div>\n </div>\n );\n}\n\ninterface TableProps<T extends HashObject> extends BaseTableProps<T> {\n enableSlider?: boolean;\n scrollIncrement?: number;\n scrollContainerClassName?: string;\n scrollable?: boolean;\n initialSortBy?: SortingRule<T>[];\n}\n\nTable.defaultProps = {\n scrollIncrement: 250,\n scrollable: false,\n layout: 'flex'\n};\n\nexport function Table<T extends HashObject>(props: TableProps<T>): JSX.Element {\n const { enableSlider, scrollIncrement, scrollable, ...tableProps } = props;\n\n const { ref, scrollState, scroll } = useTableScroll();\n\n if (scrollable) {\n return (\n <Scrollbars\n renderTrackHorizontal={() => <div className={styles.scrollbarTrack} />}\n autoHeightMax={10000}\n autoHeight\n >\n <BaseTable {...tableProps} />\n </Scrollbars>\n );\n }\n\n if (!enableSlider)\n return <BaseTable {...tableProps} />;\n\n function onClickScroll(direction: 'left' | 'right'): void {\n scroll(scrollIncrement * (direction === 'right' ? 1 : -1));\n }\n\n return (\n <div className='mx-n4 overflow-x-hidden overflow-y-hidden'>\n <div className='px-4'>\n <div className='position-relative'>\n <WidgetButton\n direction={WidgetButtonDirection.Left}\n onClick={() => onClickScroll('left')}\n hide={!scrollState.canScrollLeft}\n />\n <div className={`${styles.scrollContainer} ${props.scrollContainerClassName}`} ref={ref}>\n <BaseTable {...tableProps } />\n </div>\n <WidgetButton\n direction={WidgetButtonDirection.Right}\n onClick={() => onClickScroll('right')}\n hide={!scrollState.canScrollRight}\n />\n </div>\n </div>\n </div>\n );\n}","import { Flight } from 'libs/common/react/index';\n\nexport const InsightsDemoRequests = {\n interactive(): Flight.Request {\n return {\n url: `/mocks/insights/interactive.json`,\n key: `demo:interactive`,\n normalize: false\n };\n },\n\n interactiveMetadata(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-metadata.json`,\n key: `demo:interactive:metadata`,\n normalize: false\n };\n },\n\n interactiveResults(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-results.json`,\n key: `demo:interactive:results`,\n normalize: false\n };\n },\n\n videoViews(): Flight.Request {\n return {\n url: `/mocks/insights/video-views.json`,\n key: `demo:video:views`,\n normalize: false\n };\n },\n\n users(): Flight.Request {\n return {\n url: `/mocks/insights/users.json`,\n key: `demo:users`,\n normalize: false\n };\n },\n\n individualHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/individual-heatmap.json`,\n key: `demo:individual:heatmap`,\n normalize: false\n };\n },\n\n aggregateHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/aggregate-heatmap.json`,\n key: `demo:aggregate:heatmap`,\n normalize: false\n };\n }\n};","import { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SharePrivacy } from 'libs/shared/apps/share-v2/enums/SharePrivacy';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { MySharesTableData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\n\nconst namespace = 'myShares.demoInsights';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst DEMO_INSIGHT_DAYS_AGO = 7;\n\nexport const DEMO_INSIGHTS_SHARE: Share = {\n type: ShareType.Link,\n privacy: SharePrivacy.JustMySchool,\n objectId: '0',\n objectTypeId: MasterType.Interactive,\n viewCount: 28,\n accessCount: 15,\n dateCreated: new Date().toISOString(),\n dateShared: new Date().toISOString(),\n expireDate: null,\n link: {\n shortenedEmbedUrl: '',\n shortenedUrl: ''\n },\n shareId: '0',\n ownerCustomerId: 0,\n ownerId: 0,\n recipients: [],\n options: {\n preventScrubbing: false,\n immediateFeedback: false\n }\n};\n\nexport const DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE: Share = {\n ...DEMO_INSIGHTS_SHARE,\n type: ShareType.Open,\n expireDate: DateHelper.add(new Date(DEMO_INSIGHTS_SHARE.dateCreated), 30, 'days').toISOString(),\n privacy: SharePrivacy.PinCode\n};\n\nexport const DEMO_INSIGHTS_SHARE_TABLE_DATA: MySharesTableData = {\n share: DEMO_INSIGHTS_SHARE,\n sharedObject: null,\n shareRecipients: null,\n dateShared: DateHelper.subtract(new Date(), DEMO_INSIGHT_DAYS_AGO, 'days').toISOString()\n};\n\nexport const DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE_TABLE_DATA: MySharesTableData = {\n ...DEMO_INSIGHTS_SHARE_TABLE_DATA,\n share: DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE\n};\n\nexport const DEMO_INSIGHTS_APPLINK: Core.AppLink = {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_DEMO\n};\n\nexport const DEMO_INSIGHTS_OPEN_CLASSROOM_APPLINK: Core.AppLink = {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_OPEN_CLASSROOM_DEMO\n};\n\nexport const DEMO_INSIGHTS_ACTION: ActionOptions = {\n svgName: cvSvgLibrary.Analytics,\n label: getPhrase('demoInsights'),\n appLink: DEMO_INSIGHTS_APPLINK,\n group: 'insights',\n className: 'btn btn-outline-dark'\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 { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InsightsDemoRequests } from 'libs/shared/flight-requests/InsightsDemoRequests';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\n\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InteractiveInsightsQuestions } from 'apps/my-shares/components/interactive-insights-questions/InteractiveInsightsQuestions';\nimport { DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE, DEMO_INSIGHTS_SHARE } from 'apps/my-shares/constants/MySharesDemoInsights';\nimport { getInsightsDemoInteractiveTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\n\nconst namespace = 'shared.interactiveInsightsQuestionsView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractiveInsightsQuestionsViewProps {\n interactionId: string;\n sortBy: SortStudentsBy;\n type?: ShareType;\n}\n\nexport function InteractiveInsightsQuestionsDemoView(props: InteractiveInsightsQuestionsViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InsightsDemoRequests.interactiveMetadata()\n );\n\n const interactive = Flight.useBasicFetch<Interactive>(InsightsDemoRequests.interactive());\n\n const audienceAppLinkParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n const dateRangeAppLinkParams = AnalyticsFilterHelper.getDateRangeAppLinkParams();\n\n const results = Flight.useBasicFetch<InteractiveResultSet>(InsightsDemoRequests.interactiveResults());\n\n useSetPageMetadata({ title: interactiveMetadata.data ? getPhrase('pageTitle', { video: interactiveMetadata.data?.name }) : null });\n\n const hasDataLoaded = interactive.data && interactiveMetadata.data && !!results.data;\n\n const params = {\n ...audienceAppLinkParams,\n ...dateRangeAppLinkParams\n };\n\n const share = props.type === ShareType.Open ? DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE : DEMO_INSIGHTS_SHARE;\n\n return (\n <div className='px-3'>\n <InsightsHeader\n tabs={getInsightsDemoInteractiveTabs(interactiveMetadata.data?.id, 'questions', params, props.type)}\n video={interactiveMetadata.data}\n dateRangeAppLinkParams={dateRangeAppLinkParams}\n share={{\n ...share,\n objectId: interactiveMetadata.data?.id\n }}\n yearGroups={[]}\n markingRequired={props.type !== ShareType.Open}\n isDemo\n hasData\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.isFetching || interactive.isFetching}\n anonymiseUsers={anonymiseUsers}\n results={results.data}\n hasDataLoaded={hasDataLoaded}\n isDemo\n />\n </div>\n );\n}"],"names":["getPhrase","getClassName","props","className","showLabel","PendingIndicator","title","tooltipClassName","showIndicator","Indicator","spanHack","spanHackClassName","getSortStudents","sortBy","id","desc","shouldFilterStudent","filter","summary","awaitingMarking","percentCorrect","unanswered","DragOverlayStyles","opacity","cursor","calculateScrollState","ref","canScrollLeft","current","scrollLeft","canScrollRight","scrollWidth","clientWidth","SortIndicator","column","canSort","isSorted","theme","sortIndicator","SvgContainer","svgName","isSortedDesc","size","S","BaseTable","ids","idHash","tableOptions","columns","data","disableSortBy","enableSort","manualSortBy","manualSort","autoResetHiddenColumns","autoResetSortBy","initialState","initialSortBy","initialSelectedRowIds","selectedRowIds","forEach","getRowId","useTable","plugins","useSortBy","useRowSelect","layout","useFlexLayout","useBlockLayout","allowFiltering","useFilters","allowGlobalFiltering","useGlobalFilter","getPlugins","getTableProps","getTableBodyProps","headerGroups","rows","prepareRow","toggleAllRowsSelected","setGlobalFilter","setHiddenColumns","state","renderTableRows","length","emptyState","map","row","FunctionHelper","isSelected","selectedRow","onSelectRow","enableSortableRows","getTableRowsClass","rowAppLink","getRowAppLink","onClickRow","allowSelectMultipleRows","toggleRowSelected","renderRow","sortableProps","dragAttributes","dragListeners","getSortableProps","role","key","AppLink","appLink","renderCells","onClick","rowProps","getRowProps","SortableItemWrapper","original","childProps","childComponent","cells","cell","cellClassName","onSelectCell","getCellClassName","getCellProps","render","onSort","globalFilter","hiddenColumns","table","header","headerGroup","getHeaderGroupProps","headerRow","headers","getHeaderProps","getSortByToggleProps","headerCell","renderSortIndicator","hideSortIndicator","body","SortableContainerWrapper","getDragOverlay","rowIndex","findIndex","item","style","onSortEnd","onSortingRowsEnd","Table","enableSlider","scrollIncrement","scrollable","tableProps","elRef","scrollState","setScrollState","throttledOnScroll","el","removeEventListener","addEventListener","scroll","scrollBy","left","top","behavior","useTableScroll","renderTrackHorizontal","autoHeightMax","autoHeight","onClickScroll","direction","WidgetButton","W","hide","scrollContainerClassName","defaultProps","InsightsDemoRequests","interactive","url","normalize","interactiveMetadata","interactiveResults","videoViews","users","individualHeatmap","aggregateHeatmap","DEMO_INSIGHTS_SHARE","type","privacy","objectId","objectTypeId","viewCount","accessCount","dateCreated","Date","toISOString","dateShared","expireDate","link","shortenedEmbedUrl","shortenedUrl","shareId","ownerCustomerId","ownerId","recipients","options","preventScrubbing","immediateFeedback","DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE","DEMO_INSIGHTS_SHARE_TABLE_DATA","share","sharedObject","shareRecipients","DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE_TABLE_DATA","DEMO_INSIGHTS_APPLINK","application","action","DEMO_INSIGHTS_OPEN_CLASSROOM_APPLINK","DEMO_INSIGHTS_ACTION","label","group","InteractiveInsightsQuestionsDemoView","anonymiseUsers","config","audienceAppLinkParams","dateRangeAppLinkParams","results","video","name","hasDataLoaded","params","tabs","yearGroups","markingRequired","isDemo","hasData","interactionId","isFetching"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[9295,9149,4519],{57724:(e,t,n)=>{n.d(t,{g:()=>l});var r=n(32735),a=n(31453),s=n(83345),o="shared.newBadge";function l(e){return r.createElement("span",{className:(0,a.A)("badge badge-wrapper rounded-pill d-flex justify-content-center","fw-medium text-blue","sm"===e.size?"badge-sm":"badge-std",e.invert?"bg-white":"bg-light-blue",e.className)},e.text||r.createElement(s.x,{phrase:"new",namespace:o}))}},35690:(e,t,n)=>{n.d(t,{QD:()=>S,Qv:()=>I,__:()=>A});var r=n(32735),a=n(68050),s=n(69111),o=n(42648),l=n(82602),i=n(31453),c=n(1619),m=n(83345),u=n(4594),d="sharev2.shareViewCount";function p(e){return[u.E.Playlist,u.E.Series].includes(e.share.objectTypeId)?r.createElement("span",null,"-"):r.createElement(m.x,{namespace:d,phrase:"viewCount",options:{smartCount:e.share.viewCount||0}})}var g=n(2510),f=n(83914),v=n(35223);function h(e){return[u.E.Playlist,u.E.Series].includes(e.share.objectTypeId)?r.createElement("span",null,"-"):r.createElement("span",{className:"d-inline-flex flex-row gap-2 align-items-center"},r.createElement(f.x,{svgName:v.vn.User}),r.createElement("span",null,function(){var t=e.share.accessCount||0;if(e.share.type===g.y.Open)return"".concat(t);if(e.share.type===g.y.Classroom){var n=e.share.recipients.length;return"".concat(t,"/").concat(n)}return"".concat(t)}()))}var y=n(21789),b=n(15611),x=n(91693);const w={shareListItem:"vLROV",visibleOnHover:"o2KJH",shareAvatar:"zDcMp",shareAvatarTitle:"U8yMQ"};var E="assign.previousAssignments";function C(e){return r.createElement("div",{className:(0,i.A)("d-flex align-items-center justify-content-between",e.show&&"mb-3")},r.createElement("h3",{className:"h6 m-0 p-0"},r.createElement(m.x,{namespace:E,phrase:"heading",options:{count:e.count}})),r.createElement(x.h,{svgName:e.show?v.vn.ChevronUp:v.vn.ChevronDown,onClick:e.onToggle}))}function A(){var e="d-flex align-items-end justify-content-start fw-medium";return r.createElement(m.D.Provider,{value:E},r.createElement(a.Z,{className:"gx-2 px-3 mb-2"},r.createElement(s.Z,{xs:4,className:e},r.createElement(m.x,{phrase:"assignedTo"})),r.createElement(s.Z,{xs:2,className:e},r.createElement(m.x,{phrase:"views"})),r.createElement(s.Z,{xs:2,className:e},r.createElement(m.x,{phrase:"viewedBy"})),r.createElement(s.Z,{xs:4,className:e},r.createElement(m.x,{phrase:"dateCreated"}))))}function N(e){var t,n,o=y.x.getClassroomForShare(e.share,e.classrooms),u=null===(t=e.getItemAnalytics)||void 0===t?void 0:t.call(e,e.share);return r.createElement(b.F,{key:e.share.shareId,appLink:e.getItemAppLink(e.share),analyticsData:null==u?void 0:u.data,analyticsOptions:null==u?void 0:u.options,className:(0,i.A)("d-block p-3 hover-bg-light-blue border border-top-0 no-hover-text-underline",w.shareListItem,e.className)},r.createElement(a.Z,{className:"gx-2"},r.createElement(s.Z,{xs:4,className:"d-flex align-items-center"},r.createElement(c.e,{type:e.share.type,privacy:e.share.privacy,classroomName:null==o?void 0:o.name,svgSize:f.S.Small,openClassroomName:null===(n=e.share.options)||void 0===n?void 0:n.openClassroomName,className:(0,i.A)(w.shareAvatar),titleClassName:(0,i.A)("text-truncate",w.shareAvatarTitle),hideSubtitle:!0})),r.createElement(s.Z,{xs:2,className:"d-flex align-items-center justify-content-start"},r.createElement(p,{share:e.share})),r.createElement(s.Z,{xs:2,className:"d-flex align-items-center justify-content-start"},r.createElement(h,{share:e.share})),r.createElement(s.Z,{xs:4,lg:3,className:"d-flex align-items-center justify-content-start"},r.createElement("span",null,(0,l.WU)(e.share.dateCreated))),r.createElement(s.Z,{lg:1,className:"align-items-center justify-content-end d-none d-lg-flex"},r.createElement("span",{className:(0,i.A)("cursor-pointer text-info hover-text-underline",w.visibleOnHover)},r.createElement(m.x,{namespace:E,phrase:"view"})))))}function I(e){var t;return r.createElement("div",{className:(0,i.A)("d-flex flex-column border-top rounded-top overflow-hidden")},r.createElement(o.ZP,{autoHeight:!0,autoHeightMin:0,autoHeightMax:null!==(t=e.scrollHeightMax)&&void 0!==t?t:215,autoHide:!0},e.assignments.map(function(t,n){return r.createElement(N,{share:t,classrooms:e.classrooms,getItemAppLink:e.getItemAppLink,getItemAnalytics:function(t){var r;return null===(r=e.getItemAnalytics)||void 0===r?void 0:r.call(e,t,n)},className:(0,i.A)(n%2==0&&"bg-gray-100"),key:t.shareId})})))}function S(e){if(!e.assignments.length)return r.createElement(r.Fragment,null);var t=e.show&&e.assignments.length>3;return r.createElement("div",{className:(0,i.A)("bg-white rounded-3 p-3",t&&"pb-0")},r.createElement(C,{count:e.assignments.length,onToggle:e.onToggle,show:e.show}),e.show&&r.createElement(r.Fragment,null,r.createElement(A,null),r.createElement(I,Object.assign({},e))))}},7908:(e,t,n)=>{n.r(t),n.d(t,{AssignFlowView:()=>Q});var r=n(32735),a=n(89067),s=n(72985),o=n(23481),l=n(31453),i=n(65858),c=n(9111),m=n(99998),u=n(35690),d=n(7786),p=n(57724),g=n(83345),f="shared.recommendedBadge";function v(e){var t;return r.createElement("span",{className:(0,l.A)("badge badge-wrapper rounded-pill d-flex justify-content-center","fw-medium text-teal","sm"===e.size?"badge-sm":"badge-std",e.invert?"bg-white":"bg-light-teal",e.className)},null!==(t=e.text)&&void 0!==t?t:r.createElement(g.x,{phrase:"recommended",namespace:f}))}function h(e){return"existing-classroom"===e.type?e.hasClassrooms?r.createElement(v,{size:"sm",invert:e.hovered}):null:"open-classroom"===e.type?e.hasClassrooms?r.createElement(p.g,{size:"sm",invert:e.hovered}):r.createElement("div",{className:"d-flex align-items-center gap-2"},r.createElement(p.g,{size:"sm",invert:e.hovered}),r.createElement(v,{size:"sm",invert:e.hovered})):null}var y=n(11607),b=n(12528),x=n(83914),w=n(37963),E=n(35223);const C={optionItem:"Lu2bY"};function A(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var N={"flow-selector":"purple","existing-classroom":"purple","open-classroom":"blue"};function I(e){var t,n,a=(t=(0,w.X)(),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,s,o,l=[],i=!0,c=!1;try{if(s=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(r=s.call(n)).done)&&(l.push(r.value),l.length!==t);i=!0);}catch(e){c=!0,a=e}finally{try{if(!i&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw a}}return l}}(t,n)||function(e,t){if(e){if("string"==typeof e)return A(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?A(e,t):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),s=a[0],o=a[1],i=e.item.badgeComponent;return r.createElement(y.L,{onClick:function(){return e.onClick(e.item)},className:(0,l.A)("d-flex flex-column gap-4 align-items-start align-self-stretch justify-content-center","text-left cursor-pointer p-3 border rounded-3 user-select-none hover-bg-light-blue",C.optionItem),ref:s},r.createElement("div",{className:"d-flex flex-column gap-2 w-100"},r.createElement("div",{className:"d-flex flex-column flex-md-row justify-content-between align-items-start align-items-md-center gap-2"},r.createElement("div",{className:"d-flex align-items-center gap-2 order-2 order-md-0"},r.createElement("div",null,r.createElement(b.f,{svgName:E.vn.Classrooms,svgSize:x.S.Standard,variant:N[e.item.id],textVariant:"white",svgWrapperClassName:"p-1"})),r.createElement("h3",{className:"h6 m-0"},e.item.title)),!!i&&r.createElement(i,{hovered:o})),e.item.subTitle&&r.createElement("p",{className:"mb-0 text-gray-900"},e.item.subTitle)))}function S(e){return r.createElement("div",{className:"bg-white rounded-bottom-3 p-3 d-flex flex-column gap-3 justify-content-center align-items-center"},!!e.title&&r.createElement("h2",{className:"h4 m-0"},e.title),r.createElement("div",{className:"d-flex flex-column justify-content-center align-items-center gap-3 w-100"},e.options.map(function(t){return r.createElement(I,{item:t,onClick:e.onClick,key:t.id})})))}var T=n(2948),j=n(20354),k=n(75896),P=n(2510),O=n(18488),F=n(21789),D=n(37802),L=n(86099),Z=n(95890),U=n(88630);function z(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var M="show:previous:assignments",_=o.T.encloseNamespace("assign.flowSelectorView");function B(e){var t=function(e){var t,n,r,a,s,o,l=(s=(0,T.D)(M,!1),o=2,function(e){if(Array.isArray(e))return e}(s)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,s,o,l=[],i=!0,c=!1;try{if(s=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(r=s.call(n)).done)&&(l.push(r.value),l.length!==t);i=!0);}catch(e){c=!0,a=e}finally{try{if(!i&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw a}}return l}}(s,o)||function(e,t){if(e){if("string"==typeof e)return z(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?z(e,t):void 0}}(s,o)||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.")}()),i=l[0],c=l[1],m=(0,Z._)({entityType:e.entityType,objectId:e.objectId}),u=(0,D.r)(null),d=u.isLoadingSettings,p=u.hasClassrooms,g=j.a.useBasicFetch(O.o.getSharesByObjectId(e.objectId)),f=(null===(t=g.data)||void 0===t?void 0:t.filter(function(e){return[P.y.Classroom,P.y.Open].includes(e.type)}))||[],v=k.m.uniq(f.map(F.x.getClassroomIdFromShare).filter(function(e){return!!e})),h=j.a.useBasicFetch(g.hasCompleted&&U.F.getClassroomsByIds(v,null===(n=m.currentUser.data)||void 0===n?void 0:n.customerId)),y=j.a.useBasicFetch(p&&U.F.getPublished(null===(r=m.currentUser.data)||void 0===r?void 0:r.customerId));return{data:{loaded:m.loaded&&!d&&!!g.data&&!!h.data&&!!y.data,previousAssignments:f,previousAssignmentClassrooms:h},showPreviousAssignments:i,hasClassrooms:p&&!!(null===(a=y.data)||void 0===a?void 0:a.data.length),canCreateClassrooms:m.canCreateClassrooms,getPreviousAssignItemAppLink:function(e){var t=(0,L.pY)(e);if(t)return t},onTogglePreviousAssignment:function(){c(!i)}}}({entityType:e.entityType,objectId:e.objectId}),n=(0,m.R)().experience,a=t.data,s=a.loaded,o=a.previousAssignmentClassrooms,p=a.previousAssignments,g=(0,d.y)({data:{entity:{id:e.objectId,type:e.entityType}},analyticsOptions:{location:i.LZ.Popup,entity:i.py.Assign}}),f=g.log,v=g.getData,y=[{id:"existing-classroom",title:_("existingClassroomTitle"),subTitle:_("existingClassroomDescription"),badgeComponent:function(e){var n=e.hovered;return r.createElement(h,{type:"existing-classroom",hasClassrooms:t.hasClassrooms&&t.canCreateClassrooms,hovered:n})}},{id:"open-classroom",title:_("openClassroomTitle"),subTitle:_("openClassroomDescription"),badgeComponent:function(e){var n=e.hovered;return r.createElement(h,{type:"open-classroom",hasClassrooms:t.hasClassrooms&&t.canCreateClassrooms,hovered:n})}}];return r.createElement(c.G,{size:"lg",animation:e.animate,title:_("title"),closePopup:e.closePopup,bodyClassName:"d-flex flex-column gap-3 p-0",contentClassName:(0,l.A)(s&&"bg-transparent border-0"),showLoadingSpinner:!s||e.loading},r.createElement(S,{options:y,onClick:function(r){if("existing-classroom"===r.id){if("minimal"===n)return e.goToNoClassroomPrompt(),void f({type:"select-existing-classroom-flow",initialStep:"no-classroom"});if(!t.hasClassrooms&&t.canCreateClassrooms)return e.goToCreateClassroomPrompt(),void f({type:"select-existing-classroom-flow",initialStep:"create-classroom"});if(!t.hasClassrooms&&!t.canCreateClassrooms)return e.goToNoExistingClassroomPrompt(),void f({type:"select-existing-classroom-flow",initialStep:"no-existing-classroom"});e.goToExistingClassroomFlow(),f({type:"select-existing-classroom-flow"})}else"open-classroom"===r.id&&(e.goToOpenClassroomFlow(),f({type:"select-open-classroom-flow"}))}}),r.createElement(u.QD,{assignments:p,show:t.showPreviousAssignments,classrooms:o.data,onToggle:t.onTogglePreviousAssignment,getItemAppLink:t.getPreviousAssignItemAppLink,getItemAnalytics:function(e,t){var n=v({type:"view-previous-assignment",share:e,yIndex:t}),r=n.analyticsOptions;return{data:n.data,options:r}}}))}var H=n(77568);function $(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,s,o,l=[],i=!0,c=!1;try{if(s=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(r=s.call(n)).done)&&(l.push(r.value),l.length!==t);i=!0);}catch(e){c=!0,a=e}finally{try{if(!i&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return V(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?V(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function V(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function Q(e){var t,n=$(r.useState(null!==(t=e.selectedFlow)&&void 0!==t?t:"flow-selector"),2),o=n[0],l=n[1],i=$(r.useState(null),2),c=i[0],m=i[1],u=$(r.useState(!0),2),d=u[0],p=u[1];function g(e){p(!1),l(e)}var f={objectId:e.objectId,entityType:e.entityType,closePopup:e.closePopup,initialStep:c,goToCreateClassroomPrompt:function(){m("create-classroom"),g("existing-classroom")},goToNoClassroomPrompt:function(){m("no-classroom"),g("existing-classroom")},goToNoExistingClassroomPrompt:function(){m("no-existing-classroom"),g("existing-classroom")},goToExistingClassroomFlow:function(){return g("existing-classroom")},goToFlowSelector:function(){return g("flow-selector")},goToOpenClassroomFlow:function(){return g("open-classroom")}};return r.createElement(a.r,{data:f,step:o,setStep:g,closePopup:e.closePopup,animate:d,steps:{"flow-selector":{view:B},"open-classroom":{view:H.OpenClassroomFlowView},"existing-classroom":{view:s.ExistingClassroomFlowView}}})}},82602:(e,t,n)=>{n.d(t,{WU:()=>c});var r=["second","minute","hour","day","week","month","year"],a=["秒","分钟","小时","天","周","个月","年"],s={},o=function(e,t){s[e]=t},l=[60,60,24,7,365/7/12,12];function i(e){return e instanceof Date?e:!isNaN(e)||/^\d+$/.test(e)?new Date(parseInt(e)):(e=(e||"").trim().replace(/\.\d+/,"").replace(/-/,"/").replace(/-/,"/").replace(/(\d)T(\d)/,"$1 $2").replace(/Z/," UTC").replace(/([+-]\d\d):?(\d\d)/," $1$2"),new Date(e))}var c=function(e,t,n){var r=function(e,t){return(+(t?i(t):new Date)-+i(e))/1e3}(e,n&&n.relativeDate);return function(e,t){for(var n=e<0?1:0,r=e=Math.abs(e),a=0;e>=l[a]&&a<l.length;a++)e/=l[a];return(e=Math.floor(e))>(0==(a*=2)?9:1)&&(a+=1),t(e,a,r)[n].replace("%s",e.toString())}(r,function(e){return s[e]||s.en_US}(t))};o("en_US",function(e,t){if(0===t)return["just now","right now"];var n=r[Math.floor(t/2)];return e>1&&(n+="s"),[e+" "+n+" ago","in "+e+" "+n]}),o("zh_CN",function(e,t){if(0===t)return["刚刚","片刻后"];var n=a[~~(t/2)];return[e+" "+n+"前",e+" "+n+"后"]})}}]);
2
- //# sourceMappingURL=9295-eb130a0b17-lite.chunk.js.map