@clickview/curator 1.100.0-rc.1 → 1.100.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (321) hide show
  1. package/dist/.vite/manifest.json +1779 -1779
  2. package/dist/Assets/js/dist/scripts/{CYhNyVj0.chunk.js → -6zuD8lo.chunk.js} +2 -2
  3. package/dist/Assets/js/dist/scripts/{CYhNyVj0.chunk.js.map → -6zuD8lo.chunk.js.map} +1 -1
  4. package/dist/Assets/js/dist/scripts/{D28bEsam.chunk.js → 0A42jU2r.chunk.js} +2 -2
  5. package/dist/Assets/js/dist/scripts/{D28bEsam.chunk.js.map → 0A42jU2r.chunk.js.map} +1 -1
  6. package/dist/Assets/js/dist/scripts/{oYHUjbwb2.chunk.js → 0ogjGD4J2.chunk.js} +2 -2
  7. package/dist/Assets/js/dist/scripts/{oYHUjbwb2.chunk.js.map → 0ogjGD4J2.chunk.js.map} +1 -1
  8. package/dist/Assets/js/dist/scripts/{PeuFojmJ2.chunk.js → 2aCj1HHJ2.chunk.js} +2 -2
  9. package/dist/Assets/js/dist/scripts/{PeuFojmJ2.chunk.js.map → 2aCj1HHJ2.chunk.js.map} +1 -1
  10. package/dist/Assets/js/dist/scripts/{q7pjZoNd.chunk.js → 2zbtFQka.chunk.js} +2 -2
  11. package/dist/Assets/js/dist/scripts/{q7pjZoNd.chunk.js.map → 2zbtFQka.chunk.js.map} +1 -1
  12. package/dist/Assets/js/dist/scripts/{0S5J0xX22.chunk.js → 3IQ_8AZP2.chunk.js} +2 -2
  13. package/dist/Assets/js/dist/scripts/{0S5J0xX22.chunk.js.map → 3IQ_8AZP2.chunk.js.map} +1 -1
  14. package/dist/Assets/js/dist/scripts/{DvP7S5Uq.chunk.js → 3eMwLZ5D.chunk.js} +2 -2
  15. package/dist/Assets/js/dist/scripts/{DvP7S5Uq.chunk.js.map → 3eMwLZ5D.chunk.js.map} +1 -1
  16. package/dist/Assets/js/dist/scripts/{y1L3G7XA2.chunk.js → 4Tx2JSvk2.chunk.js} +2 -2
  17. package/dist/Assets/js/dist/scripts/{y1L3G7XA2.chunk.js.map → 4Tx2JSvk2.chunk.js.map} +1 -1
  18. package/dist/Assets/js/dist/scripts/{BbR7yW4A2.chunk.js → 5uVJfyDx2.chunk.js} +2 -2
  19. package/dist/Assets/js/dist/scripts/{BbR7yW4A2.chunk.js.map → 5uVJfyDx2.chunk.js.map} +1 -1
  20. package/dist/Assets/js/dist/scripts/{B52yjTo5.chunk.js → 6l2s6d3Q.chunk.js} +2 -2
  21. package/dist/Assets/js/dist/scripts/{B52yjTo5.chunk.js.map → 6l2s6d3Q.chunk.js.map} +1 -1
  22. package/dist/Assets/js/dist/scripts/{DezIbRcB2.chunk.js → 8RAh0VA72.chunk.js} +2 -2
  23. package/dist/Assets/js/dist/scripts/{DezIbRcB2.chunk.js.map → 8RAh0VA72.chunk.js.map} +1 -1
  24. package/dist/Assets/js/dist/scripts/{CixcMUHF.chunk.js → 9nk_zFtT.chunk.js} +2 -2
  25. package/dist/Assets/js/dist/scripts/{CixcMUHF.chunk.js.map → 9nk_zFtT.chunk.js.map} +1 -1
  26. package/dist/Assets/js/dist/scripts/{Bk9vy70e2.chunk.js → Ae4rMqFm2.chunk.js} +2 -2
  27. package/dist/Assets/js/dist/scripts/{Bk9vy70e2.chunk.js.map → Ae4rMqFm2.chunk.js.map} +1 -1
  28. package/dist/Assets/js/dist/scripts/{Bzh_AwaG.chunk.js → B0mCquXn.chunk.js} +2 -2
  29. package/dist/Assets/js/dist/scripts/{Bzh_AwaG.chunk.js.map → B0mCquXn.chunk.js.map} +1 -1
  30. package/dist/Assets/js/dist/scripts/B1pBJzjh.chunk.js +1 -0
  31. package/dist/Assets/js/dist/scripts/{BswFY0mR2.chunk.js → B6IinlWw2.chunk.js} +2 -2
  32. package/dist/Assets/js/dist/scripts/{BswFY0mR2.chunk.js.map → B6IinlWw2.chunk.js.map} +1 -1
  33. package/dist/Assets/js/dist/scripts/{ClpIRgLR.chunk.js → B6NMAAhW.chunk.js} +2 -2
  34. package/dist/Assets/js/dist/scripts/{ClpIRgLR.chunk.js.map → B6NMAAhW.chunk.js.map} +1 -1
  35. package/dist/Assets/js/dist/scripts/{BCMXlwdC2.chunk.js → B8RZKQTs2.chunk.js} +2 -2
  36. package/dist/Assets/js/dist/scripts/{BCMXlwdC2.chunk.js.map → B8RZKQTs2.chunk.js.map} +1 -1
  37. package/dist/Assets/js/dist/scripts/{CymdouaN.chunk.js → B9R92bqj.chunk.js} +2 -2
  38. package/dist/Assets/js/dist/scripts/{CymdouaN.chunk.js.map → B9R92bqj.chunk.js.map} +1 -1
  39. package/dist/Assets/js/dist/scripts/{CtVYDK7g.chunk.js → BAFYJZ4c.chunk.js} +2 -2
  40. package/dist/Assets/js/dist/scripts/{CtVYDK7g.chunk.js.map → BAFYJZ4c.chunk.js.map} +1 -1
  41. package/dist/Assets/js/dist/scripts/{_wZpe632.chunk.js → BFPSIGJg.chunk.js} +2 -2
  42. package/dist/Assets/js/dist/scripts/{_wZpe632.chunk.js.map → BFPSIGJg.chunk.js.map} +1 -1
  43. package/dist/Assets/js/dist/scripts/{BNHULwJy2.chunk.js → BGiLDtc92.chunk.js} +2 -2
  44. package/dist/Assets/js/dist/scripts/{BNHULwJy2.chunk.js.map → BGiLDtc92.chunk.js.map} +1 -1
  45. package/dist/Assets/js/dist/scripts/{DA9R8atp2.chunk.js → BH6LIpwu2.chunk.js} +2 -2
  46. package/dist/Assets/js/dist/scripts/{DA9R8atp2.chunk.js.map → BH6LIpwu2.chunk.js.map} +1 -1
  47. package/dist/Assets/js/dist/scripts/{DbrVjVdn.chunk.js → BMj3pXcm.chunk.js} +2 -2
  48. package/dist/Assets/js/dist/scripts/{DbrVjVdn.chunk.js.map → BMj3pXcm.chunk.js.map} +1 -1
  49. package/dist/Assets/js/dist/scripts/{CDvLjxwS.chunk.js → BQTfNBFU.chunk.js} +2 -2
  50. package/dist/Assets/js/dist/scripts/{CDvLjxwS.chunk.js.map → BQTfNBFU.chunk.js.map} +1 -1
  51. package/dist/Assets/js/dist/scripts/{mStmtFRo.chunk.js → BT-jeT7C.chunk.js} +2 -2
  52. package/dist/Assets/js/dist/scripts/{mStmtFRo.chunk.js.map → BT-jeT7C.chunk.js.map} +1 -1
  53. package/dist/Assets/js/dist/scripts/{FlF2O19P2.chunk.js → BUD4osIg2.chunk.js} +2 -2
  54. package/dist/Assets/js/dist/scripts/{FlF2O19P2.chunk.js.map → BUD4osIg2.chunk.js.map} +1 -1
  55. package/dist/Assets/js/dist/scripts/{DWS9yr24.chunk.js → BVoG71Kc.chunk.js} +2 -2
  56. package/dist/Assets/js/dist/scripts/{DWS9yr24.chunk.js.map → BVoG71Kc.chunk.js.map} +1 -1
  57. package/dist/Assets/js/dist/scripts/{B9tf3oT62.chunk.js → BW5iVK1B2.chunk.js} +2 -2
  58. package/dist/Assets/js/dist/scripts/{B9tf3oT62.chunk.js.map → BW5iVK1B2.chunk.js.map} +1 -1
  59. package/dist/Assets/js/dist/scripts/{C2mEE4FT.chunk.js → BW9r-3iO.chunk.js} +2 -2
  60. package/dist/Assets/js/dist/scripts/{C2mEE4FT.chunk.js.map → BW9r-3iO.chunk.js.map} +1 -1
  61. package/dist/Assets/js/dist/scripts/{Dpgqkqbp.chunk.js → BX1tMzoa.chunk.js} +2 -2
  62. package/dist/Assets/js/dist/scripts/{Dpgqkqbp.chunk.js.map → BX1tMzoa.chunk.js.map} +1 -1
  63. package/dist/Assets/js/dist/scripts/{DVRzbAn6.chunk.js → BXaC-l33.chunk.js} +2 -2
  64. package/dist/Assets/js/dist/scripts/{DVRzbAn6.chunk.js.map → BXaC-l33.chunk.js.map} +1 -1
  65. package/dist/Assets/js/dist/scripts/{BaR7D4NT2.chunk.js → BY-c3M2b2.chunk.js} +2 -2
  66. package/dist/Assets/js/dist/scripts/{BaR7D4NT2.chunk.js.map → BY-c3M2b2.chunk.js.map} +1 -1
  67. package/dist/Assets/js/dist/scripts/{CJpVJtZk.chunk.js → BYMuPFbe.chunk.js} +2 -2
  68. package/dist/Assets/js/dist/scripts/{CJpVJtZk.chunk.js.map → BYMuPFbe.chunk.js.map} +1 -1
  69. package/dist/Assets/js/dist/scripts/{C5INFWaM2.chunk.js → BaOAOuSc2.chunk.js} +2 -2
  70. package/dist/Assets/js/dist/scripts/{C5INFWaM2.chunk.js.map → BaOAOuSc2.chunk.js.map} +1 -1
  71. package/dist/Assets/js/dist/scripts/{wAWlO6hc.chunk.js → Bb_f3Lku.chunk.js} +2 -2
  72. package/dist/Assets/js/dist/scripts/{wAWlO6hc.chunk.js.map → Bb_f3Lku.chunk.js.map} +1 -1
  73. package/dist/Assets/js/dist/scripts/{BLJO44vl.chunk.js → BdJYoUIO.chunk.js} +2 -2
  74. package/dist/Assets/js/dist/scripts/{BLJO44vl.chunk.js.map → BdJYoUIO.chunk.js.map} +1 -1
  75. package/dist/Assets/js/dist/scripts/{CW2k5Ut-2.chunk.js → Bf-6iyfX2.chunk.js} +2 -2
  76. package/dist/Assets/js/dist/scripts/{CW2k5Ut-2.chunk.js.map → Bf-6iyfX2.chunk.js.map} +1 -1
  77. package/dist/Assets/js/dist/scripts/{DxL0ZEcN2.chunk.js → BiPUuGEE2.chunk.js} +2 -2
  78. package/dist/Assets/js/dist/scripts/{DxL0ZEcN2.chunk.js.map → BiPUuGEE2.chunk.js.map} +1 -1
  79. package/dist/Assets/js/dist/scripts/{2XS-c0Xo.chunk.js → Bj4-NRWf.chunk.js} +2 -2
  80. package/dist/Assets/js/dist/scripts/{2XS-c0Xo.chunk.js.map → Bj4-NRWf.chunk.js.map} +1 -1
  81. package/dist/Assets/js/dist/scripts/{D13ViJt82.chunk.js → BkVcraos2.chunk.js} +2 -2
  82. package/dist/Assets/js/dist/scripts/{D13ViJt82.chunk.js.map → BkVcraos2.chunk.js.map} +1 -1
  83. package/dist/Assets/js/dist/scripts/{U1L4Dfoc.chunk.js → BkZ7WS_H.chunk.js} +2 -2
  84. package/dist/Assets/js/dist/scripts/{U1L4Dfoc.chunk.js.map → BkZ7WS_H.chunk.js.map} +1 -1
  85. package/dist/Assets/js/dist/scripts/{DoQiTqRX2.chunk.js → BoMt5mMW2.chunk.js} +2 -2
  86. package/dist/Assets/js/dist/scripts/{DoQiTqRX2.chunk.js.map → BoMt5mMW2.chunk.js.map} +1 -1
  87. package/dist/Assets/js/dist/scripts/{Da_9BBKD2.chunk.js → Bo_WsHZq2.chunk.js} +2 -2
  88. package/dist/Assets/js/dist/scripts/{Da_9BBKD2.chunk.js.map → Bo_WsHZq2.chunk.js.map} +1 -1
  89. package/dist/Assets/js/dist/scripts/{CnyrKBG0.chunk.js → BpV5ErII.chunk.js} +2 -2
  90. package/dist/Assets/js/dist/scripts/{CnyrKBG0.chunk.js.map → BpV5ErII.chunk.js.map} +1 -1
  91. package/dist/Assets/js/dist/scripts/{Dfhl7nI62.chunk.js → BrBPGjLi2.chunk.js} +2 -2
  92. package/dist/Assets/js/dist/scripts/{Dfhl7nI62.chunk.js.map → BrBPGjLi2.chunk.js.map} +1 -1
  93. package/dist/Assets/js/dist/scripts/{DcxGcCkR.chunk.js → BrHyZG_m.chunk.js} +2 -2
  94. package/dist/Assets/js/dist/scripts/{DcxGcCkR.chunk.js.map → BrHyZG_m.chunk.js.map} +1 -1
  95. package/dist/Assets/js/dist/scripts/{FXPxauLF.chunk.js → Bu4F3uuX.chunk.js} +2 -2
  96. package/dist/Assets/js/dist/scripts/{FXPxauLF.chunk.js.map → Bu4F3uuX.chunk.js.map} +1 -1
  97. package/dist/Assets/js/dist/scripts/{DZdJx-7j.chunk.js → BvW9SXzy.chunk.js} +2 -2
  98. package/dist/Assets/js/dist/scripts/{DZdJx-7j.chunk.js.map → BvW9SXzy.chunk.js.map} +1 -1
  99. package/dist/Assets/js/dist/scripts/{CAU0Lbgd.chunk.js → BwKHls91.chunk.js} +2 -2
  100. package/dist/Assets/js/dist/scripts/{CAU0Lbgd.chunk.js.map → BwKHls91.chunk.js.map} +1 -1
  101. package/dist/Assets/js/dist/scripts/{BiTzUyxj2.chunk.js → BxZNJjbX2.chunk.js} +2 -2
  102. package/dist/Assets/js/dist/scripts/{BiTzUyxj2.chunk.js.map → BxZNJjbX2.chunk.js.map} +1 -1
  103. package/dist/Assets/js/dist/scripts/{cymXuIcM.chunk.js → BygVW5WL.chunk.js} +2 -2
  104. package/dist/Assets/js/dist/scripts/{cymXuIcM.chunk.js.map → BygVW5WL.chunk.js.map} +1 -1
  105. package/dist/Assets/js/dist/scripts/{Dx07A6Ct.chunk.js → ByzsHBuo.chunk.js} +2 -2
  106. package/dist/Assets/js/dist/scripts/{Dx07A6Ct.chunk.js.map → ByzsHBuo.chunk.js.map} +1 -1
  107. package/dist/Assets/js/dist/scripts/C-M2om56.chunk.js +3 -0
  108. package/dist/Assets/js/dist/scripts/C-M2om56.chunk.js.map +1 -0
  109. package/dist/Assets/js/dist/scripts/{B6dlmRQL.chunk.js → C0UYMHUe.chunk.js} +2 -2
  110. package/dist/Assets/js/dist/scripts/{B6dlmRQL.chunk.js.map → C0UYMHUe.chunk.js.map} +1 -1
  111. package/dist/Assets/js/dist/scripts/{V0N7tCBl.chunk.js → C0_pEFCD.chunk.js} +2 -2
  112. package/dist/Assets/js/dist/scripts/{V0N7tCBl.chunk.js.map → C0_pEFCD.chunk.js.map} +1 -1
  113. package/dist/Assets/js/dist/scripts/{Cpr1J8Rk2.chunk.js → C2jRLu4_2.chunk.js} +2 -2
  114. package/dist/Assets/js/dist/scripts/{Cpr1J8Rk2.chunk.js.map → C2jRLu4_2.chunk.js.map} +1 -1
  115. package/dist/Assets/js/dist/scripts/{CY56FWb9.chunk.js → C2tBl3l9.chunk.js} +2 -2
  116. package/dist/Assets/js/dist/scripts/{CY56FWb9.chunk.js.map → C2tBl3l9.chunk.js.map} +1 -1
  117. package/dist/Assets/js/dist/scripts/{C3Lx9PwR.chunk.js → C4eazpDh.chunk.js} +2 -2
  118. package/dist/Assets/js/dist/scripts/{C3Lx9PwR.chunk.js.map → C4eazpDh.chunk.js.map} +1 -1
  119. package/dist/Assets/js/dist/scripts/{puobgAYi.chunk.js → CBq4vrjT.chunk.js} +2 -2
  120. package/dist/Assets/js/dist/scripts/{puobgAYi.chunk.js.map → CBq4vrjT.chunk.js.map} +1 -1
  121. package/dist/Assets/js/dist/scripts/{Bcx1C8ae.chunk.js → CBzqRw-k.chunk.js} +2 -2
  122. package/dist/Assets/js/dist/scripts/{Bcx1C8ae.chunk.js.map → CBzqRw-k.chunk.js.map} +1 -1
  123. package/dist/Assets/js/dist/scripts/{BD6DIPGL2.chunk.js → CDAdfAL02.chunk.js} +2 -2
  124. package/dist/Assets/js/dist/scripts/{BD6DIPGL2.chunk.js.map → CDAdfAL02.chunk.js.map} +1 -1
  125. package/dist/Assets/js/dist/scripts/{Ddp1uNfH.chunk.js → CE1Dxq8p.chunk.js} +2 -2
  126. package/dist/Assets/js/dist/scripts/{Ddp1uNfH.chunk.js.map → CE1Dxq8p.chunk.js.map} +1 -1
  127. package/dist/Assets/js/dist/scripts/{C99MPG7E.chunk.js → CG2julEA.chunk.js} +2 -2
  128. package/dist/Assets/js/dist/scripts/{C99MPG7E.chunk.js.map → CG2julEA.chunk.js.map} +1 -1
  129. package/dist/Assets/js/dist/scripts/{tyY3GHEC2.chunk.js → CGcN4g0d2.chunk.js} +2 -2
  130. package/dist/Assets/js/dist/scripts/{tyY3GHEC2.chunk.js.map → CGcN4g0d2.chunk.js.map} +1 -1
  131. package/dist/Assets/js/dist/scripts/{wODD7tmB2.chunk.js → CJmV_FfR2.chunk.js} +2 -2
  132. package/dist/Assets/js/dist/scripts/{wODD7tmB2.chunk.js.map → CJmV_FfR2.chunk.js.map} +1 -1
  133. package/dist/Assets/js/dist/scripts/{DavA1dZZ.chunk.js → CKvVGIRL.chunk.js} +2 -2
  134. package/dist/Assets/js/dist/scripts/{DavA1dZZ.chunk.js.map → CKvVGIRL.chunk.js.map} +1 -1
  135. package/dist/Assets/js/dist/scripts/{CrndJnZp.chunk.js → CL1DcbTZ.chunk.js} +2 -2
  136. package/dist/Assets/js/dist/scripts/{CrndJnZp.chunk.js.map → CL1DcbTZ.chunk.js.map} +1 -1
  137. package/dist/Assets/js/dist/scripts/{DLLL2lwS.chunk.js → CNLx6_fS.chunk.js} +2 -2
  138. package/dist/Assets/js/dist/scripts/{DLLL2lwS.chunk.js.map → CNLx6_fS.chunk.js.map} +1 -1
  139. package/dist/Assets/js/dist/scripts/{w2lackHw.chunk.js → CNUVs80P.chunk.js} +2 -2
  140. package/dist/Assets/js/dist/scripts/{w2lackHw.chunk.js.map → CNUVs80P.chunk.js.map} +1 -1
  141. package/dist/Assets/js/dist/scripts/{CCzvD0H4.chunk.js → CPa__SNX.chunk.js} +2 -2
  142. package/dist/Assets/js/dist/scripts/{CCzvD0H4.chunk.js.map → CPa__SNX.chunk.js.map} +1 -1
  143. package/dist/Assets/js/dist/scripts/{DeDh-wVP.chunk.js → CSA2Tnv9.chunk.js} +2 -2
  144. package/dist/Assets/js/dist/scripts/{DeDh-wVP.chunk.js.map → CSA2Tnv9.chunk.js.map} +1 -1
  145. package/dist/Assets/js/dist/scripts/{CjZJx6-O2.chunk.js → CT-xEpNT2.chunk.js} +2 -2
  146. package/dist/Assets/js/dist/scripts/{CjZJx6-O2.chunk.js.map → CT-xEpNT2.chunk.js.map} +1 -1
  147. package/dist/Assets/js/dist/scripts/{BRPP3VZ1.chunk.js → CT0vfLa0.chunk.js} +2 -2
  148. package/dist/Assets/js/dist/scripts/{BRPP3VZ1.chunk.js.map → CT0vfLa0.chunk.js.map} +1 -1
  149. package/dist/Assets/js/dist/scripts/{DGjNB2Bz.chunk.js → CUDnXypB.chunk.js} +2 -2
  150. package/dist/Assets/js/dist/scripts/{DGjNB2Bz.chunk.js.map → CUDnXypB.chunk.js.map} +1 -1
  151. package/dist/Assets/js/dist/scripts/{cXanUGwK.chunk.js → CeMQZB5J.chunk.js} +2 -2
  152. package/dist/Assets/js/dist/scripts/{cXanUGwK.chunk.js.map → CeMQZB5J.chunk.js.map} +1 -1
  153. package/dist/Assets/js/dist/scripts/Cf5cjLzK.chunk.js +2 -0
  154. package/dist/Assets/js/dist/scripts/{D2iK_uRt.chunk.js.map → Cf5cjLzK.chunk.js.map} +1 -1
  155. package/dist/Assets/js/dist/scripts/{CRNBuqmR.chunk.js → CfGaxIgd.chunk.js} +2 -2
  156. package/dist/Assets/js/dist/scripts/{CRNBuqmR.chunk.js.map → CfGaxIgd.chunk.js.map} +1 -1
  157. package/dist/Assets/js/dist/scripts/{BNr7ZL3F2.chunk.js → Cqfub35W2.chunk.js} +2 -2
  158. package/dist/Assets/js/dist/scripts/{BNr7ZL3F2.chunk.js.map → Cqfub35W2.chunk.js.map} +1 -1
  159. package/dist/Assets/js/dist/scripts/{DRmwJ1it2.chunk.js → Cv8UpP5_2.chunk.js} +2 -2
  160. package/dist/Assets/js/dist/scripts/{DRmwJ1it2.chunk.js.map → Cv8UpP5_2.chunk.js.map} +1 -1
  161. package/dist/Assets/js/dist/scripts/{DOfeXfSj.chunk.js → CvV6jx2d.chunk.js} +2 -2
  162. package/dist/Assets/js/dist/scripts/{DOfeXfSj.chunk.js.map → CvV6jx2d.chunk.js.map} +1 -1
  163. package/dist/Assets/js/dist/scripts/{DnGnhqys.chunk.js → CxENQntH.chunk.js} +2 -2
  164. package/dist/Assets/js/dist/scripts/{DnGnhqys.chunk.js.map → CxENQntH.chunk.js.map} +1 -1
  165. package/dist/Assets/js/dist/scripts/{NMDkdR-8.chunk.js → CxIfJCSc.chunk.js} +2 -2
  166. package/dist/Assets/js/dist/scripts/{NMDkdR-8.chunk.js.map → CxIfJCSc.chunk.js.map} +1 -1
  167. package/dist/Assets/js/dist/scripts/{B9H-d-YC.chunk.js → CxggKQxV.chunk.js} +2 -2
  168. package/dist/Assets/js/dist/scripts/{B9H-d-YC.chunk.js.map → CxggKQxV.chunk.js.map} +1 -1
  169. package/dist/Assets/js/dist/scripts/{B3I44IzQ.chunk.js → CyNNZ1So.chunk.js} +2 -2
  170. package/dist/Assets/js/dist/scripts/{B3I44IzQ.chunk.js.map → CyNNZ1So.chunk.js.map} +1 -1
  171. package/dist/Assets/js/dist/scripts/{B2V1N14S.chunk.js → Cz-WSyAE.chunk.js} +2 -2
  172. package/dist/Assets/js/dist/scripts/{B2V1N14S.chunk.js.map → Cz-WSyAE.chunk.js.map} +1 -1
  173. package/dist/Assets/js/dist/scripts/{S9cTzcQc2.chunk.js → D2aQFJWt2.chunk.js} +2 -2
  174. package/dist/Assets/js/dist/scripts/{S9cTzcQc2.chunk.js.map → D2aQFJWt2.chunk.js.map} +1 -1
  175. package/dist/Assets/js/dist/scripts/{CEsXUxxo2.chunk.js → D2h9W4GA2.chunk.js} +2 -2
  176. package/dist/Assets/js/dist/scripts/{CEsXUxxo2.chunk.js.map → D2h9W4GA2.chunk.js.map} +1 -1
  177. package/dist/Assets/js/dist/scripts/{DqCsVhOS.chunk.js → D3NAhMJm.chunk.js} +2 -2
  178. package/dist/Assets/js/dist/scripts/{DqCsVhOS.chunk.js.map → D3NAhMJm.chunk.js.map} +1 -1
  179. package/dist/Assets/js/dist/scripts/{DpM1KgHy.chunk.js → D3aWaqBW.chunk.js} +2 -2
  180. package/dist/Assets/js/dist/scripts/{DpM1KgHy.chunk.js.map → D3aWaqBW.chunk.js.map} +1 -1
  181. package/dist/Assets/js/dist/scripts/{CxtxOtyF2.chunk.js → D4xcR0492.chunk.js} +2 -2
  182. package/dist/Assets/js/dist/scripts/{CxtxOtyF2.chunk.js.map → D4xcR0492.chunk.js.map} +1 -1
  183. package/dist/Assets/js/dist/scripts/{BEeh_Vbr.chunk.js → D5ek2PiI.chunk.js} +2 -2
  184. package/dist/Assets/js/dist/scripts/{BEeh_Vbr.chunk.js.map → D5ek2PiI.chunk.js.map} +1 -1
  185. package/dist/Assets/js/dist/scripts/{DjqQYm43.chunk.js → D61ei_h6.chunk.js} +2 -2
  186. package/dist/Assets/js/dist/scripts/{DjqQYm43.chunk.js.map → D61ei_h6.chunk.js.map} +1 -1
  187. package/dist/Assets/js/dist/scripts/{lgpeNdac.chunk.js → D6wyTufc.chunk.js} +2 -2
  188. package/dist/Assets/js/dist/scripts/{lgpeNdac.chunk.js.map → D6wyTufc.chunk.js.map} +1 -1
  189. package/dist/Assets/js/dist/scripts/{B8li8ced.chunk.js → D7I90XOo.chunk.js} +2 -2
  190. package/dist/Assets/js/dist/scripts/{B8li8ced.chunk.js.map → D7I90XOo.chunk.js.map} +1 -1
  191. package/dist/Assets/js/dist/scripts/{DBAwgllB.chunk.js → DArfNv9S.chunk.js} +2 -2
  192. package/dist/Assets/js/dist/scripts/{DBAwgllB.chunk.js.map → DArfNv9S.chunk.js.map} +1 -1
  193. package/dist/Assets/js/dist/scripts/{B6uYrrzJ2.chunk.js → DB-51xws2.chunk.js} +2 -2
  194. package/dist/Assets/js/dist/scripts/{B6uYrrzJ2.chunk.js.map → DB-51xws2.chunk.js.map} +1 -1
  195. package/dist/Assets/js/dist/scripts/{C-flCrUr.chunk.js → DENdEA1F.chunk.js} +2 -2
  196. package/dist/Assets/js/dist/scripts/{C-flCrUr.chunk.js.map → DENdEA1F.chunk.js.map} +1 -1
  197. package/dist/Assets/js/dist/scripts/{BuF_pg9-2.chunk.js → DFYiLmms2.chunk.js} +2 -2
  198. package/dist/Assets/js/dist/scripts/{BuF_pg9-2.chunk.js.map → DFYiLmms2.chunk.js.map} +1 -1
  199. package/dist/Assets/js/dist/scripts/{BE6LUVEo2.chunk.js → DHa-x1js2.chunk.js} +2 -2
  200. package/dist/Assets/js/dist/scripts/{BE6LUVEo2.chunk.js.map → DHa-x1js2.chunk.js.map} +1 -1
  201. package/dist/Assets/js/dist/scripts/{DDHep0UM.chunk.js → DHeA2NJS.chunk.js} +2 -2
  202. package/dist/Assets/js/dist/scripts/{DDHep0UM.chunk.js.map → DHeA2NJS.chunk.js.map} +1 -1
  203. package/dist/Assets/js/dist/scripts/{D5OaPA-v.chunk.js → DIDxfMO_.chunk.js} +2 -2
  204. package/dist/Assets/js/dist/scripts/{D5OaPA-v.chunk.js.map → DIDxfMO_.chunk.js.map} +1 -1
  205. package/dist/Assets/js/dist/scripts/{CV7UIOmh2.chunk.js → DMq1wDNm2.chunk.js} +2 -2
  206. package/dist/Assets/js/dist/scripts/{CV7UIOmh2.chunk.js.map → DMq1wDNm2.chunk.js.map} +1 -1
  207. package/dist/Assets/js/dist/scripts/{ByMU9ltp2.chunk.js → DNWM9yfh2.chunk.js} +2 -2
  208. package/dist/Assets/js/dist/scripts/{ByMU9ltp2.chunk.js.map → DNWM9yfh2.chunk.js.map} +1 -1
  209. package/dist/Assets/js/dist/scripts/{DFwtjofq2.chunk.js → DSj7VCEo2.chunk.js} +2 -2
  210. package/dist/Assets/js/dist/scripts/{DFwtjofq2.chunk.js.map → DSj7VCEo2.chunk.js.map} +1 -1
  211. package/dist/Assets/js/dist/scripts/{BSYuzR8N2.chunk.js → DSvehN9D2.chunk.js} +2 -2
  212. package/dist/Assets/js/dist/scripts/{BSYuzR8N2.chunk.js.map → DSvehN9D2.chunk.js.map} +1 -1
  213. package/dist/Assets/js/dist/scripts/{FS74_jrx.chunk.js → DTvCgZ4c.chunk.js} +2 -2
  214. package/dist/Assets/js/dist/scripts/{FS74_jrx.chunk.js.map → DTvCgZ4c.chunk.js.map} +1 -1
  215. package/dist/Assets/js/dist/scripts/{C7Gmh7eY.chunk.js → DWHKdmdQ.chunk.js} +2 -2
  216. package/dist/Assets/js/dist/scripts/{C7Gmh7eY.chunk.js.map → DWHKdmdQ.chunk.js.map} +1 -1
  217. package/dist/Assets/js/dist/scripts/{DXcaOjI_.chunk.js → DYFGF9Pe.chunk.js} +2 -2
  218. package/dist/Assets/js/dist/scripts/{DXcaOjI_.chunk.js.map → DYFGF9Pe.chunk.js.map} +1 -1
  219. package/dist/Assets/js/dist/scripts/{CIw53qNO2.chunk.js → DYOxTenc2.chunk.js} +2 -2
  220. package/dist/Assets/js/dist/scripts/{CIw53qNO2.chunk.js.map → DYOxTenc2.chunk.js.map} +1 -1
  221. package/dist/Assets/js/dist/scripts/{CignflP_2.chunk.js → DZthp5T62.chunk.js} +2 -2
  222. package/dist/Assets/js/dist/scripts/{CignflP_2.chunk.js.map → DZthp5T62.chunk.js.map} +1 -1
  223. package/dist/Assets/js/dist/scripts/{BlqDwJRY.chunk.js → Djgwr16q.chunk.js} +2 -2
  224. package/dist/Assets/js/dist/scripts/{BlqDwJRY.chunk.js.map → Djgwr16q.chunk.js.map} +1 -1
  225. package/dist/Assets/js/dist/scripts/{BwToh2X9.chunk.js → DjnvbVQs.chunk.js} +2 -2
  226. package/dist/Assets/js/dist/scripts/{BwToh2X9.chunk.js.map → DjnvbVQs.chunk.js.map} +1 -1
  227. package/dist/Assets/js/dist/scripts/{UelJUmgx2.chunk.js → DmrhyI9D2.chunk.js} +2 -2
  228. package/dist/Assets/js/dist/scripts/{UelJUmgx2.chunk.js.map → DmrhyI9D2.chunk.js.map} +1 -1
  229. package/dist/Assets/js/dist/scripts/{0KUhq7W7.chunk.js → DnZGILQc.chunk.js} +2 -2
  230. package/dist/Assets/js/dist/scripts/{0KUhq7W7.chunk.js.map → DnZGILQc.chunk.js.map} +1 -1
  231. package/dist/Assets/js/dist/scripts/{BSPrErub.chunk.js → DqnZw1cj.chunk.js} +2 -2
  232. package/dist/Assets/js/dist/scripts/{BSPrErub.chunk.js.map → DqnZw1cj.chunk.js.map} +1 -1
  233. package/dist/Assets/js/dist/scripts/{Bkx2vKcX2.chunk.js → DrAKpy8L2.chunk.js} +2 -2
  234. package/dist/Assets/js/dist/scripts/{Bkx2vKcX2.chunk.js.map → DrAKpy8L2.chunk.js.map} +1 -1
  235. package/dist/Assets/js/dist/scripts/{DX9DFxX2.chunk.js → DsM1bfoR.chunk.js} +2 -2
  236. package/dist/Assets/js/dist/scripts/{DX9DFxX2.chunk.js.map → DsM1bfoR.chunk.js.map} +1 -1
  237. package/dist/Assets/js/dist/scripts/{Dh3G-ann.chunk.js → Dt2TCPUI.chunk.js} +2 -2
  238. package/dist/Assets/js/dist/scripts/{Dh3G-ann.chunk.js.map → Dt2TCPUI.chunk.js.map} +1 -1
  239. package/dist/Assets/js/dist/scripts/{DA6Ynhan.chunk.js → DtylOK55.chunk.js} +2 -2
  240. package/dist/Assets/js/dist/scripts/{DA6Ynhan.chunk.js.map → DtylOK55.chunk.js.map} +1 -1
  241. package/dist/Assets/js/dist/scripts/{CJBiVila2.chunk.js → DuTcsFNo2.chunk.js} +2 -2
  242. package/dist/Assets/js/dist/scripts/{CJBiVila2.chunk.js.map → DuTcsFNo2.chunk.js.map} +1 -1
  243. package/dist/Assets/js/dist/scripts/{BBFS0f7w.chunk.js → Dw0mo6Cf.chunk.js} +2 -2
  244. package/dist/Assets/js/dist/scripts/{BBFS0f7w.chunk.js.map → Dw0mo6Cf.chunk.js.map} +1 -1
  245. package/dist/Assets/js/dist/scripts/{Cg5KHpRA.chunk.js → DwISzabN.chunk.js} +2 -2
  246. package/dist/Assets/js/dist/scripts/{Cg5KHpRA.chunk.js.map → DwISzabN.chunk.js.map} +1 -1
  247. package/dist/Assets/js/dist/scripts/{DMxtE2iS.chunk.js → DxW67uUT.chunk.js} +2 -2
  248. package/dist/Assets/js/dist/scripts/{DMxtE2iS.chunk.js.map → DxW67uUT.chunk.js.map} +1 -1
  249. package/dist/Assets/js/dist/scripts/{BOGS-BOS.chunk.js → Eg4zYYCO.chunk.js} +2 -2
  250. package/dist/Assets/js/dist/scripts/{BOGS-BOS.chunk.js.map → Eg4zYYCO.chunk.js.map} +1 -1
  251. package/dist/Assets/js/dist/scripts/{CSuC7le7.chunk.js → GT6nO4Jv.chunk.js} +2 -2
  252. package/dist/Assets/js/dist/scripts/{CSuC7le7.chunk.js.map → GT6nO4Jv.chunk.js.map} +1 -1
  253. package/dist/Assets/js/dist/scripts/{BhKv6dKl2.chunk.js → GpDEun8c2.chunk.js} +2 -2
  254. package/dist/Assets/js/dist/scripts/{BhKv6dKl2.chunk.js.map → GpDEun8c2.chunk.js.map} +1 -1
  255. package/dist/Assets/js/dist/scripts/{DKJC5qg0.chunk.js → OKjYL31I.chunk.js} +2 -2
  256. package/dist/Assets/js/dist/scripts/{DKJC5qg0.chunk.js.map → OKjYL31I.chunk.js.map} +1 -1
  257. package/dist/Assets/js/dist/scripts/{D8rrJ-jY2.chunk.js → OrCUhFjq2.chunk.js} +2 -2
  258. package/dist/Assets/js/dist/scripts/{D8rrJ-jY2.chunk.js.map → OrCUhFjq2.chunk.js.map} +1 -1
  259. package/dist/Assets/js/dist/scripts/{D3exV_Ay2.chunk.js → SVXAAhk02.chunk.js} +2 -2
  260. package/dist/Assets/js/dist/scripts/{D3exV_Ay2.chunk.js.map → SVXAAhk02.chunk.js.map} +1 -1
  261. package/dist/Assets/js/dist/scripts/{CcZKy7SH.chunk.js → SmmnJrec.chunk.js} +2 -2
  262. package/dist/Assets/js/dist/scripts/{CcZKy7SH.chunk.js.map → SmmnJrec.chunk.js.map} +1 -1
  263. package/dist/Assets/js/dist/scripts/{Dy4nscVE2.chunk.js → T3BageSw2.chunk.js} +2 -2
  264. package/dist/Assets/js/dist/scripts/{Dy4nscVE2.chunk.js.map → T3BageSw2.chunk.js.map} +1 -1
  265. package/dist/Assets/js/dist/scripts/{B8PM5Ji3.chunk.js → T6xxjp_W.chunk.js} +2 -2
  266. package/dist/Assets/js/dist/scripts/{B8PM5Ji3.chunk.js.map → T6xxjp_W.chunk.js.map} +1 -1
  267. package/dist/Assets/js/dist/scripts/{Cp6Af16p.chunk.js → Uc2eW092.chunk.js} +2 -2
  268. package/dist/Assets/js/dist/scripts/{Cp6Af16p.chunk.js.map → Uc2eW092.chunk.js.map} +1 -1
  269. package/dist/Assets/js/dist/scripts/{DmKyGgLu.chunk.js → XHoEdG1q.chunk.js} +2 -2
  270. package/dist/Assets/js/dist/scripts/{DmKyGgLu.chunk.js.map → XHoEdG1q.chunk.js.map} +1 -1
  271. package/dist/Assets/js/dist/scripts/{BdVoyBI02.chunk.js → Y14NYZ692.chunk.js} +2 -2
  272. package/dist/Assets/js/dist/scripts/{BdVoyBI02.chunk.js.map → Y14NYZ692.chunk.js.map} +1 -1
  273. package/dist/Assets/js/dist/scripts/{DrszevCi.chunk.js → Y_IcNhI9.chunk.js} +2 -2
  274. package/dist/Assets/js/dist/scripts/{DrszevCi.chunk.js.map → Y_IcNhI9.chunk.js.map} +1 -1
  275. package/dist/Assets/js/dist/scripts/{CMGpVYHd.chunk.js → Yr5eNz05.chunk.js} +2 -2
  276. package/dist/Assets/js/dist/scripts/{CMGpVYHd.chunk.js.map → Yr5eNz05.chunk.js.map} +1 -1
  277. package/dist/Assets/js/dist/scripts/{QnwProbJ2.chunk.js → Yrc9o6bG2.chunk.js} +2 -2
  278. package/dist/Assets/js/dist/scripts/{QnwProbJ2.chunk.js.map → Yrc9o6bG2.chunk.js.map} +1 -1
  279. package/dist/Assets/js/dist/scripts/{app-Dl-tzfIp.js → app-RphP4Ht0.js} +4 -4
  280. package/dist/Assets/js/dist/scripts/{app-Dl-tzfIp.js.map → app-RphP4Ht0.js.map} +1 -1
  281. package/dist/Assets/js/dist/scripts/{B96Bwi2D.chunk.js → cUgHqo-u.chunk.js} +2 -2
  282. package/dist/Assets/js/dist/scripts/{B96Bwi2D.chunk.js.map → cUgHqo-u.chunk.js.map} +1 -1
  283. package/dist/Assets/js/dist/scripts/{oGkpmMft2.chunk.js → dmUfJoJz2.chunk.js} +2 -2
  284. package/dist/Assets/js/dist/scripts/{oGkpmMft2.chunk.js.map → dmUfJoJz2.chunk.js.map} +1 -1
  285. package/dist/Assets/js/dist/scripts/{DjlPflaG.chunk.js → fapHSEex.chunk.js} +2 -2
  286. package/dist/Assets/js/dist/scripts/{DjlPflaG.chunk.js.map → fapHSEex.chunk.js.map} +1 -1
  287. package/dist/Assets/js/dist/scripts/{CaEXONXp2.chunk.js → jf0e_ii92.chunk.js} +2 -2
  288. package/dist/Assets/js/dist/scripts/{CaEXONXp2.chunk.js.map → jf0e_ii92.chunk.js.map} +1 -1
  289. package/dist/Assets/js/dist/scripts/{Co7TevGA.chunk.js → kp4jXqVv.chunk.js} +2 -2
  290. package/dist/Assets/js/dist/scripts/{Co7TevGA.chunk.js.map → kp4jXqVv.chunk.js.map} +1 -1
  291. package/dist/Assets/js/dist/scripts/lAvSm0ti.chunk.js +2 -0
  292. package/dist/Assets/js/dist/scripts/lAvSm0ti.chunk.js.map +1 -0
  293. package/dist/Assets/js/dist/scripts/{Dmf5vYc42.chunk.js → n7lzp_Mc2.chunk.js} +2 -2
  294. package/dist/Assets/js/dist/scripts/{Dmf5vYc42.chunk.js.map → n7lzp_Mc2.chunk.js.map} +1 -1
  295. package/dist/Assets/js/dist/scripts/{CG9yCT4r2.chunk.js → nvtWO4PW2.chunk.js} +2 -2
  296. package/dist/Assets/js/dist/scripts/{CG9yCT4r2.chunk.js.map → nvtWO4PW2.chunk.js.map} +1 -1
  297. package/dist/Assets/js/dist/scripts/{CACu0hGi2.chunk.js → oYKM19q12.chunk.js} +2 -2
  298. package/dist/Assets/js/dist/scripts/{CACu0hGi2.chunk.js.map → oYKM19q12.chunk.js.map} +1 -1
  299. package/dist/Assets/js/dist/scripts/{B5v11U7g.chunk.js → ohTu1tHz.chunk.js} +2 -2
  300. package/dist/Assets/js/dist/scripts/{B5v11U7g.chunk.js.map → ohTu1tHz.chunk.js.map} +1 -1
  301. package/dist/Assets/js/dist/scripts/{BrT-onLe2.chunk.js → uCRnfBEw2.chunk.js} +2 -2
  302. package/dist/Assets/js/dist/scripts/{BrT-onLe2.chunk.js.map → uCRnfBEw2.chunk.js.map} +1 -1
  303. package/dist/Assets/js/dist/scripts/{3XkTogZ22.chunk.js → udVWVmrH2.chunk.js} +2 -2
  304. package/dist/Assets/js/dist/scripts/{3XkTogZ22.chunk.js.map → udVWVmrH2.chunk.js.map} +1 -1
  305. package/dist/Assets/js/dist/scripts/{DW-yUqjB2.chunk.js → v0VARBBE2.chunk.js} +2 -2
  306. package/dist/Assets/js/dist/scripts/{DW-yUqjB2.chunk.js.map → v0VARBBE2.chunk.js.map} +1 -1
  307. package/dist/Assets/js/dist/scripts/{B4lIRWK22.chunk.js → vf9_5VGa2.chunk.js} +2 -2
  308. package/dist/Assets/js/dist/scripts/{B4lIRWK22.chunk.js.map → vf9_5VGa2.chunk.js.map} +1 -1
  309. package/dist/Assets/js/dist/scripts/{pOwOak4Z2.chunk.js → wTEWtWoE2.chunk.js} +2 -2
  310. package/dist/Assets/js/dist/scripts/{pOwOak4Z2.chunk.js.map → wTEWtWoE2.chunk.js.map} +1 -1
  311. package/dist/Assets/js/dist/scripts/{DPYIBfGB.chunk.js → xj8_Pfx7.chunk.js} +2 -2
  312. package/dist/Assets/js/dist/scripts/{DPYIBfGB.chunk.js.map → xj8_Pfx7.chunk.js.map} +1 -1
  313. package/dist/bundles.json +1 -1
  314. package/dist/en.json +1 -1
  315. package/package.json +1 -1
  316. package/dist/Assets/js/dist/scripts/D2iK_uRt.chunk.js +0 -2
  317. package/dist/Assets/js/dist/scripts/DBUreHJA.chunk.js +0 -3
  318. package/dist/Assets/js/dist/scripts/DBUreHJA.chunk.js.map +0 -1
  319. package/dist/Assets/js/dist/scripts/Dh5DbdtP.chunk.js +0 -2
  320. package/dist/Assets/js/dist/scripts/Dh5DbdtP.chunk.js.map +0 -1
  321. package/dist/Assets/js/dist/scripts/DrBVabtm.chunk.js +0 -1
@@ -1,2 +1,2 @@
1
- import{a as e,i as t}from"./rp704-Pm.chunk.js";import{t as n}from"./Di_u2uix.chunk.js";import{t as r}from"./BvMTtGLi.chunk.js";import{t as i}from"./UCDGupVs.chunk.js";import{y as a}from"./BhKv6dKl2.chunk.js";import{t as o}from"./Bwe05p6O.chunk.js";import{s}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as c}from"./DhqpGW1a.chunk.js";import{t as l}from"./Cwh6cLM4.chunk.js";import{t as u}from"./DqCsVhOS.chunk.js";e();var d=t();function f(e){return{application:r.PLAYLISTS,action:n.Playlists.DASHBOARD,args:[e.dashboardId]}}function p(e){return[{label:`Remove playlist from dashboard`,appLink:{application:r.PLAYLISTS,action:n.Playlists.DELETE_DASHBOARD_WIDGET,args:[e.dashboardId,e.id]},className:`text-danger`}]}function m(e){let t=s(l.playlist(e.playlistId)),r=s(l.dashboardWidgets(e.playlistId)),m=s(i.currentUser());return(0,d.jsxs)(d.Fragment,{children:[!!m.data&&(0,d.jsx)(u,{playlistId:e.playlistId,activeAction:n.Playlists.EDIT_PLAYLIST_DASHBOARDS,currentUser:m.data}),(0,d.jsx)(a,{object:t.data}),!!r.data&&(r.data.length?(0,d.jsx)(o,{objects:r.data,columns:[{header:`Dashboard`,accessor:e=>e.dashboard?.name,appLink:f},{accessor:e=>(0,d.jsx)(`span`,{className:`d-flex justify-content-end`,children:(0,d.jsx)(c,{actions:p(e)})})}]}):(0,d.jsx)(`p`,{children:`This playlist isn't in any dashboards.`}))]})}export{m as EditPlaylistDashboardsView};
2
- //# sourceMappingURL=BSPrErub.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{t as i}from"./UCDGupVs.chunk.js";import{y as a}from"./GpDEun8c2.chunk.js";import{t as o}from"./Bwe05p6O.chunk.js";import{s}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as c}from"./DhqpGW1a.chunk.js";import{t as l}from"./Cwh6cLM4.chunk.js";import{t as u}from"./D3NAhMJm.chunk.js";e();var d=t();function f(e){return{application:r.PLAYLISTS,action:n.Playlists.DASHBOARD,args:[e.dashboardId]}}function p(e){return[{label:`Remove playlist from dashboard`,appLink:{application:r.PLAYLISTS,action:n.Playlists.DELETE_DASHBOARD_WIDGET,args:[e.dashboardId,e.id]},className:`text-danger`}]}function m(e){let t=s(l.playlist(e.playlistId)),r=s(l.dashboardWidgets(e.playlistId)),m=s(i.currentUser());return(0,d.jsxs)(d.Fragment,{children:[!!m.data&&(0,d.jsx)(u,{playlistId:e.playlistId,activeAction:n.Playlists.EDIT_PLAYLIST_DASHBOARDS,currentUser:m.data}),(0,d.jsx)(a,{object:t.data}),!!r.data&&(r.data.length?(0,d.jsx)(o,{objects:r.data,columns:[{header:`Dashboard`,accessor:e=>e.dashboard?.name,appLink:f},{accessor:e=>(0,d.jsx)(`span`,{className:`d-flex justify-content-end`,children:(0,d.jsx)(c,{actions:p(e)})})}]}):(0,d.jsx)(`p`,{children:`This playlist isn't in any dashboards.`}))]})}export{m as EditPlaylistDashboardsView};
2
+ //# sourceMappingURL=DqnZw1cj.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BSPrErub.chunk.js","names":[],"sources":["../../../../../src/apps/playlists/views/edit-playlist-dashboards/EditPlaylistDashboardsView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { ActionOptions, Actions as ActionsComponent } from 'libs/shared/components/actions/Actions';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { CuratorUser, Playlist } from 'libs/shared/interfaces';\n\nimport { ObjectList } from 'shared/components';\nimport { ObjectHeader } from 'shared/components/object-header/ObjectHeader';\nimport { Actions } from 'shared/constants/CuratorActions';\nimport { AppChannels } from 'shared/constants/RadioChannels';\n\nimport { EditPlaylistNav } from 'apps/playlists/components/edit-playlist-nav/EditPlaylistNav';\nimport { PlaylistRequests } from 'apps/playlists/flight-requests/CuratorPlaylistRequests';\nimport { CuratorDashboardWidget } from 'apps/playlists/interfaces';\n\nfunction getDashboardAppLink(widget: CuratorDashboardWidget): Core.AppLink {\n return {\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.DASHBOARD,\n args: [widget.dashboardId]\n };\n}\n\nfunction getDashboardActions(widget: CuratorDashboardWidget): ActionOptions[] {\n return [\n {\n label: 'Remove playlist from dashboard',\n appLink: {\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.DELETE_DASHBOARD_WIDGET,\n args: [ widget.dashboardId, widget.id ]\n },\n className: 'text-danger'\n }\n ];\n}\n\ninterface EditPlaylistDashboardsViewProps {\n playlistId: string;\n}\n\nexport function EditPlaylistDashboardsView(props: EditPlaylistDashboardsViewProps): JSX.Element {\n const playlist = Flight.useBasicFetch<Playlist>(PlaylistRequests.playlist(props.playlistId));\n const widgets = Flight.useBasicFetch<CuratorDashboardWidget[]>(PlaylistRequests.dashboardWidgets(props.playlistId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n\n return (\n <>\n {!!currentUser.data &&\n <EditPlaylistNav\n playlistId={props.playlistId}\n activeAction={Actions.Playlists.EDIT_PLAYLIST_DASHBOARDS}\n currentUser={currentUser.data}\n />\n }\n <ObjectHeader object={playlist.data} />\n {!!widgets.data && (widgets.data.length ?\n <ObjectList\n objects={widgets.data}\n columns={[\n {\n header: 'Dashboard',\n accessor: widget => widget.dashboard?.name,\n appLink: getDashboardAppLink\n },\n {\n accessor: widget => (\n <span className='d-flex justify-content-end'>\n <ActionsComponent actions={getDashboardActions(widget)} />\n </span>\n )\n }\n ]}\n /> :\n <p>This playlist isn't in any dashboards.</p>)\n }\n </>\n );\n}\n"],"mappings":"6bAkBA,SAAS,EAAoB,EAA8C,CACzE,MAAO,CACL,YAAa,EAAY,UACzB,OAAQ,EAAQ,UAAU,UAC1B,KAAM,CAAC,EAAO,WAAW,CAC3B,CACF,CAEA,SAAS,EAAoB,EAAiD,CAC5E,MAAO,CACL,CACE,MAAO,iCACP,QAAS,CACP,YAAa,EAAY,UACzB,OAAQ,EAAQ,UAAU,wBAC1B,KAAM,CAAE,EAAO,YAAa,EAAO,EAAG,CACxC,EACA,UAAW,aACb,CACF,CACF,CAMA,SAAgB,EAA2B,EAAqD,CAC9F,IAAM,EAAW,EAA+B,EAAiB,SAAS,EAAM,UAAU,CAAC,EACrF,EAAU,EAA+C,EAAiB,iBAAiB,EAAM,UAAU,CAAC,EAC5G,EAAc,EAAkC,EAAa,YAAY,CAAC,EAEhF,OACE,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,CACG,CAAC,CAAC,EAAY,OACb,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,WAAY,EAAM,WAClB,aAAc,EAAQ,UAAU,yBAChC,YAAa,EAAY,IAC1B,CAAA,GAEH,EAAA,EAAA,IAAA,CAAC,EAAD,CAAc,OAAQ,EAAS,IAAO,CAAA,EACrC,CAAC,CAAC,EAAQ,OAAS,EAAQ,KAAK,QAC/B,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,QAAS,EAAQ,KACjB,QAAS,CACP,CACE,OAAQ,YACR,SAAU,GAAU,EAAO,WAAW,KACtC,QAAS,CACX,EACA,CACE,SAAU,IACR,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,uCACd,EAAA,EAAA,IAAA,CAAC,EAAD,CAAkB,QAAS,EAAoB,CAAM,CAAI,CAAA,CACrD,CAAA,CAEV,CACF,CACD,CAAA,GACD,EAAA,EAAA,IAAA,CAAC,IAAD,CAAA,SAAG,wCAAyC,CAAA,EAE9C,CAAA,CAAA,CAEN"}
1
+ {"version":3,"file":"DqnZw1cj.chunk.js","names":[],"sources":["../../../../../src/apps/playlists/views/edit-playlist-dashboards/EditPlaylistDashboardsView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { ActionOptions, Actions as ActionsComponent } from 'libs/shared/components/actions/Actions';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { CuratorUser, Playlist } from 'libs/shared/interfaces';\n\nimport { ObjectList } from 'shared/components';\nimport { ObjectHeader } from 'shared/components/object-header/ObjectHeader';\nimport { Actions } from 'shared/constants/CuratorActions';\nimport { AppChannels } from 'shared/constants/RadioChannels';\n\nimport { EditPlaylistNav } from 'apps/playlists/components/edit-playlist-nav/EditPlaylistNav';\nimport { PlaylistRequests } from 'apps/playlists/flight-requests/CuratorPlaylistRequests';\nimport { CuratorDashboardWidget } from 'apps/playlists/interfaces';\n\nfunction getDashboardAppLink(widget: CuratorDashboardWidget): Core.AppLink {\n return {\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.DASHBOARD,\n args: [widget.dashboardId]\n };\n}\n\nfunction getDashboardActions(widget: CuratorDashboardWidget): ActionOptions[] {\n return [\n {\n label: 'Remove playlist from dashboard',\n appLink: {\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.DELETE_DASHBOARD_WIDGET,\n args: [ widget.dashboardId, widget.id ]\n },\n className: 'text-danger'\n }\n ];\n}\n\ninterface EditPlaylistDashboardsViewProps {\n playlistId: string;\n}\n\nexport function EditPlaylistDashboardsView(props: EditPlaylistDashboardsViewProps): JSX.Element {\n const playlist = Flight.useBasicFetch<Playlist>(PlaylistRequests.playlist(props.playlistId));\n const widgets = Flight.useBasicFetch<CuratorDashboardWidget[]>(PlaylistRequests.dashboardWidgets(props.playlistId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n\n return (\n <>\n {!!currentUser.data &&\n <EditPlaylistNav\n playlistId={props.playlistId}\n activeAction={Actions.Playlists.EDIT_PLAYLIST_DASHBOARDS}\n currentUser={currentUser.data}\n />\n }\n <ObjectHeader object={playlist.data} />\n {!!widgets.data && (widgets.data.length ?\n <ObjectList\n objects={widgets.data}\n columns={[\n {\n header: 'Dashboard',\n accessor: widget => widget.dashboard?.name,\n appLink: getDashboardAppLink\n },\n {\n accessor: widget => (\n <span className='d-flex justify-content-end'>\n <ActionsComponent actions={getDashboardActions(widget)} />\n </span>\n )\n }\n ]}\n /> :\n <p>This playlist isn't in any dashboards.</p>)\n }\n </>\n );\n}\n"],"mappings":"6bAkBA,SAAS,EAAoB,EAA8C,CACzE,MAAO,CACL,YAAa,EAAY,UACzB,OAAQ,EAAQ,UAAU,UAC1B,KAAM,CAAC,EAAO,WAAW,CAC3B,CACF,CAEA,SAAS,EAAoB,EAAiD,CAC5E,MAAO,CACL,CACE,MAAO,iCACP,QAAS,CACP,YAAa,EAAY,UACzB,OAAQ,EAAQ,UAAU,wBAC1B,KAAM,CAAE,EAAO,YAAa,EAAO,EAAG,CACxC,EACA,UAAW,aACb,CACF,CACF,CAMA,SAAgB,EAA2B,EAAqD,CAC9F,IAAM,EAAW,EAA+B,EAAiB,SAAS,EAAM,UAAU,CAAC,EACrF,EAAU,EAA+C,EAAiB,iBAAiB,EAAM,UAAU,CAAC,EAC5G,EAAc,EAAkC,EAAa,YAAY,CAAC,EAEhF,OACE,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,CACG,CAAC,CAAC,EAAY,OACb,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,WAAY,EAAM,WAClB,aAAc,EAAQ,UAAU,yBAChC,YAAa,EAAY,IAC1B,CAAA,GAEH,EAAA,EAAA,IAAA,CAAC,EAAD,CAAc,OAAQ,EAAS,IAAO,CAAA,EACrC,CAAC,CAAC,EAAQ,OAAS,EAAQ,KAAK,QAC/B,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,QAAS,EAAQ,KACjB,QAAS,CACP,CACE,OAAQ,YACR,SAAU,GAAU,EAAO,WAAW,KACtC,QAAS,CACX,EACA,CACE,SAAU,IACR,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,uCACd,EAAA,EAAA,IAAA,CAAC,EAAD,CAAkB,QAAS,EAAoB,CAAM,CAAI,CAAA,CACrD,CAAA,CAEV,CACF,CACD,CAAA,GACD,EAAA,EAAA,IAAA,CAAC,IAAD,CAAA,SAAG,wCAAyC,CAAA,EAE9C,CAAA,CAAA,CAEN"}
@@ -1,2 +1,2 @@
1
- import{a as e,i as t,ln as n}from"./rp704-Pm.chunk.js";import{G as r}from"./C7Gmh7eY.chunk.js";import{t as i}from"./CLCeObem2.chunk.js";import{t as a}from"./D-JsEiDq2.chunk.js";import{s as o,u as s}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as c}from"./Bwpvc7Th2.chunk.js";import{i as l}from"./DA0I3jYA.chunk.js";import{t as u}from"./dKyhMawf.chunk.js";import{t as d}from"./D0JviwKV2.chunk.js";import{n as f}from"./C4Ey4nzb2.chunk.js";e();var p=n(i()),m=p.object().shape({name:p.string().required(()=>`Name is required`)}),h=t();function g(e){let t=o(r.getReportTemplate(e.id)),n=s(),i=c();async function p({name:a}){try{await n(r.updateReportTemplate({...t.data,name:a})),i.success(`Successfully renamed report template: ${a}`)}catch{i.error(`Failed to update report template. Please try again.`)}e.closePopup()}return(0,h.jsx)(a,{title:`Edit Report Template`,closePopup:e.closePopup,showLoadingSpinner:!t.data?.name,children:(0,h.jsx)(u,{initialValues:{name:t.data?.name},validationSchema:m,onSubmit:p,children:(0,h.jsxs)(l,{children:[(0,h.jsx)(f,{name:`name`,id:`name`,placeholder:`e.g. Steven's Fave Report`,label:`Name`,showRequiredStar:!0}),(0,h.jsxs)(d,{children:[(0,h.jsx)(d.Cancel,{onClick:e.closePopup}),(0,h.jsx)(d.Submit,{variant:`dark`,text:`Save changes`})]})]})})})}export{g as AssemblyLineEditReportTemplateView};
2
- //# sourceMappingURL=Bkx2vKcX2.chunk.js.map
1
+ import{a as e,i as t,ln as n}from"./rp704-Pm.chunk.js";import{G as r}from"./DWHKdmdQ.chunk.js";import{t as i}from"./CLCeObem2.chunk.js";import{t as a}from"./D-JsEiDq2.chunk.js";import{s as o,u as s}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as c}from"./Bwpvc7Th2.chunk.js";import{i as l}from"./DA0I3jYA.chunk.js";import{t as u}from"./dKyhMawf.chunk.js";import{t as d}from"./D0JviwKV2.chunk.js";import{n as f}from"./C4Ey4nzb2.chunk.js";e();var p=n(i()),m=p.object().shape({name:p.string().required(()=>`Name is required`)}),h=t();function g(e){let t=o(r.getReportTemplate(e.id)),n=s(),i=c();async function p({name:a}){try{await n(r.updateReportTemplate({...t.data,name:a})),i.success(`Successfully renamed report template: ${a}`)}catch{i.error(`Failed to update report template. Please try again.`)}e.closePopup()}return(0,h.jsx)(a,{title:`Edit Report Template`,closePopup:e.closePopup,showLoadingSpinner:!t.data?.name,children:(0,h.jsx)(u,{initialValues:{name:t.data?.name},validationSchema:m,onSubmit:p,children:(0,h.jsxs)(l,{children:[(0,h.jsx)(f,{name:`name`,id:`name`,placeholder:`e.g. Steven's Fave Report`,label:`Name`,showRequiredStar:!0}),(0,h.jsxs)(d,{children:[(0,h.jsx)(d.Cancel,{onClick:e.closePopup}),(0,h.jsx)(d.Submit,{variant:`dark`,text:`Save changes`})]})]})})})}export{g as AssemblyLineEditReportTemplateView};
2
+ //# sourceMappingURL=DrAKpy8L2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Bkx2vKcX2.chunk.js","names":[],"sources":["../../../../../src/apps/assembly-line/validation/ReportTemplateValidationSchema.ts","../../../../../src/apps/assembly-line/views/edit-report-template/AssemblyLineEditReportTemplateView.tsx"],"sourcesContent":["import * as Yup from 'yup';\n\nexport const ReportTemplateValidationSchema = Yup.object().shape({\n name: Yup.string().required(() => 'Name is required')\n});\n","import React from 'react';\nimport { Form } from 'formik';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nimport { AssemblyLineRequests } from 'apps/assembly-line/flight-requests/AssemblyLineRequests';\nimport { ReportTemplate } from 'apps/assembly-line/interfaces/responses/ReportTemplate';\nimport { ReportTemplateValidationSchema } from 'apps/assembly-line/validation/ReportTemplateValidationSchema';\n\ninterface AssemblyLineEditReportTemplateViewProps extends PopupViewProps {\n id: string;\n}\n\nexport function AssemblyLineEditReportTemplateView(props: AssemblyLineEditReportTemplateViewProps): JSX.Element {\n const template = Flight.useBasicFetch<ReportTemplate>(AssemblyLineRequests.getReportTemplate(props.id));\n const fetchAsync = Flight.useGetFetchAsync();\n const alerts = useAlerts();\n\n async function onSave({ name }: { name: string }): Promise<void> {\n try {\n await fetchAsync(AssemblyLineRequests.updateReportTemplate({ ...template.data, name }));\n alerts.success(`Successfully renamed report template: ${name}`);\n } catch {\n alerts.error('Failed to update report template. Please try again.');\n }\n props.closePopup();\n }\n\n return (\n <Popup\n title='Edit Report Template'\n closePopup={props.closePopup}\n showLoadingSpinner={!template.data?.name}\n >\n <FormWrapper\n initialValues={{ name: template.data?.name }}\n validationSchema={ReportTemplateValidationSchema}\n onSubmit={onSave}\n >\n <Form>\n <FormField\n name='name'\n id='name'\n placeholder=\"e.g. Steven's Fave Report\"\n label='Name'\n showRequiredStar\n />\n\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.closePopup} />\n <PopupButtons.Submit variant='dark' text='Save changes' />\n </PopupButtons>\n </Form>\n </FormWrapper>\n </Popup>\n );\n}\n"],"mappings":"wdAEa,EAAA,EAAqC,OAAO,CAAC,CAAC,MAAM,CAC/D,KAAA,EAAU,OAAO,CAAC,CAAC,aAAe,kBAAkB,CACtD,CAAC,QCgBD,SAAgB,EAAmC,EAA6D,CAC9G,IAAM,EAAW,EAAqC,EAAqB,kBAAkB,EAAM,EAAE,CAAC,EAChG,EAAa,EAAwB,EACrC,EAAS,EAAU,EAEzB,eAAe,EAAO,CAAE,QAAyC,CAC/D,GAAI,CACF,MAAM,EAAW,EAAqB,qBAAqB,CAAE,GAAG,EAAS,KAAM,MAAK,CAAC,CAAC,EACtF,EAAO,QAAQ,yCAAyC,GAAM,CAChE,MAAQ,CACN,EAAO,MAAM,qDAAqD,CACpE,CACA,EAAM,WAAW,CACnB,CAEA,OACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,MAAM,uBACN,WAAY,EAAM,WAClB,mBAAoB,CAAC,EAAS,MAAM,eAEpC,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,cAAe,CAAE,KAAM,EAAS,MAAM,IAAK,EAC3C,iBAAkB,EAClB,SAAU,YAEV,EAAA,EAAA,KAAA,CAAC,EAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,KAAK,OACL,GAAG,OACH,YAAY,4BACZ,MAAM,OACN,iBAAA,EACD,CAAA,GAED,EAAA,EAAA,KAAA,CAAC,EAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAa,OAAd,CAAqB,QAAS,EAAM,UAAa,CAAA,GACjD,EAAA,EAAA,IAAA,CAAC,EAAa,OAAd,CAAqB,QAAQ,OAAO,KAAK,cAAgB,CAAA,CAC7C,CAAA,CAAA,CACV,CAAA,CAAA,CACK,CAAA,CACR,CAAA,CAEX"}
1
+ {"version":3,"file":"DrAKpy8L2.chunk.js","names":[],"sources":["../../../../../src/apps/assembly-line/validation/ReportTemplateValidationSchema.ts","../../../../../src/apps/assembly-line/views/edit-report-template/AssemblyLineEditReportTemplateView.tsx"],"sourcesContent":["import * as Yup from 'yup';\n\nexport const ReportTemplateValidationSchema = Yup.object().shape({\n name: Yup.string().required(() => 'Name is required')\n});\n","import React from 'react';\nimport { Form } from 'formik';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nimport { AssemblyLineRequests } from 'apps/assembly-line/flight-requests/AssemblyLineRequests';\nimport { ReportTemplate } from 'apps/assembly-line/interfaces/responses/ReportTemplate';\nimport { ReportTemplateValidationSchema } from 'apps/assembly-line/validation/ReportTemplateValidationSchema';\n\ninterface AssemblyLineEditReportTemplateViewProps extends PopupViewProps {\n id: string;\n}\n\nexport function AssemblyLineEditReportTemplateView(props: AssemblyLineEditReportTemplateViewProps): JSX.Element {\n const template = Flight.useBasicFetch<ReportTemplate>(AssemblyLineRequests.getReportTemplate(props.id));\n const fetchAsync = Flight.useGetFetchAsync();\n const alerts = useAlerts();\n\n async function onSave({ name }: { name: string }): Promise<void> {\n try {\n await fetchAsync(AssemblyLineRequests.updateReportTemplate({ ...template.data, name }));\n alerts.success(`Successfully renamed report template: ${name}`);\n } catch {\n alerts.error('Failed to update report template. Please try again.');\n }\n props.closePopup();\n }\n\n return (\n <Popup\n title='Edit Report Template'\n closePopup={props.closePopup}\n showLoadingSpinner={!template.data?.name}\n >\n <FormWrapper\n initialValues={{ name: template.data?.name }}\n validationSchema={ReportTemplateValidationSchema}\n onSubmit={onSave}\n >\n <Form>\n <FormField\n name='name'\n id='name'\n placeholder=\"e.g. Steven's Fave Report\"\n label='Name'\n showRequiredStar\n />\n\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.closePopup} />\n <PopupButtons.Submit variant='dark' text='Save changes' />\n </PopupButtons>\n </Form>\n </FormWrapper>\n </Popup>\n );\n}\n"],"mappings":"wdAEa,EAAA,EAAqC,OAAO,CAAC,CAAC,MAAM,CAC/D,KAAA,EAAU,OAAO,CAAC,CAAC,aAAe,kBAAkB,CACtD,CAAC,QCgBD,SAAgB,EAAmC,EAA6D,CAC9G,IAAM,EAAW,EAAqC,EAAqB,kBAAkB,EAAM,EAAE,CAAC,EAChG,EAAa,EAAwB,EACrC,EAAS,EAAU,EAEzB,eAAe,EAAO,CAAE,QAAyC,CAC/D,GAAI,CACF,MAAM,EAAW,EAAqB,qBAAqB,CAAE,GAAG,EAAS,KAAM,MAAK,CAAC,CAAC,EACtF,EAAO,QAAQ,yCAAyC,GAAM,CAChE,MAAQ,CACN,EAAO,MAAM,qDAAqD,CACpE,CACA,EAAM,WAAW,CACnB,CAEA,OACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,MAAM,uBACN,WAAY,EAAM,WAClB,mBAAoB,CAAC,EAAS,MAAM,eAEpC,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,cAAe,CAAE,KAAM,EAAS,MAAM,IAAK,EAC3C,iBAAkB,EAClB,SAAU,YAEV,EAAA,EAAA,KAAA,CAAC,EAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,KAAK,OACL,GAAG,OACH,YAAY,4BACZ,MAAM,OACN,iBAAA,EACD,CAAA,GAED,EAAA,EAAA,KAAA,CAAC,EAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAa,OAAd,CAAqB,QAAS,EAAM,UAAa,CAAA,GACjD,EAAA,EAAA,IAAA,CAAC,EAAa,OAAd,CAAqB,QAAQ,OAAO,KAAK,cAAgB,CAAA,CAC7C,CAAA,CAAA,CACV,CAAA,CAAA,CACK,CAAA,CACR,CAAA,CAEX"}
@@ -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{r as o}from"./DkstLT1W.chunk.js";import{t as s}from"./Da4lNxpT2.chunk.js";import{s as c}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as l}from"./DjzD1n9W.chunk.js";import{t as u}from"./Bv5hYKhN2.chunk.js";import{t as d}from"./Bg2zGOFJ2.chunk.js";import{t as f}from"./oGkpmMft2.chunk.js";import{t as p}from"./Dfhl7nI62.chunk.js";import{t as m}from"./B_IbIJNZ.chunk.js";var h=r(t()),g=n();function _(){let t=c(d.getAllCatalogs()),{hasPermissions:n,isLoading:r}=l(),_=n(o.MarketingContactUploadAll),v=n(o.MarketingCatalogManagement),y=_&&v;if(u({title:`Catalog Management`}),(0,h.useEffect)(()=>{!v&&!r&&e.trigger({application:a.MARKETING_APP,action:i.Marketing.CONTACT_UPLOAD},{replace:!0})},[v,r]),!t.hasCompleted)return(0,g.jsx)(g.Fragment,{});let b=f.getColumns(`index`),x=e.getCurrentAppLink();return(0,g.jsx)(p,{leftNavItems:f.getLeftNavItems(y,x.action),children:(0,g.jsxs)(`div`,{className:`g-4`,children:[(0,g.jsxs)(`div`,{className:`d-flex flex-row w-full justify-content-between mb-3`,children:[(0,g.jsx)(`h2`,{className:`m-0`,children:`Braze Catalogs`}),(0,g.jsx)(s,{variant:`dark`,onClick:()=>{let t={application:a.MARKETING_APP,action:i.Marketing.CREATE_CATALOG};e.trigger(t)},children:`Create Catalog`})]}),(0,g.jsx)(m,{data:t.data,columns:b})]})})}export{_ as AllCatalogsView};
2
- //# sourceMappingURL=DX9DFxX2.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{r as o}from"./DkstLT1W.chunk.js";import{t as s}from"./Da4lNxpT2.chunk.js";import{s as c}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as l}from"./DjzD1n9W.chunk.js";import{t as u}from"./Bv5hYKhN2.chunk.js";import{t as d}from"./Bg2zGOFJ2.chunk.js";import{t as f}from"./dmUfJoJz2.chunk.js";import{t as p}from"./BrBPGjLi2.chunk.js";import{t as m}from"./B_IbIJNZ.chunk.js";var h=r(t()),g=n();function _(){let t=c(d.getAllCatalogs()),{hasPermissions:n,isLoading:r}=l(),_=n(o.MarketingContactUploadAll),v=n(o.MarketingCatalogManagement),y=_&&v;if(u({title:`Catalog Management`}),(0,h.useEffect)(()=>{!v&&!r&&e.trigger({application:a.MARKETING_APP,action:i.Marketing.CONTACT_UPLOAD},{replace:!0})},[v,r]),!t.hasCompleted)return(0,g.jsx)(g.Fragment,{});let b=f.getColumns(`index`),x=e.getCurrentAppLink();return(0,g.jsx)(p,{leftNavItems:f.getLeftNavItems(y,x.action),children:(0,g.jsxs)(`div`,{className:`g-4`,children:[(0,g.jsxs)(`div`,{className:`d-flex flex-row w-full justify-content-between mb-3`,children:[(0,g.jsx)(`h2`,{className:`m-0`,children:`Braze Catalogs`}),(0,g.jsx)(s,{variant:`dark`,onClick:()=>{let t={application:a.MARKETING_APP,action:i.Marketing.CREATE_CATALOG};e.trigger(t)},children:`Create Catalog`})]}),(0,g.jsx)(m,{data:t.data,columns:b})]})})}export{_ as AllCatalogsView};
2
+ //# sourceMappingURL=DsM1bfoR.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DX9DFxX2.chunk.js","names":[],"sources":["../../../../../src/apps/marketing/views/catalogs/all-catalogs/AllCatalogsView.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { Button } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\n\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\n\nimport { Actions, AppChannels } from 'shared/constants';\nimport { CuratorPermissionName } from 'shared/enums/CuratorPermissionName';\nimport { useCuratorPermissions } from 'shared/hooks/UseCuratorPermissions';\n\nimport { MarketingRequests } from 'apps/marketing/flight-requests/MarketingRequests';\nimport { BrazeCatalog } from 'apps/marketing/interfaces/BrazeCatalog';\nimport { MarketingLayoutView } from 'apps/marketing/layout/MarketingLayout';\nimport { MarketingHelper } from 'apps/marketing/utils/MarketingHelper';\nimport { MarketingTable } from 'apps/marketing/views/catalogs/components/MarketingTable';\n\nexport function AllCatalogsView(): JSX.Element {\n const catalogs = Flight.useBasicFetch<BrazeCatalog[]>(MarketingRequests.getAllCatalogs());\n\n const { hasPermissions, isLoading } = useCuratorPermissions();\n const canManageUpload = hasPermissions(CuratorPermissionName.MarketingContactUploadAll);\n const canManageCatalog = hasPermissions(CuratorPermissionName.MarketingCatalogManagement);\n const canManageAll = canManageUpload && canManageCatalog;\n\n useSetPageMetadata({ title: 'Catalog Management' });\n\n useEffect(() => {\n if (!canManageCatalog && !isLoading) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.MARKETING_APP,\n action: Actions.Marketing.CONTACT_UPLOAD\n }, { replace: true });\n }\n }, [ canManageCatalog, isLoading ]);\n \n if (!catalogs.hasCompleted) return <></>;\n\n const columns = MarketingHelper.getColumns('index');\n\n const currentAppLink = Core.AppLinkHelper.getCurrentAppLink();\n const leftNavItems = MarketingHelper.getLeftNavItems(canManageAll, currentAppLink.action);\n\n return (\n <MarketingLayoutView leftNavItems={leftNavItems}>\n <div className='g-4'>\n <div className='d-flex flex-row w-full justify-content-between mb-3'>\n <h2 className='m-0'>Braze Catalogs</h2>\n <Button\n variant='dark'\n onClick={() => {\n const applink = {\n application: AppChannels.MARKETING_APP,\n action: Actions.Marketing.CREATE_CATALOG\n };\n Core.AppLinkHelper.trigger(applink);\n }}\n >\n Create Catalog\n </Button>\n </div>\n <MarketingTable data={catalogs.data} columns={columns} />\n </div>\n </MarketingLayoutView>\n );\n}\n"],"mappings":"skBAkBA,SAAgB,GAA+B,CAC7C,IAAM,EAAW,EAAqC,EAAkB,eAAe,CAAC,EAElF,CAAE,iBAAgB,aAAc,EAAsB,EACtD,EAAkB,EAAe,EAAsB,yBAAyB,EAChF,EAAmB,EAAe,EAAsB,0BAA0B,EAClF,EAAe,GAAmB,EAaxC,GAXA,EAAmB,CAAE,MAAO,oBAAqB,CAAC,GAElD,EAAA,EAAA,UAAA,KAAgB,CACV,CAAC,GAAoB,CAAC,GACxB,EAAmB,QAAQ,CACzB,YAAa,EAAY,cACzB,OAAQ,EAAQ,UAAU,cAC5B,EAAG,CAAE,QAAS,EAAK,CAAC,CAExB,EAAG,CAAE,EAAkB,CAAU,CAAC,EAE9B,CAAC,EAAS,aAAc,OAAO,EAAA,EAAA,IAAA,CAAA,EAAA,SAAA,CAAI,CAAA,EAEvC,IAAM,EAAU,EAAgB,WAAW,OAAO,EAE5C,EAAA,EAAoC,kBAAkB,EAG5D,OACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAmC,aAHhB,EAAgB,gBAAgB,EAAc,EAAe,MAG7C,YACjC,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,eAAf,EACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,+DAAf,EACE,EAAA,EAAA,IAAA,CAAC,KAAD,CAAI,UAAU,eAAM,gBAAkB,CAAA,GACtC,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,QAAQ,OACR,YAAe,CACb,IAAM,EAAU,CACd,YAAa,EAAY,cACzB,OAAQ,EAAQ,UAAU,cAC5B,EACA,EAAmB,QAAQ,CAAO,CACpC,WACD,gBAEO,CAAA,CACL,KACL,EAAA,EAAA,IAAA,CAAC,EAAD,CAAgB,KAAM,EAAS,KAAe,SAAU,CAAA,CACrD,GACc,CAAA,CAEzB"}
1
+ {"version":3,"file":"DsM1bfoR.chunk.js","names":[],"sources":["../../../../../src/apps/marketing/views/catalogs/all-catalogs/AllCatalogsView.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { Button } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\n\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\n\nimport { Actions, AppChannels } from 'shared/constants';\nimport { CuratorPermissionName } from 'shared/enums/CuratorPermissionName';\nimport { useCuratorPermissions } from 'shared/hooks/UseCuratorPermissions';\n\nimport { MarketingRequests } from 'apps/marketing/flight-requests/MarketingRequests';\nimport { BrazeCatalog } from 'apps/marketing/interfaces/BrazeCatalog';\nimport { MarketingLayoutView } from 'apps/marketing/layout/MarketingLayout';\nimport { MarketingHelper } from 'apps/marketing/utils/MarketingHelper';\nimport { MarketingTable } from 'apps/marketing/views/catalogs/components/MarketingTable';\n\nexport function AllCatalogsView(): JSX.Element {\n const catalogs = Flight.useBasicFetch<BrazeCatalog[]>(MarketingRequests.getAllCatalogs());\n\n const { hasPermissions, isLoading } = useCuratorPermissions();\n const canManageUpload = hasPermissions(CuratorPermissionName.MarketingContactUploadAll);\n const canManageCatalog = hasPermissions(CuratorPermissionName.MarketingCatalogManagement);\n const canManageAll = canManageUpload && canManageCatalog;\n\n useSetPageMetadata({ title: 'Catalog Management' });\n\n useEffect(() => {\n if (!canManageCatalog && !isLoading) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.MARKETING_APP,\n action: Actions.Marketing.CONTACT_UPLOAD\n }, { replace: true });\n }\n }, [ canManageCatalog, isLoading ]);\n \n if (!catalogs.hasCompleted) return <></>;\n\n const columns = MarketingHelper.getColumns('index');\n\n const currentAppLink = Core.AppLinkHelper.getCurrentAppLink();\n const leftNavItems = MarketingHelper.getLeftNavItems(canManageAll, currentAppLink.action);\n\n return (\n <MarketingLayoutView leftNavItems={leftNavItems}>\n <div className='g-4'>\n <div className='d-flex flex-row w-full justify-content-between mb-3'>\n <h2 className='m-0'>Braze Catalogs</h2>\n <Button\n variant='dark'\n onClick={() => {\n const applink = {\n application: AppChannels.MARKETING_APP,\n action: Actions.Marketing.CREATE_CATALOG\n };\n Core.AppLinkHelper.trigger(applink);\n }}\n >\n Create Catalog\n </Button>\n </div>\n <MarketingTable data={catalogs.data} columns={columns} />\n </div>\n </MarketingLayoutView>\n );\n}\n"],"mappings":"skBAkBA,SAAgB,GAA+B,CAC7C,IAAM,EAAW,EAAqC,EAAkB,eAAe,CAAC,EAElF,CAAE,iBAAgB,aAAc,EAAsB,EACtD,EAAkB,EAAe,EAAsB,yBAAyB,EAChF,EAAmB,EAAe,EAAsB,0BAA0B,EAClF,EAAe,GAAmB,EAaxC,GAXA,EAAmB,CAAE,MAAO,oBAAqB,CAAC,GAElD,EAAA,EAAA,UAAA,KAAgB,CACV,CAAC,GAAoB,CAAC,GACxB,EAAmB,QAAQ,CACzB,YAAa,EAAY,cACzB,OAAQ,EAAQ,UAAU,cAC5B,EAAG,CAAE,QAAS,EAAK,CAAC,CAExB,EAAG,CAAE,EAAkB,CAAU,CAAC,EAE9B,CAAC,EAAS,aAAc,OAAO,EAAA,EAAA,IAAA,CAAA,EAAA,SAAA,CAAI,CAAA,EAEvC,IAAM,EAAU,EAAgB,WAAW,OAAO,EAE5C,EAAA,EAAoC,kBAAkB,EAG5D,OACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAmC,aAHhB,EAAgB,gBAAgB,EAAc,EAAe,MAG7C,YACjC,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,eAAf,EACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,+DAAf,EACE,EAAA,EAAA,IAAA,CAAC,KAAD,CAAI,UAAU,eAAM,gBAAkB,CAAA,GACtC,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,QAAQ,OACR,YAAe,CACb,IAAM,EAAU,CACd,YAAa,EAAY,cACzB,OAAQ,EAAQ,UAAU,cAC5B,EACA,EAAmB,QAAQ,CAAO,CACpC,WACD,gBAEO,CAAA,CACL,KACL,EAAA,EAAA,IAAA,CAAC,EAAD,CAAgB,KAAM,EAAS,KAAe,SAAU,CAAA,CACrD,GACc,CAAA,CAEzB"}
@@ -1,2 +1,2 @@
1
- import{a as e,i as t,ln as n}from"./rp704-Pm.chunk.js";import{t as r}from"./Crs6pJ2h.chunk.js";import{t as i}from"./C1kx8Ra5.chunk.js";import{t as a}from"./BQ9k2zyI.chunk.js";import{t as o}from"./Di_u2uix.chunk.js";import{t as s}from"./BvMTtGLi.chunk.js";import"./CfCYHRuo.chunk.js";import"./CubblUVk.chunk.js";import{l as c,s as l}from"./B_rQzhwB.chunk.js";import{r as u}from"./DkstLT1W.chunk.js";import{t as d}from"./DBHDBu1Y2.chunk.js";import{t as f}from"./B-2mjJwh2.chunk.js";import{t as p}from"./cwPDEI372.chunk.js";import{t as m}from"./Da4lNxpT2.chunk.js";import"./BhKv6dKl2.chunk.js";import{t as h}from"./DpqbC5uX.chunk.js";import"./BCfBk23W.chunk.js";import{t as g}from"./DjzD1n9W.chunk.js";import{r as _}from"./BRcHS92O.chunk.js";import{t as v}from"./DhW1fXNd.chunk.js";import{c as y,i as b}from"./DA0I3jYA.chunk.js";import{t as x}from"./R3C4JT9X2.chunk.js";import{n as S,r as C}from"./C4Ey4nzb2.chunk.js";import{t as w}from"./CJGAARzb2.chunk.js";import{t as T}from"./CNfsk-2G.chunk.js";import{t as E}from"./DXH18G3-.chunk.js";import{t as D}from"./CxUyw6yf.chunk.js";import{t as O}from"./6S_Zxy792.chunk.js";import{t as k}from"./BYFA_HBq.chunk.js";import{t as A}from"./DdpEZzKh.chunk.js";import{t as j}from"./BMEoow9M.chunk.js";var M=n(e()),N=t();function P(e){let t=y(),{hasPermissions:n}=g(),r=e.presentationType===p.StreamableLearning,a=A.isTertiary(e.classification?.presentationId),o=A.isNewZealandTopic(e.classification?.presentationId),s=A.isCanadaTopic(e.classification?.presentationId),c=A.isInternationalTopic(e.classification?.presentationId),l=!!e.classification?.cover?.url&&!!e.classification?.banner?.url,f=A.isTopLevelTopic(e.classification),m=(r||a||o||c||s||f)&&l&&e.hasPublishedDashboard,h=n(u.TopicsClassificationUnpublish),_={as:`select`,label:`Status`,name:`status`,id:`status`,value:t.values.status},v=i.getEnumKeys(d);function b(){return e.classification.status===d.Published?h?``:`Published topics cannot have their status changed.`:m?``:r||a||o||s?l?`Please publish a dashboard for this topic before publishing the topic.`:`Please upload a cover and banner to publish this topic.`:`Please go to the content pipeline to publish this topic.`}return e.classification?.id?(0,N.jsx)(S,{..._,disabled:e.classification.status===d.Published&&!h,infoText:b(),children:v.map(e=>(0,N.jsx)(`option`,{value:e,disabled:!m&&e===d.Published,children:e},e))}):(0,N.jsx)(S,{..._,disabled:!0,children:v.map(e=>(0,N.jsx)(`option`,{value:e,children:e},e))})}var F=e=>({application:s.SUBJECTS,action:o.Subjects.EDIT_SUBJECT,args:[e]}),I=(e,t)=>n=>{if(n.id===t)return!0;let r=D.find(e,t);return!!D.find(r,n.id)};function L({prefix:e,uploadAppLink:t,canEdit:n}){let r=t=>e?`${e}.${t}`:t;return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(T,{imageType:_.Covers,fieldName:r(`cover`),uploadAppLink:t,disabled:!n,canRemove:n}),(0,N.jsx)(T,{imageType:_.Banners,fieldName:r(`banner`),uploadAppLink:t,disabled:!n,canRemove:n}),(0,N.jsx)(T,{imageType:_.TallPosters,fieldName:r(`tallPoster`),uploadAppLink:t,disabled:!n,canRemove:n}),(0,N.jsx)(T,{imageType:_.Thumbnails,fieldName:r(`thumbnail`),uploadAppLink:t,disabled:!n,canRemove:n}),(0,N.jsx)(T,{imageType:_.Covers,fieldName:r(`icon`),label:`Icon`,uploadAppLink:t,disabled:!n,canRemove:n})]})}function R(e){let t=y(),n=x(t),i=!e.classification?.id,o=!i||!!(t.values.parentIds&&t.values.parentIds.length),[s,p]=M.useState(o);M.useEffect(()=>p(o),[e.classification?.id,t.values.parentIds]),M.useEffect(()=>{t.values.backboneClassificationIds.length&&!t.touched.backboneClassificationIds&&t.setFieldTouched(`backboneClassificationIds`,!0)},[t.values.backboneClassificationIds]);let _=e.classification?.status===d.Draft,[T,D]=M.useState(!1);async function R(){if(!(!e.getAiGeneratedDescription||!e.classification)){D(!0);try{let n=await e.getAiGeneratedDescription(e.classification);n!=null&&t.setFieldValue(`description`,n)}finally{D(!1)}}}let z=e=>{let n=h.addOrRemove(t.values.parentIds.map(e=>e.toString()),e.id.toString());if(n.length){t.setFieldValue(`parentIds`,n.filter(e=>e!==a.Root));return}t.setFieldValue(`parentIds`,[a.Root])},B=e=>t.setFieldValue(`backboneClassificationIds`,h.addOrRemove(t.values.backboneClassificationIds.map(e=>e.toString()),e.id.toString())),V=e=>`${C.getCustomFormControlClassName(t.errors,t.touched,e)} h-auto py-2`,{hasPermissions:H}=g(),U=H(u.TopicsClassificationUpdate),W=!i&&H(u.TopicsClassificationDelete),G=H(u.TopicsSetHubTopic),K=j(e.presentationType),q=A.isTopLevelTopic(e.classification),J=t.values.type===f.Hub,Y=!!e.themes?.length,[X,Z]=M.useState(``),Q=t.values.themes?.findIndex(e=>e.systemName===X)??-1,$=Q>=0?Q:t.values.themes?.length??0,ee=e=>{if(Z(e),e&&(t.values.themes?.findIndex(t=>t.systemName===e)??-1)===-1){let n=t.values.themes?.length??0;t.setFieldValue(`themes.${n}.systemName`,e)}},te=!i&&Y;function ne(e){if(U)return t.handleChange(e)}return(0,N.jsxs)(b,{children:[(0,N.jsx)(S,{label:`Name`,name:`name`,id:`name`,value:t.values.name,placeholder:`Enter a name for this classification`,disabled:!U,autoFocus:!!i}),(0,N.jsx)(S,{label:`Description`,name:`description`,disabled:!U,children:()=>(0,N.jsxs)(`div`,{className:`d-flex gap-2 align-items-center`,children:[(0,N.jsx)(`textarea`,{id:`description`,name:`description`,value:t.values.description??``,onChange:ne,onBlur:t.handleBlur,className:`form-control flex-grow-1`,placeholder:`Enter a description for this classification`,disabled:!U,rows:2}),U&&e.getAiGeneratedDescription&&e.classification&&(0,N.jsx)(`div`,{className:`flex-shrink-0`,children:(0,N.jsx)(w,{shouldShow:!0,children:(0,N.jsx)(v,{variant:`outline`,showSpinner:T,onClick:R,disabled:T,className:`text-nowrap`,children:`Generate AI description`})})})]})}),(0,N.jsx)(P,{classification:e.classification,presentationType:e.presentationType,hasPublishedDashboard:e.hasPublishedDashboard}),(0,N.jsx)(S,{label:`Set as a topic preference`,name:`canBePreferred`,id:`canBePreferred`,type:`checkbox`,checked:t.values.canBePreferred,disabled:!U||J,infoText:J&&`Hub topics cannot be set as a preference topic.`}),q&&(0,N.jsx)(S,{label:`Set as a hub topic`,name:`type`,id:`isHub`,type:`checkbox`,checked:J,onChange:e=>{t.setFieldValue(`type`,e.target.checked?f.Hub:f.Subject),e.target.checked&&(t.setFieldValue(`metadata.searchScopes`,[c.None]),t.setFieldValue(`canBePreferred`,!1))},disabled:!U||!G,infoTooltip:!G&&`Only the engineering team can set a hub topic.`,infoText:`If enabled, the published dashboard of this topic will be linked from the left navigation. Feature controlled 'Has Hub Entry' flag.`}),(0,N.jsxs)(S,{label:`Search access`,name:`metadata.searchScopes`,id:`metadata.searchScopes`,infoTooltip:`Set who can see this topic in search results. Topics will still always appear for Curators.`,as:`select`,onChange:e=>{t.setFieldValue(`metadata.searchScopes`,[+e.target.value])},value:t.values.metadata?.searchScopes?.[0]??c.All,disabled:!U||J,infoText:J&&`Hub topics will be hidden from search results.`,children:[(0,N.jsx)(`option`,{value:c.All,children:`Everyone`}),(0,N.jsx)(`option`,{value:c.None,children:`No one`})]}),!i&&(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`label`,{children:`Total Followers:`}),`\xA0`,e.classification.followers?.count]}),(0,N.jsx)(S,{name:`parentIds`,disabled:!U,children:()=>(0,N.jsx)(`div`,{className:V(`parentIds`),children:(0,N.jsx)(E,{label:`Parent Topic(s)`,tree:e.classificationTree,selectedIds:t.values.parentIds,onSelect:z,collapse:s,noSelectionMessage:`No parent selected, this will be a root topic.`,isNodeDisabled:I(e.classificationTree,e.classification?.id),multiSelect:!0})})}),(0,N.jsx)(S,{name:`backboneClassificationIds`,disabled:!U,children:()=>(0,N.jsx)(`div`,{className:V(`backboneClassificationIds`),children:(0,N.jsx)(E,{label:`Mapped Backbone Subject(s)`,tree:e.subjectTree,selectedIds:t.values.backboneClassificationIds,onSelect:B,collapse:!i,getSelectedItemAppLink:F,multiSelect:!0})})}),(0,N.jsx)(S,{label:`SEO Page Title`,name:`externalMetadata.seo.title`,id:`seoTitle`,value:t.values.externalMetadata?.seo?.title??``,placeholder:`Enter a page title to use for this classification`,disabled:!U||!H(u.TopicsClassificationSeo),showCharacterCounter:!0,maxLength:l.MAX_TITLE_LENGTH-l.PAGE_TITLE_SUFFIX.length,infoText:`All page titles will be automatically suffixed with " | ClickView", so page titles should ideally range between 38-48 characters.`}),(0,N.jsx)(S,{label:`SEO Page Description`,name:`externalMetadata.seo.description`,id:`seoDescription`,value:t.values.externalMetadata?.seo?.description??``,placeholder:`Enter a description to use in the meta tag for this classification`,disabled:!U||!H(u.TopicsClassificationSeo),showCharacterCounter:!0,maxLength:l.MAX_DESCRIPTION_LENGTH,infoText:`Google typically shows the first 150-160 characters of a page description. Longer descriptions may be truncated.`}),te&&(0,N.jsxs)(`div`,{className:`form-group`,children:[(0,N.jsx)(`label`,{htmlFor:`themeType`,children:`Theme`}),(0,N.jsx)(k,{className:`mb-2`,children:`Choose a theme first to upload classification assets`}),(0,N.jsxs)(`select`,{id:`themeType`,className:`form-select`,value:X,onChange:e=>ee(e.target.value),disabled:!U,children:[(0,N.jsx)(`option`,{value:``,children:`Illustration`}),e.themes?.map(e=>(0,N.jsx)(`option`,{value:e.systemName,children:e.name},e.systemName))]})]}),(!Y||X===``)&&(0,N.jsx)(L,{prefix:``,uploadAppLink:K.imageUpload(),canEdit:U}),Y&&X!==``&&(0,N.jsx)(L,{prefix:`themes.${$}`,uploadAppLink:K.imageUpload(),canEdit:U}),(0,N.jsx)(O,{label:`Background color`,fieldName:`metadata.backgroundColor`,disabled:!U}),(0,N.jsxs)(`div`,{className:`d-flex justify-content-between`,children:[U&&(0,N.jsx)(v,{showSpinner:t.isSubmitting,type:`submit`,disabled:!n,children:i?`Create`:`Save`}),W&&(_?(0,N.jsx)(r,{className:`btn btn-outline-danger`,appLink:K.deleteClassification(e.presentationId,e.classification?.id),children:`Delete`}):(0,N.jsx)(m,{title:`Only draft classifications can be deleted.`,variant:`outline-danger`,disabled:!0,children:`Delete`}))]})]})}export{R as t};
2
- //# sourceMappingURL=Dh3G-ann.chunk.js.map
1
+ import{a as e,i as t,ln as n}from"./rp704-Pm.chunk.js";import{t as r}from"./Crs6pJ2h.chunk.js";import{t as i}from"./C1kx8Ra5.chunk.js";import{t as a}from"./BQ9k2zyI.chunk.js";import{t as o}from"./Di_u2uix.chunk.js";import{t as s}from"./BvMTtGLi.chunk.js";import"./CfCYHRuo.chunk.js";import"./CubblUVk.chunk.js";import{l as c,s as l}from"./B_rQzhwB.chunk.js";import{r as u}from"./DkstLT1W.chunk.js";import{t as d}from"./DBHDBu1Y2.chunk.js";import{t as f}from"./B-2mjJwh2.chunk.js";import{t as p}from"./cwPDEI372.chunk.js";import{t as m}from"./Da4lNxpT2.chunk.js";import"./GpDEun8c2.chunk.js";import{t as h}from"./DpqbC5uX.chunk.js";import"./BCfBk23W.chunk.js";import{t as g}from"./DjzD1n9W.chunk.js";import{r as _}from"./BRcHS92O.chunk.js";import{t as v}from"./DhW1fXNd.chunk.js";import{c as y,i as b}from"./DA0I3jYA.chunk.js";import{t as x}from"./R3C4JT9X2.chunk.js";import{n as S,r as C}from"./C4Ey4nzb2.chunk.js";import{t as w}from"./CJGAARzb2.chunk.js";import{t as T}from"./CNfsk-2G.chunk.js";import{t as E}from"./DXH18G3-.chunk.js";import{t as D}from"./CxUyw6yf.chunk.js";import{t as O}from"./6S_Zxy792.chunk.js";import{t as k}from"./BYFA_HBq.chunk.js";import{t as A}from"./DdpEZzKh.chunk.js";import{t as j}from"./BMEoow9M.chunk.js";var M=n(e()),N=t();function P(e){let t=y(),{hasPermissions:n}=g(),r=e.presentationType===p.StreamableLearning,a=A.isTertiary(e.classification?.presentationId),o=A.isNewZealandTopic(e.classification?.presentationId),s=A.isCanadaTopic(e.classification?.presentationId),c=A.isInternationalTopic(e.classification?.presentationId),l=!!e.classification?.cover?.url&&!!e.classification?.banner?.url,f=A.isTopLevelTopic(e.classification),m=(r||a||o||c||s||f)&&l&&e.hasPublishedDashboard,h=n(u.TopicsClassificationUnpublish),_={as:`select`,label:`Status`,name:`status`,id:`status`,value:t.values.status},v=i.getEnumKeys(d);function b(){return e.classification.status===d.Published?h?``:`Published topics cannot have their status changed.`:m?``:r||a||o||s?l?`Please publish a dashboard for this topic before publishing the topic.`:`Please upload a cover and banner to publish this topic.`:`Please go to the content pipeline to publish this topic.`}return e.classification?.id?(0,N.jsx)(S,{..._,disabled:e.classification.status===d.Published&&!h,infoText:b(),children:v.map(e=>(0,N.jsx)(`option`,{value:e,disabled:!m&&e===d.Published,children:e},e))}):(0,N.jsx)(S,{..._,disabled:!0,children:v.map(e=>(0,N.jsx)(`option`,{value:e,children:e},e))})}var F=e=>({application:s.SUBJECTS,action:o.Subjects.EDIT_SUBJECT,args:[e]}),I=(e,t)=>n=>{if(n.id===t)return!0;let r=D.find(e,t);return!!D.find(r,n.id)};function L({prefix:e,uploadAppLink:t,canEdit:n}){let r=t=>e?`${e}.${t}`:t;return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(T,{imageType:_.Covers,fieldName:r(`cover`),uploadAppLink:t,disabled:!n,canRemove:n}),(0,N.jsx)(T,{imageType:_.Banners,fieldName:r(`banner`),uploadAppLink:t,disabled:!n,canRemove:n}),(0,N.jsx)(T,{imageType:_.TallPosters,fieldName:r(`tallPoster`),uploadAppLink:t,disabled:!n,canRemove:n}),(0,N.jsx)(T,{imageType:_.Thumbnails,fieldName:r(`thumbnail`),uploadAppLink:t,disabled:!n,canRemove:n}),(0,N.jsx)(T,{imageType:_.Covers,fieldName:r(`icon`),label:`Icon`,uploadAppLink:t,disabled:!n,canRemove:n})]})}function R(e){let t=y(),n=x(t),i=!e.classification?.id,o=!i||!!(t.values.parentIds&&t.values.parentIds.length),[s,p]=M.useState(o);M.useEffect(()=>p(o),[e.classification?.id,t.values.parentIds]),M.useEffect(()=>{t.values.backboneClassificationIds.length&&!t.touched.backboneClassificationIds&&t.setFieldTouched(`backboneClassificationIds`,!0)},[t.values.backboneClassificationIds]);let _=e.classification?.status===d.Draft,[T,D]=M.useState(!1);async function R(){if(!(!e.getAiGeneratedDescription||!e.classification)){D(!0);try{let n=await e.getAiGeneratedDescription(e.classification);n!=null&&t.setFieldValue(`description`,n)}finally{D(!1)}}}let z=e=>{let n=h.addOrRemove(t.values.parentIds.map(e=>e.toString()),e.id.toString());if(n.length){t.setFieldValue(`parentIds`,n.filter(e=>e!==a.Root));return}t.setFieldValue(`parentIds`,[a.Root])},B=e=>t.setFieldValue(`backboneClassificationIds`,h.addOrRemove(t.values.backboneClassificationIds.map(e=>e.toString()),e.id.toString())),V=e=>`${C.getCustomFormControlClassName(t.errors,t.touched,e)} h-auto py-2`,{hasPermissions:H}=g(),U=H(u.TopicsClassificationUpdate),W=!i&&H(u.TopicsClassificationDelete),G=H(u.TopicsSetHubTopic),K=j(e.presentationType),q=A.isTopLevelTopic(e.classification),J=t.values.type===f.Hub,Y=!!e.themes?.length,[X,Z]=M.useState(``),Q=t.values.themes?.findIndex(e=>e.systemName===X)??-1,$=Q>=0?Q:t.values.themes?.length??0,ee=e=>{if(Z(e),e&&(t.values.themes?.findIndex(t=>t.systemName===e)??-1)===-1){let n=t.values.themes?.length??0;t.setFieldValue(`themes.${n}.systemName`,e)}},te=!i&&Y;function ne(e){if(U)return t.handleChange(e)}return(0,N.jsxs)(b,{children:[(0,N.jsx)(S,{label:`Name`,name:`name`,id:`name`,value:t.values.name,placeholder:`Enter a name for this classification`,disabled:!U,autoFocus:!!i}),(0,N.jsx)(S,{label:`Description`,name:`description`,disabled:!U,children:()=>(0,N.jsxs)(`div`,{className:`d-flex gap-2 align-items-center`,children:[(0,N.jsx)(`textarea`,{id:`description`,name:`description`,value:t.values.description??``,onChange:ne,onBlur:t.handleBlur,className:`form-control flex-grow-1`,placeholder:`Enter a description for this classification`,disabled:!U,rows:2}),U&&e.getAiGeneratedDescription&&e.classification&&(0,N.jsx)(`div`,{className:`flex-shrink-0`,children:(0,N.jsx)(w,{shouldShow:!0,children:(0,N.jsx)(v,{variant:`outline`,showSpinner:T,onClick:R,disabled:T,className:`text-nowrap`,children:`Generate AI description`})})})]})}),(0,N.jsx)(P,{classification:e.classification,presentationType:e.presentationType,hasPublishedDashboard:e.hasPublishedDashboard}),(0,N.jsx)(S,{label:`Set as a topic preference`,name:`canBePreferred`,id:`canBePreferred`,type:`checkbox`,checked:t.values.canBePreferred,disabled:!U||J,infoText:J&&`Hub topics cannot be set as a preference topic.`}),q&&(0,N.jsx)(S,{label:`Set as a hub topic`,name:`type`,id:`isHub`,type:`checkbox`,checked:J,onChange:e=>{t.setFieldValue(`type`,e.target.checked?f.Hub:f.Subject),e.target.checked&&(t.setFieldValue(`metadata.searchScopes`,[c.None]),t.setFieldValue(`canBePreferred`,!1))},disabled:!U||!G,infoTooltip:!G&&`Only the engineering team can set a hub topic.`,infoText:`If enabled, the published dashboard of this topic will be linked from the left navigation. Feature controlled 'Has Hub Entry' flag.`}),(0,N.jsxs)(S,{label:`Search access`,name:`metadata.searchScopes`,id:`metadata.searchScopes`,infoTooltip:`Set who can see this topic in search results. Topics will still always appear for Curators.`,as:`select`,onChange:e=>{t.setFieldValue(`metadata.searchScopes`,[+e.target.value])},value:t.values.metadata?.searchScopes?.[0]??c.All,disabled:!U||J,infoText:J&&`Hub topics will be hidden from search results.`,children:[(0,N.jsx)(`option`,{value:c.All,children:`Everyone`}),(0,N.jsx)(`option`,{value:c.None,children:`No one`})]}),!i&&(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`label`,{children:`Total Followers:`}),`\xA0`,e.classification.followers?.count]}),(0,N.jsx)(S,{name:`parentIds`,disabled:!U,children:()=>(0,N.jsx)(`div`,{className:V(`parentIds`),children:(0,N.jsx)(E,{label:`Parent Topic(s)`,tree:e.classificationTree,selectedIds:t.values.parentIds,onSelect:z,collapse:s,noSelectionMessage:`No parent selected, this will be a root topic.`,isNodeDisabled:I(e.classificationTree,e.classification?.id),multiSelect:!0})})}),(0,N.jsx)(S,{name:`backboneClassificationIds`,disabled:!U,children:()=>(0,N.jsx)(`div`,{className:V(`backboneClassificationIds`),children:(0,N.jsx)(E,{label:`Mapped Backbone Subject(s)`,tree:e.subjectTree,selectedIds:t.values.backboneClassificationIds,onSelect:B,collapse:!i,getSelectedItemAppLink:F,multiSelect:!0})})}),(0,N.jsx)(S,{label:`SEO Page Title`,name:`externalMetadata.seo.title`,id:`seoTitle`,value:t.values.externalMetadata?.seo?.title??``,placeholder:`Enter a page title to use for this classification`,disabled:!U||!H(u.TopicsClassificationSeo),showCharacterCounter:!0,maxLength:l.MAX_TITLE_LENGTH-l.PAGE_TITLE_SUFFIX.length,infoText:`All page titles will be automatically suffixed with " | ClickView", so page titles should ideally range between 38-48 characters.`}),(0,N.jsx)(S,{label:`SEO Page Description`,name:`externalMetadata.seo.description`,id:`seoDescription`,value:t.values.externalMetadata?.seo?.description??``,placeholder:`Enter a description to use in the meta tag for this classification`,disabled:!U||!H(u.TopicsClassificationSeo),showCharacterCounter:!0,maxLength:l.MAX_DESCRIPTION_LENGTH,infoText:`Google typically shows the first 150-160 characters of a page description. Longer descriptions may be truncated.`}),te&&(0,N.jsxs)(`div`,{className:`form-group`,children:[(0,N.jsx)(`label`,{htmlFor:`themeType`,children:`Theme`}),(0,N.jsx)(k,{className:`mb-2`,children:`Choose a theme first to upload classification assets`}),(0,N.jsxs)(`select`,{id:`themeType`,className:`form-select`,value:X,onChange:e=>ee(e.target.value),disabled:!U,children:[(0,N.jsx)(`option`,{value:``,children:`Illustration`}),e.themes?.map(e=>(0,N.jsx)(`option`,{value:e.systemName,children:e.name},e.systemName))]})]}),(!Y||X===``)&&(0,N.jsx)(L,{prefix:``,uploadAppLink:K.imageUpload(),canEdit:U}),Y&&X!==``&&(0,N.jsx)(L,{prefix:`themes.${$}`,uploadAppLink:K.imageUpload(),canEdit:U}),(0,N.jsx)(O,{label:`Background color`,fieldName:`metadata.backgroundColor`,disabled:!U}),(0,N.jsxs)(`div`,{className:`d-flex justify-content-between`,children:[U&&(0,N.jsx)(v,{showSpinner:t.isSubmitting,type:`submit`,disabled:!n,children:i?`Create`:`Save`}),W&&(_?(0,N.jsx)(r,{className:`btn btn-outline-danger`,appLink:K.deleteClassification(e.presentationId,e.classification?.id),children:`Delete`}):(0,N.jsx)(m,{title:`Only draft classifications can be deleted.`,variant:`outline-danger`,disabled:!0,children:`Delete`}))]})]})}export{R as t};
2
+ //# sourceMappingURL=Dt2TCPUI.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Dh3G-ann.chunk.js","names":[],"sources":["../../../../../src/apps/subjects/components/classifications/TopicClassificationStatusField.tsx","../../../../../src/apps/subjects/components/classifications/EditTopicClassificationDetailsForm.tsx"],"sourcesContent":["import React from 'react';\nimport { useFormikContext } from 'formik';\n\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { Classification } from 'libs/shared/interfaces';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { CuratorPermissionName } from 'shared/enums/CuratorPermissionName';\nimport { useCuratorPermissions } from 'shared/hooks';\nimport { CreateClassificationRequest, UpdateClassificationRequest } from 'shared/interfaces';\n\ntype RequestType = CreateClassificationRequest | UpdateClassificationRequest;\n\ninterface TopicClassificationStatusFieldProps {\n classification: Classification;\n presentationType: PresentationType;\n hasPublishedDashboard: boolean;\n}\n\nexport function TopicClassificationStatusField(props: TopicClassificationStatusFieldProps): JSX.Element {\n const formikProps = useFormikContext<RequestType>();\n const { hasPermissions } = useCuratorPermissions();\n\n /**\n * Streamable, tertiary, NZ and CA topics and L1 topic dashboard don't go through the content pipeline,\n * so they can be published from outside of the pipeline.\n */\n const isStreamableTopic = props.presentationType === PresentationType.StreamableLearning;\n const isTertiaryTopic = TopicsHelper.isTertiary(props.classification?.presentationId);\n const isNewZealandTopic = TopicsHelper.isNewZealandTopic(props.classification?.presentationId);\n const isCanadaTopic = TopicsHelper.isCanadaTopic(props.classification?.presentationId);\n const isInternationalTopic = TopicsHelper.isInternationalTopic(props.classification?.presentationId);\n const hasAssets = !!props.classification?.cover?.url && !!props.classification?.banner?.url;\n const isTopLevelTopic = TopicsHelper.isTopLevelTopic(props.classification);\n\n const byPassContentPipelineTopics = isStreamableTopic\n || isTertiaryTopic\n || isNewZealandTopic\n || isInternationalTopic\n || isCanadaTopic\n || isTopLevelTopic;\n const canPublish = byPassContentPipelineTopics && hasAssets && props.hasPublishedDashboard;\n\n const canUnpublish = hasPermissions(CuratorPermissionName.TopicsClassificationUnpublish);\n\n const sharedProps = {\n as: 'select',\n label: 'Status',\n name: 'status',\n id: 'status',\n value: formikProps.values.status\n };\n\n const options: ClassificationStatus[] = ObjectHelper.getEnumKeys(ClassificationStatus);\n\n function getInfoText(): string {\n if (props.classification.status === ClassificationStatus.Published)\n return canUnpublish ? '' : 'Published topics cannot have their status changed.';\n\n if (canPublish)\n return '';\n\n if (isStreamableTopic || isTertiaryTopic || isNewZealandTopic || isCanadaTopic) {\n if (!hasAssets)\n return 'Please upload a cover and banner to publish this topic.';\n\n return 'Please publish a dashboard for this topic before publishing the topic.';\n }\n\n return 'Please go to the content pipeline to publish this topic.';\n }\n\n /**\n * New topics must be created as a draft\n */\n if (!props.classification?.id) {\n return (\n <FormField<RequestType>\n {...sharedProps}\n disabled\n >\n {options.map(key => <option key={key} value={key}>{key}</option>)}\n </FormField>\n );\n }\n\n /**\n * Users who can't publish can change the status between draft and coming soon if the topic isn't published\n * Users who can publish should go to content pipeline to publish it\n */\n\n return (\n <FormField<RequestType>\n {...sharedProps}\n disabled={props.classification.status === ClassificationStatus.Published && !canUnpublish}\n infoText={getInfoText()}\n >\n {options.map(key => (\n <option\n key={key}\n value={key}\n disabled={!canPublish && key === ClassificationStatus.Published}\n >\n {key}\n </option>\n ))}\n </FormField>\n );\n}\n","import * as React from 'react';\nimport { Button } from 'react-bootstrap';\nimport { Form, useFormikContext } from 'formik';\n\nimport { Core } from 'libs/common/core';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClassificationNodeType } from 'libs/shared/apps/subjects/enums/ClassificationNodeType';\nimport { WarningAlert } from 'libs/shared/apps/user-manager/components/warning-alert/WarningAlert';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ClassificationType } from 'libs/shared/enums/ClassificationType';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { useCanSubmitForm } from 'libs/shared/hooks/UseCanSubmitForm';\nimport { ClassificationSearchScope, PresentationTheme } from 'libs/shared/interfaces';\nimport { FormHelper } from 'libs/shared/utils/FormHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\nimport { TreeHelper } from 'libs/shared/utils/TreeHelper';\n\nimport { ImageSelect, TreeSelect } from 'shared/components';\nimport { ColorSelect } from 'shared/components/forms/color-select/ColorSelect';\nimport { Actions, AppChannels, DEFAULT_THEME_NAME } from 'shared/constants';\nimport { CuratorPermissionName } from 'shared/enums/CuratorPermissionName';\nimport { useCuratorPermissions } from 'shared/hooks';\nimport { CreateClassificationRequest, UpdateClassificationRequest } from 'shared/interfaces/data-requests';\nimport { ClassificationTree, CuratorClassification, SubjectTree } from 'shared/interfaces/models';\n\nimport { SuggestedContentContainer } from 'apps/assembly-line/components/fields/suggested-content-container/SuggestedContentContainer';\nimport { TopicClassificationStatusField } from 'apps/subjects/components/classifications/TopicClassificationStatusField';\nimport { SeoMetadataConstants } from 'apps/subjects/utils';\nimport { getSubjectAppLinks } from 'apps/subjects/utils/getSubjectAppLinks';\n\ntype RequestType = CreateClassificationRequest | UpdateClassificationRequest;\n\nconst getSubjectAppLink = (subjectId: string) => ({\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.EDIT_SUBJECT,\n args: [subjectId]\n});\n\nconst isNodeDisabled = (classificationTree: ClassificationTree, classificationId: string) =>\n (node: ClassificationTree) => {\n if (node.id === classificationId)\n return true;\n\n const classificationNode = TreeHelper.find(classificationTree, classificationId);\n\n return !!TreeHelper.find(classificationNode, node.id);\n };\n\ninterface ClassificationImageFieldsProps {\n prefix: string;\n uploadAppLink: Core.AppLink;\n canEdit: boolean;\n}\n\nfunction ClassificationImageFields({ prefix, uploadAppLink, canEdit }: ClassificationImageFieldsProps) {\n const fieldName = (name: string) => prefix ? `${prefix}.${name}` : name;\n return (\n <>\n <ImageSelect\n imageType={ImageType.Covers}\n fieldName={fieldName('cover')}\n uploadAppLink={uploadAppLink}\n disabled={!canEdit}\n canRemove={canEdit}\n />\n <ImageSelect\n imageType={ImageType.Banners}\n fieldName={fieldName('banner')}\n uploadAppLink={uploadAppLink}\n disabled={!canEdit}\n canRemove={canEdit}\n />\n <ImageSelect\n imageType={ImageType.TallPosters}\n fieldName={fieldName('tallPoster')}\n uploadAppLink={uploadAppLink}\n disabled={!canEdit}\n canRemove={canEdit}\n />\n <ImageSelect\n imageType={ImageType.Thumbnails}\n fieldName={fieldName('thumbnail')}\n uploadAppLink={uploadAppLink}\n disabled={!canEdit}\n canRemove={canEdit}\n />\n <ImageSelect\n imageType={ImageType.Covers}\n fieldName={fieldName('icon')}\n label='Icon'\n uploadAppLink={uploadAppLink}\n disabled={!canEdit}\n canRemove={canEdit}\n />\n </>\n );\n}\n\ninterface EditClassificationDetailsFormProps {\n presentationId: string;\n presentationType: PresentationType;\n classificationTree: ClassificationTree;\n themes?: PresentationTheme[];\n subjectTree: SubjectTree;\n classification?: CuratorClassification;\n hasPublishedDashboard: boolean;\n getAiGeneratedDescription?: (classification: CuratorClassification) => Promise<string | undefined>;\n}\n\nexport function EditTopicClassificationDetailsForm(props: EditClassificationDetailsFormProps): React.ReactElement {\n const formikProps = useFormikContext<RequestType>();\n\n const canSubmit = useCanSubmitForm(formikProps);\n\n const isNew = !props.classification?.id;\n\n const collapseInitialState = !isNew || !!(formikProps.values.parentIds && formikProps.values.parentIds.length);\n\n const [ collapseClassificationSelect, setCollapseClassificationSelect ] = React.useState(collapseInitialState);\n\n React.useEffect(() =>\n setCollapseClassificationSelect(collapseInitialState), [ props.classification?.id, formikProps.values.parentIds ]);\n\n /**\n * Set backboneClassificationIds to 'touched' so that errors will be displayed if no subject is selected.\n * On a new subject this will not trigger until a subject has been selected.\n */\n React.useEffect(() => {\n if (formikProps.values.backboneClassificationIds.length && !formikProps.touched.backboneClassificationIds)\n formikProps.setFieldTouched('backboneClassificationIds', true);\n }, [formikProps.values.backboneClassificationIds]);\n\n const canDelete = props.classification?.status === ClassificationStatus.Draft;\n\n const [ isGeneratingDescription, setIsGeneratingDescription ] = React.useState(false);\n\n async function handleGenerateDescription() {\n if (!props.getAiGeneratedDescription || !props.classification)\n return;\n\n setIsGeneratingDescription(true);\n try {\n const description = await props.getAiGeneratedDescription(props.classification);\n if (description !== null && description !== undefined)\n formikProps.setFieldValue('description', description);\n } finally {\n setIsGeneratingDescription(false);\n }\n }\n\n const handleParentIdSelect = (item: ClassificationTree) => {\n const newIds = ArrayHelper.addOrRemove(formikProps.values.parentIds.map(pId => pId.toString()), item.id.toString());\n\n if (newIds.length) {\n formikProps.setFieldValue('parentIds', newIds.filter(id => id !== ClassificationNodeType.Root));\n return;\n }\n\n formikProps.setFieldValue('parentIds', [ClassificationNodeType.Root]);\n };\n\n const handleSubjectSelect = (item: SubjectTree) => formikProps.setFieldValue(\n 'backboneClassificationIds',\n ArrayHelper.addOrRemove(formikProps.values.backboneClassificationIds.map(sId => sId.toString()), item.id.toString())\n );\n\n const getTreeSelectClassName = (field: keyof RequestType) =>\n `${FormHelper.getCustomFormControlClassName(formikProps.errors, formikProps.touched, field)} h-auto py-2`;\n\n const { hasPermissions } = useCuratorPermissions();\n\n const canEdit = hasPermissions(CuratorPermissionName.TopicsClassificationUpdate);\n const showDeleteButton = !isNew && hasPermissions(CuratorPermissionName.TopicsClassificationDelete);\n const canSetHubTopic = hasPermissions(CuratorPermissionName.TopicsSetHubTopic);\n\n const appLinks = getSubjectAppLinks(props.presentationType);\n\n const isTopLevelClassification = TopicsHelper.isTopLevelTopic(props.classification);\n\n const isHub = formikProps.values.type === ClassificationType.Hub;\n\n const hasPresentationThemes = !!props.themes?.length;\n\n const [ themeType, setThemeType ] = React.useState<string>('');\n\n const selectedThemeIndex = formikProps.values.themes?.findIndex(t => t.systemName === themeType) ?? -1;\n const effectiveThemeIndex = selectedThemeIndex >= 0 ?\n selectedThemeIndex :\n (formikProps.values.themes?.length ?? 0);\n\n const handleThemeChange = (systemName: string) => {\n setThemeType(systemName);\n // handle when presentation has themes but the topic has an empty themes array, it means none assets has been uploaded ever for this theme for this topic\n if (systemName && (formikProps.values.themes?.findIndex(t => t.systemName === systemName) ?? -1) === -1) {\n const newIndex = formikProps.values.themes?.length ?? 0;\n formikProps.setFieldValue(`themes.${newIndex}.systemName`, systemName);\n }\n };\n\n const shouldShowThemeDropdown = !isNew && hasPresentationThemes;\n\n function onChangeDescription(event: React.ChangeEvent<HTMLTextAreaElement>) {\n if (!canEdit) return;\n return formikProps.handleChange(event);\n }\n\n return (\n <Form>\n <FormField<RequestType>\n label='Name'\n name='name'\n id='name'\n value={formikProps.values.name}\n placeholder='Enter a name for this classification'\n disabled={!canEdit}\n autoFocus={!!isNew}\n />\n\n <FormField<RequestType>\n label='Description'\n name='description'\n disabled={!canEdit}\n >\n {() => (\n <div className='d-flex gap-2 align-items-center'>\n <textarea\n id='description'\n name='description'\n value={formikProps.values.description ?? ''}\n onChange={onChangeDescription}\n onBlur={formikProps.handleBlur}\n className='form-control flex-grow-1'\n placeholder='Enter a description for this classification'\n disabled={!canEdit}\n rows={2}\n />\n {canEdit && props.getAiGeneratedDescription && props.classification && (\n <div className='flex-shrink-0'>\n <SuggestedContentContainer shouldShow>\n <SpinnerButton\n variant='outline'\n showSpinner={isGeneratingDescription}\n onClick={handleGenerateDescription}\n disabled={isGeneratingDescription}\n className='text-nowrap'\n >\n Generate AI description\n </SpinnerButton>\n </SuggestedContentContainer>\n </div>\n )}\n </div>\n )}\n </FormField>\n\n <TopicClassificationStatusField\n classification={props.classification}\n presentationType={props.presentationType}\n hasPublishedDashboard={props.hasPublishedDashboard}\n />\n\n <FormField<RequestType>\n label='Set as a topic preference'\n name='canBePreferred'\n id='canBePreferred'\n type='checkbox'\n checked={formikProps.values.canBePreferred}\n disabled={!canEdit || isHub}\n infoText={isHub && `Hub topics cannot be set as a preference topic.`}\n />\n\n {isTopLevelClassification && (\n <FormField<RequestType>\n label='Set as a hub topic'\n name='type'\n id='isHub'\n type='checkbox'\n checked={isHub}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n formikProps.setFieldValue('type', e.target.checked ? ClassificationType.Hub : ClassificationType.Subject);\n if (e.target.checked) {\n formikProps.setFieldValue('metadata.searchScopes', [ClassificationSearchScope.None]);\n formikProps.setFieldValue('canBePreferred', false);\n }\n }}\n disabled={!canEdit || !canSetHubTopic}\n infoTooltip={!canSetHubTopic && `Only the engineering team can set a hub topic.`}\n infoText={`If enabled, the published dashboard of this topic will be linked from the left navigation. Feature controlled 'Has Hub Entry' flag.`}\n />\n )}\n <FormField<RequestType>\n label='Search access'\n name='metadata.searchScopes'\n id='metadata.searchScopes'\n infoTooltip='Set who can see this topic in search results. Topics will still always appear for Curators.'\n as='select'\n onChange={(e: React.ChangeEvent<HTMLSelectElement>) => {\n formikProps.setFieldValue('metadata.searchScopes', [+e.target.value]);\n }}\n value={formikProps.values.metadata?.searchScopes?.[0] ?? ClassificationSearchScope.All}\n disabled={!canEdit || isHub}\n infoText={isHub && `Hub topics will be hidden from search results.`}\n >\n <option value={ClassificationSearchScope.All}>Everyone</option>\n <option value={ClassificationSearchScope.None}>No one</option>\n {/* Learner and teacher values are planned to be supported in the future, but not initially */}\n {/* <option value={ClassificationSearchScope.Learner}>Learners only</option>\n <option value={ClassificationSearchScope.Teacher}>Staff only</option> */}\n </FormField>\n\n {!isNew && (\n <>\n <label>Total Followers:</label>\n &nbsp;{props.classification.followers?.count}\n </>\n )}\n\n <FormField<RequestType>\n name='parentIds'\n disabled={!canEdit}\n >\n {() => (\n <div className={getTreeSelectClassName('parentIds')}>\n <TreeSelect<ClassificationTree>\n label='Parent Topic(s)'\n tree={props.classificationTree}\n selectedIds={formikProps.values.parentIds}\n onSelect={handleParentIdSelect}\n collapse={collapseClassificationSelect}\n noSelectionMessage='No parent selected, this will be a root topic.'\n isNodeDisabled={isNodeDisabled(props.classificationTree, props.classification?.id)}\n multiSelect\n />\n </div>\n )}\n </FormField>\n\n <FormField<RequestType>\n name='backboneClassificationIds'\n disabled={!canEdit}\n >\n {() => (\n <div className={getTreeSelectClassName('backboneClassificationIds')}>\n <TreeSelect<SubjectTree>\n label='Mapped Backbone Subject(s)'\n tree={props.subjectTree}\n selectedIds={formikProps.values.backboneClassificationIds}\n onSelect={handleSubjectSelect}\n collapse={!isNew}\n getSelectedItemAppLink={getSubjectAppLink}\n multiSelect\n />\n </div>\n )}\n </FormField>\n\n <FormField<RequestType>\n label='SEO Page Title'\n name='externalMetadata.seo.title'\n id='seoTitle'\n value={formikProps.values.externalMetadata?.seo?.title ?? ''}\n placeholder='Enter a page title to use for this classification'\n disabled={!canEdit || !hasPermissions(CuratorPermissionName.TopicsClassificationSeo)}\n showCharacterCounter\n maxLength={SeoMetadataConstants.MAX_TITLE_LENGTH - SeoMetadataConstants.PAGE_TITLE_SUFFIX.length}\n infoText='All page titles will be automatically suffixed with \" | ClickView\", so page titles should ideally range between 38-48 characters.'\n />\n\n <FormField<RequestType>\n label='SEO Page Description'\n name='externalMetadata.seo.description'\n id='seoDescription'\n value={formikProps.values.externalMetadata?.seo?.description ?? ''}\n placeholder='Enter a description to use in the meta tag for this classification'\n disabled={!canEdit || !hasPermissions(CuratorPermissionName.TopicsClassificationSeo)}\n showCharacterCounter\n maxLength={SeoMetadataConstants.MAX_DESCRIPTION_LENGTH}\n infoText='Google typically shows the first 150-160 characters of a page description. Longer descriptions may be truncated.'\n />\n\n {shouldShowThemeDropdown && (\n <div className='form-group'>\n <label htmlFor='themeType'>Theme</label>\n <WarningAlert className='mb-2'>Choose a theme first to upload classification assets</WarningAlert>\n <select\n id='themeType'\n className='form-select'\n value={themeType}\n onChange={e => handleThemeChange(e.target.value)}\n disabled={!canEdit}\n >\n <option value=''>{DEFAULT_THEME_NAME}</option>\n {props.themes?.map(theme => (\n <option key={theme.systemName} value={theme.systemName}>{theme.name}</option>\n ))}\n </select>\n </div>\n )}\n\n {(!hasPresentationThemes || themeType === '') && (\n <ClassificationImageFields\n prefix=''\n uploadAppLink={appLinks.imageUpload()}\n canEdit={canEdit}\n />\n )}\n {hasPresentationThemes && themeType !== '' && (\n <ClassificationImageFields\n prefix={`themes.${effectiveThemeIndex}`}\n uploadAppLink={appLinks.imageUpload()}\n canEdit={canEdit}\n />\n )}\n <ColorSelect\n label='Background color'\n fieldName='metadata.backgroundColor'\n disabled={!canEdit}\n />\n\n <div className='d-flex justify-content-between'>\n {canEdit &&\n <SpinnerButton showSpinner={formikProps.isSubmitting} type='submit' disabled={!canSubmit}>\n {isNew ? 'Create' : 'Save'}\n </SpinnerButton>\n }\n {showDeleteButton && (\n canDelete ? (\n <AppLink\n className='btn btn-outline-danger'\n appLink={appLinks.deleteClassification(props.presentationId, props.classification?.id)}\n >\n Delete\n </AppLink>\n ) : (\n <Button\n title='Only draft classifications can be deleted.'\n variant='outline-danger'\n disabled\n >\n Delete\n </Button>\n )\n )}\n </div>\n </Form>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Dt2TCPUI.chunk.js","names":[],"sources":["../../../../../src/apps/subjects/components/classifications/TopicClassificationStatusField.tsx","../../../../../src/apps/subjects/components/classifications/EditTopicClassificationDetailsForm.tsx"],"sourcesContent":["import React from 'react';\nimport { useFormikContext } from 'formik';\n\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { Classification } from 'libs/shared/interfaces';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { CuratorPermissionName } from 'shared/enums/CuratorPermissionName';\nimport { useCuratorPermissions } from 'shared/hooks';\nimport { CreateClassificationRequest, UpdateClassificationRequest } from 'shared/interfaces';\n\ntype RequestType = CreateClassificationRequest | UpdateClassificationRequest;\n\ninterface TopicClassificationStatusFieldProps {\n classification: Classification;\n presentationType: PresentationType;\n hasPublishedDashboard: boolean;\n}\n\nexport function TopicClassificationStatusField(props: TopicClassificationStatusFieldProps): JSX.Element {\n const formikProps = useFormikContext<RequestType>();\n const { hasPermissions } = useCuratorPermissions();\n\n /**\n * Streamable, tertiary, NZ and CA topics and L1 topic dashboard don't go through the content pipeline,\n * so they can be published from outside of the pipeline.\n */\n const isStreamableTopic = props.presentationType === PresentationType.StreamableLearning;\n const isTertiaryTopic = TopicsHelper.isTertiary(props.classification?.presentationId);\n const isNewZealandTopic = TopicsHelper.isNewZealandTopic(props.classification?.presentationId);\n const isCanadaTopic = TopicsHelper.isCanadaTopic(props.classification?.presentationId);\n const isInternationalTopic = TopicsHelper.isInternationalTopic(props.classification?.presentationId);\n const hasAssets = !!props.classification?.cover?.url && !!props.classification?.banner?.url;\n const isTopLevelTopic = TopicsHelper.isTopLevelTopic(props.classification);\n\n const byPassContentPipelineTopics = isStreamableTopic\n || isTertiaryTopic\n || isNewZealandTopic\n || isInternationalTopic\n || isCanadaTopic\n || isTopLevelTopic;\n const canPublish = byPassContentPipelineTopics && hasAssets && props.hasPublishedDashboard;\n\n const canUnpublish = hasPermissions(CuratorPermissionName.TopicsClassificationUnpublish);\n\n const sharedProps = {\n as: 'select',\n label: 'Status',\n name: 'status',\n id: 'status',\n value: formikProps.values.status\n };\n\n const options: ClassificationStatus[] = ObjectHelper.getEnumKeys(ClassificationStatus);\n\n function getInfoText(): string {\n if (props.classification.status === ClassificationStatus.Published)\n return canUnpublish ? '' : 'Published topics cannot have their status changed.';\n\n if (canPublish)\n return '';\n\n if (isStreamableTopic || isTertiaryTopic || isNewZealandTopic || isCanadaTopic) {\n if (!hasAssets)\n return 'Please upload a cover and banner to publish this topic.';\n\n return 'Please publish a dashboard for this topic before publishing the topic.';\n }\n\n return 'Please go to the content pipeline to publish this topic.';\n }\n\n /**\n * New topics must be created as a draft\n */\n if (!props.classification?.id) {\n return (\n <FormField<RequestType>\n {...sharedProps}\n disabled\n >\n {options.map(key => <option key={key} value={key}>{key}</option>)}\n </FormField>\n );\n }\n\n /**\n * Users who can't publish can change the status between draft and coming soon if the topic isn't published\n * Users who can publish should go to content pipeline to publish it\n */\n\n return (\n <FormField<RequestType>\n {...sharedProps}\n disabled={props.classification.status === ClassificationStatus.Published && !canUnpublish}\n infoText={getInfoText()}\n >\n {options.map(key => (\n <option\n key={key}\n value={key}\n disabled={!canPublish && key === ClassificationStatus.Published}\n >\n {key}\n </option>\n ))}\n </FormField>\n );\n}\n","import * as React from 'react';\nimport { Button } from 'react-bootstrap';\nimport { Form, useFormikContext } from 'formik';\n\nimport { Core } from 'libs/common/core';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClassificationNodeType } from 'libs/shared/apps/subjects/enums/ClassificationNodeType';\nimport { WarningAlert } from 'libs/shared/apps/user-manager/components/warning-alert/WarningAlert';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ClassificationType } from 'libs/shared/enums/ClassificationType';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { useCanSubmitForm } from 'libs/shared/hooks/UseCanSubmitForm';\nimport { ClassificationSearchScope, PresentationTheme } from 'libs/shared/interfaces';\nimport { FormHelper } from 'libs/shared/utils/FormHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\nimport { TreeHelper } from 'libs/shared/utils/TreeHelper';\n\nimport { ImageSelect, TreeSelect } from 'shared/components';\nimport { ColorSelect } from 'shared/components/forms/color-select/ColorSelect';\nimport { Actions, AppChannels, DEFAULT_THEME_NAME } from 'shared/constants';\nimport { CuratorPermissionName } from 'shared/enums/CuratorPermissionName';\nimport { useCuratorPermissions } from 'shared/hooks';\nimport { CreateClassificationRequest, UpdateClassificationRequest } from 'shared/interfaces/data-requests';\nimport { ClassificationTree, CuratorClassification, SubjectTree } from 'shared/interfaces/models';\n\nimport { SuggestedContentContainer } from 'apps/assembly-line/components/fields/suggested-content-container/SuggestedContentContainer';\nimport { TopicClassificationStatusField } from 'apps/subjects/components/classifications/TopicClassificationStatusField';\nimport { SeoMetadataConstants } from 'apps/subjects/utils';\nimport { getSubjectAppLinks } from 'apps/subjects/utils/getSubjectAppLinks';\n\ntype RequestType = CreateClassificationRequest | UpdateClassificationRequest;\n\nconst getSubjectAppLink = (subjectId: string) => ({\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.EDIT_SUBJECT,\n args: [subjectId]\n});\n\nconst isNodeDisabled = (classificationTree: ClassificationTree, classificationId: string) =>\n (node: ClassificationTree) => {\n if (node.id === classificationId)\n return true;\n\n const classificationNode = TreeHelper.find(classificationTree, classificationId);\n\n return !!TreeHelper.find(classificationNode, node.id);\n };\n\ninterface ClassificationImageFieldsProps {\n prefix: string;\n uploadAppLink: Core.AppLink;\n canEdit: boolean;\n}\n\nfunction ClassificationImageFields({ prefix, uploadAppLink, canEdit }: ClassificationImageFieldsProps) {\n const fieldName = (name: string) => prefix ? `${prefix}.${name}` : name;\n return (\n <>\n <ImageSelect\n imageType={ImageType.Covers}\n fieldName={fieldName('cover')}\n uploadAppLink={uploadAppLink}\n disabled={!canEdit}\n canRemove={canEdit}\n />\n <ImageSelect\n imageType={ImageType.Banners}\n fieldName={fieldName('banner')}\n uploadAppLink={uploadAppLink}\n disabled={!canEdit}\n canRemove={canEdit}\n />\n <ImageSelect\n imageType={ImageType.TallPosters}\n fieldName={fieldName('tallPoster')}\n uploadAppLink={uploadAppLink}\n disabled={!canEdit}\n canRemove={canEdit}\n />\n <ImageSelect\n imageType={ImageType.Thumbnails}\n fieldName={fieldName('thumbnail')}\n uploadAppLink={uploadAppLink}\n disabled={!canEdit}\n canRemove={canEdit}\n />\n <ImageSelect\n imageType={ImageType.Covers}\n fieldName={fieldName('icon')}\n label='Icon'\n uploadAppLink={uploadAppLink}\n disabled={!canEdit}\n canRemove={canEdit}\n />\n </>\n );\n}\n\ninterface EditClassificationDetailsFormProps {\n presentationId: string;\n presentationType: PresentationType;\n classificationTree: ClassificationTree;\n themes?: PresentationTheme[];\n subjectTree: SubjectTree;\n classification?: CuratorClassification;\n hasPublishedDashboard: boolean;\n getAiGeneratedDescription?: (classification: CuratorClassification) => Promise<string | undefined>;\n}\n\nexport function EditTopicClassificationDetailsForm(props: EditClassificationDetailsFormProps): React.ReactElement {\n const formikProps = useFormikContext<RequestType>();\n\n const canSubmit = useCanSubmitForm(formikProps);\n\n const isNew = !props.classification?.id;\n\n const collapseInitialState = !isNew || !!(formikProps.values.parentIds && formikProps.values.parentIds.length);\n\n const [ collapseClassificationSelect, setCollapseClassificationSelect ] = React.useState(collapseInitialState);\n\n React.useEffect(() =>\n setCollapseClassificationSelect(collapseInitialState), [ props.classification?.id, formikProps.values.parentIds ]);\n\n /**\n * Set backboneClassificationIds to 'touched' so that errors will be displayed if no subject is selected.\n * On a new subject this will not trigger until a subject has been selected.\n */\n React.useEffect(() => {\n if (formikProps.values.backboneClassificationIds.length && !formikProps.touched.backboneClassificationIds)\n formikProps.setFieldTouched('backboneClassificationIds', true);\n }, [formikProps.values.backboneClassificationIds]);\n\n const canDelete = props.classification?.status === ClassificationStatus.Draft;\n\n const [ isGeneratingDescription, setIsGeneratingDescription ] = React.useState(false);\n\n async function handleGenerateDescription() {\n if (!props.getAiGeneratedDescription || !props.classification)\n return;\n\n setIsGeneratingDescription(true);\n try {\n const description = await props.getAiGeneratedDescription(props.classification);\n if (description !== null && description !== undefined)\n formikProps.setFieldValue('description', description);\n } finally {\n setIsGeneratingDescription(false);\n }\n }\n\n const handleParentIdSelect = (item: ClassificationTree) => {\n const newIds = ArrayHelper.addOrRemove(formikProps.values.parentIds.map(pId => pId.toString()), item.id.toString());\n\n if (newIds.length) {\n formikProps.setFieldValue('parentIds', newIds.filter(id => id !== ClassificationNodeType.Root));\n return;\n }\n\n formikProps.setFieldValue('parentIds', [ClassificationNodeType.Root]);\n };\n\n const handleSubjectSelect = (item: SubjectTree) => formikProps.setFieldValue(\n 'backboneClassificationIds',\n ArrayHelper.addOrRemove(formikProps.values.backboneClassificationIds.map(sId => sId.toString()), item.id.toString())\n );\n\n const getTreeSelectClassName = (field: keyof RequestType) =>\n `${FormHelper.getCustomFormControlClassName(formikProps.errors, formikProps.touched, field)} h-auto py-2`;\n\n const { hasPermissions } = useCuratorPermissions();\n\n const canEdit = hasPermissions(CuratorPermissionName.TopicsClassificationUpdate);\n const showDeleteButton = !isNew && hasPermissions(CuratorPermissionName.TopicsClassificationDelete);\n const canSetHubTopic = hasPermissions(CuratorPermissionName.TopicsSetHubTopic);\n\n const appLinks = getSubjectAppLinks(props.presentationType);\n\n const isTopLevelClassification = TopicsHelper.isTopLevelTopic(props.classification);\n\n const isHub = formikProps.values.type === ClassificationType.Hub;\n\n const hasPresentationThemes = !!props.themes?.length;\n\n const [ themeType, setThemeType ] = React.useState<string>('');\n\n const selectedThemeIndex = formikProps.values.themes?.findIndex(t => t.systemName === themeType) ?? -1;\n const effectiveThemeIndex = selectedThemeIndex >= 0 ?\n selectedThemeIndex :\n (formikProps.values.themes?.length ?? 0);\n\n const handleThemeChange = (systemName: string) => {\n setThemeType(systemName);\n // handle when presentation has themes but the topic has an empty themes array, it means none assets has been uploaded ever for this theme for this topic\n if (systemName && (formikProps.values.themes?.findIndex(t => t.systemName === systemName) ?? -1) === -1) {\n const newIndex = formikProps.values.themes?.length ?? 0;\n formikProps.setFieldValue(`themes.${newIndex}.systemName`, systemName);\n }\n };\n\n const shouldShowThemeDropdown = !isNew && hasPresentationThemes;\n\n function onChangeDescription(event: React.ChangeEvent<HTMLTextAreaElement>) {\n if (!canEdit) return;\n return formikProps.handleChange(event);\n }\n\n return (\n <Form>\n <FormField<RequestType>\n label='Name'\n name='name'\n id='name'\n value={formikProps.values.name}\n placeholder='Enter a name for this classification'\n disabled={!canEdit}\n autoFocus={!!isNew}\n />\n\n <FormField<RequestType>\n label='Description'\n name='description'\n disabled={!canEdit}\n >\n {() => (\n <div className='d-flex gap-2 align-items-center'>\n <textarea\n id='description'\n name='description'\n value={formikProps.values.description ?? ''}\n onChange={onChangeDescription}\n onBlur={formikProps.handleBlur}\n className='form-control flex-grow-1'\n placeholder='Enter a description for this classification'\n disabled={!canEdit}\n rows={2}\n />\n {canEdit && props.getAiGeneratedDescription && props.classification && (\n <div className='flex-shrink-0'>\n <SuggestedContentContainer shouldShow>\n <SpinnerButton\n variant='outline'\n showSpinner={isGeneratingDescription}\n onClick={handleGenerateDescription}\n disabled={isGeneratingDescription}\n className='text-nowrap'\n >\n Generate AI description\n </SpinnerButton>\n </SuggestedContentContainer>\n </div>\n )}\n </div>\n )}\n </FormField>\n\n <TopicClassificationStatusField\n classification={props.classification}\n presentationType={props.presentationType}\n hasPublishedDashboard={props.hasPublishedDashboard}\n />\n\n <FormField<RequestType>\n label='Set as a topic preference'\n name='canBePreferred'\n id='canBePreferred'\n type='checkbox'\n checked={formikProps.values.canBePreferred}\n disabled={!canEdit || isHub}\n infoText={isHub && `Hub topics cannot be set as a preference topic.`}\n />\n\n {isTopLevelClassification && (\n <FormField<RequestType>\n label='Set as a hub topic'\n name='type'\n id='isHub'\n type='checkbox'\n checked={isHub}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n formikProps.setFieldValue('type', e.target.checked ? ClassificationType.Hub : ClassificationType.Subject);\n if (e.target.checked) {\n formikProps.setFieldValue('metadata.searchScopes', [ClassificationSearchScope.None]);\n formikProps.setFieldValue('canBePreferred', false);\n }\n }}\n disabled={!canEdit || !canSetHubTopic}\n infoTooltip={!canSetHubTopic && `Only the engineering team can set a hub topic.`}\n infoText={`If enabled, the published dashboard of this topic will be linked from the left navigation. Feature controlled 'Has Hub Entry' flag.`}\n />\n )}\n <FormField<RequestType>\n label='Search access'\n name='metadata.searchScopes'\n id='metadata.searchScopes'\n infoTooltip='Set who can see this topic in search results. Topics will still always appear for Curators.'\n as='select'\n onChange={(e: React.ChangeEvent<HTMLSelectElement>) => {\n formikProps.setFieldValue('metadata.searchScopes', [+e.target.value]);\n }}\n value={formikProps.values.metadata?.searchScopes?.[0] ?? ClassificationSearchScope.All}\n disabled={!canEdit || isHub}\n infoText={isHub && `Hub topics will be hidden from search results.`}\n >\n <option value={ClassificationSearchScope.All}>Everyone</option>\n <option value={ClassificationSearchScope.None}>No one</option>\n {/* Learner and teacher values are planned to be supported in the future, but not initially */}\n {/* <option value={ClassificationSearchScope.Learner}>Learners only</option>\n <option value={ClassificationSearchScope.Teacher}>Staff only</option> */}\n </FormField>\n\n {!isNew && (\n <>\n <label>Total Followers:</label>\n &nbsp;{props.classification.followers?.count}\n </>\n )}\n\n <FormField<RequestType>\n name='parentIds'\n disabled={!canEdit}\n >\n {() => (\n <div className={getTreeSelectClassName('parentIds')}>\n <TreeSelect<ClassificationTree>\n label='Parent Topic(s)'\n tree={props.classificationTree}\n selectedIds={formikProps.values.parentIds}\n onSelect={handleParentIdSelect}\n collapse={collapseClassificationSelect}\n noSelectionMessage='No parent selected, this will be a root topic.'\n isNodeDisabled={isNodeDisabled(props.classificationTree, props.classification?.id)}\n multiSelect\n />\n </div>\n )}\n </FormField>\n\n <FormField<RequestType>\n name='backboneClassificationIds'\n disabled={!canEdit}\n >\n {() => (\n <div className={getTreeSelectClassName('backboneClassificationIds')}>\n <TreeSelect<SubjectTree>\n label='Mapped Backbone Subject(s)'\n tree={props.subjectTree}\n selectedIds={formikProps.values.backboneClassificationIds}\n onSelect={handleSubjectSelect}\n collapse={!isNew}\n getSelectedItemAppLink={getSubjectAppLink}\n multiSelect\n />\n </div>\n )}\n </FormField>\n\n <FormField<RequestType>\n label='SEO Page Title'\n name='externalMetadata.seo.title'\n id='seoTitle'\n value={formikProps.values.externalMetadata?.seo?.title ?? ''}\n placeholder='Enter a page title to use for this classification'\n disabled={!canEdit || !hasPermissions(CuratorPermissionName.TopicsClassificationSeo)}\n showCharacterCounter\n maxLength={SeoMetadataConstants.MAX_TITLE_LENGTH - SeoMetadataConstants.PAGE_TITLE_SUFFIX.length}\n infoText='All page titles will be automatically suffixed with \" | ClickView\", so page titles should ideally range between 38-48 characters.'\n />\n\n <FormField<RequestType>\n label='SEO Page Description'\n name='externalMetadata.seo.description'\n id='seoDescription'\n value={formikProps.values.externalMetadata?.seo?.description ?? ''}\n placeholder='Enter a description to use in the meta tag for this classification'\n disabled={!canEdit || !hasPermissions(CuratorPermissionName.TopicsClassificationSeo)}\n showCharacterCounter\n maxLength={SeoMetadataConstants.MAX_DESCRIPTION_LENGTH}\n infoText='Google typically shows the first 150-160 characters of a page description. Longer descriptions may be truncated.'\n />\n\n {shouldShowThemeDropdown && (\n <div className='form-group'>\n <label htmlFor='themeType'>Theme</label>\n <WarningAlert className='mb-2'>Choose a theme first to upload classification assets</WarningAlert>\n <select\n id='themeType'\n className='form-select'\n value={themeType}\n onChange={e => handleThemeChange(e.target.value)}\n disabled={!canEdit}\n >\n <option value=''>{DEFAULT_THEME_NAME}</option>\n {props.themes?.map(theme => (\n <option key={theme.systemName} value={theme.systemName}>{theme.name}</option>\n ))}\n </select>\n </div>\n )}\n\n {(!hasPresentationThemes || themeType === '') && (\n <ClassificationImageFields\n prefix=''\n uploadAppLink={appLinks.imageUpload()}\n canEdit={canEdit}\n />\n )}\n {hasPresentationThemes && themeType !== '' && (\n <ClassificationImageFields\n prefix={`themes.${effectiveThemeIndex}`}\n uploadAppLink={appLinks.imageUpload()}\n canEdit={canEdit}\n />\n )}\n <ColorSelect\n label='Background color'\n fieldName='metadata.backgroundColor'\n disabled={!canEdit}\n />\n\n <div className='d-flex justify-content-between'>\n {canEdit &&\n <SpinnerButton showSpinner={formikProps.isSubmitting} type='submit' disabled={!canSubmit}>\n {isNew ? 'Create' : 'Save'}\n </SpinnerButton>\n }\n {showDeleteButton && (\n canDelete ? (\n <AppLink\n className='btn btn-outline-danger'\n appLink={appLinks.deleteClassification(props.presentationId, props.classification?.id)}\n >\n Delete\n </AppLink>\n ) : (\n <Button\n title='Only draft classifications can be deleted.'\n variant='outline-danger'\n disabled\n >\n Delete\n </Button>\n )\n )}\n </div>\n </Form>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{a as e,i as t,ln as n}from"./rp704-Pm.chunk.js";import{t as r}from"./Di_u2uix.chunk.js";import{t as i}from"./BvMTtGLi.chunk.js";import"./CfCYHRuo.chunk.js";import{n as a}from"./CFoexGFe.chunk.js";import{t as o}from"./BVbA6fE6.chunk.js";import{n as s,t as c}from"./DBUreHJA.chunk.js";import{t as l}from"./UCDGupVs.chunk.js";import{r as u}from"./BKtR2N4K.chunk.js";import{r as d}from"./DkstLT1W.chunk.js";import{d as f}from"./BhKv6dKl2.chunk.js";import{n as p}from"./CbiGs3Tn.chunk.js";import{s as m,u as h}from"./Dgk5cBBe.chunk.js";import{t as g}from"./DpqbC5uX.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as _}from"./CVHQXNzi.chunk.js";import{n as v,t as y}from"./DyKk_C_Y.chunk.js";import"./BCfBk23W.chunk.js";import{t as b}from"./DjzD1n9W.chunk.js";import{t as x}from"./B_qCVJZp2.chunk.js";import{t as S}from"./CZyPFSXo.chunk.js";import{t as C}from"./JmL1DHFu.chunk.js";import{t as w}from"./DHD4nY6U.chunk.js";import{t as T}from"./D1EPU1_6.chunk.js";import{t as E}from"./CAU0Lbgd.chunk.js";import{t as D}from"./CXsvYuSI.chunk.js";var O=n(e()),k=t();function A(e){let[t,n]=O.useState(!0),A=h(),j=m(S.presentation(e.presentationId)),M=m(l.currentUser()),N=m(S.classification(e.classificationId));function P(n){return T.dashboards({targetType:u.Classification,classificationId:e.classificationId},t,n)}function F(e){A(P(e))}let I=w(P,F),L=m(S.classificationMembers(e.classificationId,a.Tags)).data?.data?.find(e=>e.name===x.MOVIES_AND_TV),{hasPermissions:R}=b();function z(){return!!(R(d.TopicDashboardStatusUpdate)||L&&R(d.MoviesAndTvDashboardStatusUpdate))}async function B(e,t){let n=e.reduce((t,n,r)=>{let i=n.name;if(!i){let t=e[r-1];t&&t.templateId===v.Heading&&(i=t.name)}return n.data.objectIds?.forEach(e=>{t[e]=i}),n.data.playlistId&&(t[n.data.playlistId]=i),t},{}),r=Object.keys(n),i=g.chunk(r,25).map(e=>A(C.curationStudioExport(e))),a=g.flatten(await Promise.all(i)).reduce((e,t)=>{if(t.typeId===_.Playlist||t.typeId===_.Series){let r=t,i=n[t.id];return e.concat(r.videos?.data.map(e=>({video:e,heading:i}))||[])}return e.concat({video:t,heading:n[t.id]})},[]);D.exportDashboardReport(a,j.data.description,N.data.name,t)}async function V(e){return B(e.widgets.filter(e=>e.widgetId===y.CuratedSeries),e.name)}async function H(e){let t=[y.PlaylistMedia,y.CuratedMedia,y.ClassificationMedia,y.LatestReleasedVideos,y.ClassificationFeaturedVideo,y.ClassificationPinnedVideos];B(e.widgets.filter(e=>t.includes(e.widgetId)),e.name)}function U(e){return A(T.updateDashboard(e.id,e))}return!j.data||!M.data||!N.data?(0,k.jsx)(`div`,{className:`text-center py-3`,children:(0,k.jsx)(p,{as:`div`,animation:`border`,role:`status`})}):(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(f,{memberType:e.memberType,presentation:j.data,classificationId:e.classificationId,getTabs:(e,t,n)=>o.getEditClassificationTabs(i.CV_LIVE,e,t,n)}),(0,k.jsx)(E,{presentation:j.data,dashboards:I.items,onStatusChange:U,canPublish:z(),columns:s.getColumnSet(c.ClassificationDashboard),filterArchivedDashboards:t,setFilterArchivedDashboards:n,getEditDetailsAppLink:t=>({application:i.CV_LIVE,action:r.CvLive.EDIT_CLASSIFICATION_DASHBOARD,args:[e.classificationId,t]}),getDeleteAppLink:t=>({application:i.CV_LIVE,action:r.CvLive.REMOVE_CLASSIFICATION_DASHBOARD,args:[e.classificationId,t]}),getNewDashboardAppLink:()=>({application:i.CV_LIVE,action:r.CvLive.NEW_CLASSIFICATION_DASHBOARD,args:[e.classificationId,e.presentationId,u.Classification]}),getCopyDashboardAppLink:e=>({application:i.CV_LIVE,action:r.CvLive.COPY_CLASSIFICATION_DASHBOARD,args:[e]}),onClickExportVideos:H,onClickExportSeriesVideos:V})]})}export{A as EditClassificationDashboardListView};
2
- //# sourceMappingURL=DA6Ynhan.chunk.js.map
1
+ import{a as e,i as t,ln as n}from"./rp704-Pm.chunk.js";import{t as r}from"./Di_u2uix.chunk.js";import{t as i}from"./BvMTtGLi.chunk.js";import"./CfCYHRuo.chunk.js";import{n as a}from"./CFoexGFe.chunk.js";import{t as o}from"./BVbA6fE6.chunk.js";import{n as s,t as c}from"./C-M2om56.chunk.js";import{t as l}from"./UCDGupVs.chunk.js";import{r as u}from"./BKtR2N4K.chunk.js";import{r as d}from"./DkstLT1W.chunk.js";import{d as f}from"./GpDEun8c2.chunk.js";import{n as p}from"./CbiGs3Tn.chunk.js";import{s as m,u as h}from"./Dgk5cBBe.chunk.js";import{t as g}from"./DpqbC5uX.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as _}from"./CVHQXNzi.chunk.js";import{n as v,t as y}from"./DyKk_C_Y.chunk.js";import"./BCfBk23W.chunk.js";import{t as b}from"./DjzD1n9W.chunk.js";import{t as x}from"./B_qCVJZp2.chunk.js";import{t as S}from"./CZyPFSXo.chunk.js";import{t as C}from"./JmL1DHFu.chunk.js";import{t as w}from"./DHD4nY6U.chunk.js";import{t as T}from"./D1EPU1_6.chunk.js";import{t as E}from"./BwKHls91.chunk.js";import{t as D}from"./CXsvYuSI.chunk.js";var O=n(e()),k=t();function A(e){let[t,n]=O.useState(!0),A=h(),j=m(S.presentation(e.presentationId)),M=m(l.currentUser()),N=m(S.classification(e.classificationId));function P(n){return T.dashboards({targetType:u.Classification,classificationId:e.classificationId},t,n)}function F(e){A(P(e))}let I=w(P,F),L=m(S.classificationMembers(e.classificationId,a.Tags)).data?.data?.find(e=>e.name===x.MOVIES_AND_TV),{hasPermissions:R}=b();function z(){return!!(R(d.TopicDashboardStatusUpdate)||L&&R(d.MoviesAndTvDashboardStatusUpdate))}async function B(e,t){let n=e.reduce((t,n,r)=>{let i=n.name;if(!i){let t=e[r-1];t&&t.templateId===v.Heading&&(i=t.name)}return n.data.objectIds?.forEach(e=>{t[e]=i}),n.data.playlistId&&(t[n.data.playlistId]=i),t},{}),r=Object.keys(n),i=g.chunk(r,25).map(e=>A(C.curationStudioExport(e))),a=g.flatten(await Promise.all(i)).reduce((e,t)=>{if(t.typeId===_.Playlist||t.typeId===_.Series){let r=t,i=n[t.id];return e.concat(r.videos?.data.map(e=>({video:e,heading:i}))||[])}return e.concat({video:t,heading:n[t.id]})},[]);D.exportDashboardReport(a,j.data.description,N.data.name,t)}async function V(e){return B(e.widgets.filter(e=>e.widgetId===y.CuratedSeries),e.name)}async function H(e){let t=[y.PlaylistMedia,y.CuratedMedia,y.ClassificationMedia,y.LatestReleasedVideos,y.ClassificationFeaturedVideo,y.ClassificationPinnedVideos];B(e.widgets.filter(e=>t.includes(e.widgetId)),e.name)}function U(e){return A(T.updateDashboard(e.id,e))}return!j.data||!M.data||!N.data?(0,k.jsx)(`div`,{className:`text-center py-3`,children:(0,k.jsx)(p,{as:`div`,animation:`border`,role:`status`})}):(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(f,{memberType:e.memberType,presentation:j.data,classificationId:e.classificationId,getTabs:(e,t,n)=>o.getEditClassificationTabs(i.CV_LIVE,e,t,n)}),(0,k.jsx)(E,{presentation:j.data,dashboards:I.items,onStatusChange:U,canPublish:z(),columns:s.getColumnSet(c.ClassificationDashboard),filterArchivedDashboards:t,setFilterArchivedDashboards:n,getEditDetailsAppLink:t=>({application:i.CV_LIVE,action:r.CvLive.EDIT_CLASSIFICATION_DASHBOARD,args:[e.classificationId,t]}),getDeleteAppLink:t=>({application:i.CV_LIVE,action:r.CvLive.REMOVE_CLASSIFICATION_DASHBOARD,args:[e.classificationId,t]}),getNewDashboardAppLink:()=>({application:i.CV_LIVE,action:r.CvLive.NEW_CLASSIFICATION_DASHBOARD,args:[e.classificationId,e.presentationId,u.Classification]}),getCopyDashboardAppLink:e=>({application:i.CV_LIVE,action:r.CvLive.COPY_CLASSIFICATION_DASHBOARD,args:[e]}),onClickExportVideos:H,onClickExportSeriesVideos:V})]})}export{A as EditClassificationDashboardListView};
2
+ //# sourceMappingURL=DtylOK55.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DA6Ynhan.chunk.js","names":[],"sources":["../../../../../src/apps/cv-live/views/edit-classification-dashboard-list/EditClassificationDashboardListView.tsx"],"sourcesContent":["import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { CurationTag } from 'libs/shared/enums/CurationTag';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useFetchAll } from 'libs/shared/hooks/UseFetchAll';\nimport { Classification, Clip, CuratedDashboard, CuratedWidget, CuratorUser, DashboardTargetType, Interactive, Playlist, Presentation, Series, TagCollection, Video, VideoTypes } from 'libs/shared/interfaces';\n\nimport { EditClassificationNav } from 'shared/components/classifications';\nimport { Actions, AppChannels } from 'shared/constants';\nimport { SubjectMemberType } from 'shared/enums';\nimport { CuratorPermissionName } from 'shared/enums/CuratorPermissionName';\nimport { DashboardRequests } from 'shared/flight-requests/DashboardRequests';\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\nimport { useCuratorPermissions } from 'shared/hooks';\nimport { TopicsNavHelper } from 'shared/utils';\nimport { DashboardHelper } from 'shared/utils/DashboardHelper';\nimport { DefinedColumnSet, MemberMatrixHelper } from 'shared/utils/MemberMatrixHelper';\n\nimport { DashboardTable } from 'apps/dashboard-editor/components/dashboard-table/DashboardTable';\nimport { VideoRequests } from 'apps/videos/flight-requests/CuratorVideoRequests';\n\ninterface EditClassificationDashboardListViewProps {\n presentationId: string;\n classificationId: string;\n memberType: SubjectMemberType;\n}\n\nexport function EditClassificationDashboardListView(\n props: EditClassificationDashboardListViewProps\n): JSX.Element {\n const [ filterArchivedDashboards, setFilterArchivedDashboards ] = React.useState(true);\n\n const fetchAsync = Flight.useGetFetchAsync();\n\n const presentation = Flight.useBasicFetch<Presentation>(\n SubjectRequests.presentation(props.presentationId)\n );\n\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n\n const classification = Flight.useBasicFetch<Classification>(SubjectRequests.classification(props.classificationId));\n\n function getRequest(cursor: string): Flight.Request {\n return DashboardRequests.dashboards({\n targetType: DashboardTargetType.Classification,\n classificationId: props.classificationId\n }, filterArchivedDashboards, cursor);\n }\n \n function fetchNext(cursor?: string): void {\n fetchAsync(getRequest(cursor));\n }\n\n const dashboards = useFetchAll<CuratedDashboard>(getRequest, fetchNext);\n\n const selectedCurationTags = Flight.useBasicFetch<TagCollection>(\n SubjectRequests.classificationMembers(\n props.classificationId,\n SubjectMemberType.Tags\n )\n );\n const hasMoviesAndTvCurationTag = selectedCurationTags.data?.data?.find(\n tag => tag.name === CurationTag.MOVIES_AND_TV\n );\n\n const { hasPermissions } = useCuratorPermissions();\n\n function canPublishDashboards(): boolean {\n if (hasPermissions(CuratorPermissionName.TopicDashboardStatusUpdate))\n return true;\n\n // Users who can update Movies + TV dashboards may published Movies + TV topics\n if (hasMoviesAndTvCurationTag && hasPermissions(CuratorPermissionName.MoviesAndTvDashboardStatusUpdate))\n return true;\n\n return false;\n }\n\n async function exportWidgetVideos(widgets: CuratedWidget[], dashboardName: string): Promise<void> {\n const objectIdHeadingMap = widgets.reduce((acc: any, widget, index) => {\n let heading = widget.name;\n\n // If they widget doesn't have it's own heading, check if the previous widget is a blurb heading and use that instead.\n if (!heading) {\n const prev = widgets[index - 1];\n\n if (prev && prev.templateId === WidgetTemplate.Heading)\n heading = prev.name;\n }\n\n widget.data.objectIds?.forEach(id => {\n acc[id] = heading;\n });\n\n if (widget.data.playlistId)\n acc[widget.data.playlistId] = heading;\n\n return acc;\n }, {});\n\n const objectIds = Object.keys(objectIdHeadingMap);\n const chunks = ArrayHelper.chunk<string>(objectIds, 25);\n\n const objectChunkRequests = chunks.map(chunk => fetchAsync<(Series | Playlist | Video | Clip | Interactive)[]>(\n VideoRequests.curationStudioExport(chunk)\n ));\n\n const flattened = ArrayHelper.flatten(await Promise.all(objectChunkRequests));\n\n const videos = flattened.reduce((acc, obj) => {\n if (obj.typeId === MasterType.Playlist || obj.typeId === MasterType.Series) {\n const playlist = obj as Playlist | Series;\n const heading = objectIdHeadingMap[obj.id];\n\n return acc.concat(playlist.videos?.data.map(v => ({ video: v, heading })) || []);\n }\n\n return acc.concat({ video: obj as VideoTypes, heading: objectIdHeadingMap[obj.id] });\n }, []);\n\n DashboardHelper.exportDashboardReport(\n videos,\n presentation.data.description,\n classification.data.name,\n dashboardName\n );\n }\n\n async function onClickExportSeriesVideos(dashboard: CuratedDashboard): Promise<void> {\n return exportWidgetVideos(dashboard.widgets.filter(w => w.widgetId === WidgetTypeId.CuratedSeries), dashboard.name);\n }\n\n async function onClickExportVideos(dashboard: CuratedDashboard): Promise<void> {\n const validWidgets = [\n WidgetTypeId.PlaylistMedia,\n WidgetTypeId.CuratedMedia,\n WidgetTypeId.ClassificationMedia,\n WidgetTypeId.LatestReleasedVideos,\n WidgetTypeId.ClassificationFeaturedVideo,\n WidgetTypeId.ClassificationPinnedVideos\n ];\n\n exportWidgetVideos(dashboard.widgets.filter(w => validWidgets.includes(w.widgetId)), dashboard.name);\n }\n\n function onStatusChange(updatedDashboard: CuratedDashboard): Promise<void> {\n return fetchAsync(DashboardRequests.updateDashboard(\n updatedDashboard.id,\n updatedDashboard\n ));\n }\n\n if (!presentation.data || !currentUser.data || !classification.data) {\n return <div className='text-center py-3'><Spinner as='div' animation='border' role='status' /></div>;\n }\n\n return (\n <>\n <EditClassificationNav\n memberType={props.memberType}\n presentation={presentation.data}\n classificationId={props.classificationId}\n getTabs={(presentationId: string, classificationId: string, hasPermissions) =>\n TopicsNavHelper.getEditClassificationTabs(\n AppChannels.CV_LIVE,\n presentationId,\n classificationId,\n hasPermissions\n )\n }\n />\n \n <DashboardTable\n presentation={presentation.data}\n dashboards={dashboards.items}\n onStatusChange={onStatusChange}\n canPublish={canPublishDashboards()}\n columns={MemberMatrixHelper.getColumnSet(DefinedColumnSet.ClassificationDashboard)}\n filterArchivedDashboards={filterArchivedDashboards}\n setFilterArchivedDashboards={setFilterArchivedDashboards}\n getEditDetailsAppLink={dashboardId => ({\n application: AppChannels.CV_LIVE,\n action: Actions.CvLive.EDIT_CLASSIFICATION_DASHBOARD,\n args: [ props.classificationId, dashboardId ]\n })}\n getDeleteAppLink={dashboardId => ({\n application: AppChannels.CV_LIVE,\n action: Actions.CvLive.REMOVE_CLASSIFICATION_DASHBOARD,\n args: [ props.classificationId, dashboardId ]\n })}\n getNewDashboardAppLink={() => ({\n application: AppChannels.CV_LIVE,\n action: Actions.CvLive.NEW_CLASSIFICATION_DASHBOARD,\n args: [ props.classificationId, props.presentationId, DashboardTargetType.Classification ]\n })}\n getCopyDashboardAppLink={dashboardId => ({\n application: AppChannels.CV_LIVE,\n action: Actions.CvLive.COPY_CLASSIFICATION_DASHBOARD,\n args: [dashboardId]\n })}\n onClickExportVideos={onClickExportVideos}\n onClickExportSeriesVideos={onClickExportSeriesVideos}\n />\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"DtylOK55.chunk.js","names":[],"sources":["../../../../../src/apps/cv-live/views/edit-classification-dashboard-list/EditClassificationDashboardListView.tsx"],"sourcesContent":["import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { CurationTag } from 'libs/shared/enums/CurationTag';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useFetchAll } from 'libs/shared/hooks/UseFetchAll';\nimport { Classification, Clip, CuratedDashboard, CuratedWidget, CuratorUser, DashboardTargetType, Interactive, Playlist, Presentation, Series, TagCollection, Video, VideoTypes } from 'libs/shared/interfaces';\n\nimport { EditClassificationNav } from 'shared/components/classifications';\nimport { Actions, AppChannels } from 'shared/constants';\nimport { SubjectMemberType } from 'shared/enums';\nimport { CuratorPermissionName } from 'shared/enums/CuratorPermissionName';\nimport { DashboardRequests } from 'shared/flight-requests/DashboardRequests';\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\nimport { useCuratorPermissions } from 'shared/hooks';\nimport { TopicsNavHelper } from 'shared/utils';\nimport { DashboardHelper } from 'shared/utils/DashboardHelper';\nimport { DefinedColumnSet, MemberMatrixHelper } from 'shared/utils/MemberMatrixHelper';\n\nimport { DashboardTable } from 'apps/dashboard-editor/components/dashboard-table/DashboardTable';\nimport { VideoRequests } from 'apps/videos/flight-requests/CuratorVideoRequests';\n\ninterface EditClassificationDashboardListViewProps {\n presentationId: string;\n classificationId: string;\n memberType: SubjectMemberType;\n}\n\nexport function EditClassificationDashboardListView(\n props: EditClassificationDashboardListViewProps\n): JSX.Element {\n const [ filterArchivedDashboards, setFilterArchivedDashboards ] = React.useState(true);\n\n const fetchAsync = Flight.useGetFetchAsync();\n\n const presentation = Flight.useBasicFetch<Presentation>(\n SubjectRequests.presentation(props.presentationId)\n );\n\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n\n const classification = Flight.useBasicFetch<Classification>(SubjectRequests.classification(props.classificationId));\n\n function getRequest(cursor: string): Flight.Request {\n return DashboardRequests.dashboards({\n targetType: DashboardTargetType.Classification,\n classificationId: props.classificationId\n }, filterArchivedDashboards, cursor);\n }\n \n function fetchNext(cursor?: string): void {\n fetchAsync(getRequest(cursor));\n }\n\n const dashboards = useFetchAll<CuratedDashboard>(getRequest, fetchNext);\n\n const selectedCurationTags = Flight.useBasicFetch<TagCollection>(\n SubjectRequests.classificationMembers(\n props.classificationId,\n SubjectMemberType.Tags\n )\n );\n const hasMoviesAndTvCurationTag = selectedCurationTags.data?.data?.find(\n tag => tag.name === CurationTag.MOVIES_AND_TV\n );\n\n const { hasPermissions } = useCuratorPermissions();\n\n function canPublishDashboards(): boolean {\n if (hasPermissions(CuratorPermissionName.TopicDashboardStatusUpdate))\n return true;\n\n // Users who can update Movies + TV dashboards may published Movies + TV topics\n if (hasMoviesAndTvCurationTag && hasPermissions(CuratorPermissionName.MoviesAndTvDashboardStatusUpdate))\n return true;\n\n return false;\n }\n\n async function exportWidgetVideos(widgets: CuratedWidget[], dashboardName: string): Promise<void> {\n const objectIdHeadingMap = widgets.reduce((acc: any, widget, index) => {\n let heading = widget.name;\n\n // If they widget doesn't have it's own heading, check if the previous widget is a blurb heading and use that instead.\n if (!heading) {\n const prev = widgets[index - 1];\n\n if (prev && prev.templateId === WidgetTemplate.Heading)\n heading = prev.name;\n }\n\n widget.data.objectIds?.forEach(id => {\n acc[id] = heading;\n });\n\n if (widget.data.playlistId)\n acc[widget.data.playlistId] = heading;\n\n return acc;\n }, {});\n\n const objectIds = Object.keys(objectIdHeadingMap);\n const chunks = ArrayHelper.chunk<string>(objectIds, 25);\n\n const objectChunkRequests = chunks.map(chunk => fetchAsync<(Series | Playlist | Video | Clip | Interactive)[]>(\n VideoRequests.curationStudioExport(chunk)\n ));\n\n const flattened = ArrayHelper.flatten(await Promise.all(objectChunkRequests));\n\n const videos = flattened.reduce((acc, obj) => {\n if (obj.typeId === MasterType.Playlist || obj.typeId === MasterType.Series) {\n const playlist = obj as Playlist | Series;\n const heading = objectIdHeadingMap[obj.id];\n\n return acc.concat(playlist.videos?.data.map(v => ({ video: v, heading })) || []);\n }\n\n return acc.concat({ video: obj as VideoTypes, heading: objectIdHeadingMap[obj.id] });\n }, []);\n\n DashboardHelper.exportDashboardReport(\n videos,\n presentation.data.description,\n classification.data.name,\n dashboardName\n );\n }\n\n async function onClickExportSeriesVideos(dashboard: CuratedDashboard): Promise<void> {\n return exportWidgetVideos(dashboard.widgets.filter(w => w.widgetId === WidgetTypeId.CuratedSeries), dashboard.name);\n }\n\n async function onClickExportVideos(dashboard: CuratedDashboard): Promise<void> {\n const validWidgets = [\n WidgetTypeId.PlaylistMedia,\n WidgetTypeId.CuratedMedia,\n WidgetTypeId.ClassificationMedia,\n WidgetTypeId.LatestReleasedVideos,\n WidgetTypeId.ClassificationFeaturedVideo,\n WidgetTypeId.ClassificationPinnedVideos\n ];\n\n exportWidgetVideos(dashboard.widgets.filter(w => validWidgets.includes(w.widgetId)), dashboard.name);\n }\n\n function onStatusChange(updatedDashboard: CuratedDashboard): Promise<void> {\n return fetchAsync(DashboardRequests.updateDashboard(\n updatedDashboard.id,\n updatedDashboard\n ));\n }\n\n if (!presentation.data || !currentUser.data || !classification.data) {\n return <div className='text-center py-3'><Spinner as='div' animation='border' role='status' /></div>;\n }\n\n return (\n <>\n <EditClassificationNav\n memberType={props.memberType}\n presentation={presentation.data}\n classificationId={props.classificationId}\n getTabs={(presentationId: string, classificationId: string, hasPermissions) =>\n TopicsNavHelper.getEditClassificationTabs(\n AppChannels.CV_LIVE,\n presentationId,\n classificationId,\n hasPermissions\n )\n }\n />\n \n <DashboardTable\n presentation={presentation.data}\n dashboards={dashboards.items}\n onStatusChange={onStatusChange}\n canPublish={canPublishDashboards()}\n columns={MemberMatrixHelper.getColumnSet(DefinedColumnSet.ClassificationDashboard)}\n filterArchivedDashboards={filterArchivedDashboards}\n setFilterArchivedDashboards={setFilterArchivedDashboards}\n getEditDetailsAppLink={dashboardId => ({\n application: AppChannels.CV_LIVE,\n action: Actions.CvLive.EDIT_CLASSIFICATION_DASHBOARD,\n args: [ props.classificationId, dashboardId ]\n })}\n getDeleteAppLink={dashboardId => ({\n application: AppChannels.CV_LIVE,\n action: Actions.CvLive.REMOVE_CLASSIFICATION_DASHBOARD,\n args: [ props.classificationId, dashboardId ]\n })}\n getNewDashboardAppLink={() => ({\n application: AppChannels.CV_LIVE,\n action: Actions.CvLive.NEW_CLASSIFICATION_DASHBOARD,\n args: [ props.classificationId, props.presentationId, DashboardTargetType.Classification ]\n })}\n getCopyDashboardAppLink={dashboardId => ({\n application: AppChannels.CV_LIVE,\n action: Actions.CvLive.COPY_CLASSIFICATION_DASHBOARD,\n args: [dashboardId]\n })}\n onClickExportVideos={onClickExportVideos}\n onClickExportSeriesVideos={onClickExportSeriesVideos}\n />\n </>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{a as e,i as t}from"./rp704-Pm.chunk.js";import{G as n}from"./C7Gmh7eY.chunk.js";import{t as r}from"./D-JsEiDq2.chunk.js";import{s as i,u as a}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as o}from"./Bwpvc7Th2.chunk.js";import{i as s}from"./DA0I3jYA.chunk.js";import{t as c}from"./dKyhMawf.chunk.js";import{t as l}from"./D0JviwKV2.chunk.js";import{n as u}from"./C4Ey4nzb2.chunk.js";import{t as d}from"./8Gpy2Hdm2.chunk.js";e();var f=t();function p(e){return(0,f.jsxs)(s,{children:[(0,f.jsx)(u,{name:`name`,id:`name`,placeholder:`e.g. Steven's Fave Ingestion Filter`,label:`Name`,showRequiredStar:!0}),(0,f.jsxs)(l,{children:[(0,f.jsx)(l.Cancel,{onClick:e.closePopup}),(0,f.jsx)(l.Submit,{variant:`dark`,text:`Save changes`})]})]})}function m(e){let t=a(),s=o(),l=i(n.getQuickFilters(e.stage)).data?.find(t=>t.id===e.id);function u({name:r}){t(n.updateQuickFilter({...l,name:r})).then(()=>s.success(`Successfully renamed quick filter: ${r}`)).catch(()=>s.error(`Failed to rename quick filter: ${r}. Please try again.`)).finally(e.closePopup)}return(0,f.jsx)(r,{title:`Edit view`,closePopup:e.closePopup,showLoadingSpinner:!l,backdrop:`static`,children:!!l&&(0,f.jsx)(c,{initialValues:{name:l.name},validationSchema:d,onSubmit:u,children:(0,f.jsx)(p,{closePopup:e.closePopup})})})}export{m as EditQuickFilterView};
2
- //# sourceMappingURL=CJBiVila2.chunk.js.map
1
+ import{a as e,i as t}from"./rp704-Pm.chunk.js";import{G as n}from"./DWHKdmdQ.chunk.js";import{t as r}from"./D-JsEiDq2.chunk.js";import{s as i,u as a}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as o}from"./Bwpvc7Th2.chunk.js";import{i as s}from"./DA0I3jYA.chunk.js";import{t as c}from"./dKyhMawf.chunk.js";import{t as l}from"./D0JviwKV2.chunk.js";import{n as u}from"./C4Ey4nzb2.chunk.js";import{t as d}from"./8Gpy2Hdm2.chunk.js";e();var f=t();function p(e){return(0,f.jsxs)(s,{children:[(0,f.jsx)(u,{name:`name`,id:`name`,placeholder:`e.g. Steven's Fave Ingestion Filter`,label:`Name`,showRequiredStar:!0}),(0,f.jsxs)(l,{children:[(0,f.jsx)(l.Cancel,{onClick:e.closePopup}),(0,f.jsx)(l.Submit,{variant:`dark`,text:`Save changes`})]})]})}function m(e){let t=a(),s=o(),l=i(n.getQuickFilters(e.stage)).data?.find(t=>t.id===e.id);function u({name:r}){t(n.updateQuickFilter({...l,name:r})).then(()=>s.success(`Successfully renamed quick filter: ${r}`)).catch(()=>s.error(`Failed to rename quick filter: ${r}. Please try again.`)).finally(e.closePopup)}return(0,f.jsx)(r,{title:`Edit view`,closePopup:e.closePopup,showLoadingSpinner:!l,backdrop:`static`,children:!!l&&(0,f.jsx)(c,{initialValues:{name:l.name},validationSchema:d,onSubmit:u,children:(0,f.jsx)(p,{closePopup:e.closePopup})})})}export{m as EditQuickFilterView};
2
+ //# sourceMappingURL=DuTcsFNo2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CJBiVila2.chunk.js","names":[],"sources":["../../../../../src/apps/assembly-line/views/edit-quick-filter/EditQuickFilterView.tsx"],"sourcesContent":["import React from 'react';\nimport { Form } from 'formik';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nimport { AssemblyLineRequests } from 'apps/assembly-line/flight-requests/AssemblyLineRequests';\nimport { AssemblyLineStage } from 'apps/assembly-line/interfaces/AssemblyLineStage';\nimport { QuickFilter } from 'apps/assembly-line/interfaces/responses/QuickFilter';\nimport { QuickFilterValidationSchema } from 'apps/assembly-line/validation/QuickFilterValidationSchema';\n\nfunction EditQuickFilterForm(props: PopupViewProps): JSX.Element {\n return (\n <Form>\n <FormField\n name='name'\n id='name'\n placeholder=\"e.g. Steven's Fave Ingestion Filter\"\n label='Name'\n showRequiredStar\n />\n\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.closePopup} />\n <PopupButtons.Submit variant='dark' text='Save changes' />\n </PopupButtons>\n </Form>\n );\n}\n\ninterface EditQuickFilterProps extends PopupViewProps {\n id: string;\n stage: AssemblyLineStage;\n}\n\nexport function EditQuickFilterView(props: EditQuickFilterProps): JSX.Element {\n const fetchAsync = Flight.useGetFetchAsync();\n const alerts = useAlerts();\n\n const quickFilters = Flight.useBasicFetch<QuickFilter[]>(AssemblyLineRequests.getQuickFilters(props.stage));\n const quickFilter = quickFilters.data?.find(qf => qf.id === props.id);\n\n function onSubmit({ name }: any): void {\n fetchAsync(AssemblyLineRequests.updateQuickFilter({\n ...quickFilter,\n name\n }))\n .then(() => alerts.success(`Successfully renamed quick filter: ${name}`))\n .catch(() => alerts.error(`Failed to rename quick filter: ${name}. Please try again.`))\n .finally(props.closePopup);\n }\n\n return (\n <Popup title='Edit view' closePopup={props.closePopup} showLoadingSpinner={!quickFilter} backdrop='static'>\n {!!quickFilter && (\n <FormWrapper\n initialValues={{ name: quickFilter.name }}\n validationSchema={QuickFilterValidationSchema}\n onSubmit={onSubmit}\n >\n <EditQuickFilterForm closePopup={props.closePopup} />\n </FormWrapper>\n )}\n </Popup>\n );\n}\n"],"mappings":"6cAiBA,SAAS,EAAoB,EAAoC,CAC/D,OACE,EAAA,EAAA,KAAA,CAAC,EAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,KAAK,OACL,GAAG,OACH,YAAY,sCACZ,MAAM,OACN,iBAAA,EACD,CAAA,GAED,EAAA,EAAA,KAAA,CAAC,EAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAa,OAAd,CAAqB,QAAS,EAAM,UAAa,CAAA,GACjD,EAAA,EAAA,IAAA,CAAC,EAAa,OAAd,CAAqB,QAAQ,OAAO,KAAK,cAAgB,CAAA,CAC7C,CAAA,CAAA,CACV,CAAA,CAAA,CAEV,CAOA,SAAgB,EAAoB,EAA0C,CAC5E,IAAM,EAAa,EAAwB,EACrC,EAAS,EAAU,EAGnB,EADe,EAAoC,EAAqB,gBAAgB,EAAM,KAAK,CACrF,CAAA,CAAa,MAAM,KAAK,GAAM,EAAG,KAAO,EAAM,EAAE,EAEpE,SAAS,EAAS,CAAE,QAAmB,CACrC,EAAW,EAAqB,kBAAkB,CAChD,GAAG,EACH,MACF,CAAC,CAAC,CAAC,CACA,SAAW,EAAO,QAAQ,sCAAsC,GAAM,CAAC,CAAC,CACxE,UAAY,EAAO,MAAM,kCAAkC,EAAK,oBAAoB,CAAC,CAAC,CACtF,QAAQ,EAAM,UAAU,CAC7B,CAEA,OACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAO,MAAM,YAAY,WAAY,EAAM,WAAY,mBAAoB,CAAC,EAAa,SAAS,kBAC/F,CAAC,CAAC,IACD,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,cAAe,CAAE,KAAM,EAAY,IAAK,EACxC,iBAAkB,EACR,qBAEV,EAAA,EAAA,IAAA,CAAC,EAAD,CAAqB,WAAY,EAAM,UAAa,CAAA,CACzC,CAAA,CAEV,CAAA,CAEX"}
1
+ {"version":3,"file":"DuTcsFNo2.chunk.js","names":[],"sources":["../../../../../src/apps/assembly-line/views/edit-quick-filter/EditQuickFilterView.tsx"],"sourcesContent":["import React from 'react';\nimport { Form } from 'formik';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nimport { AssemblyLineRequests } from 'apps/assembly-line/flight-requests/AssemblyLineRequests';\nimport { AssemblyLineStage } from 'apps/assembly-line/interfaces/AssemblyLineStage';\nimport { QuickFilter } from 'apps/assembly-line/interfaces/responses/QuickFilter';\nimport { QuickFilterValidationSchema } from 'apps/assembly-line/validation/QuickFilterValidationSchema';\n\nfunction EditQuickFilterForm(props: PopupViewProps): JSX.Element {\n return (\n <Form>\n <FormField\n name='name'\n id='name'\n placeholder=\"e.g. Steven's Fave Ingestion Filter\"\n label='Name'\n showRequiredStar\n />\n\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.closePopup} />\n <PopupButtons.Submit variant='dark' text='Save changes' />\n </PopupButtons>\n </Form>\n );\n}\n\ninterface EditQuickFilterProps extends PopupViewProps {\n id: string;\n stage: AssemblyLineStage;\n}\n\nexport function EditQuickFilterView(props: EditQuickFilterProps): JSX.Element {\n const fetchAsync = Flight.useGetFetchAsync();\n const alerts = useAlerts();\n\n const quickFilters = Flight.useBasicFetch<QuickFilter[]>(AssemblyLineRequests.getQuickFilters(props.stage));\n const quickFilter = quickFilters.data?.find(qf => qf.id === props.id);\n\n function onSubmit({ name }: any): void {\n fetchAsync(AssemblyLineRequests.updateQuickFilter({\n ...quickFilter,\n name\n }))\n .then(() => alerts.success(`Successfully renamed quick filter: ${name}`))\n .catch(() => alerts.error(`Failed to rename quick filter: ${name}. Please try again.`))\n .finally(props.closePopup);\n }\n\n return (\n <Popup title='Edit view' closePopup={props.closePopup} showLoadingSpinner={!quickFilter} backdrop='static'>\n {!!quickFilter && (\n <FormWrapper\n initialValues={{ name: quickFilter.name }}\n validationSchema={QuickFilterValidationSchema}\n onSubmit={onSubmit}\n >\n <EditQuickFilterForm closePopup={props.closePopup} />\n </FormWrapper>\n )}\n </Popup>\n );\n}\n"],"mappings":"6cAiBA,SAAS,EAAoB,EAAoC,CAC/D,OACE,EAAA,EAAA,KAAA,CAAC,EAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,KAAK,OACL,GAAG,OACH,YAAY,sCACZ,MAAM,OACN,iBAAA,EACD,CAAA,GAED,EAAA,EAAA,KAAA,CAAC,EAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAa,OAAd,CAAqB,QAAS,EAAM,UAAa,CAAA,GACjD,EAAA,EAAA,IAAA,CAAC,EAAa,OAAd,CAAqB,QAAQ,OAAO,KAAK,cAAgB,CAAA,CAC7C,CAAA,CAAA,CACV,CAAA,CAAA,CAEV,CAOA,SAAgB,EAAoB,EAA0C,CAC5E,IAAM,EAAa,EAAwB,EACrC,EAAS,EAAU,EAGnB,EADe,EAAoC,EAAqB,gBAAgB,EAAM,KAAK,CACrF,CAAA,CAAa,MAAM,KAAK,GAAM,EAAG,KAAO,EAAM,EAAE,EAEpE,SAAS,EAAS,CAAE,QAAmB,CACrC,EAAW,EAAqB,kBAAkB,CAChD,GAAG,EACH,MACF,CAAC,CAAC,CAAC,CACA,SAAW,EAAO,QAAQ,sCAAsC,GAAM,CAAC,CAAC,CACxE,UAAY,EAAO,MAAM,kCAAkC,EAAK,oBAAoB,CAAC,CAAC,CACtF,QAAQ,EAAM,UAAU,CAC7B,CAEA,OACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAO,MAAM,YAAY,WAAY,EAAM,WAAY,mBAAoB,CAAC,EAAa,SAAS,kBAC/F,CAAC,CAAC,IACD,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,cAAe,CAAE,KAAM,EAAY,IAAK,EACxC,iBAAkB,EACR,qBAEV,EAAA,EAAA,IAAA,CAAC,EAAD,CAAqB,WAAY,EAAM,UAAa,CAAA,CACzC,CAAA,CAEV,CAAA,CAEX"}
@@ -1,2 +1,2 @@
1
- import{a as e,i as t,ln as n}from"./rp704-Pm.chunk.js";import{t as r}from"./Di_u2uix.chunk.js";import"./CfCYHRuo.chunk.js";import{n as i}from"./CFoexGFe.chunk.js";import{t as a}from"./UCDGupVs.chunk.js";import{t as o}from"./cwPDEI372.chunk.js";import{y as s}from"./BhKv6dKl2.chunk.js";import{l as c,s as l}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as u}from"./CZyPFSXo.chunk.js";import{c as d}from"./_wZpe632.chunk.js";import{t as f}from"./BcPugoZV.chunk.js";import{t as p}from"./0KUhq7W7.chunk.js";var m=n(e()),h=t();function g(e){let t=c(),[n,g]=m.useState(),_=l(a.currentUser()),v=l(f.backboneAudience(e.clipId)),y=l(f.audiences(e.clipId)),b=l(u.member(e.clipId)),x=l(u.presentations(o.Subject)),S=l(f.backboneAudiences()),C=l(n?.id&&u.presentationAudiences(n.id));m.useEffect(()=>{!n&&x.data?.[0]?.id&&g(x.data[0])},[x.data?.[0]?.id]);function w(r,i){t(f.updateObjectAudiences(e.clipId,n.id,r,i,i))}function T(n,r,i){t(f.updateObjectLevels(e.clipId,n,r,i,i))}return(0,h.jsxs)(h.Fragment,{children:[!!_.data&&(0,h.jsx)(p,{clipId:e.clipId,activeAction:r.Clips.EDIT_CLIP_AUDIENCES,currentUser:_.data}),(0,h.jsx)(s,{object:b.data}),(0,h.jsx)(d,{objectLevels:v.data,objectAudiences:y.data,presentations:x.data,currentPresentation:n,setCurrentPresentation:g,levels:S.data,presentationAudiences:C.data,memberType:i.Clips,saveAudiences:w,saveLevels:T})]})}export{g as EditClipAudiencesView};
2
- //# sourceMappingURL=BBFS0f7w.chunk.js.map
1
+ import{a as e,i as t,ln as n}from"./rp704-Pm.chunk.js";import{t as r}from"./Di_u2uix.chunk.js";import"./CfCYHRuo.chunk.js";import{n as i}from"./CFoexGFe.chunk.js";import{t as a}from"./UCDGupVs.chunk.js";import{t as o}from"./cwPDEI372.chunk.js";import{y as s}from"./GpDEun8c2.chunk.js";import{l as c,s as l}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as u}from"./CZyPFSXo.chunk.js";import{c as d}from"./BFPSIGJg.chunk.js";import{t as f}from"./BcPugoZV.chunk.js";import{t as p}from"./DnZGILQc.chunk.js";var m=n(e()),h=t();function g(e){let t=c(),[n,g]=m.useState(),_=l(a.currentUser()),v=l(f.backboneAudience(e.clipId)),y=l(f.audiences(e.clipId)),b=l(u.member(e.clipId)),x=l(u.presentations(o.Subject)),S=l(f.backboneAudiences()),C=l(n?.id&&u.presentationAudiences(n.id));m.useEffect(()=>{!n&&x.data?.[0]?.id&&g(x.data[0])},[x.data?.[0]?.id]);function w(r,i){t(f.updateObjectAudiences(e.clipId,n.id,r,i,i))}function T(n,r,i){t(f.updateObjectLevels(e.clipId,n,r,i,i))}return(0,h.jsxs)(h.Fragment,{children:[!!_.data&&(0,h.jsx)(p,{clipId:e.clipId,activeAction:r.Clips.EDIT_CLIP_AUDIENCES,currentUser:_.data}),(0,h.jsx)(s,{object:b.data}),(0,h.jsx)(d,{objectLevels:v.data,objectAudiences:y.data,presentations:x.data,currentPresentation:n,setCurrentPresentation:g,levels:S.data,presentationAudiences:C.data,memberType:i.Clips,saveAudiences:w,saveLevels:T})]})}export{g as EditClipAudiencesView};
2
+ //# sourceMappingURL=Dw0mo6Cf.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BBFS0f7w.chunk.js","names":[],"sources":["../../../../../src/apps/clips/views/edit-clip-audiences/EditClipAudiencesView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { CuratorUser, Presentation, PresentationAudience } from 'libs/shared/interfaces';\n\nimport { ObjectHeader } from 'shared/components';\nimport { Actions } from 'shared/constants';\nimport { SubjectMemberType } from 'shared/enums';\nimport { AudienceRequests } from 'shared/flight-requests/AudienceRequests';\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\nimport { Level } from 'shared/interfaces';\n\nimport { EditClipNav } from 'apps/clips/components/edit-clip-nav/EditClipNav';\nimport { EditObjectAudiences } from 'apps/subjects/components';\n\ninterface EditClipAudiencesViewProps {\n clipId: string;\n}\n\nexport function EditClipAudiencesView(props: EditClipAudiencesViewProps): JSX.Element {\n const fetch = Flight.useGetFetch();\n\n const [ currentPresentation, setCurrentPresentation ] = React.useState<Presentation>();\n\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n const backboneAudiences = Flight.useBasicFetch<Level[]>(AudienceRequests.backboneAudience(props.clipId));\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(AudienceRequests.audiences(props.clipId));\n const clip = Flight.useBasicFetch(SubjectRequests.member(props.clipId));\n const presentations = Flight.useBasicFetch<Presentation[]>(SubjectRequests.presentations(PresentationType.Subject));\n const levels = Flight.useBasicFetch<PresentationAudience[]>(AudienceRequests.backboneAudiences());\n const presentationAudiences = Flight.useBasicFetch<PresentationAudience[]>(\n currentPresentation?.id && SubjectRequests.presentationAudiences(currentPresentation.id)\n );\n \n React.useEffect(() => {\n if (!currentPresentation && presentations.data?.[0]?.id)\n setCurrentPresentation(presentations.data[0]);\n }, [presentations.data?.[0]?.id]);\n\n function onSaveAudiences(audienceIds: string[], onDone: () => void) {\n fetch(AudienceRequests.updateObjectAudiences(\n props.clipId,\n currentPresentation.id,\n audienceIds,\n onDone,\n onDone\n ));\n }\n\n function onSaveLevels(backboneAudienceIds: string[], addToAudiences: boolean, onDone: () => void) {\n fetch(AudienceRequests.updateObjectLevels(\n props.clipId,\n backboneAudienceIds,\n addToAudiences,\n onDone,\n onDone\n ));\n }\n\n return (\n <>\n {!!currentUser.data &&\n <EditClipNav\n clipId={props.clipId}\n activeAction={Actions.Clips.EDIT_CLIP_AUDIENCES}\n currentUser={currentUser.data}\n />\n }\n <ObjectHeader object={clip.data} />\n <EditObjectAudiences\n objectLevels={backboneAudiences.data}\n objectAudiences={audiences.data}\n presentations={presentations.data}\n currentPresentation={currentPresentation}\n setCurrentPresentation={setCurrentPresentation}\n levels={levels.data}\n presentationAudiences={presentationAudiences.data}\n memberType={SubjectMemberType.Clips}\n saveAudiences={onSaveAudiences}\n saveLevels={onSaveLevels}\n />\n </>\n );\n}\n"],"mappings":"2hBAsBA,SAAgB,EAAsB,EAAgD,CACpF,IAAM,EAAQ,EAAmB,EAE3B,CAAE,EAAqB,GAAA,EAAiC,SAAuB,EAE/E,EAAc,EAAkC,EAAa,YAAY,CAAC,EAC1E,EAAoB,EAA8B,EAAiB,iBAAiB,EAAM,MAAM,CAAC,EACjG,EAAY,EAA6C,EAAiB,UAAU,EAAM,MAAM,CAAC,EACjG,EAAO,EAAqB,EAAgB,OAAO,EAAM,MAAM,CAAC,EAChE,EAAgB,EAAqC,EAAgB,cAAc,EAAiB,OAAO,CAAC,EAC5G,EAAS,EAA6C,EAAiB,kBAAkB,CAAC,EAC1F,EAAwB,EAC5B,GAAqB,IAAM,EAAgB,sBAAsB,EAAoB,EAAE,CACzF,EAEA,EAAM,cAAgB,CAChB,CAAC,GAAuB,EAAc,OAAO,EAAE,EAAE,IACnD,EAAuB,EAAc,KAAK,EAAE,CAChD,EAAG,CAAC,EAAc,OAAO,EAAE,EAAE,EAAE,CAAC,EAEhC,SAAS,EAAgB,EAAuB,EAAoB,CAClE,EAAM,EAAiB,sBACrB,EAAM,OACN,EAAoB,GACpB,EACA,EACA,CACF,CAAC,CACH,CAEA,SAAS,EAAa,EAA+B,EAAyB,EAAoB,CAChG,EAAM,EAAiB,mBACrB,EAAM,OACN,EACA,EACA,EACA,CACF,CAAC,CACH,CAEA,OACE,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,CACG,CAAC,CAAC,EAAY,OACb,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,OAAQ,EAAM,OACd,aAAc,EAAQ,MAAM,oBAC5B,YAAa,EAAY,IAC1B,CAAA,GAEH,EAAA,EAAA,IAAA,CAAC,EAAD,CAAc,OAAQ,EAAK,IAAO,CAAA,GAClC,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,aAAc,EAAkB,KAChC,gBAAiB,EAAU,KAC3B,cAAe,EAAc,KACR,sBACG,yBACxB,OAAQ,EAAO,KACf,sBAAuB,EAAsB,KAC7C,WAAY,EAAkB,MAC9B,cAAe,EACf,WAAY,CACb,CAAA,CACD,CAAA,CAAA,CAEN"}
1
+ {"version":3,"file":"Dw0mo6Cf.chunk.js","names":[],"sources":["../../../../../src/apps/clips/views/edit-clip-audiences/EditClipAudiencesView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { CuratorUser, Presentation, PresentationAudience } from 'libs/shared/interfaces';\n\nimport { ObjectHeader } from 'shared/components';\nimport { Actions } from 'shared/constants';\nimport { SubjectMemberType } from 'shared/enums';\nimport { AudienceRequests } from 'shared/flight-requests/AudienceRequests';\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\nimport { Level } from 'shared/interfaces';\n\nimport { EditClipNav } from 'apps/clips/components/edit-clip-nav/EditClipNav';\nimport { EditObjectAudiences } from 'apps/subjects/components';\n\ninterface EditClipAudiencesViewProps {\n clipId: string;\n}\n\nexport function EditClipAudiencesView(props: EditClipAudiencesViewProps): JSX.Element {\n const fetch = Flight.useGetFetch();\n\n const [ currentPresentation, setCurrentPresentation ] = React.useState<Presentation>();\n\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n const backboneAudiences = Flight.useBasicFetch<Level[]>(AudienceRequests.backboneAudience(props.clipId));\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(AudienceRequests.audiences(props.clipId));\n const clip = Flight.useBasicFetch(SubjectRequests.member(props.clipId));\n const presentations = Flight.useBasicFetch<Presentation[]>(SubjectRequests.presentations(PresentationType.Subject));\n const levels = Flight.useBasicFetch<PresentationAudience[]>(AudienceRequests.backboneAudiences());\n const presentationAudiences = Flight.useBasicFetch<PresentationAudience[]>(\n currentPresentation?.id && SubjectRequests.presentationAudiences(currentPresentation.id)\n );\n \n React.useEffect(() => {\n if (!currentPresentation && presentations.data?.[0]?.id)\n setCurrentPresentation(presentations.data[0]);\n }, [presentations.data?.[0]?.id]);\n\n function onSaveAudiences(audienceIds: string[], onDone: () => void) {\n fetch(AudienceRequests.updateObjectAudiences(\n props.clipId,\n currentPresentation.id,\n audienceIds,\n onDone,\n onDone\n ));\n }\n\n function onSaveLevels(backboneAudienceIds: string[], addToAudiences: boolean, onDone: () => void) {\n fetch(AudienceRequests.updateObjectLevels(\n props.clipId,\n backboneAudienceIds,\n addToAudiences,\n onDone,\n onDone\n ));\n }\n\n return (\n <>\n {!!currentUser.data &&\n <EditClipNav\n clipId={props.clipId}\n activeAction={Actions.Clips.EDIT_CLIP_AUDIENCES}\n currentUser={currentUser.data}\n />\n }\n <ObjectHeader object={clip.data} />\n <EditObjectAudiences\n objectLevels={backboneAudiences.data}\n objectAudiences={audiences.data}\n presentations={presentations.data}\n currentPresentation={currentPresentation}\n setCurrentPresentation={setCurrentPresentation}\n levels={levels.data}\n presentationAudiences={presentationAudiences.data}\n memberType={SubjectMemberType.Clips}\n saveAudiences={onSaveAudiences}\n saveLevels={onSaveLevels}\n />\n </>\n );\n}\n"],"mappings":"2hBAsBA,SAAgB,EAAsB,EAAgD,CACpF,IAAM,EAAQ,EAAmB,EAE3B,CAAE,EAAqB,GAAA,EAAiC,SAAuB,EAE/E,EAAc,EAAkC,EAAa,YAAY,CAAC,EAC1E,EAAoB,EAA8B,EAAiB,iBAAiB,EAAM,MAAM,CAAC,EACjG,EAAY,EAA6C,EAAiB,UAAU,EAAM,MAAM,CAAC,EACjG,EAAO,EAAqB,EAAgB,OAAO,EAAM,MAAM,CAAC,EAChE,EAAgB,EAAqC,EAAgB,cAAc,EAAiB,OAAO,CAAC,EAC5G,EAAS,EAA6C,EAAiB,kBAAkB,CAAC,EAC1F,EAAwB,EAC5B,GAAqB,IAAM,EAAgB,sBAAsB,EAAoB,EAAE,CACzF,EAEA,EAAM,cAAgB,CAChB,CAAC,GAAuB,EAAc,OAAO,EAAE,EAAE,IACnD,EAAuB,EAAc,KAAK,EAAE,CAChD,EAAG,CAAC,EAAc,OAAO,EAAE,EAAE,EAAE,CAAC,EAEhC,SAAS,EAAgB,EAAuB,EAAoB,CAClE,EAAM,EAAiB,sBACrB,EAAM,OACN,EAAoB,GACpB,EACA,EACA,CACF,CAAC,CACH,CAEA,SAAS,EAAa,EAA+B,EAAyB,EAAoB,CAChG,EAAM,EAAiB,mBACrB,EAAM,OACN,EACA,EACA,EACA,CACF,CAAC,CACH,CAEA,OACE,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,CACG,CAAC,CAAC,EAAY,OACb,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,OAAQ,EAAM,OACd,aAAc,EAAQ,MAAM,oBAC5B,YAAa,EAAY,IAC1B,CAAA,GAEH,EAAA,EAAA,IAAA,CAAC,EAAD,CAAc,OAAQ,EAAK,IAAO,CAAA,GAClC,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,aAAc,EAAkB,KAChC,gBAAiB,EAAU,KAC3B,cAAe,EAAc,KACR,sBACG,yBACxB,OAAQ,EAAO,KACf,sBAAuB,EAAsB,KAC7C,WAAY,EAAkB,MAC9B,cAAe,EACf,WAAY,CACb,CAAA,CACD,CAAA,CAAA,CAEN"}
@@ -1,2 +1,2 @@
1
- import{a as e,i as t,ln as n}from"./rp704-Pm.chunk.js";import{t as r}from"./Di_u2uix.chunk.js";import{t as i}from"./BvMTtGLi.chunk.js";import{t as a}from"./CfCYHRuo.chunk.js";import{n as o,r as s,t as c}from"./DBUreHJA.chunk.js";import{t as l}from"./UCDGupVs.chunk.js";import{G as u}from"./C7Gmh7eY.chunk.js";import{y as d}from"./BhKv6dKl2.chunk.js";import{t as f}from"./DrMTnrkG2.chunk.js";import{n as p}from"./CbiGs3Tn.chunk.js";import{s as m}from"./Dgk5cBBe.chunk.js";import{t as h}from"./DpqbC5uX.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as g}from"./JmL1DHFu.chunk.js";import{t as _}from"./BbpfuEhR.chunk.js";import{t as v}from"./mStmtFRo.chunk.js";import"./DrBVabtm.chunk.js";var y=n(e()),b=t();function x(e){let t=e.dashboards.map(t=>({...t,presentationDescription:t.presentation.id&&e.presentations.find(e=>e.id===t.presentation.id)?.description||``})),n=o.getColumnSet(c.VideoCuratedTopics),r=y.useMemo(()=>s({columns:n,columnData:e.columnData}),[e.columnData]);return(0,b.jsx)(b.Fragment,{children:e.dashboards.length?(0,b.jsx)(_,{theme:a,columns:r,data:t}):(0,b.jsx)(`p`,{className:`py-3`,children:(0,b.jsx)(`em`,{children:`This video is not used in any dashboard`})})})}function S(e){let[t,n]=y.useState(null),a=m(g.video(e.videoId)),o=m(l.currentUser()),s=m(u.getVideoDashboardsDetails(e.videoId,t?.id)),c=h.uniq(s.data?.map(e=>e.presentation),e=>e.id);function _(e){return[{label:`Open curated topic`,openInNewTab:!0,appLink:{application:i.DASHBOARD_EDITOR,action:r.DashboardEditor.EDIT_DASHBOARD,args:[e.id]}},{label:`Open classification details`,openInNewTab:!0,appLink:{application:i.SUBJECTS,action:r.Subjects.EDIT_CLASSIFICATION,args:[e.presentation.id,e.classificationId]}}]}let S={actions:_},C=!s.hasCompleted;return(0,b.jsxs)(b.Fragment,{children:[!!o.data&&(0,b.jsx)(v,{videoId:e.videoId,activeAction:r.Videos.EDIT_VIDEO_CURATED_TOPICS,currentUser:o.data}),a.data&&(0,b.jsx)(d,{object:a.data}),(0,b.jsx)(`p`,{children:`View all the curated topics this video is in.`}),(0,b.jsxs)(`div`,{className:`d-flex align-items-center`,children:[(0,b.jsx)(`p`,{className:`me-2`,children:`Filter by presentation:`}),(0,b.jsxs)(f,{children:[(0,b.jsx)(f.Toggle,{id:`presentation-filter`,variant:`outline-dark`,className:`mb-3`,disabled:C,children:t?.description||`All Presentations`}),(0,b.jsxs)(f.Menu,{children:[(0,b.jsx)(f.Item,{onClick:()=>n(null),active:t===null,children:`All Presentations`}),c?.map(e=>e?(0,b.jsx)(f.Item,{onClick:()=>n(e),active:t?.id===e.id,children:e.description},e.id):null)]})]})]}),(0,b.jsx)(`div`,{className:`pb-3 my-3`,children:C?(0,b.jsx)(`div`,{children:(0,b.jsx)(p,{as:`div`,size:`sm`,animation:`border`,role:`status`})}):(0,b.jsx)(x,{dashboards:s.data||[],columnData:S,videoId:e.videoId,presentations:c})})]})}export{S as EditVideoCuratedTopicsView};
2
- //# sourceMappingURL=Cg5KHpRA.chunk.js.map
1
+ import{a as e,i as t,ln as n}from"./rp704-Pm.chunk.js";import{t as r}from"./Di_u2uix.chunk.js";import{t as i}from"./BvMTtGLi.chunk.js";import{t as a}from"./CfCYHRuo.chunk.js";import{n as o,r as s,t as c}from"./C-M2om56.chunk.js";import{t as l}from"./UCDGupVs.chunk.js";import{G as u}from"./DWHKdmdQ.chunk.js";import{y as d}from"./GpDEun8c2.chunk.js";import{t as f}from"./DrMTnrkG2.chunk.js";import{n as p}from"./CbiGs3Tn.chunk.js";import{s as m}from"./Dgk5cBBe.chunk.js";import{t as h}from"./DpqbC5uX.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as g}from"./JmL1DHFu.chunk.js";import{t as _}from"./BbpfuEhR.chunk.js";import{t as v}from"./BT-jeT7C.chunk.js";import"./B1pBJzjh.chunk.js";var y=n(e()),b=t();function x(e){let t=e.dashboards.map(t=>({...t,presentationDescription:t.presentation.id&&e.presentations.find(e=>e.id===t.presentation.id)?.description||``})),n=o.getColumnSet(c.VideoCuratedTopics),r=y.useMemo(()=>s({columns:n,columnData:e.columnData}),[e.columnData]);return(0,b.jsx)(b.Fragment,{children:e.dashboards.length?(0,b.jsx)(_,{theme:a,columns:r,data:t}):(0,b.jsx)(`p`,{className:`py-3`,children:(0,b.jsx)(`em`,{children:`This video is not used in any dashboard`})})})}function S(e){let[t,n]=y.useState(null),a=m(g.video(e.videoId)),o=m(l.currentUser()),s=m(u.getVideoDashboardsDetails(e.videoId,t?.id)),c=h.uniq(s.data?.map(e=>e.presentation),e=>e.id);function _(e){return[{label:`Open curated topic`,openInNewTab:!0,appLink:{application:i.DASHBOARD_EDITOR,action:r.DashboardEditor.EDIT_DASHBOARD,args:[e.id]}},{label:`Open classification details`,openInNewTab:!0,appLink:{application:i.SUBJECTS,action:r.Subjects.EDIT_CLASSIFICATION,args:[e.presentation.id,e.classificationId]}}]}let S={actions:_},C=!s.hasCompleted;return(0,b.jsxs)(b.Fragment,{children:[!!o.data&&(0,b.jsx)(v,{videoId:e.videoId,activeAction:r.Videos.EDIT_VIDEO_CURATED_TOPICS,currentUser:o.data}),a.data&&(0,b.jsx)(d,{object:a.data}),(0,b.jsx)(`p`,{children:`View all the curated topics this video is in.`}),(0,b.jsxs)(`div`,{className:`d-flex align-items-center`,children:[(0,b.jsx)(`p`,{className:`me-2`,children:`Filter by presentation:`}),(0,b.jsxs)(f,{children:[(0,b.jsx)(f.Toggle,{id:`presentation-filter`,variant:`outline-dark`,className:`mb-3`,disabled:C,children:t?.description||`All Presentations`}),(0,b.jsxs)(f.Menu,{children:[(0,b.jsx)(f.Item,{onClick:()=>n(null),active:t===null,children:`All Presentations`}),c?.map(e=>e?(0,b.jsx)(f.Item,{onClick:()=>n(e),active:t?.id===e.id,children:e.description},e.id):null)]})]})]}),(0,b.jsx)(`div`,{className:`pb-3 my-3`,children:C?(0,b.jsx)(`div`,{children:(0,b.jsx)(p,{as:`div`,size:`sm`,animation:`border`,role:`status`})}):(0,b.jsx)(x,{dashboards:s.data||[],columnData:S,videoId:e.videoId,presentations:c})})]})}export{S as EditVideoCuratedTopicsView};
2
+ //# sourceMappingURL=DwISzabN.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Cg5KHpRA.chunk.js","names":[],"sources":["../../../../../src/shared/components/classifications/video-curated-topics-list/VideoCuratedTopicsList.tsx","../../../../../src/apps/videos/views/edit-video-curated-topics/EditVideoCuratedTopicsView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Table } from 'libs/shared/components/table/Table';\nimport { 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 { DefinedColumnSet, MemberMatrixHelper } from 'shared/utils/MemberMatrixHelper';\n\nimport { VideoCuratedTopics } from 'apps/assembly-line/interfaces/responses/VideoCuratedTopics';\n\ninterface VideoCuratedTopicsListProps {\n videoId: string;\n dashboards: VideoCuratedTopics[];\n columnData: ColumnData;\n presentations: Presentation[];\n}\n\nexport function VideoCuratedTopicsList(props: VideoCuratedTopicsListProps): JSX.Element {\n const members: VideoCuratedTopics[] = props.dashboards.map(d => {\n return {\n ...d,\n presentationDescription: d.presentation.id && props.presentations.find(p => p.id === d.presentation.id)?.description || ''\n };\n });\n\n const columns = MemberMatrixHelper.getColumnSet(DefinedColumnSet['VideoCuratedTopics']);\n\n const fullColumns = React.useMemo(() => BuildColumns({\n columns: columns,\n columnData: props.columnData\n }), [props.columnData]);\n\n return (\n <>\n { !props.dashboards.length ? (\n <p className='py-3'><em>This video is not used in any dashboard</em></p>\n ) : (\n <Table<MatrixMember>\n theme={CuratorTableTheme}\n columns={fullColumns}\n data={members}\n />\n )}\n </>\n );\n}\n","import React from 'react';\nimport { Dropdown, Spinner } from 'react-bootstrap';\n\nimport { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { CuratorUser, Presentation } from 'libs/shared/interfaces';\n\nimport { ColumnData, ObjectHeader } from 'shared/components';\nimport { VideoCuratedTopicsList } from 'shared/components/classifications/video-curated-topics-list/VideoCuratedTopicsList';\nimport { Actions, AppChannels } from 'shared/constants';\n\nimport { AssemblyLineRequests } from 'apps/assembly-line/flight-requests/AssemblyLineRequests';\nimport { VideoCuratedTopics } from 'apps/assembly-line/interfaces/responses/VideoCuratedTopics';\nimport { EditVideoNav } from 'apps/videos/components/edit-video-nav';\nimport { VideoRequests } from 'apps/videos/flight-requests/CuratorVideoRequests';\n\ninterface EditVideoCuratedTopicsViewProps {\n videoId: string;\n}\n\nexport function EditVideoCuratedTopicsView(props: EditVideoCuratedTopicsViewProps) {\n const [ filterPresentation, setFilterPresentation ] = React.useState<Presentation | null>(null);\n\n const video = Flight.useBasicFetch(VideoRequests.video(props.videoId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n const dashboards = Flight.useBasicFetch<VideoCuratedTopics[]>(\n AssemblyLineRequests.getVideoDashboardsDetails(props.videoId, filterPresentation?.id)\n );\n\n const presentations = ArrayHelper.uniq(dashboards.data?.map(d => d.presentation), p => p.id);\n\n function curatedTopicsActions(dashboard: VideoCuratedTopics): ActionOptions[] {\n return [{\n label: 'Open curated topic',\n openInNewTab: true,\n appLink: {\n application: AppChannels.DASHBOARD_EDITOR,\n action: Actions.DashboardEditor.EDIT_DASHBOARD,\n args: [dashboard.id]\n }\n }, {\n label: 'Open classification details',\n openInNewTab: true,\n appLink: {\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.EDIT_CLASSIFICATION,\n args: [ dashboard.presentation.id, dashboard.classificationId ]\n }\n }];\n }\n\n const curatedTopicsColumnData: ColumnData = {\n actions: curatedTopicsActions\n };\n\n const isLoadingDashboard = !dashboards.hasCompleted;\n\n return (\n <>\n {!!currentUser.data && (\n <EditVideoNav\n videoId={props.videoId}\n activeAction={Actions.Videos.EDIT_VIDEO_CURATED_TOPICS}\n currentUser={currentUser.data}\n />\n )}\n {video.data && <ObjectHeader object={video.data} />}\n\n <p>View all the curated topics this video is in.</p>\n\n <div className='d-flex align-items-center'>\n <p className='me-2'>Filter by presentation:</p>\n <Dropdown>\n <Dropdown.Toggle\n id='presentation-filter'\n variant='outline-dark'\n className='mb-3'\n disabled={isLoadingDashboard}\n >\n {filterPresentation?.description || 'All Presentations'}\n </Dropdown.Toggle>\n <Dropdown.Menu>\n <Dropdown.Item\n onClick={() => setFilterPresentation(null)}\n active={filterPresentation === null}\n >\n All Presentations\n </Dropdown.Item>\n {presentations?.map(presentation => {\n if (!presentation) return null;\n return (\n <Dropdown.Item\n key={presentation.id}\n onClick={() => setFilterPresentation(presentation)}\n active={filterPresentation?.id === presentation.id}\n >\n {presentation.description}\n </Dropdown.Item>\n );\n })}\n </Dropdown.Menu>\n </Dropdown>\n </div>\n\n <div className='pb-3 my-3'>\n {isLoadingDashboard ? (\n <div>\n <Spinner as='div' size='sm' animation='border' role='status' />\n </div>\n ) : (\n <VideoCuratedTopicsList\n dashboards={dashboards.data || []}\n columnData={curatedTopicsColumnData}\n videoId={props.videoId}\n presentations={presentations}\n />\n )}\n </div>\n </>\n );\n}\n"],"mappings":"ksBAmBA,SAAgB,EAAuB,EAAiD,CACtF,IAAM,EAAgC,EAAM,WAAW,IAAI,IAClD,CACL,GAAG,EACH,wBAAyB,EAAE,aAAa,IAAM,EAAM,cAAc,KAAK,GAAK,EAAE,KAAO,EAAE,aAAa,EAAE,CAAC,EAAE,aAAe,EAC1H,EACD,EAEK,EAAU,EAAmB,aAAa,EAAiB,kBAAqB,EAEhF,EAAA,EAAoB,YAAc,EAAa,CAC1C,UACT,WAAY,EAAM,UACpB,CAAC,EAAG,CAAC,EAAM,UAAU,CAAC,EAEtB,OACE,EAAA,EAAA,IAAA,CAAA,EAAA,SAAA,CAAA,SACK,EAAM,WAAW,QAGlB,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,MAAO,EACP,QAAS,EACT,KAAM,CACP,CAAA,GAND,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAU,iBAAO,EAAA,EAAA,IAAA,CAAC,KAAD,CAAA,SAAI,yCAA2C,CAAA,CAAI,CAAA,CAQzE,CAAA,CAEN,CCxBA,SAAgB,EAA2B,EAAwC,CACjF,GAAM,CAAE,EAAoB,GAAA,EAAgC,SAA8B,IAAI,EAExF,EAAQ,EAAqB,EAAc,MAAM,EAAM,OAAO,CAAC,EAC/D,EAAc,EAAkC,EAAa,YAAY,CAAC,EAC1E,EAAa,EACjB,EAAqB,0BAA0B,EAAM,QAAS,GAAoB,EAAE,CACtF,EAEM,EAAgB,EAAY,KAAK,EAAW,MAAM,IAAI,GAAK,EAAE,YAAY,EAAG,GAAK,EAAE,EAAE,EAE3F,SAAS,EAAqB,EAAgD,CAC5E,MAAO,CAAC,CACN,MAAO,qBACP,aAAc,GACd,QAAS,CACP,YAAa,EAAY,iBACzB,OAAQ,EAAQ,gBAAgB,eAChC,KAAM,CAAC,EAAU,EAAE,CACrB,CACF,EAAG,CACD,MAAO,8BACP,aAAc,GACd,QAAS,CACP,YAAa,EAAY,SACzB,OAAQ,EAAQ,SAAS,oBACzB,KAAM,CAAE,EAAU,aAAa,GAAI,EAAU,gBAAiB,CAChE,CACF,CAAC,CACH,CAEA,IAAM,EAAsC,CAC1C,QAAS,CACX,EAEM,EAAqB,CAAC,EAAW,aAEvC,OACE,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,CACG,CAAC,CAAC,EAAY,OACb,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,QAAS,EAAM,QACf,aAAc,EAAQ,OAAO,0BAC7B,YAAa,EAAY,IAC1B,CAAA,EAEF,EAAM,OAAQ,EAAA,EAAA,IAAA,CAAC,EAAD,CAAc,OAAQ,EAAM,IAAO,CAAA,GAElD,EAAA,EAAA,IAAA,CAAC,IAAD,CAAA,SAAG,+CAAgD,CAAA,GAEnD,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,qCAAf,EACE,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAU,gBAAO,yBAA0B,CAAA,GAC9C,EAAA,EAAA,KAAA,CAAC,EAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAS,OAAV,CACE,GAAG,sBACH,QAAQ,eACR,UAAU,OACV,SAAU,WAET,GAAoB,aAAe,mBACrB,CAAA,GACjB,EAAA,EAAA,KAAA,CAAC,EAAS,KAAV,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAS,KAAV,CACE,YAAe,EAAsB,IAAI,EACzC,OAAQ,IAAuB,cAChC,mBAEc,CAAA,EACd,GAAe,IAAI,GACb,GAEH,EAAA,EAAA,IAAA,CAAC,EAAS,KAAV,CAEE,YAAe,EAAsB,CAAY,EACjD,OAAQ,GAAoB,KAAO,EAAa,YAE/C,EAAa,WACD,EALR,EAAa,EAKL,EARS,IAU3B,CACY,CAAA,CAAA,CACP,CAAA,CAAA,CACP,KAEL,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,qBACZ,GACC,EAAA,EAAA,IAAA,CAAC,MAAD,CAAA,UACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAS,GAAG,MAAM,KAAK,KAAK,UAAU,SAAS,KAAK,QAAU,CAAA,CAC3D,CAAA,GAEL,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,WAAY,EAAW,MAAQ,CAAC,EAChC,WAAY,EACZ,QAAS,EAAM,QACA,eAChB,CAAA,CAEA,CAAA,CACL,CAAA,CAAA,CAEN"}
1
+ {"version":3,"file":"DwISzabN.chunk.js","names":[],"sources":["../../../../../src/shared/components/classifications/video-curated-topics-list/VideoCuratedTopicsList.tsx","../../../../../src/apps/videos/views/edit-video-curated-topics/EditVideoCuratedTopicsView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Table } from 'libs/shared/components/table/Table';\nimport { 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 { DefinedColumnSet, MemberMatrixHelper } from 'shared/utils/MemberMatrixHelper';\n\nimport { VideoCuratedTopics } from 'apps/assembly-line/interfaces/responses/VideoCuratedTopics';\n\ninterface VideoCuratedTopicsListProps {\n videoId: string;\n dashboards: VideoCuratedTopics[];\n columnData: ColumnData;\n presentations: Presentation[];\n}\n\nexport function VideoCuratedTopicsList(props: VideoCuratedTopicsListProps): JSX.Element {\n const members: VideoCuratedTopics[] = props.dashboards.map(d => {\n return {\n ...d,\n presentationDescription: d.presentation.id && props.presentations.find(p => p.id === d.presentation.id)?.description || ''\n };\n });\n\n const columns = MemberMatrixHelper.getColumnSet(DefinedColumnSet['VideoCuratedTopics']);\n\n const fullColumns = React.useMemo(() => BuildColumns({\n columns: columns,\n columnData: props.columnData\n }), [props.columnData]);\n\n return (\n <>\n { !props.dashboards.length ? (\n <p className='py-3'><em>This video is not used in any dashboard</em></p>\n ) : (\n <Table<MatrixMember>\n theme={CuratorTableTheme}\n columns={fullColumns}\n data={members}\n />\n )}\n </>\n );\n}\n","import React from 'react';\nimport { Dropdown, Spinner } from 'react-bootstrap';\n\nimport { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { CuratorUser, Presentation } from 'libs/shared/interfaces';\n\nimport { ColumnData, ObjectHeader } from 'shared/components';\nimport { VideoCuratedTopicsList } from 'shared/components/classifications/video-curated-topics-list/VideoCuratedTopicsList';\nimport { Actions, AppChannels } from 'shared/constants';\n\nimport { AssemblyLineRequests } from 'apps/assembly-line/flight-requests/AssemblyLineRequests';\nimport { VideoCuratedTopics } from 'apps/assembly-line/interfaces/responses/VideoCuratedTopics';\nimport { EditVideoNav } from 'apps/videos/components/edit-video-nav';\nimport { VideoRequests } from 'apps/videos/flight-requests/CuratorVideoRequests';\n\ninterface EditVideoCuratedTopicsViewProps {\n videoId: string;\n}\n\nexport function EditVideoCuratedTopicsView(props: EditVideoCuratedTopicsViewProps) {\n const [ filterPresentation, setFilterPresentation ] = React.useState<Presentation | null>(null);\n\n const video = Flight.useBasicFetch(VideoRequests.video(props.videoId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n const dashboards = Flight.useBasicFetch<VideoCuratedTopics[]>(\n AssemblyLineRequests.getVideoDashboardsDetails(props.videoId, filterPresentation?.id)\n );\n\n const presentations = ArrayHelper.uniq(dashboards.data?.map(d => d.presentation), p => p.id);\n\n function curatedTopicsActions(dashboard: VideoCuratedTopics): ActionOptions[] {\n return [{\n label: 'Open curated topic',\n openInNewTab: true,\n appLink: {\n application: AppChannels.DASHBOARD_EDITOR,\n action: Actions.DashboardEditor.EDIT_DASHBOARD,\n args: [dashboard.id]\n }\n }, {\n label: 'Open classification details',\n openInNewTab: true,\n appLink: {\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.EDIT_CLASSIFICATION,\n args: [ dashboard.presentation.id, dashboard.classificationId ]\n }\n }];\n }\n\n const curatedTopicsColumnData: ColumnData = {\n actions: curatedTopicsActions\n };\n\n const isLoadingDashboard = !dashboards.hasCompleted;\n\n return (\n <>\n {!!currentUser.data && (\n <EditVideoNav\n videoId={props.videoId}\n activeAction={Actions.Videos.EDIT_VIDEO_CURATED_TOPICS}\n currentUser={currentUser.data}\n />\n )}\n {video.data && <ObjectHeader object={video.data} />}\n\n <p>View all the curated topics this video is in.</p>\n\n <div className='d-flex align-items-center'>\n <p className='me-2'>Filter by presentation:</p>\n <Dropdown>\n <Dropdown.Toggle\n id='presentation-filter'\n variant='outline-dark'\n className='mb-3'\n disabled={isLoadingDashboard}\n >\n {filterPresentation?.description || 'All Presentations'}\n </Dropdown.Toggle>\n <Dropdown.Menu>\n <Dropdown.Item\n onClick={() => setFilterPresentation(null)}\n active={filterPresentation === null}\n >\n All Presentations\n </Dropdown.Item>\n {presentations?.map(presentation => {\n if (!presentation) return null;\n return (\n <Dropdown.Item\n key={presentation.id}\n onClick={() => setFilterPresentation(presentation)}\n active={filterPresentation?.id === presentation.id}\n >\n {presentation.description}\n </Dropdown.Item>\n );\n })}\n </Dropdown.Menu>\n </Dropdown>\n </div>\n\n <div className='pb-3 my-3'>\n {isLoadingDashboard ? (\n <div>\n <Spinner as='div' size='sm' animation='border' role='status' />\n </div>\n ) : (\n <VideoCuratedTopicsList\n dashboards={dashboards.data || []}\n columnData={curatedTopicsColumnData}\n videoId={props.videoId}\n presentations={presentations}\n />\n )}\n </div>\n </>\n );\n}\n"],"mappings":"ksBAmBA,SAAgB,EAAuB,EAAiD,CACtF,IAAM,EAAgC,EAAM,WAAW,IAAI,IAClD,CACL,GAAG,EACH,wBAAyB,EAAE,aAAa,IAAM,EAAM,cAAc,KAAK,GAAK,EAAE,KAAO,EAAE,aAAa,EAAE,CAAC,EAAE,aAAe,EAC1H,EACD,EAEK,EAAU,EAAmB,aAAa,EAAiB,kBAAqB,EAEhF,EAAA,EAAoB,YAAc,EAAa,CAC1C,UACT,WAAY,EAAM,UACpB,CAAC,EAAG,CAAC,EAAM,UAAU,CAAC,EAEtB,OACE,EAAA,EAAA,IAAA,CAAA,EAAA,SAAA,CAAA,SACK,EAAM,WAAW,QAGlB,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,MAAO,EACP,QAAS,EACT,KAAM,CACP,CAAA,GAND,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAU,iBAAO,EAAA,EAAA,IAAA,CAAC,KAAD,CAAA,SAAI,yCAA2C,CAAA,CAAI,CAAA,CAQzE,CAAA,CAEN,CCxBA,SAAgB,EAA2B,EAAwC,CACjF,GAAM,CAAE,EAAoB,GAAA,EAAgC,SAA8B,IAAI,EAExF,EAAQ,EAAqB,EAAc,MAAM,EAAM,OAAO,CAAC,EAC/D,EAAc,EAAkC,EAAa,YAAY,CAAC,EAC1E,EAAa,EACjB,EAAqB,0BAA0B,EAAM,QAAS,GAAoB,EAAE,CACtF,EAEM,EAAgB,EAAY,KAAK,EAAW,MAAM,IAAI,GAAK,EAAE,YAAY,EAAG,GAAK,EAAE,EAAE,EAE3F,SAAS,EAAqB,EAAgD,CAC5E,MAAO,CAAC,CACN,MAAO,qBACP,aAAc,GACd,QAAS,CACP,YAAa,EAAY,iBACzB,OAAQ,EAAQ,gBAAgB,eAChC,KAAM,CAAC,EAAU,EAAE,CACrB,CACF,EAAG,CACD,MAAO,8BACP,aAAc,GACd,QAAS,CACP,YAAa,EAAY,SACzB,OAAQ,EAAQ,SAAS,oBACzB,KAAM,CAAE,EAAU,aAAa,GAAI,EAAU,gBAAiB,CAChE,CACF,CAAC,CACH,CAEA,IAAM,EAAsC,CAC1C,QAAS,CACX,EAEM,EAAqB,CAAC,EAAW,aAEvC,OACE,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,CACG,CAAC,CAAC,EAAY,OACb,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,QAAS,EAAM,QACf,aAAc,EAAQ,OAAO,0BAC7B,YAAa,EAAY,IAC1B,CAAA,EAEF,EAAM,OAAQ,EAAA,EAAA,IAAA,CAAC,EAAD,CAAc,OAAQ,EAAM,IAAO,CAAA,GAElD,EAAA,EAAA,IAAA,CAAC,IAAD,CAAA,SAAG,+CAAgD,CAAA,GAEnD,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,qCAAf,EACE,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAU,gBAAO,yBAA0B,CAAA,GAC9C,EAAA,EAAA,KAAA,CAAC,EAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAS,OAAV,CACE,GAAG,sBACH,QAAQ,eACR,UAAU,OACV,SAAU,WAET,GAAoB,aAAe,mBACrB,CAAA,GACjB,EAAA,EAAA,KAAA,CAAC,EAAS,KAAV,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAS,KAAV,CACE,YAAe,EAAsB,IAAI,EACzC,OAAQ,IAAuB,cAChC,mBAEc,CAAA,EACd,GAAe,IAAI,GACb,GAEH,EAAA,EAAA,IAAA,CAAC,EAAS,KAAV,CAEE,YAAe,EAAsB,CAAY,EACjD,OAAQ,GAAoB,KAAO,EAAa,YAE/C,EAAa,WACD,EALR,EAAa,EAKL,EARS,IAU3B,CACY,CAAA,CAAA,CACP,CAAA,CAAA,CACP,KAEL,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,qBACZ,GACC,EAAA,EAAA,IAAA,CAAC,MAAD,CAAA,UACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAS,GAAG,MAAM,KAAK,KAAK,UAAU,SAAS,KAAK,QAAU,CAAA,CAC3D,CAAA,GAEL,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,WAAY,EAAW,MAAQ,CAAC,EAChC,WAAY,EACZ,QAAS,EAAM,QACA,eAChB,CAAA,CAEA,CAAA,CACL,CAAA,CAAA,CAEN"}