@clickview/lite 0.75.0-rc.2 → 0.75.0-rc.3

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 (160) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/css/{119-lite-a1f592f602.chunk.css → 1243-lite-13eda8f6a0.chunk.css} +2 -4
  3. package/dist/css/{7230-lite-36ff6e6d53.chunk.css → 1867-lite-8baa8af02b.chunk.css} +3 -5
  4. package/dist/css/{5241-lite-baab687563.chunk.css → 4203-lite-9ffab89741.chunk.css} +3 -5
  5. package/dist/css/{8364-lite-99938dea56.chunk.css → 5193-lite-d434056013.chunk.css} +1 -0
  6. package/dist/css/{7339-lite-05c396fed3.chunk.css → 6756-lite-839687d3d7.chunk.css} +1 -0
  7. package/dist/css/{9527-lite-1d2221b6a8.chunk.css → 7103-lite-fef3024f61.chunk.css} +2 -4
  8. package/dist/css/{8856-lite-827b34aed7.chunk.css → 8856-lite-c114ab5c89.chunk.css} +1 -1
  9. package/dist/languages/en.json +1 -1
  10. package/dist/scripts/104-7abe2b09dd-lite.chunk.js +2 -0
  11. package/dist/scripts/104-7abe2b09dd-lite.chunk.js.map +1 -0
  12. package/dist/scripts/1074-2ab8b03e30-lite.chunk.js +2 -0
  13. package/dist/scripts/1074-2ab8b03e30-lite.chunk.js.map +1 -0
  14. package/dist/scripts/1087-861be5211f-lite.chunk.js +2 -0
  15. package/dist/scripts/1087-861be5211f-lite.chunk.js.map +1 -0
  16. package/dist/scripts/1199-6522b1d291-lite.chunk.js +2 -0
  17. package/dist/scripts/1199-6522b1d291-lite.chunk.js.map +1 -0
  18. package/dist/scripts/121-1b744469ee-lite.chunk.js +2 -0
  19. package/dist/scripts/121-1b744469ee-lite.chunk.js.map +1 -0
  20. package/dist/scripts/{1221-502395e693-lite.chunk.js → 1221-894d8474d5-lite.chunk.js} +3 -3
  21. package/dist/scripts/1221-894d8474d5-lite.chunk.js.map +1 -0
  22. package/dist/scripts/1243-ede924125c-lite.chunk.js +2 -0
  23. package/dist/scripts/1243-ede924125c-lite.chunk.js.map +1 -0
  24. package/dist/scripts/147-44ee7e9a78-lite.chunk.js +2 -0
  25. package/dist/scripts/147-44ee7e9a78-lite.chunk.js.map +1 -0
  26. package/dist/scripts/{1610-7f58bb25a9-lite.chunk.js → 1610-bf848cce4d-lite.chunk.js} +2 -2
  27. package/dist/scripts/{1610-7f58bb25a9-lite.chunk.js.map → 1610-bf848cce4d-lite.chunk.js.map} +1 -1
  28. package/dist/scripts/{7230-71f8d6d1bd-lite.chunk.js → 1867-3b447a1b85-lite.chunk.js} +2 -2
  29. package/dist/scripts/{7230-71f8d6d1bd-lite.chunk.js.map → 1867-3b447a1b85-lite.chunk.js.map} +1 -1
  30. package/dist/scripts/2258-ed7383502f-lite.chunk.js +3 -0
  31. package/dist/scripts/2258-ed7383502f-lite.chunk.js.map +1 -0
  32. package/dist/scripts/3268-2736356687-lite.chunk.js +2 -0
  33. package/dist/scripts/{3268-faca1bf46e-lite.chunk.js.map → 3268-2736356687-lite.chunk.js.map} +1 -1
  34. package/dist/scripts/3836-425334ab13-lite.chunk.js +2 -0
  35. package/dist/scripts/{3836-f2a0c9f713-lite.chunk.js.map → 3836-425334ab13-lite.chunk.js.map} +1 -1
  36. package/dist/scripts/3837-e4c5bb738b-lite.chunk.js +2 -0
  37. package/dist/scripts/3837-e4c5bb738b-lite.chunk.js.map +1 -0
  38. package/dist/scripts/4185-1f65c7adc9-lite.chunk.js +2 -0
  39. package/dist/scripts/4185-1f65c7adc9-lite.chunk.js.map +1 -0
  40. package/dist/scripts/4203-ee50e89841-lite.chunk.js +3 -0
  41. package/dist/scripts/4203-ee50e89841-lite.chunk.js.map +1 -0
  42. package/dist/scripts/4598-bcd3f6f8a7-lite.chunk.js +2 -0
  43. package/dist/scripts/{4598-2b1daca7ae-lite.chunk.js.map → 4598-bcd3f6f8a7-lite.chunk.js.map} +1 -1
  44. package/dist/scripts/4948-f21dad2ca1-lite.chunk.js +2 -0
  45. package/dist/scripts/4948-f21dad2ca1-lite.chunk.js.map +1 -0
  46. package/dist/scripts/{5153-079b4125ae-lite.chunk.js → 5153-acc6c13153-lite.chunk.js} +3 -3
  47. package/dist/scripts/5153-acc6c13153-lite.chunk.js.map +1 -0
  48. package/dist/scripts/6137-bc8b193237-lite.chunk.js +2 -0
  49. package/dist/scripts/6137-bc8b193237-lite.chunk.js.map +1 -0
  50. package/dist/scripts/6756-e90680dfcd-lite.chunk.js +3 -0
  51. package/dist/scripts/6756-e90680dfcd-lite.chunk.js.map +1 -0
  52. package/dist/scripts/6790-c8a9efba50-lite.chunk.js +2 -0
  53. package/dist/scripts/6790-c8a9efba50-lite.chunk.js.map +1 -0
  54. package/dist/scripts/705-10a85bae7a-lite.chunk.js +2 -0
  55. package/dist/scripts/705-10a85bae7a-lite.chunk.js.map +1 -0
  56. package/dist/scripts/7103-14bd3771d2-lite.chunk.js +2 -0
  57. package/dist/scripts/7103-14bd3771d2-lite.chunk.js.map +1 -0
  58. package/dist/scripts/7205-12a6b2ac55-lite.chunk.js +2 -0
  59. package/dist/scripts/7205-12a6b2ac55-lite.chunk.js.map +1 -0
  60. package/dist/scripts/7438-88d11bb89a-lite.chunk.js +2 -0
  61. package/dist/scripts/7438-88d11bb89a-lite.chunk.js.map +1 -0
  62. package/dist/scripts/7480-e0749592fc-lite.chunk.js +2 -0
  63. package/dist/scripts/7480-e0749592fc-lite.chunk.js.map +1 -0
  64. package/dist/scripts/8010-e9163f5bee-lite.chunk.js +2 -0
  65. package/dist/scripts/8010-e9163f5bee-lite.chunk.js.map +1 -0
  66. package/dist/scripts/8410-1f1fd5ccf0-lite.chunk.js +3 -0
  67. package/dist/scripts/8410-1f1fd5ccf0-lite.chunk.js.map +1 -0
  68. package/dist/scripts/8705-ecd20ef6cb-lite.chunk.js +2 -0
  69. package/dist/scripts/8705-ecd20ef6cb-lite.chunk.js.map +1 -0
  70. package/dist/scripts/8856-02dd2e486c-lite.chunk.js +2 -0
  71. package/dist/scripts/8856-02dd2e486c-lite.chunk.js.map +1 -0
  72. package/dist/scripts/9003-1db925f5ec-lite.chunk.js +2 -0
  73. package/dist/scripts/9003-1db925f5ec-lite.chunk.js.map +1 -0
  74. package/dist/scripts/9042-1a42fcbba2-lite.chunk.js +2 -0
  75. package/dist/scripts/9042-1a42fcbba2-lite.chunk.js.map +1 -0
  76. package/dist/scripts/9103-4eec16d73b-lite.chunk.js +2 -0
  77. package/dist/scripts/9103-4eec16d73b-lite.chunk.js.map +1 -0
  78. package/dist/scripts/9134-19912ca3ee-lite.chunk.js +2 -0
  79. package/dist/scripts/9134-19912ca3ee-lite.chunk.js.map +1 -0
  80. package/dist/scripts/9266-f0ad8d5cb3-lite.chunk.js +2 -0
  81. package/dist/scripts/9266-f0ad8d5cb3-lite.chunk.js.map +1 -0
  82. package/dist/scripts/9740-9d50d31b72-lite.chunk.js +2 -0
  83. package/dist/scripts/9740-9d50d31b72-lite.chunk.js.map +1 -0
  84. package/dist/scripts/{bundle-95a6fc2722.min.js → bundle-828ca65de8.min.js} +3 -3
  85. package/dist/scripts/{bundle-95a6fc2722.min.js.map → bundle-828ca65de8.min.js.map} +1 -1
  86. package/package.json +1 -1
  87. package/dist/scripts/104-b62a8447f0-lite.chunk.js +0 -2
  88. package/dist/scripts/104-b62a8447f0-lite.chunk.js.map +0 -1
  89. package/dist/scripts/107-989ac2dc47-lite.chunk.js +0 -2
  90. package/dist/scripts/107-989ac2dc47-lite.chunk.js.map +0 -1
  91. package/dist/scripts/119-e3a8bd94dd-lite.chunk.js +0 -2
  92. package/dist/scripts/119-e3a8bd94dd-lite.chunk.js.map +0 -1
  93. package/dist/scripts/1199-a2ac2338d0-lite.chunk.js +0 -2
  94. package/dist/scripts/1199-a2ac2338d0-lite.chunk.js.map +0 -1
  95. package/dist/scripts/121-bf7a153eb8-lite.chunk.js +0 -2
  96. package/dist/scripts/121-bf7a153eb8-lite.chunk.js.map +0 -1
  97. package/dist/scripts/1221-502395e693-lite.chunk.js.map +0 -1
  98. package/dist/scripts/2258-4d0639c9fe-lite.chunk.js +0 -3
  99. package/dist/scripts/2258-4d0639c9fe-lite.chunk.js.map +0 -1
  100. package/dist/scripts/3268-faca1bf46e-lite.chunk.js +0 -2
  101. package/dist/scripts/3836-f2a0c9f713-lite.chunk.js +0 -2
  102. package/dist/scripts/3837-fe321e8deb-lite.chunk.js +0 -2
  103. package/dist/scripts/3837-fe321e8deb-lite.chunk.js.map +0 -1
  104. package/dist/scripts/4025-306e0fbdd5-lite.chunk.js +0 -2
  105. package/dist/scripts/4025-306e0fbdd5-lite.chunk.js.map +0 -1
  106. package/dist/scripts/4164-5d3af57b67-lite.chunk.js +0 -2
  107. package/dist/scripts/4164-5d3af57b67-lite.chunk.js.map +0 -1
  108. package/dist/scripts/4185-e8e40dab72-lite.chunk.js +0 -2
  109. package/dist/scripts/4185-e8e40dab72-lite.chunk.js.map +0 -1
  110. package/dist/scripts/4562-545f04c53f-lite.chunk.js +0 -2
  111. package/dist/scripts/4562-545f04c53f-lite.chunk.js.map +0 -1
  112. package/dist/scripts/4598-2b1daca7ae-lite.chunk.js +0 -2
  113. package/dist/scripts/4948-66ba60c8e3-lite.chunk.js +0 -2
  114. package/dist/scripts/4948-66ba60c8e3-lite.chunk.js.map +0 -1
  115. package/dist/scripts/5153-079b4125ae-lite.chunk.js.map +0 -1
  116. package/dist/scripts/5241-163f5ac64c-lite.chunk.js +0 -3
  117. package/dist/scripts/5241-163f5ac64c-lite.chunk.js.map +0 -1
  118. package/dist/scripts/5349-bc0fcb4083-lite.chunk.js +0 -2
  119. package/dist/scripts/5349-bc0fcb4083-lite.chunk.js.map +0 -1
  120. package/dist/scripts/6135-a878a9cff0-lite.chunk.js +0 -3
  121. package/dist/scripts/6135-a878a9cff0-lite.chunk.js.map +0 -1
  122. package/dist/scripts/6509-23fdb20a4b-lite.chunk.js +0 -2
  123. package/dist/scripts/6509-23fdb20a4b-lite.chunk.js.map +0 -1
  124. package/dist/scripts/6790-5086b72662-lite.chunk.js +0 -2
  125. package/dist/scripts/6790-5086b72662-lite.chunk.js.map +0 -1
  126. package/dist/scripts/7205-2428f775a5-lite.chunk.js +0 -2
  127. package/dist/scripts/7205-2428f775a5-lite.chunk.js.map +0 -1
  128. package/dist/scripts/7339-5793c921bb-lite.chunk.js +0 -3
  129. package/dist/scripts/7339-5793c921bb-lite.chunk.js.map +0 -1
  130. package/dist/scripts/7438-a5f96e58fc-lite.chunk.js +0 -2
  131. package/dist/scripts/7438-a5f96e58fc-lite.chunk.js.map +0 -1
  132. package/dist/scripts/7926-6b040931aa-lite.chunk.js +0 -2
  133. package/dist/scripts/7926-6b040931aa-lite.chunk.js.map +0 -1
  134. package/dist/scripts/8536-f75009dd87-lite.chunk.js +0 -2
  135. package/dist/scripts/8536-f75009dd87-lite.chunk.js.map +0 -1
  136. package/dist/scripts/8856-df102acdff-lite.chunk.js +0 -2
  137. package/dist/scripts/8856-df102acdff-lite.chunk.js.map +0 -1
  138. package/dist/scripts/9134-42dc2390ce-lite.chunk.js +0 -2
  139. package/dist/scripts/9134-42dc2390ce-lite.chunk.js.map +0 -1
  140. package/dist/scripts/9266-c5d6705147-lite.chunk.js +0 -2
  141. package/dist/scripts/9266-c5d6705147-lite.chunk.js.map +0 -1
  142. package/dist/scripts/9284-402a14d41c-lite.chunk.js +0 -2
  143. package/dist/scripts/9284-402a14d41c-lite.chunk.js.map +0 -1
  144. package/dist/scripts/9470-11c8c2ca71-lite.chunk.js +0 -2
  145. package/dist/scripts/9470-11c8c2ca71-lite.chunk.js.map +0 -1
  146. package/dist/scripts/9527-111c8586a7-lite.chunk.js +0 -2
  147. package/dist/scripts/9527-111c8586a7-lite.chunk.js.map +0 -1
  148. package/dist/scripts/9591-230bcf0935-lite.chunk.js +0 -2
  149. package/dist/scripts/9591-230bcf0935-lite.chunk.js.map +0 -1
  150. /package/dist/css/{5349-lite-829df3b4e7.chunk.css → 6137-lite-829df3b4e7.chunk.css} +0 -0
  151. /package/dist/css/{9470-lite-edb2d29928.chunk.css → 8010-lite-edb2d29928.chunk.css} +0 -0
  152. /package/dist/css/{6135-lite-41bdd1c5a3.chunk.css → 8410-lite-41bdd1c5a3.chunk.css} +0 -0
  153. /package/dist/css/{121-lite-1337d9acf0.chunk.css → 9042-lite-1337d9acf0.chunk.css} +0 -0
  154. /package/dist/scripts/{1221-502395e693-lite.chunk.js.LICENSE.txt → 1221-894d8474d5-lite.chunk.js.LICENSE.txt} +0 -0
  155. /package/dist/scripts/{2258-4d0639c9fe-lite.chunk.js.LICENSE.txt → 2258-ed7383502f-lite.chunk.js.LICENSE.txt} +0 -0
  156. /package/dist/scripts/{5153-079b4125ae-lite.chunk.js.LICENSE.txt → 4203-ee50e89841-lite.chunk.js.LICENSE.txt} +0 -0
  157. /package/dist/scripts/{5241-163f5ac64c-lite.chunk.js.LICENSE.txt → 5153-acc6c13153-lite.chunk.js.LICENSE.txt} +0 -0
  158. /package/dist/scripts/{6135-a878a9cff0-lite.chunk.js.LICENSE.txt → 6756-e90680dfcd-lite.chunk.js.LICENSE.txt} +0 -0
  159. /package/dist/scripts/{7339-5793c921bb-lite.chunk.js.LICENSE.txt → 8410-1f1fd5ccf0-lite.chunk.js.LICENSE.txt} +0 -0
  160. /package/dist/scripts/{bundle-95a6fc2722.min.js.LICENSE.txt → bundle-828ca65de8.min.js.LICENSE.txt} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/8856-df102acdff-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/hooks/UseFetchInteractiveResults.ts","file:///app/packages/libs/shared/src/apps/share-v2/flight-requests/ShareRequests.ts","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/student-results-table/StudentResultsEmptyState.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/student-results-table/StudentResultsTableFilters.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/student-results-table/StudentResultsTable.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/interactive-insights-students/partial-loading/partial-interactive-insights-students.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/interactive-insights-students/partial-loading/PartialInteractiveInsightsStudents.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/interactive-insights-students/InteractiveInsightsStudents.tsx","file:///app/packages/projects/lite/src/apps/my-shares/hooks/useAnonSessions.ts","file:///app/packages/projects/lite/src/apps/my-shares/hooks/useInsightsClassroomStudents.ts","file:///app/packages/projects/lite/src/apps/my-shares/hooks/useInsightsInteractiveResults.ts","file:///app/packages/projects/lite/src/apps/my-shares/flight-requests/VideoViewsV2Requests.ts","file:///app/packages/projects/lite/src/apps/my-shares/hooks/useInsightEngagement.ts","file:///app/packages/projects/lite/src/apps/my-shares/views/heatmap/InsightsHeatmapView.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/interactive/overview/InteractiveInsightsOverviewView.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/interactive/overview/InteractiveInsightsOverviewUtils.ts","file:///app/packages/projects/lite/src/apps/my-shares/views/interactive/questions/InteractiveInsightsQuestionsView.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/interactive/students/InteractiveInsightsStudentsView.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/students-not-watched/InsightStudentsNotWatched.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/students-watched/InsightStudentsWatched.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/video-insights-overview/partial-loading/partial-video-insights-overview.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/video-insights-overview/partial-loading/PartialVideoInsightsOverview.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/video-insights-overview/VideoInsightsOvervew.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/video/overview/VideoInsightsOverviewView.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/video/overview/VideoInsightsOverviewUtils.ts","file:///app/packages/projects/lite/src/apps/my-shares/views/base-insights-view/useInsightsView.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/base-insights-view/BaseInsightsView.tsx"],"sourcesContent":["import { Flight } from 'libs/common/flight';\n\nimport { InteractiveResultsRequests } from 'libs/shared/apps/analytics/flight-requests/InteractiveResultsRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { AnalyticsRequestFilter, CurrentUser, Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\n\nexport function useFetchInteractiveResults(\n interactiveMetadataId: string,\n requestFilter?: AnalyticsRequestFilter,\n includePublicResults?: boolean\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 includePublicResults\n ));\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { CreateShareLinkRequest } from 'libs/shared/apps/share-v2/interfaces/CreateShareLinkRequest';\nimport { CreateShareRequest } from 'libs/shared/apps/share-v2/interfaces/CreateShareRequest';\nimport { UpdateShareRequest } from 'libs/shared/apps/share-v2/interfaces/UpdateShareRequest';\n\nconst normalizeOptions: Flight.NormalizeOptions = {\n namespace: 'share-v2'\n};\n\nexport interface GetSentSharesParams {\n cursor?: string;\n scopeId?: string;\n objectTypeId?: number;\n type?: ShareType\n}\n\nexport const ShareRequests = {\n createShare(\n data: CreateShareRequest\n ): Flight.Request {\n return {\n url: '{gateway}/v2/shares',\n key: 'create:share-v2',\n type: HttpVerbs.POST,\n data,\n normalizeOptions,\n invalidationKeys: [ 'sent:share-v2', `get:share-v2:shares:object:${data.objectId}` ]\n };\n },\n\n updateShare(\n shareId: string,\n data: UpdateShareRequest\n ): Flight.Request {\n return {\n url: `{gateway}/v2/shares/${shareId}`,\n key: `update:share-v2`,\n type: HttpVerbs.PUT,\n data,\n normalizeOptions,\n invalidationKeys: [ 'share-v2:permanent-link:object', `share-v2:${shareId}` ]\n };\n },\n \n deleteShare(\n shareId: string\n ): Flight.Request {\n return {\n type: HttpVerbs.DELETE,\n url: `{gateway}/v2/shares/${shareId}`,\n key: `delete:share-v2`,\n normalizeOptions,\n invalidationKeys: [ 'share-v2:permanent-link:object', 'sent:share-v2', `share-v2:${shareId}` ]\n };\n },\n\n getShare(\n shareId: string\n ): Flight.Request {\n return {\n url: `{gateway}/v2/shares/${shareId}`,\n key: `share-v2:${shareId}`,\n bootstrapName: `share-v2:${shareId}`,\n type: HttpVerbs.GET,\n normalizeOptions\n };\n },\n\n getSentShares(\n params: GetSentSharesParams = {}\n ): Flight.Request {\n const key = Object.values(params).sort().join(':');\n\n return {\n url: UrlHelper.urlBuilder('{gateway}/v2/shares/sent', params),\n key: `sent:share-v2:${key}`,\n type: HttpVerbs.GET,\n normalize: false\n };\n },\n\n getShareLink(\n id: string\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder('{gateway}/v2/shares/permanent-link', { objectId: id }),\n key: `share-v2:permanent-link:object:${id}`,\n normalizeOptions\n };\n },\n\n createShareLink(\n data: CreateShareLinkRequest\n ): Flight.Request {\n return {\n type: HttpVerbs.POST,\n url: UrlHelper.urlBuilder('{gateway}/v2/shares/permanent-link', { ...data }),\n key: `create:share-v2:permanent-link:object:${data.objectId}`,\n invalidationKeys: [ `share-v2:permanent-link:object:${data.objectId}`, 'sent:share-v2' ],\n normalizeOptions\n };\n },\n\n getPrivacy(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}/access`,\n key: `privacy:${id}`,\n normalize: false\n };\n },\n \n getSharesByObjectId(\n objectId: string | number\n ): Flight.Request {\n return {\n url: `{gateway}/v2/shares/objects/${objectId}`,\n key: `get:share-v2:shares:object:${objectId}`,\n type: HttpVerbs.GET,\n normalizeOptions\n };\n },\n\n createSharePincode(shareId: string): Flight.Request {\n return {\n url: `{gateway}/v2/shares/${shareId}/pincode`,\n key: `create:share-v2:${shareId}:pincode`,\n type: HttpVerbs.POST\n };\n },\n\n getPincodeByShareId(shareId: string): Flight.Request {\n return {\n url: `{gateway}/v2/shares/${shareId}/pincode`,\n key: `get:share-v2:${shareId}:pincode`\n };\n },\n\n getPincodeByCode(code: string): Flight.Request {\n return {\n url: `{gateway}/v2/shares/pincode?code=${code}`,\n key: `get:share-v2:pincode:${code}`\n };\n }\n};\n","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n internalServerError?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError,\n internalServerError: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.InternalServer) {\n if (!ignoreMap.internalServerError)\n Core.ErrorHelper.throw(new UnspecifiedError());\n return;\n }\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst CHUNK_SIZE = 50;\n\nexport interface UseBatchFetchResult<T extends BaseObject> {\n itemsArr: T[];\n items: { [key: string]: T} | null;\n isFetching: boolean;\n hasCompleted: boolean;\n}\n\n/**\n * Used to fetch multiple items by id with Flight. Will fetch 25 items at a time firing off multiple\n * requests if there are more than 25 items.\n * This will return items as null until we have all our items. Items will be returned as an object with\n * their ids as they key for easy mapping\n * \n * @param itemIds \n * @param getRequest \n */\nexport function useBatchFetch<T extends BaseObject>(\n itemIds: string[],\n getRequest: (ids: string[]) => Flight.Request\n): UseBatchFetchResult<T> {\n const chunks = ArrayHelper.chunk<string>(itemIds, CHUNK_SIZE);\n\n const requests = chunks.map(chunk => getRequest(ArrayHelper.uniq(chunk)));\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\n\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce((acc, item) => ({ ...acc, [item.id]: item }), {})\n : null;\n\n return {\n itemsArr,\n items,\n isFetching: responses.isFetching,\n hasCompleted: responses.hasCompleted\n };\n}\n\n/**\n * When you need the useBatchFetch() behavior, but your list of objects to hydrate\n * will grow, such as on a scrolling page. useGrowingBatchFetch() will use local state\n * to determine what we've already built a request for and what items are new\n * as to not re-fetch items - Sha\n */\nexport function useGrowingBatchFetch<TResponse, TObjects = string>(\n objs: TObjects[],\n getRequest: (items: TObjects[]) => Flight.Request,\n _getKey?: (obj: TObjects) => string\n) {\n const getKey = _getKey ?? ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const { fetchItems, ...data } = useGrowingBatchFetchFunc<TResponse, TObjects>({ getRequest, _getKey });\n\n React.useEffect(() => {\n if (!objs?.length)\n return;\n\n fetchItems(objs);\n }, [objs?.map(getKey).join(',')]);\n\n return data;\n}\n\ninterface UseGrowingBatchFetchFuncOptions<TObjects> {\n getRequest: (items: TObjects[]) => Flight.Request;\n _getKey?: (obj: TObjects) => string;\n}\n\n/**\n * When you need the useGrowingBatchFetch() behaviour, but need to trigger the\n * fetch manually and update the objects - Nish \n */\nexport function useGrowingBatchFetchFunc<TResponse, TObjects = string>(\n options: UseGrowingBatchFetchFuncOptions<TObjects>\n) {\n const getKey = options._getKey ?? ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const fetchedItems = React.useRef<Set<string>>(new Set<string>());\n const [ requests, setRequests ] = React.useState<Flight.Request[]>([]);\n\n function fetchItems(objs: TObjects[]) {\n if (!objs?.length)\n return;\n\n const unfetchedItems: TObjects[] = [];\n \n objs.forEach(obj => {\n const key = getKey(obj);\n\n if (fetchedItems.current.has(key))\n return;\n\n unfetchedItems.push(obj);\n fetchedItems.current.add(key);\n });\n \n if (!unfetchedItems.length)\n return;\n \n setRequests(r => ([ ...r, ...ArrayHelper.chunk<TObjects>(unfetchedItems, CHUNK_SIZE).map(options.getRequest) ]));\n }\n\n const responses = Flight.useBasicFetchAll<TResponse[]>(requests);\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce<Record<string, TResponse>>((acc, item) => ({ ...acc, [getKey(item)]: item }), {})\n : null;\n\n return {\n hasFirstRequestCompleted: !!responses.responses?.[0]?.hasCompleted,\n itemsArr,\n items,\n isFetching: responses.isFetching,\n fetchItems\n };\n}\n","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { FilterStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\n\nconst namespace = 'shared.studentResultsTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface StudentResultsEmptyStateProps {\n filter: FilterStudentsBy;\n notCompletedImageUrl: string;\n helpingHandImageUrl: string;\n markingRequiredImageUrl: string;\n emptyStateImageUrl: string;\n}\n\nexport function StudentResultsEmptyState(props: StudentResultsEmptyStateProps) {\n if (props.filter === 'not_completed') {\n return (\n <EmptyState className='bg-white rounded-bottom py-5'>\n <EmptyState.Image src={props.notCompletedImageUrl} size='small' />\n <EmptyState.Info>\n {getPhrase('notCompletedDescription')}\n </EmptyState.Info>\n </EmptyState>\n );\n }\n if (props.filter === 'marking_required') {\n return (\n <EmptyState className='bg-white rounded-bottom py-5'>\n <EmptyState.Image src={props.markingRequiredImageUrl} size='small' />\n <EmptyState.Info>\n {getPhrase('markingRequiredDescription')}\n </EmptyState.Info>\n </EmptyState>\n );\n }\n\n if (props.filter === 'helping_hand') {\n return (\n <EmptyState className='bg-white rounded-bottom py-5'>\n <EmptyState.Image src={props.helpingHandImageUrl} size='small' />\n <EmptyState.Info>\n {getPhrase('helpingHandDescription')}\n </EmptyState.Info>\n </EmptyState>\n );\n }\n\n return (\n <EmptyState className='bg-white rounded-bottom py-5'>\n <EmptyState.Image src={props.emptyStateImageUrl} size='small' />\n <EmptyState.Heading>\n {getPhrase('emptyStateHeading')}\n </EmptyState.Heading>\n <EmptyState.Info>\n {getPhrase('emptyStateDescription')}\n </EmptyState.Info>\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { FilterStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'shared.studentResultsTable';\n\ninterface StudentResultsTableFiltersProps {\n filter: FilterStudentsBy;\n setFilter: (filter: FilterStudentsBy) => void;\n}\n\nexport function StudentResultsTableFilterButtons(props: StudentResultsTableFiltersProps) {\n function toggleFilter(selectedFilter: FilterStudentsBy) {\n const updatedFilter = props.filter === selectedFilter ? null : selectedFilter;\n\n props.setFilter(updatedFilter);\n }\n\n function isFilterSelected(filter: FilterStudentsBy) {\n return props.filter === filter;\n }\n\n function getClassName(filter: FilterStudentsBy) {\n return `btn btn-outline-dark ${isFilterSelected(filter) ? 'bg-dark text-white' : ''}`;\n }\n\n return (\n <div className='d-flex align-items-center mb-3'>\n <p className='h6 mb-0'><Text namespace={namespace} phrase='filters' /></p>\n <div className='d-flex border-start ps-3 ms-3 gap-2'>\n <button className={getClassName('not_completed')} onClick={() => toggleFilter('not_completed')}>\n <Text namespace={namespace} phrase='notCompletedFilter' />\n </button>\n <button className={getClassName('marking_required')} onClick={() => toggleFilter('marking_required')}>\n <Text namespace={namespace} phrase='markingRequiredFilter' />\n </button>\n <button className={getClassName('helping_hand')} onClick={() => toggleFilter('helping_hand')}>\n <Text namespace={namespace} phrase='helpingHandFilter' />\n </button>\n </div>\n </div>\n );\n}","import React from 'react';\nimport { Cell, Row, SortingRule } from 'react-table';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { StudentResultsEmptyState } from 'libs/shared/apps/analytics/components/student-results/student-results-table/StudentResultsEmptyState';\nimport { StudentResultsTableFilterButtons } from 'libs/shared/apps/analytics/components/student-results/student-results-table/StudentResultsTableFilters';\nimport { StudentResultsWithSummary } from 'libs/shared/apps/analytics/interfaces/StudentResultsWithSummary';\nimport { FilterStudentsBy, getSortStudents, SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { Table, TableTheme } from 'libs/shared/components/table/Table';\nimport { Config, Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport {\n highlightColumns,\n highlightRows,\n RESULTS_COL_WIDTH,\n useGetFixedColumns,\n useGetResultColumns,\n useGetResultsTableData\n} from './StudentResultsTableUtils';\n\nimport styles from './student-results-table.scss';\n\nconst fixedTableTheme: TableTheme = {\n table: `${styles.fixedTable} bg-white rounded-start border border-end-0`,\n header: `${styles.header} border-bottom`,\n headerRow: 'h-100',\n headerCell: 'd-flex align-items-center justify-content-start',\n row: styles.row\n};\n\nconst resultsTableTheme: TableTheme = {\n header: `${styles.header} fw-bold`,\n headerRow: 'h-100',\n headerCell: `${styles.interactionHeaderCellOuter} bg-white border-bottom`,\n row: `${styles.row} ${styles.resultsRow}`,\n cell: styles.resultsCellOuter\n};\n\ninterface StudentResultsTableProps {\n interactive: Interactive;\n interactiveMetadata: InteractiveMetadata;\n results: InteractiveResultSet;\n\n /**\n * As the table data is memoized, it must be prompted to recalculate.\n * Toggle `refreshTable` to do so.\n */\n refreshTable: boolean;\n config?: Config;\n selectedStudentId?: string;\n emptyStateImageUrl?: string;\n notCompletedImageUrl?: string;\n helpingHandImageUrl?: string;\n markingRequiredImageUrl?: string;\n anonymiseUsers?: boolean;\n sortBy?: SortStudentsBy;\n filterBy?: FilterStudentsBy;\n viewStudentResults: (\n student: AnonUser,\n interactiveMetadataId: string,\n interactionId?: string\n ) => void;\n}\n\nexport function StudentResultsTable(props: StudentResultsTableProps): JSX.Element {\n const [ sortBy, setSortBy ] = React.useState<SortingRule<StudentResultsWithSummary>[]>(\n getSortStudents(props.sortBy, 'score')\n );\n const [ filter, setFilter ] = React.useState<FilterStudentsBy>(props.filterBy);\n\n const ref = React.useRef<HTMLDivElement>(null);\n\n const fixedColumns = useGetFixedColumns(props.results, props.anonymiseUsers, props.config?.imageCdnUrl);\n const resultColumns = useGetResultColumns(\n props.interactive,\n props.interactiveMetadata,\n props.results,\n onColumnHover,\n props.refreshTable\n );\n const data = useGetResultsTableData(\n props.interactive,\n props.results,\n props.refreshTable,\n props.anonymiseUsers,\n ArrayHelper.first(sortBy),\n filter\n );\n\n function onSelectStudent({ original }: Row<StudentResultsWithSummary>): void {\n props.viewStudentResults(original.user, props.interactiveMetadata.id);\n }\n\n function onSelectStudentResponse(cell: Cell<StudentResultsWithSummary>): void {\n props.viewStudentResults(\n cell.row.original.user,\n props.interactiveMetadata.id,\n cell.column.id\n );\n }\n\n function onColumnHover(index?: number): void {\n highlightColumns(ref.current, index);\n }\n\n function onRowHover(index?: number): void {\n highlightRows(ref.current, index);\n }\n\n return (\n <div>\n {!!props.results.students.length && <StudentResultsTableFilterButtons filter={filter} setFilter={setFilter} />}\n\n {!data.length && (\n <StudentResultsEmptyState\n emptyStateImageUrl={props.emptyStateImageUrl}\n helpingHandImageUrl={props.helpingHandImageUrl}\n markingRequiredImageUrl={props.markingRequiredImageUrl}\n notCompletedImageUrl={props.notCompletedImageUrl}\n filter={filter}\n />\n )}\n\n {!!data.length && (\n <div ref={ref} className={`d-flex${data.length ? ` ${styles.hasResults}` : ''}`}>\n <Table\n columns={fixedColumns}\n data={data}\n theme={fixedTableTheme}\n onSelectRow={onSelectStudent}\n onRowMouseOver={row => onRowHover(row.index)}\n onRowMouseLeave={() => onRowHover()}\n enableSort\n manualSort\n onSort={setSortBy}\n initialSortBy={sortBy}\n />\n <Table\n columns={resultColumns}\n data={data}\n theme={resultsTableTheme}\n enableSlider\n scrollIncrement={RESULTS_COL_WIDTH * 8}\n onSelectCell={onSelectStudentResponse}\n scrollContainerClassName='rounded-end border border-start-0 border'\n />\n </div>\n )}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialInsights\":\"qSeTe\"};","import React from 'react';\n\nimport styles from './partial-interactive-insights-students.scss';\n\nexport function PartialInteractiveInsightsStudents() {\n return (\n <div>\n <div className='d-flex align-items-center mb-3'>\n <p className='h6 px-4 mb-0 me-4 partial-loading-background'>&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}\n\nexport function InteractiveInsightsStudents(props: InteractiveInsightsStudentsProps) {\n return (\n <>\n {!props.hasDataLoaded &&\n <PartialInteractiveInsightsStudents />\n }\n\n {props.hasDataLoaded &&\n <StudentResultsTable\n interactive={props.interactive}\n interactiveMetadata={props.interactiveMetadata}\n results={props.results}\n refreshTable={props.isFetching}\n viewStudentResults={props.viewStudentResults}\n emptyStateImageUrl={ImageUrls.Insights.NO_RESPONSES}\n sortBy={props.sortBy}\n filterBy={props.filterBy}\n anonymiseUsers={props.anonymiseUsers}\n notCompletedImageUrl={ImageUrls.Insights.JIGSAW}\n markingRequiredImageUrl={ImageUrls.Insights.CLIPBOARD}\n helpingHandImageUrl={ImageUrls.Insights.SPEECH_BUBBLE_HEART}\n config={props.config}\n />\n }\n </>\n );\n}","import { Flight } from 'libs/common/react/index';\n\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { AnonSession } from 'libs/shared/apps/share/interfaces/AnonSession';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nfunction toAnonUser(anonSession: AnonSession) {\n return { sessionId: anonSession.sessionId, name: anonSession.sessionName } as AnonUser;\n}\n\nexport function useAnonSessions(shareId: string) {\n const anonSessions = Flight.useBasicFetch<AnonSession[]>(ShareRequests.getAnonSessions(shareId));\n\n const anonSessionMap = anonSessions.data\n ?.reduce<Record<string, AnonUser>>((prev, next) => {\n return {\n ...prev,\n [next.sessionId]: toAnonUser(next)\n };\n }, {});\n\n return {\n items: anonSessionMap || {},\n hasCompleted: anonSessions.hasCompleted\n };\n}","import { Flight } from 'libs/common/react/index';\n\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { useFetchAll } from 'libs/shared/hooks/UseFetchAll';\nimport { User } from 'libs/shared/interfaces/models/User';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\n\nexport function useInsightsClassroomStudents(shareId: string) {\n const fetch = Flight.useGetFetch();\n\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(shareId));\n \n const classroomId = share.data?.type === ShareType.Classroom &&\n share.data?.recipients?.find(r => r.recipientTypeId === MasterType.Classroom)?.recipientId;\n\n const getRequest = (cursor: string) => ClassroomRequests.getClassroomStudents(classroomId, cursor);\n const result = useFetchAll<User>(classroomId && getRequest, cursor => fetch(getRequest(cursor)));\n\n return {\n ...result,\n hasCompleted: !classroomId || result.hasCompleted\n };\n}","import { Flight } from 'libs/common/react/index';\n\nimport { useFetchInteractiveResults } from 'libs/shared/apps/analytics/hooks/UseFetchInteractiveResults';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { InteractiveResult, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport { useAnonSessions } from 'apps/my-shares/hooks/useAnonSessions';\nimport { useInsightsClassroomStudents } from 'apps/my-shares/hooks/useInsightsClassroomStudents';\n\nconst EMPTY_INTERACTIVE_RESULTS: InteractiveResult[] = [\n {\n id: '0',\n attempts: [{ id: '0', answeredAt: 0, answers: []}]\n }\n];\n\nexport function useInsightsInteractiveResults(shareId: string) {\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(shareId));\n const results = useFetchInteractiveResults(share.data?.objectId, null, true);\n\n const anonSessions = useAnonSessions(shareId);\n\n const classroomStudents = useInsightsClassroomStudents(shareId);\n\n useHandleObjectError(results);\n\n const hasCompleted = (\n results.hasCompleted &&\n anonSessions.hasCompleted &&\n classroomStudents.hasCompleted\n );\n\n if (!hasCompleted) {\n return {\n data: null as InteractiveResultSet,\n hasCompleted: false\n };\n }\n\n const studentHash = new Set<string>();\n const students = results.data.students.map(s => {\n if (s.user) {\n studentHash.add(s.user.id);\n return s;\n }\n\n /**\n * Set the user to our anon user, so we can display the name they entered\n * when completing the interactive - Sha\n */\n return {\n ...s,\n user: anonSessions.items[s.sessionId] || { sessionId: s.sessionId } as AnonUser\n };\n });\n\n /**\n * If we have classroom students, we're adding any students who haven't attempted to the list\n * with an empty attempt. This is so the student list can show all classroom students - Sha\n */\n if (classroomStudents?.items?.length) {\n students.push(...classroomStudents.items\n .filter(s => !studentHash.has(s.id))\n .map(user => ({ user, results: EMPTY_INTERACTIVE_RESULTS })));\n }\n\n return {\n hasCompleted,\n data: {\n ...results.data,\n students\n }\n };\n}","import { Flight } from 'libs/common/react/index';\n\nimport { StreamAggregationType } from 'libs/shared/apps/analytics/interfaces/StreamAggregationType';\n\nexport const VideoViewsV2Requests = {\n shareViews(shareId: string): Flight.Request {\n return {\n url: `{gateway}/v2/analytics/streams/shares/${shareId}/users/count`,\n key: `video:views:v2:share:${shareId}`,\n normalize: false\n };\n },\n\n shareAggregation(shareId: string, type: StreamAggregationType): Flight.Request {\n return {\n url: `{gateway}/v2/analytics/streams/shares/${shareId}/aggregation/${type}`,\n key: `video:views:v2:share:aggregation:${shareId}:${type}`,\n normalize: false\n };\n },\n\n shareHeatMap(shareId: string): Flight.Request {\n return {\n url: `{gateway}/v2/analytics/streams/shares/${shareId}/heat-map`,\n key: `video:views:v2:share:heatmap:${shareId}`,\n normalize: false\n };\n },\n\n shareHeatMapAggregation(shareId: string): Flight.Request {\n return {\n url: `{gateway}/v2/analytics/streams/shares/${shareId}/aggregation/heat-map`,\n key: `video:views:v2:share:heatmap:aggregation:${shareId}`,\n normalize: false\n };\n }\n};","import { Flight } from 'libs/common/react/index';\n\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { Engagement } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport { VideoViewsV2Requests } from 'apps/my-shares/flight-requests/VideoViewsV2Requests';\nimport { useAnonSessions } from 'apps/my-shares/hooks/useAnonSessions';\n\nexport function useInsightEngagement(shareId: string) {\n const engagement = Flight.useBasicFetch<Engagement[]>(\n VideoViewsV2Requests.shareHeatMap(shareId)\n );\n\n const anonSessions = useAnonSessions(shareId);\n\n const userIds = engagement.data?.map(u => u.userId).filter(id => !!id) || [];\n const users = useBatchFetch<AnonUser>(userIds, UserRequests.getById);\n\n const userMap = {\n ...anonSessions.items,\n ...users.items\n };\n \n const viewers = engagement.data?.map(e => {\n const user = userMap[e.userId || e.sessionId] || { sessionId: e.sessionId } as AnonUser;\n return { ...user, percentage: e.engagementRate } as AnonUser;\n });\n\n return {\n engagement: engagement.data,\n users: viewers,\n hasCompleted: (\n engagement.hasCompleted &&\n anonSessions.hasCompleted &&\n (!userIds?.length || users.hasCompleted)\n )\n };\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { 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 { 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 { 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 { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InsightsHeatmap } from 'apps/my-shares/components/insights-heatmap/InsightsHeatmap';\nimport { VideoViewsV2Requests } from 'apps/my-shares/flight-requests/VideoViewsV2Requests';\nimport { useInsightEngagement } from 'apps/my-shares/hooks/useInsightEngagement';\nimport { useInsightsClassroomStudents } from 'apps/my-shares/hooks/useInsightsClassroomStudents';\nimport { getInsightsInteractiveTabs, getInsightsVideoTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\n\nconst namespace = 'shared.insightsHeatmap';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightsHeatmapViewProps {\n shareId: string;\n}\n\nexport function InsightsHeatmapView(props: InsightsHeatmapViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(ViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const { hasPermissions } = usePermissions();\n\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(props.shareId));\n\n const 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 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 />\n <InsightsHeatmap\n aggregateEngagement={aggregateEngagement.data}\n individualEngagement={engagement}\n yearGroups={yearGroupsCount.data}\n config={config.data}\n users={users}\n viewKey={viewKey.data}\n hasDataLoaded={hasDataLoaded}\n tableDataLoaded={hasCompleted}\n anonymiseUsers={anonymiseUsers}\n classroomStudents={classroomStudents.items}\n />\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { 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 { 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 { Config, CurrentUser, Engagement, Interactive, InteractiveMetadata, YearGroup } from 'libs/shared/interfaces';\n\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 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 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 />\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 { 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 { 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 { Config, CurrentUser, Interactive, InteractiveMetadata, YearGroup } 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 { 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 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\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 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 />\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 { 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 { 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 { 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 { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InteractiveInsightsStudents } from 'apps/my-shares/components/interactive-insights-students/InteractiveInsightsStudents';\nimport { useInsightsInteractiveResults } from 'apps/my-shares/hooks/useInsightsInteractiveResults';\nimport { getInsightsInteractiveTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\n\nconst namespace = 'insights.interactiveInsightsStudents';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractiveInsightsStudentsViewProps {\n shareId: string;\n sortBy: SortStudentsBy;\n filterBy: FilterStudentsBy;\n}\n\nexport function InteractiveInsightsStudentsView(props: InteractiveInsightsStudentsViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n const { hasPermissions } = usePermissions();\n \n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(props.shareId));\n\n const 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 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 />\n\n <InteractiveInsightsStudents\n interactiveMetadata={interactiveMetadata.data}\n viewStudentResults={viewStudentResults}\n interactive={interactive.data}\n results={results.data}\n filterBy={props.filterBy}\n sortBy={props.sortBy}\n isFetching={!results.hasCompleted}\n anonymiseUsers={anonymiseUsers}\n hasDataLoaded={hasDataLoaded}\n config={config.data}\n />\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { InsightStudentList } from 'libs/shared/apps/analytics/components/insight-student-list/InsightStudentList';\nimport { User } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.insightStudentsNotWatched';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightStudentsNotWatchedProps {\n students: User[];\n imageCdnUrl: string;\n imageUrl: string;\n heatmapAppLink: Core.AppLink;\n watchedIds: string[];\n anonymiseUsers: boolean;\n}\n\nexport function InsightStudentsNotWatched(props: InsightStudentsNotWatchedProps) {\n const studentsNotWatched = props.students?.filter(student => !props.watchedIds?.includes(student.id)) || [];\n\n return (\n <InsightCard\n title={getPhrase('title')}\n svgName={cvSvgLibrary.Puzzle}\n svgClassName='bg-light-teal text-teal'\n >\n <InsightStudentList\n students={studentsNotWatched}\n imageCdnUrl={props.imageCdnUrl}\n imageUrl={props.imageUrl}\n description={getPhrase('studentsDisplay')}\n anonymiseUsers={props.anonymiseUsers}\n />\n </InsightCard>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { InsightStudentList } from 'libs/shared/apps/analytics/components/insight-student-list/InsightStudentList';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.insightStudentsWatched';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightWatchedProps {\n students: AnonUser[];\n imageCdnUrl: string;\n heatmapAppLink: Core.AppLink;\n imageUrl: string;\n anonymiseUsers: boolean;\n}\n\nexport function InsightStudentsWatched(props: InsightWatchedProps) {\n return (\n <InsightCard\n title={getPhrase('title')}\n svgName={cvSvgLibrary.Flag}\n svgClassName='bg-light-indigo text-indigo'\n count={props.students.length}\n >\n <InsightStudentList\n students={props.students}\n imageCdnUrl={props.imageCdnUrl}\n imageUrl={props.imageUrl}\n description={getPhrase('studentsDisplay')}\n appLink={props.heatmapAppLink}\n appLinkText={getPhrase('viewAll')}\n anonymiseUsers={props.anonymiseUsers}\n />\n </InsightCard>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialInsights\":\"oHwkx\"};","import React from 'react';\n\nimport styles from './partial-video-insights-overview.scss';\n\nexport function PartialVideoInsightsOverview() {\n return (\n <div>\n <h2 className='h4 w-25 partial-loading-background'>&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 { 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 { Config, CurrentUser, Engagement, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\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 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 tabs={getInsightsVideoTabs(share.data, 'insights')}\n hasAnalytics={hasPermissions(PermissionName.ViewCustomerAnalytics)}\n analyticsWebUrl={config.data?.analyticsWebUrl}\n share={share.data}\n yearGroups={yearGroups.data}\n />\n\n <VideoInsightsOverview\n hasDataLoaded={!!hasDataLoaded}\n hasClassrooms={hasClassrooms}\n anonymiseUsers={anonymiseUsers}\n videoInsightsAppLinks={videoInsightsAppLinks}\n config={config.data}\n video={video.data}\n classroomStudents={classroomStudents.items}\n viewers={users}\n individualEngagement={engagement.data}\n aggregateEngagement={aggregateEngagement.data}\n share={share.data}\n osCount={osCount.data}\n />\n </div>\n );\n}","import { HashObject } from 'libs/common/react/interfaces';\n\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\n\nimport { getInsightsHeatmapAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nexport function getVideoInsightsAppLinks(share: Share, params?: HashObject) {\n return {\n heatmapAppLink: getInsightsHeatmapAppLink(share, params)\n };\n}","import React from 'react';\n\nimport { FilterStudentsBy, SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { MasterType } from 'libs/shared/enums/MasterType';\n\nimport { InsightsTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\nimport { InsightsHeatmapView } from 'apps/my-shares/views/heatmap/InsightsHeatmapView';\nimport { InteractiveInsightsOverviewView } from 'apps/my-shares/views/interactive/overview/InteractiveInsightsOverviewView';\nimport { InteractiveInsightsQuestionsView } from 'apps/my-shares/views/interactive/questions/InteractiveInsightsQuestionsView';\nimport { InteractiveInsightsStudentsView } from 'apps/my-shares/views/interactive/students/InteractiveInsightsStudentsView';\nimport { VideoInsightsOverviewView } from 'apps/my-shares/views/video/overview/VideoInsightsOverviewView';\n\ninterface UseInsightsViewOptions {\n share: Share | undefined;\n tab: InsightsTabs;\n interactionId: string;\n sortBy: SortStudentsBy;\n filterBy: FilterStudentsBy;\n}\n\ntype ShareContext = Omit<UseInsightsViewOptions, 'tab'>;\ntype ViewFn = (ctx: ShareContext) => JSX.Element;\ntype ViewRegistry = Partial<Record<MasterType, Partial<Record<InsightsTabs, ViewFn>>>>;\n\nconst INSIGHTS_VIEWS: ViewRegistry = {\n [MasterType.Video]: {\n insights: ctx => <VideoInsightsOverviewView shareId={ctx.share.shareId} />,\n heatmap: ctx => <InsightsHeatmapView shareId={ctx.share.shareId} />\n },\n [MasterType.Clip]: {\n insights: ctx => <VideoInsightsOverviewView shareId={ctx.share.shareId} />,\n heatmap: ctx => <InsightsHeatmapView shareId={ctx.share.shareId} />\n },\n [MasterType.Interactive]: {\n insights: ctx => <InteractiveInsightsOverviewView shareId={ctx.share.shareId} />,\n heatmap: ctx => <InsightsHeatmapView shareId={ctx.share.shareId} />,\n questions: ctx => (\n <InteractiveInsightsQuestionsView\n interactionId={ctx.interactionId}\n sortBy={ctx.sortBy}\n shareId={ctx.share.shareId}\n />\n ),\n results: ctx => (\n <InteractiveInsightsStudentsView\n filterBy={ctx.filterBy}\n sortBy={ctx.sortBy}\n shareId={ctx.share.shareId}\n />\n )\n }\n};\n\n/**\n * Takes any Share object and a tab, and returns the corresponding \"insights\" view.\n * This is just a utility hook, and as such doesn't need to set the page title directly.\n */\n// eslint-disable-next-line rulesdir/require-view-title\nexport function useInsightsView(options: UseInsightsViewOptions): JSX.Element {\n const { share, tab } = options;\n const viewFn = INSIGHTS_VIEWS[share?.objectTypeId]?.[tab];\n\n if (viewFn)\n return viewFn(options);\n\n return <></>;\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\n\nimport { FilterStudentsBy, SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\n\nimport { getShareOptionsAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport { InsightsTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\nimport { useInsightsView } from 'apps/my-shares/views/base-insights-view/useInsightsView';\n\ninterface BaseInsightsViewProps {\n shareId: string;\n tab: InsightsTabs;\n interactionId: string;\n sortBy: SortStudentsBy;\n filterBy: FilterStudentsBy;\n showShareOptions?: boolean;\n}\n\n/**\n * BaseInsightsView is a generic component that renders different \"insights\" views based on the provided share.\n * The child views will handle setting the page title and other specific details.\n * \n * It also handles the logic for showing share options if `showShareOptions` is true - which is currently used\n * in our used in our LCE emails.\n */\n// eslint-disable-next-line rulesdir/require-view-title\nexport function BaseInsightsView(props: BaseInsightsViewProps): JSX.Element {\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(props.shareId));\n\n const view = useInsightsView({\n share: share.data,\n tab: props.tab,\n interactionId: props.interactionId,\n sortBy: props.sortBy,\n filterBy: props.filterBy\n });\n\n React.useEffect(() => {\n if (!props.showShareOptions) return;\n if (!share.data) return;\n\n const appLink = getShareOptionsAppLink(share.data);\n \n if (!appLink) return;\n\n Core.AppLinkHelper.trigger(appLink);\n }, [ share.data, props.showShareOptions ]);\n\n return (\n <>\n {view}\n </>\n );\n}"],"names":["useFetchInteractiveResults","interactiveMetadataId","requestFilter","includePublicResults","currentUser","interactiveMetadata","interactive","data","interactiveId","shouldFetchResults","I","id","normalizeOptions","namespace","ShareRequests","createShare","url","key","type","invalidationKeys","objectId","updateShare","shareId","deleteShare","getShare","bootstrapName","getSentShares","params","Object","values","sort","join","normalize","getShareLink","createShareLink","getPrivacy","getSharesByObjectId","createSharePincode","getPincodeByShareId","getPincodeByCode","code","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","internalServerError","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","CHUNK_SIZE","useBatchFetch","itemIds","getRequest","requests","map","chunk","responses","itemsArr","items","length","reduce","acc","item","isFetching","hasCompleted","useGrowingBatchFetch","objs","_getKey","getKey","obj","useGrowingBatchFetchFunc","fetchItems","options","fetchedItems","Set","setRequests","hasFirstRequestCompleted","unfetchedItems","forEach","current","has","push","add","r","generateCacheKey","flightObjs","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","getPhrase","LanguageService","StudentResultsEmptyState","props","filter","EmptyState","className","src","notCompletedImageUrl","size","markingRequiredImageUrl","helpingHandImageUrl","emptyStateImageUrl","StudentResultsTableFilterButtons","toggleFilter","selectedFilter","updatedFilter","setFilter","getClassName","isFilterSelected","Text","phrase","onClick","fixedTableTheme","table","header","headerRow","headerCell","row","resultsTableTheme","cell","StudentResultsTable","sortBy","setSortBy","filterBy","ref","fixedColumns","results","anonymiseUsers","config","imageCdnUrl","resultColumns","index","refreshTable","ArrayHelper","onRowHover","students","Table","columns","theme","onSelectRow","original","viewStudentResults","user","onRowMouseOver","onRowMouseLeave","enableSort","manualSort","onSort","initialSortBy","enableSlider","scrollIncrement","onSelectCell","column","scrollContainerClassName","PartialInteractiveInsightsStudents","InteractiveInsightsStudents","hasDataLoaded","ImageUrls","useAnonSessions","anonSessions","prev","next","sessionId","anonSession","name","sessionName","useInsightsClassroomStudents","fetch","share","classroomId","recipients","find","recipientTypeId","recipientId","cursor","result","EMPTY_INTERACTIVE_RESULTS","attempts","answeredAt","answers","useInsightsInteractiveResults","classroomStudents","studentHash","s","VideoViewsV2Requests","useInsightEngagement","engagement","userIds","u","userId","users","UserRequests","userMap","viewers","e","percentage","engagementRate","InsightsHeatmapView","useLockContentWidth","hasPermissions","usePermissions","videoRequest","VideoHelper","objectTypeId","video","ConfigRequests","yearGroups","CustomerRequests","customerId","aggregateEngagement","yearGroupsCount","viewKey","PlayerRequests","MediaIdType","useSetPageMetadata","title","InsightsHeader","tabs","MasterType","getInsightsTabs","hasAnalytics","PermissionName","analyticsWebUrl","InsightsHeatmap","individualEngagement","tableDataLoaded","InteractiveInsightsOverviewView","SharedViewModelKeys","InteractiveRequests","osCount","interactiveInsightsAppLinks","resultsAppLink","questionsAppLink","heatmapAppLink","getInteractiveInsightsAppLinks","InteractiveInsightsOverview","InteractiveInsightsQuestionsView","InteractiveInsightsQuestions","interactionId","InteractiveInsightsStudentsView","application","action","studentId","InsightStudentsNotWatched","studentsNotWatched","student","watchedIds","includes","InsightCard","svgName","svgClassName","InsightStudentList","imageUrl","description","InsightStudentsWatched","count","appLink","appLinkText","PartialVideoInsightsOverview","VideoInsightsOverview","hasData","getStudentsList","InsightsShareMask","videoInsightsAppLinks","hasClassrooms","InsightDevices","InsightHeatmap","VideoInsightsOverviewView","useSettings","getVideoInsightsAppLinks","INSIGHTS_VIEWS","insights","ctx","heatmap","questions","BaseInsightsView","view","tab","viewFn","useInsightsView","showShareOptions"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[9134],{33518:(e,t,n)=>{var r;n.d(t,{e:()=>r}),function(e){e.Public="Public",e.PinCode="PinCode",e.PasswordProtected="PasswordProtected",e.ProtectedOverrideRestriction="ProtectedOverrideRestriction",e.JustMySchoolOverrideRestriction="JustMySchoolOverrideRestriction",e.Protected="Protected",e.JustMySchool="JustMySchool",e.Direct="Direct"}(r||(r={}))},18488:(e,t,n)=>{n.d(t,{o:()=>o});var r=n(99940),a=n(97395),i={namespace:"share-v2"},o={createShare:function(e){return{url:"{gateway}/v2/shares",key:"create:share-v2",type:r.k.POST,data:e,normalizeOptions:i,invalidationKeys:["sent:share-v2","get:share-v2:shares:object:".concat(e.objectId)]}},updateShare:function(e,t){return{url:"{gateway}/v2/shares/".concat(e),key:"update:share-v2",type:r.k.PUT,data:t,normalizeOptions:i,invalidationKeys:["share-v2:permanent-link:object","share-v2:".concat(e)]}},deleteShare:function(e){return{type:r.k.DELETE,url:"{gateway}/v2/shares/".concat(e),key:"delete:share-v2",normalizeOptions:i,invalidationKeys:["share-v2:permanent-link:object","sent:share-v2","share-v2:".concat(e)]}},getShare:function(e){return{url:"{gateway}/v2/shares/".concat(e),key:"share-v2:".concat(e),bootstrapName:"share-v2:".concat(e),type:r.k.GET,normalizeOptions:i}},getSentShares:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=Object.values(e).sort().join(":");return{url:a._.urlBuilder("{gateway}/v2/shares/sent",e),key:"sent:share-v2:".concat(t),type:r.k.GET,normalize:!1}},getShareLink:function(e){return{url:a._.urlBuilder("{gateway}/v2/shares/permanent-link",{objectId:e}),key:"share-v2:permanent-link:object:".concat(e),normalizeOptions:i}},createShareLink:function(e){return{type:r.k.POST,url:a._.urlBuilder("{gateway}/v2/shares/permanent-link",Object.assign({},e)),key:"create:share-v2:permanent-link:object:".concat(e.objectId),invalidationKeys:["share-v2:permanent-link:object:".concat(e.objectId),"sent:share-v2"],normalizeOptions:i}},getPrivacy:function(e){return{url:"{gateway}/v1/objects/".concat(e,"/access"),key:"privacy:".concat(e),normalize:!1}},getSharesByObjectId:function(e){return{url:"{gateway}/v2/shares/objects/".concat(e),key:"get:share-v2:shares:object:".concat(e),type:r.k.GET,normalizeOptions:i}},createSharePincode:function(e){return{url:"{gateway}/v2/shares/".concat(e,"/pincode"),key:"create:share-v2:".concat(e,":pincode"),type:r.k.POST}},getPincodeByShareId:function(e){return{url:"{gateway}/v2/shares/".concat(e,"/pincode"),key:"get:share-v2:".concat(e,":pincode")}},getPincodeByCode:function(e){return{url:"{gateway}/v2/shares/pincode?code=".concat(e),key:"get:share-v2:pincode:".concat(e)}}}},93563:(e,t,n)=>{n.d(t,{_:()=>c});var r=n(20354),a=n(33518),i=n(18488),o=n(8233);function c(e){var t=r.a.useGetFetchAsync(),n=r.a.useBasicFetch(i.o.getPrivacy(e.entityId));return{loaded:!!n.data,updateShareLink:function(e,n){return t(i.o.updateShare(e,n))},createShareLink:function(r){var c=null!=r?r:"private"===o.R.getShareLinkAccessType(n.data)?a.e.JustMySchool:a.e.Protected;return t(i.o.createShareLink({objectId:e.entityId,privacy:c}))},deleteShareLink:function(e){return t(i.o.deleteShare(e))}}}},87265:(e,t,n)=>{n.d(t,{s:()=>s});var r=n(20354),a=n(18488),i=n(2267),o=n(39151),c=n(31949);function s(e){var t,n=r.a.useBasicFetch(c.N.currentUser()),s=i.I.getFetchFunctionByType(e.entityType)(e.entityId,null===(t=n.data)||void 0===t?void 0:t.id),u=r.a.useBasicFetch(a.o.getPrivacy(e.entityId)),l=r.a.useBasicFetch(a.o.getShareLink(e.entityId)),d=r.a.useBasicFetch(o.L.config());return{dataLoaded:!!(s.data&&n.data&&u.data&&l.data&&d.data),currentUser:n,entity:s,privacy:u,share:l,config:d}}},8233:(e,t,n)=>{n.d(t,{R:()=>v});var r=n(23481),a=n(110),i=n(33518),o=n(4594),c=n(49080),s=n(26361),u=n(35223),l=n(31908);function d(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 y=r.T.encloseNamespace("sharev2.utils"),v={getPrivateIconAndText:function(e){var t=e.entityTypeId,n=e.privacy,r=e.hasStudentExp,a=e.entity,c=e.yearGroups;if(t===o.E.Topic||t===o.E.Series)return{icon:u.vn.VisibleOn,text:y(r?"justMySchoolTeachers":"justMySchoolDescription")};if(!Array.isArray(n))switch(n){case i.e.Public:return{icon:u.vn.VisibleOn,text:y("publicDescription")};case i.e.ProtectedOverrideRestriction:return{icon:u.vn.VisibleOn,text:y("clickViewOnly")};case i.e.Protected:return{icon:u.vn.Lock,text:v.getRespectRatingText(a,c,r)};case i.e.JustMySchoolOverrideRestriction:return{icon:u.vn.Lock,text:y(r?"justMySchoolTeachers":"justMySchoolDescription")};case i.e.JustMySchool:return{icon:u.vn.Lock,text:v.getRespectRatingText(a,c,r)};case i.e.PinCode:return{icon:u.vn.Lock,text:y("pinDescription")};case i.e.PasswordProtected:return{icon:u.vn.Lock,text:y("privateDescription")};default:return{}}},getIconAndText:function(e){var t=e.linkExpireDate,n=e.isPasswordProtected,r=e.status;if(!t&&!n)return v.getPrivateIconAndText(e);if(!t)return{icon:u.vn.Lock,text:y("password")};var i=a.O.isToday(t),o=a.O.diffBetween(t,new Date,"day");if(!n){var s=i?y("expiryToday"):y("expiry",{days:o});return r===c.F.Expired&&(s=y("expired")),{icon:u.vn.Timer,text:s}}var l=i?y("passwordExpiryToday"):y("passwordExpiry",{days:o});return r===c.F.Expired&&(l=y("passwordExpired")),{icon:u.vn.Lock,text:l}},getRespectRatingText:function(e,t,n){var r;if(!e||!t)return null;if(n)return y("justMySchoolTeachers");if(!l.M.isVideoType(e))return y("collectionRating");var a=s.l.getWeightedRestriction(null===(r=e._restrictions)||void 0===r?void 0:r.value);if(a&&!a.yearGroup)return y("onlyAdmins");var i,o,c,u=l.M.getRating(e),v=function(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return d(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,a=function(){};return{s:a,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,c=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){c=!0,i=e},f:function(){try{o||null==n.return||n.return()}finally{if(c)throw i}}}}(t);try{for(v.s();!(c=v.n()).done;){var p=c.value;(!i||p.value>i.value)&&(i=p),a&&p.value<=a.yearGroup||u&&p.rating.value<u.value||(!o||p.value<o.value)&&(o=p)}}catch(e){v.e(e)}finally{v.f()}return o?1===t.length?y("clickViewOnly"):o.value===i.value?y("maxYearGroup",{yearGroup:i.name}):y("yearGroupRange",{yearGroup:o.name}):y("onlyStaff")},getShareLinkAccessType:function(e){return e.isTvContent?"tv":e.isClickViewContent?"clickview":"private"}}},2267:(e,t,n)=>{n.d(t,{I:()=>i});var r=n(64249),a=n(40841),i={canEmbed:function(e){return["video","interactive","clip"].includes(e)},canAddPolicies:function(e){return["interactive"].includes(e)},getEnabledIntegrations:function(e,t){return a._.getShareIntegrations(e,t).filter((function(e){return e.enabled})).map((function(e){return e.id}))},getShareSettingsInitialValues:function(e,t){var n,r,a,i,o,c;return{preventScrubbing:null!==(a=null!==(r=null===(n=null==e?void 0:e.options)||void 0===n?void 0:n.preventScrubbing)&&void 0!==r?r:null==t?void 0:t.preventScrubbing)&&void 0!==a&&a,immediateFeedback:null!==(c=null!==(o=null===(i=null==e?void 0:e.options)||void 0===i?void 0:i.immediateFeedback)&&void 0!==o?o:null==t?void 0:t.immediateFeedback)&&void 0!==c&&c}},getEnabledSettingsField:function(e){return{showImmediateFeedbackField:"interactive"===e,showPreventScrubbingField:"interactive"===e}},getFetchFunctionByType:function(e){return r.I.getFetchFunctionByType(e)},getAnalyticsEntity:function(e){return r.I.getAnalyticsEntity(e)},getAnalyticsOptions:function(e){return r.I.getAnalyticsOptions(e)}}},31121:(e,t,n)=>{n.d(t,{j:()=>c});var r=n(65858),a=n(84850);function i(e){return"share"in e&&!!e.share}var o={"create-share-link":{isValid:i,analyticsOptions:{actionType:r.Vw.Create,workflowPhase:r.eu.Complete,entity:r.py.ShareLink}},"update-share-link":{isValid:i,analyticsOptions:{actionType:r.Vw.Edit,entity:r.py.ShareLink,workflowPhase:r.eu.Complete}},"delete-share-link":{isValid:i,analyticsOptions:{actionType:r.Vw.Delete,entity:r.py.ShareLink,workflowPhase:r.eu.Complete}},"plugin-share-embed":{isValid:i,analyticsOptions:{actionType:r.Vw.Share,descriptor:r.YM.PluginEmbed,workflowPhase:r.eu.Complete,entity:r.py.ShareLink}},"copy-embed-html":{isValid:function(){return!0},analyticsOptions:{actionType:r.Vw.Share,workflowPhase:r.eu.Complete,entity:r.py.ShareLink,descriptor:r.YM.CopyEmbedHtml}},"copy-share-link":{isValid:i,analyticsOptions:{actionType:r.Vw.Share,workflowPhase:r.eu.Complete,entity:r.py.ShareLink,descriptor:r.YM.CopyLink}}};function c(e){var t,n=(0,a.X)({analyticsOptions:e.analyticsOptions,baseData:e.data,config:o,shouldLog:null===(t=e.shouldLog)||void 0===t||t});return{log:n.log,getData:n.getData}}},84850:(e,t,n)=>{n.d(t,{X:()=>i});var r=n(1048),a=n(49985);function i(e){function t(t,n){var i=e.config[t.type];if(null==i?void 0:i.isValid(t)){var o=Object.assign(Object.assign({},e.baseData),t);return{data:r.t.omit(o,["type"]),analyticsOptions:a.k.mergeOptions(i.analyticsOptions,[e.analyticsOptions,n])}}}return{getData:t,log:function(n,r){if(e.shouldLog){var i=t(n,r);i&&a.k.logUserAction(i.data,i.analyticsOptions)}}}}}}]);
2
- //# sourceMappingURL=9134-42dc2390ce-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/9134-42dc2390ce-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/share-v2/enums/SharePrivacy.ts","file:///app/packages/libs/shared/src/apps/share-v2/flight-requests/ShareRequests.ts","file:///app/packages/libs/shared/src/apps/share-v2/hooks/useShareLinkActions.ts","file:///app/packages/libs/shared/src/apps/share-v2/hooks/useShareLinkData.ts","file:///app/packages/libs/shared/src/apps/share-v2/utils/ShareLinkHelper.ts","file:///app/packages/libs/shared/src/apps/share-v2/utils/ShareViewHelper.tsx","file:///app/packages/libs/shared/src/apps/share-v2/utils/get-share-event-logger/getShareEventLogger.ts","file:///app/packages/libs/shared/src/utils/get-event-logger/getEventLogger.ts"],"sourcesContent":["export enum SharePrivacy {\n Public = 'Public',\n PinCode = 'PinCode',\n PasswordProtected = 'PasswordProtected',\n ProtectedOverrideRestriction = 'ProtectedOverrideRestriction',\n JustMySchoolOverrideRestriction = 'JustMySchoolOverrideRestriction',\n Protected = 'Protected',\n JustMySchool = 'JustMySchool',\n Direct = 'Direct'\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { CreateShareLinkRequest } from 'libs/shared/apps/share-v2/interfaces/CreateShareLinkRequest';\nimport { CreateShareRequest } from 'libs/shared/apps/share-v2/interfaces/CreateShareRequest';\nimport { UpdateShareRequest } from 'libs/shared/apps/share-v2/interfaces/UpdateShareRequest';\n\nconst normalizeOptions: Flight.NormalizeOptions = {\n namespace: 'share-v2'\n};\n\nexport interface GetSentSharesParams {\n cursor?: string;\n scopeId?: string;\n objectTypeId?: number;\n type?: ShareType\n}\n\nexport const ShareRequests = {\n createShare(\n data: CreateShareRequest\n ): Flight.Request {\n return {\n url: '{gateway}/v2/shares',\n key: 'create:share-v2',\n type: HttpVerbs.POST,\n data,\n normalizeOptions,\n invalidationKeys: [ 'sent:share-v2', `get:share-v2:shares:object:${data.objectId}` ]\n };\n },\n\n updateShare(\n shareId: string,\n data: UpdateShareRequest\n ): Flight.Request {\n return {\n url: `{gateway}/v2/shares/${shareId}`,\n key: `update:share-v2`,\n type: HttpVerbs.PUT,\n data,\n normalizeOptions,\n invalidationKeys: [ 'share-v2:permanent-link:object', `share-v2:${shareId}` ]\n };\n },\n \n deleteShare(\n shareId: string\n ): Flight.Request {\n return {\n type: HttpVerbs.DELETE,\n url: `{gateway}/v2/shares/${shareId}`,\n key: `delete:share-v2`,\n normalizeOptions,\n invalidationKeys: [ 'share-v2:permanent-link:object', 'sent:share-v2', `share-v2:${shareId}` ]\n };\n },\n\n getShare(\n shareId: string\n ): Flight.Request {\n return {\n url: `{gateway}/v2/shares/${shareId}`,\n key: `share-v2:${shareId}`,\n bootstrapName: `share-v2:${shareId}`,\n type: HttpVerbs.GET,\n normalizeOptions\n };\n },\n\n getSentShares(\n params: GetSentSharesParams = {}\n ): Flight.Request {\n const key = Object.values(params).sort().join(':');\n\n return {\n url: UrlHelper.urlBuilder('{gateway}/v2/shares/sent', params),\n key: `sent:share-v2:${key}`,\n type: HttpVerbs.GET,\n normalize: false\n };\n },\n\n getShareLink(\n id: string\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder('{gateway}/v2/shares/permanent-link', { objectId: id }),\n key: `share-v2:permanent-link:object:${id}`,\n normalizeOptions\n };\n },\n\n createShareLink(\n data: CreateShareLinkRequest\n ): Flight.Request {\n return {\n type: HttpVerbs.POST,\n url: UrlHelper.urlBuilder('{gateway}/v2/shares/permanent-link', { ...data }),\n key: `create:share-v2:permanent-link:object:${data.objectId}`,\n invalidationKeys: [ `share-v2:permanent-link:object:${data.objectId}`, 'sent:share-v2' ],\n normalizeOptions\n };\n },\n\n getPrivacy(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}/access`,\n key: `privacy:${id}`,\n normalize: false\n };\n },\n \n getSharesByObjectId(\n objectId: string | number\n ): Flight.Request {\n return {\n url: `{gateway}/v2/shares/objects/${objectId}`,\n key: `get:share-v2:shares:object:${objectId}`,\n type: HttpVerbs.GET,\n normalizeOptions\n };\n },\n\n createSharePincode(shareId: string): Flight.Request {\n return {\n url: `{gateway}/v2/shares/${shareId}/pincode`,\n key: `create:share-v2:${shareId}:pincode`,\n type: HttpVerbs.POST\n };\n },\n\n getPincodeByShareId(shareId: string): Flight.Request {\n return {\n url: `{gateway}/v2/shares/${shareId}/pincode`,\n key: `get:share-v2:${shareId}:pincode`\n };\n },\n\n getPincodeByCode(code: string): Flight.Request {\n return {\n url: `{gateway}/v2/shares/pincode?code=${code}`,\n key: `get:share-v2:pincode:${code}`\n };\n }\n};\n","import { Flight } from 'libs/common/react/index';\n\nimport { SharePrivacy } from '../enums/SharePrivacy';\nimport { ShareRequests } from '../flight-requests/ShareRequests';\nimport { Share } from '../interfaces/Share';\nimport { SharePrivacyResponse } from '../interfaces/SharePrivacyResponse';\nimport { UpdateShareRequest } from '../interfaces/UpdateShareRequest';\nimport { ShareLinkHelper } from '../utils/ShareLinkHelper';\n\ninterface UseShareLinkActionsOptions {\n entityId: string;\n}\n\nexport function useShareLinkActions(options: UseShareLinkActionsOptions) {\n const fetchAsync = Flight.useGetFetchAsync();\n\n const entityPrivacy = Flight.useBasicFetch<SharePrivacyResponse>(ShareRequests.getPrivacy(options.entityId));\n\n function getCreateSharePrivacy() {\n const accessType = ShareLinkHelper.getShareLinkAccessType(entityPrivacy.data);\n return accessType === 'private'\n ? SharePrivacy.JustMySchool\n : SharePrivacy.Protected;\n }\n\n function updateShareLink(shareId: string, data: UpdateShareRequest): Promise<Share> {\n return fetchAsync<Share>(ShareRequests.updateShare(shareId, data));\n }\n\n function createShareLink(privacy?: SharePrivacy): Promise<Share> {\n const requestPrivacy = privacy ?? getCreateSharePrivacy();\n return fetchAsync<Share>(ShareRequests.createShareLink({ objectId: options.entityId, privacy: requestPrivacy }));\n }\n\n function deleteShareLink(shareId: string): Promise<void> {\n return fetchAsync(ShareRequests.deleteShare(shareId));\n }\n\n return {\n loaded: !!entityPrivacy.data,\n updateShareLink,\n createShareLink,\n deleteShareLink\n };\n}","import { Flight } from 'libs/common/react/index';\n\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport type { SharePrivacyResponse } from 'libs/shared/apps/share-v2/interfaces/SharePrivacyResponse';\nimport { SharableEntityType, ShareViewHelper } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport type { Config, CurrentUser } from 'libs/shared/interfaces';\n\nimport { Share } from '../interfaces/Share';\n\ninterface UseShareLinkDataOptions {\n entityId: string;\n entityType: SharableEntityType;\n}\n\nexport function useShareLinkData(options: UseShareLinkDataOptions) {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const entity = ShareViewHelper.getFetchFunctionByType(options.entityType)(options.entityId, currentUser.data?.id);\n const privacy = Flight.useBasicFetch<SharePrivacyResponse>(ShareRequests.getPrivacy(options.entityId));\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShareLink(options.entityId));\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n \n const dataLoaded = !!entity.data\n && !!currentUser.data\n && !!privacy.data\n && !!share.data\n && !!config.data;\n\n return {\n dataLoaded,\n currentUser: currentUser,\n entity: entity,\n privacy: privacy,\n share: share,\n config: config\n };\n}","import { 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 type { SharePrivacyResponse } from 'libs/shared/apps/share-v2/interfaces/SharePrivacyResponse';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ShareLinkStatus } from 'libs/shared/enums/ShareLinkStatus';\nimport type { BaseObject, YearGroup } from 'libs/shared/interfaces';\nimport { RestrictionHelper } from 'libs/shared/utils/RestrictionHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nconst namespace = 'sharev2.utils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface GetIconAndTextOptions {\n linkExpireDate: string;\n isPasswordProtected: boolean;\n privacy: SharePrivacy;\n status: ShareLinkStatus;\n entityTypeId: MasterType;\n hasStudentExp: boolean;\n entity: BaseObject;\n yearGroups: YearGroup[];\n}\n\ninterface GetPrivateIconAndTextOptions {\n privacy: SharePrivacy;\n entityTypeId: MasterType;\n hasStudentExp: boolean;\n entity: BaseObject;\n yearGroups: YearGroup[];\n}\n\n\nexport const ShareLinkHelper = {\n getPrivateIconAndText: (options: GetPrivateIconAndTextOptions) => {\n const { entityTypeId, privacy, hasStudentExp, entity, yearGroups } = options;\n \n if (entityTypeId === MasterType.Topic || entityTypeId === MasterType.Series)\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase(hasStudentExp ? 'justMySchoolTeachers' : 'justMySchoolDescription') };\n \n /**\n * This is mainly for typescript, privacy will be an array for playlists\n * but that is handled above\n */\n if (Array.isArray(privacy))\n return;\n \n switch (privacy) {\n case SharePrivacy.Public:\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase('publicDescription') };\n case SharePrivacy.ProtectedOverrideRestriction:\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase('clickViewOnly') };\n case SharePrivacy.Protected:\n return {\n icon: cvSvgLibrary.Lock,\n text: ShareLinkHelper.getRespectRatingText(entity, yearGroups, hasStudentExp)\n };\n case SharePrivacy.JustMySchoolOverrideRestriction:\n return { icon: cvSvgLibrary.Lock, text: getPhrase(hasStudentExp ? 'justMySchoolTeachers' : 'justMySchoolDescription') };\n case SharePrivacy.JustMySchool:\n return {\n icon: cvSvgLibrary.Lock,\n text: ShareLinkHelper.getRespectRatingText(entity, yearGroups, hasStudentExp)\n };\n case SharePrivacy.PinCode:\n return { icon: cvSvgLibrary.Lock, text: getPhrase('pinDescription') };\n case SharePrivacy.PasswordProtected:\n return { icon: cvSvgLibrary.Lock, text: getPhrase('privateDescription') };\n default:\n return {};\n }\n },\n\n getIconAndText: (options: GetIconAndTextOptions) => {\n const { linkExpireDate, isPasswordProtected, status } = options;\n if (!linkExpireDate && !isPasswordProtected)\n return ShareLinkHelper.getPrivateIconAndText(options);\n \n if (!linkExpireDate)\n return { icon: cvSvgLibrary.Lock, text: getPhrase('password') };\n \n const isToday = DateHelper.isToday(linkExpireDate);\n const dayDifference = DateHelper.diffBetween(linkExpireDate, new Date(), 'day');\n \n if (!isPasswordProtected) {\n let text = isToday\n ? getPhrase('expiryToday')\n : getPhrase('expiry', { days: dayDifference });\n \n if (status === ShareLinkStatus.Expired)\n text = getPhrase('expired');\n \n return { icon: cvSvgLibrary.Timer, text };\n }\n \n let text = isToday\n ? getPhrase('passwordExpiryToday')\n : getPhrase('passwordExpiry', { days: dayDifference });\n \n if (status === ShareLinkStatus.Expired)\n text = getPhrase('passwordExpired');\n \n return { icon: cvSvgLibrary.Lock, text };\n },\n\n getRespectRatingText(video: BaseObject, yearGroups: YearGroup[], hasStudentExp: boolean) {\n if (!video || !yearGroups)\n return null;\n \n if (hasStudentExp)\n return getPhrase('justMySchoolTeachers');\n \n if (!VideoHelper.isVideoType(video))\n return getPhrase('collectionRating');\n \n const restriction = RestrictionHelper.getWeightedRestriction(video._restrictions?.value);\n \n /**\n * Restrictions without a year level are teacher restricitons, which means only admins can see it.\n */\n if (restriction && !restriction.yearGroup)\n return getPhrase('onlyAdmins');\n \n const rating = VideoHelper.getRating(video);\n \n let maxYearGroup: YearGroup;\n let minAllowedYearGroup: YearGroup;\n \n for (const yearGroup of yearGroups) {\n /**\n * If our year level is our new highest so far, save it\n */\n if (!maxYearGroup || yearGroup.value > maxYearGroup.value)\n maxYearGroup = yearGroup;\n \n /**\n * If the restriction is higher than this year level, skip it.\n */\n if (restriction && yearGroup.value <= restriction.yearGroup)\n continue;\n \n /**\n * If therating is higher than this year level's rating value, skip it.\n */\n if (rating && yearGroup.rating.value < rating.value)\n continue;\n \n /**\n * If our year level is the new lowest so far, save it\n */\n if (!minAllowedYearGroup || yearGroup.value < minAllowedYearGroup.value)\n minAllowedYearGroup = yearGroup;\n }\n \n /**\n * If no year levels are allowed, then it's staff only.\n */\n if (!minAllowedYearGroup)\n return getPhrase('onlyStaff');\n \n \n /**\n * If there's only one year level, and it's allowed, then we can just\n * say that everyone in your school can access it.\n */\n if (yearGroups.length === 1)\n return getPhrase('clickViewOnly');\n \n /**\n * We differentiate the copy if it's the highest year level or not. \n * Basically if we need to say \"X and above\" or not.\n */\n if (minAllowedYearGroup.value === maxYearGroup.value)\n return getPhrase('maxYearGroup', { yearGroup: maxYearGroup.name });\n \n return getPhrase('yearGroupRange', { yearGroup: minAllowedYearGroup.name });\n },\n\n getShareLinkAccessType(privacy: SharePrivacyResponse): 'private' | 'clickview' | 'tv' {\n /**\n * If an entity is not a ClickView content and they cannot manage access\n * settings of the entity (which they can if its their private entity)\n * it means that its a TV content\n */\n if (privacy.isTvContent)\n return 'tv';\n \n if (privacy.isClickViewContent)\n return 'clickview';\n\n return 'private';\n }\n};","import { AnalyticsOptions, EntityType } from 'libs/analytics/interfaces';\n\nimport { ShareViewHelper as OldShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport type { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { IntegrationId } from 'libs/shared/enums/IntegrationId';\nimport type { Clip, Interactive, InteractiveMetadata, Playlist, Series, Subject, Video } from 'libs/shared/interfaces';\nimport { IntegrationHelper } from 'libs/shared/utils/IntegrationHelper';\n\nexport type SharableEntityType = 'video' | 'playlist' | 'subject' | 'series' | 'interactive' | 'clip';\nexport type SharableEntity = Video | Playlist | Subject | Series | InteractiveMetadata | Clip;\nexport interface ShareSettingsFormFields {\n preventScrubbing: boolean;\n immediateFeedback: boolean;\n}\n\nexport const ShareViewHelper = {\n canEmbed(type: SharableEntityType): boolean {\n return [ 'video', 'interactive', 'clip' ].includes(type);\n },\n\n /**\n * Only interactive entities can update share settings currently\n */\n canAddPolicies(type: SharableEntityType): boolean {\n return ['interactive'].includes(type);\n },\n\n getEnabledIntegrations(googleClassroomSetting: boolean, msftTeamsSetting: boolean): IntegrationId[] {\n const integrations = IntegrationHelper.getShareIntegrations(googleClassroomSetting, msftTeamsSetting);\n return integrations.filter(i => i.enabled).map(i => i.id);\n },\n\n getShareSettingsInitialValues(share: Share, interactive: Interactive | null) {\n return {\n preventScrubbing: share?.options?.preventScrubbing ?? interactive?.preventScrubbing ?? false,\n immediateFeedback: share?.options?.immediateFeedback ?? interactive?.immediateFeedback ?? false\n };\n },\n \n getEnabledSettingsField(entityType: SharableEntityType): {[key in `show${Capitalize<keyof ShareSettingsFormFields>}Field`]: boolean} {\n return {\n showImmediateFeedbackField: entityType === 'interactive',\n showPreventScrubbingField: entityType === 'interactive'\n };\n },\n\n /**\n * Methods from old ShareViewHelper imported here for namespacing\n */\n getFetchFunctionByType: (type: SharableEntityType) => {\n return OldShareViewHelper.getFetchFunctionByType(type);\n },\n\n getAnalyticsEntity(entityType: string): EntityType {\n return OldShareViewHelper.getAnalyticsEntity(entityType);\n },\n\n getAnalyticsOptions(entityType: SharableEntityType): AnalyticsOptions {\n return OldShareViewHelper.getAnalyticsOptions(entityType);\n }\n};","import { AnalyticsOptions, EntityType, ShareDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { EventLogConfig, getEventLogger } from 'libs/shared/utils/get-event-logger/getEventLogger';\n\nimport { BaseShareData, ShareLogData } from './interfaces/GetShareEventLogger';\n\ninterface ShareEventLoggerOptions {\n data: BaseShareData;\n analyticsOptions: AnalyticsOptions;\n shouldLog?: boolean;\n}\n\nexport type ShareLogFn = ReturnType<typeof getShareEventLogger>['log'];\n\nfunction isValidShare(data: ShareLogData): boolean {\n if (!('share' in data))\n return false;\n\n return !!data.share;\n}\n\nconst LogDataConfig: EventLogConfig<ShareLogData> = {\n /**\n * Share - Link\n */\n 'create-share-link': {\n isValid: isValidShare,\n analyticsOptions: {\n actionType: UserAction.Create,\n workflowPhase: WorkflowPhase.Complete,\n entity: EntityType.ShareLink\n }\n },\n 'update-share-link': {\n isValid: isValidShare,\n analyticsOptions: {\n actionType: UserAction.Edit,\n entity: EntityType.ShareLink,\n workflowPhase: WorkflowPhase.Complete\n }\n },\n 'delete-share-link': {\n isValid: isValidShare,\n analyticsOptions: {\n actionType: UserAction.Delete,\n entity: EntityType.ShareLink,\n workflowPhase: WorkflowPhase.Complete\n }\n },\n\n 'plugin-share-embed': {\n isValid: isValidShare,\n analyticsOptions: {\n actionType: UserAction.Share,\n descriptor: ShareDescriptors.PluginEmbed,\n workflowPhase: WorkflowPhase.Complete,\n entity: EntityType.ShareLink\n }\n },\n\n /**\n * General\n */\n 'copy-embed-html': {\n isValid: () => true,\n analyticsOptions: {\n actionType: UserAction.Share,\n workflowPhase: WorkflowPhase.Complete,\n entity: EntityType.ShareLink, // default\n descriptor: ShareDescriptors.CopyEmbedHtml\n }\n },\n 'copy-share-link': {\n isValid: isValidShare,\n analyticsOptions: {\n actionType: UserAction.Share,\n workflowPhase: WorkflowPhase.Complete,\n entity: EntityType.ShareLink, // default\n descriptor: ShareDescriptors.CopyLink\n }\n }\n};\n\nexport function getShareEventLogger(options: ShareEventLoggerOptions) {\n const { log, getData } = getEventLogger({\n analyticsOptions: options.analyticsOptions,\n baseData: options.data,\n config: LogDataConfig,\n shouldLog: options.shouldLog ?? true\n });\n\n return {\n log,\n getData\n };\n}","import { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\n/**\n * Base type that every event needs to extend from\n */\nexport interface BaseEventLogData<T extends string = string> {\n type: T;\n}\n\n/**\n * Utility type to map event types to config types\n */\nexport type EventLogConfig<TEvents extends BaseEventLogData> = {\n [K in TEvents['type']]: BaseConfigData<Extract<TEvents, { type: K }>>;\n};\n\ninterface BaseConfigData<T extends BaseEventLogData> {\n isValid?: (data: T) => boolean;\n analyticsOptions: AnalyticsOptions;\n}\n\ninterface GetEventLoggerOptions<TData extends HashObject, TEvents extends BaseEventLogData> {\n baseData: TData;\n /**\n * Event type config map\n */\n config: EventLogConfig<TEvents>;\n /**\n * Base analytics options\n */\n analyticsOptions: AnalyticsOptions;\n\n shouldLog?: boolean;\n}\n\n/**\n * Method build and log events which are typed using map\n * passed in from config\n */\nexport function getEventLogger<\n TData extends HashObject = HashObject,\n TEvents extends BaseEventLogData = BaseEventLogData\n>(\n options: GetEventLoggerOptions<TData, TEvents>\n) {\n /**\n * Types to assist hinting in our log / getData methods\n */\n type EventType = TEvents['type']; // type of event\n type EventData = Extract<TEvents, { type: EventType }>; // restrict the data to the passed type\n \n /**\n * Get analytics data and options for a given event type\n */\n function getData(\n data: EventData,\n logAnalyticsOptions?: AnalyticsOptions\n ) {\n const logDataConfig = options.config[data.type];\n\n if (!logDataConfig?.isValid(data))\n return;\n\n const mergedData = {\n ...options.baseData,\n ...data\n };\n \n const sanitizedData = ObjectHelper.omit<typeof data>(mergedData, ['type']);\n\n const analyticsOptions = AnalyticsHelper.mergeOptions(\n logDataConfig.analyticsOptions,\n [\n options.analyticsOptions,\n logAnalyticsOptions\n ]\n );\n\n return {\n data: sanitizedData,\n analyticsOptions\n };\n }\n\n /**\n * Similar to `getData` except it logs the analytics event\n * for a given type if its valid\n */\n function log(\n data: EventData,\n logAnalyticsOptions?: AnalyticsOptions\n ) {\n if (!options.shouldLog)\n return;\n\n const analytics = getData(data, logAnalyticsOptions);\n\n if (!analytics)\n return;\n\n AnalyticsHelper.logUserAction(analytics.data, analytics.analyticsOptions);\n }\n\n return {\n getData,\n log\n };\n}"],"names":["SharePrivacy","normalizeOptions","namespace","ShareRequests","createShare","data","url","key","type","invalidationKeys","objectId","updateShare","shareId","deleteShare","getShare","bootstrapName","getSentShares","params","Object","values","sort","join","normalize","getShareLink","id","createShareLink","getPrivacy","getSharesByObjectId","createSharePincode","getPincodeByShareId","getPincodeByCode","code","useShareLinkActions","options","fetchAsync","entityPrivacy","entityId","loaded","updateShareLink","privacy","requestPrivacy","deleteShareLink","useShareLinkData","currentUser","entity","entityType","share","config","dataLoaded","getPhrase","ShareLinkHelper","getPrivateIconAndText","entityTypeId","hasStudentExp","yearGroups","icon","text","Array","isArray","getRespectRatingText","getIconAndText","linkExpireDate","isPasswordProtected","status","isToday","dayDifference","Date","days","video","restriction","_restrictions","value","yearGroup","maxYearGroup","minAllowedYearGroup","rating","length","name","getShareLinkAccessType","isTvContent","isClickViewContent","ShareViewHelper","canEmbed","includes","canAddPolicies","getEnabledIntegrations","googleClassroomSetting","msftTeamsSetting","filter","i","enabled","map","getShareSettingsInitialValues","interactive","preventScrubbing","immediateFeedback","getEnabledSettingsField","showImmediateFeedbackField","showPreventScrubbingField","getFetchFunctionByType","getAnalyticsEntity","getAnalyticsOptions","isValidShare","LogDataConfig","isValid","analyticsOptions","actionType","workflowPhase","descriptor","getShareEventLogger","baseData","shouldLog","log","getData","getEventLogger","logAnalyticsOptions","logDataConfig","mergedData","analytics"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[9266],{75097:(e,t,n)=>{n.d(t,{U:()=>o});var r=n(32735),a=n(13170);function o(e){var t=e.count,n=void 0===t?6:t;return r.createElement("div",{className:"d-flex"},r.createElement("div",{className:"d-flex ps-1"},Array(n).fill(null).map((function(e,t){return r.createElement("div",{key:t,className:"".concat(a.Z.partialButton," partial-loading-background mx-1")})}))))}},6748:(e,t,n)=>{n.d(t,{i:()=>w});var r=n(32735),a=n(42648),o=n(35509),l=n(91967),c=n(15611),i=n(17808),s=n(1287),u=n(83914),d=n(90281),m={opacity:"0.8",cursor:"grabbing"},f=n(35223);function p(e){return function(e){if(Array.isArray(e))return g(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||v(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 v(e,t){if(e){if("string"==typeof e)return g(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)?g(e,t):void 0}}function g(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 b(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 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}var E=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 S(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?f.vn.ArrowRight:f.vn.ArrowLeft,size:u.S.Small})):r.createElement(r.Fragment,null)}function k(e){var t,n,a,u,d,f,v,g,b={columns:e.columns,data:e.data,disableSortBy:!e.enableSort,manualSortBy:e.manualSort,autoResetHiddenColumns:e.autoResetHiddenColumns,autoResetSortBy:e.autoResetSortBy,initialState:{sortBy:e.initialSortBy||[]}};e.initialSelectedRowIds&&(b.initialState={selectedRowIds:(v=e.initialSelectedRowIds,g={},v.forEach((function(e){return g[e]=!0})),g)}),e.getRowId&&(b.getRowId=e.getRowId);var y,E=o.useTable.apply(void 0,[b].concat((y=function(e){var t=[o.useSortBy,o.useRowSelect,"flex"===e.layout?o.useFlexLayout:o.useBlockLayout];return e.allowFiltering&&(t=[].concat(p(t),[o.useFilters])),e.allowGlobalFiltering&&(t=[].concat(p(t),[o.useGlobalFilter])),t}(Object.assign({},e)),function(e){if(Array.isArray(e))return h(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 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}}(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.")}()))),k=E.getTableProps,w=E.getTableBodyProps,C=E.headerGroups,N=E.rows,j=E.prepareRow,x=E.toggleAllRowsSelected,A=E.setGlobalFilter,T=E.setHiddenColumns,R=E.state.sortBy;function L(){return N.map((function(t){j(t);var n=function(t){var n,r,a,o,c,i=l.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)&&(i+=" ".concat(null===(c=e.theme)||void 0===c?void 0:c.selectedRow)),e.onSelectRow&&(i+=" cursor-pointer"),e.enableSortableRows&&(i+=" cursor-grab"),i}(t),a=!!e.getRowAppLink&&e.getRowAppLink(t);function o(){e.onSelectRow&&(e.allowSelectMultipleRows||x(!1),e.onSelectRow(t),t.toggleRowSelected(!0))}function i(e,l){var i=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,l);return a?r.createElement("div",{role:"row",key:t.id},r.createElement(c.F,Object.assign({},e,i,{className:n,appLink:a}),O(t))):r.createElement("div",Object.assign({},e,i,{key:t.id,role:"row",className:n,onClick:o}),O(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 i(e,t)}))}):i(u)}))}function O(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(R)}),[R]),r.useEffect((function(){e.globalFilter&&A(e.globalFilter)}),[e.globalFilter]),r.useEffect((function(){e.hiddenColumns&&T(e.hiddenColumns)}),[e.hiddenColumns&&e.hiddenColumns.length]),r.createElement("div",Object.assign({},k(),{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:""},C.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(S,{column:t,theme:e.theme})}}),!t.hideSortIndicator&&r.createElement(S,{column:t,theme:e.theme}))})))}))),r.createElement("div",Object.assign({},w(),{className:null!==(f=null===(d=e.theme)||void 0===d?void 0:d.body)&&void 0!==f?f:""}),e.enableSortableRows?r.createElement(i.Q,{ids:N.map((function(e){return e.original.id})),getDragOverlay:function(t){var n,a,o=N.findIndex((function(e){return e.original.id===t})),l=N[o];return r.createElement("div",Object.assign({},e,{className:(n=e.theme,a="g-0 ",n&&(a+=n.row),a),style:m}),O(l))},onSortEnd:e.onSortingRowsEnd},L()):L()))}function w(e){var t=e.enableSlider,n=e.scrollIncrement,o=e.scrollable,c=E(e,["enableSlider","scrollIncrement","scrollable"]),i=function(){var e,t,n=r.useRef(null),a=(e=r.useState(b(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,l,c=[],i=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(r=o.call(n)).done)&&(c.push(r.value),c.length!==t);i=!0);}catch(e){s=!0,a=e}finally{try{if(!i&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(s)throw a}}return c}}(e,t)||v(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],c=a[1],i=l.q.throttle((function(){c(b(n))}),200),s=r.useCallback((function(e){var t;n.current&&(null===(t=n.current)||void 0===t||t.removeEventListener("scroll",i)),e&&(c(b(n)),e.addEventListener("scroll",i)),n.current=e}),[]);return r.useEffect((function(){(null==n?void 0:n.current)&&c(b(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=i.ref,u=i.scrollState,m=i.scroll;if(o)return r.createElement(a.$B,{renderTrackHorizontal:function(){return r.createElement("div",{className:y.scrollbarTrack})},autoHeightMax:1e4,autoHeight:!0},r.createElement(k,Object.assign({},c)));if(!t)return r.createElement(k,Object.assign({},c));function f(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 f("left")},hide:!u.canScrollLeft}),r.createElement("div",{className:"".concat(y.scrollContainer," ").concat(e.scrollContainerClassName),ref:s},r.createElement(k,Object.assign({},c))),r.createElement(d.W,{direction:d.f.Right,onClick:function(){return f("right")},hide:!u.canScrollRight}))))}w.defaultProps={scrollIncrement:250,scrollable:!1,layout:"flex"}},63112:(e,t,n)=>{n.d(t,{o:()=>o});var r=n(32735),a=n(14346),o=r.memo((function(e){var t=e.tagClass,n="partial-loading-background d-inline-block rounded-pill py-1 px-2 mb-1 me-1 text-nowrap ".concat(void 0===t?"":t," ").concat(a.Z.partialTag);return r.createElement("div",{className:"mt-1"},r.createElement("span",{className:n}," "))}))},30699:(e,t,n)=>{n.d(t,{a:()=>o});var r=n(32735),a=n(16035);function o(e){var t=e.selectedItems.find((function(t){return t.id===e.data.id}))?"bg-gray-900 text-white":"bg-light";return r.createElement(a.z,{tag:e.data,appLink:e.appLink,tagClass:"no-decoration ".concat(t," lh-1"),onClick:function(){return e.onClick(e.data)}})}},91286:(e,t,n)=>{n.d(t,{v:()=>l});var r=n(32735),a=n(94644);function o(e){return e.map((function(e){return e.statusCode})).join(":")}function l(e,t,n){var l=Array.isArray(e)?e:[e];(0,r.useEffect)((function(){l.forEach((function(e){(0,a.r)(e.statusCode,t,n)}))}),[o(l),t,n])}},299:(e,t,n)=>{n.d(t,{X:()=>l});var r=n(32735),a=n(69217),o=n(94631),l=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.idField,l=void 0===n?"id":n,c=t.persistNamespace,i=t.initialState?t.initialState:new Map,s=r.useRef(i),u=(0,a.N)(),d=(0,o.D)(e),m=(0,o.D)(c);function f(){s.current.clear(),u()}function p(e){return"number"==typeof e?e=e.toString():"string"!=typeof e&&(e=e[l].toString()),s.current.get(e)}function v(){return!!(null==e?void 0:e.length)&&e.every(p)}function g(e){e.forEach((function(e){s.current.set(e,!0)})),u()}return r.useEffect((function(){t.initialState||c&&m===c||(null==d?void 0:d.map((function(e){return e[l]})).join())!==(null==e?void 0:e.map((function(e){return e[l]})).join())&&f()}),[d,m,e,t.initialState]),r.useEffect((function(){var e;(null===(e=t.preselectedIds)||void 0===e?void 0:e.length)&&g(t.preselectedIds)}),[]),{onToggleBulk:function(){var t=!v();e.forEach((function(e){t?s.current.set(e[l].toString(),!0):s.current.delete(e[l].toString())})),u()},onToggleItem:function(e){var t=!s.current.get(e.toString());t?s.current.set(e.toString(),t):s.current.delete(e.toString()),u()},getSelected:function(){return Array.from(s.current.keys())},isChecked:p,bulkChecked:v(),deselectAll:function(){(null==e?void 0:e.length)&&(e.forEach((function(e){s.current.delete(e[l].toString())})),u())},hasSomeSelections:function(){return!!(null==e?void 0:e.length)&&!!e.find((function(e){return p(e)}))},setSelected:g,getSelectedCount:function(){return s.current.size},reset:f,getMap:function(){return s.current}}}},53088:(e,t,n)=>{n.r(t),n.d(t,{UserAuditLogView:()=>te});var r=n(32735),a=n(23481),o=n(57900),l=n(20354),c=n(75097),i=n(49935);const s={partialHeading:"rfiJl",partialJobCount:"h8k_u",partialCheckbox:"HkuOS",partialExportButton:"Iul7S",row:"mwigG",checkboxColumn:"Z5jLG",actionColumn:"rLxYh",usersColumn:"QZzab",dateColumn:"Wf_Jp",performedByColumn:"Ubtmj",seeMoreColumn:"XdP6u",heading:"kRMMH",action:"DvDvW",users:"goKpg",date:"ejYGb",performedBy:"NhjyL"};function u(){return r.createElement("div",{className:"d-flex striped-row rounded py-3 ".concat(s.row)},r.createElement("div",{className:"".concat(s.checkboxColumn," d-flex justify-content-center")},r.createElement("div",{className:"partial-loading-background ".concat(s.partialCheckbox," ms-0")})),r.createElement("div",{className:"".concat(s.actionColumn)},r.createElement("div",{className:"partial-loading-background ".concat(s.action)})),r.createElement("div",{className:"".concat(s.usersColumn)},r.createElement("div",{className:"partial-loading-background ".concat(s.users)})),r.createElement("div",{className:"".concat(s.dateColumn)},r.createElement("div",{className:"partial-loading-background ".concat(s.date)})),r.createElement("div",{className:"".concat(s.performedByColumn)},r.createElement("div",{className:"partial-loading-background ".concat(s.performedBy)})),r.createElement("div",{className:"".concat(s.seeMoreColumn)}," "))}function d(){return r.createElement("div",{className:"d-flex py-2 mb-1"},r.createElement("div",{className:"".concat(s.checkboxColumn)}," "),r.createElement("div",{className:"".concat(s.actionColumn)},r.createElement("div",{className:"partial-loading-background ".concat(s.heading)})),r.createElement("div",{className:"".concat(s.usersColumn)},r.createElement("div",{className:"partial-loading-background ".concat(s.heading)})),r.createElement("div",{className:"".concat(s.dateColumn)},r.createElement("div",{className:"partial-loading-background ".concat(s.heading)})),r.createElement("div",{className:"".concat(s.performedByColumn)},r.createElement("div",{className:"partial-loading-background ".concat(s.heading)})),r.createElement("div",{className:"".concat(s.seeMoreColumn)}," "))}function m(){return r.createElement(r.Fragment,null,r.createElement("div",{className:"mb-3 mt-n1"},r.createElement(d,null),r.createElement("div",{className:"striped-list no-full-width"},r.createElement(u,null),r.createElement(u,null),r.createElement(u,null),r.createElement(u,null),r.createElement(u,null),r.createElement(u,null),r.createElement(u,null),r.createElement(u,null),r.createElement(u,null),r.createElement(u,null),r.createElement(u,null),r.createElement(u,null))))}function f(){return r.createElement(r.Fragment,null,r.createElement("div",{className:"partial-loading-background mb-2 ".concat(s.partialHeading)}),r.createElement("div",{className:"pb-3"},r.createElement("div",{className:"d-flex justify-content-between"},r.createElement(i.b2,null),r.createElement("div",{className:"partial-loading-background ".concat(s.partialJobCount)}))),r.createElement("div",{className:"d-flex align-items-center pb-2"},r.createElement("div",{className:"partial-loading-background ".concat(s.partialCheckbox)}),r.createElement("div",{className:"ms-4 ps-3"},r.createElement(c.U,{count:3})),r.createElement("div",{className:"ms-auto partial-loading-background ".concat(s.partialExportButton)})),r.createElement(m,null))}var p=n(89422),v=n(89965),g=n(37395),b=n(2102),y=n(83345),h=n(76881),E=n(69883),S=n(299),k=n(75795),w=n(65858),C=n(10638),N=n(70848),j="userManager.userAuditLogFilters";function x(e){var t=[N.x$.SortBy([{id:"newest",name:a.T.getPhrase(j,"newest"),default:!0},{id:"oldest",name:a.T.getPhrase(j,"oldest")}]),N.x$.BulkActionType(),N.x$.UserType()];return r.createElement(C.J,{queryParams:e.queryParams,mainFilters:t,appLink:e.appLinks.auditLog,analyticsOptions:{entity:w.py.BatchJob,location:w.LZ.UserAuditLog},hideHeading:!0,hideDivider:!0,constantIndices:[]})}var A=n(6748),T=n(110),R=n(149),L=n(15611),O=n(97392),I=n(83914),B=n(86794);const M={seeMore:"uymuO"};function P(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 F="userManager.userAuditLogTable",H=a.T.encloseNamespace(F),U={table:"striped-list no-full-width pb-3",header:"fw-semibold pb-1",headerCell:"px-2 py-1",row:"striped-row rounded audit-log-row",cell:"d-flex align-items-center py-3 px-2"};function J(e){var t,n,a,o,l=(t=e.jobs.data,n=e.isChecked,t.map((function(e){var t=T.O.format(e.dateCreated,"DD/MM/YYYY, hh:mmA");return{id:e.id,checked:n(e.id),actionType:R.b.mapJobTypeToName(e.type),userType:R.b.mapDataTypeToUserType(e.dataType),date:t,performedBy:{name:e.submitterName,submittedByClickView:e.submittedByClickView}}})));return r.createElement(A.i,{columns:(a=e.appLinks.bulkActionSummary,o=e.onToggleCheckbox,[{Header:"",id:"checkboxes",accessor:function(e){return{id:e.id,checked:e.checked}},Cell:function(e){return r.createElement("div",{className:"text-center mx-auto"},r.createElement(v.X,{id:e.value.id,checked:e.value.checked,onChange:function(){return o(e.value.id)}}))},width:10},{Header:H("action"),accessor:"actionType",id:"actionType",Cell:function(e){var t=e.value;return r.createElement("div",{className:"w-100"},t)},width:20},{Header:H("users"),accessor:"userType",id:"userType",Cell:function(e){var t=e.value;return r.createElement("div",{className:"w-100"},function(){switch(t){case h.Y.Learner:return H("students");case h.Y.Staff:return H("staff");case h.Y.Unknown:default:return H("unknown")}}())},width:10},{Header:H("date"),accessor:"date",id:"date",Cell:function(e){var t=e.value;return r.createElement("div",{className:"w-100"},t)},width:20},{Header:H("performedBy"),accessor:"performedBy",id:"performedBy",Cell:function(e){return r.createElement("div",{className:"w-100 d-flex align-items-center"},e.value.submittedByClickView&&r.createElement(B.b,{className:"me-1",size:I.S.Small},r.createElement(O.F,null)),e.value.name)},width:20},{Header:"",accessor:"id",id:"seeMore",Cell:function(e){var t,n,o=e.value;return r.createElement("div",{className:"w-100 d-flex justify-content-end"},r.createElement(L.F,{className:"info-link text-end me-3 ms-auto ".concat(M.seeMore),appLink:Object.assign(Object.assign({},a),{args:(null===(t=a.args)||void 0===t?void 0:t.length)?[].concat((n=a.args,function(e){if(Array.isArray(e))return P(e)}(n)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(n)||function(e,t){if(e){if("string"==typeof e)return P(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)?P(e,t):void 0}}(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),[o]):[o]})},r.createElement(y.x,{namespace:F,phrase:"seeMore"})))},width:30}]),data:l,theme:U})}var G=n(97958),Y="userManager.auditLogEmptyState";function _(e){return r.createElement(G.u,null,r.createElement(G.u.Image,{src:e.imageUrl}),r.createElement(G.u.Heading,null,r.createElement(y.x,{namespace:Y,phrase:"heading"})),r.createElement(G.u.Info,null,r.createElement(y.x,{namespace:Y,phrase:"info"})))}const q={bulkCheckbox:"NMw5T"};function D(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 W="userManager.auditLog",$=a.T.encloseNamespace(W);function V(e){var t,n,a,l,c=o.SG.get(p.K.AUDIT_LOG_REFERRER_KEY),s=(a=r.useState(!1),l=2,function(e){if(Array.isArray(e))return e}(a)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,l,c=[],i=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(r=o.call(n)).done)&&(c.push(r.value),c.length!==t);i=!0);}catch(e){s=!0,a=e}finally{try{if(!i&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(s)throw a}}return c}}(a,l)||function(e,t){if(e){if("string"==typeof e)return D(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?D(e,t):void 0}}(a,l)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),u=s[0],d=s[1],m=(0,S.X)(e.jobs.data),f=(0,E.Z)();return r.createElement(r.Fragment,null,r.createElement("h1",{className:"h2"},r.createElement(y.x,{namespace:W,phrase:"heading"})),r.createElement("div",{className:"pb-3"},r.createElement("div",{className:"d-flex justify-content-between"},r.createElement(i.Oo,{breadcrumbs:[{name:$("settingsBreadcrumb"),appLink:e.appLinks.settings},{name:$(c===h.Y.Learner?"studentManager":"staffManager"),appLink:e.appLinks.userManager},{name:$("heading"),active:!0}]}),r.createElement("p",{className:"mb-0 fw-semibold"},r.createElement(y.x,{namespace:W,phrase:"totalJobs",options:{showing:e.jobs.data.length,smartCount:e.jobs.count}})))),r.createElement("div",{className:"d-flex align-items-center pb-2"},r.createElement(v.X,{className:q.bulkCheckbox,id:"bulk-audit-log-checkbox",checked:m.bulkChecked,onChange:m.onToggleBulk,indeterminate:m.hasSomeSelections()}),r.createElement("div",{className:"ms-4 ps-1"},r.createElement(x,{queryParams:e.queryParams,appLinks:e.appLinks})),r.createElement(b.m,{variant:"dark",className:"ms-auto",onClick:function(){if(!u){d(!0);var t=m.getSelected();e.onClickExport(t).then((function(){return f.success($("exportSuccess"))})).catch((function(){return f.error($("exportError"))})).finally((function(){return d(!1)}))}},disabled:!m.hasSomeSelections()||u,showSpinner:u},r.createElement(y.x,{namespace:W,phrase:"export"}))),(null===(t=e.jobs.data)||void 0===t?void 0:t.length)?r.createElement(J,{jobs:e.jobs,appLinks:e.appLinks,onToggleCheckbox:m.onToggleItem,isChecked:m.isChecked}):r.createElement(_,{imageUrl:e.emptyStateImageUrl}),!!(null===(n=e.jobs.pagination)||void 0===n?void 0:n.cursors)&&r.createElement(g.t,{className:"p-0 text-end pb-3",cursors:e.jobs.pagination.cursors,appLink:k.O.getCurrentRoute().appLink,buttonVariant:"outline-dark"}))}var z=n(91286),K=n(79612),Z=n(99742),X=n(29613),Q=n(18087),ee="userManager.userAuditLogView";function te(e){var t=o.SG.get(p.K.AUDIT_LOG_REFERRER_KEY),n=l.a.useBasicFetch(X.q.getJobs(e.queryParams));(0,z.v)(n),(0,K.M)({title:a.T.getPhrase(ee,"pageTitle")});var c=l.a.useGetFetchAsync(),i=(0,Q.Y)(t);return n.hasCompleted?r.createElement("div",{className:"px-3"},r.createElement(V,{jobs:n.data,appLinks:i,queryParams:e.queryParams,onClickExport:function(e){return c(X.q.sendJobReports(e))},emptyStateImageUrl:Z.W.EmptyStates.Search.RESULTS})):r.createElement("div",{className:"px-3"},r.createElement(f,null))}},29613:(e,t,n)=>{n.d(t,{q:()=>l});var r=n(99940),a=n(97395),o=n(149),l={createJob:function(e,t,n){return{url:"{gateway}/v1/batch/jobs",key:"create:job",type:r.k.POST,data:e,success:t,error:n}},getJobs:function(e){var t={},n=[],r=[];return e.cursor&&(t.cursor=e.cursor),e.sort&&("oldest"===e.sort?t.order="ASC":t.order="DESC"),e.bulkActionType?(n=Array.isArray(e.bulkActionType)?e.bulkActionType:[e.bulkActionType],t.type=n):t.type=o.O,e.userType&&(r=Array.isArray(e.userType)?e.userType:[e.userType],t.dataType=r),{url:a._.urlBuilder("{gateway}/v1/batch/jobs",t),key:"batch:jobs:".concat(e.cursor,":").concat(e.sort,":").concat(n.sort().join(":"),":").concat(r.sort().join(":"))}},getJob:function(e){return{url:"{gateway}/v1/batch/jobs/".concat(e),key:"job:".concat(e)}},getJobProgress:function(e,t,n){return{url:"{gateway}/v1/batch/jobs/".concat(e,"/progress"),key:"job:".concat(e,":progress"),invalidationKeys:"job:".concat(e,":progress"),success:t,error:n}},getJobResults:function(e,t,n,r,o){var l={status:t};return n&&(l.cursor=n),{url:a._.urlBuilder("{gateway}/v1/batch/jobs/".concat(e,"/results"),l),key:"job:".concat(e,":results:").concat(t,":").concat(n),success:r,error:o}},getYearGroupRolloverStatus:function(e){return{url:"{gateway}/v1/batch/validations/customers/".concat(e,"/year-group-roll-over"),key:"year:group:rollover:status"}},sendJobReports:function(e){return{url:"{gateway}/v1/batch/results/export",key:"send:job:reports:".concat(e.sort().join(":")),type:r.k.POST,data:{jobIds:e}}},getJobSummary:function(e){return{url:"{gateway}/v1/batch/jobs/".concat(e,"/summary"),key:"job:summary:".concat(e)}}}}}]);
2
- //# sourceMappingURL=9266-c5d6705147-lite.chunk.js.map