@clickview/reports 0.71.1-dev.0 → 0.72.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (417) hide show
  1. package/dist/bundles.json +3 -2
  2. package/dist/css/1103-reports-d3d5cc00db.chunk.css +31 -0
  3. package/dist/css/1456-reports-4a5871a275.chunk.css +9 -0
  4. package/dist/css/1648-reports-012456ba48.chunk.css +2 -0
  5. package/dist/css/209-reports-c33663a53e.chunk.css +11 -0
  6. package/dist/css/2150-reports-84ec0e9770.chunk.css +4 -0
  7. package/dist/css/2217-reports-74dec0a3fe.chunk.css +32 -0
  8. package/dist/css/2997-reports-e08318f14b.chunk.css +9 -0
  9. package/dist/css/2999-reports-f190450b10.chunk.css +60 -0
  10. package/dist/css/4582-reports-d3d5cc00db.chunk.css +31 -0
  11. package/dist/css/5304-reports-22c2d8d635.chunk.css +9 -0
  12. package/dist/css/6007-reports-5ba77c55a3.chunk.css +8 -0
  13. package/dist/css/6031-reports-d558076846.chunk.css +6 -0
  14. package/dist/css/6356-reports-8c5b220bf6.chunk.css +1 -0
  15. package/dist/css/6811-reports-baf2e97e71.chunk.css +35 -0
  16. package/dist/css/7723-reports-8c6d3c414b.chunk.css +4 -0
  17. package/dist/css/7747-reports-2d9e191b5a.chunk.css +12 -0
  18. package/dist/css/8087-reports-cfe23ba648.chunk.css +10 -0
  19. package/dist/css/8294-reports-c797263ac2.chunk.css +1 -0
  20. package/dist/css/8418-reports-0ada3f3ce2.chunk.css +29 -0
  21. package/dist/css/8450-reports-06493dfde5.chunk.css +9 -0
  22. package/dist/css/8622-reports-9e8970cc7f.chunk.css +8 -0
  23. package/dist/css/8839-reports-8e46644943.chunk.css +1 -0
  24. package/dist/css/8989-reports-92b4f1dde8.chunk.css +8 -0
  25. package/dist/css/9059-reports-a2ac630ebc.chunk.css +35 -0
  26. package/dist/css/9285-reports-5b9af8380f.chunk.css +13 -0
  27. package/dist/css/9661-reports-7435e94a85.chunk.css +4 -0
  28. package/dist/css/9822-reports-a1db1900c7.chunk.css +8 -0
  29. package/dist/css/9949-reports-f22fa2b407.chunk.css +15 -0
  30. package/dist/css/reports-app-b4c4ec5632.css +32 -0
  31. package/dist/languages/en.json +1 -0
  32. package/dist/scripts/1103-d77d388f5b-reports.chunk.js +1 -0
  33. package/dist/scripts/1177-7cf7817e74-reports.chunk.js +1 -0
  34. package/dist/scripts/1456-b7f437ef87-reports.chunk.js +1 -0
  35. package/dist/scripts/1648-e892604f5a-reports.chunk.js +1 -0
  36. package/dist/scripts/1934-ca8497c768-reports.chunk.js +2 -0
  37. package/dist/scripts/1934-ca8497c768-reports.chunk.js.LICENSE.txt +9 -0
  38. package/dist/scripts/2087-e0ef668e1f-reports.chunk.js +1 -0
  39. package/dist/scripts/209-72e77f375e-reports.chunk.js +1 -0
  40. package/dist/scripts/2150-4e9e1fb433-reports.chunk.js +1 -0
  41. package/dist/scripts/2217-15fa35197a-reports.chunk.js +1 -0
  42. package/dist/scripts/2476-a700f69dc4-reports.chunk.js +1 -0
  43. package/dist/scripts/2539-04dfb4f4f1-reports.chunk.js +1 -0
  44. package/dist/scripts/2997-444b5bdaf0-reports.chunk.js +1 -0
  45. package/dist/scripts/2999-4d87eebbbd-reports.chunk.js +2 -0
  46. package/dist/scripts/2999-4d87eebbbd-reports.chunk.js.LICENSE.txt +1 -0
  47. package/dist/scripts/312-8b006e92ff-reports.chunk.js +1 -0
  48. package/dist/scripts/4234-e3c04f41eb-reports.chunk.js +1 -0
  49. package/dist/scripts/4372-26474a3318-reports.chunk.js +1 -0
  50. package/dist/scripts/438-b444dfb8c6-reports.chunk.js +1 -0
  51. package/dist/scripts/4582-230f130f41-reports.chunk.js +1 -0
  52. package/dist/scripts/4752-db4247883d-reports.chunk.js +2 -0
  53. package/dist/scripts/4752-db4247883d-reports.chunk.js.LICENSE.txt +118 -0
  54. package/dist/scripts/4979-7e14b09f33-reports.chunk.js +1 -0
  55. package/dist/scripts/5051-ff0ec9348d-reports.chunk.js +1 -0
  56. package/dist/scripts/5091-ddd6f61b55-reports.chunk.js +1 -0
  57. package/dist/scripts/5173-cce3b37672-reports.chunk.js +1 -0
  58. package/dist/scripts/5177-a7372e7b8d-reports.chunk.js +1 -0
  59. package/dist/scripts/5304-d5674b32b4-reports.chunk.js +1 -0
  60. package/dist/scripts/5802-2125536755-reports.chunk.js +1 -0
  61. package/dist/scripts/6007-42edca6bba-reports.chunk.js +1 -0
  62. package/dist/scripts/6031-b1c60cc409-reports.chunk.js +1 -0
  63. package/dist/scripts/6081-2bbda6cac3-reports.chunk.js +1 -0
  64. package/dist/scripts/6180-bdb237ffbe-reports.chunk.js +2 -0
  65. package/dist/scripts/6180-bdb237ffbe-reports.chunk.js.LICENSE.txt +1 -0
  66. package/dist/scripts/6198-189ddde870-reports.chunk.js +1 -0
  67. package/dist/scripts/6356-a1b313c73e-reports.chunk.js +1 -0
  68. package/dist/scripts/645-e8b19128e5-reports.chunk.js +1 -0
  69. package/dist/scripts/6545-eadce8e749-reports.chunk.js +1 -0
  70. package/dist/scripts/6811-40ded4c089-reports.chunk.js +1 -0
  71. package/dist/scripts/7238-de5ef0ebfb-reports.chunk.js +1 -0
  72. package/dist/scripts/7562-748e60c3fc-reports.chunk.js +1 -0
  73. package/dist/scripts/7709-82750ee317-reports.chunk.js +1 -0
  74. package/dist/scripts/7723-1799f5aa26-reports.chunk.js +1 -0
  75. package/dist/scripts/7747-bc33e51d7b-reports.chunk.js +2 -0
  76. package/dist/scripts/7747-bc33e51d7b-reports.chunk.js.LICENSE.txt +1 -0
  77. package/dist/scripts/7925-c6c532c9c4-reports.chunk.js +1 -0
  78. package/dist/scripts/8087-1d9e9701e5-reports.chunk.js +1 -0
  79. package/dist/scripts/8393-c37cc22b4c-reports.chunk.js +1 -0
  80. package/dist/scripts/8418-9f96caf039-reports.chunk.js +1 -0
  81. package/dist/scripts/8450-f2d5d99614-reports.chunk.js +1 -0
  82. package/dist/scripts/8591-4811082ab0-reports.chunk.js +1 -0
  83. package/dist/scripts/8622-a422eff0c4-reports.chunk.js +1 -0
  84. package/dist/scripts/8839-711793a97f-reports.chunk.js +1 -0
  85. package/dist/scripts/8989-ca5cab7f45-reports.chunk.js +1 -0
  86. package/dist/scripts/9059-b2dcf3cdb2-reports.chunk.js +1 -0
  87. package/dist/scripts/9162-7ffc692736-reports.chunk.js +1 -0
  88. package/dist/scripts/9285-ecddd01efb-reports.chunk.js +1 -0
  89. package/dist/scripts/9590-41bb23ae71-reports.chunk.js +1 -0
  90. package/dist/scripts/9647-f0c111d3f0-reports.chunk.js +1 -0
  91. package/dist/scripts/9661-2dee4c3417-reports.chunk.js +1 -0
  92. package/dist/scripts/9822-1b202f9d49-reports.chunk.js +1 -0
  93. package/dist/scripts/9895-3b3feb12b9-reports.chunk.js +1 -0
  94. package/dist/scripts/9949-63e32c6733-reports.chunk.js +1 -0
  95. package/dist/scripts/bundle-1bfbac149b.min.js +2 -0
  96. package/dist/scripts/bundle-1bfbac149b.min.js.LICENSE.txt +108 -0
  97. package/dist/scripts/polyfills-3db3f009d4.min.js +1 -0
  98. package/package.json +3 -5
  99. package/typings/utils/imports.d.ts +1 -1
  100. package/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  101. package/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  102. package/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  103. package/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  104. package/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  105. package/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  106. package/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  107. package/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  108. package/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  109. package/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  110. package/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  111. package/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  112. package/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  113. package/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  114. package/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  115. package/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  116. package/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  117. package/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  118. package/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  119. package/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  120. package/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  121. package/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  122. package/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  123. package/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  124. package/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  125. package/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  126. package/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  127. package/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  128. package/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  129. package/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  130. package/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  131. package/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  132. package/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  133. package/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  134. package/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  135. package/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  136. package/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  137. package/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  138. package/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  139. package/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  140. package/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  141. package/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  142. package/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  143. package/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  144. package/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  145. package/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  146. package/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  147. package/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  148. package/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  149. package/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  150. package/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  151. package/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  152. package/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  153. package/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  154. package/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  155. package/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  156. package/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  157. package/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  158. package/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  159. package/dist/css/1VpVng8x.chunk.css +0 -1
  160. package/dist/css/BDijM1kt.chunk.css +0 -1
  161. package/dist/css/BMPwvOki.chunk.css +0 -1
  162. package/dist/css/BNt45Kgy.chunk.css +0 -1
  163. package/dist/css/BSGhUWzl.chunk.css +0 -1
  164. package/dist/css/BZ3_uhDP.chunk.css +0 -1
  165. package/dist/css/BaadNO4A.chunk.css +0 -1
  166. package/dist/css/BdUNjJqp.chunk.css +0 -1
  167. package/dist/css/BdeI0FAV.chunk.css +0 -1
  168. package/dist/css/BxcMGr8Y.chunk.css +0 -1
  169. package/dist/css/ByuL_xKJ.chunk.css +0 -1
  170. package/dist/css/C-A0Pj_7.chunk.css +0 -1
  171. package/dist/css/C4jMfPWU.chunk.css +0 -1
  172. package/dist/css/C7XoyEPr.chunk.css +0 -1
  173. package/dist/css/C8sxda3R.chunk.css +0 -1
  174. package/dist/css/CD1qrI1T.chunk.css +0 -1
  175. package/dist/css/CFO--d_R.chunk.css +0 -1
  176. package/dist/css/CX9nw8t8.chunk.css +0 -1
  177. package/dist/css/C_qGRdC2.chunk.css +0 -1
  178. package/dist/css/CdC6ugQR.chunk.css +0 -1
  179. package/dist/css/ClRRGXPb.chunk.css +0 -1
  180. package/dist/css/Cr1bwtZG.chunk.css +0 -1
  181. package/dist/css/DBlPz5Fw.chunk.css +0 -1
  182. package/dist/css/DDnpOnVB.chunk.css +0 -1
  183. package/dist/css/DFZQCLLg.chunk.css +0 -1
  184. package/dist/css/DJwAbl6l.chunk.css +0 -1
  185. package/dist/css/DWjg_0sz.chunk.css +0 -1
  186. package/dist/css/DYV9jjVn.chunk.css +0 -1
  187. package/dist/css/Dgeh4AqU.chunk.css +0 -9
  188. package/dist/css/DlOtoSz0.chunk.css +0 -1
  189. package/dist/css/DlxOgKUu.chunk.css +0 -1
  190. package/dist/css/Dp3arkyy.chunk.css +0 -1
  191. package/dist/css/DwgaDUzz.chunk.css +0 -1
  192. package/dist/css/FPQ_LmXH.chunk.css +0 -1
  193. package/dist/css/H09rC9gw.chunk.css +0 -1
  194. package/dist/css/LAFr2dPT.chunk.css +0 -1
  195. package/dist/css/Pg1TlYG6.chunk.css +0 -1
  196. package/dist/css/PsQn3-kb.chunk.css +0 -1
  197. package/dist/css/alkEuPrr.chunk.css +0 -1
  198. package/dist/css/k4DgCj_g.chunk.css +0 -1
  199. package/dist/en.json +0 -1
  200. package/dist/scripts/5O9SdVRZ.chunk.js +0 -2
  201. package/dist/scripts/5O9SdVRZ.chunk.js.map +0 -1
  202. package/dist/scripts/71lqp_27.chunk.js +0 -2
  203. package/dist/scripts/71lqp_27.chunk.js.map +0 -1
  204. package/dist/scripts/B29cILrj.chunk.js +0 -2
  205. package/dist/scripts/B29cILrj.chunk.js.map +0 -1
  206. package/dist/scripts/B8h79IbE.chunk.js +0 -10
  207. package/dist/scripts/B8h79IbE.chunk.js.map +0 -1
  208. package/dist/scripts/BAY69EEW.chunk.js +0 -4
  209. package/dist/scripts/BAY69EEW.chunk.js.map +0 -1
  210. package/dist/scripts/BAb7U5e_.chunk.js +0 -2
  211. package/dist/scripts/BAb7U5e_.chunk.js.map +0 -1
  212. package/dist/scripts/BENXQfLb.chunk.js +0 -2
  213. package/dist/scripts/BENXQfLb.chunk.js.map +0 -1
  214. package/dist/scripts/BF6robfP.chunk.js +0 -2
  215. package/dist/scripts/BF6robfP.chunk.js.map +0 -1
  216. package/dist/scripts/BHgJhw0m.chunk.js +0 -2
  217. package/dist/scripts/BHgJhw0m.chunk.js.map +0 -1
  218. package/dist/scripts/BJDrvt1V.chunk.js +0 -3
  219. package/dist/scripts/BJDrvt1V.chunk.js.map +0 -1
  220. package/dist/scripts/BKardFg7.chunk.js +0 -2
  221. package/dist/scripts/BKardFg7.chunk.js.map +0 -1
  222. package/dist/scripts/BNPb8jz9.chunk.js +0 -2
  223. package/dist/scripts/BNPb8jz9.chunk.js.map +0 -1
  224. package/dist/scripts/BPjdUUKC.chunk.js +0 -2
  225. package/dist/scripts/BPjdUUKC.chunk.js.map +0 -1
  226. package/dist/scripts/BQIPBrM1.chunk.js +0 -2
  227. package/dist/scripts/BQIPBrM1.chunk.js.map +0 -1
  228. package/dist/scripts/BSOiWR0F.chunk.js +0 -6
  229. package/dist/scripts/BSOiWR0F.chunk.js.map +0 -1
  230. package/dist/scripts/BUXFRkJU.chunk.js +0 -2
  231. package/dist/scripts/BUXFRkJU.chunk.js.map +0 -1
  232. package/dist/scripts/BVwIslOW.chunk.js +0 -2
  233. package/dist/scripts/BVwIslOW.chunk.js.map +0 -1
  234. package/dist/scripts/BWQPt-2Q.chunk.js +0 -2
  235. package/dist/scripts/BWQPt-2Q.chunk.js.map +0 -1
  236. package/dist/scripts/BcPvb8J5.chunk.js +0 -2
  237. package/dist/scripts/BcPvb8J5.chunk.js.map +0 -1
  238. package/dist/scripts/Bf0d_B71.chunk.js +0 -2
  239. package/dist/scripts/Bf0d_B71.chunk.js.map +0 -1
  240. package/dist/scripts/Bic1CpMi.chunk.js +0 -2
  241. package/dist/scripts/Bic1CpMi.chunk.js.map +0 -1
  242. package/dist/scripts/BjgJ1i6i.chunk.js +0 -6
  243. package/dist/scripts/BjgJ1i6i.chunk.js.map +0 -1
  244. package/dist/scripts/BjiBJyQD.chunk.js +0 -2
  245. package/dist/scripts/BjiBJyQD.chunk.js.map +0 -1
  246. package/dist/scripts/BkuaVwYH.chunk.js +0 -2
  247. package/dist/scripts/BkuaVwYH.chunk.js.map +0 -1
  248. package/dist/scripts/BmVEWaPp.chunk.js +0 -4
  249. package/dist/scripts/BmVEWaPp.chunk.js.map +0 -1
  250. package/dist/scripts/BohkY37l.chunk.js +0 -2
  251. package/dist/scripts/BohkY37l.chunk.js.map +0 -1
  252. package/dist/scripts/BvIrLDbv.chunk.js +0 -2
  253. package/dist/scripts/BvIrLDbv.chunk.js.map +0 -1
  254. package/dist/scripts/BvJAziJf.chunk.js +0 -2
  255. package/dist/scripts/BvJAziJf.chunk.js.map +0 -1
  256. package/dist/scripts/BzoD15bZ.chunk.js +0 -2
  257. package/dist/scripts/BzoD15bZ.chunk.js.map +0 -1
  258. package/dist/scripts/C0fIn5Jw.chunk.js +0 -2
  259. package/dist/scripts/C0fIn5Jw.chunk.js.map +0 -1
  260. package/dist/scripts/C1LS2BqQ.chunk.js +0 -2
  261. package/dist/scripts/C1LS2BqQ.chunk.js.map +0 -1
  262. package/dist/scripts/C89Wm2QM.chunk.js +0 -2
  263. package/dist/scripts/C89Wm2QM.chunk.js.map +0 -1
  264. package/dist/scripts/CFp1zKGZ.chunk.js +0 -8
  265. package/dist/scripts/CFp1zKGZ.chunk.js.map +0 -1
  266. package/dist/scripts/CGvB_tzk.chunk.js +0 -2
  267. package/dist/scripts/CGvB_tzk.chunk.js.map +0 -1
  268. package/dist/scripts/CJGzIuaC.chunk.js +0 -2
  269. package/dist/scripts/CJGzIuaC.chunk.js.map +0 -1
  270. package/dist/scripts/CK9SUSD9.chunk.js +0 -2
  271. package/dist/scripts/CK9SUSD9.chunk.js.map +0 -1
  272. package/dist/scripts/CRnFAzfK.chunk.js +0 -2
  273. package/dist/scripts/CRnFAzfK.chunk.js.map +0 -1
  274. package/dist/scripts/CVftTaOh.chunk.js +0 -2
  275. package/dist/scripts/CVftTaOh.chunk.js.map +0 -1
  276. package/dist/scripts/CW7x8M-z.chunk.js +0 -2
  277. package/dist/scripts/CW7x8M-z.chunk.js.map +0 -1
  278. package/dist/scripts/CX5q-0jT.chunk.js +0 -2
  279. package/dist/scripts/CX5q-0jT.chunk.js.map +0 -1
  280. package/dist/scripts/CcJo9tyC.chunk.js +0 -2
  281. package/dist/scripts/CcJo9tyC.chunk.js.map +0 -1
  282. package/dist/scripts/Cd8Y7VGD.chunk.js +0 -2
  283. package/dist/scripts/Cd8Y7VGD.chunk.js.map +0 -1
  284. package/dist/scripts/CdEUIVMJ.chunk.js +0 -2
  285. package/dist/scripts/CdEUIVMJ.chunk.js.map +0 -1
  286. package/dist/scripts/Cf7yxDlS.chunk.js +0 -2
  287. package/dist/scripts/Cf7yxDlS.chunk.js.map +0 -1
  288. package/dist/scripts/Ch38wU3l.chunk.js +0 -2
  289. package/dist/scripts/Ch38wU3l.chunk.js.map +0 -1
  290. package/dist/scripts/Cj1EIzRP.chunk.js +0 -2
  291. package/dist/scripts/Cj1EIzRP.chunk.js.map +0 -1
  292. package/dist/scripts/Ckh8ZMGm.chunk.js +0 -2
  293. package/dist/scripts/Ckh8ZMGm.chunk.js.map +0 -1
  294. package/dist/scripts/ClIb9fji.chunk.js +0 -10
  295. package/dist/scripts/ClIb9fji.chunk.js.map +0 -1
  296. package/dist/scripts/ClkubQ2J.chunk.js +0 -2
  297. package/dist/scripts/ClkubQ2J.chunk.js.map +0 -1
  298. package/dist/scripts/ClngJcaG.chunk.js +0 -2
  299. package/dist/scripts/ClngJcaG.chunk.js.map +0 -1
  300. package/dist/scripts/Cmh_kkGl.chunk.js +0 -2
  301. package/dist/scripts/Cmh_kkGl.chunk.js.map +0 -1
  302. package/dist/scripts/Cmu1J2M7.chunk.js +0 -262
  303. package/dist/scripts/Cmu1J2M7.chunk.js.map +0 -1
  304. package/dist/scripts/CqnFgpqG.chunk.js +0 -2
  305. package/dist/scripts/CqnFgpqG.chunk.js.map +0 -1
  306. package/dist/scripts/Ctl4eE7j.chunk.js +0 -2
  307. package/dist/scripts/Ctl4eE7j.chunk.js.map +0 -1
  308. package/dist/scripts/Cu2SZCs_.chunk.js +0 -3
  309. package/dist/scripts/Cu2SZCs_.chunk.js.map +0 -1
  310. package/dist/scripts/Cus4Epw8.chunk.js +0 -2
  311. package/dist/scripts/Cus4Epw8.chunk.js.map +0 -1
  312. package/dist/scripts/Cwr3w1_A.chunk.js +0 -2
  313. package/dist/scripts/Cwr3w1_A.chunk.js.map +0 -1
  314. package/dist/scripts/CyS0Qcff.chunk.js +0 -2
  315. package/dist/scripts/CyS0Qcff.chunk.js.map +0 -1
  316. package/dist/scripts/Cz6t-6nF.chunk.js +0 -2
  317. package/dist/scripts/Cz6t-6nF.chunk.js.map +0 -1
  318. package/dist/scripts/D22pDzdH.chunk.js +0 -2
  319. package/dist/scripts/D22pDzdH.chunk.js.map +0 -1
  320. package/dist/scripts/D2z6V6KN.chunk.js +0 -2
  321. package/dist/scripts/D2z6V6KN.chunk.js.map +0 -1
  322. package/dist/scripts/D3rgHjw0.chunk.js +0 -2
  323. package/dist/scripts/D3rgHjw0.chunk.js.map +0 -1
  324. package/dist/scripts/D4zllLcC.chunk.js +0 -2
  325. package/dist/scripts/D4zllLcC.chunk.js.map +0 -1
  326. package/dist/scripts/D5FZp_R5.chunk.js +0 -2
  327. package/dist/scripts/D5FZp_R5.chunk.js.map +0 -1
  328. package/dist/scripts/D9PHjOfy.chunk.js +0 -42
  329. package/dist/scripts/D9PHjOfy.chunk.js.map +0 -1
  330. package/dist/scripts/DMIuTLXg.chunk.js +0 -2
  331. package/dist/scripts/DMIuTLXg.chunk.js.map +0 -1
  332. package/dist/scripts/DNgLQx2d.chunk.js +0 -2
  333. package/dist/scripts/DNgLQx2d.chunk.js.map +0 -1
  334. package/dist/scripts/DPPRKUKt.chunk.js +0 -2
  335. package/dist/scripts/DPPRKUKt.chunk.js.map +0 -1
  336. package/dist/scripts/DTDgnfLK.chunk.js +0 -2
  337. package/dist/scripts/DTDgnfLK.chunk.js.map +0 -1
  338. package/dist/scripts/DTUnn1Hh.chunk.js +0 -2
  339. package/dist/scripts/DTUnn1Hh.chunk.js.map +0 -1
  340. package/dist/scripts/DWKdFOij.chunk.js +0 -2
  341. package/dist/scripts/DWKdFOij.chunk.js.map +0 -1
  342. package/dist/scripts/DXjxFPuU.chunk.js +0 -2
  343. package/dist/scripts/DXjxFPuU.chunk.js.map +0 -1
  344. package/dist/scripts/DZYVycui.chunk.js +0 -2
  345. package/dist/scripts/DZYVycui.chunk.js.map +0 -1
  346. package/dist/scripts/D_Q6UyjE.chunk.js +0 -2
  347. package/dist/scripts/D_Q6UyjE.chunk.js.map +0 -1
  348. package/dist/scripts/D_YN6yks.chunk.js +0 -2
  349. package/dist/scripts/D_YN6yks.chunk.js.map +0 -1
  350. package/dist/scripts/DecntqLn.chunk.js +0 -2
  351. package/dist/scripts/DecntqLn.chunk.js.map +0 -1
  352. package/dist/scripts/DfBzbPUM.chunk.js +0 -2
  353. package/dist/scripts/DfBzbPUM.chunk.js.map +0 -1
  354. package/dist/scripts/Di60KvwG.chunk.js +0 -2
  355. package/dist/scripts/Di60KvwG.chunk.js.map +0 -1
  356. package/dist/scripts/Dj0aHq7R.chunk.js +0 -2
  357. package/dist/scripts/Dj0aHq7R.chunk.js.map +0 -1
  358. package/dist/scripts/DjZDmVy9.chunk.js +0 -2
  359. package/dist/scripts/DjZDmVy9.chunk.js.map +0 -1
  360. package/dist/scripts/DjgLQWKh.chunk.js +0 -2
  361. package/dist/scripts/DjgLQWKh.chunk.js.map +0 -1
  362. package/dist/scripts/DljLRdDL.chunk.js +0 -2
  363. package/dist/scripts/DljLRdDL.chunk.js.map +0 -1
  364. package/dist/scripts/DoKirPj2.chunk.js +0 -2
  365. package/dist/scripts/DoKirPj2.chunk.js.map +0 -1
  366. package/dist/scripts/DrZPksO1.chunk.js +0 -2
  367. package/dist/scripts/DrZPksO1.chunk.js.map +0 -1
  368. package/dist/scripts/DwXWjOFd.chunk.js +0 -2
  369. package/dist/scripts/DwXWjOFd.chunk.js.map +0 -1
  370. package/dist/scripts/Dwsvd8p8.chunk.js +0 -3
  371. package/dist/scripts/Dwsvd8p8.chunk.js.map +0 -1
  372. package/dist/scripts/Ewq6yyV4.chunk.js +0 -2
  373. package/dist/scripts/Ewq6yyV4.chunk.js.map +0 -1
  374. package/dist/scripts/GOwzfXiv.chunk.js +0 -2
  375. package/dist/scripts/GOwzfXiv.chunk.js.map +0 -1
  376. package/dist/scripts/GybZtYpZ.chunk.js +0 -3
  377. package/dist/scripts/GybZtYpZ.chunk.js.map +0 -1
  378. package/dist/scripts/H13OLF2T.chunk.js +0 -2
  379. package/dist/scripts/H13OLF2T.chunk.js.map +0 -1
  380. package/dist/scripts/HdH1xgCy.chunk.js +0 -2
  381. package/dist/scripts/HdH1xgCy.chunk.js.map +0 -1
  382. package/dist/scripts/K65Dt7jg.chunk.js +0 -2
  383. package/dist/scripts/K65Dt7jg.chunk.js.map +0 -1
  384. package/dist/scripts/M-TSYEoo.chunk.js +0 -2
  385. package/dist/scripts/M-TSYEoo.chunk.js.map +0 -1
  386. package/dist/scripts/O9F9Sybw.chunk.js +0 -34
  387. package/dist/scripts/O9F9Sybw.chunk.js.map +0 -1
  388. package/dist/scripts/PRj0OsVz.chunk.js +0 -2
  389. package/dist/scripts/PRj0OsVz.chunk.js.map +0 -1
  390. package/dist/scripts/SsbfqiCA.chunk.js +0 -2
  391. package/dist/scripts/SsbfqiCA.chunk.js.map +0 -1
  392. package/dist/scripts/app-BDrXtKwD.js +0 -228
  393. package/dist/scripts/app-BDrXtKwD.js.map +0 -1
  394. package/dist/scripts/bOC-mo3v.chunk.js +0 -2
  395. package/dist/scripts/bOC-mo3v.chunk.js.map +0 -1
  396. package/dist/scripts/cCAKx9a1.chunk.js +0 -2
  397. package/dist/scripts/cCAKx9a1.chunk.js.map +0 -1
  398. package/dist/scripts/csPZD_eN.chunk.js +0 -2
  399. package/dist/scripts/csPZD_eN.chunk.js.map +0 -1
  400. package/dist/scripts/iTBVzKEZ.chunk.js +0 -2
  401. package/dist/scripts/iTBVzKEZ.chunk.js.map +0 -1
  402. package/dist/scripts/jhT3mG38.chunk.js +0 -2
  403. package/dist/scripts/jhT3mG38.chunk.js.map +0 -1
  404. package/dist/scripts/lcnUAi0K.chunk.js +0 -2
  405. package/dist/scripts/lcnUAi0K.chunk.js.map +0 -1
  406. package/dist/scripts/mBxqWw8V.chunk.js +0 -2
  407. package/dist/scripts/mBxqWw8V.chunk.js.map +0 -1
  408. package/dist/scripts/nR79RHo_.chunk.js +0 -15
  409. package/dist/scripts/nR79RHo_.chunk.js.map +0 -1
  410. package/dist/scripts/sFV5nxD4.chunk.js +0 -2
  411. package/dist/scripts/sFV5nxD4.chunk.js.map +0 -1
  412. package/dist/scripts/t5MCaEYl.chunk.js +0 -2
  413. package/dist/scripts/t5MCaEYl.chunk.js.map +0 -1
  414. package/dist/scripts/uoF107dn.chunk.js +0 -380
  415. package/dist/scripts/uoF107dn.chunk.js.map +0 -1
  416. package/dist/scripts/zeFMHqhy.chunk.js +0 -2
  417. package/dist/scripts/zeFMHqhy.chunk.js.map +0 -1
@@ -1,2 +0,0 @@
1
- import{a as i,j as r,O as n,N as s}from"./app-BDrXtKwD.js";const o="_container_nowrk_1",c="_subContainer_nowrk_7",a={container:o,subContainer:c};function d(e){var t;return i({title:(t=e.error)==null?void 0:t.heading}),e.error?r.jsx("div",{style:{height:"85vh"},children:r.jsx("div",{style:{backgroundImage:`url(${e.imageUrl})`},className:a.container,children:r.jsxs(n,{className:a.subContainer,children:[r.jsx(n.Heading,{children:e.error.heading}),r.jsx(n.Info,{className:"w-33 mb-4",children:e.error.description}),e.error.cta!==!1&&r.jsx(n.Cta,{text:e.error.cta.text,className:`btn btn-dark ${e.error.description?"mt-n2":""}`,href:e.error.cta.url,icon:s,openInNewTab:!0})]})})}):r.jsx(r.Fragment,{})}export{d as NoClassroomsErrorView};
2
- //# sourceMappingURL=CGvB_tzk.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CGvB_tzk.chunk.js","sources":["../../src/apps/default/views/no-classrooms-error/NoClassroomsErrorView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { NewWindowSvg } from 'libs/shared/images/svg/actions/NewWindowSvg';\n\nimport styles from './no-classrooms-error.module.scss';\n\ninterface NoClassroomsErrorViewProps {\n error: ErrorPageError;\n imageUrl?: string;\n}\n\nexport function NoClassroomsErrorView(props: NoClassroomsErrorViewProps): React.ReactElement {\n useSetPageMetadata({ title: props.error?.heading });\n\n if (!props.error)\n return <></>;\n\n return (\n <div style={{ height: '85vh' }}>\n <div style={{ backgroundImage: `url(${props.imageUrl})` }} className={styles.container}>\n <EmptyState className={styles.subContainer}>\n <EmptyState.Heading>{props.error.heading}</EmptyState.Heading>\n\n <EmptyState.Info className='w-33 mb-4'>{props.error.description}</EmptyState.Info>\n\n {props.error.cta !== false &&\n <EmptyState.Cta\n text={props.error.cta.text}\n className={`btn btn-dark ${props.error.description ? 'mt-n2' : ''}`}\n href={props.error.cta.url}\n icon={NewWindowSvg}\n openInNewTab\n />\n }\n </EmptyState>\n </div>\n </div>\n );\n}"],"names":["NoClassroomsErrorView","props","useSetPageMetadata","_a","jsx","styles","jsxs","EmptyState","NewWindowSvg","Fragment"],"mappings":"iJAcO,SAASA,EAAsBC,EAAuD,OAG3F,OAFAC,EAAmB,CAAE,OAAOC,EAAAF,EAAM,QAAN,YAAAE,EAAa,QAAS,EAE7CF,EAAM,MAITG,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,OAAQ,QACpB,SAAAA,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,gBAAiB,OAAOH,EAAM,QAAQ,GAAA,EAAO,UAAWI,EAAO,UAC3E,SAAAC,EAAAA,KAACC,EAAA,CAAW,UAAWF,EAAO,aAC5B,SAAA,CAAAD,EAAAA,IAACG,EAAW,QAAX,CAAoB,SAAAN,EAAM,MAAM,QAAQ,EAEzCG,MAACG,EAAW,KAAX,CAAgB,UAAU,YAAa,SAAAN,EAAM,MAAM,YAAY,EAE/DA,EAAM,MAAM,MAAQ,IACnBG,EAAAA,IAACG,EAAW,IAAX,CACC,KAAMN,EAAM,MAAM,IAAI,KACtB,UAAW,gBAAgBA,EAAM,MAAM,YAAc,QAAU,EAAE,GACjE,KAAMA,EAAM,MAAM,IAAI,IACtB,KAAMO,EACN,aAAY,EAAA,CAAA,CACd,CAAA,CAEJ,EACF,EACF,EArBOJ,EAAAA,IAAAK,EAAAA,SAAA,EAAE,CAuBb"}
@@ -1,2 +0,0 @@
1
- import{e as N,b as f,u as b,j as e,L as j,o as S,h as E,N as k,P as p,E as $,r as q,R,p as w,D as u,d as V,i as I,q as L,I as F,A as D,g as Q}from"./app-BDrXtKwD.js";import{E as O}from"./BPjdUUKC.chunk.js";import{u as A}from"./BzoD15bZ.chunk.js";import{S as W}from"./BNPb8jz9.chunk.js";import{u as M}from"./lcnUAi0K.chunk.js";import{I as z,a as G}from"./D4zllLcC.chunk.js";import{s as g,M as H}from"./GybZtYpZ.chunk.js";import{a as U,T as m}from"./DTDgnfLK.chunk.js";import{V as Y}from"./CdEUIVMJ.chunk.js";import{V as B,T as K}from"./B8h79IbE.chunk.js";const J="_query_joot4_1",X="_partialQuery_joot4_5",Z="_newWindowIcon_joot4_15",ee="_searchItem_joot4_18",o={query:J,partialQuery:X,newWindowIcon:Z,searchItem:ee},se="reportsDashboard.topSearchesCardView",P=j.encloseNamespace(se);function ae(){return e.jsxs("ul",{className:"list-unstyled m-0 pt-2",children:[e.jsx("li",{className:"py-1",children:e.jsx("div",{className:`${o.partialQuery} partial-loading-background`})}),e.jsx("li",{className:"py-1",children:e.jsx("div",{className:`${o.partialQuery} partial-loading-background`})}),e.jsx("li",{className:"py-1",children:e.jsx("div",{className:`${o.partialQuery} partial-loading-background`})}),e.jsx("li",{className:"py-1",children:e.jsx("div",{className:`${o.partialQuery} partial-loading-background`})})]})}function te(s){return e.jsx("div",{className:"d-flex align-items-center justify-content-center text-center h-100",children:P(s.isAdmin?"emptyStateAdmin":"emptyStateTeacher")})}const ie={0:"🥇",1:"🥈",2:"🥉"};function ne(s){let a="d-flex flex-column bg-white rounded p-3";return s.className&&(a+=` ${s.className}`),a}function ke(s){var n;const a=N(),{hasPermissions:i}=f(),t=b(!!a&&W.topSearches(a)),c=M($.getPrimarySearchUrl);return A(t),e.jsxs("div",{className:ne(s),children:[e.jsx("h3",{className:"h6 mb-2",children:P("topSearches")}),!!((n=t.data)!=null&&n.length)&&e.jsx("div",{className:"h-100 me-n2",children:e.jsx(S.Scrollbars,{height:"100%",children:e.jsx("ul",{className:"list-unstyled m-0 pe-3",children:t.data.map((d,l)=>{const r=ie[l];return e.jsx("li",{className:`py-1 ${o.searchItem}`,children:e.jsxs("a",{href:c(d.query),target:"_blank",className:"position-relative d-flex justify-content-between align-items-center",children:[e.jsxs("span",{children:[r?e.jsx(O,{emoji:r}):e.jsx(e.Fragment,{children:" "}),e.jsx("span",{className:o.query,children:d.query})]}),e.jsx(E,{svg:k,className:`svg-container ${o.newWindowIcon}`})]})},l)})})})}),!t.data&&e.jsx(ae,{}),!!t.data&&!t.data.length&&e.jsx(te,{isAdmin:i(p.ViewCustomerAnalytics)})]})}const y=()=>{const[s]=q.useState(R.getRandomInt(5)+3+"rem");return e.jsxs("div",{className:`border d-flex position-relative me-2 ${g.widgetItem}`,children:[e.jsx("div",{className:g.imagePanel}),e.jsx("div",{className:"px-2",style:{width:s}}),e.jsx("div",{className:g.partialIcon,children:e.jsx(z,{type:G.Subject})})]})},ce="reportsDashboard.topTopicsCard",h=j.encloseNamespace(ce),x={[m.RootTopic]:{toggle:"subjects",heading:"popularSubjects",emptyState:{admin:"emptySubjectsAdmin",teacher:"emptySubjectsTeacher"}},[m.ChildTopic]:{toggle:"topics",heading:"popularTopics",emptyState:{admin:"emptyTopicsAdmin",teacher:"emptyTopicsTeacher"}}},_="top:topics:selection";function le(s){const a=s(p.ViewCustomerAnalytics)?m.RootTopic:m.ChildTopic,i=localStorage.getItem(_);if(!i)return a;const t=parseInt(i);return!isNaN(t)&&!!m[t]?t:a}function re(s){localStorage.setItem(_,s.toString())}function oe(){return Object.values(m).filter(s=>typeof s=="number")}function de(s){const a=x[s.type].emptyState;return e.jsx("div",{className:"d-flex align-items-center justify-content-center text-center h-100",children:h(s.isAdmin?a.admin:a.teacher)})}function me(s){return e.jsxs(u,{align:"end",children:[e.jsx(u.Toggle,{id:"topic-type-dropdown",variant:"outline-dark",className:"no-caret",children:h(x[s.type].toggle)}),e.jsx(u.Menu,{children:oe().map((a,i)=>s.type===a?e.jsx(w.Fragment,{},i):e.jsx(u.Item,{onClick:()=>s.onSelectType(a),children:h(x[a].toggle)},i))})]})}function pe(s){let a="d-flex flex-column bg-white rounded p-3";return s.className&&(a+=` ${s.className}`),a}function $e(s){var l;const a=N(),{hasPermissions:i}=f(),[t,c]=w.useState(le(i)),n=b(!!a&&U.topTopics(a,t));function d(r){re(r),c(r)}return e.jsxs("div",{className:pe(s),children:[e.jsxs("div",{className:"d-flex justify-content-between align-items-center pb-1",children:[e.jsx("h3",{className:"h6 m-0",children:h(x[t].heading)}),e.jsx(me,{type:t,onSelectType:d})]}),!n.data&&e.jsxs("ul",{className:"list-unstyled m-0",children:[e.jsx("li",{className:"py-2",children:e.jsx(y,{})}),e.jsx("li",{className:"py-2",children:e.jsx(y,{})}),e.jsx("li",{className:"py-2",children:e.jsx(y,{})})]}),!!((l=n.data)!=null&&l.length)&&e.jsx("div",{className:"h-100 me-n2",children:e.jsx(S.Scrollbars,{height:"100%",children:e.jsx("ul",{className:"list-unstyled m-0 pe-3",children:n.data.map((r,C)=>e.jsx("li",{className:"py-2",children:e.jsx(H,{data:r})},C))})})}),!!n.data&&!n.data.length&&e.jsx(de,{type:t,isAdmin:i(p.ViewCustomerAnalytics)})]})}const ue="_thumbnail_pvflg_1",he="_name_pvflg_5",T={thumbnail:ue,name:he},xe=new Array(7).fill(null).map((s,a)=>a);function je(){return e.jsx("ul",{className:"list-unstyled",children:xe.map(s=>e.jsx("li",{className:"py-2",children:e.jsxs("div",{className:"row",children:[e.jsx("div",{className:"col-6",children:e.jsx("div",{className:`${T.thumbnail} rounded partial-loading-background`})}),e.jsx("div",{className:"col-6 d-flex align-items-center",children:e.jsx("div",{className:`${T.name} partial-loading-background`})})]})},s))})}function ge(s){const a=V();return e.jsx("li",{className:"py-2",children:e.jsx(I,{appLink:L(s.video,a),children:e.jsxs("div",{className:"row",children:[e.jsx("div",{className:"col-6",children:e.jsx(B,{video:s.video,imageOptions:{size:F.Small},textPosition:K.Independent,type:"cosmetic",hideMask:!0,newDurationStyle:!0,size:"sm"})}),e.jsx("div",{className:"col-6 d-flex align-items-center",children:e.jsx("span",{className:"clamp-2 fw-bold",children:s.video.name})})]})})})}const ye="reportsDashboard.topVideosEmptyState",Ne=j.encloseNamespace(ye);function fe(s){return e.jsx("div",{className:"d-flex align-items-center justify-content-center text-center h-100",children:Ne(s.isAdmin?"messageAdmin":"messageTeacher")})}const be="reportsDashboard.topVideosCardView",v=j.encloseNamespace(be);function Se(){const s=V();return{application:Q.VIDEOS,action:D.Videos.VIEWS,params:s}}function qe(){var c,n;const s=N(),a=Se(),{hasPermissions:i}=f(),t=b(!!s&&Y.topVideos(s));return A(t),e.jsxs("div",{className:"d-flex flex-column bg-white rounded p-3 h-100",children:[e.jsx("h3",{className:"h6 mb-2",children:v("topVideos")}),!!((n=(c=t.data)==null?void 0:c.data)!=null&&n.length)&&e.jsx("div",{className:"h-100 me-n2",children:e.jsxs(S.Scrollbars,{height:"100%",children:[e.jsx("ul",{className:"list-unstyled m-0 pe-3",children:t.data.data.map((d,l)=>e.jsx(ge,{video:d.object},l))}),i(p.ViewCustomerAnalytics)&&e.jsx("div",{className:"d-flex align-items-center justify-content-center mt-2 mb-1",children:e.jsx(I,{appLink:a,className:"btn btn-outline-dark rounded-pill",children:v("seeMore")})})]})}),!t.data&&e.jsx(je,{}),!!t.data&&!t.data.data.length&&e.jsx(fe,{isAdmin:i(p.ViewCustomerAnalytics)})]})}export{ke as T,qe as a,$e as b};
2
- //# sourceMappingURL=CJGzIuaC.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CJGzIuaC.chunk.js","sources":["../../src/apps/dashboard/views/overview-cards/top-searches/TopSearchesCardView.tsx","../../../../libs/shared/src/components/widgets/items/subject-widget-item/PartialSubjectWidgetItem.tsx","../../src/apps/dashboard/views/overview-cards/top-topics/TopTopicsCardView.tsx","../../src/apps/dashboard/views/overview-cards/top-videos/components/partial-top-videos/PartialTopVideos.tsx","../../src/apps/dashboard/views/overview-cards/top-videos/components/top-video-item/TopVideoItem.tsx","../../src/apps/dashboard/views/overview-cards/top-videos/components/top-videos-empty-state/TopVideosEmptyState.tsx","../../src/apps/dashboard/views/overview-cards/top-videos/TopVideosCardView.tsx"],"sourcesContent":["import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { EmojiText } from 'libs/shared/components/emoji-text/EmojiText';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { NewWindowSvg } from 'libs/shared/images/svg/actions/NewWindowSvg';\n\nimport { SearchRequests } from 'shared/flight-requests/SearchRequests';\nimport { useGetExternalUrl } from 'shared/hooks/UseGetExternalUrl';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { TopSearch } from 'shared/interfaces';\nimport { ExternalRouteHelper } from 'shared/utils/ExternalRouteHelper';\n\nimport styles from './top-searches-card.module.scss';\n\nconst namespace = 'reportsDashboard.topSearchesCardView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction PartialTopSearches(): JSX.Element {\n return (\n <ul className='list-unstyled m-0 pt-2'>\n <li className='py-1'>\n <div className={`${styles.partialQuery} partial-loading-background`} />\n </li>\n <li className='py-1'>\n <div className={`${styles.partialQuery} partial-loading-background`} />\n </li>\n <li className='py-1'>\n <div className={`${styles.partialQuery} partial-loading-background`} />\n </li>\n <li className='py-1'>\n <div className={`${styles.partialQuery} partial-loading-background`} />\n </li>\n </ul>\n );\n}\n\ninterface EmptyTopSearchesProps {\n isAdmin: boolean;\n}\n\nfunction EmptyTopSearches(props: EmptyTopSearchesProps): JSX.Element {\n return (\n <div className='d-flex align-items-center justify-content-center text-center h-100'>\n {getPhrase(props.isAdmin ? 'emptyStateAdmin' : 'emptyStateTeacher')}\n </div>\n );\n}\n\nconst EmojiMap: { [index: number]: string } = {\n [0]: '🥇',\n [1]: '🥈',\n [2]: '🥉'\n};\n\nfunction getCardClassName(props: TopSearchesCardViewProps): string {\n let className = 'd-flex flex-column bg-white rounded p-3';\n\n if (props.className)\n className += ` ${props.className}`;\n\n return className;\n}\n\ninterface TopSearchesCardViewProps {\n className?: string;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function TopSearchesCardView(props: TopSearchesCardViewProps): JSX.Element {\n const requestFilter = useGetRequestFilter();\n\n const { hasPermissions } = usePermissions();\n\n const searches = Flight.useBasicFetch<TopSearch[]>(!!requestFilter && SearchRequests.topSearches(requestFilter));\n\n const getSearchUrl = useGetExternalUrl(ExternalRouteHelper.getPrimarySearchUrl);\n\n useHandleObjectError(searches);\n\n return (\n <div className={getCardClassName(props)}>\n <h3 className='h6 mb-2'>{getPhrase('topSearches')}</h3>\n {!!searches.data?.length &&\n <div className='h-100 me-n2'>\n <Scrollbars height='100%'>\n <ul className='list-unstyled m-0 pe-3'>\n {searches.data.map((s, idx) => {\n const emoji = EmojiMap[idx];\n\n return (\n <li\n key={idx}\n className={`py-1 ${styles.searchItem}`}\n >\n <a\n href={getSearchUrl(s.query)}\n target='_blank'\n className='position-relative d-flex justify-content-between align-items-center'\n >\n <span>\n {emoji\n ? <EmojiText emoji={emoji} />\n : <>&nbsp;</> // This is needed to give the li the correct height.\n }\n <span className={styles.query}>\n {s.query}\n </span>\n </span>\n <SvgContainer svg={NewWindowSvg} className={`svg-container ${styles.newWindowIcon}`} />\n </a>\n </li>\n );\n })}\n </ul>\n </Scrollbars>\n </div>\n }\n {!searches.data && <PartialTopSearches />}\n {!!searches.data && !searches.data.length &&\n <EmptyTopSearches isAdmin={hasPermissions(PermissionName.ViewCustomerAnalytics)} />\n }\n </div>\n );\n}","import * as React from 'react';\n\nimport { RandomHelper } from 'libs/common/react/utils/RandomHelper';\n\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\n\nimport styles from './cover-pill.module.scss';\n\nexport const PartialSubjectWidgetItem = () => {\n const [width] = React.useState(RandomHelper.getRandomInt(5) + 3 + 'rem');\n\n return (\n <div className={`border d-flex position-relative me-2 ${styles.widgetItem}`}>\n <div className={styles.imagePanel} />\n <div className='px-2' style={{ width }} />\n <div className={styles.partialIcon}>\n <ImageFallback type={ImageFallbackType.Subject} />\n </div>\n </div>\n );\n};\n\nexport const PartialLargeSubjectWidgetItem = () => {\n return (\n <div className={`border d-flex position-relative me-2 ${styles.widgetItem}`}>\n <div className={`${styles.partialLargeImage}`} />\n <div className='px-2' />\n <div className={styles.partialIcon}>\n <ImageFallback type={ImageFallbackType.Subject} extraClasses={styles.partialLargeFallback} />\n </div>\n </div>\n );\n};","import React from 'react';\nimport { Dropdown } from 'react-bootstrap';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/PartialSubjectWidgetItem';\nimport { SubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/SubjectWidgetItem';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { HasPermissionsFunc, usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { Classification } from 'libs/shared/interfaces';\n\nimport { TopicAnalyticsType } from 'shared/enums/TopicAnalyticsType';\nimport { TopicRequests } from 'shared/flight-requests/TopicRequests';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\n\nconst namespace = 'reportsDashboard.topTopicsCard';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst TOPIC_TYPE_PHRASES = {\n [TopicAnalyticsType.RootTopic]: {\n toggle: 'subjects',\n heading: 'popularSubjects',\n emptyState: {\n admin: 'emptySubjectsAdmin',\n teacher: 'emptySubjectsTeacher'\n }\n },\n [TopicAnalyticsType.ChildTopic]: {\n toggle: 'topics',\n heading: 'popularTopics',\n emptyState: {\n admin: 'emptyTopicsAdmin',\n teacher: 'emptyTopicsTeacher'\n }\n }\n};\n\nconst LOCAL_STORAGE_KEY = 'top:topics:selection';\n\nfunction getInitialToggleState(hasPermissions: HasPermissionsFunc): TopicAnalyticsType {\n const defaultState = hasPermissions(PermissionName.ViewCustomerAnalytics)\n ? TopicAnalyticsType.RootTopic\n : TopicAnalyticsType.ChildTopic;\n\n const localStoragePreference = localStorage.getItem(LOCAL_STORAGE_KEY);\n\n if (!localStoragePreference)\n return defaultState;\n\n const preferenceInt = parseInt(localStoragePreference);\n\n const isValid = !isNaN(preferenceInt) && !!TopicAnalyticsType[preferenceInt];\n\n if (!isValid)\n return defaultState;\n\n return preferenceInt;\n}\n\nfunction setTogglePreference(type: TopicAnalyticsType): void {\n localStorage.setItem(LOCAL_STORAGE_KEY, type.toString());\n}\n\nfunction getEnumValues(): TopicAnalyticsType[] {\n return Object.values(TopicAnalyticsType).filter(t => typeof t === 'number') as TopicAnalyticsType[];\n}\n\ninterface TopTopicsEmptyStateProps {\n type: TopicAnalyticsType;\n isAdmin: boolean;\n}\n\nfunction TopTopicsEmptyState(props: TopTopicsEmptyStateProps): JSX.Element {\n const phrase = TOPIC_TYPE_PHRASES[props.type].emptyState;\n\n return (\n <div className='d-flex align-items-center justify-content-center text-center h-100'>\n {getPhrase(props.isAdmin ? phrase.admin : phrase.teacher)}\n </div>\n );\n}\n\ninterface TopicTypeToggleProps {\n type: TopicAnalyticsType;\n onSelectType: (type: TopicAnalyticsType) => void;\n}\n\nfunction TopicTypeToggle(props: TopicTypeToggleProps): JSX.Element {\n return (\n <Dropdown align='end'>\n <Dropdown.Toggle\n id='topic-type-dropdown'\n variant='outline-dark'\n className='no-caret'\n >\n {getPhrase(TOPIC_TYPE_PHRASES[props.type].toggle)}\n </Dropdown.Toggle>\n <Dropdown.Menu>\n {getEnumValues().map((type, idx) => {\n if (props.type === type)\n return <React.Fragment key={idx} />;\n\n return (\n <Dropdown.Item key={idx} onClick={() => props.onSelectType(type)}>\n {getPhrase(TOPIC_TYPE_PHRASES[type].toggle)}\n </Dropdown.Item>\n );\n })}\n </Dropdown.Menu>\n </Dropdown>\n );\n}\n\nfunction getCardClassName(props: TopTopicsCardViewProps): string {\n let className = 'd-flex flex-column bg-white rounded p-3';\n\n if (props.className)\n className += ` ${props.className}`;\n\n return className;\n}\n\ninterface TopTopicsCardViewProps {\n className?: string;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function TopTopicsCardView(props: TopTopicsCardViewProps): JSX.Element {\n const requestFilter = useGetRequestFilter();\n const { hasPermissions } = usePermissions();\n\n const [ type, setType ] = React.useState(getInitialToggleState(hasPermissions));\n \n const topTopics = Flight.useBasicFetch<Classification[]>(!!requestFilter &&\n TopicRequests.topTopics(requestFilter, type));\n\n function onSelectType(type: TopicAnalyticsType): void {\n setTogglePreference(type);\n setType(type);\n }\n\n return (\n <div className={getCardClassName(props)}>\n <div className='d-flex justify-content-between align-items-center pb-1'>\n <h3 className='h6 m-0'>\n {getPhrase(TOPIC_TYPE_PHRASES[type].heading)}\n </h3>\n <TopicTypeToggle type={type} onSelectType={onSelectType} />\n </div>\n {!topTopics.data &&\n <ul className='list-unstyled m-0'>\n <li className='py-2'>\n <PartialSubjectWidgetItem />\n </li>\n <li className='py-2'>\n <PartialSubjectWidgetItem />\n </li>\n <li className='py-2'>\n <PartialSubjectWidgetItem />\n </li>\n </ul>\n }\n {!!topTopics.data?.length &&\n <div className='h-100 me-n2'>\n <Scrollbars height='100%'>\n <ul className='list-unstyled m-0 pe-3'>\n {topTopics.data.map((t, idx) => (\n <li key={idx} className='py-2'>\n <SubjectWidgetItem data={t} />\n </li>\n ))}\n </ul>\n </Scrollbars>\n </div>\n }\n {!!topTopics.data && !topTopics.data.length &&\n <TopTopicsEmptyState\n type={type}\n isAdmin={hasPermissions(PermissionName.ViewCustomerAnalytics)}\n />\n }\n </div>\n );\n}","import React from 'react';\n\nimport styles from './partial-top-videos.module.scss';\n\nconst VIDEOS = (new Array(7)).fill(null).map((v, idx) => idx);\n\nexport function PartialTopVideos(): JSX.Element {\n return (\n <ul className='list-unstyled'>\n {VIDEOS.map(v => (\n <li key={v} className='py-2'>\n <div className='row'>\n <div className='col-6'>\n <div className={`${styles.thumbnail} rounded partial-loading-background`} />\n </div>\n <div className='col-6 d-flex align-items-center'>\n <div className={`${styles.name} partial-loading-background`} />\n </div>\n </div>\n </li>\n ))}\n </ul>\n );\n}","import React from 'react';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nimport { useGetAppLinkFilterParams } from 'shared/hooks/UseGetFilterQueryParams';\nimport { getVideoAppLink } from 'shared/utils/ReportsAppLinkUtils';\n\ninterface TopVideoItemProps {\n video: VideoTypes;\n}\n\nexport function TopVideoItem(props: TopVideoItemProps): JSX.Element {\n const filterQueryParams = useGetAppLinkFilterParams();\n\n return (\n <li className='py-2'>\n <AppLink appLink={getVideoAppLink(props.video, filterQueryParams)}>\n <div className='row'>\n <div className='col-6'>\n <VideoThumbnail\n video={props.video}\n imageOptions={{ size: ImageSize.Small }}\n textPosition={ThumbnailTextPosition.Independent}\n type='cosmetic'\n hideMask\n newDurationStyle\n size='sm'\n />\n </div>\n <div className='col-6 d-flex align-items-center'>\n <span className='clamp-2 fw-bold'>\n {props.video.name}\n </span>\n </div>\n </div>\n </AppLink>\n </li>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'reportsDashboard.topVideosEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface TopVideosEmptyStateProps {\n isAdmin: boolean;\n}\n\nexport function TopVideosEmptyState(props: TopVideosEmptyStateProps): JSX.Element {\n return (\n <div className='d-flex align-items-center justify-content-center text-center h-100'>\n {getPhrase(props.isAdmin ? 'messageAdmin' : 'messageTeacher')}\n </div>\n );\n}","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\n\nimport { Actions } from 'shared/constants/ReportsActions';\nimport { AppChannels } from 'shared/constants/ReportsRadioChannels';\nimport { VideoViewRequests } from 'shared/flight-requests/VideoViewRequests';\nimport { useGetAppLinkFilterParams, useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { TopVideosResponse } from 'shared/interfaces';\n\nimport { PartialTopVideos } from './components/partial-top-videos/PartialTopVideos';\nimport { TopVideoItem } from './components/top-video-item/TopVideoItem';\nimport { TopVideosEmptyState } from './components/top-videos-empty-state/TopVideosEmptyState';\n\nconst namespace = 'reportsDashboard.topVideosCardView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction useVideosViewsAppLink(): Core.AppLink {\n const filterQueryParams = useGetAppLinkFilterParams();\n\n return {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.VIEWS,\n params: filterQueryParams\n };\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function TopVideosCardView(): JSX.Element {\n const requestFilter = useGetRequestFilter();\n const videoViewsAppLink = useVideosViewsAppLink();\n\n const { hasPermissions } = usePermissions();\n\n const videos = Flight.useBasicFetch<TopVideosResponse>(!!requestFilter &&\n VideoViewRequests.topVideos(requestFilter));\n\n useHandleObjectError(videos);\n\n return (\n <div className='d-flex flex-column bg-white rounded p-3 h-100'>\n <h3 className='h6 mb-2'>{getPhrase('topVideos')}</h3>\n {!!videos.data?.data?.length &&\n <div className='h-100 me-n2'>\n <Scrollbars height='100%'>\n <ul className='list-unstyled m-0 pe-3'>\n {videos.data.data.map((v, idx) => <TopVideoItem key={idx} video={v.object} />)}\n </ul>\n {hasPermissions(PermissionName.ViewCustomerAnalytics) &&\n <div className='d-flex align-items-center justify-content-center mt-2 mb-1'>\n <AppLink appLink={videoViewsAppLink} className='btn btn-outline-dark rounded-pill'>\n {getPhrase('seeMore')}\n </AppLink>\n </div>\n }\n </Scrollbars>\n </div>\n }\n {!videos.data && <PartialTopVideos />}\n {!!videos.data && !videos.data.data.length &&\n <TopVideosEmptyState isAdmin={hasPermissions(PermissionName.ViewCustomerAnalytics)} />\n }\n </div>\n );\n}"],"names":["namespace","getPhrase","LanguageService","PartialTopSearches","jsxs","jsx","styles","EmptyTopSearches","props","EmojiMap","getCardClassName","className","TopSearchesCardView","requestFilter","useGetRequestFilter","hasPermissions","usePermissions","searches","Flight.useBasicFetch","SearchRequests","getSearchUrl","useGetExternalUrl","ExternalRouteHelper","useHandleObjectError","_a","Scrollbars","s","idx","emoji","EmojiText","SvgContainer","NewWindowSvg","PermissionName","PartialSubjectWidgetItem","width","React.useState","RandomHelper","ImageFallback","ImageFallbackType","TOPIC_TYPE_PHRASES","TopicAnalyticsType","LOCAL_STORAGE_KEY","getInitialToggleState","defaultState","localStoragePreference","preferenceInt","setTogglePreference","type","getEnumValues","t","TopTopicsEmptyState","phrase","TopicTypeToggle","Dropdown","React","TopTopicsCardView","setType","topTopics","TopicRequests","onSelectType","SubjectWidgetItem","VIDEOS","v","PartialTopVideos","TopVideoItem","filterQueryParams","useGetAppLinkFilterParams","AppLink","getVideoAppLink","VideoThumbnail","ImageSize","ThumbnailTextPosition","TopVideosEmptyState","useVideosViewsAppLink","AppChannels","Actions","TopVideosCardView","videoViewsAppLink","videos","VideoViewRequests","_b"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{b as m,P as g,e as E,u as n,U as V,c as S,V as U,r as h}from"./app-BDrXtKwD.js";import{V as p}from"./GybZtYpZ.chunk.js";function l(i){const{hasPermissions:o}=m(),r=o(g.ViewCustomerAnalytics),s=E(),t=n(V.currentUser()),u=r&&!!t.data&&!!s,e=n(u&&p.individualEngagement(i,{start:s==null?void 0:s.start,end:s==null?void 0:s.end},t.data.id)),[,c]=S(U.AUDIENCE_FILTER_SUGGESTIONS);h.useEffect(()=>{var a;e.data&&c("users",(a=e.data)==null?void 0:a.data.map(d=>d.userId))},[e.isFetching])}export{l as u};
2
- //# sourceMappingURL=CK9SUSD9.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CK9SUSD9.chunk.js","sources":["../../src/shared/hooks/UseSetEngagementAudienceSuggestions.ts"],"sourcesContent":["import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { AudienceFilterSuggestions } from 'libs/shared/apps/analytics/interfaces/AudienceFilterSuggestions';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoViewRequests as SharedVideoViewRequests } from 'libs/shared/flight-requests/VideoViewRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { CurrentUser } from 'libs/shared/interfaces';\nimport { IndividualEngagementResponse } from 'libs/shared/interfaces';\n\nimport { ViewModelKeys } from 'shared/constants/ReportsViewModels';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\n\n/**\n * This hook sets engagement data for all users within the set date range (ignoring the audience filter)\n * and sets any users with results as audience suggestions.\n * \n * Note: this is only for admins as staff have a different audience filter.\n */\nexport function useSetEngagementAudienceSuggestions(videoId: string): void {\n const { hasPermissions } = usePermissions();\n const canViewCustomerAnalytics = hasPermissions(PermissionName.ViewCustomerAnalytics);\n\n const filter = useGetRequestFilter();\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const shouldFetch = canViewCustomerAnalytics && !!currentUser.data && !!filter;\n\n const engagement = Flight.useBasicFetch<IndividualEngagementResponse>(shouldFetch &&\n SharedVideoViewRequests.individualEngagement(\n videoId,\n { start: filter?.start, end: filter?.end },\n currentUser.data.id\n ));\n\n const [ , setSuggestions ] = useViewModel<AudienceFilterSuggestions>(ViewModelKeys.AUDIENCE_FILTER_SUGGESTIONS);\n\n useEffect(() => {\n if (!engagement.data)\n return;\n\n setSuggestions('users', engagement.data?.data.map(e => e.userId));\n }, [engagement.isFetching]);\n}"],"names":["useSetEngagementAudienceSuggestions","videoId","hasPermissions","usePermissions","canViewCustomerAnalytics","PermissionName","filter","useGetRequestFilter","currentUser","Flight.useBasicFetch","UserRequests","shouldFetch","engagement","SharedVideoViewRequests","setSuggestions","useViewModel","ViewModelKeys","useEffect","_a","e"],"mappings":"+HAsBO,SAASA,EAAoCC,EAAuB,CACzE,KAAM,CAAE,eAAAC,CAAA,EAAmBC,EAAA,EACrBC,EAA2BF,EAAeG,EAAe,qBAAqB,EAE9EC,EAASC,EAAA,EACTC,EAAcC,EAAkCC,EAAa,aAAa,EAE1EC,EAAcP,GAA4B,CAAC,CAACI,EAAY,MAAQ,CAAC,CAACF,EAElEM,EAAaH,EAAmDE,GACpEE,EAAwB,qBACtBZ,EACA,CAAE,MAAOK,GAAA,YAAAA,EAAQ,MAAO,IAAKA,GAAA,YAAAA,EAAQ,GAAA,EACrCE,EAAY,KAAK,EAAA,CAClB,EAEG,CAAA,CAAIM,CAAe,EAAIC,EAAwCC,EAAc,2BAA2B,EAE9GC,EAAAA,UAAU,IAAM,OACTL,EAAW,MAGhBE,EAAe,SAASI,EAAAN,EAAW,OAAX,YAAAM,EAAiB,KAAK,IAAIC,GAAKA,EAAE,OAAO,CAClE,EAAG,CAACP,EAAW,UAAU,CAAC,CAC5B"}
@@ -1,2 +0,0 @@
1
- import{j as n,a7 as r,L as o}from"./app-BDrXtKwD.js";import{P as l}from"./K65Dt7jg.chunk.js";const m="interactives.pendingIndicator",d=o.encloseNamespace(m);function u(e){let t="d-flex align-items-center h-100";return t+=e.showLabel?" justify-content-between":" justify-content-center",e.className&&(t+=` ${e.className}`),t}function g(e){const{title:t,showLabel:a,tooltipClassName:c,showIndicator:i=!0}=e,s=()=>n.jsxs("div",{className:u(e),children:[!!a&&n.jsx("em",{children:d("pending")}),!!i&&n.jsx(l,{})]});return t?n.jsx(r,{title:t,spanHack:!0,spanHackClassName:c||"h-100 w-100 d-flex align-items-center",children:n.jsx(s,{})}):n.jsx(s,{})}export{g as P};
2
- //# sourceMappingURL=CRnFAzfK.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CRnFAzfK.chunk.js","sources":["../../../../libs/shared/src/apps/analytics/components/pending-indicator/PendingIndicator.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { PercentageIndicator } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\n\nconst namespace = 'interactives.pendingIndicator';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getClassName(props: PendingIndicatorProps): string {\n let className = 'd-flex align-items-center h-100';\n\n className += props.showLabel ? ' justify-content-between' : ' justify-content-center';\n\n if (props.className)\n className += ` ${props.className}`;\n\n return className;\n}\n\ninterface PendingIndicatorProps {\n title?: string;\n className?: string;\n showLabel?: boolean;\n tooltipClassName?: string;\n showIndicator?: boolean;\n}\n\nexport function PendingIndicator(props: PendingIndicatorProps): JSX.Element {\n const { title, showLabel, tooltipClassName, showIndicator = true } = props;\n\n const Indicator = () => (\n <div className={getClassName(props)}>\n {!!showLabel &&\n <em>{getPhrase('pending')}</em>\n }\n {!!showIndicator &&\n <PercentageIndicator />\n }\n </div>\n );\n\n if (!title)\n return <Indicator />;\n\n return (\n <Tooltip title={title} spanHack spanHackClassName={tooltipClassName || 'h-100 w-100 d-flex align-items-center'}>\n <Indicator />\n </Tooltip>\n );\n}"],"names":["namespace","getPhrase","LanguageService","getClassName","props","className","PendingIndicator","title","showLabel","tooltipClassName","showIndicator","Indicator","jsxs","jsx","PercentageIndicator","Tooltip"],"mappings":"6FAOA,MAAMA,EAAY,gCACZC,EAAYC,EAAgB,iBAAiBF,CAAS,EAE5D,SAASG,EAAaC,EAAsC,CAC1D,IAAIC,EAAY,kCAEhB,OAAAA,GAAaD,EAAM,UAAY,2BAA6B,0BAExDA,EAAM,YACRC,GAAa,IAAID,EAAM,SAAS,IAE3BC,CACT,CAUO,SAASC,EAAiBF,EAA2C,CAC1E,KAAM,CAAE,MAAAG,EAAO,UAAAC,EAAW,iBAAAC,EAAkB,cAAAC,EAAgB,IAASN,EAE/DO,EAAY,IAChBC,EAAAA,KAAC,OAAI,UAAWT,EAAaC,CAAK,EAC/B,SAAA,CAAA,CAAC,CAACI,GACDK,EAAAA,IAAC,KAAA,CAAI,SAAAZ,EAAU,SAAS,EAAE,EAE3B,CAAC,CAACS,GACDG,MAACC,EAAA,CAAA,CAAoB,CAAA,EAEzB,EAGF,OAAKP,EAIHM,EAAAA,IAACE,EAAA,CAAQ,MAAAR,EAAc,SAAQ,GAAC,kBAAmBE,GAAoB,wCACrE,SAAAI,EAAAA,IAACF,EAAA,CAAA,CAAU,CAAA,CACb,QALQA,EAAA,EAAU,CAOtB"}
@@ -1,2 +0,0 @@
1
- import{cU as n,r as a,ap as s,aq as c,cV as o}from"./app-BDrXtKwD.js";function i(r){const e=n.getInstance(r);return a.useEffect(()=>()=>{n.releaseInstance(r)}),e}function u(r){return i(r)}function g(){const r=u(o.ALERT);return{success(e){r.success(e)()},error(e){r.error(e)()},warning(e){r.createAlert({type:s.Warning,heading:c.Warning,message:e})},info(e,t){r.createAlert({heading:e,message:t,type:s.Info})}}}export{u as a,g as u};
2
- //# sourceMappingURL=CVftTaOh.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CVftTaOh.chunk.js","sources":["../../../../libs/common/src/react/hooks/UseInstance.ts","../../../../libs/common/src/react/hooks/UseService.ts","../../../../libs/shared/src/hooks/UseAlerts.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\n\n/**\n * Hook to retrieve an instance from InstanceManager.\n * It handles releasing the instance in the cleanup function.\n * @param instanceName \n */\nexport function useInstance<T>(instanceName: string): T {\n const instance = InstanceManager.getInstance<T>(instanceName);\n\n React.useEffect(() => {\n return () => { InstanceManager.releaseInstance(instanceName); };\n }), [];\n\n return instance;\n}\n\n/**\n * Can be used to conditionally get an instance safely. Passing in a falsey value\n * will not return an instance, and will also not error\n */\nexport function useInstanceSafe<T>(instanceName: string): T {\n let instance: T = null;\n\n if (instanceName)\n instance = InstanceManager.getInstance<T>(instanceName);\n\n React.useEffect(() => {\n return () => { InstanceManager.releaseInstance(instanceName); };\n }), [];\n\n return instance;\n}","import { BaseService } from 'libs/common/backbone/core/BaseService';\n\nimport { useInstance } from './UseInstance';\n\nexport function useService<T extends BaseService>(serviceName: string): T {\n const service = useInstance<T>(serviceName);\n\n return service;\n}","import { CommonServices } from 'libs/common/backbone/constants/CommonServices';\nimport { AlertType, BaseAlert, BaseAlertOptions, BaseAlertService, DefaultAlertHeading } from 'libs/common/backbone/services/BaseAlertService';\nimport { useService } from 'libs/common/react/hooks/UseService';\n\nexport interface Alerts {\n success(alertContent: string | BaseAlert | BaseAlertOptions): void,\n error(alertContent: string | BaseAlert | BaseAlertOptions): void,\n warning(alertContent: string): void\n info(heading: string, message: string): void\n}\n\nexport function useAlerts(): Alerts {\n const alertService = useService<BaseAlertService>(CommonServices.ALERT);\n\n return {\n success(alertContent: string | BaseAlert | BaseAlertOptions): void {\n alertService.success(alertContent)();\n },\n error(alertContent: string | BaseAlert | BaseAlertOptions): void {\n alertService.error(alertContent)();\n },\n warning(alertContent: string): void {\n alertService.createAlert({\n type: AlertType.Warning,\n heading: DefaultAlertHeading.Warning,\n message: alertContent\n });\n },\n info(heading: string, message: string): void {\n alertService.createAlert({\n heading,\n message,\n type: AlertType.Info\n });\n }\n };\n}"],"names":["useInstance","instanceName","instance","InstanceManager","React.useEffect","useService","serviceName","useAlerts","alertService","CommonServices","alertContent","AlertType","DefaultAlertHeading","heading","message"],"mappings":"sEASO,SAASA,EAAeC,EAAyB,CACtD,MAAMC,EAAWC,EAAgB,YAAeF,CAAY,EAE5DG,OAAAA,EAAAA,UAAgB,IACP,IAAM,CAAED,EAAgB,gBAAgBF,CAAY,CAAG,CAC/D,EAEMC,CACT,CCbO,SAASG,EAAkCC,EAAwB,CAGxE,OAFgBN,EAAeM,CAAW,CAG5C,CCGO,SAASC,GAAoB,CAClC,MAAMC,EAAeH,EAA6BI,EAAe,KAAK,EAEtE,MAAO,CACL,QAAQC,EAA2D,CACjEF,EAAa,QAAQE,CAAY,EAAA,CACnC,EACA,MAAMA,EAA2D,CAC/DF,EAAa,MAAME,CAAY,EAAA,CACjC,EACA,QAAQA,EAA4B,CAClCF,EAAa,YAAY,CACvB,KAAMG,EAAU,QAChB,QAASC,EAAoB,QAC7B,QAASF,CAAA,CACV,CACH,EACA,KAAKG,EAAiBC,EAAuB,CAC3CN,EAAa,YAAY,CACvB,QAAAK,EACA,QAAAC,EACA,KAAMH,EAAU,IAAA,CACjB,CACH,CAAA,CAEJ"}
@@ -1,2 +0,0 @@
1
- var a={exports:{}},p;function o(){return p||(p=1,(function(r){function e(){return r.exports=e=Object.assign?Object.assign.bind():function(x){for(var t=1;t<arguments.length;t++){var s=arguments[t];for(var n in s)({}).hasOwnProperty.call(s,n)&&(x[n]=s[n])}return x},r.exports.__esModule=!0,r.exports.default=r.exports,e.apply(null,arguments)}r.exports=e,r.exports.__esModule=!0,r.exports.default=r.exports})(a)),a.exports}export{o as r};
2
- //# sourceMappingURL=CW7x8M-z.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CW7x8M-z.chunk.js","sources":["../../../../../node_modules/@babel/runtime/helpers/extends.js"],"sourcesContent":["function _extends() {\n return module.exports = _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _extends.apply(null, arguments);\n}\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;"],"names":["_extends","module","n","e","t","r"],"mappings":"8DAAA,SAASA,GAAW,CAClB,OAAOC,EAAA,QAAiBD,EAAW,OAAO,OAAS,OAAO,OAAO,OAAS,SAAUE,EAAG,CACrF,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CACzC,IAAIC,EAAI,UAAUD,CAAC,EACnB,QAASE,KAAKD,GAAI,CAAA,GAAI,eAAe,KAAKA,EAAGC,CAAC,IAAMH,EAAEG,CAAC,EAAID,EAAEC,CAAC,EACpE,CACI,OAAOH,CACX,EAAKD,qBAA4B,GAAMA,EAAO,QAAQ,QAAaA,EAAO,QAASD,EAAS,MAAM,KAAM,SAAS,CACjH,CACAC,EAAA,QAAiBD,EAAUC,EAAA,QAAA,WAA4B,GAAMA,EAAO,QAAQ,QAAaA,EAAO","x_google_ignoreList":[0]}
@@ -1,2 +0,0 @@
1
- function e(n){const t=[];return Object.keys(n).forEach(a=>{const r=n[a];r&&t.push(`${a}:${Array.isArray(r)?r.join(","):r}`)}),t.join(":")}export{e as g};
2
- //# sourceMappingURL=CX5q-0jT.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CX5q-0jT.chunk.js","sources":["../../../../libs/shared/src/apps/analytics/utils/FilterParamUtils.ts"],"sourcesContent":["import { FilterQueryParams } from 'libs/shared/apps/analytics/interfaces/FilterQueryParams';\n\nexport function getFilterParamsKey(filters: FilterQueryParams): string {\n const keys: string[] = [];\n\n Object.keys(filters).forEach((key: keyof FilterQueryParams) => {\n const val = filters[key];\n\n if (!val)\n return;\n\n keys.push(`${key}:${Array.isArray(val) ? val.join(',') : val}`);\n });\n\n return keys.join(':');\n}"],"names":["getFilterParamsKey","filters","keys","key","val"],"mappings":"AAEO,SAASA,EAAmBC,EAAoC,CACrE,MAAMC,EAAiB,CAAA,EAEvB,cAAO,KAAKD,CAAO,EAAE,QAASE,GAAiC,CAC7D,MAAMC,EAAMH,EAAQE,CAAG,EAElBC,GAGLF,EAAK,KAAK,GAAGC,CAAG,IAAI,MAAM,QAAQC,CAAG,EAAIA,EAAI,KAAK,GAAG,EAAIA,CAAG,EAAE,CAChE,CAAC,EAEMF,EAAK,KAAK,GAAG,CACtB"}
@@ -1,2 +0,0 @@
1
- import{d as i,j as n,A as s,g as a,L as r}from"./app-BDrXtKwD.js";import{S as p}from"./nR79RHo_.chunk.js";const c="reportsVideos.customerVideosNav",t=r.encloseNamespace(c);function m(e){return[{label:t("overview"),appLink:{application:a.VIDEOS,action:s.Videos.HOME,params:e}},{label:t("views"),appLink:{application:a.VIDEOS,action:s.Videos.VIEWS,params:e}}]}function v(){const e=i(),o=m(e);return n.jsx(p,{items:o})}export{v as C};
2
- //# sourceMappingURL=CcJo9tyC.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CcJo9tyC.chunk.js","sources":["../../src/apps/videos/components/customer-videos-nav/CustomerVideosNav.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { FilterQueryParams } from 'libs/shared/apps/analytics/interfaces/FilterQueryParams';\n\nimport { SubNav, SubNavItem } from 'shared/components/sub-nav/SubNav';\nimport { Actions } from 'shared/constants/ReportsActions';\nimport { AppChannels } from 'shared/constants/ReportsRadioChannels';\nimport { useGetAppLinkFilterParams } from 'shared/hooks/UseGetFilterQueryParams';\n\nconst namespace = 'reportsVideos.customerVideosNav';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getNavItems(params: FilterQueryParams): SubNavItem[] {\n return [\n {\n label: getPhrase('overview'),\n appLink: { application: AppChannels.VIDEOS, action: Actions.Videos.HOME, params }\n },\n {\n label: getPhrase('views'),\n appLink: { application: AppChannels.VIDEOS, action: Actions.Videos.VIEWS, params }\n }\n ];\n}\n\nexport function CustomerVideosNav(): JSX.Element {\n const filterQueryParams = useGetAppLinkFilterParams();\n\n const navItems = getNavItems(filterQueryParams);\n\n return (\n <SubNav items={navItems} />\n );\n}"],"names":["namespace","getPhrase","LanguageService","getNavItems","params","AppChannels","Actions","CustomerVideosNav","filterQueryParams","useGetAppLinkFilterParams","navItems","jsx","SubNav"],"mappings":"0GAWA,MAAMA,EAAY,kCACZC,EAAYC,EAAgB,iBAAiBF,CAAS,EAE5D,SAASG,EAAYC,EAAyC,CAC5D,MAAO,CACL,CACE,MAAOH,EAAU,UAAU,EAC3B,QAAS,CAAE,YAAaI,EAAY,OAAQ,OAAQC,EAAQ,OAAO,KAAM,OAAAF,CAAA,CAAO,EAElF,CACE,MAAOH,EAAU,OAAO,EACxB,QAAS,CAAE,YAAaI,EAAY,OAAQ,OAAQC,EAAQ,OAAO,MAAO,OAAAF,CAAA,CAAO,CACnF,CAEJ,CAEO,SAASG,GAAiC,CAC/C,MAAMC,EAAoBC,EAAA,EAEpBC,EAAWP,EAAYK,CAAiB,EAE9C,OACEG,EAAAA,IAACC,EAAA,CAAO,MAAOF,CAAA,CAAU,CAE7B"}
@@ -1,2 +0,0 @@
1
- import{aw as c,u as o,U as v,bO as d}from"./app-BDrXtKwD.js";import{g as m}from"./sFV5nxD4.chunk.js";function p(t,e,a){return{currentUserId:t.id,currentCustomerId:t.customerId,dateRange:e?{start:e.start,end:e.end}:void 0,userIds:e==null?void 0:e.userId,classroomsAndGroups:e==null?void 0:e.groupId,shareId:a}}const l={interactiveResultSet(t,e,a,n,s,r,i,u){return{url:s?`/api/domain/v3/analytics/interactives/${t}/metadata/${e}`:`/api/domain/v2/analytics/interactives/${t}/metadata/${e}`,key:m(`interactive:result:set:${t}:${e}:${s}`,n),data:p(a,n,s),type:c.POST,normalize:!1,success:r,error:i,always:u}},mark(t,e,a,n,s,r,i){return{url:`/api/domain/v1/analytics/answers/${a}`,key:`mark:answer:${a}:${n.resultId}`,type:c.PUT,data:n,normalize:!1,invalidationKeys:`interactive:result:set:${t}:${e}`,success:s,error:r,always:i}},pendingReviews(t){return{url:"/api/domain/v1/analytics/interactives/pending-reviews/summary",key:`interactives:pending:reviews:${t.interactives.map(a=>`${a.interactiveId}:${a.metadataId}:${a.shareId}`).join(",")}`,type:c.POST,data:t,normalize:!1}},interactiveResultsReport(t){return{url:"/api/domain/v3/analytics/interactives/report",key:"interactive:results:report",data:t,type:c.POST,normalize:!1}}};function R(t,e,a){var u;const n=o(v.currentUser()),s=o(!!t&&d.interactiveMetadata(t)),r=o(!!((u=s.data)!=null&&u.interactiveId)&&d.interactive(s.data.interactiveId)),i=!!n.data&&!!r.data;return o(i&&l.interactiveResultSet(s.data.interactiveId,s.data.id,n.data,e,a))}export{l as I,R as u};
2
- //# sourceMappingURL=Cd8Y7VGD.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Cd8Y7VGD.chunk.js","sources":["../../../../libs/shared/src/apps/analytics/flight-requests/InteractiveResultsRequests.ts","../../../../libs/shared/src/apps/analytics/hooks/UseFetchInteractiveResults.ts"],"sourcesContent":["import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/react/index';\n\nimport { MarkInteractiveAnswer } from 'libs/shared/apps/analytics/interfaces/MarkInteractiveAnswer';\nimport { InteractiveResultsReport } from 'libs/shared/apps/analytics/interfaces/requests/InteractiveResultsReport';\nimport { InteractivesPendingReviewsRequest } from 'libs/shared/apps/analytics/interfaces/requests/InteractivesPendingReviewsRequest';\nimport { AnalyticsRequestFilter, CurrentUser, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\ninterface InteractiveResultFilters {\n currentUserId: string;\n currentCustomerId: string;\n dateRange?: { start: string, end: string }\n userIds?: string | string[];\n classroomsAndGroups?: string | string[];\n shareId?: string;\n}\n\nfunction getInteractiveResultFilters(\n currentUser: CurrentUser,\n filter: AnalyticsRequestFilter,\n shareId?: string\n): InteractiveResultFilters {\n return {\n currentUserId: currentUser.id,\n currentCustomerId: currentUser.customerId,\n dateRange: filter ? { start: filter.start, end: filter.end } : undefined,\n userIds: filter?.userId,\n classroomsAndGroups: filter?.groupId,\n shareId: shareId\n };\n}\n\nexport const InteractiveResultsRequests = {\n /** \n * This endpoint returns data with a lot of duplicated ids,\n * e.g. student answers to the same question will have the same id.\n * Because of that, we don't normalize.\n */\n interactiveResultSet(\n interactiveId: string,\n interactiveMetadataId: string,\n currentUser: CurrentUser,\n filter?: AnalyticsRequestFilter,\n shareId?: string,\n success?: (data: InteractiveResultSet) => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: shareId ?\n `/api/domain/v3/analytics/interactives/${interactiveId}/metadata/${interactiveMetadataId}` :\n `/api/domain/v2/analytics/interactives/${interactiveId}/metadata/${interactiveMetadataId}`,\n key: getAnalyticsRequestKey(`interactive:result:set:${interactiveId}:${interactiveMetadataId}:${shareId}`, filter),\n data: getInteractiveResultFilters(currentUser, filter, shareId),\n type: HttpVerbs.POST,\n normalize: false,\n success,\n error,\n always\n };\n },\n \n /**\n * As the response from `interactiveResultSet` isn't normalised, we need to invalidate the cache\n * to update the results data.\n */\n mark(\n interactiveId: string,\n interactiveMetadataId: string,\n answerId: string,\n data: MarkInteractiveAnswer,\n success?: () => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `/api/domain/v1/analytics/answers/${answerId}`,\n key: `mark:answer:${answerId}:${data.resultId}`,\n type: HttpVerbs.PUT,\n data,\n normalize: false,\n invalidationKeys: `interactive:result:set:${interactiveId}:${interactiveMetadataId}`,\n success,\n error,\n always\n };\n },\n\n pendingReviews(data: InteractivesPendingReviewsRequest): Flight.Request {\n const key = data.interactives.map(interactive => `${interactive.interactiveId}:${interactive.metadataId}:${interactive.shareId}`).join(',');\n return {\n url: `/api/domain/v1/analytics/interactives/pending-reviews/summary`,\n key: `interactives:pending:reviews:${key}`,\n type: HttpVerbs.POST,\n data,\n normalize: false\n };\n },\n\n interactiveResultsReport(data: InteractiveResultsReport): Flight.Request {\n return {\n url: '/api/domain/v3/analytics/interactives/report',\n key: 'interactive:results:report',\n data,\n type: HttpVerbs.POST,\n normalize: false\n };\n }\n};","import { Flight } from 'libs/common/flight';\n\nimport { InteractiveResultsRequests } from 'libs/shared/apps/analytics/flight-requests/InteractiveResultsRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { AnalyticsRequestFilter, CurrentUser, Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\n\nexport function useFetchInteractiveResults(\n interactiveMetadataId: string,\n requestFilter?: AnalyticsRequestFilter,\n shareId?: string\n): Flight.Response<InteractiveResultSet> {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(!!interactiveMetadataId &&\n InteractiveRequests.interactiveMetadata(interactiveMetadataId));\n\n const interactive = Flight.useBasicFetch<Interactive>(!!interactiveMetadata.data?.interactiveId &&\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId));\n\n const shouldFetchResults = !!currentUser.data && !!interactive.data;\n\n return Flight.useBasicFetch<InteractiveResultSet>(shouldFetchResults &&\n InteractiveResultsRequests.interactiveResultSet(\n interactiveMetadata.data.interactiveId,\n interactiveMetadata.data.id,\n currentUser.data,\n requestFilter,\n shareId\n ));\n}"],"names":["getInteractiveResultFilters","currentUser","filter","shareId","InteractiveResultsRequests","interactiveId","interactiveMetadataId","success","error","always","getAnalyticsRequestKey","HttpVerbs","answerId","data","interactive","useFetchInteractiveResults","requestFilter","Flight.useBasicFetch","UserRequests","interactiveMetadata","InteractiveRequests","_a","shouldFetchResults"],"mappings":"qGAkBA,SAASA,EACPC,EACAC,EACAC,EAC0B,CAC1B,MAAO,CACL,cAAeF,EAAY,GAC3B,kBAAmBA,EAAY,WAC/B,UAAWC,EAAS,CAAE,MAAOA,EAAO,MAAO,IAAKA,EAAO,GAAA,EAAQ,OAC/D,QAASA,GAAA,YAAAA,EAAQ,OACjB,oBAAqBA,GAAA,YAAAA,EAAQ,QAC7B,QAAAC,CAAA,CAEJ,CAEO,MAAMC,EAA6B,CAMxC,qBACEC,EACAC,EACAL,EACAC,EACAC,EACAI,EACAC,EACAC,EACgB,CAChB,MAAO,CACL,IAAKN,EACH,yCAAyCE,CAAa,aAAaC,CAAqB,GACxF,yCAAyCD,CAAa,aAAaC,CAAqB,GAC1F,IAAKI,EAAuB,0BAA0BL,CAAa,IAAIC,CAAqB,IAAIH,CAAO,GAAID,CAAM,EACjH,KAAMF,EAA4BC,EAAaC,EAAQC,CAAO,EAC9D,KAAMQ,EAAU,KAChB,UAAW,GACX,QAAAJ,EACA,MAAAC,EACA,OAAAC,CAAA,CAEJ,EAMA,KACEJ,EACAC,EACAM,EACAC,EACAN,EACAC,EACAC,EACgB,CAChB,MAAO,CACL,IAAK,oCAAoCG,CAAQ,GACjD,IAAK,eAAeA,CAAQ,IAAIC,EAAK,QAAQ,GAC7C,KAAMF,EAAU,IAChB,KAAAE,EACA,UAAW,GACX,iBAAkB,0BAA0BR,CAAa,IAAIC,CAAqB,GAClF,QAAAC,EACA,MAAAC,EACA,OAAAC,CAAA,CAEJ,EAEA,eAAeI,EAAyD,CAEtE,MAAO,CACL,IAAK,gEACL,IAAK,gCAHKA,EAAK,aAAa,IAAIC,GAAe,GAAGA,EAAY,aAAa,IAAIA,EAAY,UAAU,IAAIA,EAAY,OAAO,EAAE,EAAE,KAAK,GAAG,CAGhG,GACxC,KAAMH,EAAU,KAChB,KAAAE,EACA,UAAW,EAAA,CAEf,EAEA,yBAAyBA,EAAgD,CACvE,MAAO,CACL,IAAK,+CACL,IAAK,6BACL,KAAAA,EACA,KAAMF,EAAU,KAChB,UAAW,EAAA,CAEf,CACF,ECtGO,SAASI,EACdT,EACAU,EACAb,EACuC,OACvC,MAAMF,EAAcgB,EAAkCC,EAAa,aAAa,EAE1EC,EAAsBF,EAA0C,CAAC,CAACX,GACtEc,EAAoB,oBAAoBd,CAAqB,CAAC,EAE1DQ,EAAcG,EAAkC,CAAC,GAACI,EAAAF,EAAoB,OAApB,MAAAE,EAA0B,gBAChFD,EAAoB,YAAYD,EAAoB,KAAK,aAAa,CAAC,EAEnEG,EAAqB,CAAC,CAACrB,EAAY,MAAQ,CAAC,CAACa,EAAY,KAE/D,OAAOG,EAA2CK,GAChDlB,EAA2B,qBACzBe,EAAoB,KAAK,cACzBA,EAAoB,KAAK,GACzBlB,EAAY,KACZe,EACAb,CAAA,CACD,CACL"}
@@ -1,2 +0,0 @@
1
- import{s as n,v as u}from"./app-BDrXtKwD.js";import{g as l}from"./sFV5nxD4.chunk.js";const y={topVideos(e,r,o,i,s){return{url:n.urlBuilder("{gateway}/v1/analytics/videos/top",{"query.video":"thumbnail,series","query.interactive":"_parentVideo[_rating],_parentClip,_thumbnail","query.clip":"_parentVideo[_rating],_thumbnail",limit:r,...e}),key:l(`top:videos:${r??0}`,e),normalize:!1,formatData:t=>{const a=u.sortBy(t.data,"count");return a.reverse(),{...t,data:a}},success:o,error:i,always:s}}};export{y as V};
2
- //# sourceMappingURL=CdEUIVMJ.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CdEUIVMJ.chunk.js","sources":["../../src/shared/flight-requests/VideoViewRequests.ts"],"sourcesContent":["import { Xhr } from 'libs/common/backbone/interfaces/Xhr';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsRequestFilter } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\nimport { TopVideosResponse } from 'shared/interfaces';\n\nexport const VideoViewRequests = {\n topVideos(\n filter: AnalyticsRequestFilter,\n limit?: number,\n success?: (data: TopVideosResponse) => void,\n error?: (xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/analytics/videos/top', {\n 'query.video': 'thumbnail,series',\n 'query.interactive': '_parentVideo[_rating],_parentClip,_thumbnail',\n 'query.clip': '_parentVideo[_rating],_thumbnail',\n limit,\n ...filter\n }),\n key: getAnalyticsRequestKey(`top:videos:${limit ?? 0}`, filter),\n normalize: false,\n formatData: (data: TopVideosResponse) => {\n const sorted = ArrayHelper.sortBy(data.data, 'count');\n \n sorted.reverse();\n \n return {\n ...data,\n data: sorted\n };\n },\n success,\n error,\n always\n };\n }\n};"],"names":["VideoViewRequests","filter","limit","success","error","always","UrlHelper","getAnalyticsRequestKey","data","sorted","ArrayHelper"],"mappings":"qFAUO,MAAMA,EAAoB,CAC/B,UACEC,EACAC,EACAC,EACAC,EACAC,EACgB,CAChB,MAAO,CACL,IAAKC,EAAU,WAAW,oCAAqC,CAC7D,cAAe,mBACf,oBAAqB,+CACrB,aAAc,mCACd,MAAAJ,EACA,GAAGD,CAAA,CACJ,EACD,IAAKM,EAAuB,cAAcL,GAAS,CAAC,GAAID,CAAM,EAC9D,UAAW,GACX,WAAaO,GAA4B,CACvC,MAAMC,EAASC,EAAY,OAAOF,EAAK,KAAM,OAAO,EAEpD,OAAAC,EAAO,QAAA,EAEA,CACL,GAAGD,EACH,KAAMC,CAAA,CAEV,EACA,QAAAN,EACA,MAAAC,EACA,OAAAC,CAAA,CAEJ,CACF"}
@@ -1,2 +0,0 @@
1
- import{p as L,r as s,ah as M,F as d}from"./app-BDrXtKwD.js";const g=()=>{const e=L.useRef(!0);return L.useEffect(()=>()=>{e.current=!1},[]),e},R=275,y=5,T={className:"",delay:0,style:null},Y={screenX:0,screenY:0};function H(e,t){var n;e.current&&(t.className&&((n=e.current.classList)==null||n.add(t.className)),t.style&&Object.keys(t.style).forEach(u=>{e.current.style[u]=t.style[u]}))}function h(e,t){var n;e.current&&(t.className&&((n=e.current.classList)==null||n.remove(t.className)),t.style&&Object.keys(t.style).forEach(u=>{e.current.style[u]=null}))}function b(e,t){return Math.abs(e.screenX-t.screenX)>y||Math.abs(e.screenY-t.screenY)>y}function X(e=T){const t=g(),[n,u]=s.useState(e),[l,c]=s.useState(!1),r=s.useRef(null);s.useEffect(()=>{M.isEqual(e,n)||u(e)},[e]);const i=d.throttle(()=>{H(r,n),t.current&&c(!0)},n.delay,{leading:!1}),f=()=>{d.isFunction(i.cancel)&&i.cancel(),h(r,n),t.current&&c(!1)};return s.useLayoutEffect(()=>{const o=r.current;if(o)return o.addEventListener("mouseenter",i),o.addEventListener("mouseleave",f),()=>{o.removeEventListener("mouseenter",i),o.removeEventListener("mouseleave",f)}},[r.current,n]),[r,l]}function w(e){const[t,n]=s.useState(e),u=s.useRef({...Y}),l=s.useRef(!1),c=s.useRef(0),r=s.useRef(null),[i,f]=s.useState(!1);s.useEffect(()=>{M.isEqual(e,t)||n(e)},[e]);function o(){c.current&&(window.clearTimeout(c.current),c.current=0)}function O(a,v){c.current||(c.current=window.setTimeout(a,v))}function m(){l.current=!0}function S(a){if(!l.current)return;const v={...u.current};u.current.screenX=a.screenX,u.current.screenY=a.screenY,b(v,a)&&o(),O(()=>{H(r,t),f(!0)},t.delay||R)}function E(){o(),h(r,t),l.current=!1,f(!1)}return s.useLayoutEffect(()=>{if(!r.current)return;const a=d.throttle(S,25,{leading:!1});return r.current.addEventListener("mouseenter",m),r.current.addEventListener("mousemove",a),r.current.addEventListener("mouseleave",E),()=>{r.current&&(r.current.removeEventListener("mouseenter",m),r.current.removeEventListener("mousemove",a),r.current.removeEventListener("mouseleave",E))}},[r.current,t]),[r,i]}export{w as a,X as u};
2
- //# sourceMappingURL=Cf7yxDlS.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Cf7yxDlS.chunk.js","sources":["../../../../libs/shared/src/hooks/UseIsComponentMounted.ts","../../../../libs/shared/src/hooks/UseHover.ts"],"sourcesContent":["import React from 'react';\n\nexport const useIsComponentMounted = () => {\n const isMounted = React.useRef(true);\n\n React.useEffect(() => {\n return () => { isMounted.current = false; };\n }, []);\n\n return isMounted;\n};","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { useIsComponentMounted } from 'libs/shared/hooks/UseIsComponentMounted';\n\nconst DEFAULT_HOVER_DELAY = 275;\nconst MOUSE_MOVE_THRESHOLD = 5; // value is in pixels\n\ninterface HoverOptions {\n /**\n * Classes to be applied to the target element on hover. Useful if you want to style the element on hover\n * after a delay (controlled by the `timeout` option below)\n */\n className?: string;\n\n /**\n * Style attribute to be applied to the target element on hover. Should only be used \n */\n style?: HashObject;\n\n /**\n * A delay between when the user actually hovers on the element, and when the hook returns `true` for `isHovering`.\n * This can be used to determine whether a user has actually intended for a hover event on an element to be\n * triggered or not. Defaults to 0.\n */\n delay?: number;\n}\n\nconst defaultOptions: HoverOptions = {\n className: '',\n delay: 0,\n style: null\n};\n\ninterface MousePosition {\n screenX: number;\n screenY: number;\n}\n\nconst defaultHoverState: MousePosition = {\n screenX: 0,\n screenY: 0\n};\n\nfunction setHoveringStyles<T extends HTMLElement>(\n ref: React.MutableRefObject<T>,\n options: HoverOptions\n): void {\n if (!ref.current)\n return;\n\n if (options.className)\n ref.current.classList?.add(options.className);\n\n if (options.style) {\n Object.keys(options.style).forEach((styleName: any) => {\n ref.current.style[styleName] = options.style[styleName];\n });\n }\n}\n\nfunction unSetHoveringStyles<T extends HTMLElement>(\n ref: React.MutableRefObject<T>,\n options: HoverOptions\n): void {\n if (!ref.current)\n return;\n\n if (options.className)\n ref.current.classList?.remove(options.className);\n\n if (options.style) {\n Object.keys(options.style).forEach((styleName: any) => {\n ref.current.style[styleName] = null;\n });\n }\n}\n\nfunction hasMouseMoved(prev: MousePosition, current: MousePosition): boolean {\n return Math.abs(prev.screenX - current.screenX) > MOUSE_MOVE_THRESHOLD ||\n Math.abs(prev.screenY - current.screenY) > MOUSE_MOVE_THRESHOLD;\n}\n\n/**\n * This hook detects hover events on an element.\n * This should only be used where CSS hover events won't suffice for what you are trying to achieve.\n * It will trigger after the delay regardless of pointer movement within the container, if you want\n * it to trigger only after the pointer has stopped moving, consider the `useHoverIntent` hook.\n */\nexport function useHover<T extends HTMLElement>(\n options: HoverOptions = defaultOptions\n): [ React.MutableRefObject<T>, boolean ] {\n const isMounted = useIsComponentMounted();\n const [ cachedOptions, setCachedOptions ] = React.useState(options);\n const [ isHovering, setIsHovering ] = React.useState(false);\n\n const ref = React.useRef<T>(null);\n\n React.useEffect(() => {\n if (ObjectHelper.isEqual(options, cachedOptions))\n return;\n\n setCachedOptions(options);\n }, [options]);\n\n const triggerHover = FunctionHelper.throttle(() => {\n setHoveringStyles(ref, cachedOptions);\n if (isMounted.current)\n setIsHovering(true);\n }, cachedOptions.delay, { leading: false });\n\n const handleMouseOut = () => {\n if (FunctionHelper.isFunction(triggerHover.cancel))\n triggerHover.cancel();\n\n unSetHoveringStyles(ref, cachedOptions);\n\n if (isMounted.current)\n setIsHovering(false);\n };\n\n React.useLayoutEffect(() => {\n const node = ref.current;\n\n if (node) {\n node.addEventListener('mouseenter', triggerHover);\n node.addEventListener('mouseleave', handleMouseOut);\n\n return () => {\n node.removeEventListener('mouseenter', triggerHover);\n node.removeEventListener('mouseleave', handleMouseOut);\n };\n }\n }, [ ref.current, cachedOptions ]);\n\n return [ ref, isHovering ];\n}\n\n\n/**\n * This hook detects hover events on an element with intent.\n * This should only be used where CSS hover events won't suffice for what you are trying to achieve.\n * It will trigger after the pointer has stopped moving and the delay has elapsed, if you want it to trigger\n * regardless of pointer movement within the container, consider the `useHover` hook`.\n */\nexport function useHoverIntent<T extends HTMLElement>(options: HoverOptions): [ React.MutableRefObject<T>, boolean ] {\n const [ cachedOptions, setCachedOptions ] = React.useState(options);\n\n /**\n * Using refs for frequently updated state in order to not trigger react rendering\n */\n const mousePosition = React.useRef<MousePosition>({ ...defaultHoverState });\n const isInside = React.useRef<boolean>(false);\n const timeout = React.useRef<number>(0);\n\n const ref = React.useRef<T>(null);\n const [ isHovering, setIsHovering ] = React.useState(false);\n\n React.useEffect(() => {\n if (ObjectHelper.isEqual(options, cachedOptions))\n return;\n\n setCachedOptions(options);\n }, [options]);\n\n function localClearTimeout(): void {\n if (!timeout.current)\n return;\n\n window.clearTimeout(timeout.current);\n timeout.current = 0;\n }\n\n function localSetTimeout(fn: () => void, delay: number): void {\n if (timeout.current)\n return;\n\n timeout.current = window.setTimeout(fn, delay);\n }\n\n function onMouseEnter(): void {\n isInside.current = true;\n }\n\n function onMouseMove(event: MouseEvent): void {\n if (!isInside.current)\n return;\n\n const prev = { ...mousePosition.current };\n mousePosition.current.screenX = event.screenX;\n mousePosition.current.screenY = event.screenY;\n\n if (hasMouseMoved(prev, event))\n localClearTimeout();\n \n localSetTimeout(() => {\n setHoveringStyles(ref, cachedOptions);\n setIsHovering(true);\n }, cachedOptions.delay || DEFAULT_HOVER_DELAY);\n }\n\n function onMouseLeave(): void {\n localClearTimeout();\n unSetHoveringStyles(ref, cachedOptions);\n isInside.current = false;\n setIsHovering(false);\n }\n\n React.useLayoutEffect(() => {\n if (!ref.current)\n return;\n\n const throttledMouseMove = FunctionHelper.throttle(onMouseMove, 25, { leading: false });\n ref.current.addEventListener('mouseenter', onMouseEnter);\n ref.current.addEventListener('mousemove', throttledMouseMove);\n ref.current.addEventListener('mouseleave', onMouseLeave);\n \n return () => {\n if (!ref.current)\n return;\n ref.current.removeEventListener('mouseenter', onMouseEnter);\n ref.current.removeEventListener('mousemove', throttledMouseMove);\n ref.current.removeEventListener('mouseleave', onMouseLeave);\n };\n }, [ ref.current, cachedOptions ]);\n \n return [ ref, isHovering ];\n}"],"names":["useIsComponentMounted","isMounted","React","DEFAULT_HOVER_DELAY","MOUSE_MOVE_THRESHOLD","defaultOptions","defaultHoverState","setHoveringStyles","ref","options","_a","styleName","unSetHoveringStyles","hasMouseMoved","prev","current","useHover","cachedOptions","setCachedOptions","React.useState","isHovering","setIsHovering","React.useRef","React.useEffect","ObjectHelper","triggerHover","FunctionHelper","handleMouseOut","React.useLayoutEffect","node","useHoverIntent","mousePosition","isInside","timeout","localClearTimeout","localSetTimeout","fn","delay","onMouseEnter","onMouseMove","event","onMouseLeave","throttledMouseMove"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{j as t,O as L,L as N,a7 as S,h as A,a6 as O,bx as Te,i as B,a3 as M,T as _,aW as h,v as $,av as J,p as Ne,l as w,by as Ie,bz as V,I as Ae,bA as Le,aU as _e,aV as $e,aQ as ee,aT as De,aR as He,aS as Fe,r as te,F as ze,bB as Me,Z as Pe,bC as Oe,at as U,bD as ae,d as ue,A as he,g as ge,e as Be,E as Ee,bE as Ve,a as Ue,u as ne,bF as Re,C as Ge,U as qe}from"./app-BDrXtKwD.js";import{T as We}from"./CFp1zKGZ.chunk.js";import{b as P,S as Q,a as Ke}from"./BjiBJyQD.chunk.js";import{B as Qe}from"./C89Wm2QM.chunk.js";import{P as se,S as Xe,I as R,a as G,g as Ze,B as Ye}from"./D4zllLcC.chunk.js";import{V as xe,T as ve,b as fe,C as I,a as Je}from"./B8h79IbE.chunk.js";import{M as ie}from"./DjgLQWKh.chunk.js";import{L as et}from"./BkuaVwYH.chunk.js";import{S as X}from"./cCAKx9a1.chunk.js";import{u as tt,I as at}from"./C1LS2BqQ.chunk.js";import{a as re}from"./DPPRKUKt.chunk.js";import{P as nt}from"./D22pDzdH.chunk.js";import{P as st}from"./BVwIslOW.chunk.js";import{u as it}from"./ClkubQ2J.chunk.js";import{g as rt}from"./CX5q-0jT.chunk.js";import{u as ct}from"./lcnUAi0K.chunk.js";import"./DecntqLn.chunk.js";import"./BcPvb8J5.chunk.js";import"./H13OLF2T.chunk.js";import"./Cmh_kkGl.chunk.js";import"./DljLRdDL.chunk.js";import"./CVftTaOh.chunk.js";import"./mBxqWw8V.chunk.js";import"./DfBzbPUM.chunk.js";import"./Cf7yxDlS.chunk.js";import"./Bf0d_B71.chunk.js";import"./DZYVycui.chunk.js";const ot="share.sharedByMeEmptyState",q=N.encloseNamespace(ot);function lt(e){return t.jsxs(L,{children:[t.jsx(L.Image,{src:e.imageUrl,size:"small"}),t.jsx(L.Heading,{children:q(e.useInteractiveCopy?"interactivesHeading":"genericHeading")}),t.jsx(L.Info,{children:q(e.useInteractiveCopy?"interactivesInfo":"genericInfo")}),!!e.appLink&&t.jsx(L.Cta,{appLink:e.appLink,text:q("cta")})]})}const dt={table:"striped-list no-full-width pb-3",header:"fw-semibold pb-1",headerCell:"py-2 ps-2 text-nowrap",row:"striped-row rounded",cell:"d-flex align-items-center p-2"};var mt=["second","minute","hour","day","week","month","year"];function ut(e,a){if(a===0)return["just now","right now"];var s=mt[Math.floor(a/2)];return e>1&&(s+="s"),[e+" "+s+" ago","in "+e+" "+s]}var ht=["秒","分钟","小时","天","周","个月","年"];function gt(e,a){if(a===0)return["刚刚","片刻后"];var s=ht[~~(a/2)];return[e+" "+s+"前",e+" "+s+"后"]}var Z={},be=function(e,a){Z[e]=a},xt=function(e){return Z[e]||Z.en_US},W=[60,60,24,7,365/7/12,12];function vt(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))}function ft(e,a){var s=e<0?1:0;e=Math.abs(e);for(var i=e,r=0;e>=W[r]&&r<W.length;r++)e/=W[r];return e=Math.floor(e),r*=2,e>(r===0?9:1)&&(r+=1),a(e,r,i)[s].replace("%s",e.toString())}function bt(e,a){var s=new Date;return(+s-+vt(e))/1e3}var ye=function(e,a,s){var i=bt(e);return ft(i,xt(a))};be("en_US",ut);be("zh_CN",gt);var j=(e=>(e.DirectShare="DirectShare",e.ShareLink="ShareLink",e))(j||{});const yt="_indicatorContainer_1jf11_1",Ct="_indicator_1jf11_1",ce={indicatorContainer:yt,indicator:Ct},jt="share.shareStatusIndicator",F=N.encloseNamespace(jt);function pt(e){if(e.type===j.DirectShare)return F("active");switch(e.status){case P.Active:return F("active");case P.Expired:return F("expired")}}function St(e){if(e.type===j.DirectShare)return"bg-success";switch(e.status){case P.Active:return"bg-success";case P.Expired:return"bg-gray-500"}}function kt(e){var a;return e.share.type===j.DirectShare&&!((a=e.share.recipients)!=null&&a.length)?t.jsx(t.Fragment,{}):e.share.type===j.ShareLink&&e.share.isPasswordProtected?t.jsx(S,{title:F("passwordProtected"),spanHack:!0,children:t.jsx(A,{svg:Te,size:O.Small})}):t.jsx(S,{title:pt(e.share),spanHack:!0,spanHackClassName:ce.indicatorContainer,children:t.jsx("div",{className:`${ce.indicator} ${St(e.share)}`})})}const wt="_thumbnailTitle_14phd_1",Tt={thumbnailTitle:wt};function oe(e){return t.jsx("h3",{title:e.title,className:"h6",children:e.title})}function Nt(e){return e.appLink?t.jsx(B,{appLink:e.appLink,className:`${Tt.thumbnailTitle}`,children:t.jsx(oe,{...e})}):t.jsx(oe,{...e})}const It="_badge_o3vz9_1",At="_mask_o3vz9_4",Lt="_thumbnailContainer_o3vz9_7",D={badge:It,mask:At,thumbnailContainer:Lt},le="shared.collectionThumbnail";function _t(e){var m,v,y;function a(){var f;let u=(f=e.collection)==null?void 0:f.videos;if(u){if(!u.count&&e.collection.typeId===h.Playlist){const c=e.collection;c.clips.count&&(u=c.clips),c.interactives.count&&(u=c.interactives)}return $.first(u.data)}}function s(){var f,c;let u=0;if(e.collection.videos&&e.collection.videos.count&&(u+=e.collection.videos.count),e.collection.typeId===h.Playlist){const g=e.collection;(f=g.interactives)!=null&&f.count&&(u+=g.interactives.count),(c=g.clips)!=null&&c.count&&(u+=g.clips.count)}return u}function i(u){if(ie.isType(u,h.Playlist))return J.Playlist;if(ie.isType(u,h.Series))return J.Series}const r=a(),n=s(),l=((m=e.title)==null?void 0:m.length)||((v=e.subText)==null?void 0:v.length),d={id:e.collection.id.toString(),name:e.collection.name,...e.analyticsData},o={actionType:M.Click,entity:i(e.collection),...e.analyticsOptions};return t.jsxs("div",{children:[t.jsx("div",{className:`position-relative ${D.thumbnailContainer} z-1`,children:t.jsxs(B,{appLink:e.appLink,analyticsData:d,analyticsOptions:o,preventFocus:!0,children:[e.showMask&&t.jsx("div",{className:`${D.mask} position-absolute w-100 h-100 rounded-3 bg-dark bg-gradient z-1 bg-opacity-50 pointer-events-none`,children:t.jsxs("div",{className:`${D.badge} d-flex align-items-center w-fit flex-grow-0 bg-dark rounded-pill ps-1 m-2`,children:[t.jsx(A,{svg:se,className:"svg-container text-white"}),t.jsx("p",{className:"d-inline fw-medium text-white mb-0",children:(y=e.hoverText)!=null&&y.length?t.jsx("span",{children:e.hoverText}):t.jsx(_,{namespace:le,phrase:"playAll"})})]})}),r&&t.jsx(xe,{video:r,imageOptions:e.imageOptions,textPosition:ve.Independent,type:"cosmetic",hideMask:!0,hideRating:!0,hideDuration:!0,hideVideoTypeBadge:!0}),!r&&t.jsx("div",{className:"ratio ratio-16x9 bg-light rounded-3",children:t.jsx("div",{className:"d-flex justify-content-center align-items-center",children:t.jsx(A,{svg:se,className:"w-33 opacity-25 text-gray-400"})})}),e.showVideoCount&&t.jsxs("div",{className:`${D.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`,children:[t.jsx(A,{svg:Xe,className:"svg-container text-white me-1"}),t.jsx("p",{className:"d-inline fw-semibold text-white mb-0",children:e.onlyCount?t.jsx("span",{children:n}):t.jsx(_,{namespace:le,phrase:"videos",options:{count:n,smartCount:n}})})]})]})}),l&&t.jsxs("div",{className:"mt-2 d-flex flex-column",children:[e.subText&&t.jsx(fe,{title:e.subText,appLink:e.subTextAppLink,children:e.subText}),e.title&&t.jsx(Nt,{title:e.collection.name,appLink:e.titleAppLink})]})]})}const $t="_posterFallbackSvg_1239k_4",Dt="_coverFallbackSvg_1239k_7",Ht="_thumbnailContainer_1239k_10",Ft="_requireMarking_1239k_13",zt="_badge_1239k_19",Mt="_bar_1239k_22",Pt="_a_1239k_27",Ot="_b_1239k_19",Bt="_c_1239k_7",b={posterFallbackSvg:$t,coverFallbackSvg:Dt,thumbnailContainer:Ht,requireMarking:Ft,badge:zt,bar:Mt,a:Pt,b:Ot,c:Bt},Et="shared.sharedObjectImage",H="rounded overflow-hidden";function Vt(e){const a=Ie.getDisplayImageFromObject(e);if(w.isVideoType(e))return{image:a,imageType:V.Thumbnails,imageClassName:H,imageFallbackComponent:t.jsx(R,{type:G.Video})};switch(e.typeId){case h.Series:return{image:a,imageType:V.TallPosters,imageClassName:H,imageFallbackComponent:t.jsx(R,{type:G.Series,svgContainerClassName:b.posterFallbackSvg})};case h.Playlist:return{image:a,imageType:V.Covers,imageClassName:a!=null&&a.url?H:`${H} ${Ze(e.name,Ye)}`,imageFallbackComponent:t.jsx(R,{type:G.Playlist,svgContainerClassName:a!=null&&a.url?b.coverFallbackSvg:"d-none",extraClasses:!(a!=null&&a.url)&&"bg-transparent"})}}}function Ut(){return t.jsxs("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",children:[t.jsx("div",{className:"position-absolute bg-dark bg-gradient opacity-50 w-100 h-100 z-0 rounded-3"}),t.jsxs("div",{className:"d-flex align-items-end gap-2 h-50 z-1",children:[t.jsx("div",{className:"d-flex align-items-end h-50",children:t.jsx("div",{className:`${b.bar} ${b.a} rounded shadow`})}),t.jsx("div",{className:"d-flex align-items-end h-75",children:t.jsx("div",{className:`${b.bar} ${b.b} rounded shadow`})}),t.jsx("div",{className:"d-flex align-items-end h-100",children:t.jsx("div",{className:`${b.bar} ${b.c} rounded shadow`})})]})]})}function Rt(e){if(w.isVideoType(e))return 16/9;if(e.typeId===h.Playlist)return 1;if(e.typeId===h.Series)return 9/16}Ce.defaultProps={imageOptions:{size:Ae.Small}};function Ce(e){const a=Ne.useCallback(o=>{!o||!e.fixedHeight||(o.style.width=`${o.offsetHeight*Rt(e.object)}px`)},[]),s=w.isVideoType(e.object),{image:i,imageType:r,imageClassName:n,imageFallbackComponent:l}=Vt(e.object),d=e.showVideoMetadata?{hideBottomBar:e.hideBottomBar}:{hideDuration:!0,hideMask:!0,hideRating:!0,hideVideoBadgeType:!0,hideBottomBar:!0};return t.jsx("div",{className:"d-flex align-items-center justify-content-center w-100 h-100",children:t.jsxs("div",{ref:a,className:e.fixedHeight?"h-100":"w-100",children:[s&&t.jsxs("div",{className:`${b.thumbnailContainer} position-relative`,children:[e.showInsightsMask&&t.jsx(Ut,{}),t.jsx(B,{appLink:e.appLink,children:t.jsx(xe,{video:e.object,size:e.thumbnailSize,imageOptions:e.imageOptions,textPosition:ve.Independent,type:"cosmetic",imageClassName:e.imageClassName,...d})}),!!e.requireMarking&&t.jsx("div",{className:`${e.showInsightsMask&&b.requireMarking} position-absolute bottom-0 end-0 z-1 m-2`,children:t.jsx("div",{className:`${b.badge} d-flex align-items-center bg-light-ultramarine text-ultramarine fw-semibold rounded-pill w-fit mt-1 px-2`,children:t.jsx(_,{namespace:Et,phrase:"requireMarking",options:{smartCount:e.requireMarking}})})})]}),!s&&t.jsx(t.Fragment,{children:"videos"in e.object?t.jsx(_t,{collection:e.object,imageOptions:e.imageOptions,appLink:e.appLink,analyticsData:{id:e.object.id,name:e.object.name},analyticsOptions:{entity:Q.getAnalyticsEntity(e.object.type),actionType:M.Click,location:e.locationContext},showMask:e.showCollectionMask,showVideoCount:e.showVideoCount,onlyCount:e.onlyCount}):t.jsx(Qe,{data:i==null?void 0:i.url,imageType:r,imageOptions:e.imageOptions,appLink:e.appLink,className:n,analyticsData:{id:e.object.id,name:e.object.name},analyticsOptions:{entity:Q.getAnalyticsEntity(e.object.type),actionType:M.Click,location:e.locationContext},children:l})})]})})}const Gt="shared.avatarList",de=N.encloseNamespace(Gt);je.defaultProps={maxAvatars:5};function je(e){const a=e.items.length>e.maxAvatars?e.items.slice(0,e.maxAvatars-1):e.items,s=e.items.length>a.length?e.items.slice(e.maxAvatars-1):[],i=e.avatarItem,r=s.length,n=e.avatarSize==="sm"?4:8;function l(){return e.getHiddenTooltip?e.getHiddenTooltip(s):e.roleToDisplay?de(e.roleToDisplay==="staff"?"staff":"student",{count:r,smartCount:r}):de("users",{count:r,smartCount:r})}function d(){return{marginRight:`-${(a.length-1+(s.length?1:0)+(e.hasShareLink?1:0))*n}px`}}function o(m){return{transform:`translateX(${(e.hasShareLink?m+1:m)*-n}px)`,zIndex:e.maxAvatars-m}}return a.length===0&&s.length===0?t.jsx(t.Fragment,{}):t.jsxs("div",{className:"d-flex",style:d(),children:[e.hasShareLink&&t.jsx("div",{style:{zIndex:e.maxAvatars+1},children:t.jsx(pe,{text:e.shareLinkText,avatarSize:e.avatarSize,className:"bg-dark text-white"})}),a.map((m,v)=>t.jsx("div",{className:`${e.avatarContainerClassname||""}`,style:o(v),children:t.jsx(i,{item:m,imageCdnUrl:e.imageCdnUrl,index:v,maxAvatars:e.maxAvatars})},m.id)),!!s.length&&t.jsx("div",{className:`${e.avatarContainerClassname||""} bg-white rounded-circle`,style:{transform:`translateX(${a.length*-n}px)`,zIndex:e.maxAvatars-a.length},children:t.jsx(S,{title:l(),spanHack:!0,spanHackClassName:"h-100 w-100",children:t.jsx("div",{className:`d-flex justify-content-center align-items-center border border-dark rounded-circle h-100 w-100 ${e.numberClassname||""}`,children:`+${s.length}`})})})]})}const qt="_avatarContainer_p1zht_1",Wt="_sm_p1zht_5",Kt="_sharedAvatar_p1zht_10",T={avatarContainer:qt,sm:Wt,sharedAvatar:Kt},Qt="reportsShare.sharedToAvatarList",C=N.encloseNamespace(Qt);function Xt(e){const a=$.countBy(e,"typeId"),s=a[h.User],i=a[h.Classroom],r=a[h.ClassroomGroup];if(s&&i&&r)return C("classroomsGroupsAndUsers",{userCount:s,classroomCount:i,groupCount:r});if(s&&i)return C("classroomsAndUsers",{userCount:s,classroomCount:i});if(s&&r)return C("groupsAndUsers",{userCount:s,groupCount:r});if(i&&r)return C("classroomsAndGroups",{classroomCount:i,groupCount:r});if(s)return C("users",{userCount:s});if(i)return C("classrooms",{classroomCount:i});if(r)return C("groups",{groupCount:r})}function Zt(e){var n,l,d,o,m;const a=((n=e.item)==null?void 0:n.typeId)===h.User&&e.item,s=((l=e.item)==null?void 0:l.typeId)===h.Classroom&&e.item,i=((d=e.item)==null?void 0:d.typeId)===h.ClassroomGroup&&e.item,r="d-flex justify-content-center align-items-center text-white rounded-circle h-100 w-100";return t.jsxs(t.Fragment,{children:[!!a&&t.jsx(S,{title:`${a.name} ${a.surname}`,spanHack:!0,spanHackClassName:"h-100 w-100",children:t.jsx(_e,{imageUrl:(o=a.avatar)==null?void 0:o.url,imageCdnUrl:e.imageCdnUrl,initials:$e.getInitials(a.name,a.surname),extraClasses:T.sharedAvatar})}),!!s&&t.jsx(S,{title:s.name,spanHack:!0,spanHackClassName:"h-100 w-100",children:t.jsx("div",{className:r,children:t.jsx(ee,{svg:De,svgSize:O.Large,variant:"teal"})})}),!!i&&t.jsx(S,{title:i.name,spanHack:!0,spanHackClassName:"h-100 w-100",children:t.jsx("div",{className:r,children:t.jsx(ee,{svg:Fe,variant:He((m=i.metadata)==null?void 0:m.colour)})})})]})}function Yt(e){return t.jsx("div",{className:`${T.avatarContainer} ${e.avatarSize==="sm"?T.sm:""}`,children:t.jsx(S,{title:C("anonymous"),spanHack:!0,spanHackClassName:"bg-light text-dark d-flex justify-content-center align-items-center rounded-circle h-100 w-100",children:t.jsx(A,{svg:Le,size:e.avatarSize==="sm"?O.Small:null})})})}function pe(e){return t.jsx("div",{className:`${T.avatarContainer} ${e.avatarSize==="sm"?T.sm:""}`,children:t.jsx(S,{title:e.text||C("sharedLink"),spanHack:!0,spanHackClassName:`bg-light text-dark d-flex justify-content-center align-items-center rounded-circle h-100 w-100 ${e.className||""}`,children:t.jsx(A,{svg:et,size:e.avatarSize==="sm"?O.Small:null})})})}Se.defaultProps={maxAvatars:5};function Se(e){return t.jsx(je,{...e,items:e.recipients,avatarItem:Zt,avatarContainerClassname:`${T.avatarContainer} ${e.avatarSize==="sm"?T.sm:""}`,getHiddenTooltip:Xt,hasShareLink:e.hasShareLink,shareLinkText:e.shareLinkText})}var k=(e=>(e.None="None",e.Complete="Complete",e.Incomplete="Incomplete",e))(k||{});const Jt={groupByDateShared(e){const a=$.groupBy(e,"dateShared");return Object.keys(a).sort().reverse().reduce((i,r)=>{const n=ye(r);return i[n]||(i[n]=[]),i[n]=i[n].concat(a[r]),i},{})},mapActivityStatusToCheckMarkStatus(e){switch(e){case k.Complete:return I.Complete;case k.Incomplete:return I.Incomplete;case k.None:return I.None}},mapCheckMarkStatusToActivityStatus(e){switch(e){case I.Complete:return k.Complete;case I.Incomplete:return k.Incomplete;case I.None:return k.None}}};function ea(e){const a=te.useMemo(()=>e.actions.sort((n,l)=>n.order-l.order),[e.actions]),s=[],i=[];a.forEach(n=>{n.button?s.push(n):i.push(n)});let r="d-flex";return e.className&&(r+=` ${e.className}`),!s.length&&!i.length?t.jsx(t.Fragment,{}):t.jsxs("div",{className:r,children:[s.length?s.map((n,l)=>t.jsx(te.Fragment,{children:(()=>{if(n.label){const d=ze.isFunction(n.label)?n.label():t.jsx(t.Fragment,{children:n.label});return t.jsx(Me,{appLink:n.appLink,href:n.href,onClick:n.onClick,svg:n.svg,svgSize:e.dropdownToggleSvgSize,className:n.className,tooltip:n.tooltip,showSpinner:n.showSpinner,analyticsData:n.analyticsData,analyticsOptions:n.analyticsOptions,openInNewTab:n.openInNewTab,disabled:n.disabled,children:d})}return t.jsx(Pe,{appLink:n.appLink,href:n.href,onClick:n.onClick,svg:n.svg,className:n.className,analyticsData:n.analyticsData,analyticsOptions:n.analyticsOptions,openInNewTab:n.openInNewTab,disabled:n.disabled,showBorder:n.showBorder,customSize:e.customSize,ariaLabel:n.tooltip,tooltip:n.tooltip})})()},l)):t.jsx(t.Fragment,{}),e.sortComponent&&e.sortComponent,i.length?t.jsx(Oe,{actions:i,dropdownToggleClassName:e.actionsDropdownClassName,dropdownToggleSvgSize:e.dropdownToggleSvgSize,fetchMore:e.fetchMore}):t.jsx(t.Fragment,{})]})}const Y="share.sharedByMeTable",z=N.encloseNamespace(Y);function ta(e){var s;if(e.type===j.ShareLink||!((s=e==null?void 0:e.recipients)!=null&&s.length))return e.dateCreated;const a=e.recipients.map(i=>i.dateShared);return a.sort((i,r)=>ae.isSame(i,r)?0:ae.isAfter(i,r)?1:-2),a.length?$.last(a):""}function aa(e){const{index:a,dateHeading:s,getObjectAppLink:i,getObjectActions:r,imageCdnUrl:n,showStatus:l,showViewCount:d,breakpoints:o,yearGroups:m}=e,v=o&&(o.xs||o.sm),y=[{Header:l?"":s,accessor:"sharedObject",id:"image",Cell:({value:c})=>t.jsx("div",{className:"w-100",children:t.jsx(Ce,{object:c,appLink:i(c),showVideoMetadata:!0,locationContext:U.SharedByMe})}),minWidth:140,maxWidth:30},{accessor:"sharedObject",id:"name",Cell:({value:c})=>{var p;function g(){switch(c.typeId){case h.Series:return"series";case h.Playlist:return"playlist"}}if(c.name){if(w.isVideoType(c)&&!((p=w.getCanBeConsumed(c))!=null&&p.canNavigate))return t.jsx("span",{className:"clamp-2",children:c.name});const x=g();return t.jsxs("div",{className:"clamp-2",children:[x&&t.jsx(fe,{children:t.jsx(_,{namespace:Y,phrase:x})}),w.isVideoType(c)&&t.jsx(Je,{type:"series",video:c,appLink:"series"in c&&c.series?i(c.series):null,analyticsOptions:{location:U.Insights}}),t.jsx(B,{appLink:i(c),analyticsData:{id:c.id,name:c.name},analyticsOptions:{entity:Q.getAnalyticsEntity(c.type),actionType:M.Click,location:U.SharedByMe},children:c.name})]})}return t.jsx("span",{children:t.jsx(_,{namespace:Y,phrase:"videoUnavailable"})})},width:60},{Header:a===0?z("sharedTo"):"",accessor:"sharedToData",Cell:({value:c})=>{const{share:g,sharedObject:p,recipients:x}=c;if(!x){const E=g.type===j.ShareLink&&Ke.getIconAndText({entity:p,entityTypeId:p.typeId,hasStudentExp:!1,isPasswordProtected:g.isPasswordProtected,linkExpireDate:g.linkExpireDate,privacy:{privacy:g.privacy,overrideRestrictions:g.overrideRestrictions},status:g.status,yearGroups:m??[]});return t.jsx(pe,{text:E==null?void 0:E.text})}return x!=null&&x.length?t.jsx(Se,{recipients:x,imageCdnUrl:n,maxAvatars:v?1:2}):t.jsx(Yt,{})},width:40},!v&&{Header:a===0?z("shared"):"",id:"dateShared",accessor:c=>ye(c.dateShared),width:40},{accessor:"sharedObject",id:"actions",Cell:({value:c})=>t.jsx(ea,{actions:r(c),className:"w-100 justify-content-end pe-2"}),width:20}],u={Header:s,accessor:"share",id:"status",Cell:({value:c})=>t.jsx(kt,{share:c}),width:5},f={Header:z("views"),accessor:"viewCount",width:30};return l&&y.splice(0,0,u),d&&y.splice(y.length-1,0,f),y.filter(Boolean)}function na(e,a,s,i){const r=[];return e.forEach(n=>{var o;const l=a==null?void 0:a[n.objectId];let d=null;n.type===j.DirectShare&&(d=[],(o=n.recipients)==null||o.forEach(m=>{const v=s==null?void 0:s[m.id];v&&d.push(v)})),l&&r.push({share:n,sharedObject:l,sharedToData:{share:n,sharedObject:l,recipients:d},dateShared:ta(n),viewCount:n.viewCount??0})}),i?Jt.groupByDateShared(r):{[z("title")]:r}}function sa(e){const a=na(e.sentShares,e.sharedObjects,e.shareRecipients,!!e.groupByDateShared);return t.jsx(t.Fragment,{children:Object.keys(a).map((s,i)=>t.jsx(We,{columns:aa({index:i,dateHeading:s,getObjectAppLink:e.getObjectAppLink,getObjectActions:e.getObjectActions,imageCdnUrl:e.imageCdnUrl,showStatus:e.showStatus,showViewCount:e.showViewCount,breakpoints:e.breakpoints,yearGroups:e.yearGroups}),data:a[s],theme:dt},i))})}const ke={getDirectShares(e){return(e==null?void 0:e.filter(a=>a.type===j.DirectShare))??[]},getRecipients(e){return $.flatten(ke.getDirectShares(e).map(a=>a.recipients??[]))}};function ia(e){return t.jsx("svg",{...e,children:t.jsx("path",{fill:"currentColor",d:"M17.5 5h1a.5.5 0 0 1 .5.5v13a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-13a.5.5 0 0 1 .5-.5m-1.5.5v13a1.5 1.5 0 0 0 1.5 1.5h1a1.5 1.5 0 0 0 1.5-1.5v-13A1.5 1.5 0 0 0 18.5 4h-1A1.5 1.5 0 0 0 16 5.5m-4.5 3.638a.5.5 0 0 0-.5.5V18.5a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5V9.638a.5.5 0 0 0-.5-.5zm-1.5.5a1.5 1.5 0 0 1 1.5-1.5h1a1.5 1.5 0 0 1 1.5 1.5V18.5a1.5 1.5 0 0 1-1.5 1.5h-1a1.5 1.5 0 0 1-1.5-1.5zM4 12.74a1.5 1.5 0 0 1 1.5-1.5h1a1.5 1.5 0 0 1 1.5 1.5V18.5A1.5 1.5 0 0 1 6.5 20h-1A1.5 1.5 0 0 1 4 18.5zm1.5-.5a.5.5 0 0 0-.5.5V18.5a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-5.759a.5.5 0 0 0-.5-.5z"})})}const ra="reportsInteractives.sharedInteractives",K=N.encloseNamespace(ra);function ca(){const e=Be();return e?a=>{const{start:s,end:i,userId:r,groupId:n}=e;return X.sentShare({start:s,end:i,recipientUserId:r,recipientGroupId:n,objectTypeId:h.Interactive,cursor:a})}:!1}function oa(){const e=we(),a=ct(Ee.getPrimaryObjectUrl);return s=>{const{canConsume:i}=w.getCanBeConsumed(s);if(!i)return[];const r=[{tooltip:K("viewResults"),svg:ia,appLink:e(s),className:"me-2",button:!0},{label:K("editShareSettings"),appLink:{application:ge.DEFAULT,action:he.Default.SHARE,args:[s.id],params:{entityType:"interactive"}}}];return a&&r.push({label:K("viewOriginal"),href:a(s),openInNewTab:!0}),r}}function we(){const e=ue();return a=>({application:ge.INTERACTIVES,action:he.Interactives.OVERVIEW,args:[a.id],params:e})}function la(){const e=ue();return`shared:interactives:table:${rt(e)}`}const da="reportsInteractives.sharedInteractives",me=N.encloseNamespace(da);function Pa(){var p;const e=Ve();Ue({title:me("interactives")}),it(me("interactives"));const a=ne(qe.currentUser()),s=ne(Ge.config()),i=la(),r=we(),n=oa(),l=ca();function d(x){l&&e(l(x))}const{items:o,hasMore:m,isFetching:v,nextCursor:y,hasFirstPageCompleted:u}=tt(l,d),f=re(o==null?void 0:o.map(x=>x.objectId),X.sharedObjectsById),c=re(ke.getRecipients(o).map(x=>x.id),x=>X.getRecipientsById(x,a.data.customerId)),g=v||f.isFetching||c.isFetching;return!u||o!=null&&o.length&&!f.hasFirstRequestCompleted?t.jsx(nt,{variant:"interactives",children:t.jsx(st,{variant:"interactives"})}):o.length?t.jsxs(t.Fragment,{children:[t.jsx(sa,{sentShares:o,sharedObjects:f.items,shareRecipients:c.items,getObjectAppLink:r,getObjectActions:n,showStatus:!0,showViewCount:!0,imageCdnUrl:(p=s.data)==null?void 0:p.imageCdnUrl},i),(m||g)&&t.jsx(at,{isFetching:g,fetchNext:d,nextCursor:y})]}):t.jsx("div",{className:"bg-white rounded my-3 py-5",children:t.jsx("div",{className:"pb-5",children:t.jsx(lt,{imageUrl:Re.EmptyStates.Interactives.SharedInteractives,useInteractiveCopy:!0})})})}export{Pa as SharedInteractivesView};
2
- //# sourceMappingURL=Ch38wU3l.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Ch38wU3l.chunk.js","sources":["../../../../libs/shared/src/apps/share/components/shared-by-me/empty-state/SharedByMeEmptyState.tsx","../../../../libs/shared/src/apps/share/constants/TableTheme.ts","../../../../../node_modules/timeago.js/esm/lang/en_US.js","../../../../../node_modules/timeago.js/esm/lang/zh_CN.js","../../../../../node_modules/timeago.js/esm/register.js","../../../../../node_modules/timeago.js/esm/utils/date.js","../../../../../node_modules/timeago.js/esm/format.js","../../../../../node_modules/timeago.js/esm/index.js","../../../../libs/shared/src/enums/ShareType.ts","../../../../libs/shared/src/apps/share/components/shared-by-me/share-status-indicator/ShareStatusIndicator.tsx","../../../../libs/shared/src/components/thumbnails/collection/title/CollectionThumbnailTitle.tsx","../../../../libs/shared/src/components/thumbnails/collection/CollectionThumbnail.tsx","../../../../libs/shared/src/apps/share/components/shared-object-image/SharedObjectImage.tsx","../../../../libs/shared/src/components/avatar-list/AvatarList.tsx","../../../../libs/shared/src/apps/share/components/shared-to-avatar-list/SharedToAvatarList.tsx","../../../../libs/shared/src/enums/ShareActivityStatus.ts","../../../../libs/shared/src/apps/share/utils/ShareHelper.ts","../../../../libs/shared/src/components/actions/Actions.tsx","../../../../libs/shared/src/apps/share/components/shared-by-me/table/SharedByMeTableUtils.tsx","../../../../libs/shared/src/apps/share/components/shared-by-me/table/SharedByMeTable.tsx","../../../../libs/shared/src/utils/ShareHelper.ts","../../../../libs/shared/src/images/svg/objects/AnalyticsSvg.tsx","../../src/apps/interactives/views/shared-interactives/SharedInteractivesViewUtils.tsx","../../src/apps/interactives/views/shared-interactives/SharedInteractivesView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nconst namespace = 'share.sharedByMeEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SharedByMeEmptyStateProps {\n imageUrl: string;\n appLink?: Core.AppLink;\n useInteractiveCopy?: boolean;\n}\n\nexport function SharedByMeEmptyState(props: SharedByMeEmptyStateProps): JSX.Element {\n return (\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} size='small'/>\n <EmptyState.Heading>\n {getPhrase(props.useInteractiveCopy ? 'interactivesHeading' : 'genericHeading')}\n </EmptyState.Heading>\n <EmptyState.Info>{getPhrase(props.useInteractiveCopy ? 'interactivesInfo' : 'genericInfo')}</EmptyState.Info>\n {!!props.appLink &&\n <EmptyState.Cta appLink={props.appLink} text={getPhrase('cta')} />\n }\n </EmptyState>\n );\n}","import { TableTheme } from 'libs/shared/components/table/Table';\n\nexport const SHARES_TABLE_THEME: TableTheme = {\n table: 'striped-list no-full-width pb-3',\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 p-2'\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","export enum ShareType {\n DirectShare = 'DirectShare',\n ShareLink = 'ShareLink'\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { ShareLinkStatus } from 'libs/shared/enums/ShareLinkStatus';\nimport { ShareType } from 'libs/shared/enums/ShareType';\nimport { LockSvg } from 'libs/shared/images/svg/status/LockSvg';\nimport { UnionShareObject } from 'libs/shared/interfaces';\n\nimport styles from './share-status-indicator.module.scss';\n\nconst namespace = 'share.shareStatusIndicator';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getStatusPhrase(share: UnionShareObject): string {\n if (share.type === ShareType.DirectShare)\n return getPhrase('active');\n\n switch (share.status) {\n case ShareLinkStatus.Active:\n return getPhrase('active');\n\n case ShareLinkStatus.Expired:\n return getPhrase('expired');\n }\n}\n\nfunction getBgColourClassName(share: UnionShareObject): string {\n if (share.type === ShareType.DirectShare)\n return 'bg-success';\n \n switch (share.status) {\n case ShareLinkStatus.Active:\n return 'bg-success';\n\n case ShareLinkStatus.Expired:\n return 'bg-gray-500';\n }\n}\n\ninterface ShareStatusIndicatorProps {\n share: UnionShareObject;\n}\n\n/**\n * TODO: add support for deleted share links (currently the api doesn't return these.)\n */\nexport function ShareStatusIndicator(props: ShareStatusIndicatorProps): JSX.Element {\n if (props.share.type === ShareType.DirectShare && !props.share.recipients?.length)\n return <></>;\n\n if (props.share.type === ShareType.ShareLink && props.share.isPasswordProtected) {\n return (\n <Tooltip title={getPhrase('passwordProtected')} spanHack>\n <SvgContainer svg={LockSvg} size={SvgContainerSize.Small} />\n </Tooltip>\n );\n }\n\n return (\n <Tooltip\n title={getStatusPhrase(props.share)}\n spanHack\n spanHackClassName={styles.indicatorContainer}\n >\n <div className={`${styles.indicator} ${getBgColourClassName(props.share)}`} />\n </Tooltip>\n );\n}","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.module.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","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 { PlaySvg } from 'libs/shared/images/svg/actions/PlaySvg';\nimport { SeriesSvg } from 'libs/shared/images/svg/objects/SeriesSvg';\nimport { Playlist, Series } from 'libs/shared/interfaces';\nimport { ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\nimport styles from './collection-thumbnail.module.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 onlyCount?: 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 svg={PlaySvg} 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 svg={PlaySvg} 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 svg={SeriesSvg} className='svg-container text-white me-1' />\n <p className='d-inline fw-semibold text-white mb-0'>\n {props.onlyCount\n ? <span>{videoCount}</span>\n : <Text namespace={namespace} phrase='videos' options={{ count: videoCount, smartCount: videoCount }} />\n }\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 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.module.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 onlyCount?: 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 onlyCount={props.onlyCount}\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 { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SharedLinkAvatar } from 'libs/shared/apps/share/components/shared-to-avatar-list/SharedToAvatarList';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.avatarList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface AvatarItemProps {\n imageCdnUrl: string;\n index: number;\n item?: BaseObject;\n hiddenItems?: BaseObject[];\n maxAvatars?: number;\n}\n\ninterface AvatarListProps {\n items: BaseObject[];\n imageCdnUrl: string;\n maxAvatars?: number;\n avatarItem?: (props: AvatarItemProps) => JSX.Element;\n getHiddenTooltip?: (hiddenItems: BaseObject[]) => string;\n numberClassname?: string;\n avatarContainerClassname?: string;\n roleToDisplay?: 'student' | 'staff';\n hasShareLink?: boolean;\n avatarSize?: 'md' | 'sm';\n shareLinkText?: string;\n}\n\nAvatarList.defaultProps = {\n maxAvatars: 5\n};\n\nexport function AvatarList(props: AvatarListProps): JSX.Element {\n const itemsToDisplay = props.items.length > props.maxAvatars\n ? props.items.slice(0, props.maxAvatars - 1)\n : props.items;\n\n const hiddenItems = props.items.length > itemsToDisplay.length\n ? props.items.slice(props.maxAvatars - 1)\n : [];\n\n const AvatarItem = props.avatarItem;\n const hiddenItemsCounts = hiddenItems.length;\n const translateX = props.avatarSize === 'sm' ? 4 : 8;\n\n function getTooltip() {\n if (props.getHiddenTooltip)\n return props.getHiddenTooltip(hiddenItems);\n\n if (props.roleToDisplay)\n return getPhrase(props.roleToDisplay === 'staff' ? 'staff' : 'student', { count: hiddenItemsCounts, smartCount: hiddenItemsCounts });\n\n return getPhrase('users', { count: hiddenItemsCounts, smartCount: hiddenItemsCounts });\n }\n\n function getContainerStyles() {\n return {\n marginRight: `-${((itemsToDisplay.length - 1) + (hiddenItems.length ? 1 : 0) + (props.hasShareLink ? 1 : 0)) * translateX}px`\n };\n }\n\n function getAvatarStyles(idx: number) {\n return {\n transform: `translateX(${(props.hasShareLink ? idx + 1 : idx) * -translateX}px)`,\n zIndex: props.maxAvatars - idx\n };\n }\n\n if (itemsToDisplay.length === 0 && hiddenItems.length === 0)\n return <></>;\n\n return (\n <div\n className='d-flex'\n style={getContainerStyles()}\n >\n {props.hasShareLink && (\n <div style={{ zIndex: props.maxAvatars + 1 }}>\n <SharedLinkAvatar text={props.shareLinkText} avatarSize={props.avatarSize} className='bg-dark text-white' />\n </div>\n )}\n {itemsToDisplay.map((item, idx) => (\n <div\n className={`${props.avatarContainerClassname || ''}`} key={item.id}\n style={getAvatarStyles(idx)}\n >\n <AvatarItem\n item={item}\n imageCdnUrl={props.imageCdnUrl}\n index={idx}\n maxAvatars={props.maxAvatars}\n />\n </div>\n ))}\n\n {!!hiddenItems.length && (\n <div\n className={`${props.avatarContainerClassname || ''} bg-white rounded-circle`}\n style={{ transform: `translateX(${itemsToDisplay.length * -translateX}px)`, zIndex: props.maxAvatars - itemsToDisplay.length }}\n >\n <Tooltip title={getTooltip()} spanHack spanHackClassName='h-100 w-100'>\n <div className={`d-flex justify-content-center align-items-center border border-dark rounded-circle h-100 w-100 ${props.numberClassname || ''}`}>\n {`+${hiddenItems.length}`}\n </div>\n </Tooltip>\n </div>\n )}\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { AvatarItemProps, AvatarList } from 'libs/shared/components/avatar-list/AvatarList';\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { AnonymousSvg } from 'libs/shared/images/svg/objects/AnonymousSvg';\nimport { ClassroomsSvg } from 'libs/shared/images/svg/objects/ClassroomsSvg';\nimport { GroupSvg } from 'libs/shared/images/svg/objects/GroupSvg';\nimport { LinkSvg } from 'libs/shared/images/svg/objects/LinkSvg';\nimport { BaseObject, Classroom, ClassroomGroup, User } from 'libs/shared/interfaces';\nimport { mapColourToBsVariant } from 'libs/shared/utils/GroupHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './shared-to-avatar-list.module.scss';\n\nconst namespace = 'reportsShare.sharedToAvatarList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getHiddenRecipientText(hiddenRecipients: BaseObject[]): string {\n const counts = ArrayHelper.countBy(hiddenRecipients, 'typeId');\n const userCount = counts[MasterType.User];\n const classroomCount = counts[MasterType.Classroom];\n const groupCount = counts[MasterType.ClassroomGroup];\n\n if (userCount && classroomCount && groupCount)\n return getPhrase('classroomsGroupsAndUsers', { userCount, classroomCount, groupCount });\n\n if (userCount && classroomCount)\n return getPhrase('classroomsAndUsers', { userCount, classroomCount });\n\n if (userCount && groupCount)\n return getPhrase('groupsAndUsers', { userCount, groupCount });\n\n if (classroomCount && groupCount)\n return getPhrase('classroomsAndGroups', { classroomCount, groupCount });\n\n if (userCount)\n return getPhrase('users', { userCount });\n\n if (classroomCount)\n return getPhrase('classrooms', { classroomCount });\n\n if (groupCount)\n return getPhrase('groups', { groupCount });\n}\n\nfunction SharedToAvatar(props: AvatarItemProps): JSX.Element {\n const user: User = props.item?.typeId === MasterType.User && props.item as User;\n const classroom: Classroom = props.item?.typeId === MasterType.Classroom && props.item as Classroom;\n const classroomGroup: ClassroomGroup = props.item?.typeId === MasterType.ClassroomGroup\n && props.item as ClassroomGroup;\n\n const svgContainerClassName = 'd-flex justify-content-center align-items-center text-white rounded-circle h-100 w-100';\n\n return (\n <>\n {!!user &&\n <Tooltip title={`${user.name} ${user.surname}`} spanHack spanHackClassName='h-100 w-100'>\n <Avatar\n imageUrl={user.avatar?.url}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(user.name, user.surname)}\n extraClasses={styles.sharedAvatar}\n />\n </Tooltip>\n }\n {!!classroom &&\n <Tooltip title={classroom.name} spanHack spanHackClassName='h-100 w-100'>\n <div className={svgContainerClassName}>\n <IconCircle\n svg={ClassroomsSvg}\n svgSize={SvgContainerSize.Large}\n variant='teal'\n />\n </div>\n </Tooltip>\n }\n {!!classroomGroup &&\n <Tooltip title={classroomGroup.name} spanHack spanHackClassName='h-100 w-100'>\n <div className={svgContainerClassName}>\n <IconCircle\n svg={GroupSvg}\n variant={mapColourToBsVariant(classroomGroup.metadata?.colour)}\n />\n </div>\n </Tooltip>\n }\n </>\n );\n}\n\n\ninterface AnonymousSharedToAvatarProps {\n avatarSize?: 'md' | 'sm';\n}\n\nexport function AnonymousSharedToAvatar(props: AnonymousSharedToAvatarProps): JSX.Element {\n return (\n <div className={`${styles.avatarContainer} ${props.avatarSize === 'sm' ? styles.sm : ''}`}>\n <Tooltip\n title={getPhrase('anonymous')}\n spanHack\n spanHackClassName='bg-light text-dark d-flex justify-content-center align-items-center rounded-circle h-100 w-100'\n >\n <SvgContainer svg={AnonymousSvg} size={props.avatarSize === 'sm' ? SvgContainerSize.Small : null} />\n </Tooltip>\n </div>\n );\n}\n\ninterface SharedLinkAvatarProps {\n text?: string;\n avatarSize?: 'md' | 'sm';\n className?: string;\n}\n\nexport function SharedLinkAvatar(props: SharedLinkAvatarProps): JSX.Element {\n return (\n <div className={`${styles.avatarContainer} ${props.avatarSize === 'sm' ? styles.sm : ''}`}>\n <Tooltip\n title={props.text || getPhrase('sharedLink')}\n spanHack\n spanHackClassName={`bg-light text-dark d-flex justify-content-center align-items-center rounded-circle h-100 w-100 ${props.className || ''}`}\n >\n <SvgContainer svg={LinkSvg} size={props.avatarSize === 'sm' ? SvgContainerSize.Small : null} />\n </Tooltip>\n </div>\n );\n}\n\ninterface SharedToAvatarListProps {\n recipients: BaseObject[];\n imageCdnUrl: string;\n maxAvatars?: number;\n hasShareLink?: boolean;\n avatarSize?: 'md' | 'sm';\n shareLinkText?: string;\n}\n\nSharedToAvatarList.defaultProps = {\n maxAvatars: 5\n};\n\nexport function SharedToAvatarList(props: SharedToAvatarListProps): JSX.Element {\n return (\n <AvatarList\n {...props}\n items={props.recipients}\n avatarItem={SharedToAvatar}\n avatarContainerClassname={`${styles.avatarContainer} ${props.avatarSize === 'sm' ? styles.sm : ''}`}\n getHiddenTooltip={getHiddenRecipientText}\n hasShareLink={props.hasShareLink}\n shareLinkText={props.shareLinkText}\n />\n );\n}","export enum ShareActivityStatus {\n None = 'None',\n Complete = 'Complete',\n Incomplete = 'Incomplete'\n}","import { format } from 'timeago.js';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { CheckMarkStatus } from 'libs/shared/components/check-mark-button/CheckMarkButton';\nimport { ShareActivityStatus } from 'libs/shared/enums/ShareActivityStatus';\n\ninterface ObjectWithDateShared {\n dateShared: string;\n}\n\ntype GroupedByDate<T extends ObjectWithDateShared> = { [date: string]: T[] };\n\nexport const ShareHelper = {\n groupByDateShared<T extends ObjectWithDateShared>(data: T[]): GroupedByDate<T> {\n const dateToObjectMapping: GroupedByDate<T> = ArrayHelper.groupBy(data, 'dateShared');\n\n const sortedDates = Object.keys(dateToObjectMapping).sort().reverse();\n\n // Create a sorted mapping between dates and the \"ObjectWithDateShared\" objects\n return sortedDates.reduce((acc: GroupedByDate<T>, date) => {\n const heading = format(date);\n\n if (!acc[heading])\n acc[heading] = [];\n\n acc[heading] = acc[heading].concat(dateToObjectMapping[date]);\n return acc;\n }, {});\n },\n\n mapActivityStatusToCheckMarkStatus(activityStatus: ShareActivityStatus): CheckMarkStatus {\n switch (activityStatus) {\n case ShareActivityStatus.Complete:\n return CheckMarkStatus.Complete;\n case ShareActivityStatus.Incomplete:\n return CheckMarkStatus.Incomplete;\n case ShareActivityStatus.None:\n return CheckMarkStatus.None;\n }\n },\n\n mapCheckMarkStatusToActivityStatus(checkMarkStatus: CheckMarkStatus): ShareActivityStatus {\n switch (checkMarkStatus) {\n case CheckMarkStatus.Complete:\n return ShareActivityStatus.Complete;\n case CheckMarkStatus.Incomplete:\n return ShareActivityStatus.Incomplete;\n case CheckMarkStatus.None:\n return ShareActivityStatus.None;\n }\n }\n};","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { BaseObject } from 'libs/shared/interfaces';\nimport { SvgIcon } from 'libs/shared/utils/SvgHelper';\n\nimport { ActionButton } from './ActionButton';\nimport { ActionsDropdown } from './ActionsDropdown';\n\nexport interface ActionOptions {\n order?: number;\n label?: string | (() => JSX.Element);\n appLink?: Core.AppLink;\n href?: string;\n onClick?: () => void;\n svg?: SvgIcon;\n className?: string;\n button?: boolean; // If true, a button will be rendered. Otherwise the action will be rendered in the dropdown.\n tooltip?: string;\n showSpinner?: boolean;\n showBorder?: boolean; // only works for button without text label\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n disabled?: boolean;\n openInNewTab?: boolean; // Only used if appLink or href is provided\n group?: string;\n lazyPlaceholder?: boolean;\n}\n\nexport type ActionGenerator = (obj: BaseObject) => ActionOptions[];\n\ninterface ActionsProps {\n actions: ActionOptions[];\n className?: string;\n actionsDropdownClassName?: string;\n dropdownToggleSvgSize?: SvgContainerSize;\n sortComponent?: JSX.Element;\n customSize?: boolean;\n fetchMore?: () => void;\n}\n\nexport function Actions(props: ActionsProps): JSX.Element {\n const orderedActions = React.useMemo(() => props.actions.sort((a, b) => a.order - b.order), [props.actions]);\n\n const buttonActions: ActionOptions[] = [];\n const moreActions: ActionOptions[] = [];\n\n orderedActions.forEach(a => {\n if (a.button)\n buttonActions.push(a);\n else\n moreActions.push(a);\n });\n\n let className = 'd-flex';\n\n if (props.className)\n className += ` ${props.className}`;\n\n if (!buttonActions.length && !moreActions.length)\n return <></>;\n\n return (\n <div className={className}>\n {buttonActions.length ? buttonActions.map((a, idx) => (\n <React.Fragment key={idx}>\n {(() => {\n if (a.label) {\n const label: JSX.Element = FunctionHelper.isFunction(a.label)\n ? a.label()\n : <>{a.label}</>;\n\n return (\n <ActionButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svg={a.svg}\n svgSize={props.dropdownToggleSvgSize}\n className={a.className}\n tooltip={a.tooltip}\n showSpinner={a.showSpinner}\n analyticsData={a.analyticsData}\n analyticsOptions={a.analyticsOptions}\n openInNewTab={a.openInNewTab}\n disabled={a.disabled}\n >\n {label}\n </ActionButton>\n );\n }\n\n return (\n <IconButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svg={a.svg}\n className={a.className}\n analyticsData={a.analyticsData}\n analyticsOptions={a.analyticsOptions}\n openInNewTab={a.openInNewTab}\n disabled={a.disabled}\n showBorder={a.showBorder}\n customSize={props.customSize}\n ariaLabel={a.tooltip}\n tooltip={a.tooltip}\n />\n );\n })()}\n </React.Fragment>\n )) : <></>}\n {props.sortComponent && props.sortComponent}\n {moreActions.length ? (\n <ActionsDropdown\n actions={moreActions}\n dropdownToggleClassName={props.actionsDropdownClassName}\n dropdownToggleSvgSize={props.dropdownToggleSvgSize}\n fetchMore={props.fetchMore}\n />\n ) : <></>}\n </div>\n );\n}","import React from 'react';\nimport { Column } from 'react-table';\nimport { format as formatDate } from 'timeago.js';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport {\n ShareStatusIndicator\n} from 'libs/shared/apps/share/components/shared-by-me/share-status-indicator/ShareStatusIndicator';\nimport { SharedObjectImage } from 'libs/shared/apps/share/components/shared-object-image/SharedObjectImage';\nimport {\n AnonymousSharedToAvatar,\n SharedLinkAvatar,\n SharedToAvatarList\n} from 'libs/shared/apps/share/components/shared-to-avatar-list/SharedToAvatarList';\nimport { ShareHelper } from 'libs/shared/apps/share/utils/ShareHelper';\nimport { ShareLinkHelper } from 'libs/shared/apps/share/utils/ShareLinkHelper';\nimport { SharableEntity, SharableRecipient, ShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\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 { ShareType } from 'libs/shared/enums/ShareType';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject, UnionShareObject, YearGroup } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nconst namespace = 'share.sharedByMeTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getDateShared(share: UnionShareObject): string {\n if (share.type === ShareType.ShareLink || !share?.recipients?.length)\n return share.dateCreated;\n\n const datesShared = share.recipients.map(r => r.dateShared);\n\n datesShared.sort((date1, date2) => {\n if (DateHelper.isSame(date1, date2))\n return 0;\n\n return DateHelper.isAfter(date1, date2) ? 1 : -2;\n });\n\n\n if (!datesShared.length)\n return '';\n\n return ArrayHelper.last(datesShared);\n}\n\ninterface SharedByMeTableData {\n share: UnionShareObject;\n sharedObject: SharableEntity;\n dateShared: string;\n sharedToData: {\n share: UnionShareObject;\n sharedObject: SharableEntity;\n recipients?: BaseObject[];\n };\n viewCount: number;\n}\n\ntype TableDataGroupings = { [date: string]: SharedByMeTableData[] };\n\ninterface GetColumnsOptions {\n index: number;\n dateHeading: string;\n getObjectAppLink: (object: BaseObject) => Core.AppLink;\n getObjectActions: (object: BaseObject) => ActionOptions[];\n imageCdnUrl: string;\n showStatus?: boolean;\n showViewCount?: boolean;\n breakpoints?: Breakpoints;\n yearGroups?: YearGroup[];\n}\n\nexport function getColumns(options: GetColumnsOptions): Column<SharedByMeTableData>[] {\n const {\n index,\n dateHeading,\n getObjectAppLink,\n getObjectActions,\n imageCdnUrl,\n showStatus,\n showViewCount,\n breakpoints,\n yearGroups\n } = options;\n const isMobile = breakpoints && (breakpoints.xs || breakpoints.sm);\n\n const columns: Column<SharedByMeTableData>[] = [\n {\n Header: showStatus ? '' : dateHeading,\n accessor: 'sharedObject',\n id: 'image',\n Cell: ({ value }) => (\n <div className='w-100'>\n <SharedObjectImage\n object={value}\n appLink={getObjectAppLink(value)}\n showVideoMetadata\n locationContext={LocationContext.SharedByMe}\n />\n </div>\n ),\n minWidth: 140,\n maxWidth: 30\n },\n {\n accessor: 'sharedObject',\n id: 'name',\n Cell: ({ value }) => {\n function getSubTextPhrase(): string {\n switch (value.typeId) {\n case MasterType.Series: return 'series';\n case MasterType.Playlist: return 'playlist';\n }\n }\n\n if (value.name) {\n if (VideoHelper.isVideoType(value) && !VideoHelper.getCanBeConsumed(value)?.canNavigate) {\n return (\n <span className='clamp-2'>\n {value.name}\n </span>\n );\n }\n\n const subTextPhrase = getSubTextPhrase();\n\n return (\n <div className='clamp-2'>\n {subTextPhrase &&\n <TitleSubText>\n <Text namespace={namespace} phrase={subTextPhrase} />\n </TitleSubText>\n }\n {VideoHelper.isVideoType(value) && (\n <VideoSubText\n type='series'\n video={value}\n appLink={'series' in value && value.series ? getObjectAppLink(value.series) : null}\n analyticsOptions={{ location: LocationContext.Insights }}\n />\n )}\n <AppLink\n appLink={getObjectAppLink(value)}\n analyticsData={{ id: value.id, name: value.name }}\n analyticsOptions={{\n entity: ShareViewHelper.getAnalyticsEntity(value.type),\n actionType: UserAction.Click,\n location: LocationContext.SharedByMe\n }}\n >\n {value.name}\n </AppLink>\n </div>\n );\n }\n\n return <span><Text namespace={namespace} phrase='videoUnavailable' /></span>;\n },\n width: 60\n },\n {\n Header: index === 0 ? getPhrase('sharedTo') : '',\n accessor: 'sharedToData',\n Cell: ({ value }) => {\n const { share, sharedObject, recipients } = value;\n\n if (!recipients) {\n const iconAndText = share.type === ShareType.ShareLink && ShareLinkHelper.getIconAndText({\n entity: sharedObject,\n entityTypeId: sharedObject.typeId,\n hasStudentExp: false,\n isPasswordProtected: share.isPasswordProtected,\n linkExpireDate: share.linkExpireDate,\n privacy: {\n privacy: share.privacy,\n overrideRestrictions: share.overrideRestrictions\n },\n status: share.status,\n yearGroups: yearGroups ?? []\n });\n\n return <SharedLinkAvatar text={iconAndText?.text} />;\n }\n \n if (!recipients?.length)\n return <AnonymousSharedToAvatar />;\n\n return (\n <SharedToAvatarList\n recipients={recipients}\n imageCdnUrl={imageCdnUrl}\n maxAvatars={isMobile ? 1 : 2}\n />\n );\n },\n width: 40\n },\n !isMobile && {\n Header: index === 0 ? getPhrase('shared') : '',\n id: 'dateShared',\n accessor: s => formatDate(s.dateShared),\n width: 40\n },\n {\n accessor: 'sharedObject',\n id: 'actions',\n Cell: ({ value }) => (\n <Actions\n actions={getObjectActions(value)}\n className='w-100 justify-content-end pe-2'\n />\n ),\n width: 20\n }\n ];\n\n const statusColumn: Column<SharedByMeTableData> = {\n Header: dateHeading,\n accessor: 'share',\n id: 'status',\n Cell: ({ value }) => (\n <ShareStatusIndicator share={value} />\n ),\n width: 5\n };\n\n const viewCountColumn: Column<SharedByMeTableData> = {\n Header: getPhrase('views'),\n accessor: 'viewCount',\n width: 30\n };\n\n if (showStatus)\n columns.splice(0, 0, statusColumn);\n\n if (showViewCount)\n columns.splice(columns.length - 1, 0, viewCountColumn);\n\n return columns.filter((Boolean));\n}\n\nexport function useGetData(\n sentShares: UnionShareObject[],\n sharedObjects: Record<string, SharableEntity>,\n shareRecipients: Record<string, SharableRecipient>,\n groupByDate: boolean\n): TableDataGroupings {\n const tableData: SharedByMeTableData[] = [];\n\n sentShares.forEach(s => {\n const sharedObject = sharedObjects?.[s.objectId];\n\n let recipients: BaseObject[] | null = null;\n\n if (s.type === ShareType.DirectShare) {\n recipients = [];\n\n s.recipients?.forEach(r => {\n const recipient = shareRecipients?.[r.id];\n\n if (recipient)\n recipients.push(recipient);\n });\n }\n\n // Skip if we don't have access to the shared object (e.g. if it's been deleted)\n if (sharedObject)\n tableData.push({\n share: s,\n sharedObject,\n sharedToData: {\n share: s,\n sharedObject,\n recipients\n },\n dateShared: getDateShared(s),\n viewCount: s.viewCount ?? 0\n });\n });\n\n if (!groupByDate)\n return { [getPhrase('title')]: tableData };\n\n return ShareHelper.groupByDateShared(tableData);\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { SHARES_TABLE_THEME } from 'libs/shared/apps/share/constants/TableTheme';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Table } from 'libs/shared/components/table/Table';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject, UnionShareObject, YearGroup } from 'libs/shared/interfaces';\n\nimport { SharableEntity, SharableRecipient } from '../../../views/share/ShareViewHelper';\n\nimport { getColumns, useGetData } from './SharedByMeTableUtils';\n\ninterface SharedByMeTableProps {\n sentShares: UnionShareObject[];\n sharedObjects: Record<string, SharableEntity>;\n shareRecipients: Record<string, SharableRecipient>;\n getObjectAppLink: (object: BaseObject) => Core.AppLink;\n getObjectActions: (object: BaseObject) => ActionOptions[];\n groupByDateShared?: boolean;\n showStatus?: boolean;\n showViewCount?: boolean;\n breakpoints?: Breakpoints;\n imageCdnUrl: string;\n yearGroups?: YearGroup[];\n}\n\nexport function SharedByMeTable(props: SharedByMeTableProps): JSX.Element {\n const data = useGetData(\n props.sentShares,\n props.sharedObjects,\n props.shareRecipients,\n !!props.groupByDateShared\n );\n\n return (\n <>\n {Object.keys(data).map((heading, index) => (\n <Table\n key={index}\n columns={getColumns({\n index,\n dateHeading: heading,\n getObjectAppLink: props.getObjectAppLink,\n getObjectActions: props.getObjectActions,\n imageCdnUrl: props.imageCdnUrl,\n showStatus: props.showStatus,\n showViewCount: props.showViewCount,\n breakpoints: props.breakpoints,\n yearGroups: props.yearGroups\n })}\n data={data[heading]}\n theme={SHARES_TABLE_THEME}\n />\n ))}\n </>\n );\n}","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ShareType } from 'libs/shared/enums/ShareType';\nimport { DirectShare, ShareRecipient, UnionShareObject } from 'libs/shared/interfaces';\n\nexport const ShareHelper = {\n getDirectShares(sentShares: UnionShareObject[]): DirectShare[] {\n return sentShares?.filter(s => s.type === ShareType.DirectShare) as DirectShare[] ?? [];\n },\n \n getRecipients(sentShares: UnionShareObject[]): ShareRecipient[] {\n return ArrayHelper.flatten(ShareHelper.getDirectShares(sentShares).map(d => d.recipients ?? []));\n }\n};","import React from 'react';\n\nexport function AnalyticsSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M17.5 5h1a.5.5 0 0 1 .5.5v13a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-13a.5.5 0 0 1 .5-.5m-1.5.5v13a1.5 1.5 0 0 0 1.5 1.5h1a1.5 1.5 0 0 0 1.5-1.5v-13A1.5 1.5 0 0 0 18.5 4h-1A1.5 1.5 0 0 0 16 5.5m-4.5 3.638a.5.5 0 0 0-.5.5V18.5a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5V9.638a.5.5 0 0 0-.5-.5zm-1.5.5a1.5 1.5 0 0 1 1.5-1.5h1a1.5 1.5 0 0 1 1.5 1.5V18.5a1.5 1.5 0 0 1-1.5 1.5h-1a1.5 1.5 0 0 1-1.5-1.5zM4 12.74a1.5 1.5 0 0 1 1.5-1.5h1a1.5 1.5 0 0 1 1.5 1.5V18.5A1.5 1.5 0 0 1 6.5 20h-1A1.5 1.5 0 0 1 4 18.5zm1.5-.5a.5.5 0 0 0-.5.5V18.5a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-5.759a.5.5 0 0 0-.5-.5z'\n />\n </svg>\n );\n}\n","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { getFilterParamsKey } from 'libs/shared/apps/analytics/utils/FilterParamUtils';\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { AnalyticsSvg } from 'libs/shared/images/svg/objects/AnalyticsSvg';\nimport { Interactive } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/ReportsActions';\nimport { AppChannels } from 'shared/constants/ReportsRadioChannels';\nimport { useGetExternalUrl } from 'shared/hooks/UseGetExternalUrl';\nimport { useGetAppLinkFilterParams, useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { ExternalRouteHelper } from 'shared/utils/ExternalRouteHelper';\n\nconst namespace = 'reportsInteractives.sharedInteractives';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function useGetRequest(): ((cursor?: string) => Flight.Request) | false {\n const requestFilter = useGetRequestFilter();\n\n if (!requestFilter)\n return false;\n\n return (cursor?: string) => {\n const { start, end, userId, groupId } = requestFilter;\n\n return ShareRequests.sentShare({\n start,\n end,\n recipientUserId: userId,\n recipientGroupId: groupId,\n objectTypeId: MasterType.Interactive,\n cursor\n });\n };\n}\n\nexport function useGetActions(): (interactive: Interactive) => ActionOptions[] {\n const getAppLink = useGetInteractiveAppLink();\n\n const getObjectUrl = useGetExternalUrl(ExternalRouteHelper.getPrimaryObjectUrl);\n\n return (interactive: Interactive) => {\n const { canConsume } = VideoHelper.getCanBeConsumed(interactive);\n\n if (!canConsume)\n return [];\n\n const options: ActionOptions[] = [\n {\n tooltip: getPhrase('viewResults'),\n svg: AnalyticsSvg,\n appLink: getAppLink(interactive),\n className: 'me-2',\n button: true\n },\n {\n label: getPhrase('editShareSettings'),\n appLink: {\n application: AppChannels.DEFAULT,\n action: Actions.Default.SHARE,\n args: [interactive.id],\n params: { entityType: 'interactive' }\n }\n }\n ];\n\n if (getObjectUrl)\n options.push({\n label: getPhrase('viewOriginal'),\n href: getObjectUrl(interactive),\n openInNewTab: true\n });\n\n return options;\n };\n}\n\nexport function useGetInteractiveAppLink(): (interactive: Interactive) => Core.AppLink {\n const filterQueryParams = useGetAppLinkFilterParams();\n\n return (interactive: Interactive) => ({\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.OVERVIEW,\n args: [interactive.id],\n params: filterQueryParams\n });\n}\n\nexport function useTableKey(): string {\n const filterQueryParams = useGetAppLinkFilterParams();\n\n return `shared:interactives:table:${getFilterParamsKey(filterQueryParams)}`;\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { SharedByMeEmptyState } from 'libs/shared/apps/share/components/shared-by-me/empty-state/SharedByMeEmptyState';\nimport { SharedByMeTable } from 'libs/shared/apps/share/components/shared-by-me/table/SharedByMeTable';\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useGrowingBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, CurrentUser, UnionShareObject } from 'libs/shared/interfaces';\nimport { ShareHelper } from 'libs/shared/utils/ShareHelper';\n\nimport { PartialTable } from 'shared/components/partial-loading/PartialTable';\nimport { PartialTableContent } from 'shared/components/partial-loading/PartialTableContent';\nimport { ImageUrls } from 'shared/constants/ReportsImageUrls';\nimport { useSetHeaderTitle } from 'shared/hooks/UseSetHeaderTitle';\n\nimport { useGetActions, useGetInteractiveAppLink, useGetRequest, useTableKey } from './SharedInteractivesViewUtils';\n\nconst namespace = 'reportsInteractives.sharedInteractives';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function SharedInteractivesView(): JSX.Element {\n const fetch = Flight.useGetFetch();\n useSetPageMetadata({ title: getPhrase('interactives') });\n useSetHeaderTitle(getPhrase('interactives'));\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const tableKey = useTableKey();\n\n const getAppLink = useGetInteractiveAppLink();\n const getActions = useGetActions();\n\n const getRequest = useGetRequest();\n\n function fetchNext(cursor?: string): void {\n if (!getRequest)\n return;\n\n fetch(getRequest(cursor));\n }\n\n const {\n items: sentShares,\n hasMore,\n isFetching: isFetchingSentShares,\n nextCursor,\n hasFirstPageCompleted\n } = useInfiniteList<UnionShareObject>(getRequest, fetchNext);\n\n const sharedInteractives = useGrowingBatchFetch(\n sentShares?.map(obj => obj.objectId),\n ShareRequests.sharedObjectsById\n );\n\n const recipients = useGrowingBatchFetch(\n ShareHelper.getRecipients(sentShares).map(obj => obj.id),\n ids => ShareRequests.getRecipientsById(ids, currentUser.data.customerId)\n );\n \n // Wait until all data is fetched before telling the table to re-render\n const isFetching = isFetchingSentShares\n || sharedInteractives.isFetching\n || recipients.isFetching;\n\n if (!hasFirstPageCompleted || (sentShares?.length && !sharedInteractives.hasFirstRequestCompleted))\n return (\n <PartialTable variant='interactives'>\n <PartialTableContent variant='interactives' />\n </PartialTable>\n );\n\n if (!sentShares.length)\n return (\n <div className='bg-white rounded my-3 py-5'>\n <div className='pb-5'>\n <SharedByMeEmptyState\n imageUrl={ImageUrls.EmptyStates.Interactives.SharedInteractives}\n useInteractiveCopy\n />\n </div>\n </div>\n );\n\n return (\n <>\n <SharedByMeTable\n key={tableKey}\n sentShares={sentShares}\n sharedObjects={sharedInteractives.items}\n shareRecipients={recipients.items}\n getObjectAppLink={getAppLink}\n getObjectActions={getActions}\n showStatus\n showViewCount\n imageCdnUrl={config.data?.imageCdnUrl}\n />\n {(hasMore || isFetching) &&\n <InfiniteScrollFooter isFetching={isFetching} fetchNext={fetchNext} nextCursor={nextCursor} />\n }\n </>\n );\n}"],"names":["namespace","getPhrase","LanguageService","SharedByMeEmptyState","props","EmptyState","jsx","SHARES_TABLE_THEME","EN_US","en_US","diff","idx","unit","ZH_CN","zh_CN","Locales","register","locale","func","getLocale","SEC_ARRAY","toDate","input","formatDiff","localeFunc","agoIn","totalSec","diffSec","date","relativeDate","relDate","format","opts","sec","ShareType","getStatusPhrase","share","ShareLinkStatus","getBgColourClassName","ShareStatusIndicator","_a","Fragment","Tooltip","SvgContainer","LockSvg","SvgContainerSize","styles","BaseCollectionThumbnailTitle","CollectionThumbnailTitle","AppLink","CollectionThumbnail","getFirstVideo","collectionVideos","MasterType","playlist","ArrayHelper","getVideoCount","totalCount","_b","getEntityType","collection","MasterTypeHelper","EntityType","firstVideo","videoCount","showTexts","analyticsData","analyticsOptions","UserAction","jsxs","PlaySvg","_c","Text","VideoThumbnail","ThumbnailTextPosition","SeriesSvg","TitleSubText","BASE_IMAGE_CLASS_NAME","getImageProps","object","image","ImageHelper","VideoHelper","ImageType","ImageFallback","ImageFallbackType","getBgColorClass","BG_COLOUR_CLASS_NAMES","InsightsMask","getImageRatio","SharedObjectImage","ImageSize","ref","React","el","useVideoThumbnail","imageType","imageClassName","imageFallbackComponent","thumbnailMetadata","ShareViewHelper","BaseImage","AvatarList","itemsToDisplay","hiddenItems","AvatarItem","hiddenItemsCounts","translateX","getTooltip","getContainerStyles","getAvatarStyles","SharedLinkAvatar","item","getHiddenRecipientText","hiddenRecipients","counts","userCount","classroomCount","groupCount","SharedToAvatar","user","classroom","classroomGroup","svgContainerClassName","Avatar","_d","UserHelper","IconCircle","ClassroomsSvg","GroupSvg","mapColourToBsVariant","_e","AnonymousSharedToAvatar","AnonymousSvg","LinkSvg","SharedToAvatarList","ShareActivityStatus","ShareHelper","data","dateToObjectMapping","acc","heading","activityStatus","CheckMarkStatus","checkMarkStatus","Actions","orderedActions","React.useMemo","a","b","buttonActions","moreActions","className","React.Fragment","label","FunctionHelper","ActionButton","IconButton","ActionsDropdown","getDateShared","datesShared","r","date1","date2","DateHelper","getColumns","options","index","dateHeading","getObjectAppLink","getObjectActions","imageCdnUrl","showStatus","showViewCount","breakpoints","yearGroups","isMobile","columns","value","LocationContext","getSubTextPhrase","subTextPhrase","VideoSubText","sharedObject","recipients","iconAndText","ShareLinkHelper","s","formatDate","statusColumn","viewCountColumn","useGetData","sentShares","sharedObjects","shareRecipients","groupByDate","tableData","recipient","SharedByMeTable","Table","d","AnalyticsSvg","useGetRequest","requestFilter","useGetRequestFilter","cursor","start","end","userId","groupId","ShareRequests","useGetActions","getAppLink","useGetInteractiveAppLink","getObjectUrl","useGetExternalUrl","ExternalRouteHelper","interactive","canConsume","AppChannels","filterQueryParams","useGetAppLinkFilterParams","useTableKey","getFilterParamsKey","SharedInteractivesView","fetch","Flight.useGetFetch","useSetPageMetadata","useSetHeaderTitle","currentUser","Flight.useBasicFetch","UserRequests","config","ConfigRequests","tableKey","getActions","getRequest","fetchNext","hasMore","isFetchingSentShares","nextCursor","hasFirstPageCompleted","useInfiniteList","sharedInteractives","useGrowingBatchFetch","obj","ids","isFetching","PartialTable","PartialTableContent","InfiniteScrollFooter","ImageUrls"],"mappings":"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","x_google_ignoreList":[2,3,4,5,6,7]}