@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 +1 @@
1
- {"version":3,"file":"DDHep0UM.chunk.js","names":[],"sources":["../../../../../src/apps/cv-live/validation/CvLiveUploadValidationSchema.ts","../../../../../src/apps/cv-live/components/upload-video/upload-video-form.module.scss","../../../../../src/apps/cv-live/components/upload-video/UploadVideo.tsx"],"sourcesContent":["import * as Yup from 'yup';\n\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\n\nexport const CvLiveUploadValidationSchema = Yup.object().shape({\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 .required('Description is required')\n .default(''),\n\n status: Yup.mixed<CurationStatus>(),\n\n productionYear: Yup.number(),\n\n subtitles: Yup.array().min(1, 'At least one subtitle is required'),\n classificationIds: Yup.array().min(1, 'At least one classification is required'),\n audienceIds: Yup.array().min(1, 'At least one audience is required'),\n producers: Yup.array(),\n productionCompanies: Yup.array().min(1, 'At least one production company is required'),\n directors: Yup.array(),\n distributors: Yup.array(),\n\n thumbnailText: Yup.string()\n .trim()\n .required('Thumbnail text is required')\n .default('')\n\n}).noUnknown();\n",":local {\n .form {\n min-height: 20rem;\n }\n\n .uploadBox {\n top: 8rem;\n }\n}","import React from 'react';\nimport { ProgressBar, Spinner } from 'react-bootstrap';\nimport { useDropzone } from 'react-dropzone';\nimport Radio from 'backbone.radio';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { useService } from 'libs/common/react/hooks/UseService';\nimport { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { UploadEventNames } from 'libs/shared/apps/upload/constants/UploadConstants';\nimport { BaseVideoUploadService, SubtitleUploadService } from 'libs/shared/apps/upload/services/UploadService';\nimport { FileExtensions } from 'libs/shared/apps/upload/utils/FileExtensionsHelper';\nimport { FileSelectButton } from 'libs/shared/components/file-select-button/FileSelectButton';\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { SharedServiceChannels } from 'libs/shared/constants/RadioChannels';\nimport { SharedServices } from 'libs/shared/constants/SharedServices';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { PendingProcessOrigin } from 'libs/shared/enums/PendingProcessOrigin';\nimport { SubtitleExtractionOptions } from 'libs/shared/enums/SubtitleExtractionOptions';\nimport { VideoOrigin } from 'libs/shared/enums/VideoOrigin';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useListenOn } from 'libs/shared/hooks/UseListenOn';\nimport { UploadSvg } from 'libs/shared/images/svg/actions/UploadSvg';\nimport { Classification, Company, CurrentUser, FileUpload, Livestream, Presentation, PresentationAudience, Video } from 'libs/shared/interfaces';\nimport { TreeHelper } from 'libs/shared/utils/TreeHelper';\n\nimport { SubjectMemberType } from 'shared/enums';\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\nimport { ClassificationTree } from 'shared/interfaces/models/ClassificationTree';\nimport { PermissionsHelper } from 'shared/utils/PermissionsHelper';\n\nimport { AssemblyLineRequests } from 'apps/assembly-line/flight-requests/AssemblyLineRequests';\nimport { CompanyRequests } from 'apps/companies/flight-requests';\nimport { CvLiveLibraryRequests } from 'apps/cv-live/flight-requests/CvLiveLibraryRequests';\nimport { LivestreamRequests } from 'apps/cv-live/flight-requests/CvLiveLivestreamRequests';\nimport { PresentationRequests } from 'apps/cv-live/flight-requests/CvLivePresentationRequests';\nimport { CvLiveUploadValidationSchema } from 'apps/cv-live/validation/CvLiveUploadValidationSchema';\nimport { VideoDetailsForm } from 'apps/videos/components/edit-video-details/VideoDetailsForm';\nimport { VideoRequests } from 'apps/videos/flight-requests/CuratorVideoRequests';\nimport { UpdateVideoRequest } from 'apps/videos/interfaces';\n\nimport styles from './upload-video-form.module.scss';\n\nexport interface UploadVideoProps {\n livestreamId?: string;\n onSubmitDone: (item: PendingItem & { name: string }) => void;\n onSelectFile?: () => void;\n}\n\ninterface PendingItem {\n masterVideoId: string;\n}\n\nexport type UploadFormStatus = 'waiting' | 'uploading';\n\nexport function UploadVideo(props: UploadVideoProps): JSX.Element {\n const [ status, setStatus ] = React.useState<UploadFormStatus>('waiting');\n\n const [ fileId, setFileId ] = React.useState('');\n const [ file, setFile ] = React.useState<File>(null);\n const [ fileUrl, setFileUrl ] = React.useState('');\n \n const [ uploadProgress, setUploadProgress ] = React.useState(0);\n \n const alerts = useAlerts();\n const fetchAsync = Flight.useGetFetchAsync();\n\n const presentation = Flight.useBasicFetch<Presentation>(\n PresentationRequests.cvLivePresentation()\n );\n\n const cvLiveLibrary = Flight.useBasicFetch<HashObject>(CvLiveLibraryRequests.library());\n const streamableCompany = Flight.useBasicFetch<Company>(CompanyRequests.streamable());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const classificationTree = Flight.useBasicFetch<ClassificationTree>(\n presentation.data && SubjectRequests.getClassificationTree(presentation.data.id)\n );\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n presentation.data && SubjectRequests.presentationAudiences(presentation.data.id)\n );\n const livestream = Flight.useBasicFetch<Livestream>(\n !!props.livestreamId && LivestreamRequests.livestream(props.livestreamId)\n );\n\n const videoUploadService = useService<BaseVideoUploadService>(SharedServices.VideoUpload);\n const subtitleUploadService = useService<SubtitleUploadService>(SharedServices.SubtitleUpload);\n\n useListenOn(SharedServiceChannels.VIDEO_UPLOAD, 'progress', (id, p) => setUploadProgress(Math.floor(p)));\n\n React.useEffect(() => {\n const channel = Radio.channel(SharedServiceChannels.VIDEO_UPLOAD);\n channel.on(UploadEventNames.UPLOAD_SUCCESS, onUploadComplete);\n\n return () => {\n channel.off(UploadEventNames.UPLOAD_SUCCESS, onUploadComplete);\n };\n }, [file]);\n\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n onDrop: fileList => onSelectFile(fileList[0]),\n noClick: true,\n multiple: false,\n noKeyboard: true\n });\n\n function onSelectFile(file: File): void {\n videoUploadService.addFiles([file]);\n setFile(file);\n setStatus('uploading');\n props.onSelectFile?.();\n }\n\n function onUploadComplete(file: File, response: any): void {\n setFileId(response.id);\n setFileUrl(response.url);\n }\n\n async function submit(data: UpdateVideoRequest): Promise<void> {\n const upload = videoUploadService.getUpload(file);\n upload.set('sending', true);\n\n const streamableDistributor = streamableCompany.data?.name?.toLowerCase()?.includes('streamable') ?\n streamableCompany.data.id :\n null;\n\n try {\n // Create the video in the licenced content collection and kick off processing\n const pendingItem = await fetchAsync<PendingItem>(VideoRequests.completeUpload({\n id: upload.get('id'),\n fileId,\n userId: currentUser.data.id,\n customerId: currentUser.data.customerId,\n libraryId: HardCoded.Libraries.LICENCED_CONTENT_COLLECTION,\n pendingProcessOrigin: PendingProcessOrigin.Upload,\n origin: VideoOrigin.Curator,\n fileUrl,\n subtitleOptions: {\n subtitleExtractOptions: SubtitleExtractionOptions.EmbeddedOnly\n },\n video: {\n name: data.name,\n description: data.description,\n productionYear: new Date().getFullYear(),\n productionCompanies: data.productionCompanies.map(p => p.id),\n producers: data.producers.map(p => p.id),\n distributors: streamableDistributor ? [streamableDistributor] : [],\n directors: [],\n subtitles: data.subtitles.map(s => ({\n ...s,\n permissions: PermissionsHelper.getProtectedReadPermission()\n }))\n },\n autoCaption: false\n }));\n\n const requests = [\n // Add the video to the streamable library\n fetchAsync(\n VideoRequests.addToLibraries(pendingItem.masterVideoId, [cvLiveLibrary.data.objectId])\n ),\n\n // Add the videos classifications and backbone classifications\n addToSubjects(pendingItem.masterVideoId, data.classificationIds),\n\n // Add the videos audiences and backbone audiences\n addAudiences(pendingItem.masterVideoId, data.audienceIds)\n ];\n\n if (livestream.data) {\n requests.push(\n // Add the video to the livestream\n fetchAsync(LivestreamRequests.updateLivestream(\n props.livestreamId,\n {\n ...livestream.data,\n recordingMasterId: pendingItem.masterVideoId\n }\n ))\n );\n }\n\n await Promise.all(requests);\n\n // Make sure the video is synced in the content pipeline\n await fetchAsync(AssemblyLineRequests.syncVideo(pendingItem.masterVideoId, false));\n\n await fetchAsync(VideoRequests.updateContentPipelineVideo(pendingItem.masterVideoId, {\n isInSeries: false,\n thumbnailText: data.thumbnailText,\n hasProducers: data.producers.length > 0,\n hasDistributors: !!streamableDistributor,\n hasDirectors: false,\n hasProductionCompanies: true\n }));\n\n await fetchAsync(AssemblyLineRequests.bulkUpdateVideosStagesAssignee(\n [pendingItem.masterVideoId],\n [ 'metadata', 'presentation', 'thumbnail_text' ],\n currentUser.data.id\n ));\n\n // Move the video to the furthest stage in the pipeline, which should be unused videos\n await fetchAsync(AssemblyLineRequests.moveVideoToFurthestStage(pendingItem.masterVideoId));\n\n props.onSubmitDone({ name: data.name, masterVideoId: pendingItem.masterVideoId });\n } catch {\n alerts.error('Something went wrong while trying to upload your video.');\n }\n }\n\n async function addToSubjects(masterId: string, classificationIds: string[]): Promise<void> {\n const allClassifications = TreeHelper.flatten<Classification>(classificationTree.data);\n\n const idHash = classificationIds.reduce<HashObject>((acc, id) => ({ ...acc, [id]: true }), {});\n\n const classifications = allClassifications.filter(c => idHash[c.id]);\n\n const backboneIds = ArrayHelper.uniq(ArrayHelper.flatten(classifications.map(c => c.backboneClassificationIds)));\n\n await fetchAsync(\n SubjectRequests.updateObjectBackboneClassification(masterId, backboneIds, SubjectMemberType.Videos)\n );\n\n return fetchAsync(SubjectRequests.updateObjectClassification(\n masterId,\n classificationIds,\n presentation.data.id,\n SubjectMemberType.Videos\n ));\n }\n\n async function addAudiences(masterId: string, audienceIds: string[]): Promise<void> {\n const idHash = audienceIds.reduce<HashObject>((acc, id) => ({ ...acc, [id]: true }), {});\n\n const selectedAudiences = audiences.data.filter(c => idHash[c.masterId]);\n\n const backboneIds = ArrayHelper.uniq(ArrayHelper.flatten(selectedAudiences.map(c => c.backboneAudienceIds)));\n\n await fetchAsync(\n SubjectRequests.updateObjectBackboneAudiences(masterId, backboneIds)\n );\n\n await fetchAsync(SubjectRequests.updateObjectAudience(\n masterId,\n audienceIds,\n presentation.data.id\n ));\n }\n\n function onSubtitleFilesAdded(files: File[]): Promise<FileUpload> {\n return new Promise(resolve => {\n subtitleUploadService.addFiles(files);\n\n Radio.channel(SharedServiceChannels.SUBTITLE_UPLOAD)\n .once(UploadEventNames.UPLOAD_COMPLETE, (upload: Core.Model) => {\n resolve(upload.toJSON());\n });\n });\n }\n\n function isLoading(): boolean {\n return (\n !cvLiveLibrary.hasCompleted ||\n !currentUser.hasCompleted ||\n !classificationTree.hasCompleted ||\n !audiences.hasCompleted ||\n (props.livestreamId && !livestream.hasCompleted)\n );\n }\n\n const hasLivestream = !!livestream.data;\n\n if (isLoading()) {\n return (\n <div className='text-center p-5'>\n <Spinner as='div' animation='border' role='status' />\n </div>\n );\n }\n\n return (\n <div>\n {status === 'waiting' && (\n <div {...getRootProps()} className={`border rounded position-relative ${styles.form}`}>\n <div className={isDragActive ? 'd-none' : ''}>\n <div className={`position-absolute text-center w-100 ${styles.uploadBox}`}>\n {hasLivestream ? (\n <div className='mb-2 px-3'>\n Drag and drop a recording to upload for {livestream.data.name}\n </div>\n ) : (\n <div className='mb-2 px-3'>\n Drag and drop a video to upload\n </div>\n )}\n <FileSelectButton\n svg={UploadSvg}\n className='btn btn-outline-dark'\n mimeType={FileExtensions.VIDEO}\n onFileSelect={fileList => onSelectFile(Array.from(fileList)[0])}\n >\n Upload {hasLivestream ? 'recording' : 'video'}\n </FileSelectButton>\n </div>\n </div>\n <div className={`${isDragActive ? '' : 'd-none'} bg-light position-absolute w-100 h-100`}>\n <span className={`h4 mb-0 text-center w-100 position-absolute ${styles.uploadBox}`}>Drop file here to begin uploading</span>\n </div>\n <input {...getInputProps()} />\n </div>\n )}\n\n {status === 'uploading' && (\n <div>\n <div className='pb-3'>\n <div className='d-flex justify-content-between'>\n <div>Uploading:</div>\n <div className='text-end'>{uploadProgress}%</div>\n </div>\n <ProgressBar variant='info' now={uploadProgress} />\n </div>\n\n <FormWrapper<UpdateVideoRequest, Video>\n initialValues={{\n name: livestream.data?.name ?? file.name,\n status: CurationStatus.Draft,\n description: livestream.data?.description ?? '',\n subtitles: [],\n producers: [],\n productionCompanies: livestream.data?.company?.id ? [livestream.data.company] : [],\n classificationIds: livestream.data?.classifications?.map(c => c.id) ?? [],\n audienceIds: livestream.data?.audiences?.map(a => a.id) ?? [],\n thumbnailText: ''\n }}\n validationSchema={CvLiveUploadValidationSchema}\n onSubmit={submit}\n >\n <VideoDetailsForm\n id={null}\n hideActions\n hideHeroBanner\n hideThumbnail\n hideProductionYear\n hideStatus\n hideDirector\n hideDistibutor\n hideProducer\n hideSeries\n onSubtitleFilesAdded={onSubtitleFilesAdded}\n classificationTree={classificationTree.data}\n disableProductionCompany\n allowMultipleProductionCompanies={false}\n audiences={audiences.data}\n context='live'\n loadingText='Saving recording - this may take a minute...'\n requiredStars={{\n name: true,\n description: true,\n subtitles: true,\n classifications: true,\n audiences: true,\n productionCompany: true,\n thumbnailText: true\n }}\n />\n </FormWrapper>\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"DHeA2NJS.chunk.js","names":[],"sources":["../../../../../src/apps/cv-live/validation/CvLiveUploadValidationSchema.ts","../../../../../src/apps/cv-live/components/upload-video/upload-video-form.module.scss","../../../../../src/apps/cv-live/components/upload-video/UploadVideo.tsx"],"sourcesContent":["import * as Yup from 'yup';\n\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\n\nexport const CvLiveUploadValidationSchema = Yup.object().shape({\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 .required('Description is required')\n .default(''),\n\n status: Yup.mixed<CurationStatus>(),\n\n productionYear: Yup.number(),\n\n subtitles: Yup.array().min(1, 'At least one subtitle is required'),\n classificationIds: Yup.array().min(1, 'At least one classification is required'),\n audienceIds: Yup.array().min(1, 'At least one audience is required'),\n producers: Yup.array(),\n productionCompanies: Yup.array().min(1, 'At least one production company is required'),\n directors: Yup.array(),\n distributors: Yup.array(),\n\n thumbnailText: Yup.string()\n .trim()\n .required('Thumbnail text is required')\n .default('')\n\n}).noUnknown();\n",":local {\n .form {\n min-height: 20rem;\n }\n\n .uploadBox {\n top: 8rem;\n }\n}","import React from 'react';\nimport { ProgressBar, Spinner } from 'react-bootstrap';\nimport { useDropzone } from 'react-dropzone';\nimport Radio from 'backbone.radio';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { useService } from 'libs/common/react/hooks/UseService';\nimport { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { UploadEventNames } from 'libs/shared/apps/upload/constants/UploadConstants';\nimport { BaseVideoUploadService, SubtitleUploadService } from 'libs/shared/apps/upload/services/UploadService';\nimport { FileExtensions } from 'libs/shared/apps/upload/utils/FileExtensionsHelper';\nimport { FileSelectButton } from 'libs/shared/components/file-select-button/FileSelectButton';\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { SharedServiceChannels } from 'libs/shared/constants/RadioChannels';\nimport { SharedServices } from 'libs/shared/constants/SharedServices';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { PendingProcessOrigin } from 'libs/shared/enums/PendingProcessOrigin';\nimport { SubtitleExtractionOptions } from 'libs/shared/enums/SubtitleExtractionOptions';\nimport { VideoOrigin } from 'libs/shared/enums/VideoOrigin';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useListenOn } from 'libs/shared/hooks/UseListenOn';\nimport { UploadSvg } from 'libs/shared/images/svg/actions/UploadSvg';\nimport { Classification, Company, CurrentUser, FileUpload, Livestream, Presentation, PresentationAudience, Video } from 'libs/shared/interfaces';\nimport { TreeHelper } from 'libs/shared/utils/TreeHelper';\n\nimport { SubjectMemberType } from 'shared/enums';\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\nimport { ClassificationTree } from 'shared/interfaces/models/ClassificationTree';\nimport { PermissionsHelper } from 'shared/utils/PermissionsHelper';\n\nimport { AssemblyLineRequests } from 'apps/assembly-line/flight-requests/AssemblyLineRequests';\nimport { CompanyRequests } from 'apps/companies/flight-requests';\nimport { CvLiveLibraryRequests } from 'apps/cv-live/flight-requests/CvLiveLibraryRequests';\nimport { LivestreamRequests } from 'apps/cv-live/flight-requests/CvLiveLivestreamRequests';\nimport { PresentationRequests } from 'apps/cv-live/flight-requests/CvLivePresentationRequests';\nimport { CvLiveUploadValidationSchema } from 'apps/cv-live/validation/CvLiveUploadValidationSchema';\nimport { VideoDetailsForm } from 'apps/videos/components/edit-video-details/VideoDetailsForm';\nimport { VideoRequests } from 'apps/videos/flight-requests/CuratorVideoRequests';\nimport { UpdateVideoRequest } from 'apps/videos/interfaces';\n\nimport styles from './upload-video-form.module.scss';\n\nexport interface UploadVideoProps {\n livestreamId?: string;\n onSubmitDone: (item: PendingItem & { name: string }) => void;\n onSelectFile?: () => void;\n}\n\ninterface PendingItem {\n masterVideoId: string;\n}\n\nexport type UploadFormStatus = 'waiting' | 'uploading';\n\nexport function UploadVideo(props: UploadVideoProps): JSX.Element {\n const [ status, setStatus ] = React.useState<UploadFormStatus>('waiting');\n\n const [ fileId, setFileId ] = React.useState('');\n const [ file, setFile ] = React.useState<File>(null);\n const [ fileUrl, setFileUrl ] = React.useState('');\n \n const [ uploadProgress, setUploadProgress ] = React.useState(0);\n \n const alerts = useAlerts();\n const fetchAsync = Flight.useGetFetchAsync();\n\n const presentation = Flight.useBasicFetch<Presentation>(\n PresentationRequests.cvLivePresentation()\n );\n\n const cvLiveLibrary = Flight.useBasicFetch<HashObject>(CvLiveLibraryRequests.library());\n const streamableCompany = Flight.useBasicFetch<Company>(CompanyRequests.streamable());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const classificationTree = Flight.useBasicFetch<ClassificationTree>(\n presentation.data && SubjectRequests.getClassificationTree(presentation.data.id)\n );\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n presentation.data && SubjectRequests.presentationAudiences(presentation.data.id)\n );\n const livestream = Flight.useBasicFetch<Livestream>(\n !!props.livestreamId && LivestreamRequests.livestream(props.livestreamId)\n );\n\n const videoUploadService = useService<BaseVideoUploadService>(SharedServices.VideoUpload);\n const subtitleUploadService = useService<SubtitleUploadService>(SharedServices.SubtitleUpload);\n\n useListenOn(SharedServiceChannels.VIDEO_UPLOAD, 'progress', (id, p) => setUploadProgress(Math.floor(p)));\n\n React.useEffect(() => {\n const channel = Radio.channel(SharedServiceChannels.VIDEO_UPLOAD);\n channel.on(UploadEventNames.UPLOAD_SUCCESS, onUploadComplete);\n\n return () => {\n channel.off(UploadEventNames.UPLOAD_SUCCESS, onUploadComplete);\n };\n }, [file]);\n\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n onDrop: fileList => onSelectFile(fileList[0]),\n noClick: true,\n multiple: false,\n noKeyboard: true\n });\n\n function onSelectFile(file: File): void {\n videoUploadService.addFiles([file]);\n setFile(file);\n setStatus('uploading');\n props.onSelectFile?.();\n }\n\n function onUploadComplete(file: File, response: any): void {\n setFileId(response.id);\n setFileUrl(response.url);\n }\n\n async function submit(data: UpdateVideoRequest): Promise<void> {\n const upload = videoUploadService.getUpload(file);\n upload.set('sending', true);\n\n const streamableDistributor = streamableCompany.data?.name?.toLowerCase()?.includes('streamable') ?\n streamableCompany.data.id :\n null;\n\n try {\n // Create the video in the licenced content collection and kick off processing\n const pendingItem = await fetchAsync<PendingItem>(VideoRequests.completeUpload({\n id: upload.get('id'),\n fileId,\n userId: currentUser.data.id,\n customerId: currentUser.data.customerId,\n libraryId: HardCoded.Libraries.LICENCED_CONTENT_COLLECTION,\n pendingProcessOrigin: PendingProcessOrigin.Upload,\n origin: VideoOrigin.Curator,\n fileUrl,\n subtitleOptions: {\n subtitleExtractOptions: SubtitleExtractionOptions.EmbeddedOnly\n },\n video: {\n name: data.name,\n description: data.description,\n productionYear: new Date().getFullYear(),\n productionCompanies: data.productionCompanies.map(p => p.id),\n producers: data.producers.map(p => p.id),\n distributors: streamableDistributor ? [streamableDistributor] : [],\n directors: [],\n subtitles: data.subtitles.map(s => ({\n ...s,\n permissions: PermissionsHelper.getProtectedReadPermission()\n }))\n },\n autoCaption: false\n }));\n\n const requests = [\n // Add the video to the streamable library\n fetchAsync(\n VideoRequests.addToLibraries(pendingItem.masterVideoId, [cvLiveLibrary.data.objectId])\n ),\n\n // Add the videos classifications and backbone classifications\n addToSubjects(pendingItem.masterVideoId, data.classificationIds),\n\n // Add the videos audiences and backbone audiences\n addAudiences(pendingItem.masterVideoId, data.audienceIds)\n ];\n\n if (livestream.data) {\n requests.push(\n // Add the video to the livestream\n fetchAsync(LivestreamRequests.updateLivestream(\n props.livestreamId,\n {\n ...livestream.data,\n recordingMasterId: pendingItem.masterVideoId\n }\n ))\n );\n }\n\n await Promise.all(requests);\n\n // Make sure the video is synced in the content pipeline\n await fetchAsync(AssemblyLineRequests.syncVideo(pendingItem.masterVideoId, false));\n\n await fetchAsync(VideoRequests.updateContentPipelineVideo(pendingItem.masterVideoId, {\n isInSeries: false,\n thumbnailText: data.thumbnailText,\n hasProducers: data.producers.length > 0,\n hasDistributors: !!streamableDistributor,\n hasDirectors: false,\n hasProductionCompanies: true\n }));\n\n await fetchAsync(AssemblyLineRequests.bulkUpdateVideosStagesAssignee(\n [pendingItem.masterVideoId],\n [ 'metadata', 'presentation', 'thumbnail_text' ],\n currentUser.data.id\n ));\n\n // Move the video to the furthest stage in the pipeline, which should be unused videos\n await fetchAsync(AssemblyLineRequests.moveVideoToFurthestStage(pendingItem.masterVideoId));\n\n props.onSubmitDone({ name: data.name, masterVideoId: pendingItem.masterVideoId });\n } catch {\n alerts.error('Something went wrong while trying to upload your video.');\n }\n }\n\n async function addToSubjects(masterId: string, classificationIds: string[]): Promise<void> {\n const allClassifications = TreeHelper.flatten<Classification>(classificationTree.data);\n\n const idHash = classificationIds.reduce<HashObject>((acc, id) => ({ ...acc, [id]: true }), {});\n\n const classifications = allClassifications.filter(c => idHash[c.id]);\n\n const backboneIds = ArrayHelper.uniq(ArrayHelper.flatten(classifications.map(c => c.backboneClassificationIds)));\n\n await fetchAsync(\n SubjectRequests.updateObjectBackboneClassification(masterId, backboneIds, SubjectMemberType.Videos)\n );\n\n return fetchAsync(SubjectRequests.updateObjectClassification(\n masterId,\n classificationIds,\n presentation.data.id,\n SubjectMemberType.Videos\n ));\n }\n\n async function addAudiences(masterId: string, audienceIds: string[]): Promise<void> {\n const idHash = audienceIds.reduce<HashObject>((acc, id) => ({ ...acc, [id]: true }), {});\n\n const selectedAudiences = audiences.data.filter(c => idHash[c.masterId]);\n\n const backboneIds = ArrayHelper.uniq(ArrayHelper.flatten(selectedAudiences.map(c => c.backboneAudienceIds)));\n\n await fetchAsync(\n SubjectRequests.updateObjectBackboneAudiences(masterId, backboneIds)\n );\n\n await fetchAsync(SubjectRequests.updateObjectAudience(\n masterId,\n audienceIds,\n presentation.data.id\n ));\n }\n\n function onSubtitleFilesAdded(files: File[]): Promise<FileUpload> {\n return new Promise(resolve => {\n subtitleUploadService.addFiles(files);\n\n Radio.channel(SharedServiceChannels.SUBTITLE_UPLOAD)\n .once(UploadEventNames.UPLOAD_COMPLETE, (upload: Core.Model) => {\n resolve(upload.toJSON());\n });\n });\n }\n\n function isLoading(): boolean {\n return (\n !cvLiveLibrary.hasCompleted ||\n !currentUser.hasCompleted ||\n !classificationTree.hasCompleted ||\n !audiences.hasCompleted ||\n (props.livestreamId && !livestream.hasCompleted)\n );\n }\n\n const hasLivestream = !!livestream.data;\n\n if (isLoading()) {\n return (\n <div className='text-center p-5'>\n <Spinner as='div' animation='border' role='status' />\n </div>\n );\n }\n\n return (\n <div>\n {status === 'waiting' && (\n <div {...getRootProps()} className={`border rounded position-relative ${styles.form}`}>\n <div className={isDragActive ? 'd-none' : ''}>\n <div className={`position-absolute text-center w-100 ${styles.uploadBox}`}>\n {hasLivestream ? (\n <div className='mb-2 px-3'>\n Drag and drop a recording to upload for {livestream.data.name}\n </div>\n ) : (\n <div className='mb-2 px-3'>\n Drag and drop a video to upload\n </div>\n )}\n <FileSelectButton\n svg={UploadSvg}\n className='btn btn-outline-dark'\n mimeType={FileExtensions.VIDEO}\n onFileSelect={fileList => onSelectFile(Array.from(fileList)[0])}\n >\n Upload {hasLivestream ? 'recording' : 'video'}\n </FileSelectButton>\n </div>\n </div>\n <div className={`${isDragActive ? '' : 'd-none'} bg-light position-absolute w-100 h-100`}>\n <span className={`h4 mb-0 text-center w-100 position-absolute ${styles.uploadBox}`}>Drop file here to begin uploading</span>\n </div>\n <input {...getInputProps()} />\n </div>\n )}\n\n {status === 'uploading' && (\n <div>\n <div className='pb-3'>\n <div className='d-flex justify-content-between'>\n <div>Uploading:</div>\n <div className='text-end'>{uploadProgress}%</div>\n </div>\n <ProgressBar variant='info' now={uploadProgress} />\n </div>\n\n <FormWrapper<UpdateVideoRequest, Video>\n initialValues={{\n name: livestream.data?.name ?? file.name,\n status: CurationStatus.Draft,\n description: livestream.data?.description ?? '',\n subtitles: [],\n producers: [],\n productionCompanies: livestream.data?.company?.id ? [livestream.data.company] : [],\n classificationIds: livestream.data?.classifications?.map(c => c.id) ?? [],\n audienceIds: livestream.data?.audiences?.map(a => a.id) ?? [],\n thumbnailText: ''\n }}\n validationSchema={CvLiveUploadValidationSchema}\n onSubmit={submit}\n >\n <VideoDetailsForm\n id={null}\n hideActions\n hideHeroBanner\n hideThumbnail\n hideProductionYear\n hideStatus\n hideDirector\n hideDistibutor\n hideProducer\n hideSeries\n onSubtitleFilesAdded={onSubtitleFilesAdded}\n classificationTree={classificationTree.data}\n disableProductionCompany\n allowMultipleProductionCompanies={false}\n audiences={audiences.data}\n context='live'\n loadingText='Saving recording - this may take a minute...'\n requiredStars={{\n name: true,\n description: true,\n subtitles: true,\n classifications: true,\n audiences: true,\n productionCompany: true,\n thumbnailText: true\n }}\n />\n </FormWrapper>\n </div>\n )}\n </div>\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{t as r}from"./Di_u2uix.chunk.js";import"./CfCYHRuo.chunk.js";import{t as i}from"./UCDGupVs.chunk.js";import{G as a}from"./C7Gmh7eY.chunk.js";import{y as o}from"./BhKv6dKl2.chunk.js";import{n as s}from"./CbiGs3Tn.chunk.js";import{s as c,u as l}from"./Dgk5cBBe.chunk.js";import{t as u}from"./DpqbC5uX.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as d}from"./Bwpvc7Th2.chunk.js";import{t as f}from"./C2TF0X_R2.chunk.js";import{t as p}from"./CuXQXmu-2.chunk.js";import{t as m}from"./BivItbGo.chunk.js";import{t as h}from"./JmL1DHFu.chunk.js";import{t as g}from"./C5i_8zoU.chunk.js";import{t as _}from"./0KUhq7W7.chunk.js";import{t as v}from"./MQQrRn3J.chunk.js";import{n as y,t as b}from"./ClpIRgLR.chunk.js";var x=n(e()),S=t();function C(e,t){return x.useMemo(()=>p.getTagsByType(e,t),[e?.length])}function w(e){let t=l(),n=d(),x=c(i.currentUser()),w=c(g.clip(e.clipId)),T=c(a.getAssemblyLineVideo(e.clipId)),E=c(g.clipTagsByType(e.clipId,[f.Normal,f.Pedagogy,f.Hidden,f.Skill])),D=C(E.data?.data,f.Normal),O=C(E.data?.data,f.Pedagogy),k=C(E.data?.data,f.Skill),A=C(E.data?.data,f.Hidden),j=u.toObject(D,`id`),M=c(m.pedagogyTags()),N=c(m.skillTags());async function P(n,r){await t(h.updateContentPipelineVideo(e.clipId,{hasPedagogyTags:n.hasTagType})),await t(h.addContentPipelineVideoComment(e.clipId,`bypassPedagogyTags`,n.bypassCategory,n.bypassReason)),r()}async function F(n,r){await t(h.updateContentPipelineVideo(e.clipId,{hasSkillTags:n.hasTagType})),await t(h.addContentPipelineVideoComment(e.clipId,`bypassSkillTags`,n.bypassCategory,n.bypassReason)),r()}function I(e){return e.results?.filter(e=>!j[e.id])}function L(r,i){if(r=r.trim(),r.length){if(!p.isValidTagSearch(r)){n.error(`Tag ${r} is not valid`);return}if(!p.isValidTagLength(r)){n.error(`Tag must be less than 30 characters`);return}if(i===f.Normal){if(p.getTagByName(D,r)){n.error(`Tag <strong>${r}</strong> already exists on this video.`);return}if(!p.canAddNormalTag(D)){n.error(`Maximum number of Keyword Tags (<strong>10</strong>) have been added.`);return}}t(g.createTag(e.clipId,r,i,()=>n.success(`<strong>${r}</strong> has been created and added.`),()=>n.error(`Failed to create '${r}'.`)))}}function R(r){if(r.tagType===f.Normal&&!p.canAddNormalTag(D)){n.error(`Maximum number of Keyword Tags (<strong>10</strong>) have been added.`);return}t(g.associateTag(e.clipId,r,()=>n.success(`<strong>${r.name}</strong> has been added.`),()=>n.error(`Failed to add '${r.name}'.`)))}function z(r){t(g.dissociateTag(e.clipId,r,()=>n.success(`<strong>${r.name}</strong> has been removed.`),()=>n.error(`Failed to remove <strong>${r.name}</strong>.`)))}function B(e){if(p.getTagById(O,e.id)){z(e);return}R(e)}function V(e){if(p.getTagById(k,e.id)){z(e);return}R(e)}function H(e,t){let n=e.trim();return p.isValidTagSearch(n)?v.searchTags(n,t):null}let U=M.hasCompleted&&N.hasCompleted&&w.hasCompleted;return(0,S.jsxs)(S.Fragment,{children:[!!x.data&&(0,S.jsx)(_,{clipId:e.clipId,activeAction:r.Clips.EDIT_CLIP_TAGS,currentUser:x.data}),(0,S.jsx)(o,{object:w.data}),U?(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(b,{type:f.Pedagogy,onSubmit:P,allTags:M.data,tags:O,onToggleTag:B,heading:`Pedagogy tags`,description:`Select tags to indicate how this clip should be used`,contentPipelineVideo:T.data}),(0,S.jsx)(b,{type:f.Skill,onSubmit:F,allTags:N.data,tags:k,onToggleTag:V,heading:`Skill tags`,description:`Select tags to indicate why this clip is useful`,contentPipelineVideo:T.data}),(0,S.jsxs)(`div`,{className:`row`,children:[(0,S.jsx)(`div`,{className:`col-lg-6`,children:(0,S.jsx)(y,{title:`Keyword Tags`,placeholder:`Add a keyword tag`,onRemove:z,tagList:D,onSuggestionDependencies:[D],onSuggestionSelected:R,getRemoteUrl:e=>H(e,f.Normal),formatRemoteSuggestions:e=>I(e),onSubmit:e=>L(e,f.Normal)})}),(0,S.jsx)(`div`,{className:`col-lg-6`,children:(0,S.jsx)(y,{title:`Hidden Tags`,placeholder:`Add a hidden tag`,onRemove:z,tagList:A,onSuggestionDependencies:[A],onSuggestionSelected:R,getRemoteUrl:e=>H(e,f.Hidden),formatRemoteSuggestions:e=>I(e),onSubmit:e=>L(e,f.Hidden)})})]})]}):(0,S.jsx)(`div`,{className:`text-center p-5`,children:(0,S.jsx)(s,{as:`div`,animation:`border`,role:`status`})})]})}export{w as EditClipTagsView};
2
- //# sourceMappingURL=D5OaPA-v.chunk.js.map
1
+ import{a as e,i as t,ln as n}from"./rp704-Pm.chunk.js";import{t as r}from"./Di_u2uix.chunk.js";import"./CfCYHRuo.chunk.js";import{t as i}from"./UCDGupVs.chunk.js";import{G as a}from"./DWHKdmdQ.chunk.js";import{y as o}from"./GpDEun8c2.chunk.js";import{n as s}from"./CbiGs3Tn.chunk.js";import{s as c,u as l}from"./Dgk5cBBe.chunk.js";import{t as u}from"./DpqbC5uX.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as d}from"./Bwpvc7Th2.chunk.js";import{t as f}from"./C2TF0X_R2.chunk.js";import{t as p}from"./CuXQXmu-2.chunk.js";import{t as m}from"./BivItbGo.chunk.js";import{t as h}from"./JmL1DHFu.chunk.js";import{t as g}from"./C5i_8zoU.chunk.js";import{t as _}from"./DnZGILQc.chunk.js";import{t as v}from"./MQQrRn3J.chunk.js";import{n as y,t as b}from"./B6NMAAhW.chunk.js";var x=n(e()),S=t();function C(e,t){return x.useMemo(()=>p.getTagsByType(e,t),[e?.length])}function w(e){let t=l(),n=d(),x=c(i.currentUser()),w=c(g.clip(e.clipId)),T=c(a.getAssemblyLineVideo(e.clipId)),E=c(g.clipTagsByType(e.clipId,[f.Normal,f.Pedagogy,f.Hidden,f.Skill])),D=C(E.data?.data,f.Normal),O=C(E.data?.data,f.Pedagogy),k=C(E.data?.data,f.Skill),A=C(E.data?.data,f.Hidden),j=u.toObject(D,`id`),M=c(m.pedagogyTags()),N=c(m.skillTags());async function P(n,r){await t(h.updateContentPipelineVideo(e.clipId,{hasPedagogyTags:n.hasTagType})),await t(h.addContentPipelineVideoComment(e.clipId,`bypassPedagogyTags`,n.bypassCategory,n.bypassReason)),r()}async function F(n,r){await t(h.updateContentPipelineVideo(e.clipId,{hasSkillTags:n.hasTagType})),await t(h.addContentPipelineVideoComment(e.clipId,`bypassSkillTags`,n.bypassCategory,n.bypassReason)),r()}function I(e){return e.results?.filter(e=>!j[e.id])}function L(r,i){if(r=r.trim(),r.length){if(!p.isValidTagSearch(r)){n.error(`Tag ${r} is not valid`);return}if(!p.isValidTagLength(r)){n.error(`Tag must be less than 30 characters`);return}if(i===f.Normal){if(p.getTagByName(D,r)){n.error(`Tag <strong>${r}</strong> already exists on this video.`);return}if(!p.canAddNormalTag(D)){n.error(`Maximum number of Keyword Tags (<strong>10</strong>) have been added.`);return}}t(g.createTag(e.clipId,r,i,()=>n.success(`<strong>${r}</strong> has been created and added.`),()=>n.error(`Failed to create '${r}'.`)))}}function R(r){if(r.tagType===f.Normal&&!p.canAddNormalTag(D)){n.error(`Maximum number of Keyword Tags (<strong>10</strong>) have been added.`);return}t(g.associateTag(e.clipId,r,()=>n.success(`<strong>${r.name}</strong> has been added.`),()=>n.error(`Failed to add '${r.name}'.`)))}function z(r){t(g.dissociateTag(e.clipId,r,()=>n.success(`<strong>${r.name}</strong> has been removed.`),()=>n.error(`Failed to remove <strong>${r.name}</strong>.`)))}function B(e){if(p.getTagById(O,e.id)){z(e);return}R(e)}function V(e){if(p.getTagById(k,e.id)){z(e);return}R(e)}function H(e,t){let n=e.trim();return p.isValidTagSearch(n)?v.searchTags(n,t):null}let U=M.hasCompleted&&N.hasCompleted&&w.hasCompleted;return(0,S.jsxs)(S.Fragment,{children:[!!x.data&&(0,S.jsx)(_,{clipId:e.clipId,activeAction:r.Clips.EDIT_CLIP_TAGS,currentUser:x.data}),(0,S.jsx)(o,{object:w.data}),U?(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(b,{type:f.Pedagogy,onSubmit:P,allTags:M.data,tags:O,onToggleTag:B,heading:`Pedagogy tags`,description:`Select tags to indicate how this clip should be used`,contentPipelineVideo:T.data}),(0,S.jsx)(b,{type:f.Skill,onSubmit:F,allTags:N.data,tags:k,onToggleTag:V,heading:`Skill tags`,description:`Select tags to indicate why this clip is useful`,contentPipelineVideo:T.data}),(0,S.jsxs)(`div`,{className:`row`,children:[(0,S.jsx)(`div`,{className:`col-lg-6`,children:(0,S.jsx)(y,{title:`Keyword Tags`,placeholder:`Add a keyword tag`,onRemove:z,tagList:D,onSuggestionDependencies:[D],onSuggestionSelected:R,getRemoteUrl:e=>H(e,f.Normal),formatRemoteSuggestions:e=>I(e),onSubmit:e=>L(e,f.Normal)})}),(0,S.jsx)(`div`,{className:`col-lg-6`,children:(0,S.jsx)(y,{title:`Hidden Tags`,placeholder:`Add a hidden tag`,onRemove:z,tagList:A,onSuggestionDependencies:[A],onSuggestionSelected:R,getRemoteUrl:e=>H(e,f.Hidden),formatRemoteSuggestions:e=>I(e),onSubmit:e=>L(e,f.Hidden)})})]})]}):(0,S.jsx)(`div`,{className:`text-center p-5`,children:(0,S.jsx)(s,{as:`div`,animation:`border`,role:`status`})})]})}export{w as EditClipTagsView};
2
+ //# sourceMappingURL=DIDxfMO_.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"D5OaPA-v.chunk.js","names":[],"sources":["../../../../../src/apps/clips/views/edit-clip-tags/EditClipTagsView.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { SearchResults } from 'libs/shared/apps/search/interfaces';\nimport { TagType } from 'libs/shared/enums/TagType';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Clip, CuratorUser, Tag, TagCollection } from 'libs/shared/interfaces';\n\nimport { ObjectHeader } from 'shared/components';\nimport { Actions } from 'shared/constants';\nimport { SearchRequests } from 'shared/flight-requests/SearchRequests';\nimport { TagRequests } from 'shared/flight-requests/TagRequests';\nimport { MAX_KEYWORD_TAGS, MAX_TAG_LENGTH, TagHelper } from 'shared/utils/TagHelper';\n\nimport { AssemblyLineRequests } from 'apps/assembly-line/flight-requests/AssemblyLineRequests';\nimport { AssemblyLineVideoResponse } from 'apps/assembly-line/interfaces/responses/AssemblyLineVideoResponse';\nimport { EditClipNav } from 'apps/clips/components/edit-clip-nav/EditClipNav';\nimport { ClipRequests } from 'apps/clips/flight-requests/CuratorClipRequests';\nimport { SearchBarWithTagList } from 'apps/videos/components/edit-video-tags/search-bar';\nimport { TagCloudForm } from 'apps/videos/components/edit-video-tags/tag-cloud-form/TagCloudForm';\nimport { VideoRequests } from 'apps/videos/flight-requests/CuratorVideoRequests';\nimport { ContentPipelineVideoTagsFormData } from 'apps/videos/views';\n\nfunction useFilterTags(tags: Tag[], type: TagType) {\n return React.useMemo(() => {\n return TagHelper.getTagsByType(tags, type);\n }, [tags?.length]);\n}\n\ninterface EditClipTagsViewProps {\n clipId: string;\n}\n\nexport function EditClipTagsView(\n props: EditClipTagsViewProps\n): React.ReactElement {\n const fetchAsync = Flight.useGetFetchAsync();\n const alerts = useAlerts();\n \n const currentUser = Flight.useBasicFetch<CuratorUser>(\n UserRequests.currentUser()\n );\n\n const clip = Flight.useBasicFetch<Clip>(ClipRequests.clip(props.clipId));\n const contentPipelineClip = Flight.useBasicFetch<AssemblyLineVideoResponse>(\n AssemblyLineRequests.getAssemblyLineVideo(props.clipId)\n );\n\n const allTagsResponse = Flight.useBasicFetch<TagCollection>(\n ClipRequests.clipTagsByType(props.clipId, [\n TagType.Normal,\n TagType.Pedagogy,\n TagType.Hidden,\n TagType.Skill\n ])\n );\n\n const normalTags = useFilterTags(allTagsResponse.data?.data, TagType.Normal);\n const pedagogyTags = useFilterTags(allTagsResponse.data?.data, TagType.Pedagogy);\n const skillTags = useFilterTags(allTagsResponse.data?.data, TagType.Skill);\n const hiddenTags = useFilterTags(allTagsResponse.data?.data, TagType.Hidden);\n const tagLookup = ArrayHelper.toObject(normalTags, 'id');\n\n const allPedagogyTags = Flight.useBasicFetch<Tag[]>(TagRequests.pedagogyTags());\n const allSkillTags = Flight.useBasicFetch<Tag[]>(TagRequests.skillTags());\n\n async function onTogglePedagogyTagRequirement(\n formData: ContentPipelineVideoTagsFormData,\n onDone: () => void\n ): Promise<void> {\n await fetchAsync(VideoRequests.updateContentPipelineVideo(\n props.clipId,\n { hasPedagogyTags: formData.hasTagType }\n ));\n\n await fetchAsync(VideoRequests.addContentPipelineVideoComment(\n props.clipId,\n 'bypassPedagogyTags',\n formData.bypassCategory,\n formData.bypassReason\n ));\n\n onDone();\n }\n\n async function onToggleSkillTagRequirement(\n formData: ContentPipelineVideoTagsFormData,\n onDone: () => void\n ): Promise<void> {\n await fetchAsync(VideoRequests.updateContentPipelineVideo(\n props.clipId,\n { hasSkillTags: formData.hasTagType }\n ));\n\n await fetchAsync(VideoRequests.addContentPipelineVideoComment(\n props.clipId,\n 'bypassSkillTags',\n formData.bypassCategory,\n formData.bypassReason\n ));\n\n onDone();\n }\n\n function removeExistingTags(response: SearchResults<Tag>): Tag[] {\n return response.results?.filter(tag => !tagLookup[tag.id]);\n }\n\n function createAndAssociateTag(query: string, tagType: TagType): void {\n query = query.trim();\n\n if (!query.length)\n return;\n\n if (!TagHelper.isValidTagSearch(query)) {\n alerts.error(`Tag ${query} is not valid`);\n return;\n }\n\n if (!TagHelper.isValidTagLength(query)) {\n alerts.error(`Tag must be less than ${MAX_TAG_LENGTH} characters`);\n return;\n }\n\n if (tagType === TagType.Normal) {\n if (TagHelper.getTagByName(normalTags, query)) {\n alerts.error(`Tag <strong>${query}</strong> already exists on this video.`);\n return;\n }\n \n if (!TagHelper.canAddNormalTag(normalTags)) {\n alerts.error(`Maximum number of Keyword Tags (<strong>${MAX_KEYWORD_TAGS}</strong>) have been added.`);\n return;\n }\n }\n\n fetchAsync(ClipRequests.createTag(\n props.clipId,\n query,\n tagType,\n () => alerts.success(`<strong>${query}</strong> has been created and added.`),\n () => alerts.error(`Failed to create '${query}'.`)\n ));\n }\n\n function associateExistingTag(tag: Tag): void {\n if (tag.tagType === TagType.Normal && !TagHelper.canAddNormalTag(normalTags)) {\n alerts.error(`Maximum number of Keyword Tags (<strong>${MAX_KEYWORD_TAGS}</strong>) have been added.`);\n return;\n }\n\n fetchAsync(ClipRequests.associateTag(\n props.clipId,\n tag,\n () => alerts.success(`<strong>${tag.name}</strong> has been added.`),\n () => alerts.error(`Failed to add '${tag.name}'.`)\n ));\n }\n\n function dissociateExistingTag(tag: Tag): void {\n fetchAsync(ClipRequests.dissociateTag(\n props.clipId,\n tag,\n () => alerts.success(`<strong>${tag.name}</strong> has been removed.`),\n () => alerts.error(`Failed to remove <strong>${tag.name}</strong>.`)\n ));\n }\n \n function onTogglePedagogyTag(tag: Tag): void {\n if (TagHelper.getTagById(pedagogyTags, tag.id)) {\n dissociateExistingTag(tag);\n return;\n }\n\n associateExistingTag(tag);\n }\n \n function onToggleSkillTag(tag: Tag): void {\n if (TagHelper.getTagById(skillTags, tag.id)) {\n dissociateExistingTag(tag);\n return;\n }\n\n associateExistingTag(tag);\n }\n\n function getRemoteUrl(query: string, tagType: TagType): string {\n const localQuery = query.trim();\n\n if (!TagHelper.isValidTagSearch(localQuery))\n return null;\n \n return SearchRequests.searchTags(localQuery, tagType);\n }\n\n const dataLoaded =\n allPedagogyTags.hasCompleted &&\n allSkillTags.hasCompleted &&\n clip.hasCompleted;\n\n return (\n <>\n {!!currentUser.data && (\n <EditClipNav\n clipId={props.clipId}\n activeAction={Actions.Clips.EDIT_CLIP_TAGS}\n currentUser={currentUser.data}\n />\n )}\n <ObjectHeader object={clip.data} />\n {dataLoaded ? (\n <>\n <TagCloudForm\n type={TagType.Pedagogy}\n onSubmit={onTogglePedagogyTagRequirement}\n allTags={allPedagogyTags.data}\n tags={pedagogyTags}\n onToggleTag={onTogglePedagogyTag}\n heading='Pedagogy tags'\n description='Select tags to indicate how this clip should be used'\n contentPipelineVideo={contentPipelineClip.data}\n />\n \n <TagCloudForm\n type={TagType.Skill}\n onSubmit={onToggleSkillTagRequirement}\n allTags={allSkillTags.data}\n tags={skillTags}\n onToggleTag={onToggleSkillTag}\n heading='Skill tags'\n description='Select tags to indicate why this clip is useful'\n contentPipelineVideo={contentPipelineClip.data}\n />\n\n <div className='row'>\n <div className='col-lg-6'>\n <SearchBarWithTagList\n title='Keyword Tags'\n placeholder='Add a keyword tag'\n onRemove={dissociateExistingTag}\n tagList={normalTags}\n onSuggestionDependencies={[normalTags]}\n onSuggestionSelected={associateExistingTag}\n getRemoteUrl={(query: string) => getRemoteUrl(query, TagType.Normal)}\n formatRemoteSuggestions={(response: SearchResults<Tag>) => removeExistingTags(response)}\n onSubmit={(query: string) => createAndAssociateTag(query, TagType.Normal)}\n />\n </div>\n <div className='col-lg-6'>\n <SearchBarWithTagList\n title='Hidden Tags'\n placeholder='Add a hidden tag'\n onRemove={dissociateExistingTag}\n tagList={hiddenTags}\n onSuggestionDependencies={[hiddenTags]}\n onSuggestionSelected={associateExistingTag}\n getRemoteUrl={(query: string) => getRemoteUrl(query, TagType.Hidden)}\n formatRemoteSuggestions={(response: SearchResults<Tag>) => removeExistingTags(response)}\n onSubmit={(query: string) => createAndAssociateTag(query, TagType.Hidden)}\n />\n </div>\n </div>\n </>\n ) : (\n <div className='text-center p-5'>\n <Spinner as='div' animation='border' role='status' />\n </div>\n )}\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"DIDxfMO_.chunk.js","names":[],"sources":["../../../../../src/apps/clips/views/edit-clip-tags/EditClipTagsView.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { SearchResults } from 'libs/shared/apps/search/interfaces';\nimport { TagType } from 'libs/shared/enums/TagType';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Clip, CuratorUser, Tag, TagCollection } from 'libs/shared/interfaces';\n\nimport { ObjectHeader } from 'shared/components';\nimport { Actions } from 'shared/constants';\nimport { SearchRequests } from 'shared/flight-requests/SearchRequests';\nimport { TagRequests } from 'shared/flight-requests/TagRequests';\nimport { MAX_KEYWORD_TAGS, MAX_TAG_LENGTH, TagHelper } from 'shared/utils/TagHelper';\n\nimport { AssemblyLineRequests } from 'apps/assembly-line/flight-requests/AssemblyLineRequests';\nimport { AssemblyLineVideoResponse } from 'apps/assembly-line/interfaces/responses/AssemblyLineVideoResponse';\nimport { EditClipNav } from 'apps/clips/components/edit-clip-nav/EditClipNav';\nimport { ClipRequests } from 'apps/clips/flight-requests/CuratorClipRequests';\nimport { SearchBarWithTagList } from 'apps/videos/components/edit-video-tags/search-bar';\nimport { TagCloudForm } from 'apps/videos/components/edit-video-tags/tag-cloud-form/TagCloudForm';\nimport { VideoRequests } from 'apps/videos/flight-requests/CuratorVideoRequests';\nimport { ContentPipelineVideoTagsFormData } from 'apps/videos/views';\n\nfunction useFilterTags(tags: Tag[], type: TagType) {\n return React.useMemo(() => {\n return TagHelper.getTagsByType(tags, type);\n }, [tags?.length]);\n}\n\ninterface EditClipTagsViewProps {\n clipId: string;\n}\n\nexport function EditClipTagsView(\n props: EditClipTagsViewProps\n): React.ReactElement {\n const fetchAsync = Flight.useGetFetchAsync();\n const alerts = useAlerts();\n \n const currentUser = Flight.useBasicFetch<CuratorUser>(\n UserRequests.currentUser()\n );\n\n const clip = Flight.useBasicFetch<Clip>(ClipRequests.clip(props.clipId));\n const contentPipelineClip = Flight.useBasicFetch<AssemblyLineVideoResponse>(\n AssemblyLineRequests.getAssemblyLineVideo(props.clipId)\n );\n\n const allTagsResponse = Flight.useBasicFetch<TagCollection>(\n ClipRequests.clipTagsByType(props.clipId, [\n TagType.Normal,\n TagType.Pedagogy,\n TagType.Hidden,\n TagType.Skill\n ])\n );\n\n const normalTags = useFilterTags(allTagsResponse.data?.data, TagType.Normal);\n const pedagogyTags = useFilterTags(allTagsResponse.data?.data, TagType.Pedagogy);\n const skillTags = useFilterTags(allTagsResponse.data?.data, TagType.Skill);\n const hiddenTags = useFilterTags(allTagsResponse.data?.data, TagType.Hidden);\n const tagLookup = ArrayHelper.toObject(normalTags, 'id');\n\n const allPedagogyTags = Flight.useBasicFetch<Tag[]>(TagRequests.pedagogyTags());\n const allSkillTags = Flight.useBasicFetch<Tag[]>(TagRequests.skillTags());\n\n async function onTogglePedagogyTagRequirement(\n formData: ContentPipelineVideoTagsFormData,\n onDone: () => void\n ): Promise<void> {\n await fetchAsync(VideoRequests.updateContentPipelineVideo(\n props.clipId,\n { hasPedagogyTags: formData.hasTagType }\n ));\n\n await fetchAsync(VideoRequests.addContentPipelineVideoComment(\n props.clipId,\n 'bypassPedagogyTags',\n formData.bypassCategory,\n formData.bypassReason\n ));\n\n onDone();\n }\n\n async function onToggleSkillTagRequirement(\n formData: ContentPipelineVideoTagsFormData,\n onDone: () => void\n ): Promise<void> {\n await fetchAsync(VideoRequests.updateContentPipelineVideo(\n props.clipId,\n { hasSkillTags: formData.hasTagType }\n ));\n\n await fetchAsync(VideoRequests.addContentPipelineVideoComment(\n props.clipId,\n 'bypassSkillTags',\n formData.bypassCategory,\n formData.bypassReason\n ));\n\n onDone();\n }\n\n function removeExistingTags(response: SearchResults<Tag>): Tag[] {\n return response.results?.filter(tag => !tagLookup[tag.id]);\n }\n\n function createAndAssociateTag(query: string, tagType: TagType): void {\n query = query.trim();\n\n if (!query.length)\n return;\n\n if (!TagHelper.isValidTagSearch(query)) {\n alerts.error(`Tag ${query} is not valid`);\n return;\n }\n\n if (!TagHelper.isValidTagLength(query)) {\n alerts.error(`Tag must be less than ${MAX_TAG_LENGTH} characters`);\n return;\n }\n\n if (tagType === TagType.Normal) {\n if (TagHelper.getTagByName(normalTags, query)) {\n alerts.error(`Tag <strong>${query}</strong> already exists on this video.`);\n return;\n }\n \n if (!TagHelper.canAddNormalTag(normalTags)) {\n alerts.error(`Maximum number of Keyword Tags (<strong>${MAX_KEYWORD_TAGS}</strong>) have been added.`);\n return;\n }\n }\n\n fetchAsync(ClipRequests.createTag(\n props.clipId,\n query,\n tagType,\n () => alerts.success(`<strong>${query}</strong> has been created and added.`),\n () => alerts.error(`Failed to create '${query}'.`)\n ));\n }\n\n function associateExistingTag(tag: Tag): void {\n if (tag.tagType === TagType.Normal && !TagHelper.canAddNormalTag(normalTags)) {\n alerts.error(`Maximum number of Keyword Tags (<strong>${MAX_KEYWORD_TAGS}</strong>) have been added.`);\n return;\n }\n\n fetchAsync(ClipRequests.associateTag(\n props.clipId,\n tag,\n () => alerts.success(`<strong>${tag.name}</strong> has been added.`),\n () => alerts.error(`Failed to add '${tag.name}'.`)\n ));\n }\n\n function dissociateExistingTag(tag: Tag): void {\n fetchAsync(ClipRequests.dissociateTag(\n props.clipId,\n tag,\n () => alerts.success(`<strong>${tag.name}</strong> has been removed.`),\n () => alerts.error(`Failed to remove <strong>${tag.name}</strong>.`)\n ));\n }\n \n function onTogglePedagogyTag(tag: Tag): void {\n if (TagHelper.getTagById(pedagogyTags, tag.id)) {\n dissociateExistingTag(tag);\n return;\n }\n\n associateExistingTag(tag);\n }\n \n function onToggleSkillTag(tag: Tag): void {\n if (TagHelper.getTagById(skillTags, tag.id)) {\n dissociateExistingTag(tag);\n return;\n }\n\n associateExistingTag(tag);\n }\n\n function getRemoteUrl(query: string, tagType: TagType): string {\n const localQuery = query.trim();\n\n if (!TagHelper.isValidTagSearch(localQuery))\n return null;\n \n return SearchRequests.searchTags(localQuery, tagType);\n }\n\n const dataLoaded =\n allPedagogyTags.hasCompleted &&\n allSkillTags.hasCompleted &&\n clip.hasCompleted;\n\n return (\n <>\n {!!currentUser.data && (\n <EditClipNav\n clipId={props.clipId}\n activeAction={Actions.Clips.EDIT_CLIP_TAGS}\n currentUser={currentUser.data}\n />\n )}\n <ObjectHeader object={clip.data} />\n {dataLoaded ? (\n <>\n <TagCloudForm\n type={TagType.Pedagogy}\n onSubmit={onTogglePedagogyTagRequirement}\n allTags={allPedagogyTags.data}\n tags={pedagogyTags}\n onToggleTag={onTogglePedagogyTag}\n heading='Pedagogy tags'\n description='Select tags to indicate how this clip should be used'\n contentPipelineVideo={contentPipelineClip.data}\n />\n \n <TagCloudForm\n type={TagType.Skill}\n onSubmit={onToggleSkillTagRequirement}\n allTags={allSkillTags.data}\n tags={skillTags}\n onToggleTag={onToggleSkillTag}\n heading='Skill tags'\n description='Select tags to indicate why this clip is useful'\n contentPipelineVideo={contentPipelineClip.data}\n />\n\n <div className='row'>\n <div className='col-lg-6'>\n <SearchBarWithTagList\n title='Keyword Tags'\n placeholder='Add a keyword tag'\n onRemove={dissociateExistingTag}\n tagList={normalTags}\n onSuggestionDependencies={[normalTags]}\n onSuggestionSelected={associateExistingTag}\n getRemoteUrl={(query: string) => getRemoteUrl(query, TagType.Normal)}\n formatRemoteSuggestions={(response: SearchResults<Tag>) => removeExistingTags(response)}\n onSubmit={(query: string) => createAndAssociateTag(query, TagType.Normal)}\n />\n </div>\n <div className='col-lg-6'>\n <SearchBarWithTagList\n title='Hidden Tags'\n placeholder='Add a hidden tag'\n onRemove={dissociateExistingTag}\n tagList={hiddenTags}\n onSuggestionDependencies={[hiddenTags]}\n onSuggestionSelected={associateExistingTag}\n getRemoteUrl={(query: string) => getRemoteUrl(query, TagType.Hidden)}\n formatRemoteSuggestions={(response: SearchResults<Tag>) => removeExistingTags(response)}\n onSubmit={(query: string) => createAndAssociateTag(query, TagType.Hidden)}\n />\n </div>\n </div>\n </>\n ) : (\n <div className='text-center p-5'>\n <Spinner as='div' animation='border' role='status' />\n </div>\n )}\n </>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{C as e,a as t,b as n,i as r,ln as i}from"./rp704-Pm.chunk.js";import{a,n as o,r as s,t as c}from"./Crs6pJ2h.chunk.js";import{t as l}from"./Di_u2uix.chunk.js";import{t as u}from"./BvMTtGLi.chunk.js";import"./CfCYHRuo.chunk.js";import{t as d}from"./M97_Ztsu.chunk.js";import{t as f}from"./UCDGupVs.chunk.js";import{r as p}from"./DkstLT1W.chunk.js";import{Q as m,_ as h,i as g,lt as _,t as v}from"./a9Q9HOAR2.chunk.js";import{S as y}from"./BhKv6dKl2.chunk.js";import{t as b}from"./D-JsEiDq2.chunk.js";import{n as ee}from"./CbiGs3Tn.chunk.js";import{t as x}from"./BT15PHGF.chunk.js";import{t as S}from"./BkdBq-7h.chunk.js";import{r as C,s as w,u as T}from"./Dgk5cBBe.chunk.js";import{t as te}from"./Bw7dP6jB.chunk.js";import{t as E}from"./DpqbC5uX.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as D}from"./C1PTqhPY.chunk.js";import{n as O}from"./D_O97jwq.chunk.js";import{t as k}from"./B1uI4W1W.chunk.js";import"./BCfBk23W.chunk.js";import{t as ne}from"./DjzD1n9W.chunk.js";import{t as re}from"./Bwpvc7Th2.chunk.js";import{t as A}from"./D3Y3JuWB.chunk.js";import{t as j}from"./BhWPGAdN2.chunk.js";import{t as M}from"./2NdfwDHB.chunk.js";import{t as N}from"./BNgL3wBw.chunk.js";import{t as ie}from"./C8hLOeBc2.chunk.js";import{n as ae,t as oe}from"./emEFahzJ.chunk.js";import{r as P,t as F}from"./C1dPsO8J.chunk.js";import{t as se}from"./BJ446NoM.chunk.js";import{t as ce}from"./CKEVcLfZ.chunk.js";import{t as le}from"./mIR_gnUV.chunk.js";import{t as ue}from"./sFtEbbEW.chunk.js";import{t as de}from"./BEG8TyGD.chunk.js";import{n as I,r as L,t as R}from"./D2iK_uRt.chunk.js";import{t as z}from"./BDr_eDjS2.chunk.js";var B=i(_()),V=i(t()),H=r(),U=V.forwardRef(({bsPrefix:e,bg:t=`primary`,pill:n=!1,text:r,className:i,as:a=`span`,...o},s)=>{let c=m(e,`badge`);return(0,H.jsx)(a,{ref:s,...o,className:(0,B.default)(i,c,n&&`rounded-pill`,r&&`text-${r}`,t&&`bg-${t}`)})});U.displayName=`Badge`;var W=`YYYY-MM-DD`,fe=e=>{let t=e.user.dateCreated?S.fromNow(e.user.dateCreated):`-`,n=e.user.dateModified?S.fromNow(e.user.dateModified):`-`;return(0,H.jsxs)(`div`,{children:[(0,H.jsxs)(`div`,{className:`d-flex flex-column`,children:[(0,H.jsx)(`small`,{children:`Date created`}),(0,H.jsx)(a,{title:S.format(e.user.dateCreated,W),spanHack:!0,spanHackClassName:`w-fit`,children:t})]}),(0,H.jsx)(`hr`,{}),(0,H.jsxs)(`div`,{className:`d-flex flex-column`,children:[`Date modified`,(0,H.jsx)(a,{title:S.format(e.user.dateModified,W),spanHack:!0,spanHackClassName:`w-fit`,children:n})]})]})},G=x.encloseNamespace(`userManager.userUpdatedSuccess`);function K(e){switch(e){case`activation`:return G(`activationEmailSentTitle`);case`verification`:return G(`verificationEmailSentTitle`);case`reset-password`:return G(`resetPasswordEmailSentTitle`)}}function q(e){switch(e){case`activation`:return G(`activationEmailSentBody`);case`verification`:return G(`verificationEmailSentBody`);case`reset-password`:return G(`resetPasswordEmailSentBody`)}}function pe(e){return(0,H.jsxs)(b,{title:K(e.emailType),closePopup:e.closePopup,children:[(0,H.jsx)(`div`,{className:`d-flex justify-content-center w-50 mx-auto pb-3`,children:(0,H.jsx)(`img`,{src:e.emailSentImageUrl,alt:``,role:`presentation`,className:`w-100`})}),(0,H.jsx)(`p`,{children:q(e.emailType)})]})}function me(e){return(0,H.jsxs)(`div`,{className:`mt-2`,children:[(0,H.jsx)(`hr`,{}),(0,H.jsx)(`h6`,{children:`Daily credit limit`}),(0,H.jsx)(`p`,{children:e.userCredit.creditLimit})]})}function he(e){let t=`An error occurred.`;return e.user.statusCode===n.NotFound&&(t=`User could not be found`),e.customer.statusCode===n.NotFound&&(t=`Customer could not be found`),(0,H.jsxs)(H.Fragment,{children:[e.customer.data&&(0,H.jsxs)(`h1`,{className:`h6 mb-0`,children:[e.customer.data.name,` - `,e.customer.data.crmId]}),(0,H.jsx)(`div`,{className:`my-2`,children:(0,H.jsx)(y,{appLink:e.customerAppLink})}),(0,H.jsx)(`div`,{className:`py-3`,children:t})]})}var J=13;function ge(e){if(!e.customers.data||e.customers.data.length===0||e.customers.data.length===1&&E.first(e.customers.data).id.toString()===e.currentCustomer.id.toString())return(0,H.jsx)(H.Fragment,{});function t(t){return{application:u.CUSTOMERS,action:l.Customers.EDIT_USER,args:[t.id,e.userId],params:{userType:e.userType}}}function n(t){return{application:u.CUSTOMERS,action:l.Customers.REMOVE_USER_FROM_CUSTOMER,args:[t.id,e.userId]}}let r=({items:r,right:i})=>(0,H.jsx)(`ul`,{className:`list-unstyled`,children:r.map((l,u)=>{let d=u+1===r.length,f=`border w-100 p-2 d-flex justify-content-between`;return d||(f+=` border-bottom-0`),i&&(f+=` border-start-0`),(0,H.jsxs)(`li`,{className:f,children:[(0,H.jsxs)(c,{appLink:t(l),children:[l.name,` (`,l.crmId,`)`,l.id.toString()===e.currentCustomer.id.toString()&&(0,H.jsx)(U,{bg:`secondary`,className:`ms-1`,children:`Current customer`})]}),(0,H.jsx)(a,{title:`Remove user from ${l.name}`,spanHack:!0,spanHackClassName:`ms-1`,children:(0,H.jsx)(c,{appLink:n(l),children:(0,H.jsx)(o,{svg:M,size:s.Small})})})]},u)})}),i={application:u.CUSTOMERS,action:l.Customers.ADD_USER_TO_CUSTOMER,args:[e.currentCustomer.id,e.userId]};return(0,H.jsxs)(`div`,{className:`mt-2`,children:[(0,H.jsx)(`h6`,{children:`User's other customers`}),(0,H.jsxs)(`p`,{children:[`This user exists in multiple customers. This user's details are currently scoped to\xA0`,(0,H.jsx)(`strong`,{children:e.currentCustomer.name}),` (`,e.currentCustomer.crmId,`). Details such as year level are representative of this user's data within this customer.`]}),(0,H.jsxs)(`div`,{className:`row m-0 p-0`,children:[(0,H.jsx)(`div`,{className:`col m-0 p-0`,children:(0,H.jsx)(r,{items:e.customers.data.slice(0,J)})}),(0,H.jsx)(`div`,{className:`col m-0 p-0`,children:(0,H.jsx)(r,{items:e.customers.data.slice(J),right:!0})})]}),(0,H.jsxs)(`div`,{className:`d-flex justify-content-between mt-1`,children:[(0,H.jsxs)(c,{appLink:i,children:[(0,H.jsx)(o,{svg:k,size:s.Small}),`Add user to another customer`]}),(e.customers.pagination?.cursors?.next||e.customers.pagination?.cursors?.previous)&&(0,H.jsx)(N,{cursors:e.customers.pagination?.cursors,buttonVariant:`outline-dark`,onClick:e.setCursor})]}),(0,H.jsx)(`hr`,{})]})}var Y=2**53-1;function X(e){let{allocationInBytes:t=0,sizeInBytes:n=0}=e.userWorkspaceUsage.workspaceSizeAllocation||{},r=t===Y,i=(t/1024/1024/1024).toFixed(0),a=(n/1024/1024/1024).toFixed(2),o=(n/t*100).toFixed(2);return(0,H.jsxs)(`div`,{className:`mt-2`,children:[(0,H.jsx)(`hr`,{}),(0,H.jsx)(`h6`,{children:`Workspace`}),(0,H.jsxs)(`p`,{className:`m-0`,children:[`No. of videos: `,e.userWorkspaceUsage.videoCount]}),(0,H.jsxs)(`p`,{className:`m-0`,children:[`No. of clips: `,e.userWorkspaceUsage.clipCount]}),(0,H.jsxs)(`p`,{className:`m-0`,children:[`No. of interactives: `,e.userWorkspaceUsage.interactiveCount]}),(0,H.jsxs)(`p`,{className:`m-0`,children:[`Allocation: `,r?`Unlimited`:`${i} GB`]}),(0,H.jsxs)(`p`,{className:`m-0`,children:[`Allocation used: `,a,` GB`]}),!r&&(0,H.jsxs)(`p`,{className:`m-0`,children:[`Percentage of allocation used: `,o,`%`]})]})}var Z=x.encloseNamespace(`userManager.editUser`);function Q(t){let[n,r]=V.useState(null),[i,a]=V.useState(``),o=re(),s=te(),c=T(),{hasPermissions:l}=ne(),u=F.getUser(t.customerId,t.id),m=w(F.otherCustomers(t.customerId,t.id,i)),_=w(F.customer(t.customerId)),b=w(u),x=w(f.currentUser()),S=w(F.yearGroups(t.customerId)),E=w(A.userPlaylistsAll(t.id)),k=w(A.userWorkspaceUsage(t.customerId,t.id)),M=w(F.passwordPolicy(t.customerId)),N=w(F.getAuthenticationMethodsByUserIds(t.customerId,[t.id],u.normalizeOptions?.namespace)),B=w(F.getCustomerProducts(t.customerId)),U=_.data?.contentRegion&&_.data?.contentRegion.systemName!==d.US,W=w(U&&F.getCustomerUserCredit(t.customerId,t.id)),G=l(p.UserCreditUpdate),K=b.data?.userType,q=R(t.customerId,K,t.returnAppLinkCursor);L(b,t.customerId,t.returnAppLinkCursor);function J(e){let n=P.formatCreateOrValidateUserRequest([e],K,t.customerId);return c(F.bulkValidate(n,!1,t.customerId))}async function Y(e,n){if(b.data.status===O.Disabled)return;let r=await J(e);if(!P.handleAsyncErrors(r,e,b.data,n))return;let i=P.formatEditUserRequest(e);C(s,F.updateUser(t.customerId,i,x.data.id,e=>{if(v.logUserAction(e,t.analyticsOptions),b.data.email!==e.email){e.status===O.Inactive&&Q(e),e.status===O.Active&&$(e);return}o.success(Z(`success`))},()=>{o.error(Z(`error`))},()=>{},b.data?.masterYearGroup?.value===0&&e.masterYearGroup?.value!==0))}function Q(e){C(s,F.resendActivationEmail(t.customerId,e.id,()=>{v.logUserAction(e,{...t.analyticsOptions,actionType:h.SendEmail,descriptor:g.ActivateUser}),r(`activation`)},()=>{o.error(Z(`activationEmailError`))}))}function _e(e){C(s,F.sendPasswordResetEmail(t.customerId,e.id,()=>{v.logUserAction(e,{...t.analyticsOptions,actionType:h.SendEmail,descriptor:g.ResetPasswordEmail}),r(`reset-password`)},()=>{o.error(Z(`passwordResetEmailError`))}))}function $(e){C(s,F.resendVerificationEmail(t.customerId,e.id,()=>{v.logUserAction(e,{...t.analyticsOptions,actionType:h.SendEmail,descriptor:g.VerifyEmail}),r(`verification`)},()=>{o.error(Z(`verificationEmailError`))}))}let ve=!!_.data&&!!b.data&&!!x.data&&!!S.data&&!!M.data&&!!N.data&&(!U||!!W.data);return _.hasError||b.hasError||x.hasError||S.hasError||M.hasError||N.hasError?(0,H.jsx)(he,{customer:_,user:b,customerAppLink:q}):ve?(0,H.jsxs)(se.Provider,{value:oe.Curator,children:[m.data?(0,H.jsx)(ge,{customers:m.data,currentCustomer:_.data,userType:K,userId:t.id,setCursor:a}):(0,H.jsxs)(`div`,{className:`d-flex justify-content-center align-items-center`,style:{height:`100px`},children:[` `,(0,H.jsx)(ee,{as:`div`,animation:`border`,role:`status`})]}),(0,H.jsxs)(`h1`,{className:`h6 mb-0`,children:[_.data.name,` - `,_.data.crmId]}),(0,H.jsx)(`div`,{className:`my-2`,children:(0,H.jsx)(y,{appLink:q,backToName:K===D.Learner?`Students`:`Staff`})}),(0,H.jsx)(`div`,{className:`d-flex`,children:(0,H.jsx)(ae,{user:b.data,currentUser:x.data,className:`mb-2`})}),(0,H.jsx)(le,{user:b.data,userType:K,yearGroups:K===D.Learner?S.data:null,initialValues:I(b.data,t.customerId),initialErrors:P.getInitialErrorsForInvalidYearGroups(b.data.masterYearGroup),onSubmit:Y,onClickCancel:()=>e.trigger(q),currentUser:x.data,emailRequired:K===D.Staff,showActions:!0,appLinks:ce(t.customerId,K),onClickResendActivationEmail:Q,onClickSendResetEmail:_e,onClickSendVerificationEmail:$,showDisplayNameField:K===D.Staff,passwordPolicy:M.data,canEditSsoFields:l(p.UsersSsoUpdate),products:B.data?.map(e=>e.id)??[],hasUserCredit:U&&G,hasOrg:!!_.data?.organisation,canEditSuperAdmin:!0}),G&&W.data&&(0,H.jsx)(me,{userCredit:W.data}),(0,H.jsx)(`hr`,{}),(0,H.jsx)(de,{user:b.data}),(0,H.jsx)(`hr`,{}),(0,H.jsx)(fe,{user:b.data}),(0,H.jsx)(`hr`,{}),(0,H.jsx)(ue,{user:b.data}),!!k.data&&(0,H.jsx)(X,{userWorkspaceUsage:k.data}),!!E.data&&(0,H.jsx)(z,{playlists:E.data}),!!n&&(0,H.jsx)(pe,{emailType:n,emailSentImageUrl:ie.UserManager.EMAIL_SENT,closePopup:()=>r(null)})]}):(0,H.jsx)(`div`,{className:`py-5`,children:(0,H.jsx)(j,{})})}export{Q as EditUserView};
2
- //# sourceMappingURL=CV7UIOmh2.chunk.js.map
1
+ import{C as e,a as t,b as n,i as r,ln as i}from"./rp704-Pm.chunk.js";import{a,n as o,r as s,t as c}from"./Crs6pJ2h.chunk.js";import{t as l}from"./Di_u2uix.chunk.js";import{t as u}from"./BvMTtGLi.chunk.js";import"./CfCYHRuo.chunk.js";import{t as d}from"./M97_Ztsu.chunk.js";import{t as f}from"./UCDGupVs.chunk.js";import{r as p}from"./DkstLT1W.chunk.js";import{Q as m,_ as h,i as g,lt as _,t as v}from"./a9Q9HOAR2.chunk.js";import{S as y}from"./GpDEun8c2.chunk.js";import{t as b}from"./D-JsEiDq2.chunk.js";import{n as ee}from"./CbiGs3Tn.chunk.js";import{t as x}from"./BT15PHGF.chunk.js";import{t as S}from"./BkdBq-7h.chunk.js";import{r as C,s as w,u as T}from"./Dgk5cBBe.chunk.js";import{t as te}from"./Bw7dP6jB.chunk.js";import{t as E}from"./DpqbC5uX.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as D}from"./C1PTqhPY.chunk.js";import{n as O}from"./D_O97jwq.chunk.js";import{t as k}from"./B1uI4W1W.chunk.js";import"./BCfBk23W.chunk.js";import{t as ne}from"./DjzD1n9W.chunk.js";import{t as re}from"./Bwpvc7Th2.chunk.js";import{t as A}from"./D3Y3JuWB.chunk.js";import{t as j}from"./BhWPGAdN2.chunk.js";import{t as M}from"./2NdfwDHB.chunk.js";import{t as N}from"./BNgL3wBw.chunk.js";import{t as ie}from"./C8hLOeBc2.chunk.js";import{n as ae,t as oe}from"./emEFahzJ.chunk.js";import{r as P,t as F}from"./C1dPsO8J.chunk.js";import{t as se}from"./BJ446NoM.chunk.js";import{t as ce}from"./CKEVcLfZ.chunk.js";import{t as le}from"./mIR_gnUV.chunk.js";import{t as ue}from"./sFtEbbEW.chunk.js";import{t as de}from"./BEG8TyGD.chunk.js";import{n as I,r as L,t as R}from"./Cf5cjLzK.chunk.js";import{t as z}from"./BDr_eDjS2.chunk.js";var B=i(_()),V=i(t()),H=r(),U=V.forwardRef(({bsPrefix:e,bg:t=`primary`,pill:n=!1,text:r,className:i,as:a=`span`,...o},s)=>{let c=m(e,`badge`);return(0,H.jsx)(a,{ref:s,...o,className:(0,B.default)(i,c,n&&`rounded-pill`,r&&`text-${r}`,t&&`bg-${t}`)})});U.displayName=`Badge`;var W=`YYYY-MM-DD`,fe=e=>{let t=e.user.dateCreated?S.fromNow(e.user.dateCreated):`-`,n=e.user.dateModified?S.fromNow(e.user.dateModified):`-`;return(0,H.jsxs)(`div`,{children:[(0,H.jsxs)(`div`,{className:`d-flex flex-column`,children:[(0,H.jsx)(`small`,{children:`Date created`}),(0,H.jsx)(a,{title:S.format(e.user.dateCreated,W),spanHack:!0,spanHackClassName:`w-fit`,children:t})]}),(0,H.jsx)(`hr`,{}),(0,H.jsxs)(`div`,{className:`d-flex flex-column`,children:[`Date modified`,(0,H.jsx)(a,{title:S.format(e.user.dateModified,W),spanHack:!0,spanHackClassName:`w-fit`,children:n})]})]})},G=x.encloseNamespace(`userManager.userUpdatedSuccess`);function K(e){switch(e){case`activation`:return G(`activationEmailSentTitle`);case`verification`:return G(`verificationEmailSentTitle`);case`reset-password`:return G(`resetPasswordEmailSentTitle`)}}function q(e){switch(e){case`activation`:return G(`activationEmailSentBody`);case`verification`:return G(`verificationEmailSentBody`);case`reset-password`:return G(`resetPasswordEmailSentBody`)}}function pe(e){return(0,H.jsxs)(b,{title:K(e.emailType),closePopup:e.closePopup,children:[(0,H.jsx)(`div`,{className:`d-flex justify-content-center w-50 mx-auto pb-3`,children:(0,H.jsx)(`img`,{src:e.emailSentImageUrl,alt:``,role:`presentation`,className:`w-100`})}),(0,H.jsx)(`p`,{children:q(e.emailType)})]})}function me(e){return(0,H.jsxs)(`div`,{className:`mt-2`,children:[(0,H.jsx)(`hr`,{}),(0,H.jsx)(`h6`,{children:`Daily credit limit`}),(0,H.jsx)(`p`,{children:e.userCredit.creditLimit})]})}function he(e){let t=`An error occurred.`;return e.user.statusCode===n.NotFound&&(t=`User could not be found`),e.customer.statusCode===n.NotFound&&(t=`Customer could not be found`),(0,H.jsxs)(H.Fragment,{children:[e.customer.data&&(0,H.jsxs)(`h1`,{className:`h6 mb-0`,children:[e.customer.data.name,` - `,e.customer.data.crmId]}),(0,H.jsx)(`div`,{className:`my-2`,children:(0,H.jsx)(y,{appLink:e.customerAppLink})}),(0,H.jsx)(`div`,{className:`py-3`,children:t})]})}var J=13;function ge(e){if(!e.customers.data||e.customers.data.length===0||e.customers.data.length===1&&E.first(e.customers.data).id.toString()===e.currentCustomer.id.toString())return(0,H.jsx)(H.Fragment,{});function t(t){return{application:u.CUSTOMERS,action:l.Customers.EDIT_USER,args:[t.id,e.userId],params:{userType:e.userType}}}function n(t){return{application:u.CUSTOMERS,action:l.Customers.REMOVE_USER_FROM_CUSTOMER,args:[t.id,e.userId]}}let r=({items:r,right:i})=>(0,H.jsx)(`ul`,{className:`list-unstyled`,children:r.map((l,u)=>{let d=u+1===r.length,f=`border w-100 p-2 d-flex justify-content-between`;return d||(f+=` border-bottom-0`),i&&(f+=` border-start-0`),(0,H.jsxs)(`li`,{className:f,children:[(0,H.jsxs)(c,{appLink:t(l),children:[l.name,` (`,l.crmId,`)`,l.id.toString()===e.currentCustomer.id.toString()&&(0,H.jsx)(U,{bg:`secondary`,className:`ms-1`,children:`Current customer`})]}),(0,H.jsx)(a,{title:`Remove user from ${l.name}`,spanHack:!0,spanHackClassName:`ms-1`,children:(0,H.jsx)(c,{appLink:n(l),children:(0,H.jsx)(o,{svg:M,size:s.Small})})})]},u)})}),i={application:u.CUSTOMERS,action:l.Customers.ADD_USER_TO_CUSTOMER,args:[e.currentCustomer.id,e.userId]};return(0,H.jsxs)(`div`,{className:`mt-2`,children:[(0,H.jsx)(`h6`,{children:`User's other customers`}),(0,H.jsxs)(`p`,{children:[`This user exists in multiple customers. This user's details are currently scoped to\xA0`,(0,H.jsx)(`strong`,{children:e.currentCustomer.name}),` (`,e.currentCustomer.crmId,`). Details such as year level are representative of this user's data within this customer.`]}),(0,H.jsxs)(`div`,{className:`row m-0 p-0`,children:[(0,H.jsx)(`div`,{className:`col m-0 p-0`,children:(0,H.jsx)(r,{items:e.customers.data.slice(0,J)})}),(0,H.jsx)(`div`,{className:`col m-0 p-0`,children:(0,H.jsx)(r,{items:e.customers.data.slice(J),right:!0})})]}),(0,H.jsxs)(`div`,{className:`d-flex justify-content-between mt-1`,children:[(0,H.jsxs)(c,{appLink:i,children:[(0,H.jsx)(o,{svg:k,size:s.Small}),`Add user to another customer`]}),(e.customers.pagination?.cursors?.next||e.customers.pagination?.cursors?.previous)&&(0,H.jsx)(N,{cursors:e.customers.pagination?.cursors,buttonVariant:`outline-dark`,onClick:e.setCursor})]}),(0,H.jsx)(`hr`,{})]})}var Y=2**53-1;function X(e){let{allocationInBytes:t=0,sizeInBytes:n=0}=e.userWorkspaceUsage.workspaceSizeAllocation||{},r=t===Y,i=(t/1024/1024/1024).toFixed(0),a=(n/1024/1024/1024).toFixed(2),o=(n/t*100).toFixed(2);return(0,H.jsxs)(`div`,{className:`mt-2`,children:[(0,H.jsx)(`hr`,{}),(0,H.jsx)(`h6`,{children:`Workspace`}),(0,H.jsxs)(`p`,{className:`m-0`,children:[`No. of videos: `,e.userWorkspaceUsage.videoCount]}),(0,H.jsxs)(`p`,{className:`m-0`,children:[`No. of clips: `,e.userWorkspaceUsage.clipCount]}),(0,H.jsxs)(`p`,{className:`m-0`,children:[`No. of interactives: `,e.userWorkspaceUsage.interactiveCount]}),(0,H.jsxs)(`p`,{className:`m-0`,children:[`Allocation: `,r?`Unlimited`:`${i} GB`]}),(0,H.jsxs)(`p`,{className:`m-0`,children:[`Allocation used: `,a,` GB`]}),!r&&(0,H.jsxs)(`p`,{className:`m-0`,children:[`Percentage of allocation used: `,o,`%`]})]})}var Z=x.encloseNamespace(`userManager.editUser`);function Q(t){let[n,r]=V.useState(null),[i,a]=V.useState(``),o=re(),s=te(),c=T(),{hasPermissions:l}=ne(),u=F.getUser(t.customerId,t.id),m=w(F.otherCustomers(t.customerId,t.id,i)),_=w(F.customer(t.customerId)),b=w(u),x=w(f.currentUser()),S=w(F.yearGroups(t.customerId)),E=w(A.userPlaylistsAll(t.id)),k=w(A.userWorkspaceUsage(t.customerId,t.id)),M=w(F.passwordPolicy(t.customerId)),N=w(F.getAuthenticationMethodsByUserIds(t.customerId,[t.id],u.normalizeOptions?.namespace)),B=w(F.getCustomerProducts(t.customerId)),U=_.data?.contentRegion&&_.data?.contentRegion.systemName!==d.US,W=w(U&&F.getCustomerUserCredit(t.customerId,t.id)),G=l(p.UserCreditUpdate),K=b.data?.userType,q=R(t.customerId,K,t.returnAppLinkCursor);L(b,t.customerId,t.returnAppLinkCursor);function J(e){let n=P.formatCreateOrValidateUserRequest([e],K,t.customerId);return c(F.bulkValidate(n,!1,t.customerId))}async function Y(e,n){if(b.data.status===O.Disabled)return;let r=await J(e);if(!P.handleAsyncErrors(r,e,b.data,n))return;let i=P.formatEditUserRequest(e);C(s,F.updateUser(t.customerId,i,x.data.id,e=>{if(v.logUserAction(e,t.analyticsOptions),b.data.email!==e.email){e.status===O.Inactive&&Q(e),e.status===O.Active&&$(e);return}o.success(Z(`success`))},()=>{o.error(Z(`error`))},()=>{},b.data?.masterYearGroup?.value===0&&e.masterYearGroup?.value!==0))}function Q(e){C(s,F.resendActivationEmail(t.customerId,e.id,()=>{v.logUserAction(e,{...t.analyticsOptions,actionType:h.SendEmail,descriptor:g.ActivateUser}),r(`activation`)},()=>{o.error(Z(`activationEmailError`))}))}function _e(e){C(s,F.sendPasswordResetEmail(t.customerId,e.id,()=>{v.logUserAction(e,{...t.analyticsOptions,actionType:h.SendEmail,descriptor:g.ResetPasswordEmail}),r(`reset-password`)},()=>{o.error(Z(`passwordResetEmailError`))}))}function $(e){C(s,F.resendVerificationEmail(t.customerId,e.id,()=>{v.logUserAction(e,{...t.analyticsOptions,actionType:h.SendEmail,descriptor:g.VerifyEmail}),r(`verification`)},()=>{o.error(Z(`verificationEmailError`))}))}let ve=!!_.data&&!!b.data&&!!x.data&&!!S.data&&!!M.data&&!!N.data&&(!U||!!W.data);return _.hasError||b.hasError||x.hasError||S.hasError||M.hasError||N.hasError?(0,H.jsx)(he,{customer:_,user:b,customerAppLink:q}):ve?(0,H.jsxs)(se.Provider,{value:oe.Curator,children:[m.data?(0,H.jsx)(ge,{customers:m.data,currentCustomer:_.data,userType:K,userId:t.id,setCursor:a}):(0,H.jsxs)(`div`,{className:`d-flex justify-content-center align-items-center`,style:{height:`100px`},children:[` `,(0,H.jsx)(ee,{as:`div`,animation:`border`,role:`status`})]}),(0,H.jsxs)(`h1`,{className:`h6 mb-0`,children:[_.data.name,` - `,_.data.crmId]}),(0,H.jsx)(`div`,{className:`my-2`,children:(0,H.jsx)(y,{appLink:q,backToName:K===D.Learner?`Students`:`Staff`})}),(0,H.jsx)(`div`,{className:`d-flex`,children:(0,H.jsx)(ae,{user:b.data,currentUser:x.data,className:`mb-2`})}),(0,H.jsx)(le,{user:b.data,userType:K,yearGroups:K===D.Learner?S.data:null,initialValues:I(b.data,t.customerId),initialErrors:P.getInitialErrorsForInvalidYearGroups(b.data.masterYearGroup),onSubmit:Y,onClickCancel:()=>e.trigger(q),currentUser:x.data,emailRequired:K===D.Staff,showActions:!0,appLinks:ce(t.customerId,K),onClickResendActivationEmail:Q,onClickSendResetEmail:_e,onClickSendVerificationEmail:$,showDisplayNameField:K===D.Staff,passwordPolicy:M.data,canEditSsoFields:l(p.UsersSsoUpdate),products:B.data?.map(e=>e.id)??[],hasUserCredit:U&&G,hasOrg:!!_.data?.organisation,canEditSuperAdmin:!0}),G&&W.data&&(0,H.jsx)(me,{userCredit:W.data}),(0,H.jsx)(`hr`,{}),(0,H.jsx)(de,{user:b.data}),(0,H.jsx)(`hr`,{}),(0,H.jsx)(fe,{user:b.data}),(0,H.jsx)(`hr`,{}),(0,H.jsx)(ue,{user:b.data}),!!k.data&&(0,H.jsx)(X,{userWorkspaceUsage:k.data}),!!E.data&&(0,H.jsx)(z,{playlists:E.data}),!!n&&(0,H.jsx)(pe,{emailType:n,emailSentImageUrl:ie.UserManager.EMAIL_SENT,closePopup:()=>r(null)})]}):(0,H.jsx)(`div`,{className:`py-5`,children:(0,H.jsx)(j,{})})}export{Q as EditUserView};
2
+ //# sourceMappingURL=DMq1wDNm2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CV7UIOmh2.chunk.js","names":[],"sources":["../../../../../../../../node_modules/react-bootstrap/esm/Badge.js","../../../../../../../libs/shared/src/apps/user-manager/components/user-list-items/components/UserCreatedDate.tsx","../../../../../../../libs/shared/src/apps/user-manager/components/user-updated-success/UserUpdatedSuccess.tsx","../../../../../src/apps/crm-studio/views/users/edit-user/components/user-credit/UserCredit.tsx","../../../../../src/apps/crm-studio/views/users/edit-user/components/edit-user-error-view/EditUserErrorView.tsx","../../../../../src/apps/crm-studio/views/users/edit-user/components/other-customers/OtherCustomers.tsx","../../../../../src/apps/crm-studio/views/users/edit-user/components/user-workspace-usage-summary/UserWorkspaceUsageSummary.tsx","../../../../../src/apps/crm-studio/views/users/edit-user/EditUserView.tsx"],"sourcesContent":["\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst Badge = /*#__PURE__*/React.forwardRef(({\n bsPrefix,\n bg = 'primary',\n pill = false,\n text,\n className,\n as: Component = 'span',\n ...props\n}, ref) => {\n const prefix = useBootstrapPrefix(bsPrefix, 'badge');\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: classNames(className, prefix, pill && `rounded-pill`, text && `text-${text}`, bg && `bg-${bg}`)\n });\n});\nBadge.displayName = 'Badge';\nexport default Badge;","import React from 'react';\n\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { User } from 'libs/shared/interfaces';\n\ninterface UserCreatedDateProps {\n user: User;\n}\n\nconst FORMATTER = 'YYYY-MM-DD';\n\nexport const UserCreatedDate = (props: UserCreatedDateProps) => {\n const createdfromNow = props.user.dateCreated ? DateHelper.fromNow(props.user.dateCreated) : '-';\n const modifiedfromNow = props.user.dateModified ? DateHelper.fromNow(props.user.dateModified) : '-';\n\n return (\n <div>\n <div className='d-flex flex-column'>\n <small>\n Date created\n </small>\n <Tooltip title={DateHelper.format(props.user.dateCreated, FORMATTER)} spanHack spanHackClassName='w-fit'>\n {createdfromNow}\n </Tooltip>\n </div>\n <hr/>\n <div className='d-flex flex-column'>\n Date modified\n <Tooltip title={DateHelper.format(props.user.dateModified, FORMATTER)} spanHack spanHackClassName='w-fit'>\n {modifiedfromNow}\n </Tooltip>\n </div>\n </div>\n );\n};\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PropsWithPopupViewProps } from 'libs/shared/interfaces';\n\nconst namespace = 'userManager.userUpdatedSuccess';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport type UserEmailType = 'activation' | 'verification' | 'reset-password';\n\nfunction getTitle(emailType: UserEmailType): string {\n switch (emailType) {\n case 'activation':\n return getPhrase('activationEmailSentTitle');\n case 'verification':\n return getPhrase('verificationEmailSentTitle');\n case 'reset-password':\n return getPhrase('resetPasswordEmailSentTitle');\n }\n}\n\nfunction getBody(emailType: UserEmailType): string {\n switch (emailType) {\n case 'activation':\n return getPhrase('activationEmailSentBody');\n case 'verification':\n return getPhrase('verificationEmailSentBody');\n case 'reset-password':\n return getPhrase('resetPasswordEmailSentBody');\n }\n}\n\ninterface UserUpdatedSuccessProps {\n emailType: UserEmailType;\n emailSentImageUrl: string;\n}\n\nexport function UserUpdatedSuccess(props: PropsWithPopupViewProps<UserUpdatedSuccessProps>): JSX.Element {\n return (\n <Popup\n title={getTitle(props.emailType)}\n closePopup={props.closePopup}\n >\n <div className='d-flex justify-content-center w-50 mx-auto pb-3'>\n <img\n src={props.emailSentImageUrl}\n alt=''\n role='presentation'\n className='w-100'\n />\n </div>\n <p>\n {getBody(props.emailType)}\n </p>\n </Popup>\n );\n}\n","import React from 'react';\n\nimport { UserCredit } from 'libs/shared/interfaces';\n\ninterface UserCreditSectionProps {\n userCredit: UserCredit;\n}\n\nexport function UserCreditSection(props: UserCreditSectionProps): JSX.Element {\n return (\n <div className='mt-2'>\n <hr />\n <h6>Daily credit limit</h6>\n <p>{props.userCredit.creditLimit}</p>\n </div>\n );\n}\n","import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { Customer, User } from 'libs/shared/interfaces';\n\nimport { BackButton } from 'shared/components';\n\ninterface EditUserErrorViewProps {\n customer: Flight.Response<Customer>;\n user: Flight.Response<User>;\n customerAppLink: Core.AppLink;\n}\n\nexport function EditUserErrorView(props: EditUserErrorViewProps): JSX.Element {\n let errorMessage = 'An error occurred.';\n\n if (props.user.statusCode === HttpStatus.NotFound)\n errorMessage = 'User could not be found';\n\n if (props.customer.statusCode === HttpStatus.NotFound)\n errorMessage = 'Customer could not be found';\n\n return (\n <>\n {props.customer.data && <h1 className='h6 mb-0'>{props.customer.data.name} - {props.customer.data.crmId}</h1>}\n <div className='my-2'>\n <BackButton appLink={props.customerAppLink} />\n </div>\n <div className='py-3'>\n {errorMessage}\n </div>\n </>\n );\n}\n","import React from 'react';\nimport { Badge } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Pagination } from 'libs/shared/components/pagination/Pagination';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { DeleteSvg } from 'libs/shared/images/svg/actions/DeleteSvg';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\nimport { Customer, CustomerCollection } from 'libs/shared/interfaces';\n\nimport { Actions, AppChannels } from 'shared/constants';\n\nconst SPLIT_LIST_NUMBER = 13;\n\ninterface OtherCustomersProps {\n customers: CustomerCollection;\n currentCustomer: Customer;\n userType: UserGroup;\n userId: string;\n setCursor: (cursor: string) => void;\n}\n\nexport function OtherCustomers(props: OtherCustomersProps): JSX.Element {\n if (!props.customers.data || props.customers.data.length === 0)\n return <></>;\n\n if (props.customers.data.length === 1) {\n const customer = ArrayHelper.first(props.customers.data);\n\n if (customer.id.toString() === props.currentCustomer.id.toString())\n return <></>;\n }\n\n function getAppLink(customer: Customer): Core.AppLink {\n return {\n application: AppChannels.CUSTOMERS,\n action: Actions.Customers.EDIT_USER,\n args: [ customer.id, props.userId ],\n params: { userType: props.userType }\n };\n }\n\n function getRemoveFromCustomerAppLink(customer: Customer): Core.AppLink {\n return {\n application: AppChannels.CUSTOMERS,\n action: Actions.Customers.REMOVE_USER_FROM_CUSTOMER,\n args: [ customer.id, props.userId ]\n };\n }\n\n const Items = ({ items, right }: { items: Customer[], right?: boolean }) => {\n return (\n <ul className='list-unstyled'>\n {items.map((c, i) => {\n const last = i + 1 === items.length;\n let className = 'border w-100 p-2 d-flex justify-content-between';\n\n if (!last)\n className += ' border-bottom-0';\n\n if (right)\n className += ' border-start-0';\n\n return (\n <li key={i} className={className}>\n <AppLink appLink={getAppLink(c)}>\n {c.name} ({c.crmId})\n {c.id.toString() === props.currentCustomer.id.toString() &&\n <Badge bg='secondary' className='ms-1'>Current customer</Badge>\n }\n </AppLink>\n <Tooltip title={`Remove user from ${c.name}`} spanHack spanHackClassName='ms-1'>\n <AppLink appLink={getRemoveFromCustomerAppLink(c)}>\n <SvgContainer svg={DeleteSvg} size={SvgContainerSize.Small}/>\n </AppLink>\n </Tooltip>\n </li>\n );\n })}\n </ul>\n );\n };\n\n const addToAnotherCustomerAppLink: Core.AppLink = {\n application: AppChannels.CUSTOMERS,\n action: Actions.Customers.ADD_USER_TO_CUSTOMER,\n args: [ props.currentCustomer.id, props.userId ]\n };\n\n return (\n <div className='mt-2'>\n <h6>User's other customers</h6>\n <p>\n This user exists in multiple customers. This user's details are currently scoped to&nbsp;\n <strong>{props.currentCustomer.name}</strong> ({props.currentCustomer.crmId}).\n Details such as year level are representative of this user's data within this customer.\n </p>\n <div className='row m-0 p-0'>\n <div className='col m-0 p-0'>\n <Items items={props.customers.data.slice(0, SPLIT_LIST_NUMBER)} />\n </div>\n <div className='col m-0 p-0'>\n <Items items={props.customers.data.slice(SPLIT_LIST_NUMBER)} right />\n </div>\n </div>\n \n <div className='d-flex justify-content-between mt-1'>\n <AppLink appLink={addToAnotherCustomerAppLink}>\n <SvgContainer svg={PlusSvg} size={SvgContainerSize.Small}/>\n Add user to another customer\n </AppLink>\n {(props.customers.pagination?.cursors?.next || props.customers.pagination?.cursors?.previous) &&\n <Pagination\n cursors={props.customers.pagination?.cursors}\n buttonVariant='outline-dark'\n onClick={props.setCursor}\n />\n }\n </div>\n <hr />\n </div>\n );\n}\n","import React from 'react';\n\nimport { UserWorkspaceUsage } from 'shared/interfaces';\n\nconst INFINITE_ALLOCATION = Number.MAX_SAFE_INTEGER;\n\ninterface UserWorkspaceUsageSummaryProps {\n userWorkspaceUsage: UserWorkspaceUsage;\n}\n\nexport function UserWorkspaceUsageSummary(props: UserWorkspaceUsageSummaryProps): JSX.Element {\n const { allocationInBytes = 0, sizeInBytes = 0 } = props.userWorkspaceUsage.workspaceSizeAllocation || {};\n\n const hasInfiniteAllocation = allocationInBytes === INFINITE_ALLOCATION;\n\n const allocationInGb = (allocationInBytes / 1024 / 1024 / 1024).toFixed(0);\n const usageInGb = (sizeInBytes / 1024 / 1024 / 1024).toFixed(2);\n\n const percentageUsed = (sizeInBytes / allocationInBytes * 100).toFixed(2);\n\n return (\n <div className='mt-2'>\n <hr />\n <h6>Workspace</h6>\n <p className='m-0'>No. of videos: {props.userWorkspaceUsage.videoCount}</p>\n <p className='m-0'>No. of clips: {props.userWorkspaceUsage.clipCount}</p>\n <p className='m-0'>No. of interactives: {props.userWorkspaceUsage.interactiveCount}</p>\n <p className='m-0'>Allocation: {hasInfiniteAllocation ? 'Unlimited' : `${allocationInGb} GB`}</p>\n <p className='m-0'>Allocation used: {usageInGb} GB</p>\n {!hasInfiniteAllocation &&\n <p className='m-0'>Percentage of allocation used: {percentageUsed}%</p>\n }\n </div>\n );\n}\n","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EmailDescriptor, UserAction } from 'libs/analytics/interfaces';\n\nimport { EditUserDetails } from 'libs/shared/apps/user-manager/components/edit-user-details/EditUserDetails';\nimport { JobTitle } from 'libs/shared/apps/user-manager/components/user-list-items/components/JobTitle';\nimport { LastActive } from 'libs/shared/apps/user-manager/components/user-list-items/components/LastActive';\nimport { UserCreatedDate } from 'libs/shared/apps/user-manager/components/user-list-items/components/UserCreatedDate';\nimport { UserStatusBadge } from 'libs/shared/apps/user-manager/components/user-list-items/components/UserStatusBadge';\nimport { UserEmailType, UserUpdatedSuccess } from 'libs/shared/apps/user-manager/components/user-updated-success/UserUpdatedSuccess';\nimport { UserManagerClientContext } from 'libs/shared/apps/user-manager/context/UserManagerClientContext';\nimport { UserManagerClient } from 'libs/shared/apps/user-manager/enums/UserManagerClient';\nimport { EditUserRequest, ErroredUsers } from 'libs/shared/apps/user-manager/interfaces';\nimport { SecuritySettingsResponse } from 'libs/shared/apps/user-manager/interfaces/SecuritySettingsResponse';\nimport { UserManagerHelper } from 'libs/shared/apps/user-manager/utils/UserManagerHelper';\nimport { FormSubmissionOptions } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { PopupLoadingSpinner } from 'libs/shared/components/popup/PopupLoadingSpinner';\nimport { ContentRegion } from 'libs/shared/enums/ContentRegion';\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 { CuratorUser, CurrentUser, Customer, CustomerCollection, Playlist, Product, PropsWithAnalyticsOptions, User, UserCredit, YearGroup } from 'libs/shared/interfaces';\n\nimport { BackButton } from 'shared/components';\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { CuratorPermissionName } from 'shared/enums/CuratorPermissionName';\nimport { useCuratorPermissions } from 'shared/hooks';\nimport { UserWorkspaceUsage } from 'shared/interfaces';\n\nimport { CustomerRequests } from 'apps/crm-studio/flight-requests/CustomerRequests';\nimport { getUserManagerAppLinks } from 'apps/crm-studio/helpers/CuratorUserManagerAppLinks';\nimport { UserCreditSection } from 'apps/crm-studio/views/users/edit-user/components/user-credit/UserCredit';\nimport { CuratorUserRequests } from 'apps/users/flight-requests/CuratorUserRequests';\n\nimport { EditUserErrorView } from './components/edit-user-error-view/EditUserErrorView';\nimport { OtherCustomers } from './components/other-customers/OtherCustomers';\nimport { UserPlaylistsSummary } from './components/user-playlists-summary/UserPlaylistsSummary';\nimport { UserWorkspaceUsageSummary } from './components/user-workspace-usage-summary/UserWorkspaceUsageSummary';\nimport { getCustomerAppLink, getUserInitialValues, useRedirectOnDelete } from './EditUserUtils';\n\nconst getPhrase = LanguageService.encloseNamespace('userManager.editUser');\n\ntype EditUserViewProps = PropsWithAnalyticsOptions<{\n customerId: string,\n id: string,\n returnAppLinkCursor?: string\n}>;\n\nexport function EditUserView(props: EditUserViewProps): React.ReactElement {\n const [ emailType, setEmailType ] = React.useState<UserEmailType>(null);\n const [ otherCustomersCursor, setOtherCustomersCursor ] = React.useState('');\n\n const alerts = useAlerts();\n const dispatch = useDispatch();\n const fetchAsync = Flight.useGetFetchAsync();\n const { hasPermissions } = useCuratorPermissions();\n\n const userRequest = CustomerRequests.getUser(props.customerId, props.id);\n\n const otherCustomers = Flight.useBasicFetch<CustomerCollection>(\n CustomerRequests.otherCustomers(props.customerId, props.id, otherCustomersCursor)\n );\n const customer = Flight.useBasicFetch<Customer>(CustomerRequests.customer(props.customerId));\n const user = Flight.useBasicFetch<User>(userRequest);\n const currentUser = Flight.useBasicFetch<CurrentUser | CuratorUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(CustomerRequests.yearGroups(props.customerId));\n const playlists = Flight.useBasicFetch<Playlist[]>(CuratorUserRequests.userPlaylistsAll(props.id));\n const workspaceUsage = Flight.useBasicFetch<UserWorkspaceUsage>(\n CuratorUserRequests.userWorkspaceUsage(props.customerId, props.id)\n );\n const passwordPolicy = Flight.useBasicFetch<SecuritySettingsResponse>(\n CustomerRequests.passwordPolicy(props.customerId)\n );\n const authMethods = Flight.useBasicFetch(CustomerRequests.getAuthenticationMethodsByUserIds(\n props.customerId,\n [props.id],\n userRequest.normalizeOptions?.namespace\n ));\n const products = Flight.useBasicFetch<Product[]>(CustomerRequests.getCustomerProducts(props.customerId));\n \n // US customers are not supported to have user credit\n const isNotUs = customer.data?.contentRegion && customer.data?.contentRegion.systemName !== ContentRegion.US;\n const userCredit = Flight.useBasicFetch<UserCredit>(\n isNotUs && CustomerRequests.getCustomerUserCredit(props.customerId, props.id)\n );\n const canEditUserCredit = hasPermissions(CuratorPermissionName.UserCreditUpdate);\n\n const userType = user.data?.userType;\n\n const customerAppLink = getCustomerAppLink(props.customerId, userType, props.returnAppLinkCursor);\n\n useRedirectOnDelete(user, props.customerId, props.returnAppLinkCursor);\n\n function validateUser(_user: EditUserRequest): Promise<ErroredUsers> {\n const data = UserManagerHelper.formatCreateOrValidateUserRequest([_user], userType, props.customerId);\n\n return fetchAsync(CustomerRequests.bulkValidate(data, false, props.customerId));\n }\n\n async function saveUser(_user: EditUserRequest, onDone: (options?: FormSubmissionOptions) => void): Promise<void> {\n if (user.data.status === ObjectStatus.Disabled)\n return;\n\n const errors = await validateUser(_user);\n\n const isValid = UserManagerHelper.handleAsyncErrors(errors, _user, user.data, onDone);\n\n if (!isValid)\n return;\n\n const data = UserManagerHelper.formatEditUserRequest(_user);\n\n Flight.fetch(dispatch, CustomerRequests.updateUser(\n props.customerId,\n data,\n currentUser.data.id,\n updatedUser => {\n AnalyticsHelper.logUserAction(updatedUser, props.analyticsOptions);\n\n const emailHasChanged = user.data.email !== updatedUser.email;\n\n if (emailHasChanged) {\n if (updatedUser.status === ObjectStatus.Inactive)\n resendActivationEmail(updatedUser);\n\n if (updatedUser.status === ObjectStatus.Active)\n resendVerificationEmail(updatedUser);\n \n return;\n }\n\n alerts.success(getPhrase('success'));\n },\n () => {\n alerts.error(getPhrase('error'));\n },\n () => {},\n user.data?.masterYearGroup?.value === 0 && _user.masterYearGroup?.value !== 0\n ));\n }\n\n function resendActivationEmail(_user: User): void {\n Flight.fetch(dispatch, CustomerRequests.resendActivationEmail(props.customerId, _user.id, () => {\n AnalyticsHelper.logUserAction(_user, {\n ...props.analyticsOptions,\n actionType: UserAction.SendEmail,\n descriptor: EmailDescriptor.ActivateUser\n });\n\n setEmailType('activation');\n }, () => {\n alerts.error(getPhrase('activationEmailError'));\n }));\n }\n\n function onClickSendResetEmail(_user: User): void {\n Flight.fetch(dispatch, CustomerRequests.sendPasswordResetEmail(props.customerId, _user.id, () => {\n AnalyticsHelper.logUserAction(_user, {\n ...props.analyticsOptions,\n actionType: UserAction.SendEmail,\n descriptor: EmailDescriptor.ResetPasswordEmail\n });\n\n setEmailType('reset-password');\n }, () => {\n alerts.error(getPhrase('passwordResetEmailError'));\n }));\n }\n\n function resendVerificationEmail(_user: User): void {\n Flight.fetch(dispatch, CustomerRequests.resendVerificationEmail(props.customerId, _user.id, () => {\n AnalyticsHelper.logUserAction(_user, {\n ...props.analyticsOptions,\n actionType: UserAction.SendEmail,\n descriptor: EmailDescriptor.VerifyEmail\n });\n\n setEmailType('verification');\n }, () => {\n alerts.error(getPhrase('verificationEmailError'));\n }));\n }\n\n const isLoaded =\n !!customer.data &&\n !!user.data &&\n !!currentUser.data &&\n !!yearGroups.data &&\n !!passwordPolicy.data &&\n !!authMethods.data &&\n (!isNotUs || !!userCredit.data);\n\n const hasError =\n customer.hasError ||\n user.hasError ||\n currentUser.hasError ||\n yearGroups.hasError ||\n passwordPolicy.hasError ||\n authMethods.hasError;\n\n if (hasError)\n return <EditUserErrorView customer={customer} user={user} customerAppLink={customerAppLink} />;\n\n if (!isLoaded)\n return <div className='py-5'><PopupLoadingSpinner /></div>;\n\n return (\n <UserManagerClientContext.Provider value={UserManagerClient.Curator}>\n {otherCustomers.data ?\n <OtherCustomers\n customers={otherCustomers.data}\n currentCustomer={customer.data}\n userType={userType}\n userId={props.id}\n setCursor={setOtherCustomersCursor}\n /> :\n <div\n className='d-flex justify-content-center align-items-center'\n style={{ height: '100px' }}> {/* Known height of 25 items */}\n <Spinner as='div' animation='border' role='status' />\n </div>\n }\n \n <h1 className='h6 mb-0'>{customer.data.name} - {customer.data.crmId}</h1>\n <div className='my-2'>\n <BackButton\n appLink={customerAppLink}\n backToName={userType === UserGroup.Learner ? 'Students' : 'Staff'}\n />\n </div>\n <div className='d-flex'>\n <UserStatusBadge user={user.data} currentUser={currentUser.data as CurrentUser} className='mb-2' />\n </div>\n <EditUserDetails\n user={user.data}\n userType={userType}\n yearGroups={userType === UserGroup.Learner ? yearGroups.data : null}\n initialValues={getUserInitialValues(user.data, props.customerId)}\n initialErrors={UserManagerHelper.getInitialErrorsForInvalidYearGroups(user.data.masterYearGroup)}\n onSubmit={saveUser}\n onClickCancel={() => Core.AppLinkHelper.trigger(customerAppLink)}\n currentUser={currentUser.data as CurrentUser}\n // TODO: Update to require this based on if the customer has primary product access\n emailRequired={userType === UserGroup.Staff}\n \n showActions\n appLinks={getUserManagerAppLinks(props.customerId, userType)}\n onClickResendActivationEmail={resendActivationEmail}\n onClickSendResetEmail={onClickSendResetEmail}\n onClickSendVerificationEmail={resendVerificationEmail}\n showDisplayNameField={userType === UserGroup.Staff}\n passwordPolicy={passwordPolicy.data}\n canEditSsoFields={hasPermissions(CuratorPermissionName.UsersSsoUpdate)}\n products={products.data?.map(p => p.id) ?? []}\n hasUserCredit={isNotUs && canEditUserCredit}\n hasOrg={!!customer.data?.organisation}\n canEditSuperAdmin\n />\n\n {canEditUserCredit && userCredit.data && <UserCreditSection userCredit={userCredit.data} />}\n\n <hr />\n <LastActive user={user.data} />\n <hr />\n\n <UserCreatedDate user={user.data} />\n <hr />\n\n <JobTitle user={user.data} />\n {!!workspaceUsage.data &&\n <UserWorkspaceUsageSummary userWorkspaceUsage={workspaceUsage.data} />\n }\n {!!playlists.data &&\n <UserPlaylistsSummary playlists={playlists.data} />\n }\n {!!emailType &&\n <UserUpdatedSuccess\n emailType={emailType}\n emailSentImageUrl={ImageUrls.UserManager.EMAIL_SENT}\n closePopup={() => setEmailType(null)}\n />\n }\n </UserManagerClientContext.Provider>\n );\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
1
+ {"version":3,"file":"DMq1wDNm2.chunk.js","names":[],"sources":["../../../../../../../../node_modules/react-bootstrap/esm/Badge.js","../../../../../../../libs/shared/src/apps/user-manager/components/user-list-items/components/UserCreatedDate.tsx","../../../../../../../libs/shared/src/apps/user-manager/components/user-updated-success/UserUpdatedSuccess.tsx","../../../../../src/apps/crm-studio/views/users/edit-user/components/user-credit/UserCredit.tsx","../../../../../src/apps/crm-studio/views/users/edit-user/components/edit-user-error-view/EditUserErrorView.tsx","../../../../../src/apps/crm-studio/views/users/edit-user/components/other-customers/OtherCustomers.tsx","../../../../../src/apps/crm-studio/views/users/edit-user/components/user-workspace-usage-summary/UserWorkspaceUsageSummary.tsx","../../../../../src/apps/crm-studio/views/users/edit-user/EditUserView.tsx"],"sourcesContent":["\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst Badge = /*#__PURE__*/React.forwardRef(({\n bsPrefix,\n bg = 'primary',\n pill = false,\n text,\n className,\n as: Component = 'span',\n ...props\n}, ref) => {\n const prefix = useBootstrapPrefix(bsPrefix, 'badge');\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: classNames(className, prefix, pill && `rounded-pill`, text && `text-${text}`, bg && `bg-${bg}`)\n });\n});\nBadge.displayName = 'Badge';\nexport default Badge;","import React from 'react';\n\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { User } from 'libs/shared/interfaces';\n\ninterface UserCreatedDateProps {\n user: User;\n}\n\nconst FORMATTER = 'YYYY-MM-DD';\n\nexport const UserCreatedDate = (props: UserCreatedDateProps) => {\n const createdfromNow = props.user.dateCreated ? DateHelper.fromNow(props.user.dateCreated) : '-';\n const modifiedfromNow = props.user.dateModified ? DateHelper.fromNow(props.user.dateModified) : '-';\n\n return (\n <div>\n <div className='d-flex flex-column'>\n <small>\n Date created\n </small>\n <Tooltip title={DateHelper.format(props.user.dateCreated, FORMATTER)} spanHack spanHackClassName='w-fit'>\n {createdfromNow}\n </Tooltip>\n </div>\n <hr/>\n <div className='d-flex flex-column'>\n Date modified\n <Tooltip title={DateHelper.format(props.user.dateModified, FORMATTER)} spanHack spanHackClassName='w-fit'>\n {modifiedfromNow}\n </Tooltip>\n </div>\n </div>\n );\n};\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PropsWithPopupViewProps } from 'libs/shared/interfaces';\n\nconst namespace = 'userManager.userUpdatedSuccess';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport type UserEmailType = 'activation' | 'verification' | 'reset-password';\n\nfunction getTitle(emailType: UserEmailType): string {\n switch (emailType) {\n case 'activation':\n return getPhrase('activationEmailSentTitle');\n case 'verification':\n return getPhrase('verificationEmailSentTitle');\n case 'reset-password':\n return getPhrase('resetPasswordEmailSentTitle');\n }\n}\n\nfunction getBody(emailType: UserEmailType): string {\n switch (emailType) {\n case 'activation':\n return getPhrase('activationEmailSentBody');\n case 'verification':\n return getPhrase('verificationEmailSentBody');\n case 'reset-password':\n return getPhrase('resetPasswordEmailSentBody');\n }\n}\n\ninterface UserUpdatedSuccessProps {\n emailType: UserEmailType;\n emailSentImageUrl: string;\n}\n\nexport function UserUpdatedSuccess(props: PropsWithPopupViewProps<UserUpdatedSuccessProps>): JSX.Element {\n return (\n <Popup\n title={getTitle(props.emailType)}\n closePopup={props.closePopup}\n >\n <div className='d-flex justify-content-center w-50 mx-auto pb-3'>\n <img\n src={props.emailSentImageUrl}\n alt=''\n role='presentation'\n className='w-100'\n />\n </div>\n <p>\n {getBody(props.emailType)}\n </p>\n </Popup>\n );\n}\n","import React from 'react';\n\nimport { UserCredit } from 'libs/shared/interfaces';\n\ninterface UserCreditSectionProps {\n userCredit: UserCredit;\n}\n\nexport function UserCreditSection(props: UserCreditSectionProps): JSX.Element {\n return (\n <div className='mt-2'>\n <hr />\n <h6>Daily credit limit</h6>\n <p>{props.userCredit.creditLimit}</p>\n </div>\n );\n}\n","import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { Customer, User } from 'libs/shared/interfaces';\n\nimport { BackButton } from 'shared/components';\n\ninterface EditUserErrorViewProps {\n customer: Flight.Response<Customer>;\n user: Flight.Response<User>;\n customerAppLink: Core.AppLink;\n}\n\nexport function EditUserErrorView(props: EditUserErrorViewProps): JSX.Element {\n let errorMessage = 'An error occurred.';\n\n if (props.user.statusCode === HttpStatus.NotFound)\n errorMessage = 'User could not be found';\n\n if (props.customer.statusCode === HttpStatus.NotFound)\n errorMessage = 'Customer could not be found';\n\n return (\n <>\n {props.customer.data && <h1 className='h6 mb-0'>{props.customer.data.name} - {props.customer.data.crmId}</h1>}\n <div className='my-2'>\n <BackButton appLink={props.customerAppLink} />\n </div>\n <div className='py-3'>\n {errorMessage}\n </div>\n </>\n );\n}\n","import React from 'react';\nimport { Badge } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Pagination } from 'libs/shared/components/pagination/Pagination';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { DeleteSvg } from 'libs/shared/images/svg/actions/DeleteSvg';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\nimport { Customer, CustomerCollection } from 'libs/shared/interfaces';\n\nimport { Actions, AppChannels } from 'shared/constants';\n\nconst SPLIT_LIST_NUMBER = 13;\n\ninterface OtherCustomersProps {\n customers: CustomerCollection;\n currentCustomer: Customer;\n userType: UserGroup;\n userId: string;\n setCursor: (cursor: string) => void;\n}\n\nexport function OtherCustomers(props: OtherCustomersProps): JSX.Element {\n if (!props.customers.data || props.customers.data.length === 0)\n return <></>;\n\n if (props.customers.data.length === 1) {\n const customer = ArrayHelper.first(props.customers.data);\n\n if (customer.id.toString() === props.currentCustomer.id.toString())\n return <></>;\n }\n\n function getAppLink(customer: Customer): Core.AppLink {\n return {\n application: AppChannels.CUSTOMERS,\n action: Actions.Customers.EDIT_USER,\n args: [ customer.id, props.userId ],\n params: { userType: props.userType }\n };\n }\n\n function getRemoveFromCustomerAppLink(customer: Customer): Core.AppLink {\n return {\n application: AppChannels.CUSTOMERS,\n action: Actions.Customers.REMOVE_USER_FROM_CUSTOMER,\n args: [ customer.id, props.userId ]\n };\n }\n\n const Items = ({ items, right }: { items: Customer[], right?: boolean }) => {\n return (\n <ul className='list-unstyled'>\n {items.map((c, i) => {\n const last = i + 1 === items.length;\n let className = 'border w-100 p-2 d-flex justify-content-between';\n\n if (!last)\n className += ' border-bottom-0';\n\n if (right)\n className += ' border-start-0';\n\n return (\n <li key={i} className={className}>\n <AppLink appLink={getAppLink(c)}>\n {c.name} ({c.crmId})\n {c.id.toString() === props.currentCustomer.id.toString() &&\n <Badge bg='secondary' className='ms-1'>Current customer</Badge>\n }\n </AppLink>\n <Tooltip title={`Remove user from ${c.name}`} spanHack spanHackClassName='ms-1'>\n <AppLink appLink={getRemoveFromCustomerAppLink(c)}>\n <SvgContainer svg={DeleteSvg} size={SvgContainerSize.Small}/>\n </AppLink>\n </Tooltip>\n </li>\n );\n })}\n </ul>\n );\n };\n\n const addToAnotherCustomerAppLink: Core.AppLink = {\n application: AppChannels.CUSTOMERS,\n action: Actions.Customers.ADD_USER_TO_CUSTOMER,\n args: [ props.currentCustomer.id, props.userId ]\n };\n\n return (\n <div className='mt-2'>\n <h6>User's other customers</h6>\n <p>\n This user exists in multiple customers. This user's details are currently scoped to&nbsp;\n <strong>{props.currentCustomer.name}</strong> ({props.currentCustomer.crmId}).\n Details such as year level are representative of this user's data within this customer.\n </p>\n <div className='row m-0 p-0'>\n <div className='col m-0 p-0'>\n <Items items={props.customers.data.slice(0, SPLIT_LIST_NUMBER)} />\n </div>\n <div className='col m-0 p-0'>\n <Items items={props.customers.data.slice(SPLIT_LIST_NUMBER)} right />\n </div>\n </div>\n \n <div className='d-flex justify-content-between mt-1'>\n <AppLink appLink={addToAnotherCustomerAppLink}>\n <SvgContainer svg={PlusSvg} size={SvgContainerSize.Small}/>\n Add user to another customer\n </AppLink>\n {(props.customers.pagination?.cursors?.next || props.customers.pagination?.cursors?.previous) &&\n <Pagination\n cursors={props.customers.pagination?.cursors}\n buttonVariant='outline-dark'\n onClick={props.setCursor}\n />\n }\n </div>\n <hr />\n </div>\n );\n}\n","import React from 'react';\n\nimport { UserWorkspaceUsage } from 'shared/interfaces';\n\nconst INFINITE_ALLOCATION = Number.MAX_SAFE_INTEGER;\n\ninterface UserWorkspaceUsageSummaryProps {\n userWorkspaceUsage: UserWorkspaceUsage;\n}\n\nexport function UserWorkspaceUsageSummary(props: UserWorkspaceUsageSummaryProps): JSX.Element {\n const { allocationInBytes = 0, sizeInBytes = 0 } = props.userWorkspaceUsage.workspaceSizeAllocation || {};\n\n const hasInfiniteAllocation = allocationInBytes === INFINITE_ALLOCATION;\n\n const allocationInGb = (allocationInBytes / 1024 / 1024 / 1024).toFixed(0);\n const usageInGb = (sizeInBytes / 1024 / 1024 / 1024).toFixed(2);\n\n const percentageUsed = (sizeInBytes / allocationInBytes * 100).toFixed(2);\n\n return (\n <div className='mt-2'>\n <hr />\n <h6>Workspace</h6>\n <p className='m-0'>No. of videos: {props.userWorkspaceUsage.videoCount}</p>\n <p className='m-0'>No. of clips: {props.userWorkspaceUsage.clipCount}</p>\n <p className='m-0'>No. of interactives: {props.userWorkspaceUsage.interactiveCount}</p>\n <p className='m-0'>Allocation: {hasInfiniteAllocation ? 'Unlimited' : `${allocationInGb} GB`}</p>\n <p className='m-0'>Allocation used: {usageInGb} GB</p>\n {!hasInfiniteAllocation &&\n <p className='m-0'>Percentage of allocation used: {percentageUsed}%</p>\n }\n </div>\n );\n}\n","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EmailDescriptor, UserAction } from 'libs/analytics/interfaces';\n\nimport { EditUserDetails } from 'libs/shared/apps/user-manager/components/edit-user-details/EditUserDetails';\nimport { JobTitle } from 'libs/shared/apps/user-manager/components/user-list-items/components/JobTitle';\nimport { LastActive } from 'libs/shared/apps/user-manager/components/user-list-items/components/LastActive';\nimport { UserCreatedDate } from 'libs/shared/apps/user-manager/components/user-list-items/components/UserCreatedDate';\nimport { UserStatusBadge } from 'libs/shared/apps/user-manager/components/user-list-items/components/UserStatusBadge';\nimport { UserEmailType, UserUpdatedSuccess } from 'libs/shared/apps/user-manager/components/user-updated-success/UserUpdatedSuccess';\nimport { UserManagerClientContext } from 'libs/shared/apps/user-manager/context/UserManagerClientContext';\nimport { UserManagerClient } from 'libs/shared/apps/user-manager/enums/UserManagerClient';\nimport { EditUserRequest, ErroredUsers } from 'libs/shared/apps/user-manager/interfaces';\nimport { SecuritySettingsResponse } from 'libs/shared/apps/user-manager/interfaces/SecuritySettingsResponse';\nimport { UserManagerHelper } from 'libs/shared/apps/user-manager/utils/UserManagerHelper';\nimport { FormSubmissionOptions } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { PopupLoadingSpinner } from 'libs/shared/components/popup/PopupLoadingSpinner';\nimport { ContentRegion } from 'libs/shared/enums/ContentRegion';\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 { CuratorUser, CurrentUser, Customer, CustomerCollection, Playlist, Product, PropsWithAnalyticsOptions, User, UserCredit, YearGroup } from 'libs/shared/interfaces';\n\nimport { BackButton } from 'shared/components';\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { CuratorPermissionName } from 'shared/enums/CuratorPermissionName';\nimport { useCuratorPermissions } from 'shared/hooks';\nimport { UserWorkspaceUsage } from 'shared/interfaces';\n\nimport { CustomerRequests } from 'apps/crm-studio/flight-requests/CustomerRequests';\nimport { getUserManagerAppLinks } from 'apps/crm-studio/helpers/CuratorUserManagerAppLinks';\nimport { UserCreditSection } from 'apps/crm-studio/views/users/edit-user/components/user-credit/UserCredit';\nimport { CuratorUserRequests } from 'apps/users/flight-requests/CuratorUserRequests';\n\nimport { EditUserErrorView } from './components/edit-user-error-view/EditUserErrorView';\nimport { OtherCustomers } from './components/other-customers/OtherCustomers';\nimport { UserPlaylistsSummary } from './components/user-playlists-summary/UserPlaylistsSummary';\nimport { UserWorkspaceUsageSummary } from './components/user-workspace-usage-summary/UserWorkspaceUsageSummary';\nimport { getCustomerAppLink, getUserInitialValues, useRedirectOnDelete } from './EditUserUtils';\n\nconst getPhrase = LanguageService.encloseNamespace('userManager.editUser');\n\ntype EditUserViewProps = PropsWithAnalyticsOptions<{\n customerId: string,\n id: string,\n returnAppLinkCursor?: string\n}>;\n\nexport function EditUserView(props: EditUserViewProps): React.ReactElement {\n const [ emailType, setEmailType ] = React.useState<UserEmailType>(null);\n const [ otherCustomersCursor, setOtherCustomersCursor ] = React.useState('');\n\n const alerts = useAlerts();\n const dispatch = useDispatch();\n const fetchAsync = Flight.useGetFetchAsync();\n const { hasPermissions } = useCuratorPermissions();\n\n const userRequest = CustomerRequests.getUser(props.customerId, props.id);\n\n const otherCustomers = Flight.useBasicFetch<CustomerCollection>(\n CustomerRequests.otherCustomers(props.customerId, props.id, otherCustomersCursor)\n );\n const customer = Flight.useBasicFetch<Customer>(CustomerRequests.customer(props.customerId));\n const user = Flight.useBasicFetch<User>(userRequest);\n const currentUser = Flight.useBasicFetch<CurrentUser | CuratorUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(CustomerRequests.yearGroups(props.customerId));\n const playlists = Flight.useBasicFetch<Playlist[]>(CuratorUserRequests.userPlaylistsAll(props.id));\n const workspaceUsage = Flight.useBasicFetch<UserWorkspaceUsage>(\n CuratorUserRequests.userWorkspaceUsage(props.customerId, props.id)\n );\n const passwordPolicy = Flight.useBasicFetch<SecuritySettingsResponse>(\n CustomerRequests.passwordPolicy(props.customerId)\n );\n const authMethods = Flight.useBasicFetch(CustomerRequests.getAuthenticationMethodsByUserIds(\n props.customerId,\n [props.id],\n userRequest.normalizeOptions?.namespace\n ));\n const products = Flight.useBasicFetch<Product[]>(CustomerRequests.getCustomerProducts(props.customerId));\n \n // US customers are not supported to have user credit\n const isNotUs = customer.data?.contentRegion && customer.data?.contentRegion.systemName !== ContentRegion.US;\n const userCredit = Flight.useBasicFetch<UserCredit>(\n isNotUs && CustomerRequests.getCustomerUserCredit(props.customerId, props.id)\n );\n const canEditUserCredit = hasPermissions(CuratorPermissionName.UserCreditUpdate);\n\n const userType = user.data?.userType;\n\n const customerAppLink = getCustomerAppLink(props.customerId, userType, props.returnAppLinkCursor);\n\n useRedirectOnDelete(user, props.customerId, props.returnAppLinkCursor);\n\n function validateUser(_user: EditUserRequest): Promise<ErroredUsers> {\n const data = UserManagerHelper.formatCreateOrValidateUserRequest([_user], userType, props.customerId);\n\n return fetchAsync(CustomerRequests.bulkValidate(data, false, props.customerId));\n }\n\n async function saveUser(_user: EditUserRequest, onDone: (options?: FormSubmissionOptions) => void): Promise<void> {\n if (user.data.status === ObjectStatus.Disabled)\n return;\n\n const errors = await validateUser(_user);\n\n const isValid = UserManagerHelper.handleAsyncErrors(errors, _user, user.data, onDone);\n\n if (!isValid)\n return;\n\n const data = UserManagerHelper.formatEditUserRequest(_user);\n\n Flight.fetch(dispatch, CustomerRequests.updateUser(\n props.customerId,\n data,\n currentUser.data.id,\n updatedUser => {\n AnalyticsHelper.logUserAction(updatedUser, props.analyticsOptions);\n\n const emailHasChanged = user.data.email !== updatedUser.email;\n\n if (emailHasChanged) {\n if (updatedUser.status === ObjectStatus.Inactive)\n resendActivationEmail(updatedUser);\n\n if (updatedUser.status === ObjectStatus.Active)\n resendVerificationEmail(updatedUser);\n \n return;\n }\n\n alerts.success(getPhrase('success'));\n },\n () => {\n alerts.error(getPhrase('error'));\n },\n () => {},\n user.data?.masterYearGroup?.value === 0 && _user.masterYearGroup?.value !== 0\n ));\n }\n\n function resendActivationEmail(_user: User): void {\n Flight.fetch(dispatch, CustomerRequests.resendActivationEmail(props.customerId, _user.id, () => {\n AnalyticsHelper.logUserAction(_user, {\n ...props.analyticsOptions,\n actionType: UserAction.SendEmail,\n descriptor: EmailDescriptor.ActivateUser\n });\n\n setEmailType('activation');\n }, () => {\n alerts.error(getPhrase('activationEmailError'));\n }));\n }\n\n function onClickSendResetEmail(_user: User): void {\n Flight.fetch(dispatch, CustomerRequests.sendPasswordResetEmail(props.customerId, _user.id, () => {\n AnalyticsHelper.logUserAction(_user, {\n ...props.analyticsOptions,\n actionType: UserAction.SendEmail,\n descriptor: EmailDescriptor.ResetPasswordEmail\n });\n\n setEmailType('reset-password');\n }, () => {\n alerts.error(getPhrase('passwordResetEmailError'));\n }));\n }\n\n function resendVerificationEmail(_user: User): void {\n Flight.fetch(dispatch, CustomerRequests.resendVerificationEmail(props.customerId, _user.id, () => {\n AnalyticsHelper.logUserAction(_user, {\n ...props.analyticsOptions,\n actionType: UserAction.SendEmail,\n descriptor: EmailDescriptor.VerifyEmail\n });\n\n setEmailType('verification');\n }, () => {\n alerts.error(getPhrase('verificationEmailError'));\n }));\n }\n\n const isLoaded =\n !!customer.data &&\n !!user.data &&\n !!currentUser.data &&\n !!yearGroups.data &&\n !!passwordPolicy.data &&\n !!authMethods.data &&\n (!isNotUs || !!userCredit.data);\n\n const hasError =\n customer.hasError ||\n user.hasError ||\n currentUser.hasError ||\n yearGroups.hasError ||\n passwordPolicy.hasError ||\n authMethods.hasError;\n\n if (hasError)\n return <EditUserErrorView customer={customer} user={user} customerAppLink={customerAppLink} />;\n\n if (!isLoaded)\n return <div className='py-5'><PopupLoadingSpinner /></div>;\n\n return (\n <UserManagerClientContext.Provider value={UserManagerClient.Curator}>\n {otherCustomers.data ?\n <OtherCustomers\n customers={otherCustomers.data}\n currentCustomer={customer.data}\n userType={userType}\n userId={props.id}\n setCursor={setOtherCustomersCursor}\n /> :\n <div\n className='d-flex justify-content-center align-items-center'\n style={{ height: '100px' }}> {/* Known height of 25 items */}\n <Spinner as='div' animation='border' role='status' />\n </div>\n }\n \n <h1 className='h6 mb-0'>{customer.data.name} - {customer.data.crmId}</h1>\n <div className='my-2'>\n <BackButton\n appLink={customerAppLink}\n backToName={userType === UserGroup.Learner ? 'Students' : 'Staff'}\n />\n </div>\n <div className='d-flex'>\n <UserStatusBadge user={user.data} currentUser={currentUser.data as CurrentUser} className='mb-2' />\n </div>\n <EditUserDetails\n user={user.data}\n userType={userType}\n yearGroups={userType === UserGroup.Learner ? yearGroups.data : null}\n initialValues={getUserInitialValues(user.data, props.customerId)}\n initialErrors={UserManagerHelper.getInitialErrorsForInvalidYearGroups(user.data.masterYearGroup)}\n onSubmit={saveUser}\n onClickCancel={() => Core.AppLinkHelper.trigger(customerAppLink)}\n currentUser={currentUser.data as CurrentUser}\n // TODO: Update to require this based on if the customer has primary product access\n emailRequired={userType === UserGroup.Staff}\n \n showActions\n appLinks={getUserManagerAppLinks(props.customerId, userType)}\n onClickResendActivationEmail={resendActivationEmail}\n onClickSendResetEmail={onClickSendResetEmail}\n onClickSendVerificationEmail={resendVerificationEmail}\n showDisplayNameField={userType === UserGroup.Staff}\n passwordPolicy={passwordPolicy.data}\n canEditSsoFields={hasPermissions(CuratorPermissionName.UsersSsoUpdate)}\n products={products.data?.map(p => p.id) ?? []}\n hasUserCredit={isNotUs && canEditUserCredit}\n hasOrg={!!customer.data?.organisation}\n canEditSuperAdmin\n />\n\n {canEditUserCredit && userCredit.data && <UserCreditSection userCredit={userCredit.data} />}\n\n <hr />\n <LastActive user={user.data} />\n <hr />\n\n <UserCreatedDate user={user.data} />\n <hr />\n\n <JobTitle user={user.data} />\n {!!workspaceUsage.data &&\n <UserWorkspaceUsageSummary userWorkspaceUsage={workspaceUsage.data} />\n }\n {!!playlists.data &&\n <UserPlaylistsSummary playlists={playlists.data} />\n }\n {!!emailType &&\n <UserUpdatedSuccess\n emailType={emailType}\n emailSentImageUrl={ImageUrls.UserManager.EMAIL_SENT}\n closePopup={() => setEmailType(null)}\n />\n }\n </UserManagerClientContext.Provider>\n );\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{a as e,i as t}from"./rp704-Pm.chunk.js";import{t as n}from"./Di_u2uix.chunk.js";import{t as r}from"./BvMTtGLi.chunk.js";import"./CfCYHRuo.chunk.js";import{a as i,n as a,t as o}from"./DBUreHJA.chunk.js";import{y as s}from"./BhKv6dKl2.chunk.js";import{l as c}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as l}from"./B1uI4W1W.chunk.js";import{t as u}from"./Broadxiw.chunk.js";import{t as d}from"./BhWPGAdN2.chunk.js";import{t as f}from"./2NdfwDHB.chunk.js";import{t as p}from"./B6uYrrzJ2.chunk.js";import{t as m}from"./BcwM0but2.chunk.js";import{t as h}from"./CoubHv2S.chunk.js";import{t as g}from"./CE7PE1jj.chunk.js";import{t as _}from"./D3exV_Ay2.chunk.js";import{n as v,r as y,t as b}from"./CF4nszK12.chunk.js";e();var x=t();function S(e){let t=c(),{data:S,appLinks:C}=v({id:e.id}),{currentUser:w,contentPartner:T}=S,{data:E,searchQuery:D,setSearchQuery:O,isFetching:k,isSearching:A}=b({partnerProfileId:e.id,type:`series`});function j(t){return m.partnerProfileObjects({id:e.id,type:`series`,cursor:t})}function M(e){A||t(j(e))}let{items:N,hasFirstPageCompleted:P,isFetching:F,hasMore:I,nextCursor:L}=g(j,M),R=A&&!k?E:N,z=!A&&I,B=a.getColumnSet(o.ContentPartnerSeries),V={actions:t=>[{label:`Delete`,button:!0,svg:f,appLink:C.deleteContentPartnerSeries(e.id,t.id),className:`btn btn-outline-danger`}],appLinks:{[i.Series]:e=>({application:r.SERIES,action:n.Series.EDIT_SERIES,args:[e.id]})},extraData:{}},H=P&&S.loaded;return(0,x.jsxs)(x.Fragment,{children:[!!w.data&&(0,x.jsx)(_,{contentPartnerId:e.id,activeAction:C.viewSeries(e.id).action,currentUser:w.data}),H?(0,x.jsxs)(`div`,{className:`tw-relative`,children:[k&&(0,x.jsx)(y,{}),(0,x.jsx)(s,{object:{name:`${T.data?.name} Series`}}),(0,x.jsx)(p,{members:R,columnGroups:[i.Series],columns:B,columnData:V,emptyStateText:`No series found.`,isFetching:F,fetchNext:M,nextCursor:L,hasMoreMembers:z,classNames:{filterContainer:`flex-wrap gap-2 justify-content-between`},onlyHideTableOnEmpty:!0,children:(0,x.jsxs)(`div`,{className:`mx-1 d-flex flex-row gap-3`,children:[(0,x.jsx)(h,{name:`content-partner-series-search`,placeholder:`Search series`,setQuery:O,query:D,disabled:!A&&!R.length}),(0,x.jsx)(u,{svg:l,className:`btn btn-outline-dark`,appLink:C.addSeries(e.id),children:`Add Series`})]})})]}):(0,x.jsx)(d,{})]})}export{S as ContentPartnerSeriesView};
2
- //# sourceMappingURL=ByMU9ltp2.chunk.js.map
1
+ import{a as e,i as t}from"./rp704-Pm.chunk.js";import{t as n}from"./Di_u2uix.chunk.js";import{t as r}from"./BvMTtGLi.chunk.js";import"./CfCYHRuo.chunk.js";import{a as i,n as a,t as o}from"./C-M2om56.chunk.js";import{y as s}from"./GpDEun8c2.chunk.js";import{l as c}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as l}from"./B1uI4W1W.chunk.js";import{t as u}from"./Broadxiw.chunk.js";import{t as d}from"./BhWPGAdN2.chunk.js";import{t as f}from"./2NdfwDHB.chunk.js";import{t as p}from"./DB-51xws2.chunk.js";import{t as m}from"./BcwM0but2.chunk.js";import{t as h}from"./CoubHv2S.chunk.js";import{t as g}from"./CE7PE1jj.chunk.js";import{t as _}from"./SVXAAhk02.chunk.js";import{n as v,r as y,t as b}from"./CF4nszK12.chunk.js";e();var x=t();function S(e){let t=c(),{data:S,appLinks:C}=v({id:e.id}),{currentUser:w,contentPartner:T}=S,{data:E,searchQuery:D,setSearchQuery:O,isFetching:k,isSearching:A}=b({partnerProfileId:e.id,type:`series`});function j(t){return m.partnerProfileObjects({id:e.id,type:`series`,cursor:t})}function M(e){A||t(j(e))}let{items:N,hasFirstPageCompleted:P,isFetching:F,hasMore:I,nextCursor:L}=g(j,M),R=A&&!k?E:N,z=!A&&I,B=a.getColumnSet(o.ContentPartnerSeries),V={actions:t=>[{label:`Delete`,button:!0,svg:f,appLink:C.deleteContentPartnerSeries(e.id,t.id),className:`btn btn-outline-danger`}],appLinks:{[i.Series]:e=>({application:r.SERIES,action:n.Series.EDIT_SERIES,args:[e.id]})},extraData:{}},H=P&&S.loaded;return(0,x.jsxs)(x.Fragment,{children:[!!w.data&&(0,x.jsx)(_,{contentPartnerId:e.id,activeAction:C.viewSeries(e.id).action,currentUser:w.data}),H?(0,x.jsxs)(`div`,{className:`tw-relative`,children:[k&&(0,x.jsx)(y,{}),(0,x.jsx)(s,{object:{name:`${T.data?.name} Series`}}),(0,x.jsx)(p,{members:R,columnGroups:[i.Series],columns:B,columnData:V,emptyStateText:`No series found.`,isFetching:F,fetchNext:M,nextCursor:L,hasMoreMembers:z,classNames:{filterContainer:`flex-wrap gap-2 justify-content-between`},onlyHideTableOnEmpty:!0,children:(0,x.jsxs)(`div`,{className:`mx-1 d-flex flex-row gap-3`,children:[(0,x.jsx)(h,{name:`content-partner-series-search`,placeholder:`Search series`,setQuery:O,query:D,disabled:!A&&!R.length}),(0,x.jsx)(u,{svg:l,className:`btn btn-outline-dark`,appLink:C.addSeries(e.id),children:`Add Series`})]})})]}):(0,x.jsx)(d,{})]})}export{S as ContentPartnerSeriesView};
2
+ //# sourceMappingURL=DNWM9yfh2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ByMU9ltp2.chunk.js","names":[],"sources":["../../../../../src/apps/content-partners/views/content-partner-series/ContentPartnerSeriesView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { PopupLoadingSpinner } from 'libs/shared/components/popup/PopupLoadingSpinner';\nimport { SimpleSearchBar } from 'libs/shared/components/simple-search-bar/SimpleSearchBar';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { DeleteSvg } from 'libs/shared/images/svg/actions/DeleteSvg';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\nimport { Series } from 'libs/shared/interfaces';\n\nimport { ColumnData, MatrixMember, MemberMatrix, ObjectHeader } from 'shared/components';\nimport { Actions, AppChannels } from 'shared/constants';\nimport { MatrixObjectType } from 'shared/enums';\nimport { DefinedColumnSet, MemberMatrixHelper } from 'shared/utils/MemberMatrixHelper';\n\nimport { ContentPartnerSearchBackdrop } from 'apps/content-partners/components/content-partner-search-backdrop/ContentPartnerSearchBackdrop';\nimport { EditContentPartnerNav } from 'apps/content-partners/components/edit-content-partner-nav/EditContentPartnerNav';\nimport { ContentPartnerRequests } from 'apps/content-partners/flight-requests/ContentPartnerRequests';\nimport { useContentPartnerData } from 'apps/content-partners/hooks/useContentPartnerData';\nimport { useContentPartnerObjectsSearch } from 'apps/content-partners/hooks/useContentPartnerObjectsSearch';\n\ninterface ContentPartnerSeriesViewProps {\n id: string;\n}\n\nexport function ContentPartnerSeriesView(props: ContentPartnerSeriesViewProps): React.ReactElement {\n const fetch = Flight.useGetFetch();\n const { data, appLinks } = useContentPartnerData({ id: props.id });\n const { currentUser, contentPartner } = data;\n\n const {\n data: searchResults,\n searchQuery,\n setSearchQuery,\n isFetching: searchIsFetching,\n isSearching\n } = useContentPartnerObjectsSearch<Series>({\n partnerProfileId: props.id,\n type: 'series'\n });\n\n function getContentPartnerSeriesPage(cursor?: string) {\n return ContentPartnerRequests.partnerProfileObjects({ id: props.id, type: 'series', cursor });\n }\n\n function fetchNext(cursor?: string) {\n if (isSearching)\n return;\n\n fetch(getContentPartnerSeriesPage(cursor));\n }\n \n const {\n items,\n hasFirstPageCompleted,\n isFetching,\n hasMore,\n nextCursor\n } = useInfiniteList<MatrixMember>(getContentPartnerSeriesPage, fetchNext);\n\n const tableItems = (isSearching && !searchIsFetching) ? searchResults : items;\n const tableHasMore = isSearching ? false : hasMore;\n\n const columns = MemberMatrixHelper.getColumnSet(DefinedColumnSet.ContentPartnerSeries);\n const columnData: ColumnData = {\n actions: (series: Series) => [{\n label: 'Delete',\n button: true,\n svg: DeleteSvg,\n appLink: appLinks.deleteContentPartnerSeries(props.id, series.id),\n className: 'btn btn-outline-danger'\n }],\n appLinks: {\n [MatrixObjectType.Series]: (series: Series) => ({\n application: AppChannels.SERIES,\n action: Actions.Series.EDIT_SERIES,\n args: [series.id]\n })\n },\n // this is needed to re-render the matrix when the items change\n extraData: {}\n };\n\n const loaded = hasFirstPageCompleted && data.loaded;\n\n return (\n <>\n {!!currentUser.data &&\n <EditContentPartnerNav\n contentPartnerId={props.id}\n activeAction={appLinks.viewSeries(props.id).action}\n currentUser={currentUser.data}\n />\n }\n {(() => {\n if (!loaded)\n return <PopupLoadingSpinner />;\n\n return (\n <div className='tw-relative'>\n {searchIsFetching && <ContentPartnerSearchBackdrop />}\n \n <ObjectHeader object={{ name: `${contentPartner.data?.name} Series` }} />\n <MemberMatrix\n members={tableItems}\n columnGroups={[MatrixObjectType.Series]}\n columns={columns}\n columnData={columnData}\n emptyStateText='No series found.'\n isFetching={isFetching}\n fetchNext={fetchNext}\n nextCursor={nextCursor}\n hasMoreMembers={tableHasMore}\n classNames={{\n filterContainer: 'flex-wrap gap-2 justify-content-between'\n }}\n onlyHideTableOnEmpty={true}\n >\n <div className='mx-1 d-flex flex-row gap-3'>\n <SimpleSearchBar\n name='content-partner-series-search'\n placeholder='Search series'\n setQuery={setSearchQuery}\n query={searchQuery}\n disabled={isSearching ? false : !tableItems.length}\n />\n <IconButton\n svg={PlusSvg}\n className='btn btn-outline-dark'\n appLink={appLinks.addSeries(props.id)}\n >\n Add Series\n </IconButton>\n </div>\n </MemberMatrix>\n </div>\n );\n })()}\n </>\n );\n}\n"],"mappings":"+uBA2BA,SAAgB,EAAyB,EAA0D,CACjG,IAAM,EAAQ,EAAmB,EAC3B,CAAE,OAAM,YAAa,EAAsB,CAAE,GAAI,EAAM,EAAG,CAAC,EAC3D,CAAE,cAAa,kBAAmB,EAElC,CACJ,KAAM,EACN,cACA,iBACA,WAAY,EACZ,eACE,EAAuC,CACzC,iBAAkB,EAAM,GACxB,KAAM,QACR,CAAC,EAED,SAAS,EAA4B,EAAiB,CACpD,OAAO,EAAuB,sBAAsB,CAAE,GAAI,EAAM,GAAI,KAAM,SAAU,QAAO,CAAC,CAC9F,CAEA,SAAS,EAAU,EAAiB,CAC9B,GAGJ,EAAM,EAA4B,CAAM,CAAC,CAC3C,CAEA,GAAM,CACJ,QACA,wBACA,aACA,UACA,cACE,EAA8B,EAA6B,CAAS,EAElE,EAAc,GAAe,CAAC,EAAoB,EAAgB,EAClE,EAAe,IAAsB,EAErC,EAAU,EAAmB,aAAa,EAAiB,oBAAoB,EAC/E,EAAyB,CAC7B,QAAU,GAAmB,CAAC,CAC5B,MAAO,SACP,OAAQ,GACR,IAAK,EACL,QAAS,EAAS,2BAA2B,EAAM,GAAI,EAAO,EAAE,EAChE,UAAW,wBACb,CAAC,EACD,SAAU,EACP,EAAiB,QAAU,IAAoB,CAC9C,YAAa,EAAY,OACzB,OAAQ,EAAQ,OAAO,YACvB,KAAM,CAAC,EAAO,EAAE,CAClB,EACF,EAEA,UAAW,CAAC,CACd,EAEM,EAAS,GAAyB,EAAK,OAE7C,OACE,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,CACG,CAAC,CAAC,EAAY,OACb,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,iBAAkB,EAAM,GACxB,aAAc,EAAS,WAAW,EAAM,EAAE,CAAC,CAAC,OAC5C,YAAa,EAAY,IAC1B,CAAA,EAGI,GAIH,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,uBAAf,CACG,IAAoB,EAAA,EAAA,IAAA,CAAC,EAAD,CAA+B,CAAA,GAEpD,EAAA,EAAA,IAAA,CAAC,EAAD,CAAc,OAAQ,CAAE,KAAM,GAAG,EAAe,MAAM,KAAK,QAAS,CAAI,CAAA,GACxE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,QAAS,EACT,aAAc,CAAC,EAAiB,MAAM,EAC7B,UACG,aACZ,eAAe,mBACH,aACD,YACC,aACZ,eAAgB,EAChB,WAAY,CACV,gBAAiB,yCACnB,EACA,qBAAsB,aAEtB,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,sCAAf,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,KAAK,gCACL,YAAY,gBACZ,SAAU,EACV,MAAO,EACP,SAAU,IAAsB,CAAC,EAAW,MAC7C,CAAA,GACD,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,IAAK,EACL,UAAU,uBACV,QAAS,EAAS,UAAU,EAAM,EAAE,WACrC,YAEW,CAAA,CACT,GACO,CAAA,CACX,KAvCE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAsB,CAAA,CA0CjC,CAAA,CAAA,CAEN"}
1
+ {"version":3,"file":"DNWM9yfh2.chunk.js","names":[],"sources":["../../../../../src/apps/content-partners/views/content-partner-series/ContentPartnerSeriesView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { PopupLoadingSpinner } from 'libs/shared/components/popup/PopupLoadingSpinner';\nimport { SimpleSearchBar } from 'libs/shared/components/simple-search-bar/SimpleSearchBar';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { DeleteSvg } from 'libs/shared/images/svg/actions/DeleteSvg';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\nimport { Series } from 'libs/shared/interfaces';\n\nimport { ColumnData, MatrixMember, MemberMatrix, ObjectHeader } from 'shared/components';\nimport { Actions, AppChannels } from 'shared/constants';\nimport { MatrixObjectType } from 'shared/enums';\nimport { DefinedColumnSet, MemberMatrixHelper } from 'shared/utils/MemberMatrixHelper';\n\nimport { ContentPartnerSearchBackdrop } from 'apps/content-partners/components/content-partner-search-backdrop/ContentPartnerSearchBackdrop';\nimport { EditContentPartnerNav } from 'apps/content-partners/components/edit-content-partner-nav/EditContentPartnerNav';\nimport { ContentPartnerRequests } from 'apps/content-partners/flight-requests/ContentPartnerRequests';\nimport { useContentPartnerData } from 'apps/content-partners/hooks/useContentPartnerData';\nimport { useContentPartnerObjectsSearch } from 'apps/content-partners/hooks/useContentPartnerObjectsSearch';\n\ninterface ContentPartnerSeriesViewProps {\n id: string;\n}\n\nexport function ContentPartnerSeriesView(props: ContentPartnerSeriesViewProps): React.ReactElement {\n const fetch = Flight.useGetFetch();\n const { data, appLinks } = useContentPartnerData({ id: props.id });\n const { currentUser, contentPartner } = data;\n\n const {\n data: searchResults,\n searchQuery,\n setSearchQuery,\n isFetching: searchIsFetching,\n isSearching\n } = useContentPartnerObjectsSearch<Series>({\n partnerProfileId: props.id,\n type: 'series'\n });\n\n function getContentPartnerSeriesPage(cursor?: string) {\n return ContentPartnerRequests.partnerProfileObjects({ id: props.id, type: 'series', cursor });\n }\n\n function fetchNext(cursor?: string) {\n if (isSearching)\n return;\n\n fetch(getContentPartnerSeriesPage(cursor));\n }\n \n const {\n items,\n hasFirstPageCompleted,\n isFetching,\n hasMore,\n nextCursor\n } = useInfiniteList<MatrixMember>(getContentPartnerSeriesPage, fetchNext);\n\n const tableItems = (isSearching && !searchIsFetching) ? searchResults : items;\n const tableHasMore = isSearching ? false : hasMore;\n\n const columns = MemberMatrixHelper.getColumnSet(DefinedColumnSet.ContentPartnerSeries);\n const columnData: ColumnData = {\n actions: (series: Series) => [{\n label: 'Delete',\n button: true,\n svg: DeleteSvg,\n appLink: appLinks.deleteContentPartnerSeries(props.id, series.id),\n className: 'btn btn-outline-danger'\n }],\n appLinks: {\n [MatrixObjectType.Series]: (series: Series) => ({\n application: AppChannels.SERIES,\n action: Actions.Series.EDIT_SERIES,\n args: [series.id]\n })\n },\n // this is needed to re-render the matrix when the items change\n extraData: {}\n };\n\n const loaded = hasFirstPageCompleted && data.loaded;\n\n return (\n <>\n {!!currentUser.data &&\n <EditContentPartnerNav\n contentPartnerId={props.id}\n activeAction={appLinks.viewSeries(props.id).action}\n currentUser={currentUser.data}\n />\n }\n {(() => {\n if (!loaded)\n return <PopupLoadingSpinner />;\n\n return (\n <div className='tw-relative'>\n {searchIsFetching && <ContentPartnerSearchBackdrop />}\n \n <ObjectHeader object={{ name: `${contentPartner.data?.name} Series` }} />\n <MemberMatrix\n members={tableItems}\n columnGroups={[MatrixObjectType.Series]}\n columns={columns}\n columnData={columnData}\n emptyStateText='No series found.'\n isFetching={isFetching}\n fetchNext={fetchNext}\n nextCursor={nextCursor}\n hasMoreMembers={tableHasMore}\n classNames={{\n filterContainer: 'flex-wrap gap-2 justify-content-between'\n }}\n onlyHideTableOnEmpty={true}\n >\n <div className='mx-1 d-flex flex-row gap-3'>\n <SimpleSearchBar\n name='content-partner-series-search'\n placeholder='Search series'\n setQuery={setSearchQuery}\n query={searchQuery}\n disabled={isSearching ? false : !tableItems.length}\n />\n <IconButton\n svg={PlusSvg}\n className='btn btn-outline-dark'\n appLink={appLinks.addSeries(props.id)}\n >\n Add Series\n </IconButton>\n </div>\n </MemberMatrix>\n </div>\n );\n })()}\n </>\n );\n}\n"],"mappings":"+uBA2BA,SAAgB,EAAyB,EAA0D,CACjG,IAAM,EAAQ,EAAmB,EAC3B,CAAE,OAAM,YAAa,EAAsB,CAAE,GAAI,EAAM,EAAG,CAAC,EAC3D,CAAE,cAAa,kBAAmB,EAElC,CACJ,KAAM,EACN,cACA,iBACA,WAAY,EACZ,eACE,EAAuC,CACzC,iBAAkB,EAAM,GACxB,KAAM,QACR,CAAC,EAED,SAAS,EAA4B,EAAiB,CACpD,OAAO,EAAuB,sBAAsB,CAAE,GAAI,EAAM,GAAI,KAAM,SAAU,QAAO,CAAC,CAC9F,CAEA,SAAS,EAAU,EAAiB,CAC9B,GAGJ,EAAM,EAA4B,CAAM,CAAC,CAC3C,CAEA,GAAM,CACJ,QACA,wBACA,aACA,UACA,cACE,EAA8B,EAA6B,CAAS,EAElE,EAAc,GAAe,CAAC,EAAoB,EAAgB,EAClE,EAAe,IAAsB,EAErC,EAAU,EAAmB,aAAa,EAAiB,oBAAoB,EAC/E,EAAyB,CAC7B,QAAU,GAAmB,CAAC,CAC5B,MAAO,SACP,OAAQ,GACR,IAAK,EACL,QAAS,EAAS,2BAA2B,EAAM,GAAI,EAAO,EAAE,EAChE,UAAW,wBACb,CAAC,EACD,SAAU,EACP,EAAiB,QAAU,IAAoB,CAC9C,YAAa,EAAY,OACzB,OAAQ,EAAQ,OAAO,YACvB,KAAM,CAAC,EAAO,EAAE,CAClB,EACF,EAEA,UAAW,CAAC,CACd,EAEM,EAAS,GAAyB,EAAK,OAE7C,OACE,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,CACG,CAAC,CAAC,EAAY,OACb,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,iBAAkB,EAAM,GACxB,aAAc,EAAS,WAAW,EAAM,EAAE,CAAC,CAAC,OAC5C,YAAa,EAAY,IAC1B,CAAA,EAGI,GAIH,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,uBAAf,CACG,IAAoB,EAAA,EAAA,IAAA,CAAC,EAAD,CAA+B,CAAA,GAEpD,EAAA,EAAA,IAAA,CAAC,EAAD,CAAc,OAAQ,CAAE,KAAM,GAAG,EAAe,MAAM,KAAK,QAAS,CAAI,CAAA,GACxE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,QAAS,EACT,aAAc,CAAC,EAAiB,MAAM,EAC7B,UACG,aACZ,eAAe,mBACH,aACD,YACC,aACZ,eAAgB,EAChB,WAAY,CACV,gBAAiB,yCACnB,EACA,qBAAsB,aAEtB,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,sCAAf,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,KAAK,gCACL,YAAY,gBACZ,SAAU,EACV,MAAO,EACP,SAAU,IAAsB,CAAC,EAAW,MAC7C,CAAA,GACD,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,IAAK,EACL,UAAU,uBACV,QAAS,EAAS,UAAU,EAAM,EAAE,WACrC,YAEW,CAAA,CACT,GACO,CAAA,CACX,KAvCE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAsB,CAAA,CA0CjC,CAAA,CAAA,CAEN"}
@@ -1,2 +1,2 @@
1
- import{C as e,a as t,i as n,ln as r,t as i}from"./rp704-Pm.chunk.js";import{t as a}from"./DZX1tZ-D.chunk.js";import{t as o}from"./Di_u2uix.chunk.js";import{t as s}from"./BvMTtGLi.chunk.js";import"./CfCYHRuo.chunk.js";import{t as c}from"./UCDGupVs.chunk.js";import{t as l}from"./eoeMwpAO2.chunk.js";import{y as u}from"./BhKv6dKl2.chunk.js";import{n as d}from"./CbiGs3Tn.chunk.js";import{t as f}from"./CMczucng.chunk.js";import{s as p}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as m}from"./BDwjs8qz.chunk.js";import{R as h,z as g}from"./Bznq7eHJ.chunk.js";import{a as _,o as v}from"./CCjmBlqu.chunk.js";import{t as y}from"./CSqAh4jh.chunk.js";import{t as b}from"./BbR7yW4A2.chunk.js";import{n as x,t as S}from"./uS1TyZwO2.chunk.js";var C=r(t()),w=n();function T(t){let[n,r]=C.useState(!1),T=p(c.currentUser()),E=p(c.token()),D=p(y.interactiveMetadata(t.id)),O=p(D.data&&h.createViewKey(D.data.id,g.MasterObject)),k=C.useMemo(()=>v(),[]);C.useEffect(()=>{!D.hasCompleted||D.data.status!==m.Draft||e.trigger({application:s.INTERACTIVES,action:o.Interactives.EDIT_INTERACTIVE,args:[t.id]},{replace:!0})},[D.hasCompleted]);function A(){let e=[{label:`Open in ClickView`,href:a.safeUrlConcat(ClickView.Config.Urls.LiteUrl,`interactive/${t.id}/${i.slugify(D.data.name)}`),openInNewTab:!0,className:`btn btn-outline-dark me-2`,svg:f,button:!0},{label:`Edit details`,appLink:{application:s.INTERACTIVES,action:o.Interactives.EDIT_INTERACTIVE_DETAILS,args:[D.data.id]},button:!1},{label:`Copy interactive`,appLink:{application:s.INTERACTIVES,action:o.Interactives.COPY_INTERACTIVE,args:[D.data.id]},button:!1}];return D.data._parentClip?.id?e.push({label:`Open parent clip`,appLink:{application:s.CLIPS,action:o.Clips.EDIT_CLIP_INTERACTIVES,args:[D.data._parentClip.id]},button:!1}):D.data._parentVideo?.id&&e.push({label:`Open parent video`,appLink:{application:s.VIDEOS,action:o.Videos.EDIT_VIDEO,args:[D.data._parentVideo.id]},button:!1}),D.data.status===m.Published?e.push({label:`Archive interactive`,appLink:{application:s.INTERACTIVES,action:o.Interactives.ARCHIVE_INTERACTIVE,args:[t.id]},className:`text-danger`,button:!1}):e.push({label:`Publish interactive`,appLink:{application:s.INTERACTIVES,action:o.Interactives.PUBLISH_INTERACTIVE,args:[t.id]},button:!1}),e}return!O.data||!D.data||!E.data?(0,w.jsx)(`div`,{className:`text-center py-5`,children:(0,w.jsx)(d,{as:`div`,animation:`border`})}):(0,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(b,{interactive:D.data,activeAction:o.Interactives.PREVIEW_INTERACTIVE,currentUser:T.data}),D.data.status===m.Published&&(0,w.jsxs)(l,{variant:`info`,className:`mt-3 mb-1`,children:[`This interactive is `,(0,w.jsx)(`strong`,{children:`published`}),` and cannot be edited or deleted. You may archive it if you believe it should no longer be in use.`]}),D.data.status===m.Archived&&(0,w.jsxs)(l,{variant:`info`,className:`mt-3 mb-1`,children:[`This interactive is `,(0,w.jsx)(`strong`,{children:`archived`}),`. You may publish it again from the options menu.`]}),(0,w.jsxs)(`div`,{className:`${n?``:`d-none`}`,children:[(0,w.jsx)(u,{object:{name:D.data.name,status:D.data.status},actions:A(),actionsDropdownClassName:`btn btn-outline-dark`,showStatus:!0}),(0,w.jsx)(S,{viewKey:O.data.viewKey,imageApi:new URL(ClickView.Config.Urls.ImageAPI),playerApi:new URL(ClickView.Config.Urls.PlayerApi),hotkeyElQuerySelector:`body`,onReady:()=>r(!0),currentUser:T.data,mode:x.View,questionListPortalNode:k,eventLogging:!1}),(0,w.jsx)(_,{node:k})]})]})}export{T as PreviewInteractiveView};
2
- //# sourceMappingURL=DFwtjofq2.chunk.js.map
1
+ import{C as e,a as t,i as n,ln as r,t as i}from"./rp704-Pm.chunk.js";import{t as a}from"./DZX1tZ-D.chunk.js";import{t as o}from"./Di_u2uix.chunk.js";import{t as s}from"./BvMTtGLi.chunk.js";import"./CfCYHRuo.chunk.js";import{t as c}from"./UCDGupVs.chunk.js";import{t as l}from"./eoeMwpAO2.chunk.js";import{y as u}from"./GpDEun8c2.chunk.js";import{n as d}from"./CbiGs3Tn.chunk.js";import{t as f}from"./CMczucng.chunk.js";import{s as p}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as m}from"./BDwjs8qz.chunk.js";import{R as h,z as g}from"./Bznq7eHJ.chunk.js";import{a as _,o as v}from"./CCjmBlqu.chunk.js";import{t as y}from"./CSqAh4jh.chunk.js";import{t as b}from"./5uVJfyDx2.chunk.js";import{n as x,t as S}from"./uS1TyZwO2.chunk.js";var C=r(t()),w=n();function T(t){let[n,r]=C.useState(!1),T=p(c.currentUser()),E=p(c.token()),D=p(y.interactiveMetadata(t.id)),O=p(D.data&&h.createViewKey(D.data.id,g.MasterObject)),k=C.useMemo(()=>v(),[]);C.useEffect(()=>{!D.hasCompleted||D.data.status!==m.Draft||e.trigger({application:s.INTERACTIVES,action:o.Interactives.EDIT_INTERACTIVE,args:[t.id]},{replace:!0})},[D.hasCompleted]);function A(){let e=[{label:`Open in ClickView`,href:a.safeUrlConcat(ClickView.Config.Urls.LiteUrl,`interactive/${t.id}/${i.slugify(D.data.name)}`),openInNewTab:!0,className:`btn btn-outline-dark me-2`,svg:f,button:!0},{label:`Edit details`,appLink:{application:s.INTERACTIVES,action:o.Interactives.EDIT_INTERACTIVE_DETAILS,args:[D.data.id]},button:!1},{label:`Copy interactive`,appLink:{application:s.INTERACTIVES,action:o.Interactives.COPY_INTERACTIVE,args:[D.data.id]},button:!1}];return D.data._parentClip?.id?e.push({label:`Open parent clip`,appLink:{application:s.CLIPS,action:o.Clips.EDIT_CLIP_INTERACTIVES,args:[D.data._parentClip.id]},button:!1}):D.data._parentVideo?.id&&e.push({label:`Open parent video`,appLink:{application:s.VIDEOS,action:o.Videos.EDIT_VIDEO,args:[D.data._parentVideo.id]},button:!1}),D.data.status===m.Published?e.push({label:`Archive interactive`,appLink:{application:s.INTERACTIVES,action:o.Interactives.ARCHIVE_INTERACTIVE,args:[t.id]},className:`text-danger`,button:!1}):e.push({label:`Publish interactive`,appLink:{application:s.INTERACTIVES,action:o.Interactives.PUBLISH_INTERACTIVE,args:[t.id]},button:!1}),e}return!O.data||!D.data||!E.data?(0,w.jsx)(`div`,{className:`text-center py-5`,children:(0,w.jsx)(d,{as:`div`,animation:`border`})}):(0,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(b,{interactive:D.data,activeAction:o.Interactives.PREVIEW_INTERACTIVE,currentUser:T.data}),D.data.status===m.Published&&(0,w.jsxs)(l,{variant:`info`,className:`mt-3 mb-1`,children:[`This interactive is `,(0,w.jsx)(`strong`,{children:`published`}),` and cannot be edited or deleted. You may archive it if you believe it should no longer be in use.`]}),D.data.status===m.Archived&&(0,w.jsxs)(l,{variant:`info`,className:`mt-3 mb-1`,children:[`This interactive is `,(0,w.jsx)(`strong`,{children:`archived`}),`. You may publish it again from the options menu.`]}),(0,w.jsxs)(`div`,{className:`${n?``:`d-none`}`,children:[(0,w.jsx)(u,{object:{name:D.data.name,status:D.data.status},actions:A(),actionsDropdownClassName:`btn btn-outline-dark`,showStatus:!0}),(0,w.jsx)(S,{viewKey:O.data.viewKey,imageApi:new URL(ClickView.Config.Urls.ImageAPI),playerApi:new URL(ClickView.Config.Urls.PlayerApi),hotkeyElQuerySelector:`body`,onReady:()=>r(!0),currentUser:T.data,mode:x.View,questionListPortalNode:k,eventLogging:!1}),(0,w.jsx)(_,{node:k})]})]})}export{T as PreviewInteractiveView};
2
+ //# sourceMappingURL=DSj7VCEo2.chunk.js.map