@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,ln as n,t as r,w as i}from"./rp704-Pm.chunk.js";import{a,l as o,n as s,r as c,t as l}from"./Crs6pJ2h.chunk.js";import{t as u}from"./Di_u2uix.chunk.js";import{t as d}from"./BvMTtGLi.chunk.js";import"./CfCYHRuo.chunk.js";import{t as f}from"./UCDGupVs.chunk.js";import{t as p}from"./CLCeObem2.chunk.js";import{t as m}from"./C7gaMI1t2.chunk.js";import"./BhKv6dKl2.chunk.js";import{t as h}from"./DbAhNsCO2.chunk.js";import{n as g}from"./D-JsEiDq2.chunk.js";import{t as _}from"./C5o897T82.chunk.js";import{t as v}from"./CbiGs3Tn.chunk.js";import{n as y}from"./CsF4wDV1.chunk.js";import{s as b,u as x}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as S}from"./BDwjs8qz.chunk.js";import{R as C,z as ee}from"./Bznq7eHJ.chunk.js";import{t as te}from"./Lh2c_aQx2.chunk.js";import{t as ne}from"./Bwpvc7Th2.chunk.js";import{r as w}from"./BRcHS92O.chunk.js";import{c as T,i as E,s as D}from"./DA0I3jYA.chunk.js";import{t as re}from"./dKyhMawf.chunk.js";import{t as ie}from"./BoEge6tK.chunk.js";import{t as O}from"./DwibXbjb.chunk.js";import{n as k}from"./C4Ey4nzb2.chunk.js";import{t as ae}from"./GWw4zEXk2.chunk.js";import{n as A}from"./BJNKTs8z2.chunk.js";import{t as oe}from"./C3apTl7R.chunk.js";import{t as se}from"./D8DiB9QC.chunk.js";import{t as ce}from"./2NdfwDHB.chunk.js";import{t as j}from"./JmL1DHFu.chunk.js";import{t as M}from"./CNfsk-2G.chunk.js";import{t as N}from"./L_hKAuHe2.chunk.js";import{t as P}from"./C8hLOeBc2.chunk.js";import{a as F,i as I}from"./BJdNIGDD2.chunk.js";import{t as L}from"./CEuop4Wi2.chunk.js";import{t as R}from"./Dsh2iIyb2.chunk.js";import{t as z}from"./6S_Zxy792.chunk.js";import{t as B}from"./BUtlulMl.chunk.js";import{t as V}from"./MtOi7z-o.chunk.js";import{t as H}from"./FBRb9Ucn2.chunk.js";import{n as U,r as W,t as G}from"./BHZqVahv2.chunk.js";var K=n(e(),1),q=n(p()),J=4096,le=q.object().shape({name:q.string().trim().max(255,`Name is too long`).min(1,`Name is too short`).required(`Name is required`).default(``),logo:m,banner:m,cover:m,description:q.string().trim().required(`Description is required`).default(``).max(J,`Descriptions cannot exceed ${J} characters`),contentRegions:q.array().default([]),slug:q.string().trim().required(`Slug is required`).matches(/^[a-zA-Z0-9-]+$/,`Slug can only contain letters, numbers, and hyphens`),parent:q.mixed().required(`Parent is required`),backgroundColour:q.string(),websiteLink:q.string().url(`Invalid website link`)}),Y={"channel-video-banner":[1920,1080]},X={getValidVideoExtensions:()=>A.VIDEO.split(`,`),getUploadVideoTypeResolution:e=>Y[e],validateVideoResolutionForType:(e,t)=>{let[n,r]=Y[e];return t.width>=n&&t.height>=r},getOfflinePlaybackObject:e=>({videoId:`preview`,viewerId:``,viewerCustomerId:``,region:null,files:{progressive:[{url:e,mimeType:`video/mp4`,profile:`hd`,quality:1080,label:`Preview`}],fileToken:``},chapters:{list:[]},subtitles:{list:[]},resources:{list:[]},mediaType:`MasterVideo`,localCacheAddresses:[],mediaId:`preview`,settings:{showSubtitles:!1,playbackProfile:`hd`,playbackProfileLocalCache:`hd`,playbackQuality:`1080`,playbackQualityLocalCache:`1080`,playbackQualityFallback:`1080`,playbackSubtitleSizeDefault:`medium`},title:`Preview`,ratingCode:``,seriesName:``,seasonNumber:0,episodeNumber:0}),getVideoResolution:async e=>new Promise((t,n)=>{e.type.startsWith(`video/`)||n(Error(`The file is not a video`));let r=document.createElement(`video`),i=URL.createObjectURL(e);r.addEventListener(`loadedmetadata`,()=>{let e=r.videoWidth,n=r.videoHeight;URL.revokeObjectURL(i),t({width:e,height:n})}),r.addEventListener(`error`,()=>{URL.revokeObjectURL(i),n(Error(`Failed to load video metadata`))}),r.src=i})};function ue(e){let t=ne(),n=x(),[r,i]=K.useState(0),[a,o]=K.useState(null),[s,c]=K.useState(`idle`),[l,u]=K.useState(null),d=te(y.VideoUpload),p=b(f.currentUser());async function m(t,n){if(!a||!t||t!==a||!n||!n.url)return;let r=n.id,o=n.url;u(r),i(100),e.setFieldValue(o),await _(t,r,o)}function h(e){if(!a)return;let t=Array.from(e).find(e=>e===a);if(!t)return;let n=d.getUpload(t);n&&u(n.get(`id`))}async function _(r,i,a){if(!p.data){t.error(`Cannot complete upload: User not loaded`);return}let o=d.getUpload(r);if(!o){t.error(`Error: Video upload not found`);return}o.set(`sending`,!0);try{let t=await n(j.completeUpload({id:o.get(`id`),fileId:i,userId:p.data.id,customerId:p.data.customerId,libraryId:e.hostedLibraryId,fileUrl:a,pendingProcessOrigin:W.Upload,origin:G.Curator,video:{name:r.name,description:``,productionYear:new Date().getFullYear(),productionCompanies:[],producers:[],distributors:[],directors:[],subtitles:[]},subtitleOptions:{subtitleExtractOptions:U.EmbeddedOnly},autoCaption:!1}));await e.onUploadComplete?.(t)}catch{t.error(`There was an error uploading the video. Please try again.`)}finally{c(`idle`)}}function v(n){let r=`.`+n.name.split(`.`).pop()?.toLowerCase();if(!e.validVideoExtensions.includes(r)){e.setFieldError(`The file must be a video file. Supported extensions are ${e.validVideoExtensions.join(`, `)}`);return}X.getVideoResolution(n).then(t=>{let[r,a]=X.getUploadVideoTypeResolution(e.type);if(!X.validateVideoResolutionForType(e.type,t)){e.setFieldError(`The video must be at least ${r} x ${a}px. Uploaded video is ${t.width} x ${t.height}px.`);return}u(null),c(`uploading`),i(0),o(n),e.setFieldTouched(!0),d.addFiles([n])}).catch(()=>{t.error(`Failed to get video resolution. Please try again later.`)})}return g(I.VIDEO_UPLOAD,`progress`,(e,t)=>{(!l||e===l)&&i(Math.floor(t))}),g(I.VIDEO_UPLOAD,F.UPLOAD_SUCCESS,m,[a,_]),g(I.VIDEO_UPLOAD,F.FILES_ADDED,h,[a,d]),{status:s,uploadProgress:r,onSelectFile:v}}var Z=t();function de(){return(0,Z.jsx)(`div`,{className:`mt-3`,children:(0,Z.jsxs)(`div`,{className:`d-flex flex-column justify-content-center align-items-center gap-3 mb-1`,children:[(0,Z.jsx)(`span`,{children:`The video is being processed currently. Please check back later.`}),(0,Z.jsx)(`button`,{className:`btn btn-outline-dark`,onClick:()=>i.Reload(),children:`Reload`})]})})}var fe=X.getValidVideoExtensions();function pe(e){let{getRootProps:t,getInputProps:n,isDragActive:r}=ie({onDropAccepted:t=>e.onSelectFile(t[0]),noClick:!0,multiple:!1,noKeyboard:!0,accept:{"video/*":fe}});return(0,Z.jsxs)(`div`,{...t(),className:v(`border rounded position-relative p-5 mt-2 text-center bg-light overflow-hidden`,!!e.hasError&&`is-invalid`),children:[(0,Z.jsx)(`input`,{...n()}),(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`div`,{className:`mb-2 px-3`,children:`Drag and drop a video to upload`}),(0,Z.jsx)(O,{svg:L,className:`btn btn-outline-dark`,mimeType:A.VIDEO,onFileSelect:t=>e.onSelectFile(Array.from(t)[0]),children:`Upload Video`})]}),r&&(0,Z.jsxs)(`div`,{className:`position-absolute w-100 h-100 top-0 start-0 d-flex align-items-center justify-content-center bg-light gap-2`,children:[(0,Z.jsx)(s,{svg:L,size:c.Large}),(0,Z.jsx)(`span`,{className:`h4 mb-0`,children:`Drop file here to begin uploading`})]})]})}function me(e){let[t,n]=e.resolution;return(0,Z.jsxs)(`div`,{className:`d-flex justify-content-between align-items-center`,children:[(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`label`,{children:e.label}),e.showRequiredStar&&(0,Z.jsx)(`span`,{className:`text-danger`,children:`*`}),(0,Z.jsx)(`em`,{className:`ms-1 text-secondary`,children:e.note??`(Minimum resolution is ${t} x ${n}px)`})]}),(0,Z.jsxs)(`div`,{className:`d-flex align-items-center`,children:[e.showReplaceFileButton&&!!e.replaceFileButtonHandler&&(0,Z.jsx)(a,{title:`Replace video`,placement:`top`,spanHack:!0,children:(0,Z.jsx)(O,{className:`btn btn-link`,mimeType:A.VIDEO,svg:L,svgSize:c.Standard,onFileSelect:t=>e.replaceFileButtonHandler?.(Array.from(t)[0])})}),e.showReplaceFileButton&&!!e.deleteFileButtonHandler&&(0,Z.jsx)(a,{title:`Remove video`,placement:`top`,spanHack:!0,children:(0,Z.jsx)(o,{onClick:e.deleteFileButtonHandler,children:(0,Z.jsx)(s,{svg:ce,size:c.Standard})})})]})]})}function Q(e){return(0,Z.jsxs)(`div`,{className:v(`mt-2`,e.hasError&&`is-invalid`),children:[(0,Z.jsx)(V,{viewKey:e.viewKey,offlinePlaybackObject:e.offlinePlaybackObject,playerApi:e.playerApiUrl,autoplay:!1,controls:!0}),e.children]})}function he(e){return(0,Z.jsxs)(`div`,{className:`mt-3`,children:[(0,Z.jsxs)(`div`,{className:`d-flex justify-content-between mb-1`,children:[(0,Z.jsx)(`span`,{children:`Uploading...`}),(0,Z.jsxs)(`span`,{children:[Math.round(e.progress),`%`]})]}),(0,Z.jsx)(_,{now:e.progress,variant:`info`,animated:e.progress<100})]})}var ge=new URL(ClickView.Config.Urls.PlayerApi),_e=X.getValidVideoExtensions();function ve(e){let t=e.uploadVideoType??`channel-video-banner`,n=T(),r=n.values[e.fieldName],[i,a]=K.useState(!1),{status:o,uploadProgress:l,onSelectFile:u}=ue({type:t,hostedLibraryId:e.hostedLibraryId,validVideoExtensions:_e,setFieldValue:t=>n.setFieldValue(e.fieldName,{fileUrl:t}),setFieldError:t=>n.setFieldError(e.fieldName,t),setFieldTouched:t=>n.setFieldTouched(e.fieldName,t),onUploadComplete:e.onUploadComplete}),d=b(r?.id&&C.createViewKey(r.id,ee.MasterObject)),f=D(n.errors,e.fieldName),p=X.getUploadVideoTypeResolution(t),m=o===`uploading`,g=r?.fileUrl,_=!!d.data?.viewKey||!f&&!!g,y=r?.id&&r?.status===S.Processing;function x(){n.setFieldValue(e.fieldName,void 0)}return(0,Z.jsx)(`div`,{className:`form-group`,children:(0,Z.jsxs)(`div`,{className:v(`form-control h-auto py-2`,!!f&&`border border-danger`),children:[(0,Z.jsx)(me,{label:e.label,showRequiredStar:e.showRequiredStar,showReplaceFileButton:_&&!m&&!y,replaceFileButtonHandler:u,deleteFileButtonHandler:x,resolution:p}),m?(0,Z.jsx)(he,{progress:l}):y?(0,Z.jsx)(de,{}):_?(0,Z.jsxs)(Z.Fragment,{children:[!i&&(0,Z.jsx)(Q,{playerApiUrl:ge,viewKey:d.data?.viewKey,offlinePlaybackObject:!d.data?.viewKey&&g?X.getOfflinePlaybackObject(g):void 0,hasError:!!f}),(0,Z.jsx)(`div`,{className:`d-flex justify-content-center`,children:(0,Z.jsx)(s,{svg:i?oe:se,size:c.Large,className:`svg-container cursor-pointer`,tooltipSpanHack:!0,onClick:()=>a(!i),title:i?`Show video`:`Hide video`,tooltipPlacement:`left`})})]}):(0,Z.jsx)(pe,{onSelectFile:u,hasError:!!f}),(0,Z.jsx)(h.Control.Feedback,{type:`invalid`,children:f})]})})}var $={input:`_input_1merh_1`,suggestionsContainer:`_suggestionsContainer_1merh_4`},ye={width:1920,height:1080};function be(e){let t=T();function n(e){t.setFieldValue(`parent`,e),t.setFieldTouched(`parent`,!0,!1)}function i(e){n(e)}function a(n){t.setFieldValue(`name`,n.target.value),e.isNew&&(t.setFieldValue(`slug`,r.slugify(n.target.value)??``),t.setFieldTouched(`slug`,!0))}function o(){n(null)}let s=t.touched.parent&&t.errors.parent;function c(){return typeof t.errors.parent==`string`?t.errors.parent:``}return(0,Z.jsxs)(E,{children:[(0,Z.jsx)(k,{label:`Name`,name:`name`,id:`name`,value:t.values.name,placeholder:`Enter a name for this content partner`,onChange:a,showRequiredStar:!0}),(0,Z.jsx)(k,{as:`textarea`,rows:2,label:`Description`,name:`description`,id:`description`,value:t.values.description,placeholder:`Enter a description for this content partner`,maxLength:J,showCharacterCounter:!0,showRequiredStar:!0}),(0,Z.jsx)(k,{label:`Website Link`,name:`websiteLink`,id:`websiteLink`,value:t.values.websiteLink,placeholder:`Enter a website link for this content partner`}),(0,Z.jsx)(k,{label:`Parent`,name:`parentId`,id:`parentId`,showRequiredStar:!0,children:()=>(0,Z.jsxs)(`div`,{className:`form-group`,children:[(0,Z.jsx)(`div`,{className:v(s&&`is-invalid`),children:(0,Z.jsx)(ae,{renderAsForm:!1,theme:()=>({suggestionsContainerOpen:v(`pb-0 pt-1 overflow-hidden bg-white border rounded position-absolute w-100`,$.suggestions),suggestionsContainer:`${$.suggestionsContainer}`,input:v(s&&`border-danger`)}),activationLength:2,placeholder:`Search for a parent company or person...`,clearQueryOnSelect:!0,searchIconPlacement:!1,debounceTime:300,allowableSuggestionFetchRequestedReasons:[`input-changed`,`input-focused`],getRemoteUrl:()=>e.getRemoteUrl(),getRemotePostBody:e=>({query:e,indices:[{index:`company`},{index:`person`}],searchType:`content`}),onSuggestionSelected:i,showClearInputIcon:!0,onClickClearInput:o,formatRemoteSuggestions:e=>e.results?.map(e=>({...e,name:e.name?.[0]})),initialQuery:t.values.parent?.name||``,getErrorStateComponent:e=>(0,Z.jsx)(N,{imageUrl:P.TYPEAHEAD_ERROR,onClickTryAgain:e}),getEmptyStateComponent:e=>(0,Z.jsxs)(`div`,{children:[`Couldn't find any matches for `,e]})})}),(0,Z.jsx)(h.Control.Feedback,{type:`invalid`,children:c()})]})}),(0,Z.jsx)(k,{label:`Slug`,name:`slug`,infoText:`Auto generated based on the parent company or person name`,id:`slug`,value:t.values.slug,readOnly:!e.isNew,disabled:!e.isNew,showRequiredStar:!0}),e.contentRegions&&!e.isNew&&(0,Z.jsx)(k,{label:`Content Regions`,name:`contentRegions`,id:`contentRegions`,children:()=>(0,Z.jsx)(`div`,{className:`w-50`,children:(0,Z.jsx)(R,{type:`checkbox`,id:t.values.id,options:e.contentRegions,selected:t.values.contentRegions||[],onUpdate:e=>t.setFieldValue(`contentRegions`,e),readOnly:!0})})}),(0,Z.jsx)(M,{imageType:w.Covers,fieldName:`cover`,uploadAppLink:{application:d.CONTENT_PARTNERS,action:u.ContentPartners.UPLOAD_IMAGE}}),(0,Z.jsx)(M,{imageType:w.Logos,fieldName:`logo`,label:`Logo`,overrideDimensions:{width:512,height:512},uploadAppLink:{application:d.CONTENT_PARTNERS,action:u.ContentPartners.UPLOAD_IMAGE}}),!e.isNew&&(0,Z.jsx)(z,{label:`Background colour`,fieldName:`backgroundColour`}),(0,Z.jsx)(M,{imageType:w.Banners,fieldName:`banner`,uploadAppLink:{application:d.CONTENT_PARTNERS,action:u.ContentPartners.UPLOAD_IMAGE},overrideDimensions:ye}),!!e.onVideoUploadComplete&&(0,Z.jsx)(ve,{label:`Video Banner`,fieldName:`videoBanner`,hostedLibraryId:ClickView.Config.Resources.ClickViewRootLibrary,onUploadComplete:e.onVideoUploadComplete}),(0,Z.jsxs)(`div`,{className:`d-flex gap-2`,children:[(0,Z.jsx)(B,{isNew:e.isNew,variant:`dark`}),!e.isNew&&(0,Z.jsx)(l,{appLink:e.deleteAppLink,className:`btn btn-danger`,children:`Delete Channel`})]})]})}function xe(e){let t=e.contentPartner?.links?H.getPartnerLinkByType(e.contentPartner.links,`website`):null,n={id:e.contentPartner?.id,name:e.contentPartner?.name||``,logo:e.contentPartner?.logo||null,cover:e.contentPartner?.cover||null,banner:e.contentPartner?.banner||null,description:e.contentPartner?.description||``,slug:e.contentPartner?._slug.value||``,blurb:e.contentPartner?.blurb||``,contentSource:e.contentPartner?.contentSource||1,partnerType:e.contentPartner?.partnerType||2,backgroundColour:e.contentPartner?.metadata?.backgroundColour||null,contentRegions:e.contentPartner?.contentRegions?.data||[],parent:e.contentPartner?.person||e.contentPartner?.company,videoBanner:e.contentPartner?.videoBanner?{id:e.contentPartner?.videoBanner.id,status:e.contentPartner?.videoBanner.status}:null,websiteLink:t||``};function r(){return`/api/search/v4/search/raw?userId=${e.currentUser?.id}&customerid=${e.currentUser?.customerId}`}return(0,Z.jsx)(re,{initialValues:n,validationSchema:le,onSubmit:e.onSave,children:(0,Z.jsx)(be,{isNew:!(e.contentPartner&&e.contentPartner.id),contentRegions:e.contentRegions,getRemoteUrl:r,onVideoUploadComplete:e.onVideoUploadComplete,deleteAppLink:{application:d.CONTENT_PARTNERS,action:u.ContentPartners.DELETE_CONTENT_PARTNER,args:[e.contentPartner?.id]}})})}export{xe as t};
2
- //# sourceMappingURL=Da_9BBKD2.chunk.js.map
1
+ import{a as e,i as t,ln as n,t as r,w as i}from"./rp704-Pm.chunk.js";import{a,l as o,n as s,r as c,t as l}from"./Crs6pJ2h.chunk.js";import{t as u}from"./Di_u2uix.chunk.js";import{t as d}from"./BvMTtGLi.chunk.js";import"./CfCYHRuo.chunk.js";import{t as f}from"./UCDGupVs.chunk.js";import{t as p}from"./CLCeObem2.chunk.js";import{t as m}from"./C7gaMI1t2.chunk.js";import"./GpDEun8c2.chunk.js";import{t as h}from"./DbAhNsCO2.chunk.js";import{n as g}from"./D-JsEiDq2.chunk.js";import{t as _}from"./C5o897T82.chunk.js";import{t as v}from"./CbiGs3Tn.chunk.js";import{n as y}from"./CsF4wDV1.chunk.js";import{s as b,u as x}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as S}from"./BDwjs8qz.chunk.js";import{R as C,z as ee}from"./Bznq7eHJ.chunk.js";import{t as te}from"./Lh2c_aQx2.chunk.js";import{t as ne}from"./Bwpvc7Th2.chunk.js";import{r as w}from"./BRcHS92O.chunk.js";import{c as T,i as E,s as D}from"./DA0I3jYA.chunk.js";import{t as re}from"./dKyhMawf.chunk.js";import{t as ie}from"./BoEge6tK.chunk.js";import{t as O}from"./DwibXbjb.chunk.js";import{n as k}from"./C4Ey4nzb2.chunk.js";import{t as ae}from"./GWw4zEXk2.chunk.js";import{n as A}from"./BJNKTs8z2.chunk.js";import{t as oe}from"./C3apTl7R.chunk.js";import{t as se}from"./D8DiB9QC.chunk.js";import{t as ce}from"./2NdfwDHB.chunk.js";import{t as j}from"./JmL1DHFu.chunk.js";import{t as M}from"./CNfsk-2G.chunk.js";import{t as N}from"./L_hKAuHe2.chunk.js";import{t as P}from"./C8hLOeBc2.chunk.js";import{a as F,i as I}from"./BJdNIGDD2.chunk.js";import{t as L}from"./CEuop4Wi2.chunk.js";import{t as R}from"./Dsh2iIyb2.chunk.js";import{t as z}from"./6S_Zxy792.chunk.js";import{t as B}from"./BUtlulMl.chunk.js";import{t as V}from"./MtOi7z-o.chunk.js";import{t as H}from"./FBRb9Ucn2.chunk.js";import{n as U,r as W,t as G}from"./BHZqVahv2.chunk.js";var K=n(e(),1),q=n(p()),J=4096,le=q.object().shape({name:q.string().trim().max(255,`Name is too long`).min(1,`Name is too short`).required(`Name is required`).default(``),logo:m,banner:m,cover:m,description:q.string().trim().required(`Description is required`).default(``).max(J,`Descriptions cannot exceed ${J} characters`),contentRegions:q.array().default([]),slug:q.string().trim().required(`Slug is required`).matches(/^[a-zA-Z0-9-]+$/,`Slug can only contain letters, numbers, and hyphens`),parent:q.mixed().required(`Parent is required`),backgroundColour:q.string(),websiteLink:q.string().url(`Invalid website link`)}),Y={"channel-video-banner":[1920,1080]},X={getValidVideoExtensions:()=>A.VIDEO.split(`,`),getUploadVideoTypeResolution:e=>Y[e],validateVideoResolutionForType:(e,t)=>{let[n,r]=Y[e];return t.width>=n&&t.height>=r},getOfflinePlaybackObject:e=>({videoId:`preview`,viewerId:``,viewerCustomerId:``,region:null,files:{progressive:[{url:e,mimeType:`video/mp4`,profile:`hd`,quality:1080,label:`Preview`}],fileToken:``},chapters:{list:[]},subtitles:{list:[]},resources:{list:[]},mediaType:`MasterVideo`,localCacheAddresses:[],mediaId:`preview`,settings:{showSubtitles:!1,playbackProfile:`hd`,playbackProfileLocalCache:`hd`,playbackQuality:`1080`,playbackQualityLocalCache:`1080`,playbackQualityFallback:`1080`,playbackSubtitleSizeDefault:`medium`},title:`Preview`,ratingCode:``,seriesName:``,seasonNumber:0,episodeNumber:0}),getVideoResolution:async e=>new Promise((t,n)=>{e.type.startsWith(`video/`)||n(Error(`The file is not a video`));let r=document.createElement(`video`),i=URL.createObjectURL(e);r.addEventListener(`loadedmetadata`,()=>{let e=r.videoWidth,n=r.videoHeight;URL.revokeObjectURL(i),t({width:e,height:n})}),r.addEventListener(`error`,()=>{URL.revokeObjectURL(i),n(Error(`Failed to load video metadata`))}),r.src=i})};function ue(e){let t=ne(),n=x(),[r,i]=K.useState(0),[a,o]=K.useState(null),[s,c]=K.useState(`idle`),[l,u]=K.useState(null),d=te(y.VideoUpload),p=b(f.currentUser());async function m(t,n){if(!a||!t||t!==a||!n||!n.url)return;let r=n.id,o=n.url;u(r),i(100),e.setFieldValue(o),await _(t,r,o)}function h(e){if(!a)return;let t=Array.from(e).find(e=>e===a);if(!t)return;let n=d.getUpload(t);n&&u(n.get(`id`))}async function _(r,i,a){if(!p.data){t.error(`Cannot complete upload: User not loaded`);return}let o=d.getUpload(r);if(!o){t.error(`Error: Video upload not found`);return}o.set(`sending`,!0);try{let t=await n(j.completeUpload({id:o.get(`id`),fileId:i,userId:p.data.id,customerId:p.data.customerId,libraryId:e.hostedLibraryId,fileUrl:a,pendingProcessOrigin:W.Upload,origin:G.Curator,video:{name:r.name,description:``,productionYear:new Date().getFullYear(),productionCompanies:[],producers:[],distributors:[],directors:[],subtitles:[]},subtitleOptions:{subtitleExtractOptions:U.EmbeddedOnly},autoCaption:!1}));await e.onUploadComplete?.(t)}catch{t.error(`There was an error uploading the video. Please try again.`)}finally{c(`idle`)}}function v(n){let r=`.`+n.name.split(`.`).pop()?.toLowerCase();if(!e.validVideoExtensions.includes(r)){e.setFieldError(`The file must be a video file. Supported extensions are ${e.validVideoExtensions.join(`, `)}`);return}X.getVideoResolution(n).then(t=>{let[r,a]=X.getUploadVideoTypeResolution(e.type);if(!X.validateVideoResolutionForType(e.type,t)){e.setFieldError(`The video must be at least ${r} x ${a}px. Uploaded video is ${t.width} x ${t.height}px.`);return}u(null),c(`uploading`),i(0),o(n),e.setFieldTouched(!0),d.addFiles([n])}).catch(()=>{t.error(`Failed to get video resolution. Please try again later.`)})}return g(I.VIDEO_UPLOAD,`progress`,(e,t)=>{(!l||e===l)&&i(Math.floor(t))}),g(I.VIDEO_UPLOAD,F.UPLOAD_SUCCESS,m,[a,_]),g(I.VIDEO_UPLOAD,F.FILES_ADDED,h,[a,d]),{status:s,uploadProgress:r,onSelectFile:v}}var Z=t();function de(){return(0,Z.jsx)(`div`,{className:`mt-3`,children:(0,Z.jsxs)(`div`,{className:`d-flex flex-column justify-content-center align-items-center gap-3 mb-1`,children:[(0,Z.jsx)(`span`,{children:`The video is being processed currently. Please check back later.`}),(0,Z.jsx)(`button`,{className:`btn btn-outline-dark`,onClick:()=>i.Reload(),children:`Reload`})]})})}var fe=X.getValidVideoExtensions();function pe(e){let{getRootProps:t,getInputProps:n,isDragActive:r}=ie({onDropAccepted:t=>e.onSelectFile(t[0]),noClick:!0,multiple:!1,noKeyboard:!0,accept:{"video/*":fe}});return(0,Z.jsxs)(`div`,{...t(),className:v(`border rounded position-relative p-5 mt-2 text-center bg-light overflow-hidden`,!!e.hasError&&`is-invalid`),children:[(0,Z.jsx)(`input`,{...n()}),(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`div`,{className:`mb-2 px-3`,children:`Drag and drop a video to upload`}),(0,Z.jsx)(O,{svg:L,className:`btn btn-outline-dark`,mimeType:A.VIDEO,onFileSelect:t=>e.onSelectFile(Array.from(t)[0]),children:`Upload Video`})]}),r&&(0,Z.jsxs)(`div`,{className:`position-absolute w-100 h-100 top-0 start-0 d-flex align-items-center justify-content-center bg-light gap-2`,children:[(0,Z.jsx)(s,{svg:L,size:c.Large}),(0,Z.jsx)(`span`,{className:`h4 mb-0`,children:`Drop file here to begin uploading`})]})]})}function me(e){let[t,n]=e.resolution;return(0,Z.jsxs)(`div`,{className:`d-flex justify-content-between align-items-center`,children:[(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`label`,{children:e.label}),e.showRequiredStar&&(0,Z.jsx)(`span`,{className:`text-danger`,children:`*`}),(0,Z.jsx)(`em`,{className:`ms-1 text-secondary`,children:e.note??`(Minimum resolution is ${t} x ${n}px)`})]}),(0,Z.jsxs)(`div`,{className:`d-flex align-items-center`,children:[e.showReplaceFileButton&&!!e.replaceFileButtonHandler&&(0,Z.jsx)(a,{title:`Replace video`,placement:`top`,spanHack:!0,children:(0,Z.jsx)(O,{className:`btn btn-link`,mimeType:A.VIDEO,svg:L,svgSize:c.Standard,onFileSelect:t=>e.replaceFileButtonHandler?.(Array.from(t)[0])})}),e.showReplaceFileButton&&!!e.deleteFileButtonHandler&&(0,Z.jsx)(a,{title:`Remove video`,placement:`top`,spanHack:!0,children:(0,Z.jsx)(o,{onClick:e.deleteFileButtonHandler,children:(0,Z.jsx)(s,{svg:ce,size:c.Standard})})})]})]})}function Q(e){return(0,Z.jsxs)(`div`,{className:v(`mt-2`,e.hasError&&`is-invalid`),children:[(0,Z.jsx)(V,{viewKey:e.viewKey,offlinePlaybackObject:e.offlinePlaybackObject,playerApi:e.playerApiUrl,autoplay:!1,controls:!0}),e.children]})}function he(e){return(0,Z.jsxs)(`div`,{className:`mt-3`,children:[(0,Z.jsxs)(`div`,{className:`d-flex justify-content-between mb-1`,children:[(0,Z.jsx)(`span`,{children:`Uploading...`}),(0,Z.jsxs)(`span`,{children:[Math.round(e.progress),`%`]})]}),(0,Z.jsx)(_,{now:e.progress,variant:`info`,animated:e.progress<100})]})}var ge=new URL(ClickView.Config.Urls.PlayerApi),_e=X.getValidVideoExtensions();function ve(e){let t=e.uploadVideoType??`channel-video-banner`,n=T(),r=n.values[e.fieldName],[i,a]=K.useState(!1),{status:o,uploadProgress:l,onSelectFile:u}=ue({type:t,hostedLibraryId:e.hostedLibraryId,validVideoExtensions:_e,setFieldValue:t=>n.setFieldValue(e.fieldName,{fileUrl:t}),setFieldError:t=>n.setFieldError(e.fieldName,t),setFieldTouched:t=>n.setFieldTouched(e.fieldName,t),onUploadComplete:e.onUploadComplete}),d=b(r?.id&&C.createViewKey(r.id,ee.MasterObject)),f=D(n.errors,e.fieldName),p=X.getUploadVideoTypeResolution(t),m=o===`uploading`,g=r?.fileUrl,_=!!d.data?.viewKey||!f&&!!g,y=r?.id&&r?.status===S.Processing;function x(){n.setFieldValue(e.fieldName,void 0)}return(0,Z.jsx)(`div`,{className:`form-group`,children:(0,Z.jsxs)(`div`,{className:v(`form-control h-auto py-2`,!!f&&`border border-danger`),children:[(0,Z.jsx)(me,{label:e.label,showRequiredStar:e.showRequiredStar,showReplaceFileButton:_&&!m&&!y,replaceFileButtonHandler:u,deleteFileButtonHandler:x,resolution:p}),m?(0,Z.jsx)(he,{progress:l}):y?(0,Z.jsx)(de,{}):_?(0,Z.jsxs)(Z.Fragment,{children:[!i&&(0,Z.jsx)(Q,{playerApiUrl:ge,viewKey:d.data?.viewKey,offlinePlaybackObject:!d.data?.viewKey&&g?X.getOfflinePlaybackObject(g):void 0,hasError:!!f}),(0,Z.jsx)(`div`,{className:`d-flex justify-content-center`,children:(0,Z.jsx)(s,{svg:i?oe:se,size:c.Large,className:`svg-container cursor-pointer`,tooltipSpanHack:!0,onClick:()=>a(!i),title:i?`Show video`:`Hide video`,tooltipPlacement:`left`})})]}):(0,Z.jsx)(pe,{onSelectFile:u,hasError:!!f}),(0,Z.jsx)(h.Control.Feedback,{type:`invalid`,children:f})]})})}var $={input:`_input_1merh_1`,suggestionsContainer:`_suggestionsContainer_1merh_4`},ye={width:1920,height:1080};function be(e){let t=T();function n(e){t.setFieldValue(`parent`,e),t.setFieldTouched(`parent`,!0,!1)}function i(e){n(e)}function a(n){t.setFieldValue(`name`,n.target.value),e.isNew&&(t.setFieldValue(`slug`,r.slugify(n.target.value)??``),t.setFieldTouched(`slug`,!0))}function o(){n(null)}let s=t.touched.parent&&t.errors.parent;function c(){return typeof t.errors.parent==`string`?t.errors.parent:``}return(0,Z.jsxs)(E,{children:[(0,Z.jsx)(k,{label:`Name`,name:`name`,id:`name`,value:t.values.name,placeholder:`Enter a name for this content partner`,onChange:a,showRequiredStar:!0}),(0,Z.jsx)(k,{as:`textarea`,rows:2,label:`Description`,name:`description`,id:`description`,value:t.values.description,placeholder:`Enter a description for this content partner`,maxLength:J,showCharacterCounter:!0,showRequiredStar:!0}),(0,Z.jsx)(k,{label:`Website Link`,name:`websiteLink`,id:`websiteLink`,value:t.values.websiteLink,placeholder:`Enter a website link for this content partner`}),(0,Z.jsx)(k,{label:`Parent`,name:`parentId`,id:`parentId`,showRequiredStar:!0,children:()=>(0,Z.jsxs)(`div`,{className:`form-group`,children:[(0,Z.jsx)(`div`,{className:v(s&&`is-invalid`),children:(0,Z.jsx)(ae,{renderAsForm:!1,theme:()=>({suggestionsContainerOpen:v(`pb-0 pt-1 overflow-hidden bg-white border rounded position-absolute w-100`,$.suggestions),suggestionsContainer:`${$.suggestionsContainer}`,input:v(s&&`border-danger`)}),activationLength:2,placeholder:`Search for a parent company or person...`,clearQueryOnSelect:!0,searchIconPlacement:!1,debounceTime:300,allowableSuggestionFetchRequestedReasons:[`input-changed`,`input-focused`],getRemoteUrl:()=>e.getRemoteUrl(),getRemotePostBody:e=>({query:e,indices:[{index:`company`},{index:`person`}],searchType:`content`}),onSuggestionSelected:i,showClearInputIcon:!0,onClickClearInput:o,formatRemoteSuggestions:e=>e.results?.map(e=>({...e,name:e.name?.[0]})),initialQuery:t.values.parent?.name||``,getErrorStateComponent:e=>(0,Z.jsx)(N,{imageUrl:P.TYPEAHEAD_ERROR,onClickTryAgain:e}),getEmptyStateComponent:e=>(0,Z.jsxs)(`div`,{children:[`Couldn't find any matches for `,e]})})}),(0,Z.jsx)(h.Control.Feedback,{type:`invalid`,children:c()})]})}),(0,Z.jsx)(k,{label:`Slug`,name:`slug`,infoText:`Auto generated based on the parent company or person name`,id:`slug`,value:t.values.slug,readOnly:!e.isNew,disabled:!e.isNew,showRequiredStar:!0}),e.contentRegions&&!e.isNew&&(0,Z.jsx)(k,{label:`Content Regions`,name:`contentRegions`,id:`contentRegions`,children:()=>(0,Z.jsx)(`div`,{className:`w-50`,children:(0,Z.jsx)(R,{type:`checkbox`,id:t.values.id,options:e.contentRegions,selected:t.values.contentRegions||[],onUpdate:e=>t.setFieldValue(`contentRegions`,e),readOnly:!0})})}),(0,Z.jsx)(M,{imageType:w.Covers,fieldName:`cover`,uploadAppLink:{application:d.CONTENT_PARTNERS,action:u.ContentPartners.UPLOAD_IMAGE}}),(0,Z.jsx)(M,{imageType:w.Logos,fieldName:`logo`,label:`Logo`,overrideDimensions:{width:512,height:512},uploadAppLink:{application:d.CONTENT_PARTNERS,action:u.ContentPartners.UPLOAD_IMAGE}}),!e.isNew&&(0,Z.jsx)(z,{label:`Background colour`,fieldName:`backgroundColour`}),(0,Z.jsx)(M,{imageType:w.Banners,fieldName:`banner`,uploadAppLink:{application:d.CONTENT_PARTNERS,action:u.ContentPartners.UPLOAD_IMAGE},overrideDimensions:ye}),!!e.onVideoUploadComplete&&(0,Z.jsx)(ve,{label:`Video Banner`,fieldName:`videoBanner`,hostedLibraryId:ClickView.Config.Resources.ClickViewRootLibrary,onUploadComplete:e.onVideoUploadComplete}),(0,Z.jsxs)(`div`,{className:`d-flex gap-2`,children:[(0,Z.jsx)(B,{isNew:e.isNew,variant:`dark`}),!e.isNew&&(0,Z.jsx)(l,{appLink:e.deleteAppLink,className:`btn btn-danger`,children:`Delete Channel`})]})]})}function xe(e){let t=e.contentPartner?.links?H.getPartnerLinkByType(e.contentPartner.links,`website`):null,n={id:e.contentPartner?.id,name:e.contentPartner?.name||``,logo:e.contentPartner?.logo||null,cover:e.contentPartner?.cover||null,banner:e.contentPartner?.banner||null,description:e.contentPartner?.description||``,slug:e.contentPartner?._slug.value||``,blurb:e.contentPartner?.blurb||``,contentSource:e.contentPartner?.contentSource||1,partnerType:e.contentPartner?.partnerType||2,backgroundColour:e.contentPartner?.metadata?.backgroundColour||null,contentRegions:e.contentPartner?.contentRegions?.data||[],parent:e.contentPartner?.person||e.contentPartner?.company,videoBanner:e.contentPartner?.videoBanner?{id:e.contentPartner?.videoBanner.id,status:e.contentPartner?.videoBanner.status}:null,websiteLink:t||``};function r(){return`/api/search/v4/search/raw?userId=${e.currentUser?.id}&customerid=${e.currentUser?.customerId}`}return(0,Z.jsx)(re,{initialValues:n,validationSchema:le,onSubmit:e.onSave,children:(0,Z.jsx)(be,{isNew:!(e.contentPartner&&e.contentPartner.id),contentRegions:e.contentRegions,getRemoteUrl:r,onVideoUploadComplete:e.onVideoUploadComplete,deleteAppLink:{application:d.CONTENT_PARTNERS,action:u.ContentPartners.DELETE_CONTENT_PARTNER,args:[e.contentPartner?.id]}})})}export{xe as t};
2
+ //# sourceMappingURL=Bo_WsHZq2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Da_9BBKD2.chunk.js","names":[],"sources":["../../../../../src/apps/content-partners/utils/ContentPartnerValidation.ts","../../../../../src/shared/components/upload-video/utils/UploadVideoUtils.ts","../../../../../src/shared/components/upload-video/hooks/useUploadVideo.ts","../../../../../src/shared/components/upload-video/ProcessingVideo.tsx","../../../../../src/shared/components/upload-video/UploadVideoDropzone.tsx","../../../../../src/shared/components/upload-video/UploadVideoLabel.tsx","../../../../../src/shared/components/upload-video/UploadVideoPlayer.tsx","../../../../../src/shared/components/upload-video/UploadVideoProgress.tsx","../../../../../src/shared/components/upload-video/UploadVideo.tsx","../../../../../src/apps/content-partners/components/edit-content-partner/edit-content-partner-form.module.scss","../../../../../src/apps/content-partners/components/edit-content-partner/EditContentPartnerForm.tsx","../../../../../src/apps/content-partners/components/edit-content-partner/EditContentPartner.tsx"],"sourcesContent":["import * as Yup from 'yup';\n\nimport { Company, ContentRegionObject, Person } from 'libs/shared/interfaces';\n\nimport { ImageValidationSchema } from 'shared/utils/validation/ImageValidationSchema';\n\nimport { EditPartnerFormData } from 'apps/content-partners/interfaces/EditPartnerFormData';\n\n// same limit as for companies\nexport const MAX_PARTNER_DESCRIPTION_LENGTH = 4096;\nexport const MAX_BLURB_LENGTH = 60;\n\nexport const ContentPartnerValidationSchema = Yup.object().shape<EditPartnerFormData>({\n name: Yup.string()\n .trim()\n .max(255, 'Name is too long')\n .min(1, 'Name is too short')\n .required('Name is required')\n .default(''),\n\n logo: ImageValidationSchema,\n\n banner: ImageValidationSchema,\n\n cover: ImageValidationSchema,\n\n description: Yup.string()\n .trim()\n .required('Description is required')\n .default('')\n .max(MAX_PARTNER_DESCRIPTION_LENGTH, `Descriptions cannot exceed ${MAX_PARTNER_DESCRIPTION_LENGTH} characters`),\n\n contentRegions: Yup.array<ContentRegionObject>()\n .default([]),\n\n slug: Yup.string()\n .trim()\n .required('Slug is required')\n .matches(/^[a-zA-Z0-9-]+$/, 'Slug can only contain letters, numbers, and hyphens'),\n\n parent: Yup.mixed<Company | Person>()\n .required('Parent is required'),\n\n backgroundColour: Yup.string(),\n websiteLink: Yup.string().url('Invalid website link')\n});\n","import { FileExtensions } from 'libs/shared/apps/upload/utils/FileExtensionsHelper';\n\nimport { PlaybackObject } from 'projects/player/interfaces/models/PlaybackObject';\n\nexport type UploadVideoType = 'channel-video-banner';\n\n/**\n * Minimum resolution for each upload type\n*/\nconst UploadVideoTypeResolutionMap: Record<UploadVideoType, [width: number, height: number]> = {\n 'channel-video-banner': [ 1920, 1080 ]\n};\n\nexport const UploadVideoUtils = {\n getValidVideoExtensions: () => FileExtensions.VIDEO.split(','),\n getUploadVideoTypeResolution: (uploadVideoType: UploadVideoType) => UploadVideoTypeResolutionMap[uploadVideoType],\n validateVideoResolutionForType: (type: UploadVideoType, resolution: { width: number, height: number }) => {\n const [ minWidth, minHeight ] = UploadVideoTypeResolutionMap[type];\n return resolution.width >= minWidth && resolution.height >= minHeight;\n },\n /**\n * Returns a minimal playback object for a video url to preview in the player\n */\n getOfflinePlaybackObject: (url: string): PlaybackObject => {\n return {\n videoId: 'preview',\n viewerId: '',\n viewerCustomerId: '',\n region: null,\n files: {\n progressive: [{\n url: url,\n mimeType: 'video/mp4',\n profile: 'hd',\n quality: 1080,\n label: 'Preview'\n }],\n fileToken: ''\n },\n chapters: { list: []},\n subtitles: { list: []},\n resources: { list: []},\n mediaType: 'MasterVideo',\n localCacheAddresses: [],\n mediaId: 'preview',\n settings: {\n showSubtitles: false,\n playbackProfile: 'hd',\n playbackProfileLocalCache: 'hd',\n playbackQuality: '1080',\n playbackQualityLocalCache: '1080',\n playbackQualityFallback: '1080',\n playbackSubtitleSizeDefault: 'medium'\n },\n title: 'Preview',\n ratingCode: '',\n seriesName: '',\n seasonNumber: 0,\n episodeNumber: 0\n };\n },\n getVideoResolution: async (file: File): Promise<{ width: number, height: number }> => {\n return new Promise((resolve, reject) => {\n if (!file.type.startsWith('video/')) {\n reject(new Error('The file is not a video'));\n }\n\n const video = document.createElement('video');\n const objectUrl = URL.createObjectURL(file);\n\n video.addEventListener('loadedmetadata', () => {\n const width = video.videoWidth;\n const height = video.videoHeight;\n URL.revokeObjectURL(objectUrl);\n resolve({ width, height });\n });\n\n video.addEventListener('error', () => {\n URL.revokeObjectURL(objectUrl);\n reject(new Error('Failed to load video metadata'));\n });\n\n video.src = objectUrl;\n });\n }\n};\n","import React from 'react';\n\nimport { useService } from 'libs/common/react/hooks/UseService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { UploadEventNames } from 'libs/shared/apps/upload/constants/UploadConstants';\nimport { BaseVideoUploadService } from 'libs/shared/apps/upload/services/UploadService';\nimport { SharedServiceChannels } from 'libs/shared/constants/RadioChannels';\nimport { SharedServices } from 'libs/shared/constants/SharedServices';\nimport { PendingProcessOrigin } from 'libs/shared/enums/PendingProcessOrigin';\nimport { SubtitleExtractionOptions } from 'libs/shared/enums/SubtitleExtractionOptions';\nimport { VideoOrigin } from 'libs/shared/enums/VideoOrigin';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useListenOn } from 'libs/shared/hooks/UseListenOn';\nimport { CurrentUser } from 'libs/shared/interfaces';\n\nimport { VideoRequests } from 'apps/videos/flight-requests/CuratorVideoRequests';\n\nimport { PendingItem } from '../UploadVideo';\nimport { UploadVideoType, UploadVideoUtils } from '../utils/UploadVideoUtils';\n\ninterface UploadVideoResponse {\n id: string;\n url: string;\n extension: string;\n name: string;\n size: number;\n}\n\ntype UploadStatus = 'idle' | 'uploading';\n\ninterface UseUploadVideoOptions {\n type: UploadVideoType;\n hostedLibraryId: string;\n validVideoExtensions: string[];\n setFieldError: (error: string) => void;\n setFieldValue: (fileUrl: string) => void;\n setFieldTouched: (touched: boolean) => void;\n onUploadComplete?: (pendingItem: PendingItem) => Promise<void>;\n}\n\nexport function useUploadVideo(options: UseUploadVideoOptions) {\n const alert = useAlerts();\n const fetchAsync = Flight.useGetFetchAsync();\n const [ uploadProgress, setUploadProgress ] = React.useState(0);\n const [ file, setFile ] = React.useState<File | null>(null);\n const [ status, setStatus ] = React.useState<UploadStatus>('idle');\n const [ uploadedFileId, setUploadedFileId ] = React.useState<string | null>(null);\n\n const videoUploadService = useService<BaseVideoUploadService>(SharedServices.VideoUpload);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n async function handleUploadSuccess(uploadedFile: File, response: UploadVideoResponse) {\n // Only process if this is the file we are currently tracking\n if (!file || !uploadedFile || uploadedFile !== file) return;\n if (!response || !response.url) return;\n \n const newFileId = response.id;\n const newFileUrl = response.url;\n \n setUploadedFileId(newFileId);\n setUploadProgress(100);\n\n options.setFieldValue(newFileUrl);\n \n await submit(uploadedFile, newFileId, newFileUrl);\n }\n\n // Handler for files added event - this runs after async processing in service\n function handleFilesAdded(files: File[]) {\n if (!file) return;\n\n // Check if our file is in the added files list\n const matchingFile = Array.from(files).find(f => f === file);\n\n if (!matchingFile)\n return;\n \n const upload = videoUploadService.getUpload(matchingFile);\n if (upload) {\n setUploadedFileId(upload.get('id'));\n }\n }\n\n async function submit(fileToSubmit: File, fileIdToSubmit: string, fileUrlToSubmit: string) {\n if (!currentUser.data) {\n alert.error('Cannot complete upload: User not loaded');\n return;\n }\n\n const upload = videoUploadService.getUpload(fileToSubmit);\n\n if (!upload) {\n alert.error('Error: Video upload not found');\n return;\n }\n \n upload.set('sending', true);\n\n try {\n const pendingItem = await fetchAsync<PendingItem>(\n VideoRequests.completeUpload({\n id: upload.get('id'),\n fileId: fileIdToSubmit,\n userId: currentUser.data.id,\n customerId: currentUser.data.customerId,\n libraryId: options.hostedLibraryId,\n fileUrl: fileUrlToSubmit,\n pendingProcessOrigin: PendingProcessOrigin.Upload,\n origin: VideoOrigin.Curator,\n video: {\n name: fileToSubmit.name,\n description: '',\n productionYear: new Date().getFullYear(),\n productionCompanies: [],\n producers: [],\n distributors: [],\n directors: [],\n subtitles: []\n },\n subtitleOptions: {\n subtitleExtractOptions: SubtitleExtractionOptions.EmbeddedOnly\n },\n autoCaption: false\n })\n );\n\n // Leave it upto the parent component to handle actual association of video with any object\n await options.onUploadComplete?.(pendingItem);\n } catch {\n alert.error('There was an error uploading the video. Please try again.');\n } finally {\n setStatus('idle');\n }\n }\n\n function onSelectFile(file: File) {\n // Check if its a valid video extension\n const fileExtension = '.' + file.name.split('.').pop()?.toLowerCase();\n\n if (!options.validVideoExtensions.includes(fileExtension)) {\n options.setFieldError(`The file must be a video file. Supported extensions are ${options.validVideoExtensions.join(', ')}`);\n return;\n }\n\n // Get video resolution\n UploadVideoUtils.getVideoResolution(file).then(resolution => {\n const [ minWidth, minHeight ] = UploadVideoUtils.getUploadVideoTypeResolution(options.type);\n if (!UploadVideoUtils.validateVideoResolutionForType(options.type, resolution)) {\n options.setFieldError(`The video must be at least ${minWidth} x ${minHeight}px. Uploaded video is ${resolution.width} x ${resolution.height}px.`);\n return;\n }\n \n // Reset state before starting upload\n setUploadedFileId(null);\n setStatus('uploading');\n setUploadProgress(0);\n setFile(file);\n options.setFieldTouched(true);\n videoUploadService.addFiles([file]);\n }).catch(() => {\n alert.error('Failed to get video resolution. Please try again later.');\n });\n }\n\n /**\n * Event listeners / Side effects below\n */\n \n useListenOn(\n SharedServiceChannels.VIDEO_UPLOAD,\n 'progress',\n (id: string, percentage: number) => {\n if (!uploadedFileId || id === uploadedFileId) {\n setUploadProgress(Math.floor(percentage));\n }\n }\n );\n\n useListenOn(\n SharedServiceChannels.VIDEO_UPLOAD,\n UploadEventNames.UPLOAD_SUCCESS,\n handleUploadSuccess,\n [ file, submit ]\n );\n\n useListenOn(\n SharedServiceChannels.VIDEO_UPLOAD,\n UploadEventNames.FILES_ADDED,\n handleFilesAdded,\n [ file, videoUploadService ]\n );\n\n return {\n status,\n uploadProgress,\n onSelectFile\n };\n}\n","import React from 'react';\n\nimport { LocationUtils } from 'libs/common/backbone/core/LocationUtils';\n\nexport function ProcessingVideo() {\n return (\n <div className='mt-3'>\n <div className='d-flex flex-column justify-content-center align-items-center gap-3 mb-1'>\n <span>The video is being processed currently. Please check back later.</span>\n <button className='btn btn-outline-dark' onClick={() => LocationUtils.Reload()}>Reload</button>\n </div>\n </div>\n );\n}\n","import React from 'react';\nimport { useDropzone } from 'react-dropzone';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { FileExtensions } from 'libs/shared/apps/upload/utils/FileExtensionsHelper';\nimport { FileSelectButton } from 'libs/shared/components/file-select-button/FileSelectButton';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { UploadSvg } from 'libs/shared/images/svg/actions/UploadSvg';\n\nimport { UploadVideoUtils } from './utils/UploadVideoUtils';\n\ninterface UploadVideoDropzoneProps {\n onSelectFile: (file: File) => void;\n hasError: boolean;\n}\n\nconst validVideoExtensions = UploadVideoUtils.getValidVideoExtensions();\n\nexport function UploadVideoDropzone(props: UploadVideoDropzoneProps) {\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n onDropAccepted: acceptedFiles => props.onSelectFile(acceptedFiles[0]),\n noClick: true,\n multiple: false,\n noKeyboard: true,\n accept: {\n 'video/*': validVideoExtensions\n }\n });\n \n return (\n <div {...getRootProps()} className={classNames('border rounded position-relative p-5 mt-2 text-center bg-light overflow-hidden', !!props.hasError && 'is-invalid')}>\n <input {...getInputProps()} />\n <div>\n <div className='mb-2 px-3'>\n Drag and drop a video to upload\n </div>\n <FileSelectButton\n svg={UploadSvg}\n className='btn btn-outline-dark'\n mimeType={FileExtensions.VIDEO}\n onFileSelect={fileList => props.onSelectFile(Array.from(fileList)[0])}\n >\n Upload Video\n </FileSelectButton>\n </div>\n {isDragActive && (\n <div className='position-absolute w-100 h-100 top-0 start-0 d-flex align-items-center justify-content-center bg-light gap-2'>\n <SvgContainer svg={UploadSvg} size={SvgContainerSize.Large} />\n <span className='h4 mb-0'>Drop file here to begin uploading</span>\n </div>\n )}\n </div>\n );\n}\n","import React from 'react';\n\nimport { FileExtensions } from 'libs/shared/apps/upload/utils/FileExtensionsHelper';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { FileSelectButton } from 'libs/shared/components/file-select-button/FileSelectButton';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { DeleteSvg } from 'libs/shared/images/svg/actions/DeleteSvg';\nimport { UploadSvg } from 'libs/shared/images/svg/actions/UploadSvg';\n\ninterface UploadVideoLabelProps {\n label: string;\n showRequiredStar?: boolean;\n note?: string;\n showReplaceFileButton?: boolean;\n replaceFileButtonHandler?: (file: File) => void;\n deleteFileButtonHandler?: () => void;\n resolution: [width: number, height: number];\n}\n\nexport function UploadVideoLabel(props: UploadVideoLabelProps) {\n const [ minWidth, minHeight ] = props.resolution;\n\n return (\n <div className='d-flex justify-content-between align-items-center'>\n <div>\n <label>{props.label}</label>\n {props.showRequiredStar && <span className='text-danger'>*</span>}\n <em className='ms-1 text-secondary'>\n {props.note ?? `(Minimum resolution is ${minWidth} x ${minHeight}px)`}\n </em>\n </div>\n <div className='d-flex align-items-center'>\n {props.showReplaceFileButton && !!props.replaceFileButtonHandler &&\n <Tooltip title='Replace video' placement='top' spanHack>\n <FileSelectButton\n className='btn btn-link'\n mimeType={FileExtensions.VIDEO}\n svg={UploadSvg}\n svgSize={SvgContainerSize.Standard}\n onFileSelect={fileList => props.replaceFileButtonHandler?.(Array.from(fileList)[0])}\n />\n </Tooltip>\n }\n\n {props.showReplaceFileButton && !!props.deleteFileButtonHandler && (\n <Tooltip title='Remove video' placement='top' spanHack>\n <DivButton onClick={props.deleteFileButtonHandler}>\n <SvgContainer svg={DeleteSvg} size={SvgContainerSize.Standard}></SvgContainer>\n </DivButton>\n </Tooltip>\n )}\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { PlaybackObject } from 'projects/player/interfaces/models/PlaybackObject';\nimport { ClickViewPlayer } from 'projects/player/react/Player';\n\ninterface UploadVideoPlayerProps {\n playerApiUrl: URL;\n viewKey?: string;\n offlinePlaybackObject?: PlaybackObject;\n hasError?: boolean;\n}\n\nexport function UploadVideoPlayer(props: React.PropsWithChildren<UploadVideoPlayerProps>) {\n return (\n <div className={classNames('mt-2', props.hasError && 'is-invalid')}>\n <ClickViewPlayer\n viewKey={props.viewKey}\n offlinePlaybackObject={props.offlinePlaybackObject}\n playerApi={props.playerApiUrl}\n autoplay={false}\n controls\n />\n {props.children}\n </div>\n );\n}\n","import React from 'react';\nimport { ProgressBar } from 'react-bootstrap';\n\ninterface UploadVideoProgressProps {\n progress: number;\n}\n\nexport function UploadVideoProgress(props: UploadVideoProgressProps) {\n return (\n <div className='mt-3'>\n <div className='d-flex justify-content-between mb-1'>\n <span>Uploading...</span>\n <span>{Math.round(props.progress)}%</span>\n </div>\n <ProgressBar\n now={props.progress}\n variant='info'\n animated={props.progress < 100}\n />\n </div>\n );\n}\n","import * as React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { getIn, useFormikContext } from 'formik';\n\nimport { Flight } from 'libs/common/react/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { ChevronDownSvg } from 'libs/shared/images/svg/arrows/ChevronDownSvg';\nimport { ChevronUpSvg } from 'libs/shared/images/svg/arrows/ChevronUpSvg';\nimport { PlayerViewKey } from 'libs/shared/interfaces';\n\nimport { useUploadVideo } from './hooks/useUploadVideo';\nimport { UploadVideoType, UploadVideoUtils } from './utils/UploadVideoUtils';\nimport { ProcessingVideo } from './ProcessingVideo';\nimport { UploadVideoDropzone } from './UploadVideoDropzone';\nimport { UploadVideoLabel } from './UploadVideoLabel';\nimport { UploadVideoPlayer } from './UploadVideoPlayer';\nimport { UploadVideoProgress } from './UploadVideoProgress';\n\nconst playerApiUrl = new URL(ClickView.Config.Urls.PlayerApi);\nconst validVideoExtensions = UploadVideoUtils.getValidVideoExtensions();\n\nexport interface PendingItem {\n masterVideoId: string;\n pendingProcessId: string;\n}\n\nexport interface UploadVideoProps<Values extends HashObject> {\n label: string;\n fieldName: keyof Values & string;\n hostedLibraryId: string;\n showRequiredStar?: boolean;\n onUploadComplete?: (pendingItem: PendingItem) => Promise<void>;\n uploadVideoType?: UploadVideoType;\n}\n\nexport function UploadVideo<Values extends HashObject>(props: UploadVideoProps<Values>): React.ReactElement {\n const uploadType = props.uploadVideoType ?? 'channel-video-banner';\n const formikProps = useFormikContext<Values>();\n const formData = formikProps.values[props.fieldName];\n const [ hideContent, setHideContent ] = React.useState(false);\n const {\n status,\n uploadProgress,\n onSelectFile\n } = useUploadVideo({\n type: uploadType,\n hostedLibraryId: props.hostedLibraryId,\n validVideoExtensions: validVideoExtensions,\n setFieldValue: (fileUrl: string) => formikProps.setFieldValue(props.fieldName, { fileUrl }),\n setFieldError: (error: string) => formikProps.setFieldError(props.fieldName, error),\n setFieldTouched: (touched: boolean) => formikProps.setFieldTouched(props.fieldName, touched),\n onUploadComplete: props.onUploadComplete\n });\n\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(\n formData?.id &&\n PlayerRequests.createViewKey(formData.id, MediaIdType.MasterObject)\n );\n\n const error = getIn(formikProps.errors, props.fieldName);\n const resolution = UploadVideoUtils.getUploadVideoTypeResolution(uploadType);\n\n const isUploading = status === 'uploading';\n const fileUrl = formData?.fileUrl;\n\n const hasVideo = !!viewKey.data?.viewKey || (!error && !!fileUrl);\n const isProcessing =\n formData?.id &&\n formData?.status === CurationStatus.Processing;\n\n function onDeleteVideoBanner() {\n formikProps.setFieldValue(props.fieldName, undefined);\n }\n\n return (\n <div className='form-group'>\n <div className={classNames('form-control h-auto py-2', !!error && 'border border-danger')}>\n <UploadVideoLabel\n label={props.label}\n showRequiredStar={props.showRequiredStar}\n showReplaceFileButton={hasVideo && !isUploading && !isProcessing}\n replaceFileButtonHandler={onSelectFile}\n deleteFileButtonHandler={onDeleteVideoBanner}\n resolution={resolution}\n />\n {(() => {\n if (isUploading)\n return <UploadVideoProgress progress={uploadProgress} />;\n\n if (isProcessing)\n return <ProcessingVideo />;\n \n if (!hasVideo)\n return <UploadVideoDropzone onSelectFile={onSelectFile} hasError={!!error} />;\n \n return (\n <>\n {!hideContent &&\n <UploadVideoPlayer\n playerApiUrl={playerApiUrl}\n viewKey={viewKey.data?.viewKey}\n offlinePlaybackObject={!viewKey.data?.viewKey && fileUrl ?\n UploadVideoUtils.getOfflinePlaybackObject(fileUrl) :\n undefined\n }\n hasError={!!error}\n />\n }\n <div className='d-flex justify-content-center'>\n <SvgContainer\n svg={hideContent ? ChevronDownSvg : ChevronUpSvg}\n size={SvgContainerSize.Large}\n className='svg-container cursor-pointer'\n tooltipSpanHack\n onClick={() => setHideContent(!hideContent)}\n title={hideContent ? 'Show video' : 'Hide video'}\n tooltipPlacement='left'\n />\n </div>\n </>\n );\n })()}\n <Form.Control.Feedback type='invalid'>{error}</Form.Control.Feedback>\n </div>\n </div>\n );\n}\n",":local {\n .input:not(:last-child) {\n padding-bottom: map-get($spacers, 2);\n }\n\n .suggestionsContainer {\n position: relative;\n z-index: 1;\n }\n}","import React from 'react';\nimport { Form as BsForm } from 'react-bootstrap';\nimport { Form, useFormikContext } from 'formik';\n\nimport { AppLink } from 'libs/common/backbone/core';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { SearchResults } from 'libs/shared/apps/search/interfaces';\nimport { AppLink as AppLinkComponent } from 'libs/shared/components/app-link/AppLink';\nimport { FormButtons } from 'libs/shared/components/forms/form-buttons/FormButtons';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { SearchBar } from 'libs/shared/components/search-bar/SearchBar';\nimport { SelectContentRegion } from 'libs/shared/components/select-content-region/SelectContentRegion';\nimport { TypeaheadErrorState } from 'libs/shared/components/typeahead-error-state/TypeaheadErrorState';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { Company, ContentRegionObject, Person } from 'libs/shared/interfaces';\n\nimport { ImageSelect } from 'shared/components';\nimport { ColorSelect } from 'shared/components/forms/color-select/ColorSelect';\nimport { PendingItem, UploadVideo } from 'shared/components/upload-video/UploadVideo';\nimport { Actions, AppChannels } from 'shared/constants';\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { EditPartnerFormData } from 'apps/content-partners/interfaces/EditPartnerFormData';\nimport { MAX_PARTNER_DESCRIPTION_LENGTH } from 'apps/content-partners/utils/ContentPartnerValidation';\n\nimport styles from './edit-content-partner-form.module.scss';\n\nconst PARTNER_PROFILE_BANNER_SIZE = { width: 1920, height: 1080 };\n\ninterface EditContentPartnerFormProps {\n isNew: boolean;\n contentRegions?: ContentRegionObject[];\n getRemoteUrl: () => string;\n onVideoUploadComplete?: (pendingItem: PendingItem) => Promise<void>;\n deleteAppLink: AppLink;\n}\n\nexport function EditContentPartnerForm(props: EditContentPartnerFormProps): JSX.Element {\n const formikProps = useFormikContext<EditPartnerFormData>();\n\n function setParentFieldValue(obj: Person | Company | null): void {\n formikProps.setFieldValue('parent', obj);\n formikProps.setFieldTouched('parent', true, false);\n }\n\n function onSelect(obj: Person | Company): void {\n setParentFieldValue(obj);\n }\n\n function onChangeName(e: React.ChangeEvent<HTMLInputElement>): void {\n formikProps.setFieldValue('name', e.target.value);\n\n if (!props.isNew)\n return;\n\n formikProps.setFieldValue('slug', TextHelper.slugify(e.target.value) ?? '');\n formikProps.setFieldTouched('slug', true);\n }\n\n function onClickClearInput(): void {\n setParentFieldValue(null);\n }\n\n const showParentError = formikProps.touched.parent && formikProps.errors.parent;\n\n function getParentError(): string {\n if (typeof formikProps.errors.parent === 'string') {\n return formikProps.errors.parent;\n }\n\n return '';\n }\n\n return (\n <Form>\n <FormField<EditPartnerFormData>\n label='Name'\n name='name'\n id='name'\n value={formikProps.values.name}\n placeholder='Enter a name for this content partner'\n onChange={onChangeName}\n showRequiredStar\n />\n\n <FormField<EditPartnerFormData>\n as='textarea'\n rows={2}\n label='Description'\n name='description'\n id='description'\n value={formikProps.values.description}\n placeholder='Enter a description for this content partner'\n maxLength={MAX_PARTNER_DESCRIPTION_LENGTH}\n showCharacterCounter\n showRequiredStar\n />\n\n <FormField<EditPartnerFormData>\n label='Website Link'\n name='websiteLink'\n id='websiteLink'\n value={formikProps.values.websiteLink}\n placeholder='Enter a website link for this content partner'\n />\n\n <FormField<EditPartnerFormData>\n label='Parent'\n name='parentId'\n id='parentId'\n showRequiredStar\n >\n {() => {\n return (\n <div className='form-group'>\n <div className={classNames(showParentError && 'is-invalid')}>\n <SearchBar<Company | Person>\n renderAsForm={false}\n theme={() => ({\n suggestionsContainerOpen: classNames('pb-0 pt-1 overflow-hidden bg-white border rounded position-absolute w-100', styles.suggestions),\n suggestionsContainer: `${styles.suggestionsContainer}`,\n input: classNames(showParentError && 'border-danger')\n })}\n activationLength={2}\n placeholder='Search for a parent company or person...'\n clearQueryOnSelect={true}\n searchIconPlacement={false}\n debounceTime={300}\n allowableSuggestionFetchRequestedReasons={[ 'input-changed', 'input-focused' ]}\n getRemoteUrl={() => props.getRemoteUrl()}\n getRemotePostBody={(q: string) => {\n return {\n query: q,\n indices: [{ index: 'company' }, { index: 'person' }],\n searchType: 'content'\n };\n }}\n onSuggestionSelected={onSelect}\n showClearInputIcon\n onClickClearInput={onClickClearInput}\n formatRemoteSuggestions={(suggestions: SearchResults<Company | Person>) => {\n return suggestions.results?.map((suggestion: Company | Person) => {\n return {\n ...suggestion,\n name: suggestion.name?.[0]\n };\n });\n }}\n initialQuery={formikProps.values.parent?.name || ''}\n getErrorStateComponent={onClickTryAgain =>\n <TypeaheadErrorState imageUrl={ImageUrls.TYPEAHEAD_ERROR} onClickTryAgain={onClickTryAgain} />\n }\n getEmptyStateComponent={query => (\n <div>\n Couldn't find any matches for {query}\n </div>\n )}\n />\n </div>\n <BsForm.Control.Feedback type='invalid'>\n {getParentError()}\n </BsForm.Control.Feedback>\n </div>\n );\n }}\n\n </FormField>\n\n <FormField<EditPartnerFormData>\n label='Slug'\n name='slug'\n infoText='Auto generated based on the parent company or person name'\n \n id='slug'\n value={formikProps.values.slug}\n readOnly={!props.isNew}\n disabled={!props.isNew}\n showRequiredStar\n />\n\n {props.contentRegions && !props.isNew && (\n <FormField<EditPartnerFormData>\n label='Content Regions'\n name='contentRegions'\n id='contentRegions'\n >\n {() => (\n <div className='w-50'>\n <SelectContentRegion\n type='checkbox'\n id={formikProps.values.id}\n options={props.contentRegions}\n selected={formikProps.values.contentRegions || []}\n onUpdate={contentRegions => formikProps.setFieldValue('contentRegions', contentRegions)}\n readOnly\n />\n </div>\n )}\n </FormField>\n )}\n\n <ImageSelect<EditPartnerFormData>\n imageType={ImageType.Covers}\n fieldName='cover'\n uploadAppLink={{ application: AppChannels.CONTENT_PARTNERS, action: Actions.ContentPartners.UPLOAD_IMAGE }}\n />\n <ImageSelect<EditPartnerFormData>\n imageType={ImageType.Logos}\n fieldName='logo'\n label='Logo'\n overrideDimensions={{ width: 512, height: 512 }}\n uploadAppLink={{ application: AppChannels.CONTENT_PARTNERS, action: Actions.ContentPartners.UPLOAD_IMAGE }}\n />\n\n {!props.isNew && (\n <ColorSelect\n label='Background colour'\n fieldName='backgroundColour'\n />\n )}\n\n <ImageSelect<EditPartnerFormData>\n imageType={ImageType.Banners}\n fieldName='banner'\n uploadAppLink={{ application: AppChannels.CONTENT_PARTNERS, action: Actions.ContentPartners.UPLOAD_IMAGE }}\n overrideDimensions={PARTNER_PROFILE_BANNER_SIZE}\n />\n\n {!!props.onVideoUploadComplete && (\n <UploadVideo<EditPartnerFormData>\n label='Video Banner'\n fieldName='videoBanner'\n hostedLibraryId={ClickView.Config.Resources.ClickViewRootLibrary}\n onUploadComplete={props.onVideoUploadComplete}\n />\n )}\n <div className='d-flex gap-2'>\n <FormButtons isNew={props.isNew} variant='dark' />\n {!props.isNew && (\n <AppLinkComponent\n appLink={props.deleteAppLink}\n className='btn btn-danger'\n >\n Delete Channel\n </AppLinkComponent>\n )}\n </div>\n </Form>\n );\n}\n","import React from 'react';\n\nimport { ContentPartnersHelper } from 'libs/shared/apps/content-partners/utils/ContentPartnersHelper';\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { ContentRegionObject, CurrentUser } from 'libs/shared/interfaces';\n\nimport { PendingItem } from 'shared/components/upload-video/UploadVideo';\nimport { Actions, AppChannels } from 'shared/constants';\nimport { ContentPartnerProfile } from 'shared/interfaces/models/ContentPartnerProfile';\n\nimport { EditPartnerFormData } from 'apps/content-partners/interfaces/EditPartnerFormData';\nimport { ContentPartnerValidationSchema } from 'apps/content-partners/utils/ContentPartnerValidation';\n\nimport { EditContentPartnerForm } from './EditContentPartnerForm';\n\ninterface EditContentPartnerProps {\n onVideoUploadComplete?: (pendingItem: PendingItem) => Promise<void>;\n onSave: (data: EditPartnerFormData, onDone?: () => void) => Promise<void>;\n contentPartner?: ContentPartnerProfile;\n contentRegions?: ContentRegionObject[];\n currentUser: CurrentUser;\n}\n\nexport function EditContentPartner(props: EditContentPartnerProps): JSX.Element {\n const websiteLink = props.contentPartner?.links ?\n ContentPartnersHelper.getPartnerLinkByType(props.contentPartner.links, 'website') :\n null;\n \n const initialValues: EditPartnerFormData = {\n id: props.contentPartner?.id,\n name: props.contentPartner?.name || '',\n logo: props.contentPartner?.logo || null,\n cover: props.contentPartner?.cover || null,\n banner: props.contentPartner?.banner || null,\n description: props.contentPartner?.description || '',\n slug: props.contentPartner?._slug.value || '',\n blurb: props.contentPartner?.blurb || '',\n contentSource: props.contentPartner?.contentSource || 1,\n partnerType: props.contentPartner?.partnerType || 2,\n backgroundColour: props.contentPartner?.metadata?.backgroundColour || null,\n contentRegions: props.contentPartner?.contentRegions?.data || [],\n parent: props.contentPartner?.person || props.contentPartner?.company,\n videoBanner: props.contentPartner?.videoBanner ?\n { id: props.contentPartner?.videoBanner.id, status: props.contentPartner?.videoBanner.status } :\n null,\n websiteLink: websiteLink || ''\n };\n\n function getRemoteUrl (): string {\n return `/api/search/v4/search/raw?userId=${props.currentUser?.id}&customerid=${props.currentUser?.customerId}`;\n }\n\n return (\n <FormWrapper<EditPartnerFormData>\n initialValues={initialValues}\n validationSchema={ContentPartnerValidationSchema}\n onSubmit={props.onSave}\n >\n <EditContentPartnerForm\n isNew={!(props.contentPartner && props.contentPartner.id)}\n contentRegions={props.contentRegions}\n getRemoteUrl={getRemoteUrl}\n onVideoUploadComplete={props.onVideoUploadComplete}\n deleteAppLink={{\n application: AppChannels.CONTENT_PARTNERS,\n action: Actions.ContentPartners.DELETE_CONTENT_PARTNER,\n args: [props.contentPartner?.id]\n }}\n />\n </FormWrapper>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Bo_WsHZq2.chunk.js","names":[],"sources":["../../../../../src/apps/content-partners/utils/ContentPartnerValidation.ts","../../../../../src/shared/components/upload-video/utils/UploadVideoUtils.ts","../../../../../src/shared/components/upload-video/hooks/useUploadVideo.ts","../../../../../src/shared/components/upload-video/ProcessingVideo.tsx","../../../../../src/shared/components/upload-video/UploadVideoDropzone.tsx","../../../../../src/shared/components/upload-video/UploadVideoLabel.tsx","../../../../../src/shared/components/upload-video/UploadVideoPlayer.tsx","../../../../../src/shared/components/upload-video/UploadVideoProgress.tsx","../../../../../src/shared/components/upload-video/UploadVideo.tsx","../../../../../src/apps/content-partners/components/edit-content-partner/edit-content-partner-form.module.scss","../../../../../src/apps/content-partners/components/edit-content-partner/EditContentPartnerForm.tsx","../../../../../src/apps/content-partners/components/edit-content-partner/EditContentPartner.tsx"],"sourcesContent":["import * as Yup from 'yup';\n\nimport { Company, ContentRegionObject, Person } from 'libs/shared/interfaces';\n\nimport { ImageValidationSchema } from 'shared/utils/validation/ImageValidationSchema';\n\nimport { EditPartnerFormData } from 'apps/content-partners/interfaces/EditPartnerFormData';\n\n// same limit as for companies\nexport const MAX_PARTNER_DESCRIPTION_LENGTH = 4096;\nexport const MAX_BLURB_LENGTH = 60;\n\nexport const ContentPartnerValidationSchema = Yup.object().shape<EditPartnerFormData>({\n name: Yup.string()\n .trim()\n .max(255, 'Name is too long')\n .min(1, 'Name is too short')\n .required('Name is required')\n .default(''),\n\n logo: ImageValidationSchema,\n\n banner: ImageValidationSchema,\n\n cover: ImageValidationSchema,\n\n description: Yup.string()\n .trim()\n .required('Description is required')\n .default('')\n .max(MAX_PARTNER_DESCRIPTION_LENGTH, `Descriptions cannot exceed ${MAX_PARTNER_DESCRIPTION_LENGTH} characters`),\n\n contentRegions: Yup.array<ContentRegionObject>()\n .default([]),\n\n slug: Yup.string()\n .trim()\n .required('Slug is required')\n .matches(/^[a-zA-Z0-9-]+$/, 'Slug can only contain letters, numbers, and hyphens'),\n\n parent: Yup.mixed<Company | Person>()\n .required('Parent is required'),\n\n backgroundColour: Yup.string(),\n websiteLink: Yup.string().url('Invalid website link')\n});\n","import { FileExtensions } from 'libs/shared/apps/upload/utils/FileExtensionsHelper';\n\nimport { PlaybackObject } from 'projects/player/interfaces/models/PlaybackObject';\n\nexport type UploadVideoType = 'channel-video-banner';\n\n/**\n * Minimum resolution for each upload type\n*/\nconst UploadVideoTypeResolutionMap: Record<UploadVideoType, [width: number, height: number]> = {\n 'channel-video-banner': [ 1920, 1080 ]\n};\n\nexport const UploadVideoUtils = {\n getValidVideoExtensions: () => FileExtensions.VIDEO.split(','),\n getUploadVideoTypeResolution: (uploadVideoType: UploadVideoType) => UploadVideoTypeResolutionMap[uploadVideoType],\n validateVideoResolutionForType: (type: UploadVideoType, resolution: { width: number, height: number }) => {\n const [ minWidth, minHeight ] = UploadVideoTypeResolutionMap[type];\n return resolution.width >= minWidth && resolution.height >= minHeight;\n },\n /**\n * Returns a minimal playback object for a video url to preview in the player\n */\n getOfflinePlaybackObject: (url: string): PlaybackObject => {\n return {\n videoId: 'preview',\n viewerId: '',\n viewerCustomerId: '',\n region: null,\n files: {\n progressive: [{\n url: url,\n mimeType: 'video/mp4',\n profile: 'hd',\n quality: 1080,\n label: 'Preview'\n }],\n fileToken: ''\n },\n chapters: { list: []},\n subtitles: { list: []},\n resources: { list: []},\n mediaType: 'MasterVideo',\n localCacheAddresses: [],\n mediaId: 'preview',\n settings: {\n showSubtitles: false,\n playbackProfile: 'hd',\n playbackProfileLocalCache: 'hd',\n playbackQuality: '1080',\n playbackQualityLocalCache: '1080',\n playbackQualityFallback: '1080',\n playbackSubtitleSizeDefault: 'medium'\n },\n title: 'Preview',\n ratingCode: '',\n seriesName: '',\n seasonNumber: 0,\n episodeNumber: 0\n };\n },\n getVideoResolution: async (file: File): Promise<{ width: number, height: number }> => {\n return new Promise((resolve, reject) => {\n if (!file.type.startsWith('video/')) {\n reject(new Error('The file is not a video'));\n }\n\n const video = document.createElement('video');\n const objectUrl = URL.createObjectURL(file);\n\n video.addEventListener('loadedmetadata', () => {\n const width = video.videoWidth;\n const height = video.videoHeight;\n URL.revokeObjectURL(objectUrl);\n resolve({ width, height });\n });\n\n video.addEventListener('error', () => {\n URL.revokeObjectURL(objectUrl);\n reject(new Error('Failed to load video metadata'));\n });\n\n video.src = objectUrl;\n });\n }\n};\n","import React from 'react';\n\nimport { useService } from 'libs/common/react/hooks/UseService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { UploadEventNames } from 'libs/shared/apps/upload/constants/UploadConstants';\nimport { BaseVideoUploadService } from 'libs/shared/apps/upload/services/UploadService';\nimport { SharedServiceChannels } from 'libs/shared/constants/RadioChannels';\nimport { SharedServices } from 'libs/shared/constants/SharedServices';\nimport { PendingProcessOrigin } from 'libs/shared/enums/PendingProcessOrigin';\nimport { SubtitleExtractionOptions } from 'libs/shared/enums/SubtitleExtractionOptions';\nimport { VideoOrigin } from 'libs/shared/enums/VideoOrigin';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useListenOn } from 'libs/shared/hooks/UseListenOn';\nimport { CurrentUser } from 'libs/shared/interfaces';\n\nimport { VideoRequests } from 'apps/videos/flight-requests/CuratorVideoRequests';\n\nimport { PendingItem } from '../UploadVideo';\nimport { UploadVideoType, UploadVideoUtils } from '../utils/UploadVideoUtils';\n\ninterface UploadVideoResponse {\n id: string;\n url: string;\n extension: string;\n name: string;\n size: number;\n}\n\ntype UploadStatus = 'idle' | 'uploading';\n\ninterface UseUploadVideoOptions {\n type: UploadVideoType;\n hostedLibraryId: string;\n validVideoExtensions: string[];\n setFieldError: (error: string) => void;\n setFieldValue: (fileUrl: string) => void;\n setFieldTouched: (touched: boolean) => void;\n onUploadComplete?: (pendingItem: PendingItem) => Promise<void>;\n}\n\nexport function useUploadVideo(options: UseUploadVideoOptions) {\n const alert = useAlerts();\n const fetchAsync = Flight.useGetFetchAsync();\n const [ uploadProgress, setUploadProgress ] = React.useState(0);\n const [ file, setFile ] = React.useState<File | null>(null);\n const [ status, setStatus ] = React.useState<UploadStatus>('idle');\n const [ uploadedFileId, setUploadedFileId ] = React.useState<string | null>(null);\n\n const videoUploadService = useService<BaseVideoUploadService>(SharedServices.VideoUpload);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n async function handleUploadSuccess(uploadedFile: File, response: UploadVideoResponse) {\n // Only process if this is the file we are currently tracking\n if (!file || !uploadedFile || uploadedFile !== file) return;\n if (!response || !response.url) return;\n \n const newFileId = response.id;\n const newFileUrl = response.url;\n \n setUploadedFileId(newFileId);\n setUploadProgress(100);\n\n options.setFieldValue(newFileUrl);\n \n await submit(uploadedFile, newFileId, newFileUrl);\n }\n\n // Handler for files added event - this runs after async processing in service\n function handleFilesAdded(files: File[]) {\n if (!file) return;\n\n // Check if our file is in the added files list\n const matchingFile = Array.from(files).find(f => f === file);\n\n if (!matchingFile)\n return;\n \n const upload = videoUploadService.getUpload(matchingFile);\n if (upload) {\n setUploadedFileId(upload.get('id'));\n }\n }\n\n async function submit(fileToSubmit: File, fileIdToSubmit: string, fileUrlToSubmit: string) {\n if (!currentUser.data) {\n alert.error('Cannot complete upload: User not loaded');\n return;\n }\n\n const upload = videoUploadService.getUpload(fileToSubmit);\n\n if (!upload) {\n alert.error('Error: Video upload not found');\n return;\n }\n \n upload.set('sending', true);\n\n try {\n const pendingItem = await fetchAsync<PendingItem>(\n VideoRequests.completeUpload({\n id: upload.get('id'),\n fileId: fileIdToSubmit,\n userId: currentUser.data.id,\n customerId: currentUser.data.customerId,\n libraryId: options.hostedLibraryId,\n fileUrl: fileUrlToSubmit,\n pendingProcessOrigin: PendingProcessOrigin.Upload,\n origin: VideoOrigin.Curator,\n video: {\n name: fileToSubmit.name,\n description: '',\n productionYear: new Date().getFullYear(),\n productionCompanies: [],\n producers: [],\n distributors: [],\n directors: [],\n subtitles: []\n },\n subtitleOptions: {\n subtitleExtractOptions: SubtitleExtractionOptions.EmbeddedOnly\n },\n autoCaption: false\n })\n );\n\n // Leave it upto the parent component to handle actual association of video with any object\n await options.onUploadComplete?.(pendingItem);\n } catch {\n alert.error('There was an error uploading the video. Please try again.');\n } finally {\n setStatus('idle');\n }\n }\n\n function onSelectFile(file: File) {\n // Check if its a valid video extension\n const fileExtension = '.' + file.name.split('.').pop()?.toLowerCase();\n\n if (!options.validVideoExtensions.includes(fileExtension)) {\n options.setFieldError(`The file must be a video file. Supported extensions are ${options.validVideoExtensions.join(', ')}`);\n return;\n }\n\n // Get video resolution\n UploadVideoUtils.getVideoResolution(file).then(resolution => {\n const [ minWidth, minHeight ] = UploadVideoUtils.getUploadVideoTypeResolution(options.type);\n if (!UploadVideoUtils.validateVideoResolutionForType(options.type, resolution)) {\n options.setFieldError(`The video must be at least ${minWidth} x ${minHeight}px. Uploaded video is ${resolution.width} x ${resolution.height}px.`);\n return;\n }\n \n // Reset state before starting upload\n setUploadedFileId(null);\n setStatus('uploading');\n setUploadProgress(0);\n setFile(file);\n options.setFieldTouched(true);\n videoUploadService.addFiles([file]);\n }).catch(() => {\n alert.error('Failed to get video resolution. Please try again later.');\n });\n }\n\n /**\n * Event listeners / Side effects below\n */\n \n useListenOn(\n SharedServiceChannels.VIDEO_UPLOAD,\n 'progress',\n (id: string, percentage: number) => {\n if (!uploadedFileId || id === uploadedFileId) {\n setUploadProgress(Math.floor(percentage));\n }\n }\n );\n\n useListenOn(\n SharedServiceChannels.VIDEO_UPLOAD,\n UploadEventNames.UPLOAD_SUCCESS,\n handleUploadSuccess,\n [ file, submit ]\n );\n\n useListenOn(\n SharedServiceChannels.VIDEO_UPLOAD,\n UploadEventNames.FILES_ADDED,\n handleFilesAdded,\n [ file, videoUploadService ]\n );\n\n return {\n status,\n uploadProgress,\n onSelectFile\n };\n}\n","import React from 'react';\n\nimport { LocationUtils } from 'libs/common/backbone/core/LocationUtils';\n\nexport function ProcessingVideo() {\n return (\n <div className='mt-3'>\n <div className='d-flex flex-column justify-content-center align-items-center gap-3 mb-1'>\n <span>The video is being processed currently. Please check back later.</span>\n <button className='btn btn-outline-dark' onClick={() => LocationUtils.Reload()}>Reload</button>\n </div>\n </div>\n );\n}\n","import React from 'react';\nimport { useDropzone } from 'react-dropzone';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { FileExtensions } from 'libs/shared/apps/upload/utils/FileExtensionsHelper';\nimport { FileSelectButton } from 'libs/shared/components/file-select-button/FileSelectButton';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { UploadSvg } from 'libs/shared/images/svg/actions/UploadSvg';\n\nimport { UploadVideoUtils } from './utils/UploadVideoUtils';\n\ninterface UploadVideoDropzoneProps {\n onSelectFile: (file: File) => void;\n hasError: boolean;\n}\n\nconst validVideoExtensions = UploadVideoUtils.getValidVideoExtensions();\n\nexport function UploadVideoDropzone(props: UploadVideoDropzoneProps) {\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n onDropAccepted: acceptedFiles => props.onSelectFile(acceptedFiles[0]),\n noClick: true,\n multiple: false,\n noKeyboard: true,\n accept: {\n 'video/*': validVideoExtensions\n }\n });\n \n return (\n <div {...getRootProps()} className={classNames('border rounded position-relative p-5 mt-2 text-center bg-light overflow-hidden', !!props.hasError && 'is-invalid')}>\n <input {...getInputProps()} />\n <div>\n <div className='mb-2 px-3'>\n Drag and drop a video to upload\n </div>\n <FileSelectButton\n svg={UploadSvg}\n className='btn btn-outline-dark'\n mimeType={FileExtensions.VIDEO}\n onFileSelect={fileList => props.onSelectFile(Array.from(fileList)[0])}\n >\n Upload Video\n </FileSelectButton>\n </div>\n {isDragActive && (\n <div className='position-absolute w-100 h-100 top-0 start-0 d-flex align-items-center justify-content-center bg-light gap-2'>\n <SvgContainer svg={UploadSvg} size={SvgContainerSize.Large} />\n <span className='h4 mb-0'>Drop file here to begin uploading</span>\n </div>\n )}\n </div>\n );\n}\n","import React from 'react';\n\nimport { FileExtensions } from 'libs/shared/apps/upload/utils/FileExtensionsHelper';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { FileSelectButton } from 'libs/shared/components/file-select-button/FileSelectButton';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { DeleteSvg } from 'libs/shared/images/svg/actions/DeleteSvg';\nimport { UploadSvg } from 'libs/shared/images/svg/actions/UploadSvg';\n\ninterface UploadVideoLabelProps {\n label: string;\n showRequiredStar?: boolean;\n note?: string;\n showReplaceFileButton?: boolean;\n replaceFileButtonHandler?: (file: File) => void;\n deleteFileButtonHandler?: () => void;\n resolution: [width: number, height: number];\n}\n\nexport function UploadVideoLabel(props: UploadVideoLabelProps) {\n const [ minWidth, minHeight ] = props.resolution;\n\n return (\n <div className='d-flex justify-content-between align-items-center'>\n <div>\n <label>{props.label}</label>\n {props.showRequiredStar && <span className='text-danger'>*</span>}\n <em className='ms-1 text-secondary'>\n {props.note ?? `(Minimum resolution is ${minWidth} x ${minHeight}px)`}\n </em>\n </div>\n <div className='d-flex align-items-center'>\n {props.showReplaceFileButton && !!props.replaceFileButtonHandler &&\n <Tooltip title='Replace video' placement='top' spanHack>\n <FileSelectButton\n className='btn btn-link'\n mimeType={FileExtensions.VIDEO}\n svg={UploadSvg}\n svgSize={SvgContainerSize.Standard}\n onFileSelect={fileList => props.replaceFileButtonHandler?.(Array.from(fileList)[0])}\n />\n </Tooltip>\n }\n\n {props.showReplaceFileButton && !!props.deleteFileButtonHandler && (\n <Tooltip title='Remove video' placement='top' spanHack>\n <DivButton onClick={props.deleteFileButtonHandler}>\n <SvgContainer svg={DeleteSvg} size={SvgContainerSize.Standard}></SvgContainer>\n </DivButton>\n </Tooltip>\n )}\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { PlaybackObject } from 'projects/player/interfaces/models/PlaybackObject';\nimport { ClickViewPlayer } from 'projects/player/react/Player';\n\ninterface UploadVideoPlayerProps {\n playerApiUrl: URL;\n viewKey?: string;\n offlinePlaybackObject?: PlaybackObject;\n hasError?: boolean;\n}\n\nexport function UploadVideoPlayer(props: React.PropsWithChildren<UploadVideoPlayerProps>) {\n return (\n <div className={classNames('mt-2', props.hasError && 'is-invalid')}>\n <ClickViewPlayer\n viewKey={props.viewKey}\n offlinePlaybackObject={props.offlinePlaybackObject}\n playerApi={props.playerApiUrl}\n autoplay={false}\n controls\n />\n {props.children}\n </div>\n );\n}\n","import React from 'react';\nimport { ProgressBar } from 'react-bootstrap';\n\ninterface UploadVideoProgressProps {\n progress: number;\n}\n\nexport function UploadVideoProgress(props: UploadVideoProgressProps) {\n return (\n <div className='mt-3'>\n <div className='d-flex justify-content-between mb-1'>\n <span>Uploading...</span>\n <span>{Math.round(props.progress)}%</span>\n </div>\n <ProgressBar\n now={props.progress}\n variant='info'\n animated={props.progress < 100}\n />\n </div>\n );\n}\n","import * as React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { getIn, useFormikContext } from 'formik';\n\nimport { Flight } from 'libs/common/react/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { ChevronDownSvg } from 'libs/shared/images/svg/arrows/ChevronDownSvg';\nimport { ChevronUpSvg } from 'libs/shared/images/svg/arrows/ChevronUpSvg';\nimport { PlayerViewKey } from 'libs/shared/interfaces';\n\nimport { useUploadVideo } from './hooks/useUploadVideo';\nimport { UploadVideoType, UploadVideoUtils } from './utils/UploadVideoUtils';\nimport { ProcessingVideo } from './ProcessingVideo';\nimport { UploadVideoDropzone } from './UploadVideoDropzone';\nimport { UploadVideoLabel } from './UploadVideoLabel';\nimport { UploadVideoPlayer } from './UploadVideoPlayer';\nimport { UploadVideoProgress } from './UploadVideoProgress';\n\nconst playerApiUrl = new URL(ClickView.Config.Urls.PlayerApi);\nconst validVideoExtensions = UploadVideoUtils.getValidVideoExtensions();\n\nexport interface PendingItem {\n masterVideoId: string;\n pendingProcessId: string;\n}\n\nexport interface UploadVideoProps<Values extends HashObject> {\n label: string;\n fieldName: keyof Values & string;\n hostedLibraryId: string;\n showRequiredStar?: boolean;\n onUploadComplete?: (pendingItem: PendingItem) => Promise<void>;\n uploadVideoType?: UploadVideoType;\n}\n\nexport function UploadVideo<Values extends HashObject>(props: UploadVideoProps<Values>): React.ReactElement {\n const uploadType = props.uploadVideoType ?? 'channel-video-banner';\n const formikProps = useFormikContext<Values>();\n const formData = formikProps.values[props.fieldName];\n const [ hideContent, setHideContent ] = React.useState(false);\n const {\n status,\n uploadProgress,\n onSelectFile\n } = useUploadVideo({\n type: uploadType,\n hostedLibraryId: props.hostedLibraryId,\n validVideoExtensions: validVideoExtensions,\n setFieldValue: (fileUrl: string) => formikProps.setFieldValue(props.fieldName, { fileUrl }),\n setFieldError: (error: string) => formikProps.setFieldError(props.fieldName, error),\n setFieldTouched: (touched: boolean) => formikProps.setFieldTouched(props.fieldName, touched),\n onUploadComplete: props.onUploadComplete\n });\n\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(\n formData?.id &&\n PlayerRequests.createViewKey(formData.id, MediaIdType.MasterObject)\n );\n\n const error = getIn(formikProps.errors, props.fieldName);\n const resolution = UploadVideoUtils.getUploadVideoTypeResolution(uploadType);\n\n const isUploading = status === 'uploading';\n const fileUrl = formData?.fileUrl;\n\n const hasVideo = !!viewKey.data?.viewKey || (!error && !!fileUrl);\n const isProcessing =\n formData?.id &&\n formData?.status === CurationStatus.Processing;\n\n function onDeleteVideoBanner() {\n formikProps.setFieldValue(props.fieldName, undefined);\n }\n\n return (\n <div className='form-group'>\n <div className={classNames('form-control h-auto py-2', !!error && 'border border-danger')}>\n <UploadVideoLabel\n label={props.label}\n showRequiredStar={props.showRequiredStar}\n showReplaceFileButton={hasVideo && !isUploading && !isProcessing}\n replaceFileButtonHandler={onSelectFile}\n deleteFileButtonHandler={onDeleteVideoBanner}\n resolution={resolution}\n />\n {(() => {\n if (isUploading)\n return <UploadVideoProgress progress={uploadProgress} />;\n\n if (isProcessing)\n return <ProcessingVideo />;\n \n if (!hasVideo)\n return <UploadVideoDropzone onSelectFile={onSelectFile} hasError={!!error} />;\n \n return (\n <>\n {!hideContent &&\n <UploadVideoPlayer\n playerApiUrl={playerApiUrl}\n viewKey={viewKey.data?.viewKey}\n offlinePlaybackObject={!viewKey.data?.viewKey && fileUrl ?\n UploadVideoUtils.getOfflinePlaybackObject(fileUrl) :\n undefined\n }\n hasError={!!error}\n />\n }\n <div className='d-flex justify-content-center'>\n <SvgContainer\n svg={hideContent ? ChevronDownSvg : ChevronUpSvg}\n size={SvgContainerSize.Large}\n className='svg-container cursor-pointer'\n tooltipSpanHack\n onClick={() => setHideContent(!hideContent)}\n title={hideContent ? 'Show video' : 'Hide video'}\n tooltipPlacement='left'\n />\n </div>\n </>\n );\n })()}\n <Form.Control.Feedback type='invalid'>{error}</Form.Control.Feedback>\n </div>\n </div>\n );\n}\n",":local {\n .input:not(:last-child) {\n padding-bottom: map-get($spacers, 2);\n }\n\n .suggestionsContainer {\n position: relative;\n z-index: 1;\n }\n}","import React from 'react';\nimport { Form as BsForm } from 'react-bootstrap';\nimport { Form, useFormikContext } from 'formik';\n\nimport { AppLink } from 'libs/common/backbone/core';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { SearchResults } from 'libs/shared/apps/search/interfaces';\nimport { AppLink as AppLinkComponent } from 'libs/shared/components/app-link/AppLink';\nimport { FormButtons } from 'libs/shared/components/forms/form-buttons/FormButtons';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { SearchBar } from 'libs/shared/components/search-bar/SearchBar';\nimport { SelectContentRegion } from 'libs/shared/components/select-content-region/SelectContentRegion';\nimport { TypeaheadErrorState } from 'libs/shared/components/typeahead-error-state/TypeaheadErrorState';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { Company, ContentRegionObject, Person } from 'libs/shared/interfaces';\n\nimport { ImageSelect } from 'shared/components';\nimport { ColorSelect } from 'shared/components/forms/color-select/ColorSelect';\nimport { PendingItem, UploadVideo } from 'shared/components/upload-video/UploadVideo';\nimport { Actions, AppChannels } from 'shared/constants';\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { EditPartnerFormData } from 'apps/content-partners/interfaces/EditPartnerFormData';\nimport { MAX_PARTNER_DESCRIPTION_LENGTH } from 'apps/content-partners/utils/ContentPartnerValidation';\n\nimport styles from './edit-content-partner-form.module.scss';\n\nconst PARTNER_PROFILE_BANNER_SIZE = { width: 1920, height: 1080 };\n\ninterface EditContentPartnerFormProps {\n isNew: boolean;\n contentRegions?: ContentRegionObject[];\n getRemoteUrl: () => string;\n onVideoUploadComplete?: (pendingItem: PendingItem) => Promise<void>;\n deleteAppLink: AppLink;\n}\n\nexport function EditContentPartnerForm(props: EditContentPartnerFormProps): JSX.Element {\n const formikProps = useFormikContext<EditPartnerFormData>();\n\n function setParentFieldValue(obj: Person | Company | null): void {\n formikProps.setFieldValue('parent', obj);\n formikProps.setFieldTouched('parent', true, false);\n }\n\n function onSelect(obj: Person | Company): void {\n setParentFieldValue(obj);\n }\n\n function onChangeName(e: React.ChangeEvent<HTMLInputElement>): void {\n formikProps.setFieldValue('name', e.target.value);\n\n if (!props.isNew)\n return;\n\n formikProps.setFieldValue('slug', TextHelper.slugify(e.target.value) ?? '');\n formikProps.setFieldTouched('slug', true);\n }\n\n function onClickClearInput(): void {\n setParentFieldValue(null);\n }\n\n const showParentError = formikProps.touched.parent && formikProps.errors.parent;\n\n function getParentError(): string {\n if (typeof formikProps.errors.parent === 'string') {\n return formikProps.errors.parent;\n }\n\n return '';\n }\n\n return (\n <Form>\n <FormField<EditPartnerFormData>\n label='Name'\n name='name'\n id='name'\n value={formikProps.values.name}\n placeholder='Enter a name for this content partner'\n onChange={onChangeName}\n showRequiredStar\n />\n\n <FormField<EditPartnerFormData>\n as='textarea'\n rows={2}\n label='Description'\n name='description'\n id='description'\n value={formikProps.values.description}\n placeholder='Enter a description for this content partner'\n maxLength={MAX_PARTNER_DESCRIPTION_LENGTH}\n showCharacterCounter\n showRequiredStar\n />\n\n <FormField<EditPartnerFormData>\n label='Website Link'\n name='websiteLink'\n id='websiteLink'\n value={formikProps.values.websiteLink}\n placeholder='Enter a website link for this content partner'\n />\n\n <FormField<EditPartnerFormData>\n label='Parent'\n name='parentId'\n id='parentId'\n showRequiredStar\n >\n {() => {\n return (\n <div className='form-group'>\n <div className={classNames(showParentError && 'is-invalid')}>\n <SearchBar<Company | Person>\n renderAsForm={false}\n theme={() => ({\n suggestionsContainerOpen: classNames('pb-0 pt-1 overflow-hidden bg-white border rounded position-absolute w-100', styles.suggestions),\n suggestionsContainer: `${styles.suggestionsContainer}`,\n input: classNames(showParentError && 'border-danger')\n })}\n activationLength={2}\n placeholder='Search for a parent company or person...'\n clearQueryOnSelect={true}\n searchIconPlacement={false}\n debounceTime={300}\n allowableSuggestionFetchRequestedReasons={[ 'input-changed', 'input-focused' ]}\n getRemoteUrl={() => props.getRemoteUrl()}\n getRemotePostBody={(q: string) => {\n return {\n query: q,\n indices: [{ index: 'company' }, { index: 'person' }],\n searchType: 'content'\n };\n }}\n onSuggestionSelected={onSelect}\n showClearInputIcon\n onClickClearInput={onClickClearInput}\n formatRemoteSuggestions={(suggestions: SearchResults<Company | Person>) => {\n return suggestions.results?.map((suggestion: Company | Person) => {\n return {\n ...suggestion,\n name: suggestion.name?.[0]\n };\n });\n }}\n initialQuery={formikProps.values.parent?.name || ''}\n getErrorStateComponent={onClickTryAgain =>\n <TypeaheadErrorState imageUrl={ImageUrls.TYPEAHEAD_ERROR} onClickTryAgain={onClickTryAgain} />\n }\n getEmptyStateComponent={query => (\n <div>\n Couldn't find any matches for {query}\n </div>\n )}\n />\n </div>\n <BsForm.Control.Feedback type='invalid'>\n {getParentError()}\n </BsForm.Control.Feedback>\n </div>\n );\n }}\n\n </FormField>\n\n <FormField<EditPartnerFormData>\n label='Slug'\n name='slug'\n infoText='Auto generated based on the parent company or person name'\n \n id='slug'\n value={formikProps.values.slug}\n readOnly={!props.isNew}\n disabled={!props.isNew}\n showRequiredStar\n />\n\n {props.contentRegions && !props.isNew && (\n <FormField<EditPartnerFormData>\n label='Content Regions'\n name='contentRegions'\n id='contentRegions'\n >\n {() => (\n <div className='w-50'>\n <SelectContentRegion\n type='checkbox'\n id={formikProps.values.id}\n options={props.contentRegions}\n selected={formikProps.values.contentRegions || []}\n onUpdate={contentRegions => formikProps.setFieldValue('contentRegions', contentRegions)}\n readOnly\n />\n </div>\n )}\n </FormField>\n )}\n\n <ImageSelect<EditPartnerFormData>\n imageType={ImageType.Covers}\n fieldName='cover'\n uploadAppLink={{ application: AppChannels.CONTENT_PARTNERS, action: Actions.ContentPartners.UPLOAD_IMAGE }}\n />\n <ImageSelect<EditPartnerFormData>\n imageType={ImageType.Logos}\n fieldName='logo'\n label='Logo'\n overrideDimensions={{ width: 512, height: 512 }}\n uploadAppLink={{ application: AppChannels.CONTENT_PARTNERS, action: Actions.ContentPartners.UPLOAD_IMAGE }}\n />\n\n {!props.isNew && (\n <ColorSelect\n label='Background colour'\n fieldName='backgroundColour'\n />\n )}\n\n <ImageSelect<EditPartnerFormData>\n imageType={ImageType.Banners}\n fieldName='banner'\n uploadAppLink={{ application: AppChannels.CONTENT_PARTNERS, action: Actions.ContentPartners.UPLOAD_IMAGE }}\n overrideDimensions={PARTNER_PROFILE_BANNER_SIZE}\n />\n\n {!!props.onVideoUploadComplete && (\n <UploadVideo<EditPartnerFormData>\n label='Video Banner'\n fieldName='videoBanner'\n hostedLibraryId={ClickView.Config.Resources.ClickViewRootLibrary}\n onUploadComplete={props.onVideoUploadComplete}\n />\n )}\n <div className='d-flex gap-2'>\n <FormButtons isNew={props.isNew} variant='dark' />\n {!props.isNew && (\n <AppLinkComponent\n appLink={props.deleteAppLink}\n className='btn btn-danger'\n >\n Delete Channel\n </AppLinkComponent>\n )}\n </div>\n </Form>\n );\n}\n","import React from 'react';\n\nimport { ContentPartnersHelper } from 'libs/shared/apps/content-partners/utils/ContentPartnersHelper';\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { ContentRegionObject, CurrentUser } from 'libs/shared/interfaces';\n\nimport { PendingItem } from 'shared/components/upload-video/UploadVideo';\nimport { Actions, AppChannels } from 'shared/constants';\nimport { ContentPartnerProfile } from 'shared/interfaces/models/ContentPartnerProfile';\n\nimport { EditPartnerFormData } from 'apps/content-partners/interfaces/EditPartnerFormData';\nimport { ContentPartnerValidationSchema } from 'apps/content-partners/utils/ContentPartnerValidation';\n\nimport { EditContentPartnerForm } from './EditContentPartnerForm';\n\ninterface EditContentPartnerProps {\n onVideoUploadComplete?: (pendingItem: PendingItem) => Promise<void>;\n onSave: (data: EditPartnerFormData, onDone?: () => void) => Promise<void>;\n contentPartner?: ContentPartnerProfile;\n contentRegions?: ContentRegionObject[];\n currentUser: CurrentUser;\n}\n\nexport function EditContentPartner(props: EditContentPartnerProps): JSX.Element {\n const websiteLink = props.contentPartner?.links ?\n ContentPartnersHelper.getPartnerLinkByType(props.contentPartner.links, 'website') :\n null;\n \n const initialValues: EditPartnerFormData = {\n id: props.contentPartner?.id,\n name: props.contentPartner?.name || '',\n logo: props.contentPartner?.logo || null,\n cover: props.contentPartner?.cover || null,\n banner: props.contentPartner?.banner || null,\n description: props.contentPartner?.description || '',\n slug: props.contentPartner?._slug.value || '',\n blurb: props.contentPartner?.blurb || '',\n contentSource: props.contentPartner?.contentSource || 1,\n partnerType: props.contentPartner?.partnerType || 2,\n backgroundColour: props.contentPartner?.metadata?.backgroundColour || null,\n contentRegions: props.contentPartner?.contentRegions?.data || [],\n parent: props.contentPartner?.person || props.contentPartner?.company,\n videoBanner: props.contentPartner?.videoBanner ?\n { id: props.contentPartner?.videoBanner.id, status: props.contentPartner?.videoBanner.status } :\n null,\n websiteLink: websiteLink || ''\n };\n\n function getRemoteUrl (): string {\n return `/api/search/v4/search/raw?userId=${props.currentUser?.id}&customerid=${props.currentUser?.customerId}`;\n }\n\n return (\n <FormWrapper<EditPartnerFormData>\n initialValues={initialValues}\n validationSchema={ContentPartnerValidationSchema}\n onSubmit={props.onSave}\n >\n <EditContentPartnerForm\n isNew={!(props.contentPartner && props.contentPartner.id)}\n contentRegions={props.contentRegions}\n getRemoteUrl={getRemoteUrl}\n onVideoUploadComplete={props.onVideoUploadComplete}\n deleteAppLink={{\n application: AppChannels.CONTENT_PARTNERS,\n action: Actions.ContentPartners.DELETE_CONTENT_PARTNER,\n args: [props.contentPartner?.id]\n }}\n />\n </FormWrapper>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{C as e,a as t,i as n,ln as r}from"./rp704-Pm.chunk.js";import{t as i}from"./Di_u2uix.chunk.js";import{t as a}from"./BvMTtGLi.chunk.js";import"./CfCYHRuo.chunk.js";import{G as o}from"./C7Gmh7eY.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"./BDwjs8qz.chunk.js";import{t as d}from"./Bwpvc7Th2.chunk.js";import{t as f}from"./D0JviwKV2.chunk.js";import{t as p}from"./0JxT4yCF.chunk.js";var m=r(t()),h=n();function g(t){let n=d(),r=l(),g=c(o.getMasterVideo(t.videoId)),_=g.data?.status===u.Published,[v,y]=m.useState(!1),[b,x]=m.useState(!1);async function S(){y(!0);try{await r(o.deleteVideo(t.videoId)),n.success(`Successfully deleted video`),y(!1),t.closePopup(),e.trigger({application:a.VIDEOS,action:i.Videos.VIDEOS_HOME})}catch{n.error(`Failed to delete video`),y(!1),t.closePopup()}}let C=!!g.data;return(0,h.jsx)(s,{title:`Delete Video`,closePopup:t.closePopup,showLoadingSpinner:!C,children:!!C&&(0,h.jsxs)(h.Fragment,{children:[_&&(0,h.jsx)(`p`,{children:`This video is currently published. It must be archived before it can be deleted.`}),!_&&(0,h.jsxs)(`div`,{children:[(0,h.jsxs)(`p`,{children:[`Are you sure you want to delete `,(0,h.jsxs)(`strong`,{children:[g.data.name,` `]}),`? This action cannot be undone.`]}),(0,h.jsx)(p,{challengePhrase:g.data.name,onChallengePass:e=>x(e)})]}),(0,h.jsxs)(f,{className:`mt-3`,children:[(0,h.jsx)(f.Cancel,{onClick:t.closePopup}),(0,h.jsx)(f.Submit,{variant:`danger`,onClick:S,text:`Delete`,showSpinner:v,disabled:_||!b})]})]})})}export{g as DeleteVideoView};
2
- //# sourceMappingURL=CnyrKBG0.chunk.js.map
1
+ import{C as e,a as t,i as n,ln as r}from"./rp704-Pm.chunk.js";import{t as i}from"./Di_u2uix.chunk.js";import{t as a}from"./BvMTtGLi.chunk.js";import"./CfCYHRuo.chunk.js";import{G as o}from"./DWHKdmdQ.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"./BDwjs8qz.chunk.js";import{t as d}from"./Bwpvc7Th2.chunk.js";import{t as f}from"./D0JviwKV2.chunk.js";import{t as p}from"./0JxT4yCF.chunk.js";var m=r(t()),h=n();function g(t){let n=d(),r=l(),g=c(o.getMasterVideo(t.videoId)),_=g.data?.status===u.Published,[v,y]=m.useState(!1),[b,x]=m.useState(!1);async function S(){y(!0);try{await r(o.deleteVideo(t.videoId)),n.success(`Successfully deleted video`),y(!1),t.closePopup(),e.trigger({application:a.VIDEOS,action:i.Videos.VIDEOS_HOME})}catch{n.error(`Failed to delete video`),y(!1),t.closePopup()}}let C=!!g.data;return(0,h.jsx)(s,{title:`Delete Video`,closePopup:t.closePopup,showLoadingSpinner:!C,children:!!C&&(0,h.jsxs)(h.Fragment,{children:[_&&(0,h.jsx)(`p`,{children:`This video is currently published. It must be archived before it can be deleted.`}),!_&&(0,h.jsxs)(`div`,{children:[(0,h.jsxs)(`p`,{children:[`Are you sure you want to delete `,(0,h.jsxs)(`strong`,{children:[g.data.name,` `]}),`? This action cannot be undone.`]}),(0,h.jsx)(p,{challengePhrase:g.data.name,onChallengePass:e=>x(e)})]}),(0,h.jsxs)(f,{className:`mt-3`,children:[(0,h.jsx)(f.Cancel,{onClick:t.closePopup}),(0,h.jsx)(f.Submit,{variant:`danger`,onClick:S,text:`Delete`,showSpinner:v,disabled:_||!b})]})]})})}export{g as DeleteVideoView};
2
+ //# sourceMappingURL=BpV5ErII.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CnyrKBG0.chunk.js","names":[],"sources":["../../../../../src/apps/videos/views/delete-video/DeleteVideoView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/flight';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { PopupViewProps, Video } from 'libs/shared/interfaces';\n\nimport { ConfirmInputChallenge } from 'shared/components/confirm-input-challenge/ConfirmInputChallenge';\nimport { Actions, AppChannels } from 'shared/constants';\n\nimport { AssemblyLineRequests } from 'apps/assembly-line/flight-requests/AssemblyLineRequests';\n\ninterface DeleteVideoViewProps extends PopupViewProps {\n videoId: string;\n}\n\nexport function DeleteVideoView(props: DeleteVideoViewProps): JSX.Element {\n const alerts = useAlerts();\n const fetchAsync = Flight.useGetFetchAsync();\n const video = Flight.useBasicFetch<Video>(AssemblyLineRequests.getMasterVideo(props.videoId));\n\n const isPublished = video.data?.status === CurationStatus.Published;\n\n const [ showButtonSpinner, setShowButtonSpinner ] = React.useState(false);\n const [ isChallengePassed, setIsChallengePassed ] = React.useState(false);\n\n async function deleteVideo() {\n setShowButtonSpinner(true);\n\n try {\n await fetchAsync(AssemblyLineRequests.deleteVideo(props.videoId));\n alerts.success('Successfully deleted video');\n setShowButtonSpinner(false);\n props.closePopup();\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.VIDEOS_HOME\n });\n } catch {\n alerts.error('Failed to delete video');\n setShowButtonSpinner(false);\n props.closePopup();\n }\n }\n\n const dataLoaded = !!video.data;\n\n return (\n <Popup title='Delete Video' closePopup={props.closePopup} showLoadingSpinner={!dataLoaded}>\n {!!dataLoaded &&\n <>\n {isPublished && (\n <p>\n This video is currently published. It must be archived before it can be deleted.\n </p>\n )}\n {!isPublished && (\n <div>\n <p>\n Are you sure you want to delete <strong>{video.data.name} </strong>? This action cannot be undone.\n </p>\n <ConfirmInputChallenge\n challengePhrase={video.data.name}\n onChallengePass={(isPass: boolean) => setIsChallengePassed(isPass)}\n />\n </div>\n )}\n <PopupButtons className='mt-3'>\n <PopupButtons.Cancel onClick={props.closePopup} />\n <PopupButtons.Submit\n variant='danger'\n onClick={deleteVideo}\n text='Delete'\n showSpinner={showButtonSpinner}\n disabled={isPublished || !isChallengePassed}\n />\n </PopupButtons>\n </>\n }\n </Popup>\n );\n}\n"],"mappings":"2fAoBA,SAAgB,EAAgB,EAA0C,CACxE,IAAM,EAAS,EAAU,EACnB,EAAa,EAAwB,EACrC,EAAQ,EAA4B,EAAqB,eAAe,EAAM,OAAO,CAAC,EAEtF,EAAc,EAAM,MAAM,SAAW,EAAe,UAEpD,CAAE,EAAmB,GAAA,EAA+B,SAAS,EAAK,EAClE,CAAE,EAAmB,GAAA,EAA+B,SAAS,EAAK,EAExE,eAAe,GAAc,CAC3B,EAAqB,EAAI,EAEzB,GAAI,CACF,MAAM,EAAW,EAAqB,YAAY,EAAM,OAAO,CAAC,EAChE,EAAO,QAAQ,4BAA4B,EAC3C,EAAqB,EAAK,EAC1B,EAAM,WAAW,EAEjB,EAAmB,QAAQ,CACzB,YAAa,EAAY,OACzB,OAAQ,EAAQ,OAAO,WACzB,CAAC,CACH,MAAQ,CACN,EAAO,MAAM,wBAAwB,EACrC,EAAqB,EAAK,EAC1B,EAAM,WAAW,CACnB,CACF,CAEA,IAAM,EAAa,CAAC,CAAC,EAAM,KAE3B,OACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAO,MAAM,eAAe,WAAY,EAAM,WAAY,mBAAoB,CAAC,WAC5E,CAAC,CAAC,IACD,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,CACG,IACC,EAAA,EAAA,IAAA,CAAC,IAAD,CAAA,SAAG,kFAEA,CAAA,EAEJ,CAAC,IACA,EAAA,EAAA,KAAA,CAAC,MAAD,CAAA,SAAA,EACE,EAAA,EAAA,KAAA,CAAC,IAAD,CAAA,SAAA,CAAG,oCAC+B,EAAA,EAAA,KAAA,CAAC,SAAD,CAAA,SAAA,CAAS,EAAM,KAAK,KAAK,GAAS,CAAA,CAAA,EAAC,iCAClE,CAAA,CAAA,GACH,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,gBAAiB,EAAM,KAAK,KAC5B,gBAAkB,GAAoB,EAAqB,CAAM,CAClE,CAAA,CACE,CAAA,CAAA,GAEP,EAAA,EAAA,KAAA,CAAC,EAAD,CAAc,UAAU,gBAAxB,EACE,EAAA,EAAA,IAAA,CAAC,EAAa,OAAd,CAAqB,QAAS,EAAM,UAAa,CAAA,GACjD,EAAA,EAAA,IAAA,CAAC,EAAa,OAAd,CACE,QAAQ,SACR,QAAS,EACT,KAAK,SACL,YAAa,EACb,SAAU,GAAe,CAAC,CAC3B,CAAA,CACW,GACd,CAAA,CAAA,CAEC,CAAA,CAEX"}
1
+ {"version":3,"file":"BpV5ErII.chunk.js","names":[],"sources":["../../../../../src/apps/videos/views/delete-video/DeleteVideoView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/flight';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { PopupViewProps, Video } from 'libs/shared/interfaces';\n\nimport { ConfirmInputChallenge } from 'shared/components/confirm-input-challenge/ConfirmInputChallenge';\nimport { Actions, AppChannels } from 'shared/constants';\n\nimport { AssemblyLineRequests } from 'apps/assembly-line/flight-requests/AssemblyLineRequests';\n\ninterface DeleteVideoViewProps extends PopupViewProps {\n videoId: string;\n}\n\nexport function DeleteVideoView(props: DeleteVideoViewProps): JSX.Element {\n const alerts = useAlerts();\n const fetchAsync = Flight.useGetFetchAsync();\n const video = Flight.useBasicFetch<Video>(AssemblyLineRequests.getMasterVideo(props.videoId));\n\n const isPublished = video.data?.status === CurationStatus.Published;\n\n const [ showButtonSpinner, setShowButtonSpinner ] = React.useState(false);\n const [ isChallengePassed, setIsChallengePassed ] = React.useState(false);\n\n async function deleteVideo() {\n setShowButtonSpinner(true);\n\n try {\n await fetchAsync(AssemblyLineRequests.deleteVideo(props.videoId));\n alerts.success('Successfully deleted video');\n setShowButtonSpinner(false);\n props.closePopup();\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.VIDEOS_HOME\n });\n } catch {\n alerts.error('Failed to delete video');\n setShowButtonSpinner(false);\n props.closePopup();\n }\n }\n\n const dataLoaded = !!video.data;\n\n return (\n <Popup title='Delete Video' closePopup={props.closePopup} showLoadingSpinner={!dataLoaded}>\n {!!dataLoaded &&\n <>\n {isPublished && (\n <p>\n This video is currently published. It must be archived before it can be deleted.\n </p>\n )}\n {!isPublished && (\n <div>\n <p>\n Are you sure you want to delete <strong>{video.data.name} </strong>? This action cannot be undone.\n </p>\n <ConfirmInputChallenge\n challengePhrase={video.data.name}\n onChallengePass={(isPass: boolean) => setIsChallengePassed(isPass)}\n />\n </div>\n )}\n <PopupButtons className='mt-3'>\n <PopupButtons.Cancel onClick={props.closePopup} />\n <PopupButtons.Submit\n variant='danger'\n onClick={deleteVideo}\n text='Delete'\n showSpinner={showButtonSpinner}\n disabled={isPublished || !isChallengePassed}\n />\n </PopupButtons>\n </>\n }\n </Popup>\n );\n}\n"],"mappings":"2fAoBA,SAAgB,EAAgB,EAA0C,CACxE,IAAM,EAAS,EAAU,EACnB,EAAa,EAAwB,EACrC,EAAQ,EAA4B,EAAqB,eAAe,EAAM,OAAO,CAAC,EAEtF,EAAc,EAAM,MAAM,SAAW,EAAe,UAEpD,CAAE,EAAmB,GAAA,EAA+B,SAAS,EAAK,EAClE,CAAE,EAAmB,GAAA,EAA+B,SAAS,EAAK,EAExE,eAAe,GAAc,CAC3B,EAAqB,EAAI,EAEzB,GAAI,CACF,MAAM,EAAW,EAAqB,YAAY,EAAM,OAAO,CAAC,EAChE,EAAO,QAAQ,4BAA4B,EAC3C,EAAqB,EAAK,EAC1B,EAAM,WAAW,EAEjB,EAAmB,QAAQ,CACzB,YAAa,EAAY,OACzB,OAAQ,EAAQ,OAAO,WACzB,CAAC,CACH,MAAQ,CACN,EAAO,MAAM,wBAAwB,EACrC,EAAqB,EAAK,EAC1B,EAAM,WAAW,CACnB,CACF,CAEA,IAAM,EAAa,CAAC,CAAC,EAAM,KAE3B,OACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAO,MAAM,eAAe,WAAY,EAAM,WAAY,mBAAoB,CAAC,WAC5E,CAAC,CAAC,IACD,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,CACG,IACC,EAAA,EAAA,IAAA,CAAC,IAAD,CAAA,SAAG,kFAEA,CAAA,EAEJ,CAAC,IACA,EAAA,EAAA,KAAA,CAAC,MAAD,CAAA,SAAA,EACE,EAAA,EAAA,KAAA,CAAC,IAAD,CAAA,SAAA,CAAG,oCAC+B,EAAA,EAAA,KAAA,CAAC,SAAD,CAAA,SAAA,CAAS,EAAM,KAAK,KAAK,GAAS,CAAA,CAAA,EAAC,iCAClE,CAAA,CAAA,GACH,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,gBAAiB,EAAM,KAAK,KAC5B,gBAAkB,GAAoB,EAAqB,CAAM,CAClE,CAAA,CACE,CAAA,CAAA,GAEP,EAAA,EAAA,KAAA,CAAC,EAAD,CAAc,UAAU,gBAAxB,EACE,EAAA,EAAA,IAAA,CAAC,EAAa,OAAd,CAAqB,QAAS,EAAM,UAAa,CAAA,GACjD,EAAA,EAAA,IAAA,CAAC,EAAa,OAAd,CACE,QAAQ,SACR,QAAS,EACT,KAAK,SACL,YAAa,EACb,SAAU,GAAe,CAAC,CAC3B,CAAA,CACW,GACd,CAAA,CAAA,CAEC,CAAA,CAEX"}
@@ -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"./CKDwh_l_2.chunk.js";import{t as o}from"./9t2u0ui42.chunk.js";import{t as s}from"./oGkpmMft2.chunk.js";e();var c={container:`_container_16q2c_1`,subHeader:`_subHeader_16q2c_4`,main:`_main_16q2c_7`,leftNav:`_leftNav_16q2c_10`,navLink:`_navLink_16q2c_13`},l=t(),u={application:i.MARKETING_APP,action:r.Marketing.EXIT};function d({leftNavItems:e,children:t}){return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(o,{closeAppLink:u}),(0,l.jsxs)(`div`,{className:`d-flex flex-row g-0 border-bottom ${c.container}`,children:[(0,l.jsxs)(`div`,{className:`border-end ${c.leftNav} px-3 pt-5 pb-3 d-flex flex-column justify-content-between`,children:[(0,l.jsx)(`div`,{className:`d-flex flex-column justify-content-between gap-2`,children:e.map((e,t)=>(0,l.jsx)(n,{className:`text-lg d-flex justify-content-start btn ${c.navLink} ${e.isActive?`bg-light-blue fw-semibold`:``}`,appLink:{application:i.MARKETING_APP,action:e.action},children:e.text},t))}),(0,l.jsx)(a,{appLink:u})]}),(0,l.jsx)(`div`,{className:`${c.main} d-flex flex-column gap-5 p-3`,children:t})]}),(0,l.jsx)(`div`,{id:s.getPortalId()})]})}export{d as t};
2
- //# sourceMappingURL=Dfhl7nI62.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"./CKDwh_l_2.chunk.js";import{t as o}from"./9t2u0ui42.chunk.js";import{t as s}from"./dmUfJoJz2.chunk.js";e();var c={container:`_container_16q2c_1`,subHeader:`_subHeader_16q2c_4`,main:`_main_16q2c_7`,leftNav:`_leftNav_16q2c_10`,navLink:`_navLink_16q2c_13`},l=t(),u={application:i.MARKETING_APP,action:r.Marketing.EXIT};function d({leftNavItems:e,children:t}){return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(o,{closeAppLink:u}),(0,l.jsxs)(`div`,{className:`d-flex flex-row g-0 border-bottom ${c.container}`,children:[(0,l.jsxs)(`div`,{className:`border-end ${c.leftNav} px-3 pt-5 pb-3 d-flex flex-column justify-content-between`,children:[(0,l.jsx)(`div`,{className:`d-flex flex-column justify-content-between gap-2`,children:e.map((e,t)=>(0,l.jsx)(n,{className:`text-lg d-flex justify-content-start btn ${c.navLink} ${e.isActive?`bg-light-blue fw-semibold`:``}`,appLink:{application:i.MARKETING_APP,action:e.action},children:e.text},t))}),(0,l.jsx)(a,{appLink:u})]}),(0,l.jsx)(`div`,{className:`${c.main} d-flex flex-column gap-5 p-3`,children:t})]}),(0,l.jsx)(`div`,{id:s.getPortalId()})]})}export{d as t};
2
+ //# sourceMappingURL=BrBPGjLi2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Dfhl7nI62.chunk.js","names":[],"sources":["../../../../../src/apps/marketing/layout/MarketingLayout.module.scss","../../../../../src/apps/marketing/layout/MarketingLayout.tsx"],"sourcesContent":[":local {\n $header-height: 3.75rem;\n $left-nav-width: 14.652rem; //234px\n\n .container {\n min-height: calc(100vh - $header-height - 1px);\n }\n .subHeader {\n font-size: 0.625rem; // 10px\n }\n\n .main {\n width: calc(100% - $left-nav-width);\n }\n\n .leftNav {\n width: $left-nav-width;\n }\n\n .navLink:hover {\n background-color: #EBF6FD;\n }\n}","import React from 'react';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport { Actions } from 'shared/constants';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { WizardExitButton } from 'shared/wizard-exit-button/WizardExitButton';\n\nimport { MarketingStudioHeader } from 'apps/marketing/components/header/MarketingStudioHeader';\nimport { MarketingHelper } from 'apps/marketing/utils/MarketingHelper';\n\nimport styles from './MarketingLayout.module.scss';\n\nconst MarketingApplicationExitAppLink = {\n application: AppChannels.MARKETING_APP,\n action: Actions.Marketing.EXIT\n};\n\nexport interface LeftNavItem {\n action: string; text: string; isActive: boolean;\n}\n\ninterface MarketingLayoutViewProps extends React.PropsWithChildren {\n leftNavItems: LeftNavItem[];\n}\n\nexport function MarketingLayoutView({ leftNavItems, children }: MarketingLayoutViewProps): JSX.Element {\n return (\n <>\n {/* Header*/}\n <MarketingStudioHeader closeAppLink={MarketingApplicationExitAppLink}/>\n <div className={`d-flex flex-row g-0 border-bottom ${styles.container}`}>\n {/* Left Navigation */}\n <div className={`border-end ${styles.leftNav} px-3 pt-5 pb-3 d-flex flex-column justify-content-between`}>\n <div className='d-flex flex-column justify-content-between gap-2'>\n {leftNavItems.map((navItem, index) => {\n return (\n <AppLink\n key={index}\n className={`text-lg d-flex justify-content-start btn ${styles.navLink} ${navItem.isActive ? 'bg-light-blue fw-semibold' : ''}`}\n appLink={{\n application: AppChannels.MARKETING_APP,\n action: navItem.action\n }}\n >\n {navItem.text}\n </AppLink>\n );\n })}\n </div>\n <WizardExitButton appLink={MarketingApplicationExitAppLink} />\n </div>\n {/* Main content*/}\n <div className={`${styles.main} d-flex flex-column gap-5 p-3`}>\n {children}\n </div>\n </div>\n <div id={MarketingHelper.getPortalId()}/>\n </>\n );\n}\n"],"mappings":"2dCaM,EAAkC,CACtC,YAAa,EAAY,cACzB,OAAQ,EAAQ,UAAU,IAC5B,EAUA,SAAgB,EAAoB,CAAE,eAAc,YAAmD,CACrG,OACE,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,EAEE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAuB,aAAc,CAAiC,CAAA,GACtE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,qCAAqC,EAAO,qBAA5D,EAEE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,cAAc,EAAO,QAAQ,qEAA7C,EACE,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,4DACZ,EAAa,KAAK,EAAS,KAExB,EAAA,EAAA,IAAA,CAAC,EAAD,CAEE,UAAW,4CAA4C,EAAO,QAAQ,GAAG,EAAQ,SAAW,4BAA8B,KAC1H,QAAS,CACP,YAAa,EAAY,cACzB,OAAQ,EAAQ,MAClB,WAEC,EAAQ,IACF,EARF,CAQE,CAEZ,CACE,CAAA,GACL,EAAA,EAAA,IAAA,CAAC,EAAD,CAAkB,QAAS,CAAkC,CAAA,CAC1D,KAEL,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAW,GAAG,EAAO,KAAK,+BAC5B,UACE,CAAA,CACF,KACL,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,GAAI,EAAgB,YAAY,CAAG,CAAA,CACxC,CAAA,CAAA,CAEN"}
1
+ {"version":3,"file":"BrBPGjLi2.chunk.js","names":[],"sources":["../../../../../src/apps/marketing/layout/MarketingLayout.module.scss","../../../../../src/apps/marketing/layout/MarketingLayout.tsx"],"sourcesContent":[":local {\n $header-height: 3.75rem;\n $left-nav-width: 14.652rem; //234px\n\n .container {\n min-height: calc(100vh - $header-height - 1px);\n }\n .subHeader {\n font-size: 0.625rem; // 10px\n }\n\n .main {\n width: calc(100% - $left-nav-width);\n }\n\n .leftNav {\n width: $left-nav-width;\n }\n\n .navLink:hover {\n background-color: #EBF6FD;\n }\n}","import React from 'react';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport { Actions } from 'shared/constants';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { WizardExitButton } from 'shared/wizard-exit-button/WizardExitButton';\n\nimport { MarketingStudioHeader } from 'apps/marketing/components/header/MarketingStudioHeader';\nimport { MarketingHelper } from 'apps/marketing/utils/MarketingHelper';\n\nimport styles from './MarketingLayout.module.scss';\n\nconst MarketingApplicationExitAppLink = {\n application: AppChannels.MARKETING_APP,\n action: Actions.Marketing.EXIT\n};\n\nexport interface LeftNavItem {\n action: string; text: string; isActive: boolean;\n}\n\ninterface MarketingLayoutViewProps extends React.PropsWithChildren {\n leftNavItems: LeftNavItem[];\n}\n\nexport function MarketingLayoutView({ leftNavItems, children }: MarketingLayoutViewProps): JSX.Element {\n return (\n <>\n {/* Header*/}\n <MarketingStudioHeader closeAppLink={MarketingApplicationExitAppLink}/>\n <div className={`d-flex flex-row g-0 border-bottom ${styles.container}`}>\n {/* Left Navigation */}\n <div className={`border-end ${styles.leftNav} px-3 pt-5 pb-3 d-flex flex-column justify-content-between`}>\n <div className='d-flex flex-column justify-content-between gap-2'>\n {leftNavItems.map((navItem, index) => {\n return (\n <AppLink\n key={index}\n className={`text-lg d-flex justify-content-start btn ${styles.navLink} ${navItem.isActive ? 'bg-light-blue fw-semibold' : ''}`}\n appLink={{\n application: AppChannels.MARKETING_APP,\n action: navItem.action\n }}\n >\n {navItem.text}\n </AppLink>\n );\n })}\n </div>\n <WizardExitButton appLink={MarketingApplicationExitAppLink} />\n </div>\n {/* Main content*/}\n <div className={`${styles.main} d-flex flex-column gap-5 p-3`}>\n {children}\n </div>\n </div>\n <div id={MarketingHelper.getPortalId()}/>\n </>\n );\n}\n"],"mappings":"2dCaM,EAAkC,CACtC,YAAa,EAAY,cACzB,OAAQ,EAAQ,UAAU,IAC5B,EAUA,SAAgB,EAAoB,CAAE,eAAc,YAAmD,CACrG,OACE,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,EAEE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAuB,aAAc,CAAiC,CAAA,GACtE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,qCAAqC,EAAO,qBAA5D,EAEE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,cAAc,EAAO,QAAQ,qEAA7C,EACE,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,4DACZ,EAAa,KAAK,EAAS,KAExB,EAAA,EAAA,IAAA,CAAC,EAAD,CAEE,UAAW,4CAA4C,EAAO,QAAQ,GAAG,EAAQ,SAAW,4BAA8B,KAC1H,QAAS,CACP,YAAa,EAAY,cACzB,OAAQ,EAAQ,MAClB,WAEC,EAAQ,IACF,EARF,CAQE,CAEZ,CACE,CAAA,GACL,EAAA,EAAA,IAAA,CAAC,EAAD,CAAkB,QAAS,CAAkC,CAAA,CAC1D,KAEL,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAW,GAAG,EAAO,KAAK,+BAC5B,UACE,CAAA,CACF,KACL,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,GAAI,EAAgB,YAAY,CAAG,CAAA,CACxC,CAAA,CAAA,CAEN"}
@@ -1,3 +1,3 @@
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"./CfCYHRuo.chunk.js";import{n as o}from"./CFoexGFe.chunk.js";import{n as s}from"./BVbA6fE6.chunk.js";import{n as c,r as l,t as u}from"./DBUreHJA.chunk.js";import{t as d}from"./cwPDEI372.chunk.js";import{i as f,y as p}from"./BhKv6dKl2.chunk.js";import{n as m}from"./CbiGs3Tn.chunk.js";import{s as h}from"./Dgk5cBBe.chunk.js";import{t as g}from"./DpqbC5uX.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as _}from"./CZyPFSXo.chunk.js";import{t as v}from"./BbpfuEhR.chunk.js";var y=n(e()),b={getColumnActionsFunction(e,t,n,a){function s(s){let c=t===o.Clips?i.CLIPS:i.INTERACTIVES,l=t===o.Clips?r.Clips.REMOVE_CLIP_CLASSIFICATION:r.Interactives.REMOVE_INTERACTIVE_CLASSIFICATION;return n?.find(e=>e.id===s.id)?[{label:`Remove`,button:!0,appLink:{application:c,action:l,args:[s.id,e,t]},className:`btn btn-danger`}]:[{label:`Add`,button:!0,className:`btn btn-dark`,onClick:()=>{a(s.id)}}]}return s},getOnSuccessMessage(e,t){let n=s.singularizeMemberType(t);switch(e){case`add`:return`Successfully added ${n} to topic.`;case`remove`:return`Successfully removed ${n} from topic.`;default:return``}},getOnErrorMessage(e,t){let n=s.singularizeMemberType(t);switch(e){case`add`:return`Failed to add ${n} to topic.`;case`remove`:return`Failed to remove ${n} from topic.`;default:return``}},getClassificationPathsNames(e={},t=`->`){return Object.keys(e)?.reduce((n,r)=>(e[r].forEach(e=>{n[r]=e.map(e=>e.map(e=>e.name).join(` ${t} `))}),n),{})}},x=t();function S(e){let t=s.singularizeMemberType(e.memberType),n=b.getClassificationPathsNames(e.classificationsPaths),r=e.availableClassifications?.map(t=>{let r=e.presentations.find(e=>e.id===t.presentationId);return{...t,path:n?.[t.id],presentation:r?.name??``,presentationDescription:r?.description??``}}).filter(e=>!!e.presentation).sort((e,t)=>e.presentation>t.presentation?1:-1),i=c.getColumnSet(u.ObjectClassificationMapping),o=y.useMemo(()=>l({columns:i,columnData:e.columnData}),[e.columnData]),d=e.availableClassifications?.length&&!Object.keys(e.classificationsPaths).length;return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(`h2`,{className:`h6`,children:`Topics`}),(0,x.jsx)(`p`,{children:`Select which available presentations to add the ${t} into.`}),d?(0,x.jsx)(`div`,{className:`text-center p-5`,children:(0,x.jsx)(m,{as:`div`,animation:`border`,role:`status`})}):e.availableClassifications?.length?(0,x.jsx)(v,{theme:a,columns:o,data:r,enableSort:!0}):(0,x.jsx)(`p`,{className:`py-3`,children:(0,x.jsx)(`em`,{children:`There are no available topics for this ${t}.
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"./CfCYHRuo.chunk.js";import{n as o}from"./CFoexGFe.chunk.js";import{n as s}from"./BVbA6fE6.chunk.js";import{n as c,r as l,t as u}from"./C-M2om56.chunk.js";import{t as d}from"./cwPDEI372.chunk.js";import{i as f,y as p}from"./GpDEun8c2.chunk.js";import{n as m}from"./CbiGs3Tn.chunk.js";import{s as h}from"./Dgk5cBBe.chunk.js";import{t as g}from"./DpqbC5uX.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as _}from"./CZyPFSXo.chunk.js";import{t as v}from"./BbpfuEhR.chunk.js";var y=n(e()),b={getColumnActionsFunction(e,t,n,a){function s(s){let c=t===o.Clips?i.CLIPS:i.INTERACTIVES,l=t===o.Clips?r.Clips.REMOVE_CLIP_CLASSIFICATION:r.Interactives.REMOVE_INTERACTIVE_CLASSIFICATION;return n?.find(e=>e.id===s.id)?[{label:`Remove`,button:!0,appLink:{application:c,action:l,args:[s.id,e,t]},className:`btn btn-danger`}]:[{label:`Add`,button:!0,className:`btn btn-dark`,onClick:()=>{a(s.id)}}]}return s},getOnSuccessMessage(e,t){let n=s.singularizeMemberType(t);switch(e){case`add`:return`Successfully added ${n} to topic.`;case`remove`:return`Successfully removed ${n} from topic.`;default:return``}},getOnErrorMessage(e,t){let n=s.singularizeMemberType(t);switch(e){case`add`:return`Failed to add ${n} to topic.`;case`remove`:return`Failed to remove ${n} from topic.`;default:return``}},getClassificationPathsNames(e={},t=`->`){return Object.keys(e)?.reduce((n,r)=>(e[r].forEach(e=>{n[r]=e.map(e=>e.map(e=>e.name).join(` ${t} `))}),n),{})}},x=t();function S(e){let t=s.singularizeMemberType(e.memberType),n=b.getClassificationPathsNames(e.classificationsPaths),r=e.availableClassifications?.map(t=>{let r=e.presentations.find(e=>e.id===t.presentationId);return{...t,path:n?.[t.id],presentation:r?.name??``,presentationDescription:r?.description??``}}).filter(e=>!!e.presentation).sort((e,t)=>e.presentation>t.presentation?1:-1),i=c.getColumnSet(u.ObjectClassificationMapping),o=y.useMemo(()=>l({columns:i,columnData:e.columnData}),[e.columnData]),d=e.availableClassifications?.length&&!Object.keys(e.classificationsPaths).length;return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(`h2`,{className:`h6`,children:`Topics`}),(0,x.jsx)(`p`,{children:`Select which available presentations to add the ${t} into.`}),d?(0,x.jsx)(`div`,{className:`text-center p-5`,children:(0,x.jsx)(m,{as:`div`,animation:`border`,role:`status`})}):e.availableClassifications?.length?(0,x.jsx)(v,{theme:a,columns:o,data:r,enableSort:!0}):(0,x.jsx)(`p`,{className:`py-3`,children:(0,x.jsx)(`em`,{children:`There are no available topics for this ${t}.
2
2
  Please ensure you've mapped the ${t} to a backbone subject first`})})]})}function C(e){let t=s.singularizeMemberType(e.memberType),n={actions:b.getColumnActionsFunction(e.objectId,e.memberType,e.objectMappedClassifications,e.onAddToClassification)};function r(t,n,r){return e.onSaveBackboneClassification(t,r)}return e.backboneClassificationTree&&e.presentations&&e.objectMappedBackboneClassifications?(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(p,{object:e.object}),(0,x.jsx)(`h2`,{className:`h6`,children:`Backbone Subjects`}),(0,x.jsx)(`p`,{children:`Select which backbone subjects this ${t} is mapped to.`}),(0,x.jsx)(f,{initialValues:{backboneClassificationIds:e.objectMappedBackboneClassifications.map(e=>e.id)},presentationType:d.Subject,subjectTree:e.backboneClassificationTree,saveSubjects:r,memberType:o.Clips,saveBtnText:`Save Backbone Subjects`,allowMultiple:!0}),(0,x.jsx)(S,{memberType:e.memberType,availableClassifications:e.availableClassifications,presentations:e.presentations,classificationsPaths:e.objectClassificationPaths,columnData:n})]}):(0,x.jsx)(`div`,{className:`text-center p-5`,children:(0,x.jsx)(m,{as:`div`,animation:`border`,role:`status`})})}function w(e){let[t,n]=y.useState({}),r=e?.join(`,`),i=h(e?.length&&_.classificationPaths(e));return y.useEffect(()=>{if(!i.hasCompleted)return;let e={};i?.data?.map(t=>{let n=g.last(t?.[0]);e[n.id]||(e[n.id]=[]),e[n.id].push(t)}),n(e)},[r,i.hasCompleted,i.data?.length]),t}function T(e=[]){let[t,n]=y.useState([]),r=e.join(`,`),i=h(e.length&&_.mappedClassificationFromBackboneClassification(e));return y.useEffect(()=>{i.data?.length!==0&&i.hasCompleted&&n(i.data)},[r,i.hasCompleted,i.data?.length]),t}export{b as i,w as n,C as r,T as t};
3
- //# sourceMappingURL=DcxGcCkR.chunk.js.map
3
+ //# sourceMappingURL=BrHyZG_m.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DcxGcCkR.chunk.js","names":[],"sources":["../../../../../src/shared/utils/ClassificationMappingListHelper.ts","../../../../../src/shared/components/classifications/object-classifications-mapping-list/ObjectClassificationsMappingList.tsx","../../../../../src/shared/components/backbone-classification/edit-object-classifications/EditObjectClassifications.tsx","../../../../../src/shared/hooks/UseClassificationsPaths.tsx","../../../../../src/shared/hooks/UseFetchAvailableClassifications.tsx"],"sourcesContent":["import { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Classification } from 'libs/shared/interfaces';\n\nimport { Actions, AppChannels } from 'shared/constants';\nimport { SubjectMemberType } from 'shared/enums';\n\nimport { ClassificationPathsMap } from 'apps/videos/interfaces';\n\nimport { ClassificationMemberHelper } from './ClassificationMemberHelper';\n\nexport const ClassificationMappingListHelper = {\n getColumnActionsFunction(\n objectId: string,\n memberType: SubjectMemberType,\n mappedClassifications: Classification[],\n addObjectsToClassification: (classificationId: string) => void\n ): (data: Classification) => ActionOptions[] {\n function columnActions(data: Classification): ActionOptions[] {\n const application = memberType === SubjectMemberType.Clips ? AppChannels.CLIPS : AppChannels.INTERACTIVES;\n const action = memberType === SubjectMemberType.Clips ?\n Actions.Clips.REMOVE_CLIP_CLASSIFICATION :\n Actions.Interactives.REMOVE_INTERACTIVE_CLASSIFICATION;\n\n const isObjectMapped = mappedClassifications?.find((c: Classification) => c.id === data.id);\n\n if (!isObjectMapped) {\n return [\n {\n label: 'Add',\n button: true,\n className: 'btn btn-dark',\n onClick: () => {\n addObjectsToClassification(data.id);\n }\n }\n ];\n }\n\n return [\n {\n label: `Remove`,\n button: true,\n appLink: {\n application,\n action,\n args: [ data.id, objectId, memberType ]\n },\n className: 'btn btn-danger'\n }\n ];\n }\n return columnActions;\n },\n\n getOnSuccessMessage(actionType: 'add' | 'remove', memberType: SubjectMemberType): string {\n const singularizeMemberType = ClassificationMemberHelper.singularizeMemberType(memberType);\n switch (actionType) {\n case 'add':\n return `Successfully added ${singularizeMemberType} to topic.`;\n case 'remove':\n return `Successfully removed ${singularizeMemberType} from topic.`;\n default:\n return '';\n }\n },\n\n getOnErrorMessage(actionType: 'add' | 'remove', memberType: SubjectMemberType): string {\n const singularizeMemberType = ClassificationMemberHelper.singularizeMemberType(memberType);\n switch (actionType) {\n case 'add':\n return `Failed to add ${singularizeMemberType} to topic.`;\n case 'remove':\n return `Failed to remove ${singularizeMemberType} from topic.`;\n default:\n return '';\n }\n },\n\n getClassificationPathsNames(classificationsPaths: ClassificationPathsMap = {}, seperator: string = '->'): Record<string, string[]> {\n return Object.keys(classificationsPaths)?.reduce((map, classificationId) => {\n const classificationPaths = classificationsPaths[classificationId];\n classificationPaths.forEach((paths: Classification[][]) => {\n const names = paths.map(p => p.map(_p => _p.name).join(` ${seperator} `));\n map[classificationId] = names;\n });\n \n return map;\n }, {} as Record<string, string[]>);\n }\n};\n","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { Table } from 'libs/shared/components/table/Table';\nimport { Classification, Presentation } from 'libs/shared/interfaces';\n\nimport { ColumnData, MatrixMember } from 'shared/components/member-matrix';\nimport { BuildColumns } from 'shared/components/member-matrix/columns/Columns';\nimport { CuratorTableTheme } from 'shared/constants';\nimport { SubjectMemberType } from 'shared/enums';\nimport { ClassificationMemberHelper } from 'shared/utils';\nimport { ClassificationMappingListHelper } from 'shared/utils/ClassificationMappingListHelper';\nimport { DefinedColumnSet, MemberMatrixHelper } from 'shared/utils/MemberMatrixHelper';\n\nimport { ClassificationPathsMap } from 'apps/videos/interfaces';\n\ninterface ObjectClassificationsMappingListProps {\n availableClassifications: Classification[];\n presentations: Presentation[];\n classificationsPaths: ClassificationPathsMap;\n memberType: SubjectMemberType;\n columnData: ColumnData;\n}\n\nexport function ObjectClassificationsMappingList(props: ObjectClassificationsMappingListProps): JSX.Element {\n const singularMemberType = ClassificationMemberHelper.singularizeMemberType(props.memberType);\n \n const classificationPathsNames = ClassificationMappingListHelper.getClassificationPathsNames(\n props.classificationsPaths\n );\n\n const members = props.availableClassifications?.map(c => {\n const presentation = props.presentations.find((p: Presentation) => p.id === c.presentationId);\n return {\n ...c,\n path: classificationPathsNames?.[c.id],\n presentation: presentation?.name ?? '',\n presentationDescription: presentation?.description ?? ''\n };\n })\n .filter(member => !!member.presentation)\n .sort((a, b) => a.presentation > b.presentation ? 1 : -1);\n\n const columns = MemberMatrixHelper.getColumnSet(DefinedColumnSet.ObjectClassificationMapping);\n\n const fullColumns = React.useMemo(() => BuildColumns({\n columns: columns,\n columnData: props.columnData\n }), [props.columnData]);\n\n const loadingClassificationsPaths = props.availableClassifications?.length\n && !Object.keys(props.classificationsPaths).length;\n\n return (\n <>\n <h2 className='h6'>Topics</h2>\n <p>{`Select which available presentations to add the ${singularMemberType} into.`}</p>\n {(() => {\n if (loadingClassificationsPaths) {\n return (\n <div className='text-center p-5'>\n <Spinner as='div' animation='border' role='status' />\n </div>\n );\n }\n\n if (!props.availableClassifications?.length) {\n return (\n <p className='py-3'>\n <em>\n {`There are no available topics for this ${singularMemberType}.\n Please ensure you've mapped the ${singularMemberType} to a backbone subject first`}\n </em>\n </p>\n );\n }\n\n return (\n <Table<MatrixMember>\n theme={CuratorTableTheme}\n columns={fullColumns}\n data={members}\n enableSort\n />\n );\n })()}\n </>\n );\n}\n","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { BaseObject, Classification, Presentation } from 'libs/shared/interfaces';\n\nimport { ColumnData, ObjectHeader, SelectBackboneClassification } from 'shared/components';\nimport { ObjectClassificationsMappingList } from 'shared/components/classifications/object-classifications-mapping-list/ObjectClassificationsMappingList';\nimport { SubjectMemberType } from 'shared/enums';\nimport { SubjectTree } from 'shared/interfaces';\nimport { ClassificationMemberHelper } from 'shared/utils';\nimport { ClassificationMappingListHelper } from 'shared/utils/ClassificationMappingListHelper';\n\nimport { ClassificationPathsMap } from 'apps/videos/interfaces';\n\ninterface EditObjectClassificationsProps {\n objectId: string;\n memberType: SubjectMemberType;\n availableClassifications: Classification[];\n objectClassificationPaths: ClassificationPathsMap;\n objectMappedClassifications: Classification[];\n onSaveBackboneClassification: (subjectsId: string[], onDone: () => void) => void;\n onAddToClassification: (classificationId: string) => void;\n object?: BaseObject;\n objectMappedBackboneClassifications?: Classification[];\n backboneClassificationTree?: SubjectTree;\n presentations?: Presentation[];\n}\n\nexport function EditObjectClassifications(props: EditObjectClassificationsProps): JSX.Element {\n const singularMemberType = ClassificationMemberHelper.singularizeMemberType(props.memberType);\n\n const columnActions = ClassificationMappingListHelper.getColumnActionsFunction(\n props.objectId,\n props.memberType,\n props.objectMappedClassifications,\n props.onAddToClassification\n );\n\n const columnData: ColumnData = {\n actions: columnActions\n };\n\n function onSaveSubjects(subjectsId: string[], _: boolean, onDone: () => void) {\n return props.onSaveBackboneClassification(subjectsId, onDone);\n }\n \n const dataLoaded = props.backboneClassificationTree\n && props.presentations\n && props.objectMappedBackboneClassifications;\n\n if (!dataLoaded)\n return (\n <div className='text-center p-5'>\n <Spinner as='div' animation='border' role='status' />\n </div>\n );\n\n return (\n <>\n <ObjectHeader object={props.object} />\n <h2 className='h6'>Backbone Subjects</h2>\n <p>{`Select which backbone subjects this ${singularMemberType} is mapped to.`}</p>\n <SelectBackboneClassification\n initialValues={{ backboneClassificationIds: props.objectMappedBackboneClassifications.map(c => c.id) }}\n presentationType={PresentationType.Subject}\n subjectTree={props.backboneClassificationTree}\n saveSubjects={onSaveSubjects}\n memberType={SubjectMemberType.Clips}\n saveBtnText='Save Backbone Subjects'\n allowMultiple\n />\n <ObjectClassificationsMappingList\n memberType={props.memberType}\n availableClassifications={props.availableClassifications}\n presentations={props.presentations}\n classificationsPaths={props.objectClassificationPaths}\n columnData={columnData}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { Classification } from 'libs/shared/interfaces';\n\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\n\nimport { ClassificationPaths, ClassificationPathsMap } from 'apps/videos/interfaces';\n\nexport function useFetchClassificationsPaths(\n classificationIds: string[]\n): ClassificationPathsMap {\n const [ paths, setPaths ] = React.useState<ClassificationPathsMap>({});\n const key = classificationIds?.join(',');\n\n const classificationPathData = Flight.useBasicFetch<ClassificationPaths>(classificationIds?.length &&\n SubjectRequests.classificationPaths(classificationIds));\n\n React.useEffect(() => {\n if (!classificationPathData.hasCompleted)\n return;\n\n const pathMap: HashObject = {};\n\n classificationPathData?.data?.map((paths: Classification[][]) => {\n // The last classification in the collection is the one we're creating the path for\n const classification = ArrayHelper.last(paths?.[0]);\n\n if (!pathMap[classification.id])\n pathMap[classification.id] = [];\n\n pathMap[classification.id].push(paths);\n });\n\n setPaths(pathMap);\n }, [ key, classificationPathData.hasCompleted, classificationPathData.data?.length ]);\n\n return paths;\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { Classification } from 'libs/shared/interfaces';\n\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\n\nexport function useFetchAvailableClassifications(backboneClassificationIds: string[] = []) {\n const [ availableClassifications, setAvailableClassifications ] = React.useState<Classification[]>([]);\n\n const key = backboneClassificationIds.join(',');\n\n const classificationData = Flight.useBasicFetch<Classification[]>(backboneClassificationIds.length &&\n SubjectRequests.mappedClassificationFromBackboneClassification(backboneClassificationIds));\n\n React.useEffect(() => {\n // handle case where we don't have any data to fetch (as the object hasn't been mapped to a backbone classification)\n if (classificationData.data?.length === 0) {\n return;\n }\n\n if (!classificationData.hasCompleted)\n return;\n\n setAvailableClassifications(classificationData.data);\n }, [ key, classificationData.hasCompleted, classificationData.data?.length ]);\n\n return availableClassifications;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"BrHyZG_m.chunk.js","names":[],"sources":["../../../../../src/shared/utils/ClassificationMappingListHelper.ts","../../../../../src/shared/components/classifications/object-classifications-mapping-list/ObjectClassificationsMappingList.tsx","../../../../../src/shared/components/backbone-classification/edit-object-classifications/EditObjectClassifications.tsx","../../../../../src/shared/hooks/UseClassificationsPaths.tsx","../../../../../src/shared/hooks/UseFetchAvailableClassifications.tsx"],"sourcesContent":["import { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Classification } from 'libs/shared/interfaces';\n\nimport { Actions, AppChannels } from 'shared/constants';\nimport { SubjectMemberType } from 'shared/enums';\n\nimport { ClassificationPathsMap } from 'apps/videos/interfaces';\n\nimport { ClassificationMemberHelper } from './ClassificationMemberHelper';\n\nexport const ClassificationMappingListHelper = {\n getColumnActionsFunction(\n objectId: string,\n memberType: SubjectMemberType,\n mappedClassifications: Classification[],\n addObjectsToClassification: (classificationId: string) => void\n ): (data: Classification) => ActionOptions[] {\n function columnActions(data: Classification): ActionOptions[] {\n const application = memberType === SubjectMemberType.Clips ? AppChannels.CLIPS : AppChannels.INTERACTIVES;\n const action = memberType === SubjectMemberType.Clips ?\n Actions.Clips.REMOVE_CLIP_CLASSIFICATION :\n Actions.Interactives.REMOVE_INTERACTIVE_CLASSIFICATION;\n\n const isObjectMapped = mappedClassifications?.find((c: Classification) => c.id === data.id);\n\n if (!isObjectMapped) {\n return [\n {\n label: 'Add',\n button: true,\n className: 'btn btn-dark',\n onClick: () => {\n addObjectsToClassification(data.id);\n }\n }\n ];\n }\n\n return [\n {\n label: `Remove`,\n button: true,\n appLink: {\n application,\n action,\n args: [ data.id, objectId, memberType ]\n },\n className: 'btn btn-danger'\n }\n ];\n }\n return columnActions;\n },\n\n getOnSuccessMessage(actionType: 'add' | 'remove', memberType: SubjectMemberType): string {\n const singularizeMemberType = ClassificationMemberHelper.singularizeMemberType(memberType);\n switch (actionType) {\n case 'add':\n return `Successfully added ${singularizeMemberType} to topic.`;\n case 'remove':\n return `Successfully removed ${singularizeMemberType} from topic.`;\n default:\n return '';\n }\n },\n\n getOnErrorMessage(actionType: 'add' | 'remove', memberType: SubjectMemberType): string {\n const singularizeMemberType = ClassificationMemberHelper.singularizeMemberType(memberType);\n switch (actionType) {\n case 'add':\n return `Failed to add ${singularizeMemberType} to topic.`;\n case 'remove':\n return `Failed to remove ${singularizeMemberType} from topic.`;\n default:\n return '';\n }\n },\n\n getClassificationPathsNames(classificationsPaths: ClassificationPathsMap = {}, seperator: string = '->'): Record<string, string[]> {\n return Object.keys(classificationsPaths)?.reduce((map, classificationId) => {\n const classificationPaths = classificationsPaths[classificationId];\n classificationPaths.forEach((paths: Classification[][]) => {\n const names = paths.map(p => p.map(_p => _p.name).join(` ${seperator} `));\n map[classificationId] = names;\n });\n \n return map;\n }, {} as Record<string, string[]>);\n }\n};\n","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { Table } from 'libs/shared/components/table/Table';\nimport { Classification, Presentation } from 'libs/shared/interfaces';\n\nimport { ColumnData, MatrixMember } from 'shared/components/member-matrix';\nimport { BuildColumns } from 'shared/components/member-matrix/columns/Columns';\nimport { CuratorTableTheme } from 'shared/constants';\nimport { SubjectMemberType } from 'shared/enums';\nimport { ClassificationMemberHelper } from 'shared/utils';\nimport { ClassificationMappingListHelper } from 'shared/utils/ClassificationMappingListHelper';\nimport { DefinedColumnSet, MemberMatrixHelper } from 'shared/utils/MemberMatrixHelper';\n\nimport { ClassificationPathsMap } from 'apps/videos/interfaces';\n\ninterface ObjectClassificationsMappingListProps {\n availableClassifications: Classification[];\n presentations: Presentation[];\n classificationsPaths: ClassificationPathsMap;\n memberType: SubjectMemberType;\n columnData: ColumnData;\n}\n\nexport function ObjectClassificationsMappingList(props: ObjectClassificationsMappingListProps): JSX.Element {\n const singularMemberType = ClassificationMemberHelper.singularizeMemberType(props.memberType);\n \n const classificationPathsNames = ClassificationMappingListHelper.getClassificationPathsNames(\n props.classificationsPaths\n );\n\n const members = props.availableClassifications?.map(c => {\n const presentation = props.presentations.find((p: Presentation) => p.id === c.presentationId);\n return {\n ...c,\n path: classificationPathsNames?.[c.id],\n presentation: presentation?.name ?? '',\n presentationDescription: presentation?.description ?? ''\n };\n })\n .filter(member => !!member.presentation)\n .sort((a, b) => a.presentation > b.presentation ? 1 : -1);\n\n const columns = MemberMatrixHelper.getColumnSet(DefinedColumnSet.ObjectClassificationMapping);\n\n const fullColumns = React.useMemo(() => BuildColumns({\n columns: columns,\n columnData: props.columnData\n }), [props.columnData]);\n\n const loadingClassificationsPaths = props.availableClassifications?.length\n && !Object.keys(props.classificationsPaths).length;\n\n return (\n <>\n <h2 className='h6'>Topics</h2>\n <p>{`Select which available presentations to add the ${singularMemberType} into.`}</p>\n {(() => {\n if (loadingClassificationsPaths) {\n return (\n <div className='text-center p-5'>\n <Spinner as='div' animation='border' role='status' />\n </div>\n );\n }\n\n if (!props.availableClassifications?.length) {\n return (\n <p className='py-3'>\n <em>\n {`There are no available topics for this ${singularMemberType}.\n Please ensure you've mapped the ${singularMemberType} to a backbone subject first`}\n </em>\n </p>\n );\n }\n\n return (\n <Table<MatrixMember>\n theme={CuratorTableTheme}\n columns={fullColumns}\n data={members}\n enableSort\n />\n );\n })()}\n </>\n );\n}\n","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { BaseObject, Classification, Presentation } from 'libs/shared/interfaces';\n\nimport { ColumnData, ObjectHeader, SelectBackboneClassification } from 'shared/components';\nimport { ObjectClassificationsMappingList } from 'shared/components/classifications/object-classifications-mapping-list/ObjectClassificationsMappingList';\nimport { SubjectMemberType } from 'shared/enums';\nimport { SubjectTree } from 'shared/interfaces';\nimport { ClassificationMemberHelper } from 'shared/utils';\nimport { ClassificationMappingListHelper } from 'shared/utils/ClassificationMappingListHelper';\n\nimport { ClassificationPathsMap } from 'apps/videos/interfaces';\n\ninterface EditObjectClassificationsProps {\n objectId: string;\n memberType: SubjectMemberType;\n availableClassifications: Classification[];\n objectClassificationPaths: ClassificationPathsMap;\n objectMappedClassifications: Classification[];\n onSaveBackboneClassification: (subjectsId: string[], onDone: () => void) => void;\n onAddToClassification: (classificationId: string) => void;\n object?: BaseObject;\n objectMappedBackboneClassifications?: Classification[];\n backboneClassificationTree?: SubjectTree;\n presentations?: Presentation[];\n}\n\nexport function EditObjectClassifications(props: EditObjectClassificationsProps): JSX.Element {\n const singularMemberType = ClassificationMemberHelper.singularizeMemberType(props.memberType);\n\n const columnActions = ClassificationMappingListHelper.getColumnActionsFunction(\n props.objectId,\n props.memberType,\n props.objectMappedClassifications,\n props.onAddToClassification\n );\n\n const columnData: ColumnData = {\n actions: columnActions\n };\n\n function onSaveSubjects(subjectsId: string[], _: boolean, onDone: () => void) {\n return props.onSaveBackboneClassification(subjectsId, onDone);\n }\n \n const dataLoaded = props.backboneClassificationTree\n && props.presentations\n && props.objectMappedBackboneClassifications;\n\n if (!dataLoaded)\n return (\n <div className='text-center p-5'>\n <Spinner as='div' animation='border' role='status' />\n </div>\n );\n\n return (\n <>\n <ObjectHeader object={props.object} />\n <h2 className='h6'>Backbone Subjects</h2>\n <p>{`Select which backbone subjects this ${singularMemberType} is mapped to.`}</p>\n <SelectBackboneClassification\n initialValues={{ backboneClassificationIds: props.objectMappedBackboneClassifications.map(c => c.id) }}\n presentationType={PresentationType.Subject}\n subjectTree={props.backboneClassificationTree}\n saveSubjects={onSaveSubjects}\n memberType={SubjectMemberType.Clips}\n saveBtnText='Save Backbone Subjects'\n allowMultiple\n />\n <ObjectClassificationsMappingList\n memberType={props.memberType}\n availableClassifications={props.availableClassifications}\n presentations={props.presentations}\n classificationsPaths={props.objectClassificationPaths}\n columnData={columnData}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { Classification } from 'libs/shared/interfaces';\n\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\n\nimport { ClassificationPaths, ClassificationPathsMap } from 'apps/videos/interfaces';\n\nexport function useFetchClassificationsPaths(\n classificationIds: string[]\n): ClassificationPathsMap {\n const [ paths, setPaths ] = React.useState<ClassificationPathsMap>({});\n const key = classificationIds?.join(',');\n\n const classificationPathData = Flight.useBasicFetch<ClassificationPaths>(classificationIds?.length &&\n SubjectRequests.classificationPaths(classificationIds));\n\n React.useEffect(() => {\n if (!classificationPathData.hasCompleted)\n return;\n\n const pathMap: HashObject = {};\n\n classificationPathData?.data?.map((paths: Classification[][]) => {\n // The last classification in the collection is the one we're creating the path for\n const classification = ArrayHelper.last(paths?.[0]);\n\n if (!pathMap[classification.id])\n pathMap[classification.id] = [];\n\n pathMap[classification.id].push(paths);\n });\n\n setPaths(pathMap);\n }, [ key, classificationPathData.hasCompleted, classificationPathData.data?.length ]);\n\n return paths;\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { Classification } from 'libs/shared/interfaces';\n\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\n\nexport function useFetchAvailableClassifications(backboneClassificationIds: string[] = []) {\n const [ availableClassifications, setAvailableClassifications ] = React.useState<Classification[]>([]);\n\n const key = backboneClassificationIds.join(',');\n\n const classificationData = Flight.useBasicFetch<Classification[]>(backboneClassificationIds.length &&\n SubjectRequests.mappedClassificationFromBackboneClassification(backboneClassificationIds));\n\n React.useEffect(() => {\n // handle case where we don't have any data to fetch (as the object hasn't been mapped to a backbone classification)\n if (classificationData.data?.length === 0) {\n return;\n }\n\n if (!classificationData.hasCompleted)\n return;\n\n setAvailableClassifications(classificationData.data);\n }, [ key, classificationData.hasCompleted, classificationData.data?.length ]);\n\n return availableClassifications;\n}\n"],"mappings":"+nBAUa,EAAkC,CAC7C,yBACE,EACA,EACA,EACA,EAC2C,CAC3C,SAAS,EAAc,EAAuC,CAC5D,IAAM,EAAc,IAAe,EAAkB,MAAQ,EAAY,MAAQ,EAAY,aACvF,EAAS,IAAe,EAAkB,MAC9C,EAAQ,MAAM,2BACd,EAAQ,aAAa,kCAiBvB,OAfuB,GAAuB,KAAM,GAAsB,EAAE,KAAO,EAAK,EAAE,EAenF,CACL,CACE,MAAO,SACP,OAAQ,GACR,QAAU,CACR,cACA,SACA,KAAM,CAAE,EAAK,GAAI,EAAU,CAAW,CACxC,EACA,UAAW,gBACb,CACF,EAvBS,CACL,CACE,MAAO,MACP,OAAQ,GACR,UAAW,eACX,YAAe,CACb,EAA2B,EAAK,EAAE,CACpC,CACF,CACF,CAeJ,CACA,OAAO,CACT,EAEA,oBAAoB,EAA8B,EAAuC,CACvF,IAAM,EAAwB,EAA2B,sBAAsB,CAAU,EACzF,OAAQ,EAAR,CACE,IAAK,MACH,MAAO,sBAAsB,EAAsB,YACrD,IAAK,SACH,MAAO,wBAAwB,EAAsB,cACvD,QACE,MAAO,EACX,CACF,EAEA,kBAAkB,EAA8B,EAAuC,CACrF,IAAM,EAAwB,EAA2B,sBAAsB,CAAU,EACzF,OAAQ,EAAR,CACE,IAAK,MACH,MAAO,iBAAiB,EAAsB,YAChD,IAAK,SACH,MAAO,oBAAoB,EAAsB,cACnD,QACE,MAAO,EACX,CACF,EAEA,4BAA4B,EAA+C,CAAC,EAAG,EAAoB,KAAgC,CACjI,OAAO,OAAO,KAAK,CAAoB,CAAC,EAAE,QAAQ,EAAK,KAErD,EADiD,EACjD,CAAoB,QAAS,GAA8B,CAEzD,EAAI,GADU,EAAM,IAAI,GAAK,EAAE,IAAI,GAAM,EAAG,IAAI,CAAC,CAAC,KAAK,IAAI,EAAU,EAAE,CAC/C,CAC1B,CAAC,EAEM,GACN,CAAC,CAA6B,CACnC,CACF,QCjEA,SAAgB,EAAiC,EAA2D,CAC1G,IAAM,EAAqB,EAA2B,sBAAsB,EAAM,UAAU,EAEtF,EAA2B,EAAgC,4BAC/D,EAAM,oBACR,EAEM,EAAU,EAAM,0BAA0B,IAAI,GAAK,CACvD,IAAM,EAAe,EAAM,cAAc,KAAM,GAAoB,EAAE,KAAO,EAAE,cAAc,EAC5F,MAAO,CACL,GAAG,EACH,KAAM,IAA2B,EAAE,IACnC,aAAc,GAAc,MAAQ,GACpC,wBAAyB,GAAc,aAAe,EACxD,CACF,CAAC,CAAC,CACC,OAAO,GAAU,CAAC,CAAC,EAAO,YAAY,CAAC,CACvC,MAAM,EAAG,IAAM,EAAE,aAAe,EAAE,aAAe,EAAI,EAAE,EAEpD,EAAU,EAAmB,aAAa,EAAiB,2BAA2B,EAEtF,EAAA,EAAoB,YAAc,EAAa,CAC1C,UACT,WAAY,EAAM,UACpB,CAAC,EAAG,CAAC,EAAM,UAAU,CAAC,EAEhB,EAA8B,EAAM,0BAA0B,QAChE,CAAC,OAAO,KAAK,EAAM,oBAAoB,CAAC,CAAC,OAE7C,OACE,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,KAAD,CAAI,UAAU,cAAK,QAAU,CAAA,GAC7B,EAAA,EAAA,IAAA,CAAC,IAAD,CAAA,SAAI,mDAAmD,EAAmB,OAAW,CAAA,EAE/E,GAEA,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,4BACb,EAAA,EAAA,IAAA,CAAC,EAAD,CAAS,GAAG,MAAM,UAAU,SAAS,KAAK,QAAU,CAAA,CACjD,CAAA,EAIJ,EAAM,0BAA0B,QAYnC,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,MAAO,EACP,QAAS,EACT,KAAM,EACN,WAAA,EACD,CAAA,GAfC,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAU,iBACX,EAAA,EAAA,IAAA,CAAC,KAAD,CAAA,SACG,0CAA0C,EAAmB;kDAC5B,EAAmB,6BACnD,CAAA,CACH,CAAA,CAaT,CAAA,CAAA,CAEN,CC3DA,SAAgB,EAA0B,EAAoD,CAC5F,IAAM,EAAqB,EAA2B,sBAAsB,EAAM,UAAU,EAStF,EAAyB,CAC7B,QARoB,EAAgC,yBACpD,EAAM,SACN,EAAM,WACN,EAAM,4BACN,EAAM,qBAIG,CACX,EAEA,SAAS,EAAe,EAAsB,EAAY,EAAoB,CAC5E,OAAO,EAAM,6BAA6B,EAAY,CAAM,CAC9D,CAaA,OAXmB,EAAM,4BACpB,EAAM,eACN,EAAM,qCAUT,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAc,OAAQ,EAAM,MAAS,CAAA,GACrC,EAAA,EAAA,IAAA,CAAC,KAAD,CAAI,UAAU,cAAK,mBAAqB,CAAA,GACxC,EAAA,EAAA,IAAA,CAAC,IAAD,CAAA,SAAI,uCAAuC,EAAmB,eAAmB,CAAA,GACjF,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,cAAe,CAAE,0BAA2B,EAAM,oCAAoC,IAAI,GAAK,EAAE,EAAE,CAAE,EACrG,iBAAkB,EAAiB,QACnC,YAAa,EAAM,2BACnB,aAAc,EACd,WAAY,EAAkB,MAC9B,YAAY,yBACZ,cAAA,EACD,CAAA,GACD,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,WAAY,EAAM,WAClB,yBAA0B,EAAM,yBAChC,cAAe,EAAM,cACrB,qBAAsB,EAAM,0BAChB,YACb,CAAA,CACD,CAAA,CAAA,GA1BA,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,4BACb,EAAA,EAAA,IAAA,CAAC,EAAD,CAAS,GAAG,MAAM,UAAU,SAAS,KAAK,QAAU,CAAA,CACjD,CAAA,CA0BX,CCrEA,SAAgB,EACd,EACwB,CACxB,GAAM,CAAE,EAAO,GAAA,EAAmB,SAAiC,CAAC,CAAC,EAC/D,EAAM,GAAmB,KAAK,GAAG,EAEjC,EAAyB,EAA0C,GAAmB,QAC1F,EAAgB,oBAAoB,CAAiB,CAAC,EAqBxD,OAnBA,EAAM,cAAgB,CACpB,GAAI,CAAC,EAAuB,aAC1B,OAEF,IAAM,EAAsB,CAAC,EAE7B,GAAwB,MAAM,IAAK,GAA8B,CAE/D,IAAM,EAAiB,EAAY,KAAK,IAAQ,EAAE,EAE7C,EAAQ,EAAe,MAC1B,EAAQ,EAAe,IAAM,CAAC,GAEhC,EAAQ,EAAe,GAAG,CAAC,KAAK,CAAK,CACvC,CAAC,EAED,EAAS,CAAO,CAClB,EAAG,CAAE,EAAK,EAAuB,aAAc,EAAuB,MAAM,MAAO,CAAC,EAE7E,CACT,CCjCA,SAAgB,EAAiC,EAAsC,CAAC,EAAG,CACzF,GAAM,CAAE,EAA0B,GAAA,EAAsC,SAA2B,CAAC,CAAC,EAE/F,EAAM,EAA0B,KAAK,GAAG,EAExC,EAAqB,EAAuC,EAA0B,QAC1F,EAAgB,+CAA+C,CAAyB,CAAC,EAc3F,OAZA,EAAM,cAAgB,CAEhB,EAAmB,MAAM,SAAW,GAInC,EAAmB,cAGxB,EAA4B,EAAmB,IAAI,CACrD,EAAG,CAAE,EAAK,EAAmB,aAAc,EAAmB,MAAM,MAAO,CAAC,EAErE,CACT"}
@@ -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"./UCDGupVs.chunk.js";import{b as a}from"./BhKv6dKl2.chunk.js";import{n as o}from"./CbiGs3Tn.chunk.js";import{s}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{n as c,t as l}from"./DmEz0Sg_2.chunk.js";import{t as u}from"./JmL1DHFu.chunk.js";import{t as d}from"./C8hLOeBc2.chunk.js";import{t as f}from"./DICjfxIb.chunk.js";import{t as p}from"./VY2KbIoM.chunk.js";import{t as m}from"./mStmtFRo.chunk.js";e();var h=t();function g(e){return(0,h.jsxs)(f,{children:[(0,h.jsx)(f.Image,{src:d.EmptyStates.CLIPS}),(0,h.jsx)(f.Heading,{children:`No clips`}),(0,h.jsx)(f.Info,{children:`No clips have been created on this video yet.`}),(0,h.jsx)(f.Cta,{text:`Create a clip`,appLink:{application:r.CLIPS,action:n.Clips.CREATE_CLIP,args:[e.videoId]}})]})}var _=r.CLIPS,v=e=>({application:_,action:n.Clips.PREVIEW_CLIP,args:[e.id]});function y(e){let t=s(u.video(e.videoId)),r=s(i.currentUser()),d=s(u.videoClips(e.videoId)),f=!d.data||!r.data||!t.data;return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(m,{videoId:e.videoId,activeAction:n.Videos.EDIT_VIDEO_CLIPS,currentUser:r.data}),f?(0,h.jsx)(`div`,{className:`text-center mt-5`,children:(0,h.jsx)(o,{as:`div`,animation:`border`,role:`status`})}):d.data.data.length?(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(p,{memberName:`Clips`,video:t.data}),(0,h.jsx)(a,{collection:d.data,columns:[{header:`ID`,accessor:`id`,appLink:v},{header:`Name`,accessor:`name`,appLink:v},{header:`Description`,accessor:`description`,appLink:v},{header:`Status`,accessor:e=>(0,h.jsx)(`div`,{className:`d-inline-block`,children:(0,h.jsx)(l,{data:e.status,type:c.Status})}),appLink:v},{header:`Creator`,accessor:e=>e.owner?.email??`Unknown`,appLink:v}],collectionAppLink:{application:_,action:n.Videos.EDIT_VIDEO_CLIPS},newObjectAppLink:{application:_,action:n.Clips.CREATE_CLIP,args:[e.videoId]},objectName:`Clip`})]}):(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(p,{memberName:`Clips`,video:t.data}),(0,h.jsx)(g,{videoId:e.videoId})]})]})}export{y as EditVideoClipsView};
2
- //# sourceMappingURL=FXPxauLF.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"./UCDGupVs.chunk.js";import{b as a}from"./GpDEun8c2.chunk.js";import{n as o}from"./CbiGs3Tn.chunk.js";import{s}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{n as c,t as l}from"./DmEz0Sg_2.chunk.js";import{t as u}from"./JmL1DHFu.chunk.js";import{t as d}from"./C8hLOeBc2.chunk.js";import{t as f}from"./DICjfxIb.chunk.js";import{t as p}from"./VY2KbIoM.chunk.js";import{t as m}from"./BT-jeT7C.chunk.js";e();var h=t();function g(e){return(0,h.jsxs)(f,{children:[(0,h.jsx)(f.Image,{src:d.EmptyStates.CLIPS}),(0,h.jsx)(f.Heading,{children:`No clips`}),(0,h.jsx)(f.Info,{children:`No clips have been created on this video yet.`}),(0,h.jsx)(f.Cta,{text:`Create a clip`,appLink:{application:r.CLIPS,action:n.Clips.CREATE_CLIP,args:[e.videoId]}})]})}var _=r.CLIPS,v=e=>({application:_,action:n.Clips.PREVIEW_CLIP,args:[e.id]});function y(e){let t=s(u.video(e.videoId)),r=s(i.currentUser()),d=s(u.videoClips(e.videoId)),f=!d.data||!r.data||!t.data;return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(m,{videoId:e.videoId,activeAction:n.Videos.EDIT_VIDEO_CLIPS,currentUser:r.data}),f?(0,h.jsx)(`div`,{className:`text-center mt-5`,children:(0,h.jsx)(o,{as:`div`,animation:`border`,role:`status`})}):d.data.data.length?(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(p,{memberName:`Clips`,video:t.data}),(0,h.jsx)(a,{collection:d.data,columns:[{header:`ID`,accessor:`id`,appLink:v},{header:`Name`,accessor:`name`,appLink:v},{header:`Description`,accessor:`description`,appLink:v},{header:`Status`,accessor:e=>(0,h.jsx)(`div`,{className:`d-inline-block`,children:(0,h.jsx)(l,{data:e.status,type:c.Status})}),appLink:v},{header:`Creator`,accessor:e=>e.owner?.email??`Unknown`,appLink:v}],collectionAppLink:{application:_,action:n.Videos.EDIT_VIDEO_CLIPS},newObjectAppLink:{application:_,action:n.Clips.CREATE_CLIP,args:[e.videoId]},objectName:`Clip`})]}):(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(p,{memberName:`Clips`,video:t.data}),(0,h.jsx)(g,{videoId:e.videoId})]})]})}export{y as EditVideoClipsView};
2
+ //# sourceMappingURL=Bu4F3uuX.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FXPxauLF.chunk.js","names":[],"sources":["../../../../../src/apps/videos/views/edit-video-clips/empty-state/VideoClipEmptyState.tsx","../../../../../src/apps/videos/views/edit-video-clips/EditVideoClipsView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nimport { Actions, AppChannels } from 'shared/constants';\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\ninterface VideoClipEmptyStateProps {\n videoId: string;\n}\n\nexport function VideoClipEmptyState(props: VideoClipEmptyStateProps): JSX.Element {\n return (\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.CLIPS} />\n\n <EmptyState.Heading>No clips</EmptyState.Heading>\n <EmptyState.Info>No clips have been created on this video yet.</EmptyState.Info>\n <EmptyState.Cta\n text='Create a clip'\n appLink={{\n application: AppChannels.CLIPS,\n action: Actions.Clips.CREATE_CLIP,\n args: [props.videoId]\n }}\n />\n </EmptyState>\n );\n}\n","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { Clip, Video } from 'libs/shared/interfaces';\nimport { ClipCollection } from 'libs/shared/interfaces/collections/ClipCollection';\nimport { CuratorUser } from 'libs/shared/interfaces/models/User';\n\nimport { ObjectCollection } from 'shared/components';\nimport { Actions, AppChannels } from 'shared/constants';\n\nimport { EditVideoMemberHeader } from 'apps/videos/components/edit-video-member-header/EditVideoMemberHeader';\nimport { EditVideoNav } from 'apps/videos/components/edit-video-nav/EditVideoNav';\nimport { VideoRequests } from 'apps/videos/flight-requests/CuratorVideoRequests';\nimport { VideoClipEmptyState } from 'apps/videos/views/edit-video-clips/empty-state/VideoClipEmptyState';\n\nconst application = AppChannels.CLIPS;\n\nconst getAppLink = (clip: Clip) => ({\n application,\n action: Actions.Clips.PREVIEW_CLIP,\n args: [clip.id]\n});\n\ninterface EditVideoClipsViewProps {\n videoId: string;\n}\n\nexport function EditVideoClipsView(\n props: EditVideoClipsViewProps\n): React.ReactElement {\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.videoId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n const clips = Flight.useBasicFetch<ClipCollection>(VideoRequests.videoClips(props.videoId));\n \n const isLoading = !clips.data || !currentUser.data || !video.data;\n\n return (\n <>\n <EditVideoNav\n videoId={props.videoId}\n activeAction={Actions.Videos.EDIT_VIDEO_CLIPS}\n currentUser={currentUser.data}\n />\n\n {(() => {\n if (isLoading) {\n return (\n <div className='text-center mt-5'>\n <Spinner as='div' animation='border' role='status' />\n </div>\n );\n }\n\n return clips.data.data.length ? (\n <>\n <EditVideoMemberHeader memberName='Clips' video={video.data} />\n <ObjectCollection\n collection={clips.data}\n columns={[\n {\n header: 'ID',\n accessor: 'id',\n appLink: getAppLink\n },\n {\n header: 'Name',\n accessor: 'name',\n appLink: getAppLink\n },\n {\n header: 'Description',\n accessor: 'description',\n appLink: getAppLink\n },\n {\n header: 'Status',\n accessor: clip => <div className='d-inline-block'><Badge data={clip.status} type={BadgeType.Status} /></div>,\n appLink: getAppLink\n },\n {\n header: 'Creator',\n accessor: clip => clip.owner?.email ?? 'Unknown',\n appLink: getAppLink\n }\n ]}\n collectionAppLink={{ application, action: Actions.Videos.EDIT_VIDEO_CLIPS }}\n newObjectAppLink={{ application, action: Actions.Clips.CREATE_CLIP, args: [props.videoId]}}\n objectName='Clip'\n />\n </>\n ) : (\n <>\n <EditVideoMemberHeader memberName='Clips' video={video.data} />\n <VideoClipEmptyState videoId={props.videoId} />\n </>\n );\n })()}\n </>\n );\n}\n"],"mappings":"0lBAWA,SAAgB,EAAoB,EAA8C,CAChF,OACE,EAAA,EAAA,KAAA,CAAC,EAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAW,MAAZ,CAAkB,IAAK,EAAU,YAAY,KAAQ,CAAA,GAErD,EAAA,EAAA,IAAA,CAAC,EAAW,QAAZ,CAAA,SAAoB,UAA4B,CAAA,GAChD,EAAA,EAAA,IAAA,CAAC,EAAW,KAAZ,CAAA,SAAiB,+CAA8D,CAAA,GAC/E,EAAA,EAAA,IAAA,CAAC,EAAW,IAAZ,CACE,KAAK,gBACL,QAAS,CACP,YAAa,EAAY,MACzB,OAAQ,EAAQ,MAAM,YACtB,KAAM,CAAC,EAAM,OAAO,CACtB,CACD,CAAA,CACS,CAAA,CAAA,CAEhB,CCTA,IAAM,EAAc,EAAY,MAE1B,EAAc,IAAgB,CAClC,cACA,OAAQ,EAAQ,MAAM,aACtB,KAAM,CAAC,EAAK,EAAE,CAChB,GAMA,SAAgB,EACd,EACoB,CACpB,IAAM,EAAQ,EAA4B,EAAc,MAAM,EAAM,OAAO,CAAC,EACtE,EAAc,EAAkC,EAAa,YAAY,CAAC,EAC1E,EAAQ,EAAqC,EAAc,WAAW,EAAM,OAAO,CAAC,EAEpF,EAAY,CAAC,EAAM,MAAQ,CAAC,EAAY,MAAQ,CAAC,EAAM,KAE7D,OACE,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,QAAS,EAAM,QACf,aAAc,EAAQ,OAAO,iBAC7B,YAAa,EAAY,IAC1B,CAAA,EAGK,GAEA,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,6BACb,EAAA,EAAA,IAAA,CAAC,EAAD,CAAS,GAAG,MAAM,UAAU,SAAS,KAAK,QAAU,CAAA,CACjD,CAAA,EAIF,EAAM,KAAK,KAAK,QACrB,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAuB,WAAW,QAAQ,MAAO,EAAM,IAAO,CAAA,GAC9D,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,WAAY,EAAM,KAClB,QAAS,CACP,CACE,OAAQ,KACR,SAAU,KACV,QAAS,CACX,EACA,CACE,OAAQ,OACR,SAAU,OACV,QAAS,CACX,EACA,CACE,OAAQ,cACR,SAAU,cACV,QAAS,CACX,EACA,CACE,OAAQ,SACR,SAAU,IAAQ,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,2BAAiB,EAAA,EAAA,IAAA,CAAC,EAAD,CAAO,KAAM,EAAK,OAAQ,KAAM,EAAU,MAAS,CAAA,CAAM,CAAA,EAC3G,QAAS,CACX,EACA,CACE,OAAQ,UACR,SAAU,GAAQ,EAAK,OAAO,OAAS,UACvC,QAAS,CACX,CACF,EACA,kBAAmB,CAAE,cAAa,OAAQ,EAAQ,OAAO,gBAAiB,EAC1E,iBAAkB,CAAE,cAAa,OAAQ,EAAQ,MAAM,YAAa,KAAM,CAAC,EAAM,OAAO,CAAC,EACzF,WAAW,MACZ,CAAA,CACD,CAAA,CAAA,GAEF,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAuB,WAAW,QAAQ,MAAO,EAAM,IAAO,CAAA,GAC9D,EAAA,EAAA,IAAA,CAAC,EAAD,CAAqB,QAAS,EAAM,OAAU,CAAA,CAC9C,CAAA,CAAA,CAGN,CAAA,CAAA,CAEN"}
1
+ {"version":3,"file":"Bu4F3uuX.chunk.js","names":[],"sources":["../../../../../src/apps/videos/views/edit-video-clips/empty-state/VideoClipEmptyState.tsx","../../../../../src/apps/videos/views/edit-video-clips/EditVideoClipsView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nimport { Actions, AppChannels } from 'shared/constants';\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\ninterface VideoClipEmptyStateProps {\n videoId: string;\n}\n\nexport function VideoClipEmptyState(props: VideoClipEmptyStateProps): JSX.Element {\n return (\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.CLIPS} />\n\n <EmptyState.Heading>No clips</EmptyState.Heading>\n <EmptyState.Info>No clips have been created on this video yet.</EmptyState.Info>\n <EmptyState.Cta\n text='Create a clip'\n appLink={{\n application: AppChannels.CLIPS,\n action: Actions.Clips.CREATE_CLIP,\n args: [props.videoId]\n }}\n />\n </EmptyState>\n );\n}\n","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { Clip, Video } from 'libs/shared/interfaces';\nimport { ClipCollection } from 'libs/shared/interfaces/collections/ClipCollection';\nimport { CuratorUser } from 'libs/shared/interfaces/models/User';\n\nimport { ObjectCollection } from 'shared/components';\nimport { Actions, AppChannels } from 'shared/constants';\n\nimport { EditVideoMemberHeader } from 'apps/videos/components/edit-video-member-header/EditVideoMemberHeader';\nimport { EditVideoNav } from 'apps/videos/components/edit-video-nav/EditVideoNav';\nimport { VideoRequests } from 'apps/videos/flight-requests/CuratorVideoRequests';\nimport { VideoClipEmptyState } from 'apps/videos/views/edit-video-clips/empty-state/VideoClipEmptyState';\n\nconst application = AppChannels.CLIPS;\n\nconst getAppLink = (clip: Clip) => ({\n application,\n action: Actions.Clips.PREVIEW_CLIP,\n args: [clip.id]\n});\n\ninterface EditVideoClipsViewProps {\n videoId: string;\n}\n\nexport function EditVideoClipsView(\n props: EditVideoClipsViewProps\n): React.ReactElement {\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.videoId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n const clips = Flight.useBasicFetch<ClipCollection>(VideoRequests.videoClips(props.videoId));\n \n const isLoading = !clips.data || !currentUser.data || !video.data;\n\n return (\n <>\n <EditVideoNav\n videoId={props.videoId}\n activeAction={Actions.Videos.EDIT_VIDEO_CLIPS}\n currentUser={currentUser.data}\n />\n\n {(() => {\n if (isLoading) {\n return (\n <div className='text-center mt-5'>\n <Spinner as='div' animation='border' role='status' />\n </div>\n );\n }\n\n return clips.data.data.length ? (\n <>\n <EditVideoMemberHeader memberName='Clips' video={video.data} />\n <ObjectCollection\n collection={clips.data}\n columns={[\n {\n header: 'ID',\n accessor: 'id',\n appLink: getAppLink\n },\n {\n header: 'Name',\n accessor: 'name',\n appLink: getAppLink\n },\n {\n header: 'Description',\n accessor: 'description',\n appLink: getAppLink\n },\n {\n header: 'Status',\n accessor: clip => <div className='d-inline-block'><Badge data={clip.status} type={BadgeType.Status} /></div>,\n appLink: getAppLink\n },\n {\n header: 'Creator',\n accessor: clip => clip.owner?.email ?? 'Unknown',\n appLink: getAppLink\n }\n ]}\n collectionAppLink={{ application, action: Actions.Videos.EDIT_VIDEO_CLIPS }}\n newObjectAppLink={{ application, action: Actions.Clips.CREATE_CLIP, args: [props.videoId]}}\n objectName='Clip'\n />\n </>\n ) : (\n <>\n <EditVideoMemberHeader memberName='Clips' video={video.data} />\n <VideoClipEmptyState videoId={props.videoId} />\n </>\n );\n })()}\n </>\n );\n}\n"],"mappings":"0lBAWA,SAAgB,EAAoB,EAA8C,CAChF,OACE,EAAA,EAAA,KAAA,CAAC,EAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAW,MAAZ,CAAkB,IAAK,EAAU,YAAY,KAAQ,CAAA,GAErD,EAAA,EAAA,IAAA,CAAC,EAAW,QAAZ,CAAA,SAAoB,UAA4B,CAAA,GAChD,EAAA,EAAA,IAAA,CAAC,EAAW,KAAZ,CAAA,SAAiB,+CAA8D,CAAA,GAC/E,EAAA,EAAA,IAAA,CAAC,EAAW,IAAZ,CACE,KAAK,gBACL,QAAS,CACP,YAAa,EAAY,MACzB,OAAQ,EAAQ,MAAM,YACtB,KAAM,CAAC,EAAM,OAAO,CACtB,CACD,CAAA,CACS,CAAA,CAAA,CAEhB,CCTA,IAAM,EAAc,EAAY,MAE1B,EAAc,IAAgB,CAClC,cACA,OAAQ,EAAQ,MAAM,aACtB,KAAM,CAAC,EAAK,EAAE,CAChB,GAMA,SAAgB,EACd,EACoB,CACpB,IAAM,EAAQ,EAA4B,EAAc,MAAM,EAAM,OAAO,CAAC,EACtE,EAAc,EAAkC,EAAa,YAAY,CAAC,EAC1E,EAAQ,EAAqC,EAAc,WAAW,EAAM,OAAO,CAAC,EAEpF,EAAY,CAAC,EAAM,MAAQ,CAAC,EAAY,MAAQ,CAAC,EAAM,KAE7D,OACE,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,QAAS,EAAM,QACf,aAAc,EAAQ,OAAO,iBAC7B,YAAa,EAAY,IAC1B,CAAA,EAGK,GAEA,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,6BACb,EAAA,EAAA,IAAA,CAAC,EAAD,CAAS,GAAG,MAAM,UAAU,SAAS,KAAK,QAAU,CAAA,CACjD,CAAA,EAIF,EAAM,KAAK,KAAK,QACrB,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAuB,WAAW,QAAQ,MAAO,EAAM,IAAO,CAAA,GAC9D,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,WAAY,EAAM,KAClB,QAAS,CACP,CACE,OAAQ,KACR,SAAU,KACV,QAAS,CACX,EACA,CACE,OAAQ,OACR,SAAU,OACV,QAAS,CACX,EACA,CACE,OAAQ,cACR,SAAU,cACV,QAAS,CACX,EACA,CACE,OAAQ,SACR,SAAU,IAAQ,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,2BAAiB,EAAA,EAAA,IAAA,CAAC,EAAD,CAAO,KAAM,EAAK,OAAQ,KAAM,EAAU,MAAS,CAAA,CAAM,CAAA,EAC3G,QAAS,CACX,EACA,CACE,OAAQ,UACR,SAAU,GAAQ,EAAK,OAAO,OAAS,UACvC,QAAS,CACX,CACF,EACA,kBAAmB,CAAE,cAAa,OAAQ,EAAQ,OAAO,gBAAiB,EAC1E,iBAAkB,CAAE,cAAa,OAAQ,EAAQ,MAAM,YAAa,KAAM,CAAC,EAAM,OAAO,CAAC,EACzF,WAAW,MACZ,CAAA,CACD,CAAA,CAAA,GAEF,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAuB,WAAW,QAAQ,MAAO,EAAM,IAAO,CAAA,GAC9D,EAAA,EAAA,IAAA,CAAC,EAAD,CAAqB,QAAS,EAAM,OAAU,CAAA,CAC9C,CAAA,CAAA,CAGN,CAAA,CAAA,CAEN"}