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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) 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-0c03791b45-lite.chunk.js +2 -0
  11. package/dist/scripts/104-0c03791b45-lite.chunk.js.map +1 -0
  12. package/dist/scripts/1074-4f6b136f9a-lite.chunk.js +2 -0
  13. package/dist/scripts/1074-4f6b136f9a-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/1192-d409863a3c-lite.chunk.js +2 -0
  17. package/dist/scripts/1192-d409863a3c-lite.chunk.js.map +1 -0
  18. package/dist/scripts/1199-d2fcbb547e-lite.chunk.js +2 -0
  19. package/dist/scripts/1199-d2fcbb547e-lite.chunk.js.map +1 -0
  20. package/dist/scripts/121-1b744469ee-lite.chunk.js +2 -0
  21. package/dist/scripts/121-1b744469ee-lite.chunk.js.map +1 -0
  22. package/dist/scripts/{1221-502395e693-lite.chunk.js → 1221-1109d5379d-lite.chunk.js} +3 -3
  23. package/dist/scripts/1221-1109d5379d-lite.chunk.js.map +1 -0
  24. package/dist/scripts/1243-ede924125c-lite.chunk.js +2 -0
  25. package/dist/scripts/1243-ede924125c-lite.chunk.js.map +1 -0
  26. package/dist/scripts/147-44ee7e9a78-lite.chunk.js +2 -0
  27. package/dist/scripts/147-44ee7e9a78-lite.chunk.js.map +1 -0
  28. package/dist/scripts/1491-ab92a040e5-lite.chunk.js +2 -0
  29. package/dist/scripts/1491-ab92a040e5-lite.chunk.js.map +1 -0
  30. package/dist/scripts/{1610-7f58bb25a9-lite.chunk.js → 1610-bb6eff2ff1-lite.chunk.js} +2 -2
  31. package/dist/scripts/1610-bb6eff2ff1-lite.chunk.js.map +1 -0
  32. package/dist/scripts/{7230-71f8d6d1bd-lite.chunk.js → 1867-3b447a1b85-lite.chunk.js} +2 -2
  33. package/dist/scripts/{7230-71f8d6d1bd-lite.chunk.js.map → 1867-3b447a1b85-lite.chunk.js.map} +1 -1
  34. package/dist/scripts/{218-297de74688-lite.chunk.js → 218-f6cc4a3b6a-lite.chunk.js} +2 -2
  35. package/dist/scripts/218-f6cc4a3b6a-lite.chunk.js.map +1 -0
  36. package/dist/scripts/2258-ed7383502f-lite.chunk.js +3 -0
  37. package/dist/scripts/2258-ed7383502f-lite.chunk.js.map +1 -0
  38. package/dist/scripts/{2968-c4c0114915-lite.chunk.js → 2968-13e56eeff8-lite.chunk.js} +1 -1
  39. package/dist/scripts/2968-13e56eeff8-lite.chunk.js.map +1 -0
  40. package/dist/scripts/3268-2736356687-lite.chunk.js +2 -0
  41. package/dist/scripts/{3268-faca1bf46e-lite.chunk.js.map → 3268-2736356687-lite.chunk.js.map} +1 -1
  42. package/dist/scripts/3597-eaae787997-lite.chunk.js +3 -0
  43. package/dist/scripts/3597-eaae787997-lite.chunk.js.map +1 -0
  44. package/dist/scripts/3836-425334ab13-lite.chunk.js +2 -0
  45. package/dist/scripts/{3836-f2a0c9f713-lite.chunk.js.map → 3836-425334ab13-lite.chunk.js.map} +1 -1
  46. package/dist/scripts/3837-e4c5bb738b-lite.chunk.js +2 -0
  47. package/dist/scripts/3837-e4c5bb738b-lite.chunk.js.map +1 -0
  48. package/dist/scripts/4185-7178e5a716-lite.chunk.js +2 -0
  49. package/dist/scripts/4185-7178e5a716-lite.chunk.js.map +1 -0
  50. package/dist/scripts/4203-ee50e89841-lite.chunk.js +3 -0
  51. package/dist/scripts/4203-ee50e89841-lite.chunk.js.map +1 -0
  52. package/dist/scripts/4598-bcd3f6f8a7-lite.chunk.js +2 -0
  53. package/dist/scripts/{4598-2b1daca7ae-lite.chunk.js.map → 4598-bcd3f6f8a7-lite.chunk.js.map} +1 -1
  54. package/dist/scripts/{4722-d96da2a258-lite.chunk.js → 4722-9eb591621a-lite.chunk.js} +3 -3
  55. package/dist/scripts/4722-9eb591621a-lite.chunk.js.map +1 -0
  56. package/dist/scripts/4948-f21dad2ca1-lite.chunk.js +2 -0
  57. package/dist/scripts/4948-f21dad2ca1-lite.chunk.js.map +1 -0
  58. package/dist/scripts/{5153-079b4125ae-lite.chunk.js → 5153-cf62a95421-lite.chunk.js} +3 -3
  59. package/dist/scripts/5153-cf62a95421-lite.chunk.js.map +1 -0
  60. package/dist/scripts/6137-bc8b193237-lite.chunk.js +2 -0
  61. package/dist/scripts/6137-bc8b193237-lite.chunk.js.map +1 -0
  62. package/dist/scripts/6756-cfd00009e4-lite.chunk.js +3 -0
  63. package/dist/scripts/6756-cfd00009e4-lite.chunk.js.map +1 -0
  64. package/dist/scripts/6790-36ce6dda04-lite.chunk.js +2 -0
  65. package/dist/scripts/6790-36ce6dda04-lite.chunk.js.map +1 -0
  66. package/dist/scripts/705-10a85bae7a-lite.chunk.js +2 -0
  67. package/dist/scripts/705-10a85bae7a-lite.chunk.js.map +1 -0
  68. package/dist/scripts/7103-14bd3771d2-lite.chunk.js +2 -0
  69. package/dist/scripts/7103-14bd3771d2-lite.chunk.js.map +1 -0
  70. package/dist/scripts/7148-d966512e45-lite.chunk.js +2 -0
  71. package/dist/scripts/7148-d966512e45-lite.chunk.js.map +1 -0
  72. package/dist/scripts/7205-12a6b2ac55-lite.chunk.js +2 -0
  73. package/dist/scripts/7205-12a6b2ac55-lite.chunk.js.map +1 -0
  74. package/dist/scripts/7438-38f60d3e8e-lite.chunk.js +2 -0
  75. package/dist/scripts/7438-38f60d3e8e-lite.chunk.js.map +1 -0
  76. package/dist/scripts/7480-e0749592fc-lite.chunk.js +2 -0
  77. package/dist/scripts/7480-e0749592fc-lite.chunk.js.map +1 -0
  78. package/dist/scripts/8010-e9163f5bee-lite.chunk.js +2 -0
  79. package/dist/scripts/8010-e9163f5bee-lite.chunk.js.map +1 -0
  80. package/dist/scripts/8410-1f1fd5ccf0-lite.chunk.js +3 -0
  81. package/dist/scripts/8410-1f1fd5ccf0-lite.chunk.js.map +1 -0
  82. package/dist/scripts/8705-ecd20ef6cb-lite.chunk.js +2 -0
  83. package/dist/scripts/8705-ecd20ef6cb-lite.chunk.js.map +1 -0
  84. package/dist/scripts/8856-4da691f96f-lite.chunk.js +2 -0
  85. package/dist/scripts/8856-4da691f96f-lite.chunk.js.map +1 -0
  86. package/dist/scripts/9003-fc8e674468-lite.chunk.js +2 -0
  87. package/dist/scripts/9003-fc8e674468-lite.chunk.js.map +1 -0
  88. package/dist/scripts/9042-add0f1c2e2-lite.chunk.js +2 -0
  89. package/dist/scripts/9042-add0f1c2e2-lite.chunk.js.map +1 -0
  90. package/dist/scripts/9103-4eec16d73b-lite.chunk.js +2 -0
  91. package/dist/scripts/9103-4eec16d73b-lite.chunk.js.map +1 -0
  92. package/dist/scripts/9134-a6a5fc92cf-lite.chunk.js +2 -0
  93. package/dist/scripts/9134-a6a5fc92cf-lite.chunk.js.map +1 -0
  94. package/dist/scripts/9266-f0ad8d5cb3-lite.chunk.js +2 -0
  95. package/dist/scripts/9266-f0ad8d5cb3-lite.chunk.js.map +1 -0
  96. package/dist/scripts/9620-3746c84350-lite.chunk.js +3 -0
  97. package/dist/scripts/9620-3746c84350-lite.chunk.js.map +1 -0
  98. package/dist/scripts/9740-9d50d31b72-lite.chunk.js +2 -0
  99. package/dist/scripts/9740-9d50d31b72-lite.chunk.js.map +1 -0
  100. package/dist/scripts/{bundle-95a6fc2722.min.js → bundle-fc60888464.min.js} +3 -3
  101. package/dist/scripts/{bundle-95a6fc2722.min.js.map → bundle-fc60888464.min.js.map} +1 -1
  102. package/package.json +1 -1
  103. package/dist/scripts/104-b62a8447f0-lite.chunk.js +0 -2
  104. package/dist/scripts/104-b62a8447f0-lite.chunk.js.map +0 -1
  105. package/dist/scripts/107-989ac2dc47-lite.chunk.js +0 -2
  106. package/dist/scripts/107-989ac2dc47-lite.chunk.js.map +0 -1
  107. package/dist/scripts/119-e3a8bd94dd-lite.chunk.js +0 -2
  108. package/dist/scripts/119-e3a8bd94dd-lite.chunk.js.map +0 -1
  109. package/dist/scripts/1199-a2ac2338d0-lite.chunk.js +0 -2
  110. package/dist/scripts/1199-a2ac2338d0-lite.chunk.js.map +0 -1
  111. package/dist/scripts/121-bf7a153eb8-lite.chunk.js +0 -2
  112. package/dist/scripts/121-bf7a153eb8-lite.chunk.js.map +0 -1
  113. package/dist/scripts/1221-502395e693-lite.chunk.js.map +0 -1
  114. package/dist/scripts/1400-43b37bfa8d-lite.chunk.js +0 -2
  115. package/dist/scripts/1400-43b37bfa8d-lite.chunk.js.map +0 -1
  116. package/dist/scripts/1610-7f58bb25a9-lite.chunk.js.map +0 -1
  117. package/dist/scripts/218-297de74688-lite.chunk.js.map +0 -1
  118. package/dist/scripts/2258-4d0639c9fe-lite.chunk.js +0 -3
  119. package/dist/scripts/2258-4d0639c9fe-lite.chunk.js.map +0 -1
  120. package/dist/scripts/2968-c4c0114915-lite.chunk.js.map +0 -1
  121. package/dist/scripts/3268-faca1bf46e-lite.chunk.js +0 -2
  122. package/dist/scripts/3836-f2a0c9f713-lite.chunk.js +0 -2
  123. package/dist/scripts/3837-fe321e8deb-lite.chunk.js +0 -2
  124. package/dist/scripts/3837-fe321e8deb-lite.chunk.js.map +0 -1
  125. package/dist/scripts/4025-306e0fbdd5-lite.chunk.js +0 -2
  126. package/dist/scripts/4025-306e0fbdd5-lite.chunk.js.map +0 -1
  127. package/dist/scripts/4164-5d3af57b67-lite.chunk.js +0 -2
  128. package/dist/scripts/4164-5d3af57b67-lite.chunk.js.map +0 -1
  129. package/dist/scripts/4185-e8e40dab72-lite.chunk.js +0 -2
  130. package/dist/scripts/4185-e8e40dab72-lite.chunk.js.map +0 -1
  131. package/dist/scripts/4562-545f04c53f-lite.chunk.js +0 -2
  132. package/dist/scripts/4562-545f04c53f-lite.chunk.js.map +0 -1
  133. package/dist/scripts/4598-2b1daca7ae-lite.chunk.js +0 -2
  134. package/dist/scripts/4722-d96da2a258-lite.chunk.js.map +0 -1
  135. package/dist/scripts/4948-66ba60c8e3-lite.chunk.js +0 -2
  136. package/dist/scripts/4948-66ba60c8e3-lite.chunk.js.map +0 -1
  137. package/dist/scripts/5153-079b4125ae-lite.chunk.js.map +0 -1
  138. package/dist/scripts/5241-163f5ac64c-lite.chunk.js +0 -3
  139. package/dist/scripts/5241-163f5ac64c-lite.chunk.js.map +0 -1
  140. package/dist/scripts/5349-bc0fcb4083-lite.chunk.js +0 -2
  141. package/dist/scripts/5349-bc0fcb4083-lite.chunk.js.map +0 -1
  142. package/dist/scripts/6135-a878a9cff0-lite.chunk.js +0 -3
  143. package/dist/scripts/6135-a878a9cff0-lite.chunk.js.map +0 -1
  144. package/dist/scripts/6509-23fdb20a4b-lite.chunk.js +0 -2
  145. package/dist/scripts/6509-23fdb20a4b-lite.chunk.js.map +0 -1
  146. package/dist/scripts/6790-5086b72662-lite.chunk.js +0 -2
  147. package/dist/scripts/6790-5086b72662-lite.chunk.js.map +0 -1
  148. package/dist/scripts/7148-432ab72091-lite.chunk.js +0 -2
  149. package/dist/scripts/7148-432ab72091-lite.chunk.js.map +0 -1
  150. package/dist/scripts/7205-2428f775a5-lite.chunk.js +0 -2
  151. package/dist/scripts/7205-2428f775a5-lite.chunk.js.map +0 -1
  152. package/dist/scripts/7339-5793c921bb-lite.chunk.js +0 -3
  153. package/dist/scripts/7339-5793c921bb-lite.chunk.js.map +0 -1
  154. package/dist/scripts/7438-a5f96e58fc-lite.chunk.js +0 -2
  155. package/dist/scripts/7438-a5f96e58fc-lite.chunk.js.map +0 -1
  156. package/dist/scripts/7926-6b040931aa-lite.chunk.js +0 -2
  157. package/dist/scripts/7926-6b040931aa-lite.chunk.js.map +0 -1
  158. package/dist/scripts/8536-f75009dd87-lite.chunk.js +0 -2
  159. package/dist/scripts/8536-f75009dd87-lite.chunk.js.map +0 -1
  160. package/dist/scripts/8687-549a2d9278-lite.chunk.js +0 -3
  161. package/dist/scripts/8687-549a2d9278-lite.chunk.js.map +0 -1
  162. package/dist/scripts/8856-df102acdff-lite.chunk.js +0 -2
  163. package/dist/scripts/8856-df102acdff-lite.chunk.js.map +0 -1
  164. package/dist/scripts/9134-42dc2390ce-lite.chunk.js +0 -2
  165. package/dist/scripts/9134-42dc2390ce-lite.chunk.js.map +0 -1
  166. package/dist/scripts/9266-c5d6705147-lite.chunk.js +0 -2
  167. package/dist/scripts/9266-c5d6705147-lite.chunk.js.map +0 -1
  168. package/dist/scripts/9284-402a14d41c-lite.chunk.js +0 -2
  169. package/dist/scripts/9284-402a14d41c-lite.chunk.js.map +0 -1
  170. package/dist/scripts/9470-11c8c2ca71-lite.chunk.js +0 -2
  171. package/dist/scripts/9470-11c8c2ca71-lite.chunk.js.map +0 -1
  172. package/dist/scripts/9527-111c8586a7-lite.chunk.js +0 -2
  173. package/dist/scripts/9527-111c8586a7-lite.chunk.js.map +0 -1
  174. package/dist/scripts/9528-2b478f4ca8-lite.chunk.js +0 -3
  175. package/dist/scripts/9528-2b478f4ca8-lite.chunk.js.map +0 -1
  176. package/dist/scripts/9591-230bcf0935-lite.chunk.js +0 -2
  177. package/dist/scripts/9591-230bcf0935-lite.chunk.js.map +0 -1
  178. /package/dist/css/{8687-lite-6787cc731a.chunk.css → 3597-lite-6787cc731a.chunk.css} +0 -0
  179. /package/dist/css/{5349-lite-829df3b4e7.chunk.css → 6137-lite-829df3b4e7.chunk.css} +0 -0
  180. /package/dist/css/{9470-lite-edb2d29928.chunk.css → 8010-lite-edb2d29928.chunk.css} +0 -0
  181. /package/dist/css/{6135-lite-41bdd1c5a3.chunk.css → 8410-lite-41bdd1c5a3.chunk.css} +0 -0
  182. /package/dist/css/{121-lite-1337d9acf0.chunk.css → 9042-lite-1337d9acf0.chunk.css} +0 -0
  183. /package/dist/css/{9528-lite-6787cc731a.chunk.css → 9620-lite-6787cc731a.chunk.css} +0 -0
  184. /package/dist/scripts/{1221-502395e693-lite.chunk.js.LICENSE.txt → 1221-1109d5379d-lite.chunk.js.LICENSE.txt} +0 -0
  185. /package/dist/scripts/{2258-4d0639c9fe-lite.chunk.js.LICENSE.txt → 2258-ed7383502f-lite.chunk.js.LICENSE.txt} +0 -0
  186. /package/dist/scripts/{4722-d96da2a258-lite.chunk.js.LICENSE.txt → 3597-eaae787997-lite.chunk.js.LICENSE.txt} +0 -0
  187. /package/dist/scripts/{5153-079b4125ae-lite.chunk.js.LICENSE.txt → 4203-ee50e89841-lite.chunk.js.LICENSE.txt} +0 -0
  188. /package/dist/scripts/{5241-163f5ac64c-lite.chunk.js.LICENSE.txt → 4722-9eb591621a-lite.chunk.js.LICENSE.txt} +0 -0
  189. /package/dist/scripts/{6135-a878a9cff0-lite.chunk.js.LICENSE.txt → 5153-cf62a95421-lite.chunk.js.LICENSE.txt} +0 -0
  190. /package/dist/scripts/{7339-5793c921bb-lite.chunk.js.LICENSE.txt → 6756-cfd00009e4-lite.chunk.js.LICENSE.txt} +0 -0
  191. /package/dist/scripts/{8687-549a2d9278-lite.chunk.js.LICENSE.txt → 8410-1f1fd5ccf0-lite.chunk.js.LICENSE.txt} +0 -0
  192. /package/dist/scripts/{9528-2b478f4ca8-lite.chunk.js.LICENSE.txt → 9620-3746c84350-lite.chunk.js.LICENSE.txt} +0 -0
  193. /package/dist/scripts/{bundle-95a6fc2722.min.js.LICENSE.txt → bundle-fc60888464.min.js.LICENSE.txt} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/119-e3a8bd94dd-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/utils/InteractiveUtils.ts","file:///app/packages/libs/shared/src/constants/DragOverlayStyles.ts","file:///app/packages/libs/shared/src/components/table/TableUtils.ts","file:///app/packages/libs/shared/src/components/table/table.scss","file:///app/packages/libs/shared/src/components/table/Table.tsx","file:///app/packages/libs/shared/src/enums/InteractionCorrectness.ts","file:///app/packages/libs/shared/src/enums/InteractiveAnswerStatus.ts","file:///app/packages/libs/shared/src/flight-requests/InsightsDemoRequests.ts","file:///app/packages/libs/shared/src/utils/InteractiveCorrectnessHelper.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/constants/MySharesDemoInsights.ts","file:///app/packages/projects/lite/src/apps/my-shares/views/demo/students/InteractiveInsightsStudentsDemoView.tsx"],"sourcesContent":["import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { MarkedAnswerHash } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { ResultsSummary } from 'libs/shared/apps/analytics/interfaces/ResultsSummary';\nimport { StudentResultsWithSummary } from 'libs/shared/apps/analytics/interfaces/StudentResultsWithSummary';\nimport { ScoreThresholdDefaults, ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, StudentAnswer, StudentResults } from 'libs/shared/interfaces';\nimport { Interactive, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { InteractiveCorrectnessHelper } from 'libs/shared/utils/InteractiveCorrectnessHelper';\nimport { flattenInteractions, getInteractions, getStudentAttempt, getStudentResult } from 'libs/shared/utils/InteractiveHelper';\n\ninterface StudentGroups {\n markingRequired: StudentResultsWithSummary[];\n lowScore: StudentResultsWithSummary[];\n highScore: StudentResultsWithSummary[];\n completed: StudentResultsWithSummary[];\n notCompleted: StudentResultsWithSummary[];\n}\n\nexport function groupStudents(\n interactive: Interactive,\n results: InteractiveResultSet,\n scoreThreshold?: ScoreThresholds\n): StudentGroups {\n const groups: StudentGroups = {\n markingRequired: [],\n lowScore: [],\n highScore: [],\n completed: [],\n notCompleted: []\n };\n\n const interactions = getInteractions(interactive);\n const interactionIds = new Set(interactions.map(i => i.id));\n \n results.students.forEach(s => {\n const withSummary = {\n ...s,\n summary: getStudentResultsSummary(interactive, s)\n };\n \n if (withSummary.summary.awaitingMarking) {\n groups.markingRequired.push(withSummary);\n return;\n }\n\n const result = ArrayHelper.last(s.results);\n const answeredInteractions = result.attempts.filter(a => !!interactionIds.has(a?.answers[0]?.questionId)).length;\n\n if (answeredInteractions === interactionIds.size) {\n groups.completed.push(withSummary);\n } else {\n groups.notCompleted.push(withSummary);\n return;\n }\n \n if (withSummary.summary.percentCorrect >= (scoreThreshold?.HIGH || ScoreThresholdDefaults.HIGH))\n groups.highScore.push(withSummary);\n \n if (withSummary.summary.percentCorrect < (scoreThreshold?.MODERATE || ScoreThresholdDefaults.MODERATE))\n groups.lowScore.push(withSummary);\n });\n \n const sortedLowScore = ArrayHelper.sortBy(groups.lowScore, s => s.summary.percentCorrect);\n const sortedHighScore = ArrayHelper.sortBy(groups.highScore, s => -s.summary.percentCorrect);\n \n return {\n ...groups,\n lowScore: sortedLowScore,\n highScore: sortedHighScore\n };\n}\n\nexport function getInteractionById(interactive: Interactive, interactionId: string): Interaction {\n const flattenedInteractions = flattenInteractions(interactive);\n return flattenedInteractions.find(i => i.id.toString() === interactionId.toString());\n}\n\n/**\n * We need to use the question and result ids as a list of one student's responses\n * to multiple questions will all have the same result id and a list of multiple\n * students responses to one question will all have the same questionId.\n */\nexport function getMarkedAnswerId(answer: StudentAnswer): string {\n return `${answer.questionId}:${answer.resultId}`;\n}\n\nexport function getMarkedStatus(\n interactionId: string,\n studentResults: StudentResults,\n markedAnswers: MarkedAnswerHash\n): InteractiveAnswerStatus {\n const result = getStudentResult(studentResults);\n const studentResponse = getStudentAttempt(interactionId, result);\n\n const isMarkedCorrect = studentResponse?.answers.every(a => {\n return markedAnswers[getMarkedAnswerId(a)]?.status === InteractiveAnswerStatus.Correct;\n });\n\n if (isMarkedCorrect)\n return InteractiveAnswerStatus.Correct;\n\n const isMarkedIncorrect = studentResponse?.answers.every(a => {\n return markedAnswers[getMarkedAnswerId(a)]?.status === InteractiveAnswerStatus.Incorrect;\n });\n\n if (isMarkedIncorrect)\n return InteractiveAnswerStatus.Incorrect;\n}\n\nexport function getInteractionResultsSummary(\n interaction: Interaction,\n results: InteractiveResultSet\n): ResultsSummary {\n const numStudents = results.students.length;\n let numCorrect = 0;\n let answered = 0;\n let unanswered = 0;\n let awaitingMarking = 0;\n let attempts = 0;\n\n results.students.forEach(s => {\n const result = getStudentResult(s);\n\n if (!result)\n return;\n\n attempts = attempts + s.results.length;\n\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(interaction, result);\n\n if (correctness === InteractionCorrectness.Correct)\n numCorrect++;\n\n if (correctness === InteractionCorrectness.UnAnswered)\n unanswered++;\n\n if (correctness === InteractionCorrectness.AwaitingMarking)\n awaitingMarking++;\n\n if (correctness !== InteractionCorrectness.UnAnswered)\n answered++;\n });\n\n\n const percentCorrect = numStudents > 0\n ? numCorrect / numStudents\n : 0;\n\n return {\n percentCorrect,\n correct: numCorrect,\n answered,\n unanswered,\n awaitingMarking,\n attempts\n };\n}\n\nexport function getStudentResultsSummary(interactive: Interactive, studentResults: StudentResults): ResultsSummary {\n const result = getStudentResult(studentResults);\n\n const interactions = getInteractions(interactive);\n\n const numInteractions = interactions.length;\n\n let numCorrect = 0;\n let awaitingMarking = 0;\n\n interactions.forEach(i => {\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(i, result);\n\n if (correctness === InteractionCorrectness.Correct)\n numCorrect++;\n\n if (correctness === InteractionCorrectness.AwaitingMarking)\n awaitingMarking++;\n });\n\n const percentCorrect = numInteractions > 0 ? numCorrect / numInteractions : 0;\n\n /**\n * Our interactions list has images and annotations filtered out.\n * We built a map of valid questions, so that we can calculate the unswered accurately.\n * We're doing this because of a bug that caused annotations and images to record answers in the player.\n * - Sha\n */\n const interactionIds = new Set(interactions.map(i => i.id));\n const answeredInteractions = result.attempts.filter(a => !!interactionIds.has(a?.answers[0]?.questionId)).length;\n\n return {\n answered: answeredInteractions,\n attempts: studentResults.results.length,\n unanswered: numInteractions - answeredInteractions,\n percentCorrect,\n correct: numCorrect,\n awaitingMarking\n };\n}","export const DragOverlayStyles = { opacity: '0.8', cursor: 'grabbing' };","import React from 'react';\nimport { PluginHook, useBlockLayout, useFilters, useFlexLayout, useGlobalFilter, useRowSelect, useSortBy } from 'react-table';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\ninterface PluginOptions {\n allowFiltering?: boolean;\n allowGlobalFiltering?: boolean;\n layout?: 'flex' | 'block';\n}\n\nexport function getPlugins<T extends HashObject>(props: PluginOptions): PluginHook<T>[] {\n let plugins: PluginHook<T>[] = [\n useSortBy,\n useRowSelect,\n props.layout === 'flex' ? useFlexLayout : useBlockLayout\n ];\n\n if (props.allowFiltering)\n plugins = [\n ...plugins,\n useFilters\n ];\n\n if (props.allowGlobalFiltering)\n plugins = [\n ...plugins,\n useGlobalFilter\n ];\n\n return plugins;\n}\n\nexport function getSelectedRowIds(ids: string[]): Record<string, boolean> {\n const idHash: Record<string, boolean> = {};\n\n ids.forEach(id => idHash[id] = true);\n\n return idHash;\n}\n\ninterface TableScrollState {\n canScrollLeft: boolean;\n canScrollRight: boolean;\n}\n\nfunction calculateScrollState(ref: React.MutableRefObject<HTMLDivElement>): TableScrollState {\n const canScrollLeft = ref.current?.scrollLeft > 0;\n const canScrollRight = (ref.current?.scrollLeft + 1) < ref.current?.scrollWidth - ref.current?.clientWidth;\n\n return { canScrollLeft, canScrollRight };\n}\n\ninterface UseTableScroll {\n ref: (el: HTMLDivElement) => void;\n scrollState: TableScrollState;\n scroll: (scrollBy: number) => void;\n}\n\nexport function useTableScroll(): UseTableScroll {\n const elRef = React.useRef<HTMLDivElement>(null);\n const [ scrollState, setScrollState ] = React.useState<TableScrollState>(calculateScrollState(elRef));\n\n function onScroll(): void {\n setScrollState(calculateScrollState(elRef));\n }\n\n function scroll(scrollBy: number): void {\n elRef.current?.scrollBy({ left: scrollBy, top: 0, behavior: 'smooth' });\n }\n\n const throttledOnScroll = FunctionHelper.throttle(onScroll, 200);\n\n const ref = React.useCallback((el: HTMLDivElement) => {\n if (elRef.current) {\n elRef.current?.removeEventListener('scroll', throttledOnScroll);\n }\n\n if (el) {\n setScrollState(calculateScrollState(elRef));\n el.addEventListener('scroll', throttledOnScroll);\n }\n\n elRef.current = el;\n }, []);\n\n React.useEffect(() => {\n if (elRef?.current) {\n setScrollState(calculateScrollState(elRef));\n }\n }, [elRef]);\n\n return { ref, scrollState, scroll };\n}","// extracted by mini-css-extract-plugin\nexport default {\"sortIndicator\":\"gFhu0\",\"scrollContainer\":\"sWUp9\",\"scrollbarTrack\":\"Vn2qM\"};","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\nimport {\n Cell,\n Column as BaseColumn,\n HeaderGroup,\n HeaderProps as BaseHeaderProps,\n IdType,\n Row,\n SortingRule,\n TableOptions,\n TableRowProps,\n useTable } from 'react-table';\nimport { DragEndEvent } from '@dnd-kit/core';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SortableContainerWrapper } from 'libs/shared/components/sortable/SortableContainerWrapper';\nimport { PropsWithSortableItemProps, SortableItemWrapper } from 'libs/shared/components/sortable/SortableItemWrapper';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { WidgetButton, WidgetButtonDirection } from 'libs/shared/components/widgets/widget-button/WidgetButton';\nimport { DragOverlayStyles } from 'libs/shared/constants/DragOverlayStyles';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { getPlugins, getSelectedRowIds, useTableScroll } from './TableUtils';\n\nimport styles from './table.scss';\n\nexport interface TableTheme {\n table?: string;\n header?: string;\n headerRow?: string;\n headerCell?: string;\n body?: string;\n row?: string | ((row: Row<any>) => string);\n selectedRow?: string;\n cell?: string | ((row?: Row<any>, cell?: Cell<any, any>) => string);\n sortIndicator?: string;\n}\n\nexport type HeaderProps<T extends HashObject> = BaseHeaderProps<T> & {\n renderSortIndicator: () => void;\n}\n\nexport type Column<T extends HashObject> = BaseColumn<T> & {\n hideSortIndicator?: boolean;\n}\n\ninterface SortIndicatorProps<T extends HashObject> {\n column: HeaderGroup<T>;\n theme?: TableTheme;\n}\n\nfunction SortIndicator<T extends HashObject>(props: SortIndicatorProps<T>): JSX.Element {\n if (!props.column.canSort)\n return <></>;\n\n return (\n <span\n className={\n `${styles.sortIndicator}\n ${!props.column.isSorted ? 'text-secondary' : ''}\n ${props.theme?.sortIndicator ?? ''}`\n }\n >\n <SvgContainer\n svgName={(props.column.isSortedDesc || !props.column.isSorted)\n ? cvSvgLibrary.ArrowRight\n : cvSvgLibrary.ArrowLeft\n }\n size={SvgContainerSize.Small}\n />\n </span>\n );\n}\n\ninterface BaseTableProps<T extends HashObject> {\n /**\n * Must be memoized.\n */\n data: T[];\n\n /**\n * Must be memoized.\n * \n * For documentation on Column Options, see https://react-table.tanstack.com/docs/api/useTable#column-options\n */\n columns: Column<T>[];\n\n theme?: TableTheme;\n\n onSelectRow?: (row: Row<T>) => void;\n\n onSelectCell?: (cell: Cell<T>) => void;\n\n onRowMouseOver?: (row: Row<T>) => void;\n\n onRowMouseLeave?: (row: Row<T>) => void;\n\n allowSelectMultipleRows?: boolean;\n\n initialSelectedRowIds?: string[];\n\n getRowId?: (row: T) => string;\n\n getRowAppLink?: (row: Row<T>) => Core.AppLink;\n\n enableSort?: boolean;\n\n manualSort?: boolean;\n\n onSort?: (sortingRule: SortingRule<T>[]) => void;\n \n // Opt-in to utilise react-table's useFilter hook.\n allowFiltering?: boolean;\n\n // Opt-in to utilise react-table's useGlobalFilter hook.\n allowGlobalFiltering?: boolean;\n\n // Use either a flex layout or a block layout. Default is flex.\n layout?: 'flex' | 'block';\n\n // Used by useGlobalFilter hook, needs to be enabled by prop above.\n globalFilter?: string;\n\n // Set initial state of hidden columns in react-table.\n hiddenColumns?: IdType<T>[];\n\n // Determine whether hidden columns should be preserved on a table update event.\n autoResetHiddenColumns?: boolean;\n\n // Determine whether sort order state should be preserved on a table update event.\n autoResetSortBy?: boolean;\n\n // Determine whether rows are sortable by drag and drop\n enableSortableRows?: boolean;\n\n onSortingRowsEnd?: (event: DragEndEvent) => void;\n\n // Set initial state of sorting in react-table\n initialSortBy?: SortingRule<T>[];\n}\n \ntype SortableRowProps = PropsWithSortableItemProps<TableRowProps>;\n\nfunction BaseTable<T extends HashObject>(props: BaseTableProps<T>): JSX.Element {\n const tableOptions: TableOptions<T> = {\n columns: props.columns,\n data: props.data,\n disableSortBy: !props.enableSort,\n manualSortBy: props.manualSort,\n autoResetHiddenColumns: props.autoResetHiddenColumns,\n autoResetSortBy: props.autoResetSortBy,\n initialState: {\n sortBy: props.initialSortBy || []\n }\n };\n\n if (props.initialSelectedRowIds)\n tableOptions.initialState = { selectedRowIds: getSelectedRowIds(props.initialSelectedRowIds) };\n\n if (props.getRowId)\n tableOptions.getRowId = props.getRowId;\n\n const {\n getTableProps,\n getTableBodyProps,\n headerGroups,\n rows,\n prepareRow,\n toggleAllRowsSelected,\n setGlobalFilter,\n setHiddenColumns,\n state: { sortBy }\n } = useTable<T>(tableOptions, ...getPlugins<T>({ ...props }));\n\n function getTableRowsClass(row: Row<T>) {\n let className = FunctionHelper.isFunction(props.theme?.row)\n ? props.theme.row(row)\n : props.theme?.row ?? '';\n\n if (row.isSelected && props.theme?.selectedRow)\n className += ` ${props.theme?.selectedRow}`;\n\n if (props.onSelectRow)\n className += ' cursor-pointer';\n\n if (props.enableSortableRows)\n className += ' cursor-grab';\n\n return className;\n }\n\n function renderTableRows(): JSX.Element[] {\n return rows.map(row => {\n prepareRow(row);\n \n const className = getTableRowsClass(row);\n const rowAppLink = !!props.getRowAppLink && props.getRowAppLink(row);\n\n function onClickRow(): void {\n if (!props.onSelectRow)\n return;\n\n if (!props.allowSelectMultipleRows)\n toggleAllRowsSelected(false);\n \n props.onSelectRow(row);\n row.toggleRowSelected(true);\n }\n\n function getSortableProps(props: TableRowProps | PropsWithSortableItemProps<TableRowProps>, ref?: any) {\n if ('dragAttributes' in props && 'dragListeners' in props) {\n return {\n ...props.dragAttributes,\n ...props.dragListeners,\n 'aria-roledescription': 'Sortable row',\n ref\n };\n }\n\n return {};\n }\n\n function renderRow(props: TableRowProps | PropsWithSortableItemProps<TableRowProps>, ref?: any): JSX.Element {\n const sortableProps = getSortableProps(props, ref);\n\n if (rowAppLink) {\n return (\n <div\n role='row'\n key={row.id}\n >\n <AppLink\n {...props}\n {...sortableProps}\n className={className}\n appLink={rowAppLink}\n >\n {renderCells(row)}\n </AppLink>\n </div>\n );\n }\n\n return (\n <div\n {...props}\n {...sortableProps}\n key={row.id}\n role='row'\n className={className}\n onClick={onClickRow}\n >\n {renderCells(row)}\n </div>\n );\n }\n\n const rowProps = row.getRowProps();\n\n if (props.enableSortableRows) {\n return (\n <SortableItemWrapper\n id={row.original.id}\n key={row.id}\n childProps={rowProps}\n childComponent={React.forwardRef(\n (props: SortableRowProps, ref: React.LegacyRef<HTMLDivElement>) => (renderRow(props, ref))\n )}\n />\n );\n }\n\n return renderRow(rowProps);\n });\n }\n\n function getDragOverlayClassName(theme: TableTheme): string {\n let className = 'g-0 ';\n\n if (theme)\n className += theme.row;\n\n return className;\n }\n\n function getDragOverlay(id: string) {\n const rowIndex = rows.findIndex(item => item.original.id === id);\n const row = rows[rowIndex];\n \n return (\n <div\n {...props}\n className={getDragOverlayClassName(props.theme)}\n style={DragOverlayStyles}\n >\n {renderCells(row)}\n </div>\n );\n }\n\n function getCellClassName(row: Row<T>, cell: Cell<T>): string {\n let cellClassName = '';\n\n if (typeof props.theme?.cell === 'function')\n cellClassName = props.theme.cell(row, cell);\n\n if (typeof props.theme?.cell === 'string')\n cellClassName = props.theme.cell;\n\n if (props.onSelectCell)\n cellClassName += ' cursor-pointer';\n\n return cellClassName;\n }\n\n function renderCells(row: Row<T>): JSX.Element[] {\n return row.cells.map(cell => {\n const cellClassName = getCellClassName(row, cell);\n\n function onClickCell(): void {\n props.onSelectCell && props.onSelectCell(cell);\n }\n\n return (\n <div key={cell.column.id} {...cell.getCellProps()} className={cellClassName} onClick={onClickCell} >\n {cell.render('Cell')}\n </div>\n );\n });\n }\n\n React.useEffect(() => {\n if (!props.onSort)\n return;\n\n props.onSort(sortBy);\n }, [sortBy]);\n\n React.useEffect(() => {\n if (!props.globalFilter)\n return;\n\n setGlobalFilter(props.globalFilter);\n }, [props.globalFilter]);\n\n React.useEffect(() => {\n if (!props.hiddenColumns)\n return;\n\n setHiddenColumns(props.hiddenColumns);\n }, [props.hiddenColumns && props.hiddenColumns.length]);\n\n return (\n <div {...getTableProps()} className={props.theme?.table ?? ''}>\n <div className={props.theme?.header ?? ''}>\n {headerGroups.map(headerGroup => (\n <div {...headerGroup.getHeaderGroupProps()} className={props.theme?.headerRow ?? ''}>\n {headerGroup.headers.map(column => (\n <div {...column.getHeaderProps(column.getSortByToggleProps())} className={props.theme?.headerCell ?? ''}>\n {column.render('Header', { renderSortIndicator: () => <SortIndicator column={column} theme={props.theme} /> })}\n {!(column as Column<T>).hideSortIndicator &&\n <SortIndicator column={column} theme={props.theme} />\n }\n </div>\n ))}\n </div>\n ))}\n </div>\n <div {...getTableBodyProps()} className={props.theme?.body ?? ''}>\n { props.enableSortableRows ? (\n <SortableContainerWrapper\n ids={rows.map(row => row.original.id)}\n getDragOverlay={getDragOverlay}\n onSortEnd={props.onSortingRowsEnd}\n >\n {renderTableRows()}\n </SortableContainerWrapper>\n ) : (\n renderTableRows()\n )}\n </div>\n </div>\n );\n}\n\ninterface TableProps<T extends HashObject> extends BaseTableProps<T> {\n enableSlider?: boolean;\n scrollIncrement?: number;\n scrollContainerClassName?: string;\n scrollable?: boolean;\n initialSortBy?: SortingRule<T>[];\n}\n\nTable.defaultProps = {\n scrollIncrement: 250,\n scrollable: false,\n layout: 'flex'\n};\n\nexport function Table<T extends HashObject>(props: TableProps<T>): JSX.Element {\n const { enableSlider, scrollIncrement, scrollable, ...tableProps } = props;\n\n const { ref, scrollState, scroll } = useTableScroll();\n\n if (scrollable) {\n return (\n <Scrollbars\n renderTrackHorizontal={() => <div className={styles.scrollbarTrack} />}\n autoHeightMax={10000}\n autoHeight\n >\n <BaseTable {...tableProps} />\n </Scrollbars>\n );\n }\n\n if (!enableSlider)\n return <BaseTable {...tableProps} />;\n\n function onClickScroll(direction: 'left' | 'right'): void {\n scroll(scrollIncrement * (direction === 'right' ? 1 : -1));\n }\n\n return (\n <div className='mx-n4 overflow-x-hidden overflow-y-hidden'>\n <div className='px-4'>\n <div className='position-relative'>\n <WidgetButton\n direction={WidgetButtonDirection.Left}\n onClick={() => onClickScroll('left')}\n hide={!scrollState.canScrollLeft}\n />\n <div className={`${styles.scrollContainer} ${props.scrollContainerClassName}`} ref={ref}>\n <BaseTable {...tableProps } />\n </div>\n <WidgetButton\n direction={WidgetButtonDirection.Right}\n onClick={() => onClickScroll('right')}\n hide={!scrollState.canScrollRight}\n />\n </div>\n </div>\n </div>\n );\n}","export enum InteractionCorrectness {\n Correct,\n Incorrect,\n AwaitingMarking,\n \n Answered,\n UnAnswered,\n NotApplicable\n}","export enum InteractiveAnswerStatus {\n Incorrect = 0,\n Correct = 1,\n PendingReview = 2\n}","import { Flight } from 'libs/common/react/index';\n\nexport const InsightsDemoRequests = {\n interactive(): Flight.Request {\n return {\n url: `/mocks/insights/interactive.json`,\n key: `demo:interactive`,\n normalize: false\n };\n },\n\n interactiveMetadata(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-metadata.json`,\n key: `demo:interactive:metadata`,\n normalize: false\n };\n },\n\n interactiveResults(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-results.json`,\n key: `demo:interactive:results`,\n normalize: false\n };\n },\n\n videoViews(): Flight.Request {\n return {\n url: `/mocks/insights/video-views.json`,\n key: `demo:video:views`,\n normalize: false\n };\n },\n\n users(): Flight.Request {\n return {\n url: `/mocks/insights/users.json`,\n key: `demo:users`,\n normalize: false\n };\n },\n\n individualHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/individual-heatmap.json`,\n key: `demo:individual:heatmap`,\n normalize: false\n };\n },\n\n aggregateHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/aggregate-heatmap.json`,\n key: `demo:aggregate:heatmap`,\n normalize: false\n };\n }\n};","import { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, InteractionTypeId, InteractiveResult, StudentAnswer } from 'libs/shared/interfaces';\n\ntype GetStudentAnswerByActionableItemId = (id: string) => string;\n\nfunction notApplicable(): InteractionCorrectness {\n return InteractionCorrectness.NotApplicable;\n}\n\nfunction awaitingMarking(): InteractionCorrectness {\n return InteractionCorrectness.AwaitingMarking;\n}\n\nfunction isMissingWordCorrect(\n interaction: Interaction,\n getStudentAnswer: GetStudentAnswerByActionableItemId\n): InteractionCorrectness {\n const items = interaction.actionableItems.filter(a => a\n .isCorrect);\n\n if (items.every(a => !getStudentAnswer(a.id)))\n return InteractionCorrectness.UnAnswered;\n\n const correct = items.every(a => a.name.trim().toLowerCase() === getStudentAnswer(a.id)?.trim().toLowerCase());\n return correct ? InteractionCorrectness.Correct : InteractionCorrectness.Incorrect;\n}\n\nfunction isMultipleChoiceCorrect(\n interaction: Interaction,\n getStudentAnswer: GetStudentAnswerByActionableItemId\n): InteractionCorrectness {\n if (interaction.actionableItems.every(a => !getStudentAnswer(a.id)))\n return InteractionCorrectness.UnAnswered;\n \n const correctItems = interaction.actionableItems.filter(a => a.isCorrect);\n\n const correct = correctItems.every(a => {\n const studentAnswer = getStudentAnswer(a.id);\n\n /**\n * In the past we've only ever checked the answer name. But since we introduced the ability to have image interactions\n * with no question text, we've need to swap to saving the id. But past submissions still have the name\n * - Sha\n */\n return studentAnswer?.toString() === a.id?.toString() || studentAnswer === a.name;\n });\n return correct ? InteractionCorrectness.Correct : InteractionCorrectness.Incorrect;\n}\n\nfunction isMarkableAnswerMarkedCorrect(\n interaction: Interaction,\n getStudentAnswer: (id: string) => StudentAnswer\n): InteractionCorrectness {\n let correctness: InteractionCorrectness;\n\n // There should only be one actionableItem\n interaction.actionableItems.forEach(item => {\n const studentAnswer = getStudentAnswer(item.id);\n\n if (!studentAnswer) {\n correctness = InteractionCorrectness.UnAnswered;\n return;\n }\n\n if (studentAnswer.status === InteractiveAnswerStatus.Correct) {\n correctness = InteractionCorrectness.Correct;\n return;\n }\n\n if (studentAnswer.status === InteractiveAnswerStatus.Incorrect) {\n correctness = InteractionCorrectness.Incorrect;\n return;\n }\n\n correctness = InteractionCorrectness.AwaitingMarking;\n });\n\n return correctness;\n}\n\ntype IsCorrectFunction = (interaction: Interaction, result: InteractiveResult) => InteractionCorrectness;\n\nfunction getGetStudentAnswer(interaction: Interaction, result: InteractiveResult): (id: string) => StudentAnswer {\n return (id: string) => {\n const attempt = result?.attempts.find(a => a.id === interaction.id);\n return attempt?.answers.find(s => s.id === id);\n };\n}\n\nfunction wrapIsMissingWordCorrect(interaction: Interaction, result: InteractiveResult): InteractionCorrectness {\n const getStudentAnswer = getGetStudentAnswer(interaction, result);\n\n return isMissingWordCorrect(interaction, (id: string) => {\n const answer = getStudentAnswer(id);\n return answer?.text;\n });\n}\n\nfunction wrapIsMultipleChoiceCorrect(interaction: Interaction, result: InteractiveResult): InteractionCorrectness {\n const getStudentAnswer = getGetStudentAnswer(interaction, result);\n\n return isMultipleChoiceCorrect(interaction, (id: string) => {\n const answer = getStudentAnswer(id);\n return answer?.text;\n });\n}\n\nfunction wrapIsMarkableAnswerMarkedCorrect(\n interaction: Interaction,\n result: InteractiveResult\n): InteractionCorrectness {\n const getStudentAnswer = getGetStudentAnswer(interaction, result);\n return isMarkableAnswerMarkedCorrect(interaction, getStudentAnswer);\n}\n\nconst IsCorrectLookup: {[typeId: number]: IsCorrectFunction} = {\n [InteractionTypeId.Annotation]: notApplicable,\n [InteractionTypeId.Image]: notApplicable,\n [InteractionTypeId.MissingWord]: wrapIsMissingWordCorrect,\n [InteractionTypeId.MultipleChoice]: wrapIsMultipleChoiceCorrect,\n [InteractionTypeId.ShortAnswer]: wrapIsMarkableAnswerMarkedCorrect,\n [InteractionTypeId.TrueOrFalse]: wrapIsMultipleChoiceCorrect,\n [InteractionTypeId.Illustration]: wrapIsMarkableAnswerMarkedCorrect\n};\n\nfunction isInteractionCorrect(interaction: Interaction, result: InteractiveResult): InteractionCorrectness {\n const isCorrectFn = IsCorrectLookup[interaction.typeId];\n\n return isCorrectFn(interaction, result);\n}\n\nexport const InteractiveCorrectnessHelper = {\n notApplicable,\n awaitingMarking,\n isMissingWordCorrect,\n isMultipleChoiceCorrect,\n isInteractionCorrect\n};\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 { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SharePrivacy } from 'libs/shared/apps/share-v2/enums/SharePrivacy';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { MySharesTableData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\n\nconst namespace = 'myShares.demoInsights';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst DEMO_INSIGHT_DAYS_AGO = 7;\n\nexport const DEMO_INSIGHTS_SHARE: Share = {\n type: ShareType.Link,\n privacy: SharePrivacy.JustMySchool,\n objectId: '0',\n objectTypeId: MasterType.Interactive,\n viewCount: 28,\n accessCount: 15,\n dateCreated: new Date().toISOString(),\n expireDate: null,\n link: {\n shortenedEmbedUrl: '',\n shortenedUrl: ''\n },\n shareId: '0',\n ownerCustomerId: 0,\n ownerId: 0,\n recipients: [],\n options: {\n preventScrubbing: false,\n immediateFeedback: false\n }\n};\n\nexport const DEMO_INSIGHTS_SHARE_TABLE_DATA: MySharesTableData = {\n share: DEMO_INSIGHTS_SHARE,\n sharedObject: null,\n shareRecipients: null,\n dateShared: DateHelper.subtract(new Date(), DEMO_INSIGHT_DAYS_AGO, 'days').toISOString()\n};\n\nconst DEMO_INSIGHTS_APPLINK: Core.AppLink = {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_DEMO\n};\n\nexport const DEMO_INSIGHTS_ACTION: ActionOptions = {\n svgName: cvSvgLibrary.Analytics,\n label: getPhrase('demoInsights'),\n appLink: DEMO_INSIGHTS_APPLINK,\n group: 'insights',\n className: 'btn btn-outline-dark'\n};\n","import React from 'react';\n\nimport { 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 { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { FilterStudentsBy, SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InsightsDemoRequests } from 'libs/shared/flight-requests/InsightsDemoRequests';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\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 { DEMO_INSIGHTS_SHARE } from 'apps/my-shares/constants/MySharesDemoInsights';\nimport { getInsightsDemoInteractiveTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\n\nconst namespace = 'insights.interactiveInsightsStudents';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractiveInsightsStudentsViewProps {\n sortBy: SortStudentsBy;\n filterBy: FilterStudentsBy;\n}\n\nexport function InteractiveInsightsStudentsDemoView(props: InteractiveInsightsStudentsViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(InsightsDemoRequests.interactiveMetadata());\n\n const interactive = Flight.useBasicFetch<Interactive>(InsightsDemoRequests.interactive());\n\n const audienceAppLinkParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n const dateRangeAppLinkParams = AnalyticsFilterHelper.getDateRangeAppLinkParams();\n\n const results = Flight.useBasicFetch<InteractiveResultSet>(InsightsDemoRequests.interactiveResults());\n\n const hasDataLoaded = interactive.data && interactiveMetadata.data && !!results.data;\n\n useSetPageMetadata({ title: interactiveMetadata.data ? getPhrase('pageTitle', { video: interactiveMetadata.data?.name }) : null });\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_DEMO,\n params: {\n studentId: user.id,\n interactiveMetadataId,\n interactionId,\n sessionId: user.sessionId\n }\n });\n }\n\n const params = {\n ...audienceAppLinkParams,\n ...dateRangeAppLinkParams\n };\n\n return (\n <div className='px-3'>\n <InsightsHeader\n tabs={getInsightsDemoInteractiveTabs(interactiveMetadata.data?.id, 'results', params)}\n video={interactiveMetadata.data}\n dateRangeAppLinkParams={dateRangeAppLinkParams}\n share={{\n ...DEMO_INSIGHTS_SHARE,\n objectId: interactiveMetadata.data?.id\n }}\n yearGroups={[]}\n isDemo\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.isFetching}\n anonymiseUsers={anonymiseUsers}\n hasDataLoaded={hasDataLoaded}\n config={config.data}\n />\n </div>\n );\n}"],"names":["groupStudents","interactive","results","scoreThreshold","groups","markingRequired","lowScore","highScore","completed","notCompleted","interactions","interactionIds","Set","map","i","id","students","forEach","s","withSummary","summary","getStudentResultsSummary","awaitingMarking","push","attempts","filter","a","has","answers","questionId","length","size","percentCorrect","HIGH","MODERATE","sortedLowScore","sortedHighScore","getInteractionById","interactionId","find","toString","getMarkedAnswerId","answer","resultId","getMarkedStatus","studentResults","markedAnswers","result","studentResponse","every","status","getInteractionResultsSummary","interaction","numStudents","numCorrect","answered","unanswered","correctness","correct","numInteractions","answeredInteractions","DragOverlayStyles","opacity","cursor","calculateScrollState","ref","canScrollLeft","current","scrollLeft","canScrollRight","scrollWidth","clientWidth","SortIndicator","props","column","canSort","className","isSorted","theme","sortIndicator","SvgContainer","svgName","isSortedDesc","S","BaseTable","ids","idHash","tableOptions","columns","data","disableSortBy","enableSort","manualSortBy","manualSort","autoResetHiddenColumns","autoResetSortBy","initialState","sortBy","initialSortBy","initialSelectedRowIds","selectedRowIds","getRowId","useTable","plugins","useSortBy","useRowSelect","layout","useFlexLayout","useBlockLayout","allowFiltering","useFilters","allowGlobalFiltering","useGlobalFilter","getPlugins","getTableProps","getTableBodyProps","headerGroups","rows","prepareRow","toggleAllRowsSelected","setGlobalFilter","setHiddenColumns","state","renderTableRows","row","FunctionHelper","isSelected","selectedRow","onSelectRow","enableSortableRows","getTableRowsClass","rowAppLink","getRowAppLink","onClickRow","allowSelectMultipleRows","toggleRowSelected","renderRow","sortableProps","dragAttributes","dragListeners","getSortableProps","role","key","AppLink","appLink","renderCells","onClick","rowProps","getRowProps","SortableItemWrapper","original","childProps","childComponent","cells","cell","cellClassName","onSelectCell","getCellClassName","getCellProps","render","onSort","globalFilter","hiddenColumns","table","header","headerGroup","getHeaderGroupProps","headerRow","headers","getHeaderProps","getSortByToggleProps","headerCell","renderSortIndicator","hideSortIndicator","body","SortableContainerWrapper","getDragOverlay","rowIndex","findIndex","item","style","onSortEnd","onSortingRowsEnd","Table","enableSlider","scrollIncrement","scrollable","tableProps","elRef","scrollState","setScrollState","throttledOnScroll","el","removeEventListener","addEventListener","scroll","scrollBy","left","top","behavior","useTableScroll","renderTrackHorizontal","autoHeightMax","autoHeight","onClickScroll","direction","WidgetButton","W","hide","scrollContainerClassName","defaultProps","InteractionCorrectness","InteractiveAnswerStatus","InsightsDemoRequests","url","normalize","interactiveMetadata","interactiveResults","videoViews","users","individualHeatmap","aggregateHeatmap","notApplicable","isMissingWordCorrect","getStudentAnswer","items","actionableItems","isCorrect","name","trim","toLowerCase","isMultipleChoiceCorrect","studentAnswer","getGetStudentAnswer","attempt","wrapIsMultipleChoiceCorrect","text","wrapIsMarkableAnswerMarkedCorrect","isMarkableAnswerMarkedCorrect","IsCorrectLookup","InteractiveCorrectnessHelper","isInteractionCorrect","isCorrectFn","typeId","getPhrase","LanguageService","StudentResultsEmptyState","EmptyState","src","notCompletedImageUrl","markingRequiredImageUrl","helpingHandImageUrl","emptyStateImageUrl","StudentResultsTableFilterButtons","toggleFilter","selectedFilter","updatedFilter","setFilter","getClassName","isFilterSelected","Text","namespace","phrase","fixedTableTheme","resultsTableTheme","StudentResultsTable","setSortBy","filterBy","fixedColumns","anonymiseUsers","config","imageCdnUrl","resultColumns","index","refreshTable","ArrayHelper","onRowHover","viewStudentResults","user","onRowMouseOver","onRowMouseLeave","PartialInteractiveInsightsStudents","InteractiveInsightsStudents","hasDataLoaded","isFetching","ImageUrls","DEMO_INSIGHTS_SHARE","type","privacy","objectId","objectTypeId","viewCount","accessCount","dateCreated","Date","toISOString","expireDate","link","shortenedEmbedUrl","shortenedUrl","shareId","ownerCustomerId","ownerId","recipients","options","preventScrubbing","immediateFeedback","DEMO_INSIGHTS_SHARE_TABLE_DATA","share","sharedObject","shareRecipients","dateShared","DEMO_INSIGHTS_APPLINK","application","action","DEMO_INSIGHTS_ACTION","label","group","InteractiveInsightsStudentsDemoView","audienceAppLinkParams","dateRangeAppLinkParams","title","video","params","tabs","yearGroups","isDemo","interactiveMetadataId","studentId","sessionId"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1199],{93479:(e,t,n)=>{n.d(t,{I:()=>c});var r=n(99940);function a(e,t,n){if(!t)return e;var r="".concat(e,":").concat(t.start,":").concat(t.end),a=Array.isArray(t.userId)?t.userId.sort().join(":"):t.userId,i=Array.isArray(t.groupId)?t.groupId.sort().join(":"):t.groupId,c=Array.isArray(t.customerId)?t.customerId.sort().join(":"):t.customerId;return a&&(r+=":".concat(a)),i&&(r+=":".concat(i)),c&&(r+=":".concat(c)),n&&(r+=":".concat(n)),r}function i(e,t){return{currentUserId:e.id,currentCustomerId:e.customerId,dateRange:t?{start:t.start,end:t.end}:void 0,userIds:null==t?void 0:t.userId,classroomsAndGroups:null==t?void 0:t.groupId}}var c={interactiveResultSet:function(e,t,n,c,o,l,s,u){return{url:o?"/api/domain/v3/analytics/interactives/".concat(e,"/metadata/").concat(t):"/api/domain/v2/analytics/interactives/".concat(e,"/metadata/").concat(t),key:a("interactive:result:set:".concat(e,":").concat(t),c),data:i(n,c),type:r.k.POST,normalize:!1,success:l,error:s,always:u}},mark:function(e,t,n,a,i,c,o){return{url:"/api/domain/v1/analytics/answers/".concat(n),key:"mark:answer:".concat(n,":").concat(a.resultId),type:r.k.PUT,data:a,normalize:!1,invalidationKeys:"interactive:result:set:".concat(e,":").concat(t),success:i,error:c,always:o}},pendingReviews:function(e){return{url:"/api/domain/v1/analytics/interactives/pending-reviews/summary",key:"interactives:pending:reviews",type:r.k.POST,data:e}},interactiveResultsReport:function(e){return{url:"/api/domain/v3/analytics/interactives/report",key:"interactive:results:report",data:e,type:r.k.POST,normalize:!1}}}},18488:(e,t,n)=>{n.d(t,{o:()=>c});var r=n(99940),a=n(97395),i={namespace:"share-v2"},c={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)}}}},31754:(e,t,n)=>{n.d(t,{x:()=>o});var r=n(82602),a=n(75896),i=n(41859),c=n(11576),o={groupByDateShared:function(e){var t=a.m.groupBy(e,"dateShared");return Object.keys(t).sort().reverse().reduce((function(e,n){var a=(0,r.WU)(n);return e[a]||(e[a]=[]),e[a]=e[a].concat(t[n]),e}),{})},mapActivityStatusToCheckMarkStatus:function(e){switch(e){case c.T.Complete:return i.h.Complete;case c.T.Incomplete:return i.h.Incomplete;case c.T.None:return i.h.None}},mapCheckMarkStatusToActivityStatus:function(e){switch(e){case i.h.Complete:return c.T.Complete;case i.h.Incomplete:return c.T.Incomplete;case i.h.None:return c.T.None}}}},39902:(e,t,n)=>{n.d(t,{FN:()=>f,SW:()=>p,fh:()=>v});var r=n(32735),a=n(20354),i=n(75896);function c(e){return function(e){if(Array.isArray(e))return l(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||o(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(e,t){if(e){if("string"==typeof e)return l(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?l(e,t):void 0}}function l(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 s(e){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s(e)}function u(e,t,n){return(t=function(e){var t=function(e){if("object"!=s(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=s(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==s(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var d=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},m=50;function v(e,t){var n=i.m.chunk(e,m).map((function(e){return t(i.m.uniq(e))})),r=a.a.useBasicFetchAll(n),c=i.m.flatten(r.data),o=r.data.length?c.reduce((function(e,t){return Object.assign(Object.assign({},e),u({},t.id,t))}),{}):null;return{itemsArr:c,items:o,isFetching:r.isFetching,hasCompleted:r.hasCompleted}}function f(e,t,n){var a=null!=n?n:function(e){return"object"===s(e)?e.id:e},i=p({getRequest:t,_getKey:n}),c=i.fetchItems,o=d(i,["fetchItems"]);return r.useEffect((function(){(null==e?void 0:e.length)&&c(e)}),[null==e?void 0:e.map(a).join(",")]),o}function p(e){var t,n,l,d,v,f=null!==(t=e._getKey)&&void 0!==t?t:function(e){return"object"===s(e)?e.id:e},p=r.useRef(new Set),h=(d=r.useState([]),v=2,function(e){if(Array.isArray(e))return e}(d)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,c,o=[],l=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(o.push(r.value),o.length!==t);l=!0);}catch(e){s=!0,a=e}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw a}}return o}}(d,v)||o(d,v)||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.")}()),y=h[0],g=h[1],b=a.a.useBasicFetchAll(y),E=i.m.flatten(b.data),S=b.data.length?E.reduce((function(e,t){return Object.assign(Object.assign({},e),u({},f(t),t))}),{}):null;return{hasFirstRequestCompleted:!!(null===(l=null===(n=b.responses)||void 0===n?void 0:n[0])||void 0===l?void 0:l.hasCompleted),itemsArr:E,items:S,isFetching:b.isFetching,fetchItems:function(t){if(null==t?void 0:t.length){var n=[];t.forEach((function(e){var t=f(e);p.current.has(t)||(n.push(e),p.current.add(t))})),n.length&&g((function(t){return[].concat(c(t),c(i.m.chunk(n,m).map(e.getRequest)))}))}}}}},60115:(e,t,n)=>{n.d(t,{K:()=>s});var r=n(32735),a=n(50242),i=n(91967),c=400,o=n(45719);function l(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 s(e,t,n,s,u,d){var m,v,f,p,h=(m=(0,r.useState)(0),v=2,function(e){if(Array.isArray(e))return e}(m)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,c,o=[],l=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(o.push(r.value),o.length!==t);l=!0);}catch(e){s=!0,a=e}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw a}}return o}}(m,v)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?l(e,t):void 0}}(m,v)||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.")}()),y=h[0],g=h[1],b=t,E=(0,o.P)((function(t){if(!e)return null;var n=e(t);return n?n.key:null}),s,u);return f={fetchNextPage:function(){if(t&&e&&E)return g((function(e){return e+1})),b(E.nextCursor)},hasMore:!!(null==E?void 0:E.nextCursor),isFetching:null==E?void 0:E.isFetching,scrollContainer:d},p=function(){if(!f.isFetching){if(f.scrollContainer){var e=f.scrollContainer;if(e.getBoundingClientRect().height+e.scrollTop<e.scrollHeight-c)return}else if(window.innerHeight+document.documentElement.scrollTop<document.documentElement.scrollHeight-c)return;f.fetchNextPage()}},(0,r.useEffect)((function(){var e=i.q.throttle(p,200),t=f.scrollContainer||window;return f.hasMore&&t.addEventListener("scroll",e),function(){return t.removeEventListener("scroll",e)}}),[f.hasMore,f.fetchNextPage,f.scrollContainer]),(0,r.useEffect)((function(){E&&E.shouldInitialFetch&&t&&(b(),g((function(e){return e+1})))}),[null==E?void 0:E.shouldInitialFetch,t]),(0,r.useEffect)((function(){var e,t;if((null==E?void 0:E.statusCode)&&i.q.isFunction(n)){var r=+(null===(t=null===(e=E.statusCode)||void 0===e?void 0:e.toString())||void 0===t?void 0:t.substr(0,1));r!==a.k.ClientError&&r!==a.k.ServerError||n(y,E.statusCode)}}),[null==E?void 0:E.statusCode]),{items:null==E?void 0:E.items,hasMore:!!(null==E?void 0:E.nextCursor),nextCursor:null==E?void 0:E.nextCursor,isFetching:null==E?void 0:E.isFetching,totalItems:null==E?void 0:E.totalItems,hasFirstPageCompleted:null==E?void 0:E.hasFirstPageCompleted}}},15474:(e,t,n)=>{n.d(t,{g:()=>F,F:()=>A});var r=n(32735),a=n(65858),i=n(9806),c=n(65359),o=n(23481),l=n(110),s=n(21789),u=n(36532);const d={indicator:"sybF_"};function m(e){return m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},m(e)}function v(e,t,n){return(t=function(e){var t=function(e){if("object"!=m(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=m(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==m(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var f,p=o.T.encloseNamespace("share-v2.shareStatusIndicator");!function(e){e[e.Active=0]="Active",e[e.Expired=1]="Expired",e[e.MarkingRequired=2]="MarkingRequired"}(f||(f={}));var h=v(v(v({},f.Active,(function(){return p("activeStatusLabel")})),f.Expired,(function(){return p("expiredStatusLabel")})),f.MarkingRequired,(function(){return p("markingRequiredStatusLabel")})),y=v(v(v({},f.Active,"bg-success"),f.Expired,"bg-danger"),f.MarkingRequired,"bg-blue"),g=v(v(v({},f.Active,(function(){return p("activeStatusTooltip")})),f.Expired,(function(){return p("expiredStatusTooltip")})),f.MarkingRequired,(function(){return p("markingRequiredStatusTooltip")}));function b(e){var t=function(e){return e.markingRequired?f.MarkingRequired:s.x.hasShareExpired(e.share)?f.Expired:f.Active}(e),n=function(e,t){if(e===f.Active&&t){var n=l.O.convertUTCToLocal(t),r=l.O.format(n,"MMMM Do");return p("expiryTooltip",{date:r})}return g[e]()}(t,e.share.expireDate),a=y[t];return r.createElement(u.u,{title:n,spanHack:!0,spanHackClassName:"d-inline-flex"},r.createElement("div",{className:"d-flex align-items-center"},r.createElement("div",{className:"".concat(d.indicator," ").concat(a," me-2 flex-shrink-0")}),function(){var n=h[t](),a=e.share.expireDate;if(t===f.Active&&a){var i=s.x.calculateDaysToExpiry(e.share),c=p("expiryHint",{smartCount:i});return r.createElement("p",{className:"mb-0"},n," · ",c)}return r.createElement("p",{className:"mb-0"},n)}()))}var E=n(76306),S=n(15611),k=n(83914),N=n(83345),w=n(54610),x=n(4594),I=n(35223),C=n(86099);const j={thumbnailContainer:"XNQc8",tableRow:"R3dYa",viewCta:"ssCq6"};var O="myShares.tableRow";function F(e){return r.createElement("div",{className:"d-flex"},r.createElement("div",{className:"col-auto ".concat(j.thumbnailContainer)},r.createElement("p",{className:"fw-semibold mb-2"},e.heading)),r.createElement("div",{className:"".concat(e.isFirst?"d-flex":"d-none"," col align-items-center")},r.createElement("div",{className:"col-10 col-md-4"}),r.createElement("div",{className:"d-none d-md-flex col-6"},r.createElement("div",{className:"col-4"},r.createElement("p",{className:"fw-semibold mb-2"},r.createElement(N.x,{namespace:O,phrase:"viewsHeading"}))),r.createElement("div",{className:"col-3"},r.createElement("p",{className:"fw-semibold mb-2"},r.createElement(N.x,{namespace:O,phrase:"viewedByHeading"}))),r.createElement("div",{className:"col-5"},r.createElement("p",{className:"fw-semibold mb-2"},r.createElement(N.x,{namespace:O,phrase:"statusHeading"})))),r.createElement("div",{className:"col-2"})))}function A(e){var t,n=e.shareData,o=n.sharedObject,l=o.typeId===x.E.Playlist||o.typeId===x.E.Series,s=(0,C.pY)(n.share);return r.createElement("div",{className:"position-relative hover-bg-light-blue ".concat(j.tableRow," ").concat(null!==(t=e.className)&&void 0!==t?t:"")},r.createElement(S.F,{appLink:s,className:"p-2 cursor-pointer d-flex text-decoration-none"},r.createElement("div",{className:"col-auto ".concat(j.thumbnailContainer)},r.createElement(i.k,{object:o,showVideoMetadata:!0,locationContext:a.LZ.MyShares,imageOptions:{size:w.h2.Medium},showCollectionMask:!1,showVideoCount:!0})),r.createElement("div",{className:"col d-flex align-items-center"},r.createElement("div",{className:"px-3 col-10 col-md-4"},r.createElement(c.F,{sharedObject:n.sharedObject})),r.createElement("div",{className:"d-none d-md-flex col-6"},r.createElement("div",{className:"col-4"},l?r.createElement("p",{className:"mb-0"},"-"):r.createElement("p",{className:"mb-0"},r.createElement(N.x,{namespace:O,phrase:"views",options:{smartCount:n.share.viewCount}}))),r.createElement("div",{className:"col-3"},l?r.createElement("p",{className:"mb-0"},"-"):r.createElement("div",{className:"d-flex align-items-center"},r.createElement(k.x,{svgName:I.vn.User,size:k.S.Standard,className:"me-2 svg-container"}),r.createElement("p",{className:"mb-0"},n.share.accessCount))),r.createElement("div",{className:"col-5"},r.createElement(b,{share:n.share,markingRequired:n.pendingReview>0}))))),r.createElement("div",{className:"position-absolute end-0 top-0 bottom-0 d-flex align-items-center pe-2"},r.createElement(S.F,{appLink:s,className:"me-4 text-info d-none ".concat(j.viewCta)},r.createElement(N.x,{namespace:O,phrase:"viewCta"})),r.createElement(E.m,{dropdownToggleSvgSize:k.S.Standard,actions:e.getObjectActions(n),dropdownToggleClassName:"btn btn-link"})))}},5056:(e,t,n)=>{n.d(t,{R:()=>p});var r=n(32735),a=n(23481),i=n(75896),c=n(110),o=n(31754),l=n(2510),s=n(4594);function u(e){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u(e)}function d(e,t,n){return(t=function(e){var t=function(e){if("object"!=u(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=u(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==u(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var m=a.T.encloseNamespace("myShares.mySharesTable");function v(e){var t;if(e.type===l.y.Link||!(null===(t=null==e?void 0:e.recipients)||void 0===t?void 0:t.length))return e.dateCreated;var n=e.recipients.map((function(e){return e.dateCreated}));return n.length?(n.sort((function(e,t){return c.O.isSame(e,t)?0:c.O.isAfter(e,t)?1:-2})),i.m.last(n)):""}var f=n(15474);function p(e){var t,n,a,i,c,u,p,h=(t=e.sentShares,n=e.sharedObjects,a=e.shareRecipients,i=!!e.groupByDateShared,c=e.interactivesPendingReview,u=[],p=null==c?void 0:c.reduce((function(e,t){return Object.assign(d({},t.interactiveId,t),e)}),{}),t.forEach((function(e){var t,r=null==n?void 0:n[e.objectId],i=null;if(e.type===l.y.Classroom&&(i=[],null===(t=e.recipients)||void 0===t||t.forEach((function(e){var t=null==a?void 0:a[e.recipientId];t&&i.push(t)}))),r){var c=r.typeId===s.E.Interactive&&(null==p?void 0:p[r.interactiveId]);u.push({share:e,sharedObject:r,shareRecipients:i,dateShared:v(e),pendingReview:null==c?void 0:c.pendingReviewCount,privacy:e.privacy})}})),i?o.x.groupByDateShared(u):d({},m("title"),u));return r.createElement(r.Fragment,null,Object.keys(h).map((function(t,n){return r.createElement("div",{key:n},r.createElement(f.g,{heading:t,isFirst:!e.hasDemoInsights&&0===n}),r.createElement("div",{className:"d-flex flex-column mb-4"},h[t].map((function(t,n){return r.createElement(f.F,{key:n,shareData:t,getObjectActions:e.getObjectActions,breakpoints:e.breakpoints,imageCdnUrl:e.imageCdnUrl,yearGroups:e.yearGroups})}))))})))}},67467:(e,t,n)=>{n.d(t,{o:()=>u});var r=n(32735),a=n(23481),i=n(97958),c=n(99742),o=n(14070),l=n(97291),s=a.T.encloseNamespace("myShares.mySharesTableEmptyState");function u(){return r.createElement(i.u,null,r.createElement(i.u.Image,{src:c.W.EmptyStates.Share.SHARED_BY_ME,size:"small"}),r.createElement(i.u.Heading,null,s("heading")),r.createElement(i.u.Info,null,s("info")),r.createElement(i.u.Cta,{appLink:{application:l.O.DASHBOARD,action:o.e.Dashboard.HOME},text:s("cta")}))}},28001:(e,t,n)=>{n.d(t,{L:()=>o});var r=n(32735);const a={heading:"iWHol",thumbnailContainer:"zrcDh"};function i(e){return r.createElement("div",{className:"d-flex"},r.createElement("div",{className:"col-auto ".concat(a.thumbnailContainer)},r.createElement("div",{className:"partial-loading-background mb-2"}," ")),r.createElement("div",{className:"".concat(e.isFirst?"d-flex":"d-none"," col align-items-center")},r.createElement("div",{className:"col-10 col-md-4"}),r.createElement("div",{className:"d-none d-md-flex col-6"},r.createElement("div",{className:"col-4"},r.createElement("div",{className:"partial-loading-background mb-2 ".concat(a.heading)}," ")),r.createElement("div",{className:"col-3"},r.createElement("div",{className:"partial-loading-background mb-2 ".concat(a.heading)}," ")),r.createElement("div",{className:"col-5"},r.createElement("div",{className:"partial-loading-background mb-2 ".concat(a.heading)}," "))),r.createElement("div",{className:"col-2"})))}function c(){return r.createElement("div",{className:"p-2 d-flex"},r.createElement("div",{className:"col-auto ".concat(a.thumbnailContainer)},r.createElement("div",{className:"partial-loading-background rounded ratio ratio-16x9"})),r.createElement("div",{className:"col d-flex align-items-center"},r.createElement("div",{className:"px-3 col-10 col-md-4"},r.createElement("div",{className:"partial-loading-background w-75"}," ")),r.createElement("div",{className:"d-none d-md-flex col-6"},r.createElement("div",{className:"col-4"},r.createElement("div",{className:"partial-loading-background w-50"}," ")),r.createElement("div",{className:"col-3"},r.createElement("div",{className:"partial-loading-background w-50"}," ")),r.createElement("div",{className:"col-5"},r.createElement("div",{className:"partial-loading-background w-75"}," "))),r.createElement("div",{className:"col-2 d-flex justify-content-end align-items-center"},r.createElement("div",{className:"partial-loading-background w-25"}," "))))}function o(){return r.createElement(r.Fragment,null,r.createElement("div",null,r.createElement(i,{isFirst:!0}),r.createElement("div",{className:"d-flex flex-column rounded-3 mb-4 border"},r.createElement(c,null),r.createElement(c,null),r.createElement(c,null),r.createElement(c,null))),r.createElement("div",null,r.createElement(i,null),r.createElement("div",{className:"d-flex flex-column rounded-3 mb-4 border"},r.createElement(c,null),r.createElement(c,null),r.createElement(c,null),r.createElement(c,null))),r.createElement("div",null,r.createElement(i,null),r.createElement("div",{className:"d-flex flex-column rounded-3 mb-4 border"},r.createElement(c,null),r.createElement(c,null),r.createElement(c,null),r.createElement(c,null),r.createElement(c,null),r.createElement(c,null),r.createElement(c,null),r.createElement(c,null),r.createElement(c,null),r.createElement(c,null))))}},98623:(e,t,n)=>{n.d(t,{a:()=>p});var r=n(20354),a=n(1048),i=n(93479),c=n(30439),o=n(18488),l=n(21789),s=n(39151),u=n(1666),d=n(31949),m=n(39902),v=n(60115),f=n(31908);function p(e){var t,n,p=e.params,h=e.interactiveInsights,y=e.shouldFetch,g=r.a.useGetFetch(),b=r.a.useBasicFetch(d.N.currentUser()),E=r.a.useBasicFetch(s.L.config()),S=r.a.useBasicFetch((null===(t=b.data)||void 0===t?void 0:t.isAuthenticated)&&u.h.yearGroups(b.data.customerId)),k=function(e){return y&&o.o.getSentShares(Object.assign({cursor:e},p))},N=function(e){return g(k(e))},w=(0,v.K)(k,N),x=w.items,I=w.hasMore,C=w.isFetching,j=w.nextCursor,O=w.hasFirstPageCompleted,F=(0,m.FN)(null==x?void 0:x.map((function(e){return e.objectId.toString()})),c.o.sharedObjectsById),A=(0,m.FN)(l.x.getFlattenedRecipients(null!=x?x:[]).map((function(e){return e.recipientId.toString()})),(function(e){return c.o.getRecipientsById(e,b.data.customerId)})),T=(0,m.FN)(h?a.t.values(F.items||[]):[],(function(e){return i.I.pendingReviews({interactives:e.filter(f.M.isInteractive).map((function(e){return{interactiveId:e.interactiveId,metadataId:e.id}})),filters:{currentCustomerId:b.data.customerId,currentUserId:b.data.id}})}),(function(e){return"".concat(e.id,":").concat("interactiveId"in e?e.interactiveId:"")})),R=C||F.isFetching||A.isFetching||T.isFetching||S.isFetching,P=!O||(null==x?void 0:x.length)&&!F.hasFirstRequestCompleted;return{sentShares:x,sharedObjects:F,shareRecipients:A,yearGroups:S.data,interactivesPendingReview:T,isFetching:R,showPartialLoading:P,nextCursor:j,hasMore:I,fetchNext:N,imageCdnUrl:null===(n=E.data)||void 0===n?void 0:n.imageCdnUrl}}},82602:(e,t,n)=>{n.d(t,{WU:()=>s});var r=["second","minute","hour","day","week","month","year"],a=["秒","分钟","小时","天","周","个月","年"],i={},c=function(e,t){i[e]=t},o=[60,60,24,7,365/7/12,12];function l(e){return e instanceof Date?e:!isNaN(e)||/^\d+$/.test(e)?new Date(parseInt(e)):(e=(e||"").trim().replace(/\.\d+/,"").replace(/-/,"/").replace(/-/,"/").replace(/(\d)T(\d)/,"$1 $2").replace(/Z/," UTC").replace(/([+-]\d\d):?(\d\d)/," $1$2"),new Date(e))}var s=function(e,t,n){var r=function(e,t){return(+(t?l(t):new Date)-+l(e))/1e3}(e,n&&n.relativeDate);return function(e,t){for(var n=e<0?1:0,r=e=Math.abs(e),a=0;e>=o[a]&&a<o.length;a++)e/=o[a];return(e=Math.floor(e))>(0==(a*=2)?9:1)&&(a+=1),t(e,a,r)[n].replace("%s",e.toString())}(r,function(e){return i[e]||i.en_US}(t))};c("en_US",(function(e,t){if(0===t)return["just now","right now"];var n=r[Math.floor(t/2)];return e>1&&(n+="s"),[e+" "+n+" ago","in "+e+" "+n]})),c("zh_CN",(function(e,t){if(0===t)return["刚刚","片刻后"];var n=a[~~(t/2)];return[e+" "+n+"前",e+" "+n+"后"]}))}}]);
2
- //# sourceMappingURL=1199-a2ac2338d0-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/1199-a2ac2338d0-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/utils/AnalyticsRequestUtils.ts","file:///app/packages/libs/shared/src/apps/analytics/flight-requests/InteractiveResultsRequests.ts","file:///app/packages/libs/shared/src/apps/share-v2/flight-requests/ShareRequests.ts","file:///app/packages/libs/shared/src/apps/share/utils/ShareHelper.ts","file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/libs/shared/src/hooks/UseInfiniteScroll.ts","file:///app/packages/libs/shared/src/hooks/UseInfiniteList.ts","file:///app/packages/libs/shared/src/apps/share-v2/components/share-status-indicator/share-status-indicator.scss","file:///app/packages/libs/shared/src/apps/share-v2/components/share-status-indicator/ShareStatusIndicator.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table-row/my-shares-table-row.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table-row/MySharesTableRow.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/MySharesTableUtils.ts","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/MySharesTable.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/empty-state/MySharesTableEmptyState.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/partial-loading/partial-my-shares-table.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/partial-loading/PartialMySharesTable.tsx","file:///app/packages/projects/lite/src/shared/hooks/useSharesTable.ts","file:///app/node_modules/timeago.js/esm/lang/en_US.js","file:///app/node_modules/timeago.js/esm/lang/zh_CN.js","file:///app/node_modules/timeago.js/esm/register.js","file:///app/node_modules/timeago.js/esm/utils/date.js","file:///app/node_modules/timeago.js/esm/format.js","file:///app/node_modules/timeago.js/esm/index.js"],"sourcesContent":["import { AnalyticsRequestFilter } from 'libs/shared/interfaces';\n\nexport function getAnalyticsRequestKey(baseKey: string, filter: AnalyticsRequestFilter, extra?: string): string {\n if (!filter)\n return baseKey;\n\n let key = `${baseKey}:${filter.start}:${filter.end}`;\n\n const userIdKey = Array.isArray(filter.userId) ? filter.userId.sort().join(':') : filter.userId;\n const groupIdKey = Array.isArray(filter.groupId) ? filter.groupId.sort().join(':') : filter.groupId;\n const customerIdKey = Array.isArray(filter.customerId) ? filter.customerId.sort().join(':') : filter.customerId;\n\n if (userIdKey)\n key += `:${userIdKey}`;\n\n if (groupIdKey)\n key += `:${groupIdKey}`;\n\n if (customerIdKey)\n key += `:${customerIdKey}`;\n\n if (extra)\n key += `:${extra}`;\n\n return key;\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/react/index';\n\nimport { MarkInteractiveAnswer } from 'libs/shared/apps/analytics/interfaces/MarkInteractiveAnswer';\nimport { InteractiveResultsReport } from 'libs/shared/apps/analytics/interfaces/requests/InteractiveResultsReport';\nimport { InteractivesPendingReviewsRequest } from 'libs/shared/apps/analytics/interfaces/requests/InteractivesPendingReviewsRequest';\nimport { AnalyticsRequestFilter, CurrentUser, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\ninterface InteractiveResultFilters {\n currentUserId: string;\n currentCustomerId: string;\n dateRange?: { start: string, end: string }\n userIds?: string | string[];\n classroomsAndGroups?: string | string[];\n}\n\nfunction getInteractiveResultFilters(\n currentUser: CurrentUser,\n filter: AnalyticsRequestFilter\n): InteractiveResultFilters {\n return {\n currentUserId: currentUser.id,\n currentCustomerId: currentUser.customerId,\n dateRange: filter ? { start: filter.start, end: filter.end } : undefined,\n userIds: filter?.userId,\n classroomsAndGroups: filter?.groupId\n };\n}\n\nexport const InteractiveResultsRequests = {\n /** \n * This endpoint returns data with a lot of duplicated ids,\n * e.g. student answers to the same question will have the same id.\n * Because of that, we don't normalize.\n */\n interactiveResultSet(\n interactiveId: string,\n interactiveMetadataId: string,\n currentUser: CurrentUser,\n filter?: AnalyticsRequestFilter,\n includePublicResults?: boolean,\n success?: (data: InteractiveResultSet) => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: includePublicResults ?\n `/api/domain/v3/analytics/interactives/${interactiveId}/metadata/${interactiveMetadataId}` :\n `/api/domain/v2/analytics/interactives/${interactiveId}/metadata/${interactiveMetadataId}`,\n key: getAnalyticsRequestKey(`interactive:result:set:${interactiveId}:${interactiveMetadataId}`, filter),\n data: getInteractiveResultFilters(currentUser, filter),\n type: HttpVerbs.POST,\n normalize: false,\n success,\n error,\n always\n };\n },\n \n /**\n * As the response from `interactiveResultSet` isn't normalised, we need to invalidate the cache\n * to update the results data.\n */\n mark(\n interactiveId: string,\n interactiveMetadataId: string,\n answerId: string,\n data: MarkInteractiveAnswer,\n success?: () => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `/api/domain/v1/analytics/answers/${answerId}`,\n key: `mark:answer:${answerId}:${data.resultId}`,\n type: HttpVerbs.PUT,\n data,\n normalize: false,\n invalidationKeys: `interactive:result:set:${interactiveId}:${interactiveMetadataId}`,\n success,\n error,\n always\n };\n },\n\n pendingReviews(data: InteractivesPendingReviewsRequest): Flight.Request {\n return {\n url: `/api/domain/v1/analytics/interactives/pending-reviews/summary`,\n key: `interactives:pending:reviews`,\n type: HttpVerbs.POST,\n data\n };\n },\n\n interactiveResultsReport(data: InteractiveResultsReport): Flight.Request {\n return {\n url: '/api/domain/v3/analytics/interactives/report',\n key: 'interactive:results:report',\n data,\n type: HttpVerbs.POST,\n normalize: false\n };\n }\n};","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 { format } from 'timeago.js';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { CheckMarkStatus } from 'libs/shared/components/check-mark-button/CheckMarkButton';\nimport { ShareActivityStatus } from 'libs/shared/enums/ShareActivityStatus';\n\ninterface ObjectWithDateShared {\n dateShared: string;\n}\n\ntype GroupedByDate<T extends ObjectWithDateShared> = { [date: string]: T[] };\n\nexport const ShareHelper = {\n groupByDateShared<T extends ObjectWithDateShared>(data: T[]): GroupedByDate<T> {\n const dateToObjectMapping: GroupedByDate<T> = ArrayHelper.groupBy(data, 'dateShared');\n\n const sortedDates = Object.keys(dateToObjectMapping).sort().reverse();\n\n // Create a sorted mapping between dates and the \"ObjectWithDateShared\" objects\n return sortedDates.reduce((acc: GroupedByDate<T>, date) => {\n const heading = format(date);\n\n if (!acc[heading])\n acc[heading] = [];\n\n acc[heading] = acc[heading].concat(dateToObjectMapping[date]);\n return acc;\n }, {});\n },\n\n mapActivityStatusToCheckMarkStatus(activityStatus: ShareActivityStatus): CheckMarkStatus {\n switch (activityStatus) {\n case ShareActivityStatus.Complete:\n return CheckMarkStatus.Complete;\n case ShareActivityStatus.Incomplete:\n return CheckMarkStatus.Incomplete;\n case ShareActivityStatus.None:\n return CheckMarkStatus.None;\n }\n },\n\n mapCheckMarkStatusToActivityStatus(checkMarkStatus: CheckMarkStatus): ShareActivityStatus {\n switch (checkMarkStatus) {\n case CheckMarkStatus.Complete:\n return ShareActivityStatus.Complete;\n case CheckMarkStatus.Incomplete:\n return ShareActivityStatus.Incomplete;\n case CheckMarkStatus.None:\n return ShareActivityStatus.None;\n }\n }\n};","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst CHUNK_SIZE = 50;\n\nexport interface UseBatchFetchResult<T extends BaseObject> {\n itemsArr: T[];\n items: { [key: string]: T} | null;\n isFetching: boolean;\n hasCompleted: boolean;\n}\n\n/**\n * Used to fetch multiple items by id with Flight. Will fetch 25 items at a time firing off multiple\n * requests if there are more than 25 items.\n * This will return items as null until we have all our items. Items will be returned as an object with\n * their ids as they key for easy mapping\n * \n * @param itemIds \n * @param getRequest \n */\nexport function useBatchFetch<T extends BaseObject>(\n itemIds: string[],\n getRequest: (ids: string[]) => Flight.Request\n): UseBatchFetchResult<T> {\n const chunks = ArrayHelper.chunk<string>(itemIds, CHUNK_SIZE);\n\n const requests = chunks.map(chunk => getRequest(ArrayHelper.uniq(chunk)));\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\n\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce((acc, item) => ({ ...acc, [item.id]: item }), {})\n : null;\n\n return {\n itemsArr,\n items,\n isFetching: responses.isFetching,\n hasCompleted: responses.hasCompleted\n };\n}\n\n/**\n * When you need the useBatchFetch() behavior, but your list of objects to hydrate\n * will grow, such as on a scrolling page. useGrowingBatchFetch() will use local state\n * to determine what we've already built a request for and what items are new\n * as to not re-fetch items - Sha\n */\nexport function useGrowingBatchFetch<TResponse, TObjects = string>(\n objs: TObjects[],\n getRequest: (items: TObjects[]) => Flight.Request,\n _getKey?: (obj: TObjects) => string\n) {\n const getKey = _getKey ?? ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const { fetchItems, ...data } = useGrowingBatchFetchFunc<TResponse, TObjects>({ getRequest, _getKey });\n\n React.useEffect(() => {\n if (!objs?.length)\n return;\n\n fetchItems(objs);\n }, [objs?.map(getKey).join(',')]);\n\n return data;\n}\n\ninterface UseGrowingBatchFetchFuncOptions<TObjects> {\n getRequest: (items: TObjects[]) => Flight.Request;\n _getKey?: (obj: TObjects) => string;\n}\n\n/**\n * When you need the useGrowingBatchFetch() behaviour, but need to trigger the\n * fetch manually and update the objects - Nish \n */\nexport function useGrowingBatchFetchFunc<TResponse, TObjects = string>(\n options: UseGrowingBatchFetchFuncOptions<TObjects>\n) {\n const getKey = options._getKey ?? ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const fetchedItems = React.useRef<Set<string>>(new Set<string>());\n const [ requests, setRequests ] = React.useState<Flight.Request[]>([]);\n\n function fetchItems(objs: TObjects[]) {\n if (!objs?.length)\n return;\n\n const unfetchedItems: TObjects[] = [];\n \n objs.forEach(obj => {\n const key = getKey(obj);\n\n if (fetchedItems.current.has(key))\n return;\n\n unfetchedItems.push(obj);\n fetchedItems.current.add(key);\n });\n \n if (!unfetchedItems.length)\n return;\n \n setRequests(r => ([ ...r, ...ArrayHelper.chunk<TObjects>(unfetchedItems, CHUNK_SIZE).map(options.getRequest) ]));\n }\n\n const responses = Flight.useBasicFetchAll<TResponse[]>(requests);\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce<Record<string, TResponse>>((acc, item) => ({ ...acc, [getKey(item)]: item }), {})\n : null;\n\n return {\n hasFirstRequestCompleted: !!responses.responses?.[0]?.hasCompleted,\n itemsArr,\n items,\n isFetching: responses.isFetching,\n fetchItems\n };\n}\n","import { useEffect } from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nconst SCROLL_TOLERANCE = 400; // value in px\n\ninterface UseInfiniteScrollOptions {\n fetchNextPage: () => void;\n hasMore: boolean;\n isFetching: boolean;\n scrollContainer?: HTMLElement;\n}\n\nexport function useInfiniteScroll(options: UseInfiniteScrollOptions): void {\n const handleScroll = (): void => {\n if (options.isFetching)\n return;\n\n if (!options.scrollContainer) {\n const currentScrollHeight = window.innerHeight + document.documentElement.scrollTop;\n \n const totalHeight = document.documentElement.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n } else {\n const { scrollContainer } = options;\n const currentScrollHeight = scrollContainer.getBoundingClientRect().height + scrollContainer.scrollTop;\n \n const totalHeight = scrollContainer.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n }\n\n options.fetchNextPage();\n };\n\n useEffect(() => {\n const onScroll = FunctionHelper.throttle(handleScroll, 200);\n\n const scrollContainer = options.scrollContainer || window;\n\n if (options.hasMore)\n scrollContainer.addEventListener('scroll', onScroll);\n\n return () => scrollContainer.removeEventListener('scroll', onScroll);\n }, [ options.hasMore, options.fetchNextPage, options.scrollContainer ]);\n}","import { useEffect, useState } from 'react';\n\nimport { HttpStatus, HttpStatusClass } from 'libs/common/backbone/enums/HttpStatus';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { BaseObject, BasePaginatedCollection } from 'libs/shared/interfaces';\n\nimport { useInfiniteScroll } from './UseInfiniteScroll';\nimport { useSelectAllPages } from './UseSelectAllPages';\n\nexport interface UseInfiniteListResult<T extends BaseObject> {\n items: T[];\n hasMore: boolean;\n isFetching: boolean;\n nextCursor: string;\n totalItems?: number;\n hasFirstPageCompleted: boolean;\n}\n\n/**\n * Hook to extract an infinite list from the application state,\n * save it locally in state and only update when new data\n * is fetched.\n * \n * @param getRequest - callback function to get the request for each page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n * \n * @param fetchNext - callback function to fetch a page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n */\nexport function useInfiniteList<TObject = BaseObject, TResponse = BasePaginatedCollection<TObject>>(\n getRequest: ((cursor?: string) => Flight.Request) | false,\n fetchNext: ((cursor?: string) => void) | false,\n onError?: (pageNumber: number, statusCode: HttpStatus) => void,\n getItems?: (responseData: TResponse) => TObject[],\n getCursor?: (responseData: TResponse) => string,\n scrollContainer?: HTMLElement\n): UseInfiniteListResult<TObject> {\n const [ pagesFetched, setPagesFetched ] = useState(0);\n\n const fetchNextFn = fetchNext as (cursor?: string) => void;\n\n function getKey(cursor?: string): string {\n if (!getRequest)\n return null;\n\n const request = getRequest(cursor);\n\n if (!request)\n return null;\n\n return request.key;\n }\n\n const response = useSelectAllPages<TObject, TResponse>(\n getKey,\n getItems,\n getCursor\n );\n\n function fetchNextPage(): void {\n if (!fetchNext || !getRequest || !response)\n return;\n\n setPagesFetched(currentVal => currentVal + 1);\n return fetchNextFn(response.nextCursor);\n }\n\n useInfiniteScroll({\n fetchNextPage,\n hasMore: !!response?.nextCursor,\n isFetching: response?.isFetching,\n scrollContainer\n });\n\n useEffect(() => {\n if (!response)\n return;\n\n if (response.shouldInitialFetch && fetchNext) {\n fetchNextFn();\n setPagesFetched(currentVal => currentVal + 1);\n }\n }, [ response?.shouldInitialFetch, fetchNext ]);\n\n useEffect(() => {\n if (!response?.statusCode || !FunctionHelper.isFunction(onError))\n return;\n\n const httpStatusClass: HttpStatusClass = +(response.statusCode?.toString()?.substr(0, 1));\n\n if (httpStatusClass !== HttpStatusClass.ClientError && httpStatusClass !== HttpStatusClass.ServerError)\n return;\n\n onError(pagesFetched, response.statusCode);\n }, [response?.statusCode]);\n\n return {\n items: response?.items,\n hasMore: !!response?.nextCursor,\n nextCursor: response?.nextCursor,\n isFetching: response?.isFetching,\n totalItems: response?.totalItems,\n hasFirstPageCompleted: response?.hasFirstPageCompleted\n };\n}","// extracted by mini-css-extract-plugin\nexport default {\"indicator\":\"sybF_\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\n\nimport styles from './share-status-indicator.scss';\n\nconst namespace = 'share-v2.shareStatusIndicator';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nenum ShareIndicatorStatus {\n Active,\n Expired,\n MarkingRequired\n}\n\nconst statusIndicatorLabels = {\n [ShareIndicatorStatus.Active]: () => getPhrase('activeStatusLabel'),\n [ShareIndicatorStatus.Expired]: () => getPhrase('expiredStatusLabel'),\n [ShareIndicatorStatus.MarkingRequired]: () => getPhrase('markingRequiredStatusLabel')\n};\n\nconst statusIndicatorColors = {\n [ShareIndicatorStatus.Active]: 'bg-success',\n [ShareIndicatorStatus.Expired]: 'bg-danger',\n [ShareIndicatorStatus.MarkingRequired]: 'bg-blue'\n};\n\nconst statusIndicatorTooltips = {\n [ShareIndicatorStatus.Active]: () => getPhrase('activeStatusTooltip'),\n [ShareIndicatorStatus.Expired]: () => getPhrase('expiredStatusTooltip'),\n [ShareIndicatorStatus.MarkingRequired]: () => getPhrase('markingRequiredStatusTooltip')\n};\n\nfunction determineStatus(props: ShareStatusIndicatorProps): ShareIndicatorStatus {\n if (props.markingRequired)\n return ShareIndicatorStatus.MarkingRequired;\n\n if (ShareHelper.hasShareExpired(props.share))\n return ShareIndicatorStatus.Expired;\n\n return ShareIndicatorStatus.Active;\n}\n\nfunction getTooltip(status: ShareIndicatorStatus, expireDate: string): string {\n if (status === ShareIndicatorStatus.Active && expireDate) {\n const localDate = DateHelper.convertUTCToLocal(expireDate);\n const formattedDate = DateHelper.format(localDate, 'MMMM Do');\n\n return getPhrase('expiryTooltip', { date: formattedDate });\n }\n\n return statusIndicatorTooltips[status]();\n}\n\ninterface ShareStatusIndicatorProps {\n share: Share;\n markingRequired: boolean;\n}\n\nexport function ShareStatusIndicator(props: ShareStatusIndicatorProps) {\n const status = determineStatus(props);\n const tooltip = getTooltip(status, props.share.expireDate);\n const color = statusIndicatorColors[status];\n\n function renderDisplayText() {\n const label = statusIndicatorLabels[status]();\n const expireDate = props.share.expireDate;\n \n if (status === ShareIndicatorStatus.Active && expireDate) {\n const remainingDays = ShareHelper.calculateDaysToExpiry(props.share);\n const hint = getPhrase('expiryHint', { smartCount: remainingDays });\n\n return (\n <p className='mb-0'>\n {label} · {hint}\n </p>\n );\n }\n\n return (\n <p className='mb-0'>\n {label}\n </p>\n );\n }\n\n return (\n <Tooltip title={tooltip} spanHack spanHackClassName='d-inline-flex'>\n <div className='d-flex align-items-center'>\n <div className={`${styles.indicator} ${color} me-2 flex-shrink-0`} />\n {renderDisplayText()}\n </div>\n </Tooltip>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"thumbnailContainer\":\"XNQc8\",\"tableRow\":\"R3dYa\",\"viewCta\":\"ssCq6\"};","import React from 'react';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { SharedObjectImage } from 'libs/shared/apps/share/components/shared-object-image/SharedObjectImage';\nimport { SharedObjectTitle } from 'libs/shared/apps/share/components/shared-object-title/SharedObjectTitle';\nimport { ShareStatusIndicator } from 'libs/shared/apps/share-v2/components/share-status-indicator/ShareStatusIndicator';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { ActionsDropdown } from 'libs/shared/components/actions/ActionsDropdown';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { YearGroup } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { getInsightsOverviewAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport { MySharesTableData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\n\nimport styles from './my-shares-table-row.scss';\n\nconst namespace = 'myShares.tableRow';\n\ninterface MySharesTableHeadingProps {\n heading: string;\n isFirst: boolean;\n}\n\nexport function MySharesTableHeading(props: MySharesTableHeadingProps) {\n return (\n <div className='d-flex'>\n <div className={`col-auto ${styles.thumbnailContainer}`}>\n <p className='fw-semibold mb-2'>{props.heading}</p>\n </div>\n \n <div className={`${props.isFirst ? 'd-flex' : 'd-none'} col align-items-center`}>\n <div className='col-10 col-md-4' />\n\n <div className='d-none d-md-flex col-6'>\n <div className='col-4'>\n <p className='fw-semibold mb-2'><Text namespace={namespace} phrase='viewsHeading' /></p>\n </div>\n\n <div className='col-3'>\n <p className='fw-semibold mb-2'><Text namespace={namespace} phrase='viewedByHeading' /></p>\n </div>\n\n <div className='col-5'>\n <p className='fw-semibold mb-2'><Text namespace={namespace} phrase='statusHeading' /></p>\n </div>\n </div>\n\n <div className='col-2' />\n </div>\n </div>\n );\n}\n\ninterface MySharesTableRowProps extends React.PropsWithChildren {\n shareData: MySharesTableData;\n breakpoints?: Breakpoints;\n getObjectActions: (row: MySharesTableData) => ActionOptions[];\n yearGroups: YearGroup[];\n imageCdnUrl: string;\n className?: string;\n}\n\nexport function MySharesTableRow(props: MySharesTableRowProps) {\n const { shareData } = props;\n const sharedObject = shareData.sharedObject;\n const isCollection = sharedObject.typeId === MasterType.Playlist || sharedObject.typeId === MasterType.Series;\n const appLink = getInsightsOverviewAppLink(shareData.share);\n\n function renderViewCount() {\n if (isCollection)\n return <p className='mb-0'>-</p>;\n\n return (\n <p className='mb-0'>\n <Text namespace={namespace} phrase='views' options={{ smartCount: shareData.share.viewCount }} />\n </p>\n );\n }\n\n function renderViewedBy() {\n if (isCollection)\n return <p className='mb-0'>-</p>;\n\n return (\n <div className='d-flex align-items-center'>\n <SvgContainer svgName={cvSvgLibrary.User} size={SvgContainerSize.Standard} className='me-2 svg-container' />\n <p className='mb-0'>{shareData.share.accessCount}</p>\n </div>\n );\n }\n\n return (\n <div className={`position-relative hover-bg-light-blue ${styles.tableRow} ${props.className ?? ''}`}>\n <AppLink appLink={appLink} className={`p-2 cursor-pointer d-flex text-decoration-none`}>\n <div className={`col-auto ${styles.thumbnailContainer}`}>\n <SharedObjectImage\n object={sharedObject}\n showVideoMetadata\n locationContext={LocationContext.MyShares}\n imageOptions={{ size: ImageSize.Medium }}\n showCollectionMask={false}\n showVideoCount\n />\n </div>\n \n <div className='col d-flex align-items-center'>\n <div className='px-3 col-10 col-md-4'>\n <SharedObjectTitle sharedObject={shareData.sharedObject} />\n </div>\n\n <div className='d-none d-md-flex col-6'>\n <div className='col-4'>\n {renderViewCount()}\n </div>\n\n <div className='col-3'>\n {renderViewedBy()}\n </div>\n\n <div className='col-5'>\n <ShareStatusIndicator share={shareData.share} markingRequired={shareData.pendingReview > 0} />\n </div>\n </div>\n </div>\n </AppLink>\n <div className='position-absolute end-0 top-0 bottom-0 d-flex align-items-center pe-2'>\n <AppLink appLink={appLink} className={`me-4 text-info d-none ${styles.viewCta}`}>\n <Text namespace={namespace} phrase='viewCta' />\n </AppLink>\n <ActionsDropdown\n dropdownToggleSvgSize={SvgContainerSize.Standard}\n actions={props.getObjectActions(shareData)}\n dropdownToggleClassName='btn btn-link'\n />\n </div>\n </div>\n );\n}\n","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { InteractivesPendingReviews } from 'libs/shared/apps/analytics/interfaces/response/InteractivesPendingReviewsResponse';\nimport { ShareHelper } from 'libs/shared/apps/share/utils/ShareHelper';\nimport { SharableEntity, SharableRecipient } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { SharePrivacy } from 'libs/shared/apps/share-v2/enums/SharePrivacy';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { InteractiveMetadata } from 'libs/shared/interfaces';\n\nconst namespace = 'myShares.mySharesTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getDateShared(share: Share): string {\n if (share.type === ShareType.Link || !share?.recipients?.length)\n return share.dateCreated;\n\n const datesCreated = share.recipients.map(r => r.dateCreated);\n\n if (!datesCreated.length)\n return '';\n\n datesCreated.sort((date1, date2) => {\n if (DateHelper.isSame(date1, date2))\n return 0;\n\n return DateHelper.isAfter(date1, date2) ? 1 : -2;\n });\n\n return ArrayHelper.last(datesCreated);\n}\n\nexport interface MySharesTableData {\n share: Share;\n sharedObject: SharableEntity;\n dateShared: string;\n shareRecipients?: SharableRecipient[];\n pendingReview?: number;\n privacy?: SharePrivacy;\n}\n\ntype TableDataGroupings = { [date: string]: MySharesTableData[] };\n\nexport function useGetMySharesData(\n sentShares: Share[],\n sharedObjects: Record<string, SharableEntity>,\n shareRecipients: Record<string, SharableRecipient>,\n groupByDate: boolean,\n interactivesPendingReviews: InteractivesPendingReviews[]\n): TableDataGroupings {\n const tableData: MySharesTableData[] = [];\n\n const interactivesPendingReviewsMap = interactivesPendingReviews\n ?.reduce<Record<string, InteractivesPendingReviews>>(\n (map, obj) => ({ [obj.interactiveId]: obj, ...map }),\n {}\n );\n\n sentShares.forEach(s => {\n const sharedObject = sharedObjects?.[s.objectId];\n\n let recipients: SharableRecipient[] | null = null;\n\n if (s.type === ShareType.Classroom) {\n recipients = [];\n\n s.recipients?.forEach(r => {\n const recipient = shareRecipients?.[r.recipientId];\n\n if (recipient)\n recipients.push(recipient);\n });\n }\n\n // Skip if we don't have access to the shared object (e.g. if it's been deleted)\n if (sharedObject) {\n const pendingReview = sharedObject.typeId === MasterType.Interactive &&\n interactivesPendingReviewsMap?.[(sharedObject as InteractiveMetadata).interactiveId];\n\n tableData.push({\n share: s,\n sharedObject,\n shareRecipients: recipients,\n dateShared: getDateShared(s),\n pendingReview: pendingReview?.pendingReviewCount,\n privacy: s.privacy\n });\n }\n });\n\n if (!groupByDate)\n return { [getPhrase('title')]: tableData };\n\n return ShareHelper.groupByDateShared(tableData);\n}","import React from 'react';\n\nimport { InteractivesPendingReviews } from 'libs/shared/apps/analytics/interfaces/response/InteractivesPendingReviewsResponse';\nimport { SharableEntity, SharableRecipient } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { YearGroup } from 'libs/shared/interfaces';\n\nimport { MySharesTableData, useGetMySharesData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\nimport { MySharesTableHeading, MySharesTableRow } from 'apps/my-shares/components/my-shares-table-row/MySharesTableRow';\n\ninterface MySharesTableProps {\n sentShares: Share[];\n sharedObjects: Record<string, SharableEntity>;\n shareRecipients: Record<string, SharableRecipient>;\n interactivesPendingReview: InteractivesPendingReviews[];\n getObjectActions: (row: MySharesTableData) => ActionOptions[];\n groupByDateShared?: boolean;\n showStatus?: boolean;\n showViewCount?: boolean;\n dependencies?: any[];\n breakpoints?: Breakpoints;\n hasDemoInsights?: boolean;\n imageCdnUrl: string;\n yearGroups: YearGroup[];\n}\n\nexport function MySharesTable(props: MySharesTableProps): JSX.Element {\n const data = useGetMySharesData(\n props.sentShares,\n props.sharedObjects,\n props.shareRecipients,\n !!props.groupByDateShared,\n props.interactivesPendingReview\n );\n\n return (\n <>\n {Object.keys(data).map((heading, headingIdx) => (\n <div key={headingIdx}>\n <MySharesTableHeading heading={heading} isFirst={!props.hasDemoInsights && headingIdx === 0} />\n\n <div className='d-flex flex-column mb-4'>\n {data[heading].map((shareData, index) => (\n <MySharesTableRow\n key={index}\n shareData={shareData}\n getObjectActions={props.getObjectActions}\n breakpoints={props.breakpoints}\n imageCdnUrl={props.imageCdnUrl}\n yearGroups={props.yearGroups}\n />\n ))}\n </div>\n </div>\n ))}\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'myShares.mySharesTableEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function MySharesTableEmptyState(): JSX.Element {\n return (\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Share.SHARED_BY_ME} size='small' />\n <EmptyState.Heading>\n {getPhrase('heading')}\n </EmptyState.Heading>\n <EmptyState.Info>{getPhrase('info')}</EmptyState.Info>\n <EmptyState.Cta appLink={{ application: AppChannels.DASHBOARD, action: Actions.Dashboard.HOME }} text={getPhrase('cta')} />\n </EmptyState>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"heading\":\"iWHol\",\"thumbnailContainer\":\"zrcDh\"};","import React from 'react';\n\nimport styles from './partial-my-shares-table.scss';\n\ninterface PartialHeadingProps {\n isFirst?: boolean;\n}\n\nexport function PartialHeading(props: PartialHeadingProps) {\n return (\n <div className='d-flex'>\n <div className={`col-auto ${styles.thumbnailContainer}`}>\n <div className={`partial-loading-background mb-2`}>&nbsp;</div>\n </div>\n \n <div className={`${props.isFirst ? 'd-flex' : 'd-none'} col align-items-center`}>\n <div className='col-10 col-md-4' />\n\n <div className='d-none d-md-flex col-6'>\n <div className='col-4'>\n <div className={`partial-loading-background mb-2 ${styles.heading}`}>&nbsp;</div>\n </div>\n\n <div className='col-3'>\n <div className={`partial-loading-background mb-2 ${styles.heading}`}>&nbsp;</div>\n </div>\n\n <div className='col-5'>\n <div className={`partial-loading-background mb-2 ${styles.heading}`}>&nbsp;</div>\n </div>\n </div>\n\n <div className='col-2' />\n </div>\n </div>\n );\n}\n\nfunction PartialRow(): JSX.Element {\n return (\n <div className={`p-2 d-flex`}>\n <div className={`col-auto ${styles.thumbnailContainer}`}>\n <div className={`partial-loading-background rounded ratio ratio-16x9`} />\n </div>\n \n <div className='col d-flex align-items-center'>\n <div className='px-3 col-10 col-md-4'>\n <div className={`partial-loading-background w-75`}>&nbsp;</div>\n </div>\n\n <div className='d-none d-md-flex col-6'>\n <div className='col-4'>\n <div className={`partial-loading-background w-50`}>&nbsp;</div>\n </div>\n\n <div className='col-3'>\n <div className={`partial-loading-background w-50`}>&nbsp;</div>\n </div>\n\n <div className='col-5'>\n <div className={`partial-loading-background w-75`}>&nbsp;</div>\n </div>\n </div>\n\n <div className='col-2 d-flex justify-content-end align-items-center'>\n <div className={`partial-loading-background w-25`}>&nbsp;</div>\n </div>\n </div>\n </div>\n );\n}\n\nexport function PartialMySharesTable(): JSX.Element {\n return (\n <>\n <div>\n <PartialHeading isFirst={true} />\n\n <div className='d-flex flex-column rounded-3 mb-4 border'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n\n <div>\n <PartialHeading />\n\n <div className='d-flex flex-column rounded-3 mb-4 border'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n\n <div>\n <PartialHeading />\n\n <div className='d-flex flex-column rounded-3 mb-4 border'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n </>\n );\n}","import { Flight } from 'libs/common/react/index';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { InteractiveResultsRequests } from 'libs/shared/apps/analytics/flight-requests/InteractiveResultsRequests';\nimport { InteractivesPendingReviews } from 'libs/shared/apps/analytics/interfaces/response/InteractivesPendingReviewsResponse';\nimport { ShareRequests as ShareRequestsV1 } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { SharableRecipient } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { GetSentSharesParams, ShareRequests as ShareRequestsV2 } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { SharableEntity } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { UseBatchFetchResult, useGrowingBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { BaseObject, Config, CurrentUser, YearGroup } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nexport function getBatchFetchResultAsArray(result: UseBatchFetchResult<BaseObject>): BaseObject[] {\n return result.items ? Object.values(result.items) : [];\n}\n\ninterface UseSharesTableOptions {\n params?: GetSentSharesParams;\n interactiveInsights?: boolean;\n shouldFetch: boolean;\n}\n\nexport function useSharesTable({ params, interactiveInsights, shouldFetch }: UseSharesTableOptions) {\n const fetch = Flight.useGetFetch();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n /**\n * Fetch sent shares\n */\n const getRequest = (cursor?: string) => shouldFetch && ShareRequestsV2.getSentShares({\n cursor,\n ...params\n });\n const fetchNext = (cursor?: string) => fetch(getRequest(cursor));\n const {\n items: sentShares,\n hasMore,\n isFetching: isFetchingSentShares,\n nextCursor,\n hasFirstPageCompleted\n } = useInfiniteList<Share>(getRequest, fetchNext);\n\n /**\n * Fetch shared objects\n */\n const sharedObjects = useGrowingBatchFetch<SharableEntity>(\n sentShares?.map(obj => obj.objectId.toString()),\n ShareRequestsV1.sharedObjectsById\n );\n\n /**\n * Fetch recipients\n */\n const shareRecipients = useGrowingBatchFetch<SharableRecipient>(\n ShareHelper.getFlattenedRecipients(sentShares ?? []).map(obj => obj.recipientId.toString()),\n objs => (ShareRequestsV1.getRecipientsById(objs, currentUser.data.customerId))\n );\n\n /**\n * Fetch which interactives required marking\n */\n const interactivesPendingReview = useGrowingBatchFetch<InteractivesPendingReviews, SharableEntity>(\n interactiveInsights ? ObjectHelper.values(sharedObjects.items || []) : [],\n objs => InteractiveResultsRequests.pendingReviews({\n interactives: objs\n .filter(VideoHelper.isInteractive)\n .map(obj => ({ interactiveId: obj.interactiveId, metadataId: obj.id })),\n filters: {\n currentCustomerId: currentUser.data.customerId,\n currentUserId: currentUser.data.id\n }\n }),\n obj => `${obj.id}:${'interactiveId' in obj ? obj.interactiveId : ''}`\n );\n \n const isFetching = isFetchingSentShares\n || sharedObjects.isFetching\n || shareRecipients.isFetching\n || interactivesPendingReview.isFetching\n || yearGroups.isFetching;\n\n const showPartialLoading = !hasFirstPageCompleted || (sentShares?.length && !sharedObjects.hasFirstRequestCompleted);\n\n return {\n sentShares,\n sharedObjects,\n shareRecipients,\n yearGroups: yearGroups.data,\n interactivesPendingReview,\n isFetching,\n showPartialLoading,\n nextCursor,\n hasMore,\n fetchNext,\n imageCdnUrl: config.data?.imageCdnUrl\n };\n}","var EN_US = ['second', 'minute', 'hour', 'day', 'week', 'month', 'year'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['just now', 'right now'];\n var unit = EN_US[Math.floor(idx / 2)];\n if (diff > 1)\n unit += 's';\n return [diff + \" \" + unit + \" ago\", \"in \" + diff + \" \" + unit];\n}\n//# sourceMappingURL=en_US.js.map","var ZH_CN = ['秒', '分钟', '小时', '天', '周', '个月', '年'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['刚刚', '片刻后'];\n var unit = ZH_CN[~~(idx / 2)];\n return [diff + \" \" + unit + \"\\u524D\", diff + \" \" + unit + \"\\u540E\"];\n}\n//# sourceMappingURL=zh_CN.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\n/**\n * All supported locales\n */\nvar Locales = {};\n/**\n * register a locale\n * @param locale\n * @param func\n */\nexport var register = function (locale, func) {\n Locales[locale] = func;\n};\n/**\n * get a locale, default is en_US\n * @param locale\n * @returns {*}\n */\nexport var getLocale = function (locale) {\n return Locales[locale] || Locales['en_US'];\n};\n//# sourceMappingURL=register.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nvar SEC_ARRAY = [\n 60,\n 60,\n 24,\n 7,\n 365 / 7 / 12,\n 12,\n];\n/**\n * format Date / string / timestamp to timestamp\n * @param input\n * @returns {*}\n */\nexport function toDate(input) {\n if (input instanceof Date)\n return input;\n // @ts-ignore\n if (!isNaN(input) || /^\\d+$/.test(input))\n return new Date(parseInt(input));\n input = (input || '')\n // @ts-ignore\n .trim()\n .replace(/\\.\\d+/, '') // remove milliseconds\n .replace(/-/, '/')\n .replace(/-/, '/')\n .replace(/(\\d)T(\\d)/, '$1 $2')\n .replace(/Z/, ' UTC') // 2017-2-5T3:57:52Z -> 2017-2-5 3:57:52UTC\n .replace(/([+-]\\d\\d):?(\\d\\d)/, ' $1$2'); // -04:00 -> -0400\n return new Date(input);\n}\n/**\n * format the diff second to *** time ago, with setting locale\n * @param diff\n * @param localeFunc\n * @returns\n */\nexport function formatDiff(diff, localeFunc) {\n /**\n * if locale is not exist, use defaultLocale.\n * if defaultLocale is not exist, use build-in `en`.\n * be sure of no error when locale is not exist.\n *\n * If `time in`, then 1\n * If `time ago`, then 0\n */\n var agoIn = diff < 0 ? 1 : 0;\n /**\n * Get absolute value of number (|diff| is non-negative) value of x\n * |diff| = diff if diff is positive\n * |diff| = -diff if diff is negative\n * |0| = 0\n */\n diff = Math.abs(diff);\n /**\n * Time in seconds\n */\n var totalSec = diff;\n /**\n * Unit of time\n */\n var idx = 0;\n for (; diff >= SEC_ARRAY[idx] && idx < SEC_ARRAY.length; idx++) {\n diff /= SEC_ARRAY[idx];\n }\n /**\n * Math.floor() is alternative of ~~\n *\n * The differences and bugs:\n * Math.floor(3.7) -> 4 but ~~3.7 -> 3\n * Math.floor(1559125440000.6) -> 1559125440000 but ~~1559125440000.6 -> 52311552\n *\n * More information about the performance of algebraic:\n * https://www.youtube.com/watch?v=65-RbBwZQdU\n */\n diff = Math.floor(diff);\n idx *= 2;\n if (diff > (idx === 0 ? 9 : 1))\n idx += 1;\n return localeFunc(diff, idx, totalSec)[agoIn].replace('%s', diff.toString());\n}\n/**\n * calculate the diff second between date to be formatted an now date.\n * @param date\n * @param relativeDate\n * @returns {number}\n */\nexport function diffSec(date, relativeDate) {\n var relDate = relativeDate ? toDate(relativeDate) : new Date();\n return (+relDate - +toDate(date)) / 1000;\n}\n/**\n * nextInterval: calculate the next interval time.\n * - diff: the diff sec between now and date to be formatted.\n *\n * What's the meaning?\n * diff = 61 then return 59\n * diff = 3601 (an hour + 1 second), then return 3599\n * make the interval with high performance.\n **/\nexport function nextInterval(diff) {\n var rst = 1, i = 0, d = Math.abs(diff);\n for (; diff >= SEC_ARRAY[i] && i < SEC_ARRAY.length; i++) {\n diff /= SEC_ARRAY[i];\n rst *= SEC_ARRAY[i];\n }\n d = d % rst;\n d = d ? rst - d : rst;\n return Math.ceil(d);\n}\n//# sourceMappingURL=date.js.map","import { formatDiff, diffSec } from './utils/date';\nimport { getLocale } from './register';\n/**\n * format a TDate into string\n * @param date\n * @param locale\n * @param opts\n */\nexport var format = function (date, locale, opts) {\n // diff seconds\n var sec = diffSec(date, opts && opts.relativeDate);\n // format it with locale\n return formatDiff(sec, getLocale(locale));\n};\n//# sourceMappingURL=format.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nimport en_US from './lang/en_US';\nimport zh_CN from './lang/zh_CN';\nimport { register } from './register';\nregister('en_US', en_US);\nregister('zh_CN', zh_CN);\nexport { format } from './format';\nexport { render, cancel } from './realtime';\nexport { register };\n//# sourceMappingURL=index.js.map"],"names":["getAnalyticsRequestKey","baseKey","filter","extra","key","start","end","userIdKey","Array","isArray","userId","sort","join","groupIdKey","groupId","customerIdKey","customerId","getInteractiveResultFilters","currentUser","currentUserId","id","currentCustomerId","dateRange","undefined","userIds","classroomsAndGroups","InteractiveResultsRequests","interactiveResultSet","interactiveId","interactiveMetadataId","includePublicResults","success","error","always","url","data","type","HttpVerbs","normalize","mark","answerId","resultId","invalidationKeys","pendingReviews","interactiveResultsReport","normalizeOptions","namespace","ShareRequests","createShare","objectId","updateShare","shareId","deleteShare","getShare","bootstrapName","getSentShares","params","Object","values","getShareLink","createShareLink","getPrivacy","getSharesByObjectId","createSharePincode","getPincodeByShareId","getPincodeByCode","code","ShareHelper","groupByDateShared","dateToObjectMapping","keys","reverse","reduce","acc","date","heading","concat","mapActivityStatusToCheckMarkStatus","activityStatus","mapCheckMarkStatusToActivityStatus","checkMarkStatus","CHUNK_SIZE","useBatchFetch","itemIds","getRequest","requests","map","chunk","responses","itemsArr","items","length","item","isFetching","hasCompleted","useGrowingBatchFetch","objs","_getKey","getKey","obj","useGrowingBatchFetchFunc","fetchItems","options","fetchedItems","Set","setRequests","hasFirstRequestCompleted","unfetchedItems","forEach","current","has","push","add","r","SCROLL_TOLERANCE","useInfiniteList","fetchNext","onError","getItems","getCursor","scrollContainer","handleScroll","useState","pagesFetched","setPagesFetched","fetchNextFn","response","cursor","request","fetchNextPage","currentVal","nextCursor","hasMore","getBoundingClientRect","height","scrollTop","scrollHeight","window","innerHeight","document","documentElement","useEffect","onScroll","FunctionHelper","addEventListener","removeEventListener","shouldInitialFetch","statusCode","httpStatusClass","toString","substr","HttpStatus","totalItems","hasFirstPageCompleted","ShareIndicatorStatus","getPhrase","LanguageService","statusIndicatorLabels","Active","Expired","MarkingRequired","statusIndicatorColors","statusIndicatorTooltips","ShareStatusIndicator","props","status","markingRequired","share","determineStatus","tooltip","expireDate","localDate","DateHelper","formattedDate","getTooltip","color","Tooltip","title","spanHack","spanHackClassName","className","label","remainingDays","hint","smartCount","renderDisplayText","MySharesTableHeading","isFirst","Text","phrase","MySharesTableRow","shareData","sharedObject","isCollection","typeId","MasterType","appLink","AppLink","SharedObjectImage","object","showVideoMetadata","locationContext","imageOptions","size","showCollectionMask","showVideoCount","SharedObjectTitle","viewCount","SvgContainer","svgName","S","accessCount","pendingReview","ActionsDropdown","dropdownToggleSvgSize","actions","getObjectActions","dropdownToggleClassName","getDateShared","ShareType","recipients","dateCreated","datesCreated","date1","date2","ArrayHelper","MySharesTable","sentShares","sharedObjects","shareRecipients","groupByDate","interactivesPendingReviews","tableData","interactivesPendingReviewsMap","interactivesPendingReview","s","recipient","recipientId","dateShared","pendingReviewCount","privacy","headingIdx","hasDemoInsights","index","breakpoints","imageCdnUrl","yearGroups","MySharesTableEmptyState","src","application","action","text","PartialHeading","PartialRow","PartialMySharesTable","useSharesTable","interactiveInsights","shouldFetch","fetch","config","isAuthenticated","isFetchingSentShares","I","interactives","metadataId","filters","showPartialLoading","EN_US","ZH_CN","Locales","register","locale","func","SEC_ARRAY","toDate","input","Date","isNaN","test","parseInt","trim","replace","format","opts","sec","relativeDate","diff","localeFunc","agoIn","totalSec","Math","abs","idx","floor","unit"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[121],{93479:(e,t,r)=>{r.d(t,{I:()=>o});var n=r(99940);function a(e,t,r){if(!t)return e;var n="".concat(e,":").concat(t.start,":").concat(t.end),a=Array.isArray(t.userId)?t.userId.sort().join(":"):t.userId,i=Array.isArray(t.groupId)?t.groupId.sort().join(":"):t.groupId,o=Array.isArray(t.customerId)?t.customerId.sort().join(":"):t.customerId;return a&&(n+=":".concat(a)),i&&(n+=":".concat(i)),o&&(n+=":".concat(o)),r&&(n+=":".concat(r)),n}function i(e,t){return{currentUserId:e.id,currentCustomerId:e.customerId,dateRange:t?{start:t.start,end:t.end}:void 0,userIds:null==t?void 0:t.userId,classroomsAndGroups:null==t?void 0:t.groupId}}var o={interactiveResultSet:function(e,t,r,o,c,s,l,u){return{url:c?"/api/domain/v3/analytics/interactives/".concat(e,"/metadata/").concat(t):"/api/domain/v2/analytics/interactives/".concat(e,"/metadata/").concat(t),key:a("interactive:result:set:".concat(e,":").concat(t),o),data:i(r,o),type:n.k.POST,normalize:!1,success:s,error:l,always:u}},mark:function(e,t,r,a,i,o,c){return{url:"/api/domain/v1/analytics/answers/".concat(r),key:"mark:answer:".concat(r,":").concat(a.resultId),type:n.k.PUT,data:a,normalize:!1,invalidationKeys:"interactive:result:set:".concat(e,":").concat(t),success:i,error:o,always:c}},pendingReviews:function(e){return{url:"/api/domain/v1/analytics/interactives/pending-reviews/summary",key:"interactives:pending:reviews",type:n.k.POST,data:e}},interactiveResultsReport:function(e){return{url:"/api/domain/v3/analytics/interactives/report",key:"interactive:results:report",data:e,type:n.k.POST,normalize:!1}}}},2510:(e,t,r)=>{var n;r.d(t,{y:()=>n}),function(e){e.Link="Link",e.Classroom="Classroom",e.Open="Open",e.Live="Live"}(n||(n={}))},21789:(e,t,r)=>{r.d(t,{x:()=>o});var n=r(75896),a=r(110),i=r(4594),o={getFlattenedRecipients:function(e){return n.m.flatten(e.map((function(e){var t;return null!==(t=e.recipients)&&void 0!==t?t:[]})))},getFlattenedUniqueScopes:function(e){var t=o.getFlattenedRecipients(e);return n.m.uniq(t.map((function(e){var t;return null===(t=e.scopeId)||void 0===t?void 0:t.toString()}))).filter((function(e){return!!e}))},getClassroomIdFromShare:function(e){var t,r=null===(t=e.recipients)||void 0===t?void 0:t[0];if(r)return r.scopeId?r.scopeId.toString():r.recipientId&&r.recipientTypeId===i.E.Classroom?r.recipientId.toString():void 0},getClassroomForShare:function(e,t){var r=o.getClassroomIdFromShare(e);if(r)return t.find((function(e){return e.id.toString()===r.toString()}))},getRecipientsCount:function(e,t){var r,n,a,i;return t?null!==(i=null===(a=e.recipients)||void 0===a?void 0:a.filter((function(e){return e.recipientTypeId===t})).length)&&void 0!==i?i:0:null!==(n=null===(r=e.recipients)||void 0===r?void 0:r.length)&&void 0!==n?n:0},hasShareExpired:function(e){if(e.expireDate){var t=new Date,r=new Date(e.expireDate);if(a.O.isAfter(t,r))return!0}return!1},calculateDaysToExpiry:function(e){if(e.expireDate){var t=a.O.diffBetween(new Date(e.expireDate),new Date,"day")||1;return 0===t?1:t}}}},65853:(e,t,r)=>{r.d(t,{R:()=>p});var n=r(23481),a=r(110),i=r(4594),o=r(49080),c=r(26361),s=r(35223),l=r(31908);function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var d=n.T.encloseNamespace("share.shareLinkInfo"),p={getPrivateIconAndText:function(e){var t=e.entityTypeId,r=e.privacy,n=e.hasStudentExp,a=e.entity,o=e.yearGroups;if(t===i.E.Topic||t===i.E.Series)return{icon:s.vn.VisibleOn,text:d(n?"justMySchoolTeachers":"justMySchoolDescription")};if(!Array.isArray(r))switch(r.privacy){case"public":return{icon:s.vn.VisibleOn,text:d("publicDescription")};case"protected":return r.overrideRestrictions?{icon:s.vn.VisibleOn,text:d("clickViewOnly")}:{icon:s.vn.Lock,text:p.getRespectRatingText(a,o,n)};case"just_my_customer":return r.overrideRestrictions?{icon:s.vn.Lock,text:d(n?"justMySchoolTeachers":"justMySchoolDescription")}:{icon:s.vn.Lock,text:p.getRespectRatingText(a,o,n)};case"restricted":case"private":return{icon:s.vn.Lock,text:d("privateDescription")};default:return{}}},getIconAndText:function(e){var t=e.linkExpireDate,r=e.isPasswordProtected,n=e.status;if(!t&&!r)return p.getPrivateIconAndText(e);if(!t)return{icon:s.vn.Lock,text:d("password")};var i=a.O.isToday(t),c=a.O.diffBetween(t,new Date,"day");if(!r){var l=i?d("expiryToday"):d("expiry",{days:c});return n===o.F.Expired&&(l=d("expired")),{icon:s.vn.Timer,text:l}}var u=i?d("passwordExpiryToday"):d("passwordExpiry",{days:c});return n===o.F.Expired&&(u=d("passwordExpired")),{icon:s.vn.Lock,text:u}},getRespectRatingText:function(e,t,r){var n;if(!e||!t)return null;if(r)return d("justMySchoolTeachers");if(!l.M.isVideoType(e))return d("collectionRating");var a=c.l.getWeightedRestriction(null===(n=e._restrictions)||void 0===n?void 0:n.value);if(a&&!a.yearGroup)return d("onlyAdmins");var i,o,s,p=l.M.getRating(e),m=function(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return u(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?u(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},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(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){c=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(c)throw i}}}}(t);try{for(m.s();!(s=m.n()).done;){var y=s.value;(!i||y.value>i.value)&&(i=y),a&&y.value<=a.yearGroup||p&&y.rating.value<p.value||(!o||y.value<o.value)&&(o=y)}}catch(e){m.e(e)}finally{m.f()}return o?1===t.length?d("clickViewOnly"):o.value===i.value?d("maxYearGroup",{yearGroup:i.name}):d("yearGroupRange",{yearGroup:o.name}):d("onlyStaff")}}},39902:(e,t,r)=>{r.d(t,{FN:()=>y,SW:()=>v,fh:()=>m});var n=r(32735),a=r(20354),i=r(75896);function o(e){return function(e){if(Array.isArray(e))return s(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||c(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 c(e,t){if(e){if("string"==typeof e)return s(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?s(e,t):void 0}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function u(e,t,r){return(t=function(e){var t=function(e){if("object"!=l(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=l(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==l(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var d=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(n=Object.getOwnPropertySymbols(e);a<n.length;a++)t.indexOf(n[a])<0&&Object.prototype.propertyIsEnumerable.call(e,n[a])&&(r[n[a]]=e[n[a]])}return r},p=50;function m(e,t){var r=i.m.chunk(e,p).map((function(e){return t(i.m.uniq(e))})),n=a.a.useBasicFetchAll(r),o=i.m.flatten(n.data),c=n.data.length?o.reduce((function(e,t){return Object.assign(Object.assign({},e),u({},t.id,t))}),{}):null;return{itemsArr:o,items:c,isFetching:n.isFetching,hasCompleted:n.hasCompleted}}function y(e,t,r){var a=null!=r?r:function(e){return"object"===l(e)?e.id:e},i=v({getRequest:t,_getKey:r}),o=i.fetchItems,c=d(i,["fetchItems"]);return n.useEffect((function(){(null==e?void 0:e.length)&&o(e)}),[null==e?void 0:e.map(a).join(",")]),c}function v(e){var t,r,s,d,m,y=null!==(t=e._getKey)&&void 0!==t?t:function(e){return"object"===l(e)?e.id:e},v=n.useRef(new Set),f=(d=n.useState([]),m=2,function(e){if(Array.isArray(e))return e}(d)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,c=[],s=!0,l=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;s=!1}else for(;!(s=(n=i.call(r)).done)&&(c.push(n.value),c.length!==t);s=!0);}catch(e){l=!0,a=e}finally{try{if(!s&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(l)throw a}}return c}}(d,m)||c(d,m)||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.")}()),h=f[0],S=f[1],g=a.a.useBasicFetchAll(h),E=i.m.flatten(g.data),b=g.data.length?E.reduce((function(e,t){return Object.assign(Object.assign({},e),u({},y(t),t))}),{}):null;return{hasFirstRequestCompleted:!!(null===(s=null===(r=g.responses)||void 0===r?void 0:r[0])||void 0===s?void 0:s.hasCompleted),itemsArr:E,items:b,isFetching:g.isFetching,fetchItems:function(t){if(null==t?void 0:t.length){var r=[];t.forEach((function(e){var t=y(e);v.current.has(t)||(r.push(e),v.current.add(t))})),r.length&&S((function(t){return[].concat(o(t),o(i.m.chunk(r,p).map(e.getRequest)))}))}}}}},58647:(e,t,r)=>{r.r(t),r.d(t,{SharedByMeView:()=>ge});var n=r(32735),a=r(81886),i=r(23481),o=r(97958),c=i.T.encloseNamespace("share.sharedByMeEmptyState");function s(e){return n.createElement(o.u,null,n.createElement(o.u.Image,{src:e.imageUrl,size:"small"}),n.createElement(o.u.Heading,null,c(e.useInteractiveCopy?"interactivesHeading":"genericHeading")),n.createElement(o.u.Info,null,c(e.useInteractiveCopy?"interactivesInfo":"genericInfo")),!!e.appLink&&n.createElement(o.u.Cta,{appLink:e.appLink,text:c("cta")}))}var l=r(95834),u=r(6748),d=r(82602),p=r(75896),m=r(110),y=r(65858),v=r(83914),f=r(36532),h=r(49080),S=r(85063),g=r(35223);const E={indicatorContainer:"T6YAv",indicator:"_MRHG"};var b=i.T.encloseNamespace("share.shareStatusIndicator");function I(e){if(e.type===S.y.DirectShare)return b("active");switch(e.status){case h.F.Active:return b("active");case h.F.Expired:return b("expired")}}function O(e){if(e.type===S.y.DirectShare)return"bg-success";switch(e.status){case h.F.Active:return"bg-success";case h.F.Expired:return"bg-gray-500"}}function C(e){var t;return e.share.type!==S.y.DirectShare||(null===(t=e.share.recipients)||void 0===t?void 0:t.length)?e.share.type===S.y.ShareLink&&e.share.isPasswordProtected?n.createElement(f.u,{title:b("passwordProtected"),spanHack:!0},n.createElement(v.x,{svgName:g.vn.Lock,size:v.S.Small})):n.createElement(f.u,{title:I(e.share),spanHack:!0,spanHackClassName:E.indicatorContainer},n.createElement("div",{className:"".concat(E.indicator," ").concat(O(e.share))})):n.createElement(n.Fragment,null)}var T=r(9806),A=r(49863),w=r(31754),j=r(65853),N=r(64249),x=r(83657),k=r(15611),M=r(83345),R=r(62335),L=r(26339),H=r(4594),_=r(31908);function P(e){return P="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},P(e)}var F="share.sharedByMeTable",D=i.T.encloseNamespace(F);function V(e){var t;if(e.type===S.y.ShareLink||!(null===(t=null==e?void 0:e.recipients)||void 0===t?void 0:t.length))return e.dateCreated;var r=e.recipients.map((function(e){return e.dateShared}));return r.sort((function(e,t){return m.O.isSame(e,t)?0:m.O.isAfter(e,t)?1:-2})),r.length?p.m.last(r):""}function G(e){var t=e.index,r=e.dateHeading,a=e.getObjectAppLink,i=e.getObjectActions,o=e.imageCdnUrl,c=e.showStatus,s=e.showViewCount,l=e.breakpoints,u=e.yearGroups,p=l&&(l.xs||l.sm),m=[{Header:c?"":r,accessor:"sharedObject",id:"image",Cell:function(e){var t=e.value;return n.createElement("div",{className:"w-100"},n.createElement(T.k,{object:t,appLink:a(t),showVideoMetadata:!0,locationContext:y.LZ.SharedByMe}))},minWidth:140,maxWidth:30},{accessor:"sharedObject",id:"name",Cell:function(e){var t,r=e.value;if(r.name){if(_.M.isVideoType(r)&&!(null===(t=_.M.getCanBeConsumed(r))||void 0===t?void 0:t.canNavigate))return n.createElement("span",{className:"clamp-2"},r.name);var i=function(){switch(r.typeId){case H.E.Series:return"series";case H.E.Playlist:return"playlist"}}();return n.createElement("div",{className:"clamp-2"},i&&n.createElement(R.m,null,n.createElement(M.x,{namespace:F,phrase:i})),_.M.isVideoType(r)&&n.createElement(L.$,{type:"series",video:r,appLink:"series"in r&&r.series?a(r.series):null,analyticsOptions:{location:y.LZ.Insights}}),n.createElement(k.F,{appLink:a(r),analyticsData:{id:r.id,name:r.name},analyticsOptions:{entity:N.I.getAnalyticsEntity(r.type),actionType:y.Vw.Click,location:y.LZ.SharedByMe}},r.name))}return n.createElement("span",null,n.createElement(M.x,{namespace:F,phrase:"videoUnavailable"}))},width:60},{Header:0===t?D("sharedTo"):"",accessor:"sharedToData",Cell:function(e){var t=e.value,r=t.share,a=t.sharedObject,i=t.recipients;if(!i){var c=r.type===S.y.ShareLink&&j.R.getIconAndText({entity:a,entityTypeId:a.typeId,hasStudentExp:!1,isPasswordProtected:r.isPasswordProtected,linkExpireDate:r.linkExpireDate,privacy:{privacy:r.privacy,overrideRestrictions:r.overrideRestrictions},status:r.status,yearGroups:null!=u?u:[]});return n.createElement(A.Ad,{text:null==c?void 0:c.text})}return(null==i?void 0:i.length)?n.createElement(A.Kh,{recipients:i,imageCdnUrl:o,maxAvatars:p?1:2}):n.createElement(A.m9,null)},width:40},!p&&{Header:0===t?D("shared"):"",id:"dateShared",accessor:function(e){return(0,d.WU)(e.dateShared)},width:40},{accessor:"sharedObject",id:"actions",Cell:function(e){var t=e.value;return n.createElement(x.e,{actions:i(t),className:"w-100 justify-content-end pe-2"})},width:20}],v={Header:r,accessor:"share",id:"status",Cell:function(e){var t=e.value;return n.createElement(C,{share:t})},width:5},f={Header:D("views"),accessor:"viewCount",width:30};return c&&m.splice(0,0,v),s&&m.splice(m.length-1,0,f),m.filter(Boolean)}function U(e){var t,r,a,i,o,c,s,d,p=(t=e.sentShares,r=e.sharedObjects,a=e.shareRecipients,i=!!e.groupByDateShared,o=[],t.forEach((function(e){var t,n,i=null==r?void 0:r[e.objectId],c=null;e.type===S.y.DirectShare&&(c=[],null===(t=e.recipients)||void 0===t||t.forEach((function(e){var t=null==a?void 0:a[e.id];t&&c.push(t)}))),i&&o.push({share:e,sharedObject:i,sharedToData:{share:e,sharedObject:i,recipients:c},dateShared:V(e),viewCount:null!==(n=e.viewCount)&&void 0!==n?n:0})})),i?w.x.groupByDateShared(o):(c={},s=D("title"),d=o,(s=function(e){var t=function(e){if("object"!=P(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=P(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==P(t)?t:t+""}(s))in c?Object.defineProperty(c,s,{value:d,enumerable:!0,configurable:!0,writable:!0}):c[s]=d,c));return n.createElement(n.Fragment,null,Object.keys(p).map((function(t,r){return n.createElement(u.i,{key:r,columns:G({index:r,dateHeading:t,getObjectAppLink:e.getObjectAppLink,getObjectActions:e.getObjectActions,imageCdnUrl:e.imageCdnUrl,showStatus:e.showStatus,showViewCount:e.showViewCount,breakpoints:e.breakpoints,yearGroups:e.yearGroups}),data:p[t],theme:l.J})})))}var B=r(87801),Y=r(16714),W=r(79967),q=r(22902),K=r(79612),Q=r(37802),Z=r(99742),z=r(14070),X=r(97291),$=r(20354),J=r(1048),ee=r(93479),te=r(30439),re=r(39151),ne=r(1666),ae=r(31949),ie=r(39902),oe=r(60115),ce={getDirectShares:function(e){var t;return null!==(t=null==e?void 0:e.filter((function(e){return e.type===S.y.DirectShare})))&&void 0!==t?t:[]},getRecipients:function(e){return p.m.flatten(ce.getDirectShares(e).map((function(e){var t;return null!==(t=e.recipients)&&void 0!==t?t:[]})))}},se=r(86099),le=r(2523);const ue={imageColumn:"uIOaA",nameColumn:"Nta2B",sharedToColumn:"XTJBC",dateSharedColumn:"HdARK",actionsColumn:"DXyZw",heading:"XZ6o7",image:"MolfU",name:"MM43m",avatar:"EboYM",date:"by_XM",actions:"_S2M_"};function de(){return n.createElement("div",{className:"d-flex striped-row rounded"},n.createElement("div",{className:"d-flex align-items-center justify-content-center p-2 ".concat(ue.imageColumn)},n.createElement("div",{className:"partial-loading-background rounded w-100 ".concat(ue.image)})),n.createElement("div",{className:"d-flex align-items-center p-2 ".concat(ue.nameColumn)},n.createElement("div",{className:"partial-loading-background w-75 ".concat(ue.name)})),n.createElement("div",{className:"d-flex align-items-center p-2 ".concat(ue.sharedToColumn)},n.createElement("div",{className:"partial-loading-background ".concat(ue.avatar)})),n.createElement("div",{className:"d-none d-md-flex align-items-center p-2 ".concat(ue.dateSharedColumn)},n.createElement("div",{className:"partial-loading-background ".concat(ue.date)})),n.createElement("div",{className:"d-flex align-items-center justify-content-end p-2 ".concat(ue.actionsColumn)},n.createElement("div",{className:"partial-loading-background rounded me-2 ".concat(ue.actions)})))}function pe(e){return n.createElement("div",{className:"d-flex mb-1"},n.createElement("div",{className:"".concat(ue.imageColumn," p-2")},n.createElement("div",{className:"partial-loading-background ".concat(ue.heading)})),n.createElement("div",{className:"".concat(ue.nameColumn," p-2")}," "),n.createElement("div",{className:"".concat(ue.sharedToColumn," p-2")},e.fullHeader?n.createElement("div",{className:"partial-loading-background ".concat(ue.heading)}):n.createElement(n.Fragment,null," ")),n.createElement("div",{className:"".concat(ue.dateSharedColumn," p-2 d-none d-md-flex")},e.fullHeader?n.createElement("div",{className:"partial-loading-background ".concat(ue.heading)}):n.createElement(n.Fragment,null," ")),n.createElement("div",{className:"".concat(ue.actionsColumn," p-2")}," "))}function me(){return n.createElement(n.Fragment,null,n.createElement("div",{className:"mb-3"},n.createElement(pe,{fullHeader:!0}),n.createElement("div",{className:"striped-list no-full-width"},n.createElement(de,null),n.createElement(de,null),n.createElement(de,null))),n.createElement("div",{className:"mb-3"},n.createElement(pe,null),n.createElement("div",{className:"striped-list no-full-width"},n.createElement(de,null),n.createElement(de,null),n.createElement(de,null),n.createElement(de,null))),n.createElement("div",{className:"mb-3"},n.createElement(pe,null),n.createElement("div",{className:"striped-list no-full-width"},n.createElement(de,null),n.createElement(de,null),n.createElement(de,null),n.createElement(de,null),n.createElement(de,null),n.createElement(de,null),n.createElement(de,null),n.createElement(de,null),n.createElement(de,null),n.createElement(de,null))))}var ye=r(70227),ve=i.T.encloseNamespace("liteShare.sharedByMe");function fe(e,t){return{label:ve("editShareSettings"),appLink:{application:X.O.SHARE,action:z.e.Share.SHARE,args:[e.id],params:{entityType:t}}}}function he(e){return n.createElement(f.u,{title:e.label,spanHack:!0},n.createElement("a",{href:e.url,target:"_blank"},n.createElement(v.x,{svgName:g.vn.Analytics})))}var Se=i.T.encloseNamespace("liteShare.sharedByMe");function ge(){var e=(0,q.T)().hasPermissions,t=(0,Q.r)(null).hasShareFlowV2,r=(0,W.k)(),i=function(e,t){var r,n,a=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],i=$.a.useGetFetch(),o=$.a.useBasicFetch(ae.N.currentUser()),c=$.a.useBasicFetch(re.L.config()),s=$.a.useBasicFetch((null===(r=o.data)||void 0===r?void 0:r.isAuthenticated)&&ne.h.yearGroups(o.data.customerId)),l=function(t){return a&&te.o.sentShare(Object.assign({cursor:t},e))},u=function(e){return i(l(e))},d=(0,oe.K)(l,u),p=d.items,m=d.hasMore,y=d.isFetching,v=d.nextCursor,f=d.hasFirstPageCompleted,h=(0,ie.FN)(null==p?void 0:p.map((function(e){return e.objectId})),te.o.sharedObjectsById),S=(0,ie.FN)(ce.getRecipients(p).map((function(e){return e.id})),(function(e){return te.o.getRecipientsById(e,o.data.customerId)})),g=(0,ie.FN)(t?J.t.values(h.items||[]):[],(function(e){return ee.I.pendingReviews({interactives:e.filter(_.M.isInteractive).map((function(e){return{interactiveId:e.interactiveId,metadataId:e.id}})),filters:{currentCustomerId:o.data.customerId,currentUserId:o.data.id}})}),(function(e){return"".concat(e.id,":").concat(e.interactiveId)})),E=y||h.isFetching||S.isFetching||g.isFetching||s.isFetching,b=!f||(null==p?void 0:p.length)&&!h.hasFirstRequestCompleted;return{sentShares:p,sharedObjects:h,shareRecipients:S,yearGroups:s.data,interactivesPendingReview:g,isFetching:E,showPartialLoading:b,nextCursor:v,hasMore:m,fetchNext:u,imageCdnUrl:null===(n=c.data)||void 0===n?void 0:n.imageCdnUrl}}(),o=i.sentShares,c=i.sharedObjects,l=i.shareRecipients,u=i.isFetching,d=i.showPartialLoading,p=i.nextCursor,m=i.hasMore,y=i.fetchNext,v=i.imageCdnUrl,f=i.yearGroups,h=e(Y.C.ViewMyShares)&&t;n.useEffect((function(){h&&a.Q.C$.trigger({application:X.O.MY_SHARES,action:z.e.MyShares.HOME},{replace:!0})}),[h]),(0,K.M)({title:Se("sharedByMe")});var S=function(e){var t=$.a.useBasicFetch(re.L.config()),r=e.xs||e.sm;return n.useCallback((function(e){return function(e,t,r){var a,i="viewUsage";if(_.M.isVideo(e)&&(a="video"),_.M.isInteractive(e)&&(a="interactive",i="viewResults"),_.M.isClip(e)&&(a="clip"),e.typeId===H.E.Series&&(a="series"),e.typeId===H.E.Playlist&&(a="playlist"),_.M.isVideoType(e)&&!_.M.getCanBeConsumed(e).canConsume)return[];var o=[fe(e,a)],c=ye.c.getObjectUrl(r,e);return c&&o.push({label:t?ve(i):function(){return n.createElement(he,{label:ve(i),url:c})},className:"btn btn-link",button:!t,href:ye.c.getObjectUrl(r,e),openInNewTab:!0}),o}(e,r,t.data)}),[r])}(r);return n.createElement("div",{className:"px-3"},!h&&n.createElement(le.w,null),d?n.createElement(me,null):o.length?n.createElement(n.Fragment,null,n.createElement(U,{sentShares:o,sharedObjects:c.items,shareRecipients:l.items,getObjectAppLink:se.Qh,getObjectActions:S,groupByDateShared:!0,breakpoints:r,yearGroups:f,imageCdnUrl:v}),(m||u)&&n.createElement(B._,{isFetching:u,fetchNext:y,nextCursor:p})):n.createElement(s,{appLink:{application:X.O.DASHBOARD,action:z.e.Dashboard.HOME},imageUrl:Z.W.EmptyStates.Share.SHARED_WITH_ME}))}},86099:(e,t,r)=>{r.d(t,{BR:()=>b,Qh:()=>v,Rv:()=>h,Sj:()=>S,Zm:()=>E,pY:()=>f,rq:()=>g});var n=r(28400),a=r(2510),i=r(21789),o=r(4594),c=r(31908),s=r(14070),l=r(97291),u=r(40254),d=r(82431);function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}function m(e,t,r){return(t=function(e){var t=function(e){if("object"!=p(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=p(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==p(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var y=[o.E.Video,o.E.Clip,o.E.Interactive];function v(e){return c.M.isInteractive(e)?{application:l.O.INTERACTIVES,action:s.e.Interactives.VIEW_INTERACTIVE,args:[e.id,n.m.slugify(e.name)]}:c.M.isClip(e)?{application:l.O.CLIPS,action:s.e.Clips.PLAY_CLIP,args:[e.id,n.m.slugify(e.name)]}:c.M.isVideo(e)?{application:l.O.VIDEOS,action:s.e.Videos.PLAY_VIDEO,args:[e.id,n.m.slugify(e.name)]}:e.typeId===o.E.Playlist?{application:l.O.PLAYLISTS,action:s.e.Playlists.PLAYLIST,args:[e.id,n.m.slugify(e.name)]}:e.typeId===o.E.Series?d.j.getSeriesAppLink(e):void 0}function f(e,t){if(!e)return null;if(!y.includes(e.objectTypeId))return v({id:e.objectId.toString(),typeId:e.objectTypeId});if(e.type===a.y.Classroom){var r=i.x.getClassroomIdFromShare(e);return{application:l.O.CLASSROOMS,action:s.e.Classrooms.INSIGHTS_OVERVIEW,args:[r,e.shareId],params:t}}return e.type===a.y.Open?{application:l.O.CLASSROOMS,action:s.e.Classrooms.OPEN_CLASSROOM_INSIGHTS_OVERVIEW,args:[e.shareId],params:t}:{application:l.O.MY_SHARES,action:s.e.MyShares.INSIGHTS_OVERVIEW,args:[e.shareId],params:t}}function h(e,t){if(!e)return null;if(!y.includes(e.objectTypeId))return v({id:e.objectId.toString(),typeId:e.objectTypeId});if(e.type===a.y.Classroom){var r=i.x.getClassroomIdFromShare(e);return{application:l.O.CLASSROOMS,action:s.e.Classrooms.INSIGHTS_HEATMAP,args:[r,e.shareId],params:t}}return e.type===a.y.Open?{application:l.O.CLASSROOMS,action:s.e.Classrooms.OPEN_CLASSROOM_INSIGHTS_HEATMAP,args:[e.shareId],params:t}:{application:l.O.MY_SHARES,action:s.e.MyShares.INSIGHTS_HEATMAP,args:[e.shareId],params:t}}function S(e,t){if(!e)return null;if(!y.includes(e.objectTypeId))return v({id:e.objectId.toString(),typeId:e.objectTypeId});if(e.type===a.y.Classroom){var r=i.x.getClassroomIdFromShare(e);return{application:l.O.CLASSROOMS,action:s.e.Classrooms.INSIGHTS_QUESTIONS,args:[r,e.shareId],params:t}}return e.type===a.y.Open?{application:l.O.CLASSROOMS,action:s.e.Classrooms.OPEN_CLASSROOM_INSIGHTS_QUESTIONS,args:[e.shareId],params:t}:{application:l.O.MY_SHARES,action:s.e.MyShares.INSIGHTS_QUESTIONS,args:[e.shareId],params:t}}function g(e,t){if(!e)return null;if(!y.includes(e.objectTypeId))return v({id:e.objectId.toString(),typeId:e.objectTypeId});if(e.type===a.y.Classroom){var r=i.x.getClassroomIdFromShare(e);return{application:l.O.CLASSROOMS,action:s.e.Classrooms.INSIGHTS_STUDENTS,args:[r,e.shareId],params:t}}return e.type===a.y.Open?{application:l.O.CLASSROOMS,action:s.e.Classrooms.OPEN_CLASSROOM_INSIGHTS_STUDENTS,args:[e.shareId],params:t}:{application:l.O.MY_SHARES,action:s.e.MyShares.INSIGHTS_STUDENTS,args:[e.shareId],params:t}}function E(e){if(e){var t=I(e);return e.type===a.y.Link?{application:l.O.SHARE,action:s.e.Share.SHARE,args:[e.objectId],params:{entityType:t}}:u.W.assignDetails({objectId:e.objectId.toString(),shareId:e.shareId,entityType:t})}}function b(e){if(e){var t=I(e);if(e.type===a.y.Link)return{application:l.O.SHARE,action:s.e.Share.DELETE_SHARE_LINK,args:[e.objectId],params:{entityType:t,previousAppLink:{application:l.O.MY_SHARES,action:s.e.MyShares.HOME}}};var r=m(m(m(m({},a.y.Classroom,s.e.Share.DELETE_ASSIGNMENT),a.y.Open,s.e.Share.DELETE_OPEN_CLASSROOM),a.y.Link,""),a.y.Live,""),n=m(m(m(m({},a.y.Classroom,s.e.Classrooms.CLASSROOM_HOME),a.y.Open,s.e.Classrooms.OPEN_CLASSROOMS),a.y.Link,""),a.y.Live,""),o=r[e.type],c=n[e.type];if(o&&c)return{application:l.O.SHARE,action:o,args:[e.shareId],params:{previousAppLink:{application:l.O.CLASSROOMS,action:c,args:[i.x.getClassroomIdFromShare(e)]}}}}}function I(e){return e.objectTypeId===o.E.Video?"video":e.objectTypeId===o.E.Interactive?"interactive":e.objectTypeId===o.E.Clip?"clip":e.objectTypeId===o.E.Series?"series":e.objectTypeId===o.E.Playlist?"playlist":void 0}}}]);
2
- //# sourceMappingURL=121-bf7a153eb8-lite.chunk.js.map