@clickview/lite 0.52.3-dev.0 → 0.52.3-dev.2

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 (291) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/css/{1760-lite-d230b51c8b.chunk.css → 1019-lite-402889ede4.chunk.css} +2 -1
  3. package/dist/css/{6094-lite-d230b51c8b.chunk.css → 2548-lite-402889ede4.chunk.css} +2 -1
  4. package/dist/css/{6546-lite-991b6e8255.chunk.css → 6596-lite-e22262b911.chunk.css} +2 -1
  5. package/dist/css/{1867-lite-991b6e8255.chunk.css → 9010-lite-e22262b911.chunk.css} +2 -1
  6. package/dist/languages/en.json +1 -1
  7. package/dist/scripts/{1760-33f1791560-lite.chunk.js → 1019-8fc84c7c2e-lite.chunk.js} +2 -2
  8. package/dist/scripts/{1760-33f1791560-lite.chunk.js.map → 1019-8fc84c7c2e-lite.chunk.js.map} +1 -1
  9. package/dist/scripts/1063-5a732288dc-lite.chunk.js +2 -0
  10. package/dist/scripts/1063-5a732288dc-lite.chunk.js.map +1 -0
  11. package/dist/scripts/{9173-2392d447a6-lite.chunk.js → 1104-f057c6dea1-lite.chunk.js} +3 -3
  12. package/dist/scripts/{9173-2392d447a6-lite.chunk.js.map → 1104-f057c6dea1-lite.chunk.js.map} +1 -1
  13. package/dist/scripts/{1125-aac132b88f-lite.chunk.js → 1125-c5138ef662-lite.chunk.js} +2 -2
  14. package/dist/scripts/1125-c5138ef662-lite.chunk.js.map +1 -0
  15. package/dist/scripts/1169-9b7d850bab-lite.chunk.js +2 -0
  16. package/dist/scripts/1169-9b7d850bab-lite.chunk.js.map +1 -0
  17. package/dist/scripts/{1379-082bbab71a-lite.chunk.js → 1379-ca519ec56b-lite.chunk.js} +3 -3
  18. package/dist/scripts/{1379-082bbab71a-lite.chunk.js.map → 1379-ca519ec56b-lite.chunk.js.map} +1 -1
  19. package/dist/scripts/1672-0d1fc90529-lite.chunk.js +3 -0
  20. package/dist/scripts/1672-0d1fc90529-lite.chunk.js.map +1 -0
  21. package/dist/scripts/1725-99450ed637-lite.chunk.js +2 -0
  22. package/dist/scripts/1725-99450ed637-lite.chunk.js.map +1 -0
  23. package/dist/scripts/1891-5914c54eca-lite.chunk.js +2 -0
  24. package/dist/scripts/1891-5914c54eca-lite.chunk.js.map +1 -0
  25. package/dist/scripts/1896-399a91d18c-lite.chunk.js +2 -0
  26. package/dist/scripts/1896-399a91d18c-lite.chunk.js.map +1 -0
  27. package/dist/scripts/193-797b89797a-lite.chunk.js +2 -0
  28. package/dist/scripts/193-797b89797a-lite.chunk.js.map +1 -0
  29. package/dist/scripts/209-fe96739cb5-lite.chunk.js +2 -0
  30. package/dist/scripts/209-fe96739cb5-lite.chunk.js.map +1 -0
  31. package/dist/scripts/2134-b8d5c46887-lite.chunk.js +2 -0
  32. package/dist/scripts/2134-b8d5c46887-lite.chunk.js.map +1 -0
  33. package/dist/scripts/2142-f71cf5c71f-lite.chunk.js +2 -0
  34. package/dist/scripts/2142-f71cf5c71f-lite.chunk.js.map +1 -0
  35. package/dist/scripts/2402-ff1b4adf1a-lite.chunk.js +2 -0
  36. package/dist/scripts/2402-ff1b4adf1a-lite.chunk.js.map +1 -0
  37. package/dist/scripts/2548-c5dd2899df-lite.chunk.js +2 -0
  38. package/dist/scripts/2548-c5dd2899df-lite.chunk.js.map +1 -0
  39. package/dist/scripts/2952-c3a826b714-lite.chunk.js +2 -0
  40. package/dist/scripts/2952-c3a826b714-lite.chunk.js.map +1 -0
  41. package/dist/scripts/3404-23125f10ea-lite.chunk.js +2 -0
  42. package/dist/scripts/3404-23125f10ea-lite.chunk.js.map +1 -0
  43. package/dist/scripts/3633-f3609526a5-lite.chunk.js +2 -0
  44. package/dist/scripts/3633-f3609526a5-lite.chunk.js.map +1 -0
  45. package/dist/scripts/3728-eed9e78985-lite.chunk.js +2 -0
  46. package/dist/scripts/3728-eed9e78985-lite.chunk.js.map +1 -0
  47. package/dist/scripts/4063-5fa157657f-lite.chunk.js +2 -0
  48. package/dist/scripts/4063-5fa157657f-lite.chunk.js.map +1 -0
  49. package/dist/scripts/4182-ba03f3ce3c-lite.chunk.js +2 -0
  50. package/dist/scripts/4182-ba03f3ce3c-lite.chunk.js.map +1 -0
  51. package/dist/scripts/4273-e42f763f00-lite.chunk.js +3 -0
  52. package/dist/scripts/4273-e42f763f00-lite.chunk.js.map +1 -0
  53. package/dist/scripts/4395-d0815835c8-lite.chunk.js +2 -0
  54. package/dist/scripts/4395-d0815835c8-lite.chunk.js.map +1 -0
  55. package/dist/scripts/4502-af4903784e-lite.chunk.js +2 -0
  56. package/dist/scripts/4502-af4903784e-lite.chunk.js.map +1 -0
  57. package/dist/scripts/4850-bb9541d3ed-lite.chunk.js +2 -0
  58. package/dist/scripts/4850-bb9541d3ed-lite.chunk.js.map +1 -0
  59. package/dist/scripts/5573-4352a3537e-lite.chunk.js +2 -0
  60. package/dist/scripts/5573-4352a3537e-lite.chunk.js.map +1 -0
  61. package/dist/scripts/5595-3acc9593bf-lite.chunk.js +2 -0
  62. package/dist/scripts/5595-3acc9593bf-lite.chunk.js.map +1 -0
  63. package/dist/scripts/5606-69c0ca2b97-lite.chunk.js +2 -0
  64. package/dist/scripts/5606-69c0ca2b97-lite.chunk.js.map +1 -0
  65. package/dist/scripts/5877-628732da21-lite.chunk.js +2 -0
  66. package/dist/scripts/5877-628732da21-lite.chunk.js.map +1 -0
  67. package/dist/scripts/5936-cd98109a7b-lite.chunk.js +2 -0
  68. package/dist/scripts/5936-cd98109a7b-lite.chunk.js.map +1 -0
  69. package/dist/scripts/{5940-f335f8c290-lite.chunk.js → 5940-2767b40c40-lite.chunk.js} +2 -2
  70. package/dist/scripts/5940-2767b40c40-lite.chunk.js.map +1 -0
  71. package/dist/scripts/6054-1e9b86d631-lite.chunk.js +2 -0
  72. package/dist/scripts/6054-1e9b86d631-lite.chunk.js.map +1 -0
  73. package/dist/scripts/6138-2ef7ee071a-lite.chunk.js +2 -0
  74. package/dist/scripts/6138-2ef7ee071a-lite.chunk.js.map +1 -0
  75. package/dist/scripts/{624-7ab5fb3f3b-lite.chunk.js → 624-09b51a9d32-lite.chunk.js} +3 -3
  76. package/dist/scripts/{624-7ab5fb3f3b-lite.chunk.js.map → 624-09b51a9d32-lite.chunk.js.map} +1 -1
  77. package/dist/scripts/6263-8a7931bf51-lite.chunk.js +2 -0
  78. package/dist/scripts/6263-8a7931bf51-lite.chunk.js.map +1 -0
  79. package/dist/scripts/6290-28ae0e8a60-lite.chunk.js +2 -0
  80. package/dist/scripts/6290-28ae0e8a60-lite.chunk.js.map +1 -0
  81. package/dist/scripts/6470-9a700cabce-lite.chunk.js +2 -0
  82. package/dist/scripts/6470-9a700cabce-lite.chunk.js.map +1 -0
  83. package/dist/scripts/6481-035d218a77-lite.chunk.js +2 -0
  84. package/dist/scripts/6481-035d218a77-lite.chunk.js.map +1 -0
  85. package/dist/scripts/6532-59e9abf69d-lite.chunk.js +2 -0
  86. package/dist/scripts/6532-59e9abf69d-lite.chunk.js.map +1 -0
  87. package/dist/scripts/6596-f75129c039-lite.chunk.js +2 -0
  88. package/dist/scripts/6596-f75129c039-lite.chunk.js.map +1 -0
  89. package/dist/scripts/6604-9adec889c7-lite.chunk.js +2 -0
  90. package/dist/scripts/6604-9adec889c7-lite.chunk.js.map +1 -0
  91. package/dist/scripts/6746-3f501b95cf-lite.chunk.js +2 -0
  92. package/dist/scripts/6746-3f501b95cf-lite.chunk.js.map +1 -0
  93. package/dist/scripts/714-c00ad56229-lite.chunk.js +2 -0
  94. package/dist/scripts/714-c00ad56229-lite.chunk.js.map +1 -0
  95. package/dist/scripts/7163-84c2b15394-lite.chunk.js +2 -0
  96. package/dist/scripts/7163-84c2b15394-lite.chunk.js.map +1 -0
  97. package/dist/scripts/7178-ed74c33056-lite.chunk.js +2 -0
  98. package/dist/scripts/7178-ed74c33056-lite.chunk.js.map +1 -0
  99. package/dist/scripts/7223-0bfab7e57a-lite.chunk.js +2 -0
  100. package/dist/scripts/7223-0bfab7e57a-lite.chunk.js.map +1 -0
  101. package/dist/scripts/7234-84c087600e-lite.chunk.js +2 -0
  102. package/dist/scripts/7234-84c087600e-lite.chunk.js.map +1 -0
  103. package/dist/scripts/7267-fd5085f5c9-lite.chunk.js +2 -0
  104. package/dist/scripts/7267-fd5085f5c9-lite.chunk.js.map +1 -0
  105. package/dist/scripts/7633-6c1ffdd082-lite.chunk.js +2 -0
  106. package/dist/scripts/7633-6c1ffdd082-lite.chunk.js.map +1 -0
  107. package/dist/scripts/7679-8f2d6a3487-lite.chunk.js +2 -0
  108. package/dist/scripts/7679-8f2d6a3487-lite.chunk.js.map +1 -0
  109. package/dist/scripts/7757-7e293be936-lite.chunk.js +2 -0
  110. package/dist/scripts/7757-7e293be936-lite.chunk.js.map +1 -0
  111. package/dist/scripts/7795-c6d38bc3e5-lite.chunk.js +2 -0
  112. package/dist/scripts/7795-c6d38bc3e5-lite.chunk.js.map +1 -0
  113. package/dist/scripts/7818-230982fc27-lite.chunk.js +2 -0
  114. package/dist/scripts/7818-230982fc27-lite.chunk.js.map +1 -0
  115. package/dist/scripts/8323-360541a2a8-lite.chunk.js +3 -0
  116. package/dist/scripts/8323-360541a2a8-lite.chunk.js.map +1 -0
  117. package/dist/scripts/8709-c4f1068232-lite.chunk.js +2 -0
  118. package/dist/scripts/8709-c4f1068232-lite.chunk.js.map +1 -0
  119. package/dist/scripts/8982-a3dc4a6b3c-lite.chunk.js +2 -0
  120. package/dist/scripts/8982-a3dc4a6b3c-lite.chunk.js.map +1 -0
  121. package/dist/scripts/9010-024dcc8f9a-lite.chunk.js +2 -0
  122. package/dist/scripts/9010-024dcc8f9a-lite.chunk.js.map +1 -0
  123. package/dist/scripts/9016-82d7e0afb9-lite.chunk.js +3 -0
  124. package/dist/scripts/9016-82d7e0afb9-lite.chunk.js.map +1 -0
  125. package/dist/scripts/9173-f9708ec0de-lite.chunk.js +2 -0
  126. package/dist/scripts/9173-f9708ec0de-lite.chunk.js.map +1 -0
  127. package/dist/scripts/9230-ae200d2bd3-lite.chunk.js +3 -0
  128. package/dist/scripts/9230-ae200d2bd3-lite.chunk.js.map +1 -0
  129. package/dist/scripts/9359-1fb4413e0d-lite.chunk.js +2 -0
  130. package/dist/scripts/9359-1fb4413e0d-lite.chunk.js.map +1 -0
  131. package/dist/scripts/{9395-90b87097fa-lite.chunk.js → 9395-e1a02b01ce-lite.chunk.js} +3 -3
  132. package/dist/scripts/{9395-90b87097fa-lite.chunk.js.map → 9395-e1a02b01ce-lite.chunk.js.map} +1 -1
  133. package/dist/scripts/9399-d7a92ce84a-lite.chunk.js +2 -0
  134. package/dist/scripts/9399-d7a92ce84a-lite.chunk.js.map +1 -0
  135. package/dist/scripts/{9478-99486906b9-lite.chunk.js → 9478-abfa7ed3cc-lite.chunk.js} +3 -3
  136. package/dist/scripts/{9478-99486906b9-lite.chunk.js.map → 9478-abfa7ed3cc-lite.chunk.js.map} +1 -1
  137. package/dist/scripts/{953-cbc7f0571e-lite.chunk.js → 953-225db845ab-lite.chunk.js} +3 -3
  138. package/dist/scripts/{953-cbc7f0571e-lite.chunk.js.map → 953-225db845ab-lite.chunk.js.map} +1 -1
  139. package/dist/scripts/9620-95e6cc7b2b-lite.chunk.js +3 -0
  140. package/dist/scripts/9620-95e6cc7b2b-lite.chunk.js.map +1 -0
  141. package/dist/scripts/9719-9736913451-lite.chunk.js +3 -0
  142. package/dist/scripts/9719-9736913451-lite.chunk.js.map +1 -0
  143. package/dist/scripts/999-bdc7956050-lite.chunk.js +2 -0
  144. package/dist/scripts/999-bdc7956050-lite.chunk.js.map +1 -0
  145. package/dist/scripts/bundle-9f8729bedb.min.js +3 -0
  146. package/dist/scripts/bundle-9f8729bedb.min.js.map +1 -0
  147. package/package.json +1 -1
  148. package/dist/scripts/1125-aac132b88f-lite.chunk.js.map +0 -1
  149. package/dist/scripts/1169-534a29a204-lite.chunk.js +0 -2
  150. package/dist/scripts/1169-534a29a204-lite.chunk.js.map +0 -1
  151. package/dist/scripts/1672-672f298d82-lite.chunk.js +0 -3
  152. package/dist/scripts/1672-672f298d82-lite.chunk.js.map +0 -1
  153. package/dist/scripts/1725-075015497e-lite.chunk.js +0 -2
  154. package/dist/scripts/1725-075015497e-lite.chunk.js.map +0 -1
  155. package/dist/scripts/1818-64a145c5fe-lite.chunk.js +0 -2
  156. package/dist/scripts/1818-64a145c5fe-lite.chunk.js.map +0 -1
  157. package/dist/scripts/1820-993521951d-lite.chunk.js +0 -2
  158. package/dist/scripts/1820-993521951d-lite.chunk.js.map +0 -1
  159. package/dist/scripts/1867-260ef9f8c2-lite.chunk.js +0 -2
  160. package/dist/scripts/1867-260ef9f8c2-lite.chunk.js.map +0 -1
  161. package/dist/scripts/1891-e80f9f17ee-lite.chunk.js +0 -2
  162. package/dist/scripts/1891-e80f9f17ee-lite.chunk.js.map +0 -1
  163. package/dist/scripts/1896-32a6eeda5c-lite.chunk.js +0 -2
  164. package/dist/scripts/1896-32a6eeda5c-lite.chunk.js.map +0 -1
  165. package/dist/scripts/193-f08b054631-lite.chunk.js +0 -2
  166. package/dist/scripts/193-f08b054631-lite.chunk.js.map +0 -1
  167. package/dist/scripts/209-de1729d1b1-lite.chunk.js +0 -2
  168. package/dist/scripts/209-de1729d1b1-lite.chunk.js.map +0 -1
  169. package/dist/scripts/2134-bca2f4697e-lite.chunk.js +0 -2
  170. package/dist/scripts/2134-bca2f4697e-lite.chunk.js.map +0 -1
  171. package/dist/scripts/2703-591ccf069c-lite.chunk.js +0 -2
  172. package/dist/scripts/2703-591ccf069c-lite.chunk.js.map +0 -1
  173. package/dist/scripts/3404-171fdee802-lite.chunk.js +0 -2
  174. package/dist/scripts/3404-171fdee802-lite.chunk.js.map +0 -1
  175. package/dist/scripts/3633-66d28be6f8-lite.chunk.js +0 -2
  176. package/dist/scripts/3633-66d28be6f8-lite.chunk.js.map +0 -1
  177. package/dist/scripts/3728-d7ecfc6667-lite.chunk.js +0 -2
  178. package/dist/scripts/3728-d7ecfc6667-lite.chunk.js.map +0 -1
  179. package/dist/scripts/4182-7aecc28a6f-lite.chunk.js +0 -2
  180. package/dist/scripts/4182-7aecc28a6f-lite.chunk.js.map +0 -1
  181. package/dist/scripts/4395-64da004753-lite.chunk.js +0 -2
  182. package/dist/scripts/4395-64da004753-lite.chunk.js.map +0 -1
  183. package/dist/scripts/4502-2e30d86385-lite.chunk.js +0 -2
  184. package/dist/scripts/4502-2e30d86385-lite.chunk.js.map +0 -1
  185. package/dist/scripts/5143-b6896dad98-lite.chunk.js +0 -2
  186. package/dist/scripts/5143-b6896dad98-lite.chunk.js.map +0 -1
  187. package/dist/scripts/5573-6cd98b69f2-lite.chunk.js +0 -2
  188. package/dist/scripts/5573-6cd98b69f2-lite.chunk.js.map +0 -1
  189. package/dist/scripts/5595-c4397e12a8-lite.chunk.js +0 -2
  190. package/dist/scripts/5595-c4397e12a8-lite.chunk.js.map +0 -1
  191. package/dist/scripts/5606-6c25caedc4-lite.chunk.js +0 -2
  192. package/dist/scripts/5606-6c25caedc4-lite.chunk.js.map +0 -1
  193. package/dist/scripts/5877-ddfaf6a7f5-lite.chunk.js +0 -2
  194. package/dist/scripts/5877-ddfaf6a7f5-lite.chunk.js.map +0 -1
  195. package/dist/scripts/5936-6fe810d3cb-lite.chunk.js +0 -2
  196. package/dist/scripts/5936-6fe810d3cb-lite.chunk.js.map +0 -1
  197. package/dist/scripts/5940-f335f8c290-lite.chunk.js.map +0 -1
  198. package/dist/scripts/6054-14d4ceeae3-lite.chunk.js +0 -2
  199. package/dist/scripts/6054-14d4ceeae3-lite.chunk.js.map +0 -1
  200. package/dist/scripts/6094-24c430efb3-lite.chunk.js +0 -2
  201. package/dist/scripts/6094-24c430efb3-lite.chunk.js.map +0 -1
  202. package/dist/scripts/6138-21ae042a7b-lite.chunk.js +0 -2
  203. package/dist/scripts/6138-21ae042a7b-lite.chunk.js.map +0 -1
  204. package/dist/scripts/6263-3455286798-lite.chunk.js +0 -2
  205. package/dist/scripts/6263-3455286798-lite.chunk.js.map +0 -1
  206. package/dist/scripts/6290-56412c6663-lite.chunk.js +0 -2
  207. package/dist/scripts/6290-56412c6663-lite.chunk.js.map +0 -1
  208. package/dist/scripts/6415-b29029aa1b-lite.chunk.js +0 -2
  209. package/dist/scripts/6415-b29029aa1b-lite.chunk.js.map +0 -1
  210. package/dist/scripts/6470-6216086d63-lite.chunk.js +0 -2
  211. package/dist/scripts/6470-6216086d63-lite.chunk.js.map +0 -1
  212. package/dist/scripts/6481-899eba8b3d-lite.chunk.js +0 -2
  213. package/dist/scripts/6481-899eba8b3d-lite.chunk.js.map +0 -1
  214. package/dist/scripts/6532-a6b65c91a7-lite.chunk.js +0 -2
  215. package/dist/scripts/6532-a6b65c91a7-lite.chunk.js.map +0 -1
  216. package/dist/scripts/6546-faa6f93a0e-lite.chunk.js +0 -2
  217. package/dist/scripts/6546-faa6f93a0e-lite.chunk.js.map +0 -1
  218. package/dist/scripts/6587-ba8e36be0b-lite.chunk.js +0 -2
  219. package/dist/scripts/6587-ba8e36be0b-lite.chunk.js.map +0 -1
  220. package/dist/scripts/6604-92193d6d68-lite.chunk.js +0 -2
  221. package/dist/scripts/6604-92193d6d68-lite.chunk.js.map +0 -1
  222. package/dist/scripts/6746-b5b2739944-lite.chunk.js +0 -2
  223. package/dist/scripts/6746-b5b2739944-lite.chunk.js.map +0 -1
  224. package/dist/scripts/679-e18e7956d0-lite.chunk.js +0 -2
  225. package/dist/scripts/679-e18e7956d0-lite.chunk.js.map +0 -1
  226. package/dist/scripts/714-432082f4fa-lite.chunk.js +0 -2
  227. package/dist/scripts/714-432082f4fa-lite.chunk.js.map +0 -1
  228. package/dist/scripts/7178-e603ea6b58-lite.chunk.js +0 -2
  229. package/dist/scripts/7178-e603ea6b58-lite.chunk.js.map +0 -1
  230. package/dist/scripts/7223-135cc7d675-lite.chunk.js +0 -2
  231. package/dist/scripts/7223-135cc7d675-lite.chunk.js.map +0 -1
  232. package/dist/scripts/729-c704d587d3-lite.chunk.js +0 -2
  233. package/dist/scripts/729-c704d587d3-lite.chunk.js.map +0 -1
  234. package/dist/scripts/7679-b01da2c09d-lite.chunk.js +0 -2
  235. package/dist/scripts/7679-b01da2c09d-lite.chunk.js.map +0 -1
  236. package/dist/scripts/7757-320e868e90-lite.chunk.js +0 -2
  237. package/dist/scripts/7757-320e868e90-lite.chunk.js.map +0 -1
  238. package/dist/scripts/7795-3ca0855d3a-lite.chunk.js +0 -2
  239. package/dist/scripts/7795-3ca0855d3a-lite.chunk.js.map +0 -1
  240. package/dist/scripts/7818-2eafc5f812-lite.chunk.js +0 -2
  241. package/dist/scripts/7818-2eafc5f812-lite.chunk.js.map +0 -1
  242. package/dist/scripts/8323-99cb03891e-lite.chunk.js +0 -3
  243. package/dist/scripts/8323-99cb03891e-lite.chunk.js.map +0 -1
  244. package/dist/scripts/8766-bcc7f11eac-lite.chunk.js +0 -2
  245. package/dist/scripts/8766-bcc7f11eac-lite.chunk.js.map +0 -1
  246. package/dist/scripts/8800-335154fe11-lite.chunk.js +0 -2
  247. package/dist/scripts/8800-335154fe11-lite.chunk.js.map +0 -1
  248. package/dist/scripts/8982-63c31685bf-lite.chunk.js +0 -2
  249. package/dist/scripts/8982-63c31685bf-lite.chunk.js.map +0 -1
  250. package/dist/scripts/9016-0c078a39cb-lite.chunk.js +0 -3
  251. package/dist/scripts/9016-0c078a39cb-lite.chunk.js.map +0 -1
  252. package/dist/scripts/9226-c236c0eeb1-lite.chunk.js +0 -2
  253. package/dist/scripts/9226-c236c0eeb1-lite.chunk.js.map +0 -1
  254. package/dist/scripts/9230-6dee40b1fb-lite.chunk.js +0 -3
  255. package/dist/scripts/9230-6dee40b1fb-lite.chunk.js.map +0 -1
  256. package/dist/scripts/9308-362f86711f-lite.chunk.js +0 -3
  257. package/dist/scripts/9308-362f86711f-lite.chunk.js.map +0 -1
  258. package/dist/scripts/9359-cc085d48a4-lite.chunk.js +0 -2
  259. package/dist/scripts/9359-cc085d48a4-lite.chunk.js.map +0 -1
  260. package/dist/scripts/9399-2a314327ac-lite.chunk.js +0 -2
  261. package/dist/scripts/9399-2a314327ac-lite.chunk.js.map +0 -1
  262. package/dist/scripts/9620-f1d717b02b-lite.chunk.js +0 -3
  263. package/dist/scripts/9620-f1d717b02b-lite.chunk.js.map +0 -1
  264. package/dist/scripts/9719-cf7d4172b6-lite.chunk.js +0 -3
  265. package/dist/scripts/9719-cf7d4172b6-lite.chunk.js.map +0 -1
  266. package/dist/scripts/bundle-724fc2e388.min.js +0 -3
  267. package/dist/scripts/bundle-724fc2e388.min.js.map +0 -1
  268. /package/dist/css/{5143-lite-676baa8218.chunk.css → 1063-lite-676baa8218.chunk.css} +0 -0
  269. /package/dist/css/{9173-lite-b361d438f6.chunk.css → 1104-lite-b361d438f6.chunk.css} +0 -0
  270. /package/dist/css/{679-lite-00eb7dadb2.chunk.css → 2952-lite-00eb7dadb2.chunk.css} +0 -0
  271. /package/dist/css/{4860-lite-93d7fad455.chunk.css → 4063-lite-93d7fad455.chunk.css} +0 -0
  272. /package/dist/css/{9308-lite-a3c7435ba4.chunk.css → 4273-lite-a3c7435ba4.chunk.css} +0 -0
  273. /package/dist/css/{729-lite-93d7fad455.chunk.css → 4850-lite-93d7fad455.chunk.css} +0 -0
  274. /package/dist/css/{8766-lite-8c5d7658ec.chunk.css → 7163-lite-8c5d7658ec.chunk.css} +0 -0
  275. /package/dist/css/{1818-lite-5ef1706d69.chunk.css → 7234-lite-5ef1706d69.chunk.css} +0 -0
  276. /package/dist/css/{6415-lite-707657102b.chunk.css → 9173-lite-707657102b.chunk.css} +0 -0
  277. /package/dist/css/{1820-lite-c88eb54bee.chunk.css → 999-lite-c88eb54bee.chunk.css} +0 -0
  278. /package/dist/scripts/{1379-082bbab71a-lite.chunk.js.LICENSE.txt → 1104-f057c6dea1-lite.chunk.js.LICENSE.txt} +0 -0
  279. /package/dist/scripts/{1672-672f298d82-lite.chunk.js.LICENSE.txt → 1379-ca519ec56b-lite.chunk.js.LICENSE.txt} +0 -0
  280. /package/dist/scripts/{624-7ab5fb3f3b-lite.chunk.js.LICENSE.txt → 1672-0d1fc90529-lite.chunk.js.LICENSE.txt} +0 -0
  281. /package/dist/scripts/{8323-99cb03891e-lite.chunk.js.LICENSE.txt → 4273-e42f763f00-lite.chunk.js.LICENSE.txt} +0 -0
  282. /package/dist/scripts/{9173-2392d447a6-lite.chunk.js.LICENSE.txt → 624-09b51a9d32-lite.chunk.js.LICENSE.txt} +0 -0
  283. /package/dist/scripts/{9230-6dee40b1fb-lite.chunk.js.LICENSE.txt → 8323-360541a2a8-lite.chunk.js.LICENSE.txt} +0 -0
  284. /package/dist/scripts/{9016-0c078a39cb-lite.chunk.js.LICENSE.txt → 9016-82d7e0afb9-lite.chunk.js.LICENSE.txt} +0 -0
  285. /package/dist/scripts/{9308-362f86711f-lite.chunk.js.LICENSE.txt → 9230-ae200d2bd3-lite.chunk.js.LICENSE.txt} +0 -0
  286. /package/dist/scripts/{9395-90b87097fa-lite.chunk.js.LICENSE.txt → 9395-e1a02b01ce-lite.chunk.js.LICENSE.txt} +0 -0
  287. /package/dist/scripts/{9478-99486906b9-lite.chunk.js.LICENSE.txt → 9478-abfa7ed3cc-lite.chunk.js.LICENSE.txt} +0 -0
  288. /package/dist/scripts/{953-cbc7f0571e-lite.chunk.js.LICENSE.txt → 953-225db845ab-lite.chunk.js.LICENSE.txt} +0 -0
  289. /package/dist/scripts/{9620-f1d717b02b-lite.chunk.js.LICENSE.txt → 9620-95e6cc7b2b-lite.chunk.js.LICENSE.txt} +0 -0
  290. /package/dist/scripts/{9719-cf7d4172b6-lite.chunk.js.LICENSE.txt → 9719-9736913451-lite.chunk.js.LICENSE.txt} +0 -0
  291. /package/dist/scripts/{bundle-724fc2e388.min.js.LICENSE.txt → bundle-9f8729bedb.min.js.LICENSE.txt} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/9308-362f86711f-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/common/src/react/utils/PortalHelper.ts","file:///app/packages/libs/shared/src/apps/calendar/flight-request/CalendarRequests.ts","file:///app/packages/libs/shared/src/apps/subjects/components/audience-item/audience-item.scss","file:///app/packages/libs/shared/src/apps/subjects/components/audience-item/AudienceItem.tsx","file:///app/packages/libs/shared/src/apps/subjects/constants/DashboardStatusConfig.ts","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/dashboard-status-badge/dashboard-status-badge.scss","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/dashboard-status-badge/DashboardStatusBadge.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/preview-banner/preview-banner.scss","file:///app/packages/libs/shared/src/apps/subjects/components/preview-banner/PreviewBanner.tsx","file:///app/packages/libs/shared/src/apps/upload/utils/FileExtensionsHelper.ts","file:///app/packages/libs/shared/src/components/back-button/BackButton.tsx","file:///app/packages/libs/shared/src/components/banner-header/banner-header.scss","file:///app/packages/libs/shared/src/components/banner-header/BannerHeader.tsx","file:///app/packages/libs/shared/src/components/breadcrumbs/Breadcrumbs.tsx","file:///app/packages/libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx","file:///app/packages/libs/shared/src/components/table-of-contents-list/table-of-contents-list.scss","file:///app/packages/libs/shared/src/components/table-of-contents-list/TableOfContentsList.tsx","file:///app/packages/libs/shared/src/enums/FeedbackType.ts","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/flight-requests/FeedbackRequests.ts","file:///app/packages/libs/shared/src/flight-requests/FollowRequests.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/hooks/usePrevious.ts","file:///app/packages/libs/shared/src/hooks/useTableOfContentsActiveHeading.tsx","file:///app/packages/libs/shared/src/hooks/useTableOfContentsScroll.tsx","file:///app/packages/libs/shared/src/utils/FeedbackFormHelper.ts","file:///app/packages/projects/lite/src/apps/subjects/utils/ClassificationAppLinks.ts","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/classification-header-details/ClassificationHeaderDetails.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/empty-state/CuratedClassificationEmptyState.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/table-of-contents/table-of-contents.scss","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/table-of-contents/TableOfContents.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/teacher-only/TeacherOnlyEmptyState.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/classification-coming-soon/ClassificationComingSoon.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/audience-filter/AudienceFilter.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/audiences/ClassificationDashboardAudiences.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/classification-tabs/classification-tabs.scss","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/classification-tabs/ClassificationTabs.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/classification-dashboard-nav/ClassificationDashboardNav.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/ClassificationDashboard.tsx","file:///app/packages/libs/shared/src/apps/subjects/hooks/useGetTopicsWidgets.ts","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/partial-loading/PartialClassificationDashboard.tsx","file:///app/packages/projects/lite/src/apps/subjects/errors/TopicNotFoundError.ts","file:///app/packages/projects/lite/src/apps/subjects/views/classification/ClassificationViewUtils.ts","file:///app/packages/projects/lite/src/apps/subjects/views/classification/curated-classification-view.scss","file:///app/packages/projects/lite/src/apps/subjects/views/classification/CuratedClassificationView.tsx","file:///app/packages/projects/lite/src/apps/subjects/hooks/useFetchClassificationDashboard.ts","file:///app/packages/libs/shared/src/components/pill-tab-selector/pill-tab-selector.scss"],"sourcesContent":["import React from 'react';\nimport { createPortal } from 'react-dom';\n\nexport const PortalHelper = {\n renderInPortalIfExists(component: React.ReactElement, portalContainer: Element | null): React.ReactElement {\n if (portalContainer)\n return createPortal(component, portalContainer);\n\n return component;\n }\n};","import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarEvent, CalendarEventContentType } from 'libs/shared/interfaces';\n\nexport const CalendarRequests = {\n calendarEvents(\n from: string,\n to: string,\n presentationId: string\n ): Flight.PublicRequest {\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/discover/special-events/content', { from, to, presentationId }),\n publicUrl: UrlHelper.urlBuilder(`/api/discover/special-events/content`, { from, to, presentationId }),\n key: `presentation:${presentationId}:events:from:${from}:to${to}`\n };\n },\n\n nextTopicSpecialEvent(\n classificationId: string,\n presentationId: string\n ): Flight.PublicRequest {\n const params = {\n presentationId,\n limit: 1,\n from: DateHelper.format(new Date(), 'YYYY-MM-DD'),\n objectType: CalendarEventContentType.Classification\n };\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/discover/special-events/object/${classificationId}/next-events`, params),\n publicUrl: UrlHelper.urlBuilder(`/api/discover/special-events/object/${classificationId}/next-events`, params),\n key: `presentation:${presentationId}:events:classification:${classificationId}`,\n formatData: (events: CalendarEvent[]) => ArrayHelper.first(events)\n };\n }\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"disabled\":\"pERi4\",\"disabledHighlighted\":\"AxyWm\"};","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\nimport styles from './audience-item.scss';\n\nfunction lowerCaseToTitleCase(str: string): string {\n return str.split(' ').map((s: string) => s.charAt(0).toUpperCase() + s.substring(1)).join(' ');\n}\n\nfunction getColourClass(highlight: boolean, isDisabled: boolean): string {\n if (highlight) return isDisabled ? `${styles.disabledHighlighted} text-light` : 'bg-gray-900 text-light';\n if (isDisabled) return `${styles.disabled} text-secondary`;\n return 'bg-light';\n}\n\ninterface AudienceItemProps {\n audience: PresentationAudience;\n highlight: boolean;\n setAudience?: (audience: PresentationAudience, highlight: boolean) => void;\n isDisabled?: boolean;\n extraClasses?: string;\n}\n\nAudienceItem.defaultProps = {\n extraClasses: ''\n};\n\nexport function AudienceItem(props: AudienceItemProps): React.ReactElement {\n const { audience, highlight, setAudience, isDisabled, extraClasses } = props;\n\n const colourClass = getColourClass(highlight, isDisabled);\n const cursorClass = isDisabled ? 'cursor-default' : 'cursor-pointer';\n const className = `rounded-pill d-inline-block me-1 user-select-none ${cursorClass} ${colourClass} ${extraClasses}`;\n\n const onClick = () => {\n if (isDisabled || !FunctionHelper.isFunction(setAudience))\n return;\n\n setAudience(audience, !highlight);\n };\n\n return (\n <span\n className={className}\n onClick={onClick}\n role='checkbox'\n aria-checked={highlight}\n >\n {lowerCaseToTitleCase(audience.name)}\n </span>\n );\n}","import { localSvgs } from 'libs/shared/images/svg';\nimport { DashboardStatus } from 'libs/shared/interfaces/models/Dashboard';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\ninterface DashboardStatusConfigType {\n statusName: string;\n actionName: string;\n svgName: localSvgs;\n svgColorClassName: string;\n}\n\nexport const DashboardStatusConfig: Record<DashboardStatus, DashboardStatusConfigType> = {\n [DashboardStatus.Archived]: {\n svgName: cvSvgLibrary.Archive,\n svgColorClassName: 'text-secondary',\n actionName: 'Archive',\n statusName: 'Archived'\n },\n [DashboardStatus.Draft]: {\n svgName: cvSvgLibrary.Edit,\n svgColorClassName: '',\n actionName: 'Draft',\n statusName: 'Draft'\n },\n [DashboardStatus.Published]: {\n svgName: cvSvgLibrary.VisibleOn,\n svgColorClassName: 'text-success',\n actionName: 'Publish',\n statusName: 'Published'\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"badge\":\"ciO47\",\"draftLight\":\"A6Yi7\",\"draftDark\":\"fkXBX\",\"published\":\"Ovzwy\",\"archived\":\"r_dco\"};","import React from 'react';\n\nimport { DashboardStatusConfig } from 'libs/shared/apps/subjects/constants/DashboardStatusConfig';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { DashboardStatus } from 'libs/shared/interfaces';\n\nimport styles from './dashboard-status-badge.scss';\n\nfunction getClassName(props: DashboardStatusBadgeProps): string {\n let className = `rounded-pill d-flex align-items-center ps-2 py-1 fw-semibold ms-2 ${styles.badge}`;\n\n switch (props.status) {\n case DashboardStatus.Published:\n className += ` ${styles.published}`;\n break;\n case DashboardStatus.Archived:\n className += ` ${styles.archived}`;\n break;\n case DashboardStatus.Draft:\n className += ` ${props.darkMode ? styles.draftDark : styles.draftLight}`;\n break;\n }\n\n if (props.wrapperClassName)\n className += ` ${props.wrapperClassName}`;\n\n return className;\n}\n\ninterface DashboardStatusBadgeProps {\n status: DashboardStatus;\n darkMode?: boolean;\n wrapperClassName?: string;\n}\n\nexport function DashboardStatusBadge(props: DashboardStatusBadgeProps): JSX.Element {\n const { statusName, svgName } = DashboardStatusConfig[props.status];\n\n return (\n <div className={getClassName(props)}>\n <SvgContainer svgName={svgName} />\n <div>{statusName}</div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"stickyWrapper\":\"zhw6K\",\"badgeWrapper\":\"NOvn1\",\"badge\":\"pxQSR\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { DashboardStatusBadge } from 'libs/shared/apps/subjects/components/classification-dashboard/dashboard-status-badge/DashboardStatusBadge';\nimport { EmojiText } from 'libs/shared/components/emoji-text/EmojiText';\nimport { DashboardStatus } from 'libs/shared/interfaces';\n\nimport styles from './preview-banner.scss';\n\nconst namespace = 'shared.classificationPreviewBanner';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface PreviewBannerProps {\n status: DashboardStatus;\n type: 'company' | 'topic';\n}\n\nexport function PreviewBanner(props: PreviewBannerProps): JSX.Element {\n return (\n <div className={`${styles.stickyWrapper} py-2 d-flex justify-content-space-between bg-dark text-white mx-2 rounded`}>\n <div className={`position-absolute d-flex ${styles.badgeWrapper}`}>\n <DashboardStatusBadge status={props.status} wrapperClassName={`${styles.badge}`} darkMode />\n </div>\n <div className='flex-grow-1'>\n <h1 className='text-center my-3 h5'>\n <EmojiText emoji='👀' />\n {getPhrase(props.type === 'topic' ? 'topicTitle' : 'companyTitle')}\n </h1>\n </div>\n </div>\n );\n}\n","import * as _ from 'underscore';\n\n/**\n * This are kept as separate variables for when we eventually need a single group of them.\n * For example when we add image upload support.\n */\n\nconst pdfExtensions = ['pdf'];\nconst docExtensions = [ 'doc', 'docx', 'dotx', 'dot', 'rtf', 'docm', 'odt' ];\nconst textExtensions = [ 'csv', 'txt' ];\nconst excelExtensions = [ 'xls', 'xlt', 'xlsx' ];\nconst imageExtensions = [ 'jpg', 'tif', 'png', 'bmp', 'gif', 'jpeg' ];\nconst videoMimeType = 'video/*';\nconst archiveExtensions = [ 'zip', 'rar' ];\nconst powerPointExtensions = [ 'ppt', 'pot', 'pps', 'pptx' ];\n\nconst subtitleExtensions = ['srt'];\n\nconst FileExtensions = {\n IMAGES: `.${imageExtensions.join(',.')}`,\n VIDEO: videoMimeType,\n MIXED_MEDIA: `.${imageExtensions.join(',.')},${videoMimeType}`,\n RESOURCES: `.${[\n ...docExtensions,\n ...excelExtensions,\n ...powerPointExtensions,\n ...pdfExtensions,\n ...textExtensions,\n ...imageExtensions,\n ...archiveExtensions\n ].join(',.')}`,\n SUBTITLES: `.${subtitleExtensions.join(',.')}`\n};\n\nconst FileExtensionHelper = {\n getResourceType(extension: string): string {\n const ext = extension.toLowerCase();\n\n if (_.contains(docExtensions, ext)) return 'document';\n if (_.contains(excelExtensions, ext)) return 'excel';\n if (_.contains(powerPointExtensions, ext)) return 'powerpoint';\n if (_.contains(pdfExtensions, ext)) return 'pdf';\n\n if (_.contains(textExtensions, ext)) return 'text';\n if (_.contains(imageExtensions, ext)) return 'image';\n if (_.contains(archiveExtensions, ext)) return 'archive';\n if (_.contains(subtitleExtensions, ext)) return 'subtitle';\n\n return '';\n }\n};\n\nexport { FileExtensions, FileExtensionHelper };","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.backButton';\n\ninterface BackButtonProps {\n appLink: Core.AppLink;\n backToName?: string;\n color?: 'black' | 'white';\n extraClasses?: string;\n /**\n * Whether or not the button text has a text shadow. Defaults to true\n */\n textShadow?: boolean;\n}\n\nBackButton.defaultProps = {\n color: 'black',\n extraClasses: ''\n};\n\nexport function BackButton(props: BackButtonProps): React.ReactElement {\n const { backToName, appLink, color, extraClasses, textShadow } = {\n textShadow: true,\n ...props\n };\n\n const backPhrase = backToName\n ? LanguageService.getPhrase(namespace, 'backTo', { backToName })\n : LanguageService.getPhrase(namespace, 'back');\n\n const colorClass = color === 'black' ? '' : 'text-white';\n const textShadowClass = textShadow ? 'text-shadow' : '';\n\n return (\n <AppLink\n appLink={appLink}\n className={`d-inline-flex align-items-center h5 mb-0 ${extraClasses} ${colorClass} ${textShadowClass}`}\n >\n <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Medium} />\n <span className='ms-1'>{backPhrase}</span>\n </AppLink>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"bannerContent\":\"sSCTB\",\"actionsContainer\":\"Z5WI2\",\"bannerContentWithLogo\":\"rgs7Q\",\"container\":\"M51HJ\",\"logoContainer\":\"vkeJk\",\"logoContainerLeft\":\"M3U9B\",\"logoHeading\":\"EtRwC\",\"specialEventContainer\":\"rOxDc\",\"headingLarge\":\"_8pnV\",\"heading\":\"JXVBH\"};","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { PortalHelper } from 'libs/common/react/utils/PortalHelper';\n\nimport { ComingSoonTag } from 'libs/shared/apps/calendar/components/coming-soon-tag/ComingSoonTag';\nimport { GenericCalendarDate } from 'libs/shared/apps/calendar/components/generic-calendar-date/GenericCalendarDate';\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { BackButton } from 'libs/shared/components/back-button/BackButton';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ImageMinDimensions } from 'libs/shared/constants/ImageSizes';\nimport { BannerPortalContext } from 'libs/shared/context/BannerPortalContext';\nimport { ImageSize, ImageType, ResizeType } from 'libs/shared/enums/Images';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Banner, CalendarEvent, Logo } from 'libs/shared/interfaces';\nimport { ImageHelper, ImageOptions } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './banner-header.scss';\n\nconst RATIO = `${ImageMinDimensions[ImageType.Banners].width}:${ImageMinDimensions[ImageType.Banners].height}`;\nconst DEFAULT_WIDTH = 1200; // This is ImageSize.Large for a Banner.\nconst LARGE_SCREEN_WIDTH = 1920;\n\nfunction useGetImageWidth(): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xxl)\n return LARGE_SCREEN_WIDTH;\n\n return DEFAULT_WIDTH;\n}\n\nfunction getSizeClass(heading: string): string {\n if (heading.length < 160)\n return 'h1';\n\n return styles.headingLarge;\n}\n\ninterface BannerHeaderProps {\n heading: string;\n banner?: Banner;\n bannerClassName?: string;\n imageCdnUrl?: string;\n logo?: Logo;\n actions?: ActionOptions[];\n specialEvent?: CalendarEvent;\n backButtonAppLink?: Core.AppLink;\n backButtonText?: string;\n backButtonClasses?: string;\n sortComponent?: JSX.Element;\n blockColourClass?: string;\n actionsDropdownClassName?: string;\n detailsComponent?: () => React.ReactElement;\n imageOptions?: ImageOptions;\n showComingSoon?: boolean;\n alignLogoLeft?: boolean;\n calendarTheme?: CalendarTheme;\n}\n\nconst namespace = 'shared.bannerHeader';\n\nexport const BannerHeader = React.memo(function(props: React.PropsWithChildren<BannerHeaderProps>): React.ReactElement {\n const { heading, banner, imageCdnUrl, actions, sortComponent, blockColourClass, specialEvent } = props;\n\n const portalContainerContext = React.useContext(BannerPortalContext);\n\n const imageWidth = useGetImageWidth();\n\n const specialEventIsToday = React.useMemo(() => {\n if (!specialEvent || props.showComingSoon)\n return false;\n\n const today = DateHelper.format(new Date(), 'YYYY-MM-DD');\n\n if (!specialEvent.endDate)\n return specialEvent.startDate === today;\n\n return specialEvent.startDate <= today && specialEvent.endDate >= today;\n }, [specialEvent]);\n\n const imageOptions = props.imageOptions || {\n width: imageWidth,\n ratio: RATIO,\n resizeType: ResizeType.Cover\n };\n\n const url = !!banner && !!imageCdnUrl && ImageHelper.createBannerUrl(banner, {\n fallbackBaseUrl: imageCdnUrl,\n fallbackCategoryName: heading,\n type: ImageType.Banners\n }, imageOptions);\n\n const containerProps: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> = {\n className: `banner banner-header ${props.bannerClassName}`,\n style: url ? { backgroundImage: `url('${url}')` } : {}\n };\n\n if (!banner && blockColourClass) {\n delete containerProps.style;\n containerProps.className += ` ${blockColourClass}`;\n }\n\n const DetailsComponent = props.detailsComponent;\n\n return PortalHelper.renderInPortalIfExists(\n // \"banner\" is used in playlists in Online. banner-header is used by all other projects\n <header {...containerProps}>\n <div className={`container ${styles.container} position-relative inner-banner`}>\n {props.backButtonAppLink && (\n <div className='pt-3'>\n <BackButton\n appLink={props.backButtonAppLink}\n backToName={props.backButtonText}\n extraClasses={props.backButtonClasses}\n color='white'\n />\n </div>\n )}\n \n <div className={`${props.alignLogoLeft ? 'position-absolute top-50 start-0 translate-middle-y w-100 ps-4' : `${styles.bannerContent} px-2 ${props.logo?.url ? styles.bannerContentWithLogo : ''}`}`}>\n {!!specialEvent && (\n <div className={`position-relative ${styles.specialEventContainer}`}>\n <GenericCalendarDate\n body={{\n type: specialEvent.endDate ? 'range' : 'day',\n text: specialEvent.endDate\n ? `${DateHelper.format(specialEvent.startDate, 'DD')}-${DateHelper.format(specialEvent.endDate, 'DD')}`\n : DateHelper.format(specialEvent.startDate, 'DD')\n }}\n month={DateHelper.format(specialEvent.startDate, 'MMMM')}\n theme={props.calendarTheme}\n />\n </div>\n )}\n <div>\n {specialEventIsToday && (\n <div className='rounded-pill py-1 px-2 my-1 me-1 fw-semibold bg-light-blue lh-1 d-inline-block'>\n <Text namespace={namespace} phrase='onToday' />\n </div>\n )}\n {props.showComingSoon && (\n <ComingSoonTag className='pe-2 fw-semibold mb-1 rounded-pill justify-content-start text-nowrap' />\n )}\n <div className='d-flex align-items-center'>\n {props.alignLogoLeft &&\n <div className={`${styles.logoContainerLeft} d-none d-md-block partial-loading-background rounded-circle overflow-hidden me-3`}>\n {props.logo?.url &&\n <LazyImage src={ImageHelper.createUrl(props.logo?.url, { size: ImageSize.Medium })} />}\n </div>\n }\n <h1 className={`text-white text-shadow pe-3 position-static ${styles.heading} ${getSizeClass(heading)} ${props.alignLogoLeft ? 'w-50' : ''}`}>\n {heading}\n {DetailsComponent && <DetailsComponent />}\n </h1>\n </div>\n </div>\n {!!actions && (\n <div className={styles.actionsContainer}>\n <Actions\n actions={actions}\n sortComponent={sortComponent}\n actionsDropdownClassName={props.actionsDropdownClassName}\n />\n </div>\n )}\n </div>\n {!props.alignLogoLeft && !!props.logo?.url &&\n <div className={styles.logoContainer}>\n <img\n src={ImageHelper.createUrl(props.logo.url, { size: ImageSize.Small })}\n className='rounded-circle'\n />\n </div>\n }\n </div>\n </header>,\n portalContainerContext?.container\n );\n}, (prevProps, nextProps): boolean => (\n prevProps.actions === nextProps.actions\n && prevProps.heading === nextProps.heading\n && prevProps.logo?.url === nextProps.logo?.url\n));\n\nexport function PartialBannerHeader(): JSX.Element {\n const portalContainerContext = React.useContext(BannerPortalContext);\n\n return PortalHelper.renderInPortalIfExists(\n <div className={`partial-banner partial-loading-background ${styles.banner}`} />,\n portalContainerContext?.container\n );\n}","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { PartialLoadingHelper } from 'libs/shared/utils/PartialLoadingHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { SvgContainer, SvgContainerSize } from '../svg-container/SvgContainer';\n\nexport interface Breadcrumb {\n name: string;\n appLink?: Core.AppLink;\n active?: boolean;\n}\n\ninterface BreadcrumbItemProps {\n breadcrumb: Breadcrumb;\n withBackIcon?: boolean;\n}\n\nexport const BreadcrumbItem = ({ breadcrumb: { name, appLink, active }, withBackIcon }: BreadcrumbItemProps) => (\n <li className={`breadcrumb-item${active ? ' active' : ''}`}>\n {active\n ? <strong>{name}</strong>\n : <AppLink appLink={appLink}>\n {withBackIcon && <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Small} />}\n <span className={withBackIcon ? 'ms-2' : ''}>{name}</span>\n </AppLink>\n }\n </li>\n);\n\ninterface BreadcrumbsProps {\n breadcrumbs: Breadcrumb[];\n}\n\nexport const Breadcrumbs = ({ breadcrumbs }: BreadcrumbsProps) => {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n const length = breadcrumbs?.length;\n\n if (!length || (isMobile && length < 2))\n return <></>;\n\n if (isMobile)\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} withBackIcon />\n </ol>\n </nav>\n );\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {breadcrumbs.map((b, idx) => <BreadcrumbItem key={idx} breadcrumb={b} />)}\n </ol>\n </nav>\n );\n};\n\nexport const PartialBreadcrumbs = React.memo(function({ numItems = 3 }: { numItems?: number; }) {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n if (isMobile) {\n return (\n <div className='partial-loading-background' style={{ height: '1.3125rem', width: '6rem' }} />\n );\n }\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {PartialLoadingHelper.getPartialLoadingItems({ numItems }).map(({ width }, idx) => (\n <li key={idx} className='breadcrumb-item'>\n <span className='d-inline-block partial-loading-background' style={{ width }} dangerouslySetInnerHTML={{ __html: '&nbsp' }} />\n </li>\n ))}\n </ol>\n </nav>\n );\n});","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport { SvgContainer } from '../svg-container/SvgContainer';\n\nimport styles from './pill-tab-selector.scss';\n\ninterface TabContentsProps {\n tab: PillTab;\n}\n\nfunction TabContents(props: TabContentsProps): JSX.Element {\n return (\n <>\n {!!props.tab.svgName && (\n <div className={props.tab.name ? 'pe-1' : ''}>\n <SvgContainer svgName={props.tab.svgName} />\n </div>\n )}\n\n {props.tab.name}\n\n {typeof (props.tab.count) === 'number' && (\n <div className='ps-2'>\n <Badge type={BadgeType.Count} data={props.tab.count} />\n </div>\n )}\n </>\n );\n}\n\nexport interface PillTab {\n name: string;\n active: boolean;\n svgName?: string;\n\n className?: string;\n\n appLink?: Core.AppLink;\n onSelect?: () => void;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n count?: number;\n}\n\ninterface PillTabSelectorProps {\n tabs: PillTab[];\n containerRef?: (el: HTMLElement) => void;\n listClassName?: string;\n className?: string;\n borderRadius?: 'sm' | 'lg'\n}\n\nPillTabSelector.defaultProps = {\n borderRadius: 'lg'\n};\n\nexport function PillTabSelector(props: PillTabSelectorProps): JSX.Element {\n function onSelectTab(tab: PillTab): void {\n if (tab.active || !tab.onSelect)\n return;\n\n tab.onSelect();\n\n if (tab.analyticsData && tab.analyticsOptions)\n AnalyticsHelper.logUserAction(tab.analyticsData, tab.analyticsOptions);\n }\n\n return (\n <nav className={props.className ?? ''} ref={props.containerRef}>\n <ul className={`\n list-unstyled d-inline-block m-0 ${styles.pillTabSelector}\n ${props.borderRadius ? styles.radiusSmall : ''}\n ${props.listClassName}\n `}>\n {props.tabs.map((tab, index) => {\n return (\n <li\n className={`\n p-0 ${styles.tab} ${tab.active ? 'btn btn-dark' : 'btn btn-outline-dark'}\n ${tab.name ? styles.minWidth : ''} ${tab.className}\n `}\n key={index}\n >\n {tab.appLink ? (\n <AppLink\n appLink={tab.appLink}\n analyticsData={tab.analyticsData}\n analyticsOptions={tab.analyticsOptions}\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n >\n <TabContents tab={tab} />\n </AppLink>\n ) : (\n <DivButton\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset p-2 text-nowrap ${styles.tabLink}\n `}\n onClick={() => onSelectTab(tab)}\n >\n <TabContents tab={tab} />\n </DivButton>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"itemsWrapper\":\"m6mGm\",\"anchorWrapper\":\"QptZj\",\"default\":\"_AZa8\",\"selectedItem\":\"Nuiel\",\"disabled\":\"WIzWJ\",\"floatIcon\":\"ARudn\",\"arrowIcon\":\"tEF5Q\",\"listIcon\":\"Ql2wi\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\n\nimport { EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport styles from './table-of-contents-list.scss';\n\nexport interface TableOfContentsItem<T=string> {\n name: string;\n id: T;\n}\n\ninterface TableOfContentsProps<T> {\n items: TableOfContentsItem<T>[];\n activeId: string;\n appLink?: Core.AppLink;\n analyticsData?: HashObject;\n setControlledId: (arg: string) => void;\n // set to true if the TOC is controlled by a local state rather than query params\n localState?: boolean;\n getAppLink?: (args: TableOfContentsItem<T>) => Core.AppLink;\n onItemClick?: (args: TableOfContentsItem<T>) => void;\n}\n\nexport function TableOfContentsList<T extends string>(props: TableOfContentsProps<T>): JSX.Element {\n const analyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.Widget,\n location: LocationContext.TableOfContents\n };\n\n return (\n <div className={`${styles.itemsWrapper}`}>\n {props.items.map((item, idx) => {\n if (props.localState) {\n return (\n <DivButton\n key={item.id}\n className={`${styles.anchorWrapper} ${props.activeId === item.id ? styles.selectedItem : ''}`}\n onClick={() => {\n ScrollHelper.preventScrollTop();\n props.setControlledId(item.id);\n\n props.onItemClick?.(item);\n }}\n >\n <div className={`${!props.activeId && idx === 0 ? styles.default : ''} `}>\n {item.name}\n </div>\n </DivButton>\n );\n }\n\n return (\n <AppLink\n key={item.id}\n appLink={props.getAppLink(item)}\n appLinkOptions={{ replace: true }}\n className={`${styles.anchorWrapper} ${props.activeId === item.id ? styles.selectedItem : ''}`}\n onClick={() => {\n ScrollHelper.preventScrollTop();\n props.setControlledId(item.id);\n\n props.onItemClick?.(item);\n }}\n analyticsData={{\n ...props.analyticsData,\n id: item.id,\n name: item.name\n }}\n analyticsOptions={analyticsOptions}\n >\n <div className={`${!props.activeId && idx === 0 ? styles.default : ''} `}>\n {item.name}\n </div>\n </AppLink>\n );\n })}\n </div>\n );\n}","export enum FeedbackType {\n Other,\n SuggestImprovement,\n ReportBug,\n RequestVideo,\n RaiseIssue,\n GivePraise,\n Footer,\n RequestLivestream\n}","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/react/index';\n\nimport { FeedbackFormRequest } from 'libs/shared/interfaces/requests/FeedbackFormRequest';\n\nexport const FeedbackRequests = {\n submitFeedback(requestData: FeedbackFormRequest, formValues: Record<string, string>): Flight.Request {\n return {\n url: '{gateway}/v1/feedback',\n key: 'submit:feedback',\n type: HttpVerbs.POST,\n data: {\n ...requestData,\n ...formValues\n }\n };\n }\n};","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nconst endpoints = {\n follow: () => `/api/domain/v1/subjects/classifications/following`,\n unfollow: (ids: string[]) => UrlHelper.urlBuilder('/api/domain/v1/subjects/classifications/following', { id: ids })\n};\n\nexport const FollowRequests = {\n /**\n * @param data - array of object ids the user is going to follow\n */\n follow(\n ids: string[],\n userId: string,\n success?: (data: string[]) => void,\n error?: () => void\n ): Flight.Request {\n return {\n url: endpoints.follow(),\n key: `follow:${ids.join(',')}`,\n type: HttpVerbs.POST,\n data: ids,\n formatData: () => {\n return ids.map(id => ({\n id,\n followers: {\n data: [userId]\n }\n }));\n },\n success,\n error,\n invalidationKeys: [ ...ids.map(id => `classification:${id}`), 'my:subject:preferences', 'classifications' ]\n };\n },\n\n unfollow(ids: string[], userId: string, success?: () => void, error?: () => void): Flight.Request {\n return {\n url: endpoints.unfollow(ids),\n key: `unfollow:${ids.join(',')}`,\n type: HttpVerbs.DELETE,\n formatData: () => {\n return ids.map(id => ({\n id,\n followers: {\n data: []\n }\n }));\n },\n success,\n error,\n invalidationKeys: [ ...ids.map(id => `classification:${id}`), 'my:subject:preferences', 'classifications' ]\n };\n }\n};\n","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import React from 'react';\n\n// https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state\nexport function usePrevious<T>(value: T): T {\n const ref = React.useRef<T>();\n React.useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n}","import React from 'react';\n\ntype TableOfContentsActiveOption = {\n setActiveId: (id: string) => void;\n headingElements: Element[];\n controlledId?: string;\n setControlledId?: (arg: string) => void;\n}\n\nlet timer: number;\n\nexport const useTableOfContentsActiveHeading = (\n { setActiveId, headingElements, controlledId, setControlledId }: TableOfContentsActiveOption\n) => {\n const scrollPositionRef = React.useRef(0);\n\n React.useEffect(() => {\n const callback = (headings: IntersectionObserverEntry[]) => {\n headings.forEach(heading => {\n if (controlledId) {\n setActiveId(controlledId);\n // can use scrollEnd event when the new event type is supported\n timer = window.setTimeout(() => {\n setControlledId('');\n }, 800);\n return;\n }\n if (heading.isIntersecting) {\n setActiveId(heading.target.id);\n scrollPositionRef.current = window.scrollY;\n } else {\n const scrollDistance = scrollPositionRef.current - window.scrollY;\n const isScrollingUp = scrollDistance > 0;\n const curIndex = headingElements.findIndex(h => h.id === heading.target.id);\n const prevHeading = headingElements[curIndex - 1];\n if (isScrollingUp && prevHeading?.id) {\n setActiveId(prevHeading?.id);\n }\n }\n });\n };\n\n const observer = new IntersectionObserver(callback, {\n // rootMargin top: same as the cv-nav-height\n rootMargin: '-67px 0px -80% 0px'\n });\n\n headingElements.forEach(element => observer.observe(element));\n\n return () => {\n timer && window.clearTimeout(timer);\n observer.disconnect();\n };\n }, [ setActiveId, headingElements.length, controlledId ]);\n};\n\n","import React from 'react';\n\nimport { usePrevious } from './usePrevious';\n\nconst HEADER_OFFSET = 80; // Size of header + some extra spacing\n\nexport const useTableOfContentsScroll = (elements: Element[], activeId: string) => {\n const [ hasDoneInitialScroll, setHasDoneInitialScroll ] = React.useState(false);\n\n const previousId = usePrevious(activeId);\n const currentId = activeId;\n\n React.useLayoutEffect(() => {\n if (!hasDoneInitialScroll || previousId !== currentId) {\n const target = elements.find(heading => heading && (heading?.id === currentId));\n\n if (target) {\n const rec = target.getBoundingClientRect();\n\n window.scrollBy({\n top: rec.top - HEADER_OFFSET,\n behavior: 'smooth'\n });\n \n if (!hasDoneInitialScroll)\n setHasDoneInitialScroll(true);\n }\n }\n }, [ elements, previousId, currentId, hasDoneInitialScroll ]);\n};","import Dropzone from 'dropzone';\n\nimport { UploadItem } from 'libs/shared/apps/upload/services/UploadService';\nimport { FileExtensions } from 'libs/shared/apps/upload/utils/FileExtensionsHelper';\nimport { InstanceRegion } from 'libs/shared/enums/InstanceRegion';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { UserRole } from 'libs/shared/enums/UserRole';\nimport { CurrentUser, Customer } from 'libs/shared/interfaces';\nimport { FeedbackUserDetails } from 'libs/shared/interfaces/requests/FeedbackFormRequest';\n\nexport const FeedbackFormHelper = {\n getUserInfo: (\n currentUser: CurrentUser,\n customer: Customer\n ): FeedbackUserDetails => {\n return {\n id: currentUser.id,\n username: currentUser.username,\n email: currentUser.email,\n userType: currentUser.role === UserRole.Admin ? 'Admin' : 'Staff',\n customerId: currentUser.customerId,\n cvcId: customer.crmId,\n customerName: customer.name,\n instanceRegion: currentUser.instanceRegion,\n contentRegion: currentUser.contentRegion,\n firstName: currentUser.givenName,\n lastName: currentUser.familyName\n };\n },\n\n mapInstanceRegionToTag: (instanceRegion: InstanceRegion): string => {\n switch (instanceRegion) {\n case InstanceRegion.AU:\n return 'au';\n case InstanceRegion.NZ:\n return 'nz';\n case InstanceRegion.UK:\n return 'uk';\n case InstanceRegion.US:\n return 'us';\n }\n },\n\n getTags: (currentUser: CurrentUser, product: ProductId, hasStudentExperience: boolean, extraTags: string[]) => {\n const tags = [\n product,\n ...extraTags\n ];\n\n tags.push(hasStudentExperience ? 'student' : 'staff');\n \n if (currentUser.role === UserRole.Admin)\n tags.push('administrator');\n \n const regionTag = FeedbackFormHelper.mapInstanceRegionToTag(currentUser.instanceRegion);\n \n if (regionTag)\n tags.push(regionTag);\n\n return tags;\n },\n\n categorizeFiles(files: UploadItem[]) {\n return files.reduce((result, file) => {\n const fileInfo = file.get('fileInfo');\n if (Dropzone.isValidFile(file.get('file'), FileExtensions.VIDEO)) {\n result.videoUrls.push(fileInfo?.url);\n } else {\n result.imageUrls.push(fileInfo?.url);\n }\n return result;\n }, {\n imageUrls: [],\n videoUrls: []\n });\n }\n};","import { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { Classification, Playlist } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { ClassificationAppLinkHelper } from 'shared/utils/ClassificationAppLinkHelper';\n\nexport const getClassificationAppLink = (params?: HashObject) =>\n (classification?: Classification): Core.AppLink => {\n if (!classification?.id)\n return null;\n\n return ClassificationAppLinkHelper.getAppLink(classification, params || {});\n };\n\nexport const getPlaylistAppLink = (playlist: Playlist, classificationId: string): Core.AppLink => ({\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.PLAYLIST,\n args: [ playlist.id, TextHelper.slugify(playlist.name) ],\n params: { classificationId }\n});\n\nexport const getAllTopicsAppLink = (presentationId?: string): Core.AppLink => ({\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.CLASSIFICATION_ALL,\n params: presentationId ? { presentationId } : {}\n});","import React from 'react';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ClassificationCounts } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { Classification } from 'libs/shared/interfaces';\n\nconst namespace = 'subject.classificationHeaderDetails';\n\nconst Separator = ({ className }: { className: string }) =>\n <span className={className}>&bull;</span>;\n\ninterface ClassificationHeaderDetailsProps {\n classification: Classification & ClassificationCounts;\n}\n\nexport function ClassificationHeaderDetails(props: ClassificationHeaderDetailsProps): React.ReactElement {\n // TODO: read counts from classification metadata and externalMetadata when data has been cleaned up \n const { childDashboardVideoCount, childDashboardResourceCount, childClassificationCount } = props.classification;\n\n return (\n <p className='mb-n1 font-size-normal fw-normal mt-1'>\n {!!childClassificationCount && (\n <Text namespace={namespace} phrase='topics' options={{ smartCount: childClassificationCount }} />\n )}\n {!!childDashboardVideoCount && (\n <>\n <Separator className='mx-2' />\n <Text namespace={namespace} phrase='videos' options={{ smartCount: childDashboardVideoCount }} />\n </>\n )}\n {!!childDashboardResourceCount && (\n <>\n <Separator className='mx-2' />\n <Text namespace={namespace} phrase='resources' options={{ smartCount: childDashboardResourceCount }} />\n </>\n )}\n </p>\n );\n}","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';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { CuratedDashboard, DashboardStatus } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'subjects.curatedClassificationEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CuratedClassificationEmptyStateProps {\n dashboard: CuratedDashboard;\n imageUrl: string;\n isReadonly: boolean;\n addWidgetApplink?: () => Core.AppLink;\n}\n\nexport function CuratedClassificationEmptyState(props: CuratedClassificationEmptyStateProps): JSX.Element {\n const isArchived = props.dashboard?.status === DashboardStatus.Archived;\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} altText={getPhrase('headingForNP')} />\n {!props.isReadonly ? (\n <EmptyState.Heading>\n <Text phrase='headingForNP' />\n </EmptyState.Heading>\n ) : (\n <>\n <EmptyState.Heading>\n <Text namespace={namespace} phrase='headingForCurator' />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='info' />\n </EmptyState.Info>\n <Tooltip title={isArchived ? LanguageService.getPhrase(namespace, 'archivedCtaTooltip') : ''} spanHack>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'add')}\n appLink={props.addWidgetApplink?.()}\n className='btn btn-dark'\n icon={cvSvgLibrary.Plus}\n disabled={isArchived}\n />\n </Tooltip>\n </>\n )}\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"k1iOO\",\"mobile\":\"QwoBj\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { TableOfContentsList } from 'libs/shared/components/table-of-contents-list/TableOfContentsList';\nimport { CuratedWidget } from 'libs/shared/interfaces';\nimport { ContextService } from 'libs/shared/services/ContextService';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './table-of-contents.scss';\n\ninterface TableOfContentsContainerProps {\n widgets: CuratedWidget[];\n title: string;\n activeId: string;\n appLink?: Core.AppLink;\n clickable?: boolean;\n analyticsData?: HashObject;\n setControlledId: (arg: string) => void;\n isSmallScreen?: boolean;\n}\ninterface TableOfContentsProps extends TableOfContentsContainerProps {\n getAppLink: (widget: CuratedWidget) => Core.AppLink\n}\n\nfunction TableOfContentsMobile(props: TableOfContentsProps) {\n const [ isExpanded, setIsExpanded ] = React.useState(false);\n\n function logUserAction() {\n const analyticsOptions = {\n actionType: !isExpanded ? UserAction.Open : UserAction.Hide,\n entity: EntityType.TableOfContents,\n location: LocationContext.Dashboard\n };\n\n AnalyticsHelper.logUserAction(props.analyticsData, analyticsOptions);\n }\n\n function onClickIcon() {\n setIsExpanded(!isExpanded);\n logUserAction();\n }\n\n return (\n <div className={`${styles.mobile} d-inline-flex gap-1`}>\n \n {isExpanded && (\n <div className='bg-white px-3 pt-3 pb-2 border border-dark rounded-1 ps-3'>\n <h2 className='h5'>{props.title}</h2>\n <TableOfContentsList\n items={props.widgets}\n activeId={props.activeId}\n appLink={props.appLink}\n analyticsData={props.analyticsData}\n setControlledId={props.setControlledId}\n getAppLink={props.getAppLink}\n onItemClick={() => setIsExpanded(false)}\n />\n </div>\n )}\n <div className={styles.container}>\n <IconButton\n className='btn btn-outline-dark'\n svgName={cvSvgLibrary.TableOfContents}\n onClick={onClickIcon}\n />\n </div>\n </div>\n );\n}\n\nfunction TableOfContents(props: TableOfContentsProps): JSX.Element {\n return (\n <aside className='col-3'>\n <div className={`${styles.container} ps-3`}>\n <h2 className='h5'>{props.title}</h2>\n \n <TableOfContentsList\n items={props.widgets}\n activeId={props.activeId}\n appLink={props.appLink}\n analyticsData={props.analyticsData}\n setControlledId={props.setControlledId}\n getAppLink={props.getAppLink}\n />\n </div>\n </aside>\n );\n}\n\nexport function TableOfContentsContainer(props: TableOfContentsContainerProps): JSX.Element {\n function getAppLink(widget: CuratedWidget): Core.AppLink {\n const currentAppLink = ContextService.getCurrentRoute().appLink;\n \n const params: HashObject = currentAppLink.params\n ? { ...(currentAppLink.params as HashObject) }\n : {};\n\n params.tocId = widget.id;\n\n return {\n ...currentAppLink,\n params\n };\n }\n\n return (\n <>\n {!props.isSmallScreen\n ? <TableOfContents {...props} getAppLink={getAppLink} />\n : <TableOfContentsMobile {...props} getAppLink={getAppLink} />\n }\n </>\n );\n}","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';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'subjects.teacherOnlyEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface TeacherOnlyEmptyStateProps {\n imageUrl: string;\n ctaAppLink?: () => Core.AppLink;\n}\n\nexport function TeacherOnlyEmptyState(props: TeacherOnlyEmptyStateProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} altText={getPhrase('heading')} />\n <EmptyState.Heading>\n <Text phrase='heading' />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text phrase='info' />\n </EmptyState.Info>\n\n <EmptyState.Cta\n text={getPhrase('cta')}\n appLink={props.ctaAppLink?.()}\n className='btn btn-dark'\n />\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ActionButton } from 'libs/shared/components/actions/ActionButton';\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { Classification } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'subjects.classificationComingSoon';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ComingSoonProps {\n data: Classification;\n onToggleFollow?: () => void;\n canFollowSubjects: boolean;\n imageUrl: string;\n showFollowButtonSpinner: boolean;\n}\n\nexport function ClassificationComingSoon(props: ComingSoonProps): JSX.Element {\n const isFollowing = !!props.data.followers?.data?.length;\n function onClick(): void {\n props.onToggleFollow?.();\n }\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState className='pt-0'>\n <EmptyState.Image src={props.imageUrl} altText={getPhrase('comingSoon')} />\n\n <EmptyState.Heading>\n <Text phrase='comingSoon' />\n </EmptyState.Heading>\n\n <EmptyState.Info>\n <Text phrase='info' />\n </EmptyState.Info>\n\n {props.canFollowSubjects && (\n <ActionButton\n svgName={isFollowing ? cvSvgLibrary.BellFilled : cvSvgLibrary.Bell}\n onClick={onClick}\n showSpinner={props.showFollowButtonSpinner}\n className={`btn follow-btn me-2 ${isFollowing ? 'btn-outline-dark' : 'btn-dark'}`}\n >\n <Text phrase={isFollowing ? 'following' : 'follow'} />\n </ActionButton>\n )}\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n","import * as React from 'react';\n\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Core } from 'libs/common/core';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AudienceItem } from 'libs/shared/apps/subjects/components/audience-item/AudienceItem';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { PresentationAudience } from 'libs/shared/interfaces';\nimport { PartialLoadingHelper } from 'libs/shared/utils/PartialLoadingHelper';\n\nconst namespace = 'subjects.audienceFilter';\n\ninterface AudienceFilterProps {\n audiences: PresentationAudience[];\n activeAudiences?: PresentationAudience[];\n disabled?: boolean;\n appLink: Core.AppLink;\n disablePersist?: boolean;\n}\n\nexport function AudienceFilter(props: AudienceFilterProps): React.ReactElement {\n const { audiences, activeAudiences, appLink } = props;\n\n const isDisabled = props.disabled || !appLink;\n\n const [ , setActiveAudiences ] = useViewModel<PresentationAudience[]>(\n SharedViewModelKeys.AUDIENCE_FILTER,\n undefined,\n { storage: StorageType.SessionStorage }\n );\n\n React.useEffect(() => {\n if (!props.disablePersist)\n setActiveAudiences(activeAudiences);\n }, [activeAudiences]);\n\n function onToggleAudience(audience: PresentationAudience, isSelected: boolean): void {\n if (isDisabled)\n return;\n\n const activeAudienceNames = isSelected\n ? [ ...(activeAudiences?.map(a => a.name) ?? []), audience.name ]\n : activeAudiences.map(a => a.name).filter(name => name !== audience.name);\n\n const getParams = () => {\n const otherParams = ObjectHelper.omit(appLink.params, ['a']);\n\n if (!activeAudienceNames.length)\n return otherParams;\n\n return Object.assign({}, otherParams, { a: activeAudienceNames });\n };\n\n Core.AppLinkHelper.trigger({\n ...appLink,\n params: getParams()\n }, { replace: true });\n }\n\n function onClickClearAudiences(): void {\n if (isDisabled)\n return;\n\n const params = ObjectHelper.omit(appLink.params, ['a']);\n\n Core.AppLinkHelper.trigger({\n ...appLink,\n params\n }, { replace: true });\n }\n\n if (!audiences || !audiences.length)\n return <></>;\n\n return (\n <div className='d-flex flex-wrap row-gap-2'>\n {audiences.map((a: PresentationAudience) => (\n <AudienceItem\n key={a.masterId}\n audience={a}\n highlight={!isDisabled && !!activeAudiences?.find(aa => aa.masterId === a.masterId)}\n setAudience={onToggleAudience}\n isDisabled={isDisabled}\n />\n ))}\n {(!isDisabled && !!activeAudiences && !!Object.keys(activeAudiences).length) && (\n <DivButton className='info-link d-inline-block ms-1' onClick={onClickClearAudiences}>\n <Text namespace={namespace} phrase='clear' />\n </DivButton>\n )}\n </div>\n );\n}\n\nconst PARTIAL_AUDIENCES = PartialLoadingHelper.getPartialLoadingItems({ numItems: 6 });\n\nexport const PartialAudienceFilter = () => (\n <div className={'d-flex flex-wrap row-gap-2'}>\n {PARTIAL_AUDIENCES.map(({ width }, idx) => (\n <span\n key={idx}\n className='rounded-pill partial-loading-background me-1'\n dangerouslySetInnerHTML={{ __html: '&nbsp' }}\n style={{ width }}\n />\n ))}\n </div>\n);","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AudienceFilter } from 'libs/shared/apps/subjects/components/audience-filter/AudienceFilter';\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\ninterface ClassificationDashboardAudiencesProps {\n audiences: PresentationAudience[];\n activeAudiences: PresentationAudience[];\n appLink: Core.AppLink;\n isReadonly: boolean;\n disablePersist: boolean;\n}\n\nexport function ClassificationDashboardAudiences(props: ClassificationDashboardAudiencesProps): JSX.Element {\n return (\n <AudienceFilter\n audiences={props.audiences}\n activeAudiences={props.activeAudiences}\n disabled={props.isReadonly}\n appLink={props.appLink}\n disablePersist={props.disablePersist}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"curatedTopicTab\":\"CmVlO\",\"tabTransition\":\"rX31t\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PillTab, PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { WidgetAppLinks } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { useProductTipsContext } from 'libs/shared/context/product-tips-context/ProductTipsContext';\nimport { Breakpoints, useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classification, Presentation } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { useDirectoryTabProductTipSwitcher } from '../../../hooks/useDirectoryTabProductTipSwitcher';\n\nimport styles from './classification-tabs.scss';\n\nconst namespace = 'shared.classificationDashboard';\n\nexport type ClassificationTab = 'new-releases' | 'all-topics' | 'curated-topic' | 'video-list';\n\nfunction getTabs(\n props: ClassificationTabsProps,\n breakpoints: Breakpoints,\n activeTab: ClassificationTab,\n isHighlighting: boolean\n): PillTab[] {\n const showText = breakpoints.lg || breakpoints.xl || breakpoints.xxl || breakpoints.xs;\n\n function getTopicTabClassName(): string {\n let className = isHighlighting ? styles.tabTransition : '';\n\n if (breakpoints.xs)\n return className + ' w-100';\n\n if (showText)\n return className = ` ${styles.curatedTopicTab}`;\n\n return className;\n }\n\n if (TopicsHelper.isTopLevelTopic(props.classification)) {\n return [{\n name: showText ? LanguageService.getPhrase(namespace, 'newReleases') : '',\n appLink: !props.isReadonly ? props.appLinks?.classification?.(props.classification) : null,\n active: activeTab === 'new-releases',\n svgName: cvSvgLibrary.Sparkle,\n analyticsData: {\n id: 'new-releases',\n classificationId: props.classification.id,\n classificationName: props.classification.name,\n presentationId: props.presentation.id,\n presentationDescription: props.presentation.description,\n name: LanguageService.getPhrase(namespace, 'newReleases'),\n url: Core.AppLinkHelper.getHref(props.appLinks?.classification?.(props.classification))\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n },\n className: `${breakpoints.xs ? 'w-100' : ''} ${isHighlighting ? styles.tabTransition : ''}`\n \n }, {\n name: showText ? LanguageService.getPhrase(namespace, 'allTopics') : '',\n appLink: !props.isReadonly ? props.appLinks?.classificationDirectory?.(props.classification) : null,\n active: activeTab === 'all-topics',\n svgName: cvSvgLibrary.Grid,\n analyticsData: {\n id: 'all-topics',\n classificationId: props.classification.id,\n classificationName: props.classification.name,\n presentationId: props.presentation.id,\n presentationDescription: props.presentation.description,\n name: LanguageService.getPhrase(namespace, 'allTopics'),\n url: Core.AppLinkHelper.getHref(props.appLinks?.classificationDirectory?.(props.classification))\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n },\n className: `${breakpoints.xs ? 'w-100' : ''} ${isHighlighting ? styles.tabTransition : ''}`\n }];\n }\n\n return [{\n name: showText ? LanguageService.getPhrase(namespace, 'topic') : '',\n appLink: !props.isReadonly ? props.appLinks?.classification?.(props.classification) : null,\n active: activeTab === 'curated-topic',\n svgName: cvSvgLibrary.Rectangles,\n analyticsData: {\n id: 'curated-topic',\n classificationId: props.classification.id,\n classificationName: props.classification.name,\n presentationId: props.presentation.id,\n presentationDescription: props.presentation.description,\n name: LanguageService.getPhrase(namespace, 'topic'),\n url: Core.AppLinkHelper.getHref(props.appLinks?.classification?.(props.classification))\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n },\n className: getTopicTabClassName()\n }, {\n name: showText ? LanguageService.getPhrase(namespace, 'videoList') : '',\n appLink: !props.isReadonly ? props.appLinks?.classificationVideos?.(props.classification) : null,\n active: activeTab === 'video-list',\n svgName: cvSvgLibrary.WidgetSeries,\n analyticsData: {\n id: 'video-list',\n classificationId: props.classification.id,\n classificationName: props.classification.name,\n presentationId: props.presentation.id,\n presentationDescription: props.presentation.description,\n name: LanguageService.getPhrase(namespace, 'videoList'),\n url: Core.AppLinkHelper.getHref(props.appLinks?.classificationVideos?.(props.classification))\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n },\n className: `${breakpoints.xs ? 'w-100' : ''} ${isHighlighting ? styles.tabTransition : ''}`\n }];\n}\n\ninterface ClassificationTabsProps {\n classification: Classification;\n presentation: Presentation;\n appLinks: WidgetAppLinks;\n activeTab: ClassificationTab;\n isReadonly: boolean;\n}\n\nexport function ClassificationTabs(props: ClassificationTabsProps): JSX.Element {\n const breakpoints = useBreakpoints();\n const { tab, isHighlighting } = useDirectoryTabProductTipSwitcher(props.activeTab);\n\n const { setProductTipRef } = useProductTipsContext('topics-directory-tab');\n\n return (\n <PillTabSelector\n borderRadius='sm'\n containerRef={el => setProductTipRef(el)}\n className={breakpoints.xs ? 'w-100' : ''}\n listClassName='d-flex flex-nowrap'\n tabs={getTabs(props, breakpoints, tab, isHighlighting)}\n />\n );\n}","import React from 'react';\n\nimport { Breadcrumb, Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { WidgetAppLinks } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classification, CuratedDashboard, Presentation, PresentationAudience } from 'libs/shared/interfaces';\nimport { AudienceHelper } from 'libs/shared/utils/audience-helper/AudienceHelper';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { ClassificationDashboardAudiences } from '../audiences/ClassificationDashboardAudiences';\nimport { ClassificationTab, ClassificationTabs } from '../classification-tabs/ClassificationTabs';\n\nfunction shouldHideAudiences(\n audiences: PresentationAudience[],\n activeAudiences: PresentationAudience[],\n isEmpty: boolean,\n isComingSoon: boolean\n): boolean {\n if (isComingSoon)\n return true;\n\n if (isEmpty && !activeAudiences?.length)\n return true;\n\n if (!AudienceHelper.shouldShowAudiences(audiences))\n return true;\n\n return false;\n}\n\ninterface ClassificationDashboardNavProps {\n dashboard: CuratedDashboard;\n classification: Classification;\n presentation: Presentation;\n appLinks: WidgetAppLinks;\n activeTab: ClassificationTab;\n audiences: PresentationAudience[];\n activeAudiences: PresentationAudience[];\n getBreadcrumbs: () => Breadcrumb[];\n\n hasTopicDirectoryDashboard: boolean;\n hasTopicVideosDashboard: boolean;\n canViewTopicTabs: boolean;\n isComingSoon: boolean;\n isEmpty: boolean;\n isViewingCurrentPresentation: boolean;\n isReadonly: boolean;\n}\n\nexport function ClassificationDashboardNav(props: ClassificationDashboardNavProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n const hideAudiences = shouldHideAudiences(\n props.audiences,\n props.activeAudiences,\n props.isEmpty,\n props.isComingSoon\n );\n\n function canShowTabs(): boolean {\n if (!props.classification || !props.dashboard)\n return false;\n\n if (CuratedDashboardHelper.isSystemGeneratedDashboard(props.dashboard.widgets))\n return false;\n\n // TODO: This is controlled by a domain option that will eventually be deleted on release\n if (!props.canViewTopicTabs)\n return false;\n\n /**\n * For our top-level topics, we can show the topic tab if the topic has a directory dashboard.\n */\n if (TopicsHelper.isTopLevelTopic(props.classification))\n return props.hasTopicDirectoryDashboard;\n\n /**\n * For our lower level topics, we can show the video tab if the topic has one\n */\n if (props.hasTopicVideosDashboard)\n return true;\n\n return false;\n }\n\n function getContainerClass(): string {\n let className = 'd-flex flex-column py-3 mb-3';\n\n if (!props.isComingSoon)\n className += ' border-bottom';\n\n if ((canShowTabs() || hideAudiences) && !breakpoints.xs)\n return className;\n\n return className + ' row-gap-3';\n }\n\n function getTopRowClass(): string {\n if (hideAudiences) {\n if (breakpoints.xs)\n return 'd-flex flex-column justify-content-between row-gap-3';\n\n return 'd-flex align-items-center justify-content-between';\n }\n\n let className = '';\n\n className += 'd-flex align-items-center justify-content-between mb-1';\n\n if (breakpoints.xs)\n className += ' row-gap-3 mb-0';\n\n return className;\n }\n\n function getBottomRowClass(): string {\n let className = 'd-flex align-items-end justify-content-between';\n\n if (breakpoints.xs)\n className += ' row-gap-3 flex-wrap';\n\n return className;\n }\n\n return (\n <div className={getContainerClass()}>\n <div className={getTopRowClass()}>\n <Breadcrumbs breadcrumbs={props.getBreadcrumbs?.()} />\n\n {canShowTabs() && hideAudiences && (\n <ClassificationTabs\n classification={props.classification}\n activeTab={props.activeTab}\n appLinks={props.appLinks}\n presentation={props.presentation}\n isReadonly={props.isReadonly}\n />\n )}\n </div>\n\n <div className={getBottomRowClass()}>\n {!hideAudiences && (\n <ClassificationDashboardAudiences\n audiences={props.audiences}\n activeAudiences={props.activeAudiences}\n appLink={props.appLinks.audience?.()}\n isReadonly={props.isReadonly}\n disablePersist={!props.isViewingCurrentPresentation}\n />\n )}\n\n {canShowTabs() && !hideAudiences && (\n <ClassificationTabs\n classification={props.classification}\n activeTab={props.activeTab}\n appLinks={props.appLinks}\n presentation={props.presentation}\n isReadonly={props.isReadonly}\n />\n )}\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsOptions, HashObject, LocationContext } from 'libs/analytics/interfaces';\n\nimport { ClassificationHeaderDetails } from 'libs/shared/apps/subjects/components/classification-dashboard/classification-header-details/ClassificationHeaderDetails';\nimport { CuratedClassificationEmptyState } from 'libs/shared/apps/subjects/components/classification-dashboard/empty-state/CuratedClassificationEmptyState';\nimport { TableOfContentsContainer } from 'libs/shared/apps/subjects/components/classification-dashboard/table-of-contents/TableOfContents';\nimport { TeacherOnlyEmptyState } from 'libs/shared/apps/subjects/components/classification-dashboard/teacher-only/TeacherOnlyEmptyState';\nimport { useGetTopicsWidgets } from 'libs/shared/apps/subjects/hooks/useGetTopicsWidgets';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { BannerHeader } from 'libs/shared/components/banner-header/BannerHeader';\nimport { Breadcrumb } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { DashboardFeedbackData } from 'libs/shared/components/feedback-form/FeedbackForm';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoSubTextType } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { WidgetAppLinks } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { useTableOfContentsActiveHeading } from 'libs/shared/hooks/useTableOfContentsActiveHeading';\nimport { useTableOfContentsScroll } from 'libs/shared/hooks/useTableOfContentsScroll';\nimport { CalendarEvent, CalendarEventContentType, CanFavouriteFunc, Classification, CuratedDashboard, CuratedWidget, CuratedWidgetQueryParams, DashboardStatus, DashboardTargetType, FavouriteFunc, Presentation, PresentationAudience, YearGroup } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { ClassificationComingSoon } from './classification-coming-soon/ClassificationComingSoon';\nimport { ClassificationDashboardNav } from './classification-dashboard-nav/ClassificationDashboardNav';\nimport { ClassificationTab } from './classification-tabs/ClassificationTabs';\n\nconst namespace = 'shared.classificationDashboard';\n\nfunction isHeadingWidget(widget: CuratedWidget) {\n return widget.widgetId === WidgetTypeId.Blurb && widget.templateId === WidgetTemplate.Heading;\n}\n\nfunction isTopicWidget(widget: CuratedWidget) {\n return widget.widgetId === WidgetTypeId.CuratedClassifications || widget.widgetId === WidgetTypeId.Classifications;\n}\n\ninterface ClassificationDashboardProps {\n dashboard: CuratedDashboard;\n classification: Classification;\n presentation: Presentation;\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n resourceThumbnailFallbackImageUrl: string;\n hasTopicDirectoryDashboard: boolean;\n hasTopicVideosDashboard: boolean;\n canViewTopicTabs: boolean;\n tab: ClassificationTab;\n specialEvent?: CalendarEvent;\n\n audiences: PresentationAudience[];\n activeAudiences?: PresentationAudience[];\n\n getWidgetContentRequest: (\n id: string,\n params: CuratedWidgetQueryParams,\n widgetTemplate: WidgetTemplate\n ) => Flight.Request;\n\n getBannerActions?: () => ActionOptions[];\n getBreadcrumbs?: () => Breadcrumb[];\n onToggleFollow?: (classification: Classification, locationContext: LocationContext) => void;\n setFavourite?: FavouriteFunc;\n canFavourite?: CanFavouriteFunc;\n canFollowSubjects: boolean;\n onSubmitFeedback?: (feedback: DashboardFeedbackData) => Promise<void>;\n\n appLinks?: WidgetAppLinks;\n\n imageCdnUrl: string\n emptyImageUrl: string;\n comingSoonImageUrl?: string;\n\n analyticsOptions?: AnalyticsOptions;\n analyticsData?: HashObject;\n\n scrollToWidgetId?: string;\n tableOfContentsId?: string;\n\n // Means the dashboard contains no linked or working filters\n isReadonly?: boolean;\n\n // Means the dashboard is being previewed by ClickView staff either in product or in curator\n isPreviewing?: boolean;\n\n // Means the parent topic for the dashboard has a status of \"Coming Soon\"\n isComingSoon?: boolean;\n\n showFollowButtonSpinner?: boolean;\n \n isViewCurrentPresentation?: boolean;\n\n yearGroups?: YearGroup[];\n\n // By default widgets will always be lazyloaded. We override this behaviour only in extenuating \n // circumstances, such as dynamic rendering for SEO.\n lazyLoad?: boolean;\n\n moviesAndTv?: boolean;\n\n isTeacherOnly?: boolean;\n\n // Fallback url to display for the company logo. Only used by Streamable Learning atm\n companyLogoFallbackUrl?: string;\n\n subTextType?: VideoSubTextType;\n \n contentType?: CalendarEventContentType;\n\n isBot?: boolean;\n\n isPlugin: boolean;\n}\n\nClassificationDashboard.defaultProps = {\n appLinks: {}\n};\n\nexport function ClassificationDashboard(props: ClassificationDashboardProps): JSX.Element {\n const { widgets, videoList, videoListWidgetId } = useGetTopicsWidgets(props.dashboard, props.activeAudiences);\n\n const isSmallScreen = useMediaQuery(MediaQueryStrings.LGDown);\n const headingRef = React.useRef<Set<Element>>(new Set());\n\n const initialEmptyWidgets = React.useMemo(() => {\n return widgets.reduce((acc: HashObject<boolean>, widget) => {\n acc[widget.id] = false;\n return acc;\n }, {});\n }, [widgets?.length]);\n\n const [ emptyWidgets, setEmptyWidgets ] = React.useState(initialEmptyWidgets);\n\n const [ controlledId, setControlledId ] = React.useState(window.location.hash.slice(1) || '');\n\n const [ tableOfContentActiveId, setTableOfContentActiveId ] = React.useState<string>('');\n\n const headingElements = Array.from(headingRef.current);\n useTableOfContentsScroll(headingElements, props.tableOfContentsId);\n useTableOfContentsActiveHeading({\n setActiveId: setTableOfContentActiveId,\n headingElements,\n controlledId,\n setControlledId\n });\n\n function shouldShowEmptyState(): boolean {\n if (props.isComingSoon)\n return false;\n\n if (props.isTeacherOnly)\n return false;\n\n if (!props.dashboard)\n return true;\n\n if (props.dashboard.status === DashboardStatus.Archived && !props.isReadonly)\n return true;\n\n if (props.dashboard.status === DashboardStatus.Draft && !props.isPreviewing)\n return true;\n\n if (!widgets?.length)\n return true;\n\n if (videoList && videoList.length)\n return false;\n\n return Object.values(emptyWidgets).every(state => !!state);\n }\n\n function getWidgetContentRequest(id: string, widgetTypeId: WidgetTypeId, template: WidgetTemplate): Flight.Request {\n const params = CuratedDashboardHelper.getWidgetParams(\n widgetTypeId,\n template,\n CuratedDashboardHelper.getDashboardTargetType(props.dashboard),\n props.activeAudiences?.map(a => a.masterId)\n );\n\n return props.getWidgetContentRequest(id, params, template);\n }\n\n const showEmptyState = shouldShowEmptyState();\n\n React.useEffect(() => {\n /**\n * When we add the first widget of the dashboard, the showEmptyState is `true`, the WidgetContainer is not going to be rendered to lazyload the `content`\n * so we set the emptyWidget to initial make sure the widget container is rendered to lazyload `widget.content`\n * and let the WidgetContainer to re-set the empty state based on the actual `widget.content` from backend\n */\n if (showEmptyState) {\n setEmptyWidgets(initialEmptyWidgets);\n }\n }, [widgets?.length]);\n\n const onSetIsEmpty = React.useCallback((widgetId: string, isEmpty: boolean) => {\n if (emptyWidgets[widgetId] === isEmpty)\n return;\n\n const newEmptyState = {\n ...emptyWidgets,\n [widgetId]: isEmpty\n };\n\n let index = 0;\n\n /**\n * Every time a widget is identified as empty, we check each heading blurb widget\n * to see if it should be hidden. This will be the case when all widgets beneath a heading\n * (up until the next heading) are empty.\n */\n while (index < widgets.length) {\n const currentWidget = widgets[index];\n\n if (!isHeadingWidget(currentWidget)) {\n index++;\n continue;\n }\n\n let isHeadingEmpty = true;\n let subWidgetIndex = index + 1;\n\n while (isHeadingEmpty && subWidgetIndex < widgets.length) {\n const headingSubWidget = widgets[subWidgetIndex];\n\n if (isHeadingWidget(headingSubWidget))\n break;\n\n if (!newEmptyState[headingSubWidget.id] && !isTopicWidget(headingSubWidget))\n isHeadingEmpty = false;\n\n subWidgetIndex++;\n }\n\n index = subWidgetIndex;\n\n newEmptyState[currentWidget.id] = isHeadingEmpty;\n }\n\n setEmptyWidgets(newEmptyState);\n }, [ emptyWidgets, widgets ]);\n\n function hideWidget(widget: CuratedWidget): boolean {\n return isHeadingWidget(widget) && emptyWidgets[widget.id];\n }\n\n function useLargeDashboardSpacing(): boolean {\n const target = CuratedDashboardHelper.getDashboardTargetType(props.dashboard);\n\n if (props.moviesAndTv || target === DashboardTargetType.ClassificationVideos)\n return false;\n\n return true;\n }\n\n function getWidgetHeading(widget: CuratedWidget, index: number): string {\n if (widget.widgetId === WidgetTypeId.ClassificationDashboardExternalMedia) {\n const previousWidget = widgets[index - 1];\n\n if (emptyWidgets[previousWidget.id])\n return widget.name.replace('Other videos', 'Videos');\n\n return widget.name;\n }\n\n return widget.name;\n }\n\n const widgetsInTableOfContents = widgets.filter(w => {\n return !hideWidget(w) && !!w.metadata?.showInTableOfContents;\n });\n\n const shouldShowTableOfContents = widgetsInTableOfContents.length >= 2;\n const shouldShowSideTableOfContents = shouldShowTableOfContents && !isSmallScreen;\n\n const isTopLevelTopic = TopicsHelper.isTopLevelTopic(props.classification);\n /**\n * We don't put the .topic-dashboard class when we're in a movies and tv classification\n * because we don't want the extra padding between widgets.\n */\n return (\n <div className={`bg-white px-4 ${useLargeDashboardSpacing() ? 'dashboard-spacing-lg' : ''}`}>\n <BannerHeader\n heading={props.classification.name}\n banner={props.classification.banner}\n imageCdnUrl={props.imageCdnUrl}\n actions={props.getBannerActions?.()}\n actionsDropdownClassName='btn btn-outline-dark'\n specialEvent={props.specialEvent}\n calendarTheme={{\n background: 'bg-light-blue',\n border: 'border-light-blue'\n }}\n showComingSoon={props.isComingSoon}\n detailsComponent={isTopLevelTopic\n ? () => <ClassificationHeaderDetails classification={props.classification} />\n : null\n }\n />\n\n <ClassificationDashboardNav\n dashboard={props.dashboard}\n classification={props.classification}\n presentation={props.presentation}\n appLinks={props.appLinks}\n activeTab={props.tab}\n audiences={props.audiences}\n activeAudiences={props.activeAudiences}\n getBreadcrumbs={props.getBreadcrumbs}\n hasTopicDirectoryDashboard={props.hasTopicDirectoryDashboard}\n hasTopicVideosDashboard={props.hasTopicVideosDashboard}\n canViewTopicTabs={props.canViewTopicTabs}\n isComingSoon={props.isComingSoon}\n isEmpty={showEmptyState}\n isViewingCurrentPresentation={props.isViewCurrentPresentation}\n isReadonly={props.isReadonly}\n />\n\n {props.isComingSoon && (\n <ClassificationComingSoon\n imageUrl={props.comingSoonImageUrl}\n data={props.classification}\n canFollowSubjects={props.canFollowSubjects}\n showFollowButtonSpinner={props.showFollowButtonSpinner}\n onToggleFollow={() => props.onToggleFollow(props.classification, LocationContext.ClassificationComingSoon)}\n />\n )}\n\n {!props.isComingSoon && (\n <div className={`${shouldShowSideTableOfContents ? 'row no-wrap' : ''}`}>\n <div className={shouldShowSideTableOfContents ? 'col-9' : ''}>\n {widgets.map((widget, idx) => {\n if (hideWidget(widget))\n return <React.Fragment key={widget.id}></React.Fragment>;\n\n return (\n <WidgetContainerView\n headingElementRef={headingRef}\n key={widget.id}\n id={widget.id}\n name={getWidgetHeading(widget, idx)}\n description={widget.description}\n templateId={widget.templateId}\n widgetTypeId={widget.widgetId}\n audiences={props.audiences}\n getContentRequest={getWidgetContentRequest}\n setIsEmpty={onSetIsEmpty}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n appLinks={props.appLinks}\n yearGroups={props.yearGroups}\n presentation={props.presentation}\n analyticsData={props.analyticsData}\n isScrollToTargetWidget={props.scrollToWidgetId === widget.id}\n imageCdnUrl={props.imageCdnUrl}\n onSubmitFeedback={props.onSubmitFeedback}\n metadata={widget.metadata}\n isBot={props.isBot}\n hasTableOfContents={shouldShowSideTableOfContents}\n lazyLoad={props.lazyLoad}\n dashboardTarget={CuratedDashboardHelper.getDashboardTargetType(props.dashboard)}\n widgetIndex={idx}\n hasPermissions={props.hasPermissions}\n hasLocalPermissions={props.hasLocalPermissions}\n isPreviewing={props.isReadonly}\n companyLogoFallbackUrl={props.companyLogoFallbackUrl}\n subTextType={props.subTextType}\n contentType={props.contentType}\n resourceThumbnailFallbackImageUrl={props.resourceThumbnailFallbackImageUrl}\n preferences={widget.preferences}\n onToggleFollowClassification={props.onToggleFollow}\n isPlugin={props.isPlugin}\n />\n );\n })}\n </div>\n\n {shouldShowTableOfContents && (\n <TableOfContentsContainer\n widgets={widgetsInTableOfContents}\n title={props.classification.name}\n activeId={tableOfContentActiveId}\n clickable={!props.isReadonly}\n analyticsData={props.analyticsData}\n setControlledId={setControlledId}\n isSmallScreen={isSmallScreen}\n />\n )}\n\n {!!videoList?.length && (\n <>\n <WidgetHeader name={LanguageService.getPhrase(namespace, 'videos')} description='' />\n <VideoList\n videos={videoList}\n yearGroups={props.yearGroups}\n getVideoAppLink={(v, opts) => props.appLinks.videoType(v, { ...opts, contextId: videoListWidgetId })}\n getSubTextAppLink={props.appLinks.subText}\n hasPermissions={props.hasPermissions}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n presentationAudiences={props.audiences}\n companyLogoFallbackUrl={props.companyLogoFallbackUrl}\n subTextType={props.subTextType}\n getPreviewQuestionsAppLink={props.appLinks.previewQuestions}\n isPlugin={props.isPlugin}\n getClassroomGuideAppLink={props.appLinks.classroomGuide}\n getInteractiveGuidanceAppLink={props.appLinks.interactiveGuidance}\n getResourceGuidanceAppLink={props.appLinks.resourceGuidance}\n />\n </>\n )}\n </div>\n )}\n\n {showEmptyState && (\n <CuratedClassificationEmptyState\n dashboard={props.dashboard}\n isReadonly={props.isReadonly}\n imageUrl={props.emptyImageUrl}\n addWidgetApplink={props.appLinks.widgetWizard}\n />\n )}\n\n {props.isTeacherOnly && (\n <TeacherOnlyEmptyState\n imageUrl={props.emptyImageUrl}\n ctaAppLink={() => props.appLinks.allTopics(props.classification.presentationId)}\n />\n )}\n </div>\n );\n}","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { DashboardRequests } from 'libs/shared/flight-requests/DashboardRequests';\nimport { CuratedDashboard, CuratedMediaWidget, CuratedWidget, PresentationAudience, Video } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nexport interface Response {\n widgets: CuratedWidget[];\n\n videoList?: Video[];\n videoListWidgetId?: string;\n}\n\n/**\n * This hook helps us with custom logic for to display system generated dashboards in a slightly\n * different way.\n */\nexport function useGetTopicsWidgets(dashboard: CuratedDashboard, activeAudiences: PresentationAudience[]): Response {\n const {\n isSystemGeneratedDashboard,\n systemGeneratedVideoWidget\n } = React.useMemo(() => {\n if (!dashboard) {\n return {\n isSystemGeneratedDashboard: false,\n systemGeneratedVideoWidget: null\n };\n }\n\n const isSystemGeneratedDashboard = CuratedDashboardHelper.isSystemGeneratedDashboard(dashboard.widgets);\n\n return {\n isSystemGeneratedDashboard,\n systemGeneratedVideoWidget: dashboard.widgets.find(widget => {\n return widget.widgetId === WidgetTypeId.ClassificationPinnedVideos;\n })\n };\n }, [dashboard?.id]);\n\n const systemGeneratedVideoContent = Flight.useBasicFetch<CuratedMediaWidget<Video[]>>(\n !!systemGeneratedVideoWidget &&\n DashboardRequests.dashboardWidgetContent(\n systemGeneratedVideoWidget?.id,\n CuratedDashboardHelper.getWidgetParams(\n systemGeneratedVideoWidget.widgetId,\n systemGeneratedVideoWidget.templateId,\n CuratedDashboardHelper.getDashboardTargetType(dashboard),\n activeAudiences?.map(a => a.masterId)\n ),\n systemGeneratedVideoWidget?.templateId\n )\n );\n\n // Non system generated dashboards are returned as per usual\n if (!isSystemGeneratedDashboard)\n return { widgets: ArrayHelper.sortBy(dashboard?.widgets, 'index') };\n\n // System generated dashboard have the video widget removed and returned as a separate video list\n return {\n widgets: dashboard?.widgets?.filter(widget => widget.widgetId !== WidgetTypeId.ClassificationPinnedVideos) ?? [],\n videoList: systemGeneratedVideoContent.data?.content ?? [],\n videoListWidgetId: systemGeneratedVideoWidget?.id\n };\n}","import React from 'react';\n\nimport { PartialAudienceFilter } from 'libs/shared/apps/subjects/components/audience-filter/AudienceFilter';\nimport { PartialBannerHeader } from 'libs/shared/components/banner-header/BannerHeader';\nimport { PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\n\nexport function PartialClassificationDashboard(): JSX.Element {\n return (\n <div className='bg-white px-4'>\n <PartialBannerHeader />\n\n <div className='d-flex flex-column row-gap-3 py-3 mb-3 border-bottom'>\n <PartialBreadcrumbs />\n <PartialAudienceFilter />\n </div>\n </div>\n );\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ErrorCta, ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'subjects.topicNotFoundError';\n\nexport class TopicNotFoundError extends ErrorPageError {\n constructor() {\n super('Topic doesn\\'t exist');\n }\n\n // @ts-ignore\n public get name(): string {\n return 'TopicNotFoundError';\n }\n\n // @ts-ignore\n public get heading(): string {\n return LanguageService.getPhrase(namespace, 'heading');\n }\n\n // @ts-ignore\n public get description(): string {\n return LanguageService.getPhrase(namespace, 'description');\n }\n\n // @ts-ignore\n public get cta(): ErrorCta {\n return {\n text: LanguageService.getPhrase(namespace, 'cta'),\n appLink: {\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.CLASSIFICATION_ALL\n }\n };\n }\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Breadcrumb } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { WidgetAppLinks } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { RelatedVideosContext } from 'libs/shared/enums/RelatedVideosContext';\nimport { Classification, DashboardTargetType, Playlist, PlaylistCollection, Presentation, Resource, Series, SeriesCollection, Video, VideoCollection } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { ClassificationAppLinkHelper } from 'shared/utils/ClassificationAppLinkHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\nimport { getAllTopicsAppLink } from 'apps/subjects/utils/ClassificationAppLinks';\n\nexport interface ClassificationViewQueryParams {\n a?: string[];\n dashboardId?: string;\n preview?: 'true';\n tocId?: string;\n mtv?: boolean;\n}\n\nconst OMITTED_PARAMS = [ 'preview', 'dashboardId', 'skipPrompt' ];\n\n/**\n * Checks if the classification would have any content with\n * no filters applied\n */\nexport function hasNoContentUnfiltered(classification: Classification): boolean {\n if (!classification)\n return false;\n\n return (\n classification.series?.count === 0 &&\n classification.pinnedVideos?.count === 0 &&\n classification.playlists?.count === 0\n );\n}\n\ninterface HeroVideoWithVideoList {\n heroVideo: Video;\n videoList: Video[];\n}\n\nexport function extractHeroVideo(\n series: SeriesCollection,\n playlists: PlaylistCollection,\n videos: VideoCollection,\n classification: Classification\n): HeroVideoWithVideoList {\n if (!series || !playlists || !videos || !classification)\n return {\n heroVideo: null,\n videoList: videos && videos.data\n };\n\n // If the subject has no series/playlists, and has only 1 video, that video is displayed as the hero.\n if (!series.data.length && !playlists.data.length && videos.data.length === 1) {\n return {\n heroVideo: ArrayHelper.first(videos.data),\n videoList: []\n };\n }\n\n const pinnedVideoIndex = videos.data.findIndex(video => video.id === classification.pinnedVideoMasterId);\n\n if (pinnedVideoIndex === -1)\n return {\n heroVideo: null,\n videoList: videos.data\n };\n\n return {\n heroVideo: videos.data[pinnedVideoIndex],\n videoList: videos.data.filter(vid => vid.id !== classification.pinnedVideoMasterId)\n };\n}\nconst getPhrase = LanguageService.encloseNamespace('subjects.classification');\n\nexport function getBannerActions(\n classification: Classification,\n canFollowSubjects: boolean,\n onFollow: () => void,\n showFollowButtonSpinner: boolean,\n isSmallScreen: boolean\n): ActionOptions[] {\n if (!canFollowSubjects)\n return [];\n\n const isFollowing = !!classification.followers?.data?.length;\n\n return [{\n label: getPhrase(isFollowing ? 'following' : 'follow'),\n onClick: onFollow,\n svgName: isFollowing ? cvSvgLibrary.BellFilled : cvSvgLibrary.Bell,\n className: `btn follow-btn ${isFollowing ? 'btn-outline-dark' : 'btn-dark'}`,\n button: true,\n tooltip: (isFollowing || isSmallScreen) ? undefined : getPhrase('followBtnTooltip'),\n showSpinner: showFollowButtonSpinner\n }];\n}\n\nexport function getClassificationAppLinks(\n classification: Classification,\n targetType: DashboardTargetType,\n params: ClassificationViewQueryParams\n): WidgetAppLinks {\n return {\n audience: () => {\n switch (targetType) {\n case DashboardTargetType.ClassificationDirectory: {\n return null;\n }\n case DashboardTargetType.ClassificationVideos: {\n return {\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.CLASSIFICATION_VIDEOS,\n args: [ classification.id, TextHelper.slugify(classification.name) ],\n params\n };\n }\n default: {\n return ClassificationAppLinkHelper.getAppLink(classification, params);\n }\n }\n },\n \n classification: (_classification: Classification | null) => {\n const appLinkClassification = _classification || classification;\n\n return ClassificationAppLinkHelper.getAppLink(\n appLinkClassification,\n ObjectHelper.omit(params, OMITTED_PARAMS)\n );\n },\n\n classificationDirectory: (_classification: Classification) => {\n const appLinkClassification = _classification || classification;\n\n return {\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.CLASSIFICATION_TOPICS,\n args: [ appLinkClassification.id, TextHelper.slugify(appLinkClassification.name) ],\n params: ObjectHelper.omit(params, OMITTED_PARAMS)\n };\n },\n\n classificationVideos: (_classification: Classification) => {\n const appLinkClassification = _classification || classification;\n\n return {\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.CLASSIFICATION_VIDEOS,\n args: [ appLinkClassification.id, TextHelper.slugify(appLinkClassification.name) ],\n params: ObjectHelper.omit(params, OMITTED_PARAMS)\n };\n },\n\n videoType: (video: Video, opts: GetVideoAppLinkOptions) => (\n VideoAppLinkHelper.getAppLink(video, {\n ...opts,\n context: RelatedVideosContext.Widget,\n moviesAndTv: params.mtv\n })\n ),\n\n allTopics: (presentationId: string) => ({\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.CLASSIFICATION_ALL,\n params: { presentationId }\n }),\n\n series: (series: Series) => {\n return SeriesAppLinkHelper.getSeriesAppLink(series, {\n classificationId: classification.id,\n mtv: params.mtv ? true : undefined\n });\n },\n\n subText: (video: Video) => SeriesAppLinkHelper.getSeriesAppLink(video.series, {\n classificationId: classification.id,\n mtv: params.mtv ? true : undefined\n }),\n\n playlist: (playlist: Playlist) => ({\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.PLAYLIST,\n args: [ playlist.id, TextHelper.slugify(playlist.name) ],\n params: {\n classificationId: classification.id,\n mtv: params.mtv ? true : undefined\n }\n }),\n\n resource: (resource: Resource, videoId: string, canViewResources: boolean) => {\n if (!canViewResources) {\n return {\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n };\n }\n\n return {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PREVIEW_PDF,\n args: [resource.id],\n params: {\n videoId\n }\n };\n },\n\n classroomGuide: VideoAppLinkHelper.getClassroomGuideAppLink,\n interactiveGuidance: VideoAppLinkHelper.getInteractiveGuidanceAppLink,\n resourceGuidance: VideoAppLinkHelper.getResourceGuidanceAppLink\n };\n}\n\ninterface GetClassificationBreadcrumbsOptions {\n queryParams: ClassificationViewQueryParams;\n classification: Classification;\n path: Classification[];\n appLinks: WidgetAppLinks;\n presentation: Presentation;\n availablePresentations: Presentation[];\n}\n\nexport function getClassificationBreadcrumbs(\n options: GetClassificationBreadcrumbsOptions\n): Breadcrumb[] {\n const { queryParams, classification, path, presentation, availablePresentations, appLinks } = options;\n\n if (queryParams.mtv) {\n const breadcrumbs: Breadcrumb[] = [{\n name: getPhrase('moviesAndTv'),\n appLink: {\n application: AppChannels.MOVIES_AND_TV,\n action: Actions.MoviesAndTv.HOME\n }\n }];\n\n path.slice(1, path.length).forEach(item => {\n breadcrumbs.push({\n name: item.name,\n appLink: appLinks.classification(item),\n active: item.name === classification.name\n });\n });\n\n return breadcrumbs;\n }\n \n const breadcrumbs: Breadcrumb[] = [{\n name: TopicsHelper.getExploreAllTopicsTitle(presentation?.name, availablePresentations?.length),\n appLink: getAllTopicsAppLink(presentation?.id)\n }];\n\n path.forEach(item => {\n breadcrumbs.push({\n name: item.name,\n appLink: appLinks.classification(item),\n active: item.name === classification.name\n });\n });\n\n return breadcrumbs;\n}","// extracted by mini-css-extract-plugin\nexport default {\"followButton\":\"HlRXj\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, ToggleDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { CalendarRequests } from 'libs/shared/apps/calendar/flight-request/CalendarRequests';\nimport { ClassificationDashboard } from 'libs/shared/apps/subjects/components/classification-dashboard/ClassificationDashboard';\nimport { PartialClassificationDashboard } from 'libs/shared/apps/subjects/components/classification-dashboard/partial-loading/PartialClassificationDashboard';\nimport { PreviewBanner } from 'libs/shared/apps/subjects/components/preview-banner/PreviewBanner';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Breadcrumb } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { DashboardFeedbackData } from 'libs/shared/components/feedback-form/FeedbackForm';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { FeedbackType } from 'libs/shared/enums/FeedbackType';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { DashboardRequests } from 'libs/shared/flight-requests/DashboardRequests';\nimport { FeedbackRequests } from 'libs/shared/flight-requests/FeedbackRequests';\nimport { FollowRequests } from 'libs/shared/flight-requests/FollowRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useCurationStudio } from 'libs/shared/hooks/useCurationStudio';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { CalendarEvent, Classification, Config, CurrentUser, Customer, DashboardTargetType, Presentation, PresentationAudience, RegionAlternative, YearGroup } from 'libs/shared/interfaces';\nimport { AudienceHelper } from 'libs/shared/utils/audience-helper/AudienceHelper';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\nimport { FeedbackFormHelper } from 'libs/shared/utils/FeedbackFormHelper';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { usePresentation } from 'shared/hooks/usePresentation';\nimport { ClassificationAppLinkHelper } from 'shared/utils/ClassificationAppLinkHelper';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\n\nimport { TopicNotFoundError } from 'apps/subjects/errors/TopicNotFoundError';\nimport { useFetchClassificationDashboard } from 'apps/subjects/hooks/useFetchClassificationDashboard';\n\nimport { ClassificationViewQueryParams, getClassificationAppLinks, getClassificationBreadcrumbs } from './ClassificationViewUtils';\n\nimport styles from './curated-classification-view.scss';\n\ninterface CuratedClassificationViewProps {\n id: string;\n queryParams?: ClassificationViewQueryParams;\n targetType: DashboardTargetType;\n}\n\nCuratedClassificationView.defaultProps = {\n queryParams: {}\n};\n\nconst namespace = 'subjects.classification';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function CuratedClassificationView(props: CuratedClassificationViewProps): React.ReactElement {\n const [ showFollowButtonSpinner, setShowFollowButtonSpinner ] = React.useState<boolean>(false);\n\n const alerts = useAlerts();\n const fetchAsync = Flight.useGetFetchAsync();\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n const { isPlugin } = usePluginHelper();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const { openInCurationStudioLabel, isUserCurator, getOpenInCurationStudioLink } = useCurationStudio();\n\n const customer = Flight.useBasicFetch<Customer>(\n hasPermissions(PermissionName.CanSubmitFeedback) &&\n currentUser.data &&\n CustomerRequests.customer(currentUser.data.customerId)\n );\n\n const classification = Flight.useBasicFetch<Classification>(\n ClassificationRequests.classification(props.id, currentUser.data?.id)\n );\n\n const presentation = Flight.useBasicFetch<Presentation>(\n classification.data &&\n ClassificationRequests.presentationById(classification.data.presentationId)\n );\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n classification.data &&\n AudienceRequests.audiencesByPresentationId(classification.data.presentationId)\n );\n\n const specialEvent = Flight.useBasicFetch<CalendarEvent>(\n classification.data &&\n CalendarRequests.nextTopicSpecialEvent(props.id, classification.data.presentationId)\n );\n\n const {\n activePresentation,\n availablePresentations,\n canAccessPresentation\n } = usePresentation();\n\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const path = Flight.useBasicFetch<Classification[]>(ClassificationRequests.path(props.id));\n\n const {\n dashboard,\n hasTopicDirectoryDashboard,\n hasTopicVideosDashboard,\n canViewTopicTabs,\n isPreviewing,\n isTeacherOnly\n } = useFetchClassificationDashboard(props.id, props.queryParams, props.targetType);\n\n const regionAlternatives = Flight.useBasicFetch<RegionAlternative[]>(\n ClassificationRequests.regionAlternatives(props.id)\n );\n\n useSetPageMetadata(PageMetadataHelper.getClassificationMetadata({\n content: classification.data,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n },\n canonicalLink: SeoHelper.getCanonicalLink({ stripPresentationSlug: true }),\n allowIndexing: SeoHelper.allowIndexing(),\n hrefLang: SeoHelper.getContentHrefLang(regionAlternatives.data, () => (\n ClassificationAppLinkHelper.getAppLink(classification.data)\n ))\n }));\n\n useHandleObjectError(classification, {\n notFound: TopicNotFoundError\n });\n useDeepLinks({ id: props.id, app: 'topics' });\n\n const isViewCurrentPresentation = activePresentation?.id === presentation.data?.id;\n \n const isSmallScreen = useMediaQuery(MediaQueryStrings.MDDown);\n const isMobile = useMediaQuery(MediaQueryStrings.SMDown);\n\n const { setFavourite, canFavourite } = useLiteFavourites(LocationContext.ExpandableVideoThumbnail);\n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem });\n\n const canFollowSubjects = hasPermissions(PermissionName.FollowSubjects);\n const isComingSoon = (\n classification.data?.status === ClassificationStatus.ComingSoon &&\n !isPreviewing\n );\n\n /**\n * We use the current active audiences to re-fetch content for that specific audience set.\n */\n const activeAudiences = AudienceHelper.getActiveAudiencesFromParams(audiences.data, props.queryParams);\n const activeAudienceIds = activeAudiences?.map(a => a.masterId) ?? [];\n\n const targetType = CuratedDashboardHelper.getDashboardTargetType(dashboard.data);\n\n /**\n * Following\n */\n function onToggleFollow(followedClassification: Classification, location: LocationContext) {\n if (!canFollowSubjects || !classification)\n return;\n\n const isTogglingCurrentTopic = followedClassification.id.toString() === classification.data?.id?.toString();\n\n if (isTogglingCurrentTopic)\n setShowFollowButtonSpinner(true);\n\n const isFollowing = TopicsHelper.isFollowing(followedClassification);\n\n const request = isFollowing\n ? FollowRequests.unfollow\n : FollowRequests.follow;\n\n fetchAsync(request([followedClassification.id], currentUser.data?.id))\n .then(() => {\n AnalyticsHelper.logUserAction(analyticsData, {\n location,\n actionType: UserAction.Follow,\n workflowPhase: WorkflowPhase.Complete,\n descriptor: isFollowing ? ToggleDescriptor.Off : ToggleDescriptor.On,\n entity: EntityType.Classification\n });\n\n if (!isTogglingCurrentTopic) {\n alerts.success(getPhrase(isFollowing ? 'unfollowed' : 'followed', { name: followedClassification.name }));\n }\n })\n .finally(() => {\n if (isTogglingCurrentTopic)\n setShowFollowButtonSpinner(false);\n });\n }\n\n async function onSubmitFeedback(feedback: DashboardFeedbackData): Promise<void> {\n const promise = await fetchAsync<void>(FeedbackRequests.submitFeedback({\n type: FeedbackType.Footer,\n user: FeedbackFormHelper.getUserInfo(currentUser.data, customer.data),\n tags: FeedbackFormHelper.getTags(\n currentUser.data,\n ProductId.Primary,\n hasPermissions(PermissionName.StudentExperience),\n [ 'topics', 'in product feedback' ]\n )\n }, {\n reaction: feedback.type,\n feedback: feedback.content,\n location: 'Topic Footer',\n presentationName: presentation.data.description,\n presentationId: presentation.data.id,\n dashboardName: dashboard.data.name,\n dashboardId: dashboard.data.id,\n classificationName: classification.data.name,\n classificationId: classification.data.id\n }));\n\n AnalyticsHelper.logUserAction({\n feedbackType: feedback.type,\n content: feedback.content,\n presentationId: presentation.data.id,\n classificationId: classification.data.id,\n dashboardId: dashboard.data.id\n }, {\n actionType: UserAction.Submit,\n location: LocationContext.ClassificationFooter,\n entity: EntityType.Feedback,\n workflowPhase: WorkflowPhase.Complete\n });\n\n return promise;\n }\n\n function getBannerActions(): ActionOptions[] {\n const isFollowing = !!classification.data?.followers?.data?.length;\n\n if (!canFollowSubjects)\n return [];\n\n const actions: ActionOptions[] = [{\n label: isMobile ? '' : getPhrase(isFollowing ? 'following' : 'follow'),\n onClick: () => onToggleFollow(classification.data, LocationContext.Banner),\n svgName: isFollowing ? cvSvgLibrary.BellFilled : cvSvgLibrary.Bell,\n className: `btn follow-btn me-2 ${isFollowing ? 'btn-outline-dark' : 'btn-dark'} ${styles.followButton}`,\n button: true,\n tooltip: (isFollowing || isSmallScreen) ? undefined : getPhrase('followBtnTooltip'),\n showSpinner: showFollowButtonSpinner\n }];\n\n if (isUserCurator)\n actions.push({\n label: openInCurationStudioLabel,\n href: getOpenInCurationStudioLink(MasterType.Subject, classification.data?.id, presentation.data?.id),\n openInNewTab: true\n });\n \n return actions;\n }\n\n const appLinks = getClassificationAppLinks(classification.data, targetType, props.queryParams);\n\n function getBreadcrumbs(): () => Breadcrumb[] {\n if (!canAccessPresentation(presentation.data?.id))\n return;\n\n return () => getClassificationBreadcrumbs({\n appLinks: appLinks,\n availablePresentations,\n classification: classification.data,\n path: path.data,\n presentation: presentation.data,\n queryParams: props.queryParams\n });\n }\n \n /**\n * Additional topics data to be mixed in with lower-level component analytics collection\n */\n const analyticsData = {\n presentationId: presentation.data?.id,\n presentationName: presentation.data?.name,\n currentClassificationId: classification.data?.id,\n currentClassificationName: classification.data?.name,\n followingCurrentClassification: !!classification.data?.followers?.data?.length,\n activeAudienceNames: activeAudiences?.length ? activeAudiences.map(a => a.name) : null,\n activeAudienceIds: activeAudienceIds.length ? activeAudienceIds : null\n };\n\n const dataLoaded = !!config.data\n && dashboard.hasCompleted\n && !!classification.data\n && !!presentation.data\n && !!path.data\n && !!availablePresentations\n && !!audiences.data\n && specialEvent.hasCompleted;\n\n if (!dataLoaded)\n return <PartialClassificationDashboard />;\n\n return (\n <VideoActionsContext.Provider value={videoActions}>\n <div className='position-relative'>\n {!!(isPreviewing && dashboard.data) && <PreviewBanner status={dashboard.data.status} type='topic' />}\n <ClassificationDashboard\n dashboard={dashboard.data}\n classification={classification.data}\n getWidgetContentRequest={DashboardRequests.dashboardWidgetContent}\n getBreadcrumbs={getBreadcrumbs()}\n hasPermissions={hasPermissions}\n hasLocalPermissions={hasLocalPermissions}\n presentation={presentation.data}\n onToggleFollow={onToggleFollow}\n getBannerActions={getBannerActions}\n audiences={props.queryParams.mtv ? null : audiences.data}\n activeAudiences={activeAudiences}\n analyticsData={analyticsData}\n imageCdnUrl={config.data.imageCdnUrl}\n resourceThumbnailFallbackImageUrl={ImageUrls.Fallbacks.RESOURCE_THUMBNAIL}\n emptyImageUrl={isTeacherOnly ? ImageUrls.EmptyStates.Topics.TEACHER_ONLY : ImageUrls.EmptyStates.Topics.TOPIC}\n isComingSoon={isComingSoon}\n showFollowButtonSpinner={showFollowButtonSpinner}\n comingSoonImageUrl={ImageUrls.EmptyStates.Topics.COMING_SOON}\n appLinks={appLinks}\n isPreviewing={isPreviewing}\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n isViewCurrentPresentation={isViewCurrentPresentation}\n canFollowSubjects={canFollowSubjects}\n onSubmitFeedback={\n hasPermissions(PermissionName.CanSubmitFeedback) &&\n onSubmitFeedback\n }\n tableOfContentsId={props.queryParams.tocId}\n yearGroups={yearGroups.data}\n lazyLoad={!SeoHelper.isBot()}\n moviesAndTv={props.queryParams.mtv}\n isTeacherOnly={isTeacherOnly}\n specialEvent={specialEvent.data}\n isBot={SeoHelper.isBot()}\n canViewTopicTabs={canViewTopicTabs}\n hasTopicDirectoryDashboard={hasTopicDirectoryDashboard}\n hasTopicVideosDashboard={hasTopicVideosDashboard}\n tab={TopicsHelper.getActiveTopicTab(classification.data, props.targetType)}\n // just... one... more.. prop....\n isPlugin={isPlugin}\n />\n </div>\n </VideoActionsContext.Provider>\n );\n}\n","import { useSettings } from 'libs/shared/hooks/useSettings';\nimport { DashboardTargetType } from 'libs/shared/interfaces';\n\nimport { useFetchCuratedDashboard } from 'shared/utils/DashboardHelper';\n\nimport { ClassificationViewQueryParams } from '../views/classification/ClassificationViewUtils';\n\nexport function useFetchClassificationDashboard(\n id: string,\n queryParams: ClassificationViewQueryParams,\n targetType: DashboardTargetType\n) {\n const { hasTopicDirectories } = useSettings(null);\n\n const {\n dashboard: curatedTopicDashboard,\n isPreviewing,\n isTeacherOnly\n } = useFetchCuratedDashboard({\n classificationId: id,\n queryParams: queryParams,\n targetType: DashboardTargetType.Classification\n });\n\n const { dashboard: directoryDashboard } = useFetchCuratedDashboard({\n classificationId: id,\n queryParams: queryParams,\n targetType: DashboardTargetType.ClassificationDirectory\n });\n\n const { dashboard: videosDashboard } = useFetchCuratedDashboard({\n classificationId: id,\n queryParams: queryParams,\n targetType: DashboardTargetType.ClassificationVideos\n });\n\n function getDashboard() {\n switch (targetType) {\n case DashboardTargetType.Classification:\n return curatedTopicDashboard;\n case DashboardTargetType.ClassificationDirectory:\n return directoryDashboard;\n case DashboardTargetType.ClassificationVideos:\n return videosDashboard;\n }\n }\n\n return {\n dashboard: getDashboard(),\n canViewTopicTabs: hasTopicDirectories,\n hasTopicDirectoryDashboard: !!directoryDashboard.data,\n hasTopicVideosDashboard: !!videosDashboard.data,\n isTeacherOnly,\n isPreviewing\n };\n}","// extracted by mini-css-extract-plugin\nexport default {\"pillTabSelector\":\"Hdi6o\",\"tab\":\"RvNxr\",\"minWidth\":\"GHSz9\",\"radiusSmall\":\"VhJJa\",\"tabLink\":\"WFyvo\"};"],"names":["PortalHelper","renderInPortalIfExists","component","portalContainer","createPortal","CalendarRequests","calendarEvents","from","to","presentationId","url","publicUrl","key","nextTopicSpecialEvent","classificationId","params","limit","Date","objectType","formatData","events","AudienceItem","props","audience","highlight","setAudience","isDisabled","extraClasses","colourClass","getColourClass","className","onClick","FunctionHelper","role","name","split","map","s","charAt","toUpperCase","substring","join","defaultProps","DashboardStatusConfig","Dashboard","svgName","svgColorClassName","actionName","statusName","getClassName","status","darkMode","wrapperClassName","DashboardStatusBadge","SvgContainer","getPhrase","LanguageService","PreviewBanner","EmojiText","emoji","type","pdfExtensions","docExtensions","textExtensions","excelExtensions","imageExtensions","videoMimeType","archiveExtensions","powerPointExtensions","subtitleExtensions","FileExtensions","IMAGES","VIDEO","MIXED_MEDIA","RESOURCES","SUBTITLES","FileExtensionHelper","getResourceType","extension","ext","toLowerCase","namespace","BackButton","textShadow","backToName","appLink","color","backPhrase","colorClass","textShadowClass","AppLink","size","S","RATIO","width","height","getSizeClass","heading","length","BannerHeader","banner","imageCdnUrl","actions","sortComponent","blockColourClass","specialEvent","portalContainerContext","BannerPortalContext","imageWidth","useBreakpoints","xxl","specialEventIsToday","showComingSoon","today","DateHelper","endDate","startDate","imageOptions","ratio","resizeType","ImageHelper","fallbackBaseUrl","fallbackCategoryName","containerProps","bannerClassName","style","backgroundImage","DetailsComponent","detailsComponent","backButtonAppLink","backButtonText","backButtonClasses","alignLogoLeft","logo","GenericCalendarDate","body","text","month","theme","calendarTheme","Text","phrase","ComingSoonTag","LazyImage","src","Actions","actionsDropdownClassName","container","prevProps","nextProps","PartialBannerHeader","BreadcrumbItem","breadcrumb","active","withBackIcon","Breadcrumbs","breadcrumbs","isMobile","b","idx","PartialBreadcrumbs","numItems","dangerouslySetInnerHTML","__html","TabContents","tab","count","data","PillTabSelector","ref","containerRef","borderRadius","listClassName","tabs","index","analyticsData","analyticsOptions","onSelect","onSelectTab","TableOfContentsList","actionType","entity","location","items","item","localState","DivButton","id","activeId","ScrollHelper","setControlledId","onItemClick","getAppLink","appLinkOptions","replace","FeedbackType","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","handleHttpError","info","customErrorMap","ignoreMap","statusCode","errorMap","FeedbackRequests","submitFeedback","requestData","formValues","endpoints","ids","FollowRequests","follow","userId","success","error","followers","invalidationKeys","unfollow","generateCacheKey","flightObjs","obj","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","forEach","usePrevious","value","current","timer","useTableOfContentsActiveHeading","setActiveId","headingElements","controlledId","scrollPositionRef","observer","IntersectionObserver","headings","window","setTimeout","isIntersecting","target","scrollY","isScrollingUp","curIndex","findIndex","h","prevHeading","rootMargin","element","observe","clearTimeout","disconnect","useTableOfContentsScroll","elements","hasDoneInitialScroll","setHasDoneInitialScroll","previousId","currentId","find","rec","getBoundingClientRect","scrollBy","top","behavior","FeedbackFormHelper","getUserInfo","currentUser","customer","username","email","userType","customerId","cvcId","crmId","customerName","instanceRegion","contentRegion","firstName","givenName","lastName","familyName","mapInstanceRegionToTag","getTags","product","hasStudentExperience","extraTags","tags","push","regionTag","categorizeFiles","files","reduce","result","file","fileInfo","get","videoUrls","imageUrls","getClassificationAppLink","classification","getAllTopicsAppLink","application","action","Separator","ClassificationHeaderDetails","childDashboardVideoCount","childDashboardResourceCount","childClassificationCount","options","smartCount","CuratedClassificationEmptyState","isArchived","dashboard","EmptyState","imageUrl","altText","isReadonly","Tooltip","title","spanHack","addWidgetApplink","icon","disabled","TableOfContentsMobile","isExpanded","setIsExpanded","widgets","IconButton","AnalyticsHelper","TableOfContents","TableOfContentsContainer","widget","currentAppLink","ContextService","tocId","isSmallScreen","TeacherOnlyEmptyState","ctaAppLink","ClassificationComingSoon","isFollowing","canFollowSubjects","ActionButton","onToggleFollow","showSpinner","showFollowButtonSpinner","AudienceFilter","audiences","activeAudiences","setActiveAudiences","SharedViewModelKeys","undefined","storage","onToggleAudience","isSelected","otherParams","activeAudienceNames","a","filter","ObjectHelper","Object","assign","disablePersist","masterId","aa","keys","PARTIAL_AUDIENCES","PartialLoadingHelper","PartialAudienceFilter","ClassificationDashboardAudiences","getTabs","breakpoints","activeTab","isHighlighting","showText","lg","xl","xs","TopicsHelper","appLinks","classificationName","presentation","presentationDescription","description","classificationDirectory","classificationVideos","ClassificationTabs","useDirectoryTabProductTipSwitcher","setProductTipRef","el","ClassificationDashboardNav","isEmpty","hideAudiences","isComingSoon","AudienceHelper","canShowTabs","canViewTopicTabs","hasTopicDirectoryDashboard","hasTopicVideosDashboard","getTopRowClass","getBreadcrumbs","getBottomRowClass","isViewingCurrentPresentation","isHeadingWidget","widgetId","WidgetTypeId","templateId","WidgetTemplate","ClassificationDashboard","isSystemGeneratedDashboard","systemGeneratedVideoWidget","systemGeneratedVideoContent","DashboardRequests","videoList","content","videoListWidgetId","useGetTopicsWidgets","headingRef","Set","initialEmptyWidgets","acc","emptyWidgets","setEmptyWidgets","hash","slice","tableOfContentActiveId","setTableOfContentActiveId","getWidgetContentRequest","widgetTypeId","template","tableOfContentsId","showEmptyState","isTeacherOnly","isPreviewing","values","every","state","onSetIsEmpty","newEmptyState","currentWidget","isHeadingEmpty","subWidgetIndex","headingSubWidget","hideWidget","getWidgetHeading","previousWidget","widgetsInTableOfContents","w","metadata","showInTableOfContents","shouldShowTableOfContents","shouldShowSideTableOfContents","isTopLevelTopic","moviesAndTv","getBannerActions","background","border","isViewCurrentPresentation","comingSoonImageUrl","WidgetContainerView","headingElementRef","getContentRequest","setIsEmpty","setFavourite","canFavourite","yearGroups","isScrollToTargetWidget","scrollToWidgetId","onSubmitFeedback","isBot","hasTableOfContents","lazyLoad","dashboardTarget","widgetIndex","hasPermissions","hasLocalPermissions","companyLogoFallbackUrl","subTextType","contentType","resourceThumbnailFallbackImageUrl","preferences","onToggleFollowClassification","isPlugin","clickable","WidgetHeader","VideoList","videos","getVideoAppLink","v","opts","videoType","contextId","getSubTextAppLink","subText","presentationAudiences","getPreviewQuestionsAppLink","previewQuestions","getClassroomGuideAppLink","classroomGuide","getInteractiveGuidanceAppLink","interactiveGuidance","getResourceGuidanceAppLink","resourceGuidance","emptyImageUrl","widgetWizard","allTopics","PartialClassificationDashboard","TopicNotFoundError","ErrorPageError","OMITTED_PARAMS","CuratedClassificationView","queryParams","setShowFollowButtonSpinner","alerts","fetchAsync","usePermissions","usePluginHelper","config","ConfigRequests","UserRequests","useCurationStudio","openInCurationStudioLabel","isUserCurator","getOpenInCurationStudioLink","PermissionName","CustomerRequests","ClassificationRequests","AudienceRequests","usePresentation","activePresentation","availablePresentations","canAccessPresentation","isAuthenticated","path","targetType","hasTopicDirectories","useSettings","curatedTopicDashboard","directoryDashboard","videosDashboard","getDashboard","useFetchClassificationDashboard","regionAlternatives","useSetPageMetadata","PageMetadataHelper","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","canonicalLink","SeoHelper","stripPresentationSlug","allowIndexing","hrefLang","ClassificationAppLinkHelper","useDeepLinks","app","useLiteFavourites","u","videoActions","useVideoActions","ClassificationStatus","activeAudienceIds","followedClassification","isTogglingCurrentTopic","toString","request","then","workflowPhase","descriptor","args","TextHelper","_classification","appLinkClassification","video","VideoAppLinkHelper","context","RelatedVideosContext","mtv","series","SeriesAppLinkHelper","playlist","resource","videoId","canViewResources","getClassificationAppLinks","presentationName","currentClassificationId","currentClassificationName","followingCurrentClassification","hasCompleted","VideoActionsContext","getClassificationBreadcrumbs","label","button","tooltip","href","MasterType","openInNewTab","ImageUrls","feedback","user","ProductId","reaction","dashboardName","dashboardId","promise","feedbackType"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[9359],{49935:(e,a,t)=>{t.d(a,{Oo:()=>u,b2:()=>d});var n=t(32735),i=t(36848),r=t(86764),c=t(3747),l=t(5859),s=t(35223),o=t(83914),m=function(e){var a=e.breadcrumb,t=a.name,r=a.appLink,c=a.active,l=e.withBackIcon;return n.createElement("li",{className:"breadcrumb-item".concat(c?" active":"")},c?n.createElement("strong",null,t):n.createElement(i.F,{appLink:r},l&&n.createElement(o.x,{svgName:s.vn.ChevronLeft,size:o.S.Small}),n.createElement("span",{className:l?"ms-2":""},t)))},u=function(e){var a=e.breadcrumbs,t=(0,c.a)(r.r.XS),i=null==a?void 0:a.length;return!i||t&&i<2?n.createElement(n.Fragment,null):t?n.createElement("nav",{"aria-label":"breadcrumb"},n.createElement("ol",{className:"breadcrumb m-0 p-0"},n.createElement(m,{breadcrumb:a[i-2],withBackIcon:!0}))):n.createElement("nav",{"aria-label":"breadcrumb"},n.createElement("ol",{className:"breadcrumb m-0 p-0"},a.map((function(e,a){return n.createElement(m,{key:a,breadcrumb:e})}))))},d=n.memo((function(e){var a=e.numItems,t=void 0===a?3:a;return(0,c.a)(r.r.XS)?n.createElement("div",{className:"partial-loading-background",style:{height:"1.3125rem",width:"6rem"}}):n.createElement("nav",{"aria-label":"breadcrumb"},n.createElement("ol",{className:"breadcrumb m-0 p-0"},l.u.getPartialLoadingItems({numItems:t}).map((function(e,a){var t=e.width;return n.createElement("li",{key:a,className:"breadcrumb-item"},n.createElement("span",{className:"d-inline-block partial-loading-background",style:{width:t},dangerouslySetInnerHTML:{__html:"&nbsp"}}))}))))}))},74696:(e,a,t)=>{t.d(a,{S:()=>o});var n=t(32735),i=t(68050),r=t(69111),c=t(9977),l=t(79967);const s={partialOptions:"Gufgq",partialName:"SicQQ",partialDescription:"dPGMq",partialThumbnail:"vZrnb",partialDragHandle:"iq73R"};function o(e){return n.createElement("div",{className:"mx-2"},Array(e.numVideos).fill(null).map((function(a,t){return n.createElement("div",{className:"d-flex",key:t},e.allowBulkActions&&n.createElement("div",{className:"form-check pe-3 pe-sm-2 mx-0 mx-md-2"}),n.createElement(m,Object.assign({},e)))})))}function m(e){var a=(0,l.k)(),t="sm"===c.O.getSize(a,"md"),o=e.withReordering&&!a.xs;return n.createElement(i.Z,{className:"".concat(t?"":"py-2"," flex-grow-1")},n.createElement(r.Z,Object.assign({},c.O.getThumbnailColumns(),{className:"flex-column align-items-flex-start ".concat(t?"pb-2 pe-1":"mb-1 pe-3 pe-md-2")}),n.createElement(i.Z,null,!!o&&n.createElement("div",{className:"d-flex align-items-center justify-content-center col-2"},n.createElement("div",{className:"partial-loading-background ".concat(s.partialDragHandle)})),n.createElement(r.Z,{xs:c.O.getThumbnailColSize(o)},n.createElement("div",{className:"partial-loading-background ".concat(t?"rounded":"rounded-3"," ").concat(s.partialThumbnail)})))),n.createElement(r.Z,Object.assign({},c.O.getDetailsColumns(),{className:t?"pb-2":"px-2"}),n.createElement("div",{className:"partial-loading-background mb-1 ".concat(s.partialName)}),n.createElement("div",{className:"partial-loading-background ".concat(s.partialDescription)})))}o.defaultProps={numVideos:15}},5859:(e,a,t)=>{function n(e,a){(null==a||a>e.length)&&(a=e.length);for(var t=0,n=Array(a);t<a;t++)n[t]=e[t];return n}t.d(a,{u:()=>r});var i={numItems:5,minWidth:50,maxWidth:100},r={getPartialLoadingItems:function(){var e,a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=Object.assign(Object.assign({},i),a);return(e=Array(t.numItems),function(e){if(Array.isArray(e))return n(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,a){if(e){if("string"==typeof e)return n(e,a);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?n(e,a):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).map((function(){return{width:"".concat(Math.max(Math.floor(Math.random()*t.maxWidth),t.minWidth),"px")}}))}}},44110:(e,a,t)=>{t.d(a,{i:()=>c});var n=t(20354),i=t(89454),r=t(86698),c=function(){var e=(0,r.y)({redirectOnError:!0}),a=e.activePresentation,t=e.getFallbackPresentation,c=a||t();return n.a.useBasicFetch(!!c&&i.O.presentationAudiences(c.id))}},35014:(e,a,t)=>{t.d(a,{I:()=>s});var n=t(16714),i=t(12754),r=t(22902),c=t(15311),l=t(11387);function s(){var e=(0,r.T)(),a=e.hasPermissions,t=e.hasLocalPermissions,s=(0,(0,c.r)().hasProduct)(i.x.Primary);return{canViewGlance:a(n.C.ViewVideoGlance),canViewResources:!0,canViewInteractives:s&&a(n.C.ViewVideoInteractives),canViewClips:s&&a(n.C.ViewVideoClips),canViewCurriculumLinks:a(n.C.ViewCurriculums),canUseActions:t(n.E.UseVideoActions),canViewPublicLayout:!t(n.E.WatchVideos)&&l.C.hasRegionPrefix(),canViewResourceItems:t(n.E.ViewVideoResourceItems),canNavigate:s}}},78630:(e,a,t)=>{t.r(a),t.d(a,{ClipClipsView:()=>O});var n=t(32735),i=t(81886),r=t(23481),c=t(20354),l=t(28400),s=t(65858),o=t(49935),m=t(13231),u=t(51365),d=t(183),p=t(43012),v=t(39151),g=t(1666),b=t(31949),f=t(22902),h=t(14070),E=t(97291),k=t(51855),C=t(10671),y=t(27638),w=t(44110),N=t(35014),I=t(22490),V=t(98620),L=t(82431),x=t(16747),A=r.T.encloseNamespace("shared.videoMedia");function O(e){var a,t,r,O,P,S,j,G=e.clipId,F=(0,y.u)(s.LZ.VideoThumbnail),T=F.setFavourite,_=F.canFavourite,R=(0,k.G)().isPlugin,W=(0,C._)({location:C.i.VideoItem}),B=(0,N.I)(),M=c.a.useBasicFetch(b.N.currentUser()),Z=c.a.useBasicFetch(M.data.isAuthenticated&&g.h.yearGroups(M.data.customerId)),D=c.a.useBasicFetch(p.e.clip(G)),$=null===(t=null===(a=D.data)||void 0===a?void 0:a._parentVideo)||void 0===t?void 0:t.id,H=c.a.useBasicFetch($&&B.canViewClips&&p.e.videoClips($)),U=null===(r=null==H?void 0:H.data)||void 0===r?void 0:r.filter((function(e){return e.id.toString()!==G.toString()})),Y=(null==U?void 0:U.length)||0,z=c.a.useBasicFetch(v.L.config()),Q="".concat(A("otherClipsHeading")," (").concat(Y||"",")"),q=(0,w.i)(),X=(0,f.T)().hasPermissions,J=[{name:null===(O=D.data)||void 0===O?void 0:O.name,appLink:Object.assign(Object.assign({},V.Y.playClip),{args:[G,l.m.slugify(null===(P=D.data)||void 0===P?void 0:P.name)]})},{name:Q,appLink:{application:E.O.CLIPS,action:h.e.Clips.CLIP_CLIPS,args:[G,l.m.slugify(null===(S=D.data)||void 0===S?void 0:S.name)]},active:!0}];return n.useEffect((function(){B.canViewClips||function(){var e;i.Q.C$.trigger(Object.assign(Object.assign({},V.Y.playClip),{args:[G,l.m.slugify(null===(e=D.data)||void 0===e?void 0:e.name)]}),{replace:!0})}()}),[B.canViewClips]),D.data&&(null==U?void 0:U.length)&&z.hasCompleted?n.createElement(u.M.Provider,{value:W},n.createElement("div",{className:"px-3"},n.createElement("h1",{className:"h2 mb-2"},Q),n.createElement("div",{className:"mb-2"},n.createElement(o.Oo,{breadcrumbs:J})),n.createElement(m.E4,{videos:U,yearGroups:Z.data,getVideoAppLink:function(a,t){return I.W.getAppLink(a,Object.assign(Object.assign({},t),{context:d.Q.Widget,contextId:e.clipId}))},hasPermissions:X,getSubTextAppLink:function(e){return L.j.getSeriesAppLink(e.series)},setFavourite:T,canFavourite:_,presentationAudiences:q.data,imageCdnUrl:null===(j=z.data)||void 0===j?void 0:j.imageCdnUrl,isPlugin:R,getClassroomGuideAppLink:I.W.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:I.W.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:I.W.getResourceGuidanceAppLink}))):n.createElement(x.l,null)}},98620:(e,a,t)=>{t.d(a,{Y:()=>r});var n=t(14070),i=t(97291),r={playVideo:{application:i.O.VIDEOS,action:n.e.Videos.PLAY_VIDEO},playClip:{application:i.O.CLIPS,action:n.e.Clips.PLAY_CLIP}}},16747:(e,a,t)=>{t.d(a,{l:()=>l});var n=t(32735),i=t(49935),r=t(74696);const c={partialHeading:"okxfx"};function l(){return n.createElement("div",{className:"px-3"},n.createElement("div",{className:"partial-loading-background mb-2 ".concat(c.partialHeading)}),n.createElement("div",{className:"mb-2"},n.createElement(i.b2,null)),n.createElement(r.S,null))}},68050:(e,a,t)=>{t.d(a,{Z:()=>o});var n=t(95685),i=t.n(n),r=t(32735),c=t(46304),l=t(74512);const s=r.forwardRef((({bsPrefix:e,className:a,as:t="div",...n},r)=>{const s=(0,c.vE)(e,"row"),o=(0,c.pi)(),m=(0,c.zG)(),u=`${s}-cols`,d=[];return o.forEach((e=>{const a=n[e];let t;delete n[e],null!=a&&"object"==typeof a?({cols:t}=a):t=a;const i=e!==m?`-${e}`:"";null!=t&&d.push(`${u}${i}-${t}`)})),(0,l.jsx)(t,{ref:r,...n,className:i()(a,s,...d)})}));s.displayName="Row";const o=s}}]);
2
- //# sourceMappingURL=9359-cc085d48a4-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/9359-cc085d48a4-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/breadcrumbs/Breadcrumbs.tsx","file:///app/packages/libs/shared/src/components/video-list/partial-loading/partial-video-list.scss","file:///app/packages/libs/shared/src/components/video-list/partial-loading/PartialVideoList.tsx","file:///app/packages/libs/shared/src/utils/PartialLoadingHelper.ts","file:///app/packages/projects/lite/src/shared/hooks/usePresentationAudiences.ts","file:///app/packages/projects/lite/src/shared/hooks/useVideoFeatureAccess.ts","file:///app/packages/projects/lite/src/shared/views/video-media/ClipClipsView.tsx","file:///app/packages/projects/lite/src/shared/views/video-media/VideoMediaAppLinks.ts","file:///app/packages/projects/lite/src/shared/views/video-media/partial-loading/partial-video-media-view.scss","file:///app/packages/projects/lite/src/shared/views/video-media/partial-loading/PartialVideoMediaView.tsx","file:///app/node_modules/react-bootstrap/esm/Row.js"],"sourcesContent":["import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { PartialLoadingHelper } from 'libs/shared/utils/PartialLoadingHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { SvgContainer, SvgContainerSize } from '../svg-container/SvgContainer';\n\nexport interface Breadcrumb {\n name: string;\n appLink?: Core.AppLink;\n active?: boolean;\n}\n\ninterface BreadcrumbItemProps {\n breadcrumb: Breadcrumb;\n withBackIcon?: boolean;\n}\n\nexport const BreadcrumbItem = ({ breadcrumb: { name, appLink, active }, withBackIcon }: BreadcrumbItemProps) => (\n <li className={`breadcrumb-item${active ? ' active' : ''}`}>\n {active\n ? <strong>{name}</strong>\n : <AppLink appLink={appLink}>\n {withBackIcon && <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Small} />}\n <span className={withBackIcon ? 'ms-2' : ''}>{name}</span>\n </AppLink>\n }\n </li>\n);\n\ninterface BreadcrumbsProps {\n breadcrumbs: Breadcrumb[];\n}\n\nexport const Breadcrumbs = ({ breadcrumbs }: BreadcrumbsProps) => {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n const length = breadcrumbs?.length;\n\n if (!length || (isMobile && length < 2))\n return <></>;\n\n if (isMobile)\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} withBackIcon />\n </ol>\n </nav>\n );\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {breadcrumbs.map((b, idx) => <BreadcrumbItem key={idx} breadcrumb={b} />)}\n </ol>\n </nav>\n );\n};\n\nexport const PartialBreadcrumbs = React.memo(function({ numItems = 3 }: { numItems?: number; }) {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n if (isMobile) {\n return (\n <div className='partial-loading-background' style={{ height: '1.3125rem', width: '6rem' }} />\n );\n }\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {PartialLoadingHelper.getPartialLoadingItems({ numItems }).map(({ width }, idx) => (\n <li key={idx} className='breadcrumb-item'>\n <span className='d-inline-block partial-loading-background' style={{ width }} dangerouslySetInnerHTML={{ __html: '&nbsp' }} />\n </li>\n ))}\n </ol>\n </nav>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"partialOptions\":\"Gufgq\",\"partialName\":\"SicQQ\",\"partialDescription\":\"dPGMq\",\"partialThumbnail\":\"vZrnb\",\"partialDragHandle\":\"iq73R\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { VideoListHelper } from 'libs/shared/components/video-list/VideoListHelper';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport styles from './partial-video-list.scss';\n\ninterface PartialVideoListProps {\n withReordering?: boolean;\n numVideos?: number;\n allowBulkActions?: boolean;\n}\n\nPartialVideoList.defaultProps = {\n numVideos: 15\n};\n\nexport function PartialVideoList(props: PartialVideoListProps): JSX.Element {\n return (\n <div className='mx-2'>\n {Array(props.numVideos).fill(null).map((_, i) => (\n <div className='d-flex' key={i}>\n {props.allowBulkActions && <div className='form-check pe-3 pe-sm-2 mx-0 mx-md-2' />}\n <PartialVideoItem {...props} />\n </div>\n ))}\n </div>\n );\n}\n\nexport function PartialVideoItem(props: PartialVideoListProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n const size = VideoListHelper.getSize(breakpoints, 'md');\n const isSmall = size === 'sm';\n\n const withDragHandle = props.withReordering && !breakpoints.xs;\n\n return (\n <Row className={`${isSmall ? '' : 'py-2'} flex-grow-1`}>\n <Col {...VideoListHelper.getThumbnailColumns()} className={`flex-column align-items-flex-start ${isSmall ? `pb-2 pe-1` : 'mb-1 pe-3 pe-md-2'}`}>\n <Row>\n {!!withDragHandle && (\n <div className='d-flex align-items-center justify-content-center col-2'>\n <div className={`partial-loading-background ${styles.partialDragHandle}`} />\n </div>\n )}\n <Col xs={VideoListHelper.getThumbnailColSize(withDragHandle)}>\n <div className={`partial-loading-background ${isSmall ? 'rounded' : 'rounded-3'} ${styles.partialThumbnail}`} />\n </Col>\n </Row>\n </Col>\n <Col {...VideoListHelper.getDetailsColumns()} className={isSmall ? 'pb-2' : 'px-2'}>\n <div className={`partial-loading-background mb-1 ${styles.partialName}`} />\n <div className={`partial-loading-background ${styles.partialDescription}`} />\n </Col>\n </Row>\n );\n}\n\n","const DEFAULT_PARTIAL_LOADING_OPTIONS: PartialLoadingOptions = {\n numItems: 5,\n minWidth: 50, // px\n maxWidth: 100 // px\n};\n\nexport interface PartialLoadingOptions {\n numItems?: number;\n minWidth?: number;\n maxWidth?: number;\n}\n\ninterface PartialLoadingItem {\n width: string;\n}\n\nexport const PartialLoadingHelper = {\n getPartialLoadingItems(options: PartialLoadingOptions = {}): PartialLoadingItem[] {\n const opts = {\n ...DEFAULT_PARTIAL_LOADING_OPTIONS,\n ...options\n };\n\n const getRandomFilterWidth = () => Math.max(Math.floor(Math.random() * opts.maxWidth), opts.minWidth);\n\n return [...Array(opts.numItems)].map(() => ({ width: `${getRandomFilterWidth()}px` }));\n }\n};","import { Flight } from 'libs/common/react/index';\n\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\nimport { usePresentation } from 'shared/hooks/usePresentation';\n\nexport const usePresentationAudiences = () => {\n const { activePresentation, getFallbackPresentation } = usePresentation({ redirectOnError: true });\n\n const presentation = activePresentation || getFallbackPresentation();\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n !!presentation &&\n AudienceRequests.presentationAudiences(presentation.id)\n );\n\n return audiences;\n};","import { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\n\nimport { LiteRouteHelper } from 'shared/utils/LiteRouteHelper';\n\nexport interface VideoFeaturesHash {\n canViewGlance: boolean;\n canViewResources: boolean;\n canViewInteractives: boolean;\n canViewClips: boolean;\n canUseActions: boolean;\n canViewPublicLayout: boolean;\n canNavigate: boolean;\n canViewCurriculumLinks: boolean;\n canViewResourceItems: boolean;\n}\n\nexport function useVideoFeatureAccess() {\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n const { hasProduct } = useProducts();\n\n const hasNP = hasProduct(ProductId.Primary);\n\n function showPublicLayout(): boolean {\n /**\n * Authenticated users should never see the placeholder\n */\n if (hasLocalPermissions(LocalPermissionName.WatchVideos))\n return false;\n\n /**\n * Accessing a play page unathenticated will have different contextual behabviours:\n * - For a share page, the user should see the video and never the placeholder\n * - For a public browsing page (ie. using a route-prefix) they should see the placeholder\n */\n return LiteRouteHelper.hasRegionPrefix();\n }\n\n return {\n canViewGlance: hasPermissions(PermissionName.ViewVideoGlance),\n canViewResources: true,\n canViewInteractives: hasNP && hasPermissions(PermissionName.ViewVideoInteractives),\n canViewClips: hasNP && hasPermissions(PermissionName.ViewVideoClips),\n canViewCurriculumLinks: hasPermissions(PermissionName.ViewCurriculums),\n canUseActions: hasLocalPermissions(LocalPermissionName.UseVideoActions),\n canViewPublicLayout: showPublicLayout(),\n canViewResourceItems: hasLocalPermissions(LocalPermissionName.ViewVideoResourceItems),\n canNavigate: hasNP\n };\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { Breadcrumb, Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { RelatedVideosContext } from 'libs/shared/enums/RelatedVideosContext';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { Clip, Config, CurrentUser, YearGroup } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { usePresentationAudiences } from 'shared/hooks/usePresentationAudiences';\nimport { useVideoFeatureAccess } from 'shared/hooks/useVideoFeatureAccess';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\nimport { VideoMediaAppLinks } from 'shared/views/video-media/VideoMediaAppLinks';\n\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nimport { PartialVideoMediaView } from './partial-loading/PartialVideoMediaView';\n\nconst namespace = 'shared.videoMedia';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ClipClipsViewProps {\n clipId: string;\n}\n\nexport function ClipClipsView(props: ClipClipsViewProps): JSX.Element {\n const { clipId } = props;\n const { setFavourite, canFavourite } = useLiteFavourites(LocationContext.VideoThumbnail);\n const { isPlugin } = usePluginHelper();\n \n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem });\n const featureAccess = useVideoFeatureAccess();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const clip = Flight.useBasicFetch<Clip>(ClipRequests.clip(clipId));\n const parentVideoId = clip.data?._parentVideo?.id;\n const clips = Flight.useBasicFetch<Clip[]>(\n parentVideoId && featureAccess.canViewClips && ClipRequests.videoClips(parentVideoId)\n );\n \n const content = clips?.data?.filter(clip => clip.id.toString() !== clipId.toString());\n const count = content?.length || 0;\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const title = `${getPhrase('otherClipsHeading')} (${count || ''})`;\n\n const audiences = usePresentationAudiences();\n const { hasPermissions } = usePermissions();\n\n const breadcrumbs: Breadcrumb[] = [{\n name: clip.data?.name,\n appLink: {\n ...VideoMediaAppLinks.playClip,\n args: [ clipId, TextHelper.slugify(clip.data?.name) ]\n }\n }, {\n name: title,\n appLink: {\n application: AppChannels.CLIPS,\n action: Actions.Clips.CLIP_CLIPS,\n args: [ clipId, TextHelper.slugify(clip.data?.name) ]\n },\n active: true\n }];\n\n function redirectToPlaypage(): void {\n Core.AppLinkHelper.trigger({\n ...VideoMediaAppLinks.playClip,\n args: [ clipId, TextHelper.slugify(clip.data?.name) ]\n }, { replace: true });\n }\n\n React.useEffect(() => {\n if (!featureAccess.canViewClips) {\n redirectToPlaypage();\n }\n }, [featureAccess.canViewClips]);\n\n if (!clip.data || !content?.length || !config.hasCompleted)\n return <PartialVideoMediaView />;\n\n return (\n <VideoActionsContext.Provider value={videoActions}>\n <div className='px-3'>\n <h1 className='h2 mb-2'>{title}</h1>\n \n <div className='mb-2'>\n <Breadcrumbs breadcrumbs={breadcrumbs}/>\n </div>\n\n <VideoList\n videos={content}\n yearGroups={yearGroups.data}\n getVideoAppLink={(video, opts) => VideoAppLinkHelper.getAppLink(video, {\n ...opts,\n context: RelatedVideosContext.Widget,\n contextId: props.clipId\n })}\n hasPermissions={hasPermissions}\n getSubTextAppLink={video => SeriesAppLinkHelper.getSeriesAppLink(video.series)}\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n presentationAudiences={audiences.data}\n imageCdnUrl={config.data?.imageCdnUrl}\n isPlugin={isPlugin}\n getClassroomGuideAppLink={VideoAppLinkHelper.getClassroomGuideAppLink}\n getInteractiveGuidanceAppLink={VideoAppLinkHelper.getInteractiveGuidanceAppLink}\n getResourceGuidanceAppLink={VideoAppLinkHelper.getResourceGuidanceAppLink}\n />\n </div>\n </VideoActionsContext.Provider>\n );\n}","\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nexport const VideoMediaAppLinks = {\n playVideo: {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO\n },\n playClip: {\n application: AppChannels.CLIPS,\n action: Actions.Clips.PLAY_CLIP\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"partialHeading\":\"okxfx\"};","import React from 'react';\n\nimport { PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\n\nimport styles from './partial-video-media-view.scss';\n\nexport function PartialVideoMediaView(): JSX.Element {\n return (\n <div className='px-3'>\n <div className={`partial-loading-background mb-2 ${styles.partialHeading}`} />\n <div className='mb-2'>\n <PartialBreadcrumbs/>\n </div>\n <PartialVideoList />\n </div>\n );\n}","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useBootstrapPrefix, useBootstrapBreakpoints, useBootstrapMinBreakpoint } from './ThemeProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst Row = /*#__PURE__*/React.forwardRef(({\n bsPrefix,\n className,\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'div',\n ...props\n}, ref) => {\n const decoratedBsPrefix = useBootstrapPrefix(bsPrefix, 'row');\n const breakpoints = useBootstrapBreakpoints();\n const minBreakpoint = useBootstrapMinBreakpoint();\n const sizePrefix = `${decoratedBsPrefix}-cols`;\n const classes = [];\n breakpoints.forEach(brkPoint => {\n const propValue = props[brkPoint];\n delete props[brkPoint];\n let cols;\n if (propValue != null && typeof propValue === 'object') {\n ({\n cols\n } = propValue);\n } else {\n cols = propValue;\n }\n const infix = brkPoint !== minBreakpoint ? `-${brkPoint}` : '';\n if (cols != null) classes.push(`${sizePrefix}${infix}-${cols}`);\n });\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: classNames(className, decoratedBsPrefix, ...classes)\n });\n});\nRow.displayName = 'Row';\nexport default Row;"],"names":["BreadcrumbItem","breadcrumb","name","appLink","active","withBackIcon","className","svgName","size","S","Breadcrumbs","breadcrumbs","isMobile","length","map","b","idx","key","PartialBreadcrumbs","numItems","style","height","width","dangerouslySetInnerHTML","__html","PartialVideoList","props","Array","numVideos","fill","_","i","allowBulkActions","PartialVideoItem","breakpoints","useBreakpoints","isSmall","VideoListHelper","withDragHandle","withReordering","xs","Row","Col","defaultProps","DEFAULT_PARTIAL_LOADING_OPTIONS","minWidth","maxWidth","PartialLoadingHelper","getPartialLoadingItems","options","opts","Math","max","floor","random","usePresentationAudiences","redirectOnError","activePresentation","getFallbackPresentation","presentation","id","useVideoFeatureAccess","hasPermissions","hasLocalPermissions","hasNP","hasProduct","canViewGlance","canViewResources","canViewInteractives","canViewClips","canViewCurriculumLinks","canUseActions","canViewPublicLayout","canViewResourceItems","canNavigate","getPhrase","ClipClipsView","clipId","u","setFavourite","canFavourite","isPlugin","videoActions","location","featureAccess","currentUser","yearGroups","data","isAuthenticated","customerId","clip","parentVideoId","_parentVideo","clips","content","filter","toString","count","config","title","audiences","args","application","action","replace","redirectToPlaypage","hasCompleted","value","videos","getVideoAppLink","video","context","contextId","getSubTextAppLink","series","presentationAudiences","imageCdnUrl","getClassroomGuideAppLink","getInteractiveGuidanceAppLink","getResourceGuidanceAppLink","VideoMediaAppLinks","playVideo","playClip","PartialVideoMediaView","bsPrefix","as","Component","ref","decoratedBsPrefix","minBreakpoint","sizePrefix","classes","forEach","brkPoint","propValue","cols","infix","push","displayName"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[9399],{49935:(e,a,t)=>{t.d(a,{Oo:()=>u,b2:()=>d});var n=t(32735),i=t(36848),r=t(86764),c=t(3747),l=t(5859),s=t(35223),o=t(83914),m=function(e){var a=e.breadcrumb,t=a.name,r=a.appLink,c=a.active,l=e.withBackIcon;return n.createElement("li",{className:"breadcrumb-item".concat(c?" active":"")},c?n.createElement("strong",null,t):n.createElement(i.F,{appLink:r},l&&n.createElement(o.x,{svgName:s.vn.ChevronLeft,size:o.S.Small}),n.createElement("span",{className:l?"ms-2":""},t)))},u=function(e){var a=e.breadcrumbs,t=(0,c.a)(r.r.XS),i=null==a?void 0:a.length;return!i||t&&i<2?n.createElement(n.Fragment,null):t?n.createElement("nav",{"aria-label":"breadcrumb"},n.createElement("ol",{className:"breadcrumb m-0 p-0"},n.createElement(m,{breadcrumb:a[i-2],withBackIcon:!0}))):n.createElement("nav",{"aria-label":"breadcrumb"},n.createElement("ol",{className:"breadcrumb m-0 p-0"},a.map((function(e,a){return n.createElement(m,{key:a,breadcrumb:e})}))))},d=n.memo((function(e){var a=e.numItems,t=void 0===a?3:a;return(0,c.a)(r.r.XS)?n.createElement("div",{className:"partial-loading-background",style:{height:"1.3125rem",width:"6rem"}}):n.createElement("nav",{"aria-label":"breadcrumb"},n.createElement("ol",{className:"breadcrumb m-0 p-0"},l.u.getPartialLoadingItems({numItems:t}).map((function(e,a){var t=e.width;return n.createElement("li",{key:a,className:"breadcrumb-item"},n.createElement("span",{className:"d-inline-block partial-loading-background",style:{width:t},dangerouslySetInnerHTML:{__html:"&nbsp"}}))}))))}))},74696:(e,a,t)=>{t.d(a,{S:()=>o});var n=t(32735),i=t(68050),r=t(69111),c=t(9977),l=t(79967);const s={partialOptions:"Gufgq",partialName:"SicQQ",partialDescription:"dPGMq",partialThumbnail:"vZrnb",partialDragHandle:"iq73R"};function o(e){return n.createElement("div",{className:"mx-2"},Array(e.numVideos).fill(null).map((function(a,t){return n.createElement("div",{className:"d-flex",key:t},e.allowBulkActions&&n.createElement("div",{className:"form-check pe-3 pe-sm-2 mx-0 mx-md-2"}),n.createElement(m,Object.assign({},e)))})))}function m(e){var a=(0,l.k)(),t="sm"===c.O.getSize(a,"md"),o=e.withReordering&&!a.xs;return n.createElement(i.Z,{className:"".concat(t?"":"py-2"," flex-grow-1")},n.createElement(r.Z,Object.assign({},c.O.getThumbnailColumns(),{className:"flex-column align-items-flex-start ".concat(t?"pb-2 pe-1":"mb-1 pe-3 pe-md-2")}),n.createElement(i.Z,null,!!o&&n.createElement("div",{className:"d-flex align-items-center justify-content-center col-2"},n.createElement("div",{className:"partial-loading-background ".concat(s.partialDragHandle)})),n.createElement(r.Z,{xs:c.O.getThumbnailColSize(o)},n.createElement("div",{className:"partial-loading-background ".concat(t?"rounded":"rounded-3"," ").concat(s.partialThumbnail)})))),n.createElement(r.Z,Object.assign({},c.O.getDetailsColumns(),{className:t?"pb-2":"px-2"}),n.createElement("div",{className:"partial-loading-background mb-1 ".concat(s.partialName)}),n.createElement("div",{className:"partial-loading-background ".concat(s.partialDescription)})))}o.defaultProps={numVideos:15}},5859:(e,a,t)=>{function n(e,a){(null==a||a>e.length)&&(a=e.length);for(var t=0,n=Array(a);t<a;t++)n[t]=e[t];return n}t.d(a,{u:()=>r});var i={numItems:5,minWidth:50,maxWidth:100},r={getPartialLoadingItems:function(){var e,a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=Object.assign(Object.assign({},i),a);return(e=Array(t.numItems),function(e){if(Array.isArray(e))return n(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,a){if(e){if("string"==typeof e)return n(e,a);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?n(e,a):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).map((function(){return{width:"".concat(Math.max(Math.floor(Math.random()*t.maxWidth),t.minWidth),"px")}}))}}},44110:(e,a,t)=>{t.d(a,{i:()=>c});var n=t(20354),i=t(89454),r=t(86698),c=function(){var e=(0,r.y)({redirectOnError:!0}),a=e.activePresentation,t=e.getFallbackPresentation,c=a||t();return n.a.useBasicFetch(!!c&&i.O.presentationAudiences(c.id))}},35014:(e,a,t)=>{t.d(a,{I:()=>s});var n=t(16714),i=t(12754),r=t(22902),c=t(15311),l=t(11387);function s(){var e=(0,r.T)(),a=e.hasPermissions,t=e.hasLocalPermissions,s=(0,(0,c.r)().hasProduct)(i.x.Primary);return{canViewGlance:a(n.C.ViewVideoGlance),canViewResources:!0,canViewInteractives:s&&a(n.C.ViewVideoInteractives),canViewClips:s&&a(n.C.ViewVideoClips),canViewCurriculumLinks:a(n.C.ViewCurriculums),canUseActions:t(n.E.UseVideoActions),canViewPublicLayout:!t(n.E.WatchVideos)&&l.C.hasRegionPrefix(),canViewResourceItems:t(n.E.ViewVideoResourceItems),canNavigate:s}}},33915:(e,a,t)=>{t.r(a),t.d(a,{VideoInteractivesView:()=>S});var n=t(32735),i=t(81886),r=t(23481),c=t(20354),l=t(28400),s=t(65858),o=t(49935),m=t(13231),u=t(51365),d=t(183),p=t(39151),v=t(1666),g=t(20768),b=t(31949),f=t(1575),E=t(22902),h=t(14070),k=t(97291),I=t(51855),V=t(10671),y=t(27638),w=t(44110),N=t(35014),A=t(10741),L=t(22490),O=t(16747),x=t(98620),C=t(82431),P=r.T.encloseNamespace("shared.videoMedia");function S(e){var a,t,r,S,j=e.videoId,G=(0,y.u)(s.LZ.VideoThumbnail),F=G.setFavourite,T=G.canFavourite,R=(0,I.G)().isPlugin,W=(0,V._)({location:V.i.VideoItem}),_=(0,N.I)(),B=c.a.useBasicFetch(b.N.currentUser()),D=c.a.useBasicFetch(B.data.isAuthenticated&&v.h.yearGroups(B.data.customerId)),M=c.a.useBasicFetch(f.R.video(j)),Z=c.a.useBasicFetch(_.canViewInteractives&&g.b.videoInteractives(j)),$=null==Z?void 0:Z.data,H=(null==$?void 0:$.length)||0,Q=c.a.useBasicFetch(p.L.config()),U="".concat(P("interactivesHeading")," (").concat(H||"",")"),Y=(0,w.i)(),z=(0,E.T)().hasPermissions,q=[{name:null===(a=M.data)||void 0===a?void 0:a.name,appLink:Object.assign(Object.assign({},x.Y.playVideo),{args:[j,l.m.slugify(null===(t=M.data)||void 0===t?void 0:t.name)]})},{name:U,appLink:{application:k.O.VIDEOS,action:h.e.Videos.VIDEO_INTERACTIVES,args:[j,l.m.slugify(null===(r=M.data)||void 0===r?void 0:r.name)]},active:!0}];return n.useEffect((function(){_.canViewInteractives||function(){var e;i.Q.C$.trigger(Object.assign(Object.assign({},x.Y.playVideo),{args:[j,l.m.slugify(null===(e=M.data)||void 0===e?void 0:e.name)]}),{replace:!0})}()}),[_.canViewInteractives]),M.data&&(null==$?void 0:$.length)&&Q.hasCompleted?n.createElement(u.M.Provider,{value:W},n.createElement("div",{className:"px-3"},n.createElement("h1",{className:"h2 mb-2"},U),n.createElement("div",{className:"mb-2"},n.createElement(o.Oo,{breadcrumbs:q})),n.createElement(m.E4,{videos:$,yearGroups:D.data,getVideoAppLink:function(a,t){return L.W.getAppLink(a,Object.assign(Object.assign({},t),{context:d.Q.Widget,contextId:e.videoId}))},hasPermissions:z,getSubTextAppLink:function(e){return C.j.getSeriesAppLink(e.series)},setFavourite:F,canFavourite:T,presentationAudiences:Y.data,getPreviewQuestionsAppLink:function(e){return A.j.getPreviewQuestionsAppLink(e)},imageCdnUrl:null===(S=Q.data)||void 0===S?void 0:S.imageCdnUrl,isPlugin:R,getClassroomGuideAppLink:L.W.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:L.W.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:L.W.getResourceGuidanceAppLink}))):n.createElement(O.l,null)}},98620:(e,a,t)=>{t.d(a,{Y:()=>r});var n=t(14070),i=t(97291),r={playVideo:{application:i.O.VIDEOS,action:n.e.Videos.PLAY_VIDEO},playClip:{application:i.O.CLIPS,action:n.e.Clips.PLAY_CLIP}}},16747:(e,a,t)=>{t.d(a,{l:()=>l});var n=t(32735),i=t(49935),r=t(74696);const c={partialHeading:"okxfx"};function l(){return n.createElement("div",{className:"px-3"},n.createElement("div",{className:"partial-loading-background mb-2 ".concat(c.partialHeading)}),n.createElement("div",{className:"mb-2"},n.createElement(i.b2,null)),n.createElement(r.S,null))}},68050:(e,a,t)=>{t.d(a,{Z:()=>o});var n=t(95685),i=t.n(n),r=t(32735),c=t(46304),l=t(74512);const s=r.forwardRef((({bsPrefix:e,className:a,as:t="div",...n},r)=>{const s=(0,c.vE)(e,"row"),o=(0,c.pi)(),m=(0,c.zG)(),u=`${s}-cols`,d=[];return o.forEach((e=>{const a=n[e];let t;delete n[e],null!=a&&"object"==typeof a?({cols:t}=a):t=a;const i=e!==m?`-${e}`:"";null!=t&&d.push(`${u}${i}-${t}`)})),(0,l.jsx)(t,{ref:r,...n,className:i()(a,s,...d)})}));s.displayName="Row";const o=s}}]);
2
- //# sourceMappingURL=9399-2a314327ac-lite.chunk.js.map