@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/4025-306e0fbdd5-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/utils/AnalyticsFilterUtils.ts","file:///app/packages/libs/shared/src/apps/playlists/utils/PlaylistHelper.ts","file:///app/packages/libs/shared/src/apps/share-v2/enums/ShareType.ts","file:///app/packages/libs/shared/src/apps/share-v2/utils/ShareHelper.ts","file:///app/packages/libs/shared/src/apps/share/components/shared-object-image/shared-object-image.scss","file:///app/packages/libs/shared/src/apps/share/components/shared-object-image/SharedObjectImage.tsx","file:///app/packages/libs/shared/src/apps/share/components/shared-object-title/SharedObjectTitle.tsx","file:///app/packages/libs/shared/src/components/thumbnails/collection/title/collection-thumbnail-title.scss","file:///app/packages/libs/shared/src/components/thumbnails/collection/title/CollectionThumbnailTitle.tsx","file:///app/packages/libs/shared/src/components/thumbnails/collection/collection-thumbnail.scss","file:///app/packages/libs/shared/src/components/thumbnails/collection/CollectionThumbnail.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/my-shares/MySharesViewUtils.ts","file:///app/packages/projects/lite/src/shared/utils/ObjectAppLinkHelper.ts"],"sourcesContent":["import { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AudienceQueryParams } from 'libs/shared/apps/analytics/interfaces/AudienceQueryParams';\nimport { DateRangeQueryParams } from 'libs/shared/apps/analytics/interfaces/DateRangeQueryParams';\nimport { ContextService } from 'libs/shared/services/ContextService';\n\nexport const AnalyticsFilterHelper = {\n getAudienceAppLinkParams: () => {\n const { appLink } = ContextService.getCurrentRoute();\n const params = ObjectHelper.isObject(appLink.params) ? appLink.params as HashObject : {};\n const { users, classrooms, classroomGroups } = params;\n\n const getParam = (key: keyof AudienceQueryParams) => {\n const param = params[key];\n\n if (!param)\n return;\n\n return Array.isArray(param) ? param : [param];\n };\n\n const audienceFilters: AudienceQueryParams = {};\n\n if (users)\n audienceFilters.users = getParam('users');\n\n if (classrooms)\n audienceFilters.classrooms = getParam('classrooms');\n\n if (classroomGroups)\n audienceFilters.classroomGroups = getParam('classroomGroups');\n\n return audienceFilters;\n },\n getDateRangeAppLinkParams: () => {\n const { appLink } = ContextService.getCurrentRoute();\n const params = ObjectHelper.isObject(appLink.params) ? appLink.params as HashObject : {};\n const { from, to, rangeName } = params;\n\n const dateRangeFilters: DateRangeQueryParams = {};\n\n if (from)\n dateRangeFilters.from = from;\n\n if (to)\n dateRangeFilters.to = to;\n\n if (rangeName)\n dateRangeFilters.rangeName = rangeName;\n\n return dateRangeFilters;\n }\n};","import { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BaseObject, CurrentUser, Playlist } from 'libs/shared/interfaces';\n\nexport const PlaylistHelper = {\n isPlaylist(obj: BaseObject): obj is Playlist {\n return obj?.typeId === MasterType.Playlist;\n },\n\n isOwner(playlist: Playlist, currentUser: CurrentUser): boolean {\n if (!currentUser || !playlist || ObjectHelper.isEmpty(playlist._liteOwner))\n return false;\n\n return playlist._liteOwner.id.toString() === currentUser.id?.toString();\n },\n\n getVideoCount(playlist: Playlist): number {\n if (!playlist)\n return;\n\n let count = 0;\n\n if (playlist.videos?.count)\n count += playlist.videos.count;\n\n if (playlist.clips?.count)\n count += playlist.clips.count;\n\n if (playlist.interactives?.count)\n count += playlist.interactives.count;\n\n return count;\n }\n};","export enum ShareType {\n Link = 'Link',\n Classroom = 'Classroom',\n Open = 'Open',\n Live = 'Live'\n}","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareRecipient } from 'libs/shared/apps/share-v2/interfaces/ShareRecipient';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { Classroom } from 'libs/shared/interfaces';\n\nexport const ShareHelper = {\n getFlattenedRecipients(shares: Share[]): ShareRecipient[] {\n return ArrayHelper.flatten(shares.map(s => s.recipients ?? []));\n },\n\n getFlattenedUniqueScopes(shares: Share[]): string[] {\n const recipients = ShareHelper.getFlattenedRecipients(shares);\n return ArrayHelper.uniq(recipients.map(r => r.scopeId?.toString())).filter(x => !!x);\n },\n \n getClassroomIdFromShare(share: Share): string | undefined {\n const firstRecipient = share.recipients?.[0];\n \n if (!firstRecipient) return;\n \n if (firstRecipient.scopeId)\n return firstRecipient.scopeId.toString();\n \n if (firstRecipient.recipientId && firstRecipient.recipientTypeId === MasterType.Classroom)\n return firstRecipient.recipientId.toString();\n },\n\n getClassroomForShare(share: Share, classrooms: Classroom[]): Classroom | undefined {\n const classroomId = ShareHelper.getClassroomIdFromShare(share);\n \n if (!classroomId) return;\n \n return classrooms.find(classroom => classroom.id.toString() === classroomId.toString());\n },\n\n getRecipientsCount(share: Share, type?: MasterType.ClassroomGroup | MasterType.User): number {\n if (!type) return share.recipients?.length ?? 0;\n \n return share.recipients?.filter(r => r.recipientTypeId === type).length ?? 0;\n },\n\n hasShareExpired(share: Share): boolean {\n if (share.expireDate) {\n const now = new Date();\n const expireDate = new Date(share.expireDate);\n\n if (DateHelper.isAfter(now, expireDate))\n return true;\n }\n\n return false;\n },\n\n calculateDaysToExpiry(share: Share): number | undefined {\n if (!share.expireDate) return;\n\n const remainingDays = DateHelper.diffBetween(new Date(share.expireDate), new Date(), 'day') || 1;\n const smartCount = remainingDays === 0 ? 1 : remainingDays; // Prevent zero count\n\n return smartCount;\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"thumbnailFallbackSvg\":\"D4JFs\",\"posterFallbackSvg\":\"bjUWl\",\"coverFallbackSvg\":\"kdLpt\",\"thumbnailContainer\":\"d3CKN\",\"insightsMask\":\"KM76U\",\"requireMarking\":\"peLH7\",\"badge\":\"mVu0E\",\"bar\":\"zO3MS\",\"a\":\"K1jW5\",\"expandBar\":\"YITJl\",\"b\":\"tCpLF\",\"c\":\"lC0cq\"};","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CollectionThumbnail } from 'libs/shared/components/thumbnails/collection/CollectionThumbnail';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { BaseObject, Image, Playlist, Series } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper, ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './shared-object-image.scss';\n\nconst namespace = 'shared.sharedObjectImage';\n\nconst BASE_IMAGE_CLASS_NAME = 'rounded overflow-hidden';\n\ninterface ImageProps {\n image: Image;\n imageType: ImageType;\n imageClassName?: string;\n imageFallbackComponent: JSX.Element;\n}\n\nfunction getImageProps(object: BaseObject): ImageProps {\n const image = ImageHelper.getDisplayImageFromObject(object);\n\n if (VideoHelper.isVideoType(object))\n return {\n image,\n imageType: ImageType.Thumbnails,\n imageClassName: BASE_IMAGE_CLASS_NAME,\n imageFallbackComponent: <ImageFallback type={ImageFallbackType.Video} />\n };\n\n switch (object.typeId) {\n case MasterType.Series:\n return {\n image,\n imageType: ImageType.TallPosters,\n imageClassName: BASE_IMAGE_CLASS_NAME,\n imageFallbackComponent:\n <ImageFallback type={ImageFallbackType.Series} svgContainerClassName={styles.posterFallbackSvg} />\n };\n\n case MasterType.Playlist:\n return {\n image,\n imageType: ImageType.Covers,\n imageClassName: !image?.url\n ? `${BASE_IMAGE_CLASS_NAME} ${getBgColorClass(object.name, BG_COLOUR_CLASS_NAMES)}`\n : BASE_IMAGE_CLASS_NAME,\n imageFallbackComponent: (\n <ImageFallback\n type={ImageFallbackType.Playlist}\n svgContainerClassName={image?.url ? styles.coverFallbackSvg : 'd-none'}\n extraClasses={!image?.url && 'bg-transparent'}\n />\n )\n };\n }\n}\n\nfunction InsightsMask() {\n return (\n <div className={`d-flex pointer-events-none position-absolute bottom-0 start-0 h-100 w-100 z-1 justify-content-center align-items-center`}>\n <div className='position-absolute bg-dark bg-gradient opacity-50 w-100 h-100 z-0 rounded-3'></div>\n <div className='d-flex align-items-end gap-2 h-50 z-1'>\n <div className='d-flex align-items-end h-50'>\n <div className={`${styles.bar} ${styles.a} rounded shadow`}></div>\n </div>\n <div className='d-flex align-items-end h-75'>\n <div className={`${styles.bar} ${styles.b} rounded shadow`}></div>\n </div>\n <div className='d-flex align-items-end h-100'>\n <div className={`${styles.bar} ${styles.c} rounded shadow`}></div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction getImageRatio(object: BaseObject): ImageFallbackType {\n if (VideoHelper.isVideoType(object))\n return 16 / 9;\n\n if (object.typeId === MasterType.Playlist)\n return 1;\n\n if (object.typeId === MasterType.Series)\n return 9 / 16;\n}\n\nSharedObjectImage.defaultProps = {\n imageOptions: { size: ImageSize.Small }\n};\n\ninterface SharedObjectImageProps {\n object: BaseObject;\n locationContext: LocationContext;\n appLink?: Core.AppLink;\n showVideoMetadata?: boolean;\n fixedHeight?: boolean;\n requireMarking?: number;\n imageOptions?: ImageOptions;\n showInsightsMask?: boolean;\n showCollectionMask?: boolean;\n showVideoCount?: boolean;\n thumbnailSize?: 'sm' | 'md';\n imageClassName?: string;\n hideBottomBar?: boolean;\n}\n\nexport function SharedObjectImage(props: SharedObjectImageProps): JSX.Element {\n const ref = React.useCallback((el: HTMLDivElement) => {\n if (!el || !props.fixedHeight)\n return;\n\n el.style.width = `${el.offsetHeight * getImageRatio(props.object)}px`;\n }, []);\n\n const useVideoThumbnail = VideoHelper.isVideoType(props.object);\n\n const {\n image,\n imageType,\n imageClassName,\n imageFallbackComponent\n } = getImageProps(props.object);\n\n const thumbnailMetadata = !props.showVideoMetadata ? {\n hideDuration: true,\n hideMask: true,\n hideRating: true,\n hideVideoBadgeType: true,\n hideBottomBar: true\n } : {\n hideBottomBar: props.hideBottomBar\n };\n\n return (\n <div className='d-flex align-items-center justify-content-center w-100 h-100'>\n <div ref={ref} className={props.fixedHeight ? 'h-100' : 'w-100'}>\n {useVideoThumbnail &&\n <div className={`${styles.thumbnailContainer} position-relative`}>\n {props.showInsightsMask && <InsightsMask />}\n <AppLink appLink={props.appLink}>\n <VideoThumbnail\n video={props.object}\n size={props.thumbnailSize}\n imageOptions={props.imageOptions}\n textPosition={ThumbnailTextPosition.Independent}\n type='cosmetic'\n imageClassName={props.imageClassName}\n {...thumbnailMetadata}\n />\n </AppLink>\n {!!props.requireMarking && (\n <div className={`${props.showInsightsMask && styles.requireMarking} position-absolute bottom-0 end-0 z-1 m-2`}>\n <div className={`${styles.badge} d-flex align-items-center bg-light-ultramarine text-ultramarine fw-semibold rounded-pill w-fit mt-1 px-2`}>\n <Text namespace={namespace} phrase='requireMarking' options={{ smartCount: props.requireMarking }} />\n </div>\n </div>\n )}\n </div>\n }\n {!useVideoThumbnail &&\n <>\n {'videos' in (props.object as Playlist | Series) ? (\n <CollectionThumbnail\n collection={props.object}\n imageOptions={props.imageOptions}\n appLink={props.appLink}\n analyticsData={{\n id: props.object.id,\n name: props.object.name\n }}\n analyticsOptions={{\n entity: ShareViewHelper.getAnalyticsEntity(props.object.type),\n actionType: UserAction.Click,\n location: props.locationContext\n }}\n showMask={props.showCollectionMask}\n showVideoCount={props.showVideoCount}\n />\n ) : (\n <BaseImage\n data={image?.url}\n imageType={imageType}\n imageOptions={props.imageOptions}\n appLink={props.appLink}\n className={imageClassName}\n analyticsData={{\n id: props.object.id,\n name: props.object.name\n }}\n analyticsOptions={{\n entity: ShareViewHelper.getAnalyticsEntity(props.object.type),\n actionType: UserAction.Click,\n location: props.locationContext\n }}\n >\n {imageFallbackComponent}\n </BaseImage>\n )}\n </>\n }\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { SharableEntity, ShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BaseObject } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nconst namespace = 'shared.sharedObjectTitle';\n\ninterface SharedObjectTitleProps {\n sharedObject: SharableEntity;\n getObjectAppLink?: (object: BaseObject) => Core.AppLink;\n titleClassName?: string;\n subTextClassName?: string;\n}\n\nexport function SharedObjectTitle(props: SharedObjectTitleProps) {\n const { sharedObject, titleClassName, subTextClassName } = props;\n const subTextPhrase = getSubTextPhrase();\n const titleAppLink = props.getObjectAppLink?.(sharedObject);\n\n if (!sharedObject.name) {\n return <Text namespace={namespace} phrase='videoUnavailable' />;\n }\n\n if (VideoHelper.isVideoType(sharedObject) && !VideoHelper.getCanBeConsumed(sharedObject)?.canNavigate) {\n return (\n <span className={`clamp-2 ${titleClassName ?? ''}`}>\n {sharedObject.name}\n </span>\n );\n }\n\n function getSubTextPhrase(): string {\n switch (sharedObject.typeId) {\n case MasterType.Series: return 'series';\n case MasterType.Playlist: return 'playlist';\n }\n }\n\n return (\n <div>\n {VideoHelper.isVideoType(sharedObject) && (\n <VideoSubText\n type='series'\n video={sharedObject}\n appLink={'series' in sharedObject && sharedObject.series ? props.getObjectAppLink?.(sharedObject.series) : null}\n analyticsOptions={{ location: LocationContext.Insights }}\n className={`d-inline clamp-1 ${subTextClassName ?? ''}`}\n />\n )}\n\n { subTextPhrase &&\n <TitleSubText>\n <Text namespace={namespace} phrase={subTextPhrase} />\n </TitleSubText>\n }\n\n { titleAppLink ? (\n <AppLink\n appLink={titleAppLink}\n className='clamp-1'\n analyticsData={{ id: sharedObject.id, name: sharedObject.name }}\n analyticsOptions={{\n entity: ShareViewHelper.getAnalyticsEntity(sharedObject.type),\n actionType: UserAction.Click,\n location: LocationContext.MyShares\n }}\n >\n <span className={`clamp-2 ${titleClassName ?? ''}`}>\n {sharedObject.name}\n </span>\n </AppLink>\n ) : (\n <span className={`clamp-2 ${titleClassName ?? ''}`}>\n {sharedObject.name}\n </span>\n )}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"thumbnailTitle\":\"OsWjL\"};","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './collection-thumbnail-title.scss';\n\ninterface BaseCollectionThumbnailTitleProps {\n title: string;\n}\n\nfunction BaseCollectionThumbnailTitle(props: BaseCollectionThumbnailTitleProps): JSX.Element {\n return (\n <h3 title={props.title} className='h6'>{props.title}</h3>\n );\n}\n\ninterface CollectionThumbnailTitleProps extends BaseCollectionThumbnailTitleProps {\n appLink: Core.AppLink;\n}\n\nexport function CollectionThumbnailTitle(props: CollectionThumbnailTitleProps) {\n if (!props.appLink) {\n return (\n <BaseCollectionThumbnailTitle {...props} />\n );\n }\n \n return (\n <AppLink appLink={props.appLink} className={`${styles.thumbnailTitle}`}>\n <BaseCollectionThumbnailTitle {...props} />\n </AppLink>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"badge\":\"M4zat\",\"mask\":\"r0Ztg\",\"thumbnailContainer\":\"uD9dz\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsOptions, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CollectionThumbnailTitle } from 'libs/shared/components/thumbnails/collection/title/CollectionThumbnailTitle';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { Playlist, Series } from 'libs/shared/interfaces';\nimport { ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './collection-thumbnail.scss';\n\nconst namespace = 'shared.collectionThumbnail';\n\ntype SupportedContentType = Playlist | Series;\n\ninterface CollectionThumbnailProps {\n appLink?: Core.AppLink\n collection: SupportedContentType;\n imageOptions?: ImageOptions;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n showMask?: boolean;\n showVideoCount?: boolean;\n title?: string;\n titleAppLink?: Core.AppLink;\n subText?: string;\n subTextAppLink?: Core.AppLink;\n hoverText?: string;\n}\n\nexport function CollectionThumbnail(props: CollectionThumbnailProps) {\n function getFirstVideo() {\n let collectionVideos = props.collection?.videos;\n\n if (!collectionVideos)\n return;\n\n if (!collectionVideos.count && props.collection.typeId === MasterType.Playlist) {\n const playlist = props.collection as Playlist;\n\n if (playlist.clips.count)\n collectionVideos = playlist.clips;\n\n if (playlist.interactives.count)\n collectionVideos = playlist.interactives;\n }\n\n return ArrayHelper.first(collectionVideos.data);\n }\n\n function getVideoCount() {\n let totalCount = 0;\n\n if (props.collection.videos && props.collection.videos.count) {\n totalCount += props.collection.videos.count;\n }\n\n if (props.collection.typeId === MasterType.Playlist) {\n const playlist = props.collection as Playlist;\n\n if (playlist.interactives?.count)\n totalCount += playlist.interactives.count;\n\n if (playlist.clips?.count)\n totalCount += playlist.clips.count;\n }\n\n return totalCount;\n }\n\n function getEntityType(collection: SupportedContentType) {\n if (MasterTypeHelper.isType<Playlist>(collection, MasterType.Playlist)) {\n return EntityType.Playlist;\n }\n\n if (MasterTypeHelper.isType<Series>(collection, MasterType.Series)) {\n return EntityType.Series;\n }\n }\n\n const firstVideo = getFirstVideo();\n const videoCount = getVideoCount();\n const showTexts = props.title?.length || props.subText?.length;\n\n const analyticsData = {\n id: props.collection.id.toString(),\n name: props.collection.name,\n\n ...props.analyticsData\n };\n\n const analyticsOptions = {\n actionType: UserAction.Click,\n entity: getEntityType(props.collection),\n \n ...props.analyticsOptions\n };\n\n return (\n <div>\n <div className={`position-relative ${styles.thumbnailContainer} z-1`}>\n <AppLink\n appLink={props.appLink}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n preventFocus\n >\n {props.showMask &&\n <div className={`${styles.mask} position-absolute w-100 h-100 rounded-3 bg-dark bg-gradient z-1 bg-opacity-50 pointer-events-none`}>\n <div className={`${styles.badge} d-flex align-items-center w-fit flex-grow-0 bg-dark rounded-pill ps-1 m-2`}>\n <SvgContainer svgName={cvSvgLibrary.Play} className='svg-container text-white' />\n <p className='d-inline fw-medium text-white mb-0'>\n {props.hoverText?.length ?\n <span>{props.hoverText}</span> :\n <Text namespace={namespace} phrase='playAll' />\n }\n </p>\n </div>\n </div>\n }\n\n {firstVideo &&\n <VideoThumbnail\n video={firstVideo}\n imageOptions={props.imageOptions}\n textPosition={ThumbnailTextPosition.Independent}\n type='cosmetic'\n hideMask\n hideRating\n hideDuration\n hideVideoTypeBadge\n />\n }\n\n {!firstVideo &&\n <div className='ratio ratio-16x9 bg-light rounded-3'>\n <div className='d-flex justify-content-center align-items-center'>\n <SvgContainer svgName={cvSvgLibrary.Play} className='w-33 opacity-25 text-gray-400' />\n </div>\n </div>\n }\n\n {props.showVideoCount &&\n <div className={`${styles.badge} d-flex align-items-center w-fit bg-dark bg-opacity-75 rounded-pill position-absolute bottom-0 end-0 ps-1 m-2`}>\n <SvgContainer svgName={cvSvgLibrary.Series} className='svg-container text-white me-1' />\n <p className='d-inline fw-semibold text-white mb-0'>\n <Text namespace={namespace} phrase='videos' options={{ count: videoCount, smartCount: videoCount }} />\n </p>\n </div>\n }\n </AppLink>\n\n </div>\n \n {showTexts &&\n <div className='mt-2 d-flex flex-column'>\n {props.subText &&\n <TitleSubText title={props.subText} appLink={props.subTextAppLink}>\n {props.subText}\n </TitleSubText>\n }\n {props.title &&\n <CollectionThumbnailTitle\n title={props.collection.name}\n appLink={props.titleAppLink}\n />\n }\n </div>\n }\n </div>\n );\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EventVersion, ShareDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { AudienceQueryParams } from 'libs/shared/apps/analytics/interfaces/AudienceQueryParams';\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { PlaylistHelper } from 'libs/shared/apps/playlists/utils/PlaylistHelper';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject } from 'libs/shared/interfaces';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { SeriesHelper } from 'libs/shared/utils/SeriesHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { getObjectAppLink } from 'shared/utils/ObjectAppLinkHelper';\nimport { getDeleteShareAppLink, getInsightsOverviewAppLink, getShareOptionsAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nconst namespace = 'myShares.myShares';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function hasInsightsActions(sharedObject: BaseObject): boolean {\n return (\n MasterTypeHelper.isType(sharedObject, MasterType.Video) ||\n MasterTypeHelper.isType(sharedObject, MasterType.Clip) ||\n MasterTypeHelper.isType(sharedObject, MasterType.Interactive)\n );\n}\n\ninterface ShareObjectActionsOptions {\n share: Share;\n sharedObject: BaseObject;\n audienceParams?: AudienceQueryParams;\n hasInsights?: boolean;\n isPlugin?: boolean;\n breakpoints?: Breakpoints;\n hideShareOptionsActions?: boolean;\n}\n\nexport function getShareObjectActions(options: ShareObjectActionsOptions): ActionOptions[] {\n const { isPlugin, breakpoints } = options;\n const isMobile = breakpoints?.xs || breakpoints?.sm;\n const buttonProps = {\n button: !isMobile,\n className: 'btn btn-outline-dark'\n };\n\n const actionProviders = isPlugin ? [getActionsForPlugin] : [\n getMediaActions,\n hasInsightsActions(options.sharedObject) && getInsightsActions,\n !options.hideShareOptionsActions && getShareOptionsActions,\n getDeleteActions\n ];\n\n return actionProviders.reduce((actions, getActionFn) => {\n if (typeof getActionFn !== 'function')\n return actions;\n \n return [ ...actions, ...getActionFn({ ...options, buttonProps, isMobile }) ];\n }, [] as ActionOptions[]);\n}\n\nexport function getTypeIdParams(typeId: string | string[]): MasterType[] {\n if (!typeId) return [];\n\n if (typeof typeId === 'string')\n return [+typeId];\n\n return typeId.map(typeId => +typeId) || [];\n}\n\nexport function getSharesParams(typeId: string | string[]) {\n const typeIdAppLinkParams = getTypeIdParams(typeId);\n const audienceAppLinkParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n const currentAppLink = {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.HOME,\n params: {\n ...audienceAppLinkParams,\n typeId: typeIdAppLinkParams\n }\n };\n const sentSharesParams = {\n recipientUserId: audienceAppLinkParams?.users,\n recipientGroupId: [ ...audienceAppLinkParams?.classroomGroups || [], ...audienceAppLinkParams?.classrooms || [] ],\n objectTypeId: typeIdAppLinkParams.length ? typeIdAppLinkParams : undefined\n };\n\n return {\n typeIdAppLinkParams,\n audienceAppLinkParams,\n currentAppLink,\n sentSharesParams\n };\n}\n\ninterface ShareActionHanderOptions extends ShareObjectActionsOptions {\n isMobile: boolean;\n buttonProps: {\n button: boolean;\n className: string;\n }\n}\n\nfunction getActionsForPlugin(options: ShareActionHanderOptions): ActionOptions[] {\n const { sharedObject, buttonProps } = options;\n\n if (VideoHelper.isVideoType(sharedObject)) {\n const { canConsume } = VideoHelper.getCanBeConsumed(sharedObject);\n\n if (!canConsume)\n return [];\n\n return [{\n label: getPhrase('embedVideo'),\n appLink: {\n application: AppChannels.DEFAULT,\n action: Actions.Default.PLUGIN_SHARE,\n args: [sharedObject.id],\n params: { entityType: sharedObject.type }\n },\n ...buttonProps,\n analyticsOptions: {\n actionType: UserAction.Share,\n descriptor: ShareDescriptors.PluginEmbed,\n workflowPhase: WorkflowPhase.Start,\n eventVersion: EventVersion.V5\n }\n }];\n }\n\n return [];\n}\n\nfunction getMediaActions(options: ShareActionHanderOptions): ActionOptions[] {\n const { sharedObject, breakpoints, buttonProps } = options;\n\n if (VideoHelper.isVideoType(sharedObject)) {\n const { canConsume } = VideoHelper.getCanBeConsumed(sharedObject);\n\n if (!canConsume)\n return [];\n\n return [{\n label: !breakpoints?.md && getPhrase('viewVideo'),\n tooltip: breakpoints?.md && getPhrase('viewVideo'),\n svgName: cvSvgLibrary.Video,\n appLink: getObjectAppLink(sharedObject),\n group: 'main',\n ...buttonProps\n }];\n }\n \n if (SeriesHelper.isSeries(sharedObject)) {\n return [{\n label: !breakpoints?.md && getPhrase('viewSeries'),\n tooltip: breakpoints?.md && getPhrase('viewSeries'),\n svgName: cvSvgLibrary.Series,\n appLink: getObjectAppLink(sharedObject),\n group: 'main',\n ...buttonProps\n }];\n }\n \n if (PlaylistHelper.isPlaylist(sharedObject)) {\n return [{\n label: !breakpoints?.md && getPhrase('viewPlaylist'),\n tooltip: breakpoints?.md && getPhrase('viewPlaylist'),\n svgName: cvSvgLibrary.Playlist,\n appLink: getObjectAppLink(sharedObject),\n group: 'main',\n ...buttonProps\n }];\n }\n \n return [];\n}\n\nfunction getInsightsActions(options: ShareActionHanderOptions): ActionOptions[] {\n const { share, audienceParams, hasInsights, breakpoints, buttonProps } = options;\n\n if (!hasInsights)\n return [];\n\n return [{\n svgName: cvSvgLibrary.Analytics,\n label: !breakpoints?.md && getPhrase('viewInsights'),\n tooltip: breakpoints?.md && getPhrase('viewInsights'),\n appLink: getInsightsOverviewAppLink(share, audienceParams),\n group: 'main',\n ...buttonProps\n }];\n}\n\nfunction getShareOptionsActions(options: ShareActionHanderOptions): ActionOptions[] {\n const { share, breakpoints, buttonProps } = options;\n\n if (ShareHelper.hasShareExpired(share))\n return [];\n\n if (share.type === ShareType.Link) {\n return [{\n label: !breakpoints?.md && getPhrase('shareLink'),\n tooltip: breakpoints?.md && getPhrase('shareLink'),\n svgName: cvSvgLibrary.Link,\n appLink: getShareOptionsAppLink(share),\n group: 'main',\n ...buttonProps\n }];\n }\n\n if (share.type === ShareType.Classroom) {\n return [{\n label: !breakpoints?.md && getPhrase('shareOptions'),\n tooltip: breakpoints?.md && getPhrase('shareOptions'),\n svgName: cvSvgLibrary.Share,\n appLink: getShareOptionsAppLink(share),\n group: 'main',\n ...buttonProps\n }];\n }\n\n if (share.type === ShareType.Open) {\n return [{\n label: !breakpoints?.md && getPhrase('shareOptions'),\n tooltip: breakpoints?.md && getPhrase('shareOptions'),\n svgName: cvSvgLibrary.Share,\n appLink: getShareOptionsAppLink(share),\n group: 'main',\n ...buttonProps\n }];\n }\n\n return [];\n}\n\nfunction getDeleteActions(options: ShareActionHanderOptions): ActionOptions[] {\n const { share, breakpoints, buttonProps } = options;\n \n if (share.type === ShareType.Link) {\n return [{\n label: !breakpoints?.md && getPhrase('deleteShareLink'),\n tooltip: breakpoints?.md && getPhrase('deleteShareLink'),\n svgName: cvSvgLibrary.Delete,\n appLink: getDeleteShareAppLink(share),\n group: 'danger',\n ...buttonProps,\n className: 'btn btn-outline-dark text-danger'\n }];\n }\n\n if (share.type === ShareType.Classroom) {\n return [{\n label: !breakpoints?.md && getPhrase('deleteAssignment'),\n tooltip: breakpoints?.md && getPhrase('deleteAssignment'),\n svgName: cvSvgLibrary.Delete,\n appLink: getDeleteShareAppLink(share),\n group: 'danger',\n ...buttonProps,\n className: 'btn btn-outline-dark text-danger'\n }];\n }\n\n if (share.type === ShareType.Open) {\n return [{\n label: !breakpoints?.md && getPhrase('deleteOpenClassroom'),\n tooltip: breakpoints?.md && getPhrase('deleteOpenClassroom'),\n svgName: cvSvgLibrary.Delete,\n appLink: getDeleteShareAppLink(share),\n group: 'danger',\n ...buttonProps,\n className: 'btn btn-outline-dark text-danger'\n }];\n }\n\n return [];\n}","import { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { SharableEntityType } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BaseObject, Series } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { AssignAppLinkHelper } from 'apps/assign/utils/AssignAppLinkHelper';\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nconst INSIGHTS_WHITELIST = [\n MasterType.Video,\n MasterType.Clip,\n MasterType.Interactive\n];\n\nexport function getObjectAppLink(object: BaseObject): Core.AppLink {\n if (VideoHelper.isInteractive(object)) {\n return {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.VIEW_INTERACTIVE,\n args: [ object.id, TextHelper.slugify(object.name) ]\n };\n }\n\n if (VideoHelper.isClip(object)) {\n return {\n application: AppChannels.CLIPS,\n action: Actions.Clips.PLAY_CLIP,\n args: [ object.id, TextHelper.slugify(object.name) ]\n };\n }\n\n if (VideoHelper.isVideo(object)) {\n return {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ object.id, TextHelper.slugify(object.name) ]\n };\n }\n\n if (object.typeId === MasterType.Playlist) {\n return {\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.PLAYLIST,\n args: [ object.id, TextHelper.slugify(object.name) ]\n };\n }\n\n if (object.typeId === MasterType.Series) {\n return SeriesAppLinkHelper.getSeriesAppLink(object as Series);\n }\n}\n\nexport function getInsightsOverviewAppLink(share: Share, params?: HashObject): Core.AppLink {\n if (!share)\n return null;\n\n if (!INSIGHTS_WHITELIST.includes(share.objectTypeId))\n return getObjectAppLink({ id: share.objectId.toString(), typeId: share.objectTypeId });\n\n if (share.type === ShareType.Classroom) {\n const classroomId = ShareHelper.getClassroomIdFromShare(share);\n\n return {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.INSIGHTS_OVERVIEW,\n args: [ classroomId, share.shareId ],\n params\n };\n }\n\n if (share.type === ShareType.Open) {\n return {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.OPEN_CLASSROOM_INSIGHTS_OVERVIEW,\n args: [share.shareId],\n params\n };\n }\n\n return {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INSIGHTS_OVERVIEW,\n args: [share.shareId],\n params\n };\n}\n\nexport function getInsightsHeatmapAppLink(share: Share, params?: HashObject): Core.AppLink {\n if (!share)\n return null;\n\n if (!INSIGHTS_WHITELIST.includes(share.objectTypeId))\n return getObjectAppLink({ id: share.objectId.toString(), typeId: share.objectTypeId });\n\n if (share.type === ShareType.Classroom) {\n const classroomId = ShareHelper.getClassroomIdFromShare(share);\n\n return {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.INSIGHTS_HEATMAP,\n args: [ classroomId, share.shareId ],\n params\n };\n }\n\n if (share.type === ShareType.Open) {\n return {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.OPEN_CLASSROOM_INSIGHTS_HEATMAP,\n args: [share.shareId],\n params\n };\n }\n\n return {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INSIGHTS_HEATMAP,\n args: [share.shareId],\n params\n };\n}\n\nexport function getInsightsQuestionsAppLink(share: Share, params?: HashObject): Core.AppLink {\n if (!share)\n return null;\n\n if (!INSIGHTS_WHITELIST.includes(share.objectTypeId))\n return getObjectAppLink({ id: share.objectId.toString(), typeId: share.objectTypeId });\n\n if (share.type === ShareType.Classroom) {\n const classroomId = ShareHelper.getClassroomIdFromShare(share);\n\n return {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.INSIGHTS_QUESTIONS,\n args: [ classroomId, share.shareId ],\n params\n };\n }\n\n if (share.type === ShareType.Open) {\n return {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.OPEN_CLASSROOM_INSIGHTS_QUESTIONS,\n args: [share.shareId],\n params\n };\n }\n\n return {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INSIGHTS_QUESTIONS,\n args: [share.shareId],\n params\n };\n}\n\nexport function getInsightsStudentsAppLink(share: Share, params?: HashObject): Core.AppLink {\n if (!share)\n return null;\n \n if (!INSIGHTS_WHITELIST.includes(share.objectTypeId))\n return getObjectAppLink({ id: share.objectId.toString(), typeId: share.objectTypeId });\n\n if (share.type === ShareType.Classroom) {\n const classroomId = ShareHelper.getClassroomIdFromShare(share);\n\n return {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.INSIGHTS_STUDENTS,\n args: [ classroomId, share.shareId ],\n params\n };\n }\n\n if (share.type === ShareType.Open) {\n return {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.OPEN_CLASSROOM_INSIGHTS_STUDENTS,\n args: [share.shareId],\n params\n };\n }\n\n return {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INSIGHTS_STUDENTS,\n args: [share.shareId],\n params\n };\n}\n\nexport function getShareOptionsAppLink(share: Share): Core.AppLink {\n if (!share) return;\n\n const entityType = getSharableEntityType(share);\n\n if (share.type === ShareType.Link) {\n return {\n application: AppChannels.SHARE,\n action: Actions.Share.SHARE,\n args: [share.objectId],\n params: { entityType }\n };\n }\n\n return AssignAppLinkHelper.assignDetails({\n objectId: share.objectId.toString(),\n shareId: share.shareId,\n entityType\n });\n}\n\nexport function getDeleteShareAppLink(share: Share): Core.AppLink {\n if (!share) return;\n\n const entityType = getSharableEntityType(share);\n\n if (share.type === ShareType.Link) {\n return {\n application: AppChannels.SHARE,\n action: Actions.Share.DELETE_SHARE_LINK,\n args: [share.objectId],\n params: {\n entityType,\n previousAppLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.HOME\n } as Core.AppLink\n }\n };\n }\n\n const actions: Record<ShareType, string> = {\n [ShareType.Classroom]: Actions.Share.DELETE_ASSIGNMENT,\n [ShareType.Open]: Actions.Share.DELETE_OPEN_CLASSROOM,\n [ShareType.Link]: '',\n [ShareType.Live]: ''\n };\n\n const previousActions: Record<ShareType, string> = {\n [ShareType.Classroom]: Actions.Classrooms.CLASSROOM_HOME,\n [ShareType.Open]: Actions.Classrooms.OPEN_CLASSROOMS,\n [ShareType.Link]: '',\n [ShareType.Live]: ''\n };\n \n const action = actions[share.type];\n const previousAction = previousActions[share.type];\n\n if (!action || !previousAction) return;\n \n return {\n application: AppChannels.SHARE,\n action: action,\n args: [share.shareId],\n params: {\n previousAppLink: {\n application: AppChannels.CLASSROOMS,\n action: previousAction,\n args: [ShareHelper.getClassroomIdFromShare(share)]\n } as Core.AppLink\n }\n };\n}\n\nexport function getInsightsReportAppLink(share: Share): Core.AppLink {\n if (!share) return;\n if (share.objectTypeId !== MasterType.Interactive) return;\n\n return {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_GENERATE_REPORT,\n args: [share.objectId]\n };\n}\n\nfunction getSharableEntityType(share: Share): SharableEntityType {\n if (share.objectTypeId === MasterType.Video)\n return 'video';\n\n if (share.objectTypeId === MasterType.Interactive)\n return 'interactive';\n \n if (share.objectTypeId === MasterType.Clip)\n return 'clip';\n\n if (share.objectTypeId === MasterType.Series)\n return 'series';\n\n if (share.objectTypeId === MasterType.Playlist)\n return 'playlist';\n}"],"names":["AnalyticsFilterHelper","getAudienceAppLinkParams","appLink","params","users","classrooms","classroomGroups","getParam","key","param","Array","isArray","audienceFilters","getDateRangeAppLinkParams","from","to","rangeName","dateRangeFilters","PlaylistHelper","isPlaylist","obj","typeId","isOwner","playlist","currentUser","_liteOwner","id","toString","getVideoCount","count","videos","clips","interactives","ShareType","ShareHelper","getFlattenedRecipients","shares","map","s","recipients","getFlattenedUniqueScopes","r","scopeId","filter","x","getClassroomIdFromShare","share","firstRecipient","recipientId","recipientTypeId","getClassroomForShare","classroomId","find","classroom","getRecipientsCount","type","length","hasShareExpired","expireDate","now","Date","calculateDaysToExpiry","remainingDays","namespace","BASE_IMAGE_CLASS_NAME","InsightsMask","className","SharedObjectImage","props","ref","el","object","fixedHeight","style","width","offsetHeight","VideoHelper","MasterType","useVideoThumbnail","image","ImageHelper","imageType","imageClassName","imageFallbackComponent","ImageFallback","svgContainerClassName","url","getBgColorClass","name","extraClasses","getImageProps","thumbnailMetadata","showVideoMetadata","hideBottomBar","hideDuration","hideMask","hideRating","hideVideoBadgeType","showInsightsMask","AppLink","VideoThumbnail","video","size","thumbnailSize","imageOptions","textPosition","ThumbnailTextPosition","requireMarking","Text","phrase","options","smartCount","CollectionThumbnail","collection","analyticsData","analyticsOptions","entity","ShareViewHelper","actionType","location","locationContext","showMask","showCollectionMask","showVideoCount","BaseImage","data","defaultProps","SharedObjectTitle","sharedObject","titleClassName","subTextClassName","subTextPhrase","getSubTextPhrase","titleAppLink","getObjectAppLink","canNavigate","series","BaseCollectionThumbnailTitle","title","CollectionThumbnailTitle","firstVideo","collectionVideos","ArrayHelper","getFirstVideo","videoCount","totalCount","showTexts","subText","MasterTypeHelper","preventFocus","SvgContainer","svgName","hoverText","hideVideoTypeBadge","TitleSubText","subTextAppLink","getPhrase","getShareObjectActions","isPlugin","breakpoints","isMobile","xs","sm","buttonProps","button","getActionsForPlugin","getMediaActions","getInsightsActions","hideShareOptionsActions","getShareOptionsActions","getDeleteActions","reduce","actions","getActionFn","getSharesParams","typeIdAppLinkParams","getTypeIdParams","audienceAppLinkParams","currentAppLink","application","action","sentSharesParams","recipientUserId","recipientGroupId","objectTypeId","undefined","canConsume","label","args","entityType","descriptor","workflowPhase","eventVersion","md","tooltip","group","audienceParams","hasInsights","INSIGHTS_WHITELIST","getInsightsOverviewAppLink","includes","objectId","shareId","getInsightsHeatmapAppLink","getInsightsQuestionsAppLink","getInsightsStudentsAppLink","getShareOptionsAppLink","getSharableEntityType","getDeleteShareAppLink","previousAppLink","previousActions","previousAction"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4164],{86877:(e,t,n)=>{n.d(t,{Z:()=>s});var o=n(23481);function r(e){return r="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},r(e)}function i(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,u(o.key),o)}}function u(e){var t=function(e){if("object"!=r(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=r(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==r(t)?t:t+""}function c(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(c=function(){return!!e})()}function a(e){return a=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},a(e)}function l(e,t){return l=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},l(e,t)}var s=function(e){function t(e){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t,n){return t=a(t),function(e,t){if(t&&("object"==r(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,c()?Reflect.construct(t,n||[],a(e).constructor):t.apply(e,n))}(this,t,[e])}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&l(e,t)}(t,e),n=t,(u=[{key:"name",get:function(){return"FileTypeError"}},{key:"lang",get:function(){return"upload.fileType"}},{key:"dialogOptions",get:function(){return{title:o.T.getPhrase(this.lang,"heading"),text:o.T.getPhrase(this.lang,"body"),buttons:[{text:o.T.getPhrase(this.lang,"okay"),className:"btn btn-dark",success:!0},{text:o.T.getPhrase(this.lang,"close"),className:"btn btn-link",close:!0}]}}}])&&i(n.prototype,u),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,u}(n(47663).S)},90121:(e,t,n)=>{n.r(t),n.d(t,{BaseVideoUploadService:()=>fe,LearningResourceUploadService:()=>ye,MixedMediaUploadService:()=>de,SubtitleUploadService:()=>pe,UploadType:()=>ue});var o,r=n(43823),i=n(21161),u=n(46865),c=n(79976),a=n(37433),l=n(54149),s=n(71365),f=n(23481),p=n(70794),y=n(81886),d=n(49985),h=n(65858),b=n(29555);!function(e){e[e.Permanent=0]="Permanent",e[e.Temporary=1]="Temporary"}(o||(o={}));var g=n(86877),v=n(28046),m=n(52003),w=n(60735),S=n(53301),O=n.n(S),k=n(47663);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 j(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,T(o.key),o)}}function T(e){var t=function(e){if("object"!=P(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=P(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==P(t)?t:t+""}function U(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(U=function(){return!!e})()}function E(e){return E=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},E(e)}function _(e,t){return _=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},_(e,t)}var I="upload.internetConnectivityError",x=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t,n){return t=E(t),function(e,t){if(t&&("object"==P(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,U()?Reflect.construct(t,n||[],E(e).constructor):t.apply(e,n))}(this,t,[f.T.getPhrase(I,"title")])}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&_(e,t)}(t,e),n=t,(o=[{key:"name",get:function(){return"InternetConnectivityError"}},{key:"dialogOptions",get:function(){return{title:f.T.getPhrase(I,"heading"),text:f.T.getPhrase(I,"body"),buttons:[{text:f.T.getPhrase(I,"okay"),className:"btn btn-outline-dark",success:!0}]}}}])&&j(n.prototype,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,o}(k.S),R=n(44331);function C(e){return C="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},C(e)}function D(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,L(o.key),o)}}function L(e){var t=function(e){if("object"!=C(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=C(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==C(t)?t:t+""}function F(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(F=function(){return!!e})()}function A(e){return A=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},A(e)}function M(e,t){return M=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},M(e,t)}var z="upload.slowInternetError",V=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t,n){return t=A(t),function(e,t){if(t&&("object"==C(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,F()?Reflect.construct(t,n||[],A(e).constructor):t.apply(e,n))}(this,t,[f.T.getPhrase(z,"title")])}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&M(e,t)}(t,e),n=t,(o=[{key:"name",get:function(){return"SlowInternetError"}},{key:"dialogOptions",get:function(){return{title:f.T.getPhrase(z,"heading"),text:f.T.getPhrase(z,"body"),buttons:[{text:f.T.getPhrase(z,"okay"),className:"btn btn-outline-dark",success:!0}]}}}])&&D(n.prototype,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,o}(k.S);function N(e){return N="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},N(e)}function B(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,Q(o.key),o)}}function Q(e){var t=function(e){if("object"!=N(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=N(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==N(t)?t:t+""}function q(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(q=function(){return!!e})()}function Z(e){return Z=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Z(e)}function X(e,t){return X=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},X(e,t)}var J=[],G=function(e){function t(e){var n;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(n=function(e,t,n){return t=Z(t),function(e,t){if(t&&("object"==N(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,q()?Reflect.construct(t,n||[],Z(e).constructor):t.apply(e,n))}(this,t,[e])).slowInternetTimeout={},n.showSlowInternetTimeout=!0,n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&X(e,t)}(t,e),n=t,o=[{key:"name",get:function(){return"DropzoneWrapper"}},{key:"initialize",value:function(e){var t=this.options.loggingEnabled,n=r.Radio.channel(e.channelName),o=this;this.dropzone=new(O())(document.createElement("div"),{url:function(e){return e[0].cvUpload.ingestUrl},chunking:this.options.chunkingEnabled,chunkSize:this.options.chunkSize,forceChunking:!0,autoProcessQueue:!0,maxFilesize:this.options.maxFileSize,acceptedFiles:this.options.acceptedFiles,paramName:"content",timeout:18e4,init:function(){var e=this;t&&(i.each(J,(function(t){e.on(t,(function(){for(var e=arguments.length,n=new Array(e),o=0;o<e;o++)n[o]=arguments[o];var r=n[0]instanceof File?n[0].name:n[0];console.info(t,r,n)}))})),this.on("uploadprogress",(function(e,t,r){var i=r/e.size*100;n.trigger("progress",o.getId(e),i,r)})),this.on("success",(function(e){var t=e.upload.chunks,o=i.last(t),r=o.xhr;r||(r=o.file.xhr);var u=JSON.parse(r.response);e.cvUpload.fileId=u.id,n.trigger(b.S.UPLOAD_SUCCESS,e,u)})),this.on("error",(function(e,t,n){n&&0===n.status?y.Q.Ry.throw(new x):"canceled"!==e.status&&y.Q.Ry.throw(new R.n(f.T.getPhrase("upload.services","uploadError",{fileName:e.name,message:t.message})))})),this.on("sending",(function(e){window.clearTimeout(o.slowInternetTimeout[e.path]),o.showSlowInternetTimeout&&(o.slowInternetTimeout[e.path]=window.setTimeout((function(){o.showSlowInternetTimeout&&y.Q.Ry.throw(new V),o.showSlowInternetTimeout=!1}),3e4))})),this.on("complete",(function(e){return window.clearTimeout(o.slowInternetTimeout[e.path])})))},params:function(e,t,n){if(n)return{chunk_index:n.index,upload_length:n.file.size}},addedfile:function(){},thumbnail:function(){},uploadprogress:function(){}})}},{key:"getId",value:function(e){return e.upload.uuid}},{key:"addFile",value:function(e){this.dropzone.addFile(e)}},{key:"removeFile",value:function(e){this.dropzone.removeFile(e)}},{key:"start",value:function(){this.dropzone.processQueue()}},{key:"destroy",value:function(){this.dropzone.destroy()}}],u=[{key:"isValidFile",value:function(e,t){return O().isValidFile(e,t)}}],o&&B(n.prototype,o),u&&B(n,u),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,o,u}(y.Q.t6);function H(e){return H="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},H(e)}function W(e,t,n){return(t=ee(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function $(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function K(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,ee(o.key),o)}}function Y(e,t,n){return t&&K(e.prototype,t),n&&K(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function ee(e){var t=function(e){if("object"!=H(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=H(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==H(t)?t:t+""}function te(e,t,n){return t=oe(t),function(e,t){if(t&&("object"==H(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,ne()?Reflect.construct(t,n||[],oe(e).constructor):t.apply(e,n))}function ne(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(ne=function(){return!!e})()}function oe(e){return oe=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},oe(e)}function re(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&ie(e,t)}function ie(e,t){return ie=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},ie(e,t)}var ue,ce=function(e){function t(){var e;return $(this,t),(e=te(this,t,[{dataProvider:s.u.getInstance(a.R.Ajax),cache:s.u.getInstance(u.p.Fifo),alertService:s.u.getInstance(c.P.ALERT)}])).incrementingUploadId=0,e}return re(t,e),Y(t,[{key:"name",get:function(){return"UploadDataService"}},{key:"channelName",get:function(){return"private:upload:data:service"}},{key:"requestUploads",value:function(e,t,n,o,r){var u=this,c=this.chain();i.each(t,(function(t){u.incrementingUploadId++,c.create({resource:e,eventPrefix:"request:upload:".concat(u.incrementingUploadId),data:u.getFileUploadRequest(t,n),callback:function(e){o(t,e)},errorHandler:u.alertService.error("Something went wrong while we were uploading your video. Please try again.")})})),c.func((function(){r()})).run()}},{key:"cancelUpload",value:function(e,t,n){this.create({resource:"/api/upload/cancel",eventPrefix:"cancel:upload",data:{uploadId:e,ingestUrl:t},callback:n})}},{key:"getFileUploadRequest",value:function(e,t){var n=e.name.split(".");return{name:n.join("."),extension:n.length>1?n.pop():"",fileSize:e.size,fileLifestyle:t}}},{key:"onDestroy",value:function(){s.u.releaseInstance(a.R.Ajax).releaseInstance(u.p.Fifo)}}])}(l.B);!function(e){e[e.Video=0]="Video",e[e.LearningResource=1]="LearningResource",e[e.Subtitle=2]="Subtitle",e[e.MixedMedia=3]="MixedMedia"}(ue||(ue={}));var ae=W(W(W(W({},ue.Video,v.l.VIDEO),ue.LearningResource,v.l.RESOURCES),ue.Subtitle,v.l.SUBTITLES),ue.MixedMedia,v.l.MIXED_MEDIA),le=W(W(W(W({},ue.Video,m.Q4.VIDEO_UPLOAD),ue.LearningResource,m.Q4.RESOURCE_UPLOAD),ue.Subtitle,m.Q4.SUBTITLE_UPLOAD),ue.MixedMedia,m.Q4.MIXED_MEDIA_UPLOAD),se=function(e){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return $(this,t),te(this,t,[Object.assign({uploadUrl:"/api/upload"},e)])}return re(t,e),Y(t,[{key:"initialize",value:function(){this.uploadDataService=new ce,this.progressViewModel=p.r.get("upload:progress:".concat(this.uploadType)),this.bindListeners()}},{key:"channelName",get:function(){return le[this.uploadType]}},{key:"lang",get:function(){return"uploadShared.services"}},{key:"initUploader",value:function(e,t){if(!this.uploader){var n=4194304;e&&n<e&&(n=e),t&&n>t&&(n=t),this.uploader=new G({chunkingEnabled:!0,loggingEnabled:!0,chunkSize:n,maxFileSize:53687091200,acceptedFiles:this.getAcceptedFiles(),channelName:this.channelName})}}},{key:"bindListeners",value:function(){this.listenTo(this.channelName,"progress",this.onProgress),this.listenTo(this.channelName,b.S.UPLOAD_SUCCESS,this.onSuccess)}},{key:"onProgress",value:function(e,t,n){var o=this.collection.get(e);o&&(o.set({progress:t>100?100:t,totalUploaded:n}),this.setOverallProgress())}},{key:"isUploading",value:function(){return!!this.getCollection().length}},{key:"getCollection",value:function(){return this.collection||(this.collection=new y.Q.FE),this.collection}},{key:"setOverallProgress",value:function(){var e=this,t=0,n=0,o=this.getCollection();if(o.length){o.each((function(e){t+=e.get("totalUploaded")||0,n+=e.get("file").size||0}));var r=t/n*100,i=r>=100,u=function(){e.progressViewModel.set({progress:i?100:r,done:i})};i?window.setTimeout(u,2e3):u()}else this.progressViewModel.set({progress:0})}},{key:"isValidFile",value:function(e){return G.isValidFile(e,this.getAcceptedFiles())}},{key:"addFiles",value:function(e,t){var n=this;i.any(e,(function(e){return!n.isValidFile(e)}))?y.Q.Ry.throw(new g.Z(f.T.getPhrase(this.lang,"invalidFileType"))):this.requestUploads(e,t)}},{key:"requestUploads",value:function(e,t){var n=this,o=this.isUploading(),i=this.getCollection();this.uploadDataService.requestUploads(this.options.uploadUrl,e,this.fileLifestyle,(function(e,t){"minChunkSize"in t||"maxChunkSize"in t?n.initUploader(1024*t.minChunkSize,1024*t.maxChunkSize):n.initUploader(t.minChunkLength,t.maxChunkLength),e.cvUpload={uploadId:t.uploadId,ingestUrl:t.ingestUrl},n.uploader.addFile(e);var o=e.name;n.uploadType===ue.Video&&(o=o.replace(/\.[^/.]+$/,"")),i.add(Object.assign({id:n.uploader.getId(e),file:e,name:o},n.getAdditionalFileInfo(e,t)),{at:i.length-1})}),(function(){t&&d.k.logUserAction({uploadCount:e.length},t),r.Radio.channel(n.channelName).trigger(b.S.FILES_ADDED,e,o)}))}},{key:"addFile",value:function(e,t){this.addFiles([e],t)}},{key:"cancelUpload",value:function(e){var t=this,n=this.getCollection(),o=n.get(e);if(o){var i=o.get("file");this.uploader.removeFile(i),n.remove(o),this.uploadDataService.cancelUpload(i.cvUpload.uploadId,i.cvUpload.ingestUrl,(function(){d.k.logUserAction(o.toJSON(),{entity:h.py.Video,actionType:h.Vw.Upload,workflowPhase:h.eu.Discard,descriptor:h.yh.Single,location:h.LZ.MyUploads}),r.Radio.channel(t.channelName).trigger(b.S.UPLOAD_CANCELLED)})),this.setOverallProgress()}}},{key:"onSuccess",value:function(e,t){var n=this.uploader.getId(e),o=this.getCollection().get(n);o.set("fileInfo",t),d.k.logUserAction({id:e.cvUpload.uploadId},{entity:h.py.Video,actionType:h.Vw.Upload,workflowPhase:h.eu.Complete,descriptor:h.yh.Single,location:h.LZ.VideoUpload}),r.Radio.channel(this.channelName).trigger(b.S.UPLOAD_COMPLETE,o)}},{key:"cancelAllUploads",value:function(){var e=this,t=this.getCollection().map((function(e){return e.get("id")}));i.each(t,(function(t){return e.cancelUpload(t)}))}},{key:"getUpload",value:function(e){var t=this.uploader.getId(e);return this.getCollection().get(t)}},{key:"getAcceptedFiles",value:function(){return ae[this.uploadType]}},{key:"getAdditionalFileInfo",value:function(e,t){return{}}}])}(y.Q.t6),fe=function(e){function t(){return $(this,t),te(this,t,arguments)}return re(t,e),Y(t,[{key:"uploadType",get:function(){return ue.Video}},{key:"name",get:function(){return w.D.VideoUpload}},{key:"fileLifestyle",get:function(){return o.Temporary}}])}(se),pe=function(e){function t(){return $(this,t),te(this,t,arguments)}return re(t,e),Y(t,[{key:"uploadType",get:function(){return ue.Subtitle}},{key:"name",get:function(){return w.D.SubtitleUpload}},{key:"fileLifestyle",get:function(){return o.Permanent}}])}(se),ye=function(e){function t(){return $(this,t),te(this,t,arguments)}return re(t,e),Y(t,[{key:"uploadType",get:function(){return ue.LearningResource}},{key:"name",get:function(){return w.D.ResourceUpload}},{key:"fileLifestyle",get:function(){return o.Permanent}}])}(se),de=function(e){function t(){return $(this,t),te(this,t,arguments)}return re(t,e),Y(t,[{key:"uploadType",get:function(){return ue.MixedMedia}},{key:"name",get:function(){return w.D.MixedMediaUpload}},{key:"fileLifestyle",get:function(){return o.Temporary}}])}(se)},28046:(e,t,n)=>{n.d(t,{l:()=>y,v:()=>d});var o=n(21161),r=["pdf"],i=["doc","docx","dotx","dot","rtf","docm","odt"],u=["csv","txt"],c=["xls","xlt","xlsx"],a=["jpg","tif","png","bmp","gif","jpeg"],l="video/*",s=["zip","rar"],f=["ppt","pot","pps","pptx"],p=["srt"],y={IMAGES:".".concat(a.join(",.")),VIDEO:l,MIXED_MEDIA:".".concat(a.join(",."),",").concat(l),RESOURCES:".".concat([].concat(i,c,f,r,u,a,s).join(",.")),SUBTITLES:".".concat(p.join(",."))},d={getResourceType:function(e){var t=e.toLowerCase();return o.contains(i,t)?"document":o.contains(c,t)?"excel":o.contains(f,t)?"powerpoint":o.contains(r,t)?"pdf":o.contains(u,t)?"text":o.contains(a,t)?"image":o.contains(s,t)?"archive":o.contains(p,t)?"subtitle":""}}}}]);
2
- //# sourceMappingURL=4164-5d3af57b67-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/4164-5d3af57b67-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/upload/errors/file-type/FileTypeError.ts","file:///app/packages/libs/shared/src/apps/upload/enums/FileLifestyle.ts","file:///app/packages/libs/shared/src/apps/upload/errors/internet-connectivity/InternetConnectivityError.ts","file:///app/packages/libs/shared/src/apps/upload/errors/slow-internet/SlowInternetError.ts","file:///app/packages/libs/shared/src/apps/upload/services/DropzoneWrapper.ts","file:///app/packages/libs/shared/src/apps/upload/services/UploadService.ts","file:///app/packages/libs/shared/src/apps/upload/utils/FileExtensionsHelper.ts"],"sourcesContent":["import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { DialogError } from 'libs/shared/errors/primitives/DialogError';\nimport { DialogOptions } from 'libs/shared/interfaces';\n\n/**\n * TODO: Create a more useful message here.\n * Perhaps using the mime types listen on MDN\n * https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Complete_list_of_MIME_types\n * or in the list of all the official mime types\n * https://www.iana.org/assignments/media-types/media-types.xhtml\n */\nexport class FileTypeError extends DialogError {\n constructor(message: string) {\n super(message);\n }\n\n // @ts-ignore\n public get name(): string {\n return 'FileTypeError';\n }\n\n // @ts-ignore\n public get lang(): string {\n return 'upload.fileType';\n }\n\n // @ts-ignore\n public get dialogOptions(): DialogOptions {\n return {\n title: LanguageService.getPhrase(this.lang, 'heading'),\n text: LanguageService.getPhrase(this.lang, 'body'),\n buttons: [{\n text: LanguageService.getPhrase(this.lang, 'okay'),\n className: 'btn btn-dark',\n success: true\n }, {\n text: LanguageService.getPhrase(this.lang, 'close'),\n className: 'btn btn-link',\n close: true\n }]\n };\n }\n}","export enum FileLifestyle {\n Permanent = 0,\n Temporary = 1\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { DialogError } from 'libs/shared/errors/primitives/DialogError';\nimport { DialogOptions } from 'libs/shared/interfaces';\n\nconst lang = 'upload.internetConnectivityError';\n\nexport class InternetConnectivityError extends DialogError {\n constructor() {\n super(LanguageService.getPhrase(lang, 'title'));\n }\n\n // @ts-ignore\n public get name(): string {\n return 'InternetConnectivityError';\n }\n\n // @ts-ignore\n public get dialogOptions(): DialogOptions {\n return {\n title: LanguageService.getPhrase(lang, 'heading'),\n text: LanguageService.getPhrase(lang, 'body'),\n buttons: [{\n text: LanguageService.getPhrase(lang, 'okay'),\n className: 'btn btn-outline-dark',\n success: true\n }]\n };\n }\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { DialogError } from 'libs/shared/errors/primitives/DialogError';\nimport { DialogOptions } from 'libs/shared/interfaces';\n\nconst lang = 'upload.slowInternetError';\n\nexport class SlowInternetError extends DialogError {\n constructor() {\n super(LanguageService.getPhrase(lang, 'title'));\n }\n\n // @ts-ignore\n public get name(): string {\n return 'SlowInternetError';\n }\n\n // @ts-ignore\n public get dialogOptions(): DialogOptions {\n return {\n title: LanguageService.getPhrase(lang, 'heading'),\n text: LanguageService.getPhrase(lang, 'body'),\n buttons: [{\n text: LanguageService.getPhrase(lang, 'okay'),\n className: 'btn btn-outline-dark',\n success: true\n }]\n };\n }\n}","import { ObjectHash, Radio } from 'backbone';\nimport Dropzone from 'dropzone';\nimport * as _ from 'underscore';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { InternetConnectivityError } from 'libs/shared/apps/upload/errors/internet-connectivity/InternetConnectivityError';\nimport { AlertError } from 'libs/shared/errors/primitives/AlertError';\n\nimport { UploadEventNames } from '../constants/UploadConstants';\nimport { SlowInternetError } from '../errors/slow-internet/SlowInternetError';\n\nexport interface UploadApiWrapperOptions extends Core.ServiceOptions {\n maxFileSize: number;\n chunkSize: number;\n chunkingEnabled: boolean;\n loggingEnabled: boolean;\n acceptedFiles: string;\n channelName: string;\n}\n\nexport interface UploadApiWrapper {\n addFile(file: File): void;\n destroy(): void;\n start(): void;\n getId(file: File): string;\n removeFile(file: File): void;\n}\n\nconst dropzoneEvents: string[] = [\n // 'uploadprogress', 'totaluploadprogress',\n // 'addedfile', 'removedfile', 'thumbnail', 'error', 'processing',\n // 'sending', 'success', 'complete', 'addedfile',\n // 'maxfilesreached', 'maxfilesexceeded', 'processingmultiple',\n // 'sendingmultiple', 'completemultiple', 'canceledmultiple',\n // 'reset', 'queuecomplete'\n];\n\nexport class DropzoneWrapper extends Core.Service implements UploadApiWrapper {\n private dropzone: Dropzone;\n public options: UploadApiWrapperOptions;\n\n private slowInternetTimeout: {[uploadId: string]: number} = {};\n private showSlowInternetTimeout: boolean = true;\n\n // @ts-ignore\n public get name(): string {\n return 'DropzoneWrapper';\n }\n\n constructor(options: UploadApiWrapperOptions) {\n super(options);\n }\n\n public initialize(options: UploadApiWrapperOptions): void {\n const { loggingEnabled } = this.options;\n\n const uploadChannel = Radio.channel(options.channelName);\n\n /**\n * Thought I wouldn't see this in any of our TS\n * Guess I was wrong - sha\n */\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this;\n\n this.dropzone = new Dropzone(document.createElement('div'), {\n url: ((files: Dropzone.DropzoneFile[]) => {\n const file = files[0] as any;\n\n const { ingestUrl } = file.cvUpload;\n\n return ingestUrl;\n }) as any,\n\n chunking: this.options.chunkingEnabled,\n chunkSize: this.options.chunkSize,\n forceChunking: true,\n autoProcessQueue: true,\n maxFilesize: this.options.maxFileSize,\n acceptedFiles: this.options.acceptedFiles,\n paramName: 'content',\n timeout: 180000, // 3 mins in milliseconds\n\n init: function (): void {\n if (!loggingEnabled)\n return;\n\n _.each(dropzoneEvents, (eventName: string) => {\n this.on(eventName, (...args: any[]) => {\n const file = args[0] instanceof File ? args[0].name : args[0];\n console.info(eventName, file, args);\n });\n });\n\n this.on('uploadprogress', (file: File, percentage: number, totalBytes: number) => {\n const progress = totalBytes / file.size * 100;\n uploadChannel.trigger('progress', self.getId(file), progress, totalBytes);\n });\n\n this.on('success', (file: File) => {\n /**\n * This is sort of a hack. It assumes the last chunk will be the last chunk that is uploaded\n * which may not necessarily be the case\n */\n const chunks = (file as any).upload.chunks;\n\n const lastChunk = _.last(chunks) as any;\n\n let xhr = lastChunk.xhr;\n\n if (!xhr)\n xhr = lastChunk.file.xhr;\n\n const response = JSON.parse(xhr.response);\n\n (file as any).cvUpload.fileId = response.id;\n\n uploadChannel.trigger(UploadEventNames.UPLOAD_SUCCESS, file, response);\n });\n\n this.on('error', (file: File, messageObj: ObjectHash, xhr: XMLHttpRequest) => {\n if (xhr && xhr.status === 0) {\n Core.ErrorHelper.throw(new InternetConnectivityError());\n return;\n }\n\n /**\n * Don't throw if the error was caused by canceling\n * the chunk upload. this will happen when the user cancels\n * an upload themselves.\n */\n if ((file as Dropzone.DropzoneFile).status !== 'canceled')\n Core.ErrorHelper.throw(\n new AlertError(LanguageService.getPhrase('upload.services', 'uploadError', {\n fileName: file.name,\n message: messageObj.message\n }))\n );\n });\n\n /**\n * We've increased the upload timeout from 30s to 3mins. This means that the upload\n * will not timeout with an upload speed as slow as 200Kbps. However if a single chunk takes\n * longer than 30s, which is an upload speed of 1Mbps. We'll show a dialog letting the user\n * know that their internet speed is very slow, and the upload may take quite some time.\n * - Sha\n */\n this.on('sending', (file: File) => {\n window.clearTimeout(self.slowInternetTimeout[(file as any).path]);\n\n if (!self.showSlowInternetTimeout)\n return;\n\n self.slowInternetTimeout[(file as any).path] = window.setTimeout(() => {\n if (self.showSlowInternetTimeout)\n Core.ErrorHelper.throw(new SlowInternetError());\n\n self.showSlowInternetTimeout = false;\n }, 30000); // 30s\n });\n\n /**\n * Complete will trigger both on successful uploads and on a cancelled upload.\n */\n this.on('complete', (file: File) => window.clearTimeout(self.slowInternetTimeout[(file as any).path]));\n },\n\n params: (files: Dropzone.DropzoneFile[], xhr: XMLHttpRequest, chunk: any) => {\n if (!chunk)\n return;\n\n return {\n chunk_index: chunk.index,\n upload_length: chunk.file.size\n };\n },\n\n /**\n * These methods are here to disable Dropzone's UI related features\n */\n addedfile: () => {},\n thumbnail: () => {},\n uploadprogress: () => {}\n });\n }\n\n public getId(file: File): string {\n return (file as any).upload.uuid;\n }\n\n public addFile(file: Dropzone.DropzoneFile): void {\n this.dropzone.addFile(file);\n }\n\n public removeFile(file: Dropzone.DropzoneFile): void {\n this.dropzone.removeFile(file);\n }\n\n public start(): void {\n this.dropzone.processQueue();\n }\n\n public destroy(): void {\n this.dropzone.destroy();\n }\n\n public static isValidFile(file: File, acceptedFiles: string): boolean {\n return Dropzone.isValidFile(file, acceptedFiles);\n }\n}","import { Radio } from 'backbone';\nimport * as _ from 'underscore';\n\nimport { Caches } from 'libs/common/backbone/constants/Caches';\nimport { CommonServices } from 'libs/common/backbone/constants/CommonServices';\nimport { DataProviders } from 'libs/common/backbone/constants/DataProviders';\nimport { BaseDataService } from 'libs/common/backbone/services/BaseDataService';\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ViewModelService } from 'libs/common/backbone/services/ViewModelService';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, LocationContext, OperationDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { UploadEventNames } from 'libs/shared/apps/upload/constants/UploadConstants';\nimport { FileLifestyle } from 'libs/shared/apps/upload/enums/FileLifestyle';\nimport { FileTypeError } from 'libs/shared/apps/upload/errors/file-type/FileTypeError';\nimport { FileExtensions } from 'libs/shared/apps/upload/utils/FileExtensionsHelper';\nimport { SharedServiceChannels } from 'libs/shared/constants/RadioChannels';\nimport { SharedServices } from 'libs/shared/constants/SharedServices';\n\nimport { DropzoneWrapper, UploadApiWrapper } from './DropzoneWrapper';\n\n/**\n * This data service is locally private and is only\n * used by the UploadService to request/cancel uploads from\n * FileApi\n */\nclass UploadDataService extends BaseDataService {\n constructor() {\n super({\n dataProvider: InstanceManager.getInstance(DataProviders.Ajax),\n cache: InstanceManager.getInstance(Caches.Fifo),\n alertService: InstanceManager.getInstance(CommonServices.ALERT)\n });\n }\n\n private incrementingUploadId: number = 0;\n\n // @ts-ignore\n public get name(): string {\n /**\n * This string is not in DataServices because this data service is private.\n */\n return 'UploadDataService';\n }\n\n /**\n * This is not sitting in RadioChannels\n * because it is only used in this file\n */\n // @ts-ignore\n public get channelName(): string {\n return 'private:upload:data:service';\n }\n\n public requestUploads(\n resource: string,\n files: File[],\n fileLifestyle: FileLifestyle,\n fileCallback: (file: File, response: any) => void,\n callback: () => void\n ): void {\n const chain = this.chain();\n\n _.each(files, file => {\n this.incrementingUploadId++;\n\n chain.create({\n resource,\n eventPrefix: `request:upload:${this.incrementingUploadId}`,\n data: this.getFileUploadRequest(file, fileLifestyle),\n callback: (response: any) => {\n fileCallback(file, response);\n },\n errorHandler: this.alertService.error(`Something went wrong while we were uploading your video. Please try again.`)\n });\n });\n\n chain.func(() => {\n callback();\n }).run();\n }\n\n public cancelUpload(uploadId: string, ingestUrl: string, callback?: (response: any) => void): void {\n this.create({\n resource: '/api/upload/cancel',\n eventPrefix: 'cancel:upload',\n data: {\n uploadId, ingestUrl\n },\n callback\n });\n }\n\n private getFileUploadRequest(file: File, fileLifestyle: FileLifestyle): HashObject {\n const splitName = file.name.split('.');\n\n /**\n * TODO: We may need to set the file permanence in file api to\n * permanent for resources and subtitles\n * Check what Prad/Cam say in\n * https://app.asana.com/0/720933954350984/735809491718142\n */\n return {\n name: splitName.join('.'),\n extension: splitName.length > 1 ? splitName.pop() : '',\n fileSize: file.size,\n fileLifestyle\n };\n }\n\n public onDestroy(): void {\n InstanceManager\n .releaseInstance(DataProviders.Ajax)\n .releaseInstance(Caches.Fifo);\n }\n}\n\n\nexport interface UploadItem extends Core.Model {\n file: File;\n name: string;\n progress: number;\n}\n\nexport enum UploadType {\n Video,\n LearningResource,\n Subtitle,\n MixedMedia\n}\n\nconst AcceptedFiles = {\n [UploadType.Video]: FileExtensions.VIDEO,\n [UploadType.LearningResource]: FileExtensions.RESOURCES,\n [UploadType.Subtitle]: FileExtensions.SUBTITLES,\n [UploadType.MixedMedia]: FileExtensions.MIXED_MEDIA\n};\n\nconst ChannelNames = {\n [UploadType.Video]: SharedServiceChannels.VIDEO_UPLOAD,\n [UploadType.LearningResource]: SharedServiceChannels.RESOURCE_UPLOAD,\n [UploadType.Subtitle]: SharedServiceChannels.SUBTITLE_UPLOAD,\n [UploadType.MixedMedia]: SharedServiceChannels.MIXED_MEDIA_UPLOAD\n};\n\nconst CHUNK_SIZE = 1024 * 1024 * 4; // 4mb\nconst MAX_FILE_SIZE = 1024 * 1024 * 1024 * 50; // 50gb\n\nexport interface UploadServiceOptions {\n uploadUrl?: string;\n}\n\nclass UploadService extends Core.Service {\n protected options: UploadServiceOptions;\n protected uploadType: UploadType;\n protected fileLifestyle: FileLifestyle;\n\n /**\n *\n */\n constructor(options: UploadServiceOptions = {}) {\n super({\n uploadUrl: '/api/upload',\n ...options\n });\n }\n\n protected uploader: UploadApiWrapper;\n\n private progressViewModel: Core.Model;\n\n private uploadDataService: UploadDataService;\n\n private collection: Core.Collection<UploadItem>;\n\n public initialize(): void {\n this.uploadDataService = new UploadDataService();\n\n this.progressViewModel = ViewModelService.get(`upload:progress:${this.uploadType}`);\n\n this.bindListeners();\n }\n\n // @ts-ignore\n public get channelName(): string {\n return ChannelNames[this.uploadType];\n }\n\n // @ts-ignore\n public get lang(): string {\n return 'uploadShared.services';\n }\n\n /**\n * Dropzone is initialized once after the first upload is requested and it's chunk size\n * is set for the rest of the uploads. If we happen to have multiple ingest\n * servers that have different chunk max / min sizes, this may voilate those\n * sizes.\n */\n private initUploader(minChunkSize: number, maxChunkSize: number): void {\n if (this.uploader)\n return;\n\n let chunkSize = CHUNK_SIZE;\n\n if (minChunkSize && chunkSize < minChunkSize)\n chunkSize = minChunkSize;\n\n if (maxChunkSize && chunkSize > maxChunkSize)\n chunkSize = maxChunkSize;\n\n this.uploader = new DropzoneWrapper({\n chunkingEnabled: true,\n loggingEnabled: true,\n chunkSize,\n maxFileSize: MAX_FILE_SIZE,\n acceptedFiles: this.getAcceptedFiles(),\n channelName: this.channelName\n });\n }\n\n private bindListeners(): void {\n this.listenTo(this.channelName, 'progress', this.onProgress);\n\n this.listenTo(this.channelName, UploadEventNames.UPLOAD_SUCCESS, this.onSuccess);\n }\n\n private onProgress(id: string, percentage: number, totalUploaded: number): void {\n const model = this.collection.get(id);\n\n if (!model)\n return;\n\n model.set({\n progress: percentage > 100 ? 100 : percentage,\n totalUploaded\n });\n\n this.setOverallProgress();\n }\n\n public isUploading(): boolean {\n return !!this.getCollection().length;\n }\n\n public getCollection(): Core.Collection<UploadItem> {\n if (this.collection)\n return this.collection;\n\n this.collection = new Core.Collection<UploadItem>();\n return this.collection;\n }\n\n public setOverallProgress(): void {\n let totalUploaded = 0;\n let totalFileSize = 0;\n\n const collection = this.getCollection();\n\n if (!collection.length) {\n this.progressViewModel.set({ progress: 0 });\n return;\n }\n\n collection.each((model: Core.Model) => {\n totalUploaded += model.get('totalUploaded') || 0;\n totalFileSize += model.get('file').size || 0;\n });\n\n const percentage = totalUploaded / totalFileSize * 100;\n\n const done = percentage >= 100;\n\n const updateProgress = () => {\n this.progressViewModel.set({\n progress: done ? 100 : percentage,\n done\n });\n };\n\n if (!done) {\n updateProgress();\n return;\n }\n \n /**\n * The ingest backend takes a short while after an upload is done\n * before the complete endpoint will actually response successfully.\n * So this prevents the eager beavers from clicking \"finish\" immediately\n * and having their entire upload session break.\n * - Sha\n */\n window.setTimeout(updateProgress, 2000);\n }\n\n public isValidFile(file: File): boolean {\n return DropzoneWrapper.isValidFile(file, this.getAcceptedFiles());\n }\n\n /**\n * Request uploads from fileApi and starts uploading.\n * @param files Array of browser File objects\n * @returns Returns false if any of the files did not match the accepted file list.\n */\n public addFiles(files: File[], analyticsOptions?: AnalyticsOptions): void {\n if (_.any(files, file => !this.isValidFile(file))) {\n Core.ErrorHelper.throw(\n new FileTypeError(LanguageService.getPhrase(this.lang, 'invalidFileType'))\n );\n return;\n }\n\n this.requestUploads(files, analyticsOptions);\n }\n\n private requestUploads(files: File[], analyticsOptions?: AnalyticsOptions): void {\n const wasUploading = this.isUploading();\n\n const collection = this.getCollection();\n\n const fileCallback = (file: File, response: any) => {\n /**\n * minChunkSize and maxChunkSize have been deprecated.\n * Remove once Lite and Library Editor has been updated\n * to use the new fields minChunkLength and maxChunkLength.\n */\n if ('minChunkSize' in response || 'maxChunkSize' in response) {\n this.initUploader(response.minChunkSize * 1024, response.maxChunkSize * 1024);\n } else {\n this.initUploader(response.minChunkLength, response.maxChunkLength);\n }\n\n (file as any).cvUpload = {\n uploadId: response.uploadId,\n ingestUrl: response.ingestUrl\n };\n\n this.uploader.addFile(file);\n\n let fileName = file.name;\n\n // Remove file extension from filename if video\n if (this.uploadType === UploadType.Video)\n fileName = fileName.replace(/\\.[^/.]+$/, '');\n\n collection.add({\n id: this.uploader.getId(file),\n file,\n name: fileName,\n ...this.getAdditionalFileInfo(file, response)\n }, { at: collection.length - 1 });\n };\n\n const callback = () => {\n if (analyticsOptions) {\n AnalyticsHelper.logUserAction({\n uploadCount: files.length\n }, analyticsOptions);\n }\n\n const channel = Radio.channel(this.channelName);\n channel.trigger(UploadEventNames.FILES_ADDED, files, wasUploading);\n };\n\n this.uploadDataService.requestUploads(\n this.options.uploadUrl,\n files,\n this.fileLifestyle,\n fileCallback,\n callback\n );\n }\n\n public addFile(file: File, analyticsOptions: AnalyticsOptions): void {\n this.addFiles([file], analyticsOptions);\n }\n\n public cancelUpload(id: string): void {\n const collection = this.getCollection();\n const model = collection.get(id);\n\n if (!model)\n return;\n\n const file = model.get('file') as any;\n\n this.uploader.removeFile(file);\n collection.remove(model);\n\n this.uploadDataService.cancelUpload(file.cvUpload.uploadId, file.cvUpload.ingestUrl, () => {\n AnalyticsHelper.logUserAction(model.toJSON(), {\n entity: EntityType.Video,\n actionType: UserAction.Upload,\n workflowPhase: WorkflowPhase.Discard,\n descriptor: OperationDescriptor.Single,\n location: LocationContext.MyUploads\n });\n\n Radio.channel(this.channelName).trigger(UploadEventNames.UPLOAD_CANCELLED);\n });\n\n this.setOverallProgress();\n }\n\n protected onSuccess(file: File, response: any): void {\n const fileId = this.uploader.getId(file);\n\n const upload = this.getCollection().get(fileId);\n\n upload.set('fileInfo', response);\n\n AnalyticsHelper.logUserAction({\n id: (file as any).cvUpload.uploadId\n }, {\n entity: EntityType.Video,\n actionType: UserAction.Upload,\n workflowPhase: WorkflowPhase.Complete,\n descriptor: OperationDescriptor.Single,\n location: LocationContext.VideoUpload\n });\n\n const channel = Radio.channel(this.channelName);\n channel.trigger(UploadEventNames.UPLOAD_COMPLETE, upload);\n }\n\n public cancelAllUploads(): void {\n /**\n * We're using model ids and _.each\n * instead of collection.each because this.cancelUpload\n * removes items from the collection which breaks collection.each\n */\n const models = this.getCollection().map(m => m.get('id'));\n _.each(models, m => this.cancelUpload(m));\n }\n\n public getUpload(file: File): Core.Model {\n const fileId = this.uploader.getId(file);\n\n return this.getCollection().get(fileId);\n }\n\n protected getAcceptedFiles(): string {\n return AcceptedFiles[this.uploadType];\n }\n\n // eslint-disable-next-line\n protected getAdditionalFileInfo(file: File, response: any): HashObject {\n return {};\n }\n}\n\nexport class BaseVideoUploadService extends UploadService {\n // @ts-ignore\n protected get uploadType(): UploadType {\n return UploadType.Video;\n }\n\n // @ts-ignore\n public get name(): string {\n return SharedServices.VideoUpload;\n }\n\n // @ts-ignore\n public get fileLifestyle(): FileLifestyle {\n return FileLifestyle.Temporary;\n }\n}\n\nexport class SubtitleUploadService extends UploadService {\n // @ts-ignore\n protected get uploadType(): UploadType {\n return UploadType.Subtitle;\n }\n\n // @ts-ignore\n public get name(): string {\n return SharedServices.SubtitleUpload;\n }\n\n // @ts-ignore\n public get fileLifestyle(): FileLifestyle {\n return FileLifestyle.Permanent;\n }\n}\n\nexport class LearningResourceUploadService extends UploadService {\n // @ts-ignore\n protected get uploadType(): UploadType {\n return UploadType.LearningResource;\n }\n\n // @ts-ignore\n public get name(): string {\n return SharedServices.ResourceUpload;\n }\n\n // @ts-ignore\n public get fileLifestyle(): FileLifestyle {\n return FileLifestyle.Permanent;\n }\n}\n\nexport class MixedMediaUploadService extends UploadService {\n // @ts-ignore\n protected get uploadType(): UploadType {\n return UploadType.MixedMedia;\n }\n\n // @ts-ignore\n public get name(): string {\n return SharedServices.MixedMediaUpload;\n }\n\n // @ts-ignore\n public get fileLifestyle(): FileLifestyle {\n return FileLifestyle.Temporary;\n }\n}","import * as _ from 'underscore';\n\n/**\n * This are kept as separate variables for when we eventually need a single group of them.\n * For example when we add image upload support.\n */\n\nconst pdfExtensions = ['pdf'];\nconst docExtensions = [ 'doc', 'docx', 'dotx', 'dot', 'rtf', 'docm', 'odt' ];\nconst textExtensions = [ 'csv', 'txt' ];\nconst excelExtensions = [ 'xls', 'xlt', 'xlsx' ];\nconst imageExtensions = [ 'jpg', 'tif', 'png', 'bmp', 'gif', 'jpeg' ];\nconst videoMimeType = 'video/*';\nconst archiveExtensions = [ 'zip', 'rar' ];\nconst powerPointExtensions = [ 'ppt', 'pot', 'pps', 'pptx' ];\n\nconst subtitleExtensions = ['srt'];\n\nconst FileExtensions = {\n IMAGES: `.${imageExtensions.join(',.')}`,\n VIDEO: videoMimeType,\n MIXED_MEDIA: `.${imageExtensions.join(',.')},${videoMimeType}`,\n RESOURCES: `.${[\n ...docExtensions,\n ...excelExtensions,\n ...powerPointExtensions,\n ...pdfExtensions,\n ...textExtensions,\n ...imageExtensions,\n ...archiveExtensions\n ].join(',.')}`,\n SUBTITLES: `.${subtitleExtensions.join(',.')}`\n};\n\nconst FileExtensionHelper = {\n getResourceType(extension: string): string {\n const ext = extension.toLowerCase();\n\n if (_.contains(docExtensions, ext)) return 'document';\n if (_.contains(excelExtensions, ext)) return 'excel';\n if (_.contains(powerPointExtensions, ext)) return 'powerpoint';\n if (_.contains(pdfExtensions, ext)) return 'pdf';\n\n if (_.contains(textExtensions, ext)) return 'text';\n if (_.contains(imageExtensions, ext)) return 'image';\n if (_.contains(archiveExtensions, ext)) return 'archive';\n if (_.contains(subtitleExtensions, ext)) return 'subtitle';\n\n return '';\n }\n};\n\nexport { FileExtensions, FileExtensionHelper };"],"names":["FileTypeError","message","title","this","lang","text","buttons","className","success","close","FileLifestyle","InternetConnectivityError","LanguageService","DialogError","SlowInternetError","dropzoneEvents","DropzoneWrapper","options","slowInternetTimeout","showSlowInternetTimeout","loggingEnabled","uploadChannel","Radio","channelName","self","dropzone","document","createElement","url","files","cvUpload","ingestUrl","chunking","chunkingEnabled","chunkSize","forceChunking","autoProcessQueue","maxFilesize","maxFileSize","acceptedFiles","paramName","timeout","init","eventName","on","args","file","File","name","console","info","percentage","totalBytes","progress","size","trigger","getId","chunks","upload","lastChunk","xhr","response","JSON","parse","fileId","id","messageObj","status","AlertError","fileName","window","clearTimeout","path","setTimeout","params","chunk","chunk_index","index","upload_length","addedfile","thumbnail","uploadprogress","uuid","addFile","removeFile","processQueue","destroy","UploadType","UploadDataService","dataProvider","InstanceManager","DataProviders","cache","Caches","alertService","CommonServices","incrementingUploadId","resource","fileLifestyle","fileCallback","callback","chain","create","eventPrefix","data","getFileUploadRequest","errorHandler","error","func","run","uploadId","splitName","split","join","extension","length","pop","fileSize","releaseInstance","BaseDataService","B","AcceptedFiles","Video","LearningResource","Subtitle","MixedMedia","ChannelNames","UploadService","uploadUrl","uploadDataService","progressViewModel","ViewModelService","uploadType","bindListeners","minChunkSize","maxChunkSize","uploader","getAcceptedFiles","listenTo","onProgress","onSuccess","totalUploaded","model","collection","get","set","setOverallProgress","getCollection","totalFileSize","each","done","updateProgress","isValidFile","analyticsOptions","requestUploads","wasUploading","isUploading","initUploader","minChunkLength","maxChunkLength","replace","add","getAdditionalFileInfo","at","AnalyticsHelper","uploadCount","addFiles","remove","cancelUpload","toJSON","entity","actionType","workflowPhase","descriptor","location","models","map","m","BaseVideoUploadService","SharedServices","Temporary","SubtitleUploadService","Permanent","LearningResourceUploadService","MixedMediaUploadService","pdfExtensions","docExtensions","textExtensions","excelExtensions","imageExtensions","videoMimeType","archiveExtensions","powerPointExtensions","subtitleExtensions","FileExtensions","IMAGES","VIDEO","MIXED_MEDIA","RESOURCES","SUBTITLES","FileExtensionHelper","getResourceType","ext","toLowerCase"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4185],{1619:(e,t,n)=>{n.d(t,{e:()=>g});var a=n(32735),r=n(23481),s=n(12528),l=n(83914),o=n(35223),i=n(33518),c=n(2510);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 u(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 p=r.T.encloseNamespace("sharev2.shareAvatar"),d=u(u(u(u({},c.y.Open,o.vn.Classrooms),c.y.Link,o.vn.Link),c.y.Classroom,o.vn.Classrooms),c.y.Live,o.vn.Play),v=u(u(u(u({},c.y.Open,"blue"),c.y.Link,"black"),c.y.Classroom,"teal"),c.y.Live,"purple"),h=u(u(u(u({},c.y.Open,"openShareType"),c.y.Link,"linkShareType"),c.y.Classroom,"classroomShareType"),c.y.Live,"liveShareType");function g(e){var t,n,r,o,m;return a.createElement("div",{className:"d-flex align-items-center gap-2"},a.createElement("div",null,a.createElement(s.f,{svgName:d[e.type],variant:v[e.type],textVariant:"white",svgWrapperClassName:"p-1",svgSize:null!==(t=e.svgSize)&&void 0!==t?t:l.S.Standard})),a.createElement("div",{className:"d-flex flex-column"},a.createElement("p",{className:"m-0"},(o=(r=e).type,m=r.classroomName,o===c.y.Classroom&&m?m:p(h[o]))),!e.hideSubtitle&&a.createElement("span",{className:"text-secondary"},null!==(n=e.subtitleText)&&void 0!==n?n:function(e){var t=e.type,n=e.privacy,a=e.studentCount,r=void 0===a?0:a,s=e.classroomGroupCount,l=void 0===s?0:s;switch(t){case c.y.Classroom:return function(e,t){return e&&t?"".concat(p("classroomGroupCount",{smartCount:e}),", ").concat(p("studentSubTitle",{smartCount:t})):e?p("groupSubTitle",{smartCount:e}):t?p("studentSubTitle",{smartCount:t}):p("allStudentsSubTitle")}(l,r);case c.y.Open:return p("openShareTypeSubTitle");case c.y.Link:return function(e){return[i.e.JustMySchool,i.e.Protected].includes(e)?p("respectRatingsSubTitle"):e===i.e.JustMySchoolOverrideRestriction?p("anyoneInSchoolSubTitle"):e===i.e.ProtectedOverrideRestriction?p("anyoneSignedInSubTitle"):e===i.e.Public?p("anyoneWithLinkSubTitle"):e===i.e.PinCode?p("anyoneWithPinSubTitle"):void 0}(n);case c.y.Live:return p("liveShareTypeSubTitle");default:return p("publicShareTypeSubTitle")}}(e))))}},41661:(e,t,n)=>{var a;n.d(t,{D:()=>a}),function(e){e.GoogleClassroom="google-classroom",e.MicrosoftTeams="microsoft-teams",e.Vivi="vivi",e.AppleTv="apply-tv"}(a||(a={}))},40841:(e,t,n)=>{n.d(t,{_:()=>o});var a=n(23481),r=n(41661),s=n(65728),l=a.T.encloseNamespace("shared.shared-utils"),o={getShareIntegrations:function(e,t){return[{id:r.D.GoogleClassroom,name:l("googleClassroom"),enabled:e,settingName:s.E.ShareToGoogleClassroom},{id:r.D.MicrosoftTeams,name:l("msftTeams"),enabled:t,settingName:s.E.ShareToMicrosoftTeams}]}}},5655:(e,t,n)=>{n.d(t,{QD:()=>T,Qv:()=>C,__:()=>S});var a=n(32735),r=n(68050),s=n(69111),l=n(42648),o=n(82602),i=n(31453),c=n(1619),m=n(83914),u=n(35223),p=n(2510);function d(e){return a.createElement("span",{className:"d-inline-flex flex-row gap-2 align-items-center"},a.createElement(m.x,{svgName:u.vn.User}),a.createElement("span",null,function(){var t=e.share.accessCount||0;if(e.share.type===p.y.Open)return"".concat(t);if(e.share.type===p.y.Classroom){var n=e.share.recipients.length;return"".concat(t,"/").concat(n)}return"-"}()))}var v=n(21789),h=n(15611),g=n(91693),y=n(83345);const f={shareListItem:"vLROV",visibleOnHover:"o2KJH"};var b="assign.previousAssignments";function E(e){return a.createElement("div",{className:(0,i.A)("d-flex align-items-center justify-content-between",e.show&&"mb-3")},a.createElement("h3",{className:"h6 m-0 p-0"},a.createElement(y.x,{namespace:b,phrase:"heading",options:{count:e.count}})),a.createElement(g.h,{svgName:e.show?u.vn.ChevronUp:u.vn.ChevronDown,onClick:e.onToggle}))}function S(){var e="d-flex align-items-end justify-content-start fw-medium";return a.createElement(y.D.Provider,{value:b},a.createElement(r.Z,{className:"gx-2 px-3 mb-2"},a.createElement(s.Z,{xs:4,className:e},a.createElement(y.x,{phrase:"assignedTo"})),a.createElement(s.Z,{xs:2,className:e},a.createElement(y.x,{phrase:"views"})),a.createElement(s.Z,{xs:2,className:e},a.createElement(y.x,{phrase:"viewedBy"})),a.createElement(s.Z,{xs:4,className:e},a.createElement(y.x,{phrase:"dateCreated"}))))}function x(e){var t,n=v.x.getClassroomForShare(e.share,e.classrooms),l=null===(t=e.getItemAnalytics)||void 0===t?void 0:t.call(e,e.share);return a.createElement(h.F,{key:e.share.shareId,appLink:e.getItemAppLink(e.share),analyticsData:null==l?void 0:l.data,analyticsOptions:null==l?void 0:l.options,className:(0,i.A)("d-block p-3 hover-bg-light-blue border border-top-0 no-hover-text-underline",f.shareListItem,e.className)},a.createElement(r.Z,{className:"gx-2"},a.createElement(s.Z,{xs:4,className:"d-flex align-items-center"},a.createElement(c.e,{type:e.share.type,privacy:e.share.privacy,classroomName:null==n?void 0:n.name,svgSize:m.S.Small,hideSubtitle:!0})),a.createElement(s.Z,{xs:2,className:"d-flex align-items-center justify-content-start"},a.createElement(y.x,{namespace:b,phrase:"viewCount",options:{smartCount:e.share.viewCount||0}})),a.createElement(s.Z,{xs:2,className:"d-flex align-items-center justify-content-start"},a.createElement(d,{share:e.share})),a.createElement(s.Z,{xs:4,lg:3,className:"d-flex align-items-center justify-content-start"},a.createElement("span",null,(0,o.WU)(e.share.dateCreated))),a.createElement(s.Z,{lg:1,className:"align-items-center justify-content-end d-none d-lg-flex"},a.createElement("span",{className:(0,i.A)("cursor-pointer text-info hover-text-underline",f.visibleOnHover)},a.createElement(y.x,{namespace:b,phrase:"view"})))))}function C(e){var t;return a.createElement("div",{className:(0,i.A)("d-flex flex-column border-top rounded-top overflow-hidden")},a.createElement(l.ZP,{autoHeight:!0,autoHeightMin:0,autoHeightMax:null!==(t=e.scrollHeightMax)&&void 0!==t?t:215,autoHide:!0},e.assignments.reverse().map((function(t,n){return a.createElement(x,{share:t,classrooms:e.classrooms,getItemAppLink:e.getItemAppLink,getItemAnalytics:function(t){var a;return null===(a=e.getItemAnalytics)||void 0===a?void 0:a.call(e,t,n)},className:(0,i.A)(n%2==0&&"bg-gray-100"),key:t.shareId})}))))}function T(e){if(!e.assignments.length)return a.createElement(a.Fragment,null);var t=e.show&&e.assignments.length>3;return a.createElement("div",{className:(0,i.A)("bg-white rounded-3 p-3",t&&"pb-0")},a.createElement(E,{count:e.assignments.length,onToggle:e.onToggle,show:e.show}),e.show&&a.createElement(a.Fragment,null,a.createElement(S,null),a.createElement(C,Object.assign({},e))))}},63398:(e,t,n)=>{n.r(t),n.d(t,{ShowAssignmentsView:()=>T});var a=n(32735),r=n(23481),s=n(20354),l=n(75896),o=n(2510),i=n(18488),c=n(21789),m=n(97958),u=n(9111),p=n(83345),d=n(99742),v=n(86099),h=n(83351),g=n(5655),y=n(95890),f=n(40254),b=n(88630),E="assign.showAssignmentsView",S=r.T.encloseNamespace(E),x=400;function C(e){return a.createElement(m.u,{className:"py-4"},a.createElement(m.u.Image,{src:d.W.EmptyStates.Share.MY_SHARES}),a.createElement(m.u.Heading,null,a.createElement(p.x,{phrase:"emptyTitle",namespace:E})),a.createElement(m.u.Cta,{text:S("emptyCta"),appLink:e.appLink}))}function T(e){var t,n,r=(0,y._)({objectId:e.objectId,entityType:e.entityType}),m=s.a.useBasicFetch(i.o.getSharesByObjectId(e.objectId)),p=(null===(t=m.data)||void 0===t?void 0:t.filter((function(e){return[o.y.Classroom,o.y.Open].includes(e.type)})))||[],d=l.m.uniq(p.map(c.x.getClassroomIdFromShare).filter((function(e){return!!e}))),E=s.a.useBasicFetch(m.hasCompleted&&b.F.getClassroomsByIds(d,null===(n=r.currentUser.data)||void 0===n?void 0:n.customerId)),T=r.loaded&&!!m.data&&!!E.data;return a.createElement(u.G,{size:"lg",title:S("title"),showLoadingSpinner:!T,closePopup:e.closePopup},!p.length&&a.createElement(C,{appLink:f.W.flowSelector({entityType:e.entityType,objectId:e.objectId})}),!!p.length&&a.createElement(a.Fragment,null,a.createElement(g.__,null),a.createElement(g.Qv,{assignments:p,classrooms:E.data,getItemAppLink:function(e){var t=(0,v.pY)(e);if(t)return t},scrollHeightMax:x})),a.createElement(h.P,{hideNextButton:!0,hideCreateClassroomButton:!0,onClickBack:e.closePopup,backButtonText:S("close")}))}},82602:(e,t,n)=>{n.d(t,{WU:()=>c});var a=["second","minute","hour","day","week","month","year"],r=["秒","分钟","小时","天","周","个月","年"],s={},l=function(e,t){s[e]=t},o=[60,60,24,7,365/7/12,12];function i(e){return e instanceof Date?e:!isNaN(e)||/^\d+$/.test(e)?new Date(parseInt(e)):(e=(e||"").trim().replace(/\.\d+/,"").replace(/-/,"/").replace(/-/,"/").replace(/(\d)T(\d)/,"$1 $2").replace(/Z/," UTC").replace(/([+-]\d\d):?(\d\d)/," $1$2"),new Date(e))}var c=function(e,t,n){var a=function(e,t){return(+(t?i(t):new Date)-+i(e))/1e3}(e,n&&n.relativeDate);return function(e,t){for(var n=e<0?1:0,a=e=Math.abs(e),r=0;e>=o[r]&&r<o.length;r++)e/=o[r];return(e=Math.floor(e))>(0==(r*=2)?9:1)&&(r+=1),t(e,r,a)[n].replace("%s",e.toString())}(a,function(e){return s[e]||s.en_US}(t))};l("en_US",(function(e,t){if(0===t)return["just now","right now"];var n=a[Math.floor(t/2)];return e>1&&(n+="s"),[e+" "+n+" ago","in "+e+" "+n]})),l("zh_CN",(function(e,t){if(0===t)return["刚刚","片刻后"];var n=r[~~(t/2)];return[e+" "+n+"前",e+" "+n+"后"]}))}}]);
2
- //# sourceMappingURL=4185-e8e40dab72-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/4185-e8e40dab72-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/share-v2/components/share-avatar/ShareAvatar.tsx","file:///app/packages/libs/shared/src/enums/IntegrationId.ts","file:///app/packages/libs/shared/src/utils/IntegrationHelper.ts","file:///app/packages/libs/shared/src/apps/share-v2/components/share-view-count/ShareViewCount.tsx","file:///app/packages/projects/lite/src/apps/assign/components/previous-assignments/previous-assignments.scss","file:///app/packages/projects/lite/src/apps/assign/components/previous-assignments/PreviousAssignments.tsx","file:///app/packages/projects/lite/src/apps/assign/views/show-assignments-view/ShowAssignmentsView.tsx","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 React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { SharePrivacy } from '../../enums/SharePrivacy';\nimport { ShareType } from '../../enums/ShareType';\n\nconst namespace = 'sharev2.shareAvatar';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst icons = {\n [ShareType.Open]: cvSvgLibrary.Classrooms,\n [ShareType.Link]: cvSvgLibrary.Link,\n [ShareType.Classroom]: cvSvgLibrary.Classrooms,\n [ShareType.Live]: cvSvgLibrary.Play\n};\n\nconst iconColours = {\n [ShareType.Open]: 'blue',\n [ShareType.Link]: 'black',\n [ShareType.Classroom]: 'teal',\n [ShareType.Live]: 'purple'\n};\n\nconst shareTypeTitlePhraseMap = {\n [ShareType.Open]: 'openShareType',\n [ShareType.Link]: 'linkShareType',\n [ShareType.Classroom]: 'classroomShareType',\n [ShareType.Live]: 'liveShareType'\n};\n\nfunction getTitle({ type, classroomName }: ShareAvatarProps) {\n if (type === ShareType.Classroom && classroomName)\n return classroomName;\n\n return getPhrase(shareTypeTitlePhraseMap[type]);\n}\n\nfunction getClassroomSubtitle(classroomGroupCount: number, studentCount: number): string {\n if (classroomGroupCount && studentCount)\n return `${getPhrase('classroomGroupCount', { smartCount: classroomGroupCount })}, ${getPhrase('studentSubTitle', { smartCount: studentCount })}`;\n\n if (classroomGroupCount)\n return getPhrase('groupSubTitle', { smartCount: classroomGroupCount });\n\n if (studentCount)\n return getPhrase('studentSubTitle', { smartCount: studentCount });\n\n return getPhrase('allStudentsSubTitle');\n}\n\nfunction getLinkSubtitle(privacy: SharePrivacy) {\n if ([ SharePrivacy.JustMySchool, SharePrivacy.Protected ].includes(privacy))\n return getPhrase('respectRatingsSubTitle');\n\n if (privacy === SharePrivacy.JustMySchoolOverrideRestriction)\n return getPhrase('anyoneInSchoolSubTitle');\n\n if (privacy === SharePrivacy.ProtectedOverrideRestriction)\n return getPhrase('anyoneSignedInSubTitle');\n\n if (privacy === SharePrivacy.Public)\n return getPhrase('anyoneWithLinkSubTitle');\n\n if (privacy === SharePrivacy.PinCode)\n return getPhrase('anyoneWithPinSubTitle');\n}\n\nfunction getSubtitle({ type, privacy, studentCount = 0, classroomGroupCount = 0 }: ShareAvatarProps) {\n switch (type) {\n case ShareType.Classroom:\n return getClassroomSubtitle(classroomGroupCount, studentCount);\n\n case ShareType.Open:\n return getPhrase('openShareTypeSubTitle');\n\n case ShareType.Link:\n return getLinkSubtitle(privacy);\n \n case ShareType.Live:\n return getPhrase('liveShareTypeSubTitle');\n\n default:\n return getPhrase('publicShareTypeSubTitle');\n }\n}\n\ninterface ShareAvatarProps {\n type: ShareType;\n privacy: SharePrivacy;\n studentCount?: number;\n classroomGroupCount?: number;\n classroomName?: string;\n hideSubtitle?: boolean;\n subtitleText?: string;\n svgSize?: SvgContainerSize;\n}\n\nexport function ShareAvatar(props: ShareAvatarProps): JSX.Element {\n return (\n <div className='d-flex align-items-center gap-2'>\n <div>\n <IconCircle\n svgName={icons[props.type]}\n variant={iconColours[props.type]}\n textVariant='white'\n svgWrapperClassName='p-1'\n svgSize={props.svgSize ?? SvgContainerSize.Standard}\n />\n </div>\n <div className='d-flex flex-column'>\n <p className='m-0'>{getTitle(props)}</p>\n {!props.hideSubtitle && <span className='text-secondary'>{props.subtitleText ?? getSubtitle(props)}</span>}\n </div>\n </div>\n );\n}","export enum IntegrationId {\n GoogleClassroom = 'google-classroom',\n MicrosoftTeams = 'microsoft-teams',\n Vivi = 'vivi',\n AppleTv = 'apply-tv'\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { IntegrationId } from 'libs/shared/enums/IntegrationId';\nimport { SettingName } from 'libs/shared/enums/SettingName';\nimport { Integration } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.shared-utils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport const IntegrationHelper = {\n getShareIntegrations(googleClassroomSetting: boolean, msftTeamsSetting: boolean): Integration[] {\n return [\n {\n id: IntegrationId.GoogleClassroom,\n name: getPhrase('googleClassroom'),\n enabled: googleClassroomSetting,\n settingName: SettingName.ShareToGoogleClassroom\n },\n {\n id: IntegrationId.MicrosoftTeams,\n name: getPhrase('msftTeams'),\n enabled: msftTeamsSetting,\n settingName: SettingName.ShareToMicrosoftTeams\n }\n ];\n }\n};\n","import React from 'react';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ShareType } from '../../enums/ShareType';\nimport { Share } from '../../interfaces/Share';\n\n\ninterface ShareViewCountProps {\n share: Share;\n}\n\nexport function ShareViewCount(props: ShareViewCountProps): JSX.Element {\n function getViewCount(): string {\n const shareAccessCount = props.share.accessCount || 0;\n if (props.share.type === ShareType.Open)\n return `${shareAccessCount}`;\n\n if (props.share.type === ShareType.Classroom) {\n const totalRecipients = props.share.recipients.length;\n return `${shareAccessCount}/${totalRecipients}`;\n }\n\n return '-';\n }\n \n return (\n <span className='d-inline-flex flex-row gap-2 align-items-center'>\n <SvgContainer svgName={cvSvgLibrary.User} />\n <span>{getViewCount()}</span>\n </span>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"shareListItem\":\"vLROV\",\"visibleOnHover\":\"o2KJH\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\nimport Scrollbars from 'react-custom-scrollbars-2';\nimport { format as formatDate } from 'timeago.js';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { ShareAvatar } from 'libs/shared/apps/share-v2/components/share-avatar/ShareAvatar';\nimport { ShareViewCount } from 'libs/shared/apps/share-v2/components/share-view-count/ShareViewCount';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { Classroom } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './previous-assignments.scss';\n\nconst namespace = 'assign.previousAssignments';\n\ninterface PreviousAssignmentsHeaderProps {\n count: number;\n show: boolean;\n onToggle: () => void;\n}\n\nfunction PreviousAssignmentsHeader(props: PreviousAssignmentsHeaderProps): JSX.Element {\n return (\n <div className={classNames('d-flex align-items-center justify-content-between', props.show && 'mb-3')}>\n <h3 className='h6 m-0 p-0'><Text namespace={namespace} phrase='heading' options={{ count: props.count }} /></h3>\n <IconButton\n svgName={props.show ? cvSvgLibrary.ChevronUp : cvSvgLibrary.ChevronDown}\n onClick={props.onToggle}\n />\n </div>\n );\n}\n\nexport function PreviousAssignmentsListHeader(): JSX.Element {\n const columnClassNames = 'd-flex align-items-end justify-content-start fw-medium';\n \n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <Row className='gx-2 px-3 mb-2'>\n <Col xs={4} className={columnClassNames}>\n <Text phrase='assignedTo' />\n </Col>\n <Col xs={2} className={columnClassNames}>\n <Text phrase='views' />\n </Col>\n <Col xs={2} className={columnClassNames}>\n <Text phrase='viewedBy' />\n </Col>\n <Col xs={4} className={columnClassNames}>\n <Text phrase='dateCreated' />\n </Col>\n </Row>\n </LanguageNamespaceContext.Provider>\n );\n}\n\ntype ItemAnalytics = {\n data: HashObject;\n options: AnalyticsOptions;\n}\ninterface PreviousAssignmentListItemProps {\n share: Share;\n classrooms: Classroom[];\n getItemAppLink: (share: Share) => Core.AppLink;\n\n getItemAnalytics?: (share: Share) => ItemAnalytics;\n className?: string;\n}\n\nfunction PreviousAssignmentListItem(props: PreviousAssignmentListItemProps): JSX.Element {\n const shareClassroom = ShareHelper.getClassroomForShare(props.share, props.classrooms);\n\n const analytics = props.getItemAnalytics?.(props.share);\n\n return (\n <AppLink\n key={props.share.shareId}\n appLink={props.getItemAppLink(props.share)}\n analyticsData={analytics?.data}\n analyticsOptions={analytics?.options}\n className={classNames('d-block p-3 hover-bg-light-blue border border-top-0 no-hover-text-underline', styles.shareListItem, props.className)}\n >\n <Row className='gx-2'>\n <Col xs={4} className='d-flex align-items-center'>\n <ShareAvatar\n type={props.share.type}\n privacy={props.share.privacy}\n classroomName={shareClassroom?.name}\n svgSize={SvgContainerSize.Small}\n hideSubtitle\n />\n </Col>\n <Col xs={2} className='d-flex align-items-center justify-content-start'>\n <Text namespace={namespace} phrase='viewCount' options={{ smartCount: props.share.viewCount || 0 }} />\n </Col>\n <Col xs={2} className='d-flex align-items-center justify-content-start'>\n <ShareViewCount share={props.share} />\n </Col>\n <Col xs={4} lg={3} className='d-flex align-items-center justify-content-start'>\n <span>{formatDate(props.share.dateCreated)}</span>\n </Col>\n <Col lg={1} className='align-items-center justify-content-end d-none d-lg-flex'>\n <span className={classNames('cursor-pointer text-info hover-text-underline', styles.visibleOnHover)}>\n <Text namespace={namespace} phrase='view' />\n </span>\n </Col>\n </Row>\n </AppLink>\n );\n}\n\ninterface PreviousAssignmentsListProps {\n assignments: Share[];\n classrooms: Classroom[];\n getItemAppLink: (share: Share) => Core.AppLink;\n getItemAnalytics?: (share: Share, yIndex: number) => ItemAnalytics;\n scrollHeightMax?: number;\n}\n\nexport function PreviousAssignmentsList(props: PreviousAssignmentsListProps): JSX.Element {\n return (\n <div className={classNames(\n 'd-flex flex-column border-top rounded-top overflow-hidden'\n )}>\n <Scrollbars\n autoHeight\n autoHeightMin={0}\n autoHeightMax={props.scrollHeightMax ?? 215}\n autoHide\n >\n {props.assignments.reverse().map((share, idx) => (\n <PreviousAssignmentListItem\n share={share}\n classrooms={props.classrooms}\n getItemAppLink={props.getItemAppLink}\n getItemAnalytics={share => props.getItemAnalytics?.(share, idx)}\n className={classNames(idx % 2 === 0 && 'bg-gray-100')}\n key={share.shareId}\n />\n ))}\n </Scrollbars>\n </div>\n );\n}\n\ninterface PreviousAssignmentsProps {\n show: boolean;\n assignments: Share[];\n classrooms: Classroom[];\n onToggle: () => void;\n getItemAppLink: (share: Share) => Core.AppLink;\n getItemAnalytics?: (share: Share, yIndex: number) => ItemAnalytics;\n}\n\nexport function PreviousAssignments(props: PreviousAssignmentsProps): JSX.Element {\n if (!props.assignments.length)\n return <></>;\n \n const noBottomPadding = props.show && props.assignments.length > 3;\n \n return (\n <div className={classNames('bg-white rounded-3 p-3', noBottomPadding && 'pb-0')}>\n <PreviousAssignmentsHeader count={props.assignments.length} onToggle={props.onToggle} show={props.show} />\n {props.show && (\n <>\n <PreviousAssignmentsListHeader />\n <PreviousAssignmentsList {...props} />\n </>\n )}\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { SharableEntityType } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Classroom, PopupViewProps } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { getInsightsOverviewAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport { FlowControls } from 'apps/assign/components/flow-controls/FlowControls';\nimport { PreviousAssignmentsList, PreviousAssignmentsListHeader } from 'apps/assign/components/previous-assignments/PreviousAssignments';\nimport { useAssignSharedData } from 'apps/assign/hooks/useAssignSharedData';\nimport { AssignAppLinkHelper } from 'apps/assign/utils/AssignAppLinkHelper';\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\n\nconst namespace = 'assign.showAssignmentsView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst MAX_SCROLL_HEIGHT = 400;\n\ninterface ShowAssignEmptyStateProps {\n appLink: Core.AppLink;\n}\n\nfunction ShowAssignmentsEmptyState(props: ShowAssignEmptyStateProps): JSX.Element {\n return (\n <EmptyState className='py-4'>\n <EmptyState.Image\n src={ImageUrls.EmptyStates.Share.MY_SHARES}\n />\n <EmptyState.Heading><Text phrase='emptyTitle' namespace={namespace} /></EmptyState.Heading>\n <EmptyState.Cta\n text={getPhrase('emptyCta')}\n appLink={props.appLink}\n />\n </EmptyState>\n );\n}\n\ninterface ShowAssignmentsViewProps extends PopupViewProps {\n objectId: string;\n entityType: SharableEntityType;\n}\n\nexport function ShowAssignmentsView(props: ShowAssignmentsViewProps): JSX.Element {\n const sharedData = useAssignSharedData({\n objectId: props.objectId,\n entityType: props.entityType\n });\n\n const previousShares = Flight.useBasicFetch<Share[]>(ShareRequests.getSharesByObjectId(props.objectId));\n // @todo Replace with backend filters\n const assignments = previousShares.data?.filter(\n share => [ ShareType.Classroom, ShareType.Open ].includes(share.type)\n ) || [];\n const previousAssignmentClassroomIds = ArrayHelper.uniq(\n assignments.map(ShareHelper.getClassroomIdFromShare).filter(x => !!x)\n );\n const classrooms = Flight.useBasicFetch<Classroom[]>(\n previousShares.hasCompleted &&\n ClassroomRequests.getClassroomsByIds(previousAssignmentClassroomIds, sharedData.currentUser.data?.customerId)\n );\n\n function getItemAppLink(share: Share) {\n const appLink = getInsightsOverviewAppLink(share);\n if (!appLink)\n return;\n\n return appLink;\n }\n\n const loaded = sharedData.loaded && !!previousShares.data && !!classrooms.data;\n \n return (\n <Popup\n size='lg'\n title={getPhrase('title')}\n showLoadingSpinner={!loaded}\n closePopup={props.closePopup}\n >\n {!assignments.length &&\n <ShowAssignmentsEmptyState\n appLink={AssignAppLinkHelper.flowSelector({\n entityType: props.entityType,\n objectId: props.objectId\n })}\n />\n }\n \n {!!assignments.length &&\n <>\n <PreviousAssignmentsListHeader />\n <PreviousAssignmentsList\n assignments={assignments}\n classrooms={classrooms.data}\n getItemAppLink={getItemAppLink}\n scrollHeightMax={MAX_SCROLL_HEIGHT}\n />\n </>\n }\n <FlowControls\n hideNextButton\n hideCreateClassroomButton\n onClickBack={props.closePopup}\n backButtonText={getPhrase('close')}\n />\n </Popup>\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":["getPhrase","icons","iconColours","shareTypeTitlePhraseMap","ShareAvatar","props","type","classroomName","className","svgName","variant","textVariant","svgWrapperClassName","svgSize","S","hideSubtitle","subtitleText","privacy","studentCount","classroomGroupCount","smartCount","getClassroomSubtitle","includes","getLinkSubtitle","getSubtitle","IntegrationId","IntegrationHelper","getShareIntegrations","googleClassroomSetting","msftTeamsSetting","id","name","enabled","settingName","ShareViewCount","SvgContainer","shareAccessCount","share","accessCount","ShareType","totalRecipients","recipients","length","getViewCount","namespace","PreviousAssignmentsHeader","show","Text","phrase","options","count","IconButton","onClick","onToggle","PreviousAssignmentsListHeader","columnClassNames","value","Row","Col","xs","PreviousAssignmentListItem","shareClassroom","ShareHelper","classrooms","analytics","getItemAnalytics","AppLink","key","shareId","appLink","getItemAppLink","analyticsData","data","analyticsOptions","viewCount","lg","dateCreated","PreviousAssignmentsList","autoHeight","autoHeightMin","autoHeightMax","scrollHeightMax","autoHide","assignments","reverse","map","idx","PreviousAssignments","noBottomPadding","MAX_SCROLL_HEIGHT","ShowAssignmentsEmptyState","src","text","ShowAssignmentsView","sharedData","objectId","entityType","previousShares","filter","previousAssignmentClassroomIds","x","hasCompleted","currentUser","customerId","loaded","size","title","showLoadingSpinner","closePopup","hideNextButton","hideCreateClassroomButton","onClickBack","backButtonText","EN_US","ZH_CN","Locales","register","locale","func","SEC_ARRAY","toDate","input","Date","isNaN","test","parseInt","trim","replace","format","date","opts","sec","relativeDate","diff","localeFunc","agoIn","totalSec","Math","abs","floor","toString","unit"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4562],{94644:(e,a,t)=>{t.d(a,{r:()=>m});var n=t(50242),r=t(81886),o=t(67058),i=t(14553),s=t(49267),l=t(49075),c={notFound:o.d,forbidden:{rating:i.q,yearLevel:i.q,region:s.a,privacy:i.q},badRequest:l._,internalServerError:l._};function m(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var o;o="number"==typeof e?e:e.status;var i=Object.assign(Object.assign({},c),a);o&&r.Q.Ry.isStatusCodeError(o)&&(o!==n.o.InternalServer?o!==n.o.NotFound?o!==n.o.Forbidden?t.badRequest||r.Q.Ry.throw(new i.badRequest):t.forbidden||r.Q.Ry.throw(new i.forbidden.privacy):t.notFound||r.Q.Ry.throw(new i.notFound):t.internalServerError||r.Q.Ry.throw(new l._))}}},62691:(e,a,t)=>{t.d(a,{m:()=>f});var n=t(32735),r=t(23481),o=t(49985),i=t(65858),s=t(11607),l=t(83914),c=t(69883),m=t(1643),u=t(35223);function d(e,a){(null==a||a>e.length)&&(a=e.length);for(var t=0,n=Array(a);t<a;t++)n[t]=e[t];return n}var p=r.T.encloseNamespace("classrooms.classroomStar"),v=function(e){return m.h.isFavouritedByCurrentUser(e)};function f(e){var a,t,r=(a=n.useState(v(e.classroom)),t=2,function(e){if(Array.isArray(e))return e}(a)||function(e,a){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var n,r,o,i,s=[],l=!0,c=!1;try{if(o=(t=t.call(e)).next,0===a){if(Object(t)!==t)return;l=!1}else for(;!(l=(n=o.call(t)).done)&&(s.push(n.value),s.length!==a);l=!0);}catch(e){c=!0,r=e}finally{try{if(!l&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(c)throw r}}return s}}(a,t)||function(e,a){if(e){if("string"==typeof e)return d(e,a);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?d(e,a):void 0}}(a,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),m=r[0],f=r[1],g=(0,c.Z)();return n.useEffect((function(){v(e.classroom)!==m&&f(!m)}),[v(e.classroom)]),n.createElement(s.L,{onClick:function(){f(!m),e.onToggle(!m,(function(){return function(a){if(a)return o.k.logUserAction({id:e.classroom.id},{location:e.locationContext,actionType:i.Vw.Favourite,descriptor:i.DL.On,entity:i.py.Classroom,workflowPhase:i.eu.Complete}),void g.success(p("pinSuccess",{classroomName:e.classroom.name,escapeText:!0}));o.k.logUserAction({id:e.classroom.id},{location:e.locationContext,actionType:i.Vw.Favourite,descriptor:i.DL.Off,entity:i.py.Classroom,workflowPhase:i.eu.Complete}),g.success(p("unpinSuccess",{classroomName:e.classroom.name,escapeText:!0}))}(!m)}),(function(){return f(a=m),void(a?g.error(p("unpinError",{classroomName:e.classroom.name,escapeText:!0})):g.error(p("pinError",{classroomName:e.classroom.name,escapeText:!0})));var a}))},className:m?"text-yellow":""},n.createElement(l.x,{svgName:m?u.vn.Star:u.vn.StarOutline,size:l.S.Medium}))}},90681:(e,a,t)=>{t.d(a,{D:()=>_,J:()=>U});var n=t(32735),r=t(6748),o=t(79967),i=t(23481),s=t(91967),l=t(65858),c=t(83657),m=t(15611),u=t(83914),d=t(83345),p=t(36532),v=t(38129),f=t(35223),g=t(16714),b=t(22902),y=t(14070),C=t(97291),h=i.T.encloseNamespace("classrooms.classroomActions");function w(e){var a,t=n.useContext(U),r=e.value,o=!!(null===(a=r._integrations)||void 0===a?void 0:a.rostered),i=r.enrolments.data.find((function(e){return e.user.id===t.currentUser.id})),s=(0,b.T)().hasPermissions,m={id:r.id},u=[];return i&&(u.push({order:0,label:h("edit"),appLink:{application:C.O.CLASSROOMS,action:y.e.Classrooms.EDIT_CLASSROOM,args:[r.id]},disabled:o,className:o?"disabled":"",tooltip:o?h("disabled"):"",analyticsData:m,analyticsOptions:{entity:l.py.Classroom,actionType:l.Vw.Edit,location:l.LZ.ClassroomsListItem,workflowPhase:l.eu.Start}}),u.push({order:10,label:h("archive"),appLink:{application:C.O.CLASSROOMS,action:y.e.Classrooms.ARCHIVE_CLASSROOM,args:[r.id]},disabled:o,className:o?"disabled":"",tooltip:o?h("disabled"):"",analyticsData:m,analyticsOptions:{entity:l.py.Classroom,actionType:l.Vw.Archive,descriptor:l.DL.On,location:l.LZ.ClassroomsListItem,workflowPhase:l.eu.Start}})),s(g.C.ManageAllClassrooms)||u.push({order:20,label:h("leaveClassroom"),className:"text-danger",analyticsData:Object.assign(Object.assign({},m),{teacherId:t.currentUser.id}),analyticsOptions:{entity:l.py.Classroom,location:l.LZ.ClassroomsListItem,workflowPhase:l.eu.Start,actionType:l.Vw.Dissociate,descriptor:l.iF.User},appLink:{application:C.O.CLASSROOMS,action:y.e.Classrooms.REMOVE_TEACHERS,args:[r.id],params:{teacherIds:[t.currentUser.id]}}}),n.createElement(c.e,{className:"w-100 justify-content-end pe-2",actionsDropdownClassName:"btn btn-link ms-1",actions:u})}var E=t(97408),N=t(18995),k=t(64818);const S={avatarContainer:"zMxWi"};function O(e){var a;return n.createElement(p.u,{title:"".concat(e.item.name," ").concat(e.item.surname),spanHack:!0,spanHackClassName:"h-100 w-100"},n.createElement(E.q,{imageUrl:null===(a=e.item.avatar)||void 0===a?void 0:a.url,imageCdnUrl:e.imageCdnUrl,initials:k.l.getInitials(e.item.name,e.item.surname)}))}function x(e){return n.createElement(N.e,Object.assign({},e,{items:e.owners,avatarItem:O,avatarContainerClassname:S.avatarContainer,roleToDisplay:"staff"}))}var A=t(62691);const T={avatar:"btxC4",table:"IUfRF"};function L(e){return function(e){if(Array.isArray(e))return j(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,a){if(e){if("string"==typeof e)return j(e,a);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?j(e,a):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function j(e,a){(null==a||a>e.length)&&(a=e.length);for(var t=0,n=Array(a);t<a;t++)n[t]=e[t];return n}var R="classrooms.classroomsTable",I=i.T.encloseNamespace(R),F={table:"striped-list no-full-width pb-3 ".concat(T.table),header:"fw-semibold pb-1",headerCell:"py-2 ps-2 text-nowrap",row:"striped-row rounded",cell:"d-flex align-items-center py-2 ps-2"},U=n.createContext(null);function _(e){var a,t=e.imageCdnUrl,i=e.appLinks,g=e.onTogglePin,b=e.hasRostering,y=(0,o.k)();a=function(e){return"classroom"in e}(i)?function(e){var a=e.imageCdnUrl,t=e.appLinks,r=e.onTogglePin,o=e.breakpoints,i=e.hasRostering,c=o&&(o.xs||o.sm),g=o&&(o.md||c),b=[{accessor:function(e){return e},id:"pinned",Cell:function(e){var a=e.value;return n.createElement("div",{className:"w-100"},s.q.isFunction(r)&&n.createElement("div",{className:T.starContainer},n.createElement(A.m,{classroom:a,onToggle:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return r.apply(void 0,[a].concat(t))},locationContext:l.LZ.ClassroomsListItem})))},width:15},{Header:I("classroom"),accessor:function(e){return e},id:"name",Cell:function(e){var a=e.value;return n.createElement(m.F,{appLink:Object.assign(Object.assign({},t.classroom),{args:[a.id]}),title:a.name,className:"cursor-pointer clamp-2"},a.name)},width:c?80:70},{accessor:"enrolments",Header:I("owner"),id:"owner",Cell:function(e){var t=e.value,r=t.data.filter((function(e){return e.role===v.tM.Owner})).map((function(e){return e.user})).filter(Boolean);return t.data&&t.data.length&&r.length?n.createElement(x,{imageCdnUrl:a,owners:r,maxAvatars:c?1:2}):n.createElement(n.Fragment,null)},width:g?30:40},i&&!c&&{Header:I("type"),accessor:function(e){return e},Cell:function(e){return e.value._integrations.rostered?n.createElement(d.x,{namespace:R,phrase:"roster"}):n.createElement(d.x,{namespace:R,phrase:"manual"})},width:40},{Header:I("link"),accessor:function(e){return e},id:"link",Cell:function(e){var a,r,o,i,s=e.value;return n.createElement(p.u,{title:(null===(a=s._integrations)||void 0===a?void 0:a.rostered)?I("disabled"):"",spanHack:!0},n.createElement(m.F,{disabled:null===(r=s._integrations)||void 0===r?void 0:r.rostered,className:(null===(o=s._integrations)||void 0===o?void 0:o.rostered)?"text-secondary cursor-default":"",appLink:(null===(i=s._integrations)||void 0===i?void 0:i.rostered)?null:Object.assign(Object.assign({},t.link),{args:[s.id],params:{source:"list"}})},n.createElement(u.x,{svgName:f.vn.Link,className:"svg-container me-1"}),n.createElement(d.x,{namespace:R,phrase:"generate"})))},width:g?40:50},{accessor:function(e){return e},id:"actions",Cell:w,width:g?30:50}];return b.filter(Boolean)}({imageCdnUrl:t,appLinks:i,onTogglePin:g,breakpoints:y,hasRostering:b}):function(e){var a=!1;return[{Header:n.createElement("div",{className:"ms-3"},I("classroom")),accessor:function(e){return e},id:"name",Cell:function(e){var a=e.value;return n.createElement("div",{className:"ms-3"},a.name)},width:80},{accessor:"id",id:"placeholder-column",Cell:function(){return n.createElement(n.Fragment,null)},width:120},{accessor:function(e){return e},id:"retrieve",Cell:function(t){var r=t.value;return n.createElement(c.e,{actions:[{appLink:Object.assign(Object.assign({},e.retrieve),{args:[r.id]}),disabled:a,tooltip:I("retrieve"),svgName:f.vn.Retrieve,button:!0}],className:"w-100 justify-content-end pe-2",actionsDropdownClassName:"btn btn-link ms-1"})},width:10},{accessor:function(e){return e},id:"delete",Cell:function(t){var r=t.value;return n.createElement(c.e,{actions:[{appLink:Object.assign(Object.assign({},e.delete),{args:[r.id]}),disabled:a,tooltip:I("delete"),svgName:f.vn.Delete,button:!0}],className:"w-100 justify-content-end pe-2",actionsDropdownClassName:"btn btn-link ms-1"})},width:10}].filter(Boolean)}(i);var C=function(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],t=arguments.length>2?arguments[2]:void 0,r=arguments.length>3?arguments[3]:void 0;return n.useMemo((function(){var n;if(!t){var r=null!==(n=null==e?void 0:e.filter((function(e){return!a.some((function(a){return a.id===e.id}))})))&&void 0!==n?n:[];return[].concat(L(a),L(r))}return e}),[r,t])}(e.allClassrooms,e.pinnedClassrooms,e.query,e.refreshTable);return n.createElement(U.Provider,{value:e},n.createElement(r.i,{columns:a,data:C,theme:F}))}},19948:(e,a,t)=>{t.d(a,{I:()=>s});var n=t(32735);const r={partialStar:"Xbiwa",partialText:"Txo6a",partialName:"WT6R3",partialAvatar:"T5kj5",partialAction:"VI06f",shortHeading:"Gvufi",heading:"dh0wz",starColumn:"GsT4V",nameColumn:"eAvib",ownerColumn:"T6yK9",actionsColumn:"LIRFn"};function o(){return n.createElement("li",{className:"d-flex justify-content-between align-items-center py-2"},n.createElement("div",{className:"d-flex align-items-center"},n.createElement("div",{className:"ms-4 partial-loading-background ".concat(r.partialStar)}),n.createElement("div",{className:"mx-3 partial-loading-background ".concat(r.partialName)}),n.createElement("div",{className:"ms-3 me-4 rounded-circle partial-loading-background ".concat(r.partialAvatar)}),n.createElement("div",{className:"ms-4 rounded-circle partial-loading-background ".concat(r.partialAvatar)}),n.createElement("div",{className:"mx-1 partial-loading-background ".concat(r.partialText)}),n.createElement("div",{className:"mx-4 partial-loading-background ".concat(r.partialText)})),n.createElement("div",{className:"ms-4 me-3 partial-loading-background ".concat(r.partialAction)}))}function i(){return n.createElement("div",{className:"d-flex mb-1"},n.createElement("div",{className:"".concat(r.starColumn)}," "),n.createElement("div",{className:"".concat(r.nameColumn," p-2")},n.createElement("div",{className:"partial-loading-background ".concat(r.heading)})),n.createElement("div",{className:"".concat(r.ownerColumn," p-2")},n.createElement("div",{className:"partial-loading-background ".concat(r.shortHeading)})),n.createElement("div",{className:"".concat(r.ownerColumn," p-2 d-none d-md-flex")},n.createElement("div",{className:"partial-loading-background ".concat(r.shortHeading)})),n.createElement("div",{className:"".concat(r.ownerColumn," p-2 d-none d-md-flex")},n.createElement("div",{className:"partial-loading-background ".concat(r.heading)})),n.createElement("div",{className:"".concat(r.actionsColumn," p-2")}," "))}function s(){return n.createElement(n.Fragment,null,n.createElement(i,null),n.createElement("ul",{className:"m-0 list-unstyled striped-list"},Array(15).fill(null).map((function(e,a){return n.createElement(o,{key:a})}))))}}}]);
2
- //# sourceMappingURL=4562-545f04c53f-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/4562-545f04c53f-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/projects/lite/src/apps/classrooms/components/classroom-star/ClassroomStar.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/classroom-actions/ClassroomActions.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/classroom-owners-avatar-list/classroom-owner-avatar-list.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/classroom-owners-avatar-list/ClassroomOwnersAvatarList.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/classrooms-table/classrooms-table.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/classrooms-table/ClassroomsTableUtils.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/classrooms-table/ClassroomsTable.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/classrooms-table/partial-classrooms-table/partial-classrooms-table.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/classrooms-table/partial-classrooms-table/PartialClassroomsTable.tsx"],"sourcesContent":["import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n internalServerError?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError,\n internalServerError: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.InternalServer) {\n if (!ignoreMap.internalServerError)\n Core.ErrorHelper.throw(new UnspecifiedError());\n return;\n }\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, ToggleDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Classroom } from 'libs/shared/interfaces';\nimport { FavouriteHelper } from 'libs/shared/utils/FavouriteHelpers';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'classrooms.classroomStar';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst getIsPinned = (classroom: Classroom) => {\n return FavouriteHelper.isFavouritedByCurrentUser(classroom);\n};\n\ninterface ClassroomStarProps {\n classroom: Classroom;\n onToggle: (shouldPin: boolean, onSuccess: () => void, onError: () => void) => void;\n locationContext: LocationContext;\n}\n\nexport function ClassroomStar(props: ClassroomStarProps): JSX.Element {\n // Local state is used to provide instant feedback when the user clicks on the star.\n const [ isPinned, setIsPinned ] = React.useState(getIsPinned(props.classroom));\n\n const alerts = useAlerts();\n\n React.useEffect(() => {\n if (getIsPinned(props.classroom) === isPinned)\n return;\n\n setIsPinned(!isPinned);\n }, [getIsPinned(props.classroom)]);\n\n function onToggle(): void {\n setIsPinned(!isPinned);\n\n props.onToggle(!isPinned, () => onSuccess(!isPinned), () => onError(isPinned));\n }\n\n function onSuccess(isPinned: boolean): void {\n if (isPinned) {\n AnalyticsHelper.logUserAction({ id: props.classroom.id }, {\n location: props.locationContext,\n actionType: UserAction.Favourite,\n descriptor: ToggleDescriptor.On,\n entity: EntityType.Classroom,\n workflowPhase: WorkflowPhase.Complete\n });\n \n alerts.success(getPhrase('pinSuccess', {\n classroomName: props.classroom.name,\n escapeText: true\n }));\n \n return;\n }\n\n AnalyticsHelper.logUserAction({ id: props.classroom.id }, {\n location: props.locationContext,\n actionType: UserAction.Favourite,\n descriptor: ToggleDescriptor.Off,\n entity: EntityType.Classroom,\n workflowPhase: WorkflowPhase.Complete\n });\n\n alerts.success(getPhrase('unpinSuccess', {\n classroomName: props.classroom.name,\n escapeText: true\n }));\n }\n\n function onError(prevState: boolean): void {\n setIsPinned(prevState);\n\n if (prevState) {\n alerts.error(getPhrase('unpinError', {\n classroomName: props.classroom.name,\n escapeText: true\n }));\n\n return;\n }\n\n alerts.error(getPhrase('pinError', {\n classroomName: props.classroom.name,\n escapeText: true\n }));\n }\n\n return (\n <DivButton onClick={onToggle} className={isPinned ? 'text-yellow' : ''}>\n <SvgContainer\n svgName={isPinned ? cvSvgLibrary.Star : cvSvgLibrary.StarOutline}\n size={SvgContainerSize.Medium}\n />\n </DivButton>\n );\n}","import React from 'react';\nimport { CellProps } from 'react-table';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AssocDescriptor, EntityType, LocationContext, ToggleDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { Actions as ActionsComponent } from 'libs/shared/components/actions/Actions';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ClassroomsTableContext } from 'apps/classrooms/components/classrooms-table/ClassroomsTable';\nimport { ClassroomsTableData } from 'apps/classrooms/components/classrooms-table/ClassroomsTableUtils';\n\nconst namespace = 'classrooms.classroomActions';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function ClassroomActions(props: CellProps<ClassroomsTableData, ClassroomsTableData>): JSX.Element {\n const context = React.useContext(ClassroomsTableContext);\n\n const classroom = props.value;\n const isRostered = !!classroom._integrations?.rostered;\n\n const isOwner = classroom.enrolments.data.find(enrolment => enrolment.user.id === context.currentUser.id);\n\n const { hasPermissions } = usePermissions();\n\n const analyticsData = { id: classroom.id };\n const actions: ActionOptions[] = [];\n\n if (isOwner) {\n actions.push({\n order: 0,\n label: getPhrase('edit'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.EDIT_CLASSROOM,\n args: [classroom.id]\n },\n disabled: isRostered,\n className: isRostered ? 'disabled' : '',\n tooltip: isRostered ? getPhrase('disabled') : '',\n analyticsData,\n analyticsOptions: {\n entity: EntityType.Classroom,\n actionType: UserAction.Edit,\n location: LocationContext.ClassroomsListItem,\n workflowPhase: WorkflowPhase.Start\n }\n });\n\n actions.push({\n order: 10,\n label: getPhrase('archive'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.ARCHIVE_CLASSROOM,\n args: [classroom.id]\n },\n disabled: isRostered,\n className: isRostered ? 'disabled' : '',\n tooltip: isRostered ? getPhrase('disabled') : '',\n analyticsData,\n analyticsOptions: {\n entity: EntityType.Classroom,\n actionType: UserAction.Archive,\n descriptor: ToggleDescriptor.On,\n location: LocationContext.ClassroomsListItem,\n workflowPhase: WorkflowPhase.Start\n }\n });\n }\n\n if (!hasPermissions(PermissionName.ManageAllClassrooms)) {\n actions.push({\n order: 20,\n label: getPhrase('leaveClassroom'),\n className: 'text-danger',\n analyticsData: {\n ...analyticsData,\n teacherId: context.currentUser.id\n },\n analyticsOptions: {\n entity: EntityType.Classroom,\n location: LocationContext.ClassroomsListItem,\n workflowPhase: WorkflowPhase.Start,\n actionType: UserAction.Dissociate,\n descriptor: AssocDescriptor.User\n },\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.REMOVE_TEACHERS,\n args: [classroom.id],\n params: {\n teacherIds: [context.currentUser.id]\n }\n }\n });\n }\n return (\n <ActionsComponent\n className='w-100 justify-content-end pe-2'\n actionsDropdownClassName='btn btn-link ms-1'\n actions={actions}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"avatarContainer\":\"zMxWi\"};","import React from 'react';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { AvatarItemProps, AvatarList } from 'libs/shared/components/avatar-list/AvatarList';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { User } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './classroom-owner-avatar-list.scss';\n\ninterface OwnerAvatarProps extends AvatarItemProps {\n item: User;\n}\n\nfunction OwnerAvatar(props: OwnerAvatarProps): JSX.Element {\n return (\n <Tooltip title={`${props.item.name} ${props.item.surname}`} spanHack spanHackClassName='h-100 w-100'>\n <Avatar\n imageUrl={props.item.avatar?.url}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(props.item.name, props.item.surname)}\n />\n </Tooltip>\n );\n}\n\ninterface ClassroomOwnersListProps {\n owners: User[];\n imageCdnUrl: string;\n maxAvatars: number;\n}\n\nexport function ClassroomOwnersAvatarList(props: ClassroomOwnersListProps): JSX.Element {\n return (\n <AvatarList\n {...props}\n items={props.owners}\n avatarItem={OwnerAvatar}\n avatarContainerClassname={styles.avatarContainer}\n roleToDisplay='staff'\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"avatar\":\"btxC4\",\"table\":\"IUfRF\"};","import React from 'react';\nimport { Column } from 'react-table';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { Actions } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classroom, EnrolmentRole } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ClassroomActions } from 'apps/classrooms/components/classroom-actions/ClassroomActions';\nimport { ClassroomOwnersAvatarList } from 'apps/classrooms/components/classroom-owners-avatar-list/ClassroomOwnersAvatarList';\nimport { ClassroomStar } from 'apps/classrooms/components/classroom-star/ClassroomStar';\nimport { OnTogglePinFn } from 'apps/classrooms/components/classrooms-table/ClassroomsTable';\nimport { ActiveClassroomsTableApplinks, ArchivedClassroomsTableApplinks, ClassroomsTableApplinks } from 'apps/classrooms/interfaces/ClassroomsTableApplinks';\n\nimport styles from './classrooms-table.scss';\n\nconst namespace = 'classrooms.classroomsTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface ClassroomsTableData extends Classroom {\n // todo wait for backend to finalize\n creator?: any;\n}\n\n\nexport function isActiveClassrooms(\n appLinks: ClassroomsTableApplinks\n): appLinks is ActiveClassroomsTableApplinks {\n return 'classroom' in appLinks;\n}\n\nexport function getArchivedClassroomsColumns(\n appLinks: ArchivedClassroomsTableApplinks\n) {\n // todo get data from backend, support rostering in the future\n const isRostering = false;\n const columns: Column<ClassroomsTableData>[] = [\n {\n Header: <div className='ms-3'>{getPhrase('classroom')}</div>,\n accessor: (data: ClassroomsTableData) => data,\n id: 'name',\n Cell: ({ value: classroom }: { value: ClassroomsTableData }) => {\n return (\n <div className='ms-3'>\n {classroom.name}\n </div>\n );\n },\n width: 80\n },\n {\n // just add an empty column for styling\n accessor: 'id',\n id: 'placeholder-column',\n Cell: () => {\n return <></>;\n },\n width: 120\n },\n {\n accessor: (data: ClassroomsTableData) => data,\n id: 'retrieve',\n Cell: ({ value: classroom }: { value: ClassroomsTableData }) => {\n return (\n <Actions\n actions={[\n {\n appLink: { ...appLinks.retrieve, args: [classroom.id]},\n disabled: isRostering,\n tooltip: isRostering ? getPhrase('disabled') : getPhrase('retrieve'),\n svgName: cvSvgLibrary.Retrieve,\n button: true\n }\n ]}\n className='w-100 justify-content-end pe-2'\n actionsDropdownClassName='btn btn-link ms-1'\n />\n );\n },\n width: 10\n },\n {\n accessor: (data: ClassroomsTableData) => data,\n id: 'delete',\n Cell: ({ value: classroom }: { value: ClassroomsTableData }) => {\n return (\n <Actions\n actions={[\n {\n appLink: { ...appLinks.delete, args: [classroom.id]},\n disabled: isRostering,\n tooltip: isRostering ? getPhrase('disabled') : getPhrase('delete'),\n svgName: cvSvgLibrary.Delete,\n button: true\n }\n\n ]}\n className='w-100 justify-content-end pe-2'\n actionsDropdownClassName='btn btn-link ms-1'\n />\n );\n },\n width: 10\n }\n ];\n return columns.filter(Boolean);\n}\n\nexport function getActiveClassroomsColumns({\n imageCdnUrl,\n appLinks,\n onTogglePin,\n breakpoints,\n hasRostering\n}: {\n imageCdnUrl: string,\n appLinks: ActiveClassroomsTableApplinks,\n onTogglePin: OnTogglePinFn,\n breakpoints?: Breakpoints,\n hasRostering?: boolean\n}): Column<ClassroomsTableData>[] {\n const isMobile = breakpoints && (breakpoints.xs || breakpoints.sm);\n const isTablet = breakpoints && (breakpoints.md || isMobile);\n\n const columns: Column<ClassroomsTableData>[] = [\n {\n accessor: (data: ClassroomsTableData) => data,\n id: 'pinned',\n Cell: ({ value: classroom }: { value: ClassroomsTableData }) => (\n <div className='w-100'>\n {FunctionHelper.isFunction(onTogglePin) && (\n <div className={styles.starContainer}>\n <ClassroomStar\n classroom={classroom}\n onToggle={(...args) => onTogglePin(classroom, ...args)}\n locationContext={LocationContext.ClassroomsListItem}\n />\n </div>\n )}\n </div>\n ),\n width: 15\n },\n {\n Header: getPhrase('classroom'),\n accessor: (data: ClassroomsTableData) => data,\n id: 'name',\n Cell: ({ value: classroom }: { value: ClassroomsTableData }) => {\n return (\n <AppLink\n appLink={{ ...appLinks.classroom, args: [classroom.id]}}\n title={classroom.name}\n className='cursor-pointer clamp-2'\n >\n {classroom.name}\n </AppLink>\n );\n },\n width: isMobile ? 80 : 70\n },\n {\n accessor: 'enrolments',\n Header: getPhrase('owner'),\n id: 'owner',\n Cell: ({ value: enrolments }) => {\n const owners = enrolments.data.filter(enrolment => enrolment.role === EnrolmentRole.Owner)\n .map(o => o.user).filter(Boolean);\n\n if (!enrolments.data || !enrolments.data.length || !owners.length)\n return <></>;\n\n return (\n <ClassroomOwnersAvatarList\n imageCdnUrl={imageCdnUrl}\n owners={owners}\n maxAvatars={isMobile ? 1 : 2}\n />\n );\n },\n width: isTablet ? 30 : 40\n },\n // todo for v1 we display ‘Type’ for school has rostering, in the future we will use 'Creator' here\n hasRostering && !isMobile && {\n Header: getPhrase('type'),\n accessor: (data: ClassroomsTableData) => data,\n Cell: ({ value: classroom }: { value: ClassroomsTableData }) => {\n return !classroom._integrations.rostered ? (\n <Text namespace={namespace} phrase='manual'/>\n ) : (\n <Text namespace={namespace} phrase='roster'/>\n );\n },\n width: 40\n },\n {\n Header: getPhrase('link'),\n accessor: (data: ClassroomsTableData) => data,\n id: 'link',\n Cell: ({ value: classroom }: { value: ClassroomsTableData }) => {\n return (\n <Tooltip\n title={classroom._integrations?.rostered ? getPhrase('disabled') : ''}\n spanHack\n >\n <AppLink\n disabled={classroom._integrations?.rostered}\n className={classroom._integrations?.rostered ? 'text-secondary cursor-default' : ''}\n appLink={classroom._integrations?.rostered ? null : { ...appLinks.link, args: [classroom.id], params: { source: 'list' } }}\n >\n <SvgContainer svgName={cvSvgLibrary.Link} className='svg-container me-1'/>\n <Text namespace={namespace} phrase='generate'/>\n </AppLink>\n </Tooltip>\n );\n },\n width: isTablet ? 40 : 50\n },\n {\n accessor: (data: ClassroomsTableData) => data,\n id: 'actions',\n Cell: ClassroomActions,\n width: isTablet ? 30 : 50\n }\n ];\n \n return columns.filter((Boolean));\n}\n\nexport function useTableData(\n allClassrooms: Classroom[],\n pinnedClassrooms: Classroom[] = [],\n query?: string,\n refreshTable?: boolean\n): ClassroomsTableData[] {\n return React.useMemo(() => {\n if (!query) {\n const unpinnedClassrooms = allClassrooms?.filter(c => {\n return !pinnedClassrooms.some(pc => pc.id === c.id);\n }) ?? [];\n return [ ...pinnedClassrooms, ...unpinnedClassrooms ];\n }\n\n return allClassrooms;\n }, [ refreshTable, query ]);\n}","import React from 'react';\n\nimport { Table, TableTheme } from 'libs/shared/components/table/Table';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classroom, CurrentUser } from 'libs/shared/interfaces';\n\nimport { getActiveClassroomsColumns, getArchivedClassroomsColumns, isActiveClassrooms, useTableData } from 'apps/classrooms/components/classrooms-table/ClassroomsTableUtils';\nimport { ClassroomsTableApplinks } from 'apps/classrooms/interfaces/ClassroomsTableApplinks';\n\nimport styles from './classrooms-table.scss';\n\nconst CLASSROOMS_TABLE_THEME: TableTheme = {\n table: `striped-list no-full-width pb-3 ${styles.table}`,\n header: 'fw-semibold pb-1',\n headerCell: 'py-2 ps-2 text-nowrap',\n row: 'striped-row rounded',\n cell: 'd-flex align-items-center py-2 ps-2'\n};\n\nexport type OnTogglePinFn =\n (classroom: Classroom, shouldPin: boolean, onSuccess: () => void, onError: () => void) => void;\n\ninterface ClassroomsTableProps {\n allClassrooms: Classroom[];\n pinnedClassrooms?: Classroom[];\n appLinks: ClassroomsTableApplinks;\n imageCdnUrl: string;\n currentUser: CurrentUser;\n refreshTable?: boolean;\n query?: string;\n onTogglePin?: OnTogglePinFn;\n hasRostering?: boolean;\n}\n\nexport const ClassroomsTableContext = React.createContext<ClassroomsTableProps>(null);\n\nexport function ClassroomsTable(props: ClassroomsTableProps): JSX.Element {\n const { imageCdnUrl, appLinks, onTogglePin, hasRostering } = props;\n\n const breakpoints = useBreakpoints();\n\n let columns = [];\n if (isActiveClassrooms(appLinks)) {\n columns = getActiveClassroomsColumns({\n imageCdnUrl, appLinks, onTogglePin, breakpoints, hasRostering\n });\n } else {\n columns = getArchivedClassroomsColumns(appLinks);\n }\n const data = useTableData(props.allClassrooms, props.pinnedClassrooms, props.query, props.refreshTable);\n\n return (\n <ClassroomsTableContext.Provider value={props}>\n <Table\n columns={columns}\n data={data}\n theme={CLASSROOMS_TABLE_THEME}\n />\n </ClassroomsTableContext.Provider>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialStar\":\"Xbiwa\",\"partialText\":\"Txo6a\",\"partialName\":\"WT6R3\",\"partialAvatar\":\"T5kj5\",\"partialAction\":\"VI06f\",\"shortHeading\":\"Gvufi\",\"heading\":\"dh0wz\",\"starColumn\":\"GsT4V\",\"nameColumn\":\"eAvib\",\"ownerColumn\":\"T6yK9\",\"actionsColumn\":\"LIRFn\"};","import React from 'react';\n\nimport styles from './partial-classrooms-table.scss';\n\nfunction PartialClassroomItem(): JSX.Element {\n return (\n <li className='d-flex justify-content-between align-items-center py-2'>\n <div className='d-flex align-items-center'>\n <div className={`ms-4 partial-loading-background ${styles.partialStar}`} />\n\n <div className={`mx-3 partial-loading-background ${styles.partialName}`} />\n\n <div className={`ms-3 me-4 rounded-circle partial-loading-background ${styles.partialAvatar}`} />\n \n <div className={`ms-4 rounded-circle partial-loading-background ${styles.partialAvatar}`} />\n <div className={`mx-1 partial-loading-background ${styles.partialText}`} />\n\n <div className={`mx-4 partial-loading-background ${styles.partialText}`} />\n </div>\n\n <div className={`ms-4 me-3 partial-loading-background ${styles.partialAction}`} />\n </li>\n );\n}\n\nfunction PartialHeader(): JSX.Element {\n return (\n <div className='d-flex mb-1'>\n <div className={`${styles.starColumn}`}>\n &nbsp;\n </div>\n\n <div className={`${styles.nameColumn} p-2`}>\n <div className={`partial-loading-background ${styles.heading}`} />\n </div>\n\n <div className={`${styles.ownerColumn} p-2`}>\n <div className={`partial-loading-background ${styles.shortHeading}`} />\n </div>\n <div className={`${styles.ownerColumn} p-2 d-none d-md-flex`}>\n <div className={`partial-loading-background ${styles.shortHeading}`} />\n </div>\n <div className={`${styles.ownerColumn} p-2 d-none d-md-flex`}>\n <div className={`partial-loading-background ${styles.heading}`} />\n </div>\n\n <div className={`${styles.actionsColumn} p-2`}>\n &nbsp;\n </div>\n </div>\n );\n}\n\nexport function PartialClassroomsTable(): JSX.Element {\n return (\n <>\n <PartialHeader/>\n <ul className='m-0 list-unstyled striped-list'>\n {Array(15).fill(null).map((item, index) => <PartialClassroomItem key={index} />)}\n </ul>\n </>\n );\n}"],"names":["defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","internalServerError","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","getPhrase","getIsPinned","classroom","ClassroomStar","props","isPinned","setIsPinned","alerts","onClick","onToggle","id","location","locationContext","actionType","descriptor","entity","workflowPhase","success","classroomName","name","escapeText","onSuccess","prevState","error","className","svgName","size","S","LanguageService","ClassroomActions","context","ClassroomsTableContext","value","isRostered","_integrations","rostered","isOwner","enrolments","data","find","enrolment","user","currentUser","hasPermissions","usePermissions","analyticsData","actions","push","order","label","appLink","application","action","args","disabled","tooltip","analyticsOptions","PermissionName","teacherId","params","teacherIds","Actions","actionsDropdownClassName","OwnerAvatar","Tooltip","title","item","surname","spanHack","spanHackClassName","Avatar","imageUrl","avatar","url","imageCdnUrl","initials","UserHelper","ClassroomOwnersAvatarList","AvatarList","items","owners","avatarItem","avatarContainerClassname","roleToDisplay","CLASSROOMS_TABLE_THEME","table","header","headerCell","row","cell","ClassroomsTable","columns","appLinks","onTogglePin","hasRostering","breakpoints","useBreakpoints","isActiveClassrooms","isMobile","xs","sm","isTablet","md","accessor","Cell","FunctionHelper","width","Header","AppLink","filter","role","map","o","Boolean","length","maxAvatars","Text","namespace","phrase","link","source","SvgContainer","getActiveClassroomsColumns","isRostering","retrieve","button","getArchivedClassroomsColumns","allClassrooms","pinnedClassrooms","query","refreshTable","unpinnedClassrooms","c","some","pc","useTableData","Provider","Table","theme","PartialClassroomItem","PartialHeader","PartialClassroomsTable","Array","fill","index","key"],"sourceRoot":""}