@clickview/lite 0.52.3-dev.1 → 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 (282) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/languages/en.json +1 -1
  3. package/dist/scripts/1063-5a732288dc-lite.chunk.js +2 -0
  4. package/dist/scripts/1063-5a732288dc-lite.chunk.js.map +1 -0
  5. package/dist/scripts/{9173-2392d447a6-lite.chunk.js → 1104-f057c6dea1-lite.chunk.js} +3 -3
  6. package/dist/scripts/{9173-2392d447a6-lite.chunk.js.map → 1104-f057c6dea1-lite.chunk.js.map} +1 -1
  7. package/dist/scripts/{1125-aac132b88f-lite.chunk.js → 1125-c5138ef662-lite.chunk.js} +2 -2
  8. package/dist/scripts/1125-c5138ef662-lite.chunk.js.map +1 -0
  9. package/dist/scripts/1169-9b7d850bab-lite.chunk.js +2 -0
  10. package/dist/scripts/1169-9b7d850bab-lite.chunk.js.map +1 -0
  11. package/dist/scripts/{1379-6f35e2e9bb-lite.chunk.js → 1379-ca519ec56b-lite.chunk.js} +3 -3
  12. package/dist/scripts/{1379-6f35e2e9bb-lite.chunk.js.map → 1379-ca519ec56b-lite.chunk.js.map} +1 -1
  13. package/dist/scripts/1672-0d1fc90529-lite.chunk.js +3 -0
  14. package/dist/scripts/1672-0d1fc90529-lite.chunk.js.map +1 -0
  15. package/dist/scripts/1725-99450ed637-lite.chunk.js +2 -0
  16. package/dist/scripts/1725-99450ed637-lite.chunk.js.map +1 -0
  17. package/dist/scripts/1891-5914c54eca-lite.chunk.js +2 -0
  18. package/dist/scripts/1891-5914c54eca-lite.chunk.js.map +1 -0
  19. package/dist/scripts/1896-399a91d18c-lite.chunk.js +2 -0
  20. package/dist/scripts/1896-399a91d18c-lite.chunk.js.map +1 -0
  21. package/dist/scripts/193-797b89797a-lite.chunk.js +2 -0
  22. package/dist/scripts/193-797b89797a-lite.chunk.js.map +1 -0
  23. package/dist/scripts/209-fe96739cb5-lite.chunk.js +2 -0
  24. package/dist/scripts/209-fe96739cb5-lite.chunk.js.map +1 -0
  25. package/dist/scripts/2134-b8d5c46887-lite.chunk.js +2 -0
  26. package/dist/scripts/2134-b8d5c46887-lite.chunk.js.map +1 -0
  27. package/dist/scripts/2142-f71cf5c71f-lite.chunk.js +2 -0
  28. package/dist/scripts/2142-f71cf5c71f-lite.chunk.js.map +1 -0
  29. package/dist/scripts/2402-ff1b4adf1a-lite.chunk.js +2 -0
  30. package/dist/scripts/2402-ff1b4adf1a-lite.chunk.js.map +1 -0
  31. package/dist/scripts/2548-c5dd2899df-lite.chunk.js +2 -0
  32. package/dist/scripts/2548-c5dd2899df-lite.chunk.js.map +1 -0
  33. package/dist/scripts/2952-c3a826b714-lite.chunk.js +2 -0
  34. package/dist/scripts/2952-c3a826b714-lite.chunk.js.map +1 -0
  35. package/dist/scripts/3404-23125f10ea-lite.chunk.js +2 -0
  36. package/dist/scripts/3404-23125f10ea-lite.chunk.js.map +1 -0
  37. package/dist/scripts/3633-f3609526a5-lite.chunk.js +2 -0
  38. package/dist/scripts/3633-f3609526a5-lite.chunk.js.map +1 -0
  39. package/dist/scripts/3728-eed9e78985-lite.chunk.js +2 -0
  40. package/dist/scripts/3728-eed9e78985-lite.chunk.js.map +1 -0
  41. package/dist/scripts/4063-5fa157657f-lite.chunk.js +2 -0
  42. package/dist/scripts/4063-5fa157657f-lite.chunk.js.map +1 -0
  43. package/dist/scripts/4182-ba03f3ce3c-lite.chunk.js +2 -0
  44. package/dist/scripts/4182-ba03f3ce3c-lite.chunk.js.map +1 -0
  45. package/dist/scripts/4273-e42f763f00-lite.chunk.js +3 -0
  46. package/dist/scripts/4273-e42f763f00-lite.chunk.js.map +1 -0
  47. package/dist/scripts/4395-d0815835c8-lite.chunk.js +2 -0
  48. package/dist/scripts/4395-d0815835c8-lite.chunk.js.map +1 -0
  49. package/dist/scripts/4502-af4903784e-lite.chunk.js +2 -0
  50. package/dist/scripts/4502-af4903784e-lite.chunk.js.map +1 -0
  51. package/dist/scripts/4850-bb9541d3ed-lite.chunk.js +2 -0
  52. package/dist/scripts/4850-bb9541d3ed-lite.chunk.js.map +1 -0
  53. package/dist/scripts/5573-4352a3537e-lite.chunk.js +2 -0
  54. package/dist/scripts/5573-4352a3537e-lite.chunk.js.map +1 -0
  55. package/dist/scripts/5595-3acc9593bf-lite.chunk.js +2 -0
  56. package/dist/scripts/5595-3acc9593bf-lite.chunk.js.map +1 -0
  57. package/dist/scripts/5606-69c0ca2b97-lite.chunk.js +2 -0
  58. package/dist/scripts/5606-69c0ca2b97-lite.chunk.js.map +1 -0
  59. package/dist/scripts/5877-628732da21-lite.chunk.js +2 -0
  60. package/dist/scripts/5877-628732da21-lite.chunk.js.map +1 -0
  61. package/dist/scripts/5936-cd98109a7b-lite.chunk.js +2 -0
  62. package/dist/scripts/5936-cd98109a7b-lite.chunk.js.map +1 -0
  63. package/dist/scripts/{5940-f335f8c290-lite.chunk.js → 5940-2767b40c40-lite.chunk.js} +2 -2
  64. package/dist/scripts/5940-2767b40c40-lite.chunk.js.map +1 -0
  65. package/dist/scripts/6054-1e9b86d631-lite.chunk.js +2 -0
  66. package/dist/scripts/6054-1e9b86d631-lite.chunk.js.map +1 -0
  67. package/dist/scripts/6138-2ef7ee071a-lite.chunk.js +2 -0
  68. package/dist/scripts/6138-2ef7ee071a-lite.chunk.js.map +1 -0
  69. package/dist/scripts/{624-575b07d922-lite.chunk.js → 624-09b51a9d32-lite.chunk.js} +3 -3
  70. package/dist/scripts/{624-575b07d922-lite.chunk.js.map → 624-09b51a9d32-lite.chunk.js.map} +1 -1
  71. package/dist/scripts/6263-8a7931bf51-lite.chunk.js +2 -0
  72. package/dist/scripts/6263-8a7931bf51-lite.chunk.js.map +1 -0
  73. package/dist/scripts/6290-28ae0e8a60-lite.chunk.js +2 -0
  74. package/dist/scripts/6290-28ae0e8a60-lite.chunk.js.map +1 -0
  75. package/dist/scripts/6470-9a700cabce-lite.chunk.js +2 -0
  76. package/dist/scripts/6470-9a700cabce-lite.chunk.js.map +1 -0
  77. package/dist/scripts/6481-035d218a77-lite.chunk.js +2 -0
  78. package/dist/scripts/6481-035d218a77-lite.chunk.js.map +1 -0
  79. package/dist/scripts/6532-59e9abf69d-lite.chunk.js +2 -0
  80. package/dist/scripts/6532-59e9abf69d-lite.chunk.js.map +1 -0
  81. package/dist/scripts/6596-f75129c039-lite.chunk.js +2 -0
  82. package/dist/scripts/6596-f75129c039-lite.chunk.js.map +1 -0
  83. package/dist/scripts/6604-9adec889c7-lite.chunk.js +2 -0
  84. package/dist/scripts/6604-9adec889c7-lite.chunk.js.map +1 -0
  85. package/dist/scripts/6746-3f501b95cf-lite.chunk.js +2 -0
  86. package/dist/scripts/6746-3f501b95cf-lite.chunk.js.map +1 -0
  87. package/dist/scripts/714-c00ad56229-lite.chunk.js +2 -0
  88. package/dist/scripts/714-c00ad56229-lite.chunk.js.map +1 -0
  89. package/dist/scripts/7163-84c2b15394-lite.chunk.js +2 -0
  90. package/dist/scripts/7163-84c2b15394-lite.chunk.js.map +1 -0
  91. package/dist/scripts/7178-ed74c33056-lite.chunk.js +2 -0
  92. package/dist/scripts/7178-ed74c33056-lite.chunk.js.map +1 -0
  93. package/dist/scripts/7223-0bfab7e57a-lite.chunk.js +2 -0
  94. package/dist/scripts/7223-0bfab7e57a-lite.chunk.js.map +1 -0
  95. package/dist/scripts/7234-84c087600e-lite.chunk.js +2 -0
  96. package/dist/scripts/7234-84c087600e-lite.chunk.js.map +1 -0
  97. package/dist/scripts/7267-fd5085f5c9-lite.chunk.js +2 -0
  98. package/dist/scripts/7267-fd5085f5c9-lite.chunk.js.map +1 -0
  99. package/dist/scripts/7633-6c1ffdd082-lite.chunk.js +2 -0
  100. package/dist/scripts/7633-6c1ffdd082-lite.chunk.js.map +1 -0
  101. package/dist/scripts/7679-8f2d6a3487-lite.chunk.js +2 -0
  102. package/dist/scripts/7679-8f2d6a3487-lite.chunk.js.map +1 -0
  103. package/dist/scripts/7757-7e293be936-lite.chunk.js +2 -0
  104. package/dist/scripts/7757-7e293be936-lite.chunk.js.map +1 -0
  105. package/dist/scripts/7795-c6d38bc3e5-lite.chunk.js +2 -0
  106. package/dist/scripts/7795-c6d38bc3e5-lite.chunk.js.map +1 -0
  107. package/dist/scripts/7818-230982fc27-lite.chunk.js +2 -0
  108. package/dist/scripts/7818-230982fc27-lite.chunk.js.map +1 -0
  109. package/dist/scripts/8323-360541a2a8-lite.chunk.js +3 -0
  110. package/dist/scripts/8323-360541a2a8-lite.chunk.js.map +1 -0
  111. package/dist/scripts/8709-c4f1068232-lite.chunk.js +2 -0
  112. package/dist/scripts/8709-c4f1068232-lite.chunk.js.map +1 -0
  113. package/dist/scripts/8982-a3dc4a6b3c-lite.chunk.js +2 -0
  114. package/dist/scripts/8982-a3dc4a6b3c-lite.chunk.js.map +1 -0
  115. package/dist/scripts/9010-024dcc8f9a-lite.chunk.js +2 -0
  116. package/dist/scripts/9010-024dcc8f9a-lite.chunk.js.map +1 -0
  117. package/dist/scripts/9016-82d7e0afb9-lite.chunk.js +3 -0
  118. package/dist/scripts/9016-82d7e0afb9-lite.chunk.js.map +1 -0
  119. package/dist/scripts/9173-f9708ec0de-lite.chunk.js +2 -0
  120. package/dist/scripts/9173-f9708ec0de-lite.chunk.js.map +1 -0
  121. package/dist/scripts/9230-ae200d2bd3-lite.chunk.js +3 -0
  122. package/dist/scripts/9230-ae200d2bd3-lite.chunk.js.map +1 -0
  123. package/dist/scripts/9359-1fb4413e0d-lite.chunk.js +2 -0
  124. package/dist/scripts/9359-1fb4413e0d-lite.chunk.js.map +1 -0
  125. package/dist/scripts/{9395-4cf6f3948e-lite.chunk.js → 9395-e1a02b01ce-lite.chunk.js} +3 -3
  126. package/dist/scripts/{9395-4cf6f3948e-lite.chunk.js.map → 9395-e1a02b01ce-lite.chunk.js.map} +1 -1
  127. package/dist/scripts/9399-d7a92ce84a-lite.chunk.js +2 -0
  128. package/dist/scripts/9399-d7a92ce84a-lite.chunk.js.map +1 -0
  129. package/dist/scripts/{9478-99486906b9-lite.chunk.js → 9478-abfa7ed3cc-lite.chunk.js} +3 -3
  130. package/dist/scripts/{9478-99486906b9-lite.chunk.js.map → 9478-abfa7ed3cc-lite.chunk.js.map} +1 -1
  131. package/dist/scripts/{953-fd31f9f016-lite.chunk.js → 953-225db845ab-lite.chunk.js} +3 -3
  132. package/dist/scripts/{953-fd31f9f016-lite.chunk.js.map → 953-225db845ab-lite.chunk.js.map} +1 -1
  133. package/dist/scripts/9719-9736913451-lite.chunk.js +3 -0
  134. package/dist/scripts/9719-9736913451-lite.chunk.js.map +1 -0
  135. package/dist/scripts/999-bdc7956050-lite.chunk.js +2 -0
  136. package/dist/scripts/999-bdc7956050-lite.chunk.js.map +1 -0
  137. package/dist/scripts/bundle-9f8729bedb.min.js +3 -0
  138. package/dist/scripts/bundle-9f8729bedb.min.js.map +1 -0
  139. package/package.json +1 -1
  140. package/dist/scripts/1076-10e5ee6c22-lite.chunk.js +0 -2
  141. package/dist/scripts/1076-10e5ee6c22-lite.chunk.js.map +0 -1
  142. package/dist/scripts/1125-aac132b88f-lite.chunk.js.map +0 -1
  143. package/dist/scripts/1169-9b1c04fd85-lite.chunk.js +0 -2
  144. package/dist/scripts/1169-9b1c04fd85-lite.chunk.js.map +0 -1
  145. package/dist/scripts/1672-672f298d82-lite.chunk.js +0 -3
  146. package/dist/scripts/1672-672f298d82-lite.chunk.js.map +0 -1
  147. package/dist/scripts/1725-075015497e-lite.chunk.js +0 -2
  148. package/dist/scripts/1725-075015497e-lite.chunk.js.map +0 -1
  149. package/dist/scripts/1818-64a145c5fe-lite.chunk.js +0 -2
  150. package/dist/scripts/1818-64a145c5fe-lite.chunk.js.map +0 -1
  151. package/dist/scripts/1820-993521951d-lite.chunk.js +0 -2
  152. package/dist/scripts/1820-993521951d-lite.chunk.js.map +0 -1
  153. package/dist/scripts/1891-e80f9f17ee-lite.chunk.js +0 -2
  154. package/dist/scripts/1891-e80f9f17ee-lite.chunk.js.map +0 -1
  155. package/dist/scripts/1896-32a6eeda5c-lite.chunk.js +0 -2
  156. package/dist/scripts/1896-32a6eeda5c-lite.chunk.js.map +0 -1
  157. package/dist/scripts/193-f08b054631-lite.chunk.js +0 -2
  158. package/dist/scripts/193-f08b054631-lite.chunk.js.map +0 -1
  159. package/dist/scripts/209-de1729d1b1-lite.chunk.js +0 -2
  160. package/dist/scripts/209-de1729d1b1-lite.chunk.js.map +0 -1
  161. package/dist/scripts/2134-bca2f4697e-lite.chunk.js +0 -2
  162. package/dist/scripts/2134-bca2f4697e-lite.chunk.js.map +0 -1
  163. package/dist/scripts/2548-b81ae38f1f-lite.chunk.js +0 -2
  164. package/dist/scripts/2548-b81ae38f1f-lite.chunk.js.map +0 -1
  165. package/dist/scripts/2703-591ccf069c-lite.chunk.js +0 -2
  166. package/dist/scripts/2703-591ccf069c-lite.chunk.js.map +0 -1
  167. package/dist/scripts/3404-171fdee802-lite.chunk.js +0 -2
  168. package/dist/scripts/3404-171fdee802-lite.chunk.js.map +0 -1
  169. package/dist/scripts/3633-66d28be6f8-lite.chunk.js +0 -2
  170. package/dist/scripts/3633-66d28be6f8-lite.chunk.js.map +0 -1
  171. package/dist/scripts/3728-d7ecfc6667-lite.chunk.js +0 -2
  172. package/dist/scripts/3728-d7ecfc6667-lite.chunk.js.map +0 -1
  173. package/dist/scripts/3922-d40b0ce5aa-lite.chunk.js +0 -2
  174. package/dist/scripts/3922-d40b0ce5aa-lite.chunk.js.map +0 -1
  175. package/dist/scripts/4182-7aecc28a6f-lite.chunk.js +0 -2
  176. package/dist/scripts/4182-7aecc28a6f-lite.chunk.js.map +0 -1
  177. package/dist/scripts/4395-64da004753-lite.chunk.js +0 -2
  178. package/dist/scripts/4395-64da004753-lite.chunk.js.map +0 -1
  179. package/dist/scripts/4502-2e30d86385-lite.chunk.js +0 -2
  180. package/dist/scripts/4502-2e30d86385-lite.chunk.js.map +0 -1
  181. package/dist/scripts/5143-b6896dad98-lite.chunk.js +0 -2
  182. package/dist/scripts/5143-b6896dad98-lite.chunk.js.map +0 -1
  183. package/dist/scripts/5573-6cd98b69f2-lite.chunk.js +0 -2
  184. package/dist/scripts/5573-6cd98b69f2-lite.chunk.js.map +0 -1
  185. package/dist/scripts/5595-c4397e12a8-lite.chunk.js +0 -2
  186. package/dist/scripts/5595-c4397e12a8-lite.chunk.js.map +0 -1
  187. package/dist/scripts/5606-6c25caedc4-lite.chunk.js +0 -2
  188. package/dist/scripts/5606-6c25caedc4-lite.chunk.js.map +0 -1
  189. package/dist/scripts/5877-ddfaf6a7f5-lite.chunk.js +0 -2
  190. package/dist/scripts/5877-ddfaf6a7f5-lite.chunk.js.map +0 -1
  191. package/dist/scripts/5936-6fe810d3cb-lite.chunk.js +0 -2
  192. package/dist/scripts/5936-6fe810d3cb-lite.chunk.js.map +0 -1
  193. package/dist/scripts/5940-f335f8c290-lite.chunk.js.map +0 -1
  194. package/dist/scripts/6054-14d4ceeae3-lite.chunk.js +0 -2
  195. package/dist/scripts/6054-14d4ceeae3-lite.chunk.js.map +0 -1
  196. package/dist/scripts/6138-21ae042a7b-lite.chunk.js +0 -2
  197. package/dist/scripts/6138-21ae042a7b-lite.chunk.js.map +0 -1
  198. package/dist/scripts/6263-3455286798-lite.chunk.js +0 -2
  199. package/dist/scripts/6263-3455286798-lite.chunk.js.map +0 -1
  200. package/dist/scripts/6290-56412c6663-lite.chunk.js +0 -2
  201. package/dist/scripts/6290-56412c6663-lite.chunk.js.map +0 -1
  202. package/dist/scripts/6415-b29029aa1b-lite.chunk.js +0 -2
  203. package/dist/scripts/6415-b29029aa1b-lite.chunk.js.map +0 -1
  204. package/dist/scripts/6470-6216086d63-lite.chunk.js +0 -2
  205. package/dist/scripts/6470-6216086d63-lite.chunk.js.map +0 -1
  206. package/dist/scripts/6481-899eba8b3d-lite.chunk.js +0 -2
  207. package/dist/scripts/6481-899eba8b3d-lite.chunk.js.map +0 -1
  208. package/dist/scripts/6532-a6b65c91a7-lite.chunk.js +0 -2
  209. package/dist/scripts/6532-a6b65c91a7-lite.chunk.js.map +0 -1
  210. package/dist/scripts/6604-92193d6d68-lite.chunk.js +0 -2
  211. package/dist/scripts/6604-92193d6d68-lite.chunk.js.map +0 -1
  212. package/dist/scripts/6746-b5b2739944-lite.chunk.js +0 -2
  213. package/dist/scripts/6746-b5b2739944-lite.chunk.js.map +0 -1
  214. package/dist/scripts/679-e18e7956d0-lite.chunk.js +0 -2
  215. package/dist/scripts/679-e18e7956d0-lite.chunk.js.map +0 -1
  216. package/dist/scripts/714-432082f4fa-lite.chunk.js +0 -2
  217. package/dist/scripts/714-432082f4fa-lite.chunk.js.map +0 -1
  218. package/dist/scripts/7178-e603ea6b58-lite.chunk.js +0 -2
  219. package/dist/scripts/7178-e603ea6b58-lite.chunk.js.map +0 -1
  220. package/dist/scripts/7223-135cc7d675-lite.chunk.js +0 -2
  221. package/dist/scripts/7223-135cc7d675-lite.chunk.js.map +0 -1
  222. package/dist/scripts/729-c704d587d3-lite.chunk.js +0 -2
  223. package/dist/scripts/729-c704d587d3-lite.chunk.js.map +0 -1
  224. package/dist/scripts/7679-b01da2c09d-lite.chunk.js +0 -2
  225. package/dist/scripts/7679-b01da2c09d-lite.chunk.js.map +0 -1
  226. package/dist/scripts/7757-320e868e90-lite.chunk.js +0 -2
  227. package/dist/scripts/7757-320e868e90-lite.chunk.js.map +0 -1
  228. package/dist/scripts/7795-3ca0855d3a-lite.chunk.js +0 -2
  229. package/dist/scripts/7795-3ca0855d3a-lite.chunk.js.map +0 -1
  230. package/dist/scripts/7818-2eafc5f812-lite.chunk.js +0 -2
  231. package/dist/scripts/7818-2eafc5f812-lite.chunk.js.map +0 -1
  232. package/dist/scripts/8323-99cb03891e-lite.chunk.js +0 -3
  233. package/dist/scripts/8323-99cb03891e-lite.chunk.js.map +0 -1
  234. package/dist/scripts/8478-0292f02489-lite.chunk.js +0 -2
  235. package/dist/scripts/8478-0292f02489-lite.chunk.js.map +0 -1
  236. package/dist/scripts/8766-bcc7f11eac-lite.chunk.js +0 -2
  237. package/dist/scripts/8766-bcc7f11eac-lite.chunk.js.map +0 -1
  238. package/dist/scripts/8800-335154fe11-lite.chunk.js +0 -2
  239. package/dist/scripts/8800-335154fe11-lite.chunk.js.map +0 -1
  240. package/dist/scripts/8982-63c31685bf-lite.chunk.js +0 -2
  241. package/dist/scripts/8982-63c31685bf-lite.chunk.js.map +0 -1
  242. package/dist/scripts/9016-0c078a39cb-lite.chunk.js +0 -3
  243. package/dist/scripts/9016-0c078a39cb-lite.chunk.js.map +0 -1
  244. package/dist/scripts/9226-c236c0eeb1-lite.chunk.js +0 -2
  245. package/dist/scripts/9226-c236c0eeb1-lite.chunk.js.map +0 -1
  246. package/dist/scripts/9230-6dee40b1fb-lite.chunk.js +0 -3
  247. package/dist/scripts/9230-6dee40b1fb-lite.chunk.js.map +0 -1
  248. package/dist/scripts/9308-362f86711f-lite.chunk.js +0 -3
  249. package/dist/scripts/9308-362f86711f-lite.chunk.js.map +0 -1
  250. package/dist/scripts/9359-cc085d48a4-lite.chunk.js +0 -2
  251. package/dist/scripts/9359-cc085d48a4-lite.chunk.js.map +0 -1
  252. package/dist/scripts/9399-2a314327ac-lite.chunk.js +0 -2
  253. package/dist/scripts/9399-2a314327ac-lite.chunk.js.map +0 -1
  254. package/dist/scripts/9719-cf7d4172b6-lite.chunk.js +0 -3
  255. package/dist/scripts/9719-cf7d4172b6-lite.chunk.js.map +0 -1
  256. package/dist/scripts/bundle-fcc536bb54.min.js +0 -3
  257. package/dist/scripts/bundle-fcc536bb54.min.js.map +0 -1
  258. /package/dist/css/{5143-lite-676baa8218.chunk.css → 1063-lite-676baa8218.chunk.css} +0 -0
  259. /package/dist/css/{9173-lite-b361d438f6.chunk.css → 1104-lite-b361d438f6.chunk.css} +0 -0
  260. /package/dist/css/{679-lite-00eb7dadb2.chunk.css → 2952-lite-00eb7dadb2.chunk.css} +0 -0
  261. /package/dist/css/{4860-lite-93d7fad455.chunk.css → 4063-lite-93d7fad455.chunk.css} +0 -0
  262. /package/dist/css/{9308-lite-a3c7435ba4.chunk.css → 4273-lite-a3c7435ba4.chunk.css} +0 -0
  263. /package/dist/css/{729-lite-93d7fad455.chunk.css → 4850-lite-93d7fad455.chunk.css} +0 -0
  264. /package/dist/css/{3922-lite-e22262b911.chunk.css → 6596-lite-e22262b911.chunk.css} +0 -0
  265. /package/dist/css/{8766-lite-8c5d7658ec.chunk.css → 7163-lite-8c5d7658ec.chunk.css} +0 -0
  266. /package/dist/css/{1818-lite-5ef1706d69.chunk.css → 7234-lite-5ef1706d69.chunk.css} +0 -0
  267. /package/dist/css/{8478-lite-e22262b911.chunk.css → 9010-lite-e22262b911.chunk.css} +0 -0
  268. /package/dist/css/{6415-lite-707657102b.chunk.css → 9173-lite-707657102b.chunk.css} +0 -0
  269. /package/dist/css/{1820-lite-c88eb54bee.chunk.css → 999-lite-c88eb54bee.chunk.css} +0 -0
  270. /package/dist/scripts/{1379-6f35e2e9bb-lite.chunk.js.LICENSE.txt → 1104-f057c6dea1-lite.chunk.js.LICENSE.txt} +0 -0
  271. /package/dist/scripts/{1672-672f298d82-lite.chunk.js.LICENSE.txt → 1379-ca519ec56b-lite.chunk.js.LICENSE.txt} +0 -0
  272. /package/dist/scripts/{624-575b07d922-lite.chunk.js.LICENSE.txt → 1672-0d1fc90529-lite.chunk.js.LICENSE.txt} +0 -0
  273. /package/dist/scripts/{8323-99cb03891e-lite.chunk.js.LICENSE.txt → 4273-e42f763f00-lite.chunk.js.LICENSE.txt} +0 -0
  274. /package/dist/scripts/{9173-2392d447a6-lite.chunk.js.LICENSE.txt → 624-09b51a9d32-lite.chunk.js.LICENSE.txt} +0 -0
  275. /package/dist/scripts/{9230-6dee40b1fb-lite.chunk.js.LICENSE.txt → 8323-360541a2a8-lite.chunk.js.LICENSE.txt} +0 -0
  276. /package/dist/scripts/{9016-0c078a39cb-lite.chunk.js.LICENSE.txt → 9016-82d7e0afb9-lite.chunk.js.LICENSE.txt} +0 -0
  277. /package/dist/scripts/{9308-362f86711f-lite.chunk.js.LICENSE.txt → 9230-ae200d2bd3-lite.chunk.js.LICENSE.txt} +0 -0
  278. /package/dist/scripts/{9395-4cf6f3948e-lite.chunk.js.LICENSE.txt → 9395-e1a02b01ce-lite.chunk.js.LICENSE.txt} +0 -0
  279. /package/dist/scripts/{9478-99486906b9-lite.chunk.js.LICENSE.txt → 9478-abfa7ed3cc-lite.chunk.js.LICENSE.txt} +0 -0
  280. /package/dist/scripts/{953-fd31f9f016-lite.chunk.js.LICENSE.txt → 953-225db845ab-lite.chunk.js.LICENSE.txt} +0 -0
  281. /package/dist/scripts/{9719-cf7d4172b6-lite.chunk.js.LICENSE.txt → 9719-9736913451-lite.chunk.js.LICENSE.txt} +0 -0
  282. /package/dist/scripts/{bundle-fcc536bb54.min.js.LICENSE.txt → bundle-9f8729bedb.min.js.LICENSE.txt} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/1891-5914c54eca-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/forms/form-buttons/FormButtons.tsx","file:///app/packages/libs/shared/src/components/forms/form-checkbox/FormCheckbox.tsx","file:///app/packages/libs/shared/src/components/forms/form-field/CharacterCounter.tsx","file:///app/packages/libs/shared/src/components/forms/form-field/form-field.scss","file:///app/packages/libs/shared/src/components/forms/form-field/FormField.tsx","file:///app/packages/libs/shared/src/components/forms/form-wrapper/FormWrapper.tsx","file:///app/packages/libs/shared/src/utils/FormHelper.ts","file:///app/packages/libs/shared/src/utils/PartialLoadingHelper.ts","file:///app/packages/projects/lite/src/apps/settings/components/settings-layout/SettingsLayout.tsx","file:///app/packages/projects/lite/src/shared/flight-requests/FileGeneratorRequests.ts","file:///app/packages/projects/lite/src/apps/settings/utils/LibraryHelper.ts","file:///app/packages/projects/lite/src/apps/settings/views/export-libraries/export-libraries.scss","file:///app/packages/projects/lite/src/apps/settings/views/export-libraries/ExportLibrariesForm.tsx","file:///app/packages/projects/lite/src/apps/settings/views/export-libraries/ExportLibrariesView.tsx"],"sourcesContent":["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 { 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\nconst namespace = 'shared.breadcrumbComponent';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst COLLAPSE_CHARACTER_COUNT = 56;\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 = React.forwardRef((\n props: BreadcrumbItemProps,\n ref: React.ForwardedRef<HTMLElement>\n) => {\n const { breadcrumb: { name, appLink, active }, withBackIcon } = props;\n return (\n <li className={`breadcrumb-item${active ? ' active' : ''}`}>\n {active\n ? <strong>{name}</strong>\n : <AppLink appLink={appLink} ref={ref}>\n {withBackIcon && <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Small} />}\n <span className={withBackIcon ? 'ms-2' : ''}>{name}</span>\n </AppLink>\n }\n </li>\n );\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 || 0;\n \n const [ collapse, setCollapse ] = React.useState(false);\n const [ shouldFocus, setShouldFocus ] = React.useState(false);\n const expandRef = React.useRef<HTMLElement>();\n\n React.useEffect(() => {\n const characterLength = breadcrumbs?.reduce((prev, next) => prev + next.name.length, 0) ?? 0;\n\n if (length > 3 && characterLength > COLLAPSE_CHARACTER_COUNT)\n setCollapse(true);\n }, [breadcrumbs?.length]);\n\n /**\n * Focus our first expanded item the first time it appears.\n */\n React.useLayoutEffect(() => {\n if (shouldFocus)\n expandRef.current?.focus();\n }, [ expandRef.current, shouldFocus ]);\n\n function onClickExpand() {\n setCollapse(false);\n setShouldFocus(true);\n }\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 const first = <BreadcrumbItem breadcrumb={breadcrumbs[0]} />;\n const secondLast = length > 2 ? <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} /> : <></>;\n const last = <BreadcrumbItem breadcrumb={breadcrumbs[length - 1]} />;\n const rest = breadcrumbs.slice(1, length - 2);\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {first}\n {collapse ?\n <li className='breadcrumb-item'>\n <button\n className='btn-link'\n onClick={onClickExpand}\n aria-label={getPhrase('expand')}\n >\n ...\n </button>\n </li> :\n rest.map((breadcrumb, idx) => (\n <BreadcrumbItem\n key={idx}\n breadcrumb={breadcrumb}\n ref={idx === 0 ? expandRef : null}\n />\n ))\n }\n {secondLast}\n {last}\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 * as React from 'react';\nimport { ButtonProps } from 'react-bootstrap';\nimport { useFormikContext } from 'formik';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FormSize } from 'libs/shared/components/forms/form-field/FormField';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useCanSubmitForm } from 'libs/shared/hooks/UseCanSubmitForm';\n\nconst namespace = 'shared.formButtons';\n\ninterface FormButtonsProps {\n isNew?: boolean;\n submitText?: string;\n variant?: ButtonProps['variant'];\n size?: FormSize;\n className?: string;\n}\n\nexport function FormButtons<Values extends HashObject>(props: FormButtonsProps): JSX.Element {\n const formikProps = useFormikContext<Values>();\n\n const canSubmit = useCanSubmitForm(formikProps);\n\n return (\n <SpinnerButton\n variant={props.variant || 'primary'}\n type='submit'\n disabled={!canSubmit}\n size={props.size}\n className={props.className ? props.className : ''}\n showSpinner={formikProps.isSubmitting}\n >\n {props.submitText\n ? <>{props.submitText}</>\n : <Text namespace={namespace} phrase={props.isNew ? 'create' : 'save'} />}\n </SpinnerButton>\n );\n}\n","import * as React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { FieldAttributes } from 'formik';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport { FieldWrapper, FormFieldProps } from '../form-field/FormField';\n\n/**\n * Use this checkbox within Formik contexts\n */\nexport function FormCheckbox(props: FieldAttributes<FormFieldProps>): JSX.Element {\n const { label, checkboxLabelClassName, checkboxLabelFontWeight, className, ...fieldProps } = props;\n\n return (\n <Form.Group className='form-group'>\n <div className={`form-check ${className || ''}`}>\n <FieldWrapper className='form-check-input' {...fieldProps} />\n <Form.Label\n className={`form-check-label cursor-pointer ${checkboxLabelFontWeight === 'normal' ? 'fw-normal' : ''} \n ${checkboxLabelClassName}`}\n htmlFor={fieldProps.id}\n >\n {label}\n </Form.Label>\n {props.checkboxAppLink && props.checkboxAppLinkText && (\n <>\n <span>&nbsp;</span>\n <AppLink appLink={props.checkboxAppLink} className='info-link'>\n {props.checkboxAppLinkText}\n </AppLink>\n </>\n )}\n </div>\n </Form.Group>\n );\n}\n\n","import * as React from 'react';\nimport { useFormikContext } from 'formik';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\ninterface CharacterCounterProps<Values extends HashObject> {\n fieldName: keyof Values;\n limit: number;\n}\n\nexport function CharacterCounter<Values extends HashObject>(props: CharacterCounterProps<Values>): JSX.Element {\n const { values } = useFormikContext<Values>();\n\n const field = values[props.fieldName];\n\n if (typeof field !== 'string')\n return <></>;\n\n return (\n <div className='float-end text-secondary fw-normal'>\n {field.length}/{props.limit} characters\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"revealPassword\":\"jCfI0\",\"passwordInput\":\"RBJnf\",\"passwordContainer\":\"d78lK\",\"passwordContainerDisabled\":\"asbVo\",\"infoTooltip\":\"wzyOG\",\"spinner\":\"CycFx\"};","import * as React from 'react';\nimport { Form, Spinner } from 'react-bootstrap';\nimport { Placement } from 'react-bootstrap/esm/types';\nimport { ErrorMessage, Field, FieldAttributes, FieldProps, useFormikContext } from 'formik';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { FormCheckbox } from 'libs/shared/components/forms/form-checkbox/FormCheckbox';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { FormHelper } from 'libs/shared/utils/FormHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { CharacterCounter } from './CharacterCounter';\n\nimport styles from './form-field.scss';\n\nconst namespace = 'shared.formField';\n\nexport type FormSize = 'lg' | 'sm';\n\n// If checkboxLabelFontWeight is not specified, it will be bold by default\nexport type CheckboxLabelFontWeight = 'normal' | 'bold'\n\nexport interface FormFieldProps {\n /**\n * The name prop MUST be the same as the attribute\n * name of the value that the field is bound to.\n */\n name: string;\n label?: string;\n children?: any;\n showCharacterCounter?: boolean;\n showRequiredStar?: boolean;\n checkboxAppLink?: Core.AppLink;\n checkboxAppLinkText?: string;\n checkboxLabelClassName?: string;\n checkboxLabelFontWeight?: CheckboxLabelFontWeight\n infoTooltip?: string;\n infoTooltipPlacement?: Placement;\n infoText?: string;\n formSize?: FormSize;\n showOptionalLabel?: boolean;\n showLoadingSpinner?: boolean;\n}\n\nFieldWrapper.defaultProps = {\n autoComplete: 'off'\n};\n\nexport function FieldWrapper(\n props: FieldAttributes<FormFieldProps> & { className: string }\n): React.ReactElement {\n const { children, showLoadingSpinner, ...fieldProps } = props;\n\n const [ type, setType ] = React.useState(props.type);\n\n function onClickTogglePassword(): void {\n if (type === 'password')\n setType('text');\n else\n setType('password');\n }\n\n const resolvedChildren = FunctionHelper.isFunction(children)\n ? (f: FieldProps) => children(f)\n : React.Children.count(children) ? children : null;\n\n if (fieldProps.type !== 'password') {\n if (showLoadingSpinner) {\n return (\n <div className='position-relative'>\n <Field {...(ObjectHelper.omit(fieldProps, ['formSize']))}>\n {resolvedChildren}\n </Field>\n\n <div className={styles.spinner}>\n <Spinner animation='border' size='sm' />\n </div>\n </div>\n );\n }\n\n return (\n <Field {...(ObjectHelper.omit(fieldProps, ['formSize']))}>\n {resolvedChildren}\n </Field>\n );\n }\n\n let containerClassName = `position-relative ${styles.passwordContainer}`;\n\n if (fieldProps.className)\n containerClassName += ` ${fieldProps.className}`;\n\n if (fieldProps.disabled)\n containerClassName += ` ${styles.passwordContainerDisabled}`;\n\n /**\n * We need to wrap out input with a relatively positioned element in order to absolutely\n * position our visibility icon to reveal the password - Sha\n */\n return (\n <div className={containerClassName}>\n <Field\n {...(ObjectHelper.omit(fieldProps, [ 'formSize', 'type', 'className' ]))}\n type={type}\n className={`${styles.passwordInput} border-0 w-100 h-100 outline-none rounded`}\n >\n {resolvedChildren}\n </Field>\n {fieldProps.type === 'password' &&\n <SvgContainer\n svgName={type === 'password' ? cvSvgLibrary.VisibleOn : cvSvgLibrary.VisibleOff}\n className={`svg-container cursor-pointer ${styles.revealPassword}`}\n onClick={onClickTogglePassword}\n />\n }\n </div>\n );\n}\n\nFormField.defaultProps = {\n autoComplete: 'off',\n infoTooltipPlacement: 'top'\n};\n\nexport function FormField<Values extends HashObject>(props: FieldAttributes<FormFieldProps>): React.ReactElement {\n const {\n label,\n className,\n showCharacterCounter,\n showRequiredStar,\n infoTooltip,\n infoTooltipPlacement,\n infoText,\n formSize,\n showOptionalLabel,\n ...fieldProps\n } = props;\n\n const { errors, touched } = useFormikContext<Values>();\n\n // This function overwrites the default `onChange` function whenever `props.disabled` is set.\n // This prevents users from \"undisabling\" form fields via inspect element, then editing the field.\n const disabledOnChange = () => {};\n\n if (fieldProps.type === 'checkbox') {\n const _props = ObjectHelper.omit(props, [ 'formSize', 'infoTooltipPlacement' ]);\n\n if (props.disabled)\n _props.onChange = disabledOnChange;\n\n return <FormCheckbox {..._props} />;\n }\n\n const fieldWrapperProps = {\n ...fieldProps,\n className: FormHelper.getCustomFormControlClassName(\n errors,\n touched,\n fieldProps.name,\n formSize,\n className,\n typeof props.as === 'string' ? props.as : null\n )\n };\n\n if (props.disabled)\n fieldWrapperProps.onChange = disabledOnChange;\n\n return (\n <Form.Group className='form-group'>\n {!!label && (\n <Form.Label htmlFor={fieldProps.id} className='d-flex align-items-center'>\n {label}\n {showRequiredStar && <span className='text-danger'>*</span>}\n {infoTooltip && (\n <SvgContainer\n className={`svg-container text-secondary ${styles.infoTooltip}`}\n svgName={cvSvgLibrary.Info}\n title={infoTooltip}\n tooltipPlacement={infoTooltipPlacement}\n tooltipSpanHack\n />\n )}\n {showOptionalLabel && <span className='text-secondary'>&nbsp;<Text namespace={namespace} phrase='optional' /></span>}\n \n {!!showCharacterCounter && !!(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength &&\n <div className='ms-auto'>\n <CharacterCounter\n fieldName={(fieldProps.name as keyof Values)}\n limit={(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength}\n />\n </div>\n }\n </Form.Label>\n )}\n\n <FieldWrapper {...fieldWrapperProps} />\n\n {!!infoText &&\n <Form.Text className='text-secondary'>\n {infoText}\n </Form.Text>\n }\n\n <ErrorMessage name={fieldProps.name}>\n {(errorMessage: string) => <Form.Control.Feedback type='invalid'>{errorMessage}</Form.Control.Feedback>}\n </ErrorMessage>\n </Form.Group>\n );\n}","import * as React from 'react';\nimport { Formik, FormikConfig, FormikContextType, FormikErrors, FormikHelpers, FormikProps, FormikValues, useFormikContext } from 'formik';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\n/**\n * Note: This currently doesn't support arrays, but the need for arrays as initial\n * form data has not yet come up\n */\nfunction omitNullInitialValues<Values extends FormikValues>(initialValues: Values): Values {\n if (!initialValues)\n return {} as Values;\n\n const values = ObjectHelper.deepClone(initialValues);\n\n function omitChildValues(child: Values): void {\n Object.keys(values).forEach((key: keyof Values) => {\n if (!values.hasOwnProperty(key))\n return;\n \n if (ObjectHelper.isObject(child[key]))\n omitChildValues(child[key]);\n else if (values[key] === null)\n delete values[key];\n });\n }\n\n omitChildValues(values);\n return values;\n}\n\n// Omit attributes from FormikConfig that are defined in FormWrapperProps.\ntype ModifiedFormikConfig<Values extends FormikValues> = Omit<FormikConfig<Values>, 'initialValues' | 'onSubmit'>;\n\ninterface InitialStatus {\n allowInitialSubmit: boolean;\n}\n\nexport type FormSubmissionOptions<FormValues = FormikValues> = {\n reset?: boolean;\n errors?: FormikErrors<FormValues>;\n};\n\ninterface FormWrapperProps<FormValues extends FormikValues, ApiValues extends FormikValues> {\n initialValues: Partial<FormValues | ApiValues>;\n onSubmit: (data: FormValues, onDone: (options?: FormSubmissionOptions<FormValues>) => void) => void;\n castInitialValues?: boolean; // cast to validationSchema\n castValuesOnSubmit?: boolean; // cast to validationSchema\n allowInitialSubmit?: boolean; // if true, useCanSubmitForm will allow submit without any user changes.\n}\n\nFormWrapper.defaultProps = {\n castInitialValues: true,\n castValuesOnSubmit: true\n};\n\nexport function FormWrapper<\n FormValues extends FormikValues = FormikValues,\n ApiValues extends FormikValues = FormValues,\n ExtraProps = HashObject\n>(props: ModifiedFormikConfig<FormValues> & ExtraProps & FormWrapperProps<FormValues, ApiValues>): JSX.Element {\n const { castInitialValues, castValuesOnSubmit, initialValues, onSubmit, ...formikProps } = props;\n\n /**\n * If castInitialValues is true, cast initialValues to the validationSchema.\n * This will ensure that any data fetched from the api conforms to the expected form data shape.\n */\n const formattedInitialValues: FormValues = castInitialValues && props.validationSchema\n ? props.validationSchema.cast(omitNullInitialValues(initialValues))\n : initialValues;\n\n const onSubmitHandler = (\n values: FormValues,\n { setSubmitting, resetForm, setFieldError }: FormikHelpers<FormValues>\n ) => {\n /**\n * validationSchema.cast will coerce the values to the types defined in validationSchema.\n * This is useful for trimming inputs:\n * e.g. if a value field has type Yup.string().trim(), it will be automatically trimmed.\n */\n const formattedData = castValuesOnSubmit && props.validationSchema\n ? props.validationSchema.cast(values)\n : values;\n\n onSubmit(formattedData, (options: FormSubmissionOptions<FormValues> = {}) => {\n options.reset && resetForm();\n\n if (options.errors) {\n for (const [ key, value ] of Object.entries(options.errors)) {\n setFieldError(key, value);\n }\n }\n\n setSubmitting(false);\n });\n };\n\n const initialStatus: InitialStatus = {\n allowInitialSubmit: props.allowInitialSubmit\n };\n\n return (\n <Formik<FormValues, ExtraProps>\n enableReinitialize\n {...(formikProps as ModifiedFormikConfig<FormValues> & ExtraProps)}\n initialValues={formattedInitialValues}\n onSubmit={onSubmitHandler}\n initialStatus={initialStatus}\n >\n {FunctionHelper.isFunction(props.children)\n ? (f: FormikProps<FormValues>) => (props.children as (f: FormikProps<FormValues>) => React.ReactNode)(f)\n : React.Children.count(props.children) ? props.children : null\n }\n </Formik>\n );\n}\n\nexport function useFormikContextWrapper<T>(): FormikContextType<T> {\n return useFormikContext<T>();\n}","import { FormikErrors, FormikTouched, getIn } from 'formik';\n\nimport { FormSize } from 'libs/shared/components/forms/form-field/FormField';\n\nfunction getTypeSize(type: string, size: FormSize) {\n let className = '';\n\n switch (type) {\n case 'select':\n className = 'form-select';\n break;\n default:\n className = 'form-control';\n }\n\n if (size === 'sm')\n className += ` ${className}-sm`;\n\n if (size === 'lg')\n className += ` ${className}-lg`;\n\n return className;\n}\n\nexport const FormHelper = {\n getCustomFormControlClassName<T>(\n errors: FormikErrors<T>,\n touched: FormikTouched<T>,\n attribute: string,\n size?: FormSize,\n additionalClassName?: string,\n type?: string\n ): string {\n let className = '';\n\n className = getTypeSize(type, size);\n\n // Using getIn as it supports dot notation\n if (getIn(touched, attribute) && getIn(errors, attribute))\n className += ' is-invalid';\n\n if (additionalClassName)\n className += ` ${additionalClassName}`;\n\n return className;\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 React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { useGetSettingsGroups } from 'apps/settings/hooks/useGetSettingsGroups';\n\nconst namespace = 'settings.settingsLayout';\n\n/**\n * Checks if the current user has permission to access the settings module\n */\nexport const useCanAccessSettings = (requiredPermissions: PermissionName | PermissionName[]): boolean => {\n const { hasPermissions } = usePermissions();\n const settingsGroups = useGetSettingsGroups();\n\n /**\n * TODO: Update all settings pages to pasas required permissions, because checking the \n * `useGetSettingsGroups()` values clearly doesnt work for settings pages with multiple\n * applinks inside of them. - Sha\n */\n if (requiredPermissions)\n return hasPermissions(requiredPermissions);\n\n const currentRoute = Core.AppLinkHelper.getCurrentAppLink();\n\n /**\n * Allows us to have popups sitting in other locations be used\n * by our settings pages. For example the manage video access popup\n * in the \"videos with restricted access\" page - Sha\n */\n if (currentRoute.application !== AppChannels.SETTINGS)\n return true;\n\n return settingsGroups.some(group => {\n return group.modules.some(settingsModule => {\n if ('appLink' in settingsModule) {\n return settingsModule.appLink.action === currentRoute.action;\n }\n\n return false;\n });\n });\n};\n\ninterface SettingsLayoutProps {\n heading: string;\n breadcrumbs: string[];\n description?: string;\n requiredPermissions?: PermissionName | PermissionName[];\n headingButton?: () => JSX.Element;\n}\n\nexport function SettingsLayout(props: React.PropsWithChildren<SettingsLayoutProps>): JSX.Element {\n const canAccess = useCanAccessSettings(props.requiredPermissions);\n\n React.useEffect(() => {\n if (!canAccess) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n }, { replace: true });\n }\n }, [canAccess]);\n\n if (!canAccess)\n return <></>;\n\n const breadcrumbs = props.breadcrumbs.map((name, i) => ({\n name,\n appLink: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n },\n active: i === props.breadcrumbs.length - 1\n }));\n\n return (\n <div className='px-3'>\n <div className='d-flex align-items-center justify-content-between'>\n <h1 className='h2'>{props.heading}</h1>\n {props.headingButton?.()}\n </div>\n <div className='pb-3'>\n <Breadcrumbs\n breadcrumbs={[\n {\n name: LanguageService.getPhrase(namespace, 'settingsBreadcrumb'),\n appLink: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n }\n },\n ...breadcrumbs\n ]}\n />\n </div>\n {props.description &&\n <>\n <p>{props.description}</p>\n <hr />\n </>\n }\n\n {props.children}\n </div>\n );\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/flight';\n\nimport { FileGeneratorRequest } from 'shared/interfaces/requests/FileGeneratorRequest';\n\nexport const FileGeneratorRequests = {\n requestExport(data: FileGeneratorRequest): Flight.Request {\n return {\n url: '/api/domain/v2/export',\n key: 'request:export',\n type: HttpVerbs.POST,\n data,\n normalize: false\n };\n }\n};","import { Library } from 'libs/shared/interfaces';\n\ntype OrderedLibraries = {\n primary?: Library[];\n secondary?: Library[];\n tertiary?: Library[];\n other: Library[];\n}\n\nconst libraryGroupMatches: {[key in keyof OrderedLibraries]: string[]} = {\n primary: [ 'primary', 'elementary' ],\n secondary: [ 'secondary', 'middle' ],\n tertiary: [ 'high', 'tertiary', 'university', 'fe/he' ],\n other: [ 'movies', 'tv', 'distributor' ]\n};\n\nexport const LibraryHelper = {\n orderLibraries(libraries: Library[]): Library[] {\n const orderedLibraries = libraries.reduce((sorted, current) => {\n const matched = Object.keys(libraryGroupMatches).some(key => {\n const libraryType = key as keyof OrderedLibraries;\n const matches = libraryGroupMatches[libraryType].some(\n matcher => current.name.toLowerCase().includes(matcher.toLowerCase())\n );\n\n if (!matches) return false;\n\n const existing = sorted[libraryType] ?? [];\n sorted[libraryType] = [ ...existing, current ];\n return true;\n });\n \n // If the library name dint match any of our libraryGroupMatches\n // we will push it to other library group\n if (!matched) {\n sorted.other.push(current);\n }\n \n return sorted;\n }, {\n other: []\n } as OrderedLibraries);\n\n return Object.keys(libraryGroupMatches).reduce((libraries, current) => {\n const libraryType = current as keyof OrderedLibraries;\n if (orderedLibraries[libraryType]) {\n libraries.push(...orderedLibraries[libraryType]);\n }\n return libraries;\n }, [] as Library[]);\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"formatSelect\":\"ZLQpe\"};","import React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { Form as FormikForm, useFormikContext } from 'formik';\nimport * as Yup from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { FormButtons } from 'libs/shared/components/forms/form-buttons/FormButtons';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Library } from 'libs/shared/interfaces';\n\nimport { LibraryHelper } from 'apps/settings/utils/LibraryHelper';\n\nimport styles from './export-libraries.scss';\n\nconst namespace = 'settings.exportLibraries';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst FORMATS = {\n 'csv': 'CSV',\n 'marc-21': 'MARC 21',\n 'marc-21-v2': 'MARC 21 V2',\n 'marc-xml': 'MARC XML'\n};\n\nexport interface ExportLibrariesFormData {\n libraryIds: string[];\n format: string;\n}\n\nexport const ExportLibraryValidationSchema = Yup.object().shape<ExportLibrariesFormData>({\n libraryIds: Yup.array()\n .of(Yup.string())\n .required(() => getPhrase('libraryIdsRequired'))\n .min(1),\n\n format: Yup.string()\n .required(() => getPhrase('formatRequired'))\n});\n\ninterface ExportLibrariesFormProps {\n libraries: Library[];\n}\n\nexport function ExportLibrariesForm(props: ExportLibrariesFormProps): React.ReactElement {\n const formikProps = useFormikContext<ExportLibrariesFormData>();\n\n const libraries = React.useMemo(() => LibraryHelper.orderLibraries(props.libraries), [props.libraries]);\n\n return (\n <FormikForm>\n <Form.Label className='mb-2'>\n <Text namespace={namespace} phrase='selectLibraries' />\n </Form.Label>\n\n {libraries.map((library, key) => {\n const id = `library-${key}`;\n return (\n <FormField\n key={key}\n type='checkbox'\n label={library.name}\n checkboxLabelFontWeight='normal'\n name={id}\n id={id}\n checked={!!formikProps.values.libraryIds.some(l => l.toString() === library.id.toString())}\n onChange={() => {\n const values = [...formikProps.values.libraryIds];\n const index = values.findIndex(l => l.toString() === library.id.toString());\n \n if (index === -1) {\n values.push(library.id);\n } else {\n values.splice(index, 1);\n }\n\n formikProps.setFieldValue('libraryIds', values);\n }}\n />\n );\n })}\n \n {formikProps.errors.libraryIds &&\n <Form.Control.Feedback type='invalid' className='d-block mb-3'>{formikProps.errors.libraryIds}</Form.Control.Feedback>\n }\n <div className={styles.formatSelect}>\n <FormField\n as='select'\n label={getPhrase('exportAs')}\n name='format'\n id='format'\n value={formikProps.values.format || ''}\n >\n <option value=''>{getPhrase('selectAFormat')}</option>\n {Object.entries(FORMATS).map(([ key, name ]) => {\n return (\n <option key={key} value={key}>{name}</option>\n );\n })}\n </FormField>\n </div>\n \n <FormButtons\n variant='dark'\n submitText={getPhrase('export')}\n />\n </FormikForm>\n );\n}","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, UserAction } from 'libs/analytics/interfaces';\n\nimport { FormSubmissionOptions, FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { CurrentUser, Library } from 'libs/shared/interfaces';\n\nimport { FileGeneratorRequests } from 'shared/flight-requests/FileGeneratorRequests';\nimport { FileGeneratorRequest } from 'shared/interfaces/requests/FileGeneratorRequest';\n\nimport { SettingsLayout } from 'apps/settings/components/settings-layout/SettingsLayout';\n\nimport { ExportLibrariesForm, ExportLibrariesFormData, ExportLibraryValidationSchema } from './ExportLibrariesForm';\n\nconst namespace = 'settings.exportLibraries';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst LIBRARY_TYPES = [ 'customLibrary', 'sharedLibrary', 'hostedLibrary' ];\n\nexport function ExportLibrariesView(): React.ReactElement {\n const fetchAsync = Flight.useGetFetchAsync();\n\n const alerts = useAlerts();\n\n /**\n * I'm casting LIBRARY_TYPES to any here intentionally because I don't want to add 'hostedLibrary'\n * to our list of acceptable types. This UI is an exception, but we shouldn't be fetching\n * hosted libraries anywhere else in Lite. - Sha\n */\n const libraries = Flight.useBasicFetch<Library[]>(LibraryRequests.domainLibraries(LIBRARY_TYPES as any));\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n function onSubmit(\n data: ExportLibrariesFormData,\n onDone: (options: FormSubmissionOptions) => void\n ): void {\n const fileGeneratorRequest: FileGeneratorRequest = {\n key: 'lite.library.video.report',\n data: {\n firstName: currentUser.data.givenName,\n email: currentUser.data.email,\n customerId: currentUser.data.customerId,\n formats: [data.format],\n libraryIds: data.libraryIds\n }\n };\n const request = FileGeneratorRequests.requestExport(fileGeneratorRequest);\n fetchAsync(request)\n .then(() => onSuccess(fileGeneratorRequest))\n .catch(() => alerts.error(getPhrase('error')))\n .finally(() => onDone({ reset: true }));\n }\n\n function onSuccess(fileGeneratorRequest: FileGeneratorRequest): void {\n alerts.success(getPhrase('success'));\n\n AnalyticsHelper.logUserAction(fileGeneratorRequest, {\n actionType: UserAction.Export,\n entity: EntityType.FileGeneratorJob,\n location: LocationContext.Settings\n });\n }\n\n if (!libraries.data || !currentUser.data)\n return <></>;\n\n return (\n <SettingsLayout\n heading={getPhrase('heading')}\n breadcrumbs={[getPhrase('heading')]}\n description={getPhrase('info')}\n >\n <FormWrapper<ExportLibrariesFormData>\n onSubmit={onSubmit}\n validationSchema={ExportLibraryValidationSchema}\n initialValues={{ format: '', libraryIds: []}}\n >\n <ExportLibrariesForm libraries={libraries.data} />\n </FormWrapper>\n </SettingsLayout>\n );\n}"],"names":["getPhrase","BreadcrumbItem","props","ref","breadcrumb","name","appLink","active","withBackIcon","className","svgName","size","S","Breadcrumbs","breadcrumbs","isMobile","length","collapse","setCollapse","shouldFocus","setShouldFocus","expandRef","characterLength","reduce","prev","next","current","focus","first","secondLast","last","rest","slice","onClick","map","idx","key","PartialBreadcrumbs","numItems","style","height","width","dangerouslySetInnerHTML","__html","namespace","FormButtons","formikProps","canSubmit","variant","type","disabled","showSpinner","isSubmitting","submitText","phrase","isNew","FormCheckbox","label","checkboxLabelClassName","checkboxLabelFontWeight","fieldProps","Form","FieldWrapper","htmlFor","id","checkboxAppLink","checkboxAppLinkText","AppLink","CharacterCounter","field","values","fieldName","limit","children","showLoadingSpinner","setType","resolvedChildren","FunctionHelper","f","ObjectHelper","Spinner","animation","containerClassName","SvgContainer","FormField","showCharacterCounter","showRequiredStar","infoTooltip","infoTooltipPlacement","infoText","formSize","showOptionalLabel","errors","touched","disabledOnChange","_props","onChange","fieldWrapperProps","FormHelper","as","title","tooltipPlacement","tooltipSpanHack","Text","maxLength","errorMessage","defaultProps","autoComplete","FormWrapper","castInitialValues","castValuesOnSubmit","initialValues","onSubmit","formattedInitialValues","validationSchema","cast","omitChildValues","child","Object","keys","forEach","hasOwnProperty","omitNullInitialValues","initialStatus","allowInitialSubmit","enableReinitialize","setSubmitting","resetForm","setFieldError","formattedData","options","reset","entries","value","useFormikContextWrapper","getCustomFormControlClassName","attribute","additionalClassName","getTypeSize","DEFAULT_PARTIAL_LOADING_OPTIONS","minWidth","maxWidth","PartialLoadingHelper","getPartialLoadingItems","opts","Array","Math","max","floor","random","useCanAccessSettings","requiredPermissions","hasPermissions","settingsGroups","currentRoute","application","some","group","modules","settingsModule","action","SettingsLayout","canAccess","replace","i","heading","headingButton","description","FileGeneratorRequests","requestExport","data","url","HttpVerbs","normalize","libraryGroupMatches","primary","secondary","tertiary","other","LibraryHelper","orderLibraries","libraries","orderedLibraries","sorted","libraryType","matcher","toLowerCase","includes","existing","push","LanguageService","FORMATS","ExportLibraryValidationSchema","shape","libraryIds","of","required","min","format","ExportLibrariesForm","library","checked","l","toString","index","findIndex","splice","setFieldValue","LIBRARY_TYPES","ExportLibrariesView","fetchAsync","alerts","LibraryRequests","currentUser","UserRequests","onDone","fileGeneratorRequest","firstName","givenName","email","customerId","formats","request","then","success","AnalyticsHelper","actionType","entity","location","onSuccess","error"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1896],{83657:(e,t,n)=>{n.d(t,{e:()=>l});var a=n(32735),r=n(91967),o=n(10874),i=n(76177),c=n(42735),s=n(86509);function l(e){var t=a.useMemo((function(){return e.actions.sort((function(e,t){return e.order-t.order}))}),[e.actions]),n=[],l=[];t.forEach((function(e){e.button?n.push(e):l.push(e)}));var u="d-flex";return e.className&&(u+=" ".concat(e.className)),n.length||l.length?a.createElement("div",{className:u},n.length?n.map((function(t,n){return a.createElement(a.Fragment,{key:n},function(){if(t.label){var n=r.q.isFunction(t.label)?t.label:function(){return a.createElement(a.Fragment,null,t.label)};return a.createElement(c.K,{appLink:t.appLink,href:t.href,onClick:t.onClick,svgName:t.svgName,svgSize:e.dropdownToggleSvgSize,className:t.className,tooltip:t.tooltip,showSpinner:t.showSpinner,analyticsData:t.analyticsData,analyticsOptions:t.analyticsOptions,openInNewTab:t.openInNewTab,disabled:t.disabled},n())}var s=a.createElement(o.h,{appLink:t.appLink,href:t.href,onClick:t.onClick,svgName:t.svgName,className:t.className,analyticsData:t.analyticsData,analyticsOptions:t.analyticsOptions,openInNewTab:t.openInNewTab,disabled:t.disabled,showBorder:t.showBorder,customSize:e.customSize});return t.tooltip?a.createElement(i.u,{title:t.tooltip,spanHack:!0},s):s}())})):a.createElement(a.Fragment,null),e.sortComponent&&e.sortComponent,l.length?a.createElement(s.m,{actions:l,dropdownToggleClassName:e.actionsDropdownClassName,dropdownToggleSvgSize:e.dropdownToggleSvgSize,fetchMore:e.fetchMore}):a.createElement(a.Fragment,null)):a.createElement(a.Fragment,null)}},86509:(e,t,n)=>{n.d(t,{m:()=>g});var a=n(32735),r=n(91967),o=n(81886),i=n(45157),c=n(49985),s=n(36848),l=n(83914),u=n(76177),m=n(35223);const d={dropdownToggle:"UCAnJ"};function p(){return a.createElement(a.Fragment,null,a.createElement("div",{style:{padding:"0.53125rem 1rem"}},a.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"8rem"}})),a.createElement("div",{style:{padding:"0.53125rem 1rem"}},a.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"12rem"}})),a.createElement("div",{style:{padding:"0.53125rem 1rem"}},a.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"11rem"}})),a.createElement("div",{style:{padding:"0.53125rem 1rem"}},a.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"9rem"}})))}function f(e){var t="dropdown-item";return e&&(t+=" ".concat(e)),t}function b(e){var t=r.q.isFunction(e.action.label)?e.action.label:function(){return a.createElement(a.Fragment,null,e.action.label)};if(e.action.appLink)return a.createElement(s.F,{appLink:e.action.appLink,onClick:e.action.onClick,className:f(e.action.className),analyticsData:e.action.analyticsData,analyticsOptions:e.action.analyticsOptions,openInNewTab:e.action.openInNewTab,disabled:e.action.disabled},e.action.svgName&&a.createElement(l.x,{svgName:e.action.svgName,className:"d-inline-block svg-container me-2 align-middle"}),a.createElement("span",{className:"align-middle"},t()));function n(t){t.preventDefault(),e.action.analyticsData&&e.action.analyticsOptions&&c.k.logUserAction(e.action.analyticsData,e.action.analyticsOptions),r.q.isFunction(e.action.onClick)&&e.action.onClick(),e.action.href&&o.Q.Ab.PageLoad(e.action.href,e.action.openInNewTab)}return e.action.href?a.createElement("a",{className:f(e.action.className),onClick:n,href:e.action.href},e.action.svgName&&a.createElement(l.x,{svgName:e.action.svgName,className:"d-inline-block svg-container me-2 align-middle"}),a.createElement("span",{className:"align-middle"},t())):a.createElement("span",{className:"cursor-pointer ".concat(f(e.action.className)),onClick:n,role:"button",tabIndex:0,onKeyDown:function(e){return"Enter"===e.key&&n(e)}},e.action.svgName&&a.createElement(l.x,{svgName:e.action.svgName,className:"d-inline-block svg-container me-2"}),t())}function g(e){if(!e.actions||!e.actions.length)return a.createElement(a.Fragment,null);var t=e.actions.some((function(e){return e.lazyPlaceholder})),n="dropdown";e.className&&(n+=" ".concat(e.className));var r,o="actions-dropdown-".concat(i.Y.getRandomInt()),c="dropdown-toggle px-0 ".concat(d.dropdownToggle);return e.dropdownToggleClassName&&(c+=" ".concat(e.dropdownToggleClassName)),a.createElement("div",{className:n},a.createElement("button",{className:c,type:"button",id:o,"data-bs-toggle":"dropdown","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-label":"More actions dropdown",onClick:t?e.fetchMore:null},a.createElement(l.x,{svgName:m.vn.More,size:e.dropdownToggleSvgSize})),a.createElement("ul",{className:"dropdown-menu dropdown-menu-end dropdown-menu-right font-size-normal","aria-labelledby":o},t?a.createElement(p,null):e.actions.map((function(e,t){var n=void 0!==r&&r!==e.group;return r=e.group,e.tooltip?a.createElement("li",{key:t},n&&a.createElement("hr",{className:"dropdown-divider",role:"separator"}),a.createElement(u.u,{title:e.tooltip,spanHack:!0},a.createElement(b,{action:e}))):a.createElement("li",{key:t},n&&a.createElement("hr",{className:"dropdown-divider",role:"separator"}),a.createElement(b,{action:e}))}))))}g.defaultProps={dropdownToggleClassName:"btn btn-light",dropdownToggleSvgSize:l.S.Small}},49935:(e,t,n)=>{n.d(t,{Oo:()=>b,b2:()=>g});var a=n(32735),r=n(23481),o=n(36848),i=n(86764),c=n(3747),s=n(5859),l=n(35223),u=n(83914);function m(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,o,i,c=[],s=!0,l=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=o.call(n)).done)&&(c.push(a.value),c.length!==t);s=!0);}catch(e){l=!0,r=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(l)throw r}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return d(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var p=r.T.encloseNamespace("shared.breadcrumbComponent"),f=a.forwardRef((function(e,t){var n=e.breadcrumb,r=n.name,i=n.appLink,c=n.active,s=e.withBackIcon;return a.createElement("li",{className:"breadcrumb-item".concat(c?" active":"")},c?a.createElement("strong",null,r):a.createElement(o.F,{appLink:i,ref:t},s&&a.createElement(u.x,{svgName:l.vn.ChevronLeft,size:u.S.Small}),a.createElement("span",{className:s?"ms-2":""},r)))})),b=function(e){var t=e.breadcrumbs,n=(0,c.a)(i.r.XS),r=(null==t?void 0:t.length)||0,o=m(a.useState(!1),2),s=o[0],l=o[1],u=m(a.useState(!1),2),d=u[0],b=u[1],g=a.useRef();if(a.useEffect((function(){var e,n=null!==(e=null==t?void 0:t.reduce((function(e,t){return e+t.name.length}),0))&&void 0!==e?e:0;r>3&&n>56&&l(!0)}),[null==t?void 0:t.length]),a.useLayoutEffect((function(){var e;d&&(null===(e=g.current)||void 0===e||e.focus())}),[g.current,d]),!r||n&&r<2)return a.createElement(a.Fragment,null);if(n)return a.createElement("nav",{"aria-label":"breadcrumb"},a.createElement("ol",{className:"breadcrumb m-0 p-0"},a.createElement(f,{breadcrumb:t[r-2],withBackIcon:!0})));var y=a.createElement(f,{breadcrumb:t[0]}),v=r>2?a.createElement(f,{breadcrumb:t[r-2]}):a.createElement(a.Fragment,null),h=a.createElement(f,{breadcrumb:t[r-1]}),E=t.slice(1,r-2);return a.createElement("nav",{"aria-label":"breadcrumb"},a.createElement("ol",{className:"breadcrumb m-0 p-0"},y,s?a.createElement("li",{className:"breadcrumb-item"},a.createElement("button",{className:"btn-link",onClick:function(){l(!1),b(!0)},"aria-label":p("expand")},"...")):E.map((function(e,t){return a.createElement(f,{key:t,breadcrumb:e,ref:0===t?g:null})})),v,h))},g=a.memo((function(e){var t=e.numItems,n=void 0===t?3:t;return(0,c.a)(i.r.XS)?a.createElement("div",{className:"partial-loading-background",style:{height:"1.3125rem",width:"6rem"}}):a.createElement("nav",{"aria-label":"breadcrumb"},a.createElement("ol",{className:"breadcrumb m-0 p-0"},s.u.getPartialLoadingItems({numItems:n}).map((function(e,t){var n=e.width;return a.createElement("li",{key:t,className:"breadcrumb-item"},a.createElement("span",{className:"d-inline-block partial-loading-background",style:{width:n},dangerouslySetInnerHTML:{__html:"&nbsp"}}))}))))}))},38502:(e,t,n)=>{n.d(t,{r:()=>m});var a=n(32735),r=n(49985),o=n(36848),i=n(18559),c=n(11607),s=n(83914),l=n(87432);function u(e){return a.createElement(a.Fragment,null,!!e.tab.svgName&&a.createElement("div",{className:e.tab.name?"pe-1":""},a.createElement(s.x,{svgName:e.tab.svgName})),e.tab.name,"number"==typeof e.tab.count&&a.createElement("div",{className:"ps-2"},a.createElement(i.C,{type:i.g.Count,data:e.tab.count})))}function m(e){var t;return a.createElement("nav",{className:null!==(t=e.className)&&void 0!==t?t:"",ref:e.containerRef},a.createElement("ul",{className:"\n list-unstyled d-inline-block m-0 ".concat(l.Z.pillTabSelector,"\n ").concat(e.borderRadius?l.Z.radiusSmall:"","\n ").concat(e.listClassName,"\n ")},e.tabs.map((function(e,t){return a.createElement("li",{className:"\n p-0 ".concat(l.Z.tab," ").concat(e.active?"btn btn-dark":"btn btn-outline-dark","\n ").concat(e.name?l.Z.minWidth:""," ").concat(e.className,"\n "),key:t},e.appLink?a.createElement(o.F,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(l.Z.tabLink,"\n ")},a.createElement(u,{tab:e})):a.createElement(c.L,{className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset p-2 text-nowrap ".concat(l.Z.tabLink,"\n "),onClick:function(){return function(e){!e.active&&e.onSelect&&(e.onSelect(),e.analyticsData&&e.analyticsOptions&&r.k.logUserAction(e.analyticsData,e.analyticsOptions))}(e)}},a.createElement(u,{tab:e})))}))))}m.defaultProps={borderRadius:"lg"}},5062:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(32735),r=n(87432);const o={partialSize:"ntGsj"};function i(){return a.createElement("div",{className:"partial-loading-background ".concat(r.Z.pillTabSelector," ").concat(o.partialSize)})}},94644:(e,t,n)=>{n.d(t,{r:()=>u});var a=n(50242),r=n(81886),o=n(67058),i=n(14553),c=n(49267),s=n(49075),l={notFound:o.d,forbidden:{rating:i.q,yearLevel:i.q,region:c.a,privacy:i.q},badRequest:s._};function u(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var o;o="number"==typeof e?e:e.status;var i=Object.assign(Object.assign({},l),t);o&&r.Q.Ry.isStatusCodeError(o)&&(o!==a.o.NotFound?o!==a.o.Forbidden?n.badRequest||r.Q.Ry.throw(new i.badRequest):n.forbidden||r.Q.Ry.throw(new i.forbidden.privacy):n.notFound||r.Q.Ry.throw(new i.notFound))}}},91286:(e,t,n)=>{n.d(t,{v:()=>i});var a=n(32735),r=n(94644);function o(e){return e.map((function(e){return e.statusCode})).join(":")}function i(e,t,n){var i=Array.isArray(e)?e:[e];(0,a.useEffect)((function(){i.forEach((function(e){(0,r.r)(e.statusCode,t,n)}))}),[o(i),t,n])}},53036:(e,t,n)=>{n.d(t,{h:()=>r});var a=n(32045),r={getStatusAsString:function(e){if("string"==typeof e)return e;if("number"==typeof e){if(0===e)return a.w.Disabled;if(1===e)return a.w.Active;if(2===e)return a.w.Inactive}return null},getStatusAsNumber:function(e){if("number"==typeof e)return e;if("string"==typeof e){if(e===a.w.Disabled)return 0;if(e===a.w.Active)return 1;if(e===a.w.Inactive)return 2}return null}}},5859:(e,t,n)=>{function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}n.d(t,{u:()=>o});var r={numItems:5,minWidth:50,maxWidth:100},o={getPartialLoadingItems:function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=Object.assign(Object.assign({},r),t);return(e=Array(n.numItems),function(e){if(Array.isArray(e))return a(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return a(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?a(e,t):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()*n.maxWidth),n.minWidth),"px")}}))}}},62691:(e,t,n)=>{n.d(t,{m:()=>b});var a=n(32735),r=n(23481),o=n(49985),i=n(65858),c=n(11607),s=n(83914),l=n(69883),u=n(1643),m=n(35223);function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var p=r.T.encloseNamespace("classrooms.classroomStar"),f=function(e){return u.h.isFavouritedByCurrentUser(e)};function b(e){var t,n,r=(t=a.useState(f(e.classroom)),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,o,i,c=[],s=!0,l=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=o.call(n)).done)&&(c.push(a.value),c.length!==t);s=!0);}catch(e){l=!0,r=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(l)throw r}}return c}}(t,n)||function(e,t){if(e){if("string"==typeof e)return d(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),u=r[0],b=r[1],g=(0,l.Z)();return a.useEffect((function(){f(e.classroom)!==u&&b(!u)}),[f(e.classroom)]),a.createElement(c.L,{onClick:function(){b(!u),e.onToggle(!u,(function(){return function(t){if(t)return o.k.logUserAction({id:e.classroom.id},{location:e.locationContext,actionType:i.Vw.Favourite,descriptor:i.DL.On,entity:i.py.Classroom,workflowPhase:i.eu.Complete}),void g.success(p("pinSuccess",{classroomName:e.classroom.name,escapeText:!0}));o.k.logUserAction({id:e.classroom.id},{location:e.locationContext,actionType:i.Vw.Favourite,descriptor:i.DL.Off,entity:i.py.Classroom,workflowPhase:i.eu.Complete}),g.success(p("unpinSuccess",{classroomName:e.classroom.name,escapeText:!0}))}(!u)}),(function(){return b(t=u),void(t?g.error(p("unpinError",{classroomName:e.classroom.name,escapeText:!0})):g.error(p("pinError",{classroomName:e.classroom.name,escapeText:!0})));var t}))},className:u?"text-yellow":""},a.createElement(s.x,{svgName:u?m.vn.Star:m.vn.StarOutline,size:s.S.Medium}))}},46009:(e,t,n)=>{n.d(t,{p:()=>s});var a=n(20354),r=n(16714),o=n(31949),i=n(22902),c=n(88630),s=function(e){var t,n=(0,(0,i.T)().hasPermissions)(r.C.ManageAllClassrooms),s=a.a.useBasicFetch(o.N.currentUser()),l=a.a.useBasicFetch(!n&&(null===(t=s.data)||void 0===t?void 0:t.customerId)&&c.F.getClassroomStaff(e,s.data.customerId)),u=a.a.useBasicFetch(!n&&c.F.getClassroomOwners(e));if(n)return{isLoading:!1,isOwner:!0,isTeacher:!0};if(!l.hasCompleted||!u.hasCompleted||!s.hasCompleted)return{isLoading:!0};var m=s.data.id.toString(),d=!!u.data.find((function(e){return e.id.toString()===m})),p=!!l.data.find((function(e){return e.id.toString()===m}));return{isLoading:!1,isTeacher:d||p,isOwner:d}}},31491:(e,t,n)=>{n.d(t,{_:()=>A});var a=n(16714),r=n(67058),o=n(91286),i=n(22902),c=n(23481),s=n(64364),l=n(14070),u=n(97291);function m(e){return m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},m(e)}function d(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,p(a.key),a)}}function p(e){var t=function(e,t){if("object"!=m(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,"string");if("object"!=m(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==m(t)?t:t+""}function f(e,t,n){return t=g(t),function(e,t){if(t&&("object"==m(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,b()?Reflect.construct(t,n||[],g(e).constructor):t.apply(e,n))}function b(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(b=function(){return!!e})()}function g(e){return g=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},g(e)}function y(e,t){return y=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},y(e,t)}var v="classrooms.cannotAccessClassroomError",h=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),f(this,t,["Cannot access classroom"])}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&y(e,t)}(t,e),n=t,(a=[{key:"name",get:function(){return"CannotAccessClassroomError"}},{key:"heading",get:function(){return c.T.getPhrase(v,"heading")}},{key:"description",get:function(){return c.T.getPhrase(v,"description")}},{key:"cta",get:function(){return{text:c.T.getPhrase(v,"cta"),appLink:{application:u.O.CLASSROOMS,action:l.e.Classrooms.HOME}}}}])&&d(n.prototype,a),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,a}(s.H);function E(e){return E="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},E(e)}function S(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,O(a.key),a)}}function O(e){var t=function(e,t){if("object"!=E(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,"string");if("object"!=E(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==E(t)?t:t+""}function w(e,t,n){return t=C(t),function(e,t){if(t&&("object"==E(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,N()?Reflect.construct(t,n||[],C(e).constructor):t.apply(e,n))}function N(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(N=function(){return!!e})()}function C(e){return C=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},C(e)}function k(e,t){return k=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},k(e,t)}var T="classrooms.classroomNotFoundError",L=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),w(this,t,["Classroom doesn't exist"])}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&k(e,t)}(t,e),n=t,(a=[{key:"name",get:function(){return"ClassroomNotFoundError"}},{key:"heading",get:function(){return c.T.getPhrase(T,"heading")}},{key:"description",get:function(){return c.T.getPhrase(T,"description")}},{key:"cta",get:function(){return{text:c.T.getPhrase(T,"cta"),appLink:{application:u.O.CLASSROOMS,action:l.e.Classrooms.HOME}}}}])&&S(n.prototype,a),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,a}(s.H),A=function(e){var t=(0,i.T)().hasPermissions;(0,o.v)(e,{notFound:L,forbidden:{privacy:t(a.C.ViewClassrooms)?h:r.d}})}},22602:(e,t,n)=>{n.d(t,{R:()=>w});var a=n(32735),r=n(23481),o=n(81886),i=n(65858),c=n(83657),s=n(49935),l=n(38502),u=n(32045),m=n(53036),d=n(14070),p=n(97291),f=n(62691),b=n(86764),g=n(86613),y=n(3747),v=n(35223),h=n(46009),E="classrooms.hooks",S=function(e,t,n){var a=(0,y.a)(b.r.SMDown),o=(0,h.p)(e),c={id:e},s={entity:i.py.Classroom,workflowPhase:i.eu.Start,location:i.LZ.Classroom},l="btn btn-outline-dark me-2",u=[];return o.isOwner&&u.push({order:0,label:r.T.getPhrase(E,"editClassroom"),appLink:{application:p.O.CLASSROOMS,action:d.e.Classrooms.EDIT_CLASSROOM,args:[e]},disabled:n,tooltip:n?r.T.getPhrase(E,"disabledByRostering"):"",analyticsData:c,analyticsOptions:Object.assign(Object.assign({},s),{actionType:i.Vw.Edit}),svgName:v.vn.Edit,button:!a,className:n?"disabled ".concat(l):a?"":l}),u.push({order:10,label:r.T.getPhrase(E,"generateJoinLink"),appLink:{application:p.O.CLASSROOMS,action:d.e.Classrooms.GENERATE_JOIN_LINK,args:[e]},disabled:n,tooltip:n?r.T.getPhrase(E,"disabledByRostering"):"",button:!a&&!o.isOwner,className:n?"disabled":a||o.isOwner?"":l}),o.isOwner&&u.push({order:20,label:r.T.getPhrase(E,"archive"),analyticsData:c,disabled:n,tooltip:n?r.T.getPhrase(E,"disabledByRostering"):"",analyticsOptions:Object.assign(Object.assign({},s),{actionType:i.Vw.Archive,descriptor:i.DL.On}),appLink:{application:p.O.CLASSROOMS,action:d.e.Classrooms.ARCHIVE_CLASSROOM,args:[e]},className:n?"disabled":""}),(o.isOwner||o.isTeacher)&&t.role!==g.i.Admin&&u.push({order:30,label:r.T.getPhrase(E,"leaveClassroom"),disabled:n,tooltip:n?r.T.getPhrase(E,"disabledByRostering"):"",className:n?"disabled":"text-danger",analyticsData:Object.assign(Object.assign({},c),{teacherId:t.id}),analyticsOptions:Object.assign(Object.assign({},s),{actionType:i.Vw.Dissociate,descriptor:i.iF.User}),appLink:{application:p.O.CLASSROOMS,action:d.e.Classrooms.REMOVE_TEACHERS,args:[e],params:{teacherIds:[t.id]}}}),u},O=r.T.encloseNamespace("classrooms.classroomLayout");function w(e){var t=(0,h.p)(e.classroom.id),n=S(e.classroom.id,e.currentUser,e.isRostered),r=m.h.getStatusAsString(e.classroom.status),b=[{name:O("students"),appLink:{application:p.O.CLASSROOMS,action:d.e.Classrooms.CLASSROOM_STUDENTS,args:[e.classroom.id]},active:"students"===e.activeTab},{name:O("groups"),appLink:{application:p.O.CLASSROOMS,action:d.e.Classrooms.CLASSROOM_GROUPS,args:[e.classroom.id]},active:"groups"===e.activeTab},{name:O("teachers"),appLink:{application:p.O.CLASSROOMS,action:d.e.Classrooms.CLASSROOM_TEACHERS,args:[e.classroom.id]},active:"teachers"===e.activeTab}].filter((function(t){return!e.isRostered||t.name!==O("groups")}));return a.useEffect((function(){r!==u.w.Active&&o.Q.C$.trigger({application:p.O.CLASSROOMS,action:d.e.Classrooms.HOME},{replace:!0})}),[e.classroom.status]),!t.isLoading&&!t.isTeacher||r!==u.w.Active?a.createElement(a.Fragment,null):a.createElement("div",{className:"px-3 position-relative"},a.createElement("div",null,!!n.length&&a.createElement("div",{className:"float-end"},a.createElement(c.e,{actions:n,actionsDropdownClassName:"btn btn-outline-dark"})),a.createElement("div",{className:"d-inline-block align-text-bottom me-1"},a.createElement(f.m,{classroom:e.classroom,onToggle:e.onTogglePin,locationContext:i.LZ.Classroom})),a.createElement("h1",{className:"d-inline mb-0"},e.classroom.name)),a.createElement("div",{className:"pb-3 pt-1"},a.createElement(s.Oo,{breadcrumbs:[{name:O("classroomsBreadcrumb"),appLink:{application:p.O.CLASSROOMS,action:d.e.Classrooms.HOME}},{name:e.classroom.name,active:!0}]})),a.createElement("div",{className:"pb-2"},a.createElement(l.r,{tabs:b})),e.children)}},87432:(e,t,n)=>{n.d(t,{Z:()=>a});const a={pillTabSelector:"Hdi6o",tab:"RvNxr",minWidth:"GHSz9",radiusSmall:"VhJJa",tabLink:"WFyvo"}}}]);
2
+ //# sourceMappingURL=1896-399a91d18c-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/1896-399a91d18c-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/actions/Actions.tsx","file:///app/packages/libs/shared/src/components/actions/actions.scss","file:///app/packages/libs/shared/src/components/actions/ActionsDropdown.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/pill-tab-selector/partial-loading/partial-pill-tab-selector.scss","file:///app/packages/libs/shared/src/components/pill-tab-selector/partial-loading/PartialPillTabSelector.tsx","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/utils/ObjectStatusHelper.ts","file:///app/packages/libs/shared/src/utils/PartialLoadingHelper.ts","file:///app/packages/projects/lite/src/apps/classrooms/components/classroom-star/ClassroomStar.tsx","file:///app/packages/projects/lite/src/apps/classrooms/hooks/useClassroomPermissions.ts","file:///app/packages/projects/lite/src/apps/classrooms/errors/cannot-access-classroom/CannotAccessClassroomError.ts","file:///app/packages/projects/lite/src/apps/classrooms/errors/classroom-not-found/ClassroomNotFoundError.ts","file:///app/packages/projects/lite/src/apps/classrooms/hooks/useHandleClassroomErrors.ts","file:///app/packages/projects/lite/src/apps/classrooms/hooks/useClassroomActions.ts","file:///app/packages/projects/lite/src/apps/classrooms/layouts/ClassroomLayout.tsx","file:///app/packages/libs/shared/src/components/pill-tab-selector/pill-tab-selector.scss"],"sourcesContent":["import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nimport { ActionButton } from './ActionButton';\nimport { ActionsDropdown } from './ActionsDropdown';\n\nexport interface ActionOptions {\n order?: number;\n label?: string | (() => JSX.Element);\n appLink?: Core.AppLink;\n href?: string;\n onClick?: () => void;\n svgName?: string;\n className?: string;\n button?: boolean; // If true, a button will be rendered. Otherwise the action will be rendered in the dropdown.\n tooltip?: string;\n showSpinner?: boolean;\n showBorder?: boolean; // only works for button without text label\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n disabled?: boolean;\n openInNewTab?: boolean; // Only used if appLink or href is provided\n group?: string;\n lazyPlaceholder?: boolean;\n}\n\nexport type ActionGenerator = (obj: BaseObject) => ActionOptions[];\n\ninterface ActionsProps {\n actions: ActionOptions[];\n className?: string;\n actionsDropdownClassName?: string;\n dropdownToggleSvgSize?: SvgContainerSize;\n sortComponent?: JSX.Element;\n customSize?: boolean;\n fetchMore?: () => void;\n}\n\nexport function Actions(props: ActionsProps): JSX.Element {\n const orderedActions = React.useMemo(() => props.actions.sort((a, b) => a.order - b.order), [props.actions]);\n\n const buttonActions: ActionOptions[] = [];\n const moreActions: ActionOptions[] = [];\n\n orderedActions.forEach(a => {\n if (a.button)\n buttonActions.push(a);\n else\n moreActions.push(a);\n });\n\n let className = 'd-flex';\n\n if (props.className)\n className += ` ${props.className}`;\n\n if (!buttonActions.length && !moreActions.length)\n return <></>;\n\n return (\n <div className={className}>\n {buttonActions.length ? buttonActions.map((a, idx) => (\n <React.Fragment key={idx}>\n {(() => {\n if (a.label) {\n const label = FunctionHelper.isFunction(a.label)\n ? a.label\n : () => <>{a.label}</>;\n\n return (\n <ActionButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svgName={a.svgName}\n svgSize={props.dropdownToggleSvgSize}\n className={a.className}\n tooltip={a.tooltip}\n showSpinner={a.showSpinner}\n analyticsData={a.analyticsData}\n analyticsOptions={a.analyticsOptions}\n openInNewTab={a.openInNewTab}\n disabled={a.disabled}\n >\n {label()}\n </ActionButton>\n );\n }\n\n const iconButton = (\n <IconButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svgName={a.svgName}\n className={a.className}\n analyticsData={a.analyticsData}\n analyticsOptions={a.analyticsOptions}\n openInNewTab={a.openInNewTab}\n disabled={a.disabled}\n showBorder={a.showBorder}\n customSize={props.customSize}\n />\n );\n\n return a.tooltip\n ? <Tooltip title={a.tooltip} spanHack>{iconButton}</Tooltip>\n : iconButton;\n })()}\n </React.Fragment>\n )) : <></>}\n {props.sortComponent && props.sortComponent}\n {moreActions.length ? (\n <ActionsDropdown\n actions={moreActions}\n dropdownToggleClassName={props.actionsDropdownClassName}\n dropdownToggleSvgSize={props.dropdownToggleSvgSize}\n fetchMore={props.fetchMore}\n />\n ) : <></>}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"dropdownToggle\":\"UCAnJ\"};","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { RandomHelper } from 'libs/common/react/utils/RandomHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ActionOptions } from './Actions';\n\nimport styles from './actions.scss';\n\nfunction LazyDropdownItems(): JSX.Element {\n return (\n <>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '8rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '12rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '11rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '9rem' }}></div>\n </div>\n </>\n );\n}\n\nfunction getDropdownItemClassName(actionClassName?: string): string {\n let className = 'dropdown-item';\n\n if (actionClassName)\n className += ` ${actionClassName}`;\n\n return className;\n}\n\nexport type DropdownActionOptions = Omit<ActionOptions, 'button'>;\n\ninterface ActionsDropdownItemProps {\n action: DropdownActionOptions;\n}\n\nfunction ActionsDropdownItem(props: ActionsDropdownItemProps): React.ReactElement {\n const label = FunctionHelper.isFunction(props.action.label)\n ? props.action.label\n : () => <>{props.action.label}</>;\n\n if (props.action.appLink)\n return (\n <AppLink\n appLink={props.action.appLink}\n onClick={props.action.onClick}\n className={getDropdownItemClassName(props.action.className)}\n analyticsData={props.action.analyticsData}\n analyticsOptions={props.action.analyticsOptions}\n openInNewTab={props.action.openInNewTab}\n disabled={props.action.disabled}\n >\n {props.action.svgName && <SvgContainer svgName={props.action.svgName} className='d-inline-block svg-container me-2 align-middle' />}\n <span className='align-middle'>{label()}</span>\n </AppLink>\n );\n\n function onClick(e: React.MouseEvent | React.KeyboardEvent): void {\n e.preventDefault();\n\n if (props.action.analyticsData && props.action.analyticsOptions)\n AnalyticsHelper.logUserAction(props.action.analyticsData, props.action.analyticsOptions);\n\n if (FunctionHelper.isFunction(props.action.onClick))\n props.action.onClick();\n\n if (props.action.href)\n Core.LocationUtils.PageLoad(props.action.href, props.action.openInNewTab);\n }\n\n if (props.action.href) {\n return (\n <a\n className={getDropdownItemClassName(props.action.className)}\n onClick={onClick}\n href={props.action.href}\n >\n {props.action.svgName && <SvgContainer svgName={props.action.svgName} className='d-inline-block svg-container me-2 align-middle' />}\n <span className='align-middle'>{label()}</span>\n </a>\n );\n }\n\n return (\n <span\n className={`cursor-pointer ${getDropdownItemClassName(props.action.className)}`}\n onClick={onClick}\n role='button'\n tabIndex={0}\n onKeyDown={(e: React.KeyboardEvent) => e.key === 'Enter' && onClick(e)}\n >\n {props.action.svgName && <SvgContainer svgName={props.action.svgName} className='d-inline-block svg-container me-2' />}\n {label()}\n </span>\n );\n}\n\ninterface ActionsDropdownProps {\n actions: DropdownActionOptions[];\n className?: string;\n dropdownToggleClassName?: string;\n dropdownToggleSvgSize?: SvgContainerSize;\n fetchMore?: () => void;\n}\n\nActionsDropdown.defaultProps = {\n dropdownToggleClassName: 'btn btn-light',\n dropdownToggleSvgSize: SvgContainerSize.Small\n};\n\nexport function ActionsDropdown(props: ActionsDropdownProps): React.ReactElement {\n if (!props.actions || !props.actions.length)\n return <></>;\n\n const isLazy = props.actions.some(a => a.lazyPlaceholder);\n\n let className = 'dropdown';\n\n if (props.className)\n className += ` ${props.className}`;\n\n // Generate unique id to avoid collisions.\n const dropdownToggleId = `actions-dropdown-${RandomHelper.getRandomInt()}`;\n\n let dropdownToggleClassName = `dropdown-toggle px-0 ${styles.dropdownToggle}`;\n\n if (props.dropdownToggleClassName)\n dropdownToggleClassName += ` ${props.dropdownToggleClassName}`;\n\n let currentGroup: string;\n\n return (\n <div className={className}>\n <button\n className={dropdownToggleClassName}\n type='button'\n id={dropdownToggleId}\n data-bs-toggle='dropdown'\n data-toggle='dropdown'\n aria-haspopup='true'\n aria-expanded='false'\n aria-label={'More actions dropdown'}\n onClick={isLazy ? props.fetchMore : null}\n >\n <SvgContainer svgName={cvSvgLibrary.More} size={props.dropdownToggleSvgSize} />\n </button>\n <ul className='dropdown-menu dropdown-menu-end dropdown-menu-right font-size-normal' aria-labelledby={dropdownToggleId}>\n {isLazy ?\n <LazyDropdownItems /> :\n props.actions.map((a, idx) => {\n const showDivider = currentGroup !== undefined && currentGroup !== a.group;\n currentGroup = a.group;\n \n if (a.tooltip) {\n return (\n <li key={idx}>\n {showDivider && <hr className='dropdown-divider' role='separator'></hr>}\n <Tooltip title={a.tooltip} spanHack>\n <ActionsDropdownItem action={a} />\n </Tooltip>\n \n </li>\n );\n }\n \n return (\n <li key={idx}>\n {showDivider && <hr className='dropdown-divider' role='separator'></hr>}\n <ActionsDropdownItem action={a} />\n </li>\n );\n })\n }\n </ul>\n </div>\n );\n}","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 { 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\nconst namespace = 'shared.breadcrumbComponent';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst COLLAPSE_CHARACTER_COUNT = 56;\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 = React.forwardRef((\n props: BreadcrumbItemProps,\n ref: React.ForwardedRef<HTMLElement>\n) => {\n const { breadcrumb: { name, appLink, active }, withBackIcon } = props;\n return (\n <li className={`breadcrumb-item${active ? ' active' : ''}`}>\n {active\n ? <strong>{name}</strong>\n : <AppLink appLink={appLink} ref={ref}>\n {withBackIcon && <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Small} />}\n <span className={withBackIcon ? 'ms-2' : ''}>{name}</span>\n </AppLink>\n }\n </li>\n );\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 || 0;\n \n const [ collapse, setCollapse ] = React.useState(false);\n const [ shouldFocus, setShouldFocus ] = React.useState(false);\n const expandRef = React.useRef<HTMLElement>();\n\n React.useEffect(() => {\n const characterLength = breadcrumbs?.reduce((prev, next) => prev + next.name.length, 0) ?? 0;\n\n if (length > 3 && characterLength > COLLAPSE_CHARACTER_COUNT)\n setCollapse(true);\n }, [breadcrumbs?.length]);\n\n /**\n * Focus our first expanded item the first time it appears.\n */\n React.useLayoutEffect(() => {\n if (shouldFocus)\n expandRef.current?.focus();\n }, [ expandRef.current, shouldFocus ]);\n\n function onClickExpand() {\n setCollapse(false);\n setShouldFocus(true);\n }\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 const first = <BreadcrumbItem breadcrumb={breadcrumbs[0]} />;\n const secondLast = length > 2 ? <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} /> : <></>;\n const last = <BreadcrumbItem breadcrumb={breadcrumbs[length - 1]} />;\n const rest = breadcrumbs.slice(1, length - 2);\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {first}\n {collapse ?\n <li className='breadcrumb-item'>\n <button\n className='btn-link'\n onClick={onClickExpand}\n aria-label={getPhrase('expand')}\n >\n ...\n </button>\n </li> :\n rest.map((breadcrumb, idx) => (\n <BreadcrumbItem\n key={idx}\n breadcrumb={breadcrumb}\n ref={idx === 0 ? expandRef : null}\n />\n ))\n }\n {secondLast}\n {last}\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 {\"partialSize\":\"ntGsj\"};","import React from 'react';\n\nimport styles from '../pill-tab-selector.scss';\nimport partialStyles from './partial-pill-tab-selector.scss';\n\nexport function PartialPillTabSelector(): JSX.Element {\n return (\n <div className={`partial-loading-background ${styles.pillTabSelector} ${partialStyles.partialSize}`} />\n );\n}","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n}\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 { 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 { ObjectStatus } from 'libs/shared/enums/ObjectStatus';\n\n/**\n * Some of our APIs return enum values as a string, and others return enum values as a number.\n * \n * This means if a HTTP request to one API returns an object with it's enum values in string\n * form, and another HTTP request returns that same object with it's enum values in number form,\n * Flight will cache the object with it's enum values in number form.\n * \n * This can cause bugs in our frontend code where we're doing checks like `(obj.status === ObjectStatus.Active)`\n * because TypeScript enums only handle one data type (number or string). Even if the object is active, if the\n * it's cached as a data type that doesn't match what our TypeScript `ObjectStatus` enum's data type is, then\n * that check would return false, introducing bugs.\n * \n * A prime example of this is Classroom objects being returned from User API with string enums, but being returned\n * from Classroom API with number enums.\n * \n * For that reason, we sadly need to check object status with this helper. Hopefully one day this can be deleted\n * when all of our APIs return enum values consistently as 1 data type.\n * \n * Example of a bug introduced by this inconsistency: https://clickview.atlassian.net/browse/INBOX-3024\n */\nexport const ObjectStatusHelper = {\n getStatusAsString(status: ObjectStatus): ObjectStatus {\n if (typeof (status) === 'string')\n return status;\n\n if (typeof (status) === 'number') {\n if (status === 0)\n return ObjectStatus.Disabled;\n\n if (status === 1)\n return ObjectStatus.Active;\n\n if (status === 2)\n return ObjectStatus.Inactive;\n }\n\n return null;\n },\n\n getStatusAsNumber(status: ObjectStatus): 0 | 1 | 2 {\n if (typeof (status) === 'number')\n return status;\n\n if (typeof (status) === 'string') {\n if (status === ObjectStatus.Disabled)\n return 0;\n\n if (status === ObjectStatus.Active)\n return 1;\n\n if (status === ObjectStatus.Inactive)\n return 2;\n }\n\n return null;\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 React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, ToggleDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Classroom } from 'libs/shared/interfaces';\nimport { FavouriteHelper } from 'libs/shared/utils/FavouriteHelpers';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'classrooms.classroomStar';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst getIsPinned = (classroom: Classroom) => {\n return FavouriteHelper.isFavouritedByCurrentUser(classroom);\n};\n\ninterface ClassroomStarProps {\n classroom: Classroom;\n onToggle: (shouldPin: boolean, onSuccess: () => void, onError: () => void) => void;\n locationContext: LocationContext;\n}\n\nexport function ClassroomStar(props: ClassroomStarProps): JSX.Element {\n // Local state is used to provide instant feedback when the user clicks on the star.\n const [ isPinned, setIsPinned ] = React.useState(getIsPinned(props.classroom));\n\n const alerts = useAlerts();\n\n React.useEffect(() => {\n if (getIsPinned(props.classroom) === isPinned)\n return;\n\n setIsPinned(!isPinned);\n }, [getIsPinned(props.classroom)]);\n\n function onToggle(): void {\n setIsPinned(!isPinned);\n\n props.onToggle(!isPinned, () => onSuccess(!isPinned), () => onError(isPinned));\n }\n\n function onSuccess(isPinned: boolean): void {\n if (isPinned) {\n AnalyticsHelper.logUserAction({ id: props.classroom.id }, {\n location: props.locationContext,\n actionType: UserAction.Favourite,\n descriptor: ToggleDescriptor.On,\n entity: EntityType.Classroom,\n workflowPhase: WorkflowPhase.Complete\n });\n \n alerts.success(getPhrase('pinSuccess', {\n classroomName: props.classroom.name,\n escapeText: true\n }));\n \n return;\n }\n\n AnalyticsHelper.logUserAction({ id: props.classroom.id }, {\n location: props.locationContext,\n actionType: UserAction.Favourite,\n descriptor: ToggleDescriptor.Off,\n entity: EntityType.Classroom,\n workflowPhase: WorkflowPhase.Complete\n });\n\n alerts.success(getPhrase('unpinSuccess', {\n classroomName: props.classroom.name,\n escapeText: true\n }));\n }\n\n function onError(prevState: boolean): void {\n setIsPinned(prevState);\n\n if (prevState) {\n alerts.error(getPhrase('unpinError', {\n classroomName: props.classroom.name,\n escapeText: true\n }));\n\n return;\n }\n\n alerts.error(getPhrase('pinError', {\n classroomName: props.classroom.name,\n escapeText: true\n }));\n }\n\n return (\n <DivButton onClick={onToggle} className={isPinned ? 'text-yellow' : ''}>\n <SvgContainer\n svgName={isPinned ? cvSvgLibrary.Star : cvSvgLibrary.StarOutline}\n size={SvgContainerSize.Medium}\n />\n </DivButton>\n );\n}","import { Flight } from 'libs/common/flight';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { CurrentUser, User } from 'libs/shared/interfaces';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\n\nexport const useCheckClassroomPermissions = (classroomId: string) => {\n const { hasPermissions } = usePermissions();\n\n /**\n * This is the highest-level permission that overrides all other permissions\n */\n const canManageAllClassrooms = hasPermissions(PermissionName.ManageAllClassrooms);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n /**\n * If the user has permission to manage all classrooms, there's no need to check if they're owner/invitee\n * as these permissions no longer matter.\n */\n const staff = Flight.useBasicFetch<User[]>(!canManageAllClassrooms && currentUser.data?.customerId &&\n ClassroomRequests.getClassroomStaff(classroomId, currentUser.data.customerId));\n const owners = Flight.useBasicFetch<User[]>(!canManageAllClassrooms &&\n ClassroomRequests.getClassroomOwners(classroomId));\n\n // Has full classroom management power.\n if (canManageAllClassrooms) {\n return {\n isLoading: false,\n isOwner: true,\n isTeacher: true\n };\n }\n\n if (!staff.hasCompleted || !owners.hasCompleted || !currentUser.hasCompleted)\n return { isLoading: true };\n\n const currentUserId = currentUser.data.id.toString();\n\n const isClassroomOwner = !!owners.data.find(owner => owner.id.toString() === currentUserId);\n const isClassroomTeacher = !!staff.data.find(staff => staff.id.toString() === currentUserId);\n\n return {\n isLoading: false,\n isTeacher: isClassroomOwner || isClassroomTeacher, // All owners are also teachers\n isOwner: isClassroomOwner\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 = 'classrooms.cannotAccessClassroomError';\n\nexport class CannotAccessClassroomError extends ErrorPageError {\n constructor() {\n super('Cannot access classroom');\n }\n\n // @ts-ignore\n public get name(): string {\n return 'CannotAccessClassroomError';\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.CLASSROOMS,\n action: Actions.Classrooms.HOME\n }\n };\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 = 'classrooms.classroomNotFoundError';\n\nexport class ClassroomNotFoundError extends ErrorPageError {\n constructor() {\n super('Classroom doesn\\'t exist');\n }\n\n // @ts-ignore\n public get name(): string {\n return 'ClassroomNotFoundError';\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.CLASSROOMS,\n action: Actions.Classrooms.HOME\n }\n };\n }\n}","import { Flight } from 'libs/common/flight';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { Classroom } from 'libs/shared/interfaces';\n\nimport { CannotAccessClassroomError } from 'apps/classrooms/errors/cannot-access-classroom/CannotAccessClassroomError';\nimport { ClassroomNotFoundError } from 'apps/classrooms/errors/classroom-not-found/ClassroomNotFoundError';\n\nexport const useHandleClassroomErrors = (classroom: Flight.Response<Classroom>) => {\n const { hasPermissions } = usePermissions();\n\n useHandleObjectError(classroom, {\n notFound: ClassroomNotFoundError,\n forbidden: {\n privacy: hasPermissions(PermissionName.ViewClassrooms) ? CannotAccessClassroomError : NotFoundError\n }\n });\n};","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnalyticsOptions, AssocDescriptor, EntityType, LocationContext, ToggleDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { UserRole } from 'libs/shared/enums/UserRole';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { CurrentUser } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { useCheckClassroomPermissions } from 'apps/classrooms/hooks/useClassroomPermissions';\n\nconst namespace = 'classrooms.hooks';\n\nexport const useClassroomActions = (classroomId: string, currentUser: CurrentUser, readOnly?: boolean) => {\n const isMobile = useMediaQuery(MediaQueryStrings.SMDown);\n const accessCheck = useCheckClassroomPermissions(classroomId);\n\n const analyticsData = { id: classroomId };\n\n const baseAnalyticsOptions: AnalyticsOptions = {\n entity: EntityType.Classroom,\n workflowPhase: WorkflowPhase.Start,\n location: LocationContext.Classroom\n };\n\n const buttonClass = 'btn btn-outline-dark me-2';\n\n const actions: ActionOptions[] = [];\n\n if (accessCheck.isOwner) {\n actions.push({\n order: 0,\n label: LanguageService.getPhrase(namespace, 'editClassroom'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.EDIT_CLASSROOM,\n args: [classroomId]\n },\n disabled: readOnly,\n tooltip: readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : '',\n analyticsData,\n analyticsOptions: {\n ...baseAnalyticsOptions,\n actionType: UserAction.Edit\n },\n svgName: cvSvgLibrary.Edit,\n button: !isMobile,\n className: readOnly ? `disabled ${buttonClass}` : !isMobile ? buttonClass : ''\n });\n }\n\n actions.push({\n order: 10,\n label: LanguageService.getPhrase(namespace, 'generateJoinLink'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.GENERATE_JOIN_LINK,\n args: [classroomId]\n },\n disabled: readOnly,\n tooltip: readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : '',\n button: (!isMobile && !accessCheck.isOwner),\n className: readOnly ? 'disabled' : (!isMobile && !accessCheck.isOwner) ? buttonClass : ''\n });\n\n if (accessCheck.isOwner) {\n actions.push({\n order: 20,\n label: LanguageService.getPhrase(namespace, 'archive'),\n analyticsData,\n disabled: readOnly,\n tooltip: readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : '',\n analyticsOptions: {\n ...baseAnalyticsOptions,\n actionType: UserAction.Archive,\n descriptor: ToggleDescriptor.On\n },\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.ARCHIVE_CLASSROOM,\n args: [classroomId]\n },\n className: readOnly ? 'disabled' : ''\n });\n }\n\n if ((accessCheck.isOwner || accessCheck.isTeacher) && currentUser.role !== UserRole.Admin) {\n actions.push({\n order: 30,\n label: LanguageService.getPhrase(namespace, 'leaveClassroom'),\n disabled: readOnly,\n tooltip: readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : '',\n className: readOnly ? 'disabled' : 'text-danger',\n analyticsData: {\n ...analyticsData,\n teacherId: currentUser.id\n },\n analyticsOptions: {\n ...baseAnalyticsOptions,\n actionType: UserAction.Dissociate,\n descriptor: AssocDescriptor.User\n },\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.REMOVE_TEACHERS,\n args: [classroomId],\n params: {\n teacherIds: [currentUser.id]\n }\n }\n });\n }\n\n return actions;\n};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { Actions as ActionsComponent } from 'libs/shared/components/actions/Actions';\nimport { Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PillTab, PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { ObjectStatus } from 'libs/shared/enums/ObjectStatus';\nimport { Classroom, CurrentUser } from 'libs/shared/interfaces';\nimport { ObjectStatusHelper } from 'libs/shared/utils/ObjectStatusHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ClassroomStar } from 'apps/classrooms/components/classroom-star/ClassroomStar';\nimport { useClassroomActions } from 'apps/classrooms/hooks/useClassroomActions';\nimport { useCheckClassroomPermissions } from 'apps/classrooms/hooks/useClassroomPermissions';\n\nconst namespace = 'classrooms.classroomLayout';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ClassroomLayoutProps {\n classroom: Classroom;\n currentUser: CurrentUser;\n onTogglePin: (shouldPin: boolean, onSuccess: () => void, onError: () => void) => void;\n activeTab: 'students' | 'groups' | 'teachers';\n isRostered?: boolean;\n}\n\nexport function ClassroomLayout(props: React.PropsWithChildren<ClassroomLayoutProps>): JSX.Element {\n const accessCheck = useCheckClassroomPermissions(props.classroom.id);\n\n const actions = useClassroomActions(props.classroom.id, props.currentUser, props.isRostered);\n\n const classroomStatus = ObjectStatusHelper.getStatusAsString(props.classroom.status);\n\n const tabs: PillTab[] = [{\n name: getPhrase('students'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.CLASSROOM_STUDENTS,\n args: [props.classroom.id]\n },\n active: props.activeTab === 'students'\n }, {\n name: getPhrase('groups'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.CLASSROOM_GROUPS,\n args: [props.classroom.id]\n },\n active: props.activeTab === 'groups'\n }, {\n name: getPhrase('teachers'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.CLASSROOM_TEACHERS,\n args: [props.classroom.id]\n },\n active: props.activeTab === 'teachers'\n }]\n // todo we hide groups for rostered classroom for v1\n .filter(tab => !props.isRostered || tab.name !== getPhrase('groups'));\n\n // Redirect away if classroom isn't published\n React.useEffect(() => {\n if (classroomStatus === ObjectStatus.Active)\n return;\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.HOME\n }, { replace: true });\n }, [props.classroom.status]);\n\n if ((!accessCheck.isLoading && !accessCheck.isTeacher) || classroomStatus !== ObjectStatus.Active)\n return <></>;\n\n return (\n <div className='px-3 position-relative'>\n <div>\n {!!actions.length && (\n <div className='float-end'>\n <ActionsComponent\n actions={actions}\n actionsDropdownClassName='btn btn-outline-dark'\n />\n </div>\n )}\n\n <div className='d-inline-block align-text-bottom me-1'>\n <ClassroomStar\n classroom={props.classroom}\n onToggle={props.onTogglePin}\n locationContext={LocationContext.Classroom}\n />\n </div>\n <h1 className='d-inline mb-0'>{props.classroom.name}</h1>\n </div>\n\n <div className='pb-3 pt-1'>\n <Breadcrumbs\n breadcrumbs={[\n {\n name: getPhrase('classroomsBreadcrumb'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.HOME\n }\n },\n { name: props.classroom.name, active: true }\n ]}\n />\n </div>\n\n <div className='pb-2'>\n <PillTabSelector tabs={tabs} />\n </div>\n\n {props.children}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"pillTabSelector\":\"Hdi6o\",\"tab\":\"RvNxr\",\"minWidth\":\"GHSz9\",\"radiusSmall\":\"VhJJa\",\"tabLink\":\"WFyvo\"};"],"names":["Actions","props","orderedActions","actions","sort","a","b","order","buttonActions","moreActions","forEach","button","push","className","length","map","idx","key","label","appLink","href","onClick","svgName","svgSize","dropdownToggleSvgSize","tooltip","showSpinner","analyticsData","analyticsOptions","openInNewTab","disabled","iconButton","showBorder","customSize","title","spanHack","sortComponent","dropdownToggleClassName","actionsDropdownClassName","fetchMore","LazyDropdownItems","style","padding","height","width","getDropdownItemClassName","actionClassName","ActionsDropdownItem","FunctionHelper","action","AppLink","SvgContainer","e","preventDefault","AnalyticsHelper","role","tabIndex","onKeyDown","ActionsDropdown","isLazy","some","lazyPlaceholder","currentGroup","dropdownToggleId","RandomHelper","type","id","size","showDivider","undefined","group","Tooltip","defaultProps","S","getPhrase","BreadcrumbItem","ref","breadcrumb","name","active","withBackIcon","Breadcrumbs","breadcrumbs","isMobile","collapse","setCollapse","shouldFocus","setShouldFocus","expandRef","characterLength","reduce","prev","next","current","focus","first","secondLast","last","rest","slice","PartialBreadcrumbs","numItems","dangerouslySetInnerHTML","__html","TabContents","tab","count","data","PillTabSelector","containerRef","borderRadius","listClassName","tabs","index","onSelect","onSelectTab","PartialPillTabSelector","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","generateCacheKey","flightObjs","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","ObjectStatusHelper","getStatusAsString","getStatusAsNumber","DEFAULT_PARTIAL_LOADING_OPTIONS","minWidth","maxWidth","PartialLoadingHelper","getPartialLoadingItems","options","opts","Math","max","floor","random","getIsPinned","classroom","ClassroomStar","isPinned","setIsPinned","alerts","onToggle","location","locationContext","actionType","descriptor","entity","workflowPhase","success","classroomName","escapeText","onSuccess","prevState","error","useCheckClassroomPermissions","classroomId","canManageAllClassrooms","hasPermissions","currentUser","staff","customerId","owners","isLoading","isOwner","isTeacher","hasCompleted","currentUserId","toString","isClassroomOwner","find","owner","isClassroomTeacher","namespace","CannotAccessClassroomError","LanguageService","text","application","ErrorPageError","ClassroomNotFoundError","useHandleClassroomErrors","usePermissions","PermissionName","NotFoundError","useClassroomActions","readOnly","accessCheck","baseAnalyticsOptions","buttonClass","args","UserRole","teacherId","params","teacherIds","ClassroomLayout","isRostered","classroomStatus","activeTab","filter","ObjectStatus","replace","onTogglePin","children"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[193],{3278:(e,t,n)=>{n.d(t,{z:()=>d});var a=n(32735),r=n(39202),i=n(23481),o=n(65858),l=n(38502),c=n(83345),s=n(40424);const u={pillTab:"bMJM0"};var f="discover.header";function d(e){var t,n,d,m,p,v;if(!e.type)return a.createElement(a.Fragment,null);if(e.type===s.Yv.Learner||e.hasStudentExperience)return a.createElement("div",{className:"py-3"},a.createElement("h1",{className:"h2 mb-0"},a.createElement(c.x,{namespace:f,phrase:"heading"})));var y=[{name:i.T.getPhrase(f,"forYou"),appLink:null===(t=e.appLinks)||void 0===t?void 0:t.forYou,active:"forYou"===e.active,analyticsData:{name:i.T.getPhrase(f,"forYou"),url:r.C$.getHref(null===(n=e.appLinks)||void 0===n?void 0:n.forYou)},analyticsOptions:{actionType:o.Vw.Click,entity:o.py.Url,location:o.LZ.MagicTabs}},{name:i.T.getPhrase(f,"whatsNew"),appLink:null===(d=e.appLinks)||void 0===d?void 0:d.whatsNew,active:"whatsNew"===e.active,analyticsData:{name:i.T.getPhrase(f,"whatsNew"),url:r.C$.getHref(null===(m=e.appLinks)||void 0===m?void 0:m.whatsNew)},analyticsOptions:{actionType:o.Vw.Click,entity:o.py.Url,location:o.LZ.MagicTabs}}];return e.showCalendar&&y.push({name:i.T.getPhrase(f,"calendar"),appLink:null===(p=e.appLinks)||void 0===p?void 0:p.calendar,active:"calendar"===e.active,analyticsData:{name:i.T.getPhrase(f,"calendar"),url:r.C$.getHref(null===(v=e.appLinks)||void 0===v?void 0:v.calendar)},analyticsOptions:{actionType:o.Vw.Click,entity:o.py.Url,location:o.LZ.MagicTabs}}),a.createElement("div",{className:"py-3 text-center"},a.createElement(l.r,{tabs:y,className:u.pillTab}))}},38502:(e,t,n)=>{n.d(t,{r:()=>f});var a=n(32735),r=n(49985),i=n(36848),o=n(18559),l=n(11607),c=n(83914),s=n(87432);function u(e){return a.createElement(a.Fragment,null,!!e.tab.svgName&&a.createElement("div",{className:e.tab.name?"pe-1":""},a.createElement(c.x,{svgName:e.tab.svgName})),e.tab.name,"number"==typeof e.tab.count&&a.createElement("div",{className:"ps-2"},a.createElement(o.C,{type:o.g.Count,data:e.tab.count})))}function f(e){var t;return a.createElement("nav",{className:null!==(t=e.className)&&void 0!==t?t:"",ref:e.containerRef},a.createElement("ul",{className:"\n list-unstyled d-inline-block m-0 ".concat(s.Z.pillTabSelector,"\n ").concat(e.borderRadius?s.Z.radiusSmall:"","\n ").concat(e.listClassName,"\n ")},e.tabs.map((function(e,t){return a.createElement("li",{className:"\n p-0 ".concat(s.Z.tab," ").concat(e.active?"btn btn-dark":"btn btn-outline-dark","\n ").concat(e.name?s.Z.minWidth:""," ").concat(e.className,"\n "),key:t},e.appLink?a.createElement(i.F,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(s.Z.tabLink,"\n ")},a.createElement(u,{tab:e})):a.createElement(l.L,{className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset p-2 text-nowrap ".concat(s.Z.tabLink,"\n "),onClick:function(){return function(e){!e.active&&e.onSelect&&(e.onSelect(),e.analyticsData&&e.analyticsOptions&&r.k.logUserAction(e.analyticsData,e.analyticsOptions))}(e)}},a.createElement(u,{tab:e})))}))))}f.defaultProps={borderRadius:"lg"}},74696:(e,t,n)=>{n.d(t,{S:()=>s});var a=n(32735),r=n(68050),i=n(69111),o=n(9977),l=n(79967);const c={partialOptions:"Gufgq",partialName:"SicQQ",partialDescription:"dPGMq",partialThumbnail:"vZrnb",partialDragHandle:"iq73R"};function s(e){return a.createElement("div",{className:"mx-2"},Array(e.numVideos).fill(null).map((function(t,n){return a.createElement("div",{className:"d-flex",key:n},e.allowBulkActions&&a.createElement("div",{className:"form-check pe-3 pe-sm-2 mx-0 mx-md-2"}),a.createElement(u,Object.assign({},e)))})))}function u(e){var t=(0,l.k)(),n="sm"===o.O.getSize(t,"md"),s=e.withReordering&&!t.xs;return a.createElement(r.Z,{className:"".concat(n?"":"py-2"," flex-grow-1")},a.createElement(i.Z,Object.assign({},o.O.getThumbnailColumns(),{className:"flex-column align-items-flex-start ".concat(n?"pb-2 pe-1":"mb-1 pe-3 pe-md-2")}),a.createElement(r.Z,null,!!s&&a.createElement("div",{className:"d-flex align-items-center justify-content-center col-2"},a.createElement("div",{className:"partial-loading-background ".concat(c.partialDragHandle)})),a.createElement(i.Z,{xs:o.O.getThumbnailColSize(s)},a.createElement("div",{className:"partial-loading-background ".concat(n?"rounded":"rounded-3"," ").concat(c.partialThumbnail)})))),a.createElement(i.Z,Object.assign({},o.O.getDetailsColumns(),{className:n?"pb-2":"px-2"}),a.createElement("div",{className:"partial-loading-background mb-1 ".concat(c.partialName)}),a.createElement("div",{className:"partial-loading-background ".concat(c.partialDescription)})))}s.defaultProps={numVideos:15}},39902:(e,t,n)=>{n.d(t,{f:()=>c});var a=n(32735),r=n(70680),i=n(20354);function o(e,t){if(e){if("string"==typeof e)return l(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?l(e,t):void 0}}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}function c(e,t){var n,c,s=(n=a.useState([]),c=2,function(e){if(Array.isArray(e))return e}(n)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,l=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=i.call(n)).done)&&(l.push(a.value),l.length!==t);c=!0);}catch(e){s=!0,r=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw r}}return l}}(n,c)||o(n,c)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),u=s[0],f=s[1];a.useEffect((function(){if(null==e?void 0:e.length){var t=function(e){return function(e){if(Array.isArray(e))return l(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||o(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(u);t.push([]),e.forEach((function(e){t.find((function(t){return t.find((function(t){return t===e}))}))||t[t.length-1].push(e)})),f(t.filter((function(e){return e.length})))}}),[e?e.join(","):null]);var d=(0,r.I0)(),m=(0,r.v9)((function(e){return e}));if(a.useEffect((function(){u.forEach((function(e){var n=t(e);i.a.getResponse(m,n.key).shouldFetch&&i.a.fetch(d,n)}))}),[null==u?void 0:u.length]),!(null==u?void 0:u.length))return{items:null,isFetching:!1};var p={},v={};return u.forEach((function(e,n){var a=t(e),r=i.a.getResponse(m,a.key);v[n]=r,r.data&&r.data.forEach((function(e){return p[e.id]=e}))})),{items:Object.keys(v).some((function(e){return!!v[e].data}))?p:null,isFetching:!!Object.keys(v).some((function(e){return v[e].isFetching}))}}},38972:(e,t,n)=>{n.d(t,{a:()=>v});var a=n(32735),r=n(36848),i=n(83345),o=n(80247),l=n(57900),c=n(2948),s=n(10874),u=n(38143),f=n(35223);const d={banner:"B7jhq"};function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var p="contentUpdates.classificationBanner";function v(e){var t,n,v=e.classification,y=e.backgroundUrl,b=e.followed,h=e.follow,g=e.showFollowSpinner,w=(t=(0,c.D)(u.g.AUDIENCE_FILTER,void 0,{storage:l.Z1.SessionStorage}),n=1,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,l=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=i.call(n)).done)&&(l.push(a.value),l.length!==t);c=!0);}catch(e){s=!0,r=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw r}}return l}}(t,n)||function(e,t){if(e){if("string"==typeof e)return m(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?m(e,t):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0];return a.createElement("div",{className:"banner mb-2 d-flex justify-content-between align-items-center rounded ".concat(d.banner),style:{backgroundImage:"url('".concat(y,"')")}},a.createElement(r.F,{className:"text-white text-shadow",appLink:e.getClassificationAppLink(v,w)},a.createElement("h2",{className:"h3 mb-0"},v.name)),e.canFollow&&a.createElement(s.h,{className:"btn follow-btn ".concat(b?"btn-outline-dark":"btn-dark"),svgName:b?f.vn.BellFilled:f.vn.Bell,onClick:function(){return h(v.id,v.name,!b)}},g?a.createElement(o.Z,{as:"span",animation:"border",role:"status",size:"sm"}):a.createElement(i.x,{namespace:p,phrase:b?"following":"follow"})))}},80004:(e,t,n)=>{n.r(t),n.d(t,{ContentUpdatesView:()=>ee});var a=n(32735),r=n(70680),i=n(23481),o=n(20354),l=n(110),c=n(49985),s=n(65858),u=n(54644),f=n(3278),d=n(36848),m=n(83345),p=n(51365),v=n(16714),y=n(39151),b=n(1666),h=n(61699),g=n(31949),w=n(69883),E=n(39902),k=n(22902),S=n(79612),N=n(40424),L=n(76753),A=n(14070),C=n(97291),O=n(51855),j=n(10671),T=n(27638),x=n(86698),F=n(44110),P=n(85369),U=n(97816),I=n(33192),M=n(13231),D=n(54610),Z=n(67453),R=n(10741),B=n(22490),V=n(38972),G=n(82431),Y="contentUpdates.contentUpdatesView";function _(e){var t=e.classification,n=e.videos,r=e.imageCdnUrl,i=e.showMore,o=e.followed,l=(0,k.T)().hasPermissions;if(!t)return a.createElement(a.Fragment,null);var c=Z.j.createBannerUrl(t.banner,{fallbackBaseUrl:r,fallbackCategoryName:t.name,type:D.__.Banners},{size:D.h2.Medium,resizeType:D.Nq.Cover});return a.createElement("div",{className:"mb-3"},a.createElement(V.a,{classification:t,backgroundUrl:c,getClassificationAppLink:e.appLinks.getClassificationAppLink,followed:o,follow:e.follow,canFollow:e.canFollow,showFollowSpinner:e.showFollowSpinner}),a.createElement(M.E4,{videos:n,yearGroups:e.yearGroups,getVideoAppLink:e.appLinks.getVideoAppLink,getSubTextAppLink:function(e){return G.j.getSeriesAppLink(e.series)},setFavourite:e.setFavourite,canFavourite:e.canFavourite,presentationAudiences:e.audiences,hasPermissions:l,getPreviewQuestionsAppLink:function(e){return R.j.getPreviewQuestionsAppLink(e)},isPlugin:e.isPlugin,getClassroomGuideAppLink:B.W.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:B.W.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:B.W.getResourceGuidanceAppLink}),i&&a.createElement("div",{className:"show-more"},a.createElement(d.F,{className:"info-link",appLink:e.appLinks.getClassificationUpdateAppLink(t)},a.createElement(m.x,{namespace:Y,phrase:"showMore",options:{classificationName:t.name}}))))}var $=n(74696);const z={partialBanner:"bxaA6"};function H(){return a.createElement(a.Fragment,null,Array(4).fill(null).map((function(e,t){return a.createElement("div",{key:t,className:"mb-3"},a.createElement("div",{className:"partial-loading-background mb-2 ".concat(z.partialBanner)}),a.createElement($.S,null),";")})))}function W(e){return W="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},W(e)}function q(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=W(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,"string");if("object"!=W(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==W(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Q(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var J=5,K="contentUpdates.contentUpdatesView",X=i.T.encloseNamespace(K);function ee(e){var t,n,i,M,D,Z,R,B=(Z=a.useState({}),R=2,function(e){if(Array.isArray(e))return e}(Z)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,l=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=i.call(n)).done)&&(l.push(a.value),l.length!==t);c=!0);}catch(e){s=!0,r=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw r}}return l}}(Z,R)||function(e,t){if(e){if("string"==typeof e)return Q(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Q(e,t):void 0}}(Z,R)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),V=B[0],G=B[1],Y=(0,r.I0)(),$=(0,w.Z)(),z=(0,O.G)().isPlugin,W=(0,k.T)().hasPermissions,ee=W(v.C.FollowSubjects),te=new Date,ne=l.O.format(l.O.endOf(l.O.subtract(te,1,"year"),"day"),"YYYY-MM-DD"),ae=l.O.format(l.O.endOf(te,"day"),"YYYY-MM-DD"),re=o.a.useBasicFetch(y.L.config()),ie=o.a.useBasicFetch(g.N.currentUser()),oe=o.a.useBasicFetch((null===(t=ie.data)||void 0===t?void 0:t.isAuthenticated)&&b.h.yearGroups(ie.data.customerId)),le=(0,x.y)({redirectOnError:!0}).activePresentation;(0,S.M)(L.CG.getDefaultMetadata({title:null==le?void 0:le.name,phraseContext:{phraseHandler:X,titlePhrase:"pageTitle",descriptionPhrase:"pageDescription"},canonicalLink:I.f.getCanonicalLink(),allowIndexing:I.f.allowIndexing(),hrefLang:I.f.getStaticRouteHrefLang(null==le?void 0:le.learningLevel,(function(){return{application:C.O.CONTENT_UPDATES,action:A.e.ContentUpdates.CONTENT_UPDATES}}))}));var ce=u.v.getContentUpdates(null==le?void 0:le.id,ne,ae),se=o.a.useBasicFetch(le&&ce),ue=o.a.useBasicFetch(ee&&h.o.mySubjectPreferences()),fe=(0,F.i)(),de=[],me=[];se.data&&se.data.forEach((function(e){de.push(e.id),me=me.concat(e.videos)}));var pe=(0,E.f)(de,(function(e){return u.v.getClassifications(e)})).items,ve=(0,j._)({location:j.i.VideoItem});(0,U.V)(me,{flightNamespace:null===(n=ce.normalizeOptions)||void 0===n?void 0:n.namespace});var ye=(0,T.u)(s.LZ.VideoThumbnail,null===(i=ce.normalizeOptions)||void 0===i?void 0:i.namespace),be=ye.setFavourite,he=ye.canFavourite;function ge(e,t,n){G((function(t){return Object.assign(Object.assign({},t),q({},e,!0))}));var a=function(){var a;G((function(t){return Object.assign(Object.assign({},t),q({},e,!1))})),c.k.logUserAction({id:e,name:t},{location:s.LZ.ContentUpdatesClassificationBanner,workflowPhase:s.eu.Complete,descriptor:n?s.DL.On:s.DL.Off,actionType:s.Vw.Follow,entity:s.py.Classification}),$.success(X(n?"followed":"unfollowed",{classification:null===(a=pe[e])||void 0===a?void 0:a.name,escapeText:!0}))},r=function(){G((function(t){return Object.assign(Object.assign({},t),q({},e,!1))})),$.error(X("error"))},i=n?h.o.followSubjects([e],a,r):h.o.unfollowSubjects([e],a,r);o.a.fetch(Y,i)}var we=(0,P.N)(),Ee=we.showCalendar,ke=we.isLoading,Se=!(!(se.hasCompleted&&re.hasCompleted&&fe.hasCompleted)||ee&&!ue.hasCompleted||!pe||ke),Ne=function(e,t){return e&&t?e.map((function(e){return{showMore:e.videos.length>J,classification:t[e.id],videos:e.videos.slice(0,J).map((function(e){return e.classification=t[e.id],e})).filter((function(e){return e}))}})).filter((function(e){return e.classification})):null}(se.data,pe),Le=null!==(D=null===(M=ue.data)||void 0===M?void 0:M.map((function(e){return e.id})))&&void 0!==D?D:[],Ae=W(v.C.ManageSubjectPreferences),Ce=W(v.C.ManageVideoAccess);return a.createElement(p.M.Provider,{value:ve},a.createElement("div",{className:"bg-white px-3"},!ke&&a.createElement(f.z,{type:N.Yv.Staff,appLinks:{forYou:e.appLinks.dashboardAppLink,whatsNew:e.appLinks.whatsNewAppLink,calendar:e.appLinks.calendarAppLink},showCalendar:Ee,active:"whatsNew"}),a.createElement("h1",null,a.createElement(m.x,{namespace:K,phrase:"heading"})),(Ae||Ce)&&a.createElement("p",null,Ae&&a.createElement(a.Fragment,null,a.createElement(m.x,{namespace:K,phrase:"onlyRelevant"})," ",a.createElement(d.F,{className:"info-link",appLink:{application:C.O.SETTINGS,action:A.e.Settings.TOPIC_PREFERENCES}},a.createElement(m.x,{namespace:K,phrase:"updatePreferences"}))),Ce&&a.createElement("span",{className:"d-block"},a.createElement(d.F,{className:"info-link",appLink:{application:C.O.SETTINGS,action:A.e.Settings.CONTENT_REVIEW}},a.createElement(m.x,{namespace:K,phrase:"contentReview"})))),Se?a.createElement(a.Fragment,null,Ne.map((function(t,n){var r,i;return a.createElement(_,{key:n,classification:t.classification,videos:t.videos,yearGroups:oe.data,imageCdnUrl:re.data.imageCdnUrl,showMore:t.showMore,appLinks:e.appLinks,followed:Le.includes(null===(r=t.classification)||void 0===r?void 0:r.id),follow:ge,showFollowSpinner:V[null===(i=t.classification)||void 0===i?void 0:i.id],canFollow:ee,setFavourite:be,canFavourite:he,audiences:fe.data,isPlugin:z})}))):a.createElement(H,null)))}},44110:(e,t,n)=>{n.d(t,{i:()=>o});var a=n(20354),r=n(89454),i=n(86698),o=function(){var e=(0,i.y)({redirectOnError:!0}),t=e.activePresentation,n=e.getFallbackPresentation,o=t||n();return a.a.useBasicFetch(!!o&&r.O.presentationAudiences(o.id))}},85369:(e,t,n)=>{n.d(t,{N:()=>b});var a=n(32735),r=n(35242),i=n(20354),o=n(27022),l=n(72639),c=n(31949),s=n(37802),u=n(87114),f=n(86698);function d(e){return d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},d(e)}function m(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,l=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=i.call(n)).done)&&(l.push(a.value),l.length!==t);c=!0);}catch(e){s=!0,r=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return p(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?p(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function p(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}function v(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=d(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,"string");if("object"!=d(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==d(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var y=v(v(v(v(v(v({},o.t.AU,[l.p.Level_1]),o.t.US,[l.p.Level_1]),o.t.UK,[l.p.Level_1]),o.t.SCOT,[l.p.Level_1]),o.t.NZ,[]),o.t.GLOBAL,[]);function b(){var e,t=(0,s.r)(null),n=t.hasSpecialEventCalendar,o=t.isLoadingSettings,l=(0,f.y)({redirectOnError:!0}).activePresentation,d=i.a.useBasicFetch(c.N.currentUser()),p=y[null===(e=d.data)||void 0===e?void 0:e.contentRegion],v=u.i.getMappedPresentationLevel(null==l?void 0:l.learningLevel),b=!(null==p?void 0:p.find((function(e){return e.toString()===(null==v?void 0:v.toString())}))),h=!o&&!n,g=m(a.useState(!h&&!b),2),w=g[0],E=g[1],k=m(a.useState(o||!(null==l?void 0:l.id)),2),S=k[0],N=k[1];return a.useEffect((function(){h||b?E(!1):S||E(!0),N(o||!(null==l?void 0:l.id))}),[n,null==l?void 0:l.id,S]),r.h.isDevelopment?{showCalendar:!0,isLoading:!1}:{showCalendar:w,isLoading:S}}},97816:(e,t,n)=>{n.d(t,{V:()=>f});var a=n(32735),r=n(20354),i=n(21750),o=n(31949),l=n(1575),c=n(31908);function s(e,t){if(e){if("string"==typeof e)return u(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?u(e,t):void 0}}function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}function f(e){var t,n,f=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},d=r.a.useBasicFetch(o.N.currentUser()),m=a.useRef(new Set),p=function(e){return e?Array.isArray(e)?e.filter((function(e){return!!e&&(c.M.isVideo(e)||c.M.isClip(e))})):"data"in e?e.data.filter((function(e){return!!e&&(c.M.isVideo(e)||c.M.isClip(e))})):[]:[]}(e),v=p.map((function(e){return e.id})),y=(t=a.useState([]),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,l=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=i.call(n)).done)&&(l.push(a.value),l.length!==t);c=!0);}catch(e){s=!0,r=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw r}}return l}}(t,n)||s(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),b=y[0],h=y[1];a.useEffect((function(){if((null==v?void 0:v.length)&&d.hasCompleted){var e=[];v.forEach((function(t){m.current.has(t)||(e.push(t),m.current.add(t))})),e.length&&h((function(t){var n,a=[].concat(function(e){return function(e){if(Array.isArray(e))return u(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||s(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.")}()}(t),[l.R.videoMixinAssocs(e,f.flightNamespace)]);return(null===(n=d.data)||void 0===n?void 0:n.isAuthenticated)&&a.push(i.x.hasCurriculumLinks(e,null,f.flightNamespace)),a}))}}),[null==v?void 0:v.length,d.hasCompleted]),r.a.useBasicFetchAll(b)}},87432:(e,t,n)=>{n.d(t,{Z:()=>a});const a={pillTabSelector:"Hdi6o",tab:"RvNxr",minWidth:"GHSz9",radiusSmall:"VhJJa",tabLink:"WFyvo"}},68050:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(95685),r=n.n(a),i=n(32735),o=n(46304),l=n(74512);const c=i.forwardRef((({bsPrefix:e,className:t,as:n="div",...a},i)=>{const c=(0,o.vE)(e,"row"),s=(0,o.pi)(),u=(0,o.zG)(),f=`${c}-cols`,d=[];return s.forEach((e=>{const t=a[e];let n;delete a[e],null!=t&&"object"==typeof t?({cols:n}=t):n=t;const r=e!==u?`-${e}`:"";null!=n&&d.push(`${f}${r}-${n}`)})),(0,l.jsx)(n,{ref:i,...a,className:r()(t,c,...d)})}));c.displayName="Row";const s=c}}]);
2
+ //# sourceMappingURL=193-797b89797a-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/193-797b89797a-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/discover/components/header/discover-header.scss","file:///app/packages/libs/shared/src/apps/discover/components/header/DiscoverHeader.tsx","file:///app/packages/libs/shared/src/components/pill-tab-selector/PillTabSelector.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/hooks/UseBatchFetch.ts","file:///app/packages/projects/lite/src/apps/content-updates/components/classification-banner/classification-banner.scss","file:///app/packages/projects/lite/src/apps/content-updates/components/classification-banner/ClassificationBanner.tsx","file:///app/packages/projects/lite/src/apps/content-updates/views/content-updates/components/ContentUpdateClassification.tsx","file:///app/packages/projects/lite/src/apps/content-updates/views/content-updates/partial-loading/partial-content-updates.scss","file:///app/packages/projects/lite/src/apps/content-updates/views/content-updates/partial-loading/PartialContentUpdatesView.tsx","file:///app/packages/projects/lite/src/apps/content-updates/views/content-updates/ContentUpdatesView.tsx","file:///app/packages/projects/lite/src/shared/hooks/usePresentationAudiences.ts","file:///app/packages/projects/lite/src/shared/hooks/useShowCalendar.ts","file:///app/packages/projects/lite/src/shared/hooks/useVideoMixin.ts","file:///app/packages/libs/shared/src/components/pill-tab-selector/pill-tab-selector.scss","file:///app/node_modules/react-bootstrap/esm/Row.js"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"pillTab\":\"bMJM0\"};","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\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 { PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { DashboardUserType } from 'libs/shared/interfaces';\n\nimport styles from './discover-header.scss';\n\nconst namespace = 'discover.header';\n\nexport interface DiscoverHeaderAppLinks {\n forYou: Core.AppLink;\n whatsNew: Core.AppLink;\n calendar: Core.AppLink;\n}\n\ninterface DiscoverHeaderProps {\n type: DashboardUserType;\n hasStudentExperience?: boolean;\n appLinks?: DiscoverHeaderAppLinks;\n showCalendar: boolean;\n active: keyof DiscoverHeaderAppLinks;\n}\n\nexport function DiscoverHeader(props: DiscoverHeaderProps): JSX.Element {\n if (!props.type)\n return <></>;\n\n if (props.type === DashboardUserType.Learner || props.hasStudentExperience) {\n return (\n <div className='py-3'>\n <h1 className='h2 mb-0'>\n <Text namespace={namespace} phrase='heading' />\n </h1>\n </div>\n );\n }\n\n const tabs = [{\n name: LanguageService.getPhrase(namespace, 'forYou'),\n appLink: props.appLinks?.forYou,\n active: props.active === 'forYou',\n analyticsData: {\n name: LanguageService.getPhrase(namespace, 'forYou'),\n url: AppLinkHelper.getHref(props.appLinks?.forYou)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n }, {\n name: LanguageService.getPhrase(namespace, 'whatsNew'),\n appLink: props.appLinks?.whatsNew,\n active: props.active === 'whatsNew',\n analyticsData: {\n name: LanguageService.getPhrase(namespace, 'whatsNew'),\n url: AppLinkHelper.getHref(props.appLinks?.whatsNew)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n }];\n\n if (props.showCalendar) {\n tabs.push({\n name: LanguageService.getPhrase(namespace, 'calendar'),\n appLink: props.appLinks?.calendar,\n active: props.active === 'calendar',\n analyticsData: {\n name: LanguageService.getPhrase(namespace, 'calendar'),\n url: AppLinkHelper.getHref(props.appLinks?.calendar)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n });\n }\n\n return (\n <div className='py-3 text-center'>\n <PillTabSelector\n tabs={tabs}\n className={styles.pillTab}\n />\n </div>\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 {\"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","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { Flight } from 'libs/common/flight';\nimport { ApplicationState, HashObject } from 'libs/common/react/interfaces';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nexport interface UseBatchFetchResult<T extends BaseObject> {\n items: { [key: string]: T} | null;\n isFetching: boolean;\n}\n\n/**\n * Used to fetch multiple items by id with Flight. Will fetch 25 items at a time firing off multiple\n * requests if there are more than 25 items.\n * This will return items as null until we have all our items. Items will be returned as an object with\n * their ids as they key for easy mapping\n * \n * @param itemIds \n * @param getRequest \n */\nexport function useBatchFetch<T extends BaseObject>(\n itemIds: string[],\n getRequest: (ids: string[]) => Flight.Request\n): UseBatchFetchResult<T> {\n const [ idBatches, setIdBatches ] = React.useState<string[][]>([]);\n\n React.useEffect(() => {\n if (!itemIds?.length)\n return;\n\n const newBatches = [...idBatches];\n newBatches.push([]);\n\n itemIds.forEach(id => {\n if (newBatches.find(batch => batch.find(_id => _id === id)))\n return;\n\n newBatches[newBatches.length - 1].push(id);\n });\n\n setIdBatches(newBatches.filter(batch => batch.length));\n }, [itemIds ? itemIds.join(',') : null]);\n\n const dispatch = useDispatch();\n\n const state = useSelector((state: ApplicationState) => state);\n\n React.useEffect(() => {\n idBatches.forEach(idBatch => {\n const request = getRequest(idBatch);\n const response = Flight.getResponse<T[]>(state, request.key);\n\n if (response.shouldFetch)\n Flight.fetch(dispatch, request);\n });\n }, [idBatches?.length]);\n\n if (!idBatches?.length)\n return { items: null, isFetching: false };\n \n const items: { [key: string]: T} = {};\n\n /* Used locally to only return our items if we've fetched all of them */\n const responses: HashObject<Flight.Response<T[]>> = {};\n \n idBatches.forEach((idBatch, i) => {\n const request = getRequest(idBatch);\n const response = Flight.getResponse<T[]>(state, request.key);\n responses[i] = response;\n\n if (response.data)\n response.data.forEach(v => items[v.id] = v);\n });\n\n return {\n items: Object.keys(responses).some(k => !!responses[k].data) ? items : null,\n isFetching: !!Object.keys(responses).some(k => responses[k].isFetching)\n };\n}","// extracted by mini-css-extract-plugin\nexport default {\"banner\":\"B7jhq\"};","import * as React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Core } from 'libs/common/core';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { Classification, PresentationAudience } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './classification-banner.scss';\n\nconst namespace = 'contentUpdates.classificationBanner';\n\ninterface ClassificationBannerProps {\n classification: Classification;\n backgroundUrl: string;\n getClassificationAppLink: (classification: Classification, activeAudiences: PresentationAudience[]) => Core.AppLink;\n followed: boolean;\n follow: (classificationId: string, classificationName: string, follow: boolean) => void;\n showFollowSpinner: boolean;\n canFollow: boolean;\n}\n\nexport function ClassificationBanner(props: ClassificationBannerProps): JSX.Element {\n const { classification, backgroundUrl, followed, follow, showFollowSpinner } = props;\n\n const [activeAudiences] = useViewModel<PresentationAudience[]>(\n SharedViewModelKeys.AUDIENCE_FILTER,\n undefined,\n { storage: StorageType.SessionStorage }\n );\n\n return (\n <div\n className={`banner mb-2 d-flex justify-content-between align-items-center rounded ${styles.banner}`}\n style={{ backgroundImage: `url('${backgroundUrl}')` }}\n >\n <AppLink className='text-white text-shadow' appLink={props.getClassificationAppLink(classification, activeAudiences)}>\n <h2 className='h3 mb-0'>{classification.name}</h2>\n </AppLink>\n\n {props.canFollow && (\n <IconButton\n className={`btn follow-btn ${followed ? 'btn-outline-dark' : 'btn-dark'}`}\n svgName={followed ? cvSvgLibrary.BellFilled : cvSvgLibrary.Bell}\n onClick={() => follow(classification.id, classification.name, !followed)}\n >\n {showFollowSpinner\n ? <Spinner as='span' animation='border' role='status' size='sm' />\n : <Text namespace={namespace} phrase={followed ? 'following' : 'follow'} />\n }\n </IconButton>\n )}\n </div>\n );\n}\n","import * as React from 'react';\n\nimport { ContentUpdateAppLinks, VideoWithClassification } from 'libs/shared/apps/content-updates/interfaces';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { ImageSize, ImageType, ResizeType } from 'libs/shared/enums/Images';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { CanFavouriteFunc, Classification, FavouriteFunc, PresentationAudience, YearGroup } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport { InteractiveHelpers } from 'shared/utils/InteractiveHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { ClassificationBanner } from 'apps/content-updates/components';\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nconst namespace = 'contentUpdates.contentUpdatesView';\n\ninterface ClassificationProps {\n classification: Classification;\n videos: VideoWithClassification[];\n yearGroups: YearGroup[];\n imageCdnUrl: string;\n showMore: boolean;\n appLinks: ContentUpdateAppLinks;\n followed: boolean;\n follow: (classificationId: string, classificationName: string, follow: boolean) => void;\n showFollowSpinner: boolean;\n canFollow: boolean;\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n audiences: PresentationAudience[];\n isPlugin: boolean;\n}\n\nexport function ContentUpdateClassification(props: ClassificationProps): JSX.Element {\n const { classification, videos, imageCdnUrl, showMore, followed } = props;\n\n const { hasPermissions } = usePermissions();\n\n if (!classification)\n return <></>;\n \n const url = ImageHelper.createBannerUrl(classification.banner, {\n fallbackBaseUrl: imageCdnUrl,\n fallbackCategoryName: classification.name,\n type: ImageType.Banners\n }, { size: ImageSize.Medium, resizeType: ResizeType.Cover });\n\n return (\n <div className='mb-3'>\n <ClassificationBanner\n classification={classification}\n backgroundUrl={url}\n getClassificationAppLink={props.appLinks.getClassificationAppLink}\n followed={followed}\n follow={props.follow}\n canFollow={props.canFollow}\n showFollowSpinner={props.showFollowSpinner}\n />\n <VideoList\n videos={videos}\n yearGroups={props.yearGroups}\n getVideoAppLink={props.appLinks.getVideoAppLink}\n getSubTextAppLink={video => SeriesAppLinkHelper.getSeriesAppLink(video.series)}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n presentationAudiences={props.audiences}\n hasPermissions={hasPermissions}\n getPreviewQuestionsAppLink={interactive => InteractiveHelpers.getPreviewQuestionsAppLink(interactive)}\n isPlugin={props.isPlugin}\n getClassroomGuideAppLink={VideoAppLinkHelper.getClassroomGuideAppLink}\n getInteractiveGuidanceAppLink={VideoAppLinkHelper.getInteractiveGuidanceAppLink}\n getResourceGuidanceAppLink={VideoAppLinkHelper.getResourceGuidanceAppLink}\n />\n {showMore &&\n <div className={'show-more'}>\n <AppLink className='info-link' appLink={props.appLinks.getClassificationUpdateAppLink(classification)}>\n <Text namespace={namespace} phrase='showMore' options={{\n classificationName: classification.name\n }} />\n </AppLink>\n </div>\n }\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialBanner\":\"bxaA6\"};","import React from 'react';\n\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\n\nimport styles from './partial-content-updates.scss';\n\nexport function PartialContentUpdatesView(): JSX.Element {\n return (\n <>\n {Array(4).fill(null).map((s, i) => (\n <div key={i} className='mb-3'>\n <div className={`partial-loading-background mb-2 ${styles.partialBanner}`} />\n <PartialVideoList />;\n </div>\n ))}\n </>\n );\n}","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, ToggleDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ContentUpdateRequests } from 'libs/shared/apps/content-updates/flight-requests/ContentUpdateRequests';\nimport { ClassificationVideosGrouping, ContentUpdate, ContentUpdateAppLinks } from 'libs/shared/apps/content-updates/interfaces';\nimport { DiscoverHeader } from 'libs/shared/apps/discover/components/header/DiscoverHeader';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { PreferenceRequests } from 'libs/shared/flight-requests/PreferenceRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Classification, Config, CurrentUser, DashboardUserType, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\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 { usePresentation } from 'shared/hooks/usePresentation';\nimport { usePresentationAudiences } from 'shared/hooks/usePresentationAudiences';\nimport { useShowCalendar } from 'shared/hooks/useShowCalendar';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\n\nimport { ContentUpdateClassification } from './components/ContentUpdateClassification';\nimport { PartialContentUpdatesView } from './partial-loading/PartialContentUpdatesView';\n\nconst INITIAL_VIDEO_COUNT = 5;\nconst namespace = 'contentUpdates.contentUpdatesView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction map(\n contentUpdates: ClassificationVideosGrouping[],\n classifications: {[key: string]: Classification}\n): ContentUpdate[] {\n if (!contentUpdates || !classifications)\n return null;\n\n return contentUpdates.map((c): ContentUpdate => {\n return {\n showMore: c.videos.length > INITIAL_VIDEO_COUNT,\n classification: classifications[c.id],\n videos: c.videos.slice(0, INITIAL_VIDEO_COUNT).map((m: any) => {\n m.classification = classifications[m.id];\n return m;\n }).filter(v => v)\n };\n }).filter(v => v.classification);\n}\n\ninterface FollowSpinnersMap {\n [classificationId: string]: boolean;\n}\n\ninterface ContentUpdatesViewProps {\n appLinks: ContentUpdateAppLinks;\n presentationSlug?: string;\n}\n\nexport function ContentUpdatesView(props: ContentUpdatesViewProps): JSX.Element {\n const [ followSpinners, setFollowSpinners ] = React.useState<FollowSpinnersMap>({});\n\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const { isPlugin } = usePluginHelper();\n\n const { hasPermissions } = usePermissions();\n const canFollowSubjects = hasPermissions(PermissionName.FollowSubjects);\n\n const date = new Date();\n const from = DateHelper.format(DateHelper.endOf(DateHelper.subtract(date, 1, 'year'), 'day'), 'YYYY-MM-DD');\n const to = DateHelper.format(DateHelper.endOf(date, 'day'), 'YYYY-MM-DD');\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const { activePresentation } = usePresentation({ redirectOnError: true });\n\n useSetPageMetadata(PageMetadataHelper.getDefaultMetadata({\n title: activePresentation?.name,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n },\n canonicalLink: SeoHelper.getCanonicalLink(),\n allowIndexing: SeoHelper.allowIndexing(),\n hrefLang: SeoHelper.getStaticRouteHrefLang(\n activePresentation?.learningLevel,\n () => ({ application: AppChannels.CONTENT_UPDATES, action: Actions.ContentUpdates.CONTENT_UPDATES })\n )\n }));\n\n const contentUpdatesRequest = ContentUpdateRequests.getContentUpdates(activePresentation?.id, from, to);\n const contentUpdates = Flight.useBasicFetch<ClassificationVideosGrouping[]>(\n activePresentation && contentUpdatesRequest\n );\n const subjectPreferences = Flight.useBasicFetch<Classification[]>(canFollowSubjects &&\n PreferenceRequests.mySubjectPreferences());\n\n const audiences = usePresentationAudiences();\n\n /* Map content update response into list of video ids and classification ids*/\n const classificationIds: string[] = [];\n let videos: Video[] = [];\n contentUpdates.data && contentUpdates.data.forEach(c => {\n classificationIds.push(c.id);\n videos = videos.concat(c.videos);\n });\n\n /* Batch fetch the videos and classifications by id */\n const { items: classifications } = useBatchFetch<Classification>(\n classificationIds,\n (ids: string[]) => ContentUpdateRequests.getClassifications(ids)\n );\n\n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem });\n \n useVideoMixin(videos, {\n flightNamespace: contentUpdatesRequest.normalizeOptions?.namespace\n });\n\n const { setFavourite, canFavourite } = useLiteFavourites(\n LocationContext.VideoThumbnail,\n contentUpdatesRequest.normalizeOptions?.namespace\n );\n\n /** Callbacks */\n function onFollow(classificationId: string, classificationName: string, follow: boolean): void {\n setFollowSpinners(currentState => ({\n ...currentState,\n [classificationId]: true\n }));\n\n const onSuccess = () => {\n setFollowSpinners(currentState => ({\n ...currentState,\n [classificationId]: false\n }));\n\n AnalyticsHelper.logUserAction({\n id: classificationId,\n name: classificationName\n }, {\n location: LocationContext.ContentUpdatesClassificationBanner,\n workflowPhase: WorkflowPhase.Complete,\n descriptor: follow ? ToggleDescriptor.On : ToggleDescriptor.Off,\n actionType: UserAction.Follow,\n entity: EntityType.Classification\n });\n\n alerts.success(getPhrase(\n follow ? 'followed' : 'unfollowed',\n { classification: classifications[classificationId]?.name, escapeText: true }\n ));\n };\n\n const onError = () => {\n setFollowSpinners(currentState => ({\n ...currentState,\n [classificationId]: false\n }));\n\n alerts.error(getPhrase('error'));\n };\n\n const request = follow ?\n PreferenceRequests.followSubjects([classificationId], onSuccess, onError) :\n PreferenceRequests.unfollowSubjects([classificationId], onSuccess, onError);\n\n Flight.fetch(dispatch, request);\n }\n\n const { showCalendar, isLoading } = useShowCalendar();\n\n const dataLoaded = !!(\n contentUpdates.hasCompleted &&\n config.hasCompleted &&\n audiences.hasCompleted &&\n (!canFollowSubjects || subjectPreferences.hasCompleted) &&\n classifications &&\n !isLoading\n );\n\n /* Build out array of content updates from our lists of videos and classifications */\n const mappedUpdates = map(contentUpdates.data, classifications);\n const preferredSubjectIds = subjectPreferences.data?.map(subject => subject.id) ?? [];\n\n const managePreferences = hasPermissions(PermissionName.ManageSubjectPreferences);\n const manageVideoAccess = hasPermissions(PermissionName.ManageVideoAccess);\n\n return (\n <VideoActionsContext.Provider value={videoActions}>\n <div className='bg-white px-3'>\n {!isLoading && <DiscoverHeader\n type={DashboardUserType.Staff} // Students never see this page\n appLinks={{\n forYou: props.appLinks.dashboardAppLink,\n whatsNew: props.appLinks.whatsNewAppLink,\n calendar: props.appLinks.calendarAppLink\n }}\n showCalendar={showCalendar}\n active='whatsNew'\n />}\n <h1><Text namespace={namespace} phrase='heading' /></h1>\n {(managePreferences || manageVideoAccess) && (\n <p>\n {managePreferences &&\n <>\n <Text namespace={namespace} phrase='onlyRelevant' />&nbsp;\n <AppLink\n className='info-link'\n appLink={{\n application: AppChannels.SETTINGS,\n action: Actions.Settings.TOPIC_PREFERENCES\n }}\n >\n <Text namespace={namespace} phrase='updatePreferences' />\n </AppLink>\n </>\n }\n {manageVideoAccess &&\n <span className='d-block'>\n <AppLink\n className='info-link'\n appLink={{\n application: AppChannels.SETTINGS,\n action: Actions.Settings.CONTENT_REVIEW\n }}\n >\n <Text namespace={namespace} phrase='contentReview' />\n </AppLink>\n </span>\n }\n </p>\n )}\n\n {dataLoaded ? (\n <>\n {mappedUpdates.map((c: ContentUpdate, key: number) => (\n <ContentUpdateClassification\n key={key}\n classification={c.classification}\n videos={c.videos}\n yearGroups={yearGroups.data}\n imageCdnUrl={config.data.imageCdnUrl}\n showMore={c.showMore}\n appLinks={props.appLinks}\n followed={preferredSubjectIds.includes(c.classification?.id)}\n follow={onFollow}\n showFollowSpinner={followSpinners[c.classification?.id]}\n canFollow={canFollowSubjects}\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n audiences={audiences.data}\n isPlugin={isPlugin}\n />\n ))}\n </>\n ) : (\n <PartialContentUpdatesView />\n )}\n </div>\n </VideoActionsContext.Provider>\n );\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 React from 'react';\n\nimport { EnvironmentVariables } from 'libs/common/backbone/services/EnvironmentVariables';\nimport { Flight } from 'libs/common/react/index';\n\nimport { ContentRegion } from 'libs/shared/enums/ContentRegion';\nimport { PresentationLearningLevel } from 'libs/shared/enums/PresentationLearningLevel';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { CurrentUser } from 'libs/shared/interfaces';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { usePresentation } from 'shared/hooks/usePresentation';\n\nconst ALLOWED_LEARNING_LEVELS_BY_REGION: Record<ContentRegion, PresentationLearningLevel[]> = {\n [ContentRegion.AU]: [\n // AU Primary Calendar\n PresentationLearningLevel.Level_1\n ],\n [ContentRegion.US]: [\n // US Elementary Calendar\n PresentationLearningLevel.Level_1\n ],\n [ContentRegion.UK]: [\n // UK Primary Calendar\n PresentationLearningLevel.Level_1\n ],\n [ContentRegion.SCOT]: [\n // Scotland Primary Calendar\n PresentationLearningLevel.Level_1\n ],\n [ContentRegion.NZ]: [],\n [ContentRegion.GLOBAL]: []\n};\n\nexport function useShowCalendar() {\n const { hasSpecialEventCalendar, isLoadingSettings } = useSettings(null);\n\n const {\n activePresentation\n } = usePresentation({ redirectOnError: true });\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const allowedLearningLevels = ALLOWED_LEARNING_LEVELS_BY_REGION[currentUser.data?.contentRegion];\n const learningLevel = TopicsHelper.getMappedPresentationLevel(activePresentation?.learningLevel);\n const learningLevelCantAccess = !allowedLearningLevels?.find(l => {\n return l.toString() === (learningLevel as PresentationLearningLevel)?.toString();\n });\n\n const noSetting = !isLoadingSettings && !hasSpecialEventCalendar;\n\n const [ showCalendar, setShowCalendar ] = React.useState<boolean>(!noSetting && !learningLevelCantAccess);\n\n const [ isLoading, setIsLoading ] = React.useState(isLoadingSettings || !activePresentation?.id);\n\n React.useEffect(() => {\n if (noSetting || learningLevelCantAccess) {\n setShowCalendar(false);\n } else if (!isLoading) {\n setShowCalendar(true);\n }\n setIsLoading(isLoadingSettings || !activePresentation?.id);\n }, [ hasSpecialEventCalendar, activePresentation?.id, isLoading ]);\n\n if (EnvironmentVariables.isDevelopment)\n return { showCalendar: true, isLoading: false };\n\n return { showCalendar, isLoading };\n}","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { Clip, ClipCollection, CurrentUser, Video, VideoCollection } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\ntype Types = Video[] | VideoCollection | Clip[] | ClipCollection;\n\nfunction getValidObjects(objects: Types): (Video | Clip)[] {\n if (!objects)\n return [];\n\n if (Array.isArray(objects))\n return objects.filter(o => !!o && (VideoHelper.isVideo(o) || VideoHelper.isClip(o)));\n\n if ('data' in objects)\n return objects.data.filter(o => !!o && (VideoHelper.isVideo(o) || VideoHelper.isClip(o)));\n\n return [];\n}\n\ninterface VideoMixinOptions {\n /**\n * If the videos that are having new data mixed into are sitting on an explicit Flight namespace,\n * providing that namespace here is required\n */\n flightNamespace?: string;\n}\n\nexport function useVideoMixin(objects: Types, options: VideoMixinOptions = {}): void {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const hydratedVideos = React.useRef<Set<string>>(new Set<string>());\n\n const videos = getValidObjects(objects);\n\n const videoIds = videos.map(v => v.id);\n\n const [ request, setRequest ] = React.useState<Flight.Request[]>([]);\n\n React.useEffect(() => {\n if (!videoIds?.length || !currentUser.hasCompleted)\n return;\n\n const unhydratedVideos: string[] = [];\n\n videoIds.forEach(id => {\n if (!hydratedVideos.current.has(id)) {\n unhydratedVideos.push(id);\n hydratedVideos.current.add(id);\n }\n });\n \n if (!unhydratedVideos.length)\n return;\n\n setRequest(r => {\n const newRequests = [\n ...r,\n VideoRequests.videoMixinAssocs(unhydratedVideos, options.flightNamespace)\n ];\n\n if (currentUser.data?.isAuthenticated)\n newRequests.push(ClassificationRequests.hasCurriculumLinks(unhydratedVideos, null, options.flightNamespace));\n\n return newRequests;\n });\n }, [ videoIds?.length, currentUser.hasCompleted ]);\n\n Flight.useBasicFetchAll(request);\n}","// extracted by mini-css-extract-plugin\nexport default {\"pillTabSelector\":\"Hdi6o\",\"tab\":\"RvNxr\",\"minWidth\":\"GHSz9\",\"radiusSmall\":\"VhJJa\",\"tabLink\":\"WFyvo\"};","\"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":["namespace","DiscoverHeader","props","type","hasStudentExperience","className","Text","phrase","tabs","name","LanguageService","appLink","appLinks","forYou","active","analyticsData","url","analyticsOptions","actionType","entity","location","whatsNew","showCalendar","push","calendar","PillTabSelector","TabContents","tab","svgName","count","data","ref","containerRef","borderRadius","listClassName","map","index","key","onClick","onSelect","onSelectTab","defaultProps","PartialVideoList","Array","numVideos","fill","_","i","allowBulkActions","PartialVideoItem","breakpoints","useBreakpoints","isSmall","VideoListHelper","withDragHandle","withReordering","xs","Row","Col","useBatchFetch","itemIds","getRequest","idBatches","setIdBatches","length","newBatches","forEach","id","find","batch","_id","filter","join","dispatch","state","idBatch","request","shouldFetch","items","isFetching","responses","response","v","Object","keys","some","k","ClassificationBanner","classification","backgroundUrl","followed","follow","showFollowSpinner","activeAudiences","SharedViewModelKeys","undefined","storage","style","backgroundImage","getClassificationAppLink","canFollow","IconButton","Spinner","as","animation","role","size","ContentUpdateClassification","videos","imageCdnUrl","showMore","hasPermissions","usePermissions","ImageHelper","banner","fallbackBaseUrl","fallbackCategoryName","resizeType","VideoList","yearGroups","getVideoAppLink","getSubTextAppLink","video","SeriesAppLinkHelper","series","setFavourite","canFavourite","presentationAudiences","audiences","getPreviewQuestionsAppLink","interactive","InteractiveHelper","isPlugin","getClassroomGuideAppLink","VideoAppLinkHelper","getInteractiveGuidanceAppLink","getResourceGuidanceAppLink","AppLink","getClassificationUpdateAppLink","options","classificationName","PartialContentUpdatesView","s","INITIAL_VIDEO_COUNT","getPhrase","ContentUpdatesView","followSpinners","setFollowSpinners","alerts","usePluginHelper","canFollowSubjects","PermissionName","date","Date","from","DateHelper","to","config","ConfigRequests","currentUser","UserRequests","isAuthenticated","CustomerRequests","customerId","activePresentation","usePresentation","redirectOnError","useSetPageMetadata","PageMetadataHelper","title","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","canonicalLink","SeoHelper","allowIndexing","hrefLang","learningLevel","application","action","contentUpdatesRequest","ContentUpdateRequests","contentUpdates","subjectPreferences","PreferenceRequests","usePresentationAudiences","classificationIds","c","concat","classifications","ids","videoActions","useVideoActions","useVideoMixin","flightNamespace","normalizeOptions","useLiteFavourites","u","onFollow","classificationId","currentState","onSuccess","AnalyticsHelper","workflowPhase","descriptor","success","escapeText","onError","error","useShowCalendar","isLoading","dataLoaded","hasCompleted","mappedUpdates","slice","m","preferredSubjectIds","subject","managePreferences","manageVideoAccess","VideoActionsContext","value","dashboardAppLink","whatsNewAppLink","calendarAppLink","includes","getFallbackPresentation","presentation","ALLOWED_LEARNING_LEVELS_BY_REGION","hasSpecialEventCalendar","isLoadingSettings","allowedLearningLevels","contentRegion","learningLevelCantAccess","l","toString","noSetting","setShowCalendar","setIsLoading","objects","hydratedVideos","Set","isArray","o","getValidObjects","videoIds","setRequest","unhydratedVideos","current","has","add","r","newRequests","bsPrefix","Component","decoratedBsPrefix","minBreakpoint","sizePrefix","classes","brkPoint","propValue","cols","infix","displayName"],"sourceRoot":""}