@clickview/curator 1.100.0-rc.1 → 1.100.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (321) hide show
  1. package/dist/.vite/manifest.json +1779 -1779
  2. package/dist/Assets/js/dist/scripts/{CYhNyVj0.chunk.js → -6zuD8lo.chunk.js} +2 -2
  3. package/dist/Assets/js/dist/scripts/{CYhNyVj0.chunk.js.map → -6zuD8lo.chunk.js.map} +1 -1
  4. package/dist/Assets/js/dist/scripts/{D28bEsam.chunk.js → 0A42jU2r.chunk.js} +2 -2
  5. package/dist/Assets/js/dist/scripts/{D28bEsam.chunk.js.map → 0A42jU2r.chunk.js.map} +1 -1
  6. package/dist/Assets/js/dist/scripts/{oYHUjbwb2.chunk.js → 0ogjGD4J2.chunk.js} +2 -2
  7. package/dist/Assets/js/dist/scripts/{oYHUjbwb2.chunk.js.map → 0ogjGD4J2.chunk.js.map} +1 -1
  8. package/dist/Assets/js/dist/scripts/{PeuFojmJ2.chunk.js → 2aCj1HHJ2.chunk.js} +2 -2
  9. package/dist/Assets/js/dist/scripts/{PeuFojmJ2.chunk.js.map → 2aCj1HHJ2.chunk.js.map} +1 -1
  10. package/dist/Assets/js/dist/scripts/{q7pjZoNd.chunk.js → 2zbtFQka.chunk.js} +2 -2
  11. package/dist/Assets/js/dist/scripts/{q7pjZoNd.chunk.js.map → 2zbtFQka.chunk.js.map} +1 -1
  12. package/dist/Assets/js/dist/scripts/{0S5J0xX22.chunk.js → 3IQ_8AZP2.chunk.js} +2 -2
  13. package/dist/Assets/js/dist/scripts/{0S5J0xX22.chunk.js.map → 3IQ_8AZP2.chunk.js.map} +1 -1
  14. package/dist/Assets/js/dist/scripts/{DvP7S5Uq.chunk.js → 3eMwLZ5D.chunk.js} +2 -2
  15. package/dist/Assets/js/dist/scripts/{DvP7S5Uq.chunk.js.map → 3eMwLZ5D.chunk.js.map} +1 -1
  16. package/dist/Assets/js/dist/scripts/{y1L3G7XA2.chunk.js → 4Tx2JSvk2.chunk.js} +2 -2
  17. package/dist/Assets/js/dist/scripts/{y1L3G7XA2.chunk.js.map → 4Tx2JSvk2.chunk.js.map} +1 -1
  18. package/dist/Assets/js/dist/scripts/{BbR7yW4A2.chunk.js → 5uVJfyDx2.chunk.js} +2 -2
  19. package/dist/Assets/js/dist/scripts/{BbR7yW4A2.chunk.js.map → 5uVJfyDx2.chunk.js.map} +1 -1
  20. package/dist/Assets/js/dist/scripts/{B52yjTo5.chunk.js → 6l2s6d3Q.chunk.js} +2 -2
  21. package/dist/Assets/js/dist/scripts/{B52yjTo5.chunk.js.map → 6l2s6d3Q.chunk.js.map} +1 -1
  22. package/dist/Assets/js/dist/scripts/{DezIbRcB2.chunk.js → 8RAh0VA72.chunk.js} +2 -2
  23. package/dist/Assets/js/dist/scripts/{DezIbRcB2.chunk.js.map → 8RAh0VA72.chunk.js.map} +1 -1
  24. package/dist/Assets/js/dist/scripts/{CixcMUHF.chunk.js → 9nk_zFtT.chunk.js} +2 -2
  25. package/dist/Assets/js/dist/scripts/{CixcMUHF.chunk.js.map → 9nk_zFtT.chunk.js.map} +1 -1
  26. package/dist/Assets/js/dist/scripts/{Bk9vy70e2.chunk.js → Ae4rMqFm2.chunk.js} +2 -2
  27. package/dist/Assets/js/dist/scripts/{Bk9vy70e2.chunk.js.map → Ae4rMqFm2.chunk.js.map} +1 -1
  28. package/dist/Assets/js/dist/scripts/{Bzh_AwaG.chunk.js → B0mCquXn.chunk.js} +2 -2
  29. package/dist/Assets/js/dist/scripts/{Bzh_AwaG.chunk.js.map → B0mCquXn.chunk.js.map} +1 -1
  30. package/dist/Assets/js/dist/scripts/B1pBJzjh.chunk.js +1 -0
  31. package/dist/Assets/js/dist/scripts/{BswFY0mR2.chunk.js → B6IinlWw2.chunk.js} +2 -2
  32. package/dist/Assets/js/dist/scripts/{BswFY0mR2.chunk.js.map → B6IinlWw2.chunk.js.map} +1 -1
  33. package/dist/Assets/js/dist/scripts/{ClpIRgLR.chunk.js → B6NMAAhW.chunk.js} +2 -2
  34. package/dist/Assets/js/dist/scripts/{ClpIRgLR.chunk.js.map → B6NMAAhW.chunk.js.map} +1 -1
  35. package/dist/Assets/js/dist/scripts/{BCMXlwdC2.chunk.js → B8RZKQTs2.chunk.js} +2 -2
  36. package/dist/Assets/js/dist/scripts/{BCMXlwdC2.chunk.js.map → B8RZKQTs2.chunk.js.map} +1 -1
  37. package/dist/Assets/js/dist/scripts/{CymdouaN.chunk.js → B9R92bqj.chunk.js} +2 -2
  38. package/dist/Assets/js/dist/scripts/{CymdouaN.chunk.js.map → B9R92bqj.chunk.js.map} +1 -1
  39. package/dist/Assets/js/dist/scripts/{CtVYDK7g.chunk.js → BAFYJZ4c.chunk.js} +2 -2
  40. package/dist/Assets/js/dist/scripts/{CtVYDK7g.chunk.js.map → BAFYJZ4c.chunk.js.map} +1 -1
  41. package/dist/Assets/js/dist/scripts/{_wZpe632.chunk.js → BFPSIGJg.chunk.js} +2 -2
  42. package/dist/Assets/js/dist/scripts/{_wZpe632.chunk.js.map → BFPSIGJg.chunk.js.map} +1 -1
  43. package/dist/Assets/js/dist/scripts/{BNHULwJy2.chunk.js → BGiLDtc92.chunk.js} +2 -2
  44. package/dist/Assets/js/dist/scripts/{BNHULwJy2.chunk.js.map → BGiLDtc92.chunk.js.map} +1 -1
  45. package/dist/Assets/js/dist/scripts/{DA9R8atp2.chunk.js → BH6LIpwu2.chunk.js} +2 -2
  46. package/dist/Assets/js/dist/scripts/{DA9R8atp2.chunk.js.map → BH6LIpwu2.chunk.js.map} +1 -1
  47. package/dist/Assets/js/dist/scripts/{DbrVjVdn.chunk.js → BMj3pXcm.chunk.js} +2 -2
  48. package/dist/Assets/js/dist/scripts/{DbrVjVdn.chunk.js.map → BMj3pXcm.chunk.js.map} +1 -1
  49. package/dist/Assets/js/dist/scripts/{CDvLjxwS.chunk.js → BQTfNBFU.chunk.js} +2 -2
  50. package/dist/Assets/js/dist/scripts/{CDvLjxwS.chunk.js.map → BQTfNBFU.chunk.js.map} +1 -1
  51. package/dist/Assets/js/dist/scripts/{mStmtFRo.chunk.js → BT-jeT7C.chunk.js} +2 -2
  52. package/dist/Assets/js/dist/scripts/{mStmtFRo.chunk.js.map → BT-jeT7C.chunk.js.map} +1 -1
  53. package/dist/Assets/js/dist/scripts/{FlF2O19P2.chunk.js → BUD4osIg2.chunk.js} +2 -2
  54. package/dist/Assets/js/dist/scripts/{FlF2O19P2.chunk.js.map → BUD4osIg2.chunk.js.map} +1 -1
  55. package/dist/Assets/js/dist/scripts/{DWS9yr24.chunk.js → BVoG71Kc.chunk.js} +2 -2
  56. package/dist/Assets/js/dist/scripts/{DWS9yr24.chunk.js.map → BVoG71Kc.chunk.js.map} +1 -1
  57. package/dist/Assets/js/dist/scripts/{B9tf3oT62.chunk.js → BW5iVK1B2.chunk.js} +2 -2
  58. package/dist/Assets/js/dist/scripts/{B9tf3oT62.chunk.js.map → BW5iVK1B2.chunk.js.map} +1 -1
  59. package/dist/Assets/js/dist/scripts/{C2mEE4FT.chunk.js → BW9r-3iO.chunk.js} +2 -2
  60. package/dist/Assets/js/dist/scripts/{C2mEE4FT.chunk.js.map → BW9r-3iO.chunk.js.map} +1 -1
  61. package/dist/Assets/js/dist/scripts/{Dpgqkqbp.chunk.js → BX1tMzoa.chunk.js} +2 -2
  62. package/dist/Assets/js/dist/scripts/{Dpgqkqbp.chunk.js.map → BX1tMzoa.chunk.js.map} +1 -1
  63. package/dist/Assets/js/dist/scripts/{DVRzbAn6.chunk.js → BXaC-l33.chunk.js} +2 -2
  64. package/dist/Assets/js/dist/scripts/{DVRzbAn6.chunk.js.map → BXaC-l33.chunk.js.map} +1 -1
  65. package/dist/Assets/js/dist/scripts/{BaR7D4NT2.chunk.js → BY-c3M2b2.chunk.js} +2 -2
  66. package/dist/Assets/js/dist/scripts/{BaR7D4NT2.chunk.js.map → BY-c3M2b2.chunk.js.map} +1 -1
  67. package/dist/Assets/js/dist/scripts/{CJpVJtZk.chunk.js → BYMuPFbe.chunk.js} +2 -2
  68. package/dist/Assets/js/dist/scripts/{CJpVJtZk.chunk.js.map → BYMuPFbe.chunk.js.map} +1 -1
  69. package/dist/Assets/js/dist/scripts/{C5INFWaM2.chunk.js → BaOAOuSc2.chunk.js} +2 -2
  70. package/dist/Assets/js/dist/scripts/{C5INFWaM2.chunk.js.map → BaOAOuSc2.chunk.js.map} +1 -1
  71. package/dist/Assets/js/dist/scripts/{wAWlO6hc.chunk.js → Bb_f3Lku.chunk.js} +2 -2
  72. package/dist/Assets/js/dist/scripts/{wAWlO6hc.chunk.js.map → Bb_f3Lku.chunk.js.map} +1 -1
  73. package/dist/Assets/js/dist/scripts/{BLJO44vl.chunk.js → BdJYoUIO.chunk.js} +2 -2
  74. package/dist/Assets/js/dist/scripts/{BLJO44vl.chunk.js.map → BdJYoUIO.chunk.js.map} +1 -1
  75. package/dist/Assets/js/dist/scripts/{CW2k5Ut-2.chunk.js → Bf-6iyfX2.chunk.js} +2 -2
  76. package/dist/Assets/js/dist/scripts/{CW2k5Ut-2.chunk.js.map → Bf-6iyfX2.chunk.js.map} +1 -1
  77. package/dist/Assets/js/dist/scripts/{DxL0ZEcN2.chunk.js → BiPUuGEE2.chunk.js} +2 -2
  78. package/dist/Assets/js/dist/scripts/{DxL0ZEcN2.chunk.js.map → BiPUuGEE2.chunk.js.map} +1 -1
  79. package/dist/Assets/js/dist/scripts/{2XS-c0Xo.chunk.js → Bj4-NRWf.chunk.js} +2 -2
  80. package/dist/Assets/js/dist/scripts/{2XS-c0Xo.chunk.js.map → Bj4-NRWf.chunk.js.map} +1 -1
  81. package/dist/Assets/js/dist/scripts/{D13ViJt82.chunk.js → BkVcraos2.chunk.js} +2 -2
  82. package/dist/Assets/js/dist/scripts/{D13ViJt82.chunk.js.map → BkVcraos2.chunk.js.map} +1 -1
  83. package/dist/Assets/js/dist/scripts/{U1L4Dfoc.chunk.js → BkZ7WS_H.chunk.js} +2 -2
  84. package/dist/Assets/js/dist/scripts/{U1L4Dfoc.chunk.js.map → BkZ7WS_H.chunk.js.map} +1 -1
  85. package/dist/Assets/js/dist/scripts/{DoQiTqRX2.chunk.js → BoMt5mMW2.chunk.js} +2 -2
  86. package/dist/Assets/js/dist/scripts/{DoQiTqRX2.chunk.js.map → BoMt5mMW2.chunk.js.map} +1 -1
  87. package/dist/Assets/js/dist/scripts/{Da_9BBKD2.chunk.js → Bo_WsHZq2.chunk.js} +2 -2
  88. package/dist/Assets/js/dist/scripts/{Da_9BBKD2.chunk.js.map → Bo_WsHZq2.chunk.js.map} +1 -1
  89. package/dist/Assets/js/dist/scripts/{CnyrKBG0.chunk.js → BpV5ErII.chunk.js} +2 -2
  90. package/dist/Assets/js/dist/scripts/{CnyrKBG0.chunk.js.map → BpV5ErII.chunk.js.map} +1 -1
  91. package/dist/Assets/js/dist/scripts/{Dfhl7nI62.chunk.js → BrBPGjLi2.chunk.js} +2 -2
  92. package/dist/Assets/js/dist/scripts/{Dfhl7nI62.chunk.js.map → BrBPGjLi2.chunk.js.map} +1 -1
  93. package/dist/Assets/js/dist/scripts/{DcxGcCkR.chunk.js → BrHyZG_m.chunk.js} +2 -2
  94. package/dist/Assets/js/dist/scripts/{DcxGcCkR.chunk.js.map → BrHyZG_m.chunk.js.map} +1 -1
  95. package/dist/Assets/js/dist/scripts/{FXPxauLF.chunk.js → Bu4F3uuX.chunk.js} +2 -2
  96. package/dist/Assets/js/dist/scripts/{FXPxauLF.chunk.js.map → Bu4F3uuX.chunk.js.map} +1 -1
  97. package/dist/Assets/js/dist/scripts/{DZdJx-7j.chunk.js → BvW9SXzy.chunk.js} +2 -2
  98. package/dist/Assets/js/dist/scripts/{DZdJx-7j.chunk.js.map → BvW9SXzy.chunk.js.map} +1 -1
  99. package/dist/Assets/js/dist/scripts/{CAU0Lbgd.chunk.js → BwKHls91.chunk.js} +2 -2
  100. package/dist/Assets/js/dist/scripts/{CAU0Lbgd.chunk.js.map → BwKHls91.chunk.js.map} +1 -1
  101. package/dist/Assets/js/dist/scripts/{BiTzUyxj2.chunk.js → BxZNJjbX2.chunk.js} +2 -2
  102. package/dist/Assets/js/dist/scripts/{BiTzUyxj2.chunk.js.map → BxZNJjbX2.chunk.js.map} +1 -1
  103. package/dist/Assets/js/dist/scripts/{cymXuIcM.chunk.js → BygVW5WL.chunk.js} +2 -2
  104. package/dist/Assets/js/dist/scripts/{cymXuIcM.chunk.js.map → BygVW5WL.chunk.js.map} +1 -1
  105. package/dist/Assets/js/dist/scripts/{Dx07A6Ct.chunk.js → ByzsHBuo.chunk.js} +2 -2
  106. package/dist/Assets/js/dist/scripts/{Dx07A6Ct.chunk.js.map → ByzsHBuo.chunk.js.map} +1 -1
  107. package/dist/Assets/js/dist/scripts/C-M2om56.chunk.js +3 -0
  108. package/dist/Assets/js/dist/scripts/C-M2om56.chunk.js.map +1 -0
  109. package/dist/Assets/js/dist/scripts/{B6dlmRQL.chunk.js → C0UYMHUe.chunk.js} +2 -2
  110. package/dist/Assets/js/dist/scripts/{B6dlmRQL.chunk.js.map → C0UYMHUe.chunk.js.map} +1 -1
  111. package/dist/Assets/js/dist/scripts/{V0N7tCBl.chunk.js → C0_pEFCD.chunk.js} +2 -2
  112. package/dist/Assets/js/dist/scripts/{V0N7tCBl.chunk.js.map → C0_pEFCD.chunk.js.map} +1 -1
  113. package/dist/Assets/js/dist/scripts/{Cpr1J8Rk2.chunk.js → C2jRLu4_2.chunk.js} +2 -2
  114. package/dist/Assets/js/dist/scripts/{Cpr1J8Rk2.chunk.js.map → C2jRLu4_2.chunk.js.map} +1 -1
  115. package/dist/Assets/js/dist/scripts/{CY56FWb9.chunk.js → C2tBl3l9.chunk.js} +2 -2
  116. package/dist/Assets/js/dist/scripts/{CY56FWb9.chunk.js.map → C2tBl3l9.chunk.js.map} +1 -1
  117. package/dist/Assets/js/dist/scripts/{C3Lx9PwR.chunk.js → C4eazpDh.chunk.js} +2 -2
  118. package/dist/Assets/js/dist/scripts/{C3Lx9PwR.chunk.js.map → C4eazpDh.chunk.js.map} +1 -1
  119. package/dist/Assets/js/dist/scripts/{puobgAYi.chunk.js → CBq4vrjT.chunk.js} +2 -2
  120. package/dist/Assets/js/dist/scripts/{puobgAYi.chunk.js.map → CBq4vrjT.chunk.js.map} +1 -1
  121. package/dist/Assets/js/dist/scripts/{Bcx1C8ae.chunk.js → CBzqRw-k.chunk.js} +2 -2
  122. package/dist/Assets/js/dist/scripts/{Bcx1C8ae.chunk.js.map → CBzqRw-k.chunk.js.map} +1 -1
  123. package/dist/Assets/js/dist/scripts/{BD6DIPGL2.chunk.js → CDAdfAL02.chunk.js} +2 -2
  124. package/dist/Assets/js/dist/scripts/{BD6DIPGL2.chunk.js.map → CDAdfAL02.chunk.js.map} +1 -1
  125. package/dist/Assets/js/dist/scripts/{Ddp1uNfH.chunk.js → CE1Dxq8p.chunk.js} +2 -2
  126. package/dist/Assets/js/dist/scripts/{Ddp1uNfH.chunk.js.map → CE1Dxq8p.chunk.js.map} +1 -1
  127. package/dist/Assets/js/dist/scripts/{C99MPG7E.chunk.js → CG2julEA.chunk.js} +2 -2
  128. package/dist/Assets/js/dist/scripts/{C99MPG7E.chunk.js.map → CG2julEA.chunk.js.map} +1 -1
  129. package/dist/Assets/js/dist/scripts/{tyY3GHEC2.chunk.js → CGcN4g0d2.chunk.js} +2 -2
  130. package/dist/Assets/js/dist/scripts/{tyY3GHEC2.chunk.js.map → CGcN4g0d2.chunk.js.map} +1 -1
  131. package/dist/Assets/js/dist/scripts/{wODD7tmB2.chunk.js → CJmV_FfR2.chunk.js} +2 -2
  132. package/dist/Assets/js/dist/scripts/{wODD7tmB2.chunk.js.map → CJmV_FfR2.chunk.js.map} +1 -1
  133. package/dist/Assets/js/dist/scripts/{DavA1dZZ.chunk.js → CKvVGIRL.chunk.js} +2 -2
  134. package/dist/Assets/js/dist/scripts/{DavA1dZZ.chunk.js.map → CKvVGIRL.chunk.js.map} +1 -1
  135. package/dist/Assets/js/dist/scripts/{CrndJnZp.chunk.js → CL1DcbTZ.chunk.js} +2 -2
  136. package/dist/Assets/js/dist/scripts/{CrndJnZp.chunk.js.map → CL1DcbTZ.chunk.js.map} +1 -1
  137. package/dist/Assets/js/dist/scripts/{DLLL2lwS.chunk.js → CNLx6_fS.chunk.js} +2 -2
  138. package/dist/Assets/js/dist/scripts/{DLLL2lwS.chunk.js.map → CNLx6_fS.chunk.js.map} +1 -1
  139. package/dist/Assets/js/dist/scripts/{w2lackHw.chunk.js → CNUVs80P.chunk.js} +2 -2
  140. package/dist/Assets/js/dist/scripts/{w2lackHw.chunk.js.map → CNUVs80P.chunk.js.map} +1 -1
  141. package/dist/Assets/js/dist/scripts/{CCzvD0H4.chunk.js → CPa__SNX.chunk.js} +2 -2
  142. package/dist/Assets/js/dist/scripts/{CCzvD0H4.chunk.js.map → CPa__SNX.chunk.js.map} +1 -1
  143. package/dist/Assets/js/dist/scripts/{DeDh-wVP.chunk.js → CSA2Tnv9.chunk.js} +2 -2
  144. package/dist/Assets/js/dist/scripts/{DeDh-wVP.chunk.js.map → CSA2Tnv9.chunk.js.map} +1 -1
  145. package/dist/Assets/js/dist/scripts/{CjZJx6-O2.chunk.js → CT-xEpNT2.chunk.js} +2 -2
  146. package/dist/Assets/js/dist/scripts/{CjZJx6-O2.chunk.js.map → CT-xEpNT2.chunk.js.map} +1 -1
  147. package/dist/Assets/js/dist/scripts/{BRPP3VZ1.chunk.js → CT0vfLa0.chunk.js} +2 -2
  148. package/dist/Assets/js/dist/scripts/{BRPP3VZ1.chunk.js.map → CT0vfLa0.chunk.js.map} +1 -1
  149. package/dist/Assets/js/dist/scripts/{DGjNB2Bz.chunk.js → CUDnXypB.chunk.js} +2 -2
  150. package/dist/Assets/js/dist/scripts/{DGjNB2Bz.chunk.js.map → CUDnXypB.chunk.js.map} +1 -1
  151. package/dist/Assets/js/dist/scripts/{cXanUGwK.chunk.js → CeMQZB5J.chunk.js} +2 -2
  152. package/dist/Assets/js/dist/scripts/{cXanUGwK.chunk.js.map → CeMQZB5J.chunk.js.map} +1 -1
  153. package/dist/Assets/js/dist/scripts/Cf5cjLzK.chunk.js +2 -0
  154. package/dist/Assets/js/dist/scripts/{D2iK_uRt.chunk.js.map → Cf5cjLzK.chunk.js.map} +1 -1
  155. package/dist/Assets/js/dist/scripts/{CRNBuqmR.chunk.js → CfGaxIgd.chunk.js} +2 -2
  156. package/dist/Assets/js/dist/scripts/{CRNBuqmR.chunk.js.map → CfGaxIgd.chunk.js.map} +1 -1
  157. package/dist/Assets/js/dist/scripts/{BNr7ZL3F2.chunk.js → Cqfub35W2.chunk.js} +2 -2
  158. package/dist/Assets/js/dist/scripts/{BNr7ZL3F2.chunk.js.map → Cqfub35W2.chunk.js.map} +1 -1
  159. package/dist/Assets/js/dist/scripts/{DRmwJ1it2.chunk.js → Cv8UpP5_2.chunk.js} +2 -2
  160. package/dist/Assets/js/dist/scripts/{DRmwJ1it2.chunk.js.map → Cv8UpP5_2.chunk.js.map} +1 -1
  161. package/dist/Assets/js/dist/scripts/{DOfeXfSj.chunk.js → CvV6jx2d.chunk.js} +2 -2
  162. package/dist/Assets/js/dist/scripts/{DOfeXfSj.chunk.js.map → CvV6jx2d.chunk.js.map} +1 -1
  163. package/dist/Assets/js/dist/scripts/{DnGnhqys.chunk.js → CxENQntH.chunk.js} +2 -2
  164. package/dist/Assets/js/dist/scripts/{DnGnhqys.chunk.js.map → CxENQntH.chunk.js.map} +1 -1
  165. package/dist/Assets/js/dist/scripts/{NMDkdR-8.chunk.js → CxIfJCSc.chunk.js} +2 -2
  166. package/dist/Assets/js/dist/scripts/{NMDkdR-8.chunk.js.map → CxIfJCSc.chunk.js.map} +1 -1
  167. package/dist/Assets/js/dist/scripts/{B9H-d-YC.chunk.js → CxggKQxV.chunk.js} +2 -2
  168. package/dist/Assets/js/dist/scripts/{B9H-d-YC.chunk.js.map → CxggKQxV.chunk.js.map} +1 -1
  169. package/dist/Assets/js/dist/scripts/{B3I44IzQ.chunk.js → CyNNZ1So.chunk.js} +2 -2
  170. package/dist/Assets/js/dist/scripts/{B3I44IzQ.chunk.js.map → CyNNZ1So.chunk.js.map} +1 -1
  171. package/dist/Assets/js/dist/scripts/{B2V1N14S.chunk.js → Cz-WSyAE.chunk.js} +2 -2
  172. package/dist/Assets/js/dist/scripts/{B2V1N14S.chunk.js.map → Cz-WSyAE.chunk.js.map} +1 -1
  173. package/dist/Assets/js/dist/scripts/{S9cTzcQc2.chunk.js → D2aQFJWt2.chunk.js} +2 -2
  174. package/dist/Assets/js/dist/scripts/{S9cTzcQc2.chunk.js.map → D2aQFJWt2.chunk.js.map} +1 -1
  175. package/dist/Assets/js/dist/scripts/{CEsXUxxo2.chunk.js → D2h9W4GA2.chunk.js} +2 -2
  176. package/dist/Assets/js/dist/scripts/{CEsXUxxo2.chunk.js.map → D2h9W4GA2.chunk.js.map} +1 -1
  177. package/dist/Assets/js/dist/scripts/{DqCsVhOS.chunk.js → D3NAhMJm.chunk.js} +2 -2
  178. package/dist/Assets/js/dist/scripts/{DqCsVhOS.chunk.js.map → D3NAhMJm.chunk.js.map} +1 -1
  179. package/dist/Assets/js/dist/scripts/{DpM1KgHy.chunk.js → D3aWaqBW.chunk.js} +2 -2
  180. package/dist/Assets/js/dist/scripts/{DpM1KgHy.chunk.js.map → D3aWaqBW.chunk.js.map} +1 -1
  181. package/dist/Assets/js/dist/scripts/{CxtxOtyF2.chunk.js → D4xcR0492.chunk.js} +2 -2
  182. package/dist/Assets/js/dist/scripts/{CxtxOtyF2.chunk.js.map → D4xcR0492.chunk.js.map} +1 -1
  183. package/dist/Assets/js/dist/scripts/{BEeh_Vbr.chunk.js → D5ek2PiI.chunk.js} +2 -2
  184. package/dist/Assets/js/dist/scripts/{BEeh_Vbr.chunk.js.map → D5ek2PiI.chunk.js.map} +1 -1
  185. package/dist/Assets/js/dist/scripts/{DjqQYm43.chunk.js → D61ei_h6.chunk.js} +2 -2
  186. package/dist/Assets/js/dist/scripts/{DjqQYm43.chunk.js.map → D61ei_h6.chunk.js.map} +1 -1
  187. package/dist/Assets/js/dist/scripts/{lgpeNdac.chunk.js → D6wyTufc.chunk.js} +2 -2
  188. package/dist/Assets/js/dist/scripts/{lgpeNdac.chunk.js.map → D6wyTufc.chunk.js.map} +1 -1
  189. package/dist/Assets/js/dist/scripts/{B8li8ced.chunk.js → D7I90XOo.chunk.js} +2 -2
  190. package/dist/Assets/js/dist/scripts/{B8li8ced.chunk.js.map → D7I90XOo.chunk.js.map} +1 -1
  191. package/dist/Assets/js/dist/scripts/{DBAwgllB.chunk.js → DArfNv9S.chunk.js} +2 -2
  192. package/dist/Assets/js/dist/scripts/{DBAwgllB.chunk.js.map → DArfNv9S.chunk.js.map} +1 -1
  193. package/dist/Assets/js/dist/scripts/{B6uYrrzJ2.chunk.js → DB-51xws2.chunk.js} +2 -2
  194. package/dist/Assets/js/dist/scripts/{B6uYrrzJ2.chunk.js.map → DB-51xws2.chunk.js.map} +1 -1
  195. package/dist/Assets/js/dist/scripts/{C-flCrUr.chunk.js → DENdEA1F.chunk.js} +2 -2
  196. package/dist/Assets/js/dist/scripts/{C-flCrUr.chunk.js.map → DENdEA1F.chunk.js.map} +1 -1
  197. package/dist/Assets/js/dist/scripts/{BuF_pg9-2.chunk.js → DFYiLmms2.chunk.js} +2 -2
  198. package/dist/Assets/js/dist/scripts/{BuF_pg9-2.chunk.js.map → DFYiLmms2.chunk.js.map} +1 -1
  199. package/dist/Assets/js/dist/scripts/{BE6LUVEo2.chunk.js → DHa-x1js2.chunk.js} +2 -2
  200. package/dist/Assets/js/dist/scripts/{BE6LUVEo2.chunk.js.map → DHa-x1js2.chunk.js.map} +1 -1
  201. package/dist/Assets/js/dist/scripts/{DDHep0UM.chunk.js → DHeA2NJS.chunk.js} +2 -2
  202. package/dist/Assets/js/dist/scripts/{DDHep0UM.chunk.js.map → DHeA2NJS.chunk.js.map} +1 -1
  203. package/dist/Assets/js/dist/scripts/{D5OaPA-v.chunk.js → DIDxfMO_.chunk.js} +2 -2
  204. package/dist/Assets/js/dist/scripts/{D5OaPA-v.chunk.js.map → DIDxfMO_.chunk.js.map} +1 -1
  205. package/dist/Assets/js/dist/scripts/{CV7UIOmh2.chunk.js → DMq1wDNm2.chunk.js} +2 -2
  206. package/dist/Assets/js/dist/scripts/{CV7UIOmh2.chunk.js.map → DMq1wDNm2.chunk.js.map} +1 -1
  207. package/dist/Assets/js/dist/scripts/{ByMU9ltp2.chunk.js → DNWM9yfh2.chunk.js} +2 -2
  208. package/dist/Assets/js/dist/scripts/{ByMU9ltp2.chunk.js.map → DNWM9yfh2.chunk.js.map} +1 -1
  209. package/dist/Assets/js/dist/scripts/{DFwtjofq2.chunk.js → DSj7VCEo2.chunk.js} +2 -2
  210. package/dist/Assets/js/dist/scripts/{DFwtjofq2.chunk.js.map → DSj7VCEo2.chunk.js.map} +1 -1
  211. package/dist/Assets/js/dist/scripts/{BSYuzR8N2.chunk.js → DSvehN9D2.chunk.js} +2 -2
  212. package/dist/Assets/js/dist/scripts/{BSYuzR8N2.chunk.js.map → DSvehN9D2.chunk.js.map} +1 -1
  213. package/dist/Assets/js/dist/scripts/{FS74_jrx.chunk.js → DTvCgZ4c.chunk.js} +2 -2
  214. package/dist/Assets/js/dist/scripts/{FS74_jrx.chunk.js.map → DTvCgZ4c.chunk.js.map} +1 -1
  215. package/dist/Assets/js/dist/scripts/{C7Gmh7eY.chunk.js → DWHKdmdQ.chunk.js} +2 -2
  216. package/dist/Assets/js/dist/scripts/{C7Gmh7eY.chunk.js.map → DWHKdmdQ.chunk.js.map} +1 -1
  217. package/dist/Assets/js/dist/scripts/{DXcaOjI_.chunk.js → DYFGF9Pe.chunk.js} +2 -2
  218. package/dist/Assets/js/dist/scripts/{DXcaOjI_.chunk.js.map → DYFGF9Pe.chunk.js.map} +1 -1
  219. package/dist/Assets/js/dist/scripts/{CIw53qNO2.chunk.js → DYOxTenc2.chunk.js} +2 -2
  220. package/dist/Assets/js/dist/scripts/{CIw53qNO2.chunk.js.map → DYOxTenc2.chunk.js.map} +1 -1
  221. package/dist/Assets/js/dist/scripts/{CignflP_2.chunk.js → DZthp5T62.chunk.js} +2 -2
  222. package/dist/Assets/js/dist/scripts/{CignflP_2.chunk.js.map → DZthp5T62.chunk.js.map} +1 -1
  223. package/dist/Assets/js/dist/scripts/{BlqDwJRY.chunk.js → Djgwr16q.chunk.js} +2 -2
  224. package/dist/Assets/js/dist/scripts/{BlqDwJRY.chunk.js.map → Djgwr16q.chunk.js.map} +1 -1
  225. package/dist/Assets/js/dist/scripts/{BwToh2X9.chunk.js → DjnvbVQs.chunk.js} +2 -2
  226. package/dist/Assets/js/dist/scripts/{BwToh2X9.chunk.js.map → DjnvbVQs.chunk.js.map} +1 -1
  227. package/dist/Assets/js/dist/scripts/{UelJUmgx2.chunk.js → DmrhyI9D2.chunk.js} +2 -2
  228. package/dist/Assets/js/dist/scripts/{UelJUmgx2.chunk.js.map → DmrhyI9D2.chunk.js.map} +1 -1
  229. package/dist/Assets/js/dist/scripts/{0KUhq7W7.chunk.js → DnZGILQc.chunk.js} +2 -2
  230. package/dist/Assets/js/dist/scripts/{0KUhq7W7.chunk.js.map → DnZGILQc.chunk.js.map} +1 -1
  231. package/dist/Assets/js/dist/scripts/{BSPrErub.chunk.js → DqnZw1cj.chunk.js} +2 -2
  232. package/dist/Assets/js/dist/scripts/{BSPrErub.chunk.js.map → DqnZw1cj.chunk.js.map} +1 -1
  233. package/dist/Assets/js/dist/scripts/{Bkx2vKcX2.chunk.js → DrAKpy8L2.chunk.js} +2 -2
  234. package/dist/Assets/js/dist/scripts/{Bkx2vKcX2.chunk.js.map → DrAKpy8L2.chunk.js.map} +1 -1
  235. package/dist/Assets/js/dist/scripts/{DX9DFxX2.chunk.js → DsM1bfoR.chunk.js} +2 -2
  236. package/dist/Assets/js/dist/scripts/{DX9DFxX2.chunk.js.map → DsM1bfoR.chunk.js.map} +1 -1
  237. package/dist/Assets/js/dist/scripts/{Dh3G-ann.chunk.js → Dt2TCPUI.chunk.js} +2 -2
  238. package/dist/Assets/js/dist/scripts/{Dh3G-ann.chunk.js.map → Dt2TCPUI.chunk.js.map} +1 -1
  239. package/dist/Assets/js/dist/scripts/{DA6Ynhan.chunk.js → DtylOK55.chunk.js} +2 -2
  240. package/dist/Assets/js/dist/scripts/{DA6Ynhan.chunk.js.map → DtylOK55.chunk.js.map} +1 -1
  241. package/dist/Assets/js/dist/scripts/{CJBiVila2.chunk.js → DuTcsFNo2.chunk.js} +2 -2
  242. package/dist/Assets/js/dist/scripts/{CJBiVila2.chunk.js.map → DuTcsFNo2.chunk.js.map} +1 -1
  243. package/dist/Assets/js/dist/scripts/{BBFS0f7w.chunk.js → Dw0mo6Cf.chunk.js} +2 -2
  244. package/dist/Assets/js/dist/scripts/{BBFS0f7w.chunk.js.map → Dw0mo6Cf.chunk.js.map} +1 -1
  245. package/dist/Assets/js/dist/scripts/{Cg5KHpRA.chunk.js → DwISzabN.chunk.js} +2 -2
  246. package/dist/Assets/js/dist/scripts/{Cg5KHpRA.chunk.js.map → DwISzabN.chunk.js.map} +1 -1
  247. package/dist/Assets/js/dist/scripts/{DMxtE2iS.chunk.js → DxW67uUT.chunk.js} +2 -2
  248. package/dist/Assets/js/dist/scripts/{DMxtE2iS.chunk.js.map → DxW67uUT.chunk.js.map} +1 -1
  249. package/dist/Assets/js/dist/scripts/{BOGS-BOS.chunk.js → Eg4zYYCO.chunk.js} +2 -2
  250. package/dist/Assets/js/dist/scripts/{BOGS-BOS.chunk.js.map → Eg4zYYCO.chunk.js.map} +1 -1
  251. package/dist/Assets/js/dist/scripts/{CSuC7le7.chunk.js → GT6nO4Jv.chunk.js} +2 -2
  252. package/dist/Assets/js/dist/scripts/{CSuC7le7.chunk.js.map → GT6nO4Jv.chunk.js.map} +1 -1
  253. package/dist/Assets/js/dist/scripts/{BhKv6dKl2.chunk.js → GpDEun8c2.chunk.js} +2 -2
  254. package/dist/Assets/js/dist/scripts/{BhKv6dKl2.chunk.js.map → GpDEun8c2.chunk.js.map} +1 -1
  255. package/dist/Assets/js/dist/scripts/{DKJC5qg0.chunk.js → OKjYL31I.chunk.js} +2 -2
  256. package/dist/Assets/js/dist/scripts/{DKJC5qg0.chunk.js.map → OKjYL31I.chunk.js.map} +1 -1
  257. package/dist/Assets/js/dist/scripts/{D8rrJ-jY2.chunk.js → OrCUhFjq2.chunk.js} +2 -2
  258. package/dist/Assets/js/dist/scripts/{D8rrJ-jY2.chunk.js.map → OrCUhFjq2.chunk.js.map} +1 -1
  259. package/dist/Assets/js/dist/scripts/{D3exV_Ay2.chunk.js → SVXAAhk02.chunk.js} +2 -2
  260. package/dist/Assets/js/dist/scripts/{D3exV_Ay2.chunk.js.map → SVXAAhk02.chunk.js.map} +1 -1
  261. package/dist/Assets/js/dist/scripts/{CcZKy7SH.chunk.js → SmmnJrec.chunk.js} +2 -2
  262. package/dist/Assets/js/dist/scripts/{CcZKy7SH.chunk.js.map → SmmnJrec.chunk.js.map} +1 -1
  263. package/dist/Assets/js/dist/scripts/{Dy4nscVE2.chunk.js → T3BageSw2.chunk.js} +2 -2
  264. package/dist/Assets/js/dist/scripts/{Dy4nscVE2.chunk.js.map → T3BageSw2.chunk.js.map} +1 -1
  265. package/dist/Assets/js/dist/scripts/{B8PM5Ji3.chunk.js → T6xxjp_W.chunk.js} +2 -2
  266. package/dist/Assets/js/dist/scripts/{B8PM5Ji3.chunk.js.map → T6xxjp_W.chunk.js.map} +1 -1
  267. package/dist/Assets/js/dist/scripts/{Cp6Af16p.chunk.js → Uc2eW092.chunk.js} +2 -2
  268. package/dist/Assets/js/dist/scripts/{Cp6Af16p.chunk.js.map → Uc2eW092.chunk.js.map} +1 -1
  269. package/dist/Assets/js/dist/scripts/{DmKyGgLu.chunk.js → XHoEdG1q.chunk.js} +2 -2
  270. package/dist/Assets/js/dist/scripts/{DmKyGgLu.chunk.js.map → XHoEdG1q.chunk.js.map} +1 -1
  271. package/dist/Assets/js/dist/scripts/{BdVoyBI02.chunk.js → Y14NYZ692.chunk.js} +2 -2
  272. package/dist/Assets/js/dist/scripts/{BdVoyBI02.chunk.js.map → Y14NYZ692.chunk.js.map} +1 -1
  273. package/dist/Assets/js/dist/scripts/{DrszevCi.chunk.js → Y_IcNhI9.chunk.js} +2 -2
  274. package/dist/Assets/js/dist/scripts/{DrszevCi.chunk.js.map → Y_IcNhI9.chunk.js.map} +1 -1
  275. package/dist/Assets/js/dist/scripts/{CMGpVYHd.chunk.js → Yr5eNz05.chunk.js} +2 -2
  276. package/dist/Assets/js/dist/scripts/{CMGpVYHd.chunk.js.map → Yr5eNz05.chunk.js.map} +1 -1
  277. package/dist/Assets/js/dist/scripts/{QnwProbJ2.chunk.js → Yrc9o6bG2.chunk.js} +2 -2
  278. package/dist/Assets/js/dist/scripts/{QnwProbJ2.chunk.js.map → Yrc9o6bG2.chunk.js.map} +1 -1
  279. package/dist/Assets/js/dist/scripts/{app-Dl-tzfIp.js → app-RphP4Ht0.js} +4 -4
  280. package/dist/Assets/js/dist/scripts/{app-Dl-tzfIp.js.map → app-RphP4Ht0.js.map} +1 -1
  281. package/dist/Assets/js/dist/scripts/{B96Bwi2D.chunk.js → cUgHqo-u.chunk.js} +2 -2
  282. package/dist/Assets/js/dist/scripts/{B96Bwi2D.chunk.js.map → cUgHqo-u.chunk.js.map} +1 -1
  283. package/dist/Assets/js/dist/scripts/{oGkpmMft2.chunk.js → dmUfJoJz2.chunk.js} +2 -2
  284. package/dist/Assets/js/dist/scripts/{oGkpmMft2.chunk.js.map → dmUfJoJz2.chunk.js.map} +1 -1
  285. package/dist/Assets/js/dist/scripts/{DjlPflaG.chunk.js → fapHSEex.chunk.js} +2 -2
  286. package/dist/Assets/js/dist/scripts/{DjlPflaG.chunk.js.map → fapHSEex.chunk.js.map} +1 -1
  287. package/dist/Assets/js/dist/scripts/{CaEXONXp2.chunk.js → jf0e_ii92.chunk.js} +2 -2
  288. package/dist/Assets/js/dist/scripts/{CaEXONXp2.chunk.js.map → jf0e_ii92.chunk.js.map} +1 -1
  289. package/dist/Assets/js/dist/scripts/{Co7TevGA.chunk.js → kp4jXqVv.chunk.js} +2 -2
  290. package/dist/Assets/js/dist/scripts/{Co7TevGA.chunk.js.map → kp4jXqVv.chunk.js.map} +1 -1
  291. package/dist/Assets/js/dist/scripts/lAvSm0ti.chunk.js +2 -0
  292. package/dist/Assets/js/dist/scripts/lAvSm0ti.chunk.js.map +1 -0
  293. package/dist/Assets/js/dist/scripts/{Dmf5vYc42.chunk.js → n7lzp_Mc2.chunk.js} +2 -2
  294. package/dist/Assets/js/dist/scripts/{Dmf5vYc42.chunk.js.map → n7lzp_Mc2.chunk.js.map} +1 -1
  295. package/dist/Assets/js/dist/scripts/{CG9yCT4r2.chunk.js → nvtWO4PW2.chunk.js} +2 -2
  296. package/dist/Assets/js/dist/scripts/{CG9yCT4r2.chunk.js.map → nvtWO4PW2.chunk.js.map} +1 -1
  297. package/dist/Assets/js/dist/scripts/{CACu0hGi2.chunk.js → oYKM19q12.chunk.js} +2 -2
  298. package/dist/Assets/js/dist/scripts/{CACu0hGi2.chunk.js.map → oYKM19q12.chunk.js.map} +1 -1
  299. package/dist/Assets/js/dist/scripts/{B5v11U7g.chunk.js → ohTu1tHz.chunk.js} +2 -2
  300. package/dist/Assets/js/dist/scripts/{B5v11U7g.chunk.js.map → ohTu1tHz.chunk.js.map} +1 -1
  301. package/dist/Assets/js/dist/scripts/{BrT-onLe2.chunk.js → uCRnfBEw2.chunk.js} +2 -2
  302. package/dist/Assets/js/dist/scripts/{BrT-onLe2.chunk.js.map → uCRnfBEw2.chunk.js.map} +1 -1
  303. package/dist/Assets/js/dist/scripts/{3XkTogZ22.chunk.js → udVWVmrH2.chunk.js} +2 -2
  304. package/dist/Assets/js/dist/scripts/{3XkTogZ22.chunk.js.map → udVWVmrH2.chunk.js.map} +1 -1
  305. package/dist/Assets/js/dist/scripts/{DW-yUqjB2.chunk.js → v0VARBBE2.chunk.js} +2 -2
  306. package/dist/Assets/js/dist/scripts/{DW-yUqjB2.chunk.js.map → v0VARBBE2.chunk.js.map} +1 -1
  307. package/dist/Assets/js/dist/scripts/{B4lIRWK22.chunk.js → vf9_5VGa2.chunk.js} +2 -2
  308. package/dist/Assets/js/dist/scripts/{B4lIRWK22.chunk.js.map → vf9_5VGa2.chunk.js.map} +1 -1
  309. package/dist/Assets/js/dist/scripts/{pOwOak4Z2.chunk.js → wTEWtWoE2.chunk.js} +2 -2
  310. package/dist/Assets/js/dist/scripts/{pOwOak4Z2.chunk.js.map → wTEWtWoE2.chunk.js.map} +1 -1
  311. package/dist/Assets/js/dist/scripts/{DPYIBfGB.chunk.js → xj8_Pfx7.chunk.js} +2 -2
  312. package/dist/Assets/js/dist/scripts/{DPYIBfGB.chunk.js.map → xj8_Pfx7.chunk.js.map} +1 -1
  313. package/dist/bundles.json +1 -1
  314. package/dist/en.json +1 -1
  315. package/package.json +1 -1
  316. package/dist/Assets/js/dist/scripts/D2iK_uRt.chunk.js +0 -2
  317. package/dist/Assets/js/dist/scripts/DBUreHJA.chunk.js +0 -3
  318. package/dist/Assets/js/dist/scripts/DBUreHJA.chunk.js.map +0 -1
  319. package/dist/Assets/js/dist/scripts/Dh5DbdtP.chunk.js +0 -2
  320. package/dist/Assets/js/dist/scripts/Dh5DbdtP.chunk.js.map +0 -1
  321. package/dist/Assets/js/dist/scripts/DrBVabtm.chunk.js +0 -1
@@ -1,2 +1,2 @@
1
- import{C as e,a as t,i as n,ln as r}from"./rp704-Pm.chunk.js";import{n as i}from"./Crs6pJ2h.chunk.js";import{t as a}from"./Di_u2uix.chunk.js";import{t as o}from"./BvMTtGLi.chunk.js";import{t as s}from"./UCDGupVs.chunk.js";import{r as c}from"./DkstLT1W.chunk.js";import{t as l}from"./Da4lNxpT2.chunk.js";import{t as u}from"./D-JsEiDq2.chunk.js";import{n as d}from"./C6KIBIQi.chunk.js";import{t as f}from"./BMjA_FNA.chunk.js";import{s as p,u as m}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as h}from"./C1PTqhPY.chunk.js";import{n as g,t as _}from"./D_O97jwq.chunk.js";import{t as v}from"./DjzD1n9W.chunk.js";import{t as y}from"./Bwpvc7Th2.chunk.js";import{t as ee}from"./D10cUDG82.chunk.js";import{t as b}from"./AoBZYPPG.chunk.js";import{t as x}from"./D3Y3JuWB.chunk.js";import{t as S}from"./DkLlaBp-.chunk.js";import{t as C}from"./D0JviwKV2.chunk.js";import{t as te}from"./CGACfSBR.chunk.js";import{t as w}from"./DZt0Izys.chunk.js";import{r as T,t as E}from"./C1dPsO8J.chunk.js";import{t as D}from"./mIR_gnUV.chunk.js";import{t as ne}from"./_4opSfMu2.chunk.js";import{n as re,t as ie}from"./CPHjafnN2.chunk.js";import{t as O}from"./gzUId2LV2.chunk.js";import{t as k}from"./50lsQ6ql2.chunk.js";import{r as A}from"./BGdHfkHr.chunk.js";import{t as ae}from"./CCv4lFNr.chunk.js";import{n as oe}from"./D2iK_uRt.chunk.js";var j=r(t()),M=n();function N(e){switch(_.getUserType(e)){case h.Learner:return`Student`;case h.Staff:return`Staff`;case h.Unknown:return`Unknown`;default:return`Unknown`}}var P=d(),F={title:()=>P.accessor(`title`,{id:`title`,header:``,cell:e=>(0,M.jsx)(`div`,{className:`font-label`,children:e.getValue()})}),value:()=>P.accessor(`value`,{id:`value`,header:``,cell:e=>(0,M.jsx)(`div`,{children:e.getValue()})}),action:()=>P.accessor(`action`,{id:`action`,header:``,cell:e=>e.getValue()?(0,M.jsx)(`div`,{children:e.getValue()}):null})};function se({user:e,onUnverifyEmail:t,onSendPasswordResetEmail:n,onVerifyEmail:r,customerless:a}){let o=e.metadata?.isEmailVerified,s=e.status===g.Active,c=[{title:`Email`,value:(0,M.jsxs)(`div`,{className:`d-flex gap-2 align-items-center`,children:[o&&(0,M.jsx)(i,{svg:b}),e.email||`-`]}),action:e.email&&s&&!a?(0,M.jsx)(`div`,{className:`d-flex justify-content-end`,children:(0,M.jsx)(l,{className:`p-0 ms-2 text-info`,title:o?`Unverify email`:`Verify email`,variant:`link`,onClick:o?t:r,children:o?`Unverify email`:`Verify email`})}):null},{title:`Last Name`,value:e.surname},{title:`First Name`,value:e.name},{title:`User Type`,value:(0,M.jsx)(`div`,{className:A(N(e)),children:N(e)})},{title:`Display Name`,value:e.metadata.displayName||`-`},{title:`Username`,value:e.username,action:s&&o&&n?(0,M.jsx)(`div`,{className:`d-flex justify-content-end`,children:(0,M.jsx)(l,{className:`p-0 ms-2 text-info`,title:`Send password reset email`,variant:`link`,onClick:n,children:`Send password reset email`})}):null}],u={...O,header:`d-none`,row:``};return(0,M.jsx)(f,{data:c,columns:Object.values(F).map(e=>e()),theme:u})}function I(t){j.useEffect(()=>{t.id||e.trigger({application:o.CRM_STUDIO,action:a.CrmStudio.USERS})},[t.id]);let[n,r]=j.useState(!1),[,i]=j.useState(!1),[,d]=S(te.BULK_REMOVE_USERS),[f,b]=j.useState(!1),[O,A]=j.useState(!1),N=y(),{hasPermissions:P,isLoading:F}=v();(0,j.useEffect)(()=>{F||b(P(c.UsersSsoUpdate)||!1)},[F]);let I=x.user(t.id),L=p(E.getUserWithCustomers(t.id)),R=p(I),z=L.hasCompleted&&(L.data?.userProfiles?.data.length>0||L.data?.userProfile)?L.data?.userProfile?.customer?.id&&_.getUserStatusFromValue(L.data?.userProfile?.status)===g.Active?L.data?.userProfile?.customer?.id:L.data?.userProfiles?.data?.find(e=>_.getUserStatusFromValue(e.status)===g.Active)?.customer?.id:null,B=E.getUser(z,t.id),V=p(z?B:null),H={...L.data,...R.data,...V.data},U={...H,status:_.getUserStatusFromValue(H.status)},W=p(s.currentUser()),G=p(z?E.yearGroups(z):null),K=p(z?E.passwordPolicy(z):null),ce=p(z&&E.getAuthenticationMethodsByUserIds(z,[t.id],B.normalizeOptions?.namespace)),q=U.userType,J=m(),Y=z?L.hasCompleted&&R.hasCompleted&&V.hasCompleted&&G.hasCompleted&&K.hasCompleted&&ce.hasCompleted:R.hasCompleted;function le(e){let t=T.formatCreateOrValidateUserRequest([e],U.userType,z);return J(E.bulkValidate(t,!1,z))}async function ue(e,t){try{i(!0);let n=await le(e);if(!T.handleAsyncErrors(n,e,U,t)){i(!1);return}let a=T.formatEditUserRequest(e);await J(E.updateUser(z,a,W.data.id)),N.success(`User updated successfully`),r(!1),t&&t()}catch{N.error(`Failed to update user. Please try again.`),t&&t()}finally{i(!1)}}async function X(e){try{await J(E.resendActivationEmail(z,e.id)),N.success(`Activation email sent successfully.`)}catch{N.error(`Failed to send activation email.`)}}async function Z(){try{i(!0),await J(E.sendPasswordResetEmail(z,U.id)),N.success(`Password reset email sent successfully.`)}catch{N.error(`Failed to send password reset email.`)}}async function Q(e){try{i(!0),await J(E.resendVerificationEmail(z,e.id)),N.success(`Email verification email sent successfully.`)}catch{N.error(`Failed to send email verification email.`)}}async function de(){e.trigger({application:o.CRM_STUDIO,action:a.CrmStudio.DELETE_USER_EMAIL,args:[z,U.id],params:{userType:q}})}function fe(){return U.userProfiles?.data?(U.userProfiles?.data||[]).some(e=>_.getUserStatusFromValue(e.status)===g.Active):!1}let $=U.userProfiles?.data?.length===0;return j.useEffect(()=>{Y&&A(fe())},[Y]),(0,M.jsx)(ie,{view:re.Users,children:(0,M.jsxs)(ae,{title:`Overview`,currentTabId:`overview`,id:t.id,loading:!Y,children:[!z&&(0,M.jsx)(`div`,{className:`mb-3`,children:(0,M.jsx)(k,{variant:`warning`,className:`w-100`,children:`This user is not associated with any customers, and therefore cannot be edited. In order to edit this user, please add to a customer in the customer schools tab.`})}),U.id&&_.hasSso(U)&&(0,M.jsx)(`div`,{className:`mb-3`,children:(0,M.jsx)(k,{variant:`warning`,className:`w-100`,children:`Some of this user’s account details are managed by their SSO provider.`})}),z&&!O&&(0,M.jsx)(`div`,{className:`mb-3`,children:(0,M.jsx)(k,{variant:`warning`,className:`w-100`,children:`This user has no active customers, and therefore cannot be edited. In order to edit this user, please activate a customer in the customer schools tab.`})}),Y&&U&&(0,M.jsxs)(`div`,{children:[(0,M.jsx)(ne,{heading:`User details`,svg:ee,buttonClassname:`null`,onClick:z?()=>r(!0):void 0,disableCollapse:!0,children:(0,M.jsx)(se,{user:U,onUnverifyEmail:()=>de(),onSendPasswordResetEmail:()=>Z(),onVerifyEmail:()=>Q(U),customerless:!z})}),(0,M.jsxs)(`div`,{className:`d-flex justify-content-end mt-3 gap-2`,children:[!!P(c.UsersSsoUpdate)&&O&&(0,M.jsx)(C.Toggle,{on:f,onClick:()=>b(e=>!e),label:`Allow ClickView Staff to edit SSO fields`,disabled:!_.hasSso(U),tooltip:!_.hasSso(U)&&`This user doesn't sign in with SSO`}),U.email&&U.status===g.Inactive&&!U.metadata.isEmailVerified&&(0,M.jsx)(l,{variant:`outline-dark`,onClick:()=>X(U),children:`Resend activation email`}),Y&&(()=>{let e=U.status===g.Active&&($||!O),t=!$&&O,n=t?`This user has active customers, therefore this action is not allowed.`:void 0;return e?(0,M.jsx)(w,{className:`btn btn-danger`,appLink:{application:o.CRM_STUDIO,action:a.CrmStudio.TOGGLE_USER_STATUS,args:[null,U.id]},children:`Deactivate account`}):(0,M.jsx)(w,{className:`btn btn-danger${t?` pointer-events-none opacity-50`:``}`,appLink:{application:o.CRM_STUDIO,action:a.CrmStudio.BULK_REMOVE_USERS,args:[z],params:{userType:q}},onClick:()=>d({allUsers:!1,users:[U],totalUsers:1,redirectToSearch:!1}),disabled:t,tooltip:n,children:`Delete account`})})()]})]}),n&&Y&&(0,M.jsx)(u,{title:`Edit User details`,closePopup:()=>r(!1),children:(0,M.jsx)(D,{user:U,userType:U.userType,yearGroups:U.userType===h.Learner?Array.isArray(G)?G:[]:null,initialValues:oe(U,z),initialErrors:T.getInitialErrorsForInvalidYearGroups(U.masterYearGroup),onSubmit:ue,onClickResendActivationEmail:X,onClickSendResetEmail:Z,onClickSendVerificationEmail:Q,onClickCancel:()=>r(!1),currentUser:W.data,emailRequired:U.userType===h.Staff,showActions:!1,passwordPolicy:K.data,showDisplayNameField:U.userType===h.Staff,hideAdminToggle:!0,hideSsoToggle:!0,hideYearLevel:!0,canEditSsoFields:f})})]})})}export{I as UserOverviewView};
2
- //# sourceMappingURL=C-flCrUr.chunk.js.map
1
+ import{C as e,a as t,i as n,ln as r}from"./rp704-Pm.chunk.js";import{n as i}from"./Crs6pJ2h.chunk.js";import{t as a}from"./Di_u2uix.chunk.js";import{t as o}from"./BvMTtGLi.chunk.js";import{t as s}from"./UCDGupVs.chunk.js";import{r as c}from"./DkstLT1W.chunk.js";import{t as l}from"./Da4lNxpT2.chunk.js";import{t as u}from"./D-JsEiDq2.chunk.js";import{n as d}from"./C6KIBIQi.chunk.js";import{t as f}from"./BMjA_FNA.chunk.js";import{s as p,u as m}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as h}from"./C1PTqhPY.chunk.js";import{n as g,t as _}from"./D_O97jwq.chunk.js";import{t as v}from"./DjzD1n9W.chunk.js";import{t as y}from"./Bwpvc7Th2.chunk.js";import{t as ee}from"./D10cUDG82.chunk.js";import{t as b}from"./AoBZYPPG.chunk.js";import{t as x}from"./D3Y3JuWB.chunk.js";import{t as S}from"./DkLlaBp-.chunk.js";import{t as C}from"./D0JviwKV2.chunk.js";import{t as te}from"./CGACfSBR.chunk.js";import{t as w}from"./DZt0Izys.chunk.js";import{r as T,t as E}from"./C1dPsO8J.chunk.js";import{t as D}from"./mIR_gnUV.chunk.js";import{t as ne}from"./_4opSfMu2.chunk.js";import{n as re,t as ie}from"./CPHjafnN2.chunk.js";import{t as O}from"./gzUId2LV2.chunk.js";import{t as k}from"./50lsQ6ql2.chunk.js";import{r as A}from"./BGdHfkHr.chunk.js";import{t as ae}from"./CCv4lFNr.chunk.js";import{n as oe}from"./Cf5cjLzK.chunk.js";var j=r(t()),M=n();function N(e){switch(_.getUserType(e)){case h.Learner:return`Student`;case h.Staff:return`Staff`;case h.Unknown:return`Unknown`;default:return`Unknown`}}var P=d(),F={title:()=>P.accessor(`title`,{id:`title`,header:``,cell:e=>(0,M.jsx)(`div`,{className:`font-label`,children:e.getValue()})}),value:()=>P.accessor(`value`,{id:`value`,header:``,cell:e=>(0,M.jsx)(`div`,{children:e.getValue()})}),action:()=>P.accessor(`action`,{id:`action`,header:``,cell:e=>e.getValue()?(0,M.jsx)(`div`,{children:e.getValue()}):null})};function se({user:e,onUnverifyEmail:t,onSendPasswordResetEmail:n,onVerifyEmail:r,customerless:a}){let o=e.metadata?.isEmailVerified,s=e.status===g.Active,c=[{title:`Email`,value:(0,M.jsxs)(`div`,{className:`d-flex gap-2 align-items-center`,children:[o&&(0,M.jsx)(i,{svg:b}),e.email||`-`]}),action:e.email&&s&&!a?(0,M.jsx)(`div`,{className:`d-flex justify-content-end`,children:(0,M.jsx)(l,{className:`p-0 ms-2 text-info`,title:o?`Unverify email`:`Verify email`,variant:`link`,onClick:o?t:r,children:o?`Unverify email`:`Verify email`})}):null},{title:`Last Name`,value:e.surname},{title:`First Name`,value:e.name},{title:`User Type`,value:(0,M.jsx)(`div`,{className:A(N(e)),children:N(e)})},{title:`Display Name`,value:e.metadata.displayName||`-`},{title:`Username`,value:e.username,action:s&&o&&n?(0,M.jsx)(`div`,{className:`d-flex justify-content-end`,children:(0,M.jsx)(l,{className:`p-0 ms-2 text-info`,title:`Send password reset email`,variant:`link`,onClick:n,children:`Send password reset email`})}):null}],u={...O,header:`d-none`,row:``};return(0,M.jsx)(f,{data:c,columns:Object.values(F).map(e=>e()),theme:u})}function I(t){j.useEffect(()=>{t.id||e.trigger({application:o.CRM_STUDIO,action:a.CrmStudio.USERS})},[t.id]);let[n,r]=j.useState(!1),[,i]=j.useState(!1),[,d]=S(te.BULK_REMOVE_USERS),[f,b]=j.useState(!1),[O,A]=j.useState(!1),N=y(),{hasPermissions:P,isLoading:F}=v();(0,j.useEffect)(()=>{F||b(P(c.UsersSsoUpdate)||!1)},[F]);let I=x.user(t.id),L=p(E.getUserWithCustomers(t.id)),R=p(I),z=L.hasCompleted&&(L.data?.userProfiles?.data.length>0||L.data?.userProfile)?L.data?.userProfile?.customer?.id&&_.getUserStatusFromValue(L.data?.userProfile?.status)===g.Active?L.data?.userProfile?.customer?.id:L.data?.userProfiles?.data?.find(e=>_.getUserStatusFromValue(e.status)===g.Active)?.customer?.id:null,B=E.getUser(z,t.id),V=p(z?B:null),H={...L.data,...R.data,...V.data},U={...H,status:_.getUserStatusFromValue(H.status)},W=p(s.currentUser()),G=p(z?E.yearGroups(z):null),K=p(z?E.passwordPolicy(z):null),ce=p(z&&E.getAuthenticationMethodsByUserIds(z,[t.id],B.normalizeOptions?.namespace)),q=U.userType,J=m(),Y=z?L.hasCompleted&&R.hasCompleted&&V.hasCompleted&&G.hasCompleted&&K.hasCompleted&&ce.hasCompleted:R.hasCompleted;function le(e){let t=T.formatCreateOrValidateUserRequest([e],U.userType,z);return J(E.bulkValidate(t,!1,z))}async function ue(e,t){try{i(!0);let n=await le(e);if(!T.handleAsyncErrors(n,e,U,t)){i(!1);return}let a=T.formatEditUserRequest(e);await J(E.updateUser(z,a,W.data.id)),N.success(`User updated successfully`),r(!1),t&&t()}catch{N.error(`Failed to update user. Please try again.`),t&&t()}finally{i(!1)}}async function X(e){try{await J(E.resendActivationEmail(z,e.id)),N.success(`Activation email sent successfully.`)}catch{N.error(`Failed to send activation email.`)}}async function Z(){try{i(!0),await J(E.sendPasswordResetEmail(z,U.id)),N.success(`Password reset email sent successfully.`)}catch{N.error(`Failed to send password reset email.`)}}async function Q(e){try{i(!0),await J(E.resendVerificationEmail(z,e.id)),N.success(`Email verification email sent successfully.`)}catch{N.error(`Failed to send email verification email.`)}}async function de(){e.trigger({application:o.CRM_STUDIO,action:a.CrmStudio.DELETE_USER_EMAIL,args:[z,U.id],params:{userType:q}})}function fe(){return U.userProfiles?.data?(U.userProfiles?.data||[]).some(e=>_.getUserStatusFromValue(e.status)===g.Active):!1}let $=U.userProfiles?.data?.length===0;return j.useEffect(()=>{Y&&A(fe())},[Y]),(0,M.jsx)(ie,{view:re.Users,children:(0,M.jsxs)(ae,{title:`Overview`,currentTabId:`overview`,id:t.id,loading:!Y,children:[!z&&(0,M.jsx)(`div`,{className:`mb-3`,children:(0,M.jsx)(k,{variant:`warning`,className:`w-100`,children:`This user is not associated with any customers, and therefore cannot be edited. In order to edit this user, please add to a customer in the customer schools tab.`})}),U.id&&_.hasSso(U)&&(0,M.jsx)(`div`,{className:`mb-3`,children:(0,M.jsx)(k,{variant:`warning`,className:`w-100`,children:`Some of this user’s account details are managed by their SSO provider.`})}),z&&!O&&(0,M.jsx)(`div`,{className:`mb-3`,children:(0,M.jsx)(k,{variant:`warning`,className:`w-100`,children:`This user has no active customers, and therefore cannot be edited. In order to edit this user, please activate a customer in the customer schools tab.`})}),Y&&U&&(0,M.jsxs)(`div`,{children:[(0,M.jsx)(ne,{heading:`User details`,svg:ee,buttonClassname:`null`,onClick:z?()=>r(!0):void 0,disableCollapse:!0,children:(0,M.jsx)(se,{user:U,onUnverifyEmail:()=>de(),onSendPasswordResetEmail:()=>Z(),onVerifyEmail:()=>Q(U),customerless:!z})}),(0,M.jsxs)(`div`,{className:`d-flex justify-content-end mt-3 gap-2`,children:[!!P(c.UsersSsoUpdate)&&O&&(0,M.jsx)(C.Toggle,{on:f,onClick:()=>b(e=>!e),label:`Allow ClickView Staff to edit SSO fields`,disabled:!_.hasSso(U),tooltip:!_.hasSso(U)&&`This user doesn't sign in with SSO`}),U.email&&U.status===g.Inactive&&!U.metadata.isEmailVerified&&(0,M.jsx)(l,{variant:`outline-dark`,onClick:()=>X(U),children:`Resend activation email`}),Y&&(()=>{let e=U.status===g.Active&&($||!O),t=!$&&O,n=t?`This user has active customers, therefore this action is not allowed.`:void 0;return e?(0,M.jsx)(w,{className:`btn btn-danger`,appLink:{application:o.CRM_STUDIO,action:a.CrmStudio.TOGGLE_USER_STATUS,args:[null,U.id]},children:`Deactivate account`}):(0,M.jsx)(w,{className:`btn btn-danger${t?` pointer-events-none opacity-50`:``}`,appLink:{application:o.CRM_STUDIO,action:a.CrmStudio.BULK_REMOVE_USERS,args:[z],params:{userType:q}},onClick:()=>d({allUsers:!1,users:[U],totalUsers:1,redirectToSearch:!1}),disabled:t,tooltip:n,children:`Delete account`})})()]})]}),n&&Y&&(0,M.jsx)(u,{title:`Edit User details`,closePopup:()=>r(!1),children:(0,M.jsx)(D,{user:U,userType:U.userType,yearGroups:U.userType===h.Learner?Array.isArray(G)?G:[]:null,initialValues:oe(U,z),initialErrors:T.getInitialErrorsForInvalidYearGroups(U.masterYearGroup),onSubmit:ue,onClickResendActivationEmail:X,onClickSendResetEmail:Z,onClickSendVerificationEmail:Q,onClickCancel:()=>r(!1),currentUser:W.data,emailRequired:U.userType===h.Staff,showActions:!1,passwordPolicy:K.data,showDisplayNameField:U.userType===h.Staff,hideAdminToggle:!0,hideSsoToggle:!0,hideYearLevel:!0,canEditSsoFields:f})})]})})}export{I as UserOverviewView};
2
+ //# sourceMappingURL=DENdEA1F.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"C-flCrUr.chunk.js","names":[],"sources":["../../../../../src/apps/crm-studio/components/tables/UserOverviewTable.tsx","../../../../../src/apps/crm-studio/views/users/UserOverviewView.tsx"],"sourcesContent":["import React from 'react';\nimport { Button } from 'react-bootstrap';\nimport { createColumnHelper } from '@tanstack/react-table';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { TableV2 } from 'libs/shared/components/table-v2/TableV2';\nimport { ObjectStatus } from 'libs/shared/enums/ObjectStatus';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { CheckCircleSvg } from 'libs/shared/images/svg/status/CheckCircleSvg';\nimport { User } from 'libs/shared/interfaces/models/User';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { getUserTypeClassname } from 'apps/crm-studio/components/tables/UsersTable';\n\nimport { CrmStudioTableTheme } from './CrmStudioTableTheme';\n\nexport function getTypeText(user: User): string {\n switch (UserHelper.getUserType(user)) {\n case UserGroup.Learner:\n return 'Student';\n case UserGroup.Staff:\n return 'Staff';\n case UserGroup.Unknown:\n return 'Unknown';\n default:\n return 'Unknown';\n }\n}\n\nexport interface UserOverviewDataRow {\n title: string;\n value: React.ReactNode;\n action?: React.ReactNode;\n}\n\nconst columnHelper = createColumnHelper<UserOverviewDataRow>();\nconst UserOverviewColumns = {\n title: () =>\n columnHelper.accessor('title', {\n id: 'title',\n header: '',\n cell: props => <div className='font-label'>{props.getValue()}</div>\n }),\n value: () =>\n columnHelper.accessor('value', {\n id: 'value',\n header: '',\n cell: props => <div>{props.getValue()}</div>\n }),\n action: () =>\n columnHelper.accessor('action', {\n id: 'action',\n header: '',\n cell: props => props.getValue() ? <div>{props.getValue()}</div> : null\n })\n};\n\nexport function UserOverviewTable({ user, onUnverifyEmail, onSendPasswordResetEmail, onVerifyEmail, customerless }: {\n user: User,\n onUnverifyEmail?: () => void,\n onSendPasswordResetEmail?: () => void,\n onVerifyEmail?: () => void,\n customerless?: boolean\n}) {\n const emailVerified = user.metadata?.isEmailVerified;\n const isActive = user.status === ObjectStatus.Active;\n const data: UserOverviewDataRow[] = [\n {\n title: 'Email',\n value: (\n <div className='d-flex gap-2 align-items-center'>\n {emailVerified && (\n <SvgContainer\n svg={CheckCircleSvg}\n />\n )}\n {user.email || '-'}\n </div>\n ),\n action: (\n user.email && isActive && !customerless ? (\n <div className='d-flex justify-content-end'>\n <Button\n className='p-0 ms-2 text-info'\n title={emailVerified ? 'Unverify email' : 'Verify email'}\n variant='link'\n onClick={emailVerified ? onUnverifyEmail : onVerifyEmail}\n >\n {emailVerified ? 'Unverify email' : 'Verify email'}\n </Button>\n </div>\n ) : null\n )\n },\n { title: 'Last Name', value: user.surname },\n { title: 'First Name', value: user.name },\n { title: 'User Type', value: (\n <div className={getUserTypeClassname(getTypeText(user))}>\n {getTypeText(user) }\n </div>\n ) },\n { title: 'Display Name', value: user.metadata.displayName || '-' },\n {\n title: 'Username',\n value: user.username,\n action: (isActive && emailVerified && onSendPasswordResetEmail) ? (\n <div className='d-flex justify-content-end'>\n <Button\n className='p-0 ms-2 text-info'\n title='Send password reset email'\n variant='link'\n onClick={onSendPasswordResetEmail}\n >\n Send password reset email\n </Button>\n </div>\n ) : null\n }\n ];\n\n const theme = {\n ...CrmStudioTableTheme,\n header: 'd-none',\n row: ''\n };\n \n return (\n <TableV2\n data={data}\n columns={Object.values(UserOverviewColumns).map(column => column())}\n theme={theme}\n />\n );\n}\n","import React, { useEffect } from 'react';\nimport { Button } from 'react-bootstrap';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Core } from 'libs/common/backbone/index';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { EditUserDetails } from 'libs/shared/apps/user-manager/components/edit-user-details/EditUserDetails';\nimport { EditUserRequest } from 'libs/shared/apps/user-manager/interfaces';\nimport { SecuritySettingsResponse } from 'libs/shared/apps/user-manager/interfaces/SecuritySettingsResponse';\nimport { BulkRemoveUsersViewModel } from 'libs/shared/apps/user-manager/interfaces/viewmodels/BulkRemoveUsersViewModel';\nimport { UserManagerHelper } from 'libs/shared/apps/user-manager/utils/UserManagerHelper';\nimport { ActionButton } from 'libs/shared/components/actions/ActionButton';\nimport { AlertV2 } from 'libs/shared/components/alert-v2/AlertV2';\nimport { DropdownContainer } from 'libs/shared/components/dropdown-container/DropdownContainer';\nimport { FormSubmissionOptions } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { ObjectStatus } from 'libs/shared/enums/ObjectStatus';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { EditSvg } from 'libs/shared/images/svg/actions/EditSvg';\nimport { CurrentUser, User } from 'libs/shared/interfaces/models/User';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { Actions } from 'shared/constants/CuratorActions';\nimport { ViewModelKeys } from 'shared/constants/CuratorViewModels';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { CuratorPermissionName } from 'shared/enums/CuratorPermissionName';\nimport { useCuratorPermissions } from 'shared/hooks/UseCuratorPermissions';\n\nimport { UserOverviewTable } from 'apps/crm-studio/components/tables/UserOverviewTable';\nimport { CustomerRequests } from 'apps/crm-studio/flight-requests/CustomerRequests';\nimport { CrmStudioLayoutView, CrmStudioLayoutViewPage } from 'apps/crm-studio/views/layout/CrmStudioLayout';\nimport { CrmStudioUserLayout } from 'apps/crm-studio/views/layout/CrmStudioUserLayout';\nimport { getUserInitialValues } from 'apps/crm-studio/views/users/edit-user/EditUserUtils';\nimport { CuratorUserRequests } from 'apps/users/flight-requests/CuratorUserRequests';\n\ninterface UserOverviewViewProps {\n id: string;\n}\n\nexport function UserOverviewView(props: UserOverviewViewProps) {\n// handle after delete the current user\n React.useEffect(() => {\n if (!props.id) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CRM_STUDIO,\n action: Actions.CrmStudio.USERS\n });\n }\n }, [props.id]);\n\n const [ showEditModal, setShowEditModal ] = React.useState(false);\n const [ , setShowSpinner ] = React.useState(false);\n const [ , setViewModel ] = useViewModel<BulkRemoveUsersViewModel>(ViewModelKeys.BULK_REMOVE_USERS);\n const [ editSsoFields, setEditSsoFields ] = React.useState(false);\n const [ isAnyCustomerActive, setIsAnyCustomerActive ] = React.useState(false);\n\n const alerts = useAlerts();\n const { hasPermissions, isLoading } = useCuratorPermissions();\n\n useEffect(() => {\n if (!isLoading) {\n setEditSsoFields(hasPermissions(CuratorPermissionName.UsersSsoUpdate) || false);\n }\n }, [isLoading]);\n\n const userCustomerlessRequest = CuratorUserRequests.user(props.id);\n const userWithCustomersRequest = CustomerRequests.getUserWithCustomers(props.id);\n\n const userWithCustomers = Flight.useBasicFetch<User>(userWithCustomersRequest);\n const userCustomerless = Flight.useBasicFetch<User>(userCustomerlessRequest);\n\n const userHasCustomer = userWithCustomers.hasCompleted && (\n userWithCustomers.data?.userProfiles?.data.length > 0 || userWithCustomers.data?.userProfile\n );\n\n const customerId = userHasCustomer ?\n (\n userWithCustomers.data?.userProfile?.customer?.id &&\n UserHelper.getUserStatusFromValue(userWithCustomers.data?.userProfile?.status) === ObjectStatus.Active ?\n userWithCustomers.data?.userProfile?.customer?.id :\n userWithCustomers.data?.userProfiles?.data?.find(\n profile => UserHelper.getUserStatusFromValue(profile.status) === ObjectStatus.Active\n )?.customer?.id\n ) :\n null;\n\n const userExtraRequest = CustomerRequests.getUser(customerId, props.id);\n const userExtra = Flight.useBasicFetch<User>(customerId ? userExtraRequest : null);\n\n const _mergedUser = { ...userWithCustomers.data, ...userCustomerless.data, ...userExtra.data };\n const user = { ..._mergedUser, status: UserHelper.getUserStatusFromValue(_mergedUser.status) };\n\n const currentUser = Flight.useBasicFetch(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch(\n customerId ? CustomerRequests.yearGroups(customerId) : null\n );\n const passwordPolicy = Flight.useBasicFetch<SecuritySettingsResponse>(\n customerId ? CustomerRequests.passwordPolicy(customerId) : null\n );\n const authMethods = Flight.useBasicFetch(\n customerId && CustomerRequests.getAuthenticationMethodsByUserIds(\n customerId,\n [props.id],\n userExtraRequest.normalizeOptions?.namespace\n )\n );\n\n const userType = user.userType;\n const fetchAsync = Flight.useGetFetchAsync();\n\n const isLoaded = customerId ? (\n userWithCustomers.hasCompleted &&\n userCustomerless.hasCompleted &&\n userExtra.hasCompleted &&\n yearGroups.hasCompleted &&\n passwordPolicy.hasCompleted &&\n authMethods.hasCompleted\n ) : (\n userCustomerless.hasCompleted\n );\n\n function validateUser(_user: EditUserRequest): Promise<any> {\n const data = UserManagerHelper.formatCreateOrValidateUserRequest([_user], user.userType, customerId);\n return fetchAsync(CustomerRequests.bulkValidate(data, false, customerId));\n }\n\n async function saveUser(_user: EditUserRequest, onDone: (options?: FormSubmissionOptions) => void): Promise<void> {\n try {\n setShowSpinner(true);\n const errors = await validateUser(_user);\n const isValid = UserManagerHelper.handleAsyncErrors(errors, _user, user, onDone);\n if (!isValid) {\n setShowSpinner(false);\n return;\n }\n const data = UserManagerHelper.formatEditUserRequest(_user);\n await fetchAsync(CustomerRequests.updateUser(\n customerId,\n data,\n (currentUser.data as CurrentUser).id\n ));\n alerts.success('User updated successfully');\n setShowEditModal(false);\n if (onDone) onDone();\n } catch {\n alerts.error('Failed to update user. Please try again.');\n if (onDone) onDone();\n } finally {\n setShowSpinner(false);\n }\n }\n\n async function resendActivationEmail(_user: User) {\n try {\n await fetchAsync(CustomerRequests.resendActivationEmail(customerId, _user.id));\n alerts.success('Activation email sent successfully.');\n } catch {\n alerts.error('Failed to send activation email.');\n }\n }\n\n async function confirmSendPasswordResetEmail() {\n try {\n setShowSpinner(true);\n await fetchAsync(CustomerRequests.sendPasswordResetEmail(customerId, user.id));\n alerts.success('Password reset email sent successfully.');\n } catch {\n alerts.error('Failed to send password reset email.');\n }\n }\n\n async function resendVerificationEmail(_user: User) {\n try {\n setShowSpinner(true);\n await fetchAsync(CustomerRequests.resendVerificationEmail(customerId, _user.id));\n alerts.success('Email verification email sent successfully.');\n } catch {\n alerts.error('Failed to send email verification email.');\n }\n }\n\n async function deleteEmail(): Promise<void> {\n AppLinkHelper.trigger({\n application: AppChannels.CRM_STUDIO,\n action: Actions.CrmStudio.DELETE_USER_EMAIL,\n args: [ customerId, user.id ],\n params: { userType }\n });\n }\n\n function checkIfAnyCustomerActive(): boolean {\n if (!user.userProfiles?.data) return false;\n const profiles = user.userProfiles?.data || [];\n return profiles.some(profile => UserHelper.getUserStatusFromValue(profile.status) === ObjectStatus.Active);\n }\n const isCustomerlessUser = user.userProfiles?.data?.length === 0;\n\n React.useEffect(() => {\n if (isLoaded) {\n setIsAnyCustomerActive(checkIfAnyCustomerActive());\n }\n }, [isLoaded]);\n\n return (\n <CrmStudioLayoutView view={CrmStudioLayoutViewPage.Users}>\n <CrmStudioUserLayout\n title='Overview'\n currentTabId='overview'\n id={props.id}\n loading={!isLoaded}\n >\n {!customerId && (\n <div className='mb-3'>\n <AlertV2 variant='warning' className='w-100'>\n This user is not associated with any customers, and therefore cannot be\n edited. In order to edit this user, please add to a customer in the customer schools tab.\n </AlertV2>\n </div>\n )}\n {(user.id && UserHelper.hasSso(user)) && (\n <div className='mb-3'>\n <AlertV2 variant='warning' className='w-100'>\n Some of this user’s account details are managed by their SSO provider.\n </AlertV2>\n </div>\n )}\n {customerId && !isAnyCustomerActive && (\n <div className='mb-3'>\n <AlertV2 variant='warning' className='w-100'>\n This user has no active customers, and therefore cannot be\n edited. In order to edit this user, please activate a customer in the customer schools tab.\n </AlertV2>\n </div>\n )}\n {isLoaded && user && (\n <div>\n <DropdownContainer\n heading='User details'\n svg={EditSvg}\n buttonClassname='null'\n onClick={(customerId) ?\n () => setShowEditModal(true) :\n undefined\n }\n disableCollapse\n >\n <UserOverviewTable\n user={user}\n onUnverifyEmail={() => deleteEmail()}\n onSendPasswordResetEmail={() => confirmSendPasswordResetEmail()}\n onVerifyEmail={() => resendVerificationEmail(user)}\n customerless={!customerId}\n />\n </DropdownContainer>\n <div className='d-flex justify-content-end mt-3 gap-2'>\n {!!hasPermissions(CuratorPermissionName.UsersSsoUpdate) && isAnyCustomerActive && (\n <PopupButtons.Toggle\n on={editSsoFields}\n onClick={() => setEditSsoFields(v => !v)}\n label='Allow ClickView Staff to edit SSO fields'\n disabled={!UserHelper.hasSso(user)}\n tooltip={!UserHelper.hasSso(user) && 'This user doesn\\'t sign in with SSO'}\n />\n )}\n {user.email &&\n user.status === ObjectStatus.Inactive &&\n !user.metadata.isEmailVerified && (\n <Button\n variant='outline-dark'\n onClick={() => resendActivationEmail(user)}\n >\n Resend activation email\n </Button>\n )}\n {isLoaded && (() => {\n const showDeactivate = user.status === ObjectStatus.Active &&\n (isCustomerlessUser || !isAnyCustomerActive);\n const deleteDisabled = !isCustomerlessUser && isAnyCustomerActive;\n const deleteDisabledTooltip = deleteDisabled ?\n 'This user has active customers, therefore this action is not allowed.' :\n undefined;\n\n if (showDeactivate) {\n return (\n <ActionButton\n className='btn btn-danger'\n appLink={{\n application: AppChannels.CRM_STUDIO,\n action: Actions.CrmStudio.TOGGLE_USER_STATUS,\n args: [ null, user.id ]\n }}\n >\n Deactivate account\n </ActionButton>\n );\n }\n\n return (\n <ActionButton\n className={`btn btn-danger${deleteDisabled ? ' pointer-events-none opacity-50' : ''}`}\n appLink={{\n application: AppChannels.CRM_STUDIO,\n action: Actions.CrmStudio.BULK_REMOVE_USERS,\n args: [customerId],\n params: { userType }\n }}\n onClick={() => setViewModel({\n allUsers: false, users: [user], totalUsers: 1, redirectToSearch: false\n })}\n disabled={deleteDisabled}\n tooltip={deleteDisabledTooltip}\n >\n Delete account\n </ActionButton>\n );\n })()}\n </div>\n </div>\n )}\n {showEditModal && isLoaded && (\n <Popup title='Edit User details' closePopup={() => setShowEditModal(false)}>\n <EditUserDetails\n user={user}\n userType={user.userType}\n yearGroups={\n user.userType === UserGroup.Learner ?\n (Array.isArray(yearGroups) ? yearGroups : []) :\n null\n }\n initialValues={getUserInitialValues(user, customerId)}\n initialErrors={UserManagerHelper.getInitialErrorsForInvalidYearGroups(user.masterYearGroup)}\n onSubmit={saveUser}\n onClickResendActivationEmail={resendActivationEmail}\n onClickSendResetEmail={confirmSendPasswordResetEmail}\n onClickSendVerificationEmail={resendVerificationEmail}\n onClickCancel={() => setShowEditModal(false)}\n currentUser={currentUser.data as CurrentUser}\n emailRequired={user.userType === UserGroup.Staff}\n showActions={false}\n passwordPolicy={passwordPolicy.data}\n showDisplayNameField={user.userType === UserGroup.Staff}\n hideAdminToggle={true}\n hideSsoToggle={true}\n hideYearLevel={true}\n canEditSsoFields={editSsoFields}\n />\n </Popup>\n )}\n </CrmStudioUserLayout>\n </CrmStudioLayoutView>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"DENdEA1F.chunk.js","names":[],"sources":["../../../../../src/apps/crm-studio/components/tables/UserOverviewTable.tsx","../../../../../src/apps/crm-studio/views/users/UserOverviewView.tsx"],"sourcesContent":["import React from 'react';\nimport { Button } from 'react-bootstrap';\nimport { createColumnHelper } from '@tanstack/react-table';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { TableV2 } from 'libs/shared/components/table-v2/TableV2';\nimport { ObjectStatus } from 'libs/shared/enums/ObjectStatus';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { CheckCircleSvg } from 'libs/shared/images/svg/status/CheckCircleSvg';\nimport { User } from 'libs/shared/interfaces/models/User';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { getUserTypeClassname } from 'apps/crm-studio/components/tables/UsersTable';\n\nimport { CrmStudioTableTheme } from './CrmStudioTableTheme';\n\nexport function getTypeText(user: User): string {\n switch (UserHelper.getUserType(user)) {\n case UserGroup.Learner:\n return 'Student';\n case UserGroup.Staff:\n return 'Staff';\n case UserGroup.Unknown:\n return 'Unknown';\n default:\n return 'Unknown';\n }\n}\n\nexport interface UserOverviewDataRow {\n title: string;\n value: React.ReactNode;\n action?: React.ReactNode;\n}\n\nconst columnHelper = createColumnHelper<UserOverviewDataRow>();\nconst UserOverviewColumns = {\n title: () =>\n columnHelper.accessor('title', {\n id: 'title',\n header: '',\n cell: props => <div className='font-label'>{props.getValue()}</div>\n }),\n value: () =>\n columnHelper.accessor('value', {\n id: 'value',\n header: '',\n cell: props => <div>{props.getValue()}</div>\n }),\n action: () =>\n columnHelper.accessor('action', {\n id: 'action',\n header: '',\n cell: props => props.getValue() ? <div>{props.getValue()}</div> : null\n })\n};\n\nexport function UserOverviewTable({ user, onUnverifyEmail, onSendPasswordResetEmail, onVerifyEmail, customerless }: {\n user: User,\n onUnverifyEmail?: () => void,\n onSendPasswordResetEmail?: () => void,\n onVerifyEmail?: () => void,\n customerless?: boolean\n}) {\n const emailVerified = user.metadata?.isEmailVerified;\n const isActive = user.status === ObjectStatus.Active;\n const data: UserOverviewDataRow[] = [\n {\n title: 'Email',\n value: (\n <div className='d-flex gap-2 align-items-center'>\n {emailVerified && (\n <SvgContainer\n svg={CheckCircleSvg}\n />\n )}\n {user.email || '-'}\n </div>\n ),\n action: (\n user.email && isActive && !customerless ? (\n <div className='d-flex justify-content-end'>\n <Button\n className='p-0 ms-2 text-info'\n title={emailVerified ? 'Unverify email' : 'Verify email'}\n variant='link'\n onClick={emailVerified ? onUnverifyEmail : onVerifyEmail}\n >\n {emailVerified ? 'Unverify email' : 'Verify email'}\n </Button>\n </div>\n ) : null\n )\n },\n { title: 'Last Name', value: user.surname },\n { title: 'First Name', value: user.name },\n { title: 'User Type', value: (\n <div className={getUserTypeClassname(getTypeText(user))}>\n {getTypeText(user) }\n </div>\n ) },\n { title: 'Display Name', value: user.metadata.displayName || '-' },\n {\n title: 'Username',\n value: user.username,\n action: (isActive && emailVerified && onSendPasswordResetEmail) ? (\n <div className='d-flex justify-content-end'>\n <Button\n className='p-0 ms-2 text-info'\n title='Send password reset email'\n variant='link'\n onClick={onSendPasswordResetEmail}\n >\n Send password reset email\n </Button>\n </div>\n ) : null\n }\n ];\n\n const theme = {\n ...CrmStudioTableTheme,\n header: 'd-none',\n row: ''\n };\n \n return (\n <TableV2\n data={data}\n columns={Object.values(UserOverviewColumns).map(column => column())}\n theme={theme}\n />\n );\n}\n","import React, { useEffect } from 'react';\nimport { Button } from 'react-bootstrap';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Core } from 'libs/common/backbone/index';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { EditUserDetails } from 'libs/shared/apps/user-manager/components/edit-user-details/EditUserDetails';\nimport { EditUserRequest } from 'libs/shared/apps/user-manager/interfaces';\nimport { SecuritySettingsResponse } from 'libs/shared/apps/user-manager/interfaces/SecuritySettingsResponse';\nimport { BulkRemoveUsersViewModel } from 'libs/shared/apps/user-manager/interfaces/viewmodels/BulkRemoveUsersViewModel';\nimport { UserManagerHelper } from 'libs/shared/apps/user-manager/utils/UserManagerHelper';\nimport { ActionButton } from 'libs/shared/components/actions/ActionButton';\nimport { AlertV2 } from 'libs/shared/components/alert-v2/AlertV2';\nimport { DropdownContainer } from 'libs/shared/components/dropdown-container/DropdownContainer';\nimport { FormSubmissionOptions } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { ObjectStatus } from 'libs/shared/enums/ObjectStatus';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { EditSvg } from 'libs/shared/images/svg/actions/EditSvg';\nimport { CurrentUser, User } from 'libs/shared/interfaces/models/User';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { Actions } from 'shared/constants/CuratorActions';\nimport { ViewModelKeys } from 'shared/constants/CuratorViewModels';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { CuratorPermissionName } from 'shared/enums/CuratorPermissionName';\nimport { useCuratorPermissions } from 'shared/hooks/UseCuratorPermissions';\n\nimport { UserOverviewTable } from 'apps/crm-studio/components/tables/UserOverviewTable';\nimport { CustomerRequests } from 'apps/crm-studio/flight-requests/CustomerRequests';\nimport { CrmStudioLayoutView, CrmStudioLayoutViewPage } from 'apps/crm-studio/views/layout/CrmStudioLayout';\nimport { CrmStudioUserLayout } from 'apps/crm-studio/views/layout/CrmStudioUserLayout';\nimport { getUserInitialValues } from 'apps/crm-studio/views/users/edit-user/EditUserUtils';\nimport { CuratorUserRequests } from 'apps/users/flight-requests/CuratorUserRequests';\n\ninterface UserOverviewViewProps {\n id: string;\n}\n\nexport function UserOverviewView(props: UserOverviewViewProps) {\n// handle after delete the current user\n React.useEffect(() => {\n if (!props.id) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CRM_STUDIO,\n action: Actions.CrmStudio.USERS\n });\n }\n }, [props.id]);\n\n const [ showEditModal, setShowEditModal ] = React.useState(false);\n const [ , setShowSpinner ] = React.useState(false);\n const [ , setViewModel ] = useViewModel<BulkRemoveUsersViewModel>(ViewModelKeys.BULK_REMOVE_USERS);\n const [ editSsoFields, setEditSsoFields ] = React.useState(false);\n const [ isAnyCustomerActive, setIsAnyCustomerActive ] = React.useState(false);\n\n const alerts = useAlerts();\n const { hasPermissions, isLoading } = useCuratorPermissions();\n\n useEffect(() => {\n if (!isLoading) {\n setEditSsoFields(hasPermissions(CuratorPermissionName.UsersSsoUpdate) || false);\n }\n }, [isLoading]);\n\n const userCustomerlessRequest = CuratorUserRequests.user(props.id);\n const userWithCustomersRequest = CustomerRequests.getUserWithCustomers(props.id);\n\n const userWithCustomers = Flight.useBasicFetch<User>(userWithCustomersRequest);\n const userCustomerless = Flight.useBasicFetch<User>(userCustomerlessRequest);\n\n const userHasCustomer = userWithCustomers.hasCompleted && (\n userWithCustomers.data?.userProfiles?.data.length > 0 || userWithCustomers.data?.userProfile\n );\n\n const customerId = userHasCustomer ?\n (\n userWithCustomers.data?.userProfile?.customer?.id &&\n UserHelper.getUserStatusFromValue(userWithCustomers.data?.userProfile?.status) === ObjectStatus.Active ?\n userWithCustomers.data?.userProfile?.customer?.id :\n userWithCustomers.data?.userProfiles?.data?.find(\n profile => UserHelper.getUserStatusFromValue(profile.status) === ObjectStatus.Active\n )?.customer?.id\n ) :\n null;\n\n const userExtraRequest = CustomerRequests.getUser(customerId, props.id);\n const userExtra = Flight.useBasicFetch<User>(customerId ? userExtraRequest : null);\n\n const _mergedUser = { ...userWithCustomers.data, ...userCustomerless.data, ...userExtra.data };\n const user = { ..._mergedUser, status: UserHelper.getUserStatusFromValue(_mergedUser.status) };\n\n const currentUser = Flight.useBasicFetch(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch(\n customerId ? CustomerRequests.yearGroups(customerId) : null\n );\n const passwordPolicy = Flight.useBasicFetch<SecuritySettingsResponse>(\n customerId ? CustomerRequests.passwordPolicy(customerId) : null\n );\n const authMethods = Flight.useBasicFetch(\n customerId && CustomerRequests.getAuthenticationMethodsByUserIds(\n customerId,\n [props.id],\n userExtraRequest.normalizeOptions?.namespace\n )\n );\n\n const userType = user.userType;\n const fetchAsync = Flight.useGetFetchAsync();\n\n const isLoaded = customerId ? (\n userWithCustomers.hasCompleted &&\n userCustomerless.hasCompleted &&\n userExtra.hasCompleted &&\n yearGroups.hasCompleted &&\n passwordPolicy.hasCompleted &&\n authMethods.hasCompleted\n ) : (\n userCustomerless.hasCompleted\n );\n\n function validateUser(_user: EditUserRequest): Promise<any> {\n const data = UserManagerHelper.formatCreateOrValidateUserRequest([_user], user.userType, customerId);\n return fetchAsync(CustomerRequests.bulkValidate(data, false, customerId));\n }\n\n async function saveUser(_user: EditUserRequest, onDone: (options?: FormSubmissionOptions) => void): Promise<void> {\n try {\n setShowSpinner(true);\n const errors = await validateUser(_user);\n const isValid = UserManagerHelper.handleAsyncErrors(errors, _user, user, onDone);\n if (!isValid) {\n setShowSpinner(false);\n return;\n }\n const data = UserManagerHelper.formatEditUserRequest(_user);\n await fetchAsync(CustomerRequests.updateUser(\n customerId,\n data,\n (currentUser.data as CurrentUser).id\n ));\n alerts.success('User updated successfully');\n setShowEditModal(false);\n if (onDone) onDone();\n } catch {\n alerts.error('Failed to update user. Please try again.');\n if (onDone) onDone();\n } finally {\n setShowSpinner(false);\n }\n }\n\n async function resendActivationEmail(_user: User) {\n try {\n await fetchAsync(CustomerRequests.resendActivationEmail(customerId, _user.id));\n alerts.success('Activation email sent successfully.');\n } catch {\n alerts.error('Failed to send activation email.');\n }\n }\n\n async function confirmSendPasswordResetEmail() {\n try {\n setShowSpinner(true);\n await fetchAsync(CustomerRequests.sendPasswordResetEmail(customerId, user.id));\n alerts.success('Password reset email sent successfully.');\n } catch {\n alerts.error('Failed to send password reset email.');\n }\n }\n\n async function resendVerificationEmail(_user: User) {\n try {\n setShowSpinner(true);\n await fetchAsync(CustomerRequests.resendVerificationEmail(customerId, _user.id));\n alerts.success('Email verification email sent successfully.');\n } catch {\n alerts.error('Failed to send email verification email.');\n }\n }\n\n async function deleteEmail(): Promise<void> {\n AppLinkHelper.trigger({\n application: AppChannels.CRM_STUDIO,\n action: Actions.CrmStudio.DELETE_USER_EMAIL,\n args: [ customerId, user.id ],\n params: { userType }\n });\n }\n\n function checkIfAnyCustomerActive(): boolean {\n if (!user.userProfiles?.data) return false;\n const profiles = user.userProfiles?.data || [];\n return profiles.some(profile => UserHelper.getUserStatusFromValue(profile.status) === ObjectStatus.Active);\n }\n const isCustomerlessUser = user.userProfiles?.data?.length === 0;\n\n React.useEffect(() => {\n if (isLoaded) {\n setIsAnyCustomerActive(checkIfAnyCustomerActive());\n }\n }, [isLoaded]);\n\n return (\n <CrmStudioLayoutView view={CrmStudioLayoutViewPage.Users}>\n <CrmStudioUserLayout\n title='Overview'\n currentTabId='overview'\n id={props.id}\n loading={!isLoaded}\n >\n {!customerId && (\n <div className='mb-3'>\n <AlertV2 variant='warning' className='w-100'>\n This user is not associated with any customers, and therefore cannot be\n edited. In order to edit this user, please add to a customer in the customer schools tab.\n </AlertV2>\n </div>\n )}\n {(user.id && UserHelper.hasSso(user)) && (\n <div className='mb-3'>\n <AlertV2 variant='warning' className='w-100'>\n Some of this user’s account details are managed by their SSO provider.\n </AlertV2>\n </div>\n )}\n {customerId && !isAnyCustomerActive && (\n <div className='mb-3'>\n <AlertV2 variant='warning' className='w-100'>\n This user has no active customers, and therefore cannot be\n edited. In order to edit this user, please activate a customer in the customer schools tab.\n </AlertV2>\n </div>\n )}\n {isLoaded && user && (\n <div>\n <DropdownContainer\n heading='User details'\n svg={EditSvg}\n buttonClassname='null'\n onClick={(customerId) ?\n () => setShowEditModal(true) :\n undefined\n }\n disableCollapse\n >\n <UserOverviewTable\n user={user}\n onUnverifyEmail={() => deleteEmail()}\n onSendPasswordResetEmail={() => confirmSendPasswordResetEmail()}\n onVerifyEmail={() => resendVerificationEmail(user)}\n customerless={!customerId}\n />\n </DropdownContainer>\n <div className='d-flex justify-content-end mt-3 gap-2'>\n {!!hasPermissions(CuratorPermissionName.UsersSsoUpdate) && isAnyCustomerActive && (\n <PopupButtons.Toggle\n on={editSsoFields}\n onClick={() => setEditSsoFields(v => !v)}\n label='Allow ClickView Staff to edit SSO fields'\n disabled={!UserHelper.hasSso(user)}\n tooltip={!UserHelper.hasSso(user) && 'This user doesn\\'t sign in with SSO'}\n />\n )}\n {user.email &&\n user.status === ObjectStatus.Inactive &&\n !user.metadata.isEmailVerified && (\n <Button\n variant='outline-dark'\n onClick={() => resendActivationEmail(user)}\n >\n Resend activation email\n </Button>\n )}\n {isLoaded && (() => {\n const showDeactivate = user.status === ObjectStatus.Active &&\n (isCustomerlessUser || !isAnyCustomerActive);\n const deleteDisabled = !isCustomerlessUser && isAnyCustomerActive;\n const deleteDisabledTooltip = deleteDisabled ?\n 'This user has active customers, therefore this action is not allowed.' :\n undefined;\n\n if (showDeactivate) {\n return (\n <ActionButton\n className='btn btn-danger'\n appLink={{\n application: AppChannels.CRM_STUDIO,\n action: Actions.CrmStudio.TOGGLE_USER_STATUS,\n args: [ null, user.id ]\n }}\n >\n Deactivate account\n </ActionButton>\n );\n }\n\n return (\n <ActionButton\n className={`btn btn-danger${deleteDisabled ? ' pointer-events-none opacity-50' : ''}`}\n appLink={{\n application: AppChannels.CRM_STUDIO,\n action: Actions.CrmStudio.BULK_REMOVE_USERS,\n args: [customerId],\n params: { userType }\n }}\n onClick={() => setViewModel({\n allUsers: false, users: [user], totalUsers: 1, redirectToSearch: false\n })}\n disabled={deleteDisabled}\n tooltip={deleteDisabledTooltip}\n >\n Delete account\n </ActionButton>\n );\n })()}\n </div>\n </div>\n )}\n {showEditModal && isLoaded && (\n <Popup title='Edit User details' closePopup={() => setShowEditModal(false)}>\n <EditUserDetails\n user={user}\n userType={user.userType}\n yearGroups={\n user.userType === UserGroup.Learner ?\n (Array.isArray(yearGroups) ? yearGroups : []) :\n null\n }\n initialValues={getUserInitialValues(user, customerId)}\n initialErrors={UserManagerHelper.getInitialErrorsForInvalidYearGroups(user.masterYearGroup)}\n onSubmit={saveUser}\n onClickResendActivationEmail={resendActivationEmail}\n onClickSendResetEmail={confirmSendPasswordResetEmail}\n onClickSendVerificationEmail={resendVerificationEmail}\n onClickCancel={() => setShowEditModal(false)}\n currentUser={currentUser.data as CurrentUser}\n emailRequired={user.userType === UserGroup.Staff}\n showActions={false}\n passwordPolicy={passwordPolicy.data}\n showDisplayNameField={user.userType === UserGroup.Staff}\n hideAdminToggle={true}\n hideSsoToggle={true}\n hideYearLevel={true}\n canEditSsoFields={editSsoFields}\n />\n </Popup>\n )}\n </CrmStudioUserLayout>\n </CrmStudioLayoutView>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{a as e,i as t,ln as n}from"./rp704-Pm.chunk.js";import{a as r,i,t as a}from"./BAOFaFPQ.chunk.js";import{t as o}from"./DZX1tZ-D.chunk.js";import{t as s}from"./Di_u2uix.chunk.js";import{t as c}from"./BvMTtGLi.chunk.js";import"./CfCYHRuo.chunk.js";import{n as l}from"./CFoexGFe.chunk.js";import{i as u,n as d,t as f}from"./BVbA6fE6.chunk.js";import{a as p}from"./DBUreHJA.chunk.js";import{t as m}from"./cwPDEI372.chunk.js";import{l as h}from"./Dgk5cBBe.chunk.js";import{t as g}from"./DpqbC5uX.chunk.js";import{t as _}from"./Lh2c_aQx2.chunk.js";import{t as v}from"./Bwpvc7Th2.chunk.js";import{n as y,t as b}from"./CZyPFSXo.chunk.js";import{t as x}from"./DHD4nY6U.chunk.js";import{t as S}from"./BMEoow9M.chunk.js";import{t as C}from"./CE7PE1jj.chunk.js";import{n as w,t as T}from"./2XS-c0Xo.chunk.js";var E=n(e()),D={classificationVideos(e,t,n){return{key:`presentation:${t}:classification:${e}:videos${n?`:${n}`:``}`,url:o.urlBuilder(`/ajax/topics/${e}/videos`,{query:y(l.Videos,t),cursor:n})}}},O=t(),k=S(m.Subject),A={[p.Video]:e=>k.video(e.id),[p.Series]:e=>({application:c.SERIES,action:s.Series.EDIT_SERIES,args:[e.id]}),[`${p.Video}:${p.Audience}`]:e=>k.videoAudiences(e.id),[`${p.Series}:${p.Audience}`]:e=>({application:c.SERIES,action:s.Series.EDIT_SERIES_AUDIENCES,args:[e?.id]}),library:(e,t)=>({application:c.SUBJECTS,action:t===`exchange`?s.Libraries.EXCHANGE:s.Libraries.HOSTED_LIBRARIES,args:[e]})};function j(e,t,n){let r=h();function i(r){return b.classificationMembers(e,t,n,r)}function a(e){r(i(e))}return x(i,a).items}function M(e){let{presentationId:t,classificationId:n}=e,o=v(),p=_(r.SUBJECT),[m,y]=E.useState(),[x,S]=E.useState(),[k,M]=E.useState();a(i.getPresentationFetchOptions(t,y),[]),a(i.getClassificationFetchOptions(n,S),[n]),a(i.getAudiencesFetchOptions(t,M),[n]);let N=j(n,l.PinnedVideos,t),P=N?g.toObject(N,`id`):{};function F(e){return D.classificationVideos(n,t,e)}let I=h();function L(e){I(F(e))}let{items:R,isFetching:z,hasMore:B,nextCursor:V}=C(F,L);function H(e){let t={...x,pinnedVideoMasterId:e};p.updateClassification(n,t)}function U(e){let t=d.singularizeMemberType(l.Videos),n=e===`add`?`Successfully added ${t} to topic`:`Successfully removed ${t} from topic`;o.success(n)}function W(e){let t=d.singularizeMemberType(l.Videos),n=e===`add`?`Failed to add ${t} to topic`:`Failed to remove ${t} from topic`;o.error(n)}function G(e,t){I(b.addObjectsToClassification(x.id,[e],t,()=>U(`add`),()=>W(`add`)))}function K(e,t){I(b.removeObjectsFromClassification(x.id,[e],t,()=>U(`remove`),()=>W(`remove`)))}function q(e){let t={application:c.SUBJECTS,action:s.Subjects,subjectId:n,ownerType:u.Classification,memberType:l.Videos,memberId:e.id},r=P[e.id];return[d.buildMemberAction({actionName:`pinVideo`,callback:()=>H(e.id),...t}),d.buildMemberAction({actionName:r?`hideInClassification`:`showInClassification`,callback:()=>r?K(e.id,l.PinnedVideos):G(e.id,l.PinnedVideos),...t}),d.buildMemberAction({actionName:`remove`,...t})]}function J(e){w.exportMembers(e,l.Videos,x?.name)}function Y(e,t,n){return{application:c.SUBJECTS,action:s.Subjects.BULK_REMOVE_CLASSIFICATION_MEMBERS,args:[e,t],params:{memberIds:n}}}return(0,O.jsx)(T,{classificationId:n,memberType:l.Videos,presentation:m,classification:x,audiences:k,visibleVideos:P,items:R,isFetching:z,hasMore:B,nextCursor:V,fetchNext:L,columnActions:q,appLinks:A,getTabs:(e,t,n)=>f.getEditClassificationTabs(c.SUBJECTS,e,t,n),onExport:J,bulkRemoveAppLink:Y})}export{M as EditClassificationVideosView};
2
- //# sourceMappingURL=BuF_pg9-2.chunk.js.map
1
+ import{a as e,i as t,ln as n}from"./rp704-Pm.chunk.js";import{a as r,i,t as a}from"./BAOFaFPQ.chunk.js";import{t as o}from"./DZX1tZ-D.chunk.js";import{t as s}from"./Di_u2uix.chunk.js";import{t as c}from"./BvMTtGLi.chunk.js";import"./CfCYHRuo.chunk.js";import{n as l}from"./CFoexGFe.chunk.js";import{i as u,n as d,t as f}from"./BVbA6fE6.chunk.js";import{a as p}from"./C-M2om56.chunk.js";import{t as m}from"./cwPDEI372.chunk.js";import{l as h}from"./Dgk5cBBe.chunk.js";import{t as g}from"./DpqbC5uX.chunk.js";import{t as _}from"./Lh2c_aQx2.chunk.js";import{t as v}from"./Bwpvc7Th2.chunk.js";import{n as y,t as b}from"./CZyPFSXo.chunk.js";import{t as x}from"./DHD4nY6U.chunk.js";import{t as S}from"./BMEoow9M.chunk.js";import{t as C}from"./CE7PE1jj.chunk.js";import{n as w,t as T}from"./Bj4-NRWf.chunk.js";var E=n(e()),D={classificationVideos(e,t,n){return{key:`presentation:${t}:classification:${e}:videos${n?`:${n}`:``}`,url:o.urlBuilder(`/ajax/topics/${e}/videos`,{query:y(l.Videos,t),cursor:n})}}},O=t(),k=S(m.Subject),A={[p.Video]:e=>k.video(e.id),[p.Series]:e=>({application:c.SERIES,action:s.Series.EDIT_SERIES,args:[e.id]}),[`${p.Video}:${p.Audience}`]:e=>k.videoAudiences(e.id),[`${p.Series}:${p.Audience}`]:e=>({application:c.SERIES,action:s.Series.EDIT_SERIES_AUDIENCES,args:[e?.id]}),library:(e,t)=>({application:c.SUBJECTS,action:t===`exchange`?s.Libraries.EXCHANGE:s.Libraries.HOSTED_LIBRARIES,args:[e]})};function j(e,t,n){let r=h();function i(r){return b.classificationMembers(e,t,n,r)}function a(e){r(i(e))}return x(i,a).items}function M(e){let{presentationId:t,classificationId:n}=e,o=v(),p=_(r.SUBJECT),[m,y]=E.useState(),[x,S]=E.useState(),[k,M]=E.useState();a(i.getPresentationFetchOptions(t,y),[]),a(i.getClassificationFetchOptions(n,S),[n]),a(i.getAudiencesFetchOptions(t,M),[n]);let N=j(n,l.PinnedVideos,t),P=N?g.toObject(N,`id`):{};function F(e){return D.classificationVideos(n,t,e)}let I=h();function L(e){I(F(e))}let{items:R,isFetching:z,hasMore:B,nextCursor:V}=C(F,L);function H(e){let t={...x,pinnedVideoMasterId:e};p.updateClassification(n,t)}function U(e){let t=d.singularizeMemberType(l.Videos),n=e===`add`?`Successfully added ${t} to topic`:`Successfully removed ${t} from topic`;o.success(n)}function W(e){let t=d.singularizeMemberType(l.Videos),n=e===`add`?`Failed to add ${t} to topic`:`Failed to remove ${t} from topic`;o.error(n)}function G(e,t){I(b.addObjectsToClassification(x.id,[e],t,()=>U(`add`),()=>W(`add`)))}function K(e,t){I(b.removeObjectsFromClassification(x.id,[e],t,()=>U(`remove`),()=>W(`remove`)))}function q(e){let t={application:c.SUBJECTS,action:s.Subjects,subjectId:n,ownerType:u.Classification,memberType:l.Videos,memberId:e.id},r=P[e.id];return[d.buildMemberAction({actionName:`pinVideo`,callback:()=>H(e.id),...t}),d.buildMemberAction({actionName:r?`hideInClassification`:`showInClassification`,callback:()=>r?K(e.id,l.PinnedVideos):G(e.id,l.PinnedVideos),...t}),d.buildMemberAction({actionName:`remove`,...t})]}function J(e){w.exportMembers(e,l.Videos,x?.name)}function Y(e,t,n){return{application:c.SUBJECTS,action:s.Subjects.BULK_REMOVE_CLASSIFICATION_MEMBERS,args:[e,t],params:{memberIds:n}}}return(0,O.jsx)(T,{classificationId:n,memberType:l.Videos,presentation:m,classification:x,audiences:k,visibleVideos:P,items:R,isFetching:z,hasMore:B,nextCursor:V,fetchNext:L,columnActions:q,appLinks:A,getTabs:(e,t,n)=>f.getEditClassificationTabs(c.SUBJECTS,e,t,n),onExport:J,bulkRemoveAppLink:Y})}export{M as EditClassificationVideosView};
2
+ //# sourceMappingURL=DFYiLmms2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BuF_pg9-2.chunk.js","names":[],"sources":["../../../../../src/shared/flight-requests/TopicRequests.ts","../../../../../src/apps/subjects/views/classifications/edit-classification-members/EditClassificationVideosView.tsx"],"sourcesContent":["import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/react/index';\n\nimport { SubjectMemberType } from 'shared/enums';\nimport { getMemberQuery } from 'shared/flight-requests/SubjectRequests';\n\nexport const TopicRequests = {\n classificationVideos(\n classificationId: string,\n presentationId?: string,\n cursor?: string\n ): Flight.Request {\n return {\n key: `presentation:${presentationId}:classification:${classificationId}:videos${cursor ? `:${cursor}` : ''}`,\n url: UrlHelper.urlBuilder(\n `/ajax/topics/${classificationId}/videos`,\n { query: getMemberQuery(SubjectMemberType.Videos, presentationId), cursor }\n )\n };\n }\n};\n","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { useGetFetch } from 'libs/common/react/flight/FlightHelpers';\nimport { useFetch } from 'libs/common/react/hooks/UseFetch';\nimport { useService } from 'libs/common/react/hooks/UseService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useFetchAll } from 'libs/shared/hooks/UseFetchAll';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { BaseObject, Classification, Presentation, PresentationAudience, Series, Video } from 'libs/shared/interfaces';\n\nimport { MatrixMember } from 'shared/components';\nimport { Actions, AppChannels, DataServices } from 'shared/constants';\nimport { MatrixObjectType, OwnerType, SubjectMemberType } from 'shared/enums';\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\nimport { TopicRequests } from 'shared/flight-requests/TopicRequests';\nimport { UpdateClassificationRequest } from 'shared/interfaces/data-requests';\nimport { SubjectDataService, SubjectDataServiceHelper } from 'shared/services';\nimport { ClassificationMemberHelper, TopicsNavHelper } from 'shared/utils';\nimport { ClassificationMemberExporter } from 'shared/utils/ClassificationMemberExporter';\n\nimport { getSubjectAppLinks } from 'apps/subjects/utils/getSubjectAppLinks';\n\nimport { EditClassificationMembers } from './EditClassificationMembers';\n\nconst subjectAppLinks = getSubjectAppLinks(PresentationType.Subject);\n\nconst appLinks = {\n [MatrixObjectType.Video]: (v: Video) => subjectAppLinks.video(v.id),\n [MatrixObjectType.Series]: (series: Series) => ({\n application: AppChannels.SERIES,\n action: Actions.Series.EDIT_SERIES,\n args: [series.id]\n }),\n [`${MatrixObjectType.Video}:${MatrixObjectType.Audience}`]: (video: Video) => subjectAppLinks.videoAudiences(video.id),\n [`${MatrixObjectType.Series}:${MatrixObjectType.Audience}`]: (series: Series) => ({\n application: AppChannels.SERIES,\n action: Actions.Series.EDIT_SERIES_AUDIENCES,\n args: [series?.id]\n }),\n library: (id: string, type: string) => ({\n application: AppChannels.SUBJECTS,\n action: type === 'exchange' ?\n Actions.Libraries.EXCHANGE :\n Actions.Libraries.HOSTED_LIBRARIES,\n args: [id]\n })\n};\n\nfunction useFetchAllMembers(\n classificationId: string,\n memberType: SubjectMemberType,\n presentationId: string\n): BaseObject[] {\n const fetch = useGetFetch();\n\n function getMembersRequest(cursor?: string): Flight.Request {\n return SubjectRequests.classificationMembers(classificationId, memberType, presentationId, cursor);\n }\n\n function fetchNextMembers(cursor?: string): void {\n fetch(getMembersRequest(cursor));\n }\n\n return (useFetchAll(getMembersRequest, fetchNextMembers)).items;\n}\n\ninterface EditClassificationVideosViewProps {\n presentationId: string;\n classificationId: string;\n}\n\nexport function EditClassificationVideosView(props: EditClassificationVideosViewProps): React.ReactElement {\n const { presentationId, classificationId } = props;\n\n const alerts = useAlerts();\n const subjectDataService = useService<SubjectDataService>(DataServices.SUBJECT);\n\n const [ presentation, setPresentation ] = React.useState<Presentation>();\n const [ classification, setClassification ] = React.useState<Classification>();\n const [ audiences, setAudiences ] = React.useState<PresentationAudience[]>();\n\n useFetch(SubjectDataServiceHelper.getPresentationFetchOptions(presentationId, setPresentation), []);\n useFetch(\n SubjectDataServiceHelper.getClassificationFetchOptions(classificationId, setClassification),\n [classificationId]\n );\n useFetch(SubjectDataServiceHelper.getAudiencesFetchOptions(presentationId, setAudiences), [classificationId]);\n\n /**\n * Classifications utilise the pinned association in Master to identify videos that should be visible to the user.\n * This differs to the `SubjectMemberType.Videos` association, which will return all videos that are tied to the classification.\n *\n * It's important to note that pinnedVideos in Master is different to the notion of a single pinned video on a classification object.\n * To help disambiguate, pinnedVideos are instead referred to as visibleVideos (as that's how it should be considered\n * from the users' perspective).\n */\n const visibleVideos = useFetchAllMembers(classificationId, SubjectMemberType.PinnedVideos, presentationId);\n const mappedVisibleVideos = visibleVideos ? ArrayHelper.toObject(visibleVideos, 'id') : {};\n\n function getMembersPage(cursor?: string) {\n return TopicRequests.classificationVideos(classificationId, presentationId, cursor);\n }\n const fetch = useGetFetch();\n\n function fetchNext(cursor?: string) {\n fetch(getMembersPage(cursor));\n }\n\n const { items, isFetching, hasMore, nextCursor } = useInfiniteList<MatrixMember>(getMembersPage, fetchNext);\n\n function updatePinnedVideo(id: string): void {\n const requestObject: UpdateClassificationRequest = {\n ...classification,\n pinnedVideoMasterId: id\n };\n\n subjectDataService.updateClassification(classificationId, requestObject);\n }\n\n function onClassificationUpdateSuccess(actionType: 'add' | 'remove') {\n const singularMemberType = ClassificationMemberHelper.singularizeMemberType(SubjectMemberType.Videos);\n\n const message = actionType === 'add' ?\n `Successfully added ${singularMemberType} to topic` :\n `Successfully removed ${singularMemberType} from topic`;\n\n alerts.success(message);\n }\n\n function onClassificationUpdateError(actionType: 'add' | 'remove') {\n const singularMemberType = ClassificationMemberHelper.singularizeMemberType(SubjectMemberType.Videos);\n\n const message = actionType === 'add' ?\n `Failed to add ${singularMemberType} to topic` :\n `Failed to remove ${singularMemberType} from topic`;\n\n alerts.error(message);\n }\n\n function addObjectToClassification(id: string, memberType: SubjectMemberType): void {\n fetch(SubjectRequests.addObjectsToClassification(\n classification.id,\n [id],\n memberType,\n () => onClassificationUpdateSuccess('add'),\n () => onClassificationUpdateError('add')\n ));\n }\n\n function removeObjectFromClassification(id: string, memberType: SubjectMemberType): void {\n fetch(SubjectRequests.removeObjectsFromClassification(\n classification.id,\n [id],\n memberType,\n () => onClassificationUpdateSuccess('remove'),\n () => onClassificationUpdateError('remove')\n ));\n }\n\n function columnActions(data: Classification | MatrixMember): ActionOptions[] {\n const options = {\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects,\n subjectId: classificationId,\n ownerType: OwnerType.Classification,\n memberType: SubjectMemberType.Videos,\n memberId: data.id\n };\n\n const isCurrentlyVisible = mappedVisibleVideos[data.id];\n\n return [\n ClassificationMemberHelper.buildMemberAction({\n actionName: 'pinVideo',\n callback: () => updatePinnedVideo(data.id),\n ...options\n }),\n\n ClassificationMemberHelper.buildMemberAction({\n actionName: isCurrentlyVisible ? 'hideInClassification' : 'showInClassification',\n callback: () => isCurrentlyVisible ?\n removeObjectFromClassification(data.id, SubjectMemberType.PinnedVideos) :\n addObjectToClassification(data.id, SubjectMemberType.PinnedVideos),\n ...options\n }),\n\n ClassificationMemberHelper.buildMemberAction({\n actionName: 'remove',\n ...options\n })\n ];\n }\n\n function onExport(items: MatrixMember[]): void {\n ClassificationMemberExporter.exportMembers(items, SubjectMemberType.Videos, classification?.name);\n }\n\n function bulkRemoveAppLink(classificationId: string, memberType: SubjectMemberType, selectedIds: string[]) {\n return {\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.BULK_REMOVE_CLASSIFICATION_MEMBERS,\n args: [ classificationId, memberType ],\n params: { memberIds: selectedIds }\n };\n }\n\n return (\n <EditClassificationMembers\n classificationId={classificationId}\n memberType={SubjectMemberType.Videos}\n presentation={presentation}\n classification={classification}\n audiences={audiences}\n visibleVideos={mappedVisibleVideos}\n items={items}\n isFetching={isFetching}\n hasMore={hasMore}\n nextCursor={nextCursor}\n fetchNext={fetchNext}\n columnActions={columnActions}\n appLinks={appLinks}\n getTabs={(pid, cid, hasPermissions) =>\n TopicsNavHelper.getEditClassificationTabs(AppChannels.SUBJECTS, pid, cid, hasPermissions)\n }\n onExport={onExport}\n bulkRemoveAppLink={bulkRemoveAppLink}\n />\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"DFYiLmms2.chunk.js","names":[],"sources":["../../../../../src/shared/flight-requests/TopicRequests.ts","../../../../../src/apps/subjects/views/classifications/edit-classification-members/EditClassificationVideosView.tsx"],"sourcesContent":["import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/react/index';\n\nimport { SubjectMemberType } from 'shared/enums';\nimport { getMemberQuery } from 'shared/flight-requests/SubjectRequests';\n\nexport const TopicRequests = {\n classificationVideos(\n classificationId: string,\n presentationId?: string,\n cursor?: string\n ): Flight.Request {\n return {\n key: `presentation:${presentationId}:classification:${classificationId}:videos${cursor ? `:${cursor}` : ''}`,\n url: UrlHelper.urlBuilder(\n `/ajax/topics/${classificationId}/videos`,\n { query: getMemberQuery(SubjectMemberType.Videos, presentationId), cursor }\n )\n };\n }\n};\n","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { useGetFetch } from 'libs/common/react/flight/FlightHelpers';\nimport { useFetch } from 'libs/common/react/hooks/UseFetch';\nimport { useService } from 'libs/common/react/hooks/UseService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useFetchAll } from 'libs/shared/hooks/UseFetchAll';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { BaseObject, Classification, Presentation, PresentationAudience, Series, Video } from 'libs/shared/interfaces';\n\nimport { MatrixMember } from 'shared/components';\nimport { Actions, AppChannels, DataServices } from 'shared/constants';\nimport { MatrixObjectType, OwnerType, SubjectMemberType } from 'shared/enums';\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\nimport { TopicRequests } from 'shared/flight-requests/TopicRequests';\nimport { UpdateClassificationRequest } from 'shared/interfaces/data-requests';\nimport { SubjectDataService, SubjectDataServiceHelper } from 'shared/services';\nimport { ClassificationMemberHelper, TopicsNavHelper } from 'shared/utils';\nimport { ClassificationMemberExporter } from 'shared/utils/ClassificationMemberExporter';\n\nimport { getSubjectAppLinks } from 'apps/subjects/utils/getSubjectAppLinks';\n\nimport { EditClassificationMembers } from './EditClassificationMembers';\n\nconst subjectAppLinks = getSubjectAppLinks(PresentationType.Subject);\n\nconst appLinks = {\n [MatrixObjectType.Video]: (v: Video) => subjectAppLinks.video(v.id),\n [MatrixObjectType.Series]: (series: Series) => ({\n application: AppChannels.SERIES,\n action: Actions.Series.EDIT_SERIES,\n args: [series.id]\n }),\n [`${MatrixObjectType.Video}:${MatrixObjectType.Audience}`]: (video: Video) => subjectAppLinks.videoAudiences(video.id),\n [`${MatrixObjectType.Series}:${MatrixObjectType.Audience}`]: (series: Series) => ({\n application: AppChannels.SERIES,\n action: Actions.Series.EDIT_SERIES_AUDIENCES,\n args: [series?.id]\n }),\n library: (id: string, type: string) => ({\n application: AppChannels.SUBJECTS,\n action: type === 'exchange' ?\n Actions.Libraries.EXCHANGE :\n Actions.Libraries.HOSTED_LIBRARIES,\n args: [id]\n })\n};\n\nfunction useFetchAllMembers(\n classificationId: string,\n memberType: SubjectMemberType,\n presentationId: string\n): BaseObject[] {\n const fetch = useGetFetch();\n\n function getMembersRequest(cursor?: string): Flight.Request {\n return SubjectRequests.classificationMembers(classificationId, memberType, presentationId, cursor);\n }\n\n function fetchNextMembers(cursor?: string): void {\n fetch(getMembersRequest(cursor));\n }\n\n return (useFetchAll(getMembersRequest, fetchNextMembers)).items;\n}\n\ninterface EditClassificationVideosViewProps {\n presentationId: string;\n classificationId: string;\n}\n\nexport function EditClassificationVideosView(props: EditClassificationVideosViewProps): React.ReactElement {\n const { presentationId, classificationId } = props;\n\n const alerts = useAlerts();\n const subjectDataService = useService<SubjectDataService>(DataServices.SUBJECT);\n\n const [ presentation, setPresentation ] = React.useState<Presentation>();\n const [ classification, setClassification ] = React.useState<Classification>();\n const [ audiences, setAudiences ] = React.useState<PresentationAudience[]>();\n\n useFetch(SubjectDataServiceHelper.getPresentationFetchOptions(presentationId, setPresentation), []);\n useFetch(\n SubjectDataServiceHelper.getClassificationFetchOptions(classificationId, setClassification),\n [classificationId]\n );\n useFetch(SubjectDataServiceHelper.getAudiencesFetchOptions(presentationId, setAudiences), [classificationId]);\n\n /**\n * Classifications utilise the pinned association in Master to identify videos that should be visible to the user.\n * This differs to the `SubjectMemberType.Videos` association, which will return all videos that are tied to the classification.\n *\n * It's important to note that pinnedVideos in Master is different to the notion of a single pinned video on a classification object.\n * To help disambiguate, pinnedVideos are instead referred to as visibleVideos (as that's how it should be considered\n * from the users' perspective).\n */\n const visibleVideos = useFetchAllMembers(classificationId, SubjectMemberType.PinnedVideos, presentationId);\n const mappedVisibleVideos = visibleVideos ? ArrayHelper.toObject(visibleVideos, 'id') : {};\n\n function getMembersPage(cursor?: string) {\n return TopicRequests.classificationVideos(classificationId, presentationId, cursor);\n }\n const fetch = useGetFetch();\n\n function fetchNext(cursor?: string) {\n fetch(getMembersPage(cursor));\n }\n\n const { items, isFetching, hasMore, nextCursor } = useInfiniteList<MatrixMember>(getMembersPage, fetchNext);\n\n function updatePinnedVideo(id: string): void {\n const requestObject: UpdateClassificationRequest = {\n ...classification,\n pinnedVideoMasterId: id\n };\n\n subjectDataService.updateClassification(classificationId, requestObject);\n }\n\n function onClassificationUpdateSuccess(actionType: 'add' | 'remove') {\n const singularMemberType = ClassificationMemberHelper.singularizeMemberType(SubjectMemberType.Videos);\n\n const message = actionType === 'add' ?\n `Successfully added ${singularMemberType} to topic` :\n `Successfully removed ${singularMemberType} from topic`;\n\n alerts.success(message);\n }\n\n function onClassificationUpdateError(actionType: 'add' | 'remove') {\n const singularMemberType = ClassificationMemberHelper.singularizeMemberType(SubjectMemberType.Videos);\n\n const message = actionType === 'add' ?\n `Failed to add ${singularMemberType} to topic` :\n `Failed to remove ${singularMemberType} from topic`;\n\n alerts.error(message);\n }\n\n function addObjectToClassification(id: string, memberType: SubjectMemberType): void {\n fetch(SubjectRequests.addObjectsToClassification(\n classification.id,\n [id],\n memberType,\n () => onClassificationUpdateSuccess('add'),\n () => onClassificationUpdateError('add')\n ));\n }\n\n function removeObjectFromClassification(id: string, memberType: SubjectMemberType): void {\n fetch(SubjectRequests.removeObjectsFromClassification(\n classification.id,\n [id],\n memberType,\n () => onClassificationUpdateSuccess('remove'),\n () => onClassificationUpdateError('remove')\n ));\n }\n\n function columnActions(data: Classification | MatrixMember): ActionOptions[] {\n const options = {\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects,\n subjectId: classificationId,\n ownerType: OwnerType.Classification,\n memberType: SubjectMemberType.Videos,\n memberId: data.id\n };\n\n const isCurrentlyVisible = mappedVisibleVideos[data.id];\n\n return [\n ClassificationMemberHelper.buildMemberAction({\n actionName: 'pinVideo',\n callback: () => updatePinnedVideo(data.id),\n ...options\n }),\n\n ClassificationMemberHelper.buildMemberAction({\n actionName: isCurrentlyVisible ? 'hideInClassification' : 'showInClassification',\n callback: () => isCurrentlyVisible ?\n removeObjectFromClassification(data.id, SubjectMemberType.PinnedVideos) :\n addObjectToClassification(data.id, SubjectMemberType.PinnedVideos),\n ...options\n }),\n\n ClassificationMemberHelper.buildMemberAction({\n actionName: 'remove',\n ...options\n })\n ];\n }\n\n function onExport(items: MatrixMember[]): void {\n ClassificationMemberExporter.exportMembers(items, SubjectMemberType.Videos, classification?.name);\n }\n\n function bulkRemoveAppLink(classificationId: string, memberType: SubjectMemberType, selectedIds: string[]) {\n return {\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.BULK_REMOVE_CLASSIFICATION_MEMBERS,\n args: [ classificationId, memberType ],\n params: { memberIds: selectedIds }\n };\n }\n\n return (\n <EditClassificationMembers\n classificationId={classificationId}\n memberType={SubjectMemberType.Videos}\n presentation={presentation}\n classification={classification}\n audiences={audiences}\n visibleVideos={mappedVisibleVideos}\n items={items}\n isFetching={isFetching}\n hasMore={hasMore}\n nextCursor={nextCursor}\n fetchNext={fetchNext}\n columnActions={columnActions}\n appLinks={appLinks}\n getTabs={(pid, cid, hasPermissions) =>\n TopicsNavHelper.getEditClassificationTabs(AppChannels.SUBJECTS, pid, cid, hasPermissions)\n }\n onExport={onExport}\n bulkRemoveAppLink={bulkRemoveAppLink}\n />\n );\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{C as e,a as t,i as n,ln as r}from"./rp704-Pm.chunk.js";import{t as i}from"./Crs6pJ2h.chunk.js";import{a,i as o,t as s}from"./BAOFaFPQ.chunk.js";import{t as c}from"./DZX1tZ-D.chunk.js";import{t as l}from"./Di_u2uix.chunk.js";import{t as u}from"./BvMTtGLi.chunk.js";import"./CfCYHRuo.chunk.js";import{n as d}from"./CFoexGFe.chunk.js";import{t as f}from"./UCDGupVs.chunk.js";import{t as p}from"./CLCeObem2.chunk.js";import{t as m}from"./C7gaMI1t2.chunk.js";import{t as h}from"./cwPDEI372.chunk.js";import{_ as g,f as _,g as v,s as ee,y}from"./BhKv6dKl2.chunk.js";import{l as b,r as x,s as S}from"./Dgk5cBBe.chunk.js";import{t as C}from"./Bw7dP6jB.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as w}from"./BuWnKnnb.chunk.js";import{t as T}from"./BCfBk23W.chunk.js";import{t as E}from"./Lh2c_aQx2.chunk.js";import{t as D}from"./Bwpvc7Th2.chunk.js";import{t as O}from"./DkmqWelt2.chunk.js";import{t as k}from"./BivItbGo.chunk.js";import{r as A}from"./BRcHS92O.chunk.js";import{t as j}from"./DhW1fXNd.chunk.js";import{c as M,i as te}from"./DA0I3jYA.chunk.js";import{t as ne}from"./dKyhMawf.chunk.js";import{n as re}from"./BDcEBenk.chunk.js";import{i as N,r as ie}from"./Cep5lLrf.chunk.js";import{t as P}from"./R3C4JT9X2.chunk.js";import{n as F}from"./C4Ey4nzb2.chunk.js";import{t as I}from"./DhqpGW1a.chunk.js";import{t as L}from"./CNfsk-2G.chunk.js";import{t as R}from"./Bhk_xXa62.chunk.js";import{t as z}from"./DYVUvs3j2.chunk.js";import{t as B}from"./2LTy46yF.chunk.js";import{c as V}from"./_wZpe632.chunk.js";import{t as H}from"./BMIUSUnG.chunk.js";import{t as U}from"./DLLL2lwS.chunk.js";import{t as W}from"./DaEXgbc_.chunk.js";var G=r(t(),1),K=r(p(),1),q=K.object().shape({name:K.string().trim().max(255,`Name is too long`).required(`Name is required`).default(``),description:K.string().trim().max(350,`Description is too long`).default(``),rating:K.object().shape({id:K.string()}).default({}).noUnknown(),tallPoster:m,banner:m}).noUnknown(),J={getEditSeriesTabs(e,t){let n=u.SERIES,r=l.Series,i=[{label:`Edit Series Details`,appLink:{application:n,action:r.EDIT_SERIES,args:[t]}},{label:`Curation`,appLink:{application:n,action:r.EDIT_SERIES_CURATION,args:[t]}},{label:`Videos`,appLink:{application:n,action:r.EDIT_SERIES_VIDEOS,args:[t]}},{label:`Aliases`,appLink:{application:n,action:r.EDIT_SERIES_ALIASES,args:[t]}}];return H.hasSubjectsAccess(e)&&i.push({label:`Topics`,appLink:{application:n,action:r.EDIT_SERIES_SUBJECTS,args:[t]}},{label:`Audiences`,appLink:{application:n,action:r.EDIT_SERIES_AUDIENCES,args:[t]}}),i}},Y=n();function ae(e){let t=M(),n=P(t);return(0,Y.jsxs)(te,{children:[(0,Y.jsx)(F,{label:`Name`,type:`text`,name:`name`,id:`name`,value:t.values.name,placeholder:`Enter a name for this series`,autoFocus:!0}),(0,Y.jsx)(F,{label:`Description`,as:`textarea`,name:`description`,id:`description`,maxLength:350,value:t.values.description,placeholder:`Describe this series here`,showCharacterCounter:!0}),(0,Y.jsx)(g,{ratings:e.ratings}),(0,Y.jsx)(L,{imageType:A.TallPosters,fieldName:`tallPoster`,uploadAppLink:{application:u.SERIES,action:l.Series.UPLOAD_IMAGE},canRemove:!0}),(0,Y.jsx)(L,{imageType:A.Banners,fieldName:`banner`,uploadAppLink:{application:u.SERIES,action:l.Playlists.UPLOAD_IMAGE},canRemove:!0}),(0,Y.jsxs)(`div`,{className:`d-flex justify-content-between align-items-center`,children:[(0,Y.jsx)(j,{showSpinner:t.isSubmitting,type:`submit`,disabled:!n,children:e.id?`Save`:`Create`}),!!e.actions&&(0,Y.jsx)(I,{actions:e.actions})]})]})}function X(e){return(0,Y.jsx)(ne,{initialValues:e.series,validationSchema:q,onSubmit:e.saveSeries,children:(0,Y.jsx)(ae,{id:e.series&&e.series.id,ratings:e.ratings})})}var oe=e=>t=>t.appLink.action===e;function Z(e){return(0,Y.jsx)(`div`,{className:`py-2`,children:(0,Y.jsx)(v,{tabs:J.getEditSeriesTabs(e.currentUser,e.seriesId),isItemActive:oe(e.activeAction)})})}function se(e){return{application:u.SERIES,action:l.Series.LEGACY_EDIT_SERIES,args:[e]}}function ce(e){let t=C(),n=D(),r=S(R.series(e.seriesId)),a=S(W.ratings()),o=S(f.currentUser());function s(i,a){i.name===r.data.name&&delete i.name,(i.description===r.data.description||!i.description&&!r.data.description)&&delete i.description,x(t,R.updateSeries(e.seriesId,i,()=>{n.success(`Successfully updated series.`)},()=>{n.error(`Failed to update series.`)},a))}return(0,Y.jsxs)(Y.Fragment,{children:[!!o.data&&(0,Y.jsx)(Z,{seriesId:e.seriesId,activeAction:l.Series.EDIT_SERIES,currentUser:o.data}),!!r.data&&!!a.data&&(0,Y.jsx)(X,{series:r.data,saveSeries:s,ratings:a.data}),(0,Y.jsxs)(`div`,{className:`py-3 text-end`,children:[`Can't find what you're looking for? Try the old edit series page `,(0,Y.jsx)(i,{className:`info-link`,appLink:se(e.seriesId),children:`here`}),`.`]})]})}function le(e,t,n){let r=e=>w.getSetStateByKey(n,e);s(o.getObjectLevelsFetchOptions(e,d.Series,r(`seriesLevels`)),[e]),s(o.getObjectAudiencesFetchOptions(e,d.Series,r(`seriesAudiences`)),[e,t.seriesLevels]),B([o.getPresentationsFetchOptions(r(`presentations`),h.Subject),o.getLevelsFetchOptions(r(`levels`))],[]),s(!!t.currentPresentation&&o.getAudiencesFetchOptions(t.currentPresentation.id,r(`presentationAudiences`)),[t.currentPresentation],!!t.currentPresentation)}function ue(e){let[t,n]=G.useState({}),r=S(R.series(e.seriesId)),i=S(f.currentUser()),o=E(a.SUBJECT);le(e.seriesId,t,n),T(t,n);let s=!!t.presentations&&!!t.levels&&!!t.presentationAudiences&&!!t.seriesLevels&&!!t.seriesAudiences;return(0,Y.jsxs)(Y.Fragment,{children:[!!i.data&&(0,Y.jsx)(Z,{seriesId:e.seriesId,activeAction:l.Series.EDIT_SERIES_AUDIENCES,currentUser:i.data}),(0,Y.jsx)(y,{object:r.data}),!!s&&(0,Y.jsx)(V,{objectLevels:t.seriesLevels,objectAudiences:t.seriesAudiences,presentations:t.presentations,currentPresentation:t.currentPresentation,setCurrentPresentation:w.getSetStateByKey(n,`currentPresentation`),levels:t.levels,presentationAudiences:t.presentationAudiences,memberType:d.Series,saveLevels:(t,n,r)=>o.updateObjectLevels(e.seriesId,t,d.Series,n,r,r),saveAudiences:(n,r)=>o.updateObjectAudiences(e.seriesId,t.currentPresentation.id,n,d.Series,r,r)})]})}function Q(e,t,n){let r=e=>w.getSetStateByKey(n,e);B([o.getSubjectTreeFetchOptions(r(`subjectTree`),h.Subject),o.getPresentationsFetchOptions(r(`presentations`),h.Subject)],[]),s(o.getObjectSubjectsFetchOptions(e,d.Series,r(`seriesSubjects`)),[e]),s(!!t.currentPresentation&&o.getClassificationTreeFetchOptions(t.currentPresentation.id,r(`classificationTree`)),[t.currentPresentation],!!t.currentPresentation),G.useEffect(()=>r(`subjectClassifications`)([]),[t.seriesSubjects]);let i=(e,t)=>[...t.subjectClassifications||[],...e],a=t.seriesSubjects&&t.seriesSubjects.map(e=>o.getSubjectClassificationFetchOptions(e.id,w.getSetStateByKey(n,`subjectClassifications`,i)));B(a,[t.seriesSubjects],!!a),s(o.getObjectClassificationsFetchOptions(e,d.Series,r(`seriesClassifications`)),[e,t.seriesSubjects])}function de(e){let[t,n]=G.useState({}),r=S(R.series(e.seriesId)),i=S(f.currentUser()),o=E(a.SUBJECT);Q(e.seriesId,t,n),T(t,n);let s=!!t.seriesSubjects&&!!t.subjectTree&&!!t.presentations&&!!t.classificationTree&&!!t.seriesClassifications&&!!t.subjectClassifications;return(0,Y.jsxs)(Y.Fragment,{children:[!!i.data&&(0,Y.jsx)(Z,{seriesId:e.seriesId,activeAction:l.Series.EDIT_SERIES_SUBJECTS,currentUser:i.data}),(0,Y.jsx)(y,{object:r.data}),s&&(0,Y.jsx)(ee,{objectSubjects:t.seriesSubjects,subjectTree:t.subjectTree,memberType:d.Series,presentations:t.presentations,presentationType:h.Subject,currentPresentation:t.currentPresentation,setCurrentPresentation:w.getSetStateByKey(n,`currentPresentation`),objectClassifications:t.seriesClassifications,objectSubjectClassifications:t.subjectClassifications,classificationTree:t.classificationTree,saveSubjects:(t,n,r)=>o.updateObjectSubjects(e.seriesId,t,d.Series,n,r,r),saveClassifications:(n,r)=>o.updateObjectClassifications(e.seriesId,t.currentPresentation.id,n,d.Series,r,r)})]})}function fe(e){let t=C(),n=D(),r=S(z.getAliases(e.seriesId)),i=S(f.currentUser());function a(r,i){x(t,z.createAlias(e.seriesId,r,()=>{n.success(`Successfully created alias`),i()},()=>{n.error(`Something went wrong creating your alias`)}))}function o(r){x(t,z.deleteAlias(e.seriesId,r,()=>{n.success(`Successfully deleted alias`)},()=>{n.error(`Something went wrong deleting your alias`)}))}return!r.data||!i.data?(0,Y.jsx)(Y.Fragment,{children:`Loading...`}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(Z,{seriesId:e.seriesId,activeAction:l.Series.EDIT_SERIES_ALIASES,currentUser:i.data}),(0,Y.jsx)(_,{aliases:r.data.data,onSave:a,onDelete:o})]})}var $={sharedSeries:(e,t)=>c.urlBuilder(`/api/objects/${e}`,{query:N.SERIES,shareId:t}),seriesWithVideos:(e,t=3)=>`{gateway}/v1/objects/${e}?query=banner,videos[season,thumbnail,_canBeConsumed]{limit:${t}}`},pe={series(e){let t={query:N.SERIES};return{url:c.urlBuilder(`{gateway}/v1/objects/${e}`,t),publicUrl:c.urlBuilder(`/api/objects/${e}`,t),key:`series:${e}`}},sharedSeries(e,t){return{url:$.sharedSeries(e,t),key:`shared:series:${e}:${t}`}},seriesWithVideos(e,t=3){return{url:$.seriesWithVideos(e,t),key:`series:${e}:with:videos:${t}`}},seriesWithThumbnailAndCount(e){return{url:`{gateway}/v1/objects/${e}?query=videos[season,thumbnail,_canBeConsumed,count()]{limit:1}`,key:`series:${e}:thumbnail:count`}},seriesVideos(e,t,n,r){let i=re.getVideoSortParam(n),a=[`series`,e,`videos`,r,n].filter(e=>!!e).join(`:`);return{url:c.urlBuilder(`{gateway}/v1/collections/${e}/videos`,{query:`{${i}}${N.VIDEO_COLLECTION}`,cursor:r}),publicUrl:c.urlBuilder(`/api/objects/collections/${e}/videos`,{query:`{${i}}${ie.VIDEO_COLLECTION}`,cursor:r}),key:a}}};function me(e){let t=S(f.currentUser()),n=S(pe.series(e.seriesId)),r=S(k.curationTags()),i=S(k.selectedCurationTags(e.seriesId)),a=b();function o(t,n,r){a(k.addTag(e.seriesId,t,n,r))}function s(t,n,r){a(k.removeTag(e.seriesId,t,n,r))}return(0,Y.jsxs)(Y.Fragment,{children:[!!t.data&&(0,Y.jsx)(Z,{seriesId:e.seriesId,activeAction:l.Series.EDIT_SERIES_CURATION,currentUser:t.data}),!!n.data&&!!r.data&&!!i.data&&(0,Y.jsx)(U,{id:e.seriesId,heading:n.data.name,curationTags:r.data,selectedCurationTags:i.data,addCurationTag:o,removeCurationTag:s,disableClickViewCurated:!0})]})}function he(t){e.trigger({application:u.SERIES,action:l.Series.EDIT_SERIES,args:[t.id]})}function ge(){let e=C(),t=D(),n=S(W.ratings());function r(n,r){let i=()=>{t.error(`Failed to create series.`)},a=e=>{t.success(`Successfully created series.`),he(e)};x(e,R.createSeries(n,t=>{let n={permissions:O.getProtectedReadPermission()};x(e,R.updateSeries(t.id,n,a,i,r))},i))}return(0,Y.jsx)(Y.Fragment,{children:!!n.data&&(0,Y.jsx)(X,{saveSeries:r,ratings:n.data})})}export{fe as EditSeriesAliasesView,ue as EditSeriesAudiencesView,me as EditSeriesCurationView,de as EditSeriesSubjectsView,ce as EditSeriesView,ge as NewSeriesView};
2
- //# sourceMappingURL=BE6LUVEo2.chunk.js.map
1
+ import{C as e,a as t,i as n,ln as r}from"./rp704-Pm.chunk.js";import{t as i}from"./Crs6pJ2h.chunk.js";import{a,i as o,t as s}from"./BAOFaFPQ.chunk.js";import{t as c}from"./DZX1tZ-D.chunk.js";import{t as l}from"./Di_u2uix.chunk.js";import{t as u}from"./BvMTtGLi.chunk.js";import"./CfCYHRuo.chunk.js";import{n as d}from"./CFoexGFe.chunk.js";import{t as f}from"./UCDGupVs.chunk.js";import{t as p}from"./CLCeObem2.chunk.js";import{t as m}from"./C7gaMI1t2.chunk.js";import{t as h}from"./cwPDEI372.chunk.js";import{_ as g,f as _,g as v,s as ee,y}from"./GpDEun8c2.chunk.js";import{l as b,r as x,s as S}from"./Dgk5cBBe.chunk.js";import{t as C}from"./Bw7dP6jB.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as w}from"./BuWnKnnb.chunk.js";import{t as T}from"./BCfBk23W.chunk.js";import{t as E}from"./Lh2c_aQx2.chunk.js";import{t as D}from"./Bwpvc7Th2.chunk.js";import{t as O}from"./DkmqWelt2.chunk.js";import{t as k}from"./BivItbGo.chunk.js";import{r as A}from"./BRcHS92O.chunk.js";import{t as j}from"./DhW1fXNd.chunk.js";import{c as M,i as te}from"./DA0I3jYA.chunk.js";import{t as ne}from"./dKyhMawf.chunk.js";import{n as re}from"./BDcEBenk.chunk.js";import{i as N,r as ie}from"./Cep5lLrf.chunk.js";import{t as P}from"./R3C4JT9X2.chunk.js";import{n as F}from"./C4Ey4nzb2.chunk.js";import{t as I}from"./DhqpGW1a.chunk.js";import{t as L}from"./CNfsk-2G.chunk.js";import{t as R}from"./Bhk_xXa62.chunk.js";import{t as z}from"./DYVUvs3j2.chunk.js";import{t as B}from"./2LTy46yF.chunk.js";import{c as V}from"./BFPSIGJg.chunk.js";import{t as H}from"./BMIUSUnG.chunk.js";import{t as U}from"./CNLx6_fS.chunk.js";import{t as W}from"./DaEXgbc_.chunk.js";var G=r(t(),1),K=r(p(),1),q=K.object().shape({name:K.string().trim().max(255,`Name is too long`).required(`Name is required`).default(``),description:K.string().trim().max(350,`Description is too long`).default(``),rating:K.object().shape({id:K.string()}).default({}).noUnknown(),tallPoster:m,banner:m}).noUnknown(),J={getEditSeriesTabs(e,t){let n=u.SERIES,r=l.Series,i=[{label:`Edit Series Details`,appLink:{application:n,action:r.EDIT_SERIES,args:[t]}},{label:`Curation`,appLink:{application:n,action:r.EDIT_SERIES_CURATION,args:[t]}},{label:`Videos`,appLink:{application:n,action:r.EDIT_SERIES_VIDEOS,args:[t]}},{label:`Aliases`,appLink:{application:n,action:r.EDIT_SERIES_ALIASES,args:[t]}}];return H.hasSubjectsAccess(e)&&i.push({label:`Topics`,appLink:{application:n,action:r.EDIT_SERIES_SUBJECTS,args:[t]}},{label:`Audiences`,appLink:{application:n,action:r.EDIT_SERIES_AUDIENCES,args:[t]}}),i}},Y=n();function ae(e){let t=M(),n=P(t);return(0,Y.jsxs)(te,{children:[(0,Y.jsx)(F,{label:`Name`,type:`text`,name:`name`,id:`name`,value:t.values.name,placeholder:`Enter a name for this series`,autoFocus:!0}),(0,Y.jsx)(F,{label:`Description`,as:`textarea`,name:`description`,id:`description`,maxLength:350,value:t.values.description,placeholder:`Describe this series here`,showCharacterCounter:!0}),(0,Y.jsx)(g,{ratings:e.ratings}),(0,Y.jsx)(L,{imageType:A.TallPosters,fieldName:`tallPoster`,uploadAppLink:{application:u.SERIES,action:l.Series.UPLOAD_IMAGE},canRemove:!0}),(0,Y.jsx)(L,{imageType:A.Banners,fieldName:`banner`,uploadAppLink:{application:u.SERIES,action:l.Playlists.UPLOAD_IMAGE},canRemove:!0}),(0,Y.jsxs)(`div`,{className:`d-flex justify-content-between align-items-center`,children:[(0,Y.jsx)(j,{showSpinner:t.isSubmitting,type:`submit`,disabled:!n,children:e.id?`Save`:`Create`}),!!e.actions&&(0,Y.jsx)(I,{actions:e.actions})]})]})}function X(e){return(0,Y.jsx)(ne,{initialValues:e.series,validationSchema:q,onSubmit:e.saveSeries,children:(0,Y.jsx)(ae,{id:e.series&&e.series.id,ratings:e.ratings})})}var oe=e=>t=>t.appLink.action===e;function Z(e){return(0,Y.jsx)(`div`,{className:`py-2`,children:(0,Y.jsx)(v,{tabs:J.getEditSeriesTabs(e.currentUser,e.seriesId),isItemActive:oe(e.activeAction)})})}function se(e){return{application:u.SERIES,action:l.Series.LEGACY_EDIT_SERIES,args:[e]}}function ce(e){let t=C(),n=D(),r=S(R.series(e.seriesId)),a=S(W.ratings()),o=S(f.currentUser());function s(i,a){i.name===r.data.name&&delete i.name,(i.description===r.data.description||!i.description&&!r.data.description)&&delete i.description,x(t,R.updateSeries(e.seriesId,i,()=>{n.success(`Successfully updated series.`)},()=>{n.error(`Failed to update series.`)},a))}return(0,Y.jsxs)(Y.Fragment,{children:[!!o.data&&(0,Y.jsx)(Z,{seriesId:e.seriesId,activeAction:l.Series.EDIT_SERIES,currentUser:o.data}),!!r.data&&!!a.data&&(0,Y.jsx)(X,{series:r.data,saveSeries:s,ratings:a.data}),(0,Y.jsxs)(`div`,{className:`py-3 text-end`,children:[`Can't find what you're looking for? Try the old edit series page `,(0,Y.jsx)(i,{className:`info-link`,appLink:se(e.seriesId),children:`here`}),`.`]})]})}function le(e,t,n){let r=e=>w.getSetStateByKey(n,e);s(o.getObjectLevelsFetchOptions(e,d.Series,r(`seriesLevels`)),[e]),s(o.getObjectAudiencesFetchOptions(e,d.Series,r(`seriesAudiences`)),[e,t.seriesLevels]),B([o.getPresentationsFetchOptions(r(`presentations`),h.Subject),o.getLevelsFetchOptions(r(`levels`))],[]),s(!!t.currentPresentation&&o.getAudiencesFetchOptions(t.currentPresentation.id,r(`presentationAudiences`)),[t.currentPresentation],!!t.currentPresentation)}function ue(e){let[t,n]=G.useState({}),r=S(R.series(e.seriesId)),i=S(f.currentUser()),o=E(a.SUBJECT);le(e.seriesId,t,n),T(t,n);let s=!!t.presentations&&!!t.levels&&!!t.presentationAudiences&&!!t.seriesLevels&&!!t.seriesAudiences;return(0,Y.jsxs)(Y.Fragment,{children:[!!i.data&&(0,Y.jsx)(Z,{seriesId:e.seriesId,activeAction:l.Series.EDIT_SERIES_AUDIENCES,currentUser:i.data}),(0,Y.jsx)(y,{object:r.data}),!!s&&(0,Y.jsx)(V,{objectLevels:t.seriesLevels,objectAudiences:t.seriesAudiences,presentations:t.presentations,currentPresentation:t.currentPresentation,setCurrentPresentation:w.getSetStateByKey(n,`currentPresentation`),levels:t.levels,presentationAudiences:t.presentationAudiences,memberType:d.Series,saveLevels:(t,n,r)=>o.updateObjectLevels(e.seriesId,t,d.Series,n,r,r),saveAudiences:(n,r)=>o.updateObjectAudiences(e.seriesId,t.currentPresentation.id,n,d.Series,r,r)})]})}function Q(e,t,n){let r=e=>w.getSetStateByKey(n,e);B([o.getSubjectTreeFetchOptions(r(`subjectTree`),h.Subject),o.getPresentationsFetchOptions(r(`presentations`),h.Subject)],[]),s(o.getObjectSubjectsFetchOptions(e,d.Series,r(`seriesSubjects`)),[e]),s(!!t.currentPresentation&&o.getClassificationTreeFetchOptions(t.currentPresentation.id,r(`classificationTree`)),[t.currentPresentation],!!t.currentPresentation),G.useEffect(()=>r(`subjectClassifications`)([]),[t.seriesSubjects]);let i=(e,t)=>[...t.subjectClassifications||[],...e],a=t.seriesSubjects&&t.seriesSubjects.map(e=>o.getSubjectClassificationFetchOptions(e.id,w.getSetStateByKey(n,`subjectClassifications`,i)));B(a,[t.seriesSubjects],!!a),s(o.getObjectClassificationsFetchOptions(e,d.Series,r(`seriesClassifications`)),[e,t.seriesSubjects])}function de(e){let[t,n]=G.useState({}),r=S(R.series(e.seriesId)),i=S(f.currentUser()),o=E(a.SUBJECT);Q(e.seriesId,t,n),T(t,n);let s=!!t.seriesSubjects&&!!t.subjectTree&&!!t.presentations&&!!t.classificationTree&&!!t.seriesClassifications&&!!t.subjectClassifications;return(0,Y.jsxs)(Y.Fragment,{children:[!!i.data&&(0,Y.jsx)(Z,{seriesId:e.seriesId,activeAction:l.Series.EDIT_SERIES_SUBJECTS,currentUser:i.data}),(0,Y.jsx)(y,{object:r.data}),s&&(0,Y.jsx)(ee,{objectSubjects:t.seriesSubjects,subjectTree:t.subjectTree,memberType:d.Series,presentations:t.presentations,presentationType:h.Subject,currentPresentation:t.currentPresentation,setCurrentPresentation:w.getSetStateByKey(n,`currentPresentation`),objectClassifications:t.seriesClassifications,objectSubjectClassifications:t.subjectClassifications,classificationTree:t.classificationTree,saveSubjects:(t,n,r)=>o.updateObjectSubjects(e.seriesId,t,d.Series,n,r,r),saveClassifications:(n,r)=>o.updateObjectClassifications(e.seriesId,t.currentPresentation.id,n,d.Series,r,r)})]})}function fe(e){let t=C(),n=D(),r=S(z.getAliases(e.seriesId)),i=S(f.currentUser());function a(r,i){x(t,z.createAlias(e.seriesId,r,()=>{n.success(`Successfully created alias`),i()},()=>{n.error(`Something went wrong creating your alias`)}))}function o(r){x(t,z.deleteAlias(e.seriesId,r,()=>{n.success(`Successfully deleted alias`)},()=>{n.error(`Something went wrong deleting your alias`)}))}return!r.data||!i.data?(0,Y.jsx)(Y.Fragment,{children:`Loading...`}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(Z,{seriesId:e.seriesId,activeAction:l.Series.EDIT_SERIES_ALIASES,currentUser:i.data}),(0,Y.jsx)(_,{aliases:r.data.data,onSave:a,onDelete:o})]})}var $={sharedSeries:(e,t)=>c.urlBuilder(`/api/objects/${e}`,{query:N.SERIES,shareId:t}),seriesWithVideos:(e,t=3)=>`{gateway}/v1/objects/${e}?query=banner,videos[season,thumbnail,_canBeConsumed]{limit:${t}}`},pe={series(e){let t={query:N.SERIES};return{url:c.urlBuilder(`{gateway}/v1/objects/${e}`,t),publicUrl:c.urlBuilder(`/api/objects/${e}`,t),key:`series:${e}`}},sharedSeries(e,t){return{url:$.sharedSeries(e,t),key:`shared:series:${e}:${t}`}},seriesWithVideos(e,t=3){return{url:$.seriesWithVideos(e,t),key:`series:${e}:with:videos:${t}`}},seriesWithThumbnailAndCount(e){return{url:`{gateway}/v1/objects/${e}?query=videos[season,thumbnail,_canBeConsumed,count()]{limit:1}`,key:`series:${e}:thumbnail:count`}},seriesVideos(e,t,n,r){let i=re.getVideoSortParam(n),a=[`series`,e,`videos`,r,n].filter(e=>!!e).join(`:`);return{url:c.urlBuilder(`{gateway}/v1/collections/${e}/videos`,{query:`{${i}}${N.VIDEO_COLLECTION}`,cursor:r}),publicUrl:c.urlBuilder(`/api/objects/collections/${e}/videos`,{query:`{${i}}${ie.VIDEO_COLLECTION}`,cursor:r}),key:a}}};function me(e){let t=S(f.currentUser()),n=S(pe.series(e.seriesId)),r=S(k.curationTags()),i=S(k.selectedCurationTags(e.seriesId)),a=b();function o(t,n,r){a(k.addTag(e.seriesId,t,n,r))}function s(t,n,r){a(k.removeTag(e.seriesId,t,n,r))}return(0,Y.jsxs)(Y.Fragment,{children:[!!t.data&&(0,Y.jsx)(Z,{seriesId:e.seriesId,activeAction:l.Series.EDIT_SERIES_CURATION,currentUser:t.data}),!!n.data&&!!r.data&&!!i.data&&(0,Y.jsx)(U,{id:e.seriesId,heading:n.data.name,curationTags:r.data,selectedCurationTags:i.data,addCurationTag:o,removeCurationTag:s,disableClickViewCurated:!0})]})}function he(t){e.trigger({application:u.SERIES,action:l.Series.EDIT_SERIES,args:[t.id]})}function ge(){let e=C(),t=D(),n=S(W.ratings());function r(n,r){let i=()=>{t.error(`Failed to create series.`)},a=e=>{t.success(`Successfully created series.`),he(e)};x(e,R.createSeries(n,t=>{let n={permissions:O.getProtectedReadPermission()};x(e,R.updateSeries(t.id,n,a,i,r))},i))}return(0,Y.jsx)(Y.Fragment,{children:!!n.data&&(0,Y.jsx)(X,{saveSeries:r,ratings:n.data})})}export{fe as EditSeriesAliasesView,ue as EditSeriesAudiencesView,me as EditSeriesCurationView,de as EditSeriesSubjectsView,ce as EditSeriesView,ge as NewSeriesView};
2
+ //# sourceMappingURL=DHa-x1js2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BE6LUVEo2.chunk.js","names":[],"sources":["../../../../../src/apps/series/utils/validation/SeriesValidation.ts","../../../../../src/apps/series/utils/SeriesNavHelper.ts","../../../../../src/apps/series/components/edit-series-details/EditSeriesDetailsForm.tsx","../../../../../src/apps/series/components/edit-series-details/EditSeriesDetails.tsx","../../../../../src/apps/series/components/edit-series-nav/EditSeriesNav.tsx","../../../../../src/apps/series/views/edit-series/EditSeriesView.tsx","../../../../../src/apps/series/views/edit-series-audiences/EditSeriesAudiencesView.tsx","../../../../../src/apps/series/views/edit-series-subjects/EditSeriesSubjectsView.tsx","../../../../../src/apps/series/views/edit-series-aliases/EditSeriesAliasesView.tsx","../../../../../../../libs/shared/src/flight-requests/SeriesRequests.ts","../../../../../src/apps/series/views/edit-series-curation/EditSeriesCurationView.tsx","../../../../../src/apps/series/views/new-series/NewSeriesView.tsx"],"sourcesContent":["import * as Yup from 'yup';\n\nimport { UpdateObjectRating } from 'libs/shared/interfaces';\n\nimport { ImageValidationSchema } from 'shared/utils/validation/ImageValidationSchema';\n\nimport { CreateOrUpdateSeriesRequest } from 'apps/series/interfaces';\n\nexport const SERIES_MAX_DESCRIPTION_LENGTH = 350;\n\nexport const SeriesValidationSchema = Yup.object().shape<CreateOrUpdateSeriesRequest>({\n name: Yup.string()\n .trim()\n .max(255, 'Name is too long')\n .required('Name is required')\n .default(''),\n\n description: Yup.string()\n .trim()\n .max(SERIES_MAX_DESCRIPTION_LENGTH, 'Description is too long')\n .default(''),\n\n rating: Yup.object()\n .shape<UpdateObjectRating>({\n id: Yup.string()\n })\n .default({})\n .noUnknown(),\n\n tallPoster: ImageValidationSchema,\n\n banner: ImageValidationSchema\n\n}).noUnknown();\n","import { CuratorUser } from 'libs/shared/interfaces';\nimport { CuratorPermissionsHelper } from 'libs/shared/utils/CuratorPermissionsHelper';\n\nimport { Actions } from 'shared/constants/CuratorActions';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { NavItem } from 'shared/interfaces';\n\nexport const SeriesNavHelper = {\n getEditSeriesTabs(currentUser: CuratorUser, seriesId: string): NavItem[] {\n const application = AppChannels.SERIES;\n const actions = Actions.Series;\n\n const tabs: NavItem[] = [\n {\n label: 'Edit Series Details',\n appLink: { application, action: actions.EDIT_SERIES, args: [seriesId]}\n },\n {\n label: 'Curation',\n appLink: { application, action: actions.EDIT_SERIES_CURATION, args: [seriesId]}\n },\n {\n label: 'Videos',\n appLink: { application, action: actions.EDIT_SERIES_VIDEOS, args: [seriesId]}\n },\n {\n label: 'Aliases',\n appLink: { application, action: actions.EDIT_SERIES_ALIASES, args: [seriesId]}\n }\n ];\n\n const canAccessSubjects = CuratorPermissionsHelper.hasSubjectsAccess(currentUser);\n\n if (canAccessSubjects)\n tabs.push(...[\n {\n label: 'Topics',\n appLink: { application, action: actions.EDIT_SERIES_SUBJECTS, args: [seriesId]}\n },\n {\n label: 'Audiences',\n appLink: { application, action: actions.EDIT_SERIES_AUDIENCES, args: [seriesId]}\n }\n ]);\n\n return tabs;\n }\n};\n","import * as React from 'react';\nimport { Form, useFormikContext } from 'formik';\n\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { useCanSubmitForm } from 'libs/shared/hooks/UseCanSubmitForm';\nimport { Rating } from 'libs/shared/interfaces';\n\nimport { ImageSelect, RatingSelect } from 'shared/components';\nimport { Actions as AppActions, AppChannels } from 'shared/constants';\n\nimport { CreateOrUpdateSeriesRequest } from 'apps/series/interfaces';\nimport { SERIES_MAX_DESCRIPTION_LENGTH } from 'apps/series/utils';\n\ninterface EditSeriesDetailsFormProps {\n ratings: Rating[];\n id?: string;\n actions?: ActionOptions[];\n}\n\nexport function EditSeriesDetailsForm(props: EditSeriesDetailsFormProps): JSX.Element {\n const formikProps = useFormikContext<CreateOrUpdateSeriesRequest>();\n\n const canSubmit = useCanSubmitForm(formikProps);\n\n return (\n <Form>\n <FormField<CreateOrUpdateSeriesRequest>\n label='Name'\n type='text'\n name='name'\n id='name'\n value={formikProps.values.name}\n placeholder='Enter a name for this series'\n autoFocus\n />\n <FormField<CreateOrUpdateSeriesRequest>\n label='Description'\n as='textarea'\n name='description'\n id='description'\n maxLength={SERIES_MAX_DESCRIPTION_LENGTH}\n value={formikProps.values.description}\n placeholder='Describe this series here'\n showCharacterCounter\n />\n <RatingSelect<CreateOrUpdateSeriesRequest> ratings={props.ratings} />\n <ImageSelect<CreateOrUpdateSeriesRequest>\n imageType={ImageType.TallPosters}\n fieldName='tallPoster'\n uploadAppLink={{ application: AppChannels.SERIES, action: AppActions.Series.UPLOAD_IMAGE }}\n canRemove\n />\n <ImageSelect<CreateOrUpdateSeriesRequest>\n imageType={ImageType.Banners}\n fieldName='banner'\n uploadAppLink={{ application: AppChannels.SERIES, action: AppActions.Playlists.UPLOAD_IMAGE }}\n canRemove\n />\n <div className='d-flex justify-content-between align-items-center'>\n <SpinnerButton showSpinner={formikProps.isSubmitting} type='submit' disabled={!canSubmit}>\n {!props.id ? 'Create' : 'Save'}\n </SpinnerButton>\n {!!props.actions && <Actions actions={props.actions} />}\n </div>\n </Form>\n );\n}\n","import * as React from 'react';\n\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { Rating, Series } from 'libs/shared/interfaces';\n\nimport { CreateOrUpdateSeriesRequest } from 'apps/series/interfaces';\nimport { SeriesValidationSchema } from 'apps/series/utils';\n\nimport { EditSeriesDetailsForm } from './EditSeriesDetailsForm';\n\ninterface EditSeriesDetailsProps {\n saveSeries: (data: CreateOrUpdateSeriesRequest, onDone: () => void) => void;\n ratings: Rating[];\n series?: Series;\n}\n\nexport function EditSeriesDetails(props: EditSeriesDetailsProps): JSX.Element {\n return (\n <FormWrapper<CreateOrUpdateSeriesRequest, Series>\n initialValues={props.series}\n validationSchema={SeriesValidationSchema}\n onSubmit={props.saveSeries}\n >\n <EditSeriesDetailsForm id={props.series && props.series.id} ratings={props.ratings} />\n </FormWrapper>\n );\n}\n","import * as React from 'react';\n\nimport { CuratorUser } from 'libs/shared/interfaces'\n;\n\nimport { Tabs } from 'shared/components';\nimport { NavItem } from 'shared/interfaces';\n\nimport { SeriesNavHelper } from 'apps/series/utils';\n\nconst isItemActive = (activeAction: string) => (item: NavItem) => item.appLink.action === activeAction;\n\ninterface EditSeriesNavProps {\n seriesId: string;\n activeAction: string;\n currentUser: CuratorUser;\n}\n\nexport function EditSeriesNav(props: EditSeriesNavProps): React.ReactElement {\n return (\n <div className='py-2'>\n <Tabs\n tabs={SeriesNavHelper.getEditSeriesTabs(props.currentUser, props.seriesId)}\n isItemActive={isItemActive(props.activeAction)}\n />\n </div>\n );\n}\n","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { RatingRequests } from 'libs/shared/flight-requests/RatingRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { CuratorUser, Rating, Series } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/CuratorActions';\nimport { AppChannels } from 'shared/constants/RadioChannels';\n\nimport { EditSeriesDetails, EditSeriesNav } from 'apps/series/components';\nimport { SeriesRequests } from 'apps/series/flight-requests/CuratorSeriesRequests';\nimport { CreateOrUpdateSeriesRequest } from 'apps/series/interfaces';\n\nfunction getLegacySeriesAppLink(seriesId: string): Core.AppLink {\n return {\n application: AppChannels.SERIES,\n action: Actions.Series.LEGACY_EDIT_SERIES,\n args: [seriesId]\n };\n}\n\ninterface EditSeriesViewProps {\n seriesId: string;\n}\n\nexport function EditSeriesView(props: EditSeriesViewProps): JSX.Element {\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const series = Flight.useBasicFetch<Series>(SeriesRequests.series(props.seriesId));\n const ratings = Flight.useBasicFetch<Rating[]>(RatingRequests.ratings());\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n\n function saveSeries(data: CreateOrUpdateSeriesRequest, onDone: () => void): void {\n /**\n * Master API now prevents 2 series from sharing the same name, although at some point it didn't.\n * So, we have a few series that have the exact same name in production, and if you try to update\n * one of those series and you pass any object fields (not assocs) in with the request body, Master will throw an\n * error because it will see that the name already exists on a different series.\n * \n * In order to allow these few series to continue being edited (other fields like poster, banner, etc)\n * we will simply not pass the the non-assoc fields unless it has actually been changed.\n */\n if (data.name === series.data.name)\n delete data.name;\n\n if (data.description === series.data.description || (!data.description && !series.data.description))\n delete data.description;\n\n const onSuccess = () => {\n alerts.success('Successfully updated series.');\n };\n\n const onError = () => {\n alerts.error('Failed to update series.');\n };\n\n Flight.fetch(dispatch, SeriesRequests.updateSeries(props.seriesId, data, onSuccess, onError, onDone));\n }\n\n return (\n <>\n {!!currentUser.data &&\n <EditSeriesNav\n seriesId={props.seriesId}\n activeAction={Actions.Series.EDIT_SERIES}\n currentUser={currentUser.data}\n />\n }\n {!!series.data && !!ratings.data &&\n <EditSeriesDetails series={series.data} saveSeries={saveSeries} ratings={ratings.data} />\n }\n <div className='py-3 text-end'>\n {'Can\\'t find what you\\'re looking for? Try the old edit series page '}\n <AppLink className='info-link' appLink={getLegacySeriesAppLink(props.seriesId)}>here</AppLink>.\n </div>\n </>\n );\n}\n","import * as React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { useBulkFetch } from 'libs/common/react/hooks/UseBulkFetch';\nimport { useFetch } from 'libs/common/react/hooks/UseFetch';\nimport { useService } from 'libs/common/react/hooks/UseService';\n\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { CuratorUser, Presentation, PresentationAudience, Series } from 'libs/shared/interfaces';\nimport { StateHelper } from 'libs/shared/utils/StateHelper';\n\nimport { ObjectHeader } from 'shared/components';\nimport { Actions, DataServices } from 'shared/constants';\nimport { SubjectMemberType } from 'shared/enums';\nimport { useSetDefaultPresentation } from 'shared/hooks';\nimport { Level } from 'shared/interfaces/models';\nimport { SubjectDataService, SubjectDataServiceHelper } from 'shared/services';\n\nimport { EditSeriesNav } from 'apps/series/components';\nimport { SeriesRequests } from 'apps/series/flight-requests/CuratorSeriesRequests';\nimport { EditObjectAudiences } from 'apps/subjects/components';\n\ninterface EditSeriesAudiencesViewState {\n presentations?: Presentation[];\n levels?: Level[];\n\n seriesLevels?: Level[];\n seriesAudiences?: PresentationAudience[];\n\n currentPresentation?: Presentation;\n presentationAudiences?: PresentationAudience[];\n}\n\ntype SetState = React.Dispatch<React.SetStateAction<EditSeriesAudiencesViewState>>;\n\nfunction useFetchData(seriesId: string, state: EditSeriesAudiencesViewState, setState: SetState): void {\n const getSetState = (key: keyof EditSeriesAudiencesViewState) => StateHelper.getSetStateByKey(setState, key);\n\n // Fetch series levels\n useFetch(\n SubjectDataServiceHelper.getObjectLevelsFetchOptions(seriesId, SubjectMemberType.Series, getSetState('seriesLevels')),\n [seriesId]\n );\n\n // Fetch series audiences\n useFetch(\n SubjectDataServiceHelper.getObjectAudiencesFetchOptions(seriesId, SubjectMemberType.Series, getSetState('seriesAudiences')),\n [ seriesId, state.seriesLevels ]\n );\n\n // Fetch presentations and levels\n useBulkFetch([\n SubjectDataServiceHelper.getPresentationsFetchOptions(getSetState('presentations'), PresentationType.Subject),\n SubjectDataServiceHelper.getLevelsFetchOptions(getSetState('levels'))\n ], []);\n\n // Fetch audiences for currentPresentation\n useFetch(\n !!state.currentPresentation && SubjectDataServiceHelper.getAudiencesFetchOptions(state.currentPresentation.id, getSetState('presentationAudiences')),\n [state.currentPresentation],\n !!state.currentPresentation\n );\n}\n\ninterface EditSeriesAudiencesViewProps {\n seriesId: string;\n}\n\nexport function EditSeriesAudiencesView(props: EditSeriesAudiencesViewProps): JSX.Element {\n const [ state, setState ] = React.useState<EditSeriesAudiencesViewState>({});\n\n const series = Flight.useBasicFetch<Series>(SeriesRequests.series(props.seriesId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n\n const subjectDataService = useService<SubjectDataService>(DataServices.SUBJECT);\n\n useFetchData(props.seriesId, state, setState);\n useSetDefaultPresentation(state, setState);\n\n const dataLoaded = !!state.presentations && !!state.levels && !!state.presentationAudiences\n && !!state.seriesLevels && !!state.seriesAudiences;\n\n return (\n <>\n {!!currentUser.data &&\n <EditSeriesNav\n seriesId={props.seriesId}\n activeAction={Actions.Series.EDIT_SERIES_AUDIENCES}\n currentUser={currentUser.data}\n />\n }\n <ObjectHeader object={series.data} />\n {!!dataLoaded &&\n <EditObjectAudiences\n objectLevels={state.seriesLevels}\n objectAudiences={state.seriesAudiences}\n presentations={state.presentations}\n currentPresentation={state.currentPresentation}\n setCurrentPresentation={StateHelper.getSetStateByKey(setState, 'currentPresentation')}\n levels={state.levels}\n presentationAudiences={state.presentationAudiences}\n memberType={SubjectMemberType.Series}\n saveLevels={(backboneAudienceIds: string[], addToAudiences: boolean, onDone: () => void) =>\n subjectDataService.updateObjectLevels(\n props.seriesId,\n backboneAudienceIds,\n SubjectMemberType.Series,\n addToAudiences,\n onDone,\n onDone\n )\n }\n saveAudiences={(audienceIds: string[], onDone: () => void) =>\n subjectDataService.updateObjectAudiences(\n props.seriesId,\n state.currentPresentation.id,\n audienceIds,\n SubjectMemberType.Series,\n onDone,\n onDone\n )\n }\n />\n }\n </>\n );\n}\n","import * as React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { useBulkFetch } from 'libs/common/react/hooks/UseBulkFetch';\nimport { useFetch } from 'libs/common/react/hooks/UseFetch';\nimport { useService } from 'libs/common/react/hooks/UseService';\n\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { Classification, CuratorUser, Presentation, Series, Subject } from 'libs/shared/interfaces';\nimport { StateHelper } from 'libs/shared/utils/StateHelper';\n\nimport { EditObjectSubjects, ObjectHeader } from 'shared/components';\nimport { Actions, DataServices } from 'shared/constants';\nimport { SubjectMemberType } from 'shared/enums';\nimport { useSetDefaultPresentation } from 'shared/hooks';\nimport { ClassificationTree, SubjectTree } from 'shared/interfaces/models';\nimport { SubjectDataService, SubjectDataServiceHelper } from 'shared/services';\n\nimport { EditSeriesNav } from 'apps/series/components';\nimport { SeriesRequests } from 'apps/series/flight-requests/CuratorSeriesRequests';\n\ninterface EditSeriesSubjectsViewState {\n seriesSubjects?: Subject[];\n subjectTree?: SubjectTree;\n subjectClassifications?: Classification[];\n\n presentations?: Presentation[];\n currentPresentation?: Presentation;\n\n classificationTree?: ClassificationTree;\n seriesClassifications?: Classification[];\n}\n\ntype SetState = React.Dispatch<React.SetStateAction<EditSeriesSubjectsViewState>>;\n\nfunction useFetchData(seriesId: string, state: EditSeriesSubjectsViewState, setState: SetState): void {\n const getSetState = (key: keyof EditSeriesSubjectsViewState) => StateHelper.getSetStateByKey(setState, key);\n\n // Fetch subject tree and presentations\n useBulkFetch([\n SubjectDataServiceHelper.getSubjectTreeFetchOptions(getSetState('subjectTree'), PresentationType.Subject),\n SubjectDataServiceHelper.getPresentationsFetchOptions(getSetState('presentations'), PresentationType.Subject)\n ], []);\n\n // Fetch series subjects\n useFetch(\n SubjectDataServiceHelper.getObjectSubjectsFetchOptions(seriesId, SubjectMemberType.Series, getSetState('seriesSubjects')),\n [seriesId]\n );\n\n // Fetch classification tree for presentation\n useFetch(\n !!state.currentPresentation && SubjectDataServiceHelper.getClassificationTreeFetchOptions(state.currentPresentation.id, getSetState('classificationTree')),\n [state.currentPresentation],\n !!state.currentPresentation\n );\n\n // Reset subjectClassifications whenever seriesSubjects changes\n React.useEffect(() => getSetState('subjectClassifications')([]), [state.seriesSubjects]);\n\n const setSubjectClassifications = (\n classifications: Classification[],\n currentState: EditSeriesSubjectsViewState\n ) => ([ ...(currentState.subjectClassifications || []), ...classifications ]);\n\n // Fetch classifications for each subject\n const subjectClassificationsFetchOptions = state.seriesSubjects && state.seriesSubjects.map(s =>\n SubjectDataServiceHelper.getSubjectClassificationFetchOptions(s.id, StateHelper.getSetStateByKey(setState, 'subjectClassifications', setSubjectClassifications)));\n\n useBulkFetch(subjectClassificationsFetchOptions, [state.seriesSubjects], !!subjectClassificationsFetchOptions);\n\n // Fetch series classifications\n useFetch(\n SubjectDataServiceHelper.getObjectClassificationsFetchOptions(seriesId, SubjectMemberType.Series, getSetState('seriesClassifications')),\n [ seriesId, state.seriesSubjects ]\n );\n}\n\ninterface EditSeriesSubjectsViewProps {\n seriesId: string;\n}\n\nexport function EditSeriesSubjectsView(props: EditSeriesSubjectsViewProps): React.ReactElement {\n const [ state, setState ] = React.useState<EditSeriesSubjectsViewState>({});\n\n const series = Flight.useBasicFetch<Series>(SeriesRequests.series(props.seriesId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n\n const subjectDataService = useService<SubjectDataService>(DataServices.SUBJECT);\n\n useFetchData(props.seriesId, state, setState);\n useSetDefaultPresentation(state, setState);\n\n const dataLoaded = !!state.seriesSubjects && !!state.subjectTree && !!state.presentations\n && !!state.classificationTree && !!state.seriesClassifications && !!state.subjectClassifications;\n\n return (\n <>\n {!!currentUser.data &&\n <EditSeriesNav\n seriesId={props.seriesId}\n activeAction={Actions.Series.EDIT_SERIES_SUBJECTS}\n currentUser={currentUser.data}\n />\n }\n <ObjectHeader object={series.data} />\n {dataLoaded &&\n <EditObjectSubjects\n objectSubjects={state.seriesSubjects}\n subjectTree={state.subjectTree}\n memberType={SubjectMemberType.Series}\n presentations={state.presentations}\n presentationType={PresentationType.Subject}\n currentPresentation={state.currentPresentation}\n setCurrentPresentation={StateHelper.getSetStateByKey(setState, 'currentPresentation')}\n objectClassifications={state.seriesClassifications}\n objectSubjectClassifications={state.subjectClassifications}\n classificationTree={state.classificationTree}\n saveSubjects={(subjectsId: string[], addToClassifications: boolean, onDone: () => void) =>\n subjectDataService.updateObjectSubjects(\n props.seriesId,\n subjectsId,\n SubjectMemberType.Series,\n addToClassifications,\n onDone,\n onDone\n )\n }\n saveClassifications={(classificationIds: string[], onDone: () => void) =>\n subjectDataService.updateObjectClassifications(\n props.seriesId,\n state.currentPresentation.id,\n classificationIds,\n\n SubjectMemberType.Series,\n onDone,\n onDone\n )\n }\n />\n }\n </>\n );\n}\n","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { AliasCollection, CuratorUser } from 'libs/shared/interfaces';\n\nimport { Aliases } from 'shared/components/aliases';\nimport { Actions } from 'shared/constants';\nimport { AliasesRequests } from 'shared/flight-requests/AliasRequests';\nimport { CreateAliasRequest } from 'shared/interfaces';\n\nimport { EditSeriesNav } from 'apps/series/components';\n\ninterface EditSeriesAliasesViewProps {\n seriesId: string;\n}\n\nexport function EditSeriesAliasesView(props: EditSeriesAliasesViewProps): JSX.Element {\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const aliases = Flight.useBasicFetch<AliasCollection>(AliasesRequests.getAliases(props.seriesId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n\n function createAlias(alias: CreateAliasRequest, success: () => void): void {\n Flight.fetch(dispatch, AliasesRequests.createAlias(props.seriesId, alias, () => {\n alerts.success('Successfully created alias');\n success();\n }, () => {\n alerts.error('Something went wrong creating your alias');\n }));\n }\n\n function deleteAlias(id: string): void {\n Flight.fetch(dispatch, AliasesRequests.deleteAlias(props.seriesId, id, () => {\n alerts.success('Successfully deleted alias');\n }, () => {\n alerts.error('Something went wrong deleting your alias');\n }));\n }\n\n if (!aliases.data || !currentUser.data) {\n return <>Loading...</>;\n }\n\n return (\n <>\n <EditSeriesNav\n seriesId={props.seriesId}\n activeAction={Actions.Series.EDIT_SERIES_ALIASES}\n currentUser={currentUser.data}\n />\n <Aliases\n aliases={aliases.data.data}\n onSave={createAlias}\n onDelete={deleteAlias}\n />\n </>\n );\n}\n","import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { PublicWithStatement, SharedWithStatements } from 'libs/shared/constants/WithStatements';\nimport { VideoSortType } from 'libs/shared/enums/VideoSortType';\nimport { VideoSortHelper } from 'libs/shared/utils/VideoSortHelper';\n\nconst endpoints = {\n sharedSeries: (id: string, shareId: string) => UrlHelper.urlBuilder(`/api/objects/${id}`, {\n query: SharedWithStatements.SERIES,\n shareId\n }),\n seriesWithVideos: (id: string, videoCount: number = 3) => {\n return `{gateway}/v1/objects/${id}?query=banner,videos[season,thumbnail,_canBeConsumed]{limit:${videoCount}}`;\n }\n};\n\nexport const SeriesRequests = {\n series(id: string): Flight.PublicRequest {\n const queryStringObj = { query: SharedWithStatements.SERIES };\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${id}`, queryStringObj),\n publicUrl: UrlHelper.urlBuilder(`/api/objects/${id}`, queryStringObj),\n key: `series:${id}`\n };\n },\n sharedSeries(id: string, shareId: string): Flight.Request {\n return {\n url: endpoints.sharedSeries(id, shareId),\n key: `shared:series:${id}:${shareId}`\n };\n },\n seriesWithVideos(id: string, videoCount: number = 3): Flight.Request {\n return {\n url: endpoints.seriesWithVideos(id, videoCount),\n key: `series:${id}:with:videos:${videoCount}`\n };\n },\n seriesWithThumbnailAndCount(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}?query=videos[season,thumbnail,_canBeConsumed,count()]{limit:1}`,\n key: `series:${id}:thumbnail:count`\n };\n },\n seriesVideos(id: string, userId?: string, sort?: VideoSortType, cursor?: string): Flight.PublicRequest {\n const sortFilter = VideoSortHelper.getVideoSortParam(sort);\n\n const key = [ 'series', id, 'videos', cursor, sort ].filter(k => !!k).join(':');\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/collections/${id}/videos`, {\n query: `{${sortFilter}}${SharedWithStatements.VIDEO_COLLECTION}`,\n cursor\n }),\n publicUrl: UrlHelper.urlBuilder(`/api/objects/collections/${id}/videos`, {\n query: `{${sortFilter}}${PublicWithStatement.VIDEO_COLLECTION}`,\n cursor\n }),\n key\n };\n }\n};\n","import React from 'react';\n\nimport { useGetFetch } from 'libs/common/react/flight';\nimport { Flight } from 'libs/common/react/index';\n\nimport { SeriesRequests } from 'libs/shared/flight-requests/SeriesRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { CuratorUser, Series, Tag } from 'libs/shared/interfaces';\n\nimport { CurationTags } from 'shared/components/curation-tags/CurationTags';\nimport { Actions } from 'shared/constants';\nimport { TagRequests } from 'shared/flight-requests/TagRequests';\n\nimport { EditSeriesNav } from 'apps/series/components';\n\ninterface EditSeriesCurationView {\n seriesId: string;\n}\n\nexport function EditSeriesCurationView(props: EditSeriesCurationView) {\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n const series = Flight.useBasicFetch<Series>(SeriesRequests.series(props.seriesId));\n\n const allCurationTags = Flight.useBasicFetch<Tag[]>(TagRequests.curationTags());\n const selectedCurationTags = Flight.useBasicFetch<Tag[]>(TagRequests.selectedCurationTags(props.seriesId));\n const fetch = useGetFetch();\n\n function addCurationTag(tag: Tag, success: () => void, error: () => void) {\n fetch(TagRequests.addTag(props.seriesId, tag, success, error));\n }\n\n function removeCurationTag(tag: Tag, success: () => void, error: () => void) {\n fetch(TagRequests.removeTag(props.seriesId, tag, success, error));\n }\n\n return (\n <>\n {!!currentUser.data &&\n <EditSeriesNav\n seriesId={props.seriesId}\n activeAction={Actions.Series.EDIT_SERIES_CURATION}\n currentUser={currentUser.data}\n />\n }\n {!!series.data && !!allCurationTags.data && !!selectedCurationTags.data &&\n <CurationTags\n id={props.seriesId}\n heading={series.data.name}\n curationTags={allCurationTags.data}\n selectedCurationTags={selectedCurationTags.data}\n addCurationTag={addCurationTag}\n removeCurationTag={removeCurationTag}\n disableClickViewCurated\n />\n }\n </>\n );\n}\n","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { RatingRequests } from 'libs/shared/flight-requests/RatingRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Rating, Series } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/CuratorActions';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { PermissionsHelper } from 'shared/utils/PermissionsHelper';\n\nimport { EditSeriesDetails } from 'apps/series/components';\nimport { SeriesRequests } from 'apps/series/flight-requests/CuratorSeriesRequests';\nimport { CreateOrUpdateSeriesRequest } from 'apps/series/interfaces';\n\nfunction goToSeries(series: Series): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.SERIES,\n action: Actions.Series.EDIT_SERIES,\n args: [series.id]\n });\n}\n\nexport function NewSeriesView(): JSX.Element {\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const ratings = Flight.useBasicFetch<Rating[]>(RatingRequests.ratings());\n\n function createSeries(data: CreateOrUpdateSeriesRequest, onDone: () => void): void {\n const onError = () => {\n alerts.error('Failed to create series.');\n };\n\n const onUpdateSuccess = (series: Series) => {\n alerts.success('Successfully created series.');\n goToSeries(series);\n };\n\n const onCreateSuccess = (series: Series) => {\n const permissionsData = { permissions: PermissionsHelper.getProtectedReadPermission() };\n Flight.fetch(dispatch, SeriesRequests.updateSeries(series.id, permissionsData, onUpdateSuccess, onError, onDone));\n };\n\n Flight.fetch(dispatch, SeriesRequests.createSeries(data, onCreateSuccess, onError));\n }\n\n return (\n <>\n {!!ratings.data && <EditSeriesDetails saveSeries={createSeries} ratings={ratings.data} />}\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"DHa-x1js2.chunk.js","names":[],"sources":["../../../../../src/apps/series/utils/validation/SeriesValidation.ts","../../../../../src/apps/series/utils/SeriesNavHelper.ts","../../../../../src/apps/series/components/edit-series-details/EditSeriesDetailsForm.tsx","../../../../../src/apps/series/components/edit-series-details/EditSeriesDetails.tsx","../../../../../src/apps/series/components/edit-series-nav/EditSeriesNav.tsx","../../../../../src/apps/series/views/edit-series/EditSeriesView.tsx","../../../../../src/apps/series/views/edit-series-audiences/EditSeriesAudiencesView.tsx","../../../../../src/apps/series/views/edit-series-subjects/EditSeriesSubjectsView.tsx","../../../../../src/apps/series/views/edit-series-aliases/EditSeriesAliasesView.tsx","../../../../../../../libs/shared/src/flight-requests/SeriesRequests.ts","../../../../../src/apps/series/views/edit-series-curation/EditSeriesCurationView.tsx","../../../../../src/apps/series/views/new-series/NewSeriesView.tsx"],"sourcesContent":["import * as Yup from 'yup';\n\nimport { UpdateObjectRating } from 'libs/shared/interfaces';\n\nimport { ImageValidationSchema } from 'shared/utils/validation/ImageValidationSchema';\n\nimport { CreateOrUpdateSeriesRequest } from 'apps/series/interfaces';\n\nexport const SERIES_MAX_DESCRIPTION_LENGTH = 350;\n\nexport const SeriesValidationSchema = Yup.object().shape<CreateOrUpdateSeriesRequest>({\n name: Yup.string()\n .trim()\n .max(255, 'Name is too long')\n .required('Name is required')\n .default(''),\n\n description: Yup.string()\n .trim()\n .max(SERIES_MAX_DESCRIPTION_LENGTH, 'Description is too long')\n .default(''),\n\n rating: Yup.object()\n .shape<UpdateObjectRating>({\n id: Yup.string()\n })\n .default({})\n .noUnknown(),\n\n tallPoster: ImageValidationSchema,\n\n banner: ImageValidationSchema\n\n}).noUnknown();\n","import { CuratorUser } from 'libs/shared/interfaces';\nimport { CuratorPermissionsHelper } from 'libs/shared/utils/CuratorPermissionsHelper';\n\nimport { Actions } from 'shared/constants/CuratorActions';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { NavItem } from 'shared/interfaces';\n\nexport const SeriesNavHelper = {\n getEditSeriesTabs(currentUser: CuratorUser, seriesId: string): NavItem[] {\n const application = AppChannels.SERIES;\n const actions = Actions.Series;\n\n const tabs: NavItem[] = [\n {\n label: 'Edit Series Details',\n appLink: { application, action: actions.EDIT_SERIES, args: [seriesId]}\n },\n {\n label: 'Curation',\n appLink: { application, action: actions.EDIT_SERIES_CURATION, args: [seriesId]}\n },\n {\n label: 'Videos',\n appLink: { application, action: actions.EDIT_SERIES_VIDEOS, args: [seriesId]}\n },\n {\n label: 'Aliases',\n appLink: { application, action: actions.EDIT_SERIES_ALIASES, args: [seriesId]}\n }\n ];\n\n const canAccessSubjects = CuratorPermissionsHelper.hasSubjectsAccess(currentUser);\n\n if (canAccessSubjects)\n tabs.push(...[\n {\n label: 'Topics',\n appLink: { application, action: actions.EDIT_SERIES_SUBJECTS, args: [seriesId]}\n },\n {\n label: 'Audiences',\n appLink: { application, action: actions.EDIT_SERIES_AUDIENCES, args: [seriesId]}\n }\n ]);\n\n return tabs;\n }\n};\n","import * as React from 'react';\nimport { Form, useFormikContext } from 'formik';\n\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { useCanSubmitForm } from 'libs/shared/hooks/UseCanSubmitForm';\nimport { Rating } from 'libs/shared/interfaces';\n\nimport { ImageSelect, RatingSelect } from 'shared/components';\nimport { Actions as AppActions, AppChannels } from 'shared/constants';\n\nimport { CreateOrUpdateSeriesRequest } from 'apps/series/interfaces';\nimport { SERIES_MAX_DESCRIPTION_LENGTH } from 'apps/series/utils';\n\ninterface EditSeriesDetailsFormProps {\n ratings: Rating[];\n id?: string;\n actions?: ActionOptions[];\n}\n\nexport function EditSeriesDetailsForm(props: EditSeriesDetailsFormProps): JSX.Element {\n const formikProps = useFormikContext<CreateOrUpdateSeriesRequest>();\n\n const canSubmit = useCanSubmitForm(formikProps);\n\n return (\n <Form>\n <FormField<CreateOrUpdateSeriesRequest>\n label='Name'\n type='text'\n name='name'\n id='name'\n value={formikProps.values.name}\n placeholder='Enter a name for this series'\n autoFocus\n />\n <FormField<CreateOrUpdateSeriesRequest>\n label='Description'\n as='textarea'\n name='description'\n id='description'\n maxLength={SERIES_MAX_DESCRIPTION_LENGTH}\n value={formikProps.values.description}\n placeholder='Describe this series here'\n showCharacterCounter\n />\n <RatingSelect<CreateOrUpdateSeriesRequest> ratings={props.ratings} />\n <ImageSelect<CreateOrUpdateSeriesRequest>\n imageType={ImageType.TallPosters}\n fieldName='tallPoster'\n uploadAppLink={{ application: AppChannels.SERIES, action: AppActions.Series.UPLOAD_IMAGE }}\n canRemove\n />\n <ImageSelect<CreateOrUpdateSeriesRequest>\n imageType={ImageType.Banners}\n fieldName='banner'\n uploadAppLink={{ application: AppChannels.SERIES, action: AppActions.Playlists.UPLOAD_IMAGE }}\n canRemove\n />\n <div className='d-flex justify-content-between align-items-center'>\n <SpinnerButton showSpinner={formikProps.isSubmitting} type='submit' disabled={!canSubmit}>\n {!props.id ? 'Create' : 'Save'}\n </SpinnerButton>\n {!!props.actions && <Actions actions={props.actions} />}\n </div>\n </Form>\n );\n}\n","import * as React from 'react';\n\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { Rating, Series } from 'libs/shared/interfaces';\n\nimport { CreateOrUpdateSeriesRequest } from 'apps/series/interfaces';\nimport { SeriesValidationSchema } from 'apps/series/utils';\n\nimport { EditSeriesDetailsForm } from './EditSeriesDetailsForm';\n\ninterface EditSeriesDetailsProps {\n saveSeries: (data: CreateOrUpdateSeriesRequest, onDone: () => void) => void;\n ratings: Rating[];\n series?: Series;\n}\n\nexport function EditSeriesDetails(props: EditSeriesDetailsProps): JSX.Element {\n return (\n <FormWrapper<CreateOrUpdateSeriesRequest, Series>\n initialValues={props.series}\n validationSchema={SeriesValidationSchema}\n onSubmit={props.saveSeries}\n >\n <EditSeriesDetailsForm id={props.series && props.series.id} ratings={props.ratings} />\n </FormWrapper>\n );\n}\n","import * as React from 'react';\n\nimport { CuratorUser } from 'libs/shared/interfaces'\n;\n\nimport { Tabs } from 'shared/components';\nimport { NavItem } from 'shared/interfaces';\n\nimport { SeriesNavHelper } from 'apps/series/utils';\n\nconst isItemActive = (activeAction: string) => (item: NavItem) => item.appLink.action === activeAction;\n\ninterface EditSeriesNavProps {\n seriesId: string;\n activeAction: string;\n currentUser: CuratorUser;\n}\n\nexport function EditSeriesNav(props: EditSeriesNavProps): React.ReactElement {\n return (\n <div className='py-2'>\n <Tabs\n tabs={SeriesNavHelper.getEditSeriesTabs(props.currentUser, props.seriesId)}\n isItemActive={isItemActive(props.activeAction)}\n />\n </div>\n );\n}\n","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { RatingRequests } from 'libs/shared/flight-requests/RatingRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { CuratorUser, Rating, Series } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/CuratorActions';\nimport { AppChannels } from 'shared/constants/RadioChannels';\n\nimport { EditSeriesDetails, EditSeriesNav } from 'apps/series/components';\nimport { SeriesRequests } from 'apps/series/flight-requests/CuratorSeriesRequests';\nimport { CreateOrUpdateSeriesRequest } from 'apps/series/interfaces';\n\nfunction getLegacySeriesAppLink(seriesId: string): Core.AppLink {\n return {\n application: AppChannels.SERIES,\n action: Actions.Series.LEGACY_EDIT_SERIES,\n args: [seriesId]\n };\n}\n\ninterface EditSeriesViewProps {\n seriesId: string;\n}\n\nexport function EditSeriesView(props: EditSeriesViewProps): JSX.Element {\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const series = Flight.useBasicFetch<Series>(SeriesRequests.series(props.seriesId));\n const ratings = Flight.useBasicFetch<Rating[]>(RatingRequests.ratings());\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n\n function saveSeries(data: CreateOrUpdateSeriesRequest, onDone: () => void): void {\n /**\n * Master API now prevents 2 series from sharing the same name, although at some point it didn't.\n * So, we have a few series that have the exact same name in production, and if you try to update\n * one of those series and you pass any object fields (not assocs) in with the request body, Master will throw an\n * error because it will see that the name already exists on a different series.\n * \n * In order to allow these few series to continue being edited (other fields like poster, banner, etc)\n * we will simply not pass the the non-assoc fields unless it has actually been changed.\n */\n if (data.name === series.data.name)\n delete data.name;\n\n if (data.description === series.data.description || (!data.description && !series.data.description))\n delete data.description;\n\n const onSuccess = () => {\n alerts.success('Successfully updated series.');\n };\n\n const onError = () => {\n alerts.error('Failed to update series.');\n };\n\n Flight.fetch(dispatch, SeriesRequests.updateSeries(props.seriesId, data, onSuccess, onError, onDone));\n }\n\n return (\n <>\n {!!currentUser.data &&\n <EditSeriesNav\n seriesId={props.seriesId}\n activeAction={Actions.Series.EDIT_SERIES}\n currentUser={currentUser.data}\n />\n }\n {!!series.data && !!ratings.data &&\n <EditSeriesDetails series={series.data} saveSeries={saveSeries} ratings={ratings.data} />\n }\n <div className='py-3 text-end'>\n {'Can\\'t find what you\\'re looking for? Try the old edit series page '}\n <AppLink className='info-link' appLink={getLegacySeriesAppLink(props.seriesId)}>here</AppLink>.\n </div>\n </>\n );\n}\n","import * as React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { useBulkFetch } from 'libs/common/react/hooks/UseBulkFetch';\nimport { useFetch } from 'libs/common/react/hooks/UseFetch';\nimport { useService } from 'libs/common/react/hooks/UseService';\n\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { CuratorUser, Presentation, PresentationAudience, Series } from 'libs/shared/interfaces';\nimport { StateHelper } from 'libs/shared/utils/StateHelper';\n\nimport { ObjectHeader } from 'shared/components';\nimport { Actions, DataServices } from 'shared/constants';\nimport { SubjectMemberType } from 'shared/enums';\nimport { useSetDefaultPresentation } from 'shared/hooks';\nimport { Level } from 'shared/interfaces/models';\nimport { SubjectDataService, SubjectDataServiceHelper } from 'shared/services';\n\nimport { EditSeriesNav } from 'apps/series/components';\nimport { SeriesRequests } from 'apps/series/flight-requests/CuratorSeriesRequests';\nimport { EditObjectAudiences } from 'apps/subjects/components';\n\ninterface EditSeriesAudiencesViewState {\n presentations?: Presentation[];\n levels?: Level[];\n\n seriesLevels?: Level[];\n seriesAudiences?: PresentationAudience[];\n\n currentPresentation?: Presentation;\n presentationAudiences?: PresentationAudience[];\n}\n\ntype SetState = React.Dispatch<React.SetStateAction<EditSeriesAudiencesViewState>>;\n\nfunction useFetchData(seriesId: string, state: EditSeriesAudiencesViewState, setState: SetState): void {\n const getSetState = (key: keyof EditSeriesAudiencesViewState) => StateHelper.getSetStateByKey(setState, key);\n\n // Fetch series levels\n useFetch(\n SubjectDataServiceHelper.getObjectLevelsFetchOptions(seriesId, SubjectMemberType.Series, getSetState('seriesLevels')),\n [seriesId]\n );\n\n // Fetch series audiences\n useFetch(\n SubjectDataServiceHelper.getObjectAudiencesFetchOptions(seriesId, SubjectMemberType.Series, getSetState('seriesAudiences')),\n [ seriesId, state.seriesLevels ]\n );\n\n // Fetch presentations and levels\n useBulkFetch([\n SubjectDataServiceHelper.getPresentationsFetchOptions(getSetState('presentations'), PresentationType.Subject),\n SubjectDataServiceHelper.getLevelsFetchOptions(getSetState('levels'))\n ], []);\n\n // Fetch audiences for currentPresentation\n useFetch(\n !!state.currentPresentation && SubjectDataServiceHelper.getAudiencesFetchOptions(state.currentPresentation.id, getSetState('presentationAudiences')),\n [state.currentPresentation],\n !!state.currentPresentation\n );\n}\n\ninterface EditSeriesAudiencesViewProps {\n seriesId: string;\n}\n\nexport function EditSeriesAudiencesView(props: EditSeriesAudiencesViewProps): JSX.Element {\n const [ state, setState ] = React.useState<EditSeriesAudiencesViewState>({});\n\n const series = Flight.useBasicFetch<Series>(SeriesRequests.series(props.seriesId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n\n const subjectDataService = useService<SubjectDataService>(DataServices.SUBJECT);\n\n useFetchData(props.seriesId, state, setState);\n useSetDefaultPresentation(state, setState);\n\n const dataLoaded = !!state.presentations && !!state.levels && !!state.presentationAudiences\n && !!state.seriesLevels && !!state.seriesAudiences;\n\n return (\n <>\n {!!currentUser.data &&\n <EditSeriesNav\n seriesId={props.seriesId}\n activeAction={Actions.Series.EDIT_SERIES_AUDIENCES}\n currentUser={currentUser.data}\n />\n }\n <ObjectHeader object={series.data} />\n {!!dataLoaded &&\n <EditObjectAudiences\n objectLevels={state.seriesLevels}\n objectAudiences={state.seriesAudiences}\n presentations={state.presentations}\n currentPresentation={state.currentPresentation}\n setCurrentPresentation={StateHelper.getSetStateByKey(setState, 'currentPresentation')}\n levels={state.levels}\n presentationAudiences={state.presentationAudiences}\n memberType={SubjectMemberType.Series}\n saveLevels={(backboneAudienceIds: string[], addToAudiences: boolean, onDone: () => void) =>\n subjectDataService.updateObjectLevels(\n props.seriesId,\n backboneAudienceIds,\n SubjectMemberType.Series,\n addToAudiences,\n onDone,\n onDone\n )\n }\n saveAudiences={(audienceIds: string[], onDone: () => void) =>\n subjectDataService.updateObjectAudiences(\n props.seriesId,\n state.currentPresentation.id,\n audienceIds,\n SubjectMemberType.Series,\n onDone,\n onDone\n )\n }\n />\n }\n </>\n );\n}\n","import * as React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { useBulkFetch } from 'libs/common/react/hooks/UseBulkFetch';\nimport { useFetch } from 'libs/common/react/hooks/UseFetch';\nimport { useService } from 'libs/common/react/hooks/UseService';\n\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { Classification, CuratorUser, Presentation, Series, Subject } from 'libs/shared/interfaces';\nimport { StateHelper } from 'libs/shared/utils/StateHelper';\n\nimport { EditObjectSubjects, ObjectHeader } from 'shared/components';\nimport { Actions, DataServices } from 'shared/constants';\nimport { SubjectMemberType } from 'shared/enums';\nimport { useSetDefaultPresentation } from 'shared/hooks';\nimport { ClassificationTree, SubjectTree } from 'shared/interfaces/models';\nimport { SubjectDataService, SubjectDataServiceHelper } from 'shared/services';\n\nimport { EditSeriesNav } from 'apps/series/components';\nimport { SeriesRequests } from 'apps/series/flight-requests/CuratorSeriesRequests';\n\ninterface EditSeriesSubjectsViewState {\n seriesSubjects?: Subject[];\n subjectTree?: SubjectTree;\n subjectClassifications?: Classification[];\n\n presentations?: Presentation[];\n currentPresentation?: Presentation;\n\n classificationTree?: ClassificationTree;\n seriesClassifications?: Classification[];\n}\n\ntype SetState = React.Dispatch<React.SetStateAction<EditSeriesSubjectsViewState>>;\n\nfunction useFetchData(seriesId: string, state: EditSeriesSubjectsViewState, setState: SetState): void {\n const getSetState = (key: keyof EditSeriesSubjectsViewState) => StateHelper.getSetStateByKey(setState, key);\n\n // Fetch subject tree and presentations\n useBulkFetch([\n SubjectDataServiceHelper.getSubjectTreeFetchOptions(getSetState('subjectTree'), PresentationType.Subject),\n SubjectDataServiceHelper.getPresentationsFetchOptions(getSetState('presentations'), PresentationType.Subject)\n ], []);\n\n // Fetch series subjects\n useFetch(\n SubjectDataServiceHelper.getObjectSubjectsFetchOptions(seriesId, SubjectMemberType.Series, getSetState('seriesSubjects')),\n [seriesId]\n );\n\n // Fetch classification tree for presentation\n useFetch(\n !!state.currentPresentation && SubjectDataServiceHelper.getClassificationTreeFetchOptions(state.currentPresentation.id, getSetState('classificationTree')),\n [state.currentPresentation],\n !!state.currentPresentation\n );\n\n // Reset subjectClassifications whenever seriesSubjects changes\n React.useEffect(() => getSetState('subjectClassifications')([]), [state.seriesSubjects]);\n\n const setSubjectClassifications = (\n classifications: Classification[],\n currentState: EditSeriesSubjectsViewState\n ) => ([ ...(currentState.subjectClassifications || []), ...classifications ]);\n\n // Fetch classifications for each subject\n const subjectClassificationsFetchOptions = state.seriesSubjects && state.seriesSubjects.map(s =>\n SubjectDataServiceHelper.getSubjectClassificationFetchOptions(s.id, StateHelper.getSetStateByKey(setState, 'subjectClassifications', setSubjectClassifications)));\n\n useBulkFetch(subjectClassificationsFetchOptions, [state.seriesSubjects], !!subjectClassificationsFetchOptions);\n\n // Fetch series classifications\n useFetch(\n SubjectDataServiceHelper.getObjectClassificationsFetchOptions(seriesId, SubjectMemberType.Series, getSetState('seriesClassifications')),\n [ seriesId, state.seriesSubjects ]\n );\n}\n\ninterface EditSeriesSubjectsViewProps {\n seriesId: string;\n}\n\nexport function EditSeriesSubjectsView(props: EditSeriesSubjectsViewProps): React.ReactElement {\n const [ state, setState ] = React.useState<EditSeriesSubjectsViewState>({});\n\n const series = Flight.useBasicFetch<Series>(SeriesRequests.series(props.seriesId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n\n const subjectDataService = useService<SubjectDataService>(DataServices.SUBJECT);\n\n useFetchData(props.seriesId, state, setState);\n useSetDefaultPresentation(state, setState);\n\n const dataLoaded = !!state.seriesSubjects && !!state.subjectTree && !!state.presentations\n && !!state.classificationTree && !!state.seriesClassifications && !!state.subjectClassifications;\n\n return (\n <>\n {!!currentUser.data &&\n <EditSeriesNav\n seriesId={props.seriesId}\n activeAction={Actions.Series.EDIT_SERIES_SUBJECTS}\n currentUser={currentUser.data}\n />\n }\n <ObjectHeader object={series.data} />\n {dataLoaded &&\n <EditObjectSubjects\n objectSubjects={state.seriesSubjects}\n subjectTree={state.subjectTree}\n memberType={SubjectMemberType.Series}\n presentations={state.presentations}\n presentationType={PresentationType.Subject}\n currentPresentation={state.currentPresentation}\n setCurrentPresentation={StateHelper.getSetStateByKey(setState, 'currentPresentation')}\n objectClassifications={state.seriesClassifications}\n objectSubjectClassifications={state.subjectClassifications}\n classificationTree={state.classificationTree}\n saveSubjects={(subjectsId: string[], addToClassifications: boolean, onDone: () => void) =>\n subjectDataService.updateObjectSubjects(\n props.seriesId,\n subjectsId,\n SubjectMemberType.Series,\n addToClassifications,\n onDone,\n onDone\n )\n }\n saveClassifications={(classificationIds: string[], onDone: () => void) =>\n subjectDataService.updateObjectClassifications(\n props.seriesId,\n state.currentPresentation.id,\n classificationIds,\n\n SubjectMemberType.Series,\n onDone,\n onDone\n )\n }\n />\n }\n </>\n );\n}\n","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { AliasCollection, CuratorUser } from 'libs/shared/interfaces';\n\nimport { Aliases } from 'shared/components/aliases';\nimport { Actions } from 'shared/constants';\nimport { AliasesRequests } from 'shared/flight-requests/AliasRequests';\nimport { CreateAliasRequest } from 'shared/interfaces';\n\nimport { EditSeriesNav } from 'apps/series/components';\n\ninterface EditSeriesAliasesViewProps {\n seriesId: string;\n}\n\nexport function EditSeriesAliasesView(props: EditSeriesAliasesViewProps): JSX.Element {\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const aliases = Flight.useBasicFetch<AliasCollection>(AliasesRequests.getAliases(props.seriesId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n\n function createAlias(alias: CreateAliasRequest, success: () => void): void {\n Flight.fetch(dispatch, AliasesRequests.createAlias(props.seriesId, alias, () => {\n alerts.success('Successfully created alias');\n success();\n }, () => {\n alerts.error('Something went wrong creating your alias');\n }));\n }\n\n function deleteAlias(id: string): void {\n Flight.fetch(dispatch, AliasesRequests.deleteAlias(props.seriesId, id, () => {\n alerts.success('Successfully deleted alias');\n }, () => {\n alerts.error('Something went wrong deleting your alias');\n }));\n }\n\n if (!aliases.data || !currentUser.data) {\n return <>Loading...</>;\n }\n\n return (\n <>\n <EditSeriesNav\n seriesId={props.seriesId}\n activeAction={Actions.Series.EDIT_SERIES_ALIASES}\n currentUser={currentUser.data}\n />\n <Aliases\n aliases={aliases.data.data}\n onSave={createAlias}\n onDelete={deleteAlias}\n />\n </>\n );\n}\n","import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { PublicWithStatement, SharedWithStatements } from 'libs/shared/constants/WithStatements';\nimport { VideoSortType } from 'libs/shared/enums/VideoSortType';\nimport { VideoSortHelper } from 'libs/shared/utils/VideoSortHelper';\n\nconst endpoints = {\n sharedSeries: (id: string, shareId: string) => UrlHelper.urlBuilder(`/api/objects/${id}`, {\n query: SharedWithStatements.SERIES,\n shareId\n }),\n seriesWithVideos: (id: string, videoCount: number = 3) => {\n return `{gateway}/v1/objects/${id}?query=banner,videos[season,thumbnail,_canBeConsumed]{limit:${videoCount}}`;\n }\n};\n\nexport const SeriesRequests = {\n series(id: string): Flight.PublicRequest {\n const queryStringObj = { query: SharedWithStatements.SERIES };\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${id}`, queryStringObj),\n publicUrl: UrlHelper.urlBuilder(`/api/objects/${id}`, queryStringObj),\n key: `series:${id}`\n };\n },\n sharedSeries(id: string, shareId: string): Flight.Request {\n return {\n url: endpoints.sharedSeries(id, shareId),\n key: `shared:series:${id}:${shareId}`\n };\n },\n seriesWithVideos(id: string, videoCount: number = 3): Flight.Request {\n return {\n url: endpoints.seriesWithVideos(id, videoCount),\n key: `series:${id}:with:videos:${videoCount}`\n };\n },\n seriesWithThumbnailAndCount(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}?query=videos[season,thumbnail,_canBeConsumed,count()]{limit:1}`,\n key: `series:${id}:thumbnail:count`\n };\n },\n seriesVideos(id: string, userId?: string, sort?: VideoSortType, cursor?: string): Flight.PublicRequest {\n const sortFilter = VideoSortHelper.getVideoSortParam(sort);\n\n const key = [ 'series', id, 'videos', cursor, sort ].filter(k => !!k).join(':');\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/collections/${id}/videos`, {\n query: `{${sortFilter}}${SharedWithStatements.VIDEO_COLLECTION}`,\n cursor\n }),\n publicUrl: UrlHelper.urlBuilder(`/api/objects/collections/${id}/videos`, {\n query: `{${sortFilter}}${PublicWithStatement.VIDEO_COLLECTION}`,\n cursor\n }),\n key\n };\n }\n};\n","import React from 'react';\n\nimport { useGetFetch } from 'libs/common/react/flight';\nimport { Flight } from 'libs/common/react/index';\n\nimport { SeriesRequests } from 'libs/shared/flight-requests/SeriesRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { CuratorUser, Series, Tag } from 'libs/shared/interfaces';\n\nimport { CurationTags } from 'shared/components/curation-tags/CurationTags';\nimport { Actions } from 'shared/constants';\nimport { TagRequests } from 'shared/flight-requests/TagRequests';\n\nimport { EditSeriesNav } from 'apps/series/components';\n\ninterface EditSeriesCurationView {\n seriesId: string;\n}\n\nexport function EditSeriesCurationView(props: EditSeriesCurationView) {\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n const series = Flight.useBasicFetch<Series>(SeriesRequests.series(props.seriesId));\n\n const allCurationTags = Flight.useBasicFetch<Tag[]>(TagRequests.curationTags());\n const selectedCurationTags = Flight.useBasicFetch<Tag[]>(TagRequests.selectedCurationTags(props.seriesId));\n const fetch = useGetFetch();\n\n function addCurationTag(tag: Tag, success: () => void, error: () => void) {\n fetch(TagRequests.addTag(props.seriesId, tag, success, error));\n }\n\n function removeCurationTag(tag: Tag, success: () => void, error: () => void) {\n fetch(TagRequests.removeTag(props.seriesId, tag, success, error));\n }\n\n return (\n <>\n {!!currentUser.data &&\n <EditSeriesNav\n seriesId={props.seriesId}\n activeAction={Actions.Series.EDIT_SERIES_CURATION}\n currentUser={currentUser.data}\n />\n }\n {!!series.data && !!allCurationTags.data && !!selectedCurationTags.data &&\n <CurationTags\n id={props.seriesId}\n heading={series.data.name}\n curationTags={allCurationTags.data}\n selectedCurationTags={selectedCurationTags.data}\n addCurationTag={addCurationTag}\n removeCurationTag={removeCurationTag}\n disableClickViewCurated\n />\n }\n </>\n );\n}\n","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { RatingRequests } from 'libs/shared/flight-requests/RatingRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Rating, Series } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/CuratorActions';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { PermissionsHelper } from 'shared/utils/PermissionsHelper';\n\nimport { EditSeriesDetails } from 'apps/series/components';\nimport { SeriesRequests } from 'apps/series/flight-requests/CuratorSeriesRequests';\nimport { CreateOrUpdateSeriesRequest } from 'apps/series/interfaces';\n\nfunction goToSeries(series: Series): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.SERIES,\n action: Actions.Series.EDIT_SERIES,\n args: [series.id]\n });\n}\n\nexport function NewSeriesView(): JSX.Element {\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const ratings = Flight.useBasicFetch<Rating[]>(RatingRequests.ratings());\n\n function createSeries(data: CreateOrUpdateSeriesRequest, onDone: () => void): void {\n const onError = () => {\n alerts.error('Failed to create series.');\n };\n\n const onUpdateSuccess = (series: Series) => {\n alerts.success('Successfully created series.');\n goToSeries(series);\n };\n\n const onCreateSuccess = (series: Series) => {\n const permissionsData = { permissions: PermissionsHelper.getProtectedReadPermission() };\n Flight.fetch(dispatch, SeriesRequests.updateSeries(series.id, permissionsData, onUpdateSuccess, onError, onDone));\n };\n\n Flight.fetch(dispatch, SeriesRequests.createSeries(data, onCreateSuccess, onError));\n }\n\n return (\n <>\n {!!ratings.data && <EditSeriesDetails saveSeries={createSeries} ratings={ratings.data} />}\n </>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{D as e,a as t,i as n,ln as r}from"./rp704-Pm.chunk.js";import{n as i}from"./CFoexGFe.chunk.js";import{t as a}from"./UCDGupVs.chunk.js";import{G as o}from"./C7Gmh7eY.chunk.js";import{t as s}from"./CLCeObem2.chunk.js";import{n as ee}from"./D-JsEiDq2.chunk.js";import{t as c}from"./C5o897T82.chunk.js";import{n as te}from"./CbiGs3Tn.chunk.js";import{n as l}from"./CsF4wDV1.chunk.js";import{s as u,u as d}from"./Dgk5cBBe.chunk.js";import{t as f}from"./DpqbC5uX.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as p}from"./BDwjs8qz.chunk.js";import{t as m}from"./Lh2c_aQx2.chunk.js";import{t as h}from"./Bwpvc7Th2.chunk.js";import{t as g}from"./DkmqWelt2.chunk.js";import{t as _}from"./j6NQVjZx2.chunk.js";import{t as v}from"./CZyPFSXo.chunk.js";import{t as ne}from"./dKyhMawf.chunk.js";import{t as re}from"./BoEge6tK.chunk.js";import{t as ie}from"./DwibXbjb.chunk.js";import{n as ae}from"./BJNKTs8z2.chunk.js";import{t as y}from"./JmL1DHFu.chunk.js";import{t as b}from"./CxUyw6yf.chunk.js";import{t as x}from"./CJGGMhrK2.chunk.js";import{a as S,i as C}from"./BJdNIGDD2.chunk.js";import{t as w}from"./CEuop4Wi2.chunk.js";import{t as T}from"./CUVnn-Rk.chunk.js";import{t as E}from"./BYiE7xZS2.chunk.js";import{n as D,r as oe,t as se}from"./BHZqVahv2.chunk.js";import{t as ce}from"./B3LSf7YD.chunk.js";import{t as le}from"./Dpgqkqbp.chunk.js";var O=r(e()),k=r(t()),A=r(s()),j=A.object().shape({name:A.string().trim().max(255,`Name is too long`).required(`Name is required`).default(``),description:A.string().trim().required(`Description is required`).default(``),status:A.mixed(),productionYear:A.number(),subtitles:A.array().min(1,`At least one subtitle is required`),classificationIds:A.array().min(1,`At least one classification is required`),audienceIds:A.array().min(1,`At least one audience is required`),producers:A.array(),productionCompanies:A.array().min(1,`At least one production company is required`),directors:A.array(),distributors:A.array(),thumbnailText:A.string().trim().required(`Thumbnail text is required`).default(``)}).noUnknown(),M={form:`_form_a85qm_1`,uploadBox:`_uploadBox_a85qm_4`},N=n();function P(e){let[t,n]=k.useState(`waiting`),[r,s]=k.useState(``),[A,P]=k.useState(null),[F,I]=k.useState(``),[L,R]=k.useState(0),z=h(),B=d(),V=u(T.cvLivePresentation()),H=u(ce.library()),U=u(x.streamable()),W=u(a.currentUser()),G=u(V.data&&v.getClassificationTree(V.data.id)),K=u(V.data&&v.presentationAudiences(V.data.id)),q=u(!!e.livestreamId&&E.livestream(e.livestreamId)),J=m(l.VideoUpload),ue=m(l.SubtitleUpload);ee(C.VIDEO_UPLOAD,`progress`,(e,t)=>R(Math.floor(t))),k.useEffect(()=>{let e=O.default.channel(C.VIDEO_UPLOAD);return e.on(S.UPLOAD_SUCCESS,Q),()=>{e.off(S.UPLOAD_SUCCESS,Q)}},[A]);let{getRootProps:Y,getInputProps:de,isDragActive:X}=re({onDrop:e=>Z(e[0]),noClick:!0,multiple:!1,noKeyboard:!0});function Z(t){J.addFiles([t]),P(t),n(`uploading`),e.onSelectFile?.()}function Q(e,t){s(t.id),I(t.url)}async function fe(t){let n=J.getUpload(A);n.set(`sending`,!0);let i=U.data?.name?.toLowerCase()?.includes(`streamable`)?U.data.id:null;try{let a=await B(y.completeUpload({id:n.get(`id`),fileId:r,userId:W.data.id,customerId:W.data.customerId,libraryId:_.Libraries.LICENCED_CONTENT_COLLECTION,pendingProcessOrigin:oe.Upload,origin:se.Curator,fileUrl:F,subtitleOptions:{subtitleExtractOptions:D.EmbeddedOnly},video:{name:t.name,description:t.description,productionYear:new Date().getFullYear(),productionCompanies:t.productionCompanies.map(e=>e.id),producers:t.producers.map(e=>e.id),distributors:i?[i]:[],directors:[],subtitles:t.subtitles.map(e=>({...e,permissions:g.getProtectedReadPermission()}))},autoCaption:!1})),s=[B(y.addToLibraries(a.masterVideoId,[H.data.objectId])),pe(a.masterVideoId,t.classificationIds),me(a.masterVideoId,t.audienceIds)];q.data&&s.push(B(E.updateLivestream(e.livestreamId,{...q.data,recordingMasterId:a.masterVideoId}))),await Promise.all(s),await B(o.syncVideo(a.masterVideoId,!1)),await B(y.updateContentPipelineVideo(a.masterVideoId,{isInSeries:!1,thumbnailText:t.thumbnailText,hasProducers:t.producers.length>0,hasDistributors:!!i,hasDirectors:!1,hasProductionCompanies:!0})),await B(o.bulkUpdateVideosStagesAssignee([a.masterVideoId],[`metadata`,`presentation`,`thumbnail_text`],W.data.id)),await B(o.moveVideoToFurthestStage(a.masterVideoId)),e.onSubmitDone({name:t.name,masterVideoId:a.masterVideoId})}catch{z.error(`Something went wrong while trying to upload your video.`)}}async function pe(e,t){let n=b.flatten(G.data),r=t.reduce((e,t)=>({...e,[t]:!0}),{}),a=n.filter(e=>r[e.id]),o=f.uniq(f.flatten(a.map(e=>e.backboneClassificationIds)));return await B(v.updateObjectBackboneClassification(e,o,i.Videos)),B(v.updateObjectClassification(e,t,V.data.id,i.Videos))}async function me(e,t){let n=t.reduce((e,t)=>({...e,[t]:!0}),{}),r=K.data.filter(e=>n[e.masterId]),i=f.uniq(f.flatten(r.map(e=>e.backboneAudienceIds)));await B(v.updateObjectBackboneAudiences(e,i)),await B(v.updateObjectAudience(e,t,V.data.id))}function he(e){return new Promise(t=>{ue.addFiles(e),O.default.channel(C.SUBTITLE_UPLOAD).once(S.UPLOAD_COMPLETE,e=>{t(e.toJSON())})})}function ge(){return!H.hasCompleted||!W.hasCompleted||!G.hasCompleted||!K.hasCompleted||e.livestreamId&&!q.hasCompleted}let $=!!q.data;return ge()?(0,N.jsx)(`div`,{className:`text-center p-5`,children:(0,N.jsx)(te,{as:`div`,animation:`border`,role:`status`})}):(0,N.jsxs)(`div`,{children:[t===`waiting`&&(0,N.jsxs)(`div`,{...Y(),className:`border rounded position-relative ${M.form}`,children:[(0,N.jsx)(`div`,{className:X?`d-none`:``,children:(0,N.jsxs)(`div`,{className:`position-absolute text-center w-100 ${M.uploadBox}`,children:[$?(0,N.jsxs)(`div`,{className:`mb-2 px-3`,children:[`Drag and drop a recording to upload for `,q.data.name]}):(0,N.jsx)(`div`,{className:`mb-2 px-3`,children:`Drag and drop a video to upload`}),(0,N.jsxs)(ie,{svg:w,className:`btn btn-outline-dark`,mimeType:ae.VIDEO,onFileSelect:e=>Z(Array.from(e)[0]),children:[`Upload `,$?`recording`:`video`]})]})}),(0,N.jsx)(`div`,{className:`${X?``:`d-none`} bg-light position-absolute w-100 h-100`,children:(0,N.jsx)(`span`,{className:`h4 mb-0 text-center w-100 position-absolute ${M.uploadBox}`,children:`Drop file here to begin uploading`})}),(0,N.jsx)(`input`,{...de()})]}),t===`uploading`&&(0,N.jsxs)(`div`,{children:[(0,N.jsxs)(`div`,{className:`pb-3`,children:[(0,N.jsxs)(`div`,{className:`d-flex justify-content-between`,children:[(0,N.jsx)(`div`,{children:`Uploading:`}),(0,N.jsxs)(`div`,{className:`text-end`,children:[L,`%`]})]}),(0,N.jsx)(c,{variant:`info`,now:L})]}),(0,N.jsx)(ne,{initialValues:{name:q.data?.name??A.name,status:p.Draft,description:q.data?.description??``,subtitles:[],producers:[],productionCompanies:q.data?.company?.id?[q.data.company]:[],classificationIds:q.data?.classifications?.map(e=>e.id)??[],audienceIds:q.data?.audiences?.map(e=>e.id)??[],thumbnailText:``},validationSchema:j,onSubmit:fe,children:(0,N.jsx)(le,{id:null,hideActions:!0,hideHeroBanner:!0,hideThumbnail:!0,hideProductionYear:!0,hideStatus:!0,hideDirector:!0,hideDistibutor:!0,hideProducer:!0,hideSeries:!0,onSubtitleFilesAdded:he,classificationTree:G.data,disableProductionCompany:!0,allowMultipleProductionCompanies:!1,audiences:K.data,context:`live`,loadingText:`Saving recording - this may take a minute...`,requiredStars:{name:!0,description:!0,subtitles:!0,classifications:!0,audiences:!0,productionCompany:!0,thumbnailText:!0}})})]})]})}export{P as t};
2
- //# sourceMappingURL=DDHep0UM.chunk.js.map
1
+ import{D as e,a as t,i as n,ln as r}from"./rp704-Pm.chunk.js";import{n as i}from"./CFoexGFe.chunk.js";import{t as a}from"./UCDGupVs.chunk.js";import{G as o}from"./DWHKdmdQ.chunk.js";import{t as s}from"./CLCeObem2.chunk.js";import{n as ee}from"./D-JsEiDq2.chunk.js";import{t as c}from"./C5o897T82.chunk.js";import{n as te}from"./CbiGs3Tn.chunk.js";import{n as l}from"./CsF4wDV1.chunk.js";import{s as u,u as d}from"./Dgk5cBBe.chunk.js";import{t as f}from"./DpqbC5uX.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as p}from"./BDwjs8qz.chunk.js";import{t as m}from"./Lh2c_aQx2.chunk.js";import{t as h}from"./Bwpvc7Th2.chunk.js";import{t as g}from"./DkmqWelt2.chunk.js";import{t as _}from"./j6NQVjZx2.chunk.js";import{t as v}from"./CZyPFSXo.chunk.js";import{t as ne}from"./dKyhMawf.chunk.js";import{t as re}from"./BoEge6tK.chunk.js";import{t as ie}from"./DwibXbjb.chunk.js";import{n as ae}from"./BJNKTs8z2.chunk.js";import{t as y}from"./JmL1DHFu.chunk.js";import{t as b}from"./CxUyw6yf.chunk.js";import{t as x}from"./CJGGMhrK2.chunk.js";import{a as S,i as C}from"./BJdNIGDD2.chunk.js";import{t as w}from"./CEuop4Wi2.chunk.js";import{t as T}from"./CUVnn-Rk.chunk.js";import{t as E}from"./BYiE7xZS2.chunk.js";import{n as D,r as oe,t as se}from"./BHZqVahv2.chunk.js";import{t as ce}from"./B3LSf7YD.chunk.js";import{t as le}from"./BX1tMzoa.chunk.js";var O=r(e()),k=r(t()),A=r(s()),j=A.object().shape({name:A.string().trim().max(255,`Name is too long`).required(`Name is required`).default(``),description:A.string().trim().required(`Description is required`).default(``),status:A.mixed(),productionYear:A.number(),subtitles:A.array().min(1,`At least one subtitle is required`),classificationIds:A.array().min(1,`At least one classification is required`),audienceIds:A.array().min(1,`At least one audience is required`),producers:A.array(),productionCompanies:A.array().min(1,`At least one production company is required`),directors:A.array(),distributors:A.array(),thumbnailText:A.string().trim().required(`Thumbnail text is required`).default(``)}).noUnknown(),M={form:`_form_a85qm_1`,uploadBox:`_uploadBox_a85qm_4`},N=n();function P(e){let[t,n]=k.useState(`waiting`),[r,s]=k.useState(``),[A,P]=k.useState(null),[F,I]=k.useState(``),[L,R]=k.useState(0),z=h(),B=d(),V=u(T.cvLivePresentation()),H=u(ce.library()),U=u(x.streamable()),W=u(a.currentUser()),G=u(V.data&&v.getClassificationTree(V.data.id)),K=u(V.data&&v.presentationAudiences(V.data.id)),q=u(!!e.livestreamId&&E.livestream(e.livestreamId)),J=m(l.VideoUpload),ue=m(l.SubtitleUpload);ee(C.VIDEO_UPLOAD,`progress`,(e,t)=>R(Math.floor(t))),k.useEffect(()=>{let e=O.default.channel(C.VIDEO_UPLOAD);return e.on(S.UPLOAD_SUCCESS,Q),()=>{e.off(S.UPLOAD_SUCCESS,Q)}},[A]);let{getRootProps:Y,getInputProps:de,isDragActive:X}=re({onDrop:e=>Z(e[0]),noClick:!0,multiple:!1,noKeyboard:!0});function Z(t){J.addFiles([t]),P(t),n(`uploading`),e.onSelectFile?.()}function Q(e,t){s(t.id),I(t.url)}async function fe(t){let n=J.getUpload(A);n.set(`sending`,!0);let i=U.data?.name?.toLowerCase()?.includes(`streamable`)?U.data.id:null;try{let a=await B(y.completeUpload({id:n.get(`id`),fileId:r,userId:W.data.id,customerId:W.data.customerId,libraryId:_.Libraries.LICENCED_CONTENT_COLLECTION,pendingProcessOrigin:oe.Upload,origin:se.Curator,fileUrl:F,subtitleOptions:{subtitleExtractOptions:D.EmbeddedOnly},video:{name:t.name,description:t.description,productionYear:new Date().getFullYear(),productionCompanies:t.productionCompanies.map(e=>e.id),producers:t.producers.map(e=>e.id),distributors:i?[i]:[],directors:[],subtitles:t.subtitles.map(e=>({...e,permissions:g.getProtectedReadPermission()}))},autoCaption:!1})),s=[B(y.addToLibraries(a.masterVideoId,[H.data.objectId])),pe(a.masterVideoId,t.classificationIds),me(a.masterVideoId,t.audienceIds)];q.data&&s.push(B(E.updateLivestream(e.livestreamId,{...q.data,recordingMasterId:a.masterVideoId}))),await Promise.all(s),await B(o.syncVideo(a.masterVideoId,!1)),await B(y.updateContentPipelineVideo(a.masterVideoId,{isInSeries:!1,thumbnailText:t.thumbnailText,hasProducers:t.producers.length>0,hasDistributors:!!i,hasDirectors:!1,hasProductionCompanies:!0})),await B(o.bulkUpdateVideosStagesAssignee([a.masterVideoId],[`metadata`,`presentation`,`thumbnail_text`],W.data.id)),await B(o.moveVideoToFurthestStage(a.masterVideoId)),e.onSubmitDone({name:t.name,masterVideoId:a.masterVideoId})}catch{z.error(`Something went wrong while trying to upload your video.`)}}async function pe(e,t){let n=b.flatten(G.data),r=t.reduce((e,t)=>({...e,[t]:!0}),{}),a=n.filter(e=>r[e.id]),o=f.uniq(f.flatten(a.map(e=>e.backboneClassificationIds)));return await B(v.updateObjectBackboneClassification(e,o,i.Videos)),B(v.updateObjectClassification(e,t,V.data.id,i.Videos))}async function me(e,t){let n=t.reduce((e,t)=>({...e,[t]:!0}),{}),r=K.data.filter(e=>n[e.masterId]),i=f.uniq(f.flatten(r.map(e=>e.backboneAudienceIds)));await B(v.updateObjectBackboneAudiences(e,i)),await B(v.updateObjectAudience(e,t,V.data.id))}function he(e){return new Promise(t=>{ue.addFiles(e),O.default.channel(C.SUBTITLE_UPLOAD).once(S.UPLOAD_COMPLETE,e=>{t(e.toJSON())})})}function ge(){return!H.hasCompleted||!W.hasCompleted||!G.hasCompleted||!K.hasCompleted||e.livestreamId&&!q.hasCompleted}let $=!!q.data;return ge()?(0,N.jsx)(`div`,{className:`text-center p-5`,children:(0,N.jsx)(te,{as:`div`,animation:`border`,role:`status`})}):(0,N.jsxs)(`div`,{children:[t===`waiting`&&(0,N.jsxs)(`div`,{...Y(),className:`border rounded position-relative ${M.form}`,children:[(0,N.jsx)(`div`,{className:X?`d-none`:``,children:(0,N.jsxs)(`div`,{className:`position-absolute text-center w-100 ${M.uploadBox}`,children:[$?(0,N.jsxs)(`div`,{className:`mb-2 px-3`,children:[`Drag and drop a recording to upload for `,q.data.name]}):(0,N.jsx)(`div`,{className:`mb-2 px-3`,children:`Drag and drop a video to upload`}),(0,N.jsxs)(ie,{svg:w,className:`btn btn-outline-dark`,mimeType:ae.VIDEO,onFileSelect:e=>Z(Array.from(e)[0]),children:[`Upload `,$?`recording`:`video`]})]})}),(0,N.jsx)(`div`,{className:`${X?``:`d-none`} bg-light position-absolute w-100 h-100`,children:(0,N.jsx)(`span`,{className:`h4 mb-0 text-center w-100 position-absolute ${M.uploadBox}`,children:`Drop file here to begin uploading`})}),(0,N.jsx)(`input`,{...de()})]}),t===`uploading`&&(0,N.jsxs)(`div`,{children:[(0,N.jsxs)(`div`,{className:`pb-3`,children:[(0,N.jsxs)(`div`,{className:`d-flex justify-content-between`,children:[(0,N.jsx)(`div`,{children:`Uploading:`}),(0,N.jsxs)(`div`,{className:`text-end`,children:[L,`%`]})]}),(0,N.jsx)(c,{variant:`info`,now:L})]}),(0,N.jsx)(ne,{initialValues:{name:q.data?.name??A.name,status:p.Draft,description:q.data?.description??``,subtitles:[],producers:[],productionCompanies:q.data?.company?.id?[q.data.company]:[],classificationIds:q.data?.classifications?.map(e=>e.id)??[],audienceIds:q.data?.audiences?.map(e=>e.id)??[],thumbnailText:``},validationSchema:j,onSubmit:fe,children:(0,N.jsx)(le,{id:null,hideActions:!0,hideHeroBanner:!0,hideThumbnail:!0,hideProductionYear:!0,hideStatus:!0,hideDirector:!0,hideDistibutor:!0,hideProducer:!0,hideSeries:!0,onSubtitleFilesAdded:he,classificationTree:G.data,disableProductionCompany:!0,allowMultipleProductionCompanies:!1,audiences:K.data,context:`live`,loadingText:`Saving recording - this may take a minute...`,requiredStars:{name:!0,description:!0,subtitles:!0,classifications:!0,audiences:!0,productionCompany:!0,thumbnailText:!0}})})]})]})}export{P as t};
2
+ //# sourceMappingURL=DHeA2NJS.chunk.js.map