@clickview/curator 1.100.0-rc.1 → 1.100.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (321) hide show
  1. package/dist/.vite/manifest.json +1779 -1779
  2. package/dist/Assets/js/dist/scripts/{CYhNyVj0.chunk.js → -6zuD8lo.chunk.js} +2 -2
  3. package/dist/Assets/js/dist/scripts/{CYhNyVj0.chunk.js.map → -6zuD8lo.chunk.js.map} +1 -1
  4. package/dist/Assets/js/dist/scripts/{D28bEsam.chunk.js → 0A42jU2r.chunk.js} +2 -2
  5. package/dist/Assets/js/dist/scripts/{D28bEsam.chunk.js.map → 0A42jU2r.chunk.js.map} +1 -1
  6. package/dist/Assets/js/dist/scripts/{oYHUjbwb2.chunk.js → 0ogjGD4J2.chunk.js} +2 -2
  7. package/dist/Assets/js/dist/scripts/{oYHUjbwb2.chunk.js.map → 0ogjGD4J2.chunk.js.map} +1 -1
  8. package/dist/Assets/js/dist/scripts/{PeuFojmJ2.chunk.js → 2aCj1HHJ2.chunk.js} +2 -2
  9. package/dist/Assets/js/dist/scripts/{PeuFojmJ2.chunk.js.map → 2aCj1HHJ2.chunk.js.map} +1 -1
  10. package/dist/Assets/js/dist/scripts/{q7pjZoNd.chunk.js → 2zbtFQka.chunk.js} +2 -2
  11. package/dist/Assets/js/dist/scripts/{q7pjZoNd.chunk.js.map → 2zbtFQka.chunk.js.map} +1 -1
  12. package/dist/Assets/js/dist/scripts/{0S5J0xX22.chunk.js → 3IQ_8AZP2.chunk.js} +2 -2
  13. package/dist/Assets/js/dist/scripts/{0S5J0xX22.chunk.js.map → 3IQ_8AZP2.chunk.js.map} +1 -1
  14. package/dist/Assets/js/dist/scripts/{DvP7S5Uq.chunk.js → 3eMwLZ5D.chunk.js} +2 -2
  15. package/dist/Assets/js/dist/scripts/{DvP7S5Uq.chunk.js.map → 3eMwLZ5D.chunk.js.map} +1 -1
  16. package/dist/Assets/js/dist/scripts/{y1L3G7XA2.chunk.js → 4Tx2JSvk2.chunk.js} +2 -2
  17. package/dist/Assets/js/dist/scripts/{y1L3G7XA2.chunk.js.map → 4Tx2JSvk2.chunk.js.map} +1 -1
  18. package/dist/Assets/js/dist/scripts/{BbR7yW4A2.chunk.js → 5uVJfyDx2.chunk.js} +2 -2
  19. package/dist/Assets/js/dist/scripts/{BbR7yW4A2.chunk.js.map → 5uVJfyDx2.chunk.js.map} +1 -1
  20. package/dist/Assets/js/dist/scripts/{B52yjTo5.chunk.js → 6l2s6d3Q.chunk.js} +2 -2
  21. package/dist/Assets/js/dist/scripts/{B52yjTo5.chunk.js.map → 6l2s6d3Q.chunk.js.map} +1 -1
  22. package/dist/Assets/js/dist/scripts/{DezIbRcB2.chunk.js → 8RAh0VA72.chunk.js} +2 -2
  23. package/dist/Assets/js/dist/scripts/{DezIbRcB2.chunk.js.map → 8RAh0VA72.chunk.js.map} +1 -1
  24. package/dist/Assets/js/dist/scripts/{CixcMUHF.chunk.js → 9nk_zFtT.chunk.js} +2 -2
  25. package/dist/Assets/js/dist/scripts/{CixcMUHF.chunk.js.map → 9nk_zFtT.chunk.js.map} +1 -1
  26. package/dist/Assets/js/dist/scripts/{Bk9vy70e2.chunk.js → Ae4rMqFm2.chunk.js} +2 -2
  27. package/dist/Assets/js/dist/scripts/{Bk9vy70e2.chunk.js.map → Ae4rMqFm2.chunk.js.map} +1 -1
  28. package/dist/Assets/js/dist/scripts/{Bzh_AwaG.chunk.js → B0mCquXn.chunk.js} +2 -2
  29. package/dist/Assets/js/dist/scripts/{Bzh_AwaG.chunk.js.map → B0mCquXn.chunk.js.map} +1 -1
  30. package/dist/Assets/js/dist/scripts/B1pBJzjh.chunk.js +1 -0
  31. package/dist/Assets/js/dist/scripts/{BswFY0mR2.chunk.js → B6IinlWw2.chunk.js} +2 -2
  32. package/dist/Assets/js/dist/scripts/{BswFY0mR2.chunk.js.map → B6IinlWw2.chunk.js.map} +1 -1
  33. package/dist/Assets/js/dist/scripts/{ClpIRgLR.chunk.js → B6NMAAhW.chunk.js} +2 -2
  34. package/dist/Assets/js/dist/scripts/{ClpIRgLR.chunk.js.map → B6NMAAhW.chunk.js.map} +1 -1
  35. package/dist/Assets/js/dist/scripts/{BCMXlwdC2.chunk.js → B8RZKQTs2.chunk.js} +2 -2
  36. package/dist/Assets/js/dist/scripts/{BCMXlwdC2.chunk.js.map → B8RZKQTs2.chunk.js.map} +1 -1
  37. package/dist/Assets/js/dist/scripts/{CymdouaN.chunk.js → B9R92bqj.chunk.js} +2 -2
  38. package/dist/Assets/js/dist/scripts/{CymdouaN.chunk.js.map → B9R92bqj.chunk.js.map} +1 -1
  39. package/dist/Assets/js/dist/scripts/{CtVYDK7g.chunk.js → BAFYJZ4c.chunk.js} +2 -2
  40. package/dist/Assets/js/dist/scripts/{CtVYDK7g.chunk.js.map → BAFYJZ4c.chunk.js.map} +1 -1
  41. package/dist/Assets/js/dist/scripts/{_wZpe632.chunk.js → BFPSIGJg.chunk.js} +2 -2
  42. package/dist/Assets/js/dist/scripts/{_wZpe632.chunk.js.map → BFPSIGJg.chunk.js.map} +1 -1
  43. package/dist/Assets/js/dist/scripts/{BNHULwJy2.chunk.js → BGiLDtc92.chunk.js} +2 -2
  44. package/dist/Assets/js/dist/scripts/{BNHULwJy2.chunk.js.map → BGiLDtc92.chunk.js.map} +1 -1
  45. package/dist/Assets/js/dist/scripts/{DA9R8atp2.chunk.js → BH6LIpwu2.chunk.js} +2 -2
  46. package/dist/Assets/js/dist/scripts/{DA9R8atp2.chunk.js.map → BH6LIpwu2.chunk.js.map} +1 -1
  47. package/dist/Assets/js/dist/scripts/{DbrVjVdn.chunk.js → BMj3pXcm.chunk.js} +2 -2
  48. package/dist/Assets/js/dist/scripts/{DbrVjVdn.chunk.js.map → BMj3pXcm.chunk.js.map} +1 -1
  49. package/dist/Assets/js/dist/scripts/{CDvLjxwS.chunk.js → BQTfNBFU.chunk.js} +2 -2
  50. package/dist/Assets/js/dist/scripts/{CDvLjxwS.chunk.js.map → BQTfNBFU.chunk.js.map} +1 -1
  51. package/dist/Assets/js/dist/scripts/{mStmtFRo.chunk.js → BT-jeT7C.chunk.js} +2 -2
  52. package/dist/Assets/js/dist/scripts/{mStmtFRo.chunk.js.map → BT-jeT7C.chunk.js.map} +1 -1
  53. package/dist/Assets/js/dist/scripts/{FlF2O19P2.chunk.js → BUD4osIg2.chunk.js} +2 -2
  54. package/dist/Assets/js/dist/scripts/{FlF2O19P2.chunk.js.map → BUD4osIg2.chunk.js.map} +1 -1
  55. package/dist/Assets/js/dist/scripts/{DWS9yr24.chunk.js → BVoG71Kc.chunk.js} +2 -2
  56. package/dist/Assets/js/dist/scripts/{DWS9yr24.chunk.js.map → BVoG71Kc.chunk.js.map} +1 -1
  57. package/dist/Assets/js/dist/scripts/{B9tf3oT62.chunk.js → BW5iVK1B2.chunk.js} +2 -2
  58. package/dist/Assets/js/dist/scripts/{B9tf3oT62.chunk.js.map → BW5iVK1B2.chunk.js.map} +1 -1
  59. package/dist/Assets/js/dist/scripts/{C2mEE4FT.chunk.js → BW9r-3iO.chunk.js} +2 -2
  60. package/dist/Assets/js/dist/scripts/{C2mEE4FT.chunk.js.map → BW9r-3iO.chunk.js.map} +1 -1
  61. package/dist/Assets/js/dist/scripts/{Dpgqkqbp.chunk.js → BX1tMzoa.chunk.js} +2 -2
  62. package/dist/Assets/js/dist/scripts/{Dpgqkqbp.chunk.js.map → BX1tMzoa.chunk.js.map} +1 -1
  63. package/dist/Assets/js/dist/scripts/{DVRzbAn6.chunk.js → BXaC-l33.chunk.js} +2 -2
  64. package/dist/Assets/js/dist/scripts/{DVRzbAn6.chunk.js.map → BXaC-l33.chunk.js.map} +1 -1
  65. package/dist/Assets/js/dist/scripts/{BaR7D4NT2.chunk.js → BY-c3M2b2.chunk.js} +2 -2
  66. package/dist/Assets/js/dist/scripts/{BaR7D4NT2.chunk.js.map → BY-c3M2b2.chunk.js.map} +1 -1
  67. package/dist/Assets/js/dist/scripts/{CJpVJtZk.chunk.js → BYMuPFbe.chunk.js} +2 -2
  68. package/dist/Assets/js/dist/scripts/{CJpVJtZk.chunk.js.map → BYMuPFbe.chunk.js.map} +1 -1
  69. package/dist/Assets/js/dist/scripts/{C5INFWaM2.chunk.js → BaOAOuSc2.chunk.js} +2 -2
  70. package/dist/Assets/js/dist/scripts/{C5INFWaM2.chunk.js.map → BaOAOuSc2.chunk.js.map} +1 -1
  71. package/dist/Assets/js/dist/scripts/{wAWlO6hc.chunk.js → Bb_f3Lku.chunk.js} +2 -2
  72. package/dist/Assets/js/dist/scripts/{wAWlO6hc.chunk.js.map → Bb_f3Lku.chunk.js.map} +1 -1
  73. package/dist/Assets/js/dist/scripts/{BLJO44vl.chunk.js → BdJYoUIO.chunk.js} +2 -2
  74. package/dist/Assets/js/dist/scripts/{BLJO44vl.chunk.js.map → BdJYoUIO.chunk.js.map} +1 -1
  75. package/dist/Assets/js/dist/scripts/{CW2k5Ut-2.chunk.js → Bf-6iyfX2.chunk.js} +2 -2
  76. package/dist/Assets/js/dist/scripts/{CW2k5Ut-2.chunk.js.map → Bf-6iyfX2.chunk.js.map} +1 -1
  77. package/dist/Assets/js/dist/scripts/{DxL0ZEcN2.chunk.js → BiPUuGEE2.chunk.js} +2 -2
  78. package/dist/Assets/js/dist/scripts/{DxL0ZEcN2.chunk.js.map → BiPUuGEE2.chunk.js.map} +1 -1
  79. package/dist/Assets/js/dist/scripts/{2XS-c0Xo.chunk.js → Bj4-NRWf.chunk.js} +2 -2
  80. package/dist/Assets/js/dist/scripts/{2XS-c0Xo.chunk.js.map → Bj4-NRWf.chunk.js.map} +1 -1
  81. package/dist/Assets/js/dist/scripts/{D13ViJt82.chunk.js → BkVcraos2.chunk.js} +2 -2
  82. package/dist/Assets/js/dist/scripts/{D13ViJt82.chunk.js.map → BkVcraos2.chunk.js.map} +1 -1
  83. package/dist/Assets/js/dist/scripts/{U1L4Dfoc.chunk.js → BkZ7WS_H.chunk.js} +2 -2
  84. package/dist/Assets/js/dist/scripts/{U1L4Dfoc.chunk.js.map → BkZ7WS_H.chunk.js.map} +1 -1
  85. package/dist/Assets/js/dist/scripts/{DoQiTqRX2.chunk.js → BoMt5mMW2.chunk.js} +2 -2
  86. package/dist/Assets/js/dist/scripts/{DoQiTqRX2.chunk.js.map → BoMt5mMW2.chunk.js.map} +1 -1
  87. package/dist/Assets/js/dist/scripts/{Da_9BBKD2.chunk.js → Bo_WsHZq2.chunk.js} +2 -2
  88. package/dist/Assets/js/dist/scripts/{Da_9BBKD2.chunk.js.map → Bo_WsHZq2.chunk.js.map} +1 -1
  89. package/dist/Assets/js/dist/scripts/{CnyrKBG0.chunk.js → BpV5ErII.chunk.js} +2 -2
  90. package/dist/Assets/js/dist/scripts/{CnyrKBG0.chunk.js.map → BpV5ErII.chunk.js.map} +1 -1
  91. package/dist/Assets/js/dist/scripts/{Dfhl7nI62.chunk.js → BrBPGjLi2.chunk.js} +2 -2
  92. package/dist/Assets/js/dist/scripts/{Dfhl7nI62.chunk.js.map → BrBPGjLi2.chunk.js.map} +1 -1
  93. package/dist/Assets/js/dist/scripts/{DcxGcCkR.chunk.js → BrHyZG_m.chunk.js} +2 -2
  94. package/dist/Assets/js/dist/scripts/{DcxGcCkR.chunk.js.map → BrHyZG_m.chunk.js.map} +1 -1
  95. package/dist/Assets/js/dist/scripts/{FXPxauLF.chunk.js → Bu4F3uuX.chunk.js} +2 -2
  96. package/dist/Assets/js/dist/scripts/{FXPxauLF.chunk.js.map → Bu4F3uuX.chunk.js.map} +1 -1
  97. package/dist/Assets/js/dist/scripts/{DZdJx-7j.chunk.js → BvW9SXzy.chunk.js} +2 -2
  98. package/dist/Assets/js/dist/scripts/{DZdJx-7j.chunk.js.map → BvW9SXzy.chunk.js.map} +1 -1
  99. package/dist/Assets/js/dist/scripts/{CAU0Lbgd.chunk.js → BwKHls91.chunk.js} +2 -2
  100. package/dist/Assets/js/dist/scripts/{CAU0Lbgd.chunk.js.map → BwKHls91.chunk.js.map} +1 -1
  101. package/dist/Assets/js/dist/scripts/{BiTzUyxj2.chunk.js → BxZNJjbX2.chunk.js} +2 -2
  102. package/dist/Assets/js/dist/scripts/{BiTzUyxj2.chunk.js.map → BxZNJjbX2.chunk.js.map} +1 -1
  103. package/dist/Assets/js/dist/scripts/{cymXuIcM.chunk.js → BygVW5WL.chunk.js} +2 -2
  104. package/dist/Assets/js/dist/scripts/{cymXuIcM.chunk.js.map → BygVW5WL.chunk.js.map} +1 -1
  105. package/dist/Assets/js/dist/scripts/{Dx07A6Ct.chunk.js → ByzsHBuo.chunk.js} +2 -2
  106. package/dist/Assets/js/dist/scripts/{Dx07A6Ct.chunk.js.map → ByzsHBuo.chunk.js.map} +1 -1
  107. package/dist/Assets/js/dist/scripts/C-M2om56.chunk.js +3 -0
  108. package/dist/Assets/js/dist/scripts/C-M2om56.chunk.js.map +1 -0
  109. package/dist/Assets/js/dist/scripts/{B6dlmRQL.chunk.js → C0UYMHUe.chunk.js} +2 -2
  110. package/dist/Assets/js/dist/scripts/{B6dlmRQL.chunk.js.map → C0UYMHUe.chunk.js.map} +1 -1
  111. package/dist/Assets/js/dist/scripts/{V0N7tCBl.chunk.js → C0_pEFCD.chunk.js} +2 -2
  112. package/dist/Assets/js/dist/scripts/{V0N7tCBl.chunk.js.map → C0_pEFCD.chunk.js.map} +1 -1
  113. package/dist/Assets/js/dist/scripts/{Cpr1J8Rk2.chunk.js → C2jRLu4_2.chunk.js} +2 -2
  114. package/dist/Assets/js/dist/scripts/{Cpr1J8Rk2.chunk.js.map → C2jRLu4_2.chunk.js.map} +1 -1
  115. package/dist/Assets/js/dist/scripts/{CY56FWb9.chunk.js → C2tBl3l9.chunk.js} +2 -2
  116. package/dist/Assets/js/dist/scripts/{CY56FWb9.chunk.js.map → C2tBl3l9.chunk.js.map} +1 -1
  117. package/dist/Assets/js/dist/scripts/{C3Lx9PwR.chunk.js → C4eazpDh.chunk.js} +2 -2
  118. package/dist/Assets/js/dist/scripts/{C3Lx9PwR.chunk.js.map → C4eazpDh.chunk.js.map} +1 -1
  119. package/dist/Assets/js/dist/scripts/{puobgAYi.chunk.js → CBq4vrjT.chunk.js} +2 -2
  120. package/dist/Assets/js/dist/scripts/{puobgAYi.chunk.js.map → CBq4vrjT.chunk.js.map} +1 -1
  121. package/dist/Assets/js/dist/scripts/{Bcx1C8ae.chunk.js → CBzqRw-k.chunk.js} +2 -2
  122. package/dist/Assets/js/dist/scripts/{Bcx1C8ae.chunk.js.map → CBzqRw-k.chunk.js.map} +1 -1
  123. package/dist/Assets/js/dist/scripts/{BD6DIPGL2.chunk.js → CDAdfAL02.chunk.js} +2 -2
  124. package/dist/Assets/js/dist/scripts/{BD6DIPGL2.chunk.js.map → CDAdfAL02.chunk.js.map} +1 -1
  125. package/dist/Assets/js/dist/scripts/{Ddp1uNfH.chunk.js → CE1Dxq8p.chunk.js} +2 -2
  126. package/dist/Assets/js/dist/scripts/{Ddp1uNfH.chunk.js.map → CE1Dxq8p.chunk.js.map} +1 -1
  127. package/dist/Assets/js/dist/scripts/{C99MPG7E.chunk.js → CG2julEA.chunk.js} +2 -2
  128. package/dist/Assets/js/dist/scripts/{C99MPG7E.chunk.js.map → CG2julEA.chunk.js.map} +1 -1
  129. package/dist/Assets/js/dist/scripts/{tyY3GHEC2.chunk.js → CGcN4g0d2.chunk.js} +2 -2
  130. package/dist/Assets/js/dist/scripts/{tyY3GHEC2.chunk.js.map → CGcN4g0d2.chunk.js.map} +1 -1
  131. package/dist/Assets/js/dist/scripts/{wODD7tmB2.chunk.js → CJmV_FfR2.chunk.js} +2 -2
  132. package/dist/Assets/js/dist/scripts/{wODD7tmB2.chunk.js.map → CJmV_FfR2.chunk.js.map} +1 -1
  133. package/dist/Assets/js/dist/scripts/{DavA1dZZ.chunk.js → CKvVGIRL.chunk.js} +2 -2
  134. package/dist/Assets/js/dist/scripts/{DavA1dZZ.chunk.js.map → CKvVGIRL.chunk.js.map} +1 -1
  135. package/dist/Assets/js/dist/scripts/{CrndJnZp.chunk.js → CL1DcbTZ.chunk.js} +2 -2
  136. package/dist/Assets/js/dist/scripts/{CrndJnZp.chunk.js.map → CL1DcbTZ.chunk.js.map} +1 -1
  137. package/dist/Assets/js/dist/scripts/{DLLL2lwS.chunk.js → CNLx6_fS.chunk.js} +2 -2
  138. package/dist/Assets/js/dist/scripts/{DLLL2lwS.chunk.js.map → CNLx6_fS.chunk.js.map} +1 -1
  139. package/dist/Assets/js/dist/scripts/{w2lackHw.chunk.js → CNUVs80P.chunk.js} +2 -2
  140. package/dist/Assets/js/dist/scripts/{w2lackHw.chunk.js.map → CNUVs80P.chunk.js.map} +1 -1
  141. package/dist/Assets/js/dist/scripts/{CCzvD0H4.chunk.js → CPa__SNX.chunk.js} +2 -2
  142. package/dist/Assets/js/dist/scripts/{CCzvD0H4.chunk.js.map → CPa__SNX.chunk.js.map} +1 -1
  143. package/dist/Assets/js/dist/scripts/{DeDh-wVP.chunk.js → CSA2Tnv9.chunk.js} +2 -2
  144. package/dist/Assets/js/dist/scripts/{DeDh-wVP.chunk.js.map → CSA2Tnv9.chunk.js.map} +1 -1
  145. package/dist/Assets/js/dist/scripts/{CjZJx6-O2.chunk.js → CT-xEpNT2.chunk.js} +2 -2
  146. package/dist/Assets/js/dist/scripts/{CjZJx6-O2.chunk.js.map → CT-xEpNT2.chunk.js.map} +1 -1
  147. package/dist/Assets/js/dist/scripts/{BRPP3VZ1.chunk.js → CT0vfLa0.chunk.js} +2 -2
  148. package/dist/Assets/js/dist/scripts/{BRPP3VZ1.chunk.js.map → CT0vfLa0.chunk.js.map} +1 -1
  149. package/dist/Assets/js/dist/scripts/{DGjNB2Bz.chunk.js → CUDnXypB.chunk.js} +2 -2
  150. package/dist/Assets/js/dist/scripts/{DGjNB2Bz.chunk.js.map → CUDnXypB.chunk.js.map} +1 -1
  151. package/dist/Assets/js/dist/scripts/{cXanUGwK.chunk.js → CeMQZB5J.chunk.js} +2 -2
  152. package/dist/Assets/js/dist/scripts/{cXanUGwK.chunk.js.map → CeMQZB5J.chunk.js.map} +1 -1
  153. package/dist/Assets/js/dist/scripts/Cf5cjLzK.chunk.js +2 -0
  154. package/dist/Assets/js/dist/scripts/{D2iK_uRt.chunk.js.map → Cf5cjLzK.chunk.js.map} +1 -1
  155. package/dist/Assets/js/dist/scripts/{CRNBuqmR.chunk.js → CfGaxIgd.chunk.js} +2 -2
  156. package/dist/Assets/js/dist/scripts/{CRNBuqmR.chunk.js.map → CfGaxIgd.chunk.js.map} +1 -1
  157. package/dist/Assets/js/dist/scripts/{BNr7ZL3F2.chunk.js → Cqfub35W2.chunk.js} +2 -2
  158. package/dist/Assets/js/dist/scripts/{BNr7ZL3F2.chunk.js.map → Cqfub35W2.chunk.js.map} +1 -1
  159. package/dist/Assets/js/dist/scripts/{DRmwJ1it2.chunk.js → Cv8UpP5_2.chunk.js} +2 -2
  160. package/dist/Assets/js/dist/scripts/{DRmwJ1it2.chunk.js.map → Cv8UpP5_2.chunk.js.map} +1 -1
  161. package/dist/Assets/js/dist/scripts/{DOfeXfSj.chunk.js → CvV6jx2d.chunk.js} +2 -2
  162. package/dist/Assets/js/dist/scripts/{DOfeXfSj.chunk.js.map → CvV6jx2d.chunk.js.map} +1 -1
  163. package/dist/Assets/js/dist/scripts/{DnGnhqys.chunk.js → CxENQntH.chunk.js} +2 -2
  164. package/dist/Assets/js/dist/scripts/{DnGnhqys.chunk.js.map → CxENQntH.chunk.js.map} +1 -1
  165. package/dist/Assets/js/dist/scripts/{NMDkdR-8.chunk.js → CxIfJCSc.chunk.js} +2 -2
  166. package/dist/Assets/js/dist/scripts/{NMDkdR-8.chunk.js.map → CxIfJCSc.chunk.js.map} +1 -1
  167. package/dist/Assets/js/dist/scripts/{B9H-d-YC.chunk.js → CxggKQxV.chunk.js} +2 -2
  168. package/dist/Assets/js/dist/scripts/{B9H-d-YC.chunk.js.map → CxggKQxV.chunk.js.map} +1 -1
  169. package/dist/Assets/js/dist/scripts/{B3I44IzQ.chunk.js → CyNNZ1So.chunk.js} +2 -2
  170. package/dist/Assets/js/dist/scripts/{B3I44IzQ.chunk.js.map → CyNNZ1So.chunk.js.map} +1 -1
  171. package/dist/Assets/js/dist/scripts/{B2V1N14S.chunk.js → Cz-WSyAE.chunk.js} +2 -2
  172. package/dist/Assets/js/dist/scripts/{B2V1N14S.chunk.js.map → Cz-WSyAE.chunk.js.map} +1 -1
  173. package/dist/Assets/js/dist/scripts/{S9cTzcQc2.chunk.js → D2aQFJWt2.chunk.js} +2 -2
  174. package/dist/Assets/js/dist/scripts/{S9cTzcQc2.chunk.js.map → D2aQFJWt2.chunk.js.map} +1 -1
  175. package/dist/Assets/js/dist/scripts/{CEsXUxxo2.chunk.js → D2h9W4GA2.chunk.js} +2 -2
  176. package/dist/Assets/js/dist/scripts/{CEsXUxxo2.chunk.js.map → D2h9W4GA2.chunk.js.map} +1 -1
  177. package/dist/Assets/js/dist/scripts/{DqCsVhOS.chunk.js → D3NAhMJm.chunk.js} +2 -2
  178. package/dist/Assets/js/dist/scripts/{DqCsVhOS.chunk.js.map → D3NAhMJm.chunk.js.map} +1 -1
  179. package/dist/Assets/js/dist/scripts/{DpM1KgHy.chunk.js → D3aWaqBW.chunk.js} +2 -2
  180. package/dist/Assets/js/dist/scripts/{DpM1KgHy.chunk.js.map → D3aWaqBW.chunk.js.map} +1 -1
  181. package/dist/Assets/js/dist/scripts/{CxtxOtyF2.chunk.js → D4xcR0492.chunk.js} +2 -2
  182. package/dist/Assets/js/dist/scripts/{CxtxOtyF2.chunk.js.map → D4xcR0492.chunk.js.map} +1 -1
  183. package/dist/Assets/js/dist/scripts/{BEeh_Vbr.chunk.js → D5ek2PiI.chunk.js} +2 -2
  184. package/dist/Assets/js/dist/scripts/{BEeh_Vbr.chunk.js.map → D5ek2PiI.chunk.js.map} +1 -1
  185. package/dist/Assets/js/dist/scripts/{DjqQYm43.chunk.js → D61ei_h6.chunk.js} +2 -2
  186. package/dist/Assets/js/dist/scripts/{DjqQYm43.chunk.js.map → D61ei_h6.chunk.js.map} +1 -1
  187. package/dist/Assets/js/dist/scripts/{lgpeNdac.chunk.js → D6wyTufc.chunk.js} +2 -2
  188. package/dist/Assets/js/dist/scripts/{lgpeNdac.chunk.js.map → D6wyTufc.chunk.js.map} +1 -1
  189. package/dist/Assets/js/dist/scripts/{B8li8ced.chunk.js → D7I90XOo.chunk.js} +2 -2
  190. package/dist/Assets/js/dist/scripts/{B8li8ced.chunk.js.map → D7I90XOo.chunk.js.map} +1 -1
  191. package/dist/Assets/js/dist/scripts/{DBAwgllB.chunk.js → DArfNv9S.chunk.js} +2 -2
  192. package/dist/Assets/js/dist/scripts/{DBAwgllB.chunk.js.map → DArfNv9S.chunk.js.map} +1 -1
  193. package/dist/Assets/js/dist/scripts/{B6uYrrzJ2.chunk.js → DB-51xws2.chunk.js} +2 -2
  194. package/dist/Assets/js/dist/scripts/{B6uYrrzJ2.chunk.js.map → DB-51xws2.chunk.js.map} +1 -1
  195. package/dist/Assets/js/dist/scripts/{C-flCrUr.chunk.js → DENdEA1F.chunk.js} +2 -2
  196. package/dist/Assets/js/dist/scripts/{C-flCrUr.chunk.js.map → DENdEA1F.chunk.js.map} +1 -1
  197. package/dist/Assets/js/dist/scripts/{BuF_pg9-2.chunk.js → DFYiLmms2.chunk.js} +2 -2
  198. package/dist/Assets/js/dist/scripts/{BuF_pg9-2.chunk.js.map → DFYiLmms2.chunk.js.map} +1 -1
  199. package/dist/Assets/js/dist/scripts/{BE6LUVEo2.chunk.js → DHa-x1js2.chunk.js} +2 -2
  200. package/dist/Assets/js/dist/scripts/{BE6LUVEo2.chunk.js.map → DHa-x1js2.chunk.js.map} +1 -1
  201. package/dist/Assets/js/dist/scripts/{DDHep0UM.chunk.js → DHeA2NJS.chunk.js} +2 -2
  202. package/dist/Assets/js/dist/scripts/{DDHep0UM.chunk.js.map → DHeA2NJS.chunk.js.map} +1 -1
  203. package/dist/Assets/js/dist/scripts/{D5OaPA-v.chunk.js → DIDxfMO_.chunk.js} +2 -2
  204. package/dist/Assets/js/dist/scripts/{D5OaPA-v.chunk.js.map → DIDxfMO_.chunk.js.map} +1 -1
  205. package/dist/Assets/js/dist/scripts/{CV7UIOmh2.chunk.js → DMq1wDNm2.chunk.js} +2 -2
  206. package/dist/Assets/js/dist/scripts/{CV7UIOmh2.chunk.js.map → DMq1wDNm2.chunk.js.map} +1 -1
  207. package/dist/Assets/js/dist/scripts/{ByMU9ltp2.chunk.js → DNWM9yfh2.chunk.js} +2 -2
  208. package/dist/Assets/js/dist/scripts/{ByMU9ltp2.chunk.js.map → DNWM9yfh2.chunk.js.map} +1 -1
  209. package/dist/Assets/js/dist/scripts/{DFwtjofq2.chunk.js → DSj7VCEo2.chunk.js} +2 -2
  210. package/dist/Assets/js/dist/scripts/{DFwtjofq2.chunk.js.map → DSj7VCEo2.chunk.js.map} +1 -1
  211. package/dist/Assets/js/dist/scripts/{BSYuzR8N2.chunk.js → DSvehN9D2.chunk.js} +2 -2
  212. package/dist/Assets/js/dist/scripts/{BSYuzR8N2.chunk.js.map → DSvehN9D2.chunk.js.map} +1 -1
  213. package/dist/Assets/js/dist/scripts/{FS74_jrx.chunk.js → DTvCgZ4c.chunk.js} +2 -2
  214. package/dist/Assets/js/dist/scripts/{FS74_jrx.chunk.js.map → DTvCgZ4c.chunk.js.map} +1 -1
  215. package/dist/Assets/js/dist/scripts/{C7Gmh7eY.chunk.js → DWHKdmdQ.chunk.js} +2 -2
  216. package/dist/Assets/js/dist/scripts/{C7Gmh7eY.chunk.js.map → DWHKdmdQ.chunk.js.map} +1 -1
  217. package/dist/Assets/js/dist/scripts/{DXcaOjI_.chunk.js → DYFGF9Pe.chunk.js} +2 -2
  218. package/dist/Assets/js/dist/scripts/{DXcaOjI_.chunk.js.map → DYFGF9Pe.chunk.js.map} +1 -1
  219. package/dist/Assets/js/dist/scripts/{CIw53qNO2.chunk.js → DYOxTenc2.chunk.js} +2 -2
  220. package/dist/Assets/js/dist/scripts/{CIw53qNO2.chunk.js.map → DYOxTenc2.chunk.js.map} +1 -1
  221. package/dist/Assets/js/dist/scripts/{CignflP_2.chunk.js → DZthp5T62.chunk.js} +2 -2
  222. package/dist/Assets/js/dist/scripts/{CignflP_2.chunk.js.map → DZthp5T62.chunk.js.map} +1 -1
  223. package/dist/Assets/js/dist/scripts/{BlqDwJRY.chunk.js → Djgwr16q.chunk.js} +2 -2
  224. package/dist/Assets/js/dist/scripts/{BlqDwJRY.chunk.js.map → Djgwr16q.chunk.js.map} +1 -1
  225. package/dist/Assets/js/dist/scripts/{BwToh2X9.chunk.js → DjnvbVQs.chunk.js} +2 -2
  226. package/dist/Assets/js/dist/scripts/{BwToh2X9.chunk.js.map → DjnvbVQs.chunk.js.map} +1 -1
  227. package/dist/Assets/js/dist/scripts/{UelJUmgx2.chunk.js → DmrhyI9D2.chunk.js} +2 -2
  228. package/dist/Assets/js/dist/scripts/{UelJUmgx2.chunk.js.map → DmrhyI9D2.chunk.js.map} +1 -1
  229. package/dist/Assets/js/dist/scripts/{0KUhq7W7.chunk.js → DnZGILQc.chunk.js} +2 -2
  230. package/dist/Assets/js/dist/scripts/{0KUhq7W7.chunk.js.map → DnZGILQc.chunk.js.map} +1 -1
  231. package/dist/Assets/js/dist/scripts/{BSPrErub.chunk.js → DqnZw1cj.chunk.js} +2 -2
  232. package/dist/Assets/js/dist/scripts/{BSPrErub.chunk.js.map → DqnZw1cj.chunk.js.map} +1 -1
  233. package/dist/Assets/js/dist/scripts/{Bkx2vKcX2.chunk.js → DrAKpy8L2.chunk.js} +2 -2
  234. package/dist/Assets/js/dist/scripts/{Bkx2vKcX2.chunk.js.map → DrAKpy8L2.chunk.js.map} +1 -1
  235. package/dist/Assets/js/dist/scripts/{DX9DFxX2.chunk.js → DsM1bfoR.chunk.js} +2 -2
  236. package/dist/Assets/js/dist/scripts/{DX9DFxX2.chunk.js.map → DsM1bfoR.chunk.js.map} +1 -1
  237. package/dist/Assets/js/dist/scripts/{Dh3G-ann.chunk.js → Dt2TCPUI.chunk.js} +2 -2
  238. package/dist/Assets/js/dist/scripts/{Dh3G-ann.chunk.js.map → Dt2TCPUI.chunk.js.map} +1 -1
  239. package/dist/Assets/js/dist/scripts/{DA6Ynhan.chunk.js → DtylOK55.chunk.js} +2 -2
  240. package/dist/Assets/js/dist/scripts/{DA6Ynhan.chunk.js.map → DtylOK55.chunk.js.map} +1 -1
  241. package/dist/Assets/js/dist/scripts/{CJBiVila2.chunk.js → DuTcsFNo2.chunk.js} +2 -2
  242. package/dist/Assets/js/dist/scripts/{CJBiVila2.chunk.js.map → DuTcsFNo2.chunk.js.map} +1 -1
  243. package/dist/Assets/js/dist/scripts/{BBFS0f7w.chunk.js → Dw0mo6Cf.chunk.js} +2 -2
  244. package/dist/Assets/js/dist/scripts/{BBFS0f7w.chunk.js.map → Dw0mo6Cf.chunk.js.map} +1 -1
  245. package/dist/Assets/js/dist/scripts/{Cg5KHpRA.chunk.js → DwISzabN.chunk.js} +2 -2
  246. package/dist/Assets/js/dist/scripts/{Cg5KHpRA.chunk.js.map → DwISzabN.chunk.js.map} +1 -1
  247. package/dist/Assets/js/dist/scripts/{DMxtE2iS.chunk.js → DxW67uUT.chunk.js} +2 -2
  248. package/dist/Assets/js/dist/scripts/{DMxtE2iS.chunk.js.map → DxW67uUT.chunk.js.map} +1 -1
  249. package/dist/Assets/js/dist/scripts/{BOGS-BOS.chunk.js → Eg4zYYCO.chunk.js} +2 -2
  250. package/dist/Assets/js/dist/scripts/{BOGS-BOS.chunk.js.map → Eg4zYYCO.chunk.js.map} +1 -1
  251. package/dist/Assets/js/dist/scripts/{CSuC7le7.chunk.js → GT6nO4Jv.chunk.js} +2 -2
  252. package/dist/Assets/js/dist/scripts/{CSuC7le7.chunk.js.map → GT6nO4Jv.chunk.js.map} +1 -1
  253. package/dist/Assets/js/dist/scripts/{BhKv6dKl2.chunk.js → GpDEun8c2.chunk.js} +2 -2
  254. package/dist/Assets/js/dist/scripts/{BhKv6dKl2.chunk.js.map → GpDEun8c2.chunk.js.map} +1 -1
  255. package/dist/Assets/js/dist/scripts/{DKJC5qg0.chunk.js → OKjYL31I.chunk.js} +2 -2
  256. package/dist/Assets/js/dist/scripts/{DKJC5qg0.chunk.js.map → OKjYL31I.chunk.js.map} +1 -1
  257. package/dist/Assets/js/dist/scripts/{D8rrJ-jY2.chunk.js → OrCUhFjq2.chunk.js} +2 -2
  258. package/dist/Assets/js/dist/scripts/{D8rrJ-jY2.chunk.js.map → OrCUhFjq2.chunk.js.map} +1 -1
  259. package/dist/Assets/js/dist/scripts/{D3exV_Ay2.chunk.js → SVXAAhk02.chunk.js} +2 -2
  260. package/dist/Assets/js/dist/scripts/{D3exV_Ay2.chunk.js.map → SVXAAhk02.chunk.js.map} +1 -1
  261. package/dist/Assets/js/dist/scripts/{CcZKy7SH.chunk.js → SmmnJrec.chunk.js} +2 -2
  262. package/dist/Assets/js/dist/scripts/{CcZKy7SH.chunk.js.map → SmmnJrec.chunk.js.map} +1 -1
  263. package/dist/Assets/js/dist/scripts/{Dy4nscVE2.chunk.js → T3BageSw2.chunk.js} +2 -2
  264. package/dist/Assets/js/dist/scripts/{Dy4nscVE2.chunk.js.map → T3BageSw2.chunk.js.map} +1 -1
  265. package/dist/Assets/js/dist/scripts/{B8PM5Ji3.chunk.js → T6xxjp_W.chunk.js} +2 -2
  266. package/dist/Assets/js/dist/scripts/{B8PM5Ji3.chunk.js.map → T6xxjp_W.chunk.js.map} +1 -1
  267. package/dist/Assets/js/dist/scripts/{Cp6Af16p.chunk.js → Uc2eW092.chunk.js} +2 -2
  268. package/dist/Assets/js/dist/scripts/{Cp6Af16p.chunk.js.map → Uc2eW092.chunk.js.map} +1 -1
  269. package/dist/Assets/js/dist/scripts/{DmKyGgLu.chunk.js → XHoEdG1q.chunk.js} +2 -2
  270. package/dist/Assets/js/dist/scripts/{DmKyGgLu.chunk.js.map → XHoEdG1q.chunk.js.map} +1 -1
  271. package/dist/Assets/js/dist/scripts/{BdVoyBI02.chunk.js → Y14NYZ692.chunk.js} +2 -2
  272. package/dist/Assets/js/dist/scripts/{BdVoyBI02.chunk.js.map → Y14NYZ692.chunk.js.map} +1 -1
  273. package/dist/Assets/js/dist/scripts/{DrszevCi.chunk.js → Y_IcNhI9.chunk.js} +2 -2
  274. package/dist/Assets/js/dist/scripts/{DrszevCi.chunk.js.map → Y_IcNhI9.chunk.js.map} +1 -1
  275. package/dist/Assets/js/dist/scripts/{CMGpVYHd.chunk.js → Yr5eNz05.chunk.js} +2 -2
  276. package/dist/Assets/js/dist/scripts/{CMGpVYHd.chunk.js.map → Yr5eNz05.chunk.js.map} +1 -1
  277. package/dist/Assets/js/dist/scripts/{QnwProbJ2.chunk.js → Yrc9o6bG2.chunk.js} +2 -2
  278. package/dist/Assets/js/dist/scripts/{QnwProbJ2.chunk.js.map → Yrc9o6bG2.chunk.js.map} +1 -1
  279. package/dist/Assets/js/dist/scripts/{app-Dl-tzfIp.js → app-RphP4Ht0.js} +4 -4
  280. package/dist/Assets/js/dist/scripts/{app-Dl-tzfIp.js.map → app-RphP4Ht0.js.map} +1 -1
  281. package/dist/Assets/js/dist/scripts/{B96Bwi2D.chunk.js → cUgHqo-u.chunk.js} +2 -2
  282. package/dist/Assets/js/dist/scripts/{B96Bwi2D.chunk.js.map → cUgHqo-u.chunk.js.map} +1 -1
  283. package/dist/Assets/js/dist/scripts/{oGkpmMft2.chunk.js → dmUfJoJz2.chunk.js} +2 -2
  284. package/dist/Assets/js/dist/scripts/{oGkpmMft2.chunk.js.map → dmUfJoJz2.chunk.js.map} +1 -1
  285. package/dist/Assets/js/dist/scripts/{DjlPflaG.chunk.js → fapHSEex.chunk.js} +2 -2
  286. package/dist/Assets/js/dist/scripts/{DjlPflaG.chunk.js.map → fapHSEex.chunk.js.map} +1 -1
  287. package/dist/Assets/js/dist/scripts/{CaEXONXp2.chunk.js → jf0e_ii92.chunk.js} +2 -2
  288. package/dist/Assets/js/dist/scripts/{CaEXONXp2.chunk.js.map → jf0e_ii92.chunk.js.map} +1 -1
  289. package/dist/Assets/js/dist/scripts/{Co7TevGA.chunk.js → kp4jXqVv.chunk.js} +2 -2
  290. package/dist/Assets/js/dist/scripts/{Co7TevGA.chunk.js.map → kp4jXqVv.chunk.js.map} +1 -1
  291. package/dist/Assets/js/dist/scripts/lAvSm0ti.chunk.js +2 -0
  292. package/dist/Assets/js/dist/scripts/lAvSm0ti.chunk.js.map +1 -0
  293. package/dist/Assets/js/dist/scripts/{Dmf5vYc42.chunk.js → n7lzp_Mc2.chunk.js} +2 -2
  294. package/dist/Assets/js/dist/scripts/{Dmf5vYc42.chunk.js.map → n7lzp_Mc2.chunk.js.map} +1 -1
  295. package/dist/Assets/js/dist/scripts/{CG9yCT4r2.chunk.js → nvtWO4PW2.chunk.js} +2 -2
  296. package/dist/Assets/js/dist/scripts/{CG9yCT4r2.chunk.js.map → nvtWO4PW2.chunk.js.map} +1 -1
  297. package/dist/Assets/js/dist/scripts/{CACu0hGi2.chunk.js → oYKM19q12.chunk.js} +2 -2
  298. package/dist/Assets/js/dist/scripts/{CACu0hGi2.chunk.js.map → oYKM19q12.chunk.js.map} +1 -1
  299. package/dist/Assets/js/dist/scripts/{B5v11U7g.chunk.js → ohTu1tHz.chunk.js} +2 -2
  300. package/dist/Assets/js/dist/scripts/{B5v11U7g.chunk.js.map → ohTu1tHz.chunk.js.map} +1 -1
  301. package/dist/Assets/js/dist/scripts/{BrT-onLe2.chunk.js → uCRnfBEw2.chunk.js} +2 -2
  302. package/dist/Assets/js/dist/scripts/{BrT-onLe2.chunk.js.map → uCRnfBEw2.chunk.js.map} +1 -1
  303. package/dist/Assets/js/dist/scripts/{3XkTogZ22.chunk.js → udVWVmrH2.chunk.js} +2 -2
  304. package/dist/Assets/js/dist/scripts/{3XkTogZ22.chunk.js.map → udVWVmrH2.chunk.js.map} +1 -1
  305. package/dist/Assets/js/dist/scripts/{DW-yUqjB2.chunk.js → v0VARBBE2.chunk.js} +2 -2
  306. package/dist/Assets/js/dist/scripts/{DW-yUqjB2.chunk.js.map → v0VARBBE2.chunk.js.map} +1 -1
  307. package/dist/Assets/js/dist/scripts/{B4lIRWK22.chunk.js → vf9_5VGa2.chunk.js} +2 -2
  308. package/dist/Assets/js/dist/scripts/{B4lIRWK22.chunk.js.map → vf9_5VGa2.chunk.js.map} +1 -1
  309. package/dist/Assets/js/dist/scripts/{pOwOak4Z2.chunk.js → wTEWtWoE2.chunk.js} +2 -2
  310. package/dist/Assets/js/dist/scripts/{pOwOak4Z2.chunk.js.map → wTEWtWoE2.chunk.js.map} +1 -1
  311. package/dist/Assets/js/dist/scripts/{DPYIBfGB.chunk.js → xj8_Pfx7.chunk.js} +2 -2
  312. package/dist/Assets/js/dist/scripts/{DPYIBfGB.chunk.js.map → xj8_Pfx7.chunk.js.map} +1 -1
  313. package/dist/bundles.json +1 -1
  314. package/dist/en.json +1 -1
  315. package/package.json +1 -1
  316. package/dist/Assets/js/dist/scripts/D2iK_uRt.chunk.js +0 -2
  317. package/dist/Assets/js/dist/scripts/DBUreHJA.chunk.js +0 -3
  318. package/dist/Assets/js/dist/scripts/DBUreHJA.chunk.js.map +0 -1
  319. package/dist/Assets/js/dist/scripts/Dh5DbdtP.chunk.js +0 -2
  320. package/dist/Assets/js/dist/scripts/Dh5DbdtP.chunk.js.map +0 -1
  321. package/dist/Assets/js/dist/scripts/DrBVabtm.chunk.js +0 -1
@@ -1,2 +1,2 @@
1
- import{a as e,i as t}from"./rp704-Pm.chunk.js";import{t as n}from"./Crs6pJ2h.chunk.js";import{t as r}from"./Di_u2uix.chunk.js";import{t as i}from"./BvMTtGLi.chunk.js";import"./CfCYHRuo.chunk.js";import{t as a}from"./M97_Ztsu.chunk.js";import{t as o}from"./UCDGupVs.chunk.js";import{r as s}from"./DkstLT1W.chunk.js";import{n as c}from"./C6KIBIQi.chunk.js";import{t as l}from"./BMjA_FNA.chunk.js";import{s as u,u as d}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as f}from"./C1PTqhPY.chunk.js";import{n as p,r as m,t as h}from"./D_O97jwq.chunk.js";import{t as g}from"./DjzD1n9W.chunk.js";import{t as _}from"./Bwpvc7Th2.chunk.js";import{t as v}from"./dKyhMawf.chunk.js";import{t as y}from"./CWF6vWmf.chunk.js";import{t as b}from"./BhWPGAdN2.chunk.js";import{i as x}from"./CBHAKWPM.chunk.js";import{n as S,t as C}from"./emEFahzJ.chunk.js";import{t as w}from"./C1dPsO8J.chunk.js";import{t as T}from"./BJ446NoM.chunk.js";import{t as E}from"./CKEVcLfZ.chunk.js";import{t as D}from"./BfG--kBd.chunk.js";import{t as O}from"./Dc9zro55.chunk.js";import{t as k}from"./_4opSfMu2.chunk.js";import{n as A,t as j}from"./CPHjafnN2.chunk.js";import{t as M}from"./gzUId2LV2.chunk.js";import{n as N}from"./BEG8TyGD.chunk.js";import{t as P}from"./CCv4lFNr.chunk.js";import{n as F}from"./D2iK_uRt.chunk.js";e();var I=t(),L=(e,t,n)=>({...E(e,t),client:C.Curator,removeUser:{application:i.CRM_STUDIO,action:r.CrmStudio.REMOVE_USER_FROM_CUSTOMER,args:[e,n]},toggleStatus:{application:i.CRM_STUDIO,action:r.CrmStudio.TOGGLE_USER_STATUS,args:[e,n]},changePassword:{application:i.CRM_STUDIO,action:r.CrmStudio.CHANGE_PASSWORD,args:[e,n]},userCredit:{application:i.CRM_STUDIO,action:r.CrmStudio.EDIT_USER_CREDIT,args:[e,n]},manageYearGroup:{application:i.CRM_STUDIO,action:r.CrmStudio.MANAGE_YEAR_GROUP,args:[e,n]}}),R=c(),z={status:e=>R.accessor(`status`,{id:`status`,header:`Status`,cell:t=>(0,I.jsx)(`div`,{className:`d-flex gap-1`,children:(0,I.jsx)(S,{user:{...t.row.original.user,id:t.row.original.userId},currentUser:e,className:`rounded p-1`,showActiveBadge:!0})}),size:200}),customerName:()=>R.accessor(`customerName`,{id:`customerName`,header:`Customer name`,cell:e=>(0,I.jsx)(n,{appLink:{application:i.CRM_STUDIO,action:r.CrmStudio.CUSTOMER_OVERVIEW,args:[e.row.original.customerId]},className:`text-info`,children:e.getValue()}),size:350}),crmId:()=>R.accessor(e=>e.customer?.crmId,{id:`crmId`,header:`CVC ID`,cell:e=>(0,I.jsx)(n,{appLink:{application:i.CRM_STUDIO,action:r.CrmStudio.CUSTOMER_OVERVIEW,args:[e.row.original.customerId]},className:`text-info`,children:e.getValue()}),size:100}),yearGroup:e=>R.accessor(`yearGroup`,{id:`yearGroup`,header:`Year group`,cell:t=>(0,I.jsx)(x,{userType:e,badgeText:t.getValue()}),size:150}),admin:(e,t,n,r)=>R.accessor(e=>e,{id:`admin`,header:`Admin`,cell:i=>{let a=h.getUserStatusFromValue(i.row.original.status)===p.Active&&!t;return(0,I.jsx)(`div`,{className:`w-100 d-flex justify-content-start`,children:r===f.Learner||t?(0,I.jsx)(y,{on:i.row.original.role===m.Admin,onClick:()=>{},showStateWhenDisabled:!0,disabled:!0,tooltipText:`Cannot toggle admin when editing current user`}):(0,I.jsx)(v,{initialValues:{...F(i.row.original.user,i.row.original.customerId),masterRole:i.row.original.role},onSubmit:null,children:(0,I.jsx)(O,{user:i.row.original.user,userType:r,countryCode:i.row.original.customer?.country?.code,isEditingCurrentUser:t,isDisabled:!a,isValidatingEmail:!1,editSsoFields:n,hasOrg:!!i.row.original.customer?.organisation,canEditSuperAdmin:!0,onRoleChange:t=>e(i.row.original.customerId,t),hideLabel:!0})})})},size:100}),actions:e=>R.accessor(e=>e,{id:`actions`,header:`Actions`,cell:t=>{let n=t.row.original.customerId,r=t.row.original.customer,i=r.contentRegion&&r.contentRegion.systemName!==a.US,o=!!r._integrations?.rostered;return(0,I.jsx)(`div`,{className:`w-100 d-flex justify-content-center`,children:(0,I.jsx)(D,{user:{...t.row.original.user,id:t.row.original.userId},userType:e.userType,appLinks:L(n,e.userType,t.row.original.userId),onClickSendResetEmail:e.onClickSendResetEmail,onClickResendActivationEmail:e.onClickResendActivationEmail,onClickSendVerificationEmail:e.onClickSendVerificationEmail,currentUser:e.currentUser,products:e.products,isEditUserForm:!0,hasRostering:o,hasUserCredit:i&&e.canEditUserCredit,filterActions:e=>[`Remove user`,`Reactivate account`,`Deactivate account`,`Change password`,`Update user credit limit`,`Manage year group`].includes(typeof e.label==`string`?e.label:``)})})},size:100})};function B({data:e,userType:t,onAdminToggle:n,user:r,currentUser:i,products:a,hasUserCredit:o,hasRostering:s,canEditUserCredit:c,isEditingCurrentUser:u,canEditSsoFields:d}){return(0,I.jsx)(l,{data:e,columns:[z.status(i),z.crmId(),z.customerName(),...t===f.Staff?[z.admin(n,!!u,d,t)]:[z.yearGroup(t)],z.actions({userType:t,hasRostering:s,currentUser:i,products:a,hasUserCredit:o,canEditUserCredit:c,client:C.Curator,user:r})],theme:{...M,row:``,cell:`py-2 px-3`,header:`text-left`}})}function V(e){let t=d(),n=_(),{hasPermissions:a}=g(),c=a(s.UserCreditUpdate),l=a(s.UsersSsoUpdate),m=u(w.getUserWithCustomers(e.id)),v=m.data?{...m.data,status:h.getUserStatusFromValue(m.data?.status)}:void 0,y=v?.userProfile?.customer?.id,x=u(o.currentUser()),S=v?.userProfiles?.data.length===0,E=v&&h.getUserType(v),D=!e.id||x?.data?.id?.toString()===e.id?.toString();async function O(e,r){try{if(h.getUserType(v)!==f.Staff||D||v.status===p.Disabled)return;let i={...v,masterRole:r,customerId:e,firstName:v?.name,userId:v?.id,email:v?.email,displayName:v?.metadata?.displayName};await t(w.updateUser(e,i,x.data?.id)),n.success(`User role successfully updated`)}catch{n.error(`Failed to update user role`)}}let M=e.id,F=Array.isArray(v?.userProfiles?.data)?v.userProfiles.data.filter(e=>e&&e.customer&&e.customer.id&&e.customer.name).map((e,t)=>({customerName:e.customer.name,customerId:e.customer.id,userId:M,yearGroup:v?.yearGroups.data[t]?.name,role:h.getUserRoleFromValue(e.role),isEditingCurrentUser:D,customer:e.customer,status:e.status,user:{...v,...e,status:h.getUserStatusFromValue(v?.status)===p.Inactive?p.Inactive:e.status,metadata:{...v?.metadata,...e?.metadata}}})):[];u(y&&w.getAuthenticationMethodsByUserIds(y,F.map(e=>e.userId).sort()));let L=y?m.hasCompleted&&F.length>0&&x.hasCompleted:x.hasCompleted&&m.hasCompleted;return(0,I.jsx)(T.Provider,{value:C.Curator,children:(0,I.jsx)(j,{view:A.Users,children:(0,I.jsxs)(P,{title:`Customer schools`,id:e.id,loading:!1,currentTabId:`schools`,children:[m.hasCompleted&&v&&(0,I.jsx)(`div`,{className:`mb-3`,children:(0,I.jsx)(k,{heading:`User details`,children:(0,I.jsxs)(`div`,{className:`p-3`,children:[(0,I.jsxs)(`div`,{className:`row mb-3`,children:[(0,I.jsx)(`div`,{className:`font-label col col-3`,children:`Full name`}),(0,I.jsxs)(`div`,{className:`col`,children:[v.name,` `,v.surname]})]}),(0,I.jsxs)(`div`,{className:`row`,children:[(0,I.jsx)(`div`,{className:`font-label col col-3`,children:`Last active`}),(0,I.jsx)(`div`,{className:`col`,children:N(v.metadata?.lastSignInTime,v.status)})]})]})})}),(0,I.jsx)(k,{heading:`Customer schools`,disableCollapse:!0,buttonText:`Add user to another customer`,buttonAppLink:v?.status!==p.Inactive&&{application:i.CRM_STUDIO,action:r.CrmStudio.ADD_USER_TO_CUSTOMER,args:[y,e.id]},children:S?(0,I.jsx)(`div`,{className:`m-3`,children:`No other customer schools found.`}):L?(0,I.jsx)(`div`,{className:`d-flex flex-column`,id:`customer-schools-portal`,children:(0,I.jsx)(B,{data:F,userType:E,onAdminToggle:O,user:v,currentUser:x.data,hasRostering:!1,canEditUserCredit:c,isEditingCurrentUser:D,canEditSsoFields:l})}):(0,I.jsx)(b,{})})]})})})}export{V as UsersCustomerSchoolsView};
2
- //# sourceMappingURL=NMDkdR-8.chunk.js.map
1
+ import{a as e,i as t}from"./rp704-Pm.chunk.js";import{t as n}from"./Crs6pJ2h.chunk.js";import{t as r}from"./Di_u2uix.chunk.js";import{t as i}from"./BvMTtGLi.chunk.js";import"./CfCYHRuo.chunk.js";import{t as a}from"./M97_Ztsu.chunk.js";import{t as o}from"./UCDGupVs.chunk.js";import{r as s}from"./DkstLT1W.chunk.js";import{n as c}from"./C6KIBIQi.chunk.js";import{t as l}from"./BMjA_FNA.chunk.js";import{s as u,u as d}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as f}from"./C1PTqhPY.chunk.js";import{n as p,r as m,t as h}from"./D_O97jwq.chunk.js";import{t as g}from"./DjzD1n9W.chunk.js";import{t as _}from"./Bwpvc7Th2.chunk.js";import{t as v}from"./dKyhMawf.chunk.js";import{t as y}from"./CWF6vWmf.chunk.js";import{t as b}from"./BhWPGAdN2.chunk.js";import{i as x}from"./CBHAKWPM.chunk.js";import{n as S,t as C}from"./emEFahzJ.chunk.js";import{t as w}from"./C1dPsO8J.chunk.js";import{t as T}from"./BJ446NoM.chunk.js";import{t as E}from"./CKEVcLfZ.chunk.js";import{t as D}from"./BfG--kBd.chunk.js";import{t as O}from"./Dc9zro55.chunk.js";import{t as k}from"./_4opSfMu2.chunk.js";import{n as A,t as j}from"./CPHjafnN2.chunk.js";import{t as M}from"./gzUId2LV2.chunk.js";import{n as N}from"./BEG8TyGD.chunk.js";import{t as P}from"./CCv4lFNr.chunk.js";import{n as F}from"./Cf5cjLzK.chunk.js";e();var I=t(),L=(e,t,n)=>({...E(e,t),client:C.Curator,removeUser:{application:i.CRM_STUDIO,action:r.CrmStudio.REMOVE_USER_FROM_CUSTOMER,args:[e,n]},toggleStatus:{application:i.CRM_STUDIO,action:r.CrmStudio.TOGGLE_USER_STATUS,args:[e,n]},changePassword:{application:i.CRM_STUDIO,action:r.CrmStudio.CHANGE_PASSWORD,args:[e,n]},userCredit:{application:i.CRM_STUDIO,action:r.CrmStudio.EDIT_USER_CREDIT,args:[e,n]},manageYearGroup:{application:i.CRM_STUDIO,action:r.CrmStudio.MANAGE_YEAR_GROUP,args:[e,n]}}),R=c(),z={status:e=>R.accessor(`status`,{id:`status`,header:`Status`,cell:t=>(0,I.jsx)(`div`,{className:`d-flex gap-1`,children:(0,I.jsx)(S,{user:{...t.row.original.user,id:t.row.original.userId},currentUser:e,className:`rounded p-1`,showActiveBadge:!0})}),size:200}),customerName:()=>R.accessor(`customerName`,{id:`customerName`,header:`Customer name`,cell:e=>(0,I.jsx)(n,{appLink:{application:i.CRM_STUDIO,action:r.CrmStudio.CUSTOMER_OVERVIEW,args:[e.row.original.customerId]},className:`text-info`,children:e.getValue()}),size:350}),crmId:()=>R.accessor(e=>e.customer?.crmId,{id:`crmId`,header:`CVC ID`,cell:e=>(0,I.jsx)(n,{appLink:{application:i.CRM_STUDIO,action:r.CrmStudio.CUSTOMER_OVERVIEW,args:[e.row.original.customerId]},className:`text-info`,children:e.getValue()}),size:100}),yearGroup:e=>R.accessor(`yearGroup`,{id:`yearGroup`,header:`Year group`,cell:t=>(0,I.jsx)(x,{userType:e,badgeText:t.getValue()}),size:150}),admin:(e,t,n,r)=>R.accessor(e=>e,{id:`admin`,header:`Admin`,cell:i=>{let a=h.getUserStatusFromValue(i.row.original.status)===p.Active&&!t;return(0,I.jsx)(`div`,{className:`w-100 d-flex justify-content-start`,children:r===f.Learner||t?(0,I.jsx)(y,{on:i.row.original.role===m.Admin,onClick:()=>{},showStateWhenDisabled:!0,disabled:!0,tooltipText:`Cannot toggle admin when editing current user`}):(0,I.jsx)(v,{initialValues:{...F(i.row.original.user,i.row.original.customerId),masterRole:i.row.original.role},onSubmit:null,children:(0,I.jsx)(O,{user:i.row.original.user,userType:r,countryCode:i.row.original.customer?.country?.code,isEditingCurrentUser:t,isDisabled:!a,isValidatingEmail:!1,editSsoFields:n,hasOrg:!!i.row.original.customer?.organisation,canEditSuperAdmin:!0,onRoleChange:t=>e(i.row.original.customerId,t),hideLabel:!0})})})},size:100}),actions:e=>R.accessor(e=>e,{id:`actions`,header:`Actions`,cell:t=>{let n=t.row.original.customerId,r=t.row.original.customer,i=r.contentRegion&&r.contentRegion.systemName!==a.US,o=!!r._integrations?.rostered;return(0,I.jsx)(`div`,{className:`w-100 d-flex justify-content-center`,children:(0,I.jsx)(D,{user:{...t.row.original.user,id:t.row.original.userId},userType:e.userType,appLinks:L(n,e.userType,t.row.original.userId),onClickSendResetEmail:e.onClickSendResetEmail,onClickResendActivationEmail:e.onClickResendActivationEmail,onClickSendVerificationEmail:e.onClickSendVerificationEmail,currentUser:e.currentUser,products:e.products,isEditUserForm:!0,hasRostering:o,hasUserCredit:i&&e.canEditUserCredit,filterActions:e=>[`Remove user`,`Reactivate account`,`Deactivate account`,`Change password`,`Update user credit limit`,`Manage year group`].includes(typeof e.label==`string`?e.label:``)})})},size:100})};function B({data:e,userType:t,onAdminToggle:n,user:r,currentUser:i,products:a,hasUserCredit:o,hasRostering:s,canEditUserCredit:c,isEditingCurrentUser:u,canEditSsoFields:d}){return(0,I.jsx)(l,{data:e,columns:[z.status(i),z.crmId(),z.customerName(),...t===f.Staff?[z.admin(n,!!u,d,t)]:[z.yearGroup(t)],z.actions({userType:t,hasRostering:s,currentUser:i,products:a,hasUserCredit:o,canEditUserCredit:c,client:C.Curator,user:r})],theme:{...M,row:``,cell:`py-2 px-3`,header:`text-left`}})}function V(e){let t=d(),n=_(),{hasPermissions:a}=g(),c=a(s.UserCreditUpdate),l=a(s.UsersSsoUpdate),m=u(w.getUserWithCustomers(e.id)),v=m.data?{...m.data,status:h.getUserStatusFromValue(m.data?.status)}:void 0,y=v?.userProfile?.customer?.id,x=u(o.currentUser()),S=v?.userProfiles?.data.length===0,E=v&&h.getUserType(v),D=!e.id||x?.data?.id?.toString()===e.id?.toString();async function O(e,r){try{if(h.getUserType(v)!==f.Staff||D||v.status===p.Disabled)return;let i={...v,masterRole:r,customerId:e,firstName:v?.name,userId:v?.id,email:v?.email,displayName:v?.metadata?.displayName};await t(w.updateUser(e,i,x.data?.id)),n.success(`User role successfully updated`)}catch{n.error(`Failed to update user role`)}}let M=e.id,F=Array.isArray(v?.userProfiles?.data)?v.userProfiles.data.filter(e=>e&&e.customer&&e.customer.id&&e.customer.name).map((e,t)=>({customerName:e.customer.name,customerId:e.customer.id,userId:M,yearGroup:v?.yearGroups.data[t]?.name,role:h.getUserRoleFromValue(e.role),isEditingCurrentUser:D,customer:e.customer,status:e.status,user:{...v,...e,status:h.getUserStatusFromValue(v?.status)===p.Inactive?p.Inactive:e.status,metadata:{...v?.metadata,...e?.metadata}}})):[];u(y&&w.getAuthenticationMethodsByUserIds(y,F.map(e=>e.userId).sort()));let L=y?m.hasCompleted&&F.length>0&&x.hasCompleted:x.hasCompleted&&m.hasCompleted;return(0,I.jsx)(T.Provider,{value:C.Curator,children:(0,I.jsx)(j,{view:A.Users,children:(0,I.jsxs)(P,{title:`Customer schools`,id:e.id,loading:!1,currentTabId:`schools`,children:[m.hasCompleted&&v&&(0,I.jsx)(`div`,{className:`mb-3`,children:(0,I.jsx)(k,{heading:`User details`,children:(0,I.jsxs)(`div`,{className:`p-3`,children:[(0,I.jsxs)(`div`,{className:`row mb-3`,children:[(0,I.jsx)(`div`,{className:`font-label col col-3`,children:`Full name`}),(0,I.jsxs)(`div`,{className:`col`,children:[v.name,` `,v.surname]})]}),(0,I.jsxs)(`div`,{className:`row`,children:[(0,I.jsx)(`div`,{className:`font-label col col-3`,children:`Last active`}),(0,I.jsx)(`div`,{className:`col`,children:N(v.metadata?.lastSignInTime,v.status)})]})]})})}),(0,I.jsx)(k,{heading:`Customer schools`,disableCollapse:!0,buttonText:`Add user to another customer`,buttonAppLink:v?.status!==p.Inactive&&{application:i.CRM_STUDIO,action:r.CrmStudio.ADD_USER_TO_CUSTOMER,args:[y,e.id]},children:S?(0,I.jsx)(`div`,{className:`m-3`,children:`No other customer schools found.`}):L?(0,I.jsx)(`div`,{className:`d-flex flex-column`,id:`customer-schools-portal`,children:(0,I.jsx)(B,{data:F,userType:E,onAdminToggle:O,user:v,currentUser:x.data,hasRostering:!1,canEditUserCredit:c,isEditingCurrentUser:D,canEditSsoFields:l})}):(0,I.jsx)(b,{})})]})})})}export{V as UsersCustomerSchoolsView};
2
+ //# sourceMappingURL=CxIfJCSc.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NMDkdR-8.chunk.js","names":[],"sources":["../../../../../src/apps/crm-studio/components/tables/UsersCustomerSchoolsTable.tsx","../../../../../src/apps/crm-studio/views/users/UsersCustomerSchoolsView.tsx"],"sourcesContent":["import React from 'react';\nimport { createColumnHelper } from '@tanstack/react-table';\n\nimport { RoleOrYearGroup } from 'libs/shared/apps/user-manager/components/user-list-items/components/RoleOrYearGroup';\nimport { UserItemActions } from 'libs/shared/apps/user-manager/components/user-list-items/components/UserItemActions';\nimport { UserStatusBadge } from 'libs/shared/apps/user-manager/components/user-list-items/components/UserStatusBadge';\nimport { UserRoleField } from 'libs/shared/apps/user-manager/components/user-role/UserRoleField';\nimport { UserManagerClient } from 'libs/shared/apps/user-manager/enums/UserManagerClient';\nimport { EditUserRequest, UserManagerAppLinks } from 'libs/shared/apps/user-manager/interfaces';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { TableV2 } from 'libs/shared/components/table-v2/TableV2';\nimport { ToggleSwitch } from 'libs/shared/components/toggle-switch/ToggleSwitch';\nimport { ContentRegion } from 'libs/shared/enums/ContentRegion';\nimport { ObjectStatus } from 'libs/shared/enums/ObjectStatus';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { UserRole } from 'libs/shared/enums/UserRole';\nimport { YearGroup } from 'libs/shared/interfaces';\nimport { CurrentUser, User } from 'libs/shared/interfaces/models/User';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { Actions as CuratorActions } from 'shared/constants';\nimport { AppChannels } from 'shared/constants';\n\nimport { getUserManagerAppLinks } from 'apps/crm-studio/helpers/CuratorUserManagerAppLinks';\nimport { getUserInitialValues } from 'apps/crm-studio/views/users/edit-user/EditUserUtils';\nimport { UsersCustomerSchoolsRow } from 'apps/crm-studio/views/users/UsersCustomerSchoolsView';\n\nimport { CrmStudioTableTheme } from './CrmStudioTableTheme';\n\nconst getApplinks = (customerId: string, userType: UserGroup, userId: string): UserManagerAppLinks => {\n return {\n ...getUserManagerAppLinks(customerId, userType),\n client: UserManagerClient.Curator,\n removeUser: {\n application: AppChannels.CRM_STUDIO,\n action: CuratorActions.CrmStudio.REMOVE_USER_FROM_CUSTOMER,\n args: [ customerId, userId ]\n },\n toggleStatus: {\n application: AppChannels.CRM_STUDIO,\n action: CuratorActions.CrmStudio.TOGGLE_USER_STATUS,\n args: [ customerId, userId ]\n },\n changePassword: {\n application: AppChannels.CRM_STUDIO,\n action: CuratorActions.CrmStudio.CHANGE_PASSWORD,\n args: [ customerId, userId ]\n },\n userCredit: {\n application: AppChannels.CRM_STUDIO,\n action: CuratorActions.CrmStudio.EDIT_USER_CREDIT,\n args: [ customerId, userId ]\n },\n manageYearGroup: {\n application: AppChannels.CRM_STUDIO,\n action: CuratorActions.CrmStudio.MANAGE_YEAR_GROUP,\n args: [ customerId, userId ]\n }\n };\n};\n\nexport interface UsersCustomerSchoolsTableProps {\n data: UsersCustomerSchoolsRow[];\n userType: UserGroup;\n onAdminToggle?: (customerId: string, role: UserRole) => void;\n user?: User;\n currentUser?: CurrentUser;\n products?: ProductId[];\n hasUserCredit?: boolean;\n hasRostering?: boolean;\n canEditUserCredit?: boolean;\n isEditingCurrentUser?: boolean;\n isTogglingAdmin?: boolean;\n yearGroups?: YearGroup[];\n canEditSsoFields?: boolean;\n}\n\nconst columnHelper = createColumnHelper<UsersCustomerSchoolsRow>();\nconst UsersCustomerSchoolsColumns = {\n status: (currentUser: CurrentUser) =>\n columnHelper.accessor('status', {\n id: 'status',\n header: 'Status',\n cell: props => {\n return (\n <div className='d-flex gap-1'>\n <UserStatusBadge\n // Get id of base User not the individual UserProfile\n user={{ ...props.row.original.user, id: props.row.original.userId }}\n currentUser={currentUser}\n className='rounded p-1'\n showActiveBadge\n />\n </div>\n );\n },\n size: 200\n }),\n customerName: () =>\n columnHelper.accessor('customerName', {\n id: 'customerName',\n header: 'Customer name',\n cell: props => (\n <AppLink\n appLink={{\n application: AppChannels.CRM_STUDIO,\n action: CuratorActions.CrmStudio.CUSTOMER_OVERVIEW,\n args: [props.row.original.customerId]\n }}\n className='text-info'\n >\n {props.getValue()}\n </AppLink>\n ),\n size: 350\n }),\n crmId: () =>\n columnHelper.accessor(row => row.customer?.crmId, {\n id: 'crmId',\n header: 'CVC ID',\n cell: props => (\n <AppLink\n appLink={{\n application: AppChannels.CRM_STUDIO,\n action: CuratorActions.CrmStudio.CUSTOMER_OVERVIEW,\n args: [props.row.original.customerId]\n }}\n className='text-info'\n >\n {props.getValue()}\n </AppLink>\n ),\n size: 100\n }),\n yearGroup: (userType: UserGroup) =>\n columnHelper.accessor('yearGroup', {\n id: 'yearGroup',\n header: 'Year group',\n cell: props => {\n return <RoleOrYearGroup userType={userType} badgeText={props.getValue()} />;\n },\n size: 150\n }),\n admin: (\n onAdminToggle: (customerId: string, role: UserRole) => void,\n isEditingCurrentUser: boolean,\n canEditSsoFields: boolean,\n userType: UserGroup\n ) =>\n columnHelper.accessor(row => row, {\n id: 'admin',\n header: 'Admin',\n cell: props => {\n const enabled = UserHelper.getUserStatusFromValue(props.row.original.status) === ObjectStatus.Active;\n const canToggle = enabled && !isEditingCurrentUser;\n return (\n <div className='w-100 d-flex justify-content-start'>\n {userType === UserGroup.Learner || isEditingCurrentUser ?\n <ToggleSwitch\n on={props.row.original.role === UserRole.Admin}\n onClick={() => {}}\n showStateWhenDisabled={true}\n disabled={true}\n tooltipText='Cannot toggle admin when editing current user'\n /> :\n <FormWrapper<EditUserRequest>\n initialValues={{ ...getUserInitialValues(\n props.row.original.user,\n props.row.original.customerId\n ), masterRole: props.row.original.role }}\n onSubmit={null}\n >\n <UserRoleField\n user={props.row.original.user}\n userType={userType}\n countryCode={props.row.original.customer?.country?.code}\n isEditingCurrentUser={isEditingCurrentUser}\n isDisabled={!canToggle}\n isValidatingEmail={false}\n editSsoFields={canEditSsoFields}\n hasOrg={!!props.row.original.customer?.organisation}\n canEditSuperAdmin\n onRoleChange={(newRole: UserRole) => onAdminToggle(\n props.row.original.customerId,\n newRole\n )}\n hideLabel\n />\n </FormWrapper>}\n </div>\n );\n },\n size: 100\n }),\n actions: (userProps: any) =>\n columnHelper.accessor(row => row, {\n id: 'actions',\n header: 'Actions',\n cell: props => {\n const customerId = props.row.original.customerId;\n const customer = props.row.original.customer;\n const isNotUs = customer.contentRegion && customer.contentRegion.systemName !== ContentRegion.US;\n const hasRostering = !!customer._integrations?.rostered;\n return (\n <div className='w-100 d-flex justify-content-center'>\n <UserItemActions\n user={{ ...props.row.original.user, id: props.row.original.userId }}\n userType={userProps.userType}\n appLinks={getApplinks(customerId, userProps.userType, props.row.original.userId)}\n onClickSendResetEmail={userProps.onClickSendResetEmail}\n onClickResendActivationEmail={userProps.onClickResendActivationEmail}\n onClickSendVerificationEmail={userProps.onClickSendVerificationEmail}\n currentUser={userProps.currentUser}\n products={userProps.products}\n isEditUserForm\n hasRostering={hasRostering}\n hasUserCredit={isNotUs && userProps.canEditUserCredit}\n filterActions={action => [\n 'Remove user',\n 'Reactivate account',\n 'Deactivate account',\n 'Change password',\n 'Update user credit limit',\n 'Manage year group'\n ].includes(typeof action.label === 'string' ? action.label : '')}\n />\n </div>\n );\n },\n size: 100\n })\n};\n\nexport function UsersCustomerSchoolsTable({\n data,\n userType,\n onAdminToggle,\n user,\n currentUser,\n products,\n hasUserCredit,\n hasRostering,\n canEditUserCredit,\n isEditingCurrentUser,\n canEditSsoFields\n}: UsersCustomerSchoolsTableProps) {\n const columns = [\n UsersCustomerSchoolsColumns.status(currentUser),\n UsersCustomerSchoolsColumns.crmId(),\n UsersCustomerSchoolsColumns.customerName(),\n ...(userType !== UserGroup.Staff ?\n [UsersCustomerSchoolsColumns.yearGroup(userType)] :\n [UsersCustomerSchoolsColumns.admin(\n onAdminToggle,\n !!isEditingCurrentUser,\n canEditSsoFields,\n userType\n )]\n ),\n UsersCustomerSchoolsColumns.actions({\n userType,\n hasRostering,\n currentUser,\n products,\n hasUserCredit,\n canEditUserCredit,\n client: UserManagerClient.Curator,\n user\n })\n ];\n\n const theme = {\n ...CrmStudioTableTheme,\n row: '',\n cell: 'py-2 px-3',\n header: 'text-left'\n };\n\n return (\n <TableV2\n data={data}\n columns={columns}\n theme={theme}\n />\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { getLastActiveDate } from 'libs/shared/apps/user-manager/components/user-list-items/components/LastActive';\nimport { UserManagerClientContext } from 'libs/shared/apps/user-manager/context/UserManagerClientContext';\nimport { UserManagerClient } from 'libs/shared/apps/user-manager/enums/UserManagerClient';\nimport { DropdownContainer } from 'libs/shared/components/dropdown-container/DropdownContainer';\nimport { PopupLoadingSpinner } from 'libs/shared/components/popup/PopupLoadingSpinner';\nimport { ObjectStatus } from 'libs/shared/enums/ObjectStatus';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { UserRole } from 'libs/shared/enums/UserRole';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { CuratorUser, CurrentUser, Customer, User } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { Actions } from 'shared/constants/CuratorActions';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { CuratorPermissionName } from 'shared/enums/CuratorPermissionName';\nimport { useCuratorPermissions } from 'shared/hooks/UseCuratorPermissions';\n\nimport { UsersCustomerSchoolsTable } from 'apps/crm-studio/components/tables/UsersCustomerSchoolsTable';\nimport { CustomerRequests } from 'apps/crm-studio/flight-requests/CustomerRequests';\nimport { CrmStudioLayoutView, CrmStudioLayoutViewPage } from 'apps/crm-studio/views/layout/CrmStudioLayout';\nimport { CrmStudioUserLayout } from 'apps/crm-studio/views/layout/CrmStudioUserLayout';\n\ninterface UsersCustomerSchoolsViewProps {\n id: string;\n}\n\nexport type UsersCustomerSchoolsRow = {\n status: ObjectStatus,\n customerName: string,\n customerId: string,\n yearGroup: string,\n isEditingCurrentUser: boolean,\n customer: Customer,\n user?: User,\n role?: UserRole,\n userId: string,\n onAdminToggle?: (customerId: string, role: UserRole) => void\n};\n\nexport function UsersCustomerSchoolsView(props: UsersCustomerSchoolsViewProps) {\n const fetchAsync = Flight.useGetFetchAsync();\n const alerts = useAlerts();\n const { hasPermissions } = useCuratorPermissions();\n\n const canEditUserCredit = hasPermissions(CuratorPermissionName.UserCreditUpdate);\n const canEditSsoFields = hasPermissions(CuratorPermissionName.UsersSsoUpdate);\n \n const userRaw = Flight.useBasicFetch<User>(CustomerRequests.getUserWithCustomers(props.id));\n const user = userRaw.data ?\n { ...userRaw.data, status: UserHelper.getUserStatusFromValue(userRaw.data?.status) } :\n undefined;\n\n const customerId = user?.userProfile?.customer?.id;\n const currentUser = Flight.useBasicFetch<CurrentUser | CuratorUser>(UserRequests.currentUser());\n \n const noOtherSchools = user?.userProfiles?.data.length === 0;\n const userType = user && UserHelper.getUserType(user);\n const isEditingCurrentUser = !props.id || (currentUser?.data?.id?.toString() === props.id?.toString());\n\n async function handleAdminToggle(targetCustomerId: string, role: UserRole): Promise<void> {\n try {\n if (UserHelper.getUserType(user) !== UserGroup.Staff || isEditingCurrentUser) return;\n if (user.status === ObjectStatus.Disabled) return;\n\n const updatedUser = {\n ...user,\n masterRole: role,\n customerId: targetCustomerId,\n firstName: user?.name,\n userId: user?.id,\n email: user?.email,\n displayName: user?.metadata?.displayName\n };\n\n await fetchAsync(CustomerRequests.updateUser(\n targetCustomerId,\n updatedUser,\n currentUser.data?.id\n ));\n alerts.success(`User role successfully updated`);\n } catch {\n alerts.error('Failed to update user role');\n }\n }\n\n const userId = props.id;\n const usersCustomerSchoolsRows: UsersCustomerSchoolsRow[] = Array.isArray(user?.userProfiles?.data) ?\n user.userProfiles.data\n .filter(profile => profile && profile.customer && profile.customer.id && profile.customer.name)\n .map((profile, idx) => ({\n customerName: profile.customer.name,\n customerId: profile.customer.id,\n userId: userId,\n yearGroup: user?.yearGroups.data[idx]?.name,\n role: UserHelper.getUserRoleFromValue(profile.role),\n isEditingCurrentUser,\n customer: profile.customer,\n status: profile.status,\n user: {\n ...user,\n ...profile,\n // Base user and userProfile have different statuses when user is pending.\n // Userprofile is Active, but user is Inactive. So set userprofile status to Inactive\n // while user is pending\n status: UserHelper.getUserStatusFromValue(user?.status) !== ObjectStatus.Inactive ?\n profile.status :\n ObjectStatus.Inactive,\n metadata: {\n ...user?.metadata,\n ...profile?.metadata\n }\n }\n })) :\n [];\n // fetch authentication methods for user\n Flight.useBasicFetch(\n customerId && CustomerRequests.getAuthenticationMethodsByUserIds(\n customerId,\n usersCustomerSchoolsRows.map(row => row.userId).sort()\n )\n );\n\n const isLoaded = customerId ? (\n userRaw.hasCompleted &&\n usersCustomerSchoolsRows.length > 0 &&\n currentUser.hasCompleted\n ) : (\n currentUser.hasCompleted &&\n userRaw.hasCompleted\n );\n\n return (\n <UserManagerClientContext.Provider value={UserManagerClient.Curator}>\n <CrmStudioLayoutView view={CrmStudioLayoutViewPage.Users}>\n <CrmStudioUserLayout\n title='Customer schools'\n id={props.id}\n loading={false}\n currentTabId='schools'\n >\n {userRaw.hasCompleted && user && (\n <div className='mb-3'>\n <DropdownContainer heading='User details'>\n <div className='p-3'>\n <div className='row mb-3'>\n <div className='font-label col col-3'>Full name</div>\n <div className='col'>{user.name} {user.surname}</div>\n </div>\n <div className='row'>\n <div className='font-label col col-3'>Last active</div>\n <div className='col'>{getLastActiveDate(user.metadata?.lastSignInTime, user.status)}</div>\n </div>\n </div>\n \n </DropdownContainer>\n </div>\n )}\n <DropdownContainer\n heading='Customer schools'\n disableCollapse\n buttonText='Add user to another customer'\n buttonAppLink={user?.status !== ObjectStatus.Inactive && {\n application: AppChannels.CRM_STUDIO,\n action: Actions.CrmStudio.ADD_USER_TO_CUSTOMER,\n args: [ customerId, props.id ]\n }}\n >\n {noOtherSchools ? (\n <div className='m-3'>No other customer schools found.</div>\n ) : isLoaded ? (\n <div className='d-flex flex-column' id='customer-schools-portal'>\n <UsersCustomerSchoolsTable\n data={usersCustomerSchoolsRows}\n userType={userType}\n onAdminToggle={handleAdminToggle}\n user={user}\n currentUser={currentUser.data as CurrentUser}\n hasRostering={false}\n canEditUserCredit={canEditUserCredit}\n isEditingCurrentUser={isEditingCurrentUser}\n canEditSsoFields={canEditSsoFields}\n />\n </div>\n ) : (\n <PopupLoadingSpinner />\n )}\n </DropdownContainer>\n </CrmStudioUserLayout>\n </CrmStudioLayoutView>\n </UserManagerClientContext.Provider>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"CxIfJCSc.chunk.js","names":[],"sources":["../../../../../src/apps/crm-studio/components/tables/UsersCustomerSchoolsTable.tsx","../../../../../src/apps/crm-studio/views/users/UsersCustomerSchoolsView.tsx"],"sourcesContent":["import React from 'react';\nimport { createColumnHelper } from '@tanstack/react-table';\n\nimport { RoleOrYearGroup } from 'libs/shared/apps/user-manager/components/user-list-items/components/RoleOrYearGroup';\nimport { UserItemActions } from 'libs/shared/apps/user-manager/components/user-list-items/components/UserItemActions';\nimport { UserStatusBadge } from 'libs/shared/apps/user-manager/components/user-list-items/components/UserStatusBadge';\nimport { UserRoleField } from 'libs/shared/apps/user-manager/components/user-role/UserRoleField';\nimport { UserManagerClient } from 'libs/shared/apps/user-manager/enums/UserManagerClient';\nimport { EditUserRequest, UserManagerAppLinks } from 'libs/shared/apps/user-manager/interfaces';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { TableV2 } from 'libs/shared/components/table-v2/TableV2';\nimport { ToggleSwitch } from 'libs/shared/components/toggle-switch/ToggleSwitch';\nimport { ContentRegion } from 'libs/shared/enums/ContentRegion';\nimport { ObjectStatus } from 'libs/shared/enums/ObjectStatus';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { UserRole } from 'libs/shared/enums/UserRole';\nimport { YearGroup } from 'libs/shared/interfaces';\nimport { CurrentUser, User } from 'libs/shared/interfaces/models/User';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { Actions as CuratorActions } from 'shared/constants';\nimport { AppChannels } from 'shared/constants';\n\nimport { getUserManagerAppLinks } from 'apps/crm-studio/helpers/CuratorUserManagerAppLinks';\nimport { getUserInitialValues } from 'apps/crm-studio/views/users/edit-user/EditUserUtils';\nimport { UsersCustomerSchoolsRow } from 'apps/crm-studio/views/users/UsersCustomerSchoolsView';\n\nimport { CrmStudioTableTheme } from './CrmStudioTableTheme';\n\nconst getApplinks = (customerId: string, userType: UserGroup, userId: string): UserManagerAppLinks => {\n return {\n ...getUserManagerAppLinks(customerId, userType),\n client: UserManagerClient.Curator,\n removeUser: {\n application: AppChannels.CRM_STUDIO,\n action: CuratorActions.CrmStudio.REMOVE_USER_FROM_CUSTOMER,\n args: [ customerId, userId ]\n },\n toggleStatus: {\n application: AppChannels.CRM_STUDIO,\n action: CuratorActions.CrmStudio.TOGGLE_USER_STATUS,\n args: [ customerId, userId ]\n },\n changePassword: {\n application: AppChannels.CRM_STUDIO,\n action: CuratorActions.CrmStudio.CHANGE_PASSWORD,\n args: [ customerId, userId ]\n },\n userCredit: {\n application: AppChannels.CRM_STUDIO,\n action: CuratorActions.CrmStudio.EDIT_USER_CREDIT,\n args: [ customerId, userId ]\n },\n manageYearGroup: {\n application: AppChannels.CRM_STUDIO,\n action: CuratorActions.CrmStudio.MANAGE_YEAR_GROUP,\n args: [ customerId, userId ]\n }\n };\n};\n\nexport interface UsersCustomerSchoolsTableProps {\n data: UsersCustomerSchoolsRow[];\n userType: UserGroup;\n onAdminToggle?: (customerId: string, role: UserRole) => void;\n user?: User;\n currentUser?: CurrentUser;\n products?: ProductId[];\n hasUserCredit?: boolean;\n hasRostering?: boolean;\n canEditUserCredit?: boolean;\n isEditingCurrentUser?: boolean;\n isTogglingAdmin?: boolean;\n yearGroups?: YearGroup[];\n canEditSsoFields?: boolean;\n}\n\nconst columnHelper = createColumnHelper<UsersCustomerSchoolsRow>();\nconst UsersCustomerSchoolsColumns = {\n status: (currentUser: CurrentUser) =>\n columnHelper.accessor('status', {\n id: 'status',\n header: 'Status',\n cell: props => {\n return (\n <div className='d-flex gap-1'>\n <UserStatusBadge\n // Get id of base User not the individual UserProfile\n user={{ ...props.row.original.user, id: props.row.original.userId }}\n currentUser={currentUser}\n className='rounded p-1'\n showActiveBadge\n />\n </div>\n );\n },\n size: 200\n }),\n customerName: () =>\n columnHelper.accessor('customerName', {\n id: 'customerName',\n header: 'Customer name',\n cell: props => (\n <AppLink\n appLink={{\n application: AppChannels.CRM_STUDIO,\n action: CuratorActions.CrmStudio.CUSTOMER_OVERVIEW,\n args: [props.row.original.customerId]\n }}\n className='text-info'\n >\n {props.getValue()}\n </AppLink>\n ),\n size: 350\n }),\n crmId: () =>\n columnHelper.accessor(row => row.customer?.crmId, {\n id: 'crmId',\n header: 'CVC ID',\n cell: props => (\n <AppLink\n appLink={{\n application: AppChannels.CRM_STUDIO,\n action: CuratorActions.CrmStudio.CUSTOMER_OVERVIEW,\n args: [props.row.original.customerId]\n }}\n className='text-info'\n >\n {props.getValue()}\n </AppLink>\n ),\n size: 100\n }),\n yearGroup: (userType: UserGroup) =>\n columnHelper.accessor('yearGroup', {\n id: 'yearGroup',\n header: 'Year group',\n cell: props => {\n return <RoleOrYearGroup userType={userType} badgeText={props.getValue()} />;\n },\n size: 150\n }),\n admin: (\n onAdminToggle: (customerId: string, role: UserRole) => void,\n isEditingCurrentUser: boolean,\n canEditSsoFields: boolean,\n userType: UserGroup\n ) =>\n columnHelper.accessor(row => row, {\n id: 'admin',\n header: 'Admin',\n cell: props => {\n const enabled = UserHelper.getUserStatusFromValue(props.row.original.status) === ObjectStatus.Active;\n const canToggle = enabled && !isEditingCurrentUser;\n return (\n <div className='w-100 d-flex justify-content-start'>\n {userType === UserGroup.Learner || isEditingCurrentUser ?\n <ToggleSwitch\n on={props.row.original.role === UserRole.Admin}\n onClick={() => {}}\n showStateWhenDisabled={true}\n disabled={true}\n tooltipText='Cannot toggle admin when editing current user'\n /> :\n <FormWrapper<EditUserRequest>\n initialValues={{ ...getUserInitialValues(\n props.row.original.user,\n props.row.original.customerId\n ), masterRole: props.row.original.role }}\n onSubmit={null}\n >\n <UserRoleField\n user={props.row.original.user}\n userType={userType}\n countryCode={props.row.original.customer?.country?.code}\n isEditingCurrentUser={isEditingCurrentUser}\n isDisabled={!canToggle}\n isValidatingEmail={false}\n editSsoFields={canEditSsoFields}\n hasOrg={!!props.row.original.customer?.organisation}\n canEditSuperAdmin\n onRoleChange={(newRole: UserRole) => onAdminToggle(\n props.row.original.customerId,\n newRole\n )}\n hideLabel\n />\n </FormWrapper>}\n </div>\n );\n },\n size: 100\n }),\n actions: (userProps: any) =>\n columnHelper.accessor(row => row, {\n id: 'actions',\n header: 'Actions',\n cell: props => {\n const customerId = props.row.original.customerId;\n const customer = props.row.original.customer;\n const isNotUs = customer.contentRegion && customer.contentRegion.systemName !== ContentRegion.US;\n const hasRostering = !!customer._integrations?.rostered;\n return (\n <div className='w-100 d-flex justify-content-center'>\n <UserItemActions\n user={{ ...props.row.original.user, id: props.row.original.userId }}\n userType={userProps.userType}\n appLinks={getApplinks(customerId, userProps.userType, props.row.original.userId)}\n onClickSendResetEmail={userProps.onClickSendResetEmail}\n onClickResendActivationEmail={userProps.onClickResendActivationEmail}\n onClickSendVerificationEmail={userProps.onClickSendVerificationEmail}\n currentUser={userProps.currentUser}\n products={userProps.products}\n isEditUserForm\n hasRostering={hasRostering}\n hasUserCredit={isNotUs && userProps.canEditUserCredit}\n filterActions={action => [\n 'Remove user',\n 'Reactivate account',\n 'Deactivate account',\n 'Change password',\n 'Update user credit limit',\n 'Manage year group'\n ].includes(typeof action.label === 'string' ? action.label : '')}\n />\n </div>\n );\n },\n size: 100\n })\n};\n\nexport function UsersCustomerSchoolsTable({\n data,\n userType,\n onAdminToggle,\n user,\n currentUser,\n products,\n hasUserCredit,\n hasRostering,\n canEditUserCredit,\n isEditingCurrentUser,\n canEditSsoFields\n}: UsersCustomerSchoolsTableProps) {\n const columns = [\n UsersCustomerSchoolsColumns.status(currentUser),\n UsersCustomerSchoolsColumns.crmId(),\n UsersCustomerSchoolsColumns.customerName(),\n ...(userType !== UserGroup.Staff ?\n [UsersCustomerSchoolsColumns.yearGroup(userType)] :\n [UsersCustomerSchoolsColumns.admin(\n onAdminToggle,\n !!isEditingCurrentUser,\n canEditSsoFields,\n userType\n )]\n ),\n UsersCustomerSchoolsColumns.actions({\n userType,\n hasRostering,\n currentUser,\n products,\n hasUserCredit,\n canEditUserCredit,\n client: UserManagerClient.Curator,\n user\n })\n ];\n\n const theme = {\n ...CrmStudioTableTheme,\n row: '',\n cell: 'py-2 px-3',\n header: 'text-left'\n };\n\n return (\n <TableV2\n data={data}\n columns={columns}\n theme={theme}\n />\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { getLastActiveDate } from 'libs/shared/apps/user-manager/components/user-list-items/components/LastActive';\nimport { UserManagerClientContext } from 'libs/shared/apps/user-manager/context/UserManagerClientContext';\nimport { UserManagerClient } from 'libs/shared/apps/user-manager/enums/UserManagerClient';\nimport { DropdownContainer } from 'libs/shared/components/dropdown-container/DropdownContainer';\nimport { PopupLoadingSpinner } from 'libs/shared/components/popup/PopupLoadingSpinner';\nimport { ObjectStatus } from 'libs/shared/enums/ObjectStatus';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { UserRole } from 'libs/shared/enums/UserRole';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { CuratorUser, CurrentUser, Customer, User } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { Actions } from 'shared/constants/CuratorActions';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { CuratorPermissionName } from 'shared/enums/CuratorPermissionName';\nimport { useCuratorPermissions } from 'shared/hooks/UseCuratorPermissions';\n\nimport { UsersCustomerSchoolsTable } from 'apps/crm-studio/components/tables/UsersCustomerSchoolsTable';\nimport { CustomerRequests } from 'apps/crm-studio/flight-requests/CustomerRequests';\nimport { CrmStudioLayoutView, CrmStudioLayoutViewPage } from 'apps/crm-studio/views/layout/CrmStudioLayout';\nimport { CrmStudioUserLayout } from 'apps/crm-studio/views/layout/CrmStudioUserLayout';\n\ninterface UsersCustomerSchoolsViewProps {\n id: string;\n}\n\nexport type UsersCustomerSchoolsRow = {\n status: ObjectStatus,\n customerName: string,\n customerId: string,\n yearGroup: string,\n isEditingCurrentUser: boolean,\n customer: Customer,\n user?: User,\n role?: UserRole,\n userId: string,\n onAdminToggle?: (customerId: string, role: UserRole) => void\n};\n\nexport function UsersCustomerSchoolsView(props: UsersCustomerSchoolsViewProps) {\n const fetchAsync = Flight.useGetFetchAsync();\n const alerts = useAlerts();\n const { hasPermissions } = useCuratorPermissions();\n\n const canEditUserCredit = hasPermissions(CuratorPermissionName.UserCreditUpdate);\n const canEditSsoFields = hasPermissions(CuratorPermissionName.UsersSsoUpdate);\n \n const userRaw = Flight.useBasicFetch<User>(CustomerRequests.getUserWithCustomers(props.id));\n const user = userRaw.data ?\n { ...userRaw.data, status: UserHelper.getUserStatusFromValue(userRaw.data?.status) } :\n undefined;\n\n const customerId = user?.userProfile?.customer?.id;\n const currentUser = Flight.useBasicFetch<CurrentUser | CuratorUser>(UserRequests.currentUser());\n \n const noOtherSchools = user?.userProfiles?.data.length === 0;\n const userType = user && UserHelper.getUserType(user);\n const isEditingCurrentUser = !props.id || (currentUser?.data?.id?.toString() === props.id?.toString());\n\n async function handleAdminToggle(targetCustomerId: string, role: UserRole): Promise<void> {\n try {\n if (UserHelper.getUserType(user) !== UserGroup.Staff || isEditingCurrentUser) return;\n if (user.status === ObjectStatus.Disabled) return;\n\n const updatedUser = {\n ...user,\n masterRole: role,\n customerId: targetCustomerId,\n firstName: user?.name,\n userId: user?.id,\n email: user?.email,\n displayName: user?.metadata?.displayName\n };\n\n await fetchAsync(CustomerRequests.updateUser(\n targetCustomerId,\n updatedUser,\n currentUser.data?.id\n ));\n alerts.success(`User role successfully updated`);\n } catch {\n alerts.error('Failed to update user role');\n }\n }\n\n const userId = props.id;\n const usersCustomerSchoolsRows: UsersCustomerSchoolsRow[] = Array.isArray(user?.userProfiles?.data) ?\n user.userProfiles.data\n .filter(profile => profile && profile.customer && profile.customer.id && profile.customer.name)\n .map((profile, idx) => ({\n customerName: profile.customer.name,\n customerId: profile.customer.id,\n userId: userId,\n yearGroup: user?.yearGroups.data[idx]?.name,\n role: UserHelper.getUserRoleFromValue(profile.role),\n isEditingCurrentUser,\n customer: profile.customer,\n status: profile.status,\n user: {\n ...user,\n ...profile,\n // Base user and userProfile have different statuses when user is pending.\n // Userprofile is Active, but user is Inactive. So set userprofile status to Inactive\n // while user is pending\n status: UserHelper.getUserStatusFromValue(user?.status) !== ObjectStatus.Inactive ?\n profile.status :\n ObjectStatus.Inactive,\n metadata: {\n ...user?.metadata,\n ...profile?.metadata\n }\n }\n })) :\n [];\n // fetch authentication methods for user\n Flight.useBasicFetch(\n customerId && CustomerRequests.getAuthenticationMethodsByUserIds(\n customerId,\n usersCustomerSchoolsRows.map(row => row.userId).sort()\n )\n );\n\n const isLoaded = customerId ? (\n userRaw.hasCompleted &&\n usersCustomerSchoolsRows.length > 0 &&\n currentUser.hasCompleted\n ) : (\n currentUser.hasCompleted &&\n userRaw.hasCompleted\n );\n\n return (\n <UserManagerClientContext.Provider value={UserManagerClient.Curator}>\n <CrmStudioLayoutView view={CrmStudioLayoutViewPage.Users}>\n <CrmStudioUserLayout\n title='Customer schools'\n id={props.id}\n loading={false}\n currentTabId='schools'\n >\n {userRaw.hasCompleted && user && (\n <div className='mb-3'>\n <DropdownContainer heading='User details'>\n <div className='p-3'>\n <div className='row mb-3'>\n <div className='font-label col col-3'>Full name</div>\n <div className='col'>{user.name} {user.surname}</div>\n </div>\n <div className='row'>\n <div className='font-label col col-3'>Last active</div>\n <div className='col'>{getLastActiveDate(user.metadata?.lastSignInTime, user.status)}</div>\n </div>\n </div>\n \n </DropdownContainer>\n </div>\n )}\n <DropdownContainer\n heading='Customer schools'\n disableCollapse\n buttonText='Add user to another customer'\n buttonAppLink={user?.status !== ObjectStatus.Inactive && {\n application: AppChannels.CRM_STUDIO,\n action: Actions.CrmStudio.ADD_USER_TO_CUSTOMER,\n args: [ customerId, props.id ]\n }}\n >\n {noOtherSchools ? (\n <div className='m-3'>No other customer schools found.</div>\n ) : isLoaded ? (\n <div className='d-flex flex-column' id='customer-schools-portal'>\n <UsersCustomerSchoolsTable\n data={usersCustomerSchoolsRows}\n userType={userType}\n onAdminToggle={handleAdminToggle}\n user={user}\n currentUser={currentUser.data as CurrentUser}\n hasRostering={false}\n canEditUserCredit={canEditUserCredit}\n isEditingCurrentUser={isEditingCurrentUser}\n canEditSsoFields={canEditSsoFields}\n />\n </div>\n ) : (\n <PopupLoadingSpinner />\n )}\n </DropdownContainer>\n </CrmStudioUserLayout>\n </CrmStudioLayoutView>\n </UserManagerClientContext.Provider>\n );\n}\n"],"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{t as s}from"./UCDGupVs.chunk.js";import{y as c}from"./BhKv6dKl2.chunk.js";import{n as l}from"./CbiGs3Tn.chunk.js";import{a as u,s as d}from"./Dgk5cBBe.chunk.js";import{t as f}from"./Bw7dP6jB.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as p}from"./JmL1DHFu.chunk.js";import{t as m}from"./B6uYrrzJ2.chunk.js";import{t as h}from"./Cwh6cLM4.chunk.js";import{t as g}from"./CE7PE1jj.chunk.js";import{t as _}from"./mStmtFRo.chunk.js";import"./DrBVabtm.chunk.js";e();var v=t();function y(e){let t=f(),y=d(p.video(e.videoId)),b=d(s.currentUser());function x(t){return[{label:`Remove`,button:!0,appLink:{application:r.VIDEOS,action:n.Videos.REMOVE_VIDEO_PLAYLIST,args:[e.videoId,t.id]},className:`btn btn-outline-danger`}]}let S=a.getColumnSet(o.VideoPlaylists),C={actions:x,appLinks:{[i.Playlist]:e=>({application:r.PLAYLISTS,action:n.Playlists.EDIT_PLAYLIST,args:[e.id]})}};function w(t){return h.videoPlaylists(e.videoId,t)}function T(e){return u(t)(w(e))}let{items:E,isFetching:D,hasMore:O,nextCursor:k}=g(w,T);return!D&&b.data?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(_,{videoId:e.videoId,activeAction:n.Videos.EDIT_VIDEO_PLAYLISTS,currentUser:b.data}),(0,v.jsx)(c,{object:y.data}),(0,v.jsx)(m,{members:E,columns:S,columnData:C,emptyStateText:`No playlist contains this video.`,isFetching:D,fetchNext:T,nextCursor:k,hasMoreMembers:O})]}):(0,v.jsx)(`div`,{className:`text-center pt-5`,children:(0,v.jsx)(l,{as:`div`,animation:`border`,role:`status`})})}export{y as EditVideoPlaylistsView};
2
- //# sourceMappingURL=B9H-d-YC.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{t as s}from"./UCDGupVs.chunk.js";import{y as c}from"./GpDEun8c2.chunk.js";import{n as l}from"./CbiGs3Tn.chunk.js";import{a as u,s as d}from"./Dgk5cBBe.chunk.js";import{t as f}from"./Bw7dP6jB.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as p}from"./JmL1DHFu.chunk.js";import{t as m}from"./DB-51xws2.chunk.js";import{t as h}from"./Cwh6cLM4.chunk.js";import{t as g}from"./CE7PE1jj.chunk.js";import{t as _}from"./BT-jeT7C.chunk.js";import"./B1pBJzjh.chunk.js";e();var v=t();function y(e){let t=f(),y=d(p.video(e.videoId)),b=d(s.currentUser());function x(t){return[{label:`Remove`,button:!0,appLink:{application:r.VIDEOS,action:n.Videos.REMOVE_VIDEO_PLAYLIST,args:[e.videoId,t.id]},className:`btn btn-outline-danger`}]}let S=a.getColumnSet(o.VideoPlaylists),C={actions:x,appLinks:{[i.Playlist]:e=>({application:r.PLAYLISTS,action:n.Playlists.EDIT_PLAYLIST,args:[e.id]})}};function w(t){return h.videoPlaylists(e.videoId,t)}function T(e){return u(t)(w(e))}let{items:E,isFetching:D,hasMore:O,nextCursor:k}=g(w,T);return!D&&b.data?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(_,{videoId:e.videoId,activeAction:n.Videos.EDIT_VIDEO_PLAYLISTS,currentUser:b.data}),(0,v.jsx)(c,{object:y.data}),(0,v.jsx)(m,{members:E,columns:S,columnData:C,emptyStateText:`No playlist contains this video.`,isFetching:D,fetchNext:T,nextCursor:k,hasMoreMembers:O})]}):(0,v.jsx)(`div`,{className:`text-center pt-5`,children:(0,v.jsx)(l,{as:`div`,animation:`border`,role:`status`})})}export{y as EditVideoPlaylistsView};
2
+ //# sourceMappingURL=CxggKQxV.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"B9H-d-YC.chunk.js","names":[],"sources":["../../../../../src/apps/videos/views/edit-video-playlists/EditVideoPlaylistsView.tsx"],"sourcesContent":["import React from 'react';\nimport { Spinner } from 'react-bootstrap';\nimport { useDispatch } from 'react-redux';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { CuratorUser, Playlist } 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 { PlaylistRequests } from 'apps/playlists/flight-requests/CuratorPlaylistRequests';\nimport { EditVideoNav } from 'apps/videos/components/edit-video-nav';\nimport { VideoRequests } from 'apps/videos/flight-requests/CuratorVideoRequests';\n\ninterface EditVideoPlaylistsViewProps {\n videoId: string;\n}\n\nexport function EditVideoPlaylistsView(props: EditVideoPlaylistsViewProps): JSX.Element {\n const dispatch = useDispatch();\n\n const video = Flight.useBasicFetch(VideoRequests.video(props.videoId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n\n function columnActions(data: Playlist): ActionOptions[] {\n return [\n {\n label: `Remove`,\n button: true,\n appLink: {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.REMOVE_VIDEO_PLAYLIST,\n args: [ props.videoId, data.id ]\n },\n className: 'btn btn-outline-danger'\n }\n ];\n }\n const columns = MemberMatrixHelper.getColumnSet(DefinedColumnSet.VideoPlaylists);\n const columnData: ColumnData = {\n actions: columnActions,\n appLinks: {\n [MatrixObjectType.Playlist]: (playlist: Playlist) => ({\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.EDIT_PLAYLIST,\n args: [playlist.id]\n })\n }\n };\n\n function getMembersPage(cursor?: string) {\n return PlaylistRequests.videoPlaylists(props.videoId, cursor);\n }\n\n function fetchNext(cursor?: string) {\n return Flight.getFetch(dispatch)(getMembersPage(cursor));\n }\n\n const {\n items,\n isFetching,\n hasMore,\n nextCursor\n } = useInfiniteList<MatrixMember>(getMembersPage, fetchNext);\n\n const dataLoaded = !isFetching && currentUser.data;\n\n if (!dataLoaded)\n return (\n <div className='text-center pt-5'>\n <Spinner as='div' animation='border' role='status' />\n </div>\n );\n\n return (\n <>\n <EditVideoNav\n videoId={props.videoId}\n activeAction={Actions.Videos.EDIT_VIDEO_PLAYLISTS}\n currentUser={currentUser.data}\n />\n <ObjectHeader object={video.data} />\n <MemberMatrix\n members={items}\n columns={columns}\n columnData={columnData}\n emptyStateText='No playlist contains this video.'\n isFetching={isFetching}\n fetchNext={fetchNext}\n nextCursor={nextCursor}\n hasMoreMembers={hasMore}\n />\n </>\n );\n}\n"],"mappings":"grBAwBA,SAAgB,EAAuB,EAAiD,CACtF,IAAM,EAAW,EAAY,EAEvB,EAAQ,EAAqB,EAAc,MAAM,EAAM,OAAO,CAAC,EAC/D,EAAc,EAAkC,EAAa,YAAY,CAAC,EAEhF,SAAS,EAAc,EAAiC,CACtD,MAAO,CACL,CACE,MAAO,SACP,OAAQ,GACR,QAAS,CACP,YAAa,EAAY,OACzB,OAAQ,EAAQ,OAAO,sBACvB,KAAM,CAAE,EAAM,QAAS,EAAK,EAAG,CACjC,EACA,UAAW,wBACb,CACF,CACF,CACA,IAAM,EAAU,EAAmB,aAAa,EAAiB,cAAc,EACzE,EAAyB,CAC7B,QAAS,EACT,SAAU,EACP,EAAiB,UAAY,IAAwB,CACpD,YAAa,EAAY,UACzB,OAAQ,EAAQ,UAAU,cAC1B,KAAM,CAAC,EAAS,EAAE,CACpB,EACF,CACF,EAEA,SAAS,EAAe,EAAiB,CACvC,OAAO,EAAiB,eAAe,EAAM,QAAS,CAAM,CAC9D,CAEA,SAAS,EAAU,EAAiB,CAClC,OAAO,EAAgB,CAAQ,CAAC,CAAC,EAAe,CAAM,CAAC,CACzD,CAEA,GAAM,CACJ,QACA,aACA,UACA,cACE,EAA8B,EAAgB,CAAS,EAW3D,MATmB,CAAC,GAAc,EAAY,MAU5C,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,QAAS,EAAM,QACf,aAAc,EAAQ,OAAO,qBAC7B,YAAa,EAAY,IAC1B,CAAA,GACD,EAAA,EAAA,IAAA,CAAC,EAAD,CAAc,OAAQ,EAAM,IAAO,CAAA,GACnC,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,QAAS,EACA,UACG,aACZ,eAAe,mCACH,aACD,YACC,aACZ,eAAgB,CACjB,CAAA,CACD,CAAA,CAAA,GAvBA,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,6BACb,EAAA,EAAA,IAAA,CAAC,EAAD,CAAS,GAAG,MAAM,UAAU,SAAS,KAAK,QAAU,CAAA,CACjD,CAAA,CAuBX"}
1
+ {"version":3,"file":"CxggKQxV.chunk.js","names":[],"sources":["../../../../../src/apps/videos/views/edit-video-playlists/EditVideoPlaylistsView.tsx"],"sourcesContent":["import React from 'react';\nimport { Spinner } from 'react-bootstrap';\nimport { useDispatch } from 'react-redux';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { CuratorUser, Playlist } 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 { PlaylistRequests } from 'apps/playlists/flight-requests/CuratorPlaylistRequests';\nimport { EditVideoNav } from 'apps/videos/components/edit-video-nav';\nimport { VideoRequests } from 'apps/videos/flight-requests/CuratorVideoRequests';\n\ninterface EditVideoPlaylistsViewProps {\n videoId: string;\n}\n\nexport function EditVideoPlaylistsView(props: EditVideoPlaylistsViewProps): JSX.Element {\n const dispatch = useDispatch();\n\n const video = Flight.useBasicFetch(VideoRequests.video(props.videoId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n\n function columnActions(data: Playlist): ActionOptions[] {\n return [\n {\n label: `Remove`,\n button: true,\n appLink: {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.REMOVE_VIDEO_PLAYLIST,\n args: [ props.videoId, data.id ]\n },\n className: 'btn btn-outline-danger'\n }\n ];\n }\n const columns = MemberMatrixHelper.getColumnSet(DefinedColumnSet.VideoPlaylists);\n const columnData: ColumnData = {\n actions: columnActions,\n appLinks: {\n [MatrixObjectType.Playlist]: (playlist: Playlist) => ({\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.EDIT_PLAYLIST,\n args: [playlist.id]\n })\n }\n };\n\n function getMembersPage(cursor?: string) {\n return PlaylistRequests.videoPlaylists(props.videoId, cursor);\n }\n\n function fetchNext(cursor?: string) {\n return Flight.getFetch(dispatch)(getMembersPage(cursor));\n }\n\n const {\n items,\n isFetching,\n hasMore,\n nextCursor\n } = useInfiniteList<MatrixMember>(getMembersPage, fetchNext);\n\n const dataLoaded = !isFetching && currentUser.data;\n\n if (!dataLoaded)\n return (\n <div className='text-center pt-5'>\n <Spinner as='div' animation='border' role='status' />\n </div>\n );\n\n return (\n <>\n <EditVideoNav\n videoId={props.videoId}\n activeAction={Actions.Videos.EDIT_VIDEO_PLAYLISTS}\n currentUser={currentUser.data}\n />\n <ObjectHeader object={video.data} />\n <MemberMatrix\n members={items}\n columns={columns}\n columnData={columnData}\n emptyStateText='No playlist contains this video.'\n isFetching={isFetching}\n fetchNext={fetchNext}\n nextCursor={nextCursor}\n hasMoreMembers={hasMore}\n />\n </>\n );\n}\n"],"mappings":"grBAwBA,SAAgB,EAAuB,EAAiD,CACtF,IAAM,EAAW,EAAY,EAEvB,EAAQ,EAAqB,EAAc,MAAM,EAAM,OAAO,CAAC,EAC/D,EAAc,EAAkC,EAAa,YAAY,CAAC,EAEhF,SAAS,EAAc,EAAiC,CACtD,MAAO,CACL,CACE,MAAO,SACP,OAAQ,GACR,QAAS,CACP,YAAa,EAAY,OACzB,OAAQ,EAAQ,OAAO,sBACvB,KAAM,CAAE,EAAM,QAAS,EAAK,EAAG,CACjC,EACA,UAAW,wBACb,CACF,CACF,CACA,IAAM,EAAU,EAAmB,aAAa,EAAiB,cAAc,EACzE,EAAyB,CAC7B,QAAS,EACT,SAAU,EACP,EAAiB,UAAY,IAAwB,CACpD,YAAa,EAAY,UACzB,OAAQ,EAAQ,UAAU,cAC1B,KAAM,CAAC,EAAS,EAAE,CACpB,EACF,CACF,EAEA,SAAS,EAAe,EAAiB,CACvC,OAAO,EAAiB,eAAe,EAAM,QAAS,CAAM,CAC9D,CAEA,SAAS,EAAU,EAAiB,CAClC,OAAO,EAAgB,CAAQ,CAAC,CAAC,EAAe,CAAM,CAAC,CACzD,CAEA,GAAM,CACJ,QACA,aACA,UACA,cACE,EAA8B,EAAgB,CAAS,EAW3D,MATmB,CAAC,GAAc,EAAY,MAU5C,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,QAAS,EAAM,QACf,aAAc,EAAQ,OAAO,qBAC7B,YAAa,EAAY,IAC1B,CAAA,GACD,EAAA,EAAA,IAAA,CAAC,EAAD,CAAc,OAAQ,EAAM,IAAO,CAAA,GACnC,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,QAAS,EACA,UACG,aACZ,eAAe,mCACH,aACD,YACC,aACZ,eAAgB,CACjB,CAAA,CACD,CAAA,CAAA,GAvBA,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,6BACb,EAAA,EAAA,IAAA,CAAC,EAAD,CAAS,GAAG,MAAM,UAAU,SAAS,KAAK,QAAU,CAAA,CACjD,CAAA,CAuBX"}
@@ -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{t as i}from"./D-JsEiDq2.chunk.js";import{s as a}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{r as o,t as s}from"./B30PmHCG2.chunk.js";import{t as c}from"./Bwpvc7Th2.chunk.js";import{t as l}from"./CZyPFSXo.chunk.js";import{t as u}from"./CUVnn-Rk.chunk.js";import{t as d}from"./DDHep0UM.chunk.js";e();var f=t();function p(e){let t=c(),p=a(u.cvLivePresentation()),m=a(p.data&&l.presentationAudiences(p.data.id)),h=a(p.data&&l.getClassificationTree(p.data.id));function g(i){t.success({heading:o.Success,type:s.Success,message:`Successfully moved <strong>${i.name}</strong> to the next stage.`,timeout:6e3,appLink:{application:r.CV_LIVE_PIPELINE,action:n.CvLivePipeline.CURATED_THUMBNAIL},appLinkText:`See next stage`,appLinkClassName:`info-link`}),e.closePopup()}let _=m.data&&p.data&&h.data;return(0,f.jsx)(i,{title:`Upload recording`,closePopup:e.closePopup,backdrop:`static`,showLoadingSpinner:!_,size:`lg`,children:(0,f.jsx)(d,{livestreamId:e.livestreamId,onSubmitDone:g})})}export{p as CvLiveUploadRecordingView};
2
- //# sourceMappingURL=B3I44IzQ.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{t as i}from"./D-JsEiDq2.chunk.js";import{s as a}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{r as o,t as s}from"./B30PmHCG2.chunk.js";import{t as c}from"./Bwpvc7Th2.chunk.js";import{t as l}from"./CZyPFSXo.chunk.js";import{t as u}from"./CUVnn-Rk.chunk.js";import{t as d}from"./DHeA2NJS.chunk.js";e();var f=t();function p(e){let t=c(),p=a(u.cvLivePresentation()),m=a(p.data&&l.presentationAudiences(p.data.id)),h=a(p.data&&l.getClassificationTree(p.data.id));function g(i){t.success({heading:o.Success,type:s.Success,message:`Successfully moved <strong>${i.name}</strong> to the next stage.`,timeout:6e3,appLink:{application:r.CV_LIVE_PIPELINE,action:n.CvLivePipeline.CURATED_THUMBNAIL},appLinkText:`See next stage`,appLinkClassName:`info-link`}),e.closePopup()}let _=m.data&&p.data&&h.data;return(0,f.jsx)(i,{title:`Upload recording`,closePopup:e.closePopup,backdrop:`static`,showLoadingSpinner:!_,size:`lg`,children:(0,f.jsx)(d,{livestreamId:e.livestreamId,onSubmitDone:g})})}export{p as CvLiveUploadRecordingView};
2
+ //# sourceMappingURL=CyNNZ1So.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"B3I44IzQ.chunk.js","names":[],"sources":["../../../../../src/apps/cv-live/views/upload-recording/CvLiveUploadRecordingView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { AlertType, DefaultAlertHeading } from 'libs/common/backbone/services/BaseAlertService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { Popup, PopupProps } from 'libs/shared/components/popup/Popup';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Presentation, PresentationAudience } from 'libs/shared/interfaces';\n\nimport { Actions, AppChannels } from 'shared/constants';\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\nimport { ClassificationTree } from 'shared/interfaces';\n\nimport { UploadVideo } from 'apps/cv-live/components/upload-video/UploadVideo';\nimport { PresentationRequests } from 'apps/cv-live/flight-requests/CvLivePresentationRequests';\n\ninterface CvLiveUploadRecordingViewProps extends PopupProps {\n livestreamId?: string;\n}\n\nexport function CvLiveUploadRecordingView(props: CvLiveUploadRecordingViewProps) {\n const alerts = useAlerts();\n const presentation = Flight.useBasicFetch<Presentation>(\n PresentationRequests.cvLivePresentation()\n );\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n presentation.data && SubjectRequests.presentationAudiences(presentation.data.id)\n );\n\n const classificationTree = Flight.useBasicFetch<ClassificationTree>(\n presentation.data && SubjectRequests.getClassificationTree(presentation.data.id)\n );\n\n function onSubmit(video: HashObject) {\n alerts.success({\n heading: DefaultAlertHeading.Success,\n type: AlertType.Success,\n message: `Successfully moved <strong>${video.name}</strong> to the next stage.`,\n timeout: 6000,\n appLink: {\n application: AppChannels.CV_LIVE_PIPELINE,\n action: Actions.CvLivePipeline.CURATED_THUMBNAIL\n },\n appLinkText: 'See next stage',\n appLinkClassName: 'info-link'\n });\n props.closePopup();\n }\n\n const dataLoaded = audiences.data && presentation.data && classificationTree.data;\n\n return (\n <Popup\n title='Upload recording'\n closePopup={props.closePopup}\n backdrop='static'\n showLoadingSpinner={!dataLoaded}\n size='lg'\n >\n <UploadVideo\n livestreamId={props.livestreamId}\n onSubmitDone={onSubmit}\n />\n </Popup>\n );\n}\n"],"mappings":"ueAsBA,SAAgB,EAA0B,EAAuC,CAC/E,IAAM,EAAS,EAAU,EACnB,EAAe,EACnB,EAAqB,mBAAmB,CAC1C,EACM,EAAY,EAChB,EAAa,MAAQ,EAAgB,sBAAsB,EAAa,KAAK,EAAE,CACjF,EAEM,EAAqB,EACzB,EAAa,MAAQ,EAAgB,sBAAsB,EAAa,KAAK,EAAE,CACjF,EAEA,SAAS,EAAS,EAAmB,CACnC,EAAO,QAAQ,CACb,QAAS,EAAoB,QAC7B,KAAM,EAAU,QAChB,QAAS,8BAA8B,EAAM,KAAK,8BAClD,QAAS,IACT,QAAS,CACP,YAAa,EAAY,iBACzB,OAAQ,EAAQ,eAAe,iBACjC,EACA,YAAa,iBACb,iBAAkB,WACpB,CAAC,EACD,EAAM,WAAW,CACnB,CAEA,IAAM,EAAa,EAAU,MAAQ,EAAa,MAAQ,EAAmB,KAE7E,OACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,MAAM,mBACN,WAAY,EAAM,WAClB,SAAS,SACT,mBAAoB,CAAC,EACrB,KAAK,eAEL,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,aAAc,EAAM,aACpB,aAAc,CACf,CAAA,CACI,CAAA,CAEX"}
1
+ {"version":3,"file":"CyNNZ1So.chunk.js","names":[],"sources":["../../../../../src/apps/cv-live/views/upload-recording/CvLiveUploadRecordingView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { AlertType, DefaultAlertHeading } from 'libs/common/backbone/services/BaseAlertService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { Popup, PopupProps } from 'libs/shared/components/popup/Popup';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Presentation, PresentationAudience } from 'libs/shared/interfaces';\n\nimport { Actions, AppChannels } from 'shared/constants';\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\nimport { ClassificationTree } from 'shared/interfaces';\n\nimport { UploadVideo } from 'apps/cv-live/components/upload-video/UploadVideo';\nimport { PresentationRequests } from 'apps/cv-live/flight-requests/CvLivePresentationRequests';\n\ninterface CvLiveUploadRecordingViewProps extends PopupProps {\n livestreamId?: string;\n}\n\nexport function CvLiveUploadRecordingView(props: CvLiveUploadRecordingViewProps) {\n const alerts = useAlerts();\n const presentation = Flight.useBasicFetch<Presentation>(\n PresentationRequests.cvLivePresentation()\n );\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n presentation.data && SubjectRequests.presentationAudiences(presentation.data.id)\n );\n\n const classificationTree = Flight.useBasicFetch<ClassificationTree>(\n presentation.data && SubjectRequests.getClassificationTree(presentation.data.id)\n );\n\n function onSubmit(video: HashObject) {\n alerts.success({\n heading: DefaultAlertHeading.Success,\n type: AlertType.Success,\n message: `Successfully moved <strong>${video.name}</strong> to the next stage.`,\n timeout: 6000,\n appLink: {\n application: AppChannels.CV_LIVE_PIPELINE,\n action: Actions.CvLivePipeline.CURATED_THUMBNAIL\n },\n appLinkText: 'See next stage',\n appLinkClassName: 'info-link'\n });\n props.closePopup();\n }\n\n const dataLoaded = audiences.data && presentation.data && classificationTree.data;\n\n return (\n <Popup\n title='Upload recording'\n closePopup={props.closePopup}\n backdrop='static'\n showLoadingSpinner={!dataLoaded}\n size='lg'\n >\n <UploadVideo\n livestreamId={props.livestreamId}\n onSubmitDone={onSubmit}\n />\n </Popup>\n );\n}\n"],"mappings":"ueAsBA,SAAgB,EAA0B,EAAuC,CAC/E,IAAM,EAAS,EAAU,EACnB,EAAe,EACnB,EAAqB,mBAAmB,CAC1C,EACM,EAAY,EAChB,EAAa,MAAQ,EAAgB,sBAAsB,EAAa,KAAK,EAAE,CACjF,EAEM,EAAqB,EACzB,EAAa,MAAQ,EAAgB,sBAAsB,EAAa,KAAK,EAAE,CACjF,EAEA,SAAS,EAAS,EAAmB,CACnC,EAAO,QAAQ,CACb,QAAS,EAAoB,QAC7B,KAAM,EAAU,QAChB,QAAS,8BAA8B,EAAM,KAAK,8BAClD,QAAS,IACT,QAAS,CACP,YAAa,EAAY,iBACzB,OAAQ,EAAQ,eAAe,iBACjC,EACA,YAAa,iBACb,iBAAkB,WACpB,CAAC,EACD,EAAM,WAAW,CACnB,CAEA,IAAM,EAAa,EAAU,MAAQ,EAAa,MAAQ,EAAmB,KAE7E,OACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,MAAM,mBACN,WAAY,EAAM,WAClB,SAAS,SACT,mBAAoB,CAAC,EACrB,KAAK,eAEL,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,aAAc,EAAM,aACpB,aAAc,CACf,CAAA,CACI,CAAA,CAEX"}
@@ -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"./C1kx8Ra5.chunk.js";import{t as i}from"./Di_u2uix.chunk.js";import{t as a}from"./BvMTtGLi.chunk.js";import"./CfCYHRuo.chunk.js";import{t as o}from"./UCDGupVs.chunk.js";import{G as s}from"./C7Gmh7eY.chunk.js";import{t as c}from"./CLCeObem2.chunk.js";import{t as l}from"./C7gaMI1t2.chunk.js";import{t as u}from"./eoeMwpAO2.chunk.js";import{y as d}from"./BhKv6dKl2.chunk.js";import{s as f,u as p}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as m}from"./BDwjs8qz.chunk.js";import{t as h}from"./Bwpvc7Th2.chunk.js";import{r as g}from"./BRcHS92O.chunk.js";import{i as _}from"./DA0I3jYA.chunk.js";import{n as v,t as y}from"./dKyhMawf.chunk.js";import{n as b}from"./C4Ey4nzb2.chunk.js";import{t as x}from"./CNfsk-2G.chunk.js";import{t as S}from"./C5i_8zoU.chunk.js";import{t as C}from"./BUtlulMl.chunk.js";import{t as w}from"./0KUhq7W7.chunk.js";import{t as T}from"./BSE6FgKi.chunk.js";import{t as E}from"./DbrVjVdn.chunk.js";e();var D=n(c()),O=t(),k=D.object().shape({name:D.string().trim().max(255,()=>`Title is too long`).required(()=>`Title is required`).default(``),description:D.string().trim().max(16e3,()=>`Description is too long`).default(``),startTime:D.number().required(),endTime:D.number().required(),thumbnail:l,status:D.mixed()}).noUnknown();function A(){let e=v();return(0,O.jsxs)(_,{children:[(0,O.jsx)(b,{label:`Name`,type:`text`,name:`name`,id:`name`,placeholder:`Name your clip`,autoFocus:!0,value:e.values.name}),(0,O.jsxs)(`div`,{className:`form-group`,children:[(0,O.jsx)(`label`,{children:`Status`}),(0,O.jsx)(`div`,{children:(0,O.jsx)(`span`,{className:`badge ${T.getStatusBadgeClass(e.values.status)}`,children:m[e.values.status]})})]}),(0,O.jsx)(b,{label:`Description`,component:`textarea`,name:`description`,id:`description`,placeholder:`Add a meaningful description to your clip`,value:e.values.description}),(0,O.jsx)(x,{imageType:g.Thumbnails,fieldName:`thumbnail`,uploadAppLink:{application:a.CLIPS,action:i.Clips.UPLOAD_IMAGE}}),(0,O.jsx)(`div`,{className:`d-flex justify-content-end`,children:(0,O.jsx)(C,{isNew:!1,variant:`dark`})})]})}function j(e){return(0,O.jsx)(y,{initialValues:{...e.clip,thumbnail:e.clip.thumbnail||e.clip._parentVideo.thumbnail},validationSchema:k,onSubmit:e.saveClip,children:(0,O.jsx)(A,{})})}function M(e){let t=p(),n=h(),a=f(S.clip(e.clipId)),c=f(s.getAssemblyLineVideo(e.clipId)),l=f(o.currentUser());function g(i,o){let s=i;i.thumbnail?.id===a.data._parentVideo.thumbnail?.id&&(s=r.omit(s,[`thumbnail`])),t(S.updateClip(e.clipId,s)).then(()=>n.success(`Successfully updated clip`)).catch(()=>n.error(`Failed to update clip`)).finally(o)}let _=!!a.data&&!!l.data&&!!c.hasCompleted;return(0,O.jsxs)(O.Fragment,{children:[!!l.data&&(0,O.jsx)(w,{clipId:e.clipId,activeAction:i.Clips.EDIT_CLIP_DETAILS,currentUser:l.data}),_&&(0,O.jsxs)(O.Fragment,{children:[a.data.status===m.Published&&(0,O.jsxs)(u,{variant:`info`,className:`mt-3 mb-1`,children:[`This clip is `,(0,O.jsx)(`strong`,{children:`published`}),` and cannot be edited or deleted. You may archive it if you believe it should no longer be in use.`]}),a.data.status===m.Archived&&(0,O.jsxs)(u,{variant:`info`,className:`mt-3 mb-1`,children:[`This clip is `,(0,O.jsx)(`strong`,{children:`archived`}),`. You may publish it again from the options menu.`]}),(0,O.jsx)(d,{object:{name:a.data.name,status:a.data.status},actions:E.getClipActions(a.data,c.data),actionsDropdownClassName:`btn btn-outline-dark`}),(0,O.jsx)(j,{clip:a.data,saveClip:g})]})]})}export{M as EditClipDetailsView};
2
- //# sourceMappingURL=B2V1N14S.chunk.js.map
1
+ import{a as e,i as t,ln as n}from"./rp704-Pm.chunk.js";import{t as r}from"./C1kx8Ra5.chunk.js";import{t as i}from"./Di_u2uix.chunk.js";import{t as a}from"./BvMTtGLi.chunk.js";import"./CfCYHRuo.chunk.js";import{t as o}from"./UCDGupVs.chunk.js";import{G as s}from"./DWHKdmdQ.chunk.js";import{t as c}from"./CLCeObem2.chunk.js";import{t as l}from"./C7gaMI1t2.chunk.js";import{t as u}from"./eoeMwpAO2.chunk.js";import{y as d}from"./GpDEun8c2.chunk.js";import{s as f,u as p}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as m}from"./BDwjs8qz.chunk.js";import{t as h}from"./Bwpvc7Th2.chunk.js";import{r as g}from"./BRcHS92O.chunk.js";import{i as _}from"./DA0I3jYA.chunk.js";import{n as v,t as y}from"./dKyhMawf.chunk.js";import{n as b}from"./C4Ey4nzb2.chunk.js";import{t as x}from"./CNfsk-2G.chunk.js";import{t as S}from"./C5i_8zoU.chunk.js";import{t as C}from"./BUtlulMl.chunk.js";import{t as w}from"./DnZGILQc.chunk.js";import{t as T}from"./BSE6FgKi.chunk.js";import{t as E}from"./BMj3pXcm.chunk.js";e();var D=n(c()),O=t(),k=D.object().shape({name:D.string().trim().max(255,()=>`Title is too long`).required(()=>`Title is required`).default(``),description:D.string().trim().max(16e3,()=>`Description is too long`).default(``),startTime:D.number().required(),endTime:D.number().required(),thumbnail:l,status:D.mixed()}).noUnknown();function A(){let e=v();return(0,O.jsxs)(_,{children:[(0,O.jsx)(b,{label:`Name`,type:`text`,name:`name`,id:`name`,placeholder:`Name your clip`,autoFocus:!0,value:e.values.name}),(0,O.jsxs)(`div`,{className:`form-group`,children:[(0,O.jsx)(`label`,{children:`Status`}),(0,O.jsx)(`div`,{children:(0,O.jsx)(`span`,{className:`badge ${T.getStatusBadgeClass(e.values.status)}`,children:m[e.values.status]})})]}),(0,O.jsx)(b,{label:`Description`,component:`textarea`,name:`description`,id:`description`,placeholder:`Add a meaningful description to your clip`,value:e.values.description}),(0,O.jsx)(x,{imageType:g.Thumbnails,fieldName:`thumbnail`,uploadAppLink:{application:a.CLIPS,action:i.Clips.UPLOAD_IMAGE}}),(0,O.jsx)(`div`,{className:`d-flex justify-content-end`,children:(0,O.jsx)(C,{isNew:!1,variant:`dark`})})]})}function j(e){return(0,O.jsx)(y,{initialValues:{...e.clip,thumbnail:e.clip.thumbnail||e.clip._parentVideo.thumbnail},validationSchema:k,onSubmit:e.saveClip,children:(0,O.jsx)(A,{})})}function M(e){let t=p(),n=h(),a=f(S.clip(e.clipId)),c=f(s.getAssemblyLineVideo(e.clipId)),l=f(o.currentUser());function g(i,o){let s=i;i.thumbnail?.id===a.data._parentVideo.thumbnail?.id&&(s=r.omit(s,[`thumbnail`])),t(S.updateClip(e.clipId,s)).then(()=>n.success(`Successfully updated clip`)).catch(()=>n.error(`Failed to update clip`)).finally(o)}let _=!!a.data&&!!l.data&&!!c.hasCompleted;return(0,O.jsxs)(O.Fragment,{children:[!!l.data&&(0,O.jsx)(w,{clipId:e.clipId,activeAction:i.Clips.EDIT_CLIP_DETAILS,currentUser:l.data}),_&&(0,O.jsxs)(O.Fragment,{children:[a.data.status===m.Published&&(0,O.jsxs)(u,{variant:`info`,className:`mt-3 mb-1`,children:[`This clip is `,(0,O.jsx)(`strong`,{children:`published`}),` and cannot be edited or deleted. You may archive it if you believe it should no longer be in use.`]}),a.data.status===m.Archived&&(0,O.jsxs)(u,{variant:`info`,className:`mt-3 mb-1`,children:[`This clip is `,(0,O.jsx)(`strong`,{children:`archived`}),`. You may publish it again from the options menu.`]}),(0,O.jsx)(d,{object:{name:a.data.name,status:a.data.status},actions:E.getClipActions(a.data,c.data),actionsDropdownClassName:`btn btn-outline-dark`}),(0,O.jsx)(j,{clip:a.data,saveClip:g})]})]})}export{M as EditClipDetailsView};
2
+ //# sourceMappingURL=Cz-WSyAE.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"B2V1N14S.chunk.js","names":[],"sources":["../../../../../src/apps/clips/components/edit-clip-details/EditClipDetails.tsx","../../../../../src/apps/clips/views/edit-clip-details/EditClipDetailsView.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Form } from 'formik';\nimport * as Yup from 'yup';\n\nimport { FormButtons } from 'libs/shared/components/forms/form-buttons/FormButtons';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { FormWrapper, useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { Clip, Thumbnail } from 'libs/shared/interfaces';\n\nimport { ImageSelect } from 'shared/components';\nimport { Actions, AppChannels } from 'shared/constants';\nimport { BadgeHelper } from 'shared/utils/BadgeHelper';\nimport { ImageValidationSchema } from 'shared/utils/validation/ImageValidationSchema';\n\nexport interface EditClipRequest {\n name: string;\n description: string;\n startTime: number;\n endTime: number;\n thumbnail: Thumbnail;\n status: CurationStatus;\n}\n\nconst ClipValidationSchema = Yup.object().shape<EditClipRequest>({\n name: Yup.string()\n .trim()\n .max(255, () => 'Title is too long')\n .required(() => 'Title is required')\n .default(''),\n\n description: Yup.string()\n .trim()\n .max(16000, () => 'Description is too long')\n .default(''),\n\n startTime: Yup.number()\n .required(),\n\n endTime: Yup.number()\n .required(),\n\n thumbnail: ImageValidationSchema,\n\n status: Yup.mixed<CurationStatus>()\n\n}).noUnknown();\n\nfunction EditClipDetailsForm(): React.ReactElement {\n const formikProps = useFormikContextWrapper<EditClipRequest>();\n\n return (\n <Form>\n <FormField\n label='Name'\n type='text'\n name='name'\n id='name'\n placeholder='Name your clip'\n autoFocus\n value={formikProps.values.name}\n />\n <div className='form-group'>\n <label>Status</label>\n <div>\n <span className={`badge ${BadgeHelper.getStatusBadgeClass(formikProps.values.status)}`}>\n {CurationStatus[formikProps.values.status]}\n </span>\n </div>\n </div>\n <FormField\n label='Description'\n component='textarea'\n name='description'\n id ='description'\n placeholder='Add a meaningful description to your clip'\n value={formikProps.values.description}\n />\n <ImageSelect<EditClipRequest>\n imageType={ImageType.Thumbnails}\n fieldName='thumbnail'\n uploadAppLink={{ application: AppChannels.CLIPS, action: Actions.Clips.UPLOAD_IMAGE }}\n />\n <div className='d-flex justify-content-end'>\n <FormButtons isNew={false} variant='dark' />\n </div>\n </Form>\n );\n}\n\ninterface EditClipDetailsProps {\n clip: Clip;\n saveClip: (data: EditClipRequest, onDone: () => void) => void;\n}\n\nexport function EditClipDetails(props: EditClipDetailsProps): React.ReactElement {\n return (\n <FormWrapper<EditClipRequest>\n initialValues={{\n ...props.clip,\n thumbnail: props.clip.thumbnail || props.clip._parentVideo.thumbnail\n }}\n validationSchema={ClipValidationSchema}\n onSubmit={props.saveClip}\n >\n <EditClipDetailsForm />\n </FormWrapper>\n );\n}\n","import React from 'react';\nimport { Alert } from 'react-bootstrap';\n\nimport { Flight } from 'libs/common/flight';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Clip, CuratorUser } from 'libs/shared/interfaces';\n\nimport { ObjectHeader } from 'shared/components';\nimport { Actions } from 'shared/constants/CuratorActions';\n\nimport { AssemblyLineRequests } from 'apps/assembly-line/flight-requests/AssemblyLineRequests';\nimport { AssemblyLineVideoResponse } from 'apps/assembly-line/interfaces/responses/AssemblyLineVideoResponse';\nimport { EditClipDetails, EditClipRequest } from 'apps/clips/components/edit-clip-details/EditClipDetails';\nimport { EditClipNav } from 'apps/clips/components/edit-clip-nav/EditClipNav';\nimport { ClipRequests } from 'apps/clips/flight-requests/CuratorClipRequests';\nimport { ClipActionsHelper } from 'apps/clips/utils/ClipActionsHelper';\n\ninterface EditClipDetailsViewProps {\n clipId: string;\n}\n\nexport function EditClipDetailsView(props: EditClipDetailsViewProps): JSX.Element {\n const fetchAsync = Flight.useGetFetchAsync();\n const alerts = useAlerts();\n\n const clip = Flight.useBasicFetch<Clip>(ClipRequests.clip(props.clipId));\n const contentPipelineClip = Flight.useBasicFetch<AssemblyLineVideoResponse>(\n AssemblyLineRequests.getAssemblyLineVideo(props.clipId)\n );\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n\n function saveClip(data: EditClipRequest, onDone: () => void): void {\n let req = data;\n\n if (data.thumbnail?.id === clip.data._parentVideo.thumbnail?.id)\n req = ObjectHelper.omit(req, ['thumbnail']);\n\n fetchAsync(ClipRequests.updateClip(props.clipId, req))\n .then(() => alerts.success('Successfully updated clip'))\n .catch(() => alerts.error('Failed to update clip'))\n .finally(onDone);\n }\n\n const dataLoaded = !!clip.data && !!currentUser.data && !!contentPipelineClip.hasCompleted;\n\n return (\n <>\n {!!currentUser.data &&\n <EditClipNav\n clipId={props.clipId}\n activeAction={Actions.Clips.EDIT_CLIP_DETAILS}\n currentUser={currentUser.data}\n />\n }\n {dataLoaded && (\n <>\n {clip.data.status === CurationStatus.Published && (\n <Alert variant='info' className='mt-3 mb-1'>\n This clip is <strong>published</strong> and cannot be edited or deleted.\n You may archive it if you believe it should no longer be in use.\n </Alert>\n )}\n\n {clip.data.status === CurationStatus.Archived && (\n <Alert variant='info' className='mt-3 mb-1'>\n This clip is <strong>archived</strong>. You may publish it again\n from the options menu.\n </Alert>\n )}\n <ObjectHeader\n object={{ name: clip.data.name, status: clip.data.status }}\n actions={ClipActionsHelper.getClipActions(clip.data, contentPipelineClip.data)}\n actionsDropdownClassName='btn btn-outline-dark'\n />\n <EditClipDetails clip={clip.data} saveClip={saveClip} />\n </>\n )}\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Cz-WSyAE.chunk.js","names":[],"sources":["../../../../../src/apps/clips/components/edit-clip-details/EditClipDetails.tsx","../../../../../src/apps/clips/views/edit-clip-details/EditClipDetailsView.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Form } from 'formik';\nimport * as Yup from 'yup';\n\nimport { FormButtons } from 'libs/shared/components/forms/form-buttons/FormButtons';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { FormWrapper, useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { Clip, Thumbnail } from 'libs/shared/interfaces';\n\nimport { ImageSelect } from 'shared/components';\nimport { Actions, AppChannels } from 'shared/constants';\nimport { BadgeHelper } from 'shared/utils/BadgeHelper';\nimport { ImageValidationSchema } from 'shared/utils/validation/ImageValidationSchema';\n\nexport interface EditClipRequest {\n name: string;\n description: string;\n startTime: number;\n endTime: number;\n thumbnail: Thumbnail;\n status: CurationStatus;\n}\n\nconst ClipValidationSchema = Yup.object().shape<EditClipRequest>({\n name: Yup.string()\n .trim()\n .max(255, () => 'Title is too long')\n .required(() => 'Title is required')\n .default(''),\n\n description: Yup.string()\n .trim()\n .max(16000, () => 'Description is too long')\n .default(''),\n\n startTime: Yup.number()\n .required(),\n\n endTime: Yup.number()\n .required(),\n\n thumbnail: ImageValidationSchema,\n\n status: Yup.mixed<CurationStatus>()\n\n}).noUnknown();\n\nfunction EditClipDetailsForm(): React.ReactElement {\n const formikProps = useFormikContextWrapper<EditClipRequest>();\n\n return (\n <Form>\n <FormField\n label='Name'\n type='text'\n name='name'\n id='name'\n placeholder='Name your clip'\n autoFocus\n value={formikProps.values.name}\n />\n <div className='form-group'>\n <label>Status</label>\n <div>\n <span className={`badge ${BadgeHelper.getStatusBadgeClass(formikProps.values.status)}`}>\n {CurationStatus[formikProps.values.status]}\n </span>\n </div>\n </div>\n <FormField\n label='Description'\n component='textarea'\n name='description'\n id ='description'\n placeholder='Add a meaningful description to your clip'\n value={formikProps.values.description}\n />\n <ImageSelect<EditClipRequest>\n imageType={ImageType.Thumbnails}\n fieldName='thumbnail'\n uploadAppLink={{ application: AppChannels.CLIPS, action: Actions.Clips.UPLOAD_IMAGE }}\n />\n <div className='d-flex justify-content-end'>\n <FormButtons isNew={false} variant='dark' />\n </div>\n </Form>\n );\n}\n\ninterface EditClipDetailsProps {\n clip: Clip;\n saveClip: (data: EditClipRequest, onDone: () => void) => void;\n}\n\nexport function EditClipDetails(props: EditClipDetailsProps): React.ReactElement {\n return (\n <FormWrapper<EditClipRequest>\n initialValues={{\n ...props.clip,\n thumbnail: props.clip.thumbnail || props.clip._parentVideo.thumbnail\n }}\n validationSchema={ClipValidationSchema}\n onSubmit={props.saveClip}\n >\n <EditClipDetailsForm />\n </FormWrapper>\n );\n}\n","import React from 'react';\nimport { Alert } from 'react-bootstrap';\n\nimport { Flight } from 'libs/common/flight';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Clip, CuratorUser } from 'libs/shared/interfaces';\n\nimport { ObjectHeader } from 'shared/components';\nimport { Actions } from 'shared/constants/CuratorActions';\n\nimport { AssemblyLineRequests } from 'apps/assembly-line/flight-requests/AssemblyLineRequests';\nimport { AssemblyLineVideoResponse } from 'apps/assembly-line/interfaces/responses/AssemblyLineVideoResponse';\nimport { EditClipDetails, EditClipRequest } from 'apps/clips/components/edit-clip-details/EditClipDetails';\nimport { EditClipNav } from 'apps/clips/components/edit-clip-nav/EditClipNav';\nimport { ClipRequests } from 'apps/clips/flight-requests/CuratorClipRequests';\nimport { ClipActionsHelper } from 'apps/clips/utils/ClipActionsHelper';\n\ninterface EditClipDetailsViewProps {\n clipId: string;\n}\n\nexport function EditClipDetailsView(props: EditClipDetailsViewProps): JSX.Element {\n const fetchAsync = Flight.useGetFetchAsync();\n const alerts = useAlerts();\n\n const clip = Flight.useBasicFetch<Clip>(ClipRequests.clip(props.clipId));\n const contentPipelineClip = Flight.useBasicFetch<AssemblyLineVideoResponse>(\n AssemblyLineRequests.getAssemblyLineVideo(props.clipId)\n );\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n\n function saveClip(data: EditClipRequest, onDone: () => void): void {\n let req = data;\n\n if (data.thumbnail?.id === clip.data._parentVideo.thumbnail?.id)\n req = ObjectHelper.omit(req, ['thumbnail']);\n\n fetchAsync(ClipRequests.updateClip(props.clipId, req))\n .then(() => alerts.success('Successfully updated clip'))\n .catch(() => alerts.error('Failed to update clip'))\n .finally(onDone);\n }\n\n const dataLoaded = !!clip.data && !!currentUser.data && !!contentPipelineClip.hasCompleted;\n\n return (\n <>\n {!!currentUser.data &&\n <EditClipNav\n clipId={props.clipId}\n activeAction={Actions.Clips.EDIT_CLIP_DETAILS}\n currentUser={currentUser.data}\n />\n }\n {dataLoaded && (\n <>\n {clip.data.status === CurationStatus.Published && (\n <Alert variant='info' className='mt-3 mb-1'>\n This clip is <strong>published</strong> and cannot be edited or deleted.\n You may archive it if you believe it should no longer be in use.\n </Alert>\n )}\n\n {clip.data.status === CurationStatus.Archived && (\n <Alert variant='info' className='mt-3 mb-1'>\n This clip is <strong>archived</strong>. You may publish it again\n from the options menu.\n </Alert>\n )}\n <ObjectHeader\n object={{ name: clip.data.name, status: clip.data.status }}\n actions={ClipActionsHelper.getClipActions(clip.data, contentPipelineClip.data)}\n actionsDropdownClassName='btn btn-outline-dark'\n />\n <EditClipDetails clip={clip.data} saveClip={saveClip} />\n </>\n )}\n </>\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{G as r}from"./C7Gmh7eY.chunk.js";import{t as i}from"./D-JsEiDq2.chunk.js";import{s as a,u as o}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as s}from"./Bwpvc7Th2.chunk.js";import{t as c}from"./D0JviwKV2.chunk.js";var l=n(e()),u=t();function d(e){let t=o(),n=s(),[d,f]=l.useState(!1),p=a(r.getReportTemplate(e.id));async function m(){f(!0);try{await t(r.deleteReportTemplate(e.id)),n.success(`Successfully deleted report template: ${p.data?.name}.`)}catch{n.error(`Failed to delete. Please try again.`)}e.closePopup()}return(0,u.jsx)(i,{title:`Delete report template`,closePopup:e.closePopup,showLoadingSpinner:!p.data?.name,backdrop:`static`,children:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsxs)(`p`,{children:[`Are you sure you want to delete `,(0,u.jsx)(`strong`,{children:p.data?.name}),` from your saved reports?`]}),(0,u.jsxs)(c,{children:[(0,u.jsx)(c.Cancel,{onClick:e.closePopup}),(0,u.jsx)(c.Submit,{onClick:m,variant:`danger`,text:`Delete`,showSpinner:d})]})]})})}export{d as AssemblyLineDeleteReportTemplateView};
2
- //# sourceMappingURL=S9cTzcQc2.chunk.js.map
1
+ import{a as e,i as t,ln as n}from"./rp704-Pm.chunk.js";import{G as r}from"./DWHKdmdQ.chunk.js";import{t as i}from"./D-JsEiDq2.chunk.js";import{s as a,u as o}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as s}from"./Bwpvc7Th2.chunk.js";import{t as c}from"./D0JviwKV2.chunk.js";var l=n(e()),u=t();function d(e){let t=o(),n=s(),[d,f]=l.useState(!1),p=a(r.getReportTemplate(e.id));async function m(){f(!0);try{await t(r.deleteReportTemplate(e.id)),n.success(`Successfully deleted report template: ${p.data?.name}.`)}catch{n.error(`Failed to delete. Please try again.`)}e.closePopup()}return(0,u.jsx)(i,{title:`Delete report template`,closePopup:e.closePopup,showLoadingSpinner:!p.data?.name,backdrop:`static`,children:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsxs)(`p`,{children:[`Are you sure you want to delete `,(0,u.jsx)(`strong`,{children:p.data?.name}),` from your saved reports?`]}),(0,u.jsxs)(c,{children:[(0,u.jsx)(c.Cancel,{onClick:e.closePopup}),(0,u.jsx)(c.Submit,{onClick:m,variant:`danger`,text:`Delete`,showSpinner:d})]})]})})}export{d as AssemblyLineDeleteReportTemplateView};
2
+ //# sourceMappingURL=D2aQFJWt2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"S9cTzcQc2.chunk.js","names":[],"sources":["../../../../../src/apps/assembly-line/views/delete-report-template/AssemblyLineDeleteReportTemplateView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nimport { AssemblyLineRequests } from 'apps/assembly-line/flight-requests/AssemblyLineRequests';\nimport { ReportTemplate } from 'apps/assembly-line/interfaces/responses/ReportTemplate';\n\ninterface AssemblyLineDeleteReportTemplateViewProps extends PopupViewProps {\n id: string;\n}\n\nexport function AssemblyLineDeleteReportTemplateView(props: AssemblyLineDeleteReportTemplateViewProps): JSX.Element {\n const fetchAsync = Flight.useGetFetchAsync();\n const alerts = useAlerts();\n \n const [ showSpinner, setShowSpinner ] = React.useState(false);\n \n const template = Flight.useBasicFetch<ReportTemplate>(AssemblyLineRequests.getReportTemplate(props.id));\n \n async function onDelete() {\n setShowSpinner(true);\n try {\n await fetchAsync(AssemblyLineRequests.deleteReportTemplate(props.id));\n alerts.success(`Successfully deleted report template: ${template.data?.name}.`);\n } catch {\n alerts.error(`Failed to delete. Please try again.`);\n }\n props.closePopup();\n }\n \n return (\n <Popup title='Delete report template' closePopup={props.closePopup} showLoadingSpinner={!template.data?.name} backdrop='static'>\n <>\n <p>\n Are you sure you want to delete <strong>{template.data?.name}</strong> from your saved reports?\n </p>\n \n <PopupButtons>\n <PopupButtons.Cancel onClick={props.closePopup} />\n <PopupButtons.Submit\n onClick={onDelete}\n variant='danger'\n text='Delete'\n showSpinner={showSpinner}\n />\n </PopupButtons>\n </>\n </Popup>\n );\n}\n"],"mappings":"wTAgBA,SAAgB,EAAqC,EAA+D,CAClH,IAAM,EAAa,EAAwB,EACrC,EAAS,EAAU,EAEnB,CAAE,EAAa,GAAA,EAAyB,SAAS,EAAK,EAEtD,EAAW,EAAqC,EAAqB,kBAAkB,EAAM,EAAE,CAAC,EAEtG,eAAe,GAAW,CACxB,EAAe,EAAI,EACnB,GAAI,CACF,MAAM,EAAW,EAAqB,qBAAqB,EAAM,EAAE,CAAC,EACpE,EAAO,QAAQ,yCAAyC,EAAS,MAAM,KAAK,EAAE,CAChF,MAAQ,CACN,EAAO,MAAM,qCAAqC,CACpD,CACA,EAAM,WAAW,CACnB,CAEA,OACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAO,MAAM,yBAAyB,WAAY,EAAM,WAAY,mBAAoB,CAAC,EAAS,MAAM,KAAM,SAAS,mBACrH,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAA,CAAC,IAAD,CAAA,SAAA,CAAG,oCAC+B,EAAA,EAAA,IAAA,CAAC,SAAD,CAAA,SAAS,EAAS,MAAM,IAAa,CAAA,EAAC,2BACrE,CAAA,CAAA,GAEH,EAAA,EAAA,KAAA,CAAC,EAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAa,OAAd,CAAqB,QAAS,EAAM,UAAa,CAAA,GACjD,EAAA,EAAA,IAAA,CAAC,EAAa,OAAd,CACE,QAAS,EACT,QAAQ,SACR,KAAK,SACQ,aACd,CAAA,CACW,CAAA,CAAA,CACd,CAAA,CAAA,CACG,CAAA,CAEX"}
1
+ {"version":3,"file":"D2aQFJWt2.chunk.js","names":[],"sources":["../../../../../src/apps/assembly-line/views/delete-report-template/AssemblyLineDeleteReportTemplateView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nimport { AssemblyLineRequests } from 'apps/assembly-line/flight-requests/AssemblyLineRequests';\nimport { ReportTemplate } from 'apps/assembly-line/interfaces/responses/ReportTemplate';\n\ninterface AssemblyLineDeleteReportTemplateViewProps extends PopupViewProps {\n id: string;\n}\n\nexport function AssemblyLineDeleteReportTemplateView(props: AssemblyLineDeleteReportTemplateViewProps): JSX.Element {\n const fetchAsync = Flight.useGetFetchAsync();\n const alerts = useAlerts();\n \n const [ showSpinner, setShowSpinner ] = React.useState(false);\n \n const template = Flight.useBasicFetch<ReportTemplate>(AssemblyLineRequests.getReportTemplate(props.id));\n \n async function onDelete() {\n setShowSpinner(true);\n try {\n await fetchAsync(AssemblyLineRequests.deleteReportTemplate(props.id));\n alerts.success(`Successfully deleted report template: ${template.data?.name}.`);\n } catch {\n alerts.error(`Failed to delete. Please try again.`);\n }\n props.closePopup();\n }\n \n return (\n <Popup title='Delete report template' closePopup={props.closePopup} showLoadingSpinner={!template.data?.name} backdrop='static'>\n <>\n <p>\n Are you sure you want to delete <strong>{template.data?.name}</strong> from your saved reports?\n </p>\n \n <PopupButtons>\n <PopupButtons.Cancel onClick={props.closePopup} />\n <PopupButtons.Submit\n onClick={onDelete}\n variant='danger'\n text='Delete'\n showSpinner={showSpinner}\n />\n </PopupButtons>\n </>\n </Popup>\n );\n}\n"],"mappings":"wTAgBA,SAAgB,EAAqC,EAA+D,CAClH,IAAM,EAAa,EAAwB,EACrC,EAAS,EAAU,EAEnB,CAAE,EAAa,GAAA,EAAyB,SAAS,EAAK,EAEtD,EAAW,EAAqC,EAAqB,kBAAkB,EAAM,EAAE,CAAC,EAEtG,eAAe,GAAW,CACxB,EAAe,EAAI,EACnB,GAAI,CACF,MAAM,EAAW,EAAqB,qBAAqB,EAAM,EAAE,CAAC,EACpE,EAAO,QAAQ,yCAAyC,EAAS,MAAM,KAAK,EAAE,CAChF,MAAQ,CACN,EAAO,MAAM,qCAAqC,CACpD,CACA,EAAM,WAAW,CACnB,CAEA,OACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAO,MAAM,yBAAyB,WAAY,EAAM,WAAY,mBAAoB,CAAC,EAAS,MAAM,KAAM,SAAS,mBACrH,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAA,CAAC,IAAD,CAAA,SAAA,CAAG,oCAC+B,EAAA,EAAA,IAAA,CAAC,SAAD,CAAA,SAAS,EAAS,MAAM,IAAa,CAAA,EAAC,2BACrE,CAAA,CAAA,GAEH,EAAA,EAAA,KAAA,CAAC,EAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAa,OAAd,CAAqB,QAAS,EAAM,UAAa,CAAA,GACjD,EAAA,EAAA,IAAA,CAAC,EAAa,OAAd,CACE,QAAS,EACT,QAAQ,SACR,KAAK,SACQ,aACd,CAAA,CACW,CAAA,CAAA,CACd,CAAA,CAAA,CACG,CAAA,CAEX"}
@@ -1,2 +1,2 @@
1
- import{a as e,i as t,ln as n,t as r}from"./rp704-Pm.chunk.js";import{t as i}from"./UCDGupVs.chunk.js";import{y as a}from"./BhKv6dKl2.chunk.js";import{s as o,u as s}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as c}from"./Bwpvc7Th2.chunk.js";import{t as l}from"./DhW1fXNd.chunk.js";import{t as u}from"./BhWPGAdN2.chunk.js";import{t as d}from"./BbpfuEhR.chunk.js";import{t as f}from"./BcwM0but2.chunk.js";import{t as p}from"./CJnHr1ww2.chunk.js";import{t as m}from"./ogE6FIPU2.chunk.js";import{t as h}from"./D3exV_Ay2.chunk.js";var g=n(e(),1),_={"text/csv":`csv`},v={"text/csv":`text/csv;charset=utf-8;`};function y(){let e=s();async function t(t){let{request:n,mimeType:r=`text/csv`,filename:i}=t,a=`${i}.${_[r]}`,o=v[r];if(typeof n!=`string`){let t=await e(n);p.downloadDataAsFile(t,a,o);return}p.downloadDataAsFile(n,a,o)}return t}var b=t(),x=[{Header:`Name`,accessor:`name`},{Header:`Description`,accessor:`description`},{Header:`Actions`,accessor:`actions`,Cell:({row:e})=>(0,b.jsx)(`div`,{children:(0,b.jsx)(l,{variant:`outline-dark`,onClick:e.original.actions[0].onClick,disabled:e.original.actions[0].loading??!1,showSpinner:e.original.actions[0].loading??!1,spinnerText:`Generating...`,children:e.original.actions[0].label})})}];function S(e){return g.useMemo(()=>[{name:`Produced videos report`,description:`A report that lists all the videos produced by ${e.entity}.`,actions:[{label:`Generate Report`,onClick:()=>e.generateReport(`company`),loading:e.loading.company}]},{name:`Distributed videos report`,description:`A report that lists all the videos distributed by ${e.entity}.`,actions:[{label:`Generate Report`,onClick:()=>e.generateReport(`distributor`),loading:e.loading.distributor}]}],[e.entity,e.loading,e.generateReport])}var C={table:`striped-list no-full-width pb-3`,header:`fw-semibold pb-1`,headerCell:`px-2 py-1`,row:`striped-row rounded`,cell:`d-flex align-items-center py-1 px-2`};function w(e){return(0,b.jsx)(`div`,{className:`mt-3`,children:(0,b.jsx)(d,{data:S({entity:e.contentPartner?.name??`company`,generateReport:e.generateReport,loading:e.loading}),columns:x,theme:C})})}var T={company:`produced-videos-report`,distributor:`distributed-videos-report`};function E(e){let t=o(i.currentUser()),n=o(f.getContentPartner(e.contentPartnerId)),s=c(),l=y(),[d,p]=g.useState({company:!1,distributor:!1}),_=m();function v(e,t){p(n=>({...n,[e]:t}))}let x=g.useCallback(async e=>{let t=n.data?.company?.id;if(!t){s.error(`Company ID not found`);return}let i=r.slugify(`${n.data?.name}-${T[e]}`);v(e,!0);try{await l({request:f.generateVideoListReport(t,e),filename:i}),s.success(`Report generated for ${n.data?.name}`)}catch{s.error(`Failed to generate video list report`)}finally{v(e,!1)}},[n.data,s,l]),S=!!n.data;return(0,b.jsxs)(b.Fragment,{children:[!!t.data&&(0,b.jsx)(h,{contentPartnerId:e.contentPartnerId,activeAction:_.viewReports(e.contentPartnerId).action,currentUser:t.data}),S?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(a,{object:{name:`${n.data?.name} Reports`}}),(0,b.jsx)(w,{loading:d,contentPartner:n.data,generateReport:x})]}):(0,b.jsx)(u,{})]})}export{E as ContentPartnerReportsView};
2
- //# sourceMappingURL=CEsXUxxo2.chunk.js.map
1
+ import{a as e,i as t,ln as n,t as r}from"./rp704-Pm.chunk.js";import{t as i}from"./UCDGupVs.chunk.js";import{y as a}from"./GpDEun8c2.chunk.js";import{s as o,u as s}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as c}from"./Bwpvc7Th2.chunk.js";import{t as l}from"./DhW1fXNd.chunk.js";import{t as u}from"./BhWPGAdN2.chunk.js";import{t as d}from"./BbpfuEhR.chunk.js";import{t as f}from"./BcwM0but2.chunk.js";import{t as p}from"./CJnHr1ww2.chunk.js";import{t as m}from"./ogE6FIPU2.chunk.js";import{t as h}from"./SVXAAhk02.chunk.js";var g=n(e(),1),_={"text/csv":`csv`},v={"text/csv":`text/csv;charset=utf-8;`};function y(){let e=s();async function t(t){let{request:n,mimeType:r=`text/csv`,filename:i}=t,a=`${i}.${_[r]}`,o=v[r];if(typeof n!=`string`){let t=await e(n);p.downloadDataAsFile(t,a,o);return}p.downloadDataAsFile(n,a,o)}return t}var b=t(),x=[{Header:`Name`,accessor:`name`},{Header:`Description`,accessor:`description`},{Header:`Actions`,accessor:`actions`,Cell:({row:e})=>(0,b.jsx)(`div`,{children:(0,b.jsx)(l,{variant:`outline-dark`,onClick:e.original.actions[0].onClick,disabled:e.original.actions[0].loading??!1,showSpinner:e.original.actions[0].loading??!1,spinnerText:`Generating...`,children:e.original.actions[0].label})})}];function S(e){return g.useMemo(()=>[{name:`Produced videos report`,description:`A report that lists all the videos produced by ${e.entity}.`,actions:[{label:`Generate Report`,onClick:()=>e.generateReport(`company`),loading:e.loading.company}]},{name:`Distributed videos report`,description:`A report that lists all the videos distributed by ${e.entity}.`,actions:[{label:`Generate Report`,onClick:()=>e.generateReport(`distributor`),loading:e.loading.distributor}]}],[e.entity,e.loading,e.generateReport])}var C={table:`striped-list no-full-width pb-3`,header:`fw-semibold pb-1`,headerCell:`px-2 py-1`,row:`striped-row rounded`,cell:`d-flex align-items-center py-1 px-2`};function w(e){return(0,b.jsx)(`div`,{className:`mt-3`,children:(0,b.jsx)(d,{data:S({entity:e.contentPartner?.name??`company`,generateReport:e.generateReport,loading:e.loading}),columns:x,theme:C})})}var T={company:`produced-videos-report`,distributor:`distributed-videos-report`};function E(e){let t=o(i.currentUser()),n=o(f.getContentPartner(e.contentPartnerId)),s=c(),l=y(),[d,p]=g.useState({company:!1,distributor:!1}),_=m();function v(e,t){p(n=>({...n,[e]:t}))}let x=g.useCallback(async e=>{let t=n.data?.company?.id;if(!t){s.error(`Company ID not found`);return}let i=r.slugify(`${n.data?.name}-${T[e]}`);v(e,!0);try{await l({request:f.generateVideoListReport(t,e),filename:i}),s.success(`Report generated for ${n.data?.name}`)}catch{s.error(`Failed to generate video list report`)}finally{v(e,!1)}},[n.data,s,l]),S=!!n.data;return(0,b.jsxs)(b.Fragment,{children:[!!t.data&&(0,b.jsx)(h,{contentPartnerId:e.contentPartnerId,activeAction:_.viewReports(e.contentPartnerId).action,currentUser:t.data}),S?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(a,{object:{name:`${n.data?.name} Reports`}}),(0,b.jsx)(w,{loading:d,contentPartner:n.data,generateReport:x})]}):(0,b.jsx)(u,{})]})}export{E as ContentPartnerReportsView};
2
+ //# sourceMappingURL=D2h9W4GA2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CEsXUxxo2.chunk.js","names":[],"sources":["../../../../../../../libs/shared/src/hooks/useDownload.ts","../../../../../src/apps/content-partners/views/content-partner-reports/components/ContentPartnerReportsTable.tsx","../../../../../src/apps/content-partners/views/content-partner-reports/ContentPartnerReportsView.tsx"],"sourcesContent":["import { useGetFetchAsync } from 'libs/common/react/flight';\nimport { Flight } from 'libs/common/react/index';\n\nimport { FileHelper } from '../utils/FileHelper';\n\ntype SupportedMimeType = 'text/csv';\n\nconst MimeTypeExtensions: Record<SupportedMimeType, string> = {\n 'text/csv': 'csv'\n};\n\nconst MimeTypeString: Record<SupportedMimeType, string> = {\n 'text/csv': 'text/csv;charset=utf-8;'\n};\n\ninterface DownloadOptions {\n /**\n * If we provide a string, we assume it is a URL and will be downloaded directly. \n * If we provide a Flight.Request, we will fetch the data and download it as a file.\n */\n request: Flight.Request | string;\n mimeType?: SupportedMimeType;\n filename: string;\n}\n\n/**\n * \n * This hook is used to download files from the server. It can download files from a URL or a Flight.Request.\n * If a URL is provided, it will be downloaded directly. If a Flight.Request is provided, it will fetch the data and download it as a file.\n * \n * @returns A function that can be used to download files.\n */\nexport function useDownload() {\n const fetchAsync = useGetFetchAsync();\n\n async function download(options: DownloadOptions) {\n const { request, mimeType = 'text/csv', filename } = options;\n const filenameWithExtension = `${filename}.${MimeTypeExtensions[mimeType]}`;\n const mimeTypeString = MimeTypeString[mimeType];\n\n if (typeof request !== 'string') {\n const response = await fetchAsync<string>(request);\n FileHelper.downloadDataAsFile(response, filenameWithExtension, mimeTypeString);\n return;\n }\n \n FileHelper.downloadDataAsFile(request, filenameWithExtension, mimeTypeString);\n }\n\n return download;\n}\n","import React from 'react';\n\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Column, Table, TableTheme } from 'libs/shared/components/table/Table';\nimport { PartnerProfile } from 'libs/shared/interfaces';\n\nimport { ChannelsReportType } from 'apps/content-partners/interfaces/ContentPartnerReports';\n\ninterface ReportTableData {\n name: string;\n description: string;\n actions: {\n label: string,\n loading?: boolean,\n onClick: () => void\n }[];\n}\n\nconst columns: Column<ReportTableData>[] = [\n {\n Header: 'Name',\n accessor: 'name'\n },\n {\n Header: 'Description',\n accessor: 'description'\n },\n {\n Header: 'Actions',\n accessor: 'actions',\n Cell: ({ row }) => {\n return (\n <div>\n <SpinnerButton\n variant='outline-dark'\n onClick={row.original.actions[0].onClick}\n disabled={row.original.actions[0].loading ?? false}\n showSpinner={row.original.actions[0].loading ?? false}\n spinnerText='Generating...'\n >\n {row.original.actions[0].label}\n </SpinnerButton>\n </div>\n );\n }\n }\n];\n\ninterface UseTableDataOptions {\n entity: string;\n loading: Record<ChannelsReportType, boolean>;\n generateReport: (type: ChannelsReportType) => Promise<void>;\n}\n\nfunction useChannelsReportTableData(options: UseTableDataOptions): ReportTableData[] {\n return React.useMemo(() => [\n {\n name: 'Produced videos report',\n description: `A report that lists all the videos produced by ${options.entity}.`,\n actions: [\n {\n label: 'Generate Report',\n onClick: () => options.generateReport('company'),\n loading: options.loading.company\n }\n ]\n },\n {\n name: 'Distributed videos report',\n description: `A report that lists all the videos distributed by ${options.entity}.`,\n actions: [\n {\n label: 'Generate Report',\n onClick: () => options.generateReport('distributor'),\n loading: options.loading.distributor\n }\n ]\n }\n ], [ options.entity, options.loading, options.generateReport ]);\n}\n\nconst TABLE_THEME: TableTheme = {\n table: 'striped-list no-full-width pb-3',\n header: 'fw-semibold pb-1',\n headerCell: 'px-2 py-1',\n row: 'striped-row rounded',\n cell: 'd-flex align-items-center py-1 px-2'\n};\n\ninterface ContentPartnerReportsTableProps {\n loading: Record<ChannelsReportType, boolean>;\n contentPartner: PartnerProfile;\n generateReport: (type: ChannelsReportType) => Promise<void>;\n}\n\nexport function ContentPartnerReportsTable(props: ContentPartnerReportsTableProps): JSX.Element {\n const tableData = useChannelsReportTableData({\n entity: props.contentPartner?.name ?? 'company',\n generateReport: props.generateReport,\n loading: props.loading\n });\n \n return (\n <div className='mt-3'>\n <Table\n data={tableData}\n columns={columns}\n theme={TABLE_THEME}\n />\n </div>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { PopupLoadingSpinner } from 'libs/shared/components/popup/PopupLoadingSpinner';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useDownload } from 'libs/shared/hooks/useDownload';\nimport { CurrentUser, PartnerProfile } from 'libs/shared/interfaces';\n\nimport { ObjectHeader } from 'shared/components/object-header/ObjectHeader';\n\nimport { EditContentPartnerNav } from 'apps/content-partners/components/edit-content-partner-nav/EditContentPartnerNav';\nimport { ContentPartnerRequests } from 'apps/content-partners/flight-requests/ContentPartnerRequests';\nimport { getContentPartnerAppLinks } from 'apps/content-partners/utils/getContentPartnerAppLinks';\n\nimport { ChannelsReportType } from '../../interfaces/ContentPartnerReports';\n\nimport { ContentPartnerReportsTable } from './components/ContentPartnerReportsTable';\n\nconst ReportFileNameMap: Record<ChannelsReportType, string> = {\n company: 'produced-videos-report',\n distributor: 'distributed-videos-report'\n};\n\ninterface ContentPartnerReportsViewProps {\n contentPartnerId: string;\n}\n\nexport function ContentPartnerReportsView(props: ContentPartnerReportsViewProps): JSX.Element {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const contentPartner = Flight.useBasicFetch<PartnerProfile>(\n ContentPartnerRequests.getContentPartner(props.contentPartnerId)\n );\n const alert = useAlerts();\n const download = useDownload();\n\n const [ loading, setLoading ] = React.useState<Record<ChannelsReportType, boolean>>({\n company: false,\n distributor: false\n });\n\n const appLinks = getContentPartnerAppLinks();\n\n function setGenerateReportLoading(type: ChannelsReportType, loading: boolean): void {\n setLoading(prev => ({\n ...prev,\n [type]: loading\n }));\n }\n\n const generateVideoListReport = React.useCallback(async (type: ChannelsReportType): Promise<void> => {\n const companyId = contentPartner.data?.company?.id;\n if (!companyId) {\n alert.error('Company ID not found');\n return;\n }\n \n const filename = TextHelper.slugify(`${contentPartner.data?.name}-${ReportFileNameMap[type]}`);\n \n setGenerateReportLoading(type, true);\n try {\n await download({\n request: ContentPartnerRequests.generateVideoListReport(companyId, type),\n filename\n });\n alert.success(`Report generated for ${contentPartner.data?.name}`);\n } catch {\n alert.error('Failed to generate video list report');\n } finally {\n setGenerateReportLoading(type, false);\n }\n }, [ contentPartner.data, alert, download ]);\n\n const loaded = !!contentPartner.data;\n\n return (\n <>\n {!!currentUser.data &&\n <EditContentPartnerNav\n contentPartnerId={props.contentPartnerId}\n activeAction={appLinks.viewReports(props.contentPartnerId).action}\n currentUser={currentUser.data}\n />\n }\n {(() => {\n if (!loaded)\n return <PopupLoadingSpinner />;\n \n return (\n <>\n <ObjectHeader object={{ name: `${contentPartner.data?.name} Reports` }} />\n <ContentPartnerReportsTable\n loading={loading}\n contentPartner={contentPartner.data}\n generateReport={generateVideoListReport}\n />\n </>\n );\n })()}\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"D2h9W4GA2.chunk.js","names":[],"sources":["../../../../../../../libs/shared/src/hooks/useDownload.ts","../../../../../src/apps/content-partners/views/content-partner-reports/components/ContentPartnerReportsTable.tsx","../../../../../src/apps/content-partners/views/content-partner-reports/ContentPartnerReportsView.tsx"],"sourcesContent":["import { useGetFetchAsync } from 'libs/common/react/flight';\nimport { Flight } from 'libs/common/react/index';\n\nimport { FileHelper } from '../utils/FileHelper';\n\ntype SupportedMimeType = 'text/csv';\n\nconst MimeTypeExtensions: Record<SupportedMimeType, string> = {\n 'text/csv': 'csv'\n};\n\nconst MimeTypeString: Record<SupportedMimeType, string> = {\n 'text/csv': 'text/csv;charset=utf-8;'\n};\n\ninterface DownloadOptions {\n /**\n * If we provide a string, we assume it is a URL and will be downloaded directly. \n * If we provide a Flight.Request, we will fetch the data and download it as a file.\n */\n request: Flight.Request | string;\n mimeType?: SupportedMimeType;\n filename: string;\n}\n\n/**\n * \n * This hook is used to download files from the server. It can download files from a URL or a Flight.Request.\n * If a URL is provided, it will be downloaded directly. If a Flight.Request is provided, it will fetch the data and download it as a file.\n * \n * @returns A function that can be used to download files.\n */\nexport function useDownload() {\n const fetchAsync = useGetFetchAsync();\n\n async function download(options: DownloadOptions) {\n const { request, mimeType = 'text/csv', filename } = options;\n const filenameWithExtension = `${filename}.${MimeTypeExtensions[mimeType]}`;\n const mimeTypeString = MimeTypeString[mimeType];\n\n if (typeof request !== 'string') {\n const response = await fetchAsync<string>(request);\n FileHelper.downloadDataAsFile(response, filenameWithExtension, mimeTypeString);\n return;\n }\n \n FileHelper.downloadDataAsFile(request, filenameWithExtension, mimeTypeString);\n }\n\n return download;\n}\n","import React from 'react';\n\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Column, Table, TableTheme } from 'libs/shared/components/table/Table';\nimport { PartnerProfile } from 'libs/shared/interfaces';\n\nimport { ChannelsReportType } from 'apps/content-partners/interfaces/ContentPartnerReports';\n\ninterface ReportTableData {\n name: string;\n description: string;\n actions: {\n label: string,\n loading?: boolean,\n onClick: () => void\n }[];\n}\n\nconst columns: Column<ReportTableData>[] = [\n {\n Header: 'Name',\n accessor: 'name'\n },\n {\n Header: 'Description',\n accessor: 'description'\n },\n {\n Header: 'Actions',\n accessor: 'actions',\n Cell: ({ row }) => {\n return (\n <div>\n <SpinnerButton\n variant='outline-dark'\n onClick={row.original.actions[0].onClick}\n disabled={row.original.actions[0].loading ?? false}\n showSpinner={row.original.actions[0].loading ?? false}\n spinnerText='Generating...'\n >\n {row.original.actions[0].label}\n </SpinnerButton>\n </div>\n );\n }\n }\n];\n\ninterface UseTableDataOptions {\n entity: string;\n loading: Record<ChannelsReportType, boolean>;\n generateReport: (type: ChannelsReportType) => Promise<void>;\n}\n\nfunction useChannelsReportTableData(options: UseTableDataOptions): ReportTableData[] {\n return React.useMemo(() => [\n {\n name: 'Produced videos report',\n description: `A report that lists all the videos produced by ${options.entity}.`,\n actions: [\n {\n label: 'Generate Report',\n onClick: () => options.generateReport('company'),\n loading: options.loading.company\n }\n ]\n },\n {\n name: 'Distributed videos report',\n description: `A report that lists all the videos distributed by ${options.entity}.`,\n actions: [\n {\n label: 'Generate Report',\n onClick: () => options.generateReport('distributor'),\n loading: options.loading.distributor\n }\n ]\n }\n ], [ options.entity, options.loading, options.generateReport ]);\n}\n\nconst TABLE_THEME: TableTheme = {\n table: 'striped-list no-full-width pb-3',\n header: 'fw-semibold pb-1',\n headerCell: 'px-2 py-1',\n row: 'striped-row rounded',\n cell: 'd-flex align-items-center py-1 px-2'\n};\n\ninterface ContentPartnerReportsTableProps {\n loading: Record<ChannelsReportType, boolean>;\n contentPartner: PartnerProfile;\n generateReport: (type: ChannelsReportType) => Promise<void>;\n}\n\nexport function ContentPartnerReportsTable(props: ContentPartnerReportsTableProps): JSX.Element {\n const tableData = useChannelsReportTableData({\n entity: props.contentPartner?.name ?? 'company',\n generateReport: props.generateReport,\n loading: props.loading\n });\n \n return (\n <div className='mt-3'>\n <Table\n data={tableData}\n columns={columns}\n theme={TABLE_THEME}\n />\n </div>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { PopupLoadingSpinner } from 'libs/shared/components/popup/PopupLoadingSpinner';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useDownload } from 'libs/shared/hooks/useDownload';\nimport { CurrentUser, PartnerProfile } from 'libs/shared/interfaces';\n\nimport { ObjectHeader } from 'shared/components/object-header/ObjectHeader';\n\nimport { EditContentPartnerNav } from 'apps/content-partners/components/edit-content-partner-nav/EditContentPartnerNav';\nimport { ContentPartnerRequests } from 'apps/content-partners/flight-requests/ContentPartnerRequests';\nimport { getContentPartnerAppLinks } from 'apps/content-partners/utils/getContentPartnerAppLinks';\n\nimport { ChannelsReportType } from '../../interfaces/ContentPartnerReports';\n\nimport { ContentPartnerReportsTable } from './components/ContentPartnerReportsTable';\n\nconst ReportFileNameMap: Record<ChannelsReportType, string> = {\n company: 'produced-videos-report',\n distributor: 'distributed-videos-report'\n};\n\ninterface ContentPartnerReportsViewProps {\n contentPartnerId: string;\n}\n\nexport function ContentPartnerReportsView(props: ContentPartnerReportsViewProps): JSX.Element {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const contentPartner = Flight.useBasicFetch<PartnerProfile>(\n ContentPartnerRequests.getContentPartner(props.contentPartnerId)\n );\n const alert = useAlerts();\n const download = useDownload();\n\n const [ loading, setLoading ] = React.useState<Record<ChannelsReportType, boolean>>({\n company: false,\n distributor: false\n });\n\n const appLinks = getContentPartnerAppLinks();\n\n function setGenerateReportLoading(type: ChannelsReportType, loading: boolean): void {\n setLoading(prev => ({\n ...prev,\n [type]: loading\n }));\n }\n\n const generateVideoListReport = React.useCallback(async (type: ChannelsReportType): Promise<void> => {\n const companyId = contentPartner.data?.company?.id;\n if (!companyId) {\n alert.error('Company ID not found');\n return;\n }\n \n const filename = TextHelper.slugify(`${contentPartner.data?.name}-${ReportFileNameMap[type]}`);\n \n setGenerateReportLoading(type, true);\n try {\n await download({\n request: ContentPartnerRequests.generateVideoListReport(companyId, type),\n filename\n });\n alert.success(`Report generated for ${contentPartner.data?.name}`);\n } catch {\n alert.error('Failed to generate video list report');\n } finally {\n setGenerateReportLoading(type, false);\n }\n }, [ contentPartner.data, alert, download ]);\n\n const loaded = !!contentPartner.data;\n\n return (\n <>\n {!!currentUser.data &&\n <EditContentPartnerNav\n contentPartnerId={props.contentPartnerId}\n activeAction={appLinks.viewReports(props.contentPartnerId).action}\n currentUser={currentUser.data}\n />\n }\n {(() => {\n if (!loaded)\n return <PopupLoadingSpinner />;\n \n return (\n <>\n <ObjectHeader object={{ name: `${contentPartner.data?.name} Reports` }} />\n <ContentPartnerReportsTable\n loading={loading}\n contentPartner={contentPartner.data}\n generateReport={generateVideoListReport}\n />\n </>\n );\n })()}\n </>\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{t as i}from"./BvMTtGLi.chunk.js";import{t as a}from"./CLCeObem2.chunk.js";import{t as o}from"./C7gaMI1t2.chunk.js";import{g as s}from"./BhKv6dKl2.chunk.js";import{t as c}from"./BMIUSUnG.chunk.js";e();var l=n(a(),1),u=l.object().shape({name:l.string().trim().max(255,`Name is too long`).required(`Name is required`).default(``),description:l.string().trim().max(16e3,`Description is too long`).default(``),cover:o,banner:o,metadata:l.object().shape({playlistId:l.string(),internalDescription:l.string().trim().max(255,`Description is too long`).default(``).nullable()}).default({}).noUnknown()}).noUnknown(),d={getEditPlaylistTabs(e,t){let n=i.PLAYLISTS,a=r.Playlists,o=[{label:`Edit Playlist Details`,appLink:{application:n,action:a.EDIT_PLAYLIST,args:[t]}},{label:`Curation`,appLink:{application:n,action:a.EDIT_PLAYLIST_CURATION,args:[t]}},{label:`Videos`,appLink:{application:n,action:a.EDIT_PLAYLIST_VIDEOS,args:[t]}},{label:`Dashboards`,appLink:{application:n,action:a.EDIT_PLAYLIST_DASHBOARDS,args:[t]}},{label:`Alias`,appLink:{application:n,action:a.EDIT_PLAYLIST_ALIASES,args:[t]}}];return c.hasSubjectsAccess(e)&&o.push({label:`Topics`,appLink:{application:n,action:a.EDIT_PLAYLIST_SUBJECTS,args:[t]}},{label:`Audiences`,appLink:{application:n,action:a.EDIT_PLAYLIST_AUDIENCES,args:[t]}}),o}},f=t(),p=e=>t=>t.appLink.action===e;function m(e){return(0,f.jsx)(`div`,{className:`py-2`,children:(0,f.jsx)(s,{tabs:d.getEditPlaylistTabs(e.currentUser,e.playlistId),isItemActive:p(e.activeAction)})})}export{u as n,m as t};
2
- //# sourceMappingURL=DqCsVhOS.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{t as i}from"./BvMTtGLi.chunk.js";import{t as a}from"./CLCeObem2.chunk.js";import{t as o}from"./C7gaMI1t2.chunk.js";import{g as s}from"./GpDEun8c2.chunk.js";import{t as c}from"./BMIUSUnG.chunk.js";e();var l=n(a(),1),u=l.object().shape({name:l.string().trim().max(255,`Name is too long`).required(`Name is required`).default(``),description:l.string().trim().max(16e3,`Description is too long`).default(``),cover:o,banner:o,metadata:l.object().shape({playlistId:l.string(),internalDescription:l.string().trim().max(255,`Description is too long`).default(``).nullable()}).default({}).noUnknown()}).noUnknown(),d={getEditPlaylistTabs(e,t){let n=i.PLAYLISTS,a=r.Playlists,o=[{label:`Edit Playlist Details`,appLink:{application:n,action:a.EDIT_PLAYLIST,args:[t]}},{label:`Curation`,appLink:{application:n,action:a.EDIT_PLAYLIST_CURATION,args:[t]}},{label:`Videos`,appLink:{application:n,action:a.EDIT_PLAYLIST_VIDEOS,args:[t]}},{label:`Dashboards`,appLink:{application:n,action:a.EDIT_PLAYLIST_DASHBOARDS,args:[t]}},{label:`Alias`,appLink:{application:n,action:a.EDIT_PLAYLIST_ALIASES,args:[t]}}];return c.hasSubjectsAccess(e)&&o.push({label:`Topics`,appLink:{application:n,action:a.EDIT_PLAYLIST_SUBJECTS,args:[t]}},{label:`Audiences`,appLink:{application:n,action:a.EDIT_PLAYLIST_AUDIENCES,args:[t]}}),o}},f=t(),p=e=>t=>t.appLink.action===e;function m(e){return(0,f.jsx)(`div`,{className:`py-2`,children:(0,f.jsx)(s,{tabs:d.getEditPlaylistTabs(e.currentUser,e.playlistId),isItemActive:p(e.activeAction)})})}export{u as n,m as t};
2
+ //# sourceMappingURL=D3NAhMJm.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DqCsVhOS.chunk.js","names":[],"sources":["../../../../../src/apps/playlists/utils/validation/PlaylistValidation.ts","../../../../../src/apps/playlists/utils/PlaylistNavHelper.ts","../../../../../src/apps/playlists/components/edit-playlist-nav/EditPlaylistNav.tsx"],"sourcesContent":["import * as Yup from 'yup';\n\nimport { ImageValidationSchema } from 'shared/utils/validation/ImageValidationSchema';\n\nimport { ClickViewPlaylistMetadata, CreateOrUpdatePlaylistRequest } from 'apps/playlists/interfaces';\n\nexport const PlaylistValidationSchema = Yup.object().shape<CreateOrUpdatePlaylistRequest>({\n name: Yup.string()\n .trim()\n .max(255, 'Name is too long')\n .required('Name is required')\n .default(''),\n\n description: Yup.string()\n .trim()\n .max(16000, 'Description is too long')\n .default(''),\n\n cover: ImageValidationSchema,\n\n banner: ImageValidationSchema,\n\n metadata: Yup.object()\n .shape<ClickViewPlaylistMetadata>({\n playlistId: Yup.string(),\n internalDescription: Yup.string()\n .trim()\n .max(255, 'Description is too long')\n .default('')\n .nullable()\n })\n .default({})\n .noUnknown()\n\n}).noUnknown();\n","import { CuratorUser } from 'libs/shared/interfaces';\nimport { CuratorPermissionsHelper } from 'libs/shared/utils/CuratorPermissionsHelper';\n\nimport { Actions } from 'shared/constants/CuratorActions';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { NavItem } from 'shared/interfaces';\n\nexport const PlaylistNavHelper = {\n getEditPlaylistTabs(currentUser: CuratorUser, playlistId: string): NavItem[] {\n const application = AppChannels.PLAYLISTS;\n const actions = Actions.Playlists;\n\n const tabs: NavItem[] = [\n {\n label: 'Edit Playlist Details',\n appLink: { application, action: actions.EDIT_PLAYLIST, args: [playlistId]}\n },\n {\n label: 'Curation',\n appLink: { application, action: actions.EDIT_PLAYLIST_CURATION, args: [playlistId]}\n },\n {\n label: 'Videos',\n appLink: { application, action: actions.EDIT_PLAYLIST_VIDEOS, args: [playlistId]}\n },\n {\n label: 'Dashboards',\n appLink: { application, action: actions.EDIT_PLAYLIST_DASHBOARDS, args: [playlistId]}\n },\n {\n label: 'Alias',\n appLink: { application, action: actions.EDIT_PLAYLIST_ALIASES, args: [playlistId]}\n }\n ];\n\n const canAccessSubjects = CuratorPermissionsHelper.hasSubjectsAccess(currentUser);\n\n if (canAccessSubjects)\n tabs.push(...[\n {\n label: 'Topics',\n appLink: { application, action: actions.EDIT_PLAYLIST_SUBJECTS, args: [playlistId]}\n },\n {\n label: 'Audiences',\n appLink: { application, action: actions.EDIT_PLAYLIST_AUDIENCES, args: [playlistId]}\n }\n ]);\n\n return tabs;\n }\n};\n","import * as React from 'react';\n\nimport { CuratorUser } from 'libs/shared/interfaces';\n\nimport { Tabs } from 'shared/components';\nimport { NavItem } from 'shared/interfaces';\n\nimport { PlaylistNavHelper } from 'apps/playlists/utils';\n\nconst isItemActive = (activeAction: string) => (item: NavItem) => item.appLink.action === activeAction;\n\ninterface EditPlaylistNavProps {\n playlistId: string;\n activeAction: string;\n currentUser: CuratorUser;\n}\n\nexport function EditPlaylistNav(props: EditPlaylistNavProps): React.ReactElement {\n return (\n <div className='py-2'>\n <Tabs\n tabs={PlaylistNavHelper.getEditPlaylistTabs(props.currentUser, props.playlistId)}\n isItemActive={isItemActive(props.activeAction)}\n />\n </div>\n );\n}\n"],"mappings":"6TAMa,EAAA,EAA+B,OAAO,CAAC,CAAC,MAAqC,CACxF,KAAA,EAAU,OAAO,CAAC,CACf,KAAK,CAAC,CACN,IAAI,IAAK,kBAAkB,CAAC,CAC5B,SAAS,kBAAkB,CAAC,CAC5B,QAAQ,EAAE,EAEb,YAAA,EAAiB,OAAO,CAAC,CACtB,KAAK,CAAC,CACN,IAAI,KAAO,yBAAyB,CAAC,CACrC,QAAQ,EAAE,EAEb,MAAO,EAEP,OAAQ,EAER,SAAA,EAAc,OAAO,CAAC,CACnB,MAAiC,CAChC,WAAA,EAAgB,OAAO,EACvB,oBAAA,EAAyB,OAAO,CAAC,CAC9B,KAAK,CAAC,CACN,IAAI,IAAK,yBAAyB,CAAC,CACnC,QAAQ,EAAE,CAAC,CACX,SAAS,CACd,CAAC,CAAC,CACD,QAAQ,CAAC,CAAC,CAAC,CACX,UAAU,CAEf,CAAC,CAAC,CAAC,UAAU,EC3BA,EAAoB,CAC/B,oBAAoB,EAA0B,EAA+B,CAC3E,IAAM,EAAc,EAAY,UAC1B,EAAU,EAAQ,UAElB,EAAkB,CACtB,CACE,MAAO,wBACP,QAAS,CAAE,cAAa,OAAQ,EAAQ,cAAe,KAAM,CAAC,CAAU,CAAC,CAC3E,EACA,CACE,MAAO,WACP,QAAS,CAAE,cAAa,OAAQ,EAAQ,uBAAwB,KAAM,CAAC,CAAU,CAAC,CACpF,EACA,CACE,MAAO,SACP,QAAS,CAAE,cAAa,OAAQ,EAAQ,qBAAsB,KAAM,CAAC,CAAU,CAAC,CAClF,EACA,CACE,MAAO,aACP,QAAS,CAAE,cAAa,OAAQ,EAAQ,yBAA0B,KAAM,CAAC,CAAU,CAAC,CACtF,EACA,CACE,MAAO,QACP,QAAS,CAAE,cAAa,OAAQ,EAAQ,sBAAuB,KAAM,CAAC,CAAU,CAAC,CACnF,CACF,EAgBA,OAd0B,EAAyB,kBAAkB,CAEjE,GACF,EAAK,KACH,CACE,MAAO,SACP,QAAS,CAAE,cAAa,OAAQ,EAAQ,uBAAwB,KAAM,CAAC,CAAU,CAAC,CACpF,EACA,CACE,MAAO,YACP,QAAS,CAAE,cAAa,OAAQ,EAAQ,wBAAyB,KAAM,CAAC,CAAU,CAAC,CACrF,CACD,EAEI,CACT,CACF,QC1CM,EAAgB,GAA0B,GAAkB,EAAK,QAAQ,SAAW,EAQ1F,SAAgB,EAAgB,EAAiD,CAC/E,OACE,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,iBACb,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,KAAM,EAAkB,oBAAoB,EAAM,YAAa,EAAM,UAAU,EAC/E,aAAc,EAAa,EAAM,YAAY,CAC9C,CAAA,CACE,CAAA,CAET"}
1
+ {"version":3,"file":"D3NAhMJm.chunk.js","names":[],"sources":["../../../../../src/apps/playlists/utils/validation/PlaylistValidation.ts","../../../../../src/apps/playlists/utils/PlaylistNavHelper.ts","../../../../../src/apps/playlists/components/edit-playlist-nav/EditPlaylistNav.tsx"],"sourcesContent":["import * as Yup from 'yup';\n\nimport { ImageValidationSchema } from 'shared/utils/validation/ImageValidationSchema';\n\nimport { ClickViewPlaylistMetadata, CreateOrUpdatePlaylistRequest } from 'apps/playlists/interfaces';\n\nexport const PlaylistValidationSchema = Yup.object().shape<CreateOrUpdatePlaylistRequest>({\n name: Yup.string()\n .trim()\n .max(255, 'Name is too long')\n .required('Name is required')\n .default(''),\n\n description: Yup.string()\n .trim()\n .max(16000, 'Description is too long')\n .default(''),\n\n cover: ImageValidationSchema,\n\n banner: ImageValidationSchema,\n\n metadata: Yup.object()\n .shape<ClickViewPlaylistMetadata>({\n playlistId: Yup.string(),\n internalDescription: Yup.string()\n .trim()\n .max(255, 'Description is too long')\n .default('')\n .nullable()\n })\n .default({})\n .noUnknown()\n\n}).noUnknown();\n","import { CuratorUser } from 'libs/shared/interfaces';\nimport { CuratorPermissionsHelper } from 'libs/shared/utils/CuratorPermissionsHelper';\n\nimport { Actions } from 'shared/constants/CuratorActions';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { NavItem } from 'shared/interfaces';\n\nexport const PlaylistNavHelper = {\n getEditPlaylistTabs(currentUser: CuratorUser, playlistId: string): NavItem[] {\n const application = AppChannels.PLAYLISTS;\n const actions = Actions.Playlists;\n\n const tabs: NavItem[] = [\n {\n label: 'Edit Playlist Details',\n appLink: { application, action: actions.EDIT_PLAYLIST, args: [playlistId]}\n },\n {\n label: 'Curation',\n appLink: { application, action: actions.EDIT_PLAYLIST_CURATION, args: [playlistId]}\n },\n {\n label: 'Videos',\n appLink: { application, action: actions.EDIT_PLAYLIST_VIDEOS, args: [playlistId]}\n },\n {\n label: 'Dashboards',\n appLink: { application, action: actions.EDIT_PLAYLIST_DASHBOARDS, args: [playlistId]}\n },\n {\n label: 'Alias',\n appLink: { application, action: actions.EDIT_PLAYLIST_ALIASES, args: [playlistId]}\n }\n ];\n\n const canAccessSubjects = CuratorPermissionsHelper.hasSubjectsAccess(currentUser);\n\n if (canAccessSubjects)\n tabs.push(...[\n {\n label: 'Topics',\n appLink: { application, action: actions.EDIT_PLAYLIST_SUBJECTS, args: [playlistId]}\n },\n {\n label: 'Audiences',\n appLink: { application, action: actions.EDIT_PLAYLIST_AUDIENCES, args: [playlistId]}\n }\n ]);\n\n return tabs;\n }\n};\n","import * as React from 'react';\n\nimport { CuratorUser } from 'libs/shared/interfaces';\n\nimport { Tabs } from 'shared/components';\nimport { NavItem } from 'shared/interfaces';\n\nimport { PlaylistNavHelper } from 'apps/playlists/utils';\n\nconst isItemActive = (activeAction: string) => (item: NavItem) => item.appLink.action === activeAction;\n\ninterface EditPlaylistNavProps {\n playlistId: string;\n activeAction: string;\n currentUser: CuratorUser;\n}\n\nexport function EditPlaylistNav(props: EditPlaylistNavProps): React.ReactElement {\n return (\n <div className='py-2'>\n <Tabs\n tabs={PlaylistNavHelper.getEditPlaylistTabs(props.currentUser, props.playlistId)}\n isItemActive={isItemActive(props.activeAction)}\n />\n </div>\n );\n}\n"],"mappings":"6TAMa,EAAA,EAA+B,OAAO,CAAC,CAAC,MAAqC,CACxF,KAAA,EAAU,OAAO,CAAC,CACf,KAAK,CAAC,CACN,IAAI,IAAK,kBAAkB,CAAC,CAC5B,SAAS,kBAAkB,CAAC,CAC5B,QAAQ,EAAE,EAEb,YAAA,EAAiB,OAAO,CAAC,CACtB,KAAK,CAAC,CACN,IAAI,KAAO,yBAAyB,CAAC,CACrC,QAAQ,EAAE,EAEb,MAAO,EAEP,OAAQ,EAER,SAAA,EAAc,OAAO,CAAC,CACnB,MAAiC,CAChC,WAAA,EAAgB,OAAO,EACvB,oBAAA,EAAyB,OAAO,CAAC,CAC9B,KAAK,CAAC,CACN,IAAI,IAAK,yBAAyB,CAAC,CACnC,QAAQ,EAAE,CAAC,CACX,SAAS,CACd,CAAC,CAAC,CACD,QAAQ,CAAC,CAAC,CAAC,CACX,UAAU,CAEf,CAAC,CAAC,CAAC,UAAU,EC3BA,EAAoB,CAC/B,oBAAoB,EAA0B,EAA+B,CAC3E,IAAM,EAAc,EAAY,UAC1B,EAAU,EAAQ,UAElB,EAAkB,CACtB,CACE,MAAO,wBACP,QAAS,CAAE,cAAa,OAAQ,EAAQ,cAAe,KAAM,CAAC,CAAU,CAAC,CAC3E,EACA,CACE,MAAO,WACP,QAAS,CAAE,cAAa,OAAQ,EAAQ,uBAAwB,KAAM,CAAC,CAAU,CAAC,CACpF,EACA,CACE,MAAO,SACP,QAAS,CAAE,cAAa,OAAQ,EAAQ,qBAAsB,KAAM,CAAC,CAAU,CAAC,CAClF,EACA,CACE,MAAO,aACP,QAAS,CAAE,cAAa,OAAQ,EAAQ,yBAA0B,KAAM,CAAC,CAAU,CAAC,CACtF,EACA,CACE,MAAO,QACP,QAAS,CAAE,cAAa,OAAQ,EAAQ,sBAAuB,KAAM,CAAC,CAAU,CAAC,CACnF,CACF,EAgBA,OAd0B,EAAyB,kBAAkB,CAEjE,GACF,EAAK,KACH,CACE,MAAO,SACP,QAAS,CAAE,cAAa,OAAQ,EAAQ,uBAAwB,KAAM,CAAC,CAAU,CAAC,CACpF,EACA,CACE,MAAO,YACP,QAAS,CAAE,cAAa,OAAQ,EAAQ,wBAAyB,KAAM,CAAC,CAAU,CAAC,CACrF,CACD,EAEI,CACT,CACF,QC1CM,EAAgB,GAA0B,GAAkB,EAAK,QAAQ,SAAW,EAQ1F,SAAgB,EAAgB,EAAiD,CAC/E,OACE,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,iBACb,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,KAAM,EAAkB,oBAAoB,EAAM,YAAa,EAAM,UAAU,EAC/E,aAAc,EAAa,EAAM,YAAY,CAC9C,CAAA,CACE,CAAA,CAET"}
@@ -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"./UCDGupVs.chunk.js";import{G as i,I as a}from"./C7Gmh7eY.chunk.js";import{t as o}from"./CLCeObem2.chunk.js";import{t as s}from"./D-JsEiDq2.chunk.js";import{s as c,u as l}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as u}from"./Bwpvc7Th2.chunk.js";import{n as d,r as f}from"./BRcHS92O.chunk.js";import{t as p}from"./CyS2oSuJ.chunk.js";import{i as m}from"./DA0I3jYA.chunk.js";import{t as h}from"./dKyhMawf.chunk.js";import{t as g}from"./D0JviwKV2.chunk.js";import{n as _}from"./C4Ey4nzb2.chunk.js";var v=n(e()),y=n(o()),b=y.object().shape({feedback:y.string().max(500,`Feedback is too long`).required(`Feedback is required`).default(``)}),x=t();function S(e){let[t,n]=v.useState(!1),o=c(r.currentUser()),y=a(e.id),S=u(),C=l();async function w(t){if(n(!0),!o.data.id)return;let r=[C(i.updateVideoStageWithFeedback(e.id,`review_thumbnail`,t,o.data.id)),C(i.updateVideoStage(e.id,`review_thumbnail`,`curated_thumbnail`)),C(i.updateFlags(y.data,`hasCuratedThumbnail`,!1)),C(i.updateReviewer([y.data],y.data.thumbnailReviewers.map(e=>({reviewerId:e.reviewer.id,approved:!1}))))];Promise.all(r).then(()=>{S.success(`Successfully moved <strong>${y.data.name}</strong> back to the curated thumbnail stage.`),e.closePopup()}).catch(()=>{S.error(`Something went wrong while moving <strong>${y.data.name}</strong>. Please try again.`),e.closePopup()})}return(0,x.jsx)(s,{title:`Give feedback`,closePopup:e.closePopup,showLoadingSpinner:!y.data,children:!!y.data&&(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)(`p`,{children:[`Leave some suggestions on how to improve the thumbnail for `,(0,x.jsx)(`strong`,{children:y.data.name}),`. This video will be moved back to the Curated Thumbnails stage.`]}),(0,x.jsx)(`div`,{className:`pb-2 img-padding position-relative mb-2`,children:(0,x.jsx)(p,{data:y.data.thumbnail?.url,imageType:f.Thumbnails,imageOptions:{size:d.Medium}})}),(0,x.jsx)(h,{initialValues:{feedback:``},onSubmit:null,validationSchema:b,children:n=>(0,x.jsxs)(m,{children:[(0,x.jsx)(_,{name:`feedback`,id:`feedback`,as:`textarea`,className:`form-control`,rows:3,placeholder:`Leave a comment here...`}),(0,x.jsxs)(g,{children:[(0,x.jsx)(g.Cancel,{onClick:e.closePopup}),(0,x.jsx)(g.Submit,{showSpinner:t,onClick:()=>w(n.values.feedback),disabled:!n.isValid,type:`button`,variant:`dark`,text:`Submit`})]})]})})]})})}export{S as AssemblyLineGiveFeedbackView};
2
- //# sourceMappingURL=DpM1KgHy.chunk.js.map
1
+ import{a as e,i as t,ln as n}from"./rp704-Pm.chunk.js";import{t as r}from"./UCDGupVs.chunk.js";import{G as i,I as a}from"./DWHKdmdQ.chunk.js";import{t as o}from"./CLCeObem2.chunk.js";import{t as s}from"./D-JsEiDq2.chunk.js";import{s as c,u as l}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as u}from"./Bwpvc7Th2.chunk.js";import{n as d,r as f}from"./BRcHS92O.chunk.js";import{t as p}from"./CyS2oSuJ.chunk.js";import{i as m}from"./DA0I3jYA.chunk.js";import{t as h}from"./dKyhMawf.chunk.js";import{t as g}from"./D0JviwKV2.chunk.js";import{n as _}from"./C4Ey4nzb2.chunk.js";var v=n(e()),y=n(o()),b=y.object().shape({feedback:y.string().max(500,`Feedback is too long`).required(`Feedback is required`).default(``)}),x=t();function S(e){let[t,n]=v.useState(!1),o=c(r.currentUser()),y=a(e.id),S=u(),C=l();async function w(t){if(n(!0),!o.data.id)return;let r=[C(i.updateVideoStageWithFeedback(e.id,`review_thumbnail`,t,o.data.id)),C(i.updateVideoStage(e.id,`review_thumbnail`,`curated_thumbnail`)),C(i.updateFlags(y.data,`hasCuratedThumbnail`,!1)),C(i.updateReviewer([y.data],y.data.thumbnailReviewers.map(e=>({reviewerId:e.reviewer.id,approved:!1}))))];Promise.all(r).then(()=>{S.success(`Successfully moved <strong>${y.data.name}</strong> back to the curated thumbnail stage.`),e.closePopup()}).catch(()=>{S.error(`Something went wrong while moving <strong>${y.data.name}</strong>. Please try again.`),e.closePopup()})}return(0,x.jsx)(s,{title:`Give feedback`,closePopup:e.closePopup,showLoadingSpinner:!y.data,children:!!y.data&&(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)(`p`,{children:[`Leave some suggestions on how to improve the thumbnail for `,(0,x.jsx)(`strong`,{children:y.data.name}),`. This video will be moved back to the Curated Thumbnails stage.`]}),(0,x.jsx)(`div`,{className:`pb-2 img-padding position-relative mb-2`,children:(0,x.jsx)(p,{data:y.data.thumbnail?.url,imageType:f.Thumbnails,imageOptions:{size:d.Medium}})}),(0,x.jsx)(h,{initialValues:{feedback:``},onSubmit:null,validationSchema:b,children:n=>(0,x.jsxs)(m,{children:[(0,x.jsx)(_,{name:`feedback`,id:`feedback`,as:`textarea`,className:`form-control`,rows:3,placeholder:`Leave a comment here...`}),(0,x.jsxs)(g,{children:[(0,x.jsx)(g.Cancel,{onClick:e.closePopup}),(0,x.jsx)(g.Submit,{showSpinner:t,onClick:()=>w(n.values.feedback),disabled:!n.isValid,type:`button`,variant:`dark`,text:`Submit`})]})]})})]})})}export{S as AssemblyLineGiveFeedbackView};
2
+ //# sourceMappingURL=D3aWaqBW.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DpM1KgHy.chunk.js","names":[],"sources":["../../../../../src/apps/assembly-line/validation/ThumbnailFeedbackSchema.ts","../../../../../src/apps/assembly-line/views/give-feedback/AssemblyLineGiveFeedback.tsx"],"sourcesContent":["import * as Yup from 'yup';\n\nexport const ThumbnailFeedbackSchema = Yup.object().shape({\n feedback: Yup.string().max(500, 'Feedback is too long').required('Feedback is required').default('')\n});\n","import React from 'react';\nimport { Form } from 'formik';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { CurrentUser, PopupViewProps } from 'libs/shared/interfaces';\n\nimport { AssemblyLineRequests } from 'apps/assembly-line/flight-requests/AssemblyLineRequests';\nimport { useFetchAssemblyLineMedia } from 'apps/assembly-line/hooks/useFetchAssemblyLineMedia';\nimport { ThumbnailFeedbackSchema } from 'apps/assembly-line/validation/ThumbnailFeedbackSchema';\n\ninterface AssemblyLineGiveFeedbackViewProps extends PopupViewProps {\n id: string;\n}\n\ninterface CommentFormData {\n feedback: string;\n}\n\nexport function AssemblyLineGiveFeedbackView(props: AssemblyLineGiveFeedbackViewProps): JSX.Element {\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = useFetchAssemblyLineMedia(props.id);\n\n const alerts = useAlerts();\n const fetchAsync = Flight.useGetFetchAsync();\n\n async function onSubmit(feedback: string): Promise<void> {\n setShowSpinner(true);\n if (!currentUser.data.id) {\n return;\n }\n const promises = [\n fetchAsync(AssemblyLineRequests.updateVideoStageWithFeedback(props.id, 'review_thumbnail', feedback, currentUser.data.id)),\n fetchAsync(AssemblyLineRequests.updateVideoStage(props.id, 'review_thumbnail', 'curated_thumbnail')),\n fetchAsync(AssemblyLineRequests.updateFlags(video.data, 'hasCuratedThumbnail', false)),\n fetchAsync(AssemblyLineRequests.updateReviewer(\n [video.data],\n video.data.thumbnailReviewers.map(r => ({ reviewerId: r.reviewer.id, approved: false }))\n ))\n ];\n\n Promise.all(promises)\n .then(() => {\n alerts.success(`Successfully moved <strong>${video.data.name}</strong> back to the curated thumbnail stage.`);\n props.closePopup();\n }).catch(() => {\n alerts.error(`Something went wrong while moving <strong>${video.data.name}</strong>. Please try again.`);\n props.closePopup();\n });\n }\n\n return (\n <Popup title='Give feedback' closePopup={props.closePopup} showLoadingSpinner={!video.data}>\n \n {!!video.data && (\n <>\n <p>\n Leave some suggestions on how to improve the thumbnail for <strong>{video.data.name}</strong>.\n This video will be moved back to the Curated Thumbnails stage.\n </p>\n <div className='pb-2 img-padding position-relative mb-2'>\n <BaseImage\n data={video.data.thumbnail?.url}\n imageType={ImageType.Thumbnails}\n imageOptions={{ size: ImageSize.Medium }}\n />\n </div>\n <FormWrapper<CommentFormData>\n initialValues={{ feedback: '' }}\n onSubmit={null}\n validationSchema={ThumbnailFeedbackSchema}\n >\n {formikProps => {\n return (\n <Form>\n <FormField\n name='feedback'\n id='feedback'\n as='textarea'\n className='form-control'\n rows={3}\n placeholder='Leave a comment here...'\n />\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.closePopup} />\n <PopupButtons.Submit\n showSpinner={showSpinner}\n onClick={() => onSubmit(formikProps.values.feedback)}\n disabled={!formikProps.isValid}\n type='button'\n variant='dark'\n text='Submit'\n />\n </PopupButtons>\n </Form>\n );\n }}\n \n </FormWrapper>\n </>\n )}\n \n </Popup>\n );\n}\n"],"mappings":"mmBAEa,EAAA,EAA8B,OAAO,CAAC,CAAC,MAAM,CACxD,SAAA,EAAc,OAAO,CAAC,CAAC,IAAI,IAAK,sBAAsB,CAAC,CAAC,SAAS,sBAAsB,CAAC,CAAC,QAAQ,EAAE,CACrG,CAAC,QCuBD,SAAgB,EAA6B,EAAuD,CAClG,GAAM,CAAE,EAAa,GAAA,EAAyB,SAAS,EAAK,EAEtD,EAAc,EAAkC,EAAa,YAAY,CAAC,EAC1E,EAAQ,EAA0B,EAAM,EAAE,EAE1C,EAAS,EAAU,EACnB,EAAa,EAAwB,EAE3C,eAAe,EAAS,EAAiC,CAEvD,GADA,EAAe,EAAI,EACf,CAAC,EAAY,KAAK,GACpB,OAEF,IAAM,EAAW,CACf,EAAW,EAAqB,6BAA6B,EAAM,GAAI,mBAAoB,EAAU,EAAY,KAAK,EAAE,CAAC,EACzH,EAAW,EAAqB,iBAAiB,EAAM,GAAI,mBAAoB,mBAAmB,CAAC,EACnG,EAAW,EAAqB,YAAY,EAAM,KAAM,sBAAuB,EAAK,CAAC,EACrF,EAAW,EAAqB,eAC9B,CAAC,EAAM,IAAI,EACX,EAAM,KAAK,mBAAmB,IAAI,IAAM,CAAE,WAAY,EAAE,SAAS,GAAI,SAAU,EAAM,EAAE,CACzF,CAAC,CACH,EAEA,QAAQ,IAAI,CAAQ,CAAC,CAClB,SAAW,CACV,EAAO,QAAQ,8BAA8B,EAAM,KAAK,KAAK,+CAA+C,EAC5G,EAAM,WAAW,CACnB,CAAC,CAAC,CAAC,UAAY,CACb,EAAO,MAAM,6CAA6C,EAAM,KAAK,KAAK,6BAA6B,EACvG,EAAM,WAAW,CACnB,CAAC,CACL,CAEA,OACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAO,MAAM,gBAAgB,WAAY,EAAM,WAAY,mBAAoB,CAAC,EAAM,cAEnF,CAAC,CAAC,EAAM,OACP,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAA,CAAC,IAAD,CAAA,SAAA,CAAG,+DAC0D,EAAA,EAAA,IAAA,CAAC,SAAD,CAAA,SAAS,EAAM,KAAK,IAAa,CAAA,EAAC,kEAE5F,CAAA,CAAA,GACH,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,oDACb,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,KAAM,EAAM,KAAK,WAAW,IAC5B,UAAW,EAAU,WACrB,aAAc,CAAE,KAAM,EAAU,MAAO,CACxC,CAAA,CACE,CAAA,GACL,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,cAAe,CAAE,SAAU,EAAG,EAC9B,SAAU,KACV,iBAAkB,WAEjB,IAEG,EAAA,EAAA,KAAA,CAAC,EAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,KAAK,WACL,GAAG,WACH,GAAG,WACH,UAAU,eACV,KAAM,EACN,YAAY,yBACb,CAAA,GACD,EAAA,EAAA,KAAA,CAAC,EAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAa,OAAd,CAAqB,QAAS,EAAM,UAAa,CAAA,GACjD,EAAA,EAAA,IAAA,CAAC,EAAa,OAAd,CACe,cACb,YAAe,EAAS,EAAY,OAAO,QAAQ,EACnD,SAAU,CAAC,EAAY,QACvB,KAAK,SACL,QAAQ,OACR,KAAK,QACN,CAAA,CACW,CAAA,CAAA,CACV,CAAA,CAAA,CAIC,CAAA,CACb,CAAA,CAAA,CAGC,CAAA,CAEX"}
1
+ {"version":3,"file":"D3aWaqBW.chunk.js","names":[],"sources":["../../../../../src/apps/assembly-line/validation/ThumbnailFeedbackSchema.ts","../../../../../src/apps/assembly-line/views/give-feedback/AssemblyLineGiveFeedback.tsx"],"sourcesContent":["import * as Yup from 'yup';\n\nexport const ThumbnailFeedbackSchema = Yup.object().shape({\n feedback: Yup.string().max(500, 'Feedback is too long').required('Feedback is required').default('')\n});\n","import React from 'react';\nimport { Form } from 'formik';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { CurrentUser, PopupViewProps } from 'libs/shared/interfaces';\n\nimport { AssemblyLineRequests } from 'apps/assembly-line/flight-requests/AssemblyLineRequests';\nimport { useFetchAssemblyLineMedia } from 'apps/assembly-line/hooks/useFetchAssemblyLineMedia';\nimport { ThumbnailFeedbackSchema } from 'apps/assembly-line/validation/ThumbnailFeedbackSchema';\n\ninterface AssemblyLineGiveFeedbackViewProps extends PopupViewProps {\n id: string;\n}\n\ninterface CommentFormData {\n feedback: string;\n}\n\nexport function AssemblyLineGiveFeedbackView(props: AssemblyLineGiveFeedbackViewProps): JSX.Element {\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = useFetchAssemblyLineMedia(props.id);\n\n const alerts = useAlerts();\n const fetchAsync = Flight.useGetFetchAsync();\n\n async function onSubmit(feedback: string): Promise<void> {\n setShowSpinner(true);\n if (!currentUser.data.id) {\n return;\n }\n const promises = [\n fetchAsync(AssemblyLineRequests.updateVideoStageWithFeedback(props.id, 'review_thumbnail', feedback, currentUser.data.id)),\n fetchAsync(AssemblyLineRequests.updateVideoStage(props.id, 'review_thumbnail', 'curated_thumbnail')),\n fetchAsync(AssemblyLineRequests.updateFlags(video.data, 'hasCuratedThumbnail', false)),\n fetchAsync(AssemblyLineRequests.updateReviewer(\n [video.data],\n video.data.thumbnailReviewers.map(r => ({ reviewerId: r.reviewer.id, approved: false }))\n ))\n ];\n\n Promise.all(promises)\n .then(() => {\n alerts.success(`Successfully moved <strong>${video.data.name}</strong> back to the curated thumbnail stage.`);\n props.closePopup();\n }).catch(() => {\n alerts.error(`Something went wrong while moving <strong>${video.data.name}</strong>. Please try again.`);\n props.closePopup();\n });\n }\n\n return (\n <Popup title='Give feedback' closePopup={props.closePopup} showLoadingSpinner={!video.data}>\n \n {!!video.data && (\n <>\n <p>\n Leave some suggestions on how to improve the thumbnail for <strong>{video.data.name}</strong>.\n This video will be moved back to the Curated Thumbnails stage.\n </p>\n <div className='pb-2 img-padding position-relative mb-2'>\n <BaseImage\n data={video.data.thumbnail?.url}\n imageType={ImageType.Thumbnails}\n imageOptions={{ size: ImageSize.Medium }}\n />\n </div>\n <FormWrapper<CommentFormData>\n initialValues={{ feedback: '' }}\n onSubmit={null}\n validationSchema={ThumbnailFeedbackSchema}\n >\n {formikProps => {\n return (\n <Form>\n <FormField\n name='feedback'\n id='feedback'\n as='textarea'\n className='form-control'\n rows={3}\n placeholder='Leave a comment here...'\n />\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.closePopup} />\n <PopupButtons.Submit\n showSpinner={showSpinner}\n onClick={() => onSubmit(formikProps.values.feedback)}\n disabled={!formikProps.isValid}\n type='button'\n variant='dark'\n text='Submit'\n />\n </PopupButtons>\n </Form>\n );\n }}\n \n </FormWrapper>\n </>\n )}\n \n </Popup>\n );\n}\n"],"mappings":"mmBAEa,EAAA,EAA8B,OAAO,CAAC,CAAC,MAAM,CACxD,SAAA,EAAc,OAAO,CAAC,CAAC,IAAI,IAAK,sBAAsB,CAAC,CAAC,SAAS,sBAAsB,CAAC,CAAC,QAAQ,EAAE,CACrG,CAAC,QCuBD,SAAgB,EAA6B,EAAuD,CAClG,GAAM,CAAE,EAAa,GAAA,EAAyB,SAAS,EAAK,EAEtD,EAAc,EAAkC,EAAa,YAAY,CAAC,EAC1E,EAAQ,EAA0B,EAAM,EAAE,EAE1C,EAAS,EAAU,EACnB,EAAa,EAAwB,EAE3C,eAAe,EAAS,EAAiC,CAEvD,GADA,EAAe,EAAI,EACf,CAAC,EAAY,KAAK,GACpB,OAEF,IAAM,EAAW,CACf,EAAW,EAAqB,6BAA6B,EAAM,GAAI,mBAAoB,EAAU,EAAY,KAAK,EAAE,CAAC,EACzH,EAAW,EAAqB,iBAAiB,EAAM,GAAI,mBAAoB,mBAAmB,CAAC,EACnG,EAAW,EAAqB,YAAY,EAAM,KAAM,sBAAuB,EAAK,CAAC,EACrF,EAAW,EAAqB,eAC9B,CAAC,EAAM,IAAI,EACX,EAAM,KAAK,mBAAmB,IAAI,IAAM,CAAE,WAAY,EAAE,SAAS,GAAI,SAAU,EAAM,EAAE,CACzF,CAAC,CACH,EAEA,QAAQ,IAAI,CAAQ,CAAC,CAClB,SAAW,CACV,EAAO,QAAQ,8BAA8B,EAAM,KAAK,KAAK,+CAA+C,EAC5G,EAAM,WAAW,CACnB,CAAC,CAAC,CAAC,UAAY,CACb,EAAO,MAAM,6CAA6C,EAAM,KAAK,KAAK,6BAA6B,EACvG,EAAM,WAAW,CACnB,CAAC,CACL,CAEA,OACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAO,MAAM,gBAAgB,WAAY,EAAM,WAAY,mBAAoB,CAAC,EAAM,cAEnF,CAAC,CAAC,EAAM,OACP,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAA,CAAC,IAAD,CAAA,SAAA,CAAG,+DAC0D,EAAA,EAAA,IAAA,CAAC,SAAD,CAAA,SAAS,EAAM,KAAK,IAAa,CAAA,EAAC,kEAE5F,CAAA,CAAA,GACH,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,oDACb,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,KAAM,EAAM,KAAK,WAAW,IAC5B,UAAW,EAAU,WACrB,aAAc,CAAE,KAAM,EAAU,MAAO,CACxC,CAAA,CACE,CAAA,GACL,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,cAAe,CAAE,SAAU,EAAG,EAC9B,SAAU,KACV,iBAAkB,WAEjB,IAEG,EAAA,EAAA,KAAA,CAAC,EAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,KAAK,WACL,GAAG,WACH,GAAG,WACH,UAAU,eACV,KAAM,EACN,YAAY,yBACb,CAAA,GACD,EAAA,EAAA,KAAA,CAAC,EAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAa,OAAd,CAAqB,QAAS,EAAM,UAAa,CAAA,GACjD,EAAA,EAAA,IAAA,CAAC,EAAa,OAAd,CACe,cACb,YAAe,EAAS,EAAY,OAAO,QAAQ,EACnD,SAAU,CAAC,EAAY,QACvB,KAAK,SACL,QAAQ,OACR,KAAK,QACN,CAAA,CACW,CAAA,CAAA,CACV,CAAA,CAAA,CAIC,CAAA,CACb,CAAA,CAAA,CAGC,CAAA,CAEX"}