@clickview/curator 1.100.0-rc.1 → 1.100.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (321) hide show
  1. package/dist/.vite/manifest.json +1779 -1779
  2. package/dist/Assets/js/dist/scripts/{CYhNyVj0.chunk.js → -6zuD8lo.chunk.js} +2 -2
  3. package/dist/Assets/js/dist/scripts/{CYhNyVj0.chunk.js.map → -6zuD8lo.chunk.js.map} +1 -1
  4. package/dist/Assets/js/dist/scripts/{D28bEsam.chunk.js → 0A42jU2r.chunk.js} +2 -2
  5. package/dist/Assets/js/dist/scripts/{D28bEsam.chunk.js.map → 0A42jU2r.chunk.js.map} +1 -1
  6. package/dist/Assets/js/dist/scripts/{oYHUjbwb2.chunk.js → 0ogjGD4J2.chunk.js} +2 -2
  7. package/dist/Assets/js/dist/scripts/{oYHUjbwb2.chunk.js.map → 0ogjGD4J2.chunk.js.map} +1 -1
  8. package/dist/Assets/js/dist/scripts/{PeuFojmJ2.chunk.js → 2aCj1HHJ2.chunk.js} +2 -2
  9. package/dist/Assets/js/dist/scripts/{PeuFojmJ2.chunk.js.map → 2aCj1HHJ2.chunk.js.map} +1 -1
  10. package/dist/Assets/js/dist/scripts/{q7pjZoNd.chunk.js → 2zbtFQka.chunk.js} +2 -2
  11. package/dist/Assets/js/dist/scripts/{q7pjZoNd.chunk.js.map → 2zbtFQka.chunk.js.map} +1 -1
  12. package/dist/Assets/js/dist/scripts/{0S5J0xX22.chunk.js → 3IQ_8AZP2.chunk.js} +2 -2
  13. package/dist/Assets/js/dist/scripts/{0S5J0xX22.chunk.js.map → 3IQ_8AZP2.chunk.js.map} +1 -1
  14. package/dist/Assets/js/dist/scripts/{DvP7S5Uq.chunk.js → 3eMwLZ5D.chunk.js} +2 -2
  15. package/dist/Assets/js/dist/scripts/{DvP7S5Uq.chunk.js.map → 3eMwLZ5D.chunk.js.map} +1 -1
  16. package/dist/Assets/js/dist/scripts/{y1L3G7XA2.chunk.js → 4Tx2JSvk2.chunk.js} +2 -2
  17. package/dist/Assets/js/dist/scripts/{y1L3G7XA2.chunk.js.map → 4Tx2JSvk2.chunk.js.map} +1 -1
  18. package/dist/Assets/js/dist/scripts/{BbR7yW4A2.chunk.js → 5uVJfyDx2.chunk.js} +2 -2
  19. package/dist/Assets/js/dist/scripts/{BbR7yW4A2.chunk.js.map → 5uVJfyDx2.chunk.js.map} +1 -1
  20. package/dist/Assets/js/dist/scripts/{B52yjTo5.chunk.js → 6l2s6d3Q.chunk.js} +2 -2
  21. package/dist/Assets/js/dist/scripts/{B52yjTo5.chunk.js.map → 6l2s6d3Q.chunk.js.map} +1 -1
  22. package/dist/Assets/js/dist/scripts/{DezIbRcB2.chunk.js → 8RAh0VA72.chunk.js} +2 -2
  23. package/dist/Assets/js/dist/scripts/{DezIbRcB2.chunk.js.map → 8RAh0VA72.chunk.js.map} +1 -1
  24. package/dist/Assets/js/dist/scripts/{CixcMUHF.chunk.js → 9nk_zFtT.chunk.js} +2 -2
  25. package/dist/Assets/js/dist/scripts/{CixcMUHF.chunk.js.map → 9nk_zFtT.chunk.js.map} +1 -1
  26. package/dist/Assets/js/dist/scripts/{Bk9vy70e2.chunk.js → Ae4rMqFm2.chunk.js} +2 -2
  27. package/dist/Assets/js/dist/scripts/{Bk9vy70e2.chunk.js.map → Ae4rMqFm2.chunk.js.map} +1 -1
  28. package/dist/Assets/js/dist/scripts/{Bzh_AwaG.chunk.js → B0mCquXn.chunk.js} +2 -2
  29. package/dist/Assets/js/dist/scripts/{Bzh_AwaG.chunk.js.map → B0mCquXn.chunk.js.map} +1 -1
  30. package/dist/Assets/js/dist/scripts/B1pBJzjh.chunk.js +1 -0
  31. package/dist/Assets/js/dist/scripts/{BswFY0mR2.chunk.js → B6IinlWw2.chunk.js} +2 -2
  32. package/dist/Assets/js/dist/scripts/{BswFY0mR2.chunk.js.map → B6IinlWw2.chunk.js.map} +1 -1
  33. package/dist/Assets/js/dist/scripts/{ClpIRgLR.chunk.js → B6NMAAhW.chunk.js} +2 -2
  34. package/dist/Assets/js/dist/scripts/{ClpIRgLR.chunk.js.map → B6NMAAhW.chunk.js.map} +1 -1
  35. package/dist/Assets/js/dist/scripts/{BCMXlwdC2.chunk.js → B8RZKQTs2.chunk.js} +2 -2
  36. package/dist/Assets/js/dist/scripts/{BCMXlwdC2.chunk.js.map → B8RZKQTs2.chunk.js.map} +1 -1
  37. package/dist/Assets/js/dist/scripts/{CymdouaN.chunk.js → B9R92bqj.chunk.js} +2 -2
  38. package/dist/Assets/js/dist/scripts/{CymdouaN.chunk.js.map → B9R92bqj.chunk.js.map} +1 -1
  39. package/dist/Assets/js/dist/scripts/{CtVYDK7g.chunk.js → BAFYJZ4c.chunk.js} +2 -2
  40. package/dist/Assets/js/dist/scripts/{CtVYDK7g.chunk.js.map → BAFYJZ4c.chunk.js.map} +1 -1
  41. package/dist/Assets/js/dist/scripts/{_wZpe632.chunk.js → BFPSIGJg.chunk.js} +2 -2
  42. package/dist/Assets/js/dist/scripts/{_wZpe632.chunk.js.map → BFPSIGJg.chunk.js.map} +1 -1
  43. package/dist/Assets/js/dist/scripts/{BNHULwJy2.chunk.js → BGiLDtc92.chunk.js} +2 -2
  44. package/dist/Assets/js/dist/scripts/{BNHULwJy2.chunk.js.map → BGiLDtc92.chunk.js.map} +1 -1
  45. package/dist/Assets/js/dist/scripts/{DA9R8atp2.chunk.js → BH6LIpwu2.chunk.js} +2 -2
  46. package/dist/Assets/js/dist/scripts/{DA9R8atp2.chunk.js.map → BH6LIpwu2.chunk.js.map} +1 -1
  47. package/dist/Assets/js/dist/scripts/{DbrVjVdn.chunk.js → BMj3pXcm.chunk.js} +2 -2
  48. package/dist/Assets/js/dist/scripts/{DbrVjVdn.chunk.js.map → BMj3pXcm.chunk.js.map} +1 -1
  49. package/dist/Assets/js/dist/scripts/{CDvLjxwS.chunk.js → BQTfNBFU.chunk.js} +2 -2
  50. package/dist/Assets/js/dist/scripts/{CDvLjxwS.chunk.js.map → BQTfNBFU.chunk.js.map} +1 -1
  51. package/dist/Assets/js/dist/scripts/{mStmtFRo.chunk.js → BT-jeT7C.chunk.js} +2 -2
  52. package/dist/Assets/js/dist/scripts/{mStmtFRo.chunk.js.map → BT-jeT7C.chunk.js.map} +1 -1
  53. package/dist/Assets/js/dist/scripts/{FlF2O19P2.chunk.js → BUD4osIg2.chunk.js} +2 -2
  54. package/dist/Assets/js/dist/scripts/{FlF2O19P2.chunk.js.map → BUD4osIg2.chunk.js.map} +1 -1
  55. package/dist/Assets/js/dist/scripts/{DWS9yr24.chunk.js → BVoG71Kc.chunk.js} +2 -2
  56. package/dist/Assets/js/dist/scripts/{DWS9yr24.chunk.js.map → BVoG71Kc.chunk.js.map} +1 -1
  57. package/dist/Assets/js/dist/scripts/{B9tf3oT62.chunk.js → BW5iVK1B2.chunk.js} +2 -2
  58. package/dist/Assets/js/dist/scripts/{B9tf3oT62.chunk.js.map → BW5iVK1B2.chunk.js.map} +1 -1
  59. package/dist/Assets/js/dist/scripts/{C2mEE4FT.chunk.js → BW9r-3iO.chunk.js} +2 -2
  60. package/dist/Assets/js/dist/scripts/{C2mEE4FT.chunk.js.map → BW9r-3iO.chunk.js.map} +1 -1
  61. package/dist/Assets/js/dist/scripts/{Dpgqkqbp.chunk.js → BX1tMzoa.chunk.js} +2 -2
  62. package/dist/Assets/js/dist/scripts/{Dpgqkqbp.chunk.js.map → BX1tMzoa.chunk.js.map} +1 -1
  63. package/dist/Assets/js/dist/scripts/{DVRzbAn6.chunk.js → BXaC-l33.chunk.js} +2 -2
  64. package/dist/Assets/js/dist/scripts/{DVRzbAn6.chunk.js.map → BXaC-l33.chunk.js.map} +1 -1
  65. package/dist/Assets/js/dist/scripts/{BaR7D4NT2.chunk.js → BY-c3M2b2.chunk.js} +2 -2
  66. package/dist/Assets/js/dist/scripts/{BaR7D4NT2.chunk.js.map → BY-c3M2b2.chunk.js.map} +1 -1
  67. package/dist/Assets/js/dist/scripts/{CJpVJtZk.chunk.js → BYMuPFbe.chunk.js} +2 -2
  68. package/dist/Assets/js/dist/scripts/{CJpVJtZk.chunk.js.map → BYMuPFbe.chunk.js.map} +1 -1
  69. package/dist/Assets/js/dist/scripts/{C5INFWaM2.chunk.js → BaOAOuSc2.chunk.js} +2 -2
  70. package/dist/Assets/js/dist/scripts/{C5INFWaM2.chunk.js.map → BaOAOuSc2.chunk.js.map} +1 -1
  71. package/dist/Assets/js/dist/scripts/{wAWlO6hc.chunk.js → Bb_f3Lku.chunk.js} +2 -2
  72. package/dist/Assets/js/dist/scripts/{wAWlO6hc.chunk.js.map → Bb_f3Lku.chunk.js.map} +1 -1
  73. package/dist/Assets/js/dist/scripts/{BLJO44vl.chunk.js → BdJYoUIO.chunk.js} +2 -2
  74. package/dist/Assets/js/dist/scripts/{BLJO44vl.chunk.js.map → BdJYoUIO.chunk.js.map} +1 -1
  75. package/dist/Assets/js/dist/scripts/{CW2k5Ut-2.chunk.js → Bf-6iyfX2.chunk.js} +2 -2
  76. package/dist/Assets/js/dist/scripts/{CW2k5Ut-2.chunk.js.map → Bf-6iyfX2.chunk.js.map} +1 -1
  77. package/dist/Assets/js/dist/scripts/{DxL0ZEcN2.chunk.js → BiPUuGEE2.chunk.js} +2 -2
  78. package/dist/Assets/js/dist/scripts/{DxL0ZEcN2.chunk.js.map → BiPUuGEE2.chunk.js.map} +1 -1
  79. package/dist/Assets/js/dist/scripts/{2XS-c0Xo.chunk.js → Bj4-NRWf.chunk.js} +2 -2
  80. package/dist/Assets/js/dist/scripts/{2XS-c0Xo.chunk.js.map → Bj4-NRWf.chunk.js.map} +1 -1
  81. package/dist/Assets/js/dist/scripts/{D13ViJt82.chunk.js → BkVcraos2.chunk.js} +2 -2
  82. package/dist/Assets/js/dist/scripts/{D13ViJt82.chunk.js.map → BkVcraos2.chunk.js.map} +1 -1
  83. package/dist/Assets/js/dist/scripts/{U1L4Dfoc.chunk.js → BkZ7WS_H.chunk.js} +2 -2
  84. package/dist/Assets/js/dist/scripts/{U1L4Dfoc.chunk.js.map → BkZ7WS_H.chunk.js.map} +1 -1
  85. package/dist/Assets/js/dist/scripts/{DoQiTqRX2.chunk.js → BoMt5mMW2.chunk.js} +2 -2
  86. package/dist/Assets/js/dist/scripts/{DoQiTqRX2.chunk.js.map → BoMt5mMW2.chunk.js.map} +1 -1
  87. package/dist/Assets/js/dist/scripts/{Da_9BBKD2.chunk.js → Bo_WsHZq2.chunk.js} +2 -2
  88. package/dist/Assets/js/dist/scripts/{Da_9BBKD2.chunk.js.map → Bo_WsHZq2.chunk.js.map} +1 -1
  89. package/dist/Assets/js/dist/scripts/{CnyrKBG0.chunk.js → BpV5ErII.chunk.js} +2 -2
  90. package/dist/Assets/js/dist/scripts/{CnyrKBG0.chunk.js.map → BpV5ErII.chunk.js.map} +1 -1
  91. package/dist/Assets/js/dist/scripts/{Dfhl7nI62.chunk.js → BrBPGjLi2.chunk.js} +2 -2
  92. package/dist/Assets/js/dist/scripts/{Dfhl7nI62.chunk.js.map → BrBPGjLi2.chunk.js.map} +1 -1
  93. package/dist/Assets/js/dist/scripts/{DcxGcCkR.chunk.js → BrHyZG_m.chunk.js} +2 -2
  94. package/dist/Assets/js/dist/scripts/{DcxGcCkR.chunk.js.map → BrHyZG_m.chunk.js.map} +1 -1
  95. package/dist/Assets/js/dist/scripts/{FXPxauLF.chunk.js → Bu4F3uuX.chunk.js} +2 -2
  96. package/dist/Assets/js/dist/scripts/{FXPxauLF.chunk.js.map → Bu4F3uuX.chunk.js.map} +1 -1
  97. package/dist/Assets/js/dist/scripts/{DZdJx-7j.chunk.js → BvW9SXzy.chunk.js} +2 -2
  98. package/dist/Assets/js/dist/scripts/{DZdJx-7j.chunk.js.map → BvW9SXzy.chunk.js.map} +1 -1
  99. package/dist/Assets/js/dist/scripts/{CAU0Lbgd.chunk.js → BwKHls91.chunk.js} +2 -2
  100. package/dist/Assets/js/dist/scripts/{CAU0Lbgd.chunk.js.map → BwKHls91.chunk.js.map} +1 -1
  101. package/dist/Assets/js/dist/scripts/{BiTzUyxj2.chunk.js → BxZNJjbX2.chunk.js} +2 -2
  102. package/dist/Assets/js/dist/scripts/{BiTzUyxj2.chunk.js.map → BxZNJjbX2.chunk.js.map} +1 -1
  103. package/dist/Assets/js/dist/scripts/{cymXuIcM.chunk.js → BygVW5WL.chunk.js} +2 -2
  104. package/dist/Assets/js/dist/scripts/{cymXuIcM.chunk.js.map → BygVW5WL.chunk.js.map} +1 -1
  105. package/dist/Assets/js/dist/scripts/{Dx07A6Ct.chunk.js → ByzsHBuo.chunk.js} +2 -2
  106. package/dist/Assets/js/dist/scripts/{Dx07A6Ct.chunk.js.map → ByzsHBuo.chunk.js.map} +1 -1
  107. package/dist/Assets/js/dist/scripts/C-M2om56.chunk.js +3 -0
  108. package/dist/Assets/js/dist/scripts/C-M2om56.chunk.js.map +1 -0
  109. package/dist/Assets/js/dist/scripts/{B6dlmRQL.chunk.js → C0UYMHUe.chunk.js} +2 -2
  110. package/dist/Assets/js/dist/scripts/{B6dlmRQL.chunk.js.map → C0UYMHUe.chunk.js.map} +1 -1
  111. package/dist/Assets/js/dist/scripts/{V0N7tCBl.chunk.js → C0_pEFCD.chunk.js} +2 -2
  112. package/dist/Assets/js/dist/scripts/{V0N7tCBl.chunk.js.map → C0_pEFCD.chunk.js.map} +1 -1
  113. package/dist/Assets/js/dist/scripts/{Cpr1J8Rk2.chunk.js → C2jRLu4_2.chunk.js} +2 -2
  114. package/dist/Assets/js/dist/scripts/{Cpr1J8Rk2.chunk.js.map → C2jRLu4_2.chunk.js.map} +1 -1
  115. package/dist/Assets/js/dist/scripts/{CY56FWb9.chunk.js → C2tBl3l9.chunk.js} +2 -2
  116. package/dist/Assets/js/dist/scripts/{CY56FWb9.chunk.js.map → C2tBl3l9.chunk.js.map} +1 -1
  117. package/dist/Assets/js/dist/scripts/{C3Lx9PwR.chunk.js → C4eazpDh.chunk.js} +2 -2
  118. package/dist/Assets/js/dist/scripts/{C3Lx9PwR.chunk.js.map → C4eazpDh.chunk.js.map} +1 -1
  119. package/dist/Assets/js/dist/scripts/{puobgAYi.chunk.js → CBq4vrjT.chunk.js} +2 -2
  120. package/dist/Assets/js/dist/scripts/{puobgAYi.chunk.js.map → CBq4vrjT.chunk.js.map} +1 -1
  121. package/dist/Assets/js/dist/scripts/{Bcx1C8ae.chunk.js → CBzqRw-k.chunk.js} +2 -2
  122. package/dist/Assets/js/dist/scripts/{Bcx1C8ae.chunk.js.map → CBzqRw-k.chunk.js.map} +1 -1
  123. package/dist/Assets/js/dist/scripts/{BD6DIPGL2.chunk.js → CDAdfAL02.chunk.js} +2 -2
  124. package/dist/Assets/js/dist/scripts/{BD6DIPGL2.chunk.js.map → CDAdfAL02.chunk.js.map} +1 -1
  125. package/dist/Assets/js/dist/scripts/{Ddp1uNfH.chunk.js → CE1Dxq8p.chunk.js} +2 -2
  126. package/dist/Assets/js/dist/scripts/{Ddp1uNfH.chunk.js.map → CE1Dxq8p.chunk.js.map} +1 -1
  127. package/dist/Assets/js/dist/scripts/{C99MPG7E.chunk.js → CG2julEA.chunk.js} +2 -2
  128. package/dist/Assets/js/dist/scripts/{C99MPG7E.chunk.js.map → CG2julEA.chunk.js.map} +1 -1
  129. package/dist/Assets/js/dist/scripts/{tyY3GHEC2.chunk.js → CGcN4g0d2.chunk.js} +2 -2
  130. package/dist/Assets/js/dist/scripts/{tyY3GHEC2.chunk.js.map → CGcN4g0d2.chunk.js.map} +1 -1
  131. package/dist/Assets/js/dist/scripts/{wODD7tmB2.chunk.js → CJmV_FfR2.chunk.js} +2 -2
  132. package/dist/Assets/js/dist/scripts/{wODD7tmB2.chunk.js.map → CJmV_FfR2.chunk.js.map} +1 -1
  133. package/dist/Assets/js/dist/scripts/{DavA1dZZ.chunk.js → CKvVGIRL.chunk.js} +2 -2
  134. package/dist/Assets/js/dist/scripts/{DavA1dZZ.chunk.js.map → CKvVGIRL.chunk.js.map} +1 -1
  135. package/dist/Assets/js/dist/scripts/{CrndJnZp.chunk.js → CL1DcbTZ.chunk.js} +2 -2
  136. package/dist/Assets/js/dist/scripts/{CrndJnZp.chunk.js.map → CL1DcbTZ.chunk.js.map} +1 -1
  137. package/dist/Assets/js/dist/scripts/{DLLL2lwS.chunk.js → CNLx6_fS.chunk.js} +2 -2
  138. package/dist/Assets/js/dist/scripts/{DLLL2lwS.chunk.js.map → CNLx6_fS.chunk.js.map} +1 -1
  139. package/dist/Assets/js/dist/scripts/{w2lackHw.chunk.js → CNUVs80P.chunk.js} +2 -2
  140. package/dist/Assets/js/dist/scripts/{w2lackHw.chunk.js.map → CNUVs80P.chunk.js.map} +1 -1
  141. package/dist/Assets/js/dist/scripts/{CCzvD0H4.chunk.js → CPa__SNX.chunk.js} +2 -2
  142. package/dist/Assets/js/dist/scripts/{CCzvD0H4.chunk.js.map → CPa__SNX.chunk.js.map} +1 -1
  143. package/dist/Assets/js/dist/scripts/{DeDh-wVP.chunk.js → CSA2Tnv9.chunk.js} +2 -2
  144. package/dist/Assets/js/dist/scripts/{DeDh-wVP.chunk.js.map → CSA2Tnv9.chunk.js.map} +1 -1
  145. package/dist/Assets/js/dist/scripts/{CjZJx6-O2.chunk.js → CT-xEpNT2.chunk.js} +2 -2
  146. package/dist/Assets/js/dist/scripts/{CjZJx6-O2.chunk.js.map → CT-xEpNT2.chunk.js.map} +1 -1
  147. package/dist/Assets/js/dist/scripts/{BRPP3VZ1.chunk.js → CT0vfLa0.chunk.js} +2 -2
  148. package/dist/Assets/js/dist/scripts/{BRPP3VZ1.chunk.js.map → CT0vfLa0.chunk.js.map} +1 -1
  149. package/dist/Assets/js/dist/scripts/{DGjNB2Bz.chunk.js → CUDnXypB.chunk.js} +2 -2
  150. package/dist/Assets/js/dist/scripts/{DGjNB2Bz.chunk.js.map → CUDnXypB.chunk.js.map} +1 -1
  151. package/dist/Assets/js/dist/scripts/{cXanUGwK.chunk.js → CeMQZB5J.chunk.js} +2 -2
  152. package/dist/Assets/js/dist/scripts/{cXanUGwK.chunk.js.map → CeMQZB5J.chunk.js.map} +1 -1
  153. package/dist/Assets/js/dist/scripts/Cf5cjLzK.chunk.js +2 -0
  154. package/dist/Assets/js/dist/scripts/{D2iK_uRt.chunk.js.map → Cf5cjLzK.chunk.js.map} +1 -1
  155. package/dist/Assets/js/dist/scripts/{CRNBuqmR.chunk.js → CfGaxIgd.chunk.js} +2 -2
  156. package/dist/Assets/js/dist/scripts/{CRNBuqmR.chunk.js.map → CfGaxIgd.chunk.js.map} +1 -1
  157. package/dist/Assets/js/dist/scripts/{BNr7ZL3F2.chunk.js → Cqfub35W2.chunk.js} +2 -2
  158. package/dist/Assets/js/dist/scripts/{BNr7ZL3F2.chunk.js.map → Cqfub35W2.chunk.js.map} +1 -1
  159. package/dist/Assets/js/dist/scripts/{DRmwJ1it2.chunk.js → Cv8UpP5_2.chunk.js} +2 -2
  160. package/dist/Assets/js/dist/scripts/{DRmwJ1it2.chunk.js.map → Cv8UpP5_2.chunk.js.map} +1 -1
  161. package/dist/Assets/js/dist/scripts/{DOfeXfSj.chunk.js → CvV6jx2d.chunk.js} +2 -2
  162. package/dist/Assets/js/dist/scripts/{DOfeXfSj.chunk.js.map → CvV6jx2d.chunk.js.map} +1 -1
  163. package/dist/Assets/js/dist/scripts/{DnGnhqys.chunk.js → CxENQntH.chunk.js} +2 -2
  164. package/dist/Assets/js/dist/scripts/{DnGnhqys.chunk.js.map → CxENQntH.chunk.js.map} +1 -1
  165. package/dist/Assets/js/dist/scripts/{NMDkdR-8.chunk.js → CxIfJCSc.chunk.js} +2 -2
  166. package/dist/Assets/js/dist/scripts/{NMDkdR-8.chunk.js.map → CxIfJCSc.chunk.js.map} +1 -1
  167. package/dist/Assets/js/dist/scripts/{B9H-d-YC.chunk.js → CxggKQxV.chunk.js} +2 -2
  168. package/dist/Assets/js/dist/scripts/{B9H-d-YC.chunk.js.map → CxggKQxV.chunk.js.map} +1 -1
  169. package/dist/Assets/js/dist/scripts/{B3I44IzQ.chunk.js → CyNNZ1So.chunk.js} +2 -2
  170. package/dist/Assets/js/dist/scripts/{B3I44IzQ.chunk.js.map → CyNNZ1So.chunk.js.map} +1 -1
  171. package/dist/Assets/js/dist/scripts/{B2V1N14S.chunk.js → Cz-WSyAE.chunk.js} +2 -2
  172. package/dist/Assets/js/dist/scripts/{B2V1N14S.chunk.js.map → Cz-WSyAE.chunk.js.map} +1 -1
  173. package/dist/Assets/js/dist/scripts/{S9cTzcQc2.chunk.js → D2aQFJWt2.chunk.js} +2 -2
  174. package/dist/Assets/js/dist/scripts/{S9cTzcQc2.chunk.js.map → D2aQFJWt2.chunk.js.map} +1 -1
  175. package/dist/Assets/js/dist/scripts/{CEsXUxxo2.chunk.js → D2h9W4GA2.chunk.js} +2 -2
  176. package/dist/Assets/js/dist/scripts/{CEsXUxxo2.chunk.js.map → D2h9W4GA2.chunk.js.map} +1 -1
  177. package/dist/Assets/js/dist/scripts/{DqCsVhOS.chunk.js → D3NAhMJm.chunk.js} +2 -2
  178. package/dist/Assets/js/dist/scripts/{DqCsVhOS.chunk.js.map → D3NAhMJm.chunk.js.map} +1 -1
  179. package/dist/Assets/js/dist/scripts/{DpM1KgHy.chunk.js → D3aWaqBW.chunk.js} +2 -2
  180. package/dist/Assets/js/dist/scripts/{DpM1KgHy.chunk.js.map → D3aWaqBW.chunk.js.map} +1 -1
  181. package/dist/Assets/js/dist/scripts/{CxtxOtyF2.chunk.js → D4xcR0492.chunk.js} +2 -2
  182. package/dist/Assets/js/dist/scripts/{CxtxOtyF2.chunk.js.map → D4xcR0492.chunk.js.map} +1 -1
  183. package/dist/Assets/js/dist/scripts/{BEeh_Vbr.chunk.js → D5ek2PiI.chunk.js} +2 -2
  184. package/dist/Assets/js/dist/scripts/{BEeh_Vbr.chunk.js.map → D5ek2PiI.chunk.js.map} +1 -1
  185. package/dist/Assets/js/dist/scripts/{DjqQYm43.chunk.js → D61ei_h6.chunk.js} +2 -2
  186. package/dist/Assets/js/dist/scripts/{DjqQYm43.chunk.js.map → D61ei_h6.chunk.js.map} +1 -1
  187. package/dist/Assets/js/dist/scripts/{lgpeNdac.chunk.js → D6wyTufc.chunk.js} +2 -2
  188. package/dist/Assets/js/dist/scripts/{lgpeNdac.chunk.js.map → D6wyTufc.chunk.js.map} +1 -1
  189. package/dist/Assets/js/dist/scripts/{B8li8ced.chunk.js → D7I90XOo.chunk.js} +2 -2
  190. package/dist/Assets/js/dist/scripts/{B8li8ced.chunk.js.map → D7I90XOo.chunk.js.map} +1 -1
  191. package/dist/Assets/js/dist/scripts/{DBAwgllB.chunk.js → DArfNv9S.chunk.js} +2 -2
  192. package/dist/Assets/js/dist/scripts/{DBAwgllB.chunk.js.map → DArfNv9S.chunk.js.map} +1 -1
  193. package/dist/Assets/js/dist/scripts/{B6uYrrzJ2.chunk.js → DB-51xws2.chunk.js} +2 -2
  194. package/dist/Assets/js/dist/scripts/{B6uYrrzJ2.chunk.js.map → DB-51xws2.chunk.js.map} +1 -1
  195. package/dist/Assets/js/dist/scripts/{C-flCrUr.chunk.js → DENdEA1F.chunk.js} +2 -2
  196. package/dist/Assets/js/dist/scripts/{C-flCrUr.chunk.js.map → DENdEA1F.chunk.js.map} +1 -1
  197. package/dist/Assets/js/dist/scripts/{BuF_pg9-2.chunk.js → DFYiLmms2.chunk.js} +2 -2
  198. package/dist/Assets/js/dist/scripts/{BuF_pg9-2.chunk.js.map → DFYiLmms2.chunk.js.map} +1 -1
  199. package/dist/Assets/js/dist/scripts/{BE6LUVEo2.chunk.js → DHa-x1js2.chunk.js} +2 -2
  200. package/dist/Assets/js/dist/scripts/{BE6LUVEo2.chunk.js.map → DHa-x1js2.chunk.js.map} +1 -1
  201. package/dist/Assets/js/dist/scripts/{DDHep0UM.chunk.js → DHeA2NJS.chunk.js} +2 -2
  202. package/dist/Assets/js/dist/scripts/{DDHep0UM.chunk.js.map → DHeA2NJS.chunk.js.map} +1 -1
  203. package/dist/Assets/js/dist/scripts/{D5OaPA-v.chunk.js → DIDxfMO_.chunk.js} +2 -2
  204. package/dist/Assets/js/dist/scripts/{D5OaPA-v.chunk.js.map → DIDxfMO_.chunk.js.map} +1 -1
  205. package/dist/Assets/js/dist/scripts/{CV7UIOmh2.chunk.js → DMq1wDNm2.chunk.js} +2 -2
  206. package/dist/Assets/js/dist/scripts/{CV7UIOmh2.chunk.js.map → DMq1wDNm2.chunk.js.map} +1 -1
  207. package/dist/Assets/js/dist/scripts/{ByMU9ltp2.chunk.js → DNWM9yfh2.chunk.js} +2 -2
  208. package/dist/Assets/js/dist/scripts/{ByMU9ltp2.chunk.js.map → DNWM9yfh2.chunk.js.map} +1 -1
  209. package/dist/Assets/js/dist/scripts/{DFwtjofq2.chunk.js → DSj7VCEo2.chunk.js} +2 -2
  210. package/dist/Assets/js/dist/scripts/{DFwtjofq2.chunk.js.map → DSj7VCEo2.chunk.js.map} +1 -1
  211. package/dist/Assets/js/dist/scripts/{BSYuzR8N2.chunk.js → DSvehN9D2.chunk.js} +2 -2
  212. package/dist/Assets/js/dist/scripts/{BSYuzR8N2.chunk.js.map → DSvehN9D2.chunk.js.map} +1 -1
  213. package/dist/Assets/js/dist/scripts/{FS74_jrx.chunk.js → DTvCgZ4c.chunk.js} +2 -2
  214. package/dist/Assets/js/dist/scripts/{FS74_jrx.chunk.js.map → DTvCgZ4c.chunk.js.map} +1 -1
  215. package/dist/Assets/js/dist/scripts/{C7Gmh7eY.chunk.js → DWHKdmdQ.chunk.js} +2 -2
  216. package/dist/Assets/js/dist/scripts/{C7Gmh7eY.chunk.js.map → DWHKdmdQ.chunk.js.map} +1 -1
  217. package/dist/Assets/js/dist/scripts/{DXcaOjI_.chunk.js → DYFGF9Pe.chunk.js} +2 -2
  218. package/dist/Assets/js/dist/scripts/{DXcaOjI_.chunk.js.map → DYFGF9Pe.chunk.js.map} +1 -1
  219. package/dist/Assets/js/dist/scripts/{CIw53qNO2.chunk.js → DYOxTenc2.chunk.js} +2 -2
  220. package/dist/Assets/js/dist/scripts/{CIw53qNO2.chunk.js.map → DYOxTenc2.chunk.js.map} +1 -1
  221. package/dist/Assets/js/dist/scripts/{CignflP_2.chunk.js → DZthp5T62.chunk.js} +2 -2
  222. package/dist/Assets/js/dist/scripts/{CignflP_2.chunk.js.map → DZthp5T62.chunk.js.map} +1 -1
  223. package/dist/Assets/js/dist/scripts/{BlqDwJRY.chunk.js → Djgwr16q.chunk.js} +2 -2
  224. package/dist/Assets/js/dist/scripts/{BlqDwJRY.chunk.js.map → Djgwr16q.chunk.js.map} +1 -1
  225. package/dist/Assets/js/dist/scripts/{BwToh2X9.chunk.js → DjnvbVQs.chunk.js} +2 -2
  226. package/dist/Assets/js/dist/scripts/{BwToh2X9.chunk.js.map → DjnvbVQs.chunk.js.map} +1 -1
  227. package/dist/Assets/js/dist/scripts/{UelJUmgx2.chunk.js → DmrhyI9D2.chunk.js} +2 -2
  228. package/dist/Assets/js/dist/scripts/{UelJUmgx2.chunk.js.map → DmrhyI9D2.chunk.js.map} +1 -1
  229. package/dist/Assets/js/dist/scripts/{0KUhq7W7.chunk.js → DnZGILQc.chunk.js} +2 -2
  230. package/dist/Assets/js/dist/scripts/{0KUhq7W7.chunk.js.map → DnZGILQc.chunk.js.map} +1 -1
  231. package/dist/Assets/js/dist/scripts/{BSPrErub.chunk.js → DqnZw1cj.chunk.js} +2 -2
  232. package/dist/Assets/js/dist/scripts/{BSPrErub.chunk.js.map → DqnZw1cj.chunk.js.map} +1 -1
  233. package/dist/Assets/js/dist/scripts/{Bkx2vKcX2.chunk.js → DrAKpy8L2.chunk.js} +2 -2
  234. package/dist/Assets/js/dist/scripts/{Bkx2vKcX2.chunk.js.map → DrAKpy8L2.chunk.js.map} +1 -1
  235. package/dist/Assets/js/dist/scripts/{DX9DFxX2.chunk.js → DsM1bfoR.chunk.js} +2 -2
  236. package/dist/Assets/js/dist/scripts/{DX9DFxX2.chunk.js.map → DsM1bfoR.chunk.js.map} +1 -1
  237. package/dist/Assets/js/dist/scripts/{Dh3G-ann.chunk.js → Dt2TCPUI.chunk.js} +2 -2
  238. package/dist/Assets/js/dist/scripts/{Dh3G-ann.chunk.js.map → Dt2TCPUI.chunk.js.map} +1 -1
  239. package/dist/Assets/js/dist/scripts/{DA6Ynhan.chunk.js → DtylOK55.chunk.js} +2 -2
  240. package/dist/Assets/js/dist/scripts/{DA6Ynhan.chunk.js.map → DtylOK55.chunk.js.map} +1 -1
  241. package/dist/Assets/js/dist/scripts/{CJBiVila2.chunk.js → DuTcsFNo2.chunk.js} +2 -2
  242. package/dist/Assets/js/dist/scripts/{CJBiVila2.chunk.js.map → DuTcsFNo2.chunk.js.map} +1 -1
  243. package/dist/Assets/js/dist/scripts/{BBFS0f7w.chunk.js → Dw0mo6Cf.chunk.js} +2 -2
  244. package/dist/Assets/js/dist/scripts/{BBFS0f7w.chunk.js.map → Dw0mo6Cf.chunk.js.map} +1 -1
  245. package/dist/Assets/js/dist/scripts/{Cg5KHpRA.chunk.js → DwISzabN.chunk.js} +2 -2
  246. package/dist/Assets/js/dist/scripts/{Cg5KHpRA.chunk.js.map → DwISzabN.chunk.js.map} +1 -1
  247. package/dist/Assets/js/dist/scripts/{DMxtE2iS.chunk.js → DxW67uUT.chunk.js} +2 -2
  248. package/dist/Assets/js/dist/scripts/{DMxtE2iS.chunk.js.map → DxW67uUT.chunk.js.map} +1 -1
  249. package/dist/Assets/js/dist/scripts/{BOGS-BOS.chunk.js → Eg4zYYCO.chunk.js} +2 -2
  250. package/dist/Assets/js/dist/scripts/{BOGS-BOS.chunk.js.map → Eg4zYYCO.chunk.js.map} +1 -1
  251. package/dist/Assets/js/dist/scripts/{CSuC7le7.chunk.js → GT6nO4Jv.chunk.js} +2 -2
  252. package/dist/Assets/js/dist/scripts/{CSuC7le7.chunk.js.map → GT6nO4Jv.chunk.js.map} +1 -1
  253. package/dist/Assets/js/dist/scripts/{BhKv6dKl2.chunk.js → GpDEun8c2.chunk.js} +2 -2
  254. package/dist/Assets/js/dist/scripts/{BhKv6dKl2.chunk.js.map → GpDEun8c2.chunk.js.map} +1 -1
  255. package/dist/Assets/js/dist/scripts/{DKJC5qg0.chunk.js → OKjYL31I.chunk.js} +2 -2
  256. package/dist/Assets/js/dist/scripts/{DKJC5qg0.chunk.js.map → OKjYL31I.chunk.js.map} +1 -1
  257. package/dist/Assets/js/dist/scripts/{D8rrJ-jY2.chunk.js → OrCUhFjq2.chunk.js} +2 -2
  258. package/dist/Assets/js/dist/scripts/{D8rrJ-jY2.chunk.js.map → OrCUhFjq2.chunk.js.map} +1 -1
  259. package/dist/Assets/js/dist/scripts/{D3exV_Ay2.chunk.js → SVXAAhk02.chunk.js} +2 -2
  260. package/dist/Assets/js/dist/scripts/{D3exV_Ay2.chunk.js.map → SVXAAhk02.chunk.js.map} +1 -1
  261. package/dist/Assets/js/dist/scripts/{CcZKy7SH.chunk.js → SmmnJrec.chunk.js} +2 -2
  262. package/dist/Assets/js/dist/scripts/{CcZKy7SH.chunk.js.map → SmmnJrec.chunk.js.map} +1 -1
  263. package/dist/Assets/js/dist/scripts/{Dy4nscVE2.chunk.js → T3BageSw2.chunk.js} +2 -2
  264. package/dist/Assets/js/dist/scripts/{Dy4nscVE2.chunk.js.map → T3BageSw2.chunk.js.map} +1 -1
  265. package/dist/Assets/js/dist/scripts/{B8PM5Ji3.chunk.js → T6xxjp_W.chunk.js} +2 -2
  266. package/dist/Assets/js/dist/scripts/{B8PM5Ji3.chunk.js.map → T6xxjp_W.chunk.js.map} +1 -1
  267. package/dist/Assets/js/dist/scripts/{Cp6Af16p.chunk.js → Uc2eW092.chunk.js} +2 -2
  268. package/dist/Assets/js/dist/scripts/{Cp6Af16p.chunk.js.map → Uc2eW092.chunk.js.map} +1 -1
  269. package/dist/Assets/js/dist/scripts/{DmKyGgLu.chunk.js → XHoEdG1q.chunk.js} +2 -2
  270. package/dist/Assets/js/dist/scripts/{DmKyGgLu.chunk.js.map → XHoEdG1q.chunk.js.map} +1 -1
  271. package/dist/Assets/js/dist/scripts/{BdVoyBI02.chunk.js → Y14NYZ692.chunk.js} +2 -2
  272. package/dist/Assets/js/dist/scripts/{BdVoyBI02.chunk.js.map → Y14NYZ692.chunk.js.map} +1 -1
  273. package/dist/Assets/js/dist/scripts/{DrszevCi.chunk.js → Y_IcNhI9.chunk.js} +2 -2
  274. package/dist/Assets/js/dist/scripts/{DrszevCi.chunk.js.map → Y_IcNhI9.chunk.js.map} +1 -1
  275. package/dist/Assets/js/dist/scripts/{CMGpVYHd.chunk.js → Yr5eNz05.chunk.js} +2 -2
  276. package/dist/Assets/js/dist/scripts/{CMGpVYHd.chunk.js.map → Yr5eNz05.chunk.js.map} +1 -1
  277. package/dist/Assets/js/dist/scripts/{QnwProbJ2.chunk.js → Yrc9o6bG2.chunk.js} +2 -2
  278. package/dist/Assets/js/dist/scripts/{QnwProbJ2.chunk.js.map → Yrc9o6bG2.chunk.js.map} +1 -1
  279. package/dist/Assets/js/dist/scripts/{app-Dl-tzfIp.js → app-RphP4Ht0.js} +4 -4
  280. package/dist/Assets/js/dist/scripts/{app-Dl-tzfIp.js.map → app-RphP4Ht0.js.map} +1 -1
  281. package/dist/Assets/js/dist/scripts/{B96Bwi2D.chunk.js → cUgHqo-u.chunk.js} +2 -2
  282. package/dist/Assets/js/dist/scripts/{B96Bwi2D.chunk.js.map → cUgHqo-u.chunk.js.map} +1 -1
  283. package/dist/Assets/js/dist/scripts/{oGkpmMft2.chunk.js → dmUfJoJz2.chunk.js} +2 -2
  284. package/dist/Assets/js/dist/scripts/{oGkpmMft2.chunk.js.map → dmUfJoJz2.chunk.js.map} +1 -1
  285. package/dist/Assets/js/dist/scripts/{DjlPflaG.chunk.js → fapHSEex.chunk.js} +2 -2
  286. package/dist/Assets/js/dist/scripts/{DjlPflaG.chunk.js.map → fapHSEex.chunk.js.map} +1 -1
  287. package/dist/Assets/js/dist/scripts/{CaEXONXp2.chunk.js → jf0e_ii92.chunk.js} +2 -2
  288. package/dist/Assets/js/dist/scripts/{CaEXONXp2.chunk.js.map → jf0e_ii92.chunk.js.map} +1 -1
  289. package/dist/Assets/js/dist/scripts/{Co7TevGA.chunk.js → kp4jXqVv.chunk.js} +2 -2
  290. package/dist/Assets/js/dist/scripts/{Co7TevGA.chunk.js.map → kp4jXqVv.chunk.js.map} +1 -1
  291. package/dist/Assets/js/dist/scripts/lAvSm0ti.chunk.js +2 -0
  292. package/dist/Assets/js/dist/scripts/lAvSm0ti.chunk.js.map +1 -0
  293. package/dist/Assets/js/dist/scripts/{Dmf5vYc42.chunk.js → n7lzp_Mc2.chunk.js} +2 -2
  294. package/dist/Assets/js/dist/scripts/{Dmf5vYc42.chunk.js.map → n7lzp_Mc2.chunk.js.map} +1 -1
  295. package/dist/Assets/js/dist/scripts/{CG9yCT4r2.chunk.js → nvtWO4PW2.chunk.js} +2 -2
  296. package/dist/Assets/js/dist/scripts/{CG9yCT4r2.chunk.js.map → nvtWO4PW2.chunk.js.map} +1 -1
  297. package/dist/Assets/js/dist/scripts/{CACu0hGi2.chunk.js → oYKM19q12.chunk.js} +2 -2
  298. package/dist/Assets/js/dist/scripts/{CACu0hGi2.chunk.js.map → oYKM19q12.chunk.js.map} +1 -1
  299. package/dist/Assets/js/dist/scripts/{B5v11U7g.chunk.js → ohTu1tHz.chunk.js} +2 -2
  300. package/dist/Assets/js/dist/scripts/{B5v11U7g.chunk.js.map → ohTu1tHz.chunk.js.map} +1 -1
  301. package/dist/Assets/js/dist/scripts/{BrT-onLe2.chunk.js → uCRnfBEw2.chunk.js} +2 -2
  302. package/dist/Assets/js/dist/scripts/{BrT-onLe2.chunk.js.map → uCRnfBEw2.chunk.js.map} +1 -1
  303. package/dist/Assets/js/dist/scripts/{3XkTogZ22.chunk.js → udVWVmrH2.chunk.js} +2 -2
  304. package/dist/Assets/js/dist/scripts/{3XkTogZ22.chunk.js.map → udVWVmrH2.chunk.js.map} +1 -1
  305. package/dist/Assets/js/dist/scripts/{DW-yUqjB2.chunk.js → v0VARBBE2.chunk.js} +2 -2
  306. package/dist/Assets/js/dist/scripts/{DW-yUqjB2.chunk.js.map → v0VARBBE2.chunk.js.map} +1 -1
  307. package/dist/Assets/js/dist/scripts/{B4lIRWK22.chunk.js → vf9_5VGa2.chunk.js} +2 -2
  308. package/dist/Assets/js/dist/scripts/{B4lIRWK22.chunk.js.map → vf9_5VGa2.chunk.js.map} +1 -1
  309. package/dist/Assets/js/dist/scripts/{pOwOak4Z2.chunk.js → wTEWtWoE2.chunk.js} +2 -2
  310. package/dist/Assets/js/dist/scripts/{pOwOak4Z2.chunk.js.map → wTEWtWoE2.chunk.js.map} +1 -1
  311. package/dist/Assets/js/dist/scripts/{DPYIBfGB.chunk.js → xj8_Pfx7.chunk.js} +2 -2
  312. package/dist/Assets/js/dist/scripts/{DPYIBfGB.chunk.js.map → xj8_Pfx7.chunk.js.map} +1 -1
  313. package/dist/bundles.json +1 -1
  314. package/dist/en.json +1 -1
  315. package/package.json +1 -1
  316. package/dist/Assets/js/dist/scripts/D2iK_uRt.chunk.js +0 -2
  317. package/dist/Assets/js/dist/scripts/DBUreHJA.chunk.js +0 -3
  318. package/dist/Assets/js/dist/scripts/DBUreHJA.chunk.js.map +0 -1
  319. package/dist/Assets/js/dist/scripts/Dh5DbdtP.chunk.js +0 -2
  320. package/dist/Assets/js/dist/scripts/Dh5DbdtP.chunk.js.map +0 -1
  321. package/dist/Assets/js/dist/scripts/DrBVabtm.chunk.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"C99MPG7E.chunk.js","names":[],"sources":["../../../../../../../libs/shared/src/interfaces/models/curated-widget/CuratedWidgetContent.ts","../../../../../../../libs/shared/src/images/svg/widgets/WidgetSeriesSvg.tsx","../../../../../src/shared/constants/DashboardWidgetImageUrls.ts","../../../../../../../libs/shared/src/images/svg/objects/PlaylistSvg.tsx","../../../../../../../libs/shared/src/images/svg/objects/PopcornSvg.tsx","../../../../../../../libs/shared/src/images/svg/objects/QuestionMarkSvg.tsx","../../../../../../../libs/shared/src/images/svg/objects/SpeechSvg.tsx","../../../../../../../libs/shared/src/images/svg/objects/VideoSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetAllVideosSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetAuthorReviewerSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetBecauseYouWatchedSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetBlurbSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetClassificationLatestReleasedVideosSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetCollectionVideosSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetCompanyVideosSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetContinueWatchingSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetCuratedMultimediaSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetLatestReleasedVideosSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetListOfChildrenTopicsSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetNetworkSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetPersonalisedTopicsSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetRecentlyAddedSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetSeasonalClassificationMediaSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetTrendingClassificationsMediaSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetTrendingClassificationsSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetVideosSvg.tsx","../../../../../src/apps/dashboard-editor/components/widget-settings-button/WidgetSettingsButton.tsx","../../../../../src/apps/dashboard-editor/views/widget-settings/widget-settings.module.scss","../../../../../src/apps/dashboard-editor/views/widget-settings/WidgetSettingsView.tsx","../../../../../src/apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader.tsx","../../../../../src/apps/dashboard-editor/flight-requests/AuthorRequests.ts","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-author-reviewer/AddContentAuthorReviewerView.tsx","../../../../../src/apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents.tsx","../../../../../src/apps/dashboard-editor/validation/DashboardWizardValidationSchema.ts","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-blurb/AddContentBlurbHeadingView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-blurb/AddContentBlurbHeroBannerSmallView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-blurb/AddContentBlurbView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-faq/question/AddContentFaqQuestionView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-faq/question-accordion/question-accordion-content.module.scss","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-faq/question-accordion/AddContentFaqQuestionAccordionView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-faq/AddContentFaqView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-feedback/AddContentFeedbackView.tsx","../../../../../src/apps/dashboard-editor/components/wizard/content-cta/DashboardWizardCta.tsx","../../../../../src/apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline.tsx","../../../../../src/apps/dashboard-editor/components/wizard/remove-widget-content/DashboardWizardRemoveWidgetContent.tsx","../../../../../src/apps/dashboard-editor/constants/WidgetContentTableConfig.ts","../../../../../src/apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable.tsx","../../../../../src/apps/dashboard-editor/components/wizard/widget-error-message/WidgetErrorMessage.tsx","../../../../../src/apps/dashboard-editor/utils/DashboardWizardHelper.ts","../../../../../src/apps/dashboard-editor/components/wizard/search-widget-content/mixed-search-result/classification/WidgetClassificationSearchResultItem.tsx","../../../../../src/apps/dashboard-editor/components/wizard/search-widget-content/mixed-search-result/company/WidgetCompanySearchResultItem.tsx","../../../../../src/apps/dashboard-editor/components/wizard/search-widget-content/mixed-search-result/content-partner/widget-video-search-result-item.module.scss","../../../../../src/apps/dashboard-editor/components/wizard/search-widget-content/mixed-search-result/content-partner/WidgetContentPartnerSearchResultItem.tsx","../../../../../src/apps/dashboard-editor/components/wizard/search-widget-content/mixed-search-result/playlist/WidgetPlaylistSearchResultItem.tsx","../../../../../src/apps/dashboard-editor/components/wizard/search-widget-content/mixed-search-result/resource/widget-resource-search-result-item.module.scss","../../../../../src/apps/dashboard-editor/components/wizard/search-widget-content/mixed-search-result/resource/WidgetResourceSearchResultItem.tsx","../../../../../src/apps/dashboard-editor/components/wizard/search-widget-content/mixed-search-result/MixedWidgetContentSearchResultItem.tsx","../../../../../src/apps/dashboard-editor/components/wizard/search-widget-content/search-result-item/widget-content-search-result-item.module.scss","../../../../../src/apps/dashboard-editor/components/wizard/search-widget-content/search-result-item/WidgetContentSearchResultItem.tsx","../../../../../src/apps/dashboard-editor/components/wizard/search-widget-content/search-result-item/WidgetContentSearchResultItemWithLink.tsx","../../../../../src/apps/dashboard-editor/components/wizard/search-widget-content/search-results-with-validation/SearchResultsWithValidation.tsx","../../../../../src/apps/dashboard-editor/views/wizard/search-widget-content/dashboard-wizard-search-widget-content.module.scss","../../../../../src/apps/dashboard-editor/views/wizard/search-widget-content/DashboardWizardSearchWidgetContentView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/add-content-classifications/AddContentChildClassificationsView.tsx","../../../../../src/apps/dashboard-editor/components/wizard/confirm-heading-optional/ConfirmHeadingOptional.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/add-content-classifications/AddContentClassificationsView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/add-content-classifications/AddContentClassificationsContainerView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/add-content-classifications-with-children/AddContentClassificationsWithChildrenView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/add-content-curated-classifications/multiple/AddContentMultipleCuratedClassificationsView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/add-content-curated-classifications/single/AddContentSingleCuratedClassificationsView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/add-content-curated-classifications/AddContentCuratedClassificationsViewContainer.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/add-content-personalised-topics/AddContentPersonalisedTopicsView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/latest-released-videos/AddContentClassificationLatestVideosView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/special-event-classifications/AddContentSpecialEventClassificationsView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/content-partner/add-content-content-partner-video/AddContentContentPartnerVideoView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/content-partner/AddContentCuratedContentPartnersView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/livestreams/add-upcoming-livestreams/AddUpcomingLivestreamsView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/multimedia/add-content-curated-multimedia/AddContentCuratedMultimediaView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/network/add-content-curated-companies/AddContentCuratedCompanies.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/playlists/add-content-curated-playlists/AddContentCuratedPlaylistsView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/presentations/add-content-presentations/AddContentPresentationsView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/search-filter/add-content-ratings/AddContentRatingsView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/series/add-content-curated-series/AddContentCuratedSeriesView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-because-you-watched/AddContentBecauseYouWatchedView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-classification-company-videos/AddContentCompanyClassificationVideosView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-classification-latest-released-video/AddContentClassificationLatestReleasedVideoView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-classification-media/AddContentClassificationMediaView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-company-videos/AddContentCompanyVideos.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-continue-watching/AddContentContinueWatchingView.tsx","../../../../../src/apps/dashboard-editor/hooks/useFetchClassificationMediaMembers.ts","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-curated-media/AddContentMultipleCuratedMediaView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-curated-media/AddContentSingleCuratedMediaView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-curated-media/AddContentCuratedMediaView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-latest-company-video/AddContentLatestCompanyVideo.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-latest-released-videos/AddContentLatestReleasedVideos.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-playlist-media/AddContentPlaylistMediaView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-series-media/AddContentSeriesMediaView.tsx","../../../../../src/apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig.ts"],"sourcesContent":["import { AnyWidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { Author, BaseObject, Series, Video } from 'libs/shared/interfaces';\n\nexport interface AuthorWidgetContent extends BaseObject {\n author: Author;\n reviewer: Author;\n lastUpdated: string;\n datePublished: string;\n}\n\nexport interface Faq extends BaseObject {\n question: string;\n answer: string;\n}\n\nexport type CuratedWidgetContent = AnyWidgetTemplateProps['content'];\n\nexport type VideoWidgetTemplateContent = Video[] | Series[];\n\nexport enum SearchableWidgetTableObjectTypes {\n Video = 'video', // includes video/clip/interactive\n Series = 'series',\n Playlist = 'playlist',\n Classification = 'subject',\n Company = 'company',\n ContentPartner = 'partner_profile'\n}\n","import React from 'react';\n\nexport function WidgetSeriesSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='M4.5 4a.5.5 0 0 0 0 1h16a.5.5 0 0 1 .5.5v12a.5.5 0 0 0 1 0v-12A1.5 1.5 0 0 0 20.5 4zM9 10.26a.256.256 0 0 1 .39-.218l4.482 2.74a.256.256 0 0 1 0 .437L9.39 15.958A.256.256 0 0 1 9 15.739zM18.5 6A1.5 1.5 0 0 1 20 7.5v11a1.5 1.5 0 0 1-1.5 1.5h-15A1.5 1.5 0 0 1 2 18.5v-11A1.5 1.5 0 0 1 3.5 6zm-15 1a.5.5 0 0 0-.5.5v11a.5.5 0 0 0 .5.5h15a.5.5 0 0 0 .5-.5v-11a.5.5 0 0 0-.5-.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import { ImageUrls } from 'shared/constants/ImageUrls';\n\nexport const DashboardWidgetImageUrls = {\n telescope: ImageUrls.Widget.TELESCOPE\n};\n","import React from 'react';\n\nexport function PlaylistSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}\n >\n <path\n fill='currentColor'\n fillRule='evenodd'\n d='M4.989 18.127c0 .489.395.885.884.885h12.253a.884.884 0 0 0 .885-.885V5.873a.884.884 0 0 0-.885-.884H5.873a.884.884 0 0 0-.884.884zM5.773 4h12.453C19.206 4 20 4.793 20 5.773v12.453c0 .98-.794 1.774-1.774 1.774H5.773C4.793 20 4 19.206 4 18.226V5.773C4 4.794 4.793 4 5.773 4m11.115 12.711a.444.444 0 1 0 0-.889h-7.11a.444.444 0 1 0 0 .889zm0-4.089a.444.444 0 1 0 0-.889h-7.11a.444.444 0 1 0 0 .89zM8.508 7.76l-1.073-.643c-.428-.257-.769-.064-.769.428v1.354c0 .493.345.683.77.428l1.072-.644c.428-.256.425-.668 0-.923m0 4-1.073-.643c-.428-.257-.769-.064-.769.428v1.354c0 .493.345.683.77.428l1.072-.644c.428-.256.425-.668 0-.923m0 4-1.073-.643c-.428-.257-.769-.064-.769.428v1.354c0 .493.345.683.77.428l1.072-.644c.428-.256.425-.668 0-.923m8.38-7.048a.444.444 0 1 0 0-.889h-7.11a.444.444 0 1 0 0 .889z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function PopcornSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M19.068 9.688c0-.5-.193-.975-.544-1.337a1.84 1.84 0 0 0-1.33-.57 1.877 1.877 0 0 0-1.922-1.874C15.062 4.849 14.128 4 12.975 4q-.487 0-.938.202A2.3 2.3 0 0 0 11.1 4c-1.154 0-2.087.85-2.298 1.907h-.046A1.877 1.877 0 0 0 6.88 7.78c-1.043 0-1.875.875-1.875 1.907 0 .71-.2-.487 1.733 9.181A1.41 1.41 0 0 0 8.12 20h7.837a1.41 1.41 0 0 0 1.379-1.13c1.934-9.669 1.733-8.473 1.733-9.183m-10.95 9.375a.47.47 0 0 1-.46-.377l-1.612-8.061h2.286l.282 2.82c-.517.394-.796.877-.796 1.399 0 .615.387 1.176 1.096 1.601l.261 2.617zm3.45 0h-1.45l-.219-2.185c.507.16 1.075.26 1.67.295zm-2.812-4.22c0-.663 1.403-1.405 3.281-1.405s3.281.742 3.281 1.406-1.403 1.406-3.28 1.406c-1.879 0-3.282-.742-3.282-1.406m.518-4.218h2.294v1.89c-.753.043-1.463.193-2.062.435zm3.232 1.89v-1.89H14.8l-.232 2.325c-.598-.242-1.309-.392-2.062-.436m1.45 6.547h-1.45v-1.889a7 7 0 0 0 1.67-.295zm2.46-.376a.47.47 0 0 1-.46.377h-1.057l.262-2.618c.708-.425 1.095-.986 1.095-1.601 0-.522-.278-1.005-.795-1.4l.282-2.819h2.285zM5.943 9.688c0-.66.68-1.198 1.348-.87a.469.469 0 0 0 .628-.627.93.93 0 0 1 1.155-1.287.47.47 0 0 0 .628-.462c-.04-.85.645-1.505 1.398-1.505q.363.001.701.197a.47.47 0 0 0 .472 0q.337-.196.702-.197c.75 0 1.438.653 1.397 1.505a.47.47 0 0 0 .629.462.93.93 0 0 1 1.155 1.287.469.469 0 0 0 .627.628c.67-.33 1.348.21 1.348.868z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function QuestionMarkSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M11.646 14.907q.432 0 .639-.271.206-.271.206-.673v-.131q.01-.459.147-.776.138-.318.455-.612t.877-.678a5.8 5.8 0 0 0 1.46-1.397q.57-.788.57-1.874 0-1.14-.546-1.916a3.43 3.43 0 0 0-1.466-1.177A5 5 0 0 0 11.959 5q-1.212 0-2.222.537A3.4 3.4 0 0 0 8.23 7.131q-.12.253-.175.514Q8 7.907 8 8.14a.85.85 0 0 0 .202.584q.202.23.579.23.312 0 .523-.178a1 1 0 0 0 .303-.477q.313-1 .91-1.36t1.387-.36q.66 0 1.198.23.537.228.854.654.317.425.317 1.023 0 .524-.202.902a2.4 2.4 0 0 1-.542.677 9 9 0 0 1-.753.59q-.541.372-.996.808-.455.434-.73.962a2.5 2.5 0 0 0-.276 1.182v.374q0 .411.22.668.221.258.652.258M11.637 19q.487 0 .818-.346t.33-.822q0-.486-.33-.827a1.1 1.1 0 0 0-.818-.341q-.468 0-.803.34a1.14 1.14 0 0 0-.336.828q0 .476.336.822.334.346.803.346'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function SpeechSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M16.657 16.576a1 1 0 0 1 .143-1.024l.076-.094a6.292 6.292 0 1 0-2.12 1.688l.082-.04a1 1 0 0 1 .834-.022l1.473.631zm1.788 1.126c.355.83-.483 1.669-1.313 1.313l-1.848-.792a7.492 7.492 0 1 1 2.524-2.008z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function VideoSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}\n >\n <path\n fill='currentColor'\n fillRule='evenodd'\n d='M5.433 6.767a.444.444 0 0 0-.444.444v9.578c0 .245.199.444.444.444h13.134a.444.444 0 0 0 .445-.444V7.21a.444.444 0 0 0-.445-.444zm13.233-.99c.737 0 1.333.598 1.333 1.334v9.778c0 .736-.596 1.333-1.333 1.333H5.333A1.333 1.333 0 0 1 4 16.89V7.11c0-.736.597-1.333 1.333-1.333zM10.25 9.407a.2.2 0 0 0-.028.101v4.986a.195.195 0 0 0 .297.166l4.079-2.493a.195.195 0 0 0 0-.332l-4.08-2.493a.195.195 0 0 0-.268.065'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetAllVideosSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path d='M20.2829 4C21.2293 4 22 4.74484 22 5.6594V14.3995C22 15.1255 21.522 15.7384 20.8488 15.9646L20.9366 5.74425C20.9366 5.37655 20.6439 5.08427 20.2732 5.08427H6.35122C6.59512 4.45256 7.21951 4 7.95122 4H20.2829ZM18.2244 5.93282C19.1707 5.93282 19.9415 6.67767 19.9415 7.58279V16.3229C19.9512 17.0489 19.4634 17.6618 18.8 17.888L18.8878 7.64879C18.8878 7.29051 18.5951 7.00766 18.2244 7.00766H4.29268C4.53659 6.37596 5.16098 5.93282 5.89268 5.93282H18.2244ZM16.0488 7.9505C16.9951 7.9505 17.7561 8.69534 17.7561 9.6099V18.35C17.7561 19.2646 16.9854 20 16.0488 20H3.70732C2.76098 20 2 19.2552 2 18.35V9.6099C2 8.69534 2.77073 7.9505 3.70732 7.9505H16.0488ZM16.039 9.03477H3.71707C3.34634 9.03477 3.05366 9.31762 3.05366 9.6759V18.284C3.05366 18.6423 3.34634 18.9252 3.71707 18.9252H16.0293C16.4 18.9252 16.6927 18.6423 16.6927 18.284V9.6759C16.7024 9.31762 16.4098 9.03477 16.039 9.03477ZM8.54634 12.3913V15.5687C8.54634 15.7384 8.75122 15.8326 8.88781 15.7384L11.1415 14.145C11.2585 14.0601 11.2585 13.8904 11.1415 13.815L8.87805 12.2216C8.74146 12.1273 8.54634 12.2216 8.54634 12.3913Z'/>\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetAuthorReviewerSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M12 14c-2.074 0-4.149 1.257-5.231 2.651a7 7 0 1 1 10.462 0C16.15 15.257 14.074 14 12 14m0 6a8 8 0 1 0 0-16 8 8 0 0 0 0 16m0-7a3 3 0 1 0 0-6 3 3 0 0 0 0 6'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetBecauseYouWatchedSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props}>\n <path\n d='M4 7.839a.5.5 0 0 1 .5-.5H14a.5.5 0 1 0 0-.998H4.5c-.828 0-1.5.67-1.5 1.498v10.985c0 .827.672 1.498 1.5 1.498h14c1.38 0 2.5-1.118 2.5-2.496v-5.493a.5.5 0 0 0-1 0v5.493c0 .827-.671 1.497-1.5 1.497h-14a.5.5 0 0 1-.5-.499zM10.038 10.464a.26.26 0 0 0-.038.133v5.471a.256.256 0 0 0 .39.218l4.482-2.735a.255.255 0 0 0 0-.437l-4.482-2.735a.256.256 0 0 0-.352.085M18.9 3.8Q19.53 6.67 22.4 7.3Q19.53 7.93 18.9 10.8Q18.27 7.93 15.4 7.3Q18.27 6.67 18.9 3.8Z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetBlurbSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='M18.06 4c.519 0 .94.479.94 1.075v13.85c0 .594-.419 1.075-.94 1.075H5.94c-.519 0-.94-.479-.94-1.075V5.075C5 4.48 5.419 4 5.94 4zM9.256 5H5.882v.184l-.001.1v.418l-.001.175-.001 1.113v1.429l-.001.314v2.024l-.001.352-.001 3.162v.335l-.001 4.386h.105l.08.001h.36l.157.001h.571l.221.001h.741l.27.001h1.174l.313.001h1.63l.332.001 2.61.001h.305l3.362.001h.012v-.184l.001-.1v-.418l.001-.175.001-1.113v-1.429l.001-.314v-2.024l.001-.352.001-3.162v-.335l.001-4.374v-.012h-.105l-.08-.001h-.36l-.157-.001h-.571l-.221-.001h-.741l-.27-.001h-1.174l-.313-.001h-1.63l-.332-.001-2.61-.001zm1.438 8c.238 0 .431.224.431.5s-.193.5-.431.5H8.056c-.238 0-.431-.224-.431-.5s.193-.5.431-.5zm5.198-3c.267 0 .483.224.483.5s-.216.5-.483.5H8.108a.49.49 0 0 1-.483-.5c0-.276.216-.5.483-.5zm0-3c.267 0 .483.224.483.5s-.216.5-.483.5H8.108a.49.49 0 0 1-.483-.5c0-.276.216-.5.483-.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetClassificationLatestReleasedVideosSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 64 65'>\n <path\n fill='currentColor'\n d='M39.482 11.622a2.72 2.72 0 0 0-1.698-1.697.47.47 0 0 1 .002-.897 2.72 2.72 0 0 0 1.697-1.698.469.469 0 0 1 .897.002 2.72 2.72 0 0 0 1.698 1.697.469.469 0 0 1-.003.897 2.72 2.72 0 0 0-1.696 1.698.469.469 0 0 1-.897-.002m1.413-2.145a3.7 3.7 0 0 1-.964-.964 3.7 3.7 0 0 1-.964.964c.378.258.706.586.964.964a3.7 3.7 0 0 1 .964-.964m-30.54 6.84.753.25a.469.469 0 0 1 0 .89l-.753.251a5.11 5.11 0 0 0-3.218 3.218l-.25.754a.469.469 0 0 1-.89 0l-.251-.754a5.11 5.11 0 0 0-3.218-3.218l-.754-.25a.469.469 0 0 1 0-.89l.754-.251a5.11 5.11 0 0 0 3.218-3.218l.25-.754a.469.469 0 0 1 .89 0l.251.754a5.11 5.11 0 0 0 3.218 3.218m-3.914 3.81a6.1 6.1 0 0 1 1.262-1.852 6.1 6.1 0 0 1 1.852-1.262 6.1 6.1 0 0 1-1.852-1.263A6.1 6.1 0 0 1 6.441 13.9 6.1 6.1 0 0 1 5.18 15.75a6.1 6.1 0 0 1-1.851 1.261c.688.301 1.32.732 1.851 1.262a6.1 6.1 0 0 1 1.262 1.852m42.172-5.274c1.385 0 2.508 1.277 2.508 2.866v36.935c0 1.583-1.118 2.866-2.508 2.866H16.295c-1.385 0-2.508-1.277-2.508-2.866V17.72c0-1.583 1.117-2.866 2.508-2.866zm-23.477 2.67-8.997-.003v.032l-.002.46v.266l-.003 1.114v.468l-.003 2.965v.704l-.002 3.107v.84l-.003 5.395v.939l-.003 8.432v.895l-.002 11.695h.032l.248.002h.212l.96.003h.419l1.524.003h.589l1.976.002h.72l3.131.003h.833l4.345.003H32l6.957.002h.815l8.965.003h.031l.001-.032.002-.459v-.267l.002-1.114v-.468l.004-2.965v-.704l.002-3.107v-.84l.003-5.395v-.939l.003-8.432v-.895l.002-11.663v-.032h-.032l-.249-.002h-.212l-.959-.003h-.419l-1.524-.003h-.589l-1.976-.002h-.721l-3.13-.003h-.833l-4.345-.002h-.89l-6.957-.003zm7.692 9.862c.17.083.309.22.392.391l2.27 4.644 5.12.725a.853.853 0 0 1 .473 1.457l-3.715 3.595.892 5.092a.853.853 0 0 1-1.24.9l-4.566-2.422-4.567 2.422a.853.853 0 0 1-1.24-.9l.893-5.092-3.715-3.595a.853.853 0 0 1 .473-1.457l5.119-.725 2.27-4.644a.853.853 0 0 1 1.141-.392m25.643 1.581c.21 0 .389-.139.448-.33a5.11 5.11 0 0 1 3.202-3.204.469.469 0 0 0 .002-.897 5.11 5.11 0 0 1-3.203-3.202.47.47 0 0 0-.897-.002 5.11 5.11 0 0 1-3.203 3.203.47.47 0 0 0-.002.897 5.11 5.11 0 0 1 3.204 3.202.47.47 0 0 0 .449.333m-2.355-3.983a6 6 0 0 0 1.344-1.01 6 6 0 0 0 1.01-1.345 6.046 6.046 0 0 0 2.355 2.355 6 6 0 0 0-1.343 1.011 6 6 0 0 0-1.011 1.344 6 6 0 0 0-1.011-1.344 6 6 0 0 0-1.344-1.01M9.124 48.075a2.72 2.72 0 0 1-1.698-1.697.469.469 0 0 0-.897-.002 2.72 2.72 0 0 1-1.697 1.698.469.469 0 0 0-.002.897 2.72 2.72 0 0 1 1.698 1.697.469.469 0 0 0 .897.002 2.72 2.72 0 0 1 1.697-1.698.469.469 0 0 0 .002-.897m-2.147 1.412a3.7 3.7 0 0 0-.964-.964 3.7 3.7 0 0 0 .964-.964c.258.378.586.706.964.964a3.7 3.7 0 0 0-.964.964m50.449 1.891a2.72 2.72 0 0 0 1.698 1.697.47.47 0 0 1-.002.897 2.72 2.72 0 0 0-1.697 1.698.469.469 0 0 1-.897-.002 2.72 2.72 0 0 0-1.698-1.697.469.469 0 0 1 .002-.897 2.72 2.72 0 0 0 1.697-1.698.469.469 0 0 1 .897.002m-1.413 2.145c.378.258.706.586.964.964.258-.378.586-.706.964-.964a3.7 3.7 0 0 1-.964-.964 3.7 3.7 0 0 1-.964.964'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetCollectionVideosSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props}>\n <path\n d='M19.568 6.5c0-1.38-1.09-2.5-2.432-2.5H6.433C5.089 4 4 5.12 4 6.5v11C4 18.88 5.09 20 6.433 20h9.243c.269 0 .486-.224.486-.5s-.217-.5-.486-.5H6.433c-.807 0-1.46-.672-1.46-1.5v-11c0-.828.653-1.5 1.46-1.5h10.703c.806 0 1.459.672 1.459 1.5V12c0 .276.218.5.487.5s.486-.224.486-.5zm-4.865 9c0-.276-.218-.5-.486-.5h-3.892c-.269 0-.487.224-.487.5s.218.5.487.5h3.892a.493.493 0 0 0 .486-.5M16.65 12c0-.276-.218-.5-.486-.5h-5.838c-.269 0-.487.224-.487.5s.218.5.487.5h5.838a.493.493 0 0 0 .486-.5m0-3.5c0-.276-.218-.5-.486-.5h-5.838c-.269 0-.487.224-.487.5s.218.5.487.5h5.838a.493.493 0 0 0 .486-.5m-8.156.49c.387-.236.388-.62 0-.856l-1.165-.71c-.387-.236-.703-.06-.703.395v1.487c0 .463.315.631.703.395zm0 3.429c.387-.236.388-.62 0-.856l-1.165-.71c-.387-.237-.703-.06-.703.394v1.487c0 .464.315.632.703.395zm0 2.649-1.165-.71c-.387-.237-.703-.06-.703.394v1.487c0 .464.315.632.703.395l1.165-.71c.387-.236.388-.62 0-.856M16 13.82a.6.6 0 0 1 .6-.6h5.8a.6.6 0 0 1 .6.6v4.24a.6.6 0 0 1-.6.6h-5.8a.6.6 0 0 1-.6-.6zm2.815 1.005a.1.1 0 0 0-.015.052v2.13a.1.1 0 0 0 .152.085l1.743-1.065a.1.1 0 0 0 0-.17l-1.743-1.065a.1.1 0 0 0-.137.033'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetCompanyVideosSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M18.568 6.5c0-1.38-1.09-2.5-2.433-2.5H5.432C4.09 4 3 5.12 3 6.5v11C3 18.88 4.089 20 5.432 20h9.244a.493.493 0 0 0 .486-.5c0-.276-.218-.5-.486-.5H5.432c-.806 0-1.459-.672-1.459-1.5v-11c0-.828.653-1.5 1.46-1.5h10.702c.806 0 1.46.672 1.46 1.5V12c0 .276.217.5.486.5a.493.493 0 0 0 .487-.5zm-4.865 9c0-.276-.218-.5-.487-.5H9.324a.493.493 0 0 0-.486.5c0 .276.218.5.486.5h3.892a.493.493 0 0 0 .487-.5m1.946-3.5c0-.276-.218-.5-.487-.5H9.324a.493.493 0 0 0-.486.5c0 .276.218.5.486.5h5.838a.493.493 0 0 0 .487-.5m0-3.5c0-.276-.218-.5-.487-.5H9.324a.493.493 0 0 0-.486.5c0 .276.218.5.486.5h5.838a.493.493 0 0 0 .487-.5m-8.156.49c.387-.236.388-.62 0-.856l-1.166-.71c-.387-.236-.702-.06-.702.395v1.487c0 .463.314.631.702.395zm0 3.429c.387-.236.388-.62 0-.856l-1.166-.71c-.387-.237-.702-.06-.702.394v1.487c0 .464.314.632.702.395zm0 2.649-1.166-.71c-.387-.237-.702-.06-.702.394v1.487c0 .464.314.631.702.395l1.166-.71c.387-.236.388-.62 0-.856M18.5 19.5a3 3 0 1 0 0-6 3 3 0 0 0 0 6m-.7-4.123q0-.028.015-.052a.1.1 0 0 1 .136-.033l1.744 1.065a.1.1 0 0 1 0 .17l-1.744 1.065a.1.1 0 0 1-.151-.084z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetContinueWatchingSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props}>\n <path\n d='M22.334 7.333a3.333 3.333 0 1 0-6.667 0 3.333 3.333 0 0 0 6.667 0M18.979 5.62c.158 0 .224.128.224.286v1.31l1.065 1.107c.11.113.236.292.125.404-.112.111-.292.07-.404-.042l-1.152-1.151c-.053-.054-.124-.125-.122-.2l.041-1.428c.005-.158.066-.286.223-.286m-8.941 4.844a.26.26 0 0 0-.038.133v5.471a.256.256 0 0 0 .39.218l4.482-2.735a.255.255 0 0 0 0-.437l-4.482-2.735a.256.256 0 0 0-.352.085M4 7.839a.5.5 0 0 1 .5-.5H14a.5.5 0 1 0 0-.998H4.5c-.828 0-1.5.67-1.5 1.498v10.985c0 .827.672 1.498 1.5 1.498h14c1.38 0 2.5-1.118 2.5-2.496v-5.493a.5.5 0 0 0-1 0v5.493c0 .827-.671 1.497-1.5 1.497h-14a.5.5 0 0 1-.5-.499z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetCuratedMultimediaSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M20.5 5.5A1.5 1.5 0 0 0 19 4h-7a1.5 1.5 0 0 0-1.5 1.5v5H5a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V16h3a1.5 1.5 0 0 0 1.5-1.5zm-5.5 5h-3.5v-5A.5.5 0 0 1 12 5h7a.5.5 0 0 1 .5.5v9a.5.5 0 0 1-.5.5h-3v-3.5a1 1 0 0 0-1-1m-10 9v-8h10v8zm8-13a.5.5 0 0 0 0 1h5a.5.5 0 0 0 0-1zm-.5 3A.5.5 0 0 1 13 9h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5m-3.833 4.043q0-.05.025-.095a.164.164 0 0 1 .234-.06l2.989 1.956a.19.19 0 0 1 0 .312l-2.989 1.957a.16.16 0 0 1-.089.026c-.094 0-.17-.081-.17-.182z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetLatestReleasedVideosSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props}>\n <path\n d='M4 6.5a.5.5 0 0 1 .5-.5h15a.5.5 0 0 1 .5.5v11a.5.5 0 0 1-.5.5h-15a.5.5 0 0 1-.5-.5zm17 0A1.5 1.5 0 0 0 19.5 5h-15A1.5 1.5 0 0 0 3 6.5v11A1.5 1.5 0 0 0 4.5 19h15a1.5 1.5 0 0 0 1.5-1.5zm-9 2.167a3.333 3.333 0 1 1 0 6.666 3.333 3.333 0 0 1 0-6.666m.202 1.905c0-.158-.065-.286-.223-.286s-.218.128-.223.285L11.715 12c-.003.074.069.146.122.2l1.152 1.15c.111.112.292.154.403.042s-.015-.29-.124-.404l-1.065-1.106z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetListOfChildrenTopicsSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props}>\n <path\n d='M4 3.5a.5.5 0 0 1 .5-.5h14A1.5 1.5 0 0 1 20 4.5v12a.5.5 0 0 1-1 0v-12a.5.5 0 0 0-.5-.5h-14a.5.5 0 0 1-.5-.5M17.06 5c.519 0 .94.479.94 1.075v13.85c0 .594-.419 1.075-.94 1.075H4.94c-.519 0-.94-.479-.94-1.075V6.075C4 5.48 4.419 5 4.94 5zM8.256 6H4.882v.184l-.001.1v.418l-.001.175-.001 1.113v1.429l-.001.314v2.024l-.001.352-.001 3.162v.335l-.001 4.386h.105l.08.001h.36l.157.001h.571l.221.001h.741l.27.001h1.174l.313.001h1.63l.332.001 2.61.001h.305l3.362.001h.012v-.184l.001-.1v-.418l.001-.175.001-1.113v-1.429l.001-.314v-2.024l.001-.352.001-3.162v-.335l.001-4.374v-.012h-.105l-.08-.001h-.36l-.157-.001h-.571l-.221-.001h-.741l-.27-.001h-1.174l-.313-.001h-1.63l-.332-.001-2.61-.001zm2.884 3.7a.32.32 0 0 1 .147.146l.852 1.742 1.92.271a.32.32 0 0 1 .177.547l-1.393 1.348.334 1.91a.32.32 0 0 1-.464.337L11 15.093 9.287 16a.32.32 0 0 1-.464-.338l.334-1.91-1.393-1.347a.32.32 0 0 1 .178-.547l1.92-.271.85-1.742a.32.32 0 0 1 .428-.147'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetNetworkSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='M4.98 12a7.02 7.02 0 1 1 14.04 0 7.02 7.02 0 0 1-14.04 0M12 4a8 8 0 0 0-.054 16l.054.003h7.51a.49.49 0 0 0 0-.98h-3.676A8 8 0 0 0 12 4m-.326 8a.326.326 0 1 1 .652 0 .326.326 0 0 1-.652 0M12 10.692a1.306 1.306 0 1 0 0 2.612 1.306 1.306 0 0 0 0-2.612m0-3.918a.98.98 0 1 0 0 1.959.98.98 0 0 0 0-1.96m-1.96.98a1.96 1.96 0 1 1 3.92 0 1.96 1.96 0 0 1-3.92 0m-3.008 2.63a.98.98 0 0 1 1.864.603.98.98 0 0 1-1.864-.604M8.57 8.823a1.96 1.96 0 0 0-1.212 3.727A1.96 1.96 0 0 0 8.57 8.823m.143 6.033a.981.981 0 1 0 1.59 1.152.981.981 0 0 0-1.59-1.152m-.793-.575a1.961 1.961 0 0 1 3.174 2.302v.001a1.96 1.96 0 0 1-2.738.436v-.001a1.96 1.96 0 0 1-.436-2.737zm6.002.357a.98.98 0 1 1 1.15 1.59.98.98 0 1 1-1.15-1.59m2.16-.358a1.96 1.96 0 1 0-3.172 2.304 1.96 1.96 0 0 0 2.738.436l.001-.002a1.96 1.96 0 0 0 .434-2.737zm.886-3.895a.98.98 0 0 0-1.864.603.98.98 0 0 0 1.864-.604M15.43 8.823a1.96 1.96 0 0 1 1.212 3.727 1.96 1.96 0 0 1-2.47-1.258 1.96 1.96 0 0 1 1.258-2.469'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetPersonalisedTopicsSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props}>\n <path\n d='M5 7a.5.5 0 0 1 .5-.5H12a.5.5 0 0 0 0-1H5A1 1 0 0 0 4 6.5V20a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-8.5a.5.5 0 0 0-1 0V19.5a.5.5 0 0 1-.5.5H5.5a.5.5 0 0 1-.5-.5zM11.287 10.322a.32.32 0 0 0-.574 0l-.852 1.742-1.92.271a.32.32 0 0 0-.177.547l1.393 1.348-.334 1.91a.32.32 0 0 0 .464.337L11 15.569l1.713.908a.32.32 0 0 0 .464-.338l-.334-1.91 1.393-1.347a.32.32 0 0 0-.178-.547l-1.92-.271zM16.9 9.35l-2.4-2.48a1.6 1.6 0 0 1 2.4-2.09 1.6 1.6 0 0 1 2.4 2.09z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetRecentlyAddedSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='M18.14 4.7a.32.32 0 0 1 .147.146l.852 1.742 1.92.271a.32.32 0 0 1 .177.547l-1.393 1.348.334 1.91a.32.32 0 0 1-.464.337L18 10.093 16.287 11a.32.32 0 0 1-.464-.338l.334-1.91-1.393-1.347a.32.32 0 0 1 .178-.547l1.92-.271.85-1.742a.32.32 0 0 1 .428-.147m-9.102 6.427a.26.26 0 0 0-.038.134v5.478a.256.256 0 0 0 .39.219l4.482-2.74a.256.256 0 0 0 0-.436l-4.483-2.74a.256.256 0 0 0-.351.085M3 8.5a.5.5 0 0 1 .5-.5H13a.5.5 0 0 0 0-1H3.5A1.5 1.5 0 0 0 2 8.5v11A1.5 1.5 0 0 0 3.5 21h14a2.5 2.5 0 0 0 2.5-2.5V13a.5.5 0 0 0-1 0v5.5a1.5 1.5 0 0 1-1.5 1.5h-14a.5.5 0 0 1-.5-.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetSeasonalClassificationMediaSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n fillRule='evenodd'\n d='M19 5.075C19 4.479 18.579 4 18.06 4H5.94C5.42 4 5 4.481 5 5.075v13.85c0 .596.421 1.075.94 1.075h12.12c.521 0 .94-.481.94-1.075zM5.882 5h3.374l.305.001 2.61.001h.333l1.63.001h1.486l.27.001h.74l.222.001h.571l.158.001h.36l.079.001h.093l.012.001v4.386l-.001.335-.001 3.162v.352l-.001 2.024v1.484l-.001.26-.001 1.112v.593l-.001.1v.172l-.001.012h-3.374l-.305-.001-2.61-.001h-.333l-1.63-.001H8.38l-.27-.001h-.74l-.222-.001h-.571l-.158-.001h-.36l-.079-.001h-.093l-.012-.001v-4.386l.001-.335.001-3.162v-.352l.001-2.024v-1.48l.001-.263.001-1.113v-.593l.001-.1v-.172zm8.322 5.041c.732-.25 1.502.18 1.728.91.234.738-.155 1.546-.88 1.786-.412.14-1.068.146-1.52.05.498.237.981.643 1.204.96.448.635.31 1.517-.306 1.983a1.34 1.34 0 0 1-1.917-.32c-.22-.309-.445-.898-.511-1.462-.07.564-.296 1.153-.515 1.466-.44.635-1.301.775-1.917.316a1.454 1.454 0 0 1-.306-1.983c.223-.317.706-.723 1.207-.964-.544.116-1.17.074-1.523-.046-.725-.24-1.114-1.047-.88-1.786.227-.733.996-1.158 1.732-.91.358.115.88.46 1.252.88-.268-.499-.424-1.117-.424-1.501 0-.784.615-1.42 1.374-1.42.755 0 1.37.636 1.37 1.42 0 .38-.156.995-.42 1.495.375-.417.897-.759 1.252-.874m-2.815 2.523c.24.54.98.537 1.221.004a.72.72 0 0 0-.15-.805.653.653 0 0 0-.917-.004c-.238.228-.265.591-.153.805'\n clipRule='evenodd'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTrendingClassificationsMediaSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n fillRule='evenodd'\n d='M18.14 4.033a.32.32 0 0 1 .147.146l.852 1.742 1.92.272a.32.32 0 0 1 .177.546l-1.393 1.348.334 1.91a.32.32 0 0 1-.464.337L18 9.426l-1.713.908a.32.32 0 0 1-.464-.337l.334-1.91-1.393-1.348a.32.32 0 0 1 .178-.546l1.92-.272.85-1.742a.32.32 0 0 1 .428-.146m-5.461 6.5c-.217 0-.393.192-.393.429s.176.428.393.428h1.408l-2.783 3.037-1.687-1.84a.37.37 0 0 0-.556 0l-2.946 3.215a.46.46 0 0 0 0 .606.37.37 0 0 0 .556 0l2.668-2.911 1.687 1.84a.37.37 0 0 0 .555 0l3.062-3.34v1.536c0 .237.176.429.393.429s.393-.192.393-.429v-2.571c0-.237-.176-.429-.393-.429zM3 7.833a.5.5 0 0 1 .5-.5H13a.5.5 0 0 0 0-1H3.5a1.5 1.5 0 0 0-1.5 1.5v11a1.5 1.5 0 0 0 1.5 1.5h15c.874 0 1.5-.833 1.5-1.5v-6.5a.5.5 0 0 0-1 0v6.5c0 .167-.3.5-.5.5h-15a.5.5 0 0 1-.5-.5z'\n clipRule='evenodd'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTrendingClassificationsSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n fillRule='evenodd'\n d='M18.06 4c.519 0 .94.479.94 1.075v13.85c0 .594-.419 1.075-.94 1.075H5.94c-.519 0-.94-.479-.94-1.075V5.075C5 4.48 5.419 4 5.94 4zm-.12 1.007L5.882 5v.184l-.007 13.808h.105l.08.001L18.118 19v-.184l.007-13.808h-.105zM16.326 9h-2.357c-.217 0-.393.192-.393.429 0 .236.176.428.393.428h1.408l-2.783 3.037-1.687-1.84a.37.37 0 0 0-.556 0l-2.946 3.214a.46.46 0 0 0 0 .606.37.37 0 0 0 .556 0l2.668-2.91 1.687 1.839a.37.37 0 0 0 .555 0l3.062-3.34V12c0 .237.176.428.393.428s.393-.191.393-.428V9.429c0-.237-.176-.429-.393-.429'\n clipRule='evenodd'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetVideosSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M18 4a3.333 3.333 0 1 0 0 6.667A3.333 3.333 0 0 0 18 4m-.75 2.245q0-.027.015-.052a.1.1 0 0 1 .136-.033l1.744 1.065a.1.1 0 0 1 0 .17L17.4 8.46a.1.1 0 0 1-.151-.085zm-8.212 4.218a.26.26 0 0 0-.038.133v5.471a.256.256 0 0 0 .39.218l4.482-2.735a.255.255 0 0 0 0-.437L9.39 10.379a.256.256 0 0 0-.351.085M3.5 7.34a.5.5 0 0 0-.5.5v10.984a.5.5 0 0 0 .5.5h14c.828 0 1.5-.671 1.5-1.498v-5.493a.5.5 0 0 1 1 0v5.493a2.5 2.5 0 0 1-2.5 2.496h-14c-.828 0-1.5-.67-1.5-1.498V7.84c0-.827.672-1.498 1.5-1.498H13a.5.5 0 1 1 0 .999z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { CogSvg } from 'libs/shared/images/svg/objects/CogSvg';\n\ninterface WidgetSettingsButtonProps {\n onClickSettings?: () => void;\n}\n\nexport function WidgetSettingsButton(props: WidgetSettingsButtonProps): JSX.Element {\n return (\n <IconButton\n svg={CogSvg}\n onClick={props.onClickSettings}\n className='btn btn-outline-dark'\n >\n Settings\n </IconButton>\n );\n}\n","\n:local {\n .description {\n width: 90%;\n }\n}","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } 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 { ToggleSwitch } from 'libs/shared/components/toggle-switch/ToggleSwitch';\nimport { PresentationStatus } from 'libs/shared/enums/PresentationStatus';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { CuratedWidget, PopupViewProps, Presentation } from 'libs/shared/interfaces';\n\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\n\nimport { WidgetSettingsModule } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\n\nimport styles from './widget-settings.module.scss';\n\ninterface WidgetSettingsViewProps extends PopupViewProps {\n modules: WidgetSettingsModule[];\n}\n\nexport function WidgetSettingsView(props: WidgetSettingsViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<CuratedWidget>();\n\n const curriculumPresentations = Flight.useBasicFetch<Presentation[]>(\n props.modules.includes('curriculum-filter') &&\n SubjectRequests.presentations(PresentationType.Curriculum)\n );\n\n function isLoading(): boolean {\n if (props.modules.includes('curriculum-filter') && !curriculumPresentations.hasCompleted)\n return true;\n\n return false;\n }\n\n function onClickCancel(): void {\n // Reset the form to it's initial state on cancel\n formikProps.setFieldValue('metadata', {\n ...formikProps.values.metadata,\n hideWidgetHeading: formikProps.initialValues.metadata.hideWidgetHeading,\n hideWidgetDescription: formikProps.initialValues.metadata.hideWidgetDescription,\n hideObjectTitle: formikProps.initialValues.metadata.hideObjectTitle,\n hideObjectSeries: formikProps.initialValues.metadata.hideObjectSeries\n });\n\n props.closePopup();\n }\n\n function onToggleHeadingVisibility(): void {\n formikProps.setFieldValue('metadata', {\n ...formikProps.values.metadata,\n hideWidgetHeading: !formikProps.values.metadata?.hideWidgetHeading,\n hideWidgetDescription: !formikProps.values.metadata?.hideWidgetDescription\n });\n\n formikProps.setTouched({\n ...formikProps.touched,\n metadata: {\n hideWidgetHeading: true,\n hideWidgetDescription: true\n }\n });\n }\n\n function onToggleMediaTitleVisibility(): void {\n formikProps.setFieldValue('metadata', {\n ...formikProps.values.metadata,\n hideObjectTitle: !formikProps.values.metadata?.hideObjectTitle,\n hideObjectSeries: !formikProps.values.metadata?.hideObjectSeries\n });\n\n formikProps.setTouched({\n ...formikProps.touched,\n metadata: {\n hideObjectTitle: true,\n hideObjectSeries: true\n }\n });\n }\n\n function onSelectCurriculum(event: React.ChangeEvent<HTMLSelectElement>): void {\n const id = event.target.value.toString();\n formikProps.setFieldValue('curriculumIds', id ? [id] : []);\n }\n\n const publishedCurriculums = curriculumPresentations.data?.filter(c => c.status === PresentationStatus.Published);\n\n const selectedCurriculum = publishedCurriculums?.find(c => {\n return !!formikProps.values.curriculumIds?.find(id => id.toString() === c.id.toString());\n });\n\n return (\n <Popup\n title='Widget settings'\n closePopup={props.closePopup}\n size='md'\n showLoadingSpinner={isLoading()}\n >\n {props.modules.includes('heading-visibility') && (\n <FormField\n name='hideWidgetHeadingAndDescription'\n id='hideWidgetHeadingAndDescription'\n >\n {() => (\n <div>\n <div className='d-flex align-items-center justify-content-between mb-1'>\n <div className='fw-semibold'>Heading and description</div>\n <ToggleSwitch\n onClick={onToggleHeadingVisibility}\n on={!formikProps.values.metadata?.hideWidgetHeading}\n />\n </div>\n\n <div className={styles.description}>\n The heading and description is shown to provide more information on the widget’s function.\n </div>\n </div>\n )}\n </FormField>\n )}\n\n {props.modules.includes('media-title-visibility') && (\n <FormField\n name='hideVideoTitleAndSeries'\n id='hideVideoTitleAndSeries'\n >\n {() => (\n <div>\n <div className='d-flex align-items-center justify-content-between mb-1'>\n <div className='fw-semibold'>Series and video title</div>\n <ToggleSwitch\n onClick={onToggleMediaTitleVisibility}\n on={!formikProps.values.metadata?.hideObjectTitle}\n />\n </div>\n\n <div className={styles.description}>\n Display the video’s series (where applicable) and video title beneath the thumbnail.\n Hidden series and video titles are only appropriate on movie thumbnails that are clearly titled.\n </div>\n </div>\n )}\n </FormField>\n )}\n\n {props.modules.includes('curriculum-filter') && (\n <div className='pb-3'>\n <FormField\n label='Display widget for'\n name='curriculumFilter'\n id='curriculumFilter'\n as='select'\n onChange={onSelectCurriculum}\n value={formikProps.values.curriculumIds?.length ? ArrayHelper.first(formikProps.values.curriculumIds).toString() : ''}\n >\n <option value=''>Any curriculum / standard</option>\n {publishedCurriculums?.map((presentation: Presentation) => (\n <option key={presentation.id} value={presentation.id.toString()}>{presentation.name}</option>\n ))}\n </FormField>\n\n <div className='mt-n2'>\n This widget will appear for teachers with <strong>{selectedCurriculum?.id ? selectedCurriculum.name : 'Any curriculum / standard'}</strong>\n </div>\n </div>\n )}\n\n <PopupButtons>\n <PopupButtons.Cancel onClick={onClickCancel} />\n <PopupButtons.Submit\n variant='dark'\n text='Save changes'\n onClick={props.closePopup}\n disabled={false}\n />\n </PopupButtons>\n </Popup>\n );\n}\n","import React from 'react';\n\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { CuratedDashboard, CuratedWidget, Tag } from 'libs/shared/interfaces';\n\nimport { DashboardHelper } from 'shared/utils/DashboardHelper';\n\nimport { WidgetSettingsButton } from 'apps/dashboard-editor/components/widget-settings-button/WidgetSettingsButton';\nimport { WidgetSettingsView } from 'apps/dashboard-editor/views/widget-settings/WidgetSettingsView';\n\nexport type WidgetSettingsModule = 'curriculum-filter' | 'heading-visibility' | 'media-title-visibility';\n\ninterface WidgetPreviewHeaderProps {\n dashboard: CuratedDashboard;\n classificationTags?: Tag[];\n widgetTypeId?: WidgetTypeId;\n}\n\nWidgetPreviewHeader.defaultProps = {\n classificationTags: []\n};\n\nexport function WidgetPreviewHeader(props: WidgetPreviewHeaderProps): JSX.Element {\n const [ showSettings, setShowSettings ] = React.useState(false);\n\n const formikProps = useFormikContextWrapper<CuratedWidget>();\n\n const settingsModules = DashboardHelper.getWidgetSettingsModules(\n props.dashboard,\n props.classificationTags,\n props.widgetTypeId\n );\n\n React.useEffect(() => {\n if (formikProps.values.id)\n return;\n\n if (!settingsModules.includes('media-title-visibility'))\n return;\n\n /**\n * Any widget that uses these settings will have the media titles off by default\n */\n formikProps.setFieldValue('metadata', {\n ...formikProps.values.metadata,\n hideObjectTitle: true,\n hideObjectSeries: true\n });\n\n formikProps.setTouched({\n ...formikProps.touched,\n metadata: {\n hideObjectTitle: true,\n hideObjectSeries: true\n }\n });\n }, [ formikProps.values.id, props.dashboard, props.classificationTags ]);\n\n return (\n <>\n <div className='d-flex align-items-center justify-content-between mb-3 mt-4'>\n <h2 className='h5 mb-0'>Widget Preview</h2>\n\n {!!settingsModules.length && (\n <WidgetSettingsButton onClickSettings={() => setShowSettings(true)}/>\n )}\n </div>\n\n {showSettings && (\n <WidgetSettingsView\n modules={settingsModules}\n closePopup={() => setShowSettings(false)}\n />\n )}\n </>\n );\n}\n","import { Flight } from 'libs/common/react/index';\n\nexport const AuthorRequests = {\n authors(): Flight.Request {\n return {\n url: `/api/discover/v1/authors`,\n key: `authors`\n };\n }\n};\n","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { AuthorCollection, AuthorReviewerWidgetData, CuratedWidget } from 'libs/shared/interfaces';\n\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { AuthorRequests } from 'apps/dashboard-editor/flight-requests/AuthorRequests';\n\nexport type AuthorReviewerWidget = CuratedWidget<AuthorReviewerWidgetData, any>;\n\nexport function AddContentAuthorReviewerView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<AuthorReviewerWidget>();\n\n const authors = Flight.useBasicFetch<AuthorCollection>(AuthorRequests.authors());\n\n React.useEffect(() => {\n if (formikProps.values.data?.classificationId)\n return;\n\n const data: AuthorReviewerWidgetData = {\n classificationId: props.classification?.id,\n presentationId: props.presentation.id,\n authorId: '',\n reviewerId: ''\n };\n\n formikProps.setFieldValue('data', data);\n }, []);\n\n if (!authors.hasCompleted)\n return <></>;\n\n return (\n <>\n <FormField<AuthorReviewerWidget>\n as='select'\n label='Author'\n name='data.authorId'\n className={!formikProps.values.data.authorId ? 'text-secondary' : ''}\n showRequiredStar\n >\n <option className='text-secondary' value=''>Select an author</option>\n {authors.data?.data?.map(author => {\n return (\n <option\n key={author.id}\n value={author.id}\n className='text-dark'\n >\n {author.firstName} {author.lastName}\n </option>\n );\n })}\n </FormField>\n\n <FormField<AuthorReviewerWidget>\n as='select'\n label='Reviewer'\n name='data.reviewerId'\n className={!formikProps.values.data.reviewerId ? 'text-secondary' : ''}\n showRequiredStar\n >\n <option className='text-secondary' value=''>Select a reviewer</option>\n {authors.data?.data?.map(reviewer => {\n return (\n <option\n key={reviewer.id}\n value={reviewer.id}\n className='text-dark'\n >\n {reviewer.firstName} {reviewer.lastName}\n </option>\n );\n })}\n </FormField>\n\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n description={formikProps.values.description}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n id={formikProps.values.id}\n name={formikProps.values.name}\n content={props.content}\n imageCdnUrl={props.imageCdnUrl}\n audiences={props.audiences}\n metadata={formikProps.values.metadata}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n isEditing\n />\n </>\n );\n}\n","import React from 'react';\nimport { FormikContextType } from 'formik';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { CuratedDashboard, CuratedWidget, DashboardTargetType } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nfunction onChange(formikProps: FormikContextType<CuratedWidget>) {\n const isChecked = formikProps.values.metadata?.showInTableOfContents;\n\n formikProps.setFieldValue('metadata', {\n ...formikProps.values.metadata,\n showInTableOfContents: !isChecked\n });\n}\n\ninterface ToggleShowInTableOfContentsProps {\n dashboard: CuratedDashboard;\n checkedByDefault?: boolean;\n}\n\nexport function ToggleShowInTableOfContents<T>(props: ToggleShowInTableOfContentsProps): JSX.Element {\n const formikProps = useFormikContextWrapper<CuratedWidget>();\n const [ isCheckedBeforeEdit, setIsCheckedBeforeEdit ] = React.useState<boolean>();\n\n const widgetHeading = formikProps.values.name;\n\n const isChecked = !!formikProps.values.metadata?.showInTableOfContents;\n\n function getIsCheckboxDisabled() {\n if (isChecked)\n return false;\n\n if (isCheckedBeforeEdit && widgetHeading)\n return false;\n\n return !widgetHeading;\n }\n\n function getCheckboxAppLinkTextTooltip() {\n if (!widgetHeading)\n return 'Please enter a heading below to add to Table of Contents';\n\n return '';\n }\n\n React.useEffect(() => {\n if (props.checkedByDefault) {\n formikProps.setFieldValue('metadata', {\n ...formikProps.values.metadata,\n showInTableOfContents: true\n });\n }\n\n setIsCheckedBeforeEdit(true);\n }, []);\n\n React.useEffect(() => {\n if (!formikProps.values.metadata?.showInTableOfContents)\n return;\n \n if (widgetHeading || props.checkedByDefault)\n return;\n \n formikProps.setFieldValue('metadata', {\n ...formikProps.values.metadata,\n showInTableOfContents: false,\n tocIndentation: 0\n });\n }, [ widgetHeading, formikProps.values.metadata?.showInTableOfContents ]);\n\n React.useEffect(() => {\n if (!formikProps.values.metadata?.showInTableOfContents && isCheckedBeforeEdit) {\n formikProps.setFieldValue('metadata', {\n ...formikProps.values.metadata,\n tocIndentation: 0\n });\n }\n }, [ formikProps.values.metadata?.showInTableOfContents, isCheckedBeforeEdit ]);\n\n const isTopicDirectory = CuratedDashboardHelper.isType(props.dashboard, DashboardTargetType.ClassificationDirectory);\n\n return (\n <Tooltip title={getCheckboxAppLinkTextTooltip()} spanHack spanHackClassName=''>\n <div className='d-inline-block'>\n <FormField<T>\n id='metadata.showInTableOfContents'\n name='metadata.showInTableOfContents'\n type='checkbox'\n label={`Include widget into this dashboard's table of contents`}\n onChange={() => (onChange(formikProps))}\n disabled={getIsCheckboxDisabled()}\n checkboxLabelFontWeight='normal'\n />\n {/* only show this if this is a topic directory dashboard for now */}\n {isTopicDirectory && (\n <FormField<T>\n id='metadata.tocIndentation'\n name='metadata.tocIndentation'\n type='number'\n max={2}\n min={0}\n label={`Indent widget's heading in the table of contents`}\n disabled={!formikProps.values.metadata.showInTableOfContents}\n checkboxLabelFontWeight='normal'\n />\n )}\n </div>\n </Tooltip>\n );\n}\n","import * as Yup from 'yup';\n\nimport { EnvironmentVariables } from 'libs/common/backbone/services/EnvironmentVariables';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { DashboardTargetType } from 'libs/shared/interfaces';\n\nimport { DashboardHelper } from 'shared/utils/DashboardHelper';\n\nexport const WidgetValidationConstants = {\n MAX_NAME_LENGTH: 80,\n MAX_DESCRIPTION_LENGTH: 250\n};\n\nexport function isWidgetHeadingRequired(\n widgetTypeId: WidgetTypeId,\n templateId: WidgetTemplate,\n isOptional?: boolean\n): boolean {\n if (isOptional)\n return false;\n\n if (widgetTypeId === WidgetTypeId.Faq && templateId === WidgetTemplate.Question)\n return false;\n\n if (widgetTypeId === WidgetTypeId.BecauseYouWatched)\n return false;\n\n if ([\n WidgetTemplate.ThumbnailFixedListMediaLarge,\n WidgetTemplate.ThumbnailFeaturedMedia,\n WidgetTemplate.ThumbnailHeroMedia,\n WidgetTemplate.PosterSlidingListMedium,\n WidgetTemplate.AuthorReviewer\n ].includes(templateId)) {\n return false;\n }\n\n return true;\n}\n\nfunction getMinMaxValidation(min: number, max: number, objectNameSingle: string, objectNamePlural: string): any {\n /**\n * Because our staging data in topics isn't great, we usually can't meet the minimum\n * content requirements for these widget types. So in dev only, we support any amount.\n */\n if (EnvironmentVariables.isDevelopment) {\n min = 1;\n max = Infinity;\n }\n\n return Yup.array()\n .test({\n message: `Widget must have at least ${min} ${min === 1 ? objectNameSingle : objectNamePlural}.`,\n test: arr => {\n return !!arr && arr.length >= min;\n }\n })\n .test({\n message: `Widget cannot have more than ${max} ${max === 1 ? objectNameSingle : objectNamePlural}.`,\n test: arr => {\n return !!arr && arr.length <= max;\n }\n });\n}\n\nfunction getDataSchema(\n widgetTypeId: WidgetTypeId,\n templateId: WidgetTemplate,\n target?: DashboardTargetType\n): HashObject {\n const { min, max } = DashboardHelper.getContentGuidelineMinMax(widgetTypeId, templateId, target);\n\n switch (widgetTypeId) {\n case WidgetTypeId.CuratedMedia: {\n return {\n objectIds: getMinMaxValidation(min, max, 'video', 'videos')\n };\n }\n\n case WidgetTypeId.CompanyClassificationVideos: {\n return {\n companyId: Yup.string().required('Please select a company.')\n };\n }\n\n case WidgetTypeId.CuratedMultimedia: {\n return {\n multimedias: getMinMaxValidation(min, max, 'item', 'items')\n };\n }\n\n case WidgetTypeId.ClassificationLatestReleasedVideosV2:\n case WidgetTypeId.LatestReleasedClassifications: {\n if (target === DashboardTargetType.Classification) {\n return {\n classifications: getMinMaxValidation(min, max, 'parent topic', 'parent topics')\n };\n }\n\n return {};\n }\n\n case WidgetTypeId.TrendingClassifications:\n case WidgetTypeId.SeasonalClassificationMedia:\n case WidgetTypeId.TrendingClassificationsMedia: {\n return {\n classifications: getMinMaxValidation(min, max, 'parent topic', 'parent topics')\n };\n }\n\n case WidgetTypeId.Faq: {\n const questionSchema = Yup.object().shape({\n question: Yup.string().required('Question is required.'),\n answer: Yup.string().required('Answer is required.')\n });\n\n const schema = {\n faqs: Yup.array().of(questionSchema)\n };\n\n if (templateId === WidgetTemplate.Question)\n schema.faqs = schema.faqs.min(1, 'Please add at least one question.');\n else if (templateId === WidgetTemplate.QuestionAccordion)\n schema.faqs = schema.faqs.min(2, 'Please add at least two questions.');\n\n return schema;\n }\n\n case WidgetTypeId.PlaylistMedia: {\n return {\n playlistId: Yup.string()\n .required('Please select a playlist.')\n };\n }\n\n case WidgetTypeId.SeriesMedia: {\n return {\n seriesId: Yup.string()\n .required('Please select a series.'),\n options: Yup.object().shape({\n sort: Yup.string().required('Please select a sort option.'),\n order: Yup.string().required('Please select an order option.')\n })\n };\n }\n\n case WidgetTypeId.ClassificationMedia: {\n return {\n classificationId: Yup.string().required('Please select a topic.')\n };\n }\n\n case WidgetTypeId.CuratedClassifications: {\n return {\n objectIds: getMinMaxValidation(min, max, 'topic', 'topics')\n };\n }\n\n case WidgetTypeId.Classifications: {\n if (target === DashboardTargetType.ClassificationDirectory)\n return {\n classificationId: Yup.string()\n .required('Please select a topic.')\n };\n return {};\n }\n\n case WidgetTypeId.CuratedSeries: {\n return {\n objectIds: getMinMaxValidation(min, max, 'series', 'series')\n };\n }\n\n case WidgetTypeId.CuratedPlaylists: {\n return {\n objectIds: getMinMaxValidation(min, max, 'playlist', 'playlists')\n };\n }\n\n case WidgetTypeId.Ratings: {\n return {\n objectIds: Yup.array().required()\n };\n }\n\n case WidgetTypeId.CuratedCompanies: {\n return {\n objectIds: getMinMaxValidation(min, max, 'company', 'companies')\n };\n }\n\n case WidgetTypeId.AuthorReviewer: {\n return {\n authorId: Yup.string().required('Please select an author.'),\n reviewerId: Yup.string().required('Please select a reviewer.')\n };\n }\n }\n}\n\nfunction getMetadataSchema(widgetTypeId: WidgetTypeId, templateId: WidgetTemplate) {\n switch (widgetTypeId) {\n case WidgetTypeId.Classifications: {\n if (templateId === WidgetTemplate.PosterSlidingListSmall)\n return {\n text: Yup.string().default('').when('imageId', { is: '', then: Yup.string(), otherwise: Yup.string().required('Title of leading poster is required.') }),\n imageId: Yup.string().default('').when('text', { is: '', then: Yup.string(), otherwise: Yup.string().required('Poster image is required.') })\n };\n\n return {};\n }\n\n case WidgetTypeId.LatestReleasedVideos: {\n return {\n imageId: Yup.string().required('Banner image is required.').default('')\n };\n }\n\n case WidgetTypeId.Blurb: {\n if (templateId === WidgetTemplate.HeroBannerSmall) {\n return {\n imageId: Yup.string().required('Banner image is required.').default('')\n };\n }\n\n return {};\n }\n\n default:\n return {};\n }\n}\n\nexport const getDashboardWizardValidationSchema = (\n widgetTypeId: WidgetTypeId,\n templateId: WidgetTemplate,\n target?: DashboardTargetType\n) => {\n const nameRequiredMessage = widgetTypeId === WidgetTypeId.Feedback ? 'Text is required.' : 'Heading is required.';\n\n let nameSchema = Yup.string().when('metadata.headingOptional', {\n is: true,\n then: Yup.string(),\n otherwise: isWidgetHeadingRequired(widgetTypeId, templateId) ?\n Yup.string().required(nameRequiredMessage) :\n Yup.string().default('')\n });\n\n let descriptionSchema = Yup.string().default('');\n\n /**\n * Because this widget type's heading and description is populated from the playlist fields,\n * we don't set max char limits here.\n */\n if (widgetTypeId !== WidgetTypeId.PlaylistMedia) {\n const nameLabel = widgetTypeId === WidgetTypeId.Feedback ? 'Text' : 'Heading';\n\n nameSchema = nameSchema.max(\n WidgetValidationConstants.MAX_NAME_LENGTH,\n () => `${nameLabel} cannot be longer than ${WidgetValidationConstants.MAX_NAME_LENGTH} characters.`\n );\n\n descriptionSchema = descriptionSchema.max(\n WidgetValidationConstants.MAX_DESCRIPTION_LENGTH,\n () => `Description cannot be longer than ${WidgetValidationConstants.MAX_DESCRIPTION_LENGTH} characters.`\n );\n }\n\n const dataSchema = Yup.object().shape(getDataSchema(widgetTypeId, templateId, target));\n const metadataSchema = Yup.object().shape(getMetadataSchema(widgetTypeId, templateId), [[ 'text', 'imageId' ]]);\n\n return Yup.object().shape({\n name: nameSchema,\n description: descriptionSchema,\n data: dataSchema,\n metadata: metadataSchema\n });\n};\n","import React from 'react';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\nimport { BlurbWidget } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-blurb/AddContentBlurbView';\n\nexport function AddContentBlurbHeadingView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<BlurbWidget>();\n\n const isTopicDashboard = CuratedDashboardHelper.isClassificationDashboard(\n CuratedDashboardHelper.getDashboardTargetInfo(props.dashboard)\n );\n\n return (\n <>\n <FormField<BlurbWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar\n showCharacterCounter\n />\n\n {isTopicDashboard && (\n <ToggleShowInTableOfContents<BlurbWidget>\n dashboard={props.dashboard}\n checkedByDefault={!props.isEditing}\n />\n )}\n \n <FormField<BlurbWidget>\n as='textarea'\n rows={3}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n description={formikProps.values.description}\n widgetTypeId={formikProps.values.widgetId}\n metadata={formikProps.values.metadata}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n imageCdnUrl={props.imageCdnUrl}\n content={[]}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { ButtonIcon, HeadingColor, HeadingSize, WIDGET_THEME } from 'libs/shared/constants/WidgetThemingConstants';\nimport { ImageType } from 'libs/shared/enums/Images';\n\nimport { ImageSelect } from 'shared/components';\nimport { Actions, AppChannels } from 'shared/constants';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\nimport { BlurbWidget } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-blurb/AddContentBlurbView';\n\nexport function AddContentBlurbHeroBannerSmallView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<BlurbWidget>();\n\n return (\n <>\n <FormField<BlurbWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar\n showCharacterCounter\n />\n\n <div className='row row-cols-2 mb-1 g-2'>\n <FormField<BlurbWidget>\n label='Heading size'\n name='metadata.theming.headingSize'\n as='select'\n value={formikProps.values.metadata.theming?.headingSize || HeadingSize.H6}\n >\n {WIDGET_THEME.HEADING.SIZES.map(size => <option key={size.value} value={size.value}>{size.name}</option>)}\n </FormField>\n <FormField<BlurbWidget>\n label='Heading colour'\n name='metadata.theming.headingColor'\n as='select'\n value={formikProps.values.metadata.theming?.headingColor || HeadingColor.Dark}\n >\n {WIDGET_THEME.HEADING.COLOR.map(color => <option key={color.value} value={color.value}>{color.name}</option>)}\n </FormField>\n </div>\n\n <ImageSelect\n imageType={ImageType.Banners}\n fieldName='metadata.imageId'\n label='Banner image'\n setSelectedImage={image => {\n formikProps.setFieldValue('metadata', { ...formikProps.values.metadata, imageId: image.id });\n }}\n showRequiredStar\n uploadAppLink={{\n application: AppChannels.DASHBOARD_EDITOR,\n action: Actions.DashboardEditor.ADD_CONTENT_IMAGE_UPLOAD\n }}\n />\n\n <div className='row row-cols-2 g-2'>\n <FormField<BlurbWidget>\n name='metadata.cta.text'\n label='Button label'\n placeholder='Enter a button label...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n />\n <FormField<BlurbWidget>\n name='metadata.cta.href'\n label='Button link'\n placeholder='Enter a button link...'\n />\n <FormField<BlurbWidget>\n label='Button icon'\n name='metadata.cta.icon'\n as='select'\n value={formikProps.values.metadata.cta?.icon || ButtonIcon.NewWindow}\n >\n {WIDGET_THEME.BUTTON.ICONS.map(icon => <option key={icon.value} value={icon.value}>{icon.name}</option>)}\n </FormField>\n </div>\n\n <WidgetPreviewHeader dashboard={props.dashboard} />\n\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n metadata={formikProps.values.metadata}\n imageCdnUrl={props.imageCdnUrl}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n content={[]}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { BlurbWidgetData, CuratedWidget } from 'libs/shared/interfaces';\n\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { AddContentBlurbHeadingView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-blurb/AddContentBlurbHeadingView';\nimport { AddContentBlurbHeroBannerSmallView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-blurb/AddContentBlurbHeroBannerSmallView';\n\nexport type BlurbWidget = CuratedWidget<BlurbWidgetData, any>;\n\nexport function AddContentBlurbView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<BlurbWidget>();\n\n switch (formikProps.values.templateId) {\n case WidgetTemplate.Heading:\n return <AddContentBlurbHeadingView {...props} />;\n case WidgetTemplate.HeroBannerSmall:\n return <AddContentBlurbHeroBannerSmallView {...props} />;\n default:\n return <></>;\n }\n}\n","import React from 'react';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\n\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\n\nimport { FaqWidget } from '../AddContentFaqView';\n\nexport function AddContentFaqQuestionView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<FaqWidget>();\n\n return (\n <>\n {formikProps.values.data.faqs.map((_, index) => {\n return (\n <div key={index}>\n <FormField<FaqWidget>\n name={`data.faqs[${index}].question`}\n label='Question'\n placeholder='Enter a question'\n autoFocus\n showRequiredStar\n />\n <FormField<FaqWidget>\n name={`data.faqs[${index}].answer`}\n label='Answer'\n placeholder='Enter an answer'\n as='textarea'\n rows={15}\n showRequiredStar\n />\n </div>\n );\n })}\n \n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n description={formikProps.values.description}\n widgetTypeId={formikProps.values.widgetId}\n content={formikProps.values.data.faqs}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n metadata={formikProps.values.metadata}\n imageCdnUrl={props.imageCdnUrl}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n </>\n );\n}\n",":local {\n .expander {\n position: absolute;\n top: map-get($spacers, 2);\n left: 0.2rem;\n }\n\n .close {\n position: absolute;\n top: map-get($spacers, 2);\n right: map-get($spacers, 2);\n }\n}","import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { CloseSvg } from 'libs/shared/images/svg/actions/CloseSvg';\nimport { ChevronDownSvg } from 'libs/shared/images/svg/arrows/ChevronDownSvg';\nimport { ChevronRightSvg } from 'libs/shared/images/svg/arrows/ChevronRightSvg';\nimport { CuratedMediaWidget } from 'libs/shared/interfaces';\n\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\n\nimport { FaqWidget } from '../AddContentFaqView';\n\nimport styles from './question-accordion-content.module.scss';\n\nexport function AddContentFaqQuestionAccordionView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<FaqWidget>();\n const [ expandedStates, setExpandedStates ] = React.useState(formikProps.values.data.faqs.map((_, i) => {\n return i === 0;\n }));\n\n function onClickAddAnotherQuestion(): void {\n const currentFaqs = formikProps.values.data.faqs;\n\n const newFaqs = [\n ...currentFaqs,\n {\n question: '',\n answer: ''\n }\n ];\n\n formikProps.setFieldValue(`data.faqs`, newFaqs);\n setExpandedStates(newFaqs.map((_, i) => i === newFaqs.length - 1));\n }\n\n function onToggleExpand(index: number): void {\n const isExpanded = expandedStates[index];\n\n if (isExpanded)\n setExpandedStates(expandedStates.map(() => false));\n else\n setExpandedStates(expandedStates.map((_, i) => i === index));\n }\n\n function onRemoveFaq(index: number): void {\n const currentFaqs = formikProps.values.data.faqs;\n\n const newFaqs = [\n ...currentFaqs.slice(0, index),\n ...currentFaqs.slice(index + 1)\n ];\n\n formikProps.setFieldValue(`data.faqs`, newFaqs);\n setExpandedStates(newFaqs.map((_, i) => i === newFaqs.length - 1));\n }\n\n const totalQuestions = formikProps.values.data.faqs.length;\n\n return (\n <>\n <FormField<FaqWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar\n showCharacterCounter\n />\n\n <ToggleShowInTableOfContents<CuratedMediaWidget>\n dashboard={props.dashboard}\n />\n\n <div className='mb-n2'>\n {formikProps.values.data.faqs.map((_, index) => {\n const isExpanded = expandedStates[index];\n const question = formikProps.values.data.faqs[index].question;\n\n return (\n <div key={index} className='rounded-3 border mb-2 p-2 ps-4 position-relative'>\n <h3 className='h5 mb-0'>\n <span>Question #{index + 1}</span>\n <span className='text-secondary font-size-normal'>\n {(isExpanded || !question) ? '' : ` (${question})`}\n </span>\n </h3>\n\n {isExpanded && (\n <div className='pt-2 mb-n2'>\n <FormField<FaqWidget>\n name={`data.faqs[${index}].question`}\n label='Question'\n placeholder='Enter a question'\n showRequiredStar\n />\n\n <FormField<FaqWidget>\n name={`data.faqs[${index}].answer`}\n label='Answer'\n placeholder='Enter an answer'\n as='textarea'\n rows={15}\n showRequiredStar\n />\n </div>\n )}\n\n <DivButton className={styles.expander} onClick={() => onToggleExpand(index)}>\n <SvgContainer\n svg={isExpanded ? ChevronDownSvg : ChevronRightSvg}\n />\n </DivButton>\n\n <DivButton\n className={`${styles.close} ${totalQuestions > 2 ? '' : 'cursor-default text-secondary'}`}\n onClick={totalQuestions > 2 ? (() => onRemoveFaq(index)) : null}\n >\n <Tooltip\n title={totalQuestions > 2 ? '' : 'You must have at least 2 questions'}\n spanHack\n >\n <SvgContainer svg={CloseSvg} />\n </Tooltip>\n </DivButton>\n </div>\n );\n })}\n </div>\n\n {formikProps.isValid && (\n <div className='d-inline-block'>\n <DivButton onClick={onClickAddAnotherQuestion} className='info-link mt-2'>\n + Add another question\n </DivButton>\n </div>\n )}\n \n <WidgetPreviewHeader dashboard={props.dashboard} />\n\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n description={formikProps.values.description}\n widgetTypeId={formikProps.values.widgetId}\n metadata={formikProps.values.metadata}\n content={formikProps.values.data.faqs}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n imageCdnUrl={props.imageCdnUrl}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { CuratedWidget, FaqWidgetData } from 'libs/shared/interfaces';\n\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\n\nimport { AddContentFaqQuestionView } from './question/AddContentFaqQuestionView';\nimport { AddContentFaqQuestionAccordionView } from './question-accordion/AddContentFaqQuestionAccordionView';\n\nexport type FaqWidget = CuratedWidget<FaqWidgetData, any>;\n\nexport function AddContentFaqView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<FaqWidget>();\n const isAccordion = formikProps.values.templateId === WidgetTemplate.QuestionAccordion;\n\n return isAccordion ?\n <AddContentFaqQuestionAccordionView {...props} /> :\n <AddContentFaqQuestionView {...props} />;\n}\n","import React from 'react';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { FEEDBACK_WIDGET_CONTENT } from 'libs/shared/components/widgets/curated-widgets/templates/feedback/FeedbackWidgetContent';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { BlurbWidgetData, CuratedWidget } from 'libs/shared/interfaces';\nimport { FeedbackOption } from 'libs/shared/views/feedback/enums/FeedbackOption';\n\nimport { DashboardWidgetImageUrls } from 'shared/constants/DashboardWidgetImageUrls';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\n\nexport type FeedbackWidget = CuratedWidget<BlurbWidgetData, any>;\n\nconst DEFAULT_FEEDBACK_OPTION = FeedbackOption.REQUEST_VIDEO;\n\nconst FEEDBACK_OPTIONS = Object.keys(FEEDBACK_WIDGET_CONTENT) as FeedbackOption[];\n\nexport function AddContentFeedbackView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<FeedbackWidget>();\n\n React.useEffect(() => {\n if (formikProps.values.metadata?.feedbackType)\n return;\n\n formikProps.setFieldValue('metadata.feedbackType', DEFAULT_FEEDBACK_OPTION);\n formikProps.setFieldValue('name', FEEDBACK_WIDGET_CONTENT[DEFAULT_FEEDBACK_OPTION].text);\n }, []);\n\n function onChangeFeedbackType(event: React.ChangeEvent<HTMLSelectElement>): void {\n const feedbackType = event.target.value as FeedbackOption;\n\n formikProps.setFieldValue('metadata.feedbackType', feedbackType);\n formikProps.setFieldValue('name', FEEDBACK_WIDGET_CONTENT[feedbackType].text);\n }\n\n return (\n <>\n <FormField<FeedbackWidget>\n name='metadata.feedbackType'\n label='Feedback type'\n as='select'\n value={formikProps.values.metadata?.feedbackType || DEFAULT_FEEDBACK_OPTION}\n onChange={onChangeFeedbackType}\n showRequiredStar\n >\n {FEEDBACK_OPTIONS.map(option => (\n <option key={option} value={option}>{FEEDBACK_WIDGET_CONTENT[option].ctaText}</option>\n ))}\n </FormField>\n\n <FormField<FeedbackWidget>\n name='name'\n label='Text'\n readOnly\n disabled\n />\n\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n description={formikProps.values.description}\n widgetTypeId={formikProps.values.widgetId}\n metadata={formikProps.values.metadata}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n imageCdnUrl={props.imageCdnUrl}\n imageUrls={DashboardWidgetImageUrls}\n content={[]}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n </>\n );\n}\n","import React from 'react';\nimport { Button } from 'react-bootstrap';\n\ninterface DashboardWizardContentCallToActionProps {\n text: string;\n setShowSearch: (show: boolean) => void;\n}\n\nexport function DashboardWizardCta(\n props: DashboardWizardContentCallToActionProps\n): JSX.Element {\n return (\n <Button variant='outline-dark' onClick={() => props.setShowSearch(true)}>\n {props.text}\n </Button>\n );\n}\n","import React from 'react';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WizardActionInfoContainer } from 'libs/shared/components/wizard/select-action/wizard-action-info-container/WizardActionInfoContainer';\nimport { CuratedMediaWidget } from 'libs/shared/interfaces';\n\nimport { Actions, AppChannels } from 'shared/constants';\n\ninterface DashboardWizardContentGuidelineProps {\n text?: string;\n hideLink?: boolean;\n}\n\nexport function DashboardWizardContentGuideline(props: DashboardWizardContentGuidelineProps): JSX.Element {\n const formikProps = useFormikContextWrapper<CuratedMediaWidget>();\n\n const appLink = {\n application: AppChannels.DASHBOARD_EDITOR,\n action: Actions.DashboardEditor.WIDGET_CONTENT_GUIDELINE,\n args: [ formikProps.values.widgetId, formikProps.values.templateId ]\n };\n\n return (\n <div className='mt-2'>\n <WizardActionInfoContainer>\n {props.text}&nbsp;\n \n {!props.hideLink && (\n <>\n View&nbsp;\n <AppLink appLink={appLink} className='d-inline'>\n <span className='text-info text-underline'>content guidelines</span>\n </AppLink>\n </>\n )}\n </WizardActionInfoContainer>\n </div>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ConfirmationPopup } from 'libs/shared/components/confirmation-popup/ConfirmationPopup';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nconst namespace = 'dashboardEditor.dashboardWizardRemoveWidgetContent';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface DashboardWizardRemoveWidgetContentProps extends PopupViewProps {\n objectId: string;\n objectName: string;\n objectType: string;\n onRemoveItem: (id: string) => void;\n}\n\nfunction formatObjectTypeName(objectType: string): string {\n switch (objectType) {\n case 'video':\n return 'Video';\n case 'series':\n return 'Series';\n case 'playlist':\n return 'Playlist';\n case 'subject':\n return 'Classification';\n case 'company':\n return 'Company';\n case 'partner_profile':\n return 'Content Partner';\n default:\n return objectType;\n }\n}\n\nexport function DashboardWizardRemoveWidgetContent(props: DashboardWizardRemoveWidgetContentProps) {\n function removeObject(): void {\n props.onRemoveItem(props.objectId);\n\n props.closePopup();\n }\n const formattedObjectType = formatObjectTypeName(props.objectType);\n return (\n <ConfirmationPopup\n title={getPhrase('header', { objectTypeName: formattedObjectType })}\n onClickConfirm={removeObject}\n closePopup={props.closePopup}\n confirmButtonText={getPhrase('confirmButtonText', { objectTypeName: formattedObjectType })}\n confirmButtonVariant='danger'\n disabledConfirmButton={false}\n >\n <p>\n <Text\n phrase='body'\n namespace={namespace}\n options={{ name: props.objectName, escapeText: true }}\n />\n </p>\n </ConfirmationPopup>\n );\n}\n","import { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { BaseObject, Classification, Company, Playlist, SearchableWidgetTableObjectTypes, Series, Video, VideoTypes } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions, AppChannels } from 'shared/constants';\nimport { MatrixObjectType } from 'shared/enums/MatrixObjectType';\nimport { MatrixColumn } from 'shared/interfaces';\nimport { CuratorProductContext } from 'shared/interfaces/models/CuratorProductContext';\nimport { DefinedColumnSet, MemberMatrixHelper } from 'shared/utils/MemberMatrixHelper';\n\ninterface ContentTableConfigsType {\n columns: MatrixColumn[];\n getEditAppLink: (item: BaseObject, context?: CuratorProductContext) => Core.AppLink;\n appLinks: HashObject;\n}\n\nfunction getEditVideoTypesAppLink(videoType: VideoTypes, context?: CuratorProductContext) {\n if (context === 'live')\n return {\n application: AppChannels.CV_LIVE,\n action: Actions.CvLive.EDIT_VIDEO,\n args: [videoType.id]\n };\n\n if (VideoHelper.isClip(videoType)) {\n return {\n application: AppChannels.CLIPS,\n action: Actions.Clips.EDIT_CLIP_CLASSIFICATIONS,\n args: [videoType.id]\n };\n }\n \n if (VideoHelper.isInteractive(videoType)) {\n return {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.EDIT_INTERACTIVE_CLASSIFICATIONS,\n args: [videoType.id]\n };\n }\n\n return {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.EDIT_VIDEO,\n args: [videoType.id]\n };\n}\n\nfunction getEditTopicAppLink(classification: Classification) {\n return {\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.EDIT_CLASSIFICATION,\n args: [ classification.presentationId, classification.id ]\n };\n}\n\nfunction getEditPlaylistAppLink(playlist: Playlist) {\n return {\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.EDIT_PLAYLIST,\n args: [playlist.id]\n };\n}\n\nfunction getEditSeriesAppLink(series: Series) {\n return {\n application: AppChannels.SERIES,\n action: Actions.Series.EDIT_SERIES,\n args: [series.id]\n };\n}\n\nfunction getCompanyEditAppLink(company: Company) {\n return {\n application: AppChannels.COMPANIES,\n action: Actions.Companies.EDIT_COMPANY,\n args: [company.id]\n };\n}\n\nfunction getContentPartnerEditAppLink(company: Company) {\n return {\n application: AppChannels.CONTENT_PARTNERS,\n action: Actions.ContentPartners.EDIT_CONTENT_PARTNER,\n args: [company.id]\n };\n}\n\nexport const WidgetContentTableConfig: Record<SearchableWidgetTableObjectTypes, ContentTableConfigsType> = {\n [SearchableWidgetTableObjectTypes.Video]: {\n columns: MemberMatrixHelper.getColumnSet(DefinedColumnSet.WidgetVideos),\n getEditAppLink:\n (videoType: VideoTypes, context?: CuratorProductContext) => getEditVideoTypesAppLink(videoType, context),\n appLinks: {\n [MatrixObjectType.Video]: (video: Video) => getEditVideoTypesAppLink(video),\n [`${MatrixObjectType.Video}:${MatrixObjectType.Audience}`]: (video: Video) => ({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.EDIT_VIDEO_AUDIENCES,\n args: [video.id]\n })\n }\n },\n\n [SearchableWidgetTableObjectTypes.Classification]: {\n columns: MemberMatrixHelper.getColumnSet(DefinedColumnSet.WidgetClassifications),\n getEditAppLink: (classification: Classification) => getEditTopicAppLink(classification),\n appLinks: {\n [MatrixObjectType.Classification]: (classification: Classification) => {\n return {\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.EDIT_CLASSIFICATION,\n args: [ classification.presentationId, classification.id ]\n };\n }\n }\n },\n\n [SearchableWidgetTableObjectTypes.Playlist]: {\n columns: MemberMatrixHelper.getColumnSet(DefinedColumnSet.WidgetPlaylists),\n getEditAppLink: (playlist: Playlist) => getEditPlaylistAppLink(playlist),\n appLinks: {\n [MatrixObjectType.Playlist]: (playlist: Playlist) => getEditPlaylistAppLink(playlist),\n [`${MatrixObjectType.Playlist}:${MatrixObjectType.Audience}`]: (playlist: Playlist) => ({\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.EDIT_PLAYLIST_AUDIENCES,\n args: [playlist.id]\n })\n }\n },\n\n [SearchableWidgetTableObjectTypes.Series]: {\n columns: MemberMatrixHelper.getColumnSet(DefinedColumnSet.WidgetSeries),\n getEditAppLink: (series: Series) => getEditSeriesAppLink(series),\n appLinks: {\n [MatrixObjectType.Series]: (series: Series) => getEditSeriesAppLink(series),\n [`${MatrixObjectType.Series}:${MatrixObjectType.Audience}`]: (series: Series) => ({\n application: AppChannels.SERIES,\n action: Actions.Series.EDIT_SERIES_AUDIENCES,\n args: [series.id]\n })\n }\n },\n\n [SearchableWidgetTableObjectTypes.Company]: {\n columns: MemberMatrixHelper.getColumnSet(DefinedColumnSet.WidgetCompanies),\n getEditAppLink: (company: Company) => getCompanyEditAppLink(company),\n appLinks: {\n [MatrixObjectType.Company]: (company: Company) => getCompanyEditAppLink(company)\n }\n },\n\n [SearchableWidgetTableObjectTypes.ContentPartner]: {\n columns: MemberMatrixHelper.getColumnSet(DefinedColumnSet.WidgetContentPartners),\n getEditAppLink: (company: Company) => getContentPartnerEditAppLink(company),\n appLinks: {\n [MatrixObjectType.ContentPartner]: (company: Company) => getContentPartnerEditAppLink(company)\n }\n }\n};\n","import React from 'react';\nimport { DragEndEvent } from '@dnd-kit/core';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Table } from 'libs/shared/components/table/Table';\nimport { BaseObject, PresentationAudience, SearchableWidgetTableObjectTypes } from 'libs/shared/interfaces';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { BuildColumns } from 'shared/components/member-matrix/columns/Columns';\nimport styles from 'shared/components/member-matrix/member-matrix.module.scss';\nimport { ColumnData, MatrixMember } from 'shared/components/member-matrix/MemberMatrix';\nimport { CuratorTableTheme } from 'shared/constants';\nimport { CuratorProductContext } from 'shared/interfaces/models/CuratorProductContext';\n\nimport { DashboardWizardRemoveWidgetContent } from 'apps/dashboard-editor/components/wizard/remove-widget-content/DashboardWizardRemoveWidgetContent';\nimport { WidgetContentTableConfig } from 'apps/dashboard-editor/constants/WidgetContentTableConfig';\n\ninterface DashboardWizardContentTableProps {\n content: BaseObject[];\n audiences: PresentationAudience[];\n canModifyContents?: boolean;\n context?: CuratorProductContext;\n onReorderWidgets?: (content: BaseObject[]) => void;\n onRemoveItem?: (objectId: string) => void;\n}\n\nexport function DashboardWizardContentTable(props: DashboardWizardContentTableProps): JSX.Element {\n const [ removeObject, setRemoveObject ] = React.useState<BaseObject>();\n\n const canReorder = props.canModifyContents && !!props.onReorderWidgets;\n\n function getTableObjectType(): SearchableWidgetTableObjectTypes {\n const firstItem = ArrayHelper.first<BaseObject>(props.content);\n\n if (!firstItem)\n return;\n\n if (MasterTypeHelper.isResource(firstItem) || VideoHelper.isVideoType(firstItem))\n return SearchableWidgetTableObjectTypes.Video;\n\n return firstItem.type?.toLowerCase() as SearchableWidgetTableObjectTypes;\n }\n \n const objectType = getTableObjectType();\n const tableConfig = WidgetContentTableConfig[objectType];\n\n function getColumnData(): ColumnData {\n const columnData: ColumnData = {};\n\n columnData.actions = (obj: BaseObject) => {\n const actions: ActionOptions[] = [{\n label: 'Edit details',\n openInNewTab: true,\n appLink: tableConfig?.getEditAppLink(obj, props.context)\n }];\n\n if (props.canModifyContents && props.onRemoveItem) {\n actions.push({\n label: 'Remove',\n className: 'text-danger',\n onClick: () => openDeletePopup(obj)\n });\n }\n\n return actions;\n };\n\n columnData.appLinks = tableConfig?.appLinks,\n columnData.extraData = {\n allAudiences: props.audiences\n };\n\n return columnData;\n }\n\n const fullColumns = React.useMemo(() => {\n if (!tableConfig)\n return [];\n\n return BuildColumns({ columns: tableConfig.columns, columnData: getColumnData() });\n }, [ props.content, tableConfig ]);\n\n function openDeletePopup(object: BaseObject) {\n setRemoveObject(object);\n }\n\n function closeDeletePopup() {\n setRemoveObject(null);\n }\n\n function onSortingRowsEnd(event: DragEndEvent) {\n const oldIndex = ArrayHelper.findMatchedIdIndex(props.content, event.active.id);\n const newIndex = ArrayHelper.findMatchedIdIndex(props.content, event.over.id);\n\n if (oldIndex === newIndex) {\n return;\n }\n \n if (!props.content[oldIndex] || !props.content[newIndex]) {\n return;\n }\n\n const reorderedList = ArrayHelper.moveItem(props.content, oldIndex, newIndex).map((item, index) => ({\n ...item,\n index\n }));\n\n props.onReorderWidgets?.(reorderedList);\n }\n\n if (!fullColumns?.length)\n return <></>;\n\n const sortableTableTheme = {\n ...CuratorTableTheme,\n row: `${CuratorTableTheme.row} ${styles.row}`\n };\n \n return (\n <>\n {!!removeObject && (\n <DashboardWizardRemoveWidgetContent\n closePopup={closeDeletePopup}\n objectId={removeObject.id}\n objectName={removeObject.name}\n objectType={removeObject.type}\n onRemoveItem={props.onRemoveItem}\n />\n )}\n <Table<MatrixMember>\n data={props.content}\n columns={fullColumns}\n theme={canReorder ? sortableTableTheme : CuratorTableTheme}\n enableSortableRows={canReorder}\n onSortingRowsEnd={onSortingRowsEnd}\n />\n </>\n );\n}\n","import React from 'react';\nimport { Form } from 'react-bootstrap';\n\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { CuratedWidget } from 'libs/shared/interfaces';\n\ninterface WidgetErrorMessageProps {\n errorMessage?: string | string[];\n}\n\nexport function WidgetErrorMessage(props: WidgetErrorMessageProps): JSX.Element {\n const formikProps = useFormikContextWrapper<CuratedWidget>();\n\n const message = Array.isArray(props.errorMessage) ? props.errorMessage[0] : props.errorMessage;\n\n if (!message || !formikProps.touched.data)\n return <></>;\n\n return (\n <Form.Control.Feedback className='d-block mt-n3' type='invalid'>{message}</Form.Control.Feedback>\n );\n}\n","import { Flight } from 'libs/common/react/index';\n\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { DashboardTargetInfo, DashboardTargetType } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { SubjectMemberType } from 'shared/enums';\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\n\nimport { CuratorWidgetTypeIdConfig } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\n\nexport type InitialRequestVideoType = 'video' | 'clip' | 'interactive';\n\nexport const DashboardWizardHelper = {\n getAddActionName(widgetId: WidgetTypeId, templateId: WidgetTemplate): string {\n const widgetTypeConfig = CuratorWidgetTypeIdConfig[widgetId];\n\n if (widgetId === WidgetTypeId.PlaylistMedia) {\n return 'Select a playlist';\n }\n\n if (widgetId === WidgetTypeId.SeriesMedia) {\n return 'Select a series';\n }\n\n if (widgetId === WidgetTypeId.CuratedMedia && templateId === WidgetTemplate.ThumbnailFeaturedMedia) {\n return 'Select a content';\n }\n\n if (widgetId === WidgetTypeId.CuratedMedia && templateId !== WidgetTemplate.ThumbnailFeaturedMedia) {\n return 'Add contents';\n }\n\n return `Add ${widgetTypeConfig.groupName.toLowerCase()}`;\n },\n\n getInitialResultsRequests(\n targetType: DashboardTargetType,\n objectType: MasterType,\n presentationId: string,\n classificationId?: string,\n initialRequestVideoType?: InitialRequestVideoType\n ): Flight.Request[] {\n if (targetType === DashboardTargetType.Discover)\n return null;\n\n if (CuratedDashboardHelper.isClassificationDashboard({ targetType } as DashboardTargetInfo)) {\n if (objectType === MasterType.Subject)\n return [SubjectRequests.classificationChildren(classificationId)];\n\n let memberType: SubjectMemberType;\n\n switch (objectType) {\n case MasterType.Playlist: {\n memberType = SubjectMemberType.Playlists;\n break;\n }\n\n case MasterType.Video: {\n function getMemberType(index: InitialRequestVideoType): SubjectMemberType {\n switch (index) {\n case 'video':\n return SubjectMemberType.Videos;\n case 'clip':\n return SubjectMemberType.Clips;\n case 'interactive':\n return SubjectMemberType.Interactives;\n default:\n break;\n }\n }\n\n const videoTypes = initialRequestVideoType ?\n [getMemberType(initialRequestVideoType)] :\n [ SubjectMemberType.Videos, SubjectMemberType.Clips, SubjectMemberType.Interactives ];\n\n return videoTypes\n .map(memberType => SubjectRequests.classificationMembers(\n classificationId,\n memberType,\n presentationId\n ));\n }\n\n case MasterType.Series: {\n memberType = SubjectMemberType.Series;\n break;\n }\n }\n\n return [SubjectRequests.classificationMembers(\n classificationId,\n memberType,\n presentationId\n )];\n }\n }\n};\n","import React from 'react';\nimport { Col } from 'react-bootstrap';\n\nimport { ComingSoonTag } from 'libs/shared/apps/calendar/components/coming-soon-tag/ComingSoonTag';\nimport { SearchResultsObject } from 'libs/shared/apps/search/interfaces';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { ImageSize, ResizeType } from 'libs/shared/enums/Images';\nimport { Classification } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from '../mixed-widget-content-search-result-item.module.scss';\n\ninterface WidgetClassificationSearchResultItemProps {\n classification: SearchResultsObject<Classification>;\n}\n\nexport function WidgetClassificationSearchResultItem(props: WidgetClassificationSearchResultItemProps): JSX.Element {\n const imageUrl = ImageHelper.createUrl(props.classification.cover?.url, {\n size: ImageSize.Small,\n resizeType: ResizeType.Cover\n });\n\n const colourClass = getBgColorClass(props.classification.name, BG_COLOUR_CLASS_NAMES);\n\n return (\n <div className='row g-0 py-2 align-items-center d-flex flex-grow-1'>\n <Col xs={2}>\n <div className={`${styles.coverImage} ${colourClass} d-inline-block rounded flex-shrink-0`}>\n <BaseImage data={imageUrl} />\n </div>\n </Col>\n <Col xs={9}>\n {props.classification.status === ClassificationStatus.Draft && (\n <div className='d-inline-block'>\n <Badge data={CurationStatus.Draft} type={BadgeType.Status} />\n </div>\n )}\n {props.classification.status === ClassificationStatus.ComingSoon && (\n <ComingSoonTag className='pe-2 fw-semibold mb-1 rounded-pill justify-content-start text-nowrap' />\n )}\n <h2 className='h6 text-truncate'>{props.classification.name}</h2>\n </Col>\n </div>\n );\n}\n","import React from 'react';\nimport { Col } from 'react-bootstrap';\n\nimport { SearchResultsObject } from 'libs/shared/apps/search/interfaces';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ImageSize, ResizeType } from 'libs/shared/enums/Images';\nimport { Company } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from '../mixed-widget-content-search-result-item.module.scss';\n\ninterface WidgetCompanySearchResultItemProps {\n company: SearchResultsObject<Company>;\n}\n\nexport function WidgetCompanySearchResultItem(props: WidgetCompanySearchResultItemProps): JSX.Element {\n const imageUrl = ImageHelper.createUrl(props.company.logo?.url, {\n size: ImageSize.Small,\n resizeType: ResizeType.Cover\n });\n\n const colourClass = getBgColorClass(props.company.name, BG_COLOUR_CLASS_NAMES);\n\n return (\n <div className='row g-0 py-2 align-items-center d-flex flex-grow-1'>\n <Col xs={2}>\n <div className={`${styles.coverImage} ${colourClass} d-inline-block rounded-circle flex-shrink-0`}>\n <BaseImage data={imageUrl} imageClassName='rounded-circle'/>\n </div>\n </Col>\n <Col xs={9} className='text-truncate'>\n <h2 className='h6'>{props.company.name}</h2>\n </Col>\n </div>\n );\n}\n",":local {\n .videoRow {\n width: 25rem;\n }\n}","import React from 'react';\nimport { Col } from 'react-bootstrap';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { SearchResultsObject } from 'libs/shared/apps/search/interfaces';\nimport { RectangularLogo } from 'libs/shared/components/rectangular-logo/RectangularLogo';\nimport { PartnerProfile } from 'libs/shared/interfaces';\n\nimport styles from './widget-video-search-result-item.module.scss';\n\ninterface WidgetContentPartnerSearchResultItemProps {\n contentPartner: SearchResultsObject<PartnerProfile>;\n}\n\nexport function WidgetContentPartnerSearchResultItem(props: WidgetContentPartnerSearchResultItemProps): JSX.Element {\n return (\n <div className={classNames('row g-0 py-2', styles.videoRow)}>\n <Col xs={4}>\n\n <RectangularLogo\n logoUrl={props.contentPartner._logo?.value?.url}\n bgColor={props.contentPartner._colour?.value}\n name={props.contentPartner.name}\n />\n </Col>\n <Col xs={8} className='px-2'>\n <h2 className='h6 m-0 mb-1 pb-1 text-truncate'>{props.contentPartner.name}</h2>\n </Col>\n </div>\n );\n}\n","import React from 'react';\nimport { Col } from 'react-bootstrap';\n\nimport { SearchResultsObject } from 'libs/shared/apps/search/interfaces';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ImageSize, ResizeType } from 'libs/shared/enums/Images';\nimport { Playlist } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from '../mixed-widget-content-search-result-item.module.scss';\n\ninterface WidgetPlaylistSearchResultItemProps {\n playlist: SearchResultsObject<Playlist>;\n}\n\nexport function WidgetPlaylistSearchResultItem(props: WidgetPlaylistSearchResultItemProps): JSX.Element {\n const imageUrl = ImageHelper.createUrl(props.playlist.cover?.url, {\n size: ImageSize.Small,\n resizeType: ResizeType.Cover\n });\n\n const colourClass = getBgColorClass(props.playlist.name, BG_COLOUR_CLASS_NAMES);\n\n return (\n <div className='row g-0 py-2 align-items-center d-flex flex-grow-1'>\n <Col xs={2}>\n <div className={`${styles.coverImage} ${colourClass} d-inline-block rounded flex-shrink-0`}>\n <BaseImage data={imageUrl} />\n </div>\n </Col>\n\n <Col xs={10} className='text-truncate'>\n <h2 className='h6'>{props.playlist.name}</h2>\n </Col>\n </div>\n );\n}\n",":local {\n .resourceRow {\n width: 25rem;\n }\n\n .tileContainer {\n height: 5rem;\n padding: 0.3125rem 0.625rem;\n padding-bottom: 0;\n\n .thumbnailContainer {\n height: 85%;\n }\n }\n}","import React from 'react';\nimport { Col } from 'react-bootstrap';\n\nimport { ResourceTile } from 'libs/shared/components/widgets/items/resource-widget-item/ResourceWidgetItem';\nimport { Resource } from 'libs/shared/interfaces';\n\nimport styles from './widget-resource-search-result-item.module.scss';\n\ninterface WidgetResourceSearchResultItemProps {\n resource: Resource;\n imageCdnUrl: string;\n}\n\nexport function WidgetResourceSearchResultItem(props: WidgetResourceSearchResultItemProps): JSX.Element {\n return (\n <div className={`row g-0 py-2 ${styles.resourceRow}`}>\n <Col xs={4}>\n <div className='w-100 h-100'>\n <ResourceTile\n data={props.resource}\n imageCdnUrl={props.imageCdnUrl}\n imageErrorFallbackUrl=''\n theme={{\n containerClass: styles.tileContainer,\n thumbnailContainerClass: styles.thumbnailContainer\n }}\n titlePosition='none'\n />\n </div>\n </Col>\n <Col xs={8} className='px-2'>\n <h2 className='h6 m-0 pb-1 clamp-2' title={`${props.resource.name}`}>\n {props.resource.name}\n </h2>\n <p className='text-grey clamp-2 mb-0'><em>Video: {props.resource.parentName}</em></p>\n </Col>\n </div>\n );\n}\n","import React from 'react';\n\nimport { SearchResultObjectTypes, SearchResultsObject } from 'libs/shared/apps/search/interfaces';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { BaseObject, Classification, Company, PartnerProfile, Playlist, Resource, Series, VideoTypes } from 'libs/shared/interfaces';\n\nimport { WidgetClassificationSearchResultItem } from 'apps/dashboard-editor/components/wizard/search-widget-content/mixed-search-result/classification/WidgetClassificationSearchResultItem';\nimport { WidgetCompanySearchResultItem } from 'apps/dashboard-editor/components/wizard/search-widget-content/mixed-search-result/company/WidgetCompanySearchResultItem';\nimport { WidgetContentPartnerSearchResultItem } from 'apps/dashboard-editor/components/wizard/search-widget-content/mixed-search-result/content-partner/WidgetContentPartnerSearchResultItem';\nimport { WidgetPlaylistSearchResultItem } from 'apps/dashboard-editor/components/wizard/search-widget-content/mixed-search-result/playlist/WidgetPlaylistSearchResultItem';\nimport { WidgetSeriesSearchResultItem } from 'apps/dashboard-editor/components/wizard/search-widget-content/mixed-search-result/series/WidgetSeriesSearchResultItem';\nimport { WidgetVideoSearchResultItem } from 'apps/dashboard-editor/components/wizard/search-widget-content/mixed-search-result/video/WidgetVideoSearchResultItem';\nimport { CuratorWidgetTypeIdConfig } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\n\nimport { WidgetResourceSearchResultItem } from './resource/WidgetResourceSearchResultItem';\n\ninterface MixedSearchResultProps {\n result: SearchResultObjectTypes | BaseObject;\n widgetTypeId: WidgetTypeId;\n regionLabel?: string;\n}\n\nexport function MixedWidgetContentSearchResultItem(props: MixedSearchResultProps): JSX.Element {\n const { searchIndices } = CuratorWidgetTypeIdConfig[props.widgetTypeId];\n\n if (searchIndices.includes('video') || searchIndices.includes('clip') || searchIndices.includes('interactive')) {\n if (props.widgetTypeId === WidgetTypeId.CuratedMultimedia) {\n if (!('typeId' in props.result))\n return <></>;\n\n if (props.result.typeId === MasterType.Resource) {\n return (\n <WidgetResourceSearchResultItem\n resource={props.result as Resource}\n imageCdnUrl={ClickView.Config.Urls.ImageAPI}\n />\n );\n }\n }\n\n return (\n <WidgetVideoSearchResultItem\n video={props.result as SearchResultsObject<VideoTypes>}\n regionLabel={props.regionLabel}\n />\n );\n }\n\n if (searchIndices.includes('classification')) {\n return (\n <WidgetClassificationSearchResultItem classification={props.result as SearchResultsObject<Classification>} />\n );\n }\n\n if (searchIndices.includes('playlist'))\n return <WidgetPlaylistSearchResultItem playlist={props.result as SearchResultsObject<Playlist>} />;\n\n if (searchIndices.includes('series'))\n return <WidgetSeriesSearchResultItem series={props.result as SearchResultsObject<Series>} />;\n\n if (searchIndices.includes('company'))\n return <WidgetCompanySearchResultItem company={props.result as SearchResultsObject<Company>} />;\n\n if (searchIndices.includes('partner_profile'))\n return (\n <WidgetContentPartnerSearchResultItem contentPartner={props.result as SearchResultsObject<PartnerProfile>} />\n );\n\n return <></>;\n}\n",":local {\n .wrapper {\n &:hover {\n background-color: $light-blue;\n }\n }\n .itemRow {\n flex: 1;\n }\n}","import React from 'react';\n\nimport { SearchResultObjectTypes } from 'libs/shared/apps/search/interfaces';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nimport { MixedWidgetContentSearchResultItem } from '../mixed-search-result/MixedWidgetContentSearchResultItem';\n\nimport styles from './widget-content-search-result-item.module.scss';\n\ninterface WidgetContentSearchResultItemProps {\n widgetTypeId: WidgetTypeId;\n result: SearchResultObjectTypes | BaseObject;\n isSelected: boolean;\n onToggleSelect: (result: SearchResultObjectTypes | BaseObject) => void;\n disableSelectingMore: boolean;\n disabledMessage?: string;\n}\n\nexport function WidgetContentSearchResultItem(\n props: WidgetContentSearchResultItemProps\n): JSX.Element {\n function onSelect(e: React.MouseEvent<HTMLDivElement, MouseEvent>): void {\n props.onToggleSelect(props.result);\n e.preventDefault();\n }\n\n const disabled = !!props.disabledMessage || (!props.isSelected && props.disableSelectingMore);\n\n return (\n <DivButton\n className={`py-2 pe-3 ps-2 ${styles.wrapper}`}\n onClick={!disabled ? onSelect : () => {}}\n >\n <div className={`d-flex align-items-center ${styles.itemRow} flex-nowrap`}>\n <Tooltip\n title={props.disabledMessage}\n spanHack\n spanHackClassName=''\n >\n <Checkbox\n className='me-1 ms-2'\n checked={props.isSelected}\n onChange={() => {}}\n id={props.result.id}\n disabled={disabled}\n />\n </Tooltip>\n <MixedWidgetContentSearchResultItem\n result={props.result}\n widgetTypeId={props.widgetTypeId}\n />\n </div>\n </DivButton>\n );\n}\n","import React from 'react';\n\nimport { AppLink } from 'libs/common/backbone/core';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { SearchResultWithValidation } from 'libs/shared/apps/search/interfaces';\nimport { AppLink as AppLinkComponent } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nimport { AppChannels } from 'shared/constants';\n\nimport { AssemblyLineStatus, StatusBadge } from 'apps/assembly-line/components/status-badge/StatusBadge';\nimport { AssemblyLineStage } from 'apps/assembly-line/interfaces/AssemblyLineStage';\nimport { AssemblyLineHelper } from 'apps/assembly-line/utils/AssemblyLineHelper';\n\nimport { MixedWidgetContentSearchResultItem } from '../mixed-search-result/MixedWidgetContentSearchResultItem';\n\nimport styles from './widget-content-search-result-item.module.scss';\n\nconst PASS_VALIDATION_STAGE = 'published_video';\n\ninterface VideoValidationSearchResultItemProps {\n widgetTypeId: WidgetTypeId;\n result: SearchResultWithValidation;\n isSelected: boolean;\n onToggleSelect: (result: SearchResultWithValidation) => void;\n disableSelectingMore: boolean;\n disabledMessage?: string;\n}\n\nexport function SearchResultWithValidationItem(\n props: VideoValidationSearchResultItemProps\n): JSX.Element {\n function onSelect(e: React.MouseEvent<HTMLDivElement, MouseEvent>): void {\n props.onToggleSelect(props.result);\n e.preventDefault();\n }\n\n const hasPassValidation = props.result.stage === PASS_VALIDATION_STAGE;\n const disabled = !!props.disabledMessage || (!props.isSelected && props.disableSelectingMore);\n const contentPipelineAppLink: AppLink = {\n application: AppChannels.ASSEMBLY_LINE,\n action: AssemblyLineHelper.mapStageToAction(props.result.stage as AssemblyLineStage),\n params: {\n query: props.result.id.toString(),\n limit: 25\n }\n };\n const regions = props.result.contentRegions?.map(c => AssemblyLineHelper.mapVideoContentRegionToLabel(c.systemName)).join(' / ');\n\n return (\n <DivButton\n className={classNames(`py-2 pe-3 ps-2`, styles.wrapper)}\n disabled={disabled}\n onClick={onSelect}\n >\n <div className={`d-flex align-items-center ${styles.itemRow} flex-nowrap`}>\n <Tooltip\n title={props.disabledMessage}\n spanHack\n spanHackClassName=''\n >\n <Checkbox\n className='me-1 ms-2'\n checked={props.isSelected}\n onChange={() => {}}\n id={props.result.id}\n disabled={disabled}\n />\n </Tooltip>\n <MixedWidgetContentSearchResultItem\n result={props.result as BaseObject}\n widgetTypeId={props.widgetTypeId}\n regionLabel={regions}\n />\n <div>\n <StatusBadge\n status={hasPassValidation ? AssemblyLineStatus.Complete : AssemblyLineStatus.Incomplete}\n />\n </div>\n <AppLinkComponent\n openInNewTab\n appLink={contentPipelineAppLink}\n className='btn btn-link btn-sm ms-auto text-nowrap'\n >\n View in content pipeline\n </AppLinkComponent>\n </div>\n </DivButton>\n );\n}\n","import React from 'react';\n\nimport { SearchResultWithValidation } from 'libs/shared/apps/search/interfaces';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { BaseObject, CuratedWidget, SearchableWidgetData } from 'libs/shared/interfaces';\n\nimport { SearchResultWithValidationItem } from 'apps/dashboard-editor/components/wizard/search-widget-content/search-result-item/WidgetContentSearchResultItemWithLink';\n\ninterface SearchResultsWithValidationProps {\n results: SearchResultWithValidation[];\n onSelectItem: (result: BaseObject) => void;\n selectedIds: string[];\n disableSelectingMore: boolean;\n getDisabledMessage?: (result: BaseObject) => string;\n}\n\nexport function SearchResultsWithValidationContainer(props: SearchResultsWithValidationProps): JSX.Element {\n const formikProps = useFormikContextWrapper<CuratedWidget<SearchableWidgetData>>();\n\n return (\n <>\n {props.results.map(result => (\n <SearchResultWithValidationItem\n key={result.id}\n widgetTypeId={formikProps.values.widgetId}\n result={result}\n onToggleSelect={props.onSelectItem}\n isSelected={props.selectedIds?.includes(result.id) ?? false}\n disableSelectingMore={props.disableSelectingMore}\n disabledMessage={props.getDisabledMessage?.(result)}\n />\n ))}\n </>\n );\n}\n",":local {\n .selectedFilter {\n // This blue isn't currently in the Curator theme. It will be when we update Curator to use lite's theme.\n background-color: #38A2E8;\n }\n\n .filter {\n line-height: 1rem;\n }\n}","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Flight } from 'libs/common/flight';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { SearchIndices, SearchResultObjectTypes, SearchResults, SearchResultWithValidation } from 'libs/shared/apps/search/interfaces';\nimport { WarningAlert } from 'libs/shared/apps/user-manager/components/warning-alert/WarningAlert';\nimport { useFormikContextWrapper } 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 { SimpleSearchBar } from 'libs/shared/components/simple-search-bar/SimpleSearchBar';\nimport { TagItem } from 'libs/shared/components/tags/TagItem';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { CurationStatus, CurationStatusString } from 'libs/shared/enums/CurationStatus';\nimport { CurationTag } from 'libs/shared/enums/CurationTag';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { BaseObject, BasePaginatedCollection, CuratedDashboard, CuratedWidget, DashboardTargetType, PopupViewProps, SearchableWidgetData, Tag } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { SearchRequests } from 'shared/flight-requests/SearchRequests';\n\nimport { DashboardWizardInitSearchEmptyState } from 'apps/dashboard-editor/components/wizard/search-widget-content/empty-state/DashboardWizardInitSearchEmptyState';\nimport { DashboardWizardSearchResultEmptyState } from 'apps/dashboard-editor/components/wizard/search-widget-content/empty-state/DashboardWizardSearchResultEmptyState';\nimport { WidgetContentSearchResultItem } from 'apps/dashboard-editor/components/wizard/search-widget-content/search-result-item/WidgetContentSearchResultItem';\nimport { SearchResultsWithValidationContainer } from 'apps/dashboard-editor/components/wizard/search-widget-content/search-results-with-validation/SearchResultsWithValidation';\nimport { CuratorWidgetTypeIdConfig } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { DashboardWizardHelper, InitialRequestVideoType } from 'apps/dashboard-editor/utils/DashboardWizardHelper';\n\nimport styles from './dashboard-wizard-search-widget-content.module.scss';\n\nexport interface DashboardWizardSearchFilters {\n presentation?: string;\n status?: CurationStatus | CurationStatusString | string;\n classification?: string;\n curationTag?: CurationTag;\n partnerProfile?: string;\n}\n\nfunction formatAllInitialResults(allResults: (BasePaginatedCollection | BaseObject[] | BaseObject)[]): BaseObject[] {\n function formatInitialResults(results: BasePaginatedCollection | BaseObject[] | BaseObject): BaseObject[] {\n if (!results)\n return [];\n\n if (!Array.isArray(results)) {\n if ('data' in results)\n return results.data;\n\n return [results];\n }\n\n return results;\n }\n\n return allResults.reduce<BaseObject[]>((mergedResults, queryResults) => {\n return [ ...mergedResults, ...formatInitialResults(queryResults) ];\n }, []);\n}\n\nexport interface CustomOnSearchOptions {\n showAllVideos?: boolean;\n}\n\nexport type CustomOnSearch = (\n query: string,\n searchIndicesFilter: SearchIndices,\n options?: CustomOnSearchOptions\n) => Promise<SearchResultObjectTypes[] |\nBasePaginatedCollection<SearchResultWithValidation> |\nBasePaginatedCollection<SearchResultObjectTypes>>;\n\ntype MixedSearchResults = SearchResults<SearchResultObjectTypes> |\n BasePaginatedCollection<SearchResultWithValidation> |\n BasePaginatedCollection<SearchResultObjectTypes>;\n\ninterface DashboardWizardSearchWidgetContentViewProps extends PopupViewProps {\n dashboard: CuratedDashboard;\n onSelectItem: (obj: SearchResultObjectTypes) => void;\n selectedIds: string[];\n\n classificationId?: string;\n presentationId?: string;\n presentationType?: PresentationType;\n\n hasVideoTypeFilter?: boolean;\n hasShowAllVideosToggle?: boolean;\n initialResultsRequests?: Flight.Request[];\n prefetchedInitialResults?: BasePaginatedCollection | BaseObject[] | BaseObject;\n initialRequestVideoType?: InitialRequestVideoType;\n setInitialRequestVideoType?: (videoType: InitialRequestVideoType) => void;\n getCustomSearchFilters?: () => DashboardWizardSearchFilters;\n\n disableSelectingMore?: boolean;\n getDisabledMessage?: (obj: HashObject) => string;\n\n customOnSearch?: CustomOnSearch;\n}\n\nexport function DashboardWizardSearchWidgetContentView(\n props: DashboardWizardSearchWidgetContentViewProps\n): JSX.Element {\n const formikProps = useFormikContextWrapper<CuratedWidget<SearchableWidgetData>>();\n const initialResults = Flight.useBasicFetchAll<BasePaginatedCollection | BaseObject[] | BaseObject>(\n props.initialResultsRequests\n );\n const fetch = Flight.useGetFetch();\n\n const [ currentResults, setCurrentResults ] = React.useState<\n SearchResultObjectTypes[] | SearchResultWithValidation[]>(\n []\n );\n\n const [ searchQuery, setSearchQuery ] = React.useState('');\n const [ isFetching, setIsFetching ] = React.useState(false);\n const [ searchIndicesFilter, setSearchIndicesFilter ] = React.useState<SearchIndices>(null);\n const [ searchWholePresentation, setSearchWholePresentation ] = React.useState(!props.classificationId);\n const [ showAllVideos, setShowAllVideos ] = useViewModel(\n `show:all:videos:${formikProps.values.dashboardId}`,\n false,\n { storage: StorageType.MemoryStorage }\n );\n\n const widgetTypeConfig = CuratorWidgetTypeIdConfig[formikProps.values.widgetId];\n const isMoviesAndTvDashboard = CuratedDashboardHelper.isType(props.dashboard, DashboardTargetType.MoviesAndTv);\n const isCompanyDashboard = CuratedDashboardHelper.isType(props.dashboard, DashboardTargetType.Company);\n const isContentPartnerDashboard = CuratedDashboardHelper.isType(props.dashboard, DashboardTargetType.PartnerProfile);\n const isSearchSeries = formikProps.values.widgetId === WidgetTypeId.CuratedSeries\n || formikProps.values.widgetId === WidgetTypeId.SeriesMedia;\n const isMultiMediaWidget = WidgetTypeId.CuratedMultimedia === formikProps.values.widgetId;\n const isCuratedContentPartnersWidget = WidgetTypeId.CuratedContentPartners === formikProps.values.widgetId;\n const shouldShowValidationResults = isContentPartnerDashboard\n && !isSearchSeries\n && !isMultiMediaWidget\n && !isCuratedContentPartnersWidget;\n\n function getSearchIndices(searchIndicesFilter: SearchIndices): SearchIndices[] {\n if (searchIndicesFilter) {\n return [searchIndicesFilter];\n }\n\n return widgetTypeConfig.searchIndices;\n }\n\n function getSearchFilters(indices: SearchIndices[]): DashboardWizardSearchFilters {\n if (props.getCustomSearchFilters)\n return props.getCustomSearchFilters();\n\n const filters: DashboardWizardSearchFilters = {\n presentation: props.presentationId,\n classification: props.classificationId\n };\n\n if (searchWholePresentation)\n delete filters.classification;\n\n /**\n * For clips, interactives, videos, and classifications, we need to filter by `status === Published`.\n * For series and playlists, we don't need to filter by this.\n * \n * When searching for classifications, the string version of the CurationStatus enum must be used.\n * For clips, interactives, and videos, the numeric version must be used :(\n */\n if (indices.includes('classification'))\n filters.status = `${CurationStatusString.Published},${CurationStatusString.Draft},${ClassificationStatus.ComingSoon}`;\n\n if (indices.includes('video') || indices.includes('interactive') || indices.includes('clip'))\n filters.status = `${CurationStatus.Published},${CurationStatus.Draft}`;\n\n if (isMoviesAndTvDashboard || isCompanyDashboard)\n filters.curationTag = CurationTag.MOVIES_AND_TV;\n\n if (indices.includes('company')) {\n filters.curationTag = props.presentationType === PresentationType.StreamableLearning ?\n CurationTag.STREAMABLE_CURATED :\n CurationTag.CLICKVIEW_CURATED;\n }\n\n return filters;\n }\n\n function getExtraParams(indices: SearchIndices[]): HashObject {\n if (indices.includes('series'))\n return { filterEmptySeries: false };\n\n return {};\n }\n\n async function onSearch(query: string, searchIndicesFilter: SearchIndices, showAllVideos: boolean) {\n if (props.customOnSearch) {\n let options: CustomOnSearchOptions;\n if (props.hasShowAllVideosToggle) {\n options = { showAllVideos };\n }\n const results = await props.customOnSearch(query, searchIndicesFilter, options);\n\n onSuccess(results as MixedSearchResults);\n \n setIsFetching(false);\n return;\n }\n\n const indices = getSearchIndices(searchIndicesFilter);\n\n const filters: DashboardWizardSearchFilters = getSearchFilters(indices);\n\n fetch(SearchRequests.searchContent({\n query,\n indices,\n success: res => onSuccess(res),\n error: () => setIsFetching(false),\n filters,\n extraParams: getExtraParams(indices)\n }));\n }\n\n function onSuccess(res: MixedSearchResults): void {\n if ('data' in res) {\n setCurrentResults(res.data);\n } else {\n setCurrentResults(res.results);\n }\n setIsFetching(false);\n }\n\n const delayedSearch = React.useCallback(\n FunctionHelper.debounce(\n (query: string, searchIndicesFilter: SearchIndices, showAllVideos: boolean) =>\n onSearch(query, searchIndicesFilter, showAllVideos),\n 300\n ),\n [searchWholePresentation]\n );\n\n React.useEffect(() => {\n if (searchQuery) {\n setIsFetching(true);\n delayedSearch(searchQuery, searchIndicesFilter, showAllVideos);\n\n return;\n }\n\n setIsFetching(false);\n }, [\n searchQuery,\n searchIndicesFilter,\n searchWholePresentation,\n showAllVideos,\n props.hasShowAllVideosToggle\n ]);\n\n function renderResults(): JSX.Element | JSX.Element[] {\n const isSearching = !!searchQuery;\n\n if (isFetching || (!initialResults.hasCompleted && props.initialResultsRequests))\n return (\n <div className='text-center p-5 mt-5'>\n <Spinner as='div' animation='border' role='status' />\n </div>\n );\n\n if (!currentResults?.length && isSearching)\n return <DashboardWizardSearchResultEmptyState />;\n\n if (!isSearching && !props.initialResultsRequests && !props.prefetchedInitialResults)\n return <DashboardWizardInitSearchEmptyState />;\n\n const realInitialResults = props.prefetchedInitialResults ?\n formatAllInitialResults([props.prefetchedInitialResults]) :\n formatAllInitialResults(initialResults.data);\n\n const shownResults = isSearching ?\n currentResults :\n realInitialResults;\n \n if (props.initialResultsRequests && !shownResults?.length)\n return <DashboardWizardInitSearchEmptyState />;\n\n if (shouldShowValidationResults) {\n return (\n <SearchResultsWithValidationContainer\n results={shownResults as SearchResultWithValidation[]}\n onSelectItem={props.onSelectItem}\n selectedIds={props.selectedIds}\n disableSelectingMore={props.disableSelectingMore}\n />\n );\n }\n\n return shownResults.map(result => (\n <WidgetContentSearchResultItem\n key={result.id}\n widgetTypeId={formikProps.values.widgetId}\n result={result}\n onToggleSelect={props.onSelectItem}\n isSelected={props.selectedIds?.includes(result.id) ?? false}\n disableSelectingMore={props.disableSelectingMore}\n disabledMessage={props.getDisabledMessage?.(result)}\n />\n ));\n }\n\n return (\n <Popup\n title={DashboardWizardHelper.getAddActionName(formikProps.values.widgetId, formikProps.values.templateId)}\n closePopup={props.closePopup}\n size={isContentPartnerDashboard ? 'lg' : 'md'}\n >\n <SimpleSearchBar\n name='widget-content-search'\n placeholder='Search a keyword'\n setQuery={setSearchQuery}\n query={searchQuery}\n searchIndicesFilter={searchQuery ? searchIndicesFilter : props.initialRequestVideoType}\n setSearchIndicesFilter={searchQuery ? setSearchIndicesFilter : props.setInitialRequestVideoType}\n hasVideoTypeFilter={props.hasVideoTypeFilter}\n />\n\n {!!props.classificationId && (\n <div className='pt-2'>\n <TagItem\n tag={{ name: 'Search within topic' } as Tag}\n tagClass={`no-decoration ${styles.filter} ${searchWholePresentation ? 'bg-light' : `${styles.selectedFilter} text-white`}`}\n onClick={() => setSearchWholePresentation(false)}\n />\n <TagItem\n tag={{ name: 'Search within presentation' } as Tag}\n tagClass={`no-decoration ${styles.filter} ${searchWholePresentation ? `${styles.selectedFilter} text-white` : 'bg-light'}`}\n onClick={() => setSearchWholePresentation(true)}\n />\n\n {searchWholePresentation && (\n <div className='pt-2'>\n <WarningAlert>\n {`\n Before adding videos from another classification consider if the video should be added to this classification.\n `}\n </WarningAlert>\n </div>\n )}\n </div>\n )}\n\n <div className='my-2'>\n <Scrollbars\n autoHeight\n autoHeightMin={300}\n autoHeightMax={300}\n >\n {renderResults()}\n </Scrollbars>\n </div>\n\n <PopupButtons>\n {props.hasShowAllVideosToggle && (\n <PopupButtons.Toggle\n on={showAllVideos}\n onClick={() => setShowAllVideos(!showAllVideos)}\n label='Search across all content'\n />\n )}\n <PopupButtons.Submit\n variant='dark'\n text='Done'\n onClick={props.closePopup}\n disabled={false}\n />\n </PopupButtons>\n </Popup>\n );\n}\n","import React from 'react';\n\nimport { SearchResultsObject } from 'libs/shared/apps/search/interfaces';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { Classification, ClassificationsWidgetData, CuratedWidget, DashboardTargetType } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { DashboardHelper } from 'shared/utils/DashboardHelper';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardCta } from 'apps/dashboard-editor/components/wizard/content-cta/DashboardWizardCta';\nimport { DashboardWizardContentGuideline } from 'apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { WidgetErrorMessage } from 'apps/dashboard-editor/components/wizard/widget-error-message/WidgetErrorMessage';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { DashboardWizardHelper } from 'apps/dashboard-editor/utils/DashboardWizardHelper';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\nimport { DashboardWizardSearchWidgetContentView } from 'apps/dashboard-editor/views/wizard/search-widget-content/DashboardWizardSearchWidgetContentView';\n\ntype ClassificationsWidget = CuratedWidget<ClassificationsWidgetData, Classification[]>;\n\nexport function AddContentChildClassificationsView(props: AddWidgetContentFormViewProps): JSX.Element {\n const [ showSearch, setShowSearch ] = React.useState(false);\n\n const [ hasSelected, setHasSelected ] = React.useState(props.isEditing);\n\n const formikProps = useFormikContextWrapper<ClassificationsWidget>();\n \n function setFormAsTouched(): void {\n formikProps.setTouched({\n ...formikProps.touched,\n data: {\n classificationId: true\n }\n });\n }\n\n function onSelectItem(obj: SearchResultsObject<Classification>): void {\n formikProps.setFieldValue('data', { ...formikProps.values.data, presentationId: obj.presentationId, classificationId: obj.id });\n formikProps.setFieldValue('name', obj.name);\n\n setHasSelected(true);\n\n setFormAsTouched();\n }\n\n // we hide the initial widget preview content until user have selected a classification or it's editing\n const shownContent = !hasSelected ? [] : props.content;\n\n return (\n <>\n <FormField<ClassificationsWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar\n showCharacterCounter\n />\n\n <ToggleShowInTableOfContents<ClassificationsWidget>\n dashboard={props.dashboard}\n />\n\n <FormField<ClassificationsWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={shownContent}\n imageCdnUrl={props.imageCdnUrl}\n metadata={formikProps.values.metadata}\n presentation={props.presentation}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n\n <div className='pt-3'>\n <WidgetErrorMessage errorMessage={formikProps.errors.data?.classificationId} />\n </div>\n\n <div className='d-flex justify-content-between'>\n <label className='h5 mb-0'>\n Classifications\n </label>\n\n <DashboardWizardCta\n text='Select a topic'\n setShowSearch={setShowSearch}\n />\n </div>\n\n <DashboardWizardContentGuideline\n text={DashboardHelper.getContentGuidelineText(\n formikProps.values.widgetId,\n formikProps.values.templateId,\n DashboardTargetType.ClassificationDirectory\n )}\n />\n\n <DashboardWizardContentTable audiences={props.audiences} content={shownContent} />\n\n {showSearch && (\n <DashboardWizardSearchWidgetContentView\n dashboard={props.dashboard}\n closePopup={() => setShowSearch(false)}\n classificationId={props.classification?.id}\n presentationId={props.presentation.id}\n onSelectItem={obj => onSelectItem(obj as SearchResultsObject<Classification>)}\n selectedIds={[formikProps.values.data.classificationId]}\n initialResultsRequests={DashboardWizardHelper.getInitialResultsRequests(\n CuratedDashboardHelper.getDashboardTargetType(props.dashboard),\n MasterType.Subject,\n props.presentation.id,\n props.classification?.id\n )}\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\n\ninterface ConfirmHeadingOptionalProps {\n isOptional: boolean;\n setIsOptional: (isOptional: boolean) => void;\n}\n\nexport function ConfirmHeadingOptional(props: ConfirmHeadingOptionalProps): JSX.Element {\n return (\n <div className='mb-3'>\n <Checkbox\n id='widget-heading-optional'\n checked={props.isOptional}\n label='This widget doesn’t need a heading'\n onChange={() => {\n props.setIsOptional(!props.isOptional);\n }}\n />\n </div>\n );\n}\n","import React from 'react';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { Classification, ClassificationsWidgetData, CuratedDashboardAppLink, CuratedWidget, DashboardTargetType } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { ImageSelect } from 'shared/components';\nimport { Actions, AppChannels } from 'shared/constants';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { ConfirmHeadingOptional } from 'apps/dashboard-editor/components/wizard/confirm-heading-optional/ConfirmHeadingOptional';\nimport { DashboardWizardContentGuideline } from 'apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\n\ntype ClassificationsWidget = CuratedWidget<ClassificationsWidgetData, Classification[]>;\n\nexport function AddContentClassificationsView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<ClassificationsWidget>();\n\n const {\n PosterSlidingListSmall,\n CoverFixedPillListXSmall,\n EditableCoverFixedPillListSmall\n } = WidgetTemplate;\n\n function isTemplate(template: WidgetTemplate): boolean {\n return template === formikProps.values.templateId;\n }\n\n const isDiscoverDashboard = CuratedDashboardHelper.isType(props.dashboard, DashboardTargetType.Discover);\n\n const showExtraFields = isTemplate(PosterSlidingListSmall) && isDiscoverDashboard;\n\n function getWidgetData(): ClassificationsWidgetData {\n const data: ClassificationsWidgetData = {\n presentationId: props.presentation.id\n };\n\n if (props.classification)\n data.classificationId = props.classification?.id;\n\n return data;\n }\n\n function onSetHeadingOptional(headingOptional: boolean) {\n formikProps.setFieldValue('metadata.headingOptional', headingOptional);\n }\n\n React.useEffect(() => {\n formikProps.setFieldValue('data', getWidgetData());\n if (showExtraFields)\n formikProps.setFieldValue('metadata', { ...formikProps.values.metadata, appLink: CuratedDashboardAppLink.ExploreAllTopics });\n }, []);\n\n React.useEffect(() => {\n if (formikProps.values.name)\n return;\n\n if (isTemplate(CoverFixedPillListXSmall))\n formikProps.setFieldValue('name', 'Browse all subjects');\n\n if (isTemplate(EditableCoverFixedPillListSmall))\n formikProps.setFieldValue('name', 'Explore my subjects');\n }, []);\n \n const isTopicDashboard = CuratedDashboardHelper.isClassificationDashboard(\n CuratedDashboardHelper.getDashboardTargetInfo(props.dashboard)\n );\n\n const isHeadingOptional = formikProps.values.templateId === WidgetTemplate.StatsCoverFixedPillListLarge;\n\n return (\n <>\n {isHeadingOptional && (\n <ConfirmHeadingOptional\n isOptional={formikProps.values.metadata.headingOptional}\n setIsOptional={onSetHeadingOptional}\n />\n )}\n <FormField<ClassificationsWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar={!formikProps.values.metadata?.headingOptional}\n showCharacterCounter\n />\n\n {isTopicDashboard && (\n <ToggleShowInTableOfContents<ClassificationsWidget>\n dashboard={props.dashboard}\n />\n )}\n\n {isTopicDashboard && <FormField<ClassificationsWidget>\n name='showClassificationDirectory'\n type='checkbox'\n checked={formikProps.values.metadata.appLink === CuratedDashboardAppLink.ClassificationDirectory}\n label='Show topic directory link'\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n formikProps.setFieldValue('metadata', {\n ...formikProps.values.metadata,\n appLink: e.target.checked ? CuratedDashboardAppLink.ClassificationDirectory : ''\n });\n }}\n checkboxLabelFontWeight='normal'\n />}\n\n {!isTemplate(CoverFixedPillListXSmall) && (\n <FormField<ClassificationsWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n )}\n\n {showExtraFields && (\n <>\n <FormField<ClassificationsWidget>\n name='metadata.text'\n label='Title of leading poster'\n placeholder='Enter a title...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n showCharacterCounter\n />\n <ImageSelect\n imageType={ImageType.TallPosters}\n fieldName='metadata.imageId'\n setSelectedImage={image => {\n formikProps.setFieldValue('metadata', { ...formikProps.values.metadata, imageId: image.id });\n }}\n label='Poster image'\n uploadAppLink={{\n application: AppChannels.DASHBOARD_EDITOR,\n action: Actions.DashboardEditor.ADD_CONTENT_IMAGE_UPLOAD\n }}\n />\n </>\n )}\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={props.content}\n imageCdnUrl={props.imageCdnUrl}\n metadata={formikProps.values.metadata}\n presentation={props.presentation}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n isEditing\n availablePresentations={props.availablePresentations}\n settings={{\n hasTopicDirectories: props.settings?.hasTopicDirectories\n }}\n commonVideoProps={props.commonVideoProps}\n />\n\n {!!props.content?.length && (\n <div className='d-flex justify-content-between'>\n <label className='h5 mb-0'>\n Classifications\n </label>\n </div>\n )}\n\n <DashboardWizardContentGuideline />\n\n <DashboardWizardContentTable audiences={props.audiences} content={props.content} />\n </>\n );\n}\n","import React from 'react';\n\nimport { DashboardTargetType } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { AddContentChildClassificationsView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/add-content-classifications/AddContentChildClassificationsView';\nimport { AddContentClassificationsView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/add-content-classifications/AddContentClassificationsView';\n\nexport function AddContentClassificationsContainerView(props: AddWidgetContentFormViewProps): JSX.Element {\n if (CuratedDashboardHelper.isType(props.dashboard, DashboardTargetType.ClassificationDirectory))\n return <AddContentChildClassificationsView {...props} />;\n \n return <AddContentClassificationsView {...props} />;\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { SearchResultObjectTypes } from 'libs/shared/apps/search/interfaces';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification, CuratedMediaWidget, CuratedWidget, ParentAndChildClassificationsWidgetData } from 'libs/shared/interfaces';\n\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\nimport { DashboardHelper } from 'shared/utils/DashboardHelper';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardCta } from 'apps/dashboard-editor/components/wizard/content-cta/DashboardWizardCta';\nimport { DashboardWizardContentGuideline } from 'apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { WidgetErrorMessage } from 'apps/dashboard-editor/components/wizard/widget-error-message/WidgetErrorMessage';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\nimport { DashboardWizardSearchWidgetContentView } from 'apps/dashboard-editor/views/wizard/search-widget-content/DashboardWizardSearchWidgetContentView';\n\ntype WidgetForm = CuratedWidget<ParentAndChildClassificationsWidgetData, Classification[]>;\n\nexport function AddContentClassificationsWithChildrenView(props: AddWidgetContentFormViewProps): JSX.Element {\n const [ showSearch, setShowSearch ] = React.useState(false);\n const formikProps = useFormikContextWrapper<WidgetForm>();\n\n const isIncludingChildren = formikProps.values.data.classifications?.every(c => c.options.includeChildren) ?? true;\n\n const selectedParentIds = formikProps.values.data.classifications?.map(c => c.id) ?? [];\n const selectedParents = Flight.useBasicFetch<Classification[]>(\n !!selectedParentIds?.length &&\n SubjectRequests.classificationsById(selectedParentIds)\n );\n\n function getInitialResultsRequests(): Flight.Request[] {\n if (props.classification) {\n return [\n SubjectRequests.classification(props.classification.id),\n SubjectRequests.classificationChildren(props.classification.id)\n ];\n }\n\n return [\n SubjectRequests.presentationChildren(props.presentation.id)\n ];\n }\n\n function onSelectItem(obj: SearchResultObjectTypes): void {\n formikProps.setFieldTouched('data', true);\n\n if (formikProps.values.data.classifications?.some(c => c.id === obj.id)) {\n formikProps.setFieldValue(\n 'data.classifications',\n formikProps.values.data.classifications.filter(c => c.id !== obj.id)\n );\n } else {\n formikProps.setFieldValue(\n 'data.classifications',\n (formikProps.values.data.classifications || []).concat({\n id: obj.id,\n options: {\n includeChildren: isIncludingChildren\n }\n })\n );\n }\n }\n\n function onRemoveItem(id: string): void {\n formikProps.setFieldValue(\n 'data.classifications',\n formikProps.values.data.classifications.filter(c => c.id !== id)\n );\n }\n\n return (\n <>\n <FormField<CuratedMediaWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showCharacterCounter\n />\n\n <ToggleShowInTableOfContents<CuratedMediaWidget>\n dashboard={props.dashboard}\n />\n\n <FormField<CuratedMediaWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n\n {(\n formikProps.values.widgetId !== WidgetTypeId.LatestReleasedClassifications &&\n formikProps.values.widgetId !== WidgetTypeId.TrendingClassifications\n ) && (\n <Checkbox\n id='movies-and-tv-filter'\n checked={formikProps.values.data.filterMoviesAndTv}\n label='Movies + TV content only'\n onChange={() => {\n formikProps.setFieldValue('data.filterMoviesAndTv', !formikProps.values.data.filterMoviesAndTv);\n }}\n />\n )}\n\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={props.content}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n metadata={formikProps.values.metadata}\n imageCdnUrl={props.imageCdnUrl}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n\n <div className='pt-3'>\n <WidgetErrorMessage errorMessage={formikProps.errors.data?.classifications as string} />\n </div>\n\n <div className='d-flex justify-content-between align-items-center pt-3'>\n <label className='h5 mb-0'>\n Parent topics\n </label>\n\n <DashboardWizardCta\n text='Select parent topics'\n setShowSearch={setShowSearch}\n />\n </div>\n\n <DashboardWizardContentGuideline\n text={DashboardHelper.getContentGuidelineText(\n formikProps.values.widgetId,\n formikProps.values.templateId\n )}\n />\n\n <DashboardWizardContentTable\n audiences={props.audiences}\n content={selectedParents.data}\n onRemoveItem={onRemoveItem}\n canModifyContents\n />\n\n {showSearch && (\n <DashboardWizardSearchWidgetContentView\n dashboard={props.dashboard}\n closePopup={() => setShowSearch(false)}\n classificationId={props.classification?.id}\n presentationId={props.presentation.id}\n onSelectItem={onSelectItem}\n selectedIds={formikProps.values.data.classifications?.map(c => c.id) ?? []}\n initialResultsRequests={getInitialResultsRequests()}\n getDisabledMessage={result => {\n if (formikProps.values.templateId !== WidgetTemplate.ThumbnailFixedListLarge)\n return '';\n\n if (!result.description)\n return 'Topic requires a description in order to be added to this widget';\n\n return '';\n }}\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification, CuratedDashboardAppLink, CuratedMediaWidget } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport { DashboardHelper } from 'shared/utils/DashboardHelper';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardCta } from 'apps/dashboard-editor/components/wizard/content-cta/DashboardWizardCta';\nimport { DashboardWizardContentGuideline } from 'apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { WidgetErrorMessage } from 'apps/dashboard-editor/components/wizard/widget-error-message/WidgetErrorMessage';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { DashboardWizardHelper } from 'apps/dashboard-editor/utils/DashboardWizardHelper';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\nimport { DashboardWizardSearchWidgetContentView } from 'apps/dashboard-editor/views/wizard/search-widget-content/DashboardWizardSearchWidgetContentView';\n\nexport function AddContentMultipleCuratedClassificationsView(props: AddWidgetContentFormViewProps): JSX.Element {\n const [ showSearch, setShowSearch ] = React.useState(false);\n const formikProps = useFormikContextWrapper<CuratedMediaWidget<Classification[]>>();\n\n const isTopicDashboard = CuratedDashboardHelper.isClassificationDashboard(\n CuratedDashboardHelper.getDashboardTargetInfo(props.dashboard)\n );\n const isStreamableDashboard = props.presentation.type === PresentationType.StreamableLearning;\n const hasExploreAllTopics = formikProps.values.metadata.appLink === CuratedDashboardAppLink.ExploreAllTopics;\n\n function getPreviewContent() {\n return props.content && hasExploreAllTopics ?\n [\n {\n id: CuratedDashboardAppLink.ExploreAllTopics,\n name: 'Explore all subjects',\n cover: { url: ImageHelper.createUrl(HardCoded.Images.STREAMABLE_TOPIC_COVER, { size: ImageSize.Small }) }\n },\n ...props.content\n ] : props.content;\n }\n\n function onIncludeExploreAll() {\n if (hasExploreAllTopics) {\n formikProps.setFieldValue('metadata', { ...formikProps.values.metadata, appLink: null });\n } else {\n formikProps.setFieldValue('metadata', { ...formikProps.values.metadata, appLink: CuratedDashboardAppLink.ExploreAllTopics });\n }\n }\n\n return (\n <>\n <FormField<CuratedMediaWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar={formikProps.values.templateId !== WidgetTemplate.PosterSlidingListMedium}\n showCharacterCounter\n />\n\n {isTopicDashboard && (\n <ToggleShowInTableOfContents<CuratedMediaWidget>\n dashboard={props.dashboard}\n />\n )}\n\n <FormField<CuratedMediaWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n\n {isStreamableDashboard &&\n <Checkbox\n id='includeExploreAll'\n checked={!!hasExploreAllTopics}\n label='Include explore all subjects'\n onChange={onIncludeExploreAll}\n />\n }\n\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={getPreviewContent()}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n metadata={formikProps.values.metadata}\n imageCdnUrl={props.imageCdnUrl}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n\n <div className='pt-3'>\n <WidgetErrorMessage errorMessage={formikProps.errors.data?.objectIds} />\n </div>\n\n <div className='d-flex justify-content-between align-items-center pt-3'>\n <label className='h5 mb-0'>\n Classifications\n </label>\n\n <DashboardWizardCta\n text='Add topics'\n setShowSearch={setShowSearch}\n />\n </div>\n\n <DashboardWizardContentGuideline\n text={DashboardHelper.getContentGuidelineText(\n WidgetTypeId.CuratedClassifications,\n formikProps.values.templateId\n )}\n />\n\n <DashboardWizardContentTable\n audiences={props.audiences}\n onReorderWidgets={props.onReorderWidgets}\n content={props.content}\n onRemoveItem={id => CuratedDashboardHelper.onRemoveCuratedObject(id, formikProps)}\n canModifyContents\n />\n\n {showSearch && (\n <DashboardWizardSearchWidgetContentView\n dashboard={props.dashboard}\n closePopup={() => setShowSearch(false)}\n classificationId={props.classification?.id}\n presentationId={props.presentation.id}\n onSelectItem={obj => CuratedDashboardHelper.onSelectCuratedObject(obj, formikProps)}\n selectedIds={formikProps.values.data.objectIds}\n initialResultsRequests={DashboardWizardHelper.getInitialResultsRequests(\n CuratedDashboardHelper.getDashboardTargetType(props.dashboard),\n MasterType.Subject,\n props.presentation.id,\n props.classification?.id\n )}\n getDisabledMessage={result => {\n if (formikProps.values.templateId !== WidgetTemplate.ThumbnailFixedListLarge)\n return '';\n\n if (!result.description)\n return 'Topic requires a description in order to be added to this widget';\n\n return '';\n }}\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { SearchResultsObject } from 'libs/shared/apps/search/interfaces';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { Classification, CuratedMediaWidget, DashboardTargetType } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardCta } from 'apps/dashboard-editor/components/wizard/content-cta/DashboardWizardCta';\nimport { DashboardWizardContentGuideline } from 'apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { WidgetErrorMessage } from 'apps/dashboard-editor/components/wizard/widget-error-message/WidgetErrorMessage';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { DashboardWizardHelper } from 'apps/dashboard-editor/utils/DashboardWizardHelper';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\nimport { DashboardWizardSearchWidgetContentView } from 'apps/dashboard-editor/views/wizard/search-widget-content/DashboardWizardSearchWidgetContentView';\n\nexport function AddContentSingleCuratedClassificationsView(props: AddWidgetContentFormViewProps): JSX.Element {\n const [ showSearch, setShowSearch ] = React.useState(false);\n const formikProps = useFormikContextWrapper<CuratedMediaWidget<Classification[]>>();\n\n const selectedTopicName = ('name' in (props.content?.[0] || {}) && props.content?.[0]?.name) || '';\n\n const isBlockColourTemplate = formikProps.values.templateId === WidgetTemplate.HeroBlockColourSmall;\n const allowCta = (\n !isBlockColourTemplate &&\n formikProps.values.templateId !== WidgetTemplate.HeroBanner\n );\n\n React.useEffect(() => {\n if (!selectedTopicName)\n return;\n\n if (isBlockColourTemplate) {\n const targetInfo = CuratedDashboardHelper.getDashboardTargetInfo(props.dashboard);\n\n if (targetInfo.targetType === DashboardTargetType.ClassificationDirectory) {\n formikProps.setFieldValue('name', `Explore new ${selectedTopicName} topics and videos`);\n return;\n }\n\n formikProps.setFieldValue('name', `Explore all ${selectedTopicName} topics`);\n return;\n }\n\n formikProps.setFieldValue('name', selectedTopicName);\n }, [selectedTopicName]);\n\n function onSelectItem(obj: SearchResultsObject<Classification>): void {\n formikProps.setFieldValue('data', { ...formikProps.values.data, objectIds: [obj.id]});\n\n setFormAsTouched();\n }\n\n function setFormAsTouched(): void {\n formikProps.setTouched({\n ...formikProps.touched,\n data: {\n objectIds: true\n }\n });\n }\n\n const isTopicDashboard = CuratedDashboardHelper.isClassificationDashboard(\n CuratedDashboardHelper.getDashboardTargetInfo(props.dashboard)\n );\n\n return (\n <>\n <FormField<CuratedMediaWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading or select a topic...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n showRequiredStar\n showCharacterCounter\n />\n\n {isTopicDashboard && (\n <ToggleShowInTableOfContents<CuratedMediaWidget>\n dashboard={props.dashboard}\n />\n )}\n\n {allowCta && (\n <FormField<CuratedMediaWidget>\n name='metadata.cta.text'\n label='CTA button'\n placeholder='Add a CTA button...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n showCharacterCounter\n />\n )}\n\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={props.content}\n imageCdnUrl={props.imageCdnUrl}\n metadata={formikProps.values.metadata}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n\n <div className='pt-3'>\n <WidgetErrorMessage errorMessage={formikProps.errors.data?.objectIds} />\n </div>\n\n <div className='d-flex justify-content-end pt-3'>\n <DashboardWizardCta\n text='Select a topic'\n setShowSearch={setShowSearch}\n />\n </div>\n\n {!isBlockColourTemplate && (\n <DashboardWizardContentGuideline />\n )}\n\n {showSearch && (\n <DashboardWizardSearchWidgetContentView\n dashboard={props.dashboard}\n closePopup={() => setShowSearch(false)}\n classificationId={props.classification?.id}\n presentationId={props.presentation.id}\n onSelectItem={onSelectItem}\n selectedIds={formikProps.values.data.objectIds}\n initialResultsRequests={DashboardWizardHelper.getInitialResultsRequests(\n CuratedDashboardHelper.getDashboardTargetType(props.dashboard),\n MasterType.Subject,\n props.presentation.id,\n props.classification?.id\n )}\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { Classification, CuratedMediaWidget } from 'libs/shared/interfaces';\n\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\n\nimport { AddContentMultipleCuratedClassificationsView } from './multiple/AddContentMultipleCuratedClassificationsView';\nimport { AddContentSingleCuratedClassificationsView } from './single/AddContentSingleCuratedClassificationsView';\n\nconst SINGLE_TEMPLATES = [\n WidgetTemplate.HeroBanner,\n WidgetTemplate.HeroBannerSmall,\n WidgetTemplate.HeroBlockColourSmall,\n WidgetTemplate.ThumbnailFixedListXLarge,\n WidgetTemplate.HeroThumbnailSmall\n];\n\nexport function AddContentCuratedClassificationsViewContainer(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<CuratedMediaWidget<Classification[]>>();\n\n if (SINGLE_TEMPLATES.includes(formikProps.values.templateId))\n return <AddContentSingleCuratedClassificationsView {...props} />;\n \n return <AddContentMultipleCuratedClassificationsView {...props} />;\n}\n","import React from 'react';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { Classification, CuratedWidget, PersonalisedTopicsWidgetData } from 'libs/shared/interfaces';\n\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\n\ntype PersonalisedTopicsWidget = CuratedWidget<PersonalisedTopicsWidgetData, Classification[]>;\n\nexport function AddContentPersonalisedTopicsView(props: AddWidgetContentFormViewProps) {\n const formikProps = useFormikContextWrapper<PersonalisedTopicsWidget>();\n\n return (\n <>\n <FormField<PersonalisedTopicsWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar\n showCharacterCounter\n />\n\n <FormField<PersonalisedTopicsWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={props.content}\n audiences={props.audiences}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n metadata={formikProps.values.metadata}\n imageCdnUrl={props.imageCdnUrl}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification, ClassificationsWidgetData, CuratedDashboardAppLink, CuratedWidget } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { DashboardRequests } from 'shared/flight-requests/DashboardRequests';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardContentGuideline } from 'apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetContentPreviewResponse } from 'apps/dashboard-editor/interfaces/data-requests/WidgetContentPreviewResponse';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\n\ntype ClassificationsWidget = CuratedWidget<ClassificationsWidgetData, Classification[]>;\n\nexport function AddContentClassificationLatestReleasedVideosView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<ClassificationsWidget>();\n const { from, to } = CuratedDashboardHelper.getLatestReleasedTimeRange();\n\n const contentPreview = Flight.useBasicFetch<WidgetContentPreviewResponse<Classification[]>>(\n DashboardRequests.previewWidget(\n WidgetTypeId.ClassificationLatestReleasedVideos,\n { presentationId: props.presentation.id },\n {\n from,\n to\n }\n )\n );\n\n React.useEffect(() => {\n formikProps.setFieldValue('data', { presentationId: props.presentation.id });\n\n formikProps.setFieldValue(\n 'metadata',\n {\n ...formikProps.values.metadata,\n appLink: CuratedDashboardAppLink.ClassificationLatestReleases,\n imageId: props.presentation.cover.fileId\n }\n );\n }, []);\n\n const isTopicDashboard = CuratedDashboardHelper.isClassificationDashboard(\n CuratedDashboardHelper.getDashboardTargetInfo(props.dashboard)\n );\n\n return (\n <>\n <FormField<ClassificationsWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar\n showCharacterCounter\n />\n\n {isTopicDashboard && (\n <ToggleShowInTableOfContents<ClassificationsWidget>\n dashboard={props.dashboard}\n />\n )}\n \n <FormField<ClassificationsWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={contentPreview.data?.content}\n imageCdnUrl={props.imageCdnUrl}\n metadata={formikProps.values.metadata}\n audiences={props.audiences}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n\n {!!props.content?.length && (\n <div className='d-flex justify-content-between'>\n <label className='h5 mb-0'>\n Classifications\n </label>\n </div>\n )}\n\n <DashboardWizardContentGuideline />\n\n <DashboardWizardContentTable audiences={props.audiences} content={contentPreview.data?.content} />\n </>\n );\n}\n","import React from 'react';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { CalendarEvent, CuratedWidget, SpecialEventsWidgetData } from 'libs/shared/interfaces';\n\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardContentGuideline } from 'apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\n\ntype SpecialEventsWidget = CuratedWidget<SpecialEventsWidgetData, CalendarEvent[]>;\n\nexport function AddContentSpecialEventClassificationsView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<SpecialEventsWidget>();\n\n React.useEffect(() => {\n formikProps.setFieldValue('data.presentationId', props.presentation.id);\n\n if (props.classification) {\n formikProps.setFieldValue(\n 'data.classifications',\n [{ id: props.classification.id, options: { includeChildren: true } }]\n );\n }\n\n if (formikProps.values.name)\n return;\n\n if (props.classification) {\n formikProps.setFieldValue('name', `Upcoming events for ${props.classification.name}`);\n return;\n }\n\n formikProps.setFieldValue('name', 'Upcoming events');\n }, []);\n\n return (\n <>\n <FormField<SpecialEventsWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar\n showCharacterCounter\n />\n \n <FormField<SpecialEventsWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={props.content}\n imageCdnUrl={props.imageCdnUrl}\n metadata={formikProps.values.metadata}\n audiences={props.audiences}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n\n {!!props.content?.length && (\n <div className='d-flex justify-content-between'>\n <label className='h5 mb-0'>\n Special events\n </label>\n </div>\n )}\n\n <DashboardWizardContentGuideline />\n\n <DashboardWizardContentTable audiences={props.audiences} content={props.content} />\n </>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { Video } from 'libs/analytics/interfaces';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { ContentPartnerWidgetData, CuratedMediaWidget, CuratedWidget } from 'libs/shared/interfaces';\n\nimport { DashboardRequests } from 'shared/flight-requests/DashboardRequests';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { WidgetErrorMessage } from 'apps/dashboard-editor/components/wizard/widget-error-message/WidgetErrorMessage';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetContentPreviewResponse } from 'apps/dashboard-editor/interfaces/data-requests/WidgetContentPreviewResponse';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\n\ntype WidgetForm = CuratedWidget<ContentPartnerWidgetData, Video[]>;\n\nconst PrefillNameMapping: Partial<Record<WidgetTypeId, string>> = {\n [WidgetTypeId.TrendingContentPartnersVideo]: 'Trending videos',\n [WidgetTypeId.ContentPartnerLatestReleasedVideos]: 'Latest videos',\n [WidgetTypeId.ContentPartnerAllVideos]: 'More videos'\n};\n\nexport function AddContentContentPartnerVideoView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<WidgetForm>();\n\n React.useEffect(() => {\n // prefill name if it's empty\n if (!formikProps.values.name) {\n formikProps.setFieldValue('name', PrefillNameMapping[formikProps.values.widgetId] || '');\n }\n }, []);\n\n const preview = Flight.useBasicFetch<WidgetContentPreviewResponse<Video[]>>(\n DashboardRequests.previewWidget(\n formikProps.values.widgetId,\n ObjectHelper.pick<ContentPartnerWidgetData>(formikProps.values.data, ['slug'])\n )\n );\n\n return (\n <>\n <FormField<CuratedMediaWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showCharacterCounter\n />\n\n <FormField<CuratedMediaWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={preview.data?.content}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n metadata={formikProps.values.metadata}\n imageCdnUrl={props.imageCdnUrl}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n\n <div className='pt-3'>\n <WidgetErrorMessage errorMessage={formikProps.errors.data?.classifications as string} />\n </div>\n\n <DashboardWizardContentTable\n audiences={props.audiences}\n content={preview.data?.content || []}\n canModifyContents={false}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { SearchResultsObject } from 'libs/shared/apps/search/interfaces';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { BasePaginatedCollection, CuratedMediaWidget } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { SearchRequests } from 'shared/flight-requests/SearchRequests';\nimport { ContentPartnerProfile } from 'shared/interfaces/models/ContentPartnerProfile';\nimport { DashboardHelper } from 'shared/utils/DashboardHelper';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardCta } from 'apps/dashboard-editor/components/wizard/content-cta/DashboardWizardCta';\nimport { DashboardWizardContentGuideline } from 'apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { WidgetErrorMessage } from 'apps/dashboard-editor/components/wizard/widget-error-message/WidgetErrorMessage';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\nimport { DashboardWizardSearchWidgetContentView } from 'apps/dashboard-editor/views/wizard/search-widget-content/DashboardWizardSearchWidgetContentView';\n\nconst DEFAULT_SPOTLIGHT_WIDGET_NAME = 'Featured channels';\n\nexport function AddContentCuratedContentPartnersView(props: AddWidgetContentFormViewProps): JSX.Element {\n const [ showSearch, setShowSearch ] = React.useState(false);\n const formikProps = useFormikContextWrapper<CuratedMediaWidget<ContentPartnerProfile[]>>();\n const fetchAsync = Flight.useGetFetchAsync();\n\n const isSpotlightContentPartnerWidget = formikProps.values.widgetId === WidgetTypeId.SpotlightContentPartners;\n const isCuratedContentPartnerWidget = formikProps.values.widgetId === WidgetTypeId.CuratedContentPartners;\n const hasInitializedObjectIds = React.useRef(!!formikProps.values.data?.objectIds?.length);\n\n React.useEffect(() => {\n if (!formikProps.values.name && isSpotlightContentPartnerWidget) {\n formikProps.setFieldValue('name', DEFAULT_SPOTLIGHT_WIDGET_NAME);\n }\n }, []);\n\n React.useEffect(() => {\n // heading not required for curated content partners widget in channel dashboard\n if (isCuratedContentPartnerWidget)\n formikProps.setFieldValue('metadata.headingOptional', true);\n }, [isCuratedContentPartnerWidget]);\n\n React.useEffect(() => {\n if (!isSpotlightContentPartnerWidget)\n return;\n\n if (hasInitializedObjectIds.current) return;\n\n const content = props.content as ContentPartnerProfile[];\n if (!content?.length) return;\n\n hasInitializedObjectIds.current = true;\n formikProps.setFieldValue('data', {\n ...formikProps.values.data,\n objectIds: content.map(item => item.id)\n });\n }, [props.content]);\n\n async function onSearch(searchQuery: string) {\n // no need to search if the search query is empty as we will show all content partners in that case\n if (!searchQuery) return;\n\n return await fetchAsync<BasePaginatedCollection<SearchResultsObject<ContentPartnerProfile>>>(\n SearchRequests.searchContentPartners(searchQuery, isSpotlightContentPartnerWidget)\n );\n }\n\n return (\n <>\n <FormField<CuratedMediaWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar={!isCuratedContentPartnerWidget}\n showCharacterCounter\n />\n\n <FormField<CuratedMediaWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={props.content}\n audiences={props.audiences}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n metadata={formikProps.values.metadata}\n imageCdnUrl={props.imageCdnUrl}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n <WidgetErrorMessage errorMessage={formikProps.errors.data?.objectIds} />\n\n <div className='d-flex justify-content-between align-items-center pt-3'>\n <label className='h5 mb-0'>\n Channels\n </label>\n\n {/* spotlight widget is readonly */}\n {!isSpotlightContentPartnerWidget && (\n <DashboardWizardCta\n text='Add channel'\n setShowSearch={setShowSearch}\n />\n )}\n </div>\n\n <DashboardWizardContentGuideline\n hideLink\n text={\n DashboardHelper.getContentGuidelineText(WidgetTypeId.SpotlightContentPartners, formikProps.values.templateId)\n }\n />\n\n <DashboardWizardContentTable\n audiences={props.audiences}\n onReorderWidgets={props.onReorderWidgets}\n content={props.content}\n onRemoveItem={id => CuratedDashboardHelper.onRemoveCuratedObject(id, formikProps)}\n canModifyContents={!isSpotlightContentPartnerWidget}\n />\n\n {showSearch && (\n <DashboardWizardSearchWidgetContentView\n prefetchedInitialResults={props.content}\n dashboard={props.dashboard}\n presentationId={props.presentation?.id}\n presentationType={props.presentation?.type}\n closePopup={() => setShowSearch(false)}\n onSelectItem={obj => CuratedDashboardHelper.onSelectCuratedObject(obj, formikProps)}\n selectedIds={formikProps.values.data.objectIds}\n customOnSearch={onSearch}\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { CalendarEventContentType, CuratedObjectsWidgetData, CuratedWidget, Livestream } from 'libs/shared/interfaces';\n\nimport { DashboardRequests } from 'shared/flight-requests/DashboardRequests';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetContentPreviewResponse } from 'apps/dashboard-editor/interfaces/data-requests/WidgetContentPreviewResponse';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\n\ntype UpcomingLivestreamsWidget = CuratedWidget<CuratedObjectsWidgetData, Livestream[]>;\n\nexport function AddUpcomingLivestreamsView(props: AddWidgetContentFormViewProps) {\n const formikProps = useFormikContextWrapper<UpcomingLivestreamsWidget>();\n\n const preview = Flight.useBasicFetch<WidgetContentPreviewResponse<Livestream[]>>(\n !ObjectHelper.isEmpty(formikProps.values.data) && DashboardRequests.previewWidget(\n formikProps.values.widgetId,\n formikProps.values.data,\n { from: DateHelper.format(new Date(), 'YYYY-MM-DD') }\n )\n );\n\n React.useEffect(() => {\n if (props.classification) {\n formikProps.setFieldValue('data', { ...formikProps.values.data, classificationId: props.classification?.id });\n }\n }, [props.classification]);\n\n return (\n <>\n <FormField<UpcomingLivestreamsWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar\n showCharacterCounter\n />\n\n <FormField<UpcomingLivestreamsWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={preview.data?.content}\n audiences={props.audiences}\n contentType={CalendarEventContentType.Livestream}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n metadata={formikProps.values.metadata}\n imageCdnUrl={props.imageCdnUrl}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n </>\n );\n}\n","import React from 'react';\nimport { useFormikContext } from 'formik';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { SearchResultObjectTypes, SearchResultsObject } from 'libs/shared/apps/search/interfaces';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { BasePaginatedCollection, Clip, CuratedMediaWidget, CuratedWidget, MultimediaWidgetData, Resource, Video, VideoTypes, WidgetMultimedia } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { SubjectMemberType } from 'shared/enums';\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\nimport { DashboardHelper } from 'shared/utils/DashboardHelper';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { ConfirmHeadingOptional } from 'apps/dashboard-editor/components/wizard/confirm-heading-optional/ConfirmHeadingOptional';\nimport { DashboardWizardCta } from 'apps/dashboard-editor/components/wizard/content-cta/DashboardWizardCta';\nimport { DashboardWizardContentGuideline } from 'apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { WidgetErrorMessage } from 'apps/dashboard-editor/components/wizard/widget-error-message/WidgetErrorMessage';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { InitialRequestVideoType } from 'apps/dashboard-editor/utils/DashboardWizardHelper';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\nimport { DashboardWizardSearchWidgetContentView } from 'apps/dashboard-editor/views/wizard/search-widget-content/DashboardWizardSearchWidgetContentView';\n\ntype Multimedia = VideoTypes | Resource;\n\nexport function AddContentCuratedMultimediaView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContext<CuratedWidget<MultimediaWidgetData, Multimedia[]>>();\n const [ showSearch, setShowSearch ] = React.useState(false);\n const [ initialRequestVideoType, setInitialRequestVideoType ] = React.useState<InitialRequestVideoType>(null);\n\n function getInitialResultsRequests(): Flight.Request[] {\n const requests = [\n SubjectRequests.classificationMembers(\n props.classification?.id,\n SubjectMemberType.Interactives,\n formikProps.values.data.presentationId\n )\n ];\n\n const videosRequest = SubjectRequests.classificationMembers(\n props.classification?.id,\n SubjectMemberType.Videos,\n formikProps.values.data.presentationId\n );\n\n const clipsRequest = SubjectRequests.classificationMembers(\n props.classification?.id,\n SubjectMemberType.Clips,\n formikProps.values.data.presentationId\n );\n\n const originalFormatData = videosRequest.formatData;\n\n /**\n * Because this widget type supports resources, we want to essentially promote\n * the resources on the videos and clips in these topics to be first class citizens.\n * So we get all of them, and move them to the top level of the array so they can\n * be selected in the UI.\n */\n const formatData = (data: BasePaginatedCollection<Video | Clip>) => {\n const formatted = originalFormatData(data) as BasePaginatedCollection<Video | Clip>;\n\n const results: Array<Video | Clip | Resource> = [];\n\n for (const video of formatted.data) {\n results.push(video);\n\n for (const resource of video.resources.data) {\n results.push({\n ...resource,\n parentId: video.id,\n parentName: video.name\n });\n }\n }\n\n formatted.data = results;\n\n return formatted;\n };\n\n videosRequest.formatData = formatData;\n clipsRequest.formatData = formatData;\n\n requests.push(videosRequest);\n requests.push(clipsRequest);\n\n return requests;\n }\n\n function onSelectItem(item: SearchResultObjectTypes): void {\n if (!('typeId' in item))\n return;\n\n const dataEntry: WidgetMultimedia = {\n objectId: item.id\n };\n\n if (item.typeId === MasterType.Resource)\n dataEntry.parentId = (item as SearchResultsObject<Resource>).parentId;\n\n if (formikProps.values.data.multimedias.find(m => m.objectId.toString() === dataEntry.objectId.toString())) {\n formikProps.setFieldValue(\n 'data.multimedias',\n formikProps.values.data.multimedias.filter(m => m.objectId.toString() !== dataEntry.objectId.toString())\n );\n } else {\n formikProps.setFieldValue('data.multimedias', [ ...formikProps.values.data.multimedias, dataEntry ]);\n }\n\n formikProps.setFieldTouched('data.multimedias', true);\n }\n\n function onRemoveItem(id: string): void {\n formikProps.setFieldValue(\n 'data.multimedias',\n formikProps.values.data.multimedias.filter(m => m.objectId.toString() !== id.toString())\n );\n }\n\n function onSetHeadingOptional(headingOptional: boolean) {\n formikProps.setFieldValue('metadata.headingOptional', headingOptional);\n }\n\n const { max } = DashboardHelper.getContentGuidelineMinMax(\n WidgetTypeId.CuratedMultimedia,\n formikProps.values.templateId\n );\n\n const disableSelectingMore = formikProps.values.data?.multimedias?.length >= max;\n\n const isTopicDashboard = CuratedDashboardHelper.isClassificationDashboard(\n CuratedDashboardHelper.getDashboardTargetInfo(props.dashboard)\n );\n\n return (\n <>\n <ConfirmHeadingOptional\n isOptional={formikProps.values.metadata.headingOptional}\n setIsOptional={onSetHeadingOptional}\n />\n <FormField<CuratedMediaWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n showRequiredStar\n showCharacterCounter\n />\n {isTopicDashboard && (\n <ToggleShowInTableOfContents<CuratedMediaWidget>\n dashboard={props.dashboard}\n />\n )}\n \n <FormField<CuratedMediaWidget>\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n description={formikProps.values.description}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n id={formikProps.values.id}\n name={formikProps.values.name}\n content={props.content}\n imageCdnUrl={props.imageCdnUrl}\n audiences={props.audiences}\n metadata={formikProps.values.metadata}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n <WidgetErrorMessage errorMessage={formikProps.errors.data?.multimedias as string} />\n\n <div className='d-flex justify-content-between align-items-center pt-3'>\n <label className='h5 mb-0'>\n Contents\n </label>\n\n <DashboardWizardCta\n text='Add contents'\n setShowSearch={setShowSearch}\n />\n </div>\n \n <DashboardWizardContentGuideline\n text={DashboardHelper.getContentGuidelineText(WidgetTypeId.CuratedMultimedia, formikProps.values.templateId)}\n />\n\n <DashboardWizardContentTable\n audiences={props.audiences}\n onReorderWidgets={props.onReorderWidgets}\n content={props.content}\n onRemoveItem={onRemoveItem}\n canModifyContents\n />\n\n {showSearch && (\n <DashboardWizardSearchWidgetContentView\n dashboard={props.dashboard}\n closePopup={() => setShowSearch(false)}\n classificationId={props.classification?.id}\n presentationId={props.presentation?.id}\n onSelectItem={onSelectItem}\n selectedIds={formikProps.values.data.multimedias.map(m => m.objectId)}\n initialResultsRequests={props.classification?.id && getInitialResultsRequests()}\n disableSelectingMore={disableSelectingMore}\n setInitialRequestVideoType={setInitialRequestVideoType}\n initialRequestVideoType={initialRequestVideoType}\n hasVideoTypeFilter\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Company, CuratedMediaWidget } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { DashboardHelper } from 'shared/utils/DashboardHelper';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardCta } from 'apps/dashboard-editor/components/wizard/content-cta/DashboardWizardCta';\nimport { DashboardWizardContentGuideline } from 'apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { WidgetErrorMessage } from 'apps/dashboard-editor/components/wizard/widget-error-message/WidgetErrorMessage';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\nimport { DashboardWizardSearchWidgetContentView } from 'apps/dashboard-editor/views/wizard/search-widget-content/DashboardWizardSearchWidgetContentView';\n\nexport function AddContentCuratedCompaniesView(props: AddWidgetContentFormViewProps): JSX.Element {\n const [ showSearch, setShowSearch ] = React.useState(false);\n const formikProps = useFormikContextWrapper<CuratedMediaWidget<Company[]>>();\n \n return (\n <>\n <FormField<CuratedMediaWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar\n showCharacterCounter\n />\n\n <FormField<CuratedMediaWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={props.content}\n audiences={props.audiences}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n metadata={formikProps.values.metadata}\n imageCdnUrl={props.imageCdnUrl}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n <WidgetErrorMessage errorMessage={formikProps.errors.data?.objectIds} />\n\n <div className='d-flex justify-content-between align-items-center pt-3'>\n <label className='h5 mb-0'>\n Networks\n </label>\n\n <DashboardWizardCta\n text='Add networks'\n setShowSearch={setShowSearch}\n />\n </div>\n\n <DashboardWizardContentGuideline\n text={DashboardHelper.getContentGuidelineText(WidgetTypeId.CuratedCompanies, formikProps.values.templateId)}\n />\n\n <DashboardWizardContentTable\n audiences={props.audiences}\n onReorderWidgets={props.onReorderWidgets}\n content={props.content}\n onRemoveItem={id => CuratedDashboardHelper.onRemoveCuratedObject(id, formikProps)}\n canModifyContents\n />\n\n {showSearch && (\n <DashboardWizardSearchWidgetContentView\n dashboard={props.dashboard}\n presentationId={props.presentation.id}\n presentationType={props.presentation.type}\n closePopup={() => setShowSearch(false)}\n onSelectItem={obj => CuratedDashboardHelper.onSelectCuratedObject(obj, formikProps)}\n selectedIds={formikProps.values.data.objectIds}\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { CuratedMediaWidget, Playlist } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { DashboardHelper } from 'shared/utils/DashboardHelper';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardCta } from 'apps/dashboard-editor/components/wizard/content-cta/DashboardWizardCta';\nimport { DashboardWizardContentGuideline } from 'apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { WidgetErrorMessage } from 'apps/dashboard-editor/components/wizard/widget-error-message/WidgetErrorMessage';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { DashboardWizardHelper } from 'apps/dashboard-editor/utils/DashboardWizardHelper';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\nimport { DashboardWizardSearchWidgetContentView } from 'apps/dashboard-editor/views/wizard/search-widget-content/DashboardWizardSearchWidgetContentView';\n\nexport function AddContentCuratedPlaylistsView(props: AddWidgetContentFormViewProps): JSX.Element {\n const [ showSearch, setShowSearch ] = React.useState(false);\n const formikProps = useFormikContextWrapper<CuratedMediaWidget<Playlist[]>>();\n\n const isTopicDashboard = CuratedDashboardHelper.isClassificationDashboard(\n CuratedDashboardHelper.getDashboardTargetInfo(props.dashboard)\n );\n\n return (\n <>\n <FormField<CuratedMediaWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar\n showCharacterCounter\n />\n\n {isTopicDashboard && (\n <ToggleShowInTableOfContents<CuratedMediaWidget>\n dashboard={props.dashboard}\n />\n )}\n\n <FormField<CuratedMediaWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={props.content}\n audiences={props.audiences}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n metadata={formikProps.values.metadata}\n imageCdnUrl={props.imageCdnUrl}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n <WidgetErrorMessage errorMessage={formikProps.errors.data?.objectIds} />\n\n <div className='d-flex justify-content-between align-items-center pt-3'>\n <label className='h5 mb-0'>\n Playlists\n </label>\n\n <DashboardWizardCta\n text='Add playlists'\n setShowSearch={setShowSearch}\n />\n </div>\n\n <DashboardWizardContentGuideline\n text={DashboardHelper.getContentGuidelineText(WidgetTypeId.CuratedPlaylists, formikProps.values.templateId)}\n />\n\n <DashboardWizardContentTable\n audiences={props.audiences}\n onReorderWidgets={props.onReorderWidgets}\n content={props.content}\n onRemoveItem={id => CuratedDashboardHelper.onRemoveCuratedObject(id, formikProps)}\n canModifyContents\n />\n\n {showSearch && (\n <DashboardWizardSearchWidgetContentView\n dashboard={props.dashboard}\n closePopup={() => setShowSearch(false)}\n classificationId={props.classification?.id}\n presentationId={props.presentation.id}\n onSelectItem={obj => CuratedDashboardHelper.onSelectCuratedObject(obj, formikProps)}\n selectedIds={formikProps.values.data.objectIds}\n initialResultsRequests={DashboardWizardHelper.getInitialResultsRequests(\n CuratedDashboardHelper.getDashboardTargetType(props.dashboard),\n MasterType.Playlist,\n props.presentation.id,\n props.classification?.id\n )}\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { CuratedWidget, Presentation } from 'libs/shared/interfaces';\n\nimport { ImageSelect } from 'shared/components';\nimport { Actions, AppChannels } from 'shared/constants';\nimport { DashboardRequests } from 'shared/flight-requests/DashboardRequests';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetContentPreviewResponse } from 'apps/dashboard-editor/interfaces/data-requests/WidgetContentPreviewResponse';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\n\nexport function AddContentPresentationsView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<CuratedWidget>();\n\n const contentPreview = Flight.useBasicFetch<WidgetContentPreviewResponse<Presentation[]>>(\n DashboardRequests.previewWidget(WidgetTypeId.Presentations, {})\n );\n\n React.useEffect(() => {\n if (!formikProps.values.name)\n formikProps.setFieldValue('name', 'Discover videos for');\n }, []);\n\n return (\n <>\n <FormField<CuratedWidget>\n name='name'\n label='Prefix'\n placeholder='Enter a prefix...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar\n showCharacterCounter\n />\n\n <ImageSelect\n imageType={ImageType.Banners}\n fieldName='metadata.imageId'\n label='Banner image'\n setSelectedImage={image => {\n formikProps.setFieldValue('metadata', { ...formikProps.values.metadata, imageId: image.id });\n }}\n showRequiredStar\n uploadAppLink={{\n application: AppChannels.DASHBOARD_EDITOR,\n action: Actions.DashboardEditor.ADD_CONTENT_IMAGE_UPLOAD\n }}\n />\n\n <WidgetPreviewHeader dashboard={props.dashboard} />\n\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n metadata={formikProps.values.metadata}\n imageCdnUrl={props.imageCdnUrl}\n content={contentPreview.data?.content}\n presentation={props.presentation}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n </>\n );\n}\n","import React from 'react';\nimport { Dropdown } from 'react-bootstrap';\n\nimport { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { ChevronDownSvg } from 'libs/shared/images/svg/arrows/ChevronDownSvg';\nimport { Country, CuratedMediaWidget, Rating } from 'libs/shared/interfaces';\n\nimport { NewCustomerRequests } from 'shared/flight-requests/NewCustomerRequests';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\n\ninterface RatingsCountryDropdownProps {\n data: Country[];\n selectedCountry: Country;\n onCountrySelect: (country: Country) => void;\n}\n\nconst RatingsCountryDropdown = (props: RatingsCountryDropdownProps) => {\n return (\n <Dropdown>\n <Dropdown.Toggle variant='outline-secondary' className='no-caret py-2'>\n <span className='align-text-bottom pe-4'>\n {props.selectedCountry ? (\n <span className='text-dark'>{props.selectedCountry.name}</span>\n ) : (\n 'Select region'\n )}\n </span>{' '}\n <SvgContainer\n className='svg-container text-dark'\n svg={ChevronDownSvg}\n />\n </Dropdown.Toggle>\n\n <Dropdown.Menu className='py-0'>\n {props.data.map(country => (\n <Dropdown.Item\n key={country.id}\n className='py-2 px-3 my-1'\n onClick={() => props.onCountrySelect(country)}\n >\n {country.name}\n </Dropdown.Item>\n ))}\n </Dropdown.Menu>\n </Dropdown>\n );\n};\n\nexport function AddContentRatingsView(props: AddWidgetContentFormViewProps) {\n const countries = Flight.useBasicFetch<Country[]>(\n NewCustomerRequests.countries()\n );\n const formikProps = useFormikContextWrapper<CuratedMediaWidget<Rating[]>>();\n const [ selectedCountry, setSelectedCountry ] = React.useState<Country>(null);\n\n React.useEffect(() => {\n const id = ArrayHelper.first(formikProps.values.data.objectIds);\n const country = ArrayHelper.findWhere(countries.data, { id });\n \n if (country) {\n setSelectedCountry(country);\n }\n }, [countries.data]);\n\n function onCountrySelect(country: Country) {\n setSelectedCountry(country);\n formikProps.setFieldValue('data', { ...formikProps.values.data, objectIds: [country.id]});\n\n setFormAsTouched();\n }\n\n function setFormAsTouched(): void {\n formikProps.setTouched({\n ...formikProps.touched,\n data: {\n objectIds: true\n }\n });\n }\n\n if (!countries.data) {\n return <></>;\n }\n\n return (\n <>\n <FormField<CuratedMediaWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar\n showCharacterCounter\n />\n\n <FormField<CuratedMediaWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n\n <div className='d-flex justify-content-between align-items-center my-3'>\n <h5 className='mb-0'>Widget Preview</h5>\n <RatingsCountryDropdown\n data={countries.data}\n selectedCountry={selectedCountry}\n onCountrySelect={onCountrySelect}\n />\n </div>\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={props.content}\n audiences={props.audiences}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n metadata={formikProps.values.metadata}\n imageCdnUrl={props.imageCdnUrl}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { ClassificationType } from 'libs/shared/enums/ClassificationType';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { CuratedMediaWidget, Series } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { DashboardRequests } from 'shared/flight-requests/DashboardRequests';\nimport { DashboardHelper } from 'shared/utils/DashboardHelper';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardCta } from 'apps/dashboard-editor/components/wizard/content-cta/DashboardWizardCta';\nimport { DashboardWizardContentGuideline } from 'apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { WidgetErrorMessage } from 'apps/dashboard-editor/components/wizard/widget-error-message/WidgetErrorMessage';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetContentPreviewResponse } from 'apps/dashboard-editor/interfaces/data-requests/WidgetContentPreviewResponse';\nimport { DashboardWizardHelper } from 'apps/dashboard-editor/utils/DashboardWizardHelper';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\nimport { DashboardWizardSearchWidgetContentView } from 'apps/dashboard-editor/views/wizard/search-widget-content/DashboardWizardSearchWidgetContentView';\n\nexport function AddContentCuratedSeriesView(props: AddWidgetContentFormViewProps): JSX.Element {\n const [ showSearch, setShowSearch ] = React.useState(false);\n const formikProps = useFormikContextWrapper<CuratedMediaWidget<Series[]>>();\n\n const isHubTopic = props.classification?.type === ClassificationType.Hub;\n\n React.useEffect(() => {\n if (isHubTopic)\n formikProps.setFieldValue('metadata.headingOptional', true);\n }, [isHubTopic]);\n\n const preview = Flight.useBasicFetch<WidgetContentPreviewResponse<Series[]>>(\n formikProps.values.data.objectIds?.length > 0 && DashboardRequests.previewWidget(\n formikProps.values.widgetId,\n formikProps.values.data,\n { withMembers: false }\n )\n );\n\n const isTopicDashboard = CuratedDashboardHelper.isClassificationDashboard(\n CuratedDashboardHelper.getDashboardTargetInfo(props.dashboard)\n );\n\n return (\n <>\n <FormField<CuratedMediaWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar={!isHubTopic}\n showCharacterCounter\n />\n\n {isTopicDashboard && (\n <ToggleShowInTableOfContents<CuratedMediaWidget>\n dashboard={props.dashboard}\n />\n )}\n\n <FormField<CuratedMediaWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={preview.data?.content}\n audiences={props.audiences}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n metadata={formikProps.values.metadata}\n imageCdnUrl={props.imageCdnUrl}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n <WidgetErrorMessage errorMessage={formikProps.errors.data?.objectIds} />\n\n <div className='d-flex justify-content-between align-items-center pt-3'>\n <label className='h5 mb-0'>\n Series\n </label>\n\n <DashboardWizardCta\n text='Add series'\n setShowSearch={setShowSearch}\n />\n </div>\n\n <DashboardWizardContentGuideline\n text={DashboardHelper.getContentGuidelineText(WidgetTypeId.CuratedSeries, formikProps.values.templateId)}\n />\n\n <DashboardWizardContentTable\n audiences={props.audiences}\n onReorderWidgets={props.onReorderWidgets}\n content={preview.data?.content}\n onRemoveItem={id => CuratedDashboardHelper.onRemoveCuratedObject(id, formikProps)}\n canModifyContents\n />\n {showSearch && (\n <DashboardWizardSearchWidgetContentView\n dashboard={props.dashboard}\n closePopup={() => setShowSearch(false)}\n classificationId={props.classification?.id}\n presentationId={props.presentation?.id}\n onSelectItem={obj => CuratedDashboardHelper.onSelectCuratedObject(obj, formikProps)}\n selectedIds={formikProps.values.data.objectIds}\n initialResultsRequests={DashboardWizardHelper.getInitialResultsRequests(\n CuratedDashboardHelper.getDashboardTargetType(props.dashboard),\n MasterType.Series,\n props.presentation?.id,\n props.classification?.id\n )}\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { BecauseYouWatchedWidgetData, CuratedWidget, Video } from 'libs/shared/interfaces';\n\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\n\ntype BecauseYouWatchedWidget = CuratedWidget<BecauseYouWatchedWidgetData, Video[]>;\n\nconst SAMPLE_HEADING = 'Because you watched [video name]';\n\nexport function AddContentBecauseYouWatchedView(props: AddWidgetContentFormViewProps) {\n const formikProps = useFormikContextWrapper<BecauseYouWatchedWidget>();\n \n React.useEffect(() => {\n if (!props.content)\n return;\n\n formikProps.setFieldValue('content', props.content);\n }, [props.content]);\n\n return (\n <>\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={SAMPLE_HEADING}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={props.content}\n audiences={props.audiences}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n metadata={formikProps.values.metadata}\n imageCdnUrl={props.imageCdnUrl}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { CompanyClassificationVideosWidgetData, CuratedWidget, Video } from 'libs/shared/interfaces';\n\nimport { DashboardHelper } from 'shared/utils/DashboardHelper';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardCta } from 'apps/dashboard-editor/components/wizard/content-cta/DashboardWizardCta';\nimport { DashboardWizardContentGuideline } from 'apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { WidgetErrorMessage } from 'apps/dashboard-editor/components/wizard/widget-error-message/WidgetErrorMessage';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\nimport { DashboardWizardSearchWidgetContentView } from 'apps/dashboard-editor/views/wizard/search-widget-content/DashboardWizardSearchWidgetContentView';\n\ntype CompanyClassificationVideosWidget = CuratedWidget<CompanyClassificationVideosWidgetData, Video[]>;\n\nexport function AddContentCompanyClassificationVideosView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<CompanyClassificationVideosWidget>();\n\n const [ showSearch, setShowSearch ] = React.useState(false);\n\n React.useEffect(() => {\n if (props.classification && !formikProps.values.data.classifications?.length) {\n formikProps.setFieldValue('data.classifications', [{\n id: props.classification.id,\n options: {\n includeChildren: true\n }\n }]);\n }\n }, []);\n\n return (\n <>\n <FormField<CompanyClassificationVideosWidget>\n name='name'\n label='Heading'\n placeholder='Enter a widget name...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showCharacterCounter\n />\n\n <FormField<CompanyClassificationVideosWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n\n <WidgetPreviewHeader dashboard={props.dashboard} widgetTypeId={formikProps.values.widgetId} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n description={formikProps.values.description}\n widgetTypeId={formikProps.values.widgetId}\n content={props.content}\n imageCdnUrl={props.imageCdnUrl}\n metadata={formikProps.values.metadata}\n audiences={props.audiences}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n \n <WidgetErrorMessage errorMessage={formikProps.errors.data?.companyId} />\n\n <div className='d-flex justify-content-between align-items-center pt-3'>\n <label className='h5 mb-0'>\n Studio\n </label>\n\n <DashboardWizardCta\n text='Select a studio'\n setShowSearch={setShowSearch}\n />\n </div>\n\n <DashboardWizardContentGuideline\n text={DashboardHelper.getContentGuidelineText(\n WidgetTypeId.CompanyClassificationVideos,\n formikProps.values.templateId\n )}\n />\n\n <DashboardWizardContentTable\n audiences={props.audiences}\n content={props.content}\n onRemoveItem={() => formikProps.setFieldValue('data.companyId', '')}\n canModifyContents\n />\n\n {showSearch && (\n <DashboardWizardSearchWidgetContentView\n dashboard={props.dashboard}\n presentationId={props.presentation.id}\n presentationType={props.presentation.type}\n closePopup={() => setShowSearch(false)}\n onSelectItem={obj => formikProps.setFieldValue('data.companyId', obj.id)}\n selectedIds={[formikProps.values.data.companyId]}\n getCustomSearchFilters={() => ({})}\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { WizardActionInfoContainer } from 'libs/shared/components/wizard/select-action/wizard-action-info-container/WizardActionInfoContainer';\nimport { ClassificationsWidgetData, CuratedWidget, Video } from 'libs/shared/interfaces';\n\nimport { DashboardRequests } from 'shared/flight-requests/DashboardRequests';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetContentPreviewResponse } from 'apps/dashboard-editor/interfaces/data-requests/WidgetContentPreviewResponse';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\n\ntype ClassificationLatestReleasedVideoWidget = CuratedWidget<ClassificationsWidgetData, Video[]>;\n\nexport function AddContentClassificationLatestReleasedVideoView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<ClassificationLatestReleasedVideoWidget>();\n\n const preview = Flight.useBasicFetch<WidgetContentPreviewResponse<Video[]>>(\n !ObjectHelper.isEmpty(formikProps.values.data) && DashboardRequests.previewWidget(\n formikProps.values.widgetId,\n formikProps.values.data\n )\n );\n const isContentEmpty = !preview.data?.content?.length;\n\n React.useEffect(() => {\n if (formikProps.values.data?.classificationId)\n return;\n\n const data: ClassificationsWidgetData = {\n classificationId: props.classification?.id,\n presentationId: props.presentation.id\n };\n\n formikProps.setFieldValue('data', data);\n }, []);\n\n return (\n <>\n <FormField<ClassificationLatestReleasedVideoWidget>\n name='name'\n label='Heading'\n placeholder='Enter a widget name...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showCharacterCounter\n />\n\n <FormField<ClassificationLatestReleasedVideoWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n\n <WidgetPreviewHeader dashboard={props.dashboard} widgetTypeId={formikProps.values.widgetId} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n description={formikProps.values.description}\n widgetTypeId={formikProps.values.widgetId}\n content={preview.data?.content}\n imageCdnUrl={props.imageCdnUrl}\n metadata={formikProps.values.metadata}\n audiences={props.audiences}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n {isContentEmpty && (\n <WizardActionInfoContainer>\n There are no new releases for this topic.\n You may add the widget anyway and it will appear with content once new releases have been added.\n </WizardActionInfoContainer>\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { SearchResultsObject } from 'libs/shared/apps/search/interfaces';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { Classification, ClassificationMediaWidgetData, ClassificationsWidgetData, CuratedWidget, TagCollection, Video } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { SubjectMemberType } from 'shared/enums';\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardCta } from 'apps/dashboard-editor/components/wizard/content-cta/DashboardWizardCta';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\nimport { DashboardWizardSearchWidgetContentView } from 'apps/dashboard-editor/views/wizard/search-widget-content/DashboardWizardSearchWidgetContentView';\n\ntype ClassificationMediaWidget = CuratedWidget<ClassificationMediaWidgetData, Video[]>;\n\nexport function AddContentClassificationMediaView(props: AddWidgetContentFormViewProps): JSX.Element {\n const [ showSearch, setShowSearch ] = React.useState(false);\n\n const formikProps = useFormikContextWrapper<ClassificationMediaWidget>();\n\n const isTopicDashboard = CuratedDashboardHelper.isClassificationDashboard(\n CuratedDashboardHelper.getDashboardTargetInfo(props.dashboard)\n );\n \n const classificationTags = Flight.useBasicFetch<TagCollection>(\n !!props.classification && SubjectRequests.classificationMembers(props.classification.id, SubjectMemberType.Tags)\n );\n\n React.useEffect(() => {\n if (formikProps.values.data?.classificationId)\n return;\n\n const data: ClassificationsWidgetData = {\n classificationId: props.classification?.id,\n presentationId: props.presentation.id\n };\n\n formikProps.setFieldValue('data', data);\n }, []);\n\n function onSelectItem(obj: SearchResultsObject<Classification>): void {\n formikProps.setFieldValue('data', {\n presentationId: props.presentation.id,\n classificationId: obj.id\n });\n\n setFormAsTouched();\n }\n\n function onExcludeLatestVideo() {\n const formData = formikProps.values.data;\n\n if (formData.offset) {\n formikProps.setFieldValue('data', { ...formData, offset: 0 });\n } else {\n formikProps.setFieldValue('data', { ...formData, offset: 1 });\n }\n }\n\n function setFormAsTouched(): void {\n formikProps.setTouched({\n ...formikProps.touched,\n data: {\n presentationId: true,\n classificationId: true\n }\n });\n }\n\n return (\n <>\n <FormField<ClassificationMediaWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar\n showCharacterCounter\n />\n\n {isTopicDashboard && (\n <ToggleShowInTableOfContents<ClassificationMediaWidget>\n dashboard={props.dashboard}\n />\n )}\n\n <FormField<ClassificationMediaWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n\n <Checkbox\n id='excludeLatestVideo'\n checked={!!formikProps.values.data.offset}\n label='Exclude latest video'\n onChange={onExcludeLatestVideo}\n />\n\n <WidgetPreviewHeader\n dashboard={props.dashboard}\n classificationTags={classificationTags.data?.data}\n />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={props.content}\n audiences={props.audiences}\n metadata={formikProps.values.metadata}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n imageCdnUrl={props.imageCdnUrl}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n\n {!props.classification && (\n <div className='d-flex justify-content-end pt-3'>\n <DashboardWizardCta\n text='Select a topic'\n setShowSearch={setShowSearch}\n />\n </div>\n )}\n\n <DashboardWizardContentTable\n audiences={props.audiences}\n content={props.content}\n />\n\n {showSearch && (\n <DashboardWizardSearchWidgetContentView\n dashboard={props.dashboard}\n closePopup={() => setShowSearch(false)}\n classificationId={props.classification?.id}\n presentationId={props.presentation.id}\n onSelectItem={onSelectItem}\n selectedIds={[formikProps.values.data.classificationId]}\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { WizardActionInfoContainer } from 'libs/shared/components/wizard/select-action/wizard-action-info-container/WizardActionInfoContainer';\nimport { CompanyVideosWidgetData, CuratedWidget, Video } from 'libs/shared/interfaces';\n\nimport { DashboardRequests } from 'shared/flight-requests/DashboardRequests';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { ConfirmHeadingOptional } from 'apps/dashboard-editor/components/wizard/confirm-heading-optional/ConfirmHeadingOptional';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetContentPreviewResponse } from 'apps/dashboard-editor/interfaces/data-requests/WidgetContentPreviewResponse';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\n\ntype CompanyVideosWidget = CuratedWidget<CompanyVideosWidgetData, Video[]>;\n\nexport function AddContentCompanyVideosView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<CompanyVideosWidget>();\n\n const preview = Flight.useBasicFetch<WidgetContentPreviewResponse<Video[]>>(\n !ObjectHelper.isEmpty(formikProps.values.data) && DashboardRequests.previewWidget(\n formikProps.values.widgetId,\n formikProps.values.data\n )\n );\n const isContentEmpty = preview.data?.content && preview.data.content.length === 0;\n \n function onSetHeadingOptional(headingOptional: boolean) {\n formikProps.setFieldValue('metadata', { ...formikProps.values.metadata, headingOptional });\n }\n \n function onExcludeLatestVideo() {\n const formData = formikProps.values.data;\n\n if (formData.offset) {\n formikProps.setFieldValue('data', { ...formData, offset: 0 });\n } else {\n formikProps.setFieldValue('data', { ...formData, offset: 1 });\n }\n }\n\n return (\n <>\n <ConfirmHeadingOptional\n isOptional={formikProps.values.metadata.headingOptional}\n setIsOptional={onSetHeadingOptional}\n />\n \n <FormField<CompanyVideosWidget>\n name='name'\n label='Heading'\n placeholder='Enter a widget name...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showCharacterCounter\n />\n\n <FormField<CompanyVideosWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n\n <Checkbox\n id='excludeLatestVideo'\n checked={!!formikProps.values.data.offset}\n label='Exclude latest video'\n onChange={onExcludeLatestVideo}\n />\n\n <WidgetPreviewHeader dashboard={props.dashboard} widgetTypeId={formikProps.values.widgetId} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n description={formikProps.values.description}\n widgetTypeId={formikProps.values.widgetId}\n content={preview.data?.content}\n imageCdnUrl={props.imageCdnUrl}\n metadata={formikProps.values.metadata}\n audiences={props.audiences}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n {isContentEmpty && (\n <WizardActionInfoContainer>\n There are no new releases for this company.\n You may add the widget anyway and it will appear with content once new releases have been added.\n </WizardActionInfoContainer>\n )}\n\n <DashboardWizardContentTable\n audiences={props.audiences}\n content={preview.data?.content}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { ContinueWatchingVideosWidgetData, CuratedWidget, Video } from 'libs/shared/interfaces';\n\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\n\ntype ContinueWatchingVideosWidget = CuratedWidget<ContinueWatchingVideosWidgetData, Video[]>;\n\nexport function AddContentContinueWatchingView(props: AddWidgetContentFormViewProps) {\n const formikProps = useFormikContextWrapper<ContinueWatchingVideosWidget>();\n\n return (\n <>\n <FormField<ContinueWatchingVideosWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar\n showCharacterCounter\n />\n\n <FormField<ContinueWatchingVideosWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={props.content}\n audiences={props.audiences}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n metadata={formikProps.values.metadata}\n imageCdnUrl={props.imageCdnUrl}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n </>\n );\n}\n","import { Flight } from 'libs/common/react/index';\n\nimport { useFetchAll } from 'libs/shared/hooks/UseFetchAll';\n\nimport { SubjectMemberType } from 'shared/enums';\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\n\nimport { InitialRequestVideoType } from '../utils/DashboardWizardHelper';\n\nexport function useFetchClassificationMediaMembers(\n classificationId: string,\n presentationId: string,\n memberFilter: InitialRequestVideoType\n) {\n const fetch = Flight.useGetFetch();\n\n function getMemberRequest(memberType: SubjectMemberType) {\n if (!classificationId)\n return false;\n\n return (cursor?: string) => SubjectRequests.classificationMembers(\n classificationId,\n memberType,\n presentationId,\n cursor\n );\n }\n\n const videoMembers = useFetchAll(getMemberRequest(SubjectMemberType.Videos), cursor => {\n const req = getMemberRequest(SubjectMemberType.Videos);\n\n if (!req)\n return;\n\n fetch(req(cursor));\n });\n const clipMembers = useFetchAll(getMemberRequest(SubjectMemberType.Clips), cursor => {\n const req = getMemberRequest(SubjectMemberType.Clips);\n\n if (!req)\n return;\n\n fetch(req(cursor));\n });\n const interactiveMembers = useFetchAll(getMemberRequest(SubjectMemberType.Interactives), cursor => {\n const req = getMemberRequest(SubjectMemberType.Interactives);\n\n if (!req)\n return;\n\n fetch(req(cursor));\n });\n\n if (!classificationId)\n return;\n\n switch (memberFilter) {\n case 'video':\n return videoMembers.items;\n case 'clip':\n return clipMembers.items;\n case 'interactive':\n return interactiveMembers.items;\n case null: {\n if (!videoMembers.items || !clipMembers.items || !interactiveMembers.items)\n return [];\n\n return [ ...videoMembers.items, ...clipMembers.items, ...interactiveMembers.items ];\n }\n }\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { SearchIndices, SearchResultObjectTypes } from 'libs/shared/apps/search/interfaces';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { BasePaginatedCollection, CuratedMediaWidget, DashboardTargetType, Presentation, TagCollection, Video } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { SubjectMemberType } from 'shared/enums';\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\nimport { DashboardHelper } from 'shared/utils/DashboardHelper';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { ContentPartnerRequests } from 'apps/content-partners/flight-requests/ContentPartnerRequests';\nimport { PresentationRequests } from 'apps/cv-live/flight-requests/CvLivePresentationRequests';\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { ConfirmHeadingOptional } from 'apps/dashboard-editor/components/wizard/confirm-heading-optional/ConfirmHeadingOptional';\nimport { DashboardWizardCta } from 'apps/dashboard-editor/components/wizard/content-cta/DashboardWizardCta';\nimport { DashboardWizardContentGuideline } from 'apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { WidgetErrorMessage } from 'apps/dashboard-editor/components/wizard/widget-error-message/WidgetErrorMessage';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { useFetchClassificationMediaMembers } from 'apps/dashboard-editor/hooks/useFetchClassificationMediaMembers';\nimport { InitialRequestVideoType } from 'apps/dashboard-editor/utils/DashboardWizardHelper';\nimport { isWidgetHeadingRequired, WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\nimport { CustomOnSearchOptions, DashboardWizardSearchWidgetContentView } from 'apps/dashboard-editor/views/wizard/search-widget-content/DashboardWizardSearchWidgetContentView';\n\nexport function AddContentMultipleCuratedMediaView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<CuratedMediaWidget<Video[]>>();\n const [ showSearch, setShowSearch ] = React.useState(false);\n const [ initialRequestVideoType, setInitialRequestVideoType ] = React.useState<InitialRequestVideoType>(null);\n const fetchAsync = Flight.useGetFetchAsync();\n\n const { max } = DashboardHelper.getContentGuidelineMinMax(WidgetTypeId.CuratedMedia, formikProps.values.templateId);\n const disableSelectingMore = formikProps.values.templateId === WidgetTemplate.ThumbnailFixedListMediaLarge &&\n formikProps.values.data?.objectIds?.length >= max;\n\n const prefetchedInitialResults = useFetchClassificationMediaMembers(\n props.classification?.id,\n props.presentation?.id,\n initialRequestVideoType\n );\n\n const isTopicDashboard = CuratedDashboardHelper.isClassificationDashboard(\n CuratedDashboardHelper.getDashboardTargetInfo(props.dashboard)\n );\n \n const classificationTags = Flight.useBasicFetch<TagCollection>(\n !!props.classification && SubjectRequests.classificationMembers(props.classification.id, SubjectMemberType.Tags)\n );\n\n const cvLivePresentation = Flight.useBasicFetch<Presentation>(\n PresentationRequests.cvLivePresentation()\n );\n\n const headingRequired = isWidgetHeadingRequired(\n formikProps.values.widgetId,\n formikProps.values.templateId,\n formikProps.values.metadata.headingOptional\n );\n\n function onSetHeadingOptional(headingOptional: boolean) {\n formikProps.setFieldValue('metadata', { ...formikProps.values.metadata, headingOptional });\n }\n\n const context = +cvLivePresentation.data?.id === +props.presentation?.id ? 'live' : 'clickview';\n\n // for content partner dashboard, we call a custom endpoint\n const isContentPartnerDashboard = CuratedDashboardHelper.isType(props.dashboard, DashboardTargetType.PartnerProfile);\n async function onSearch(query: string, _: SearchIndices, options: CustomOnSearchOptions) {\n return fetchAsync<BasePaginatedCollection<SearchResultObjectTypes>>(\n ContentPartnerRequests.searchVideosInContentPartner(formikProps.values.data.slug, query, options.showAllVideos)\n );\n }\n\n return (\n <>\n <ConfirmHeadingOptional\n isOptional={formikProps.values.metadata.headingOptional}\n setIsOptional={onSetHeadingOptional}\n />\n\n <FormField<CuratedMediaWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n showRequiredStar={headingRequired}\n showCharacterCounter\n />\n {isTopicDashboard && (\n <ToggleShowInTableOfContents<CuratedMediaWidget>\n dashboard={props.dashboard}\n />\n )}\n \n <FormField<CuratedMediaWidget>\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n <WidgetPreviewHeader\n dashboard={props.dashboard}\n classificationTags={classificationTags.data?.data}\n />\n <WidgetContainerView\n location='curator'\n description={formikProps.values.description}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n id={formikProps.values.id}\n name={formikProps.values.name}\n content={props.content}\n imageCdnUrl={props.imageCdnUrl}\n audiences={props.audiences}\n metadata={formikProps.values.metadata}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n <WidgetErrorMessage errorMessage={formikProps.errors.data?.objectIds} />\n\n <div className='d-flex justify-content-between align-items-center pt-3'>\n <label className='h5 mb-0'>\n Videos\n </label>\n\n <DashboardWizardCta\n text='Add videos'\n setShowSearch={setShowSearch}\n />\n </div>\n \n <DashboardWizardContentGuideline\n text={DashboardHelper.getContentGuidelineText(WidgetTypeId.CuratedMedia, formikProps.values.templateId)}\n />\n\n <DashboardWizardContentTable\n audiences={props.audiences}\n onReorderWidgets={props.onReorderWidgets}\n content={props.content}\n onRemoveItem={id => CuratedDashboardHelper.onRemoveCuratedObject(id, formikProps)}\n canModifyContents\n context={context}\n />\n\n {showSearch && (\n <DashboardWizardSearchWidgetContentView\n dashboard={props.dashboard}\n closePopup={() => setShowSearch(false)}\n classificationId={props.classification?.id}\n presentationId={props.presentation?.id}\n onSelectItem={obj => CuratedDashboardHelper.onSelectCuratedObject(obj, formikProps)}\n selectedIds={formikProps.values.data.objectIds}\n prefetchedInitialResults={prefetchedInitialResults}\n disableSelectingMore={disableSelectingMore}\n setInitialRequestVideoType={setInitialRequestVideoType}\n initialRequestVideoType={initialRequestVideoType}\n hasVideoTypeFilter\n hasShowAllVideosToggle={isContentPartnerDashboard}\n customOnSearch={isContentPartnerDashboard ? onSearch : undefined}\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { SearchIndices, SearchResultObjectTypes, SearchResultsObject } from 'libs/shared/apps/search/interfaces';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { BasePaginatedCollection, CuratedMediaWidget, DashboardTargetType, Video } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { ContentPartnerProfile } from 'shared/interfaces/models/ContentPartnerProfile';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { ContentPartnerRequests } from 'apps/content-partners/flight-requests/ContentPartnerRequests';\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardCta } from 'apps/dashboard-editor/components/wizard/content-cta/DashboardWizardCta';\nimport { DashboardWizardContentGuideline } from 'apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { WidgetErrorMessage } from 'apps/dashboard-editor/components/wizard/widget-error-message/WidgetErrorMessage';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { useFetchClassificationMediaMembers } from 'apps/dashboard-editor/hooks/useFetchClassificationMediaMembers';\nimport { InitialRequestVideoType } from 'apps/dashboard-editor/utils/DashboardWizardHelper';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\nimport { CustomOnSearchOptions, DashboardWizardSearchWidgetContentView } from 'apps/dashboard-editor/views/wizard/search-widget-content/DashboardWizardSearchWidgetContentView';\n\nexport function AddContentSingleCuratedMediaView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<CuratedMediaWidget<Video[]>>();\n const [ initialRequestVideoType, setInitialRequestVideoType ] = React.useState<InitialRequestVideoType>(null);\n const fetchAsync = Flight.useGetFetchAsync();\n\n const [ showSearch, setShowSearch ] = React.useState(false);\n\n const prefetchedInitialResults = useFetchClassificationMediaMembers(\n props.classification?.id,\n props.presentation?.id,\n initialRequestVideoType\n );\n\n function onSelectItem(obj: SearchResultsObject<Video>): void {\n formikProps.setFieldValue('data', { ...formikProps.values.data, objectIds: [obj.id]});\n\n setFormAsTouched();\n }\n\n function setFormAsTouched(): void {\n formikProps.setTouched({\n ...formikProps.touched,\n data: {\n objectIds: true\n }\n });\n }\n\n const isTopicDashboard = CuratedDashboardHelper.isClassificationDashboard(\n CuratedDashboardHelper.getDashboardTargetInfo(props.dashboard)\n );\n\n // for content partner dashboard, we call a custom endpoint\n const isContentPartnerDashboard = CuratedDashboardHelper.isType(props.dashboard, DashboardTargetType.PartnerProfile);\n const contentPartner = Flight.useBasicFetch<ContentPartnerProfile>(\n isContentPartnerDashboard &&\n ContentPartnerRequests.getContentPartnerBySlug(formikProps.values.data.slug)\n );\n async function onSearch(query: string, _: SearchIndices, options: CustomOnSearchOptions) {\n if (!contentPartner.data) return;\n return fetchAsync<BasePaginatedCollection<SearchResultObjectTypes>>(\n ContentPartnerRequests.searchVideosInContentPartner(formikProps.values.data.slug, query, options.showAllVideos)\n );\n }\n\n return (\n <>\n <FormField<CuratedMediaWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showCharacterCounter\n />\n\n {isTopicDashboard && (\n <ToggleShowInTableOfContents<CuratedMediaWidget>\n dashboard={props.dashboard}\n />\n )}\n \n <FormField<CuratedMediaWidget>\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n description={formikProps.values.description}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n id={formikProps.values.id}\n name={formikProps.values.name}\n content={props.content}\n audiences={props.audiences}\n imageCdnUrl={props.imageCdnUrl}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n metadata={formikProps.values.metadata}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n <WidgetErrorMessage errorMessage={formikProps.errors.data?.objectIds} />\n\n <div className='d-flex justify-content-end pt-3'>\n <DashboardWizardCta\n text='Select a video'\n setShowSearch={setShowSearch}\n />\n </div>\n\n <DashboardWizardContentGuideline />\n\n {showSearch && (\n <DashboardWizardSearchWidgetContentView\n dashboard={props.dashboard}\n closePopup={() => setShowSearch(false)}\n classificationId={props.classification?.id}\n presentationId={props.presentation?.id}\n onSelectItem={onSelectItem}\n selectedIds={formikProps.values.data.objectIds}\n prefetchedInitialResults={prefetchedInitialResults}\n setInitialRequestVideoType={setInitialRequestVideoType}\n initialRequestVideoType={initialRequestVideoType}\n hasVideoTypeFilter\n customOnSearch={isContentPartnerDashboard ? onSearch : undefined}\n hasShowAllVideosToggle={isContentPartnerDashboard}\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { CuratedMediaWidget, Video } from 'libs/shared/interfaces';\n\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { AddContentMultipleCuratedMediaView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-curated-media/AddContentMultipleCuratedMediaView';\nimport { AddContentSingleCuratedMediaView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-curated-media/AddContentSingleCuratedMediaView';\n\nexport function AddContentCuratedMediaViewContainer(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<CuratedMediaWidget<Video[]>>();\n const templateId = formikProps.values.templateId;\n\n if (templateId === WidgetTemplate.ThumbnailFeaturedMedia || templateId === WidgetTemplate.ThumbnailHeroMedia)\n return <AddContentSingleCuratedMediaView {...props} />;\n \n return <AddContentMultipleCuratedMediaView {...props} />;\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { WizardActionInfoContainer } from 'libs/shared/components/wizard/select-action/wizard-action-info-container/WizardActionInfoContainer';\nimport { CuratedWidget, Video } from 'libs/shared/interfaces';\n\nimport { DashboardRequests } from 'shared/flight-requests/DashboardRequests';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetContentPreviewResponse } from 'apps/dashboard-editor/interfaces/data-requests/WidgetContentPreviewResponse';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\n\nexport function AddContentLatestReleasedCompanyVideoView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<CuratedWidget>();\n\n const preview = Flight.useBasicFetch<WidgetContentPreviewResponse<Video[]>>(\n !ObjectHelper.isEmpty(formikProps.values.data) && DashboardRequests.previewWidget(\n formikProps.values.widgetId,\n formikProps.values.data\n )\n );\n const isContentEmpty = !preview.data?.content;\n\n return (\n <>\n <FormField<CuratedWidget>\n name='name'\n label='Heading'\n placeholder='Enter a widget name...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showCharacterCounter\n />\n\n <FormField<CuratedWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n\n <WidgetPreviewHeader dashboard={props.dashboard} widgetTypeId={formikProps.values.widgetId} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n description={formikProps.values.description}\n widgetTypeId={formikProps.values.widgetId}\n content={preview.data?.content}\n imageCdnUrl={props.imageCdnUrl}\n metadata={formikProps.values.metadata}\n audiences={props.audiences}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n {isContentEmpty && (\n <WizardActionInfoContainer>\n There are no new releases for this company.\n You may add the widget anyway and it will appear with content once new releases have been added.\n </WizardActionInfoContainer>\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { WizardActionInfoContainer } from 'libs/shared/components/wizard/select-action/wizard-action-info-container/WizardActionInfoContainer';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { CuratedWidget, LatestReleasedVideosWidgetData, Video } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { ImageSelect } from 'shared/components';\nimport { Actions, AppChannels } from 'shared/constants';\nimport { DashboardRequests } from 'shared/flight-requests/DashboardRequests';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardContentGuideline } from 'apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetContentPreviewResponse } from 'apps/dashboard-editor/interfaces/data-requests/WidgetContentPreviewResponse';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\n\ntype LatestReleasedVideosWidget = CuratedWidget<LatestReleasedVideosWidgetData, Video[]>;\n\nexport function AddContentLatestReleasedVideosView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<LatestReleasedVideosWidget>();\n\n const { from, to } = CuratedDashboardHelper.getLatestReleasedTimeRange();\n\n const preview = Flight.useBasicFetch<WidgetContentPreviewResponse<Video[]>>(\n !ObjectHelper.isEmpty(formikProps.values.data) && DashboardRequests.previewWidget(\n formikProps.values.widgetId,\n formikProps.values.data,\n {\n from,\n to\n }\n )\n );\n const isContentEmpty = preview.data?.content && preview.data.content.length === 0;\n\n React.useEffect(() => {\n const data: LatestReleasedVideosWidgetData = {\n presentationId: props.presentation.id\n };\n\n formikProps.setFieldValue('data', data);\n }, []);\n\n const isTopicDashboard = CuratedDashboardHelper.isClassificationDashboard(\n CuratedDashboardHelper.getDashboardTargetInfo(props.dashboard)\n );\n\n return (\n <>\n <FormField<LatestReleasedVideosWidget>\n name='name'\n label='Banner heading'\n placeholder='Enter a banner heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar\n showCharacterCounter\n />\n\n {isTopicDashboard && (\n <ToggleShowInTableOfContents<LatestReleasedVideosWidget>\n dashboard={props.dashboard}\n />\n )}\n\n <ImageSelect\n imageType={ImageType.Banners}\n fieldName='metadata.imageId'\n label='Banner image'\n setSelectedImage={image => {\n formikProps.setFieldValue('metadata', { ...formikProps.values.metadata, imageId: image.id });\n }}\n showRequiredStar\n uploadAppLink={{\n application: AppChannels.DASHBOARD_EDITOR,\n action: Actions.DashboardEditor.ADD_CONTENT_IMAGE_UPLOAD\n }}\n />\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n description={formikProps.values.description}\n widgetTypeId={formikProps.values.widgetId}\n content={preview.data?.content}\n imageCdnUrl={props.imageCdnUrl}\n metadata={formikProps.values.metadata}\n audiences={props.audiences}\n isEditing\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n commonVideoProps={props.commonVideoProps}\n />\n {isContentEmpty && (\n <WizardActionInfoContainer>\n There are no new releases for this presentation.\n You may add the widget anyway and it will appear with content once new releases have been added.\n </WizardActionInfoContainer>\n )}\n <DashboardWizardContentGuideline />\n\n <DashboardWizardContentTable\n audiences={props.audiences}\n content={preview.data?.content}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { SearchResultsObject } from 'libs/shared/apps/search/interfaces';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { CuratedWidget, Playlist, PlaylistMediaWidgetData, TagCollection, Video, VideoCollection } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { SubjectMemberType } from 'shared/enums';\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\nimport { useCommonVideoProps } from 'shared/hooks/UseCommonVideoProps';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardCta } from 'apps/dashboard-editor/components/wizard/content-cta/DashboardWizardCta';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { DashboardWizardHelper } from 'apps/dashboard-editor/utils/DashboardWizardHelper';\nimport { DashboardWizardSearchWidgetContentView } from 'apps/dashboard-editor/views/wizard/search-widget-content/DashboardWizardSearchWidgetContentView';\nimport { PlaylistRequests } from 'apps/playlists/flight-requests/CuratorPlaylistRequests';\n\ntype PlaylistMediaWidget = CuratedWidget<PlaylistMediaWidgetData, Video[]>;\n\nexport function AddContentPlaylistMediaView(props: AddWidgetContentFormViewProps): JSX.Element {\n const [ showSearch, setShowSearch ] = React.useState(false);\n const formikProps = useFormikContextWrapper<PlaylistMediaWidget>();\n\n const playlistId = formikProps.values.data?.playlistId;\n\n const { commonVideoProps } = useCommonVideoProps();\n\n const playlist = Flight.useBasicFetch<Playlist>(!!playlistId &&\n PlaylistRequests.playlist(playlistId));\n const videos = Flight.useBasicFetch<VideoCollection>(!!playlistId &&\n PlaylistRequests.playlistVideosWithMetadata(playlistId, props.presentation.id));\n\n const classificationTags = Flight.useBasicFetch<TagCollection>(\n !!props.classification?.id && SubjectRequests.classificationMembers(props.classification.id, SubjectMemberType.Tags)\n );\n\n React.useEffect(() => {\n if (!playlist.data)\n return;\n\n formikProps.setFieldValue('name', playlist.data.name || '');\n formikProps.setFieldValue('description', playlist.data.description || '');\n }, [playlist.data]);\n\n function onSelectItem(playlist: SearchResultsObject<Playlist>): void {\n formikProps.setFieldValue('data', { ...formikProps.values.data, playlistId: playlist.id });\n\n setFormAsTouched();\n }\n\n function setFormAsTouched(): void {\n formikProps.setTouched({\n ...formikProps.touched,\n data: {\n playlistId: true\n }\n });\n }\n\n function getDescriptionHelper() {\n const descriptionHelper: {\n placeholder: string,\n className: string\n } = {\n placeholder: 'Select a playlist',\n className: ''\n };\n\n // When a playlist is selected and it has no description, we show different placeholder\n if (formikProps.values.data.playlistId && !playlist.data?.description) {\n descriptionHelper.placeholder = 'This playlist has no description';\n descriptionHelper.className = 'fst-italic';\n }\n return descriptionHelper;\n }\n\n const descriptionHelper = getDescriptionHelper();\n\n const isTopicDashboard = CuratedDashboardHelper.isClassificationDashboard(\n CuratedDashboardHelper.getDashboardTargetInfo(props.dashboard)\n );\n\n return (\n <>\n <FormField<PlaylistMediaWidget>\n name='name'\n label='Heading'\n placeholder='Select a playlist'\n autoFocus\n disabled\n />\n\n {isTopicDashboard && (\n <ToggleShowInTableOfContents<PlaylistMediaWidget>\n dashboard={props.dashboard}\n />\n )}\n \n <FormField<PlaylistMediaWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder={descriptionHelper.placeholder}\n className={descriptionHelper.className}\n disabled\n />\n <WidgetPreviewHeader\n dashboard={props.dashboard}\n classificationTags={classificationTags.data?.data}\n />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={videos.data?.data}\n audiences={props.audiences}\n metadata={formikProps.values.metadata}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n imageCdnUrl={props.imageCdnUrl}\n resourceThumbnailFallbackImageUrl=''\n isEditing\n commonVideoProps={commonVideoProps}\n />\n\n <div className='d-flex justify-content-end pt-3'>\n <DashboardWizardCta\n text='Select a playlist'\n setShowSearch={setShowSearch}\n />\n </div>\n\n <DashboardWizardContentTable audiences={props.audiences} content={videos.data?.data} />\n\n {showSearch && (\n <DashboardWizardSearchWidgetContentView\n dashboard={props.dashboard}\n closePopup={() => setShowSearch(false)}\n classificationId={props.classification?.id}\n presentationId={props.presentation.id}\n onSelectItem={onSelectItem}\n selectedIds={[formikProps.values.data.playlistId]}\n initialResultsRequests={DashboardWizardHelper.getInitialResultsRequests(\n CuratedDashboardHelper.getDashboardTargetType(props.dashboard),\n MasterType.Playlist,\n props.presentation.id,\n props.classification?.id\n )}\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { SearchResultsObject } from 'libs/shared/apps/search/interfaces';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { CuratedWidget, Playlist, SeriesMediaWidgetData, TagCollection, Video } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { SubjectMemberType } from 'shared/enums';\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\nimport { useCommonVideoProps } from 'shared/hooks/UseCommonVideoProps';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardCta } from 'apps/dashboard-editor/components/wizard/content-cta/DashboardWizardCta';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { WidgetErrorMessage } from 'apps/dashboard-editor/components/wizard/widget-error-message/WidgetErrorMessage';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { DashboardWizardHelper } from 'apps/dashboard-editor/utils/DashboardWizardHelper';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\nimport { DashboardWizardSearchWidgetContentView } from 'apps/dashboard-editor/views/wizard/search-widget-content/DashboardWizardSearchWidgetContentView';\n\ntype SortOption = 'seriesSort' | 'reverseSeriesSort' | 'newest' | 'oldest' | 'atoz' | 'ztoa' | 'timestamp';\n\nconst SORT_OPTIONS: Record<SortOption, string> = {\n timestamp: 'Recently added to series',\n reverseSeriesSort: 'Latest episode',\n seriesSort: 'Earliest episode',\n newest: 'Recently uploaded',\n oldest: 'Oldest uploads',\n atoz: 'A-Z',\n ztoa: 'Z-A'\n};\n\nfunction deriveSortOption(widget: SeriesMediaWidget): SortOption {\n if (!widget.data.options?.sort)\n return null;\n\n switch (widget.data.options.sort) {\n case 'seriesSort':\n return widget.data.options.order === 'ASC' ? 'seriesSort' : 'reverseSeriesSort';\n case 'dateCreated':\n return widget.data.options.order === 'ASC' ? 'oldest' : 'newest';\n case 'name':\n return widget.data.options.order === 'ASC' ? 'atoz' : 'ztoa';\n case 'timestamp':\n return 'timestamp';\n }\n}\n\ntype SeriesMediaWidget = CuratedWidget<SeriesMediaWidgetData, Video[]>;\n\nexport function AddContentSeriesMediaView(props: AddWidgetContentFormViewProps): JSX.Element {\n const [ showSearch, setShowSearch ] = React.useState(false);\n const formikProps = useFormikContextWrapper<SeriesMediaWidget>();\n\n const { commonVideoProps } = useCommonVideoProps();\n\n const [ sortOption, setSortOption ] = React.useState<SortOption>(deriveSortOption(formikProps.values));\n\n const classificationTags = Flight.useBasicFetch<TagCollection>(\n !!props.classification?.id && SubjectRequests.classificationMembers(props.classification.id, SubjectMemberType.Tags)\n );\n\n function onSelectItem(playlist: SearchResultsObject<Playlist>): void {\n formikProps.setFieldValue('data', { ...formikProps.values.data, seriesId: playlist.id });\n\n setFormAsTouched();\n }\n\n function setFormAsTouched(): void {\n formikProps.setTouched({\n ...formikProps.touched,\n data: {\n seriesId: true\n }\n });\n }\n\n function onSelectSortOption(sortOption: SortOption): void {\n if (!sortOption) {\n formikProps.setFieldValue('data.options.sort', null);\n formikProps.setFieldValue('data.options.order', null);\n return;\n }\n\n switch (sortOption) {\n case 'seriesSort': {\n formikProps.setFieldValue('data.options.sort', 'seriesSort');\n formikProps.setFieldValue('data.options.order', 'ASC');\n break;\n }\n\n case 'reverseSeriesSort': {\n formikProps.setFieldValue('data.options.sort', 'seriesSort');\n formikProps.setFieldValue('data.options.order', 'DESC');\n break;\n }\n\n case 'newest': {\n formikProps.setFieldValue('data.options.sort', 'dateCreated');\n formikProps.setFieldValue('data.options.order', 'DESC');\n break;\n }\n\n case 'oldest': {\n formikProps.setFieldValue('data.options.sort', 'dateCreated');\n formikProps.setFieldValue('data.options.order', 'ASC');\n break;\n }\n\n case 'atoz': {\n formikProps.setFieldValue('data.options.sort', 'name');\n formikProps.setFieldValue('data.options.order', 'ASC');\n break;\n }\n\n case 'ztoa': {\n formikProps.setFieldValue('data.options.sort', 'name');\n formikProps.setFieldValue('data.options.order', 'DESC');\n break;\n }\n\n case 'timestamp': {\n formikProps.setFieldValue('data.options.sort', 'timestamp');\n formikProps.setFieldValue('data.options.order', 'DESC');\n break;\n }\n }\n }\n\n const isTopicDashboard = CuratedDashboardHelper.isClassificationDashboard(\n CuratedDashboardHelper.getDashboardTargetInfo(props.dashboard)\n );\n\n return (\n <>\n <FormField<SeriesMediaWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n showRequiredStar\n autoFocus\n showCharacterCounter\n />\n\n {isTopicDashboard && (\n <ToggleShowInTableOfContents<SeriesMediaWidget>\n dashboard={props.dashboard}\n />\n )}\n \n <FormField<SeriesMediaWidget>\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n\n <FormField<SeriesMediaWidget>\n label='Sort by'\n name='sortOption'\n as='select'\n value={sortOption || 'none'}\n showRequiredStar\n onChange={(e: React.ChangeEvent<HTMLSelectElement>) => {\n if (e.target.value === 'none')\n return;\n\n setSortOption(e.target.value as SortOption);\n onSelectSortOption(e.target.value as SortOption);\n }}\n >\n <option key='none' value='none' disabled>Select an option...</option>\n {Object.entries(SORT_OPTIONS).map(([ sortOption, label ]) => {\n return <option key={sortOption} value={sortOption}>{label}</option>;\n })}\n </FormField>\n <div className='pt-3'>\n <WidgetErrorMessage errorMessage={formikProps.errors.data?.options?.order} />\n </div>\n\n <WidgetPreviewHeader\n dashboard={props.dashboard}\n classificationTags={classificationTags.data?.data}\n />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={props.content}\n audiences={props.audiences}\n metadata={formikProps.values.metadata}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n imageCdnUrl={props.imageCdnUrl}\n resourceThumbnailFallbackImageUrl=''\n isEditing\n commonVideoProps={commonVideoProps}\n />\n\n <div className='d-flex justify-content-end pt-3'>\n <DashboardWizardCta\n text='Select a series'\n setShowSearch={setShowSearch}\n />\n </div>\n\n <DashboardWizardContentTable audiences={props.audiences} content={props.content} />\n\n {showSearch && (\n <DashboardWizardSearchWidgetContentView\n dashboard={props.dashboard}\n closePopup={() => setShowSearch(false)}\n classificationId={props.classification?.id}\n presentationId={props.presentation?.id}\n onSelectItem={onSelectItem}\n selectedIds={[formikProps.values.data.seriesId]}\n initialResultsRequests={DashboardWizardHelper.getInitialResultsRequests(\n CuratedDashboardHelper.getDashboardTargetType(props.dashboard),\n MasterType.Series,\n props.presentation?.id,\n props.classification?.id\n )}\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AllSearchIndicesVideoStyle, SearchIndices } from 'libs/shared/apps/search/interfaces';\nimport { ButtonIcon } from 'libs/shared/constants/WidgetThemingConstants';\nimport { CuratorGroup } from 'libs/shared/enums/CuratorGroup';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { SettingsHash } from 'libs/shared/hooks/useSettings';\nimport { CalendarSvg } from 'libs/shared/images/svg/objects/CalendarSvg';\nimport { PlaylistSvg } from 'libs/shared/images/svg/objects/PlaylistSvg';\nimport { PopcornSvg } from 'libs/shared/images/svg/objects/PopcornSvg';\nimport { QuestionMarkSvg } from 'libs/shared/images/svg/objects/QuestionMarkSvg';\nimport { SchoolSvg } from 'libs/shared/images/svg/objects/SchoolSvg';\nimport { SpeechSvg } from 'libs/shared/images/svg/objects/SpeechSvg';\nimport { VideoSvg } from 'libs/shared/images/svg/objects/VideoSvg';\nimport { WidgetAllVideosSvg } from 'libs/shared/images/svg/widgets/WidgetAllVideosSvg';\nimport { WidgetAuthorReviewerSvg } from 'libs/shared/images/svg/widgets/WidgetAuthorReviewerSvg';\nimport { WidgetBecauseYouWatchedSvg } from 'libs/shared/images/svg/widgets/WidgetBecauseYouWatchedSvg';\nimport { WidgetBlurbSvg } from 'libs/shared/images/svg/widgets/WidgetBlurbSvg';\nimport { WidgetClassificationLatestReleasedVideosSvg } from 'libs/shared/images/svg/widgets/WidgetClassificationLatestReleasedVideosSvg';\nimport { WidgetCollectionVideosSvg } from 'libs/shared/images/svg/widgets/WidgetCollectionVideosSvg';\nimport { WidgetCompanyVideosSvg } from 'libs/shared/images/svg/widgets/WidgetCompanyVideosSvg';\nimport { WidgetContinueWatchingSvg } from 'libs/shared/images/svg/widgets/WidgetContinueWatchingSvg';\nimport { WidgetCuratedMultimediaSvg } from 'libs/shared/images/svg/widgets/WidgetCuratedMultimediaSvg';\nimport { WidgetLatestReleasedVideosSvg } from 'libs/shared/images/svg/widgets/WidgetLatestReleasedVideosSvg';\nimport { WidgetListOfChildrenTopicsSvg } from 'libs/shared/images/svg/widgets/WidgetListOfChildrenTopicsSvg';\nimport { WidgetNetworkSvg } from 'libs/shared/images/svg/widgets/WidgetNetworkSvg';\nimport { WidgetPersonalisedTopicsSvg } from 'libs/shared/images/svg/widgets/WidgetPersonalisedTopicsSvg';\nimport { WidgetRecentlyAddedSvg } from 'libs/shared/images/svg/widgets/WidgetRecentlyAddedSvg';\nimport { WidgetSeasonalClassificationMediaSvg } from 'libs/shared/images/svg/widgets/WidgetSeasonalClassificationMediaSvg';\nimport { WidgetSeriesSvg } from 'libs/shared/images/svg/widgets/WidgetSeriesSvg';\nimport { WidgetTopicSvg } from 'libs/shared/images/svg/widgets/WidgetTopicSvg';\nimport { WidgetTrendingClassificationsMediaSvg } from 'libs/shared/images/svg/widgets/WidgetTrendingClassificationsMediaSvg';\nimport { WidgetTrendingClassificationsSvg } from 'libs/shared/images/svg/widgets/WidgetTrendingClassificationsSvg';\nimport { WidgetVideosSvg } from 'libs/shared/images/svg/widgets/WidgetVideosSvg';\nimport { AuthorReviewerWidgetData, Classification, CompanyClassificationVideosWidgetData, CompanyDashboardInfo, CuratedDashboard, CuratedWidgetContent, CuratedWidgetCtaAppLink, CuratedWidgetData, DashboardTargetInfo, DashboardTargetType, ParentAndChildClassificationsWidgetData, Presentation, PresentationAudience, SeriesMediaWidgetData, WidgetMetadata } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { SvgIcon } from 'libs/shared/utils/SvgHelper';\n\nimport { AddContentAuthorReviewerView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-author-reviewer/AddContentAuthorReviewerView';\nimport { AddContentBlurbView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-blurb/AddContentBlurbView';\nimport { AddContentFaqView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-faq/AddContentFaqView';\nimport { AddContentFeedbackView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-feedback/AddContentFeedbackView';\nimport { AddContentClassificationsContainerView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/add-content-classifications/AddContentClassificationsContainerView';\nimport { AddContentClassificationsWithChildrenView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/add-content-classifications-with-children/AddContentClassificationsWithChildrenView';\nimport { AddContentCuratedClassificationsViewContainer } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/add-content-curated-classifications/AddContentCuratedClassificationsViewContainer';\nimport { AddContentPersonalisedTopicsView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/add-content-personalised-topics/AddContentPersonalisedTopicsView';\nimport { AddContentClassificationLatestReleasedVideosView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/latest-released-videos/AddContentClassificationLatestVideosView';\nimport { AddContentSpecialEventClassificationsView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/special-event-classifications/AddContentSpecialEventClassificationsView';\nimport { AddContentContentPartnerVideoView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/content-partner/add-content-content-partner-video/AddContentContentPartnerVideoView';\nimport { AddContentCuratedContentPartnersView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/content-partner/AddContentCuratedContentPartnersView';\nimport { AddUpcomingLivestreamsView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/livestreams/add-upcoming-livestreams/AddUpcomingLivestreamsView';\nimport { AddContentCuratedMultimediaView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/multimedia/add-content-curated-multimedia/AddContentCuratedMultimediaView';\nimport { AddContentCuratedCompaniesView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/network/add-content-curated-companies/AddContentCuratedCompanies';\nimport { AddContentCuratedPlaylistsView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/playlists/add-content-curated-playlists/AddContentCuratedPlaylistsView';\nimport { AddContentPresentationsView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/presentations/add-content-presentations/AddContentPresentationsView';\nimport { AddContentRatingsView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/search-filter/add-content-ratings/AddContentRatingsView';\nimport { AddContentCuratedSeriesView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/series/add-content-curated-series/AddContentCuratedSeriesView';\nimport { AddContentBecauseYouWatchedView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-because-you-watched/AddContentBecauseYouWatchedView';\nimport { AddContentCompanyClassificationVideosView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-classification-company-videos/AddContentCompanyClassificationVideosView';\nimport { AddContentClassificationLatestReleasedVideoView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-classification-latest-released-video/AddContentClassificationLatestReleasedVideoView';\nimport { AddContentClassificationMediaView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-classification-media/AddContentClassificationMediaView';\nimport { AddContentCompanyVideosView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-company-videos/AddContentCompanyVideos';\nimport { AddContentContinueWatchingView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-continue-watching/AddContentContinueWatchingView';\nimport { AddContentCuratedMediaViewContainer } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-curated-media/AddContentCuratedMediaView';\nimport { AddContentLatestReleasedCompanyVideoView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-latest-company-video/AddContentLatestCompanyVideo';\nimport { AddContentLatestReleasedVideosView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-latest-released-videos/AddContentLatestReleasedVideos';\nimport { AddContentPlaylistMediaView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-playlist-media/AddContentPlaylistMediaView';\n\nimport { AddContentSeriesMediaView } from '../views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-series-media/AddContentSeriesMediaView';\n\nconst bgIndigo = 'bg-indigo';\nconst bgPurple = 'bg-purple';\nconst bgNavy = 'bg-navy';\nconst bgCyan = 'bg-cyan';\nconst bgPink = 'bg-pink';\nconst bgGreen = 'bg-green';\nconst bgBlue = 'bg-blue';\nconst bgYellow = 'bg-yellow';\n\nconst videoGroup = 'Videos';\nconst multimediaGroup = 'Multimedia';\nconst topicsGroup = 'Topics';\nconst seriesGroup = 'Series';\nconst playlistGroup = 'Playlists';\nconst blurbGroup = 'Blurbs';\nconst searchFilterGroup = 'Search filters';\nconst networkGroup = 'Networks';\nconst presentationsGroup = 'Presentations';\nconst livestreamsGroup = 'Livestreams';\n\ntype CuratorWidgetTypeIdConfigMap = Record<WidgetTypeId, CuratorWidgetTypeIdConfigType>;\n\nexport interface AddWidgetContentFormViewProps {\n dashboard: CuratedDashboard;\n audiences: PresentationAudience[];\n presentation: Presentation;\n isEditing: boolean;\n onReorderWidgets: (content: CuratedWidgetContent) => void;\n content?: CuratedWidgetContent;\n classification?: Classification;\n imageCdnUrl?: string;\n availablePresentations: Presentation[];\n settings: SettingsHash;\n commonVideoProps: CommonVideoProps;\n customResultRequest?: Flight.Request;\n}\n\ninterface CuratorWidgetTypeIdConfigType {\n icon: SvgIcon;\n bgColourClass: string;\n groupName?: string;\n displayName?: string;\n searchIndices?: SearchIndices[];\n formView?: (props: AddWidgetContentFormViewProps) => React.ReactElement;\n getInitialData?: (targetInfo: DashboardTargetInfo, templateId: WidgetTemplate) => HashObject;\n getInitialMetadata?: (targetInfo: DashboardTargetInfo, templateId: WidgetTemplate) => Partial<WidgetMetadata>;\n canFetchPreview: (widgetData: CuratedWidgetData, targetInfo: DashboardTargetInfo) => boolean;\n targets: {\n [ProductId.Primary]?: Partial<Record<DashboardTargetType, boolean>>,\n [ProductId.StreamableLearning]?: Partial<Record<DashboardTargetType, boolean>>\n };\n groups: CuratorGroup[];\n}\n\nexport const CuratorWidgetTypeIdConfig: CuratorWidgetTypeIdConfigMap = {\n [WidgetTypeId.CuratedMedia]: {\n icon: VideoSvg,\n bgColourClass: bgNavy,\n groupName: videoGroup,\n displayName: 'Video',\n searchIndices: AllSearchIndicesVideoStyle,\n formView: AddContentCuratedMediaViewContainer,\n canFetchPreview: (widgetData: CuratedWidgetData) => {\n return !!widgetData.objectIds?.length;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.MoviesAndTv]: true,\n [DashboardTargetType.Classification]: true,\n [DashboardTargetType.Discover]: true,\n [DashboardTargetType.Company]: true,\n [DashboardTargetType.PartnerProfile]: true\n },\n [ProductId.StreamableLearning]: {\n [DashboardTargetType.Discover]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator, CuratorGroup.StreamableCurator ]\n },\n \n // All media, and sorted with latest publish date\n [WidgetTypeId.ClassificationMedia]: {\n icon: WidgetRecentlyAddedSvg,\n bgColourClass: bgNavy,\n groupName: videoGroup,\n displayName: 'Recently added videos in a topic',\n searchIndices: ['classification'],\n formView: AddContentClassificationMediaView,\n canFetchPreview: (widgetData: CuratedWidgetData) => {\n return !!widgetData.classificationId;\n },\n targets: {\n [ProductId.StreamableLearning]: {\n [DashboardTargetType.Classification]: true\n },\n [ProductId.Primary]: {\n [DashboardTargetType.Discover]: false\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator, CuratorGroup.StreamableCurator ]\n },\n\n [WidgetTypeId.PlaylistMedia]: {\n icon: WidgetCollectionVideosSvg,\n bgColourClass: bgNavy,\n groupName: videoGroup,\n displayName: 'Playlist videos',\n searchIndices: ['playlist'],\n formView: AddContentPlaylistMediaView,\n canFetchPreview: () => {\n return true;\n },\n targets: {},\n groups: []\n },\n\n [WidgetTypeId.SeriesMedia]: {\n icon: WidgetCollectionVideosSvg,\n bgColourClass: bgNavy,\n groupName: videoGroup,\n displayName: 'Series videos',\n searchIndices: ['series'],\n formView: AddContentSeriesMediaView,\n canFetchPreview: (widgetData: SeriesMediaWidgetData) => {\n return !!widgetData.seriesId && !!widgetData.options?.sort;\n },\n getInitialData: () => {\n return {\n options: {}\n };\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Discover]: true,\n [DashboardTargetType.Classification]: true,\n [DashboardTargetType.MoviesAndTv]: true,\n [DashboardTargetType.Company]: true,\n [DashboardTargetType.PartnerProfile]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n\n [WidgetTypeId.LatestReleasedVideos]: {\n icon: WidgetLatestReleasedVideosSvg,\n bgColourClass: bgNavy,\n groupName: videoGroup,\n displayName: 'Recent uploads',\n formView: AddContentLatestReleasedVideosView,\n canFetchPreview: () => {\n return true;\n },\n targets: {},\n groups: []\n },\n\n [WidgetTypeId.ClassificationLatestReleasedVideosV2]: {\n icon: WidgetClassificationLatestReleasedVideosSvg,\n bgColourClass: bgNavy,\n groupName: videoGroup,\n displayName: 'New releases',\n searchIndices: ['classification'],\n formView: AddContentClassificationsWithChildrenView,\n canFetchPreview: (data: ParentAndChildClassificationsWidgetData, targetInfo: DashboardTargetInfo) => {\n if (targetInfo.targetType === DashboardTargetType.Discover)\n return true;\n\n return !!data.classifications?.length;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Classification]: true,\n [DashboardTargetType.Discover]: true\n }\n },\n getInitialData: target => {\n if (target.targetType === DashboardTargetType.Classification) {\n return {\n classifications: []\n };\n }\n\n return {};\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n\n [WidgetTypeId.SeasonalClassificationMedia]: {\n icon: WidgetSeasonalClassificationMediaSvg,\n bgColourClass: bgNavy,\n groupName: videoGroup,\n displayName: 'Seasonal topic videos',\n formView: AddContentClassificationsWithChildrenView,\n canFetchPreview: () => {\n return true;\n },\n getInitialData: () => {\n return {\n classifications: []\n };\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Classification]: true\n }\n },\n searchIndices: ['classification'],\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n\n [WidgetTypeId.TrendingClassificationsMedia]: {\n icon: WidgetTrendingClassificationsMediaSvg,\n bgColourClass: bgNavy,\n groupName: videoGroup,\n displayName: 'Trending videos',\n searchIndices: ['classification'],\n formView: AddContentClassificationsWithChildrenView,\n canFetchPreview: () => {\n return true;\n },\n getInitialData: () => {\n return {\n classifications: []\n };\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Classification]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n\n [WidgetTypeId.CuratedMultimedia]: {\n icon: WidgetCuratedMultimediaSvg,\n bgColourClass: bgYellow,\n groupName: multimediaGroup,\n displayName: 'Multimedia',\n searchIndices: AllSearchIndicesVideoStyle,\n formView: AddContentCuratedMultimediaView,\n canFetchPreview: () => {\n return true;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Classification]: true,\n [DashboardTargetType.PartnerProfile]: true\n }\n },\n getInitialData: () => {\n return {\n multimedias: []\n };\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n\n [WidgetTypeId.CuratedClassifications]: {\n icon: WidgetTopicSvg,\n bgColourClass: bgPurple,\n groupName: topicsGroup,\n displayName: 'Topics',\n searchIndices: ['classification'],\n formView: AddContentCuratedClassificationsViewContainer,\n canFetchPreview: (widgetData: CuratedWidgetData) => {\n return !!widgetData.objectIds?.length;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Classification]: true,\n [DashboardTargetType.ClassificationDirectory]: true,\n [DashboardTargetType.Discover]: true,\n [DashboardTargetType.MoviesAndTv]: true\n },\n [ProductId.StreamableLearning]: {\n [DashboardTargetType.Classification]: true,\n [DashboardTargetType.Discover]: true\n }\n },\n getInitialData: (targetInfo: DashboardTargetInfo, template: WidgetTemplate) => {\n if (template === WidgetTemplate.HeroBlockColourSmall && 'classificationId' in targetInfo) {\n return {\n objectIds: [targetInfo.classificationId]\n };\n }\n\n return {};\n },\n getInitialMetadata: (targetInfo: DashboardTargetInfo, template: WidgetTemplate): Partial<WidgetMetadata> => {\n if (template === WidgetTemplate.HeroBlockColourSmall && 'classificationId' in targetInfo) {\n if (targetInfo.targetType === DashboardTargetType.ClassificationDirectory) {\n return {\n cta: {\n text: 'Explore what\\'s new',\n icon: ButtonIcon.TopicNewReleases,\n appLink: CuratedWidgetCtaAppLink.TopicNewReleases\n }\n };\n }\n \n if (targetInfo.targetType === DashboardTargetType.ClassificationCurriculum) {\n return {\n cta: {\n text: 'Explore topic',\n icon: ButtonIcon.CuratedTopic,\n appLink: CuratedWidgetCtaAppLink.CuratedTopic\n }\n };\n }\n \n return {\n cta: {\n text: 'Explore all topics',\n icon: ButtonIcon.TopicDirectory,\n appLink: CuratedWidgetCtaAppLink.TopicDirectory\n }\n };\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator, CuratorGroup.StreamableCurator ]\n },\n\n [WidgetTypeId.Classifications]: {\n icon: WidgetListOfChildrenTopicsSvg,\n bgColourClass: bgPurple,\n groupName: topicsGroup,\n displayName: 'List of children topics',\n formView: AddContentClassificationsContainerView,\n canFetchPreview: () => {\n return true;\n },\n searchIndices: ['classification'],\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Discover]: true,\n [DashboardTargetType.MoviesAndTv]: true,\n [DashboardTargetType.Classification]: true,\n [DashboardTargetType.ClassificationDirectory]: true\n },\n [ProductId.StreamableLearning]: {\n [DashboardTargetType.Discover]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator, CuratorGroup.StreamableCurator ]\n },\n\n [WidgetTypeId.ClassificationLatestReleasedVideos]: {\n icon: WidgetClassificationLatestReleasedVideosSvg,\n bgColourClass: bgPurple,\n groupName: topicsGroup,\n displayName: 'New releases',\n formView: AddContentClassificationLatestReleasedVideosView,\n canFetchPreview: () => {\n return true;\n },\n targets: {},\n groups: []\n },\n\n [WidgetTypeId.SpecialEventClassifications]: {\n icon: CalendarSvg,\n bgColourClass: bgPurple,\n groupName: topicsGroup,\n displayName: 'Special events',\n formView: AddContentSpecialEventClassificationsView,\n canFetchPreview: () => {\n return true;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Classification]: true,\n [DashboardTargetType.Discover]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n\n [WidgetTypeId.LatestReleasedClassifications]: {\n icon: WidgetClassificationLatestReleasedVideosSvg,\n bgColourClass: bgPurple,\n groupName: topicsGroup,\n displayName: 'New curated topics',\n formView: AddContentClassificationsWithChildrenView,\n canFetchPreview: () => {\n return true;\n },\n searchIndices: ['classification'],\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Classification]: true,\n [DashboardTargetType.Discover]: true\n }\n },\n getInitialData: target => {\n if (target.targetType === DashboardTargetType.Classification) {\n return {\n classifications: []\n };\n }\n\n return {};\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n\n [WidgetTypeId.TrendingClassifications]: {\n icon: WidgetTrendingClassificationsSvg,\n bgColourClass: bgPurple,\n groupName: topicsGroup,\n displayName: 'Trending topics',\n formView: AddContentClassificationsWithChildrenView,\n canFetchPreview: () => {\n return true;\n },\n searchIndices: ['classification'],\n getInitialData: () => {\n return {\n classifications: []\n };\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Classification]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n\n [WidgetTypeId.PersonalisedTopics]: {\n icon: WidgetPersonalisedTopicsSvg,\n bgColourClass: bgPurple,\n groupName: topicsGroup,\n displayName: 'Personalised topics',\n formView: AddContentPersonalisedTopicsView,\n canFetchPreview: () => {\n return true;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Discover]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n\n [WidgetTypeId.CuratedSeries]: {\n icon: WidgetSeriesSvg,\n bgColourClass: bgIndigo,\n groupName: seriesGroup,\n displayName: 'Series',\n searchIndices: ['series'],\n formView: AddContentCuratedSeriesView,\n canFetchPreview: () => {\n // we call preview endpoint in the form view cuz it's has unique params\n return false;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Discover]: true,\n [DashboardTargetType.Classification]: true,\n [DashboardTargetType.MoviesAndTv]: true,\n [DashboardTargetType.Company]: true,\n [DashboardTargetType.PartnerProfile]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n\n [WidgetTypeId.CuratedPlaylists]: {\n icon: PlaylistSvg,\n bgColourClass: bgCyan,\n groupName: playlistGroup,\n displayName: 'Playlist',\n searchIndices: ['playlist'],\n formView: AddContentCuratedPlaylistsView,\n canFetchPreview: (widgetData: CuratedWidgetData) => {\n return !!widgetData.objectIds?.length;\n },\n targets: {},\n groups: []\n },\n\n [WidgetTypeId.Blurb]: {\n icon: WidgetBlurbSvg,\n bgColourClass: bgPink,\n groupName: blurbGroup,\n displayName: 'Blurb',\n formView: AddContentBlurbView,\n canFetchPreview: () => {\n return true;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.MoviesAndTv]: true,\n [DashboardTargetType.Classification]: true,\n [DashboardTargetType.Discover]: true,\n [DashboardTargetType.ClassificationDirectory]: true,\n [DashboardTargetType.PartnerProfile]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n\n [WidgetTypeId.DynamicBlurb]: {\n icon: WidgetBlurbSvg,\n bgColourClass: bgPink,\n groupName: blurbGroup,\n displayName: 'Dynamic Blurb',\n formView: AddContentBlurbView,\n canFetchPreview: () => {\n return true;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Discover]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n [WidgetTypeId.AuthorReviewer]: {\n icon: WidgetAuthorReviewerSvg,\n bgColourClass: bgPink,\n groupName: blurbGroup,\n displayName: 'Author & Reviewer',\n formView: AddContentAuthorReviewerView,\n canFetchPreview: (widgetData: AuthorReviewerWidgetData) => {\n return !!widgetData.authorId && !!widgetData.reviewerId;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Classification]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator, CuratorGroup.SeoManager ]\n },\n\n [WidgetTypeId.Faq]: {\n icon: QuestionMarkSvg,\n bgColourClass: bgBlue,\n groupName: blurbGroup,\n displayName: 'FAQ',\n formView: AddContentFaqView,\n canFetchPreview: () => {\n return true;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Classification]: true\n }\n },\n getInitialData: (_, templateId) => {\n if (templateId === WidgetTemplate.QuestionAccordion) {\n return {\n faqs: [{\n question: '',\n answer: ''\n }, {\n question: '',\n answer: ''\n }]\n };\n }\n\n return {\n faqs: [{\n question: '',\n answer: ''\n }]\n };\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator, CuratorGroup.SeoManager ]\n },\n\n [WidgetTypeId.Feedback]: {\n icon: SpeechSvg,\n bgColourClass: bgPink,\n groupName: blurbGroup,\n displayName: 'Feedback',\n formView: AddContentFeedbackView,\n canFetchPreview: () => true,\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Classification]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n\n [WidgetTypeId.Ratings]: {\n icon: PopcornSvg,\n bgColourClass: bgGreen,\n groupName: searchFilterGroup,\n displayName: 'Ratings',\n formView: AddContentRatingsView,\n canFetchPreview: (widgetData: CuratedWidgetData) => {\n return !!widgetData.objectIds?.length;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.MoviesAndTv]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n\n [WidgetTypeId.CuratedCompanies]: {\n icon: WidgetNetworkSvg,\n bgColourClass: bgGreen,\n groupName: networkGroup,\n displayName: 'Studios',\n searchIndices: ['company'],\n formView: AddContentCuratedCompaniesView,\n canFetchPreview: (widgetData: CuratedWidgetData) => {\n return !!widgetData.objectIds?.length;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.MoviesAndTv]: true\n },\n [ProductId.StreamableLearning]: {\n [DashboardTargetType.Discover]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator, CuratorGroup.StreamableCurator ]\n },\n\n [WidgetTypeId.ContinueWatching]: {\n icon: WidgetContinueWatchingSvg,\n bgColourClass: bgNavy,\n groupName: videoGroup,\n displayName: 'Continue watching',\n formView: AddContentContinueWatchingView,\n canFetchPreview: () => {\n return true;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Discover]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n\n [WidgetTypeId.BecauseYouWatched]: {\n icon: WidgetBecauseYouWatchedSvg,\n bgColourClass: bgNavy,\n groupName: videoGroup,\n displayName: 'Because you watched',\n formView: AddContentBecauseYouWatchedView,\n canFetchPreview: () => {\n return true;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Discover]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n\n [WidgetTypeId.Presentations]: {\n icon: SchoolSvg,\n bgColourClass: bgPink,\n groupName: presentationsGroup,\n displayName: 'Presentations',\n formView: AddContentPresentationsView,\n canFetchPreview: () => {\n return true;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Discover]: true\n }\n },\n groups: [CuratorGroup.Developer]\n },\n\n [WidgetTypeId.CompanyLatestReleasedVideo]: {\n icon: WidgetVideosSvg,\n bgColourClass: bgGreen,\n groupName: videoGroup,\n displayName: 'Recently added to company',\n formView: AddContentLatestReleasedCompanyVideoView,\n canFetchPreview: () => {\n return true;\n },\n targets: {\n [ProductId.StreamableLearning]: {\n [DashboardTargetType.Company]: true\n }\n },\n getInitialData: (targetInfo: CompanyDashboardInfo) => {\n if (targetInfo.targetType !== DashboardTargetType.Company)\n return {};\n \n return {\n companyId: targetInfo.companyId\n };\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.StreamableCurator ]\n },\n\n [WidgetTypeId.CompanyVideos]: {\n icon: WidgetCompanyVideosSvg,\n bgColourClass: bgNavy,\n groupName: videoGroup,\n displayName: 'Company videos',\n formView: AddContentCompanyVideosView,\n canFetchPreview: () => {\n return true;\n },\n targets: {\n [ProductId.StreamableLearning]: {\n [DashboardTargetType.Company]: true\n }\n },\n getInitialData: (targetInfo: CompanyDashboardInfo) => {\n if (targetInfo.targetType !== DashboardTargetType.Company)\n return {};\n \n return {\n companyId: targetInfo.companyId\n };\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.StreamableCurator ]\n },\n\n [WidgetTypeId.CompanyClassificationVideos]: {\n icon: WidgetVideosSvg,\n bgColourClass: bgNavy,\n groupName: videoGroup,\n displayName: 'Studio videos',\n formView: AddContentCompanyClassificationVideosView,\n canFetchPreview: (widgetData: CompanyClassificationVideosWidgetData) => {\n return !!widgetData.companyId;\n },\n searchIndices: ['company'],\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Classification]: true,\n [DashboardTargetType.Discover]: true\n }\n },\n getInitialData: targetInfo => {\n if (targetInfo.targetType === DashboardTargetType.Classification) {\n return {\n classifications: []\n };\n }\n\n return {};\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n\n [WidgetTypeId.ClassificationLatestReleasedVideo]: {\n icon: WidgetLatestReleasedVideosSvg,\n bgColourClass: bgNavy,\n groupName: videoGroup,\n displayName: 'Recently added to topic',\n targets: {\n [ProductId.StreamableLearning]: {\n [DashboardTargetType.Classification]: true\n }\n },\n formView: AddContentClassificationLatestReleasedVideoView,\n canFetchPreview: (widgetData: CuratedWidgetData) => {\n return !!widgetData.classificationId;\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.StreamableCurator ]\n },\n\n [WidgetTypeId.UpcomingLivestreams]: {\n icon: CalendarSvg,\n bgColourClass: bgBlue,\n groupName: livestreamsGroup,\n displayName: 'Upcoming livestreams',\n formView: AddUpcomingLivestreamsView,\n canFetchPreview: () => {\n return true;\n },\n targets: {\n [ProductId.StreamableLearning]: {\n [DashboardTargetType.Company]: true,\n [DashboardTargetType.Classification]: true,\n [DashboardTargetType.Discover]: true\n }\n },\n getInitialData: (targetInfo: CompanyDashboardInfo) => {\n if (targetInfo.targetType !== DashboardTargetType.Company)\n return {};\n \n return {\n companyId: targetInfo.companyId\n };\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.StreamableCurator ]\n },\n\n [WidgetTypeId.ClassificationPlaylists]: {\n icon: PlaylistSvg,\n bgColourClass: bgCyan,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.ClassificationSeries]: {\n icon: WidgetSeriesSvg,\n bgColourClass: bgIndigo,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.ClassificationPinnedVideos]: {\n icon: WidgetSeriesSvg,\n bgColourClass: bgIndigo,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.ClassificationFeaturedVideo]: {\n icon: VideoSvg,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.ClassificationDashboardMedia]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.ClassificationDashboardExternalMedia]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.SearchCompanies]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.SearchExchangeArchive]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.SearchClickViewLive]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.SearchMySchoolLibraryFolder]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.SearchMySchoolLibraryVideos]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.SearchMyVideos]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.SearchMyVideosFolder]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.SearchPlaylists]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.SearchRelatedResults]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.SearchRelevantTopics]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.SearchSeries]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.SearchTopResults]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.SearchTags]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.SearchCurriculumCode]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.SearchSuggestions]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.SearchContentPartners]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.ClassificationCurriculumMedia]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.ContentPartners]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.ContentPartnerVideos]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: { },\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n [WidgetTypeId.ContentPartnerSeries]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: { },\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n [WidgetTypeId.ContentPartnerLatestReleasedVideos]: {\n icon: WidgetLatestReleasedVideosSvg,\n bgColourClass: bgNavy,\n groupName: videoGroup,\n displayName: 'Latest released videos',\n formView: AddContentContentPartnerVideoView,\n canFetchPreview: () => {\n return true;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.PartnerProfile]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n [WidgetTypeId.SpotlightContentPartners]: {\n icon: WidgetNetworkSvg,\n bgColourClass: bgNavy,\n groupName: networkGroup,\n displayName: 'Featured channel',\n formView: AddContentCuratedContentPartnersView,\n searchIndices: ['partner_profile'],\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Discover]: true\n }\n },\n canFetchPreview: () => {\n return true;\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n [WidgetTypeId.CuratedContentPartners]: {\n icon: WidgetNetworkSvg,\n bgColourClass: bgPurple,\n groupName: networkGroup,\n displayName: 'Featured channel',\n formView: AddContentCuratedContentPartnersView,\n canFetchPreview: () => {\n return true;\n },\n searchIndices: ['partner_profile'],\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.MoviesAndTv]: true,\n [DashboardTargetType.PartnerProfile]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n [WidgetTypeId.ContentPartnersHub]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.TrendingContentPartnersVideo]: {\n icon: WidgetTrendingClassificationsMediaSvg,\n bgColourClass: bgNavy,\n groupName: videoGroup,\n displayName: 'Trending videos',\n // searchIndices: [''],\n formView: AddContentContentPartnerVideoView,\n canFetchPreview: () => {\n return true;\n },\n getInitialData: () => {\n return {\n classifications: []\n };\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.PartnerProfile]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n [WidgetTypeId.ContentPartnerAllVideos]: {\n icon: WidgetAllVideosSvg,\n bgColourClass: bgNavy,\n groupName: videoGroup,\n displayName: 'More videos',\n formView: AddContentContentPartnerVideoView,\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.PartnerProfile]: true\n }\n },\n canFetchPreview: () => {\n return true;\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n // this widget is system generated for espresso for now\n [WidgetTypeId.ClassificationAllVideos]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n }\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"CG2julEA.chunk.js","names":[],"sources":["../../../../../../../libs/shared/src/interfaces/models/curated-widget/CuratedWidgetContent.ts","../../../../../../../libs/shared/src/images/svg/widgets/WidgetSeriesSvg.tsx","../../../../../src/shared/constants/DashboardWidgetImageUrls.ts","../../../../../../../libs/shared/src/images/svg/objects/PlaylistSvg.tsx","../../../../../../../libs/shared/src/images/svg/objects/PopcornSvg.tsx","../../../../../../../libs/shared/src/images/svg/objects/QuestionMarkSvg.tsx","../../../../../../../libs/shared/src/images/svg/objects/SpeechSvg.tsx","../../../../../../../libs/shared/src/images/svg/objects/VideoSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetAllVideosSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetAuthorReviewerSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetBecauseYouWatchedSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetBlurbSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetClassificationLatestReleasedVideosSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetCollectionVideosSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetCompanyVideosSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetContinueWatchingSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetCuratedMultimediaSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetLatestReleasedVideosSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetListOfChildrenTopicsSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetNetworkSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetPersonalisedTopicsSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetRecentlyAddedSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetSeasonalClassificationMediaSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetTrendingClassificationsMediaSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetTrendingClassificationsSvg.tsx","../../../../../../../libs/shared/src/images/svg/widgets/WidgetVideosSvg.tsx","../../../../../src/apps/dashboard-editor/components/widget-settings-button/WidgetSettingsButton.tsx","../../../../../src/apps/dashboard-editor/views/widget-settings/widget-settings.module.scss","../../../../../src/apps/dashboard-editor/views/widget-settings/WidgetSettingsView.tsx","../../../../../src/apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader.tsx","../../../../../src/apps/dashboard-editor/flight-requests/AuthorRequests.ts","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-author-reviewer/AddContentAuthorReviewerView.tsx","../../../../../src/apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents.tsx","../../../../../src/apps/dashboard-editor/validation/DashboardWizardValidationSchema.ts","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-blurb/AddContentBlurbHeadingView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-blurb/AddContentBlurbHeroBannerSmallView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-blurb/AddContentBlurbView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-faq/question/AddContentFaqQuestionView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-faq/question-accordion/question-accordion-content.module.scss","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-faq/question-accordion/AddContentFaqQuestionAccordionView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-faq/AddContentFaqView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-feedback/AddContentFeedbackView.tsx","../../../../../src/apps/dashboard-editor/components/wizard/content-cta/DashboardWizardCta.tsx","../../../../../src/apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline.tsx","../../../../../src/apps/dashboard-editor/components/wizard/remove-widget-content/DashboardWizardRemoveWidgetContent.tsx","../../../../../src/apps/dashboard-editor/constants/WidgetContentTableConfig.ts","../../../../../src/apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable.tsx","../../../../../src/apps/dashboard-editor/components/wizard/widget-error-message/WidgetErrorMessage.tsx","../../../../../src/apps/dashboard-editor/utils/DashboardWizardHelper.ts","../../../../../src/apps/dashboard-editor/components/wizard/search-widget-content/mixed-search-result/classification/WidgetClassificationSearchResultItem.tsx","../../../../../src/apps/dashboard-editor/components/wizard/search-widget-content/mixed-search-result/company/WidgetCompanySearchResultItem.tsx","../../../../../src/apps/dashboard-editor/components/wizard/search-widget-content/mixed-search-result/content-partner/widget-video-search-result-item.module.scss","../../../../../src/apps/dashboard-editor/components/wizard/search-widget-content/mixed-search-result/content-partner/WidgetContentPartnerSearchResultItem.tsx","../../../../../src/apps/dashboard-editor/components/wizard/search-widget-content/mixed-search-result/playlist/WidgetPlaylistSearchResultItem.tsx","../../../../../src/apps/dashboard-editor/components/wizard/search-widget-content/mixed-search-result/resource/widget-resource-search-result-item.module.scss","../../../../../src/apps/dashboard-editor/components/wizard/search-widget-content/mixed-search-result/resource/WidgetResourceSearchResultItem.tsx","../../../../../src/apps/dashboard-editor/components/wizard/search-widget-content/mixed-search-result/MixedWidgetContentSearchResultItem.tsx","../../../../../src/apps/dashboard-editor/components/wizard/search-widget-content/search-result-item/widget-content-search-result-item.module.scss","../../../../../src/apps/dashboard-editor/components/wizard/search-widget-content/search-result-item/WidgetContentSearchResultItem.tsx","../../../../../src/apps/dashboard-editor/components/wizard/search-widget-content/search-result-item/WidgetContentSearchResultItemWithLink.tsx","../../../../../src/apps/dashboard-editor/components/wizard/search-widget-content/search-results-with-validation/SearchResultsWithValidation.tsx","../../../../../src/apps/dashboard-editor/views/wizard/search-widget-content/dashboard-wizard-search-widget-content.module.scss","../../../../../src/apps/dashboard-editor/views/wizard/search-widget-content/DashboardWizardSearchWidgetContentView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/add-content-classifications/AddContentChildClassificationsView.tsx","../../../../../src/apps/dashboard-editor/components/wizard/confirm-heading-optional/ConfirmHeadingOptional.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/add-content-classifications/AddContentClassificationsView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/add-content-classifications/AddContentClassificationsContainerView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/add-content-classifications-with-children/AddContentClassificationsWithChildrenView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/add-content-curated-classifications/multiple/AddContentMultipleCuratedClassificationsView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/add-content-curated-classifications/single/AddContentSingleCuratedClassificationsView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/add-content-curated-classifications/AddContentCuratedClassificationsViewContainer.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/add-content-personalised-topics/AddContentPersonalisedTopicsView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/latest-released-videos/AddContentClassificationLatestVideosView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/special-event-classifications/AddContentSpecialEventClassificationsView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/content-partner/add-content-content-partner-video/AddContentContentPartnerVideoView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/content-partner/AddContentCuratedContentPartnersView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/livestreams/add-upcoming-livestreams/AddUpcomingLivestreamsView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/multimedia/add-content-curated-multimedia/AddContentCuratedMultimediaView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/network/add-content-curated-companies/AddContentCuratedCompanies.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/playlists/add-content-curated-playlists/AddContentCuratedPlaylistsView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/presentations/add-content-presentations/AddContentPresentationsView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/search-filter/add-content-ratings/AddContentRatingsView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/series/add-content-curated-series/AddContentCuratedSeriesView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-because-you-watched/AddContentBecauseYouWatchedView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-classification-company-videos/AddContentCompanyClassificationVideosView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-classification-latest-released-video/AddContentClassificationLatestReleasedVideoView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-classification-media/AddContentClassificationMediaView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-company-videos/AddContentCompanyVideos.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-continue-watching/AddContentContinueWatchingView.tsx","../../../../../src/apps/dashboard-editor/hooks/useFetchClassificationMediaMembers.ts","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-curated-media/AddContentMultipleCuratedMediaView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-curated-media/AddContentSingleCuratedMediaView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-curated-media/AddContentCuratedMediaView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-latest-company-video/AddContentLatestCompanyVideo.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-latest-released-videos/AddContentLatestReleasedVideos.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-playlist-media/AddContentPlaylistMediaView.tsx","../../../../../src/apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-series-media/AddContentSeriesMediaView.tsx","../../../../../src/apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig.ts"],"sourcesContent":["import { AnyWidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { Author, BaseObject, Series, Video } from 'libs/shared/interfaces';\n\nexport interface AuthorWidgetContent extends BaseObject {\n author: Author;\n reviewer: Author;\n lastUpdated: string;\n datePublished: string;\n}\n\nexport interface Faq extends BaseObject {\n question: string;\n answer: string;\n}\n\nexport type CuratedWidgetContent = AnyWidgetTemplateProps['content'];\n\nexport type VideoWidgetTemplateContent = Video[] | Series[];\n\nexport enum SearchableWidgetTableObjectTypes {\n Video = 'video', // includes video/clip/interactive\n Series = 'series',\n Playlist = 'playlist',\n Classification = 'subject',\n Company = 'company',\n ContentPartner = 'partner_profile'\n}\n","import React from 'react';\n\nexport function WidgetSeriesSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='M4.5 4a.5.5 0 0 0 0 1h16a.5.5 0 0 1 .5.5v12a.5.5 0 0 0 1 0v-12A1.5 1.5 0 0 0 20.5 4zM9 10.26a.256.256 0 0 1 .39-.218l4.482 2.74a.256.256 0 0 1 0 .437L9.39 15.958A.256.256 0 0 1 9 15.739zM18.5 6A1.5 1.5 0 0 1 20 7.5v11a1.5 1.5 0 0 1-1.5 1.5h-15A1.5 1.5 0 0 1 2 18.5v-11A1.5 1.5 0 0 1 3.5 6zm-15 1a.5.5 0 0 0-.5.5v11a.5.5 0 0 0 .5.5h15a.5.5 0 0 0 .5-.5v-11a.5.5 0 0 0-.5-.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import { ImageUrls } from 'shared/constants/ImageUrls';\n\nexport const DashboardWidgetImageUrls = {\n telescope: ImageUrls.Widget.TELESCOPE\n};\n","import React from 'react';\n\nexport function PlaylistSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}\n >\n <path\n fill='currentColor'\n fillRule='evenodd'\n d='M4.989 18.127c0 .489.395.885.884.885h12.253a.884.884 0 0 0 .885-.885V5.873a.884.884 0 0 0-.885-.884H5.873a.884.884 0 0 0-.884.884zM5.773 4h12.453C19.206 4 20 4.793 20 5.773v12.453c0 .98-.794 1.774-1.774 1.774H5.773C4.793 20 4 19.206 4 18.226V5.773C4 4.794 4.793 4 5.773 4m11.115 12.711a.444.444 0 1 0 0-.889h-7.11a.444.444 0 1 0 0 .889zm0-4.089a.444.444 0 1 0 0-.889h-7.11a.444.444 0 1 0 0 .89zM8.508 7.76l-1.073-.643c-.428-.257-.769-.064-.769.428v1.354c0 .493.345.683.77.428l1.072-.644c.428-.256.425-.668 0-.923m0 4-1.073-.643c-.428-.257-.769-.064-.769.428v1.354c0 .493.345.683.77.428l1.072-.644c.428-.256.425-.668 0-.923m0 4-1.073-.643c-.428-.257-.769-.064-.769.428v1.354c0 .493.345.683.77.428l1.072-.644c.428-.256.425-.668 0-.923m8.38-7.048a.444.444 0 1 0 0-.889h-7.11a.444.444 0 1 0 0 .889z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function PopcornSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M19.068 9.688c0-.5-.193-.975-.544-1.337a1.84 1.84 0 0 0-1.33-.57 1.877 1.877 0 0 0-1.922-1.874C15.062 4.849 14.128 4 12.975 4q-.487 0-.938.202A2.3 2.3 0 0 0 11.1 4c-1.154 0-2.087.85-2.298 1.907h-.046A1.877 1.877 0 0 0 6.88 7.78c-1.043 0-1.875.875-1.875 1.907 0 .71-.2-.487 1.733 9.181A1.41 1.41 0 0 0 8.12 20h7.837a1.41 1.41 0 0 0 1.379-1.13c1.934-9.669 1.733-8.473 1.733-9.183m-10.95 9.375a.47.47 0 0 1-.46-.377l-1.612-8.061h2.286l.282 2.82c-.517.394-.796.877-.796 1.399 0 .615.387 1.176 1.096 1.601l.261 2.617zm3.45 0h-1.45l-.219-2.185c.507.16 1.075.26 1.67.295zm-2.812-4.22c0-.663 1.403-1.405 3.281-1.405s3.281.742 3.281 1.406-1.403 1.406-3.28 1.406c-1.879 0-3.282-.742-3.282-1.406m.518-4.218h2.294v1.89c-.753.043-1.463.193-2.062.435zm3.232 1.89v-1.89H14.8l-.232 2.325c-.598-.242-1.309-.392-2.062-.436m1.45 6.547h-1.45v-1.889a7 7 0 0 0 1.67-.295zm2.46-.376a.47.47 0 0 1-.46.377h-1.057l.262-2.618c.708-.425 1.095-.986 1.095-1.601 0-.522-.278-1.005-.795-1.4l.282-2.819h2.285zM5.943 9.688c0-.66.68-1.198 1.348-.87a.469.469 0 0 0 .628-.627.93.93 0 0 1 1.155-1.287.47.47 0 0 0 .628-.462c-.04-.85.645-1.505 1.398-1.505q.363.001.701.197a.47.47 0 0 0 .472 0q.337-.196.702-.197c.75 0 1.438.653 1.397 1.505a.47.47 0 0 0 .629.462.93.93 0 0 1 1.155 1.287.469.469 0 0 0 .627.628c.67-.33 1.348.21 1.348.868z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function QuestionMarkSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M11.646 14.907q.432 0 .639-.271.206-.271.206-.673v-.131q.01-.459.147-.776.138-.318.455-.612t.877-.678a5.8 5.8 0 0 0 1.46-1.397q.57-.788.57-1.874 0-1.14-.546-1.916a3.43 3.43 0 0 0-1.466-1.177A5 5 0 0 0 11.959 5q-1.212 0-2.222.537A3.4 3.4 0 0 0 8.23 7.131q-.12.253-.175.514Q8 7.907 8 8.14a.85.85 0 0 0 .202.584q.202.23.579.23.312 0 .523-.178a1 1 0 0 0 .303-.477q.313-1 .91-1.36t1.387-.36q.66 0 1.198.23.537.228.854.654.317.425.317 1.023 0 .524-.202.902a2.4 2.4 0 0 1-.542.677 9 9 0 0 1-.753.59q-.541.372-.996.808-.455.434-.73.962a2.5 2.5 0 0 0-.276 1.182v.374q0 .411.22.668.221.258.652.258M11.637 19q.487 0 .818-.346t.33-.822q0-.486-.33-.827a1.1 1.1 0 0 0-.818-.341q-.468 0-.803.34a1.14 1.14 0 0 0-.336.828q0 .476.336.822.334.346.803.346'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function SpeechSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M16.657 16.576a1 1 0 0 1 .143-1.024l.076-.094a6.292 6.292 0 1 0-2.12 1.688l.082-.04a1 1 0 0 1 .834-.022l1.473.631zm1.788 1.126c.355.83-.483 1.669-1.313 1.313l-1.848-.792a7.492 7.492 0 1 1 2.524-2.008z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function VideoSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}\n >\n <path\n fill='currentColor'\n fillRule='evenodd'\n d='M5.433 6.767a.444.444 0 0 0-.444.444v9.578c0 .245.199.444.444.444h13.134a.444.444 0 0 0 .445-.444V7.21a.444.444 0 0 0-.445-.444zm13.233-.99c.737 0 1.333.598 1.333 1.334v9.778c0 .736-.596 1.333-1.333 1.333H5.333A1.333 1.333 0 0 1 4 16.89V7.11c0-.736.597-1.333 1.333-1.333zM10.25 9.407a.2.2 0 0 0-.028.101v4.986a.195.195 0 0 0 .297.166l4.079-2.493a.195.195 0 0 0 0-.332l-4.08-2.493a.195.195 0 0 0-.268.065'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetAllVideosSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path d='M20.2829 4C21.2293 4 22 4.74484 22 5.6594V14.3995C22 15.1255 21.522 15.7384 20.8488 15.9646L20.9366 5.74425C20.9366 5.37655 20.6439 5.08427 20.2732 5.08427H6.35122C6.59512 4.45256 7.21951 4 7.95122 4H20.2829ZM18.2244 5.93282C19.1707 5.93282 19.9415 6.67767 19.9415 7.58279V16.3229C19.9512 17.0489 19.4634 17.6618 18.8 17.888L18.8878 7.64879C18.8878 7.29051 18.5951 7.00766 18.2244 7.00766H4.29268C4.53659 6.37596 5.16098 5.93282 5.89268 5.93282H18.2244ZM16.0488 7.9505C16.9951 7.9505 17.7561 8.69534 17.7561 9.6099V18.35C17.7561 19.2646 16.9854 20 16.0488 20H3.70732C2.76098 20 2 19.2552 2 18.35V9.6099C2 8.69534 2.77073 7.9505 3.70732 7.9505H16.0488ZM16.039 9.03477H3.71707C3.34634 9.03477 3.05366 9.31762 3.05366 9.6759V18.284C3.05366 18.6423 3.34634 18.9252 3.71707 18.9252H16.0293C16.4 18.9252 16.6927 18.6423 16.6927 18.284V9.6759C16.7024 9.31762 16.4098 9.03477 16.039 9.03477ZM8.54634 12.3913V15.5687C8.54634 15.7384 8.75122 15.8326 8.88781 15.7384L11.1415 14.145C11.2585 14.0601 11.2585 13.8904 11.1415 13.815L8.87805 12.2216C8.74146 12.1273 8.54634 12.2216 8.54634 12.3913Z'/>\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetAuthorReviewerSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M12 14c-2.074 0-4.149 1.257-5.231 2.651a7 7 0 1 1 10.462 0C16.15 15.257 14.074 14 12 14m0 6a8 8 0 1 0 0-16 8 8 0 0 0 0 16m0-7a3 3 0 1 0 0-6 3 3 0 0 0 0 6'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetBecauseYouWatchedSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props}>\n <path\n d='M4 7.839a.5.5 0 0 1 .5-.5H14a.5.5 0 1 0 0-.998H4.5c-.828 0-1.5.67-1.5 1.498v10.985c0 .827.672 1.498 1.5 1.498h14c1.38 0 2.5-1.118 2.5-2.496v-5.493a.5.5 0 0 0-1 0v5.493c0 .827-.671 1.497-1.5 1.497h-14a.5.5 0 0 1-.5-.499zM10.038 10.464a.26.26 0 0 0-.038.133v5.471a.256.256 0 0 0 .39.218l4.482-2.735a.255.255 0 0 0 0-.437l-4.482-2.735a.256.256 0 0 0-.352.085M18.9 3.8Q19.53 6.67 22.4 7.3Q19.53 7.93 18.9 10.8Q18.27 7.93 15.4 7.3Q18.27 6.67 18.9 3.8Z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetBlurbSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='M18.06 4c.519 0 .94.479.94 1.075v13.85c0 .594-.419 1.075-.94 1.075H5.94c-.519 0-.94-.479-.94-1.075V5.075C5 4.48 5.419 4 5.94 4zM9.256 5H5.882v.184l-.001.1v.418l-.001.175-.001 1.113v1.429l-.001.314v2.024l-.001.352-.001 3.162v.335l-.001 4.386h.105l.08.001h.36l.157.001h.571l.221.001h.741l.27.001h1.174l.313.001h1.63l.332.001 2.61.001h.305l3.362.001h.012v-.184l.001-.1v-.418l.001-.175.001-1.113v-1.429l.001-.314v-2.024l.001-.352.001-3.162v-.335l.001-4.374v-.012h-.105l-.08-.001h-.36l-.157-.001h-.571l-.221-.001h-.741l-.27-.001h-1.174l-.313-.001h-1.63l-.332-.001-2.61-.001zm1.438 8c.238 0 .431.224.431.5s-.193.5-.431.5H8.056c-.238 0-.431-.224-.431-.5s.193-.5.431-.5zm5.198-3c.267 0 .483.224.483.5s-.216.5-.483.5H8.108a.49.49 0 0 1-.483-.5c0-.276.216-.5.483-.5zm0-3c.267 0 .483.224.483.5s-.216.5-.483.5H8.108a.49.49 0 0 1-.483-.5c0-.276.216-.5.483-.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetClassificationLatestReleasedVideosSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 64 65'>\n <path\n fill='currentColor'\n d='M39.482 11.622a2.72 2.72 0 0 0-1.698-1.697.47.47 0 0 1 .002-.897 2.72 2.72 0 0 0 1.697-1.698.469.469 0 0 1 .897.002 2.72 2.72 0 0 0 1.698 1.697.469.469 0 0 1-.003.897 2.72 2.72 0 0 0-1.696 1.698.469.469 0 0 1-.897-.002m1.413-2.145a3.7 3.7 0 0 1-.964-.964 3.7 3.7 0 0 1-.964.964c.378.258.706.586.964.964a3.7 3.7 0 0 1 .964-.964m-30.54 6.84.753.25a.469.469 0 0 1 0 .89l-.753.251a5.11 5.11 0 0 0-3.218 3.218l-.25.754a.469.469 0 0 1-.89 0l-.251-.754a5.11 5.11 0 0 0-3.218-3.218l-.754-.25a.469.469 0 0 1 0-.89l.754-.251a5.11 5.11 0 0 0 3.218-3.218l.25-.754a.469.469 0 0 1 .89 0l.251.754a5.11 5.11 0 0 0 3.218 3.218m-3.914 3.81a6.1 6.1 0 0 1 1.262-1.852 6.1 6.1 0 0 1 1.852-1.262 6.1 6.1 0 0 1-1.852-1.263A6.1 6.1 0 0 1 6.441 13.9 6.1 6.1 0 0 1 5.18 15.75a6.1 6.1 0 0 1-1.851 1.261c.688.301 1.32.732 1.851 1.262a6.1 6.1 0 0 1 1.262 1.852m42.172-5.274c1.385 0 2.508 1.277 2.508 2.866v36.935c0 1.583-1.118 2.866-2.508 2.866H16.295c-1.385 0-2.508-1.277-2.508-2.866V17.72c0-1.583 1.117-2.866 2.508-2.866zm-23.477 2.67-8.997-.003v.032l-.002.46v.266l-.003 1.114v.468l-.003 2.965v.704l-.002 3.107v.84l-.003 5.395v.939l-.003 8.432v.895l-.002 11.695h.032l.248.002h.212l.96.003h.419l1.524.003h.589l1.976.002h.72l3.131.003h.833l4.345.003H32l6.957.002h.815l8.965.003h.031l.001-.032.002-.459v-.267l.002-1.114v-.468l.004-2.965v-.704l.002-3.107v-.84l.003-5.395v-.939l.003-8.432v-.895l.002-11.663v-.032h-.032l-.249-.002h-.212l-.959-.003h-.419l-1.524-.003h-.589l-1.976-.002h-.721l-3.13-.003h-.833l-4.345-.002h-.89l-6.957-.003zm7.692 9.862c.17.083.309.22.392.391l2.27 4.644 5.12.725a.853.853 0 0 1 .473 1.457l-3.715 3.595.892 5.092a.853.853 0 0 1-1.24.9l-4.566-2.422-4.567 2.422a.853.853 0 0 1-1.24-.9l.893-5.092-3.715-3.595a.853.853 0 0 1 .473-1.457l5.119-.725 2.27-4.644a.853.853 0 0 1 1.141-.392m25.643 1.581c.21 0 .389-.139.448-.33a5.11 5.11 0 0 1 3.202-3.204.469.469 0 0 0 .002-.897 5.11 5.11 0 0 1-3.203-3.202.47.47 0 0 0-.897-.002 5.11 5.11 0 0 1-3.203 3.203.47.47 0 0 0-.002.897 5.11 5.11 0 0 1 3.204 3.202.47.47 0 0 0 .449.333m-2.355-3.983a6 6 0 0 0 1.344-1.01 6 6 0 0 0 1.01-1.345 6.046 6.046 0 0 0 2.355 2.355 6 6 0 0 0-1.343 1.011 6 6 0 0 0-1.011 1.344 6 6 0 0 0-1.011-1.344 6 6 0 0 0-1.344-1.01M9.124 48.075a2.72 2.72 0 0 1-1.698-1.697.469.469 0 0 0-.897-.002 2.72 2.72 0 0 1-1.697 1.698.469.469 0 0 0-.002.897 2.72 2.72 0 0 1 1.698 1.697.469.469 0 0 0 .897.002 2.72 2.72 0 0 1 1.697-1.698.469.469 0 0 0 .002-.897m-2.147 1.412a3.7 3.7 0 0 0-.964-.964 3.7 3.7 0 0 0 .964-.964c.258.378.586.706.964.964a3.7 3.7 0 0 0-.964.964m50.449 1.891a2.72 2.72 0 0 0 1.698 1.697.47.47 0 0 1-.002.897 2.72 2.72 0 0 0-1.697 1.698.469.469 0 0 1-.897-.002 2.72 2.72 0 0 0-1.698-1.697.469.469 0 0 1 .002-.897 2.72 2.72 0 0 0 1.697-1.698.469.469 0 0 1 .897.002m-1.413 2.145c.378.258.706.586.964.964.258-.378.586-.706.964-.964a3.7 3.7 0 0 1-.964-.964 3.7 3.7 0 0 1-.964.964'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetCollectionVideosSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props}>\n <path\n d='M19.568 6.5c0-1.38-1.09-2.5-2.432-2.5H6.433C5.089 4 4 5.12 4 6.5v11C4 18.88 5.09 20 6.433 20h9.243c.269 0 .486-.224.486-.5s-.217-.5-.486-.5H6.433c-.807 0-1.46-.672-1.46-1.5v-11c0-.828.653-1.5 1.46-1.5h10.703c.806 0 1.459.672 1.459 1.5V12c0 .276.218.5.487.5s.486-.224.486-.5zm-4.865 9c0-.276-.218-.5-.486-.5h-3.892c-.269 0-.487.224-.487.5s.218.5.487.5h3.892a.493.493 0 0 0 .486-.5M16.65 12c0-.276-.218-.5-.486-.5h-5.838c-.269 0-.487.224-.487.5s.218.5.487.5h5.838a.493.493 0 0 0 .486-.5m0-3.5c0-.276-.218-.5-.486-.5h-5.838c-.269 0-.487.224-.487.5s.218.5.487.5h5.838a.493.493 0 0 0 .486-.5m-8.156.49c.387-.236.388-.62 0-.856l-1.165-.71c-.387-.236-.703-.06-.703.395v1.487c0 .463.315.631.703.395zm0 3.429c.387-.236.388-.62 0-.856l-1.165-.71c-.387-.237-.703-.06-.703.394v1.487c0 .464.315.632.703.395zm0 2.649-1.165-.71c-.387-.237-.703-.06-.703.394v1.487c0 .464.315.632.703.395l1.165-.71c.387-.236.388-.62 0-.856M16 13.82a.6.6 0 0 1 .6-.6h5.8a.6.6 0 0 1 .6.6v4.24a.6.6 0 0 1-.6.6h-5.8a.6.6 0 0 1-.6-.6zm2.815 1.005a.1.1 0 0 0-.015.052v2.13a.1.1 0 0 0 .152.085l1.743-1.065a.1.1 0 0 0 0-.17l-1.743-1.065a.1.1 0 0 0-.137.033'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetCompanyVideosSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M18.568 6.5c0-1.38-1.09-2.5-2.433-2.5H5.432C4.09 4 3 5.12 3 6.5v11C3 18.88 4.089 20 5.432 20h9.244a.493.493 0 0 0 .486-.5c0-.276-.218-.5-.486-.5H5.432c-.806 0-1.459-.672-1.459-1.5v-11c0-.828.653-1.5 1.46-1.5h10.702c.806 0 1.46.672 1.46 1.5V12c0 .276.217.5.486.5a.493.493 0 0 0 .487-.5zm-4.865 9c0-.276-.218-.5-.487-.5H9.324a.493.493 0 0 0-.486.5c0 .276.218.5.486.5h3.892a.493.493 0 0 0 .487-.5m1.946-3.5c0-.276-.218-.5-.487-.5H9.324a.493.493 0 0 0-.486.5c0 .276.218.5.486.5h5.838a.493.493 0 0 0 .487-.5m0-3.5c0-.276-.218-.5-.487-.5H9.324a.493.493 0 0 0-.486.5c0 .276.218.5.486.5h5.838a.493.493 0 0 0 .487-.5m-8.156.49c.387-.236.388-.62 0-.856l-1.166-.71c-.387-.236-.702-.06-.702.395v1.487c0 .463.314.631.702.395zm0 3.429c.387-.236.388-.62 0-.856l-1.166-.71c-.387-.237-.702-.06-.702.394v1.487c0 .464.314.632.702.395zm0 2.649-1.166-.71c-.387-.237-.702-.06-.702.394v1.487c0 .464.314.631.702.395l1.166-.71c.387-.236.388-.62 0-.856M18.5 19.5a3 3 0 1 0 0-6 3 3 0 0 0 0 6m-.7-4.123q0-.028.015-.052a.1.1 0 0 1 .136-.033l1.744 1.065a.1.1 0 0 1 0 .17l-1.744 1.065a.1.1 0 0 1-.151-.084z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetContinueWatchingSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props}>\n <path\n d='M22.334 7.333a3.333 3.333 0 1 0-6.667 0 3.333 3.333 0 0 0 6.667 0M18.979 5.62c.158 0 .224.128.224.286v1.31l1.065 1.107c.11.113.236.292.125.404-.112.111-.292.07-.404-.042l-1.152-1.151c-.053-.054-.124-.125-.122-.2l.041-1.428c.005-.158.066-.286.223-.286m-8.941 4.844a.26.26 0 0 0-.038.133v5.471a.256.256 0 0 0 .39.218l4.482-2.735a.255.255 0 0 0 0-.437l-4.482-2.735a.256.256 0 0 0-.352.085M4 7.839a.5.5 0 0 1 .5-.5H14a.5.5 0 1 0 0-.998H4.5c-.828 0-1.5.67-1.5 1.498v10.985c0 .827.672 1.498 1.5 1.498h14c1.38 0 2.5-1.118 2.5-2.496v-5.493a.5.5 0 0 0-1 0v5.493c0 .827-.671 1.497-1.5 1.497h-14a.5.5 0 0 1-.5-.499z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetCuratedMultimediaSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M20.5 5.5A1.5 1.5 0 0 0 19 4h-7a1.5 1.5 0 0 0-1.5 1.5v5H5a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V16h3a1.5 1.5 0 0 0 1.5-1.5zm-5.5 5h-3.5v-5A.5.5 0 0 1 12 5h7a.5.5 0 0 1 .5.5v9a.5.5 0 0 1-.5.5h-3v-3.5a1 1 0 0 0-1-1m-10 9v-8h10v8zm8-13a.5.5 0 0 0 0 1h5a.5.5 0 0 0 0-1zm-.5 3A.5.5 0 0 1 13 9h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5m-3.833 4.043q0-.05.025-.095a.164.164 0 0 1 .234-.06l2.989 1.956a.19.19 0 0 1 0 .312l-2.989 1.957a.16.16 0 0 1-.089.026c-.094 0-.17-.081-.17-.182z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetLatestReleasedVideosSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props}>\n <path\n d='M4 6.5a.5.5 0 0 1 .5-.5h15a.5.5 0 0 1 .5.5v11a.5.5 0 0 1-.5.5h-15a.5.5 0 0 1-.5-.5zm17 0A1.5 1.5 0 0 0 19.5 5h-15A1.5 1.5 0 0 0 3 6.5v11A1.5 1.5 0 0 0 4.5 19h15a1.5 1.5 0 0 0 1.5-1.5zm-9 2.167a3.333 3.333 0 1 1 0 6.666 3.333 3.333 0 0 1 0-6.666m.202 1.905c0-.158-.065-.286-.223-.286s-.218.128-.223.285L11.715 12c-.003.074.069.146.122.2l1.152 1.15c.111.112.292.154.403.042s-.015-.29-.124-.404l-1.065-1.106z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetListOfChildrenTopicsSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props}>\n <path\n d='M4 3.5a.5.5 0 0 1 .5-.5h14A1.5 1.5 0 0 1 20 4.5v12a.5.5 0 0 1-1 0v-12a.5.5 0 0 0-.5-.5h-14a.5.5 0 0 1-.5-.5M17.06 5c.519 0 .94.479.94 1.075v13.85c0 .594-.419 1.075-.94 1.075H4.94c-.519 0-.94-.479-.94-1.075V6.075C4 5.48 4.419 5 4.94 5zM8.256 6H4.882v.184l-.001.1v.418l-.001.175-.001 1.113v1.429l-.001.314v2.024l-.001.352-.001 3.162v.335l-.001 4.386h.105l.08.001h.36l.157.001h.571l.221.001h.741l.27.001h1.174l.313.001h1.63l.332.001 2.61.001h.305l3.362.001h.012v-.184l.001-.1v-.418l.001-.175.001-1.113v-1.429l.001-.314v-2.024l.001-.352.001-3.162v-.335l.001-4.374v-.012h-.105l-.08-.001h-.36l-.157-.001h-.571l-.221-.001h-.741l-.27-.001h-1.174l-.313-.001h-1.63l-.332-.001-2.61-.001zm2.884 3.7a.32.32 0 0 1 .147.146l.852 1.742 1.92.271a.32.32 0 0 1 .177.547l-1.393 1.348.334 1.91a.32.32 0 0 1-.464.337L11 15.093 9.287 16a.32.32 0 0 1-.464-.338l.334-1.91-1.393-1.347a.32.32 0 0 1 .178-.547l1.92-.271.85-1.742a.32.32 0 0 1 .428-.147'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetNetworkSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='M4.98 12a7.02 7.02 0 1 1 14.04 0 7.02 7.02 0 0 1-14.04 0M12 4a8 8 0 0 0-.054 16l.054.003h7.51a.49.49 0 0 0 0-.98h-3.676A8 8 0 0 0 12 4m-.326 8a.326.326 0 1 1 .652 0 .326.326 0 0 1-.652 0M12 10.692a1.306 1.306 0 1 0 0 2.612 1.306 1.306 0 0 0 0-2.612m0-3.918a.98.98 0 1 0 0 1.959.98.98 0 0 0 0-1.96m-1.96.98a1.96 1.96 0 1 1 3.92 0 1.96 1.96 0 0 1-3.92 0m-3.008 2.63a.98.98 0 0 1 1.864.603.98.98 0 0 1-1.864-.604M8.57 8.823a1.96 1.96 0 0 0-1.212 3.727A1.96 1.96 0 0 0 8.57 8.823m.143 6.033a.981.981 0 1 0 1.59 1.152.981.981 0 0 0-1.59-1.152m-.793-.575a1.961 1.961 0 0 1 3.174 2.302v.001a1.96 1.96 0 0 1-2.738.436v-.001a1.96 1.96 0 0 1-.436-2.737zm6.002.357a.98.98 0 1 1 1.15 1.59.98.98 0 1 1-1.15-1.59m2.16-.358a1.96 1.96 0 1 0-3.172 2.304 1.96 1.96 0 0 0 2.738.436l.001-.002a1.96 1.96 0 0 0 .434-2.737zm.886-3.895a.98.98 0 0 0-1.864.603.98.98 0 0 0 1.864-.604M15.43 8.823a1.96 1.96 0 0 1 1.212 3.727 1.96 1.96 0 0 1-2.47-1.258 1.96 1.96 0 0 1 1.258-2.469'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetPersonalisedTopicsSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props}>\n <path\n d='M5 7a.5.5 0 0 1 .5-.5H12a.5.5 0 0 0 0-1H5A1 1 0 0 0 4 6.5V20a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-8.5a.5.5 0 0 0-1 0V19.5a.5.5 0 0 1-.5.5H5.5a.5.5 0 0 1-.5-.5zM11.287 10.322a.32.32 0 0 0-.574 0l-.852 1.742-1.92.271a.32.32 0 0 0-.177.547l1.393 1.348-.334 1.91a.32.32 0 0 0 .464.337L11 15.569l1.713.908a.32.32 0 0 0 .464-.338l-.334-1.91 1.393-1.347a.32.32 0 0 0-.178-.547l-1.92-.271zM16.9 9.35l-2.4-2.48a1.6 1.6 0 0 1 2.4-2.09 1.6 1.6 0 0 1 2.4 2.09z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetRecentlyAddedSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='M18.14 4.7a.32.32 0 0 1 .147.146l.852 1.742 1.92.271a.32.32 0 0 1 .177.547l-1.393 1.348.334 1.91a.32.32 0 0 1-.464.337L18 10.093 16.287 11a.32.32 0 0 1-.464-.338l.334-1.91-1.393-1.347a.32.32 0 0 1 .178-.547l1.92-.271.85-1.742a.32.32 0 0 1 .428-.147m-9.102 6.427a.26.26 0 0 0-.038.134v5.478a.256.256 0 0 0 .39.219l4.482-2.74a.256.256 0 0 0 0-.436l-4.483-2.74a.256.256 0 0 0-.351.085M3 8.5a.5.5 0 0 1 .5-.5H13a.5.5 0 0 0 0-1H3.5A1.5 1.5 0 0 0 2 8.5v11A1.5 1.5 0 0 0 3.5 21h14a2.5 2.5 0 0 0 2.5-2.5V13a.5.5 0 0 0-1 0v5.5a1.5 1.5 0 0 1-1.5 1.5h-14a.5.5 0 0 1-.5-.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetSeasonalClassificationMediaSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n fillRule='evenodd'\n d='M19 5.075C19 4.479 18.579 4 18.06 4H5.94C5.42 4 5 4.481 5 5.075v13.85c0 .596.421 1.075.94 1.075h12.12c.521 0 .94-.481.94-1.075zM5.882 5h3.374l.305.001 2.61.001h.333l1.63.001h1.486l.27.001h.74l.222.001h.571l.158.001h.36l.079.001h.093l.012.001v4.386l-.001.335-.001 3.162v.352l-.001 2.024v1.484l-.001.26-.001 1.112v.593l-.001.1v.172l-.001.012h-3.374l-.305-.001-2.61-.001h-.333l-1.63-.001H8.38l-.27-.001h-.74l-.222-.001h-.571l-.158-.001h-.36l-.079-.001h-.093l-.012-.001v-4.386l.001-.335.001-3.162v-.352l.001-2.024v-1.48l.001-.263.001-1.113v-.593l.001-.1v-.172zm8.322 5.041c.732-.25 1.502.18 1.728.91.234.738-.155 1.546-.88 1.786-.412.14-1.068.146-1.52.05.498.237.981.643 1.204.96.448.635.31 1.517-.306 1.983a1.34 1.34 0 0 1-1.917-.32c-.22-.309-.445-.898-.511-1.462-.07.564-.296 1.153-.515 1.466-.44.635-1.301.775-1.917.316a1.454 1.454 0 0 1-.306-1.983c.223-.317.706-.723 1.207-.964-.544.116-1.17.074-1.523-.046-.725-.24-1.114-1.047-.88-1.786.227-.733.996-1.158 1.732-.91.358.115.88.46 1.252.88-.268-.499-.424-1.117-.424-1.501 0-.784.615-1.42 1.374-1.42.755 0 1.37.636 1.37 1.42 0 .38-.156.995-.42 1.495.375-.417.897-.759 1.252-.874m-2.815 2.523c.24.54.98.537 1.221.004a.72.72 0 0 0-.15-.805.653.653 0 0 0-.917-.004c-.238.228-.265.591-.153.805'\n clipRule='evenodd'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTrendingClassificationsMediaSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n fillRule='evenodd'\n d='M18.14 4.033a.32.32 0 0 1 .147.146l.852 1.742 1.92.272a.32.32 0 0 1 .177.546l-1.393 1.348.334 1.91a.32.32 0 0 1-.464.337L18 9.426l-1.713.908a.32.32 0 0 1-.464-.337l.334-1.91-1.393-1.348a.32.32 0 0 1 .178-.546l1.92-.272.85-1.742a.32.32 0 0 1 .428-.146m-5.461 6.5c-.217 0-.393.192-.393.429s.176.428.393.428h1.408l-2.783 3.037-1.687-1.84a.37.37 0 0 0-.556 0l-2.946 3.215a.46.46 0 0 0 0 .606.37.37 0 0 0 .556 0l2.668-2.911 1.687 1.84a.37.37 0 0 0 .555 0l3.062-3.34v1.536c0 .237.176.429.393.429s.393-.192.393-.429v-2.571c0-.237-.176-.429-.393-.429zM3 7.833a.5.5 0 0 1 .5-.5H13a.5.5 0 0 0 0-1H3.5a1.5 1.5 0 0 0-1.5 1.5v11a1.5 1.5 0 0 0 1.5 1.5h15c.874 0 1.5-.833 1.5-1.5v-6.5a.5.5 0 0 0-1 0v6.5c0 .167-.3.5-.5.5h-15a.5.5 0 0 1-.5-.5z'\n clipRule='evenodd'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTrendingClassificationsSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n fillRule='evenodd'\n d='M18.06 4c.519 0 .94.479.94 1.075v13.85c0 .594-.419 1.075-.94 1.075H5.94c-.519 0-.94-.479-.94-1.075V5.075C5 4.48 5.419 4 5.94 4zm-.12 1.007L5.882 5v.184l-.007 13.808h.105l.08.001L18.118 19v-.184l.007-13.808h-.105zM16.326 9h-2.357c-.217 0-.393.192-.393.429 0 .236.176.428.393.428h1.408l-2.783 3.037-1.687-1.84a.37.37 0 0 0-.556 0l-2.946 3.214a.46.46 0 0 0 0 .606.37.37 0 0 0 .556 0l2.668-2.91 1.687 1.839a.37.37 0 0 0 .555 0l3.062-3.34V12c0 .237.176.428.393.428s.393-.191.393-.428V9.429c0-.237-.176-.429-.393-.429'\n clipRule='evenodd'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetVideosSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M18 4a3.333 3.333 0 1 0 0 6.667A3.333 3.333 0 0 0 18 4m-.75 2.245q0-.027.015-.052a.1.1 0 0 1 .136-.033l1.744 1.065a.1.1 0 0 1 0 .17L17.4 8.46a.1.1 0 0 1-.151-.085zm-8.212 4.218a.26.26 0 0 0-.038.133v5.471a.256.256 0 0 0 .39.218l4.482-2.735a.255.255 0 0 0 0-.437L9.39 10.379a.256.256 0 0 0-.351.085M3.5 7.34a.5.5 0 0 0-.5.5v10.984a.5.5 0 0 0 .5.5h14c.828 0 1.5-.671 1.5-1.498v-5.493a.5.5 0 0 1 1 0v5.493a2.5 2.5 0 0 1-2.5 2.496h-14c-.828 0-1.5-.67-1.5-1.498V7.84c0-.827.672-1.498 1.5-1.498H13a.5.5 0 1 1 0 .999z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { CogSvg } from 'libs/shared/images/svg/objects/CogSvg';\n\ninterface WidgetSettingsButtonProps {\n onClickSettings?: () => void;\n}\n\nexport function WidgetSettingsButton(props: WidgetSettingsButtonProps): JSX.Element {\n return (\n <IconButton\n svg={CogSvg}\n onClick={props.onClickSettings}\n className='btn btn-outline-dark'\n >\n Settings\n </IconButton>\n );\n}\n","\n:local {\n .description {\n width: 90%;\n }\n}","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } 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 { ToggleSwitch } from 'libs/shared/components/toggle-switch/ToggleSwitch';\nimport { PresentationStatus } from 'libs/shared/enums/PresentationStatus';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { CuratedWidget, PopupViewProps, Presentation } from 'libs/shared/interfaces';\n\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\n\nimport { WidgetSettingsModule } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\n\nimport styles from './widget-settings.module.scss';\n\ninterface WidgetSettingsViewProps extends PopupViewProps {\n modules: WidgetSettingsModule[];\n}\n\nexport function WidgetSettingsView(props: WidgetSettingsViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<CuratedWidget>();\n\n const curriculumPresentations = Flight.useBasicFetch<Presentation[]>(\n props.modules.includes('curriculum-filter') &&\n SubjectRequests.presentations(PresentationType.Curriculum)\n );\n\n function isLoading(): boolean {\n if (props.modules.includes('curriculum-filter') && !curriculumPresentations.hasCompleted)\n return true;\n\n return false;\n }\n\n function onClickCancel(): void {\n // Reset the form to it's initial state on cancel\n formikProps.setFieldValue('metadata', {\n ...formikProps.values.metadata,\n hideWidgetHeading: formikProps.initialValues.metadata.hideWidgetHeading,\n hideWidgetDescription: formikProps.initialValues.metadata.hideWidgetDescription,\n hideObjectTitle: formikProps.initialValues.metadata.hideObjectTitle,\n hideObjectSeries: formikProps.initialValues.metadata.hideObjectSeries\n });\n\n props.closePopup();\n }\n\n function onToggleHeadingVisibility(): void {\n formikProps.setFieldValue('metadata', {\n ...formikProps.values.metadata,\n hideWidgetHeading: !formikProps.values.metadata?.hideWidgetHeading,\n hideWidgetDescription: !formikProps.values.metadata?.hideWidgetDescription\n });\n\n formikProps.setTouched({\n ...formikProps.touched,\n metadata: {\n hideWidgetHeading: true,\n hideWidgetDescription: true\n }\n });\n }\n\n function onToggleMediaTitleVisibility(): void {\n formikProps.setFieldValue('metadata', {\n ...formikProps.values.metadata,\n hideObjectTitle: !formikProps.values.metadata?.hideObjectTitle,\n hideObjectSeries: !formikProps.values.metadata?.hideObjectSeries\n });\n\n formikProps.setTouched({\n ...formikProps.touched,\n metadata: {\n hideObjectTitle: true,\n hideObjectSeries: true\n }\n });\n }\n\n function onSelectCurriculum(event: React.ChangeEvent<HTMLSelectElement>): void {\n const id = event.target.value.toString();\n formikProps.setFieldValue('curriculumIds', id ? [id] : []);\n }\n\n const publishedCurriculums = curriculumPresentations.data?.filter(c => c.status === PresentationStatus.Published);\n\n const selectedCurriculum = publishedCurriculums?.find(c => {\n return !!formikProps.values.curriculumIds?.find(id => id.toString() === c.id.toString());\n });\n\n return (\n <Popup\n title='Widget settings'\n closePopup={props.closePopup}\n size='md'\n showLoadingSpinner={isLoading()}\n >\n {props.modules.includes('heading-visibility') && (\n <FormField\n name='hideWidgetHeadingAndDescription'\n id='hideWidgetHeadingAndDescription'\n >\n {() => (\n <div>\n <div className='d-flex align-items-center justify-content-between mb-1'>\n <div className='fw-semibold'>Heading and description</div>\n <ToggleSwitch\n onClick={onToggleHeadingVisibility}\n on={!formikProps.values.metadata?.hideWidgetHeading}\n />\n </div>\n\n <div className={styles.description}>\n The heading and description is shown to provide more information on the widget’s function.\n </div>\n </div>\n )}\n </FormField>\n )}\n\n {props.modules.includes('media-title-visibility') && (\n <FormField\n name='hideVideoTitleAndSeries'\n id='hideVideoTitleAndSeries'\n >\n {() => (\n <div>\n <div className='d-flex align-items-center justify-content-between mb-1'>\n <div className='fw-semibold'>Series and video title</div>\n <ToggleSwitch\n onClick={onToggleMediaTitleVisibility}\n on={!formikProps.values.metadata?.hideObjectTitle}\n />\n </div>\n\n <div className={styles.description}>\n Display the video’s series (where applicable) and video title beneath the thumbnail.\n Hidden series and video titles are only appropriate on movie thumbnails that are clearly titled.\n </div>\n </div>\n )}\n </FormField>\n )}\n\n {props.modules.includes('curriculum-filter') && (\n <div className='pb-3'>\n <FormField\n label='Display widget for'\n name='curriculumFilter'\n id='curriculumFilter'\n as='select'\n onChange={onSelectCurriculum}\n value={formikProps.values.curriculumIds?.length ? ArrayHelper.first(formikProps.values.curriculumIds).toString() : ''}\n >\n <option value=''>Any curriculum / standard</option>\n {publishedCurriculums?.map((presentation: Presentation) => (\n <option key={presentation.id} value={presentation.id.toString()}>{presentation.name}</option>\n ))}\n </FormField>\n\n <div className='mt-n2'>\n This widget will appear for teachers with <strong>{selectedCurriculum?.id ? selectedCurriculum.name : 'Any curriculum / standard'}</strong>\n </div>\n </div>\n )}\n\n <PopupButtons>\n <PopupButtons.Cancel onClick={onClickCancel} />\n <PopupButtons.Submit\n variant='dark'\n text='Save changes'\n onClick={props.closePopup}\n disabled={false}\n />\n </PopupButtons>\n </Popup>\n );\n}\n","import React from 'react';\n\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { CuratedDashboard, CuratedWidget, Tag } from 'libs/shared/interfaces';\n\nimport { DashboardHelper } from 'shared/utils/DashboardHelper';\n\nimport { WidgetSettingsButton } from 'apps/dashboard-editor/components/widget-settings-button/WidgetSettingsButton';\nimport { WidgetSettingsView } from 'apps/dashboard-editor/views/widget-settings/WidgetSettingsView';\n\nexport type WidgetSettingsModule = 'curriculum-filter' | 'heading-visibility' | 'media-title-visibility';\n\ninterface WidgetPreviewHeaderProps {\n dashboard: CuratedDashboard;\n classificationTags?: Tag[];\n widgetTypeId?: WidgetTypeId;\n}\n\nWidgetPreviewHeader.defaultProps = {\n classificationTags: []\n};\n\nexport function WidgetPreviewHeader(props: WidgetPreviewHeaderProps): JSX.Element {\n const [ showSettings, setShowSettings ] = React.useState(false);\n\n const formikProps = useFormikContextWrapper<CuratedWidget>();\n\n const settingsModules = DashboardHelper.getWidgetSettingsModules(\n props.dashboard,\n props.classificationTags,\n props.widgetTypeId\n );\n\n React.useEffect(() => {\n if (formikProps.values.id)\n return;\n\n if (!settingsModules.includes('media-title-visibility'))\n return;\n\n /**\n * Any widget that uses these settings will have the media titles off by default\n */\n formikProps.setFieldValue('metadata', {\n ...formikProps.values.metadata,\n hideObjectTitle: true,\n hideObjectSeries: true\n });\n\n formikProps.setTouched({\n ...formikProps.touched,\n metadata: {\n hideObjectTitle: true,\n hideObjectSeries: true\n }\n });\n }, [ formikProps.values.id, props.dashboard, props.classificationTags ]);\n\n return (\n <>\n <div className='d-flex align-items-center justify-content-between mb-3 mt-4'>\n <h2 className='h5 mb-0'>Widget Preview</h2>\n\n {!!settingsModules.length && (\n <WidgetSettingsButton onClickSettings={() => setShowSettings(true)}/>\n )}\n </div>\n\n {showSettings && (\n <WidgetSettingsView\n modules={settingsModules}\n closePopup={() => setShowSettings(false)}\n />\n )}\n </>\n );\n}\n","import { Flight } from 'libs/common/react/index';\n\nexport const AuthorRequests = {\n authors(): Flight.Request {\n return {\n url: `/api/discover/v1/authors`,\n key: `authors`\n };\n }\n};\n","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { AuthorCollection, AuthorReviewerWidgetData, CuratedWidget } from 'libs/shared/interfaces';\n\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { AuthorRequests } from 'apps/dashboard-editor/flight-requests/AuthorRequests';\n\nexport type AuthorReviewerWidget = CuratedWidget<AuthorReviewerWidgetData, any>;\n\nexport function AddContentAuthorReviewerView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<AuthorReviewerWidget>();\n\n const authors = Flight.useBasicFetch<AuthorCollection>(AuthorRequests.authors());\n\n React.useEffect(() => {\n if (formikProps.values.data?.classificationId)\n return;\n\n const data: AuthorReviewerWidgetData = {\n classificationId: props.classification?.id,\n presentationId: props.presentation.id,\n authorId: '',\n reviewerId: ''\n };\n\n formikProps.setFieldValue('data', data);\n }, []);\n\n if (!authors.hasCompleted)\n return <></>;\n\n return (\n <>\n <FormField<AuthorReviewerWidget>\n as='select'\n label='Author'\n name='data.authorId'\n className={!formikProps.values.data.authorId ? 'text-secondary' : ''}\n showRequiredStar\n >\n <option className='text-secondary' value=''>Select an author</option>\n {authors.data?.data?.map(author => {\n return (\n <option\n key={author.id}\n value={author.id}\n className='text-dark'\n >\n {author.firstName} {author.lastName}\n </option>\n );\n })}\n </FormField>\n\n <FormField<AuthorReviewerWidget>\n as='select'\n label='Reviewer'\n name='data.reviewerId'\n className={!formikProps.values.data.reviewerId ? 'text-secondary' : ''}\n showRequiredStar\n >\n <option className='text-secondary' value=''>Select a reviewer</option>\n {authors.data?.data?.map(reviewer => {\n return (\n <option\n key={reviewer.id}\n value={reviewer.id}\n className='text-dark'\n >\n {reviewer.firstName} {reviewer.lastName}\n </option>\n );\n })}\n </FormField>\n\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n description={formikProps.values.description}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n id={formikProps.values.id}\n name={formikProps.values.name}\n content={props.content}\n imageCdnUrl={props.imageCdnUrl}\n audiences={props.audiences}\n metadata={formikProps.values.metadata}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n isEditing\n />\n </>\n );\n}\n","import React from 'react';\nimport { FormikContextType } from 'formik';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { CuratedDashboard, CuratedWidget, DashboardTargetType } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nfunction onChange(formikProps: FormikContextType<CuratedWidget>) {\n const isChecked = formikProps.values.metadata?.showInTableOfContents;\n\n formikProps.setFieldValue('metadata', {\n ...formikProps.values.metadata,\n showInTableOfContents: !isChecked\n });\n}\n\ninterface ToggleShowInTableOfContentsProps {\n dashboard: CuratedDashboard;\n checkedByDefault?: boolean;\n}\n\nexport function ToggleShowInTableOfContents<T>(props: ToggleShowInTableOfContentsProps): JSX.Element {\n const formikProps = useFormikContextWrapper<CuratedWidget>();\n const [ isCheckedBeforeEdit, setIsCheckedBeforeEdit ] = React.useState<boolean>();\n\n const widgetHeading = formikProps.values.name;\n\n const isChecked = !!formikProps.values.metadata?.showInTableOfContents;\n\n function getIsCheckboxDisabled() {\n if (isChecked)\n return false;\n\n if (isCheckedBeforeEdit && widgetHeading)\n return false;\n\n return !widgetHeading;\n }\n\n function getCheckboxAppLinkTextTooltip() {\n if (!widgetHeading)\n return 'Please enter a heading below to add to Table of Contents';\n\n return '';\n }\n\n React.useEffect(() => {\n if (props.checkedByDefault) {\n formikProps.setFieldValue('metadata', {\n ...formikProps.values.metadata,\n showInTableOfContents: true\n });\n }\n\n setIsCheckedBeforeEdit(true);\n }, []);\n\n React.useEffect(() => {\n if (!formikProps.values.metadata?.showInTableOfContents)\n return;\n \n if (widgetHeading || props.checkedByDefault)\n return;\n \n formikProps.setFieldValue('metadata', {\n ...formikProps.values.metadata,\n showInTableOfContents: false,\n tocIndentation: 0\n });\n }, [ widgetHeading, formikProps.values.metadata?.showInTableOfContents ]);\n\n React.useEffect(() => {\n if (!formikProps.values.metadata?.showInTableOfContents && isCheckedBeforeEdit) {\n formikProps.setFieldValue('metadata', {\n ...formikProps.values.metadata,\n tocIndentation: 0\n });\n }\n }, [ formikProps.values.metadata?.showInTableOfContents, isCheckedBeforeEdit ]);\n\n const isTopicDirectory = CuratedDashboardHelper.isType(props.dashboard, DashboardTargetType.ClassificationDirectory);\n\n return (\n <Tooltip title={getCheckboxAppLinkTextTooltip()} spanHack spanHackClassName=''>\n <div className='d-inline-block'>\n <FormField<T>\n id='metadata.showInTableOfContents'\n name='metadata.showInTableOfContents'\n type='checkbox'\n label={`Include widget into this dashboard's table of contents`}\n onChange={() => (onChange(formikProps))}\n disabled={getIsCheckboxDisabled()}\n checkboxLabelFontWeight='normal'\n />\n {/* only show this if this is a topic directory dashboard for now */}\n {isTopicDirectory && (\n <FormField<T>\n id='metadata.tocIndentation'\n name='metadata.tocIndentation'\n type='number'\n max={2}\n min={0}\n label={`Indent widget's heading in the table of contents`}\n disabled={!formikProps.values.metadata.showInTableOfContents}\n checkboxLabelFontWeight='normal'\n />\n )}\n </div>\n </Tooltip>\n );\n}\n","import * as Yup from 'yup';\n\nimport { EnvironmentVariables } from 'libs/common/backbone/services/EnvironmentVariables';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { DashboardTargetType } from 'libs/shared/interfaces';\n\nimport { DashboardHelper } from 'shared/utils/DashboardHelper';\n\nexport const WidgetValidationConstants = {\n MAX_NAME_LENGTH: 80,\n MAX_DESCRIPTION_LENGTH: 250\n};\n\nexport function isWidgetHeadingRequired(\n widgetTypeId: WidgetTypeId,\n templateId: WidgetTemplate,\n isOptional?: boolean\n): boolean {\n if (isOptional)\n return false;\n\n if (widgetTypeId === WidgetTypeId.Faq && templateId === WidgetTemplate.Question)\n return false;\n\n if (widgetTypeId === WidgetTypeId.BecauseYouWatched)\n return false;\n\n if ([\n WidgetTemplate.ThumbnailFixedListMediaLarge,\n WidgetTemplate.ThumbnailFeaturedMedia,\n WidgetTemplate.ThumbnailHeroMedia,\n WidgetTemplate.PosterSlidingListMedium,\n WidgetTemplate.AuthorReviewer\n ].includes(templateId)) {\n return false;\n }\n\n return true;\n}\n\nfunction getMinMaxValidation(min: number, max: number, objectNameSingle: string, objectNamePlural: string): any {\n /**\n * Because our staging data in topics isn't great, we usually can't meet the minimum\n * content requirements for these widget types. So in dev only, we support any amount.\n */\n if (EnvironmentVariables.isDevelopment) {\n min = 1;\n max = Infinity;\n }\n\n return Yup.array()\n .test({\n message: `Widget must have at least ${min} ${min === 1 ? objectNameSingle : objectNamePlural}.`,\n test: arr => {\n return !!arr && arr.length >= min;\n }\n })\n .test({\n message: `Widget cannot have more than ${max} ${max === 1 ? objectNameSingle : objectNamePlural}.`,\n test: arr => {\n return !!arr && arr.length <= max;\n }\n });\n}\n\nfunction getDataSchema(\n widgetTypeId: WidgetTypeId,\n templateId: WidgetTemplate,\n target?: DashboardTargetType\n): HashObject {\n const { min, max } = DashboardHelper.getContentGuidelineMinMax(widgetTypeId, templateId, target);\n\n switch (widgetTypeId) {\n case WidgetTypeId.CuratedMedia: {\n return {\n objectIds: getMinMaxValidation(min, max, 'video', 'videos')\n };\n }\n\n case WidgetTypeId.CompanyClassificationVideos: {\n return {\n companyId: Yup.string().required('Please select a company.')\n };\n }\n\n case WidgetTypeId.CuratedMultimedia: {\n return {\n multimedias: getMinMaxValidation(min, max, 'item', 'items')\n };\n }\n\n case WidgetTypeId.ClassificationLatestReleasedVideosV2:\n case WidgetTypeId.LatestReleasedClassifications: {\n if (target === DashboardTargetType.Classification) {\n return {\n classifications: getMinMaxValidation(min, max, 'parent topic', 'parent topics')\n };\n }\n\n return {};\n }\n\n case WidgetTypeId.TrendingClassifications:\n case WidgetTypeId.SeasonalClassificationMedia:\n case WidgetTypeId.TrendingClassificationsMedia: {\n return {\n classifications: getMinMaxValidation(min, max, 'parent topic', 'parent topics')\n };\n }\n\n case WidgetTypeId.Faq: {\n const questionSchema = Yup.object().shape({\n question: Yup.string().required('Question is required.'),\n answer: Yup.string().required('Answer is required.')\n });\n\n const schema = {\n faqs: Yup.array().of(questionSchema)\n };\n\n if (templateId === WidgetTemplate.Question)\n schema.faqs = schema.faqs.min(1, 'Please add at least one question.');\n else if (templateId === WidgetTemplate.QuestionAccordion)\n schema.faqs = schema.faqs.min(2, 'Please add at least two questions.');\n\n return schema;\n }\n\n case WidgetTypeId.PlaylistMedia: {\n return {\n playlistId: Yup.string()\n .required('Please select a playlist.')\n };\n }\n\n case WidgetTypeId.SeriesMedia: {\n return {\n seriesId: Yup.string()\n .required('Please select a series.'),\n options: Yup.object().shape({\n sort: Yup.string().required('Please select a sort option.'),\n order: Yup.string().required('Please select an order option.')\n })\n };\n }\n\n case WidgetTypeId.ClassificationMedia: {\n return {\n classificationId: Yup.string().required('Please select a topic.')\n };\n }\n\n case WidgetTypeId.CuratedClassifications: {\n return {\n objectIds: getMinMaxValidation(min, max, 'topic', 'topics')\n };\n }\n\n case WidgetTypeId.Classifications: {\n if (target === DashboardTargetType.ClassificationDirectory)\n return {\n classificationId: Yup.string()\n .required('Please select a topic.')\n };\n return {};\n }\n\n case WidgetTypeId.CuratedSeries: {\n return {\n objectIds: getMinMaxValidation(min, max, 'series', 'series')\n };\n }\n\n case WidgetTypeId.CuratedPlaylists: {\n return {\n objectIds: getMinMaxValidation(min, max, 'playlist', 'playlists')\n };\n }\n\n case WidgetTypeId.Ratings: {\n return {\n objectIds: Yup.array().required()\n };\n }\n\n case WidgetTypeId.CuratedCompanies: {\n return {\n objectIds: getMinMaxValidation(min, max, 'company', 'companies')\n };\n }\n\n case WidgetTypeId.AuthorReviewer: {\n return {\n authorId: Yup.string().required('Please select an author.'),\n reviewerId: Yup.string().required('Please select a reviewer.')\n };\n }\n }\n}\n\nfunction getMetadataSchema(widgetTypeId: WidgetTypeId, templateId: WidgetTemplate) {\n switch (widgetTypeId) {\n case WidgetTypeId.Classifications: {\n if (templateId === WidgetTemplate.PosterSlidingListSmall)\n return {\n text: Yup.string().default('').when('imageId', { is: '', then: Yup.string(), otherwise: Yup.string().required('Title of leading poster is required.') }),\n imageId: Yup.string().default('').when('text', { is: '', then: Yup.string(), otherwise: Yup.string().required('Poster image is required.') })\n };\n\n return {};\n }\n\n case WidgetTypeId.LatestReleasedVideos: {\n return {\n imageId: Yup.string().required('Banner image is required.').default('')\n };\n }\n\n case WidgetTypeId.Blurb: {\n if (templateId === WidgetTemplate.HeroBannerSmall) {\n return {\n imageId: Yup.string().required('Banner image is required.').default('')\n };\n }\n\n return {};\n }\n\n default:\n return {};\n }\n}\n\nexport const getDashboardWizardValidationSchema = (\n widgetTypeId: WidgetTypeId,\n templateId: WidgetTemplate,\n target?: DashboardTargetType\n) => {\n const nameRequiredMessage = widgetTypeId === WidgetTypeId.Feedback ? 'Text is required.' : 'Heading is required.';\n\n let nameSchema = Yup.string().when('metadata.headingOptional', {\n is: true,\n then: Yup.string(),\n otherwise: isWidgetHeadingRequired(widgetTypeId, templateId) ?\n Yup.string().required(nameRequiredMessage) :\n Yup.string().default('')\n });\n\n let descriptionSchema = Yup.string().default('');\n\n /**\n * Because this widget type's heading and description is populated from the playlist fields,\n * we don't set max char limits here.\n */\n if (widgetTypeId !== WidgetTypeId.PlaylistMedia) {\n const nameLabel = widgetTypeId === WidgetTypeId.Feedback ? 'Text' : 'Heading';\n\n nameSchema = nameSchema.max(\n WidgetValidationConstants.MAX_NAME_LENGTH,\n () => `${nameLabel} cannot be longer than ${WidgetValidationConstants.MAX_NAME_LENGTH} characters.`\n );\n\n descriptionSchema = descriptionSchema.max(\n WidgetValidationConstants.MAX_DESCRIPTION_LENGTH,\n () => `Description cannot be longer than ${WidgetValidationConstants.MAX_DESCRIPTION_LENGTH} characters.`\n );\n }\n\n const dataSchema = Yup.object().shape(getDataSchema(widgetTypeId, templateId, target));\n const metadataSchema = Yup.object().shape(getMetadataSchema(widgetTypeId, templateId), [[ 'text', 'imageId' ]]);\n\n return Yup.object().shape({\n name: nameSchema,\n description: descriptionSchema,\n data: dataSchema,\n metadata: metadataSchema\n });\n};\n","import React from 'react';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\nimport { BlurbWidget } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-blurb/AddContentBlurbView';\n\nexport function AddContentBlurbHeadingView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<BlurbWidget>();\n\n const isTopicDashboard = CuratedDashboardHelper.isClassificationDashboard(\n CuratedDashboardHelper.getDashboardTargetInfo(props.dashboard)\n );\n\n return (\n <>\n <FormField<BlurbWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar\n showCharacterCounter\n />\n\n {isTopicDashboard && (\n <ToggleShowInTableOfContents<BlurbWidget>\n dashboard={props.dashboard}\n checkedByDefault={!props.isEditing}\n />\n )}\n \n <FormField<BlurbWidget>\n as='textarea'\n rows={3}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n description={formikProps.values.description}\n widgetTypeId={formikProps.values.widgetId}\n metadata={formikProps.values.metadata}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n imageCdnUrl={props.imageCdnUrl}\n content={[]}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { ButtonIcon, HeadingColor, HeadingSize, WIDGET_THEME } from 'libs/shared/constants/WidgetThemingConstants';\nimport { ImageType } from 'libs/shared/enums/Images';\n\nimport { ImageSelect } from 'shared/components';\nimport { Actions, AppChannels } from 'shared/constants';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\nimport { BlurbWidget } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-blurb/AddContentBlurbView';\n\nexport function AddContentBlurbHeroBannerSmallView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<BlurbWidget>();\n\n return (\n <>\n <FormField<BlurbWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar\n showCharacterCounter\n />\n\n <div className='row row-cols-2 mb-1 g-2'>\n <FormField<BlurbWidget>\n label='Heading size'\n name='metadata.theming.headingSize'\n as='select'\n value={formikProps.values.metadata.theming?.headingSize || HeadingSize.H6}\n >\n {WIDGET_THEME.HEADING.SIZES.map(size => <option key={size.value} value={size.value}>{size.name}</option>)}\n </FormField>\n <FormField<BlurbWidget>\n label='Heading colour'\n name='metadata.theming.headingColor'\n as='select'\n value={formikProps.values.metadata.theming?.headingColor || HeadingColor.Dark}\n >\n {WIDGET_THEME.HEADING.COLOR.map(color => <option key={color.value} value={color.value}>{color.name}</option>)}\n </FormField>\n </div>\n\n <ImageSelect\n imageType={ImageType.Banners}\n fieldName='metadata.imageId'\n label='Banner image'\n setSelectedImage={image => {\n formikProps.setFieldValue('metadata', { ...formikProps.values.metadata, imageId: image.id });\n }}\n showRequiredStar\n uploadAppLink={{\n application: AppChannels.DASHBOARD_EDITOR,\n action: Actions.DashboardEditor.ADD_CONTENT_IMAGE_UPLOAD\n }}\n />\n\n <div className='row row-cols-2 g-2'>\n <FormField<BlurbWidget>\n name='metadata.cta.text'\n label='Button label'\n placeholder='Enter a button label...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n />\n <FormField<BlurbWidget>\n name='metadata.cta.href'\n label='Button link'\n placeholder='Enter a button link...'\n />\n <FormField<BlurbWidget>\n label='Button icon'\n name='metadata.cta.icon'\n as='select'\n value={formikProps.values.metadata.cta?.icon || ButtonIcon.NewWindow}\n >\n {WIDGET_THEME.BUTTON.ICONS.map(icon => <option key={icon.value} value={icon.value}>{icon.name}</option>)}\n </FormField>\n </div>\n\n <WidgetPreviewHeader dashboard={props.dashboard} />\n\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n metadata={formikProps.values.metadata}\n imageCdnUrl={props.imageCdnUrl}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n content={[]}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { BlurbWidgetData, CuratedWidget } from 'libs/shared/interfaces';\n\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { AddContentBlurbHeadingView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-blurb/AddContentBlurbHeadingView';\nimport { AddContentBlurbHeroBannerSmallView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-blurb/AddContentBlurbHeroBannerSmallView';\n\nexport type BlurbWidget = CuratedWidget<BlurbWidgetData, any>;\n\nexport function AddContentBlurbView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<BlurbWidget>();\n\n switch (formikProps.values.templateId) {\n case WidgetTemplate.Heading:\n return <AddContentBlurbHeadingView {...props} />;\n case WidgetTemplate.HeroBannerSmall:\n return <AddContentBlurbHeroBannerSmallView {...props} />;\n default:\n return <></>;\n }\n}\n","import React from 'react';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\n\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\n\nimport { FaqWidget } from '../AddContentFaqView';\n\nexport function AddContentFaqQuestionView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<FaqWidget>();\n\n return (\n <>\n {formikProps.values.data.faqs.map((_, index) => {\n return (\n <div key={index}>\n <FormField<FaqWidget>\n name={`data.faqs[${index}].question`}\n label='Question'\n placeholder='Enter a question'\n autoFocus\n showRequiredStar\n />\n <FormField<FaqWidget>\n name={`data.faqs[${index}].answer`}\n label='Answer'\n placeholder='Enter an answer'\n as='textarea'\n rows={15}\n showRequiredStar\n />\n </div>\n );\n })}\n \n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n description={formikProps.values.description}\n widgetTypeId={formikProps.values.widgetId}\n content={formikProps.values.data.faqs}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n metadata={formikProps.values.metadata}\n imageCdnUrl={props.imageCdnUrl}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n </>\n );\n}\n",":local {\n .expander {\n position: absolute;\n top: map-get($spacers, 2);\n left: 0.2rem;\n }\n\n .close {\n position: absolute;\n top: map-get($spacers, 2);\n right: map-get($spacers, 2);\n }\n}","import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { CloseSvg } from 'libs/shared/images/svg/actions/CloseSvg';\nimport { ChevronDownSvg } from 'libs/shared/images/svg/arrows/ChevronDownSvg';\nimport { ChevronRightSvg } from 'libs/shared/images/svg/arrows/ChevronRightSvg';\nimport { CuratedMediaWidget } from 'libs/shared/interfaces';\n\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\n\nimport { FaqWidget } from '../AddContentFaqView';\n\nimport styles from './question-accordion-content.module.scss';\n\nexport function AddContentFaqQuestionAccordionView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<FaqWidget>();\n const [ expandedStates, setExpandedStates ] = React.useState(formikProps.values.data.faqs.map((_, i) => {\n return i === 0;\n }));\n\n function onClickAddAnotherQuestion(): void {\n const currentFaqs = formikProps.values.data.faqs;\n\n const newFaqs = [\n ...currentFaqs,\n {\n question: '',\n answer: ''\n }\n ];\n\n formikProps.setFieldValue(`data.faqs`, newFaqs);\n setExpandedStates(newFaqs.map((_, i) => i === newFaqs.length - 1));\n }\n\n function onToggleExpand(index: number): void {\n const isExpanded = expandedStates[index];\n\n if (isExpanded)\n setExpandedStates(expandedStates.map(() => false));\n else\n setExpandedStates(expandedStates.map((_, i) => i === index));\n }\n\n function onRemoveFaq(index: number): void {\n const currentFaqs = formikProps.values.data.faqs;\n\n const newFaqs = [\n ...currentFaqs.slice(0, index),\n ...currentFaqs.slice(index + 1)\n ];\n\n formikProps.setFieldValue(`data.faqs`, newFaqs);\n setExpandedStates(newFaqs.map((_, i) => i === newFaqs.length - 1));\n }\n\n const totalQuestions = formikProps.values.data.faqs.length;\n\n return (\n <>\n <FormField<FaqWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar\n showCharacterCounter\n />\n\n <ToggleShowInTableOfContents<CuratedMediaWidget>\n dashboard={props.dashboard}\n />\n\n <div className='mb-n2'>\n {formikProps.values.data.faqs.map((_, index) => {\n const isExpanded = expandedStates[index];\n const question = formikProps.values.data.faqs[index].question;\n\n return (\n <div key={index} className='rounded-3 border mb-2 p-2 ps-4 position-relative'>\n <h3 className='h5 mb-0'>\n <span>Question #{index + 1}</span>\n <span className='text-secondary font-size-normal'>\n {(isExpanded || !question) ? '' : ` (${question})`}\n </span>\n </h3>\n\n {isExpanded && (\n <div className='pt-2 mb-n2'>\n <FormField<FaqWidget>\n name={`data.faqs[${index}].question`}\n label='Question'\n placeholder='Enter a question'\n showRequiredStar\n />\n\n <FormField<FaqWidget>\n name={`data.faqs[${index}].answer`}\n label='Answer'\n placeholder='Enter an answer'\n as='textarea'\n rows={15}\n showRequiredStar\n />\n </div>\n )}\n\n <DivButton className={styles.expander} onClick={() => onToggleExpand(index)}>\n <SvgContainer\n svg={isExpanded ? ChevronDownSvg : ChevronRightSvg}\n />\n </DivButton>\n\n <DivButton\n className={`${styles.close} ${totalQuestions > 2 ? '' : 'cursor-default text-secondary'}`}\n onClick={totalQuestions > 2 ? (() => onRemoveFaq(index)) : null}\n >\n <Tooltip\n title={totalQuestions > 2 ? '' : 'You must have at least 2 questions'}\n spanHack\n >\n <SvgContainer svg={CloseSvg} />\n </Tooltip>\n </DivButton>\n </div>\n );\n })}\n </div>\n\n {formikProps.isValid && (\n <div className='d-inline-block'>\n <DivButton onClick={onClickAddAnotherQuestion} className='info-link mt-2'>\n + Add another question\n </DivButton>\n </div>\n )}\n \n <WidgetPreviewHeader dashboard={props.dashboard} />\n\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n description={formikProps.values.description}\n widgetTypeId={formikProps.values.widgetId}\n metadata={formikProps.values.metadata}\n content={formikProps.values.data.faqs}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n imageCdnUrl={props.imageCdnUrl}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { CuratedWidget, FaqWidgetData } from 'libs/shared/interfaces';\n\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\n\nimport { AddContentFaqQuestionView } from './question/AddContentFaqQuestionView';\nimport { AddContentFaqQuestionAccordionView } from './question-accordion/AddContentFaqQuestionAccordionView';\n\nexport type FaqWidget = CuratedWidget<FaqWidgetData, any>;\n\nexport function AddContentFaqView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<FaqWidget>();\n const isAccordion = formikProps.values.templateId === WidgetTemplate.QuestionAccordion;\n\n return isAccordion ?\n <AddContentFaqQuestionAccordionView {...props} /> :\n <AddContentFaqQuestionView {...props} />;\n}\n","import React from 'react';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { FEEDBACK_WIDGET_CONTENT } from 'libs/shared/components/widgets/curated-widgets/templates/feedback/FeedbackWidgetContent';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { BlurbWidgetData, CuratedWidget } from 'libs/shared/interfaces';\nimport { FeedbackOption } from 'libs/shared/views/feedback/enums/FeedbackOption';\n\nimport { DashboardWidgetImageUrls } from 'shared/constants/DashboardWidgetImageUrls';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\n\nexport type FeedbackWidget = CuratedWidget<BlurbWidgetData, any>;\n\nconst DEFAULT_FEEDBACK_OPTION = FeedbackOption.REQUEST_VIDEO;\n\nconst FEEDBACK_OPTIONS = Object.keys(FEEDBACK_WIDGET_CONTENT) as FeedbackOption[];\n\nexport function AddContentFeedbackView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<FeedbackWidget>();\n\n React.useEffect(() => {\n if (formikProps.values.metadata?.feedbackType)\n return;\n\n formikProps.setFieldValue('metadata.feedbackType', DEFAULT_FEEDBACK_OPTION);\n formikProps.setFieldValue('name', FEEDBACK_WIDGET_CONTENT[DEFAULT_FEEDBACK_OPTION].text);\n }, []);\n\n function onChangeFeedbackType(event: React.ChangeEvent<HTMLSelectElement>): void {\n const feedbackType = event.target.value as FeedbackOption;\n\n formikProps.setFieldValue('metadata.feedbackType', feedbackType);\n formikProps.setFieldValue('name', FEEDBACK_WIDGET_CONTENT[feedbackType].text);\n }\n\n return (\n <>\n <FormField<FeedbackWidget>\n name='metadata.feedbackType'\n label='Feedback type'\n as='select'\n value={formikProps.values.metadata?.feedbackType || DEFAULT_FEEDBACK_OPTION}\n onChange={onChangeFeedbackType}\n showRequiredStar\n >\n {FEEDBACK_OPTIONS.map(option => (\n <option key={option} value={option}>{FEEDBACK_WIDGET_CONTENT[option].ctaText}</option>\n ))}\n </FormField>\n\n <FormField<FeedbackWidget>\n name='name'\n label='Text'\n readOnly\n disabled\n />\n\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n description={formikProps.values.description}\n widgetTypeId={formikProps.values.widgetId}\n metadata={formikProps.values.metadata}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n imageCdnUrl={props.imageCdnUrl}\n imageUrls={DashboardWidgetImageUrls}\n content={[]}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n </>\n );\n}\n","import React from 'react';\nimport { Button } from 'react-bootstrap';\n\ninterface DashboardWizardContentCallToActionProps {\n text: string;\n setShowSearch: (show: boolean) => void;\n}\n\nexport function DashboardWizardCta(\n props: DashboardWizardContentCallToActionProps\n): JSX.Element {\n return (\n <Button variant='outline-dark' onClick={() => props.setShowSearch(true)}>\n {props.text}\n </Button>\n );\n}\n","import React from 'react';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WizardActionInfoContainer } from 'libs/shared/components/wizard/select-action/wizard-action-info-container/WizardActionInfoContainer';\nimport { CuratedMediaWidget } from 'libs/shared/interfaces';\n\nimport { Actions, AppChannels } from 'shared/constants';\n\ninterface DashboardWizardContentGuidelineProps {\n text?: string;\n hideLink?: boolean;\n}\n\nexport function DashboardWizardContentGuideline(props: DashboardWizardContentGuidelineProps): JSX.Element {\n const formikProps = useFormikContextWrapper<CuratedMediaWidget>();\n\n const appLink = {\n application: AppChannels.DASHBOARD_EDITOR,\n action: Actions.DashboardEditor.WIDGET_CONTENT_GUIDELINE,\n args: [ formikProps.values.widgetId, formikProps.values.templateId ]\n };\n\n return (\n <div className='mt-2'>\n <WizardActionInfoContainer>\n {props.text}&nbsp;\n \n {!props.hideLink && (\n <>\n View&nbsp;\n <AppLink appLink={appLink} className='d-inline'>\n <span className='text-info text-underline'>content guidelines</span>\n </AppLink>\n </>\n )}\n </WizardActionInfoContainer>\n </div>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ConfirmationPopup } from 'libs/shared/components/confirmation-popup/ConfirmationPopup';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nconst namespace = 'dashboardEditor.dashboardWizardRemoveWidgetContent';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface DashboardWizardRemoveWidgetContentProps extends PopupViewProps {\n objectId: string;\n objectName: string;\n objectType: string;\n onRemoveItem: (id: string) => void;\n}\n\nfunction formatObjectTypeName(objectType: string): string {\n switch (objectType) {\n case 'video':\n return 'Video';\n case 'series':\n return 'Series';\n case 'playlist':\n return 'Playlist';\n case 'subject':\n return 'Classification';\n case 'company':\n return 'Company';\n case 'partner_profile':\n return 'Content Partner';\n default:\n return objectType;\n }\n}\n\nexport function DashboardWizardRemoveWidgetContent(props: DashboardWizardRemoveWidgetContentProps) {\n function removeObject(): void {\n props.onRemoveItem(props.objectId);\n\n props.closePopup();\n }\n const formattedObjectType = formatObjectTypeName(props.objectType);\n return (\n <ConfirmationPopup\n title={getPhrase('header', { objectTypeName: formattedObjectType })}\n onClickConfirm={removeObject}\n closePopup={props.closePopup}\n confirmButtonText={getPhrase('confirmButtonText', { objectTypeName: formattedObjectType })}\n confirmButtonVariant='danger'\n disabledConfirmButton={false}\n >\n <p>\n <Text\n phrase='body'\n namespace={namespace}\n options={{ name: props.objectName, escapeText: true }}\n />\n </p>\n </ConfirmationPopup>\n );\n}\n","import { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { BaseObject, Classification, Company, Playlist, SearchableWidgetTableObjectTypes, Series, Video, VideoTypes } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions, AppChannels } from 'shared/constants';\nimport { MatrixObjectType } from 'shared/enums/MatrixObjectType';\nimport { MatrixColumn } from 'shared/interfaces';\nimport { CuratorProductContext } from 'shared/interfaces/models/CuratorProductContext';\nimport { DefinedColumnSet, MemberMatrixHelper } from 'shared/utils/MemberMatrixHelper';\n\ninterface ContentTableConfigsType {\n columns: MatrixColumn[];\n getEditAppLink: (item: BaseObject, context?: CuratorProductContext) => Core.AppLink;\n appLinks: HashObject;\n}\n\nfunction getEditVideoTypesAppLink(videoType: VideoTypes, context?: CuratorProductContext) {\n if (context === 'live')\n return {\n application: AppChannels.CV_LIVE,\n action: Actions.CvLive.EDIT_VIDEO,\n args: [videoType.id]\n };\n\n if (VideoHelper.isClip(videoType)) {\n return {\n application: AppChannels.CLIPS,\n action: Actions.Clips.EDIT_CLIP_CLASSIFICATIONS,\n args: [videoType.id]\n };\n }\n \n if (VideoHelper.isInteractive(videoType)) {\n return {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.EDIT_INTERACTIVE_CLASSIFICATIONS,\n args: [videoType.id]\n };\n }\n\n return {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.EDIT_VIDEO,\n args: [videoType.id]\n };\n}\n\nfunction getEditTopicAppLink(classification: Classification) {\n return {\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.EDIT_CLASSIFICATION,\n args: [ classification.presentationId, classification.id ]\n };\n}\n\nfunction getEditPlaylistAppLink(playlist: Playlist) {\n return {\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.EDIT_PLAYLIST,\n args: [playlist.id]\n };\n}\n\nfunction getEditSeriesAppLink(series: Series) {\n return {\n application: AppChannels.SERIES,\n action: Actions.Series.EDIT_SERIES,\n args: [series.id]\n };\n}\n\nfunction getCompanyEditAppLink(company: Company) {\n return {\n application: AppChannels.COMPANIES,\n action: Actions.Companies.EDIT_COMPANY,\n args: [company.id]\n };\n}\n\nfunction getContentPartnerEditAppLink(company: Company) {\n return {\n application: AppChannels.CONTENT_PARTNERS,\n action: Actions.ContentPartners.EDIT_CONTENT_PARTNER,\n args: [company.id]\n };\n}\n\nexport const WidgetContentTableConfig: Record<SearchableWidgetTableObjectTypes, ContentTableConfigsType> = {\n [SearchableWidgetTableObjectTypes.Video]: {\n columns: MemberMatrixHelper.getColumnSet(DefinedColumnSet.WidgetVideos),\n getEditAppLink:\n (videoType: VideoTypes, context?: CuratorProductContext) => getEditVideoTypesAppLink(videoType, context),\n appLinks: {\n [MatrixObjectType.Video]: (video: Video) => getEditVideoTypesAppLink(video),\n [`${MatrixObjectType.Video}:${MatrixObjectType.Audience}`]: (video: Video) => ({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.EDIT_VIDEO_AUDIENCES,\n args: [video.id]\n })\n }\n },\n\n [SearchableWidgetTableObjectTypes.Classification]: {\n columns: MemberMatrixHelper.getColumnSet(DefinedColumnSet.WidgetClassifications),\n getEditAppLink: (classification: Classification) => getEditTopicAppLink(classification),\n appLinks: {\n [MatrixObjectType.Classification]: (classification: Classification) => {\n return {\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.EDIT_CLASSIFICATION,\n args: [ classification.presentationId, classification.id ]\n };\n }\n }\n },\n\n [SearchableWidgetTableObjectTypes.Playlist]: {\n columns: MemberMatrixHelper.getColumnSet(DefinedColumnSet.WidgetPlaylists),\n getEditAppLink: (playlist: Playlist) => getEditPlaylistAppLink(playlist),\n appLinks: {\n [MatrixObjectType.Playlist]: (playlist: Playlist) => getEditPlaylistAppLink(playlist),\n [`${MatrixObjectType.Playlist}:${MatrixObjectType.Audience}`]: (playlist: Playlist) => ({\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.EDIT_PLAYLIST_AUDIENCES,\n args: [playlist.id]\n })\n }\n },\n\n [SearchableWidgetTableObjectTypes.Series]: {\n columns: MemberMatrixHelper.getColumnSet(DefinedColumnSet.WidgetSeries),\n getEditAppLink: (series: Series) => getEditSeriesAppLink(series),\n appLinks: {\n [MatrixObjectType.Series]: (series: Series) => getEditSeriesAppLink(series),\n [`${MatrixObjectType.Series}:${MatrixObjectType.Audience}`]: (series: Series) => ({\n application: AppChannels.SERIES,\n action: Actions.Series.EDIT_SERIES_AUDIENCES,\n args: [series.id]\n })\n }\n },\n\n [SearchableWidgetTableObjectTypes.Company]: {\n columns: MemberMatrixHelper.getColumnSet(DefinedColumnSet.WidgetCompanies),\n getEditAppLink: (company: Company) => getCompanyEditAppLink(company),\n appLinks: {\n [MatrixObjectType.Company]: (company: Company) => getCompanyEditAppLink(company)\n }\n },\n\n [SearchableWidgetTableObjectTypes.ContentPartner]: {\n columns: MemberMatrixHelper.getColumnSet(DefinedColumnSet.WidgetContentPartners),\n getEditAppLink: (company: Company) => getContentPartnerEditAppLink(company),\n appLinks: {\n [MatrixObjectType.ContentPartner]: (company: Company) => getContentPartnerEditAppLink(company)\n }\n }\n};\n","import React from 'react';\nimport { DragEndEvent } from '@dnd-kit/core';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Table } from 'libs/shared/components/table/Table';\nimport { BaseObject, PresentationAudience, SearchableWidgetTableObjectTypes } from 'libs/shared/interfaces';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { BuildColumns } from 'shared/components/member-matrix/columns/Columns';\nimport styles from 'shared/components/member-matrix/member-matrix.module.scss';\nimport { ColumnData, MatrixMember } from 'shared/components/member-matrix/MemberMatrix';\nimport { CuratorTableTheme } from 'shared/constants';\nimport { CuratorProductContext } from 'shared/interfaces/models/CuratorProductContext';\n\nimport { DashboardWizardRemoveWidgetContent } from 'apps/dashboard-editor/components/wizard/remove-widget-content/DashboardWizardRemoveWidgetContent';\nimport { WidgetContentTableConfig } from 'apps/dashboard-editor/constants/WidgetContentTableConfig';\n\ninterface DashboardWizardContentTableProps {\n content: BaseObject[];\n audiences: PresentationAudience[];\n canModifyContents?: boolean;\n context?: CuratorProductContext;\n onReorderWidgets?: (content: BaseObject[]) => void;\n onRemoveItem?: (objectId: string) => void;\n}\n\nexport function DashboardWizardContentTable(props: DashboardWizardContentTableProps): JSX.Element {\n const [ removeObject, setRemoveObject ] = React.useState<BaseObject>();\n\n const canReorder = props.canModifyContents && !!props.onReorderWidgets;\n\n function getTableObjectType(): SearchableWidgetTableObjectTypes {\n const firstItem = ArrayHelper.first<BaseObject>(props.content);\n\n if (!firstItem)\n return;\n\n if (MasterTypeHelper.isResource(firstItem) || VideoHelper.isVideoType(firstItem))\n return SearchableWidgetTableObjectTypes.Video;\n\n return firstItem.type?.toLowerCase() as SearchableWidgetTableObjectTypes;\n }\n \n const objectType = getTableObjectType();\n const tableConfig = WidgetContentTableConfig[objectType];\n\n function getColumnData(): ColumnData {\n const columnData: ColumnData = {};\n\n columnData.actions = (obj: BaseObject) => {\n const actions: ActionOptions[] = [{\n label: 'Edit details',\n openInNewTab: true,\n appLink: tableConfig?.getEditAppLink(obj, props.context)\n }];\n\n if (props.canModifyContents && props.onRemoveItem) {\n actions.push({\n label: 'Remove',\n className: 'text-danger',\n onClick: () => openDeletePopup(obj)\n });\n }\n\n return actions;\n };\n\n columnData.appLinks = tableConfig?.appLinks,\n columnData.extraData = {\n allAudiences: props.audiences\n };\n\n return columnData;\n }\n\n const fullColumns = React.useMemo(() => {\n if (!tableConfig)\n return [];\n\n return BuildColumns({ columns: tableConfig.columns, columnData: getColumnData() });\n }, [ props.content, tableConfig ]);\n\n function openDeletePopup(object: BaseObject) {\n setRemoveObject(object);\n }\n\n function closeDeletePopup() {\n setRemoveObject(null);\n }\n\n function onSortingRowsEnd(event: DragEndEvent) {\n const oldIndex = ArrayHelper.findMatchedIdIndex(props.content, event.active.id);\n const newIndex = ArrayHelper.findMatchedIdIndex(props.content, event.over.id);\n\n if (oldIndex === newIndex) {\n return;\n }\n \n if (!props.content[oldIndex] || !props.content[newIndex]) {\n return;\n }\n\n const reorderedList = ArrayHelper.moveItem(props.content, oldIndex, newIndex).map((item, index) => ({\n ...item,\n index\n }));\n\n props.onReorderWidgets?.(reorderedList);\n }\n\n if (!fullColumns?.length)\n return <></>;\n\n const sortableTableTheme = {\n ...CuratorTableTheme,\n row: `${CuratorTableTheme.row} ${styles.row}`\n };\n \n return (\n <>\n {!!removeObject && (\n <DashboardWizardRemoveWidgetContent\n closePopup={closeDeletePopup}\n objectId={removeObject.id}\n objectName={removeObject.name}\n objectType={removeObject.type}\n onRemoveItem={props.onRemoveItem}\n />\n )}\n <Table<MatrixMember>\n data={props.content}\n columns={fullColumns}\n theme={canReorder ? sortableTableTheme : CuratorTableTheme}\n enableSortableRows={canReorder}\n onSortingRowsEnd={onSortingRowsEnd}\n />\n </>\n );\n}\n","import React from 'react';\nimport { Form } from 'react-bootstrap';\n\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { CuratedWidget } from 'libs/shared/interfaces';\n\ninterface WidgetErrorMessageProps {\n errorMessage?: string | string[];\n}\n\nexport function WidgetErrorMessage(props: WidgetErrorMessageProps): JSX.Element {\n const formikProps = useFormikContextWrapper<CuratedWidget>();\n\n const message = Array.isArray(props.errorMessage) ? props.errorMessage[0] : props.errorMessage;\n\n if (!message || !formikProps.touched.data)\n return <></>;\n\n return (\n <Form.Control.Feedback className='d-block mt-n3' type='invalid'>{message}</Form.Control.Feedback>\n );\n}\n","import { Flight } from 'libs/common/react/index';\n\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { DashboardTargetInfo, DashboardTargetType } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { SubjectMemberType } from 'shared/enums';\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\n\nimport { CuratorWidgetTypeIdConfig } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\n\nexport type InitialRequestVideoType = 'video' | 'clip' | 'interactive';\n\nexport const DashboardWizardHelper = {\n getAddActionName(widgetId: WidgetTypeId, templateId: WidgetTemplate): string {\n const widgetTypeConfig = CuratorWidgetTypeIdConfig[widgetId];\n\n if (widgetId === WidgetTypeId.PlaylistMedia) {\n return 'Select a playlist';\n }\n\n if (widgetId === WidgetTypeId.SeriesMedia) {\n return 'Select a series';\n }\n\n if (widgetId === WidgetTypeId.CuratedMedia && templateId === WidgetTemplate.ThumbnailFeaturedMedia) {\n return 'Select a content';\n }\n\n if (widgetId === WidgetTypeId.CuratedMedia && templateId !== WidgetTemplate.ThumbnailFeaturedMedia) {\n return 'Add contents';\n }\n\n return `Add ${widgetTypeConfig.groupName.toLowerCase()}`;\n },\n\n getInitialResultsRequests(\n targetType: DashboardTargetType,\n objectType: MasterType,\n presentationId: string,\n classificationId?: string,\n initialRequestVideoType?: InitialRequestVideoType\n ): Flight.Request[] {\n if (targetType === DashboardTargetType.Discover)\n return null;\n\n if (CuratedDashboardHelper.isClassificationDashboard({ targetType } as DashboardTargetInfo)) {\n if (objectType === MasterType.Subject)\n return [SubjectRequests.classificationChildren(classificationId)];\n\n let memberType: SubjectMemberType;\n\n switch (objectType) {\n case MasterType.Playlist: {\n memberType = SubjectMemberType.Playlists;\n break;\n }\n\n case MasterType.Video: {\n function getMemberType(index: InitialRequestVideoType): SubjectMemberType {\n switch (index) {\n case 'video':\n return SubjectMemberType.Videos;\n case 'clip':\n return SubjectMemberType.Clips;\n case 'interactive':\n return SubjectMemberType.Interactives;\n default:\n break;\n }\n }\n\n const videoTypes = initialRequestVideoType ?\n [getMemberType(initialRequestVideoType)] :\n [ SubjectMemberType.Videos, SubjectMemberType.Clips, SubjectMemberType.Interactives ];\n\n return videoTypes\n .map(memberType => SubjectRequests.classificationMembers(\n classificationId,\n memberType,\n presentationId\n ));\n }\n\n case MasterType.Series: {\n memberType = SubjectMemberType.Series;\n break;\n }\n }\n\n return [SubjectRequests.classificationMembers(\n classificationId,\n memberType,\n presentationId\n )];\n }\n }\n};\n","import React from 'react';\nimport { Col } from 'react-bootstrap';\n\nimport { ComingSoonTag } from 'libs/shared/apps/calendar/components/coming-soon-tag/ComingSoonTag';\nimport { SearchResultsObject } from 'libs/shared/apps/search/interfaces';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { ImageSize, ResizeType } from 'libs/shared/enums/Images';\nimport { Classification } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from '../mixed-widget-content-search-result-item.module.scss';\n\ninterface WidgetClassificationSearchResultItemProps {\n classification: SearchResultsObject<Classification>;\n}\n\nexport function WidgetClassificationSearchResultItem(props: WidgetClassificationSearchResultItemProps): JSX.Element {\n const imageUrl = ImageHelper.createUrl(props.classification.cover?.url, {\n size: ImageSize.Small,\n resizeType: ResizeType.Cover\n });\n\n const colourClass = getBgColorClass(props.classification.name, BG_COLOUR_CLASS_NAMES);\n\n return (\n <div className='row g-0 py-2 align-items-center d-flex flex-grow-1'>\n <Col xs={2}>\n <div className={`${styles.coverImage} ${colourClass} d-inline-block rounded flex-shrink-0`}>\n <BaseImage data={imageUrl} />\n </div>\n </Col>\n <Col xs={9}>\n {props.classification.status === ClassificationStatus.Draft && (\n <div className='d-inline-block'>\n <Badge data={CurationStatus.Draft} type={BadgeType.Status} />\n </div>\n )}\n {props.classification.status === ClassificationStatus.ComingSoon && (\n <ComingSoonTag className='pe-2 fw-semibold mb-1 rounded-pill justify-content-start text-nowrap' />\n )}\n <h2 className='h6 text-truncate'>{props.classification.name}</h2>\n </Col>\n </div>\n );\n}\n","import React from 'react';\nimport { Col } from 'react-bootstrap';\n\nimport { SearchResultsObject } from 'libs/shared/apps/search/interfaces';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ImageSize, ResizeType } from 'libs/shared/enums/Images';\nimport { Company } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from '../mixed-widget-content-search-result-item.module.scss';\n\ninterface WidgetCompanySearchResultItemProps {\n company: SearchResultsObject<Company>;\n}\n\nexport function WidgetCompanySearchResultItem(props: WidgetCompanySearchResultItemProps): JSX.Element {\n const imageUrl = ImageHelper.createUrl(props.company.logo?.url, {\n size: ImageSize.Small,\n resizeType: ResizeType.Cover\n });\n\n const colourClass = getBgColorClass(props.company.name, BG_COLOUR_CLASS_NAMES);\n\n return (\n <div className='row g-0 py-2 align-items-center d-flex flex-grow-1'>\n <Col xs={2}>\n <div className={`${styles.coverImage} ${colourClass} d-inline-block rounded-circle flex-shrink-0`}>\n <BaseImage data={imageUrl} imageClassName='rounded-circle'/>\n </div>\n </Col>\n <Col xs={9} className='text-truncate'>\n <h2 className='h6'>{props.company.name}</h2>\n </Col>\n </div>\n );\n}\n",":local {\n .videoRow {\n width: 25rem;\n }\n}","import React from 'react';\nimport { Col } from 'react-bootstrap';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { SearchResultsObject } from 'libs/shared/apps/search/interfaces';\nimport { RectangularLogo } from 'libs/shared/components/rectangular-logo/RectangularLogo';\nimport { PartnerProfile } from 'libs/shared/interfaces';\n\nimport styles from './widget-video-search-result-item.module.scss';\n\ninterface WidgetContentPartnerSearchResultItemProps {\n contentPartner: SearchResultsObject<PartnerProfile>;\n}\n\nexport function WidgetContentPartnerSearchResultItem(props: WidgetContentPartnerSearchResultItemProps): JSX.Element {\n return (\n <div className={classNames('row g-0 py-2', styles.videoRow)}>\n <Col xs={4}>\n\n <RectangularLogo\n logoUrl={props.contentPartner._logo?.value?.url}\n bgColor={props.contentPartner._colour?.value}\n name={props.contentPartner.name}\n />\n </Col>\n <Col xs={8} className='px-2'>\n <h2 className='h6 m-0 mb-1 pb-1 text-truncate'>{props.contentPartner.name}</h2>\n </Col>\n </div>\n );\n}\n","import React from 'react';\nimport { Col } from 'react-bootstrap';\n\nimport { SearchResultsObject } from 'libs/shared/apps/search/interfaces';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ImageSize, ResizeType } from 'libs/shared/enums/Images';\nimport { Playlist } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from '../mixed-widget-content-search-result-item.module.scss';\n\ninterface WidgetPlaylistSearchResultItemProps {\n playlist: SearchResultsObject<Playlist>;\n}\n\nexport function WidgetPlaylistSearchResultItem(props: WidgetPlaylistSearchResultItemProps): JSX.Element {\n const imageUrl = ImageHelper.createUrl(props.playlist.cover?.url, {\n size: ImageSize.Small,\n resizeType: ResizeType.Cover\n });\n\n const colourClass = getBgColorClass(props.playlist.name, BG_COLOUR_CLASS_NAMES);\n\n return (\n <div className='row g-0 py-2 align-items-center d-flex flex-grow-1'>\n <Col xs={2}>\n <div className={`${styles.coverImage} ${colourClass} d-inline-block rounded flex-shrink-0`}>\n <BaseImage data={imageUrl} />\n </div>\n </Col>\n\n <Col xs={10} className='text-truncate'>\n <h2 className='h6'>{props.playlist.name}</h2>\n </Col>\n </div>\n );\n}\n",":local {\n .resourceRow {\n width: 25rem;\n }\n\n .tileContainer {\n height: 5rem;\n padding: 0.3125rem 0.625rem;\n padding-bottom: 0;\n\n .thumbnailContainer {\n height: 85%;\n }\n }\n}","import React from 'react';\nimport { Col } from 'react-bootstrap';\n\nimport { ResourceTile } from 'libs/shared/components/widgets/items/resource-widget-item/ResourceWidgetItem';\nimport { Resource } from 'libs/shared/interfaces';\n\nimport styles from './widget-resource-search-result-item.module.scss';\n\ninterface WidgetResourceSearchResultItemProps {\n resource: Resource;\n imageCdnUrl: string;\n}\n\nexport function WidgetResourceSearchResultItem(props: WidgetResourceSearchResultItemProps): JSX.Element {\n return (\n <div className={`row g-0 py-2 ${styles.resourceRow}`}>\n <Col xs={4}>\n <div className='w-100 h-100'>\n <ResourceTile\n data={props.resource}\n imageCdnUrl={props.imageCdnUrl}\n imageErrorFallbackUrl=''\n theme={{\n containerClass: styles.tileContainer,\n thumbnailContainerClass: styles.thumbnailContainer\n }}\n titlePosition='none'\n />\n </div>\n </Col>\n <Col xs={8} className='px-2'>\n <h2 className='h6 m-0 pb-1 clamp-2' title={`${props.resource.name}`}>\n {props.resource.name}\n </h2>\n <p className='text-grey clamp-2 mb-0'><em>Video: {props.resource.parentName}</em></p>\n </Col>\n </div>\n );\n}\n","import React from 'react';\n\nimport { SearchResultObjectTypes, SearchResultsObject } from 'libs/shared/apps/search/interfaces';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { BaseObject, Classification, Company, PartnerProfile, Playlist, Resource, Series, VideoTypes } from 'libs/shared/interfaces';\n\nimport { WidgetClassificationSearchResultItem } from 'apps/dashboard-editor/components/wizard/search-widget-content/mixed-search-result/classification/WidgetClassificationSearchResultItem';\nimport { WidgetCompanySearchResultItem } from 'apps/dashboard-editor/components/wizard/search-widget-content/mixed-search-result/company/WidgetCompanySearchResultItem';\nimport { WidgetContentPartnerSearchResultItem } from 'apps/dashboard-editor/components/wizard/search-widget-content/mixed-search-result/content-partner/WidgetContentPartnerSearchResultItem';\nimport { WidgetPlaylistSearchResultItem } from 'apps/dashboard-editor/components/wizard/search-widget-content/mixed-search-result/playlist/WidgetPlaylistSearchResultItem';\nimport { WidgetSeriesSearchResultItem } from 'apps/dashboard-editor/components/wizard/search-widget-content/mixed-search-result/series/WidgetSeriesSearchResultItem';\nimport { WidgetVideoSearchResultItem } from 'apps/dashboard-editor/components/wizard/search-widget-content/mixed-search-result/video/WidgetVideoSearchResultItem';\nimport { CuratorWidgetTypeIdConfig } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\n\nimport { WidgetResourceSearchResultItem } from './resource/WidgetResourceSearchResultItem';\n\ninterface MixedSearchResultProps {\n result: SearchResultObjectTypes | BaseObject;\n widgetTypeId: WidgetTypeId;\n regionLabel?: string;\n}\n\nexport function MixedWidgetContentSearchResultItem(props: MixedSearchResultProps): JSX.Element {\n const { searchIndices } = CuratorWidgetTypeIdConfig[props.widgetTypeId];\n\n if (searchIndices.includes('video') || searchIndices.includes('clip') || searchIndices.includes('interactive')) {\n if (props.widgetTypeId === WidgetTypeId.CuratedMultimedia) {\n if (!('typeId' in props.result))\n return <></>;\n\n if (props.result.typeId === MasterType.Resource) {\n return (\n <WidgetResourceSearchResultItem\n resource={props.result as Resource}\n imageCdnUrl={ClickView.Config.Urls.ImageAPI}\n />\n );\n }\n }\n\n return (\n <WidgetVideoSearchResultItem\n video={props.result as SearchResultsObject<VideoTypes>}\n regionLabel={props.regionLabel}\n />\n );\n }\n\n if (searchIndices.includes('classification')) {\n return (\n <WidgetClassificationSearchResultItem classification={props.result as SearchResultsObject<Classification>} />\n );\n }\n\n if (searchIndices.includes('playlist'))\n return <WidgetPlaylistSearchResultItem playlist={props.result as SearchResultsObject<Playlist>} />;\n\n if (searchIndices.includes('series'))\n return <WidgetSeriesSearchResultItem series={props.result as SearchResultsObject<Series>} />;\n\n if (searchIndices.includes('company'))\n return <WidgetCompanySearchResultItem company={props.result as SearchResultsObject<Company>} />;\n\n if (searchIndices.includes('partner_profile'))\n return (\n <WidgetContentPartnerSearchResultItem contentPartner={props.result as SearchResultsObject<PartnerProfile>} />\n );\n\n return <></>;\n}\n",":local {\n .wrapper {\n &:hover {\n background-color: $light-blue;\n }\n }\n .itemRow {\n flex: 1;\n }\n}","import React from 'react';\n\nimport { SearchResultObjectTypes } from 'libs/shared/apps/search/interfaces';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nimport { MixedWidgetContentSearchResultItem } from '../mixed-search-result/MixedWidgetContentSearchResultItem';\n\nimport styles from './widget-content-search-result-item.module.scss';\n\ninterface WidgetContentSearchResultItemProps {\n widgetTypeId: WidgetTypeId;\n result: SearchResultObjectTypes | BaseObject;\n isSelected: boolean;\n onToggleSelect: (result: SearchResultObjectTypes | BaseObject) => void;\n disableSelectingMore: boolean;\n disabledMessage?: string;\n}\n\nexport function WidgetContentSearchResultItem(\n props: WidgetContentSearchResultItemProps\n): JSX.Element {\n function onSelect(e: React.MouseEvent<HTMLDivElement, MouseEvent>): void {\n props.onToggleSelect(props.result);\n e.preventDefault();\n }\n\n const disabled = !!props.disabledMessage || (!props.isSelected && props.disableSelectingMore);\n\n return (\n <DivButton\n className={`py-2 pe-3 ps-2 ${styles.wrapper}`}\n onClick={!disabled ? onSelect : () => {}}\n >\n <div className={`d-flex align-items-center ${styles.itemRow} flex-nowrap`}>\n <Tooltip\n title={props.disabledMessage}\n spanHack\n spanHackClassName=''\n >\n <Checkbox\n className='me-1 ms-2'\n checked={props.isSelected}\n onChange={() => {}}\n id={props.result.id}\n disabled={disabled}\n />\n </Tooltip>\n <MixedWidgetContentSearchResultItem\n result={props.result}\n widgetTypeId={props.widgetTypeId}\n />\n </div>\n </DivButton>\n );\n}\n","import React from 'react';\n\nimport { AppLink } from 'libs/common/backbone/core';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { SearchResultWithValidation } from 'libs/shared/apps/search/interfaces';\nimport { AppLink as AppLinkComponent } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nimport { AppChannels } from 'shared/constants';\n\nimport { AssemblyLineStatus, StatusBadge } from 'apps/assembly-line/components/status-badge/StatusBadge';\nimport { AssemblyLineStage } from 'apps/assembly-line/interfaces/AssemblyLineStage';\nimport { AssemblyLineHelper } from 'apps/assembly-line/utils/AssemblyLineHelper';\n\nimport { MixedWidgetContentSearchResultItem } from '../mixed-search-result/MixedWidgetContentSearchResultItem';\n\nimport styles from './widget-content-search-result-item.module.scss';\n\nconst PASS_VALIDATION_STAGE = 'published_video';\n\ninterface VideoValidationSearchResultItemProps {\n widgetTypeId: WidgetTypeId;\n result: SearchResultWithValidation;\n isSelected: boolean;\n onToggleSelect: (result: SearchResultWithValidation) => void;\n disableSelectingMore: boolean;\n disabledMessage?: string;\n}\n\nexport function SearchResultWithValidationItem(\n props: VideoValidationSearchResultItemProps\n): JSX.Element {\n function onSelect(e: React.MouseEvent<HTMLDivElement, MouseEvent>): void {\n props.onToggleSelect(props.result);\n e.preventDefault();\n }\n\n const hasPassValidation = props.result.stage === PASS_VALIDATION_STAGE;\n const disabled = !!props.disabledMessage || (!props.isSelected && props.disableSelectingMore);\n const contentPipelineAppLink: AppLink = {\n application: AppChannels.ASSEMBLY_LINE,\n action: AssemblyLineHelper.mapStageToAction(props.result.stage as AssemblyLineStage),\n params: {\n query: props.result.id.toString(),\n limit: 25\n }\n };\n const regions = props.result.contentRegions?.map(c => AssemblyLineHelper.mapVideoContentRegionToLabel(c.systemName)).join(' / ');\n\n return (\n <DivButton\n className={classNames(`py-2 pe-3 ps-2`, styles.wrapper)}\n disabled={disabled}\n onClick={onSelect}\n >\n <div className={`d-flex align-items-center ${styles.itemRow} flex-nowrap`}>\n <Tooltip\n title={props.disabledMessage}\n spanHack\n spanHackClassName=''\n >\n <Checkbox\n className='me-1 ms-2'\n checked={props.isSelected}\n onChange={() => {}}\n id={props.result.id}\n disabled={disabled}\n />\n </Tooltip>\n <MixedWidgetContentSearchResultItem\n result={props.result as BaseObject}\n widgetTypeId={props.widgetTypeId}\n regionLabel={regions}\n />\n <div>\n <StatusBadge\n status={hasPassValidation ? AssemblyLineStatus.Complete : AssemblyLineStatus.Incomplete}\n />\n </div>\n <AppLinkComponent\n openInNewTab\n appLink={contentPipelineAppLink}\n className='btn btn-link btn-sm ms-auto text-nowrap'\n >\n View in content pipeline\n </AppLinkComponent>\n </div>\n </DivButton>\n );\n}\n","import React from 'react';\n\nimport { SearchResultWithValidation } from 'libs/shared/apps/search/interfaces';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { BaseObject, CuratedWidget, SearchableWidgetData } from 'libs/shared/interfaces';\n\nimport { SearchResultWithValidationItem } from 'apps/dashboard-editor/components/wizard/search-widget-content/search-result-item/WidgetContentSearchResultItemWithLink';\n\ninterface SearchResultsWithValidationProps {\n results: SearchResultWithValidation[];\n onSelectItem: (result: BaseObject) => void;\n selectedIds: string[];\n disableSelectingMore: boolean;\n getDisabledMessage?: (result: BaseObject) => string;\n}\n\nexport function SearchResultsWithValidationContainer(props: SearchResultsWithValidationProps): JSX.Element {\n const formikProps = useFormikContextWrapper<CuratedWidget<SearchableWidgetData>>();\n\n return (\n <>\n {props.results.map(result => (\n <SearchResultWithValidationItem\n key={result.id}\n widgetTypeId={formikProps.values.widgetId}\n result={result}\n onToggleSelect={props.onSelectItem}\n isSelected={props.selectedIds?.includes(result.id) ?? false}\n disableSelectingMore={props.disableSelectingMore}\n disabledMessage={props.getDisabledMessage?.(result)}\n />\n ))}\n </>\n );\n}\n",":local {\n .selectedFilter {\n // This blue isn't currently in the Curator theme. It will be when we update Curator to use lite's theme.\n background-color: #38A2E8;\n }\n\n .filter {\n line-height: 1rem;\n }\n}","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Flight } from 'libs/common/flight';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { SearchIndices, SearchResultObjectTypes, SearchResults, SearchResultWithValidation } from 'libs/shared/apps/search/interfaces';\nimport { WarningAlert } from 'libs/shared/apps/user-manager/components/warning-alert/WarningAlert';\nimport { useFormikContextWrapper } 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 { SimpleSearchBar } from 'libs/shared/components/simple-search-bar/SimpleSearchBar';\nimport { TagItem } from 'libs/shared/components/tags/TagItem';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { CurationStatus, CurationStatusString } from 'libs/shared/enums/CurationStatus';\nimport { CurationTag } from 'libs/shared/enums/CurationTag';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { BaseObject, BasePaginatedCollection, CuratedDashboard, CuratedWidget, DashboardTargetType, PopupViewProps, SearchableWidgetData, Tag } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { SearchRequests } from 'shared/flight-requests/SearchRequests';\n\nimport { DashboardWizardInitSearchEmptyState } from 'apps/dashboard-editor/components/wizard/search-widget-content/empty-state/DashboardWizardInitSearchEmptyState';\nimport { DashboardWizardSearchResultEmptyState } from 'apps/dashboard-editor/components/wizard/search-widget-content/empty-state/DashboardWizardSearchResultEmptyState';\nimport { WidgetContentSearchResultItem } from 'apps/dashboard-editor/components/wizard/search-widget-content/search-result-item/WidgetContentSearchResultItem';\nimport { SearchResultsWithValidationContainer } from 'apps/dashboard-editor/components/wizard/search-widget-content/search-results-with-validation/SearchResultsWithValidation';\nimport { CuratorWidgetTypeIdConfig } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { DashboardWizardHelper, InitialRequestVideoType } from 'apps/dashboard-editor/utils/DashboardWizardHelper';\n\nimport styles from './dashboard-wizard-search-widget-content.module.scss';\n\nexport interface DashboardWizardSearchFilters {\n presentation?: string;\n status?: CurationStatus | CurationStatusString | string;\n classification?: string;\n curationTag?: CurationTag;\n partnerProfile?: string;\n}\n\nfunction formatAllInitialResults(allResults: (BasePaginatedCollection | BaseObject[] | BaseObject)[]): BaseObject[] {\n function formatInitialResults(results: BasePaginatedCollection | BaseObject[] | BaseObject): BaseObject[] {\n if (!results)\n return [];\n\n if (!Array.isArray(results)) {\n if ('data' in results)\n return results.data;\n\n return [results];\n }\n\n return results;\n }\n\n return allResults.reduce<BaseObject[]>((mergedResults, queryResults) => {\n return [ ...mergedResults, ...formatInitialResults(queryResults) ];\n }, []);\n}\n\nexport interface CustomOnSearchOptions {\n showAllVideos?: boolean;\n}\n\nexport type CustomOnSearch = (\n query: string,\n searchIndicesFilter: SearchIndices,\n options?: CustomOnSearchOptions\n) => Promise<SearchResultObjectTypes[] |\nBasePaginatedCollection<SearchResultWithValidation> |\nBasePaginatedCollection<SearchResultObjectTypes>>;\n\ntype MixedSearchResults = SearchResults<SearchResultObjectTypes> |\n BasePaginatedCollection<SearchResultWithValidation> |\n BasePaginatedCollection<SearchResultObjectTypes>;\n\ninterface DashboardWizardSearchWidgetContentViewProps extends PopupViewProps {\n dashboard: CuratedDashboard;\n onSelectItem: (obj: SearchResultObjectTypes) => void;\n selectedIds: string[];\n\n classificationId?: string;\n presentationId?: string;\n presentationType?: PresentationType;\n\n hasVideoTypeFilter?: boolean;\n hasShowAllVideosToggle?: boolean;\n initialResultsRequests?: Flight.Request[];\n prefetchedInitialResults?: BasePaginatedCollection | BaseObject[] | BaseObject;\n initialRequestVideoType?: InitialRequestVideoType;\n setInitialRequestVideoType?: (videoType: InitialRequestVideoType) => void;\n getCustomSearchFilters?: () => DashboardWizardSearchFilters;\n\n disableSelectingMore?: boolean;\n getDisabledMessage?: (obj: HashObject) => string;\n\n customOnSearch?: CustomOnSearch;\n}\n\nexport function DashboardWizardSearchWidgetContentView(\n props: DashboardWizardSearchWidgetContentViewProps\n): JSX.Element {\n const formikProps = useFormikContextWrapper<CuratedWidget<SearchableWidgetData>>();\n const initialResults = Flight.useBasicFetchAll<BasePaginatedCollection | BaseObject[] | BaseObject>(\n props.initialResultsRequests\n );\n const fetch = Flight.useGetFetch();\n\n const [ currentResults, setCurrentResults ] = React.useState<\n SearchResultObjectTypes[] | SearchResultWithValidation[]>(\n []\n );\n\n const [ searchQuery, setSearchQuery ] = React.useState('');\n const [ isFetching, setIsFetching ] = React.useState(false);\n const [ searchIndicesFilter, setSearchIndicesFilter ] = React.useState<SearchIndices>(null);\n const [ searchWholePresentation, setSearchWholePresentation ] = React.useState(!props.classificationId);\n const [ showAllVideos, setShowAllVideos ] = useViewModel(\n `show:all:videos:${formikProps.values.dashboardId}`,\n false,\n { storage: StorageType.MemoryStorage }\n );\n\n const widgetTypeConfig = CuratorWidgetTypeIdConfig[formikProps.values.widgetId];\n const isMoviesAndTvDashboard = CuratedDashboardHelper.isType(props.dashboard, DashboardTargetType.MoviesAndTv);\n const isCompanyDashboard = CuratedDashboardHelper.isType(props.dashboard, DashboardTargetType.Company);\n const isContentPartnerDashboard = CuratedDashboardHelper.isType(props.dashboard, DashboardTargetType.PartnerProfile);\n const isSearchSeries = formikProps.values.widgetId === WidgetTypeId.CuratedSeries\n || formikProps.values.widgetId === WidgetTypeId.SeriesMedia;\n const isMultiMediaWidget = WidgetTypeId.CuratedMultimedia === formikProps.values.widgetId;\n const isCuratedContentPartnersWidget = WidgetTypeId.CuratedContentPartners === formikProps.values.widgetId;\n const shouldShowValidationResults = isContentPartnerDashboard\n && !isSearchSeries\n && !isMultiMediaWidget\n && !isCuratedContentPartnersWidget;\n\n function getSearchIndices(searchIndicesFilter: SearchIndices): SearchIndices[] {\n if (searchIndicesFilter) {\n return [searchIndicesFilter];\n }\n\n return widgetTypeConfig.searchIndices;\n }\n\n function getSearchFilters(indices: SearchIndices[]): DashboardWizardSearchFilters {\n if (props.getCustomSearchFilters)\n return props.getCustomSearchFilters();\n\n const filters: DashboardWizardSearchFilters = {\n presentation: props.presentationId,\n classification: props.classificationId\n };\n\n if (searchWholePresentation)\n delete filters.classification;\n\n /**\n * For clips, interactives, videos, and classifications, we need to filter by `status === Published`.\n * For series and playlists, we don't need to filter by this.\n * \n * When searching for classifications, the string version of the CurationStatus enum must be used.\n * For clips, interactives, and videos, the numeric version must be used :(\n */\n if (indices.includes('classification'))\n filters.status = `${CurationStatusString.Published},${CurationStatusString.Draft},${ClassificationStatus.ComingSoon}`;\n\n if (indices.includes('video') || indices.includes('interactive') || indices.includes('clip'))\n filters.status = `${CurationStatus.Published},${CurationStatus.Draft}`;\n\n if (isMoviesAndTvDashboard || isCompanyDashboard)\n filters.curationTag = CurationTag.MOVIES_AND_TV;\n\n if (indices.includes('company')) {\n filters.curationTag = props.presentationType === PresentationType.StreamableLearning ?\n CurationTag.STREAMABLE_CURATED :\n CurationTag.CLICKVIEW_CURATED;\n }\n\n return filters;\n }\n\n function getExtraParams(indices: SearchIndices[]): HashObject {\n if (indices.includes('series'))\n return { filterEmptySeries: false };\n\n return {};\n }\n\n async function onSearch(query: string, searchIndicesFilter: SearchIndices, showAllVideos: boolean) {\n if (props.customOnSearch) {\n let options: CustomOnSearchOptions;\n if (props.hasShowAllVideosToggle) {\n options = { showAllVideos };\n }\n const results = await props.customOnSearch(query, searchIndicesFilter, options);\n\n onSuccess(results as MixedSearchResults);\n \n setIsFetching(false);\n return;\n }\n\n const indices = getSearchIndices(searchIndicesFilter);\n\n const filters: DashboardWizardSearchFilters = getSearchFilters(indices);\n\n fetch(SearchRequests.searchContent({\n query,\n indices,\n success: res => onSuccess(res),\n error: () => setIsFetching(false),\n filters,\n extraParams: getExtraParams(indices)\n }));\n }\n\n function onSuccess(res: MixedSearchResults): void {\n if ('data' in res) {\n setCurrentResults(res.data);\n } else {\n setCurrentResults(res.results);\n }\n setIsFetching(false);\n }\n\n const delayedSearch = React.useCallback(\n FunctionHelper.debounce(\n (query: string, searchIndicesFilter: SearchIndices, showAllVideos: boolean) =>\n onSearch(query, searchIndicesFilter, showAllVideos),\n 300\n ),\n [searchWholePresentation]\n );\n\n React.useEffect(() => {\n if (searchQuery) {\n setIsFetching(true);\n delayedSearch(searchQuery, searchIndicesFilter, showAllVideos);\n\n return;\n }\n\n setIsFetching(false);\n }, [\n searchQuery,\n searchIndicesFilter,\n searchWholePresentation,\n showAllVideos,\n props.hasShowAllVideosToggle\n ]);\n\n function renderResults(): JSX.Element | JSX.Element[] {\n const isSearching = !!searchQuery;\n\n if (isFetching || (!initialResults.hasCompleted && props.initialResultsRequests))\n return (\n <div className='text-center p-5 mt-5'>\n <Spinner as='div' animation='border' role='status' />\n </div>\n );\n\n if (!currentResults?.length && isSearching)\n return <DashboardWizardSearchResultEmptyState />;\n\n if (!isSearching && !props.initialResultsRequests && !props.prefetchedInitialResults)\n return <DashboardWizardInitSearchEmptyState />;\n\n const realInitialResults = props.prefetchedInitialResults ?\n formatAllInitialResults([props.prefetchedInitialResults]) :\n formatAllInitialResults(initialResults.data);\n\n const shownResults = isSearching ?\n currentResults :\n realInitialResults;\n \n if (props.initialResultsRequests && !shownResults?.length)\n return <DashboardWizardInitSearchEmptyState />;\n\n if (shouldShowValidationResults) {\n return (\n <SearchResultsWithValidationContainer\n results={shownResults as SearchResultWithValidation[]}\n onSelectItem={props.onSelectItem}\n selectedIds={props.selectedIds}\n disableSelectingMore={props.disableSelectingMore}\n />\n );\n }\n\n return shownResults.map(result => (\n <WidgetContentSearchResultItem\n key={result.id}\n widgetTypeId={formikProps.values.widgetId}\n result={result}\n onToggleSelect={props.onSelectItem}\n isSelected={props.selectedIds?.includes(result.id) ?? false}\n disableSelectingMore={props.disableSelectingMore}\n disabledMessage={props.getDisabledMessage?.(result)}\n />\n ));\n }\n\n return (\n <Popup\n title={DashboardWizardHelper.getAddActionName(formikProps.values.widgetId, formikProps.values.templateId)}\n closePopup={props.closePopup}\n size={isContentPartnerDashboard ? 'lg' : 'md'}\n >\n <SimpleSearchBar\n name='widget-content-search'\n placeholder='Search a keyword'\n setQuery={setSearchQuery}\n query={searchQuery}\n searchIndicesFilter={searchQuery ? searchIndicesFilter : props.initialRequestVideoType}\n setSearchIndicesFilter={searchQuery ? setSearchIndicesFilter : props.setInitialRequestVideoType}\n hasVideoTypeFilter={props.hasVideoTypeFilter}\n />\n\n {!!props.classificationId && (\n <div className='pt-2'>\n <TagItem\n tag={{ name: 'Search within topic' } as Tag}\n tagClass={`no-decoration ${styles.filter} ${searchWholePresentation ? 'bg-light' : `${styles.selectedFilter} text-white`}`}\n onClick={() => setSearchWholePresentation(false)}\n />\n <TagItem\n tag={{ name: 'Search within presentation' } as Tag}\n tagClass={`no-decoration ${styles.filter} ${searchWholePresentation ? `${styles.selectedFilter} text-white` : 'bg-light'}`}\n onClick={() => setSearchWholePresentation(true)}\n />\n\n {searchWholePresentation && (\n <div className='pt-2'>\n <WarningAlert>\n {`\n Before adding videos from another classification consider if the video should be added to this classification.\n `}\n </WarningAlert>\n </div>\n )}\n </div>\n )}\n\n <div className='my-2'>\n <Scrollbars\n autoHeight\n autoHeightMin={300}\n autoHeightMax={300}\n >\n {renderResults()}\n </Scrollbars>\n </div>\n\n <PopupButtons>\n {props.hasShowAllVideosToggle && (\n <PopupButtons.Toggle\n on={showAllVideos}\n onClick={() => setShowAllVideos(!showAllVideos)}\n label='Search across all content'\n />\n )}\n <PopupButtons.Submit\n variant='dark'\n text='Done'\n onClick={props.closePopup}\n disabled={false}\n />\n </PopupButtons>\n </Popup>\n );\n}\n","import React from 'react';\n\nimport { SearchResultsObject } from 'libs/shared/apps/search/interfaces';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { Classification, ClassificationsWidgetData, CuratedWidget, DashboardTargetType } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { DashboardHelper } from 'shared/utils/DashboardHelper';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardCta } from 'apps/dashboard-editor/components/wizard/content-cta/DashboardWizardCta';\nimport { DashboardWizardContentGuideline } from 'apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { WidgetErrorMessage } from 'apps/dashboard-editor/components/wizard/widget-error-message/WidgetErrorMessage';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { DashboardWizardHelper } from 'apps/dashboard-editor/utils/DashboardWizardHelper';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\nimport { DashboardWizardSearchWidgetContentView } from 'apps/dashboard-editor/views/wizard/search-widget-content/DashboardWizardSearchWidgetContentView';\n\ntype ClassificationsWidget = CuratedWidget<ClassificationsWidgetData, Classification[]>;\n\nexport function AddContentChildClassificationsView(props: AddWidgetContentFormViewProps): JSX.Element {\n const [ showSearch, setShowSearch ] = React.useState(false);\n\n const [ hasSelected, setHasSelected ] = React.useState(props.isEditing);\n\n const formikProps = useFormikContextWrapper<ClassificationsWidget>();\n \n function setFormAsTouched(): void {\n formikProps.setTouched({\n ...formikProps.touched,\n data: {\n classificationId: true\n }\n });\n }\n\n function onSelectItem(obj: SearchResultsObject<Classification>): void {\n formikProps.setFieldValue('data', { ...formikProps.values.data, presentationId: obj.presentationId, classificationId: obj.id });\n formikProps.setFieldValue('name', obj.name);\n\n setHasSelected(true);\n\n setFormAsTouched();\n }\n\n // we hide the initial widget preview content until user have selected a classification or it's editing\n const shownContent = !hasSelected ? [] : props.content;\n\n return (\n <>\n <FormField<ClassificationsWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar\n showCharacterCounter\n />\n\n <ToggleShowInTableOfContents<ClassificationsWidget>\n dashboard={props.dashboard}\n />\n\n <FormField<ClassificationsWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={shownContent}\n imageCdnUrl={props.imageCdnUrl}\n metadata={formikProps.values.metadata}\n presentation={props.presentation}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n\n <div className='pt-3'>\n <WidgetErrorMessage errorMessage={formikProps.errors.data?.classificationId} />\n </div>\n\n <div className='d-flex justify-content-between'>\n <label className='h5 mb-0'>\n Classifications\n </label>\n\n <DashboardWizardCta\n text='Select a topic'\n setShowSearch={setShowSearch}\n />\n </div>\n\n <DashboardWizardContentGuideline\n text={DashboardHelper.getContentGuidelineText(\n formikProps.values.widgetId,\n formikProps.values.templateId,\n DashboardTargetType.ClassificationDirectory\n )}\n />\n\n <DashboardWizardContentTable audiences={props.audiences} content={shownContent} />\n\n {showSearch && (\n <DashboardWizardSearchWidgetContentView\n dashboard={props.dashboard}\n closePopup={() => setShowSearch(false)}\n classificationId={props.classification?.id}\n presentationId={props.presentation.id}\n onSelectItem={obj => onSelectItem(obj as SearchResultsObject<Classification>)}\n selectedIds={[formikProps.values.data.classificationId]}\n initialResultsRequests={DashboardWizardHelper.getInitialResultsRequests(\n CuratedDashboardHelper.getDashboardTargetType(props.dashboard),\n MasterType.Subject,\n props.presentation.id,\n props.classification?.id\n )}\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\n\ninterface ConfirmHeadingOptionalProps {\n isOptional: boolean;\n setIsOptional: (isOptional: boolean) => void;\n}\n\nexport function ConfirmHeadingOptional(props: ConfirmHeadingOptionalProps): JSX.Element {\n return (\n <div className='mb-3'>\n <Checkbox\n id='widget-heading-optional'\n checked={props.isOptional}\n label='This widget doesn’t need a heading'\n onChange={() => {\n props.setIsOptional(!props.isOptional);\n }}\n />\n </div>\n );\n}\n","import React from 'react';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { Classification, ClassificationsWidgetData, CuratedDashboardAppLink, CuratedWidget, DashboardTargetType } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { ImageSelect } from 'shared/components';\nimport { Actions, AppChannels } from 'shared/constants';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { ConfirmHeadingOptional } from 'apps/dashboard-editor/components/wizard/confirm-heading-optional/ConfirmHeadingOptional';\nimport { DashboardWizardContentGuideline } from 'apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\n\ntype ClassificationsWidget = CuratedWidget<ClassificationsWidgetData, Classification[]>;\n\nexport function AddContentClassificationsView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<ClassificationsWidget>();\n\n const {\n PosterSlidingListSmall,\n CoverFixedPillListXSmall,\n EditableCoverFixedPillListSmall\n } = WidgetTemplate;\n\n function isTemplate(template: WidgetTemplate): boolean {\n return template === formikProps.values.templateId;\n }\n\n const isDiscoverDashboard = CuratedDashboardHelper.isType(props.dashboard, DashboardTargetType.Discover);\n\n const showExtraFields = isTemplate(PosterSlidingListSmall) && isDiscoverDashboard;\n\n function getWidgetData(): ClassificationsWidgetData {\n const data: ClassificationsWidgetData = {\n presentationId: props.presentation.id\n };\n\n if (props.classification)\n data.classificationId = props.classification?.id;\n\n return data;\n }\n\n function onSetHeadingOptional(headingOptional: boolean) {\n formikProps.setFieldValue('metadata.headingOptional', headingOptional);\n }\n\n React.useEffect(() => {\n formikProps.setFieldValue('data', getWidgetData());\n if (showExtraFields)\n formikProps.setFieldValue('metadata', { ...formikProps.values.metadata, appLink: CuratedDashboardAppLink.ExploreAllTopics });\n }, []);\n\n React.useEffect(() => {\n if (formikProps.values.name)\n return;\n\n if (isTemplate(CoverFixedPillListXSmall))\n formikProps.setFieldValue('name', 'Browse all subjects');\n\n if (isTemplate(EditableCoverFixedPillListSmall))\n formikProps.setFieldValue('name', 'Explore my subjects');\n }, []);\n \n const isTopicDashboard = CuratedDashboardHelper.isClassificationDashboard(\n CuratedDashboardHelper.getDashboardTargetInfo(props.dashboard)\n );\n\n const isHeadingOptional = formikProps.values.templateId === WidgetTemplate.StatsCoverFixedPillListLarge;\n\n return (\n <>\n {isHeadingOptional && (\n <ConfirmHeadingOptional\n isOptional={formikProps.values.metadata.headingOptional}\n setIsOptional={onSetHeadingOptional}\n />\n )}\n <FormField<ClassificationsWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar={!formikProps.values.metadata?.headingOptional}\n showCharacterCounter\n />\n\n {isTopicDashboard && (\n <ToggleShowInTableOfContents<ClassificationsWidget>\n dashboard={props.dashboard}\n />\n )}\n\n {isTopicDashboard && <FormField<ClassificationsWidget>\n name='showClassificationDirectory'\n type='checkbox'\n checked={formikProps.values.metadata.appLink === CuratedDashboardAppLink.ClassificationDirectory}\n label='Show topic directory link'\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n formikProps.setFieldValue('metadata', {\n ...formikProps.values.metadata,\n appLink: e.target.checked ? CuratedDashboardAppLink.ClassificationDirectory : ''\n });\n }}\n checkboxLabelFontWeight='normal'\n />}\n\n {!isTemplate(CoverFixedPillListXSmall) && (\n <FormField<ClassificationsWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n )}\n\n {showExtraFields && (\n <>\n <FormField<ClassificationsWidget>\n name='metadata.text'\n label='Title of leading poster'\n placeholder='Enter a title...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n showCharacterCounter\n />\n <ImageSelect\n imageType={ImageType.TallPosters}\n fieldName='metadata.imageId'\n setSelectedImage={image => {\n formikProps.setFieldValue('metadata', { ...formikProps.values.metadata, imageId: image.id });\n }}\n label='Poster image'\n uploadAppLink={{\n application: AppChannels.DASHBOARD_EDITOR,\n action: Actions.DashboardEditor.ADD_CONTENT_IMAGE_UPLOAD\n }}\n />\n </>\n )}\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={props.content}\n imageCdnUrl={props.imageCdnUrl}\n metadata={formikProps.values.metadata}\n presentation={props.presentation}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n isEditing\n availablePresentations={props.availablePresentations}\n settings={{\n hasTopicDirectories: props.settings?.hasTopicDirectories\n }}\n commonVideoProps={props.commonVideoProps}\n />\n\n {!!props.content?.length && (\n <div className='d-flex justify-content-between'>\n <label className='h5 mb-0'>\n Classifications\n </label>\n </div>\n )}\n\n <DashboardWizardContentGuideline />\n\n <DashboardWizardContentTable audiences={props.audiences} content={props.content} />\n </>\n );\n}\n","import React from 'react';\n\nimport { DashboardTargetType } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { AddContentChildClassificationsView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/add-content-classifications/AddContentChildClassificationsView';\nimport { AddContentClassificationsView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/add-content-classifications/AddContentClassificationsView';\n\nexport function AddContentClassificationsContainerView(props: AddWidgetContentFormViewProps): JSX.Element {\n if (CuratedDashboardHelper.isType(props.dashboard, DashboardTargetType.ClassificationDirectory))\n return <AddContentChildClassificationsView {...props} />;\n \n return <AddContentClassificationsView {...props} />;\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { SearchResultObjectTypes } from 'libs/shared/apps/search/interfaces';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification, CuratedMediaWidget, CuratedWidget, ParentAndChildClassificationsWidgetData } from 'libs/shared/interfaces';\n\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\nimport { DashboardHelper } from 'shared/utils/DashboardHelper';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardCta } from 'apps/dashboard-editor/components/wizard/content-cta/DashboardWizardCta';\nimport { DashboardWizardContentGuideline } from 'apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { WidgetErrorMessage } from 'apps/dashboard-editor/components/wizard/widget-error-message/WidgetErrorMessage';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\nimport { DashboardWizardSearchWidgetContentView } from 'apps/dashboard-editor/views/wizard/search-widget-content/DashboardWizardSearchWidgetContentView';\n\ntype WidgetForm = CuratedWidget<ParentAndChildClassificationsWidgetData, Classification[]>;\n\nexport function AddContentClassificationsWithChildrenView(props: AddWidgetContentFormViewProps): JSX.Element {\n const [ showSearch, setShowSearch ] = React.useState(false);\n const formikProps = useFormikContextWrapper<WidgetForm>();\n\n const isIncludingChildren = formikProps.values.data.classifications?.every(c => c.options.includeChildren) ?? true;\n\n const selectedParentIds = formikProps.values.data.classifications?.map(c => c.id) ?? [];\n const selectedParents = Flight.useBasicFetch<Classification[]>(\n !!selectedParentIds?.length &&\n SubjectRequests.classificationsById(selectedParentIds)\n );\n\n function getInitialResultsRequests(): Flight.Request[] {\n if (props.classification) {\n return [\n SubjectRequests.classification(props.classification.id),\n SubjectRequests.classificationChildren(props.classification.id)\n ];\n }\n\n return [\n SubjectRequests.presentationChildren(props.presentation.id)\n ];\n }\n\n function onSelectItem(obj: SearchResultObjectTypes): void {\n formikProps.setFieldTouched('data', true);\n\n if (formikProps.values.data.classifications?.some(c => c.id === obj.id)) {\n formikProps.setFieldValue(\n 'data.classifications',\n formikProps.values.data.classifications.filter(c => c.id !== obj.id)\n );\n } else {\n formikProps.setFieldValue(\n 'data.classifications',\n (formikProps.values.data.classifications || []).concat({\n id: obj.id,\n options: {\n includeChildren: isIncludingChildren\n }\n })\n );\n }\n }\n\n function onRemoveItem(id: string): void {\n formikProps.setFieldValue(\n 'data.classifications',\n formikProps.values.data.classifications.filter(c => c.id !== id)\n );\n }\n\n return (\n <>\n <FormField<CuratedMediaWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showCharacterCounter\n />\n\n <ToggleShowInTableOfContents<CuratedMediaWidget>\n dashboard={props.dashboard}\n />\n\n <FormField<CuratedMediaWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n\n {(\n formikProps.values.widgetId !== WidgetTypeId.LatestReleasedClassifications &&\n formikProps.values.widgetId !== WidgetTypeId.TrendingClassifications\n ) && (\n <Checkbox\n id='movies-and-tv-filter'\n checked={formikProps.values.data.filterMoviesAndTv}\n label='Movies + TV content only'\n onChange={() => {\n formikProps.setFieldValue('data.filterMoviesAndTv', !formikProps.values.data.filterMoviesAndTv);\n }}\n />\n )}\n\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={props.content}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n metadata={formikProps.values.metadata}\n imageCdnUrl={props.imageCdnUrl}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n\n <div className='pt-3'>\n <WidgetErrorMessage errorMessage={formikProps.errors.data?.classifications as string} />\n </div>\n\n <div className='d-flex justify-content-between align-items-center pt-3'>\n <label className='h5 mb-0'>\n Parent topics\n </label>\n\n <DashboardWizardCta\n text='Select parent topics'\n setShowSearch={setShowSearch}\n />\n </div>\n\n <DashboardWizardContentGuideline\n text={DashboardHelper.getContentGuidelineText(\n formikProps.values.widgetId,\n formikProps.values.templateId\n )}\n />\n\n <DashboardWizardContentTable\n audiences={props.audiences}\n content={selectedParents.data}\n onRemoveItem={onRemoveItem}\n canModifyContents\n />\n\n {showSearch && (\n <DashboardWizardSearchWidgetContentView\n dashboard={props.dashboard}\n closePopup={() => setShowSearch(false)}\n classificationId={props.classification?.id}\n presentationId={props.presentation.id}\n onSelectItem={onSelectItem}\n selectedIds={formikProps.values.data.classifications?.map(c => c.id) ?? []}\n initialResultsRequests={getInitialResultsRequests()}\n getDisabledMessage={result => {\n if (formikProps.values.templateId !== WidgetTemplate.ThumbnailFixedListLarge)\n return '';\n\n if (!result.description)\n return 'Topic requires a description in order to be added to this widget';\n\n return '';\n }}\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification, CuratedDashboardAppLink, CuratedMediaWidget } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport { DashboardHelper } from 'shared/utils/DashboardHelper';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardCta } from 'apps/dashboard-editor/components/wizard/content-cta/DashboardWizardCta';\nimport { DashboardWizardContentGuideline } from 'apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { WidgetErrorMessage } from 'apps/dashboard-editor/components/wizard/widget-error-message/WidgetErrorMessage';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { DashboardWizardHelper } from 'apps/dashboard-editor/utils/DashboardWizardHelper';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\nimport { DashboardWizardSearchWidgetContentView } from 'apps/dashboard-editor/views/wizard/search-widget-content/DashboardWizardSearchWidgetContentView';\n\nexport function AddContentMultipleCuratedClassificationsView(props: AddWidgetContentFormViewProps): JSX.Element {\n const [ showSearch, setShowSearch ] = React.useState(false);\n const formikProps = useFormikContextWrapper<CuratedMediaWidget<Classification[]>>();\n\n const isTopicDashboard = CuratedDashboardHelper.isClassificationDashboard(\n CuratedDashboardHelper.getDashboardTargetInfo(props.dashboard)\n );\n const isStreamableDashboard = props.presentation.type === PresentationType.StreamableLearning;\n const hasExploreAllTopics = formikProps.values.metadata.appLink === CuratedDashboardAppLink.ExploreAllTopics;\n\n function getPreviewContent() {\n return props.content && hasExploreAllTopics ?\n [\n {\n id: CuratedDashboardAppLink.ExploreAllTopics,\n name: 'Explore all subjects',\n cover: { url: ImageHelper.createUrl(HardCoded.Images.STREAMABLE_TOPIC_COVER, { size: ImageSize.Small }) }\n },\n ...props.content\n ] : props.content;\n }\n\n function onIncludeExploreAll() {\n if (hasExploreAllTopics) {\n formikProps.setFieldValue('metadata', { ...formikProps.values.metadata, appLink: null });\n } else {\n formikProps.setFieldValue('metadata', { ...formikProps.values.metadata, appLink: CuratedDashboardAppLink.ExploreAllTopics });\n }\n }\n\n return (\n <>\n <FormField<CuratedMediaWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar={formikProps.values.templateId !== WidgetTemplate.PosterSlidingListMedium}\n showCharacterCounter\n />\n\n {isTopicDashboard && (\n <ToggleShowInTableOfContents<CuratedMediaWidget>\n dashboard={props.dashboard}\n />\n )}\n\n <FormField<CuratedMediaWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n\n {isStreamableDashboard &&\n <Checkbox\n id='includeExploreAll'\n checked={!!hasExploreAllTopics}\n label='Include explore all subjects'\n onChange={onIncludeExploreAll}\n />\n }\n\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={getPreviewContent()}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n metadata={formikProps.values.metadata}\n imageCdnUrl={props.imageCdnUrl}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n\n <div className='pt-3'>\n <WidgetErrorMessage errorMessage={formikProps.errors.data?.objectIds} />\n </div>\n\n <div className='d-flex justify-content-between align-items-center pt-3'>\n <label className='h5 mb-0'>\n Classifications\n </label>\n\n <DashboardWizardCta\n text='Add topics'\n setShowSearch={setShowSearch}\n />\n </div>\n\n <DashboardWizardContentGuideline\n text={DashboardHelper.getContentGuidelineText(\n WidgetTypeId.CuratedClassifications,\n formikProps.values.templateId\n )}\n />\n\n <DashboardWizardContentTable\n audiences={props.audiences}\n onReorderWidgets={props.onReorderWidgets}\n content={props.content}\n onRemoveItem={id => CuratedDashboardHelper.onRemoveCuratedObject(id, formikProps)}\n canModifyContents\n />\n\n {showSearch && (\n <DashboardWizardSearchWidgetContentView\n dashboard={props.dashboard}\n closePopup={() => setShowSearch(false)}\n classificationId={props.classification?.id}\n presentationId={props.presentation.id}\n onSelectItem={obj => CuratedDashboardHelper.onSelectCuratedObject(obj, formikProps)}\n selectedIds={formikProps.values.data.objectIds}\n initialResultsRequests={DashboardWizardHelper.getInitialResultsRequests(\n CuratedDashboardHelper.getDashboardTargetType(props.dashboard),\n MasterType.Subject,\n props.presentation.id,\n props.classification?.id\n )}\n getDisabledMessage={result => {\n if (formikProps.values.templateId !== WidgetTemplate.ThumbnailFixedListLarge)\n return '';\n\n if (!result.description)\n return 'Topic requires a description in order to be added to this widget';\n\n return '';\n }}\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { SearchResultsObject } from 'libs/shared/apps/search/interfaces';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { Classification, CuratedMediaWidget, DashboardTargetType } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardCta } from 'apps/dashboard-editor/components/wizard/content-cta/DashboardWizardCta';\nimport { DashboardWizardContentGuideline } from 'apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { WidgetErrorMessage } from 'apps/dashboard-editor/components/wizard/widget-error-message/WidgetErrorMessage';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { DashboardWizardHelper } from 'apps/dashboard-editor/utils/DashboardWizardHelper';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\nimport { DashboardWizardSearchWidgetContentView } from 'apps/dashboard-editor/views/wizard/search-widget-content/DashboardWizardSearchWidgetContentView';\n\nexport function AddContentSingleCuratedClassificationsView(props: AddWidgetContentFormViewProps): JSX.Element {\n const [ showSearch, setShowSearch ] = React.useState(false);\n const formikProps = useFormikContextWrapper<CuratedMediaWidget<Classification[]>>();\n\n const selectedTopicName = ('name' in (props.content?.[0] || {}) && props.content?.[0]?.name) || '';\n\n const isBlockColourTemplate = formikProps.values.templateId === WidgetTemplate.HeroBlockColourSmall;\n const allowCta = (\n !isBlockColourTemplate &&\n formikProps.values.templateId !== WidgetTemplate.HeroBanner\n );\n\n React.useEffect(() => {\n if (!selectedTopicName)\n return;\n\n if (isBlockColourTemplate) {\n const targetInfo = CuratedDashboardHelper.getDashboardTargetInfo(props.dashboard);\n\n if (targetInfo.targetType === DashboardTargetType.ClassificationDirectory) {\n formikProps.setFieldValue('name', `Explore new ${selectedTopicName} topics and videos`);\n return;\n }\n\n formikProps.setFieldValue('name', `Explore all ${selectedTopicName} topics`);\n return;\n }\n\n formikProps.setFieldValue('name', selectedTopicName);\n }, [selectedTopicName]);\n\n function onSelectItem(obj: SearchResultsObject<Classification>): void {\n formikProps.setFieldValue('data', { ...formikProps.values.data, objectIds: [obj.id]});\n\n setFormAsTouched();\n }\n\n function setFormAsTouched(): void {\n formikProps.setTouched({\n ...formikProps.touched,\n data: {\n objectIds: true\n }\n });\n }\n\n const isTopicDashboard = CuratedDashboardHelper.isClassificationDashboard(\n CuratedDashboardHelper.getDashboardTargetInfo(props.dashboard)\n );\n\n return (\n <>\n <FormField<CuratedMediaWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading or select a topic...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n showRequiredStar\n showCharacterCounter\n />\n\n {isTopicDashboard && (\n <ToggleShowInTableOfContents<CuratedMediaWidget>\n dashboard={props.dashboard}\n />\n )}\n\n {allowCta && (\n <FormField<CuratedMediaWidget>\n name='metadata.cta.text'\n label='CTA button'\n placeholder='Add a CTA button...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n showCharacterCounter\n />\n )}\n\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={props.content}\n imageCdnUrl={props.imageCdnUrl}\n metadata={formikProps.values.metadata}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n\n <div className='pt-3'>\n <WidgetErrorMessage errorMessage={formikProps.errors.data?.objectIds} />\n </div>\n\n <div className='d-flex justify-content-end pt-3'>\n <DashboardWizardCta\n text='Select a topic'\n setShowSearch={setShowSearch}\n />\n </div>\n\n {!isBlockColourTemplate && (\n <DashboardWizardContentGuideline />\n )}\n\n {showSearch && (\n <DashboardWizardSearchWidgetContentView\n dashboard={props.dashboard}\n closePopup={() => setShowSearch(false)}\n classificationId={props.classification?.id}\n presentationId={props.presentation.id}\n onSelectItem={onSelectItem}\n selectedIds={formikProps.values.data.objectIds}\n initialResultsRequests={DashboardWizardHelper.getInitialResultsRequests(\n CuratedDashboardHelper.getDashboardTargetType(props.dashboard),\n MasterType.Subject,\n props.presentation.id,\n props.classification?.id\n )}\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { Classification, CuratedMediaWidget } from 'libs/shared/interfaces';\n\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\n\nimport { AddContentMultipleCuratedClassificationsView } from './multiple/AddContentMultipleCuratedClassificationsView';\nimport { AddContentSingleCuratedClassificationsView } from './single/AddContentSingleCuratedClassificationsView';\n\nconst SINGLE_TEMPLATES = [\n WidgetTemplate.HeroBanner,\n WidgetTemplate.HeroBannerSmall,\n WidgetTemplate.HeroBlockColourSmall,\n WidgetTemplate.ThumbnailFixedListXLarge,\n WidgetTemplate.HeroThumbnailSmall\n];\n\nexport function AddContentCuratedClassificationsViewContainer(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<CuratedMediaWidget<Classification[]>>();\n\n if (SINGLE_TEMPLATES.includes(formikProps.values.templateId))\n return <AddContentSingleCuratedClassificationsView {...props} />;\n \n return <AddContentMultipleCuratedClassificationsView {...props} />;\n}\n","import React from 'react';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { Classification, CuratedWidget, PersonalisedTopicsWidgetData } from 'libs/shared/interfaces';\n\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\n\ntype PersonalisedTopicsWidget = CuratedWidget<PersonalisedTopicsWidgetData, Classification[]>;\n\nexport function AddContentPersonalisedTopicsView(props: AddWidgetContentFormViewProps) {\n const formikProps = useFormikContextWrapper<PersonalisedTopicsWidget>();\n\n return (\n <>\n <FormField<PersonalisedTopicsWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar\n showCharacterCounter\n />\n\n <FormField<PersonalisedTopicsWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={props.content}\n audiences={props.audiences}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n metadata={formikProps.values.metadata}\n imageCdnUrl={props.imageCdnUrl}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification, ClassificationsWidgetData, CuratedDashboardAppLink, CuratedWidget } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { DashboardRequests } from 'shared/flight-requests/DashboardRequests';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardContentGuideline } from 'apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetContentPreviewResponse } from 'apps/dashboard-editor/interfaces/data-requests/WidgetContentPreviewResponse';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\n\ntype ClassificationsWidget = CuratedWidget<ClassificationsWidgetData, Classification[]>;\n\nexport function AddContentClassificationLatestReleasedVideosView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<ClassificationsWidget>();\n const { from, to } = CuratedDashboardHelper.getLatestReleasedTimeRange();\n\n const contentPreview = Flight.useBasicFetch<WidgetContentPreviewResponse<Classification[]>>(\n DashboardRequests.previewWidget(\n WidgetTypeId.ClassificationLatestReleasedVideos,\n { presentationId: props.presentation.id },\n {\n from,\n to\n }\n )\n );\n\n React.useEffect(() => {\n formikProps.setFieldValue('data', { presentationId: props.presentation.id });\n\n formikProps.setFieldValue(\n 'metadata',\n {\n ...formikProps.values.metadata,\n appLink: CuratedDashboardAppLink.ClassificationLatestReleases,\n imageId: props.presentation.cover.fileId\n }\n );\n }, []);\n\n const isTopicDashboard = CuratedDashboardHelper.isClassificationDashboard(\n CuratedDashboardHelper.getDashboardTargetInfo(props.dashboard)\n );\n\n return (\n <>\n <FormField<ClassificationsWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar\n showCharacterCounter\n />\n\n {isTopicDashboard && (\n <ToggleShowInTableOfContents<ClassificationsWidget>\n dashboard={props.dashboard}\n />\n )}\n \n <FormField<ClassificationsWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={contentPreview.data?.content}\n imageCdnUrl={props.imageCdnUrl}\n metadata={formikProps.values.metadata}\n audiences={props.audiences}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n\n {!!props.content?.length && (\n <div className='d-flex justify-content-between'>\n <label className='h5 mb-0'>\n Classifications\n </label>\n </div>\n )}\n\n <DashboardWizardContentGuideline />\n\n <DashboardWizardContentTable audiences={props.audiences} content={contentPreview.data?.content} />\n </>\n );\n}\n","import React from 'react';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { CalendarEvent, CuratedWidget, SpecialEventsWidgetData } from 'libs/shared/interfaces';\n\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardContentGuideline } from 'apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\n\ntype SpecialEventsWidget = CuratedWidget<SpecialEventsWidgetData, CalendarEvent[]>;\n\nexport function AddContentSpecialEventClassificationsView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<SpecialEventsWidget>();\n\n React.useEffect(() => {\n formikProps.setFieldValue('data.presentationId', props.presentation.id);\n\n if (props.classification) {\n formikProps.setFieldValue(\n 'data.classifications',\n [{ id: props.classification.id, options: { includeChildren: true } }]\n );\n }\n\n if (formikProps.values.name)\n return;\n\n if (props.classification) {\n formikProps.setFieldValue('name', `Upcoming events for ${props.classification.name}`);\n return;\n }\n\n formikProps.setFieldValue('name', 'Upcoming events');\n }, []);\n\n return (\n <>\n <FormField<SpecialEventsWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar\n showCharacterCounter\n />\n \n <FormField<SpecialEventsWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={props.content}\n imageCdnUrl={props.imageCdnUrl}\n metadata={formikProps.values.metadata}\n audiences={props.audiences}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n\n {!!props.content?.length && (\n <div className='d-flex justify-content-between'>\n <label className='h5 mb-0'>\n Special events\n </label>\n </div>\n )}\n\n <DashboardWizardContentGuideline />\n\n <DashboardWizardContentTable audiences={props.audiences} content={props.content} />\n </>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { Video } from 'libs/analytics/interfaces';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { ContentPartnerWidgetData, CuratedMediaWidget, CuratedWidget } from 'libs/shared/interfaces';\n\nimport { DashboardRequests } from 'shared/flight-requests/DashboardRequests';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { WidgetErrorMessage } from 'apps/dashboard-editor/components/wizard/widget-error-message/WidgetErrorMessage';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetContentPreviewResponse } from 'apps/dashboard-editor/interfaces/data-requests/WidgetContentPreviewResponse';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\n\ntype WidgetForm = CuratedWidget<ContentPartnerWidgetData, Video[]>;\n\nconst PrefillNameMapping: Partial<Record<WidgetTypeId, string>> = {\n [WidgetTypeId.TrendingContentPartnersVideo]: 'Trending videos',\n [WidgetTypeId.ContentPartnerLatestReleasedVideos]: 'Latest videos',\n [WidgetTypeId.ContentPartnerAllVideos]: 'More videos'\n};\n\nexport function AddContentContentPartnerVideoView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<WidgetForm>();\n\n React.useEffect(() => {\n // prefill name if it's empty\n if (!formikProps.values.name) {\n formikProps.setFieldValue('name', PrefillNameMapping[formikProps.values.widgetId] || '');\n }\n }, []);\n\n const preview = Flight.useBasicFetch<WidgetContentPreviewResponse<Video[]>>(\n DashboardRequests.previewWidget(\n formikProps.values.widgetId,\n ObjectHelper.pick<ContentPartnerWidgetData>(formikProps.values.data, ['slug'])\n )\n );\n\n return (\n <>\n <FormField<CuratedMediaWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showCharacterCounter\n />\n\n <FormField<CuratedMediaWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={preview.data?.content}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n metadata={formikProps.values.metadata}\n imageCdnUrl={props.imageCdnUrl}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n\n <div className='pt-3'>\n <WidgetErrorMessage errorMessage={formikProps.errors.data?.classifications as string} />\n </div>\n\n <DashboardWizardContentTable\n audiences={props.audiences}\n content={preview.data?.content || []}\n canModifyContents={false}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { SearchResultsObject } from 'libs/shared/apps/search/interfaces';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { BasePaginatedCollection, CuratedMediaWidget } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { SearchRequests } from 'shared/flight-requests/SearchRequests';\nimport { ContentPartnerProfile } from 'shared/interfaces/models/ContentPartnerProfile';\nimport { DashboardHelper } from 'shared/utils/DashboardHelper';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardCta } from 'apps/dashboard-editor/components/wizard/content-cta/DashboardWizardCta';\nimport { DashboardWizardContentGuideline } from 'apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { WidgetErrorMessage } from 'apps/dashboard-editor/components/wizard/widget-error-message/WidgetErrorMessage';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\nimport { DashboardWizardSearchWidgetContentView } from 'apps/dashboard-editor/views/wizard/search-widget-content/DashboardWizardSearchWidgetContentView';\n\nconst DEFAULT_SPOTLIGHT_WIDGET_NAME = 'Featured channels';\n\nexport function AddContentCuratedContentPartnersView(props: AddWidgetContentFormViewProps): JSX.Element {\n const [ showSearch, setShowSearch ] = React.useState(false);\n const formikProps = useFormikContextWrapper<CuratedMediaWidget<ContentPartnerProfile[]>>();\n const fetchAsync = Flight.useGetFetchAsync();\n\n const isSpotlightContentPartnerWidget = formikProps.values.widgetId === WidgetTypeId.SpotlightContentPartners;\n const isCuratedContentPartnerWidget = formikProps.values.widgetId === WidgetTypeId.CuratedContentPartners;\n const hasInitializedObjectIds = React.useRef(!!formikProps.values.data?.objectIds?.length);\n\n React.useEffect(() => {\n if (!formikProps.values.name && isSpotlightContentPartnerWidget) {\n formikProps.setFieldValue('name', DEFAULT_SPOTLIGHT_WIDGET_NAME);\n }\n }, []);\n\n React.useEffect(() => {\n // heading not required for curated content partners widget in channel dashboard\n if (isCuratedContentPartnerWidget)\n formikProps.setFieldValue('metadata.headingOptional', true);\n }, [isCuratedContentPartnerWidget]);\n\n React.useEffect(() => {\n if (!isSpotlightContentPartnerWidget)\n return;\n\n if (hasInitializedObjectIds.current) return;\n\n const content = props.content as ContentPartnerProfile[];\n if (!content?.length) return;\n\n hasInitializedObjectIds.current = true;\n formikProps.setFieldValue('data', {\n ...formikProps.values.data,\n objectIds: content.map(item => item.id)\n });\n }, [props.content]);\n\n async function onSearch(searchQuery: string) {\n // no need to search if the search query is empty as we will show all content partners in that case\n if (!searchQuery) return;\n\n return await fetchAsync<BasePaginatedCollection<SearchResultsObject<ContentPartnerProfile>>>(\n SearchRequests.searchContentPartners(searchQuery, isSpotlightContentPartnerWidget)\n );\n }\n\n return (\n <>\n <FormField<CuratedMediaWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar={!isCuratedContentPartnerWidget}\n showCharacterCounter\n />\n\n <FormField<CuratedMediaWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={props.content}\n audiences={props.audiences}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n metadata={formikProps.values.metadata}\n imageCdnUrl={props.imageCdnUrl}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n <WidgetErrorMessage errorMessage={formikProps.errors.data?.objectIds} />\n\n <div className='d-flex justify-content-between align-items-center pt-3'>\n <label className='h5 mb-0'>\n Channels\n </label>\n\n {/* spotlight widget is readonly */}\n {!isSpotlightContentPartnerWidget && (\n <DashboardWizardCta\n text='Add channel'\n setShowSearch={setShowSearch}\n />\n )}\n </div>\n\n <DashboardWizardContentGuideline\n hideLink\n text={\n DashboardHelper.getContentGuidelineText(WidgetTypeId.SpotlightContentPartners, formikProps.values.templateId)\n }\n />\n\n <DashboardWizardContentTable\n audiences={props.audiences}\n onReorderWidgets={props.onReorderWidgets}\n content={props.content}\n onRemoveItem={id => CuratedDashboardHelper.onRemoveCuratedObject(id, formikProps)}\n canModifyContents={!isSpotlightContentPartnerWidget}\n />\n\n {showSearch && (\n <DashboardWizardSearchWidgetContentView\n prefetchedInitialResults={props.content}\n dashboard={props.dashboard}\n presentationId={props.presentation?.id}\n presentationType={props.presentation?.type}\n closePopup={() => setShowSearch(false)}\n onSelectItem={obj => CuratedDashboardHelper.onSelectCuratedObject(obj, formikProps)}\n selectedIds={formikProps.values.data.objectIds}\n customOnSearch={onSearch}\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { CalendarEventContentType, CuratedObjectsWidgetData, CuratedWidget, Livestream } from 'libs/shared/interfaces';\n\nimport { DashboardRequests } from 'shared/flight-requests/DashboardRequests';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetContentPreviewResponse } from 'apps/dashboard-editor/interfaces/data-requests/WidgetContentPreviewResponse';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\n\ntype UpcomingLivestreamsWidget = CuratedWidget<CuratedObjectsWidgetData, Livestream[]>;\n\nexport function AddUpcomingLivestreamsView(props: AddWidgetContentFormViewProps) {\n const formikProps = useFormikContextWrapper<UpcomingLivestreamsWidget>();\n\n const preview = Flight.useBasicFetch<WidgetContentPreviewResponse<Livestream[]>>(\n !ObjectHelper.isEmpty(formikProps.values.data) && DashboardRequests.previewWidget(\n formikProps.values.widgetId,\n formikProps.values.data,\n { from: DateHelper.format(new Date(), 'YYYY-MM-DD') }\n )\n );\n\n React.useEffect(() => {\n if (props.classification) {\n formikProps.setFieldValue('data', { ...formikProps.values.data, classificationId: props.classification?.id });\n }\n }, [props.classification]);\n\n return (\n <>\n <FormField<UpcomingLivestreamsWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar\n showCharacterCounter\n />\n\n <FormField<UpcomingLivestreamsWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={preview.data?.content}\n audiences={props.audiences}\n contentType={CalendarEventContentType.Livestream}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n metadata={formikProps.values.metadata}\n imageCdnUrl={props.imageCdnUrl}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n </>\n );\n}\n","import React from 'react';\nimport { useFormikContext } from 'formik';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { SearchResultObjectTypes, SearchResultsObject } from 'libs/shared/apps/search/interfaces';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { BasePaginatedCollection, Clip, CuratedMediaWidget, CuratedWidget, MultimediaWidgetData, Resource, Video, VideoTypes, WidgetMultimedia } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { SubjectMemberType } from 'shared/enums';\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\nimport { DashboardHelper } from 'shared/utils/DashboardHelper';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { ConfirmHeadingOptional } from 'apps/dashboard-editor/components/wizard/confirm-heading-optional/ConfirmHeadingOptional';\nimport { DashboardWizardCta } from 'apps/dashboard-editor/components/wizard/content-cta/DashboardWizardCta';\nimport { DashboardWizardContentGuideline } from 'apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { WidgetErrorMessage } from 'apps/dashboard-editor/components/wizard/widget-error-message/WidgetErrorMessage';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { InitialRequestVideoType } from 'apps/dashboard-editor/utils/DashboardWizardHelper';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\nimport { DashboardWizardSearchWidgetContentView } from 'apps/dashboard-editor/views/wizard/search-widget-content/DashboardWizardSearchWidgetContentView';\n\ntype Multimedia = VideoTypes | Resource;\n\nexport function AddContentCuratedMultimediaView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContext<CuratedWidget<MultimediaWidgetData, Multimedia[]>>();\n const [ showSearch, setShowSearch ] = React.useState(false);\n const [ initialRequestVideoType, setInitialRequestVideoType ] = React.useState<InitialRequestVideoType>(null);\n\n function getInitialResultsRequests(): Flight.Request[] {\n const requests = [\n SubjectRequests.classificationMembers(\n props.classification?.id,\n SubjectMemberType.Interactives,\n formikProps.values.data.presentationId\n )\n ];\n\n const videosRequest = SubjectRequests.classificationMembers(\n props.classification?.id,\n SubjectMemberType.Videos,\n formikProps.values.data.presentationId\n );\n\n const clipsRequest = SubjectRequests.classificationMembers(\n props.classification?.id,\n SubjectMemberType.Clips,\n formikProps.values.data.presentationId\n );\n\n const originalFormatData = videosRequest.formatData;\n\n /**\n * Because this widget type supports resources, we want to essentially promote\n * the resources on the videos and clips in these topics to be first class citizens.\n * So we get all of them, and move them to the top level of the array so they can\n * be selected in the UI.\n */\n const formatData = (data: BasePaginatedCollection<Video | Clip>) => {\n const formatted = originalFormatData(data) as BasePaginatedCollection<Video | Clip>;\n\n const results: Array<Video | Clip | Resource> = [];\n\n for (const video of formatted.data) {\n results.push(video);\n\n for (const resource of video.resources.data) {\n results.push({\n ...resource,\n parentId: video.id,\n parentName: video.name\n });\n }\n }\n\n formatted.data = results;\n\n return formatted;\n };\n\n videosRequest.formatData = formatData;\n clipsRequest.formatData = formatData;\n\n requests.push(videosRequest);\n requests.push(clipsRequest);\n\n return requests;\n }\n\n function onSelectItem(item: SearchResultObjectTypes): void {\n if (!('typeId' in item))\n return;\n\n const dataEntry: WidgetMultimedia = {\n objectId: item.id\n };\n\n if (item.typeId === MasterType.Resource)\n dataEntry.parentId = (item as SearchResultsObject<Resource>).parentId;\n\n if (formikProps.values.data.multimedias.find(m => m.objectId.toString() === dataEntry.objectId.toString())) {\n formikProps.setFieldValue(\n 'data.multimedias',\n formikProps.values.data.multimedias.filter(m => m.objectId.toString() !== dataEntry.objectId.toString())\n );\n } else {\n formikProps.setFieldValue('data.multimedias', [ ...formikProps.values.data.multimedias, dataEntry ]);\n }\n\n formikProps.setFieldTouched('data.multimedias', true);\n }\n\n function onRemoveItem(id: string): void {\n formikProps.setFieldValue(\n 'data.multimedias',\n formikProps.values.data.multimedias.filter(m => m.objectId.toString() !== id.toString())\n );\n }\n\n function onSetHeadingOptional(headingOptional: boolean) {\n formikProps.setFieldValue('metadata.headingOptional', headingOptional);\n }\n\n const { max } = DashboardHelper.getContentGuidelineMinMax(\n WidgetTypeId.CuratedMultimedia,\n formikProps.values.templateId\n );\n\n const disableSelectingMore = formikProps.values.data?.multimedias?.length >= max;\n\n const isTopicDashboard = CuratedDashboardHelper.isClassificationDashboard(\n CuratedDashboardHelper.getDashboardTargetInfo(props.dashboard)\n );\n\n return (\n <>\n <ConfirmHeadingOptional\n isOptional={formikProps.values.metadata.headingOptional}\n setIsOptional={onSetHeadingOptional}\n />\n <FormField<CuratedMediaWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n showRequiredStar\n showCharacterCounter\n />\n {isTopicDashboard && (\n <ToggleShowInTableOfContents<CuratedMediaWidget>\n dashboard={props.dashboard}\n />\n )}\n \n <FormField<CuratedMediaWidget>\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n description={formikProps.values.description}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n id={formikProps.values.id}\n name={formikProps.values.name}\n content={props.content}\n imageCdnUrl={props.imageCdnUrl}\n audiences={props.audiences}\n metadata={formikProps.values.metadata}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n <WidgetErrorMessage errorMessage={formikProps.errors.data?.multimedias as string} />\n\n <div className='d-flex justify-content-between align-items-center pt-3'>\n <label className='h5 mb-0'>\n Contents\n </label>\n\n <DashboardWizardCta\n text='Add contents'\n setShowSearch={setShowSearch}\n />\n </div>\n \n <DashboardWizardContentGuideline\n text={DashboardHelper.getContentGuidelineText(WidgetTypeId.CuratedMultimedia, formikProps.values.templateId)}\n />\n\n <DashboardWizardContentTable\n audiences={props.audiences}\n onReorderWidgets={props.onReorderWidgets}\n content={props.content}\n onRemoveItem={onRemoveItem}\n canModifyContents\n />\n\n {showSearch && (\n <DashboardWizardSearchWidgetContentView\n dashboard={props.dashboard}\n closePopup={() => setShowSearch(false)}\n classificationId={props.classification?.id}\n presentationId={props.presentation?.id}\n onSelectItem={onSelectItem}\n selectedIds={formikProps.values.data.multimedias.map(m => m.objectId)}\n initialResultsRequests={props.classification?.id && getInitialResultsRequests()}\n disableSelectingMore={disableSelectingMore}\n setInitialRequestVideoType={setInitialRequestVideoType}\n initialRequestVideoType={initialRequestVideoType}\n hasVideoTypeFilter\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Company, CuratedMediaWidget } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { DashboardHelper } from 'shared/utils/DashboardHelper';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardCta } from 'apps/dashboard-editor/components/wizard/content-cta/DashboardWizardCta';\nimport { DashboardWizardContentGuideline } from 'apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { WidgetErrorMessage } from 'apps/dashboard-editor/components/wizard/widget-error-message/WidgetErrorMessage';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\nimport { DashboardWizardSearchWidgetContentView } from 'apps/dashboard-editor/views/wizard/search-widget-content/DashboardWizardSearchWidgetContentView';\n\nexport function AddContentCuratedCompaniesView(props: AddWidgetContentFormViewProps): JSX.Element {\n const [ showSearch, setShowSearch ] = React.useState(false);\n const formikProps = useFormikContextWrapper<CuratedMediaWidget<Company[]>>();\n \n return (\n <>\n <FormField<CuratedMediaWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar\n showCharacterCounter\n />\n\n <FormField<CuratedMediaWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={props.content}\n audiences={props.audiences}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n metadata={formikProps.values.metadata}\n imageCdnUrl={props.imageCdnUrl}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n <WidgetErrorMessage errorMessage={formikProps.errors.data?.objectIds} />\n\n <div className='d-flex justify-content-between align-items-center pt-3'>\n <label className='h5 mb-0'>\n Networks\n </label>\n\n <DashboardWizardCta\n text='Add networks'\n setShowSearch={setShowSearch}\n />\n </div>\n\n <DashboardWizardContentGuideline\n text={DashboardHelper.getContentGuidelineText(WidgetTypeId.CuratedCompanies, formikProps.values.templateId)}\n />\n\n <DashboardWizardContentTable\n audiences={props.audiences}\n onReorderWidgets={props.onReorderWidgets}\n content={props.content}\n onRemoveItem={id => CuratedDashboardHelper.onRemoveCuratedObject(id, formikProps)}\n canModifyContents\n />\n\n {showSearch && (\n <DashboardWizardSearchWidgetContentView\n dashboard={props.dashboard}\n presentationId={props.presentation.id}\n presentationType={props.presentation.type}\n closePopup={() => setShowSearch(false)}\n onSelectItem={obj => CuratedDashboardHelper.onSelectCuratedObject(obj, formikProps)}\n selectedIds={formikProps.values.data.objectIds}\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { CuratedMediaWidget, Playlist } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { DashboardHelper } from 'shared/utils/DashboardHelper';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardCta } from 'apps/dashboard-editor/components/wizard/content-cta/DashboardWizardCta';\nimport { DashboardWizardContentGuideline } from 'apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { WidgetErrorMessage } from 'apps/dashboard-editor/components/wizard/widget-error-message/WidgetErrorMessage';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { DashboardWizardHelper } from 'apps/dashboard-editor/utils/DashboardWizardHelper';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\nimport { DashboardWizardSearchWidgetContentView } from 'apps/dashboard-editor/views/wizard/search-widget-content/DashboardWizardSearchWidgetContentView';\n\nexport function AddContentCuratedPlaylistsView(props: AddWidgetContentFormViewProps): JSX.Element {\n const [ showSearch, setShowSearch ] = React.useState(false);\n const formikProps = useFormikContextWrapper<CuratedMediaWidget<Playlist[]>>();\n\n const isTopicDashboard = CuratedDashboardHelper.isClassificationDashboard(\n CuratedDashboardHelper.getDashboardTargetInfo(props.dashboard)\n );\n\n return (\n <>\n <FormField<CuratedMediaWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar\n showCharacterCounter\n />\n\n {isTopicDashboard && (\n <ToggleShowInTableOfContents<CuratedMediaWidget>\n dashboard={props.dashboard}\n />\n )}\n\n <FormField<CuratedMediaWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={props.content}\n audiences={props.audiences}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n metadata={formikProps.values.metadata}\n imageCdnUrl={props.imageCdnUrl}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n <WidgetErrorMessage errorMessage={formikProps.errors.data?.objectIds} />\n\n <div className='d-flex justify-content-between align-items-center pt-3'>\n <label className='h5 mb-0'>\n Playlists\n </label>\n\n <DashboardWizardCta\n text='Add playlists'\n setShowSearch={setShowSearch}\n />\n </div>\n\n <DashboardWizardContentGuideline\n text={DashboardHelper.getContentGuidelineText(WidgetTypeId.CuratedPlaylists, formikProps.values.templateId)}\n />\n\n <DashboardWizardContentTable\n audiences={props.audiences}\n onReorderWidgets={props.onReorderWidgets}\n content={props.content}\n onRemoveItem={id => CuratedDashboardHelper.onRemoveCuratedObject(id, formikProps)}\n canModifyContents\n />\n\n {showSearch && (\n <DashboardWizardSearchWidgetContentView\n dashboard={props.dashboard}\n closePopup={() => setShowSearch(false)}\n classificationId={props.classification?.id}\n presentationId={props.presentation.id}\n onSelectItem={obj => CuratedDashboardHelper.onSelectCuratedObject(obj, formikProps)}\n selectedIds={formikProps.values.data.objectIds}\n initialResultsRequests={DashboardWizardHelper.getInitialResultsRequests(\n CuratedDashboardHelper.getDashboardTargetType(props.dashboard),\n MasterType.Playlist,\n props.presentation.id,\n props.classification?.id\n )}\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { CuratedWidget, Presentation } from 'libs/shared/interfaces';\n\nimport { ImageSelect } from 'shared/components';\nimport { Actions, AppChannels } from 'shared/constants';\nimport { DashboardRequests } from 'shared/flight-requests/DashboardRequests';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetContentPreviewResponse } from 'apps/dashboard-editor/interfaces/data-requests/WidgetContentPreviewResponse';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\n\nexport function AddContentPresentationsView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<CuratedWidget>();\n\n const contentPreview = Flight.useBasicFetch<WidgetContentPreviewResponse<Presentation[]>>(\n DashboardRequests.previewWidget(WidgetTypeId.Presentations, {})\n );\n\n React.useEffect(() => {\n if (!formikProps.values.name)\n formikProps.setFieldValue('name', 'Discover videos for');\n }, []);\n\n return (\n <>\n <FormField<CuratedWidget>\n name='name'\n label='Prefix'\n placeholder='Enter a prefix...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar\n showCharacterCounter\n />\n\n <ImageSelect\n imageType={ImageType.Banners}\n fieldName='metadata.imageId'\n label='Banner image'\n setSelectedImage={image => {\n formikProps.setFieldValue('metadata', { ...formikProps.values.metadata, imageId: image.id });\n }}\n showRequiredStar\n uploadAppLink={{\n application: AppChannels.DASHBOARD_EDITOR,\n action: Actions.DashboardEditor.ADD_CONTENT_IMAGE_UPLOAD\n }}\n />\n\n <WidgetPreviewHeader dashboard={props.dashboard} />\n\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n metadata={formikProps.values.metadata}\n imageCdnUrl={props.imageCdnUrl}\n content={contentPreview.data?.content}\n presentation={props.presentation}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n </>\n );\n}\n","import React from 'react';\nimport { Dropdown } from 'react-bootstrap';\n\nimport { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { ChevronDownSvg } from 'libs/shared/images/svg/arrows/ChevronDownSvg';\nimport { Country, CuratedMediaWidget, Rating } from 'libs/shared/interfaces';\n\nimport { NewCustomerRequests } from 'shared/flight-requests/NewCustomerRequests';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\n\ninterface RatingsCountryDropdownProps {\n data: Country[];\n selectedCountry: Country;\n onCountrySelect: (country: Country) => void;\n}\n\nconst RatingsCountryDropdown = (props: RatingsCountryDropdownProps) => {\n return (\n <Dropdown>\n <Dropdown.Toggle variant='outline-secondary' className='no-caret py-2'>\n <span className='align-text-bottom pe-4'>\n {props.selectedCountry ? (\n <span className='text-dark'>{props.selectedCountry.name}</span>\n ) : (\n 'Select region'\n )}\n </span>{' '}\n <SvgContainer\n className='svg-container text-dark'\n svg={ChevronDownSvg}\n />\n </Dropdown.Toggle>\n\n <Dropdown.Menu className='py-0'>\n {props.data.map(country => (\n <Dropdown.Item\n key={country.id}\n className='py-2 px-3 my-1'\n onClick={() => props.onCountrySelect(country)}\n >\n {country.name}\n </Dropdown.Item>\n ))}\n </Dropdown.Menu>\n </Dropdown>\n );\n};\n\nexport function AddContentRatingsView(props: AddWidgetContentFormViewProps) {\n const countries = Flight.useBasicFetch<Country[]>(\n NewCustomerRequests.countries()\n );\n const formikProps = useFormikContextWrapper<CuratedMediaWidget<Rating[]>>();\n const [ selectedCountry, setSelectedCountry ] = React.useState<Country>(null);\n\n React.useEffect(() => {\n const id = ArrayHelper.first(formikProps.values.data.objectIds);\n const country = ArrayHelper.findWhere(countries.data, { id });\n \n if (country) {\n setSelectedCountry(country);\n }\n }, [countries.data]);\n\n function onCountrySelect(country: Country) {\n setSelectedCountry(country);\n formikProps.setFieldValue('data', { ...formikProps.values.data, objectIds: [country.id]});\n\n setFormAsTouched();\n }\n\n function setFormAsTouched(): void {\n formikProps.setTouched({\n ...formikProps.touched,\n data: {\n objectIds: true\n }\n });\n }\n\n if (!countries.data) {\n return <></>;\n }\n\n return (\n <>\n <FormField<CuratedMediaWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar\n showCharacterCounter\n />\n\n <FormField<CuratedMediaWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n\n <div className='d-flex justify-content-between align-items-center my-3'>\n <h5 className='mb-0'>Widget Preview</h5>\n <RatingsCountryDropdown\n data={countries.data}\n selectedCountry={selectedCountry}\n onCountrySelect={onCountrySelect}\n />\n </div>\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={props.content}\n audiences={props.audiences}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n metadata={formikProps.values.metadata}\n imageCdnUrl={props.imageCdnUrl}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { ClassificationType } from 'libs/shared/enums/ClassificationType';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { CuratedMediaWidget, Series } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { DashboardRequests } from 'shared/flight-requests/DashboardRequests';\nimport { DashboardHelper } from 'shared/utils/DashboardHelper';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardCta } from 'apps/dashboard-editor/components/wizard/content-cta/DashboardWizardCta';\nimport { DashboardWizardContentGuideline } from 'apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { WidgetErrorMessage } from 'apps/dashboard-editor/components/wizard/widget-error-message/WidgetErrorMessage';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetContentPreviewResponse } from 'apps/dashboard-editor/interfaces/data-requests/WidgetContentPreviewResponse';\nimport { DashboardWizardHelper } from 'apps/dashboard-editor/utils/DashboardWizardHelper';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\nimport { DashboardWizardSearchWidgetContentView } from 'apps/dashboard-editor/views/wizard/search-widget-content/DashboardWizardSearchWidgetContentView';\n\nexport function AddContentCuratedSeriesView(props: AddWidgetContentFormViewProps): JSX.Element {\n const [ showSearch, setShowSearch ] = React.useState(false);\n const formikProps = useFormikContextWrapper<CuratedMediaWidget<Series[]>>();\n\n const isHubTopic = props.classification?.type === ClassificationType.Hub;\n\n React.useEffect(() => {\n if (isHubTopic)\n formikProps.setFieldValue('metadata.headingOptional', true);\n }, [isHubTopic]);\n\n const preview = Flight.useBasicFetch<WidgetContentPreviewResponse<Series[]>>(\n formikProps.values.data.objectIds?.length > 0 && DashboardRequests.previewWidget(\n formikProps.values.widgetId,\n formikProps.values.data,\n { withMembers: false }\n )\n );\n\n const isTopicDashboard = CuratedDashboardHelper.isClassificationDashboard(\n CuratedDashboardHelper.getDashboardTargetInfo(props.dashboard)\n );\n\n return (\n <>\n <FormField<CuratedMediaWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar={!isHubTopic}\n showCharacterCounter\n />\n\n {isTopicDashboard && (\n <ToggleShowInTableOfContents<CuratedMediaWidget>\n dashboard={props.dashboard}\n />\n )}\n\n <FormField<CuratedMediaWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={preview.data?.content}\n audiences={props.audiences}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n metadata={formikProps.values.metadata}\n imageCdnUrl={props.imageCdnUrl}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n <WidgetErrorMessage errorMessage={formikProps.errors.data?.objectIds} />\n\n <div className='d-flex justify-content-between align-items-center pt-3'>\n <label className='h5 mb-0'>\n Series\n </label>\n\n <DashboardWizardCta\n text='Add series'\n setShowSearch={setShowSearch}\n />\n </div>\n\n <DashboardWizardContentGuideline\n text={DashboardHelper.getContentGuidelineText(WidgetTypeId.CuratedSeries, formikProps.values.templateId)}\n />\n\n <DashboardWizardContentTable\n audiences={props.audiences}\n onReorderWidgets={props.onReorderWidgets}\n content={preview.data?.content}\n onRemoveItem={id => CuratedDashboardHelper.onRemoveCuratedObject(id, formikProps)}\n canModifyContents\n />\n {showSearch && (\n <DashboardWizardSearchWidgetContentView\n dashboard={props.dashboard}\n closePopup={() => setShowSearch(false)}\n classificationId={props.classification?.id}\n presentationId={props.presentation?.id}\n onSelectItem={obj => CuratedDashboardHelper.onSelectCuratedObject(obj, formikProps)}\n selectedIds={formikProps.values.data.objectIds}\n initialResultsRequests={DashboardWizardHelper.getInitialResultsRequests(\n CuratedDashboardHelper.getDashboardTargetType(props.dashboard),\n MasterType.Series,\n props.presentation?.id,\n props.classification?.id\n )}\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { BecauseYouWatchedWidgetData, CuratedWidget, Video } from 'libs/shared/interfaces';\n\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\n\ntype BecauseYouWatchedWidget = CuratedWidget<BecauseYouWatchedWidgetData, Video[]>;\n\nconst SAMPLE_HEADING = 'Because you watched [video name]';\n\nexport function AddContentBecauseYouWatchedView(props: AddWidgetContentFormViewProps) {\n const formikProps = useFormikContextWrapper<BecauseYouWatchedWidget>();\n \n React.useEffect(() => {\n if (!props.content)\n return;\n\n formikProps.setFieldValue('content', props.content);\n }, [props.content]);\n\n return (\n <>\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={SAMPLE_HEADING}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={props.content}\n audiences={props.audiences}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n metadata={formikProps.values.metadata}\n imageCdnUrl={props.imageCdnUrl}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { CompanyClassificationVideosWidgetData, CuratedWidget, Video } from 'libs/shared/interfaces';\n\nimport { DashboardHelper } from 'shared/utils/DashboardHelper';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardCta } from 'apps/dashboard-editor/components/wizard/content-cta/DashboardWizardCta';\nimport { DashboardWizardContentGuideline } from 'apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { WidgetErrorMessage } from 'apps/dashboard-editor/components/wizard/widget-error-message/WidgetErrorMessage';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\nimport { DashboardWizardSearchWidgetContentView } from 'apps/dashboard-editor/views/wizard/search-widget-content/DashboardWizardSearchWidgetContentView';\n\ntype CompanyClassificationVideosWidget = CuratedWidget<CompanyClassificationVideosWidgetData, Video[]>;\n\nexport function AddContentCompanyClassificationVideosView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<CompanyClassificationVideosWidget>();\n\n const [ showSearch, setShowSearch ] = React.useState(false);\n\n React.useEffect(() => {\n if (props.classification && !formikProps.values.data.classifications?.length) {\n formikProps.setFieldValue('data.classifications', [{\n id: props.classification.id,\n options: {\n includeChildren: true\n }\n }]);\n }\n }, []);\n\n return (\n <>\n <FormField<CompanyClassificationVideosWidget>\n name='name'\n label='Heading'\n placeholder='Enter a widget name...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showCharacterCounter\n />\n\n <FormField<CompanyClassificationVideosWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n\n <WidgetPreviewHeader dashboard={props.dashboard} widgetTypeId={formikProps.values.widgetId} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n description={formikProps.values.description}\n widgetTypeId={formikProps.values.widgetId}\n content={props.content}\n imageCdnUrl={props.imageCdnUrl}\n metadata={formikProps.values.metadata}\n audiences={props.audiences}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n \n <WidgetErrorMessage errorMessage={formikProps.errors.data?.companyId} />\n\n <div className='d-flex justify-content-between align-items-center pt-3'>\n <label className='h5 mb-0'>\n Studio\n </label>\n\n <DashboardWizardCta\n text='Select a studio'\n setShowSearch={setShowSearch}\n />\n </div>\n\n <DashboardWizardContentGuideline\n text={DashboardHelper.getContentGuidelineText(\n WidgetTypeId.CompanyClassificationVideos,\n formikProps.values.templateId\n )}\n />\n\n <DashboardWizardContentTable\n audiences={props.audiences}\n content={props.content}\n onRemoveItem={() => formikProps.setFieldValue('data.companyId', '')}\n canModifyContents\n />\n\n {showSearch && (\n <DashboardWizardSearchWidgetContentView\n dashboard={props.dashboard}\n presentationId={props.presentation.id}\n presentationType={props.presentation.type}\n closePopup={() => setShowSearch(false)}\n onSelectItem={obj => formikProps.setFieldValue('data.companyId', obj.id)}\n selectedIds={[formikProps.values.data.companyId]}\n getCustomSearchFilters={() => ({})}\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { WizardActionInfoContainer } from 'libs/shared/components/wizard/select-action/wizard-action-info-container/WizardActionInfoContainer';\nimport { ClassificationsWidgetData, CuratedWidget, Video } from 'libs/shared/interfaces';\n\nimport { DashboardRequests } from 'shared/flight-requests/DashboardRequests';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetContentPreviewResponse } from 'apps/dashboard-editor/interfaces/data-requests/WidgetContentPreviewResponse';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\n\ntype ClassificationLatestReleasedVideoWidget = CuratedWidget<ClassificationsWidgetData, Video[]>;\n\nexport function AddContentClassificationLatestReleasedVideoView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<ClassificationLatestReleasedVideoWidget>();\n\n const preview = Flight.useBasicFetch<WidgetContentPreviewResponse<Video[]>>(\n !ObjectHelper.isEmpty(formikProps.values.data) && DashboardRequests.previewWidget(\n formikProps.values.widgetId,\n formikProps.values.data\n )\n );\n const isContentEmpty = !preview.data?.content?.length;\n\n React.useEffect(() => {\n if (formikProps.values.data?.classificationId)\n return;\n\n const data: ClassificationsWidgetData = {\n classificationId: props.classification?.id,\n presentationId: props.presentation.id\n };\n\n formikProps.setFieldValue('data', data);\n }, []);\n\n return (\n <>\n <FormField<ClassificationLatestReleasedVideoWidget>\n name='name'\n label='Heading'\n placeholder='Enter a widget name...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showCharacterCounter\n />\n\n <FormField<ClassificationLatestReleasedVideoWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n\n <WidgetPreviewHeader dashboard={props.dashboard} widgetTypeId={formikProps.values.widgetId} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n description={formikProps.values.description}\n widgetTypeId={formikProps.values.widgetId}\n content={preview.data?.content}\n imageCdnUrl={props.imageCdnUrl}\n metadata={formikProps.values.metadata}\n audiences={props.audiences}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n {isContentEmpty && (\n <WizardActionInfoContainer>\n There are no new releases for this topic.\n You may add the widget anyway and it will appear with content once new releases have been added.\n </WizardActionInfoContainer>\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { SearchResultsObject } from 'libs/shared/apps/search/interfaces';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { Classification, ClassificationMediaWidgetData, ClassificationsWidgetData, CuratedWidget, TagCollection, Video } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { SubjectMemberType } from 'shared/enums';\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardCta } from 'apps/dashboard-editor/components/wizard/content-cta/DashboardWizardCta';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\nimport { DashboardWizardSearchWidgetContentView } from 'apps/dashboard-editor/views/wizard/search-widget-content/DashboardWizardSearchWidgetContentView';\n\ntype ClassificationMediaWidget = CuratedWidget<ClassificationMediaWidgetData, Video[]>;\n\nexport function AddContentClassificationMediaView(props: AddWidgetContentFormViewProps): JSX.Element {\n const [ showSearch, setShowSearch ] = React.useState(false);\n\n const formikProps = useFormikContextWrapper<ClassificationMediaWidget>();\n\n const isTopicDashboard = CuratedDashboardHelper.isClassificationDashboard(\n CuratedDashboardHelper.getDashboardTargetInfo(props.dashboard)\n );\n \n const classificationTags = Flight.useBasicFetch<TagCollection>(\n !!props.classification && SubjectRequests.classificationMembers(props.classification.id, SubjectMemberType.Tags)\n );\n\n React.useEffect(() => {\n if (formikProps.values.data?.classificationId)\n return;\n\n const data: ClassificationsWidgetData = {\n classificationId: props.classification?.id,\n presentationId: props.presentation.id\n };\n\n formikProps.setFieldValue('data', data);\n }, []);\n\n function onSelectItem(obj: SearchResultsObject<Classification>): void {\n formikProps.setFieldValue('data', {\n presentationId: props.presentation.id,\n classificationId: obj.id\n });\n\n setFormAsTouched();\n }\n\n function onExcludeLatestVideo() {\n const formData = formikProps.values.data;\n\n if (formData.offset) {\n formikProps.setFieldValue('data', { ...formData, offset: 0 });\n } else {\n formikProps.setFieldValue('data', { ...formData, offset: 1 });\n }\n }\n\n function setFormAsTouched(): void {\n formikProps.setTouched({\n ...formikProps.touched,\n data: {\n presentationId: true,\n classificationId: true\n }\n });\n }\n\n return (\n <>\n <FormField<ClassificationMediaWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar\n showCharacterCounter\n />\n\n {isTopicDashboard && (\n <ToggleShowInTableOfContents<ClassificationMediaWidget>\n dashboard={props.dashboard}\n />\n )}\n\n <FormField<ClassificationMediaWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n\n <Checkbox\n id='excludeLatestVideo'\n checked={!!formikProps.values.data.offset}\n label='Exclude latest video'\n onChange={onExcludeLatestVideo}\n />\n\n <WidgetPreviewHeader\n dashboard={props.dashboard}\n classificationTags={classificationTags.data?.data}\n />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={props.content}\n audiences={props.audiences}\n metadata={formikProps.values.metadata}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n imageCdnUrl={props.imageCdnUrl}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n\n {!props.classification && (\n <div className='d-flex justify-content-end pt-3'>\n <DashboardWizardCta\n text='Select a topic'\n setShowSearch={setShowSearch}\n />\n </div>\n )}\n\n <DashboardWizardContentTable\n audiences={props.audiences}\n content={props.content}\n />\n\n {showSearch && (\n <DashboardWizardSearchWidgetContentView\n dashboard={props.dashboard}\n closePopup={() => setShowSearch(false)}\n classificationId={props.classification?.id}\n presentationId={props.presentation.id}\n onSelectItem={onSelectItem}\n selectedIds={[formikProps.values.data.classificationId]}\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { WizardActionInfoContainer } from 'libs/shared/components/wizard/select-action/wizard-action-info-container/WizardActionInfoContainer';\nimport { CompanyVideosWidgetData, CuratedWidget, Video } from 'libs/shared/interfaces';\n\nimport { DashboardRequests } from 'shared/flight-requests/DashboardRequests';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { ConfirmHeadingOptional } from 'apps/dashboard-editor/components/wizard/confirm-heading-optional/ConfirmHeadingOptional';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetContentPreviewResponse } from 'apps/dashboard-editor/interfaces/data-requests/WidgetContentPreviewResponse';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\n\ntype CompanyVideosWidget = CuratedWidget<CompanyVideosWidgetData, Video[]>;\n\nexport function AddContentCompanyVideosView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<CompanyVideosWidget>();\n\n const preview = Flight.useBasicFetch<WidgetContentPreviewResponse<Video[]>>(\n !ObjectHelper.isEmpty(formikProps.values.data) && DashboardRequests.previewWidget(\n formikProps.values.widgetId,\n formikProps.values.data\n )\n );\n const isContentEmpty = preview.data?.content && preview.data.content.length === 0;\n \n function onSetHeadingOptional(headingOptional: boolean) {\n formikProps.setFieldValue('metadata', { ...formikProps.values.metadata, headingOptional });\n }\n \n function onExcludeLatestVideo() {\n const formData = formikProps.values.data;\n\n if (formData.offset) {\n formikProps.setFieldValue('data', { ...formData, offset: 0 });\n } else {\n formikProps.setFieldValue('data', { ...formData, offset: 1 });\n }\n }\n\n return (\n <>\n <ConfirmHeadingOptional\n isOptional={formikProps.values.metadata.headingOptional}\n setIsOptional={onSetHeadingOptional}\n />\n \n <FormField<CompanyVideosWidget>\n name='name'\n label='Heading'\n placeholder='Enter a widget name...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showCharacterCounter\n />\n\n <FormField<CompanyVideosWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n\n <Checkbox\n id='excludeLatestVideo'\n checked={!!formikProps.values.data.offset}\n label='Exclude latest video'\n onChange={onExcludeLatestVideo}\n />\n\n <WidgetPreviewHeader dashboard={props.dashboard} widgetTypeId={formikProps.values.widgetId} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n description={formikProps.values.description}\n widgetTypeId={formikProps.values.widgetId}\n content={preview.data?.content}\n imageCdnUrl={props.imageCdnUrl}\n metadata={formikProps.values.metadata}\n audiences={props.audiences}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n {isContentEmpty && (\n <WizardActionInfoContainer>\n There are no new releases for this company.\n You may add the widget anyway and it will appear with content once new releases have been added.\n </WizardActionInfoContainer>\n )}\n\n <DashboardWizardContentTable\n audiences={props.audiences}\n content={preview.data?.content}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { ContinueWatchingVideosWidgetData, CuratedWidget, Video } from 'libs/shared/interfaces';\n\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\n\ntype ContinueWatchingVideosWidget = CuratedWidget<ContinueWatchingVideosWidgetData, Video[]>;\n\nexport function AddContentContinueWatchingView(props: AddWidgetContentFormViewProps) {\n const formikProps = useFormikContextWrapper<ContinueWatchingVideosWidget>();\n\n return (\n <>\n <FormField<ContinueWatchingVideosWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar\n showCharacterCounter\n />\n\n <FormField<ContinueWatchingVideosWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={props.content}\n audiences={props.audiences}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n metadata={formikProps.values.metadata}\n imageCdnUrl={props.imageCdnUrl}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n </>\n );\n}\n","import { Flight } from 'libs/common/react/index';\n\nimport { useFetchAll } from 'libs/shared/hooks/UseFetchAll';\n\nimport { SubjectMemberType } from 'shared/enums';\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\n\nimport { InitialRequestVideoType } from '../utils/DashboardWizardHelper';\n\nexport function useFetchClassificationMediaMembers(\n classificationId: string,\n presentationId: string,\n memberFilter: InitialRequestVideoType\n) {\n const fetch = Flight.useGetFetch();\n\n function getMemberRequest(memberType: SubjectMemberType) {\n if (!classificationId)\n return false;\n\n return (cursor?: string) => SubjectRequests.classificationMembers(\n classificationId,\n memberType,\n presentationId,\n cursor\n );\n }\n\n const videoMembers = useFetchAll(getMemberRequest(SubjectMemberType.Videos), cursor => {\n const req = getMemberRequest(SubjectMemberType.Videos);\n\n if (!req)\n return;\n\n fetch(req(cursor));\n });\n const clipMembers = useFetchAll(getMemberRequest(SubjectMemberType.Clips), cursor => {\n const req = getMemberRequest(SubjectMemberType.Clips);\n\n if (!req)\n return;\n\n fetch(req(cursor));\n });\n const interactiveMembers = useFetchAll(getMemberRequest(SubjectMemberType.Interactives), cursor => {\n const req = getMemberRequest(SubjectMemberType.Interactives);\n\n if (!req)\n return;\n\n fetch(req(cursor));\n });\n\n if (!classificationId)\n return;\n\n switch (memberFilter) {\n case 'video':\n return videoMembers.items;\n case 'clip':\n return clipMembers.items;\n case 'interactive':\n return interactiveMembers.items;\n case null: {\n if (!videoMembers.items || !clipMembers.items || !interactiveMembers.items)\n return [];\n\n return [ ...videoMembers.items, ...clipMembers.items, ...interactiveMembers.items ];\n }\n }\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { SearchIndices, SearchResultObjectTypes } from 'libs/shared/apps/search/interfaces';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { BasePaginatedCollection, CuratedMediaWidget, DashboardTargetType, Presentation, TagCollection, Video } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { SubjectMemberType } from 'shared/enums';\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\nimport { DashboardHelper } from 'shared/utils/DashboardHelper';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { ContentPartnerRequests } from 'apps/content-partners/flight-requests/ContentPartnerRequests';\nimport { PresentationRequests } from 'apps/cv-live/flight-requests/CvLivePresentationRequests';\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { ConfirmHeadingOptional } from 'apps/dashboard-editor/components/wizard/confirm-heading-optional/ConfirmHeadingOptional';\nimport { DashboardWizardCta } from 'apps/dashboard-editor/components/wizard/content-cta/DashboardWizardCta';\nimport { DashboardWizardContentGuideline } from 'apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { WidgetErrorMessage } from 'apps/dashboard-editor/components/wizard/widget-error-message/WidgetErrorMessage';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { useFetchClassificationMediaMembers } from 'apps/dashboard-editor/hooks/useFetchClassificationMediaMembers';\nimport { InitialRequestVideoType } from 'apps/dashboard-editor/utils/DashboardWizardHelper';\nimport { isWidgetHeadingRequired, WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\nimport { CustomOnSearchOptions, DashboardWizardSearchWidgetContentView } from 'apps/dashboard-editor/views/wizard/search-widget-content/DashboardWizardSearchWidgetContentView';\n\nexport function AddContentMultipleCuratedMediaView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<CuratedMediaWidget<Video[]>>();\n const [ showSearch, setShowSearch ] = React.useState(false);\n const [ initialRequestVideoType, setInitialRequestVideoType ] = React.useState<InitialRequestVideoType>(null);\n const fetchAsync = Flight.useGetFetchAsync();\n\n const { max } = DashboardHelper.getContentGuidelineMinMax(WidgetTypeId.CuratedMedia, formikProps.values.templateId);\n const disableSelectingMore = formikProps.values.templateId === WidgetTemplate.ThumbnailFixedListMediaLarge &&\n formikProps.values.data?.objectIds?.length >= max;\n\n const prefetchedInitialResults = useFetchClassificationMediaMembers(\n props.classification?.id,\n props.presentation?.id,\n initialRequestVideoType\n );\n\n const isTopicDashboard = CuratedDashboardHelper.isClassificationDashboard(\n CuratedDashboardHelper.getDashboardTargetInfo(props.dashboard)\n );\n \n const classificationTags = Flight.useBasicFetch<TagCollection>(\n !!props.classification && SubjectRequests.classificationMembers(props.classification.id, SubjectMemberType.Tags)\n );\n\n const cvLivePresentation = Flight.useBasicFetch<Presentation>(\n PresentationRequests.cvLivePresentation()\n );\n\n const headingRequired = isWidgetHeadingRequired(\n formikProps.values.widgetId,\n formikProps.values.templateId,\n formikProps.values.metadata.headingOptional\n );\n\n function onSetHeadingOptional(headingOptional: boolean) {\n formikProps.setFieldValue('metadata', { ...formikProps.values.metadata, headingOptional });\n }\n\n const context = +cvLivePresentation.data?.id === +props.presentation?.id ? 'live' : 'clickview';\n\n // for content partner dashboard, we call a custom endpoint\n const isContentPartnerDashboard = CuratedDashboardHelper.isType(props.dashboard, DashboardTargetType.PartnerProfile);\n async function onSearch(query: string, _: SearchIndices, options: CustomOnSearchOptions) {\n return fetchAsync<BasePaginatedCollection<SearchResultObjectTypes>>(\n ContentPartnerRequests.searchVideosInContentPartner(formikProps.values.data.slug, query, options.showAllVideos)\n );\n }\n\n return (\n <>\n <ConfirmHeadingOptional\n isOptional={formikProps.values.metadata.headingOptional}\n setIsOptional={onSetHeadingOptional}\n />\n\n <FormField<CuratedMediaWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n showRequiredStar={headingRequired}\n showCharacterCounter\n />\n {isTopicDashboard && (\n <ToggleShowInTableOfContents<CuratedMediaWidget>\n dashboard={props.dashboard}\n />\n )}\n \n <FormField<CuratedMediaWidget>\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n <WidgetPreviewHeader\n dashboard={props.dashboard}\n classificationTags={classificationTags.data?.data}\n />\n <WidgetContainerView\n location='curator'\n description={formikProps.values.description}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n id={formikProps.values.id}\n name={formikProps.values.name}\n content={props.content}\n imageCdnUrl={props.imageCdnUrl}\n audiences={props.audiences}\n metadata={formikProps.values.metadata}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n <WidgetErrorMessage errorMessage={formikProps.errors.data?.objectIds} />\n\n <div className='d-flex justify-content-between align-items-center pt-3'>\n <label className='h5 mb-0'>\n Videos\n </label>\n\n <DashboardWizardCta\n text='Add videos'\n setShowSearch={setShowSearch}\n />\n </div>\n \n <DashboardWizardContentGuideline\n text={DashboardHelper.getContentGuidelineText(WidgetTypeId.CuratedMedia, formikProps.values.templateId)}\n />\n\n <DashboardWizardContentTable\n audiences={props.audiences}\n onReorderWidgets={props.onReorderWidgets}\n content={props.content}\n onRemoveItem={id => CuratedDashboardHelper.onRemoveCuratedObject(id, formikProps)}\n canModifyContents\n context={context}\n />\n\n {showSearch && (\n <DashboardWizardSearchWidgetContentView\n dashboard={props.dashboard}\n closePopup={() => setShowSearch(false)}\n classificationId={props.classification?.id}\n presentationId={props.presentation?.id}\n onSelectItem={obj => CuratedDashboardHelper.onSelectCuratedObject(obj, formikProps)}\n selectedIds={formikProps.values.data.objectIds}\n prefetchedInitialResults={prefetchedInitialResults}\n disableSelectingMore={disableSelectingMore}\n setInitialRequestVideoType={setInitialRequestVideoType}\n initialRequestVideoType={initialRequestVideoType}\n hasVideoTypeFilter\n hasShowAllVideosToggle={isContentPartnerDashboard}\n customOnSearch={isContentPartnerDashboard ? onSearch : undefined}\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { SearchIndices, SearchResultObjectTypes, SearchResultsObject } from 'libs/shared/apps/search/interfaces';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { BasePaginatedCollection, CuratedMediaWidget, DashboardTargetType, Video } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { ContentPartnerProfile } from 'shared/interfaces/models/ContentPartnerProfile';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { ContentPartnerRequests } from 'apps/content-partners/flight-requests/ContentPartnerRequests';\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardCta } from 'apps/dashboard-editor/components/wizard/content-cta/DashboardWizardCta';\nimport { DashboardWizardContentGuideline } from 'apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { WidgetErrorMessage } from 'apps/dashboard-editor/components/wizard/widget-error-message/WidgetErrorMessage';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { useFetchClassificationMediaMembers } from 'apps/dashboard-editor/hooks/useFetchClassificationMediaMembers';\nimport { InitialRequestVideoType } from 'apps/dashboard-editor/utils/DashboardWizardHelper';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\nimport { CustomOnSearchOptions, DashboardWizardSearchWidgetContentView } from 'apps/dashboard-editor/views/wizard/search-widget-content/DashboardWizardSearchWidgetContentView';\n\nexport function AddContentSingleCuratedMediaView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<CuratedMediaWidget<Video[]>>();\n const [ initialRequestVideoType, setInitialRequestVideoType ] = React.useState<InitialRequestVideoType>(null);\n const fetchAsync = Flight.useGetFetchAsync();\n\n const [ showSearch, setShowSearch ] = React.useState(false);\n\n const prefetchedInitialResults = useFetchClassificationMediaMembers(\n props.classification?.id,\n props.presentation?.id,\n initialRequestVideoType\n );\n\n function onSelectItem(obj: SearchResultsObject<Video>): void {\n formikProps.setFieldValue('data', { ...formikProps.values.data, objectIds: [obj.id]});\n\n setFormAsTouched();\n }\n\n function setFormAsTouched(): void {\n formikProps.setTouched({\n ...formikProps.touched,\n data: {\n objectIds: true\n }\n });\n }\n\n const isTopicDashboard = CuratedDashboardHelper.isClassificationDashboard(\n CuratedDashboardHelper.getDashboardTargetInfo(props.dashboard)\n );\n\n // for content partner dashboard, we call a custom endpoint\n const isContentPartnerDashboard = CuratedDashboardHelper.isType(props.dashboard, DashboardTargetType.PartnerProfile);\n const contentPartner = Flight.useBasicFetch<ContentPartnerProfile>(\n isContentPartnerDashboard &&\n ContentPartnerRequests.getContentPartnerBySlug(formikProps.values.data.slug)\n );\n async function onSearch(query: string, _: SearchIndices, options: CustomOnSearchOptions) {\n if (!contentPartner.data) return;\n return fetchAsync<BasePaginatedCollection<SearchResultObjectTypes>>(\n ContentPartnerRequests.searchVideosInContentPartner(formikProps.values.data.slug, query, options.showAllVideos)\n );\n }\n\n return (\n <>\n <FormField<CuratedMediaWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showCharacterCounter\n />\n\n {isTopicDashboard && (\n <ToggleShowInTableOfContents<CuratedMediaWidget>\n dashboard={props.dashboard}\n />\n )}\n \n <FormField<CuratedMediaWidget>\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n description={formikProps.values.description}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n id={formikProps.values.id}\n name={formikProps.values.name}\n content={props.content}\n audiences={props.audiences}\n imageCdnUrl={props.imageCdnUrl}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n metadata={formikProps.values.metadata}\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n <WidgetErrorMessage errorMessage={formikProps.errors.data?.objectIds} />\n\n <div className='d-flex justify-content-end pt-3'>\n <DashboardWizardCta\n text='Select a video'\n setShowSearch={setShowSearch}\n />\n </div>\n\n <DashboardWizardContentGuideline />\n\n {showSearch && (\n <DashboardWizardSearchWidgetContentView\n dashboard={props.dashboard}\n closePopup={() => setShowSearch(false)}\n classificationId={props.classification?.id}\n presentationId={props.presentation?.id}\n onSelectItem={onSelectItem}\n selectedIds={formikProps.values.data.objectIds}\n prefetchedInitialResults={prefetchedInitialResults}\n setInitialRequestVideoType={setInitialRequestVideoType}\n initialRequestVideoType={initialRequestVideoType}\n hasVideoTypeFilter\n customOnSearch={isContentPartnerDashboard ? onSearch : undefined}\n hasShowAllVideosToggle={isContentPartnerDashboard}\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { CuratedMediaWidget, Video } from 'libs/shared/interfaces';\n\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { AddContentMultipleCuratedMediaView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-curated-media/AddContentMultipleCuratedMediaView';\nimport { AddContentSingleCuratedMediaView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-curated-media/AddContentSingleCuratedMediaView';\n\nexport function AddContentCuratedMediaViewContainer(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<CuratedMediaWidget<Video[]>>();\n const templateId = formikProps.values.templateId;\n\n if (templateId === WidgetTemplate.ThumbnailFeaturedMedia || templateId === WidgetTemplate.ThumbnailHeroMedia)\n return <AddContentSingleCuratedMediaView {...props} />;\n \n return <AddContentMultipleCuratedMediaView {...props} />;\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { WizardActionInfoContainer } from 'libs/shared/components/wizard/select-action/wizard-action-info-container/WizardActionInfoContainer';\nimport { CuratedWidget, Video } from 'libs/shared/interfaces';\n\nimport { DashboardRequests } from 'shared/flight-requests/DashboardRequests';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetContentPreviewResponse } from 'apps/dashboard-editor/interfaces/data-requests/WidgetContentPreviewResponse';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\n\nexport function AddContentLatestReleasedCompanyVideoView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<CuratedWidget>();\n\n const preview = Flight.useBasicFetch<WidgetContentPreviewResponse<Video[]>>(\n !ObjectHelper.isEmpty(formikProps.values.data) && DashboardRequests.previewWidget(\n formikProps.values.widgetId,\n formikProps.values.data\n )\n );\n const isContentEmpty = !preview.data?.content;\n\n return (\n <>\n <FormField<CuratedWidget>\n name='name'\n label='Heading'\n placeholder='Enter a widget name...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showCharacterCounter\n />\n\n <FormField<CuratedWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n\n <WidgetPreviewHeader dashboard={props.dashboard} widgetTypeId={formikProps.values.widgetId} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n description={formikProps.values.description}\n widgetTypeId={formikProps.values.widgetId}\n content={preview.data?.content}\n imageCdnUrl={props.imageCdnUrl}\n metadata={formikProps.values.metadata}\n audiences={props.audiences}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n isEditing\n commonVideoProps={props.commonVideoProps}\n />\n {isContentEmpty && (\n <WizardActionInfoContainer>\n There are no new releases for this company.\n You may add the widget anyway and it will appear with content once new releases have been added.\n </WizardActionInfoContainer>\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { WizardActionInfoContainer } from 'libs/shared/components/wizard/select-action/wizard-action-info-container/WizardActionInfoContainer';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { CuratedWidget, LatestReleasedVideosWidgetData, Video } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { ImageSelect } from 'shared/components';\nimport { Actions, AppChannels } from 'shared/constants';\nimport { DashboardRequests } from 'shared/flight-requests/DashboardRequests';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardContentGuideline } from 'apps/dashboard-editor/components/wizard/content-guideline/DashboardWizardContentGuideline';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { WidgetContentPreviewResponse } from 'apps/dashboard-editor/interfaces/data-requests/WidgetContentPreviewResponse';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\n\ntype LatestReleasedVideosWidget = CuratedWidget<LatestReleasedVideosWidgetData, Video[]>;\n\nexport function AddContentLatestReleasedVideosView(props: AddWidgetContentFormViewProps): JSX.Element {\n const formikProps = useFormikContextWrapper<LatestReleasedVideosWidget>();\n\n const { from, to } = CuratedDashboardHelper.getLatestReleasedTimeRange();\n\n const preview = Flight.useBasicFetch<WidgetContentPreviewResponse<Video[]>>(\n !ObjectHelper.isEmpty(formikProps.values.data) && DashboardRequests.previewWidget(\n formikProps.values.widgetId,\n formikProps.values.data,\n {\n from,\n to\n }\n )\n );\n const isContentEmpty = preview.data?.content && preview.data.content.length === 0;\n\n React.useEffect(() => {\n const data: LatestReleasedVideosWidgetData = {\n presentationId: props.presentation.id\n };\n\n formikProps.setFieldValue('data', data);\n }, []);\n\n const isTopicDashboard = CuratedDashboardHelper.isClassificationDashboard(\n CuratedDashboardHelper.getDashboardTargetInfo(props.dashboard)\n );\n\n return (\n <>\n <FormField<LatestReleasedVideosWidget>\n name='name'\n label='Banner heading'\n placeholder='Enter a banner heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n autoFocus\n showRequiredStar\n showCharacterCounter\n />\n\n {isTopicDashboard && (\n <ToggleShowInTableOfContents<LatestReleasedVideosWidget>\n dashboard={props.dashboard}\n />\n )}\n\n <ImageSelect\n imageType={ImageType.Banners}\n fieldName='metadata.imageId'\n label='Banner image'\n setSelectedImage={image => {\n formikProps.setFieldValue('metadata', { ...formikProps.values.metadata, imageId: image.id });\n }}\n showRequiredStar\n uploadAppLink={{\n application: AppChannels.DASHBOARD_EDITOR,\n action: Actions.DashboardEditor.ADD_CONTENT_IMAGE_UPLOAD\n }}\n />\n <WidgetPreviewHeader dashboard={props.dashboard} />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n description={formikProps.values.description}\n widgetTypeId={formikProps.values.widgetId}\n content={preview.data?.content}\n imageCdnUrl={props.imageCdnUrl}\n metadata={formikProps.values.metadata}\n audiences={props.audiences}\n isEditing\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n resourceThumbnailFallbackImageUrl=''\n commonVideoProps={props.commonVideoProps}\n />\n {isContentEmpty && (\n <WizardActionInfoContainer>\n There are no new releases for this presentation.\n You may add the widget anyway and it will appear with content once new releases have been added.\n </WizardActionInfoContainer>\n )}\n <DashboardWizardContentGuideline />\n\n <DashboardWizardContentTable\n audiences={props.audiences}\n content={preview.data?.content}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { SearchResultsObject } from 'libs/shared/apps/search/interfaces';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { CuratedWidget, Playlist, PlaylistMediaWidgetData, TagCollection, Video, VideoCollection } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { SubjectMemberType } from 'shared/enums';\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\nimport { useCommonVideoProps } from 'shared/hooks/UseCommonVideoProps';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardCta } from 'apps/dashboard-editor/components/wizard/content-cta/DashboardWizardCta';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { DashboardWizardHelper } from 'apps/dashboard-editor/utils/DashboardWizardHelper';\nimport { DashboardWizardSearchWidgetContentView } from 'apps/dashboard-editor/views/wizard/search-widget-content/DashboardWizardSearchWidgetContentView';\nimport { PlaylistRequests } from 'apps/playlists/flight-requests/CuratorPlaylistRequests';\n\ntype PlaylistMediaWidget = CuratedWidget<PlaylistMediaWidgetData, Video[]>;\n\nexport function AddContentPlaylistMediaView(props: AddWidgetContentFormViewProps): JSX.Element {\n const [ showSearch, setShowSearch ] = React.useState(false);\n const formikProps = useFormikContextWrapper<PlaylistMediaWidget>();\n\n const playlistId = formikProps.values.data?.playlistId;\n\n const { commonVideoProps } = useCommonVideoProps();\n\n const playlist = Flight.useBasicFetch<Playlist>(!!playlistId &&\n PlaylistRequests.playlist(playlistId));\n const videos = Flight.useBasicFetch<VideoCollection>(!!playlistId &&\n PlaylistRequests.playlistVideosWithMetadata(playlistId, props.presentation.id));\n\n const classificationTags = Flight.useBasicFetch<TagCollection>(\n !!props.classification?.id && SubjectRequests.classificationMembers(props.classification.id, SubjectMemberType.Tags)\n );\n\n React.useEffect(() => {\n if (!playlist.data)\n return;\n\n formikProps.setFieldValue('name', playlist.data.name || '');\n formikProps.setFieldValue('description', playlist.data.description || '');\n }, [playlist.data]);\n\n function onSelectItem(playlist: SearchResultsObject<Playlist>): void {\n formikProps.setFieldValue('data', { ...formikProps.values.data, playlistId: playlist.id });\n\n setFormAsTouched();\n }\n\n function setFormAsTouched(): void {\n formikProps.setTouched({\n ...formikProps.touched,\n data: {\n playlistId: true\n }\n });\n }\n\n function getDescriptionHelper() {\n const descriptionHelper: {\n placeholder: string,\n className: string\n } = {\n placeholder: 'Select a playlist',\n className: ''\n };\n\n // When a playlist is selected and it has no description, we show different placeholder\n if (formikProps.values.data.playlistId && !playlist.data?.description) {\n descriptionHelper.placeholder = 'This playlist has no description';\n descriptionHelper.className = 'fst-italic';\n }\n return descriptionHelper;\n }\n\n const descriptionHelper = getDescriptionHelper();\n\n const isTopicDashboard = CuratedDashboardHelper.isClassificationDashboard(\n CuratedDashboardHelper.getDashboardTargetInfo(props.dashboard)\n );\n\n return (\n <>\n <FormField<PlaylistMediaWidget>\n name='name'\n label='Heading'\n placeholder='Select a playlist'\n autoFocus\n disabled\n />\n\n {isTopicDashboard && (\n <ToggleShowInTableOfContents<PlaylistMediaWidget>\n dashboard={props.dashboard}\n />\n )}\n \n <FormField<PlaylistMediaWidget>\n as='textarea'\n rows={1}\n name='description'\n label='Description'\n placeholder={descriptionHelper.placeholder}\n className={descriptionHelper.className}\n disabled\n />\n <WidgetPreviewHeader\n dashboard={props.dashboard}\n classificationTags={classificationTags.data?.data}\n />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={videos.data?.data}\n audiences={props.audiences}\n metadata={formikProps.values.metadata}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n imageCdnUrl={props.imageCdnUrl}\n resourceThumbnailFallbackImageUrl=''\n isEditing\n commonVideoProps={commonVideoProps}\n />\n\n <div className='d-flex justify-content-end pt-3'>\n <DashboardWizardCta\n text='Select a playlist'\n setShowSearch={setShowSearch}\n />\n </div>\n\n <DashboardWizardContentTable audiences={props.audiences} content={videos.data?.data} />\n\n {showSearch && (\n <DashboardWizardSearchWidgetContentView\n dashboard={props.dashboard}\n closePopup={() => setShowSearch(false)}\n classificationId={props.classification?.id}\n presentationId={props.presentation.id}\n onSelectItem={onSelectItem}\n selectedIds={[formikProps.values.data.playlistId]}\n initialResultsRequests={DashboardWizardHelper.getInitialResultsRequests(\n CuratedDashboardHelper.getDashboardTargetType(props.dashboard),\n MasterType.Playlist,\n props.presentation.id,\n props.classification?.id\n )}\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { SearchResultsObject } from 'libs/shared/apps/search/interfaces';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { CuratedWidget, Playlist, SeriesMediaWidgetData, TagCollection, Video } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { SubjectMemberType } from 'shared/enums';\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\nimport { useCommonVideoProps } from 'shared/hooks/UseCommonVideoProps';\nimport { MockHasPermissions } from 'shared/utils/MockHasPermissions';\n\nimport { WidgetPreviewHeader } from 'apps/dashboard-editor/components/widget-preview-header/WidgetPreviewHeader';\nimport { DashboardWizardCta } from 'apps/dashboard-editor/components/wizard/content-cta/DashboardWizardCta';\nimport { DashboardWizardContentTable } from 'apps/dashboard-editor/components/wizard/content-table/DashboardWizardContentTable';\nimport { ToggleShowInTableOfContents } from 'apps/dashboard-editor/components/wizard/toggle-show-in-table-of-contents/ToggleShowInTableOfContents';\nimport { WidgetErrorMessage } from 'apps/dashboard-editor/components/wizard/widget-error-message/WidgetErrorMessage';\nimport { AddWidgetContentFormViewProps } from 'apps/dashboard-editor/constants/CuratorWidgetTypeIdConfig';\nimport { DashboardWizardHelper } from 'apps/dashboard-editor/utils/DashboardWizardHelper';\nimport { WidgetValidationConstants } from 'apps/dashboard-editor/validation/DashboardWizardValidationSchema';\nimport { DashboardWizardSearchWidgetContentView } from 'apps/dashboard-editor/views/wizard/search-widget-content/DashboardWizardSearchWidgetContentView';\n\ntype SortOption = 'seriesSort' | 'reverseSeriesSort' | 'newest' | 'oldest' | 'atoz' | 'ztoa' | 'timestamp';\n\nconst SORT_OPTIONS: Record<SortOption, string> = {\n timestamp: 'Recently added to series',\n reverseSeriesSort: 'Latest episode',\n seriesSort: 'Earliest episode',\n newest: 'Recently uploaded',\n oldest: 'Oldest uploads',\n atoz: 'A-Z',\n ztoa: 'Z-A'\n};\n\nfunction deriveSortOption(widget: SeriesMediaWidget): SortOption {\n if (!widget.data.options?.sort)\n return null;\n\n switch (widget.data.options.sort) {\n case 'seriesSort':\n return widget.data.options.order === 'ASC' ? 'seriesSort' : 'reverseSeriesSort';\n case 'dateCreated':\n return widget.data.options.order === 'ASC' ? 'oldest' : 'newest';\n case 'name':\n return widget.data.options.order === 'ASC' ? 'atoz' : 'ztoa';\n case 'timestamp':\n return 'timestamp';\n }\n}\n\ntype SeriesMediaWidget = CuratedWidget<SeriesMediaWidgetData, Video[]>;\n\nexport function AddContentSeriesMediaView(props: AddWidgetContentFormViewProps): JSX.Element {\n const [ showSearch, setShowSearch ] = React.useState(false);\n const formikProps = useFormikContextWrapper<SeriesMediaWidget>();\n\n const { commonVideoProps } = useCommonVideoProps();\n\n const [ sortOption, setSortOption ] = React.useState<SortOption>(deriveSortOption(formikProps.values));\n\n const classificationTags = Flight.useBasicFetch<TagCollection>(\n !!props.classification?.id && SubjectRequests.classificationMembers(props.classification.id, SubjectMemberType.Tags)\n );\n\n function onSelectItem(playlist: SearchResultsObject<Playlist>): void {\n formikProps.setFieldValue('data', { ...formikProps.values.data, seriesId: playlist.id });\n\n setFormAsTouched();\n }\n\n function setFormAsTouched(): void {\n formikProps.setTouched({\n ...formikProps.touched,\n data: {\n seriesId: true\n }\n });\n }\n\n function onSelectSortOption(sortOption: SortOption): void {\n if (!sortOption) {\n formikProps.setFieldValue('data.options.sort', null);\n formikProps.setFieldValue('data.options.order', null);\n return;\n }\n\n switch (sortOption) {\n case 'seriesSort': {\n formikProps.setFieldValue('data.options.sort', 'seriesSort');\n formikProps.setFieldValue('data.options.order', 'ASC');\n break;\n }\n\n case 'reverseSeriesSort': {\n formikProps.setFieldValue('data.options.sort', 'seriesSort');\n formikProps.setFieldValue('data.options.order', 'DESC');\n break;\n }\n\n case 'newest': {\n formikProps.setFieldValue('data.options.sort', 'dateCreated');\n formikProps.setFieldValue('data.options.order', 'DESC');\n break;\n }\n\n case 'oldest': {\n formikProps.setFieldValue('data.options.sort', 'dateCreated');\n formikProps.setFieldValue('data.options.order', 'ASC');\n break;\n }\n\n case 'atoz': {\n formikProps.setFieldValue('data.options.sort', 'name');\n formikProps.setFieldValue('data.options.order', 'ASC');\n break;\n }\n\n case 'ztoa': {\n formikProps.setFieldValue('data.options.sort', 'name');\n formikProps.setFieldValue('data.options.order', 'DESC');\n break;\n }\n\n case 'timestamp': {\n formikProps.setFieldValue('data.options.sort', 'timestamp');\n formikProps.setFieldValue('data.options.order', 'DESC');\n break;\n }\n }\n }\n\n const isTopicDashboard = CuratedDashboardHelper.isClassificationDashboard(\n CuratedDashboardHelper.getDashboardTargetInfo(props.dashboard)\n );\n\n return (\n <>\n <FormField<SeriesMediaWidget>\n name='name'\n label='Heading'\n placeholder='Enter a heading...'\n maxLength={WidgetValidationConstants.MAX_NAME_LENGTH}\n showRequiredStar\n autoFocus\n showCharacterCounter\n />\n\n {isTopicDashboard && (\n <ToggleShowInTableOfContents<SeriesMediaWidget>\n dashboard={props.dashboard}\n />\n )}\n \n <FormField<SeriesMediaWidget>\n name='description'\n label='Description'\n placeholder='Enter a description...'\n maxLength={WidgetValidationConstants.MAX_DESCRIPTION_LENGTH}\n showCharacterCounter\n />\n\n <FormField<SeriesMediaWidget>\n label='Sort by'\n name='sortOption'\n as='select'\n value={sortOption || 'none'}\n showRequiredStar\n onChange={(e: React.ChangeEvent<HTMLSelectElement>) => {\n if (e.target.value === 'none')\n return;\n\n setSortOption(e.target.value as SortOption);\n onSelectSortOption(e.target.value as SortOption);\n }}\n >\n <option key='none' value='none' disabled>Select an option...</option>\n {Object.entries(SORT_OPTIONS).map(([ sortOption, label ]) => {\n return <option key={sortOption} value={sortOption}>{label}</option>;\n })}\n </FormField>\n <div className='pt-3'>\n <WidgetErrorMessage errorMessage={formikProps.errors.data?.options?.order} />\n </div>\n\n <WidgetPreviewHeader\n dashboard={props.dashboard}\n classificationTags={classificationTags.data?.data}\n />\n <WidgetContainerView\n location='curator'\n name={formikProps.values.name}\n id={formikProps.values.id}\n templateId={formikProps.values.templateId}\n widgetTypeId={formikProps.values.widgetId}\n description={formikProps.values.description}\n content={props.content}\n audiences={props.audiences}\n metadata={formikProps.values.metadata}\n hasLocalPermissions={() => true}\n preferences={[]}\n hasPermissions={MockHasPermissions}\n imageCdnUrl={props.imageCdnUrl}\n resourceThumbnailFallbackImageUrl=''\n isEditing\n commonVideoProps={commonVideoProps}\n />\n\n <div className='d-flex justify-content-end pt-3'>\n <DashboardWizardCta\n text='Select a series'\n setShowSearch={setShowSearch}\n />\n </div>\n\n <DashboardWizardContentTable audiences={props.audiences} content={props.content} />\n\n {showSearch && (\n <DashboardWizardSearchWidgetContentView\n dashboard={props.dashboard}\n closePopup={() => setShowSearch(false)}\n classificationId={props.classification?.id}\n presentationId={props.presentation?.id}\n onSelectItem={onSelectItem}\n selectedIds={[formikProps.values.data.seriesId]}\n initialResultsRequests={DashboardWizardHelper.getInitialResultsRequests(\n CuratedDashboardHelper.getDashboardTargetType(props.dashboard),\n MasterType.Series,\n props.presentation?.id,\n props.classification?.id\n )}\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AllSearchIndicesVideoStyle, SearchIndices } from 'libs/shared/apps/search/interfaces';\nimport { ButtonIcon } from 'libs/shared/constants/WidgetThemingConstants';\nimport { CuratorGroup } from 'libs/shared/enums/CuratorGroup';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { SettingsHash } from 'libs/shared/hooks/useSettings';\nimport { CalendarSvg } from 'libs/shared/images/svg/objects/CalendarSvg';\nimport { PlaylistSvg } from 'libs/shared/images/svg/objects/PlaylistSvg';\nimport { PopcornSvg } from 'libs/shared/images/svg/objects/PopcornSvg';\nimport { QuestionMarkSvg } from 'libs/shared/images/svg/objects/QuestionMarkSvg';\nimport { SchoolSvg } from 'libs/shared/images/svg/objects/SchoolSvg';\nimport { SpeechSvg } from 'libs/shared/images/svg/objects/SpeechSvg';\nimport { VideoSvg } from 'libs/shared/images/svg/objects/VideoSvg';\nimport { WidgetAllVideosSvg } from 'libs/shared/images/svg/widgets/WidgetAllVideosSvg';\nimport { WidgetAuthorReviewerSvg } from 'libs/shared/images/svg/widgets/WidgetAuthorReviewerSvg';\nimport { WidgetBecauseYouWatchedSvg } from 'libs/shared/images/svg/widgets/WidgetBecauseYouWatchedSvg';\nimport { WidgetBlurbSvg } from 'libs/shared/images/svg/widgets/WidgetBlurbSvg';\nimport { WidgetClassificationLatestReleasedVideosSvg } from 'libs/shared/images/svg/widgets/WidgetClassificationLatestReleasedVideosSvg';\nimport { WidgetCollectionVideosSvg } from 'libs/shared/images/svg/widgets/WidgetCollectionVideosSvg';\nimport { WidgetCompanyVideosSvg } from 'libs/shared/images/svg/widgets/WidgetCompanyVideosSvg';\nimport { WidgetContinueWatchingSvg } from 'libs/shared/images/svg/widgets/WidgetContinueWatchingSvg';\nimport { WidgetCuratedMultimediaSvg } from 'libs/shared/images/svg/widgets/WidgetCuratedMultimediaSvg';\nimport { WidgetLatestReleasedVideosSvg } from 'libs/shared/images/svg/widgets/WidgetLatestReleasedVideosSvg';\nimport { WidgetListOfChildrenTopicsSvg } from 'libs/shared/images/svg/widgets/WidgetListOfChildrenTopicsSvg';\nimport { WidgetNetworkSvg } from 'libs/shared/images/svg/widgets/WidgetNetworkSvg';\nimport { WidgetPersonalisedTopicsSvg } from 'libs/shared/images/svg/widgets/WidgetPersonalisedTopicsSvg';\nimport { WidgetRecentlyAddedSvg } from 'libs/shared/images/svg/widgets/WidgetRecentlyAddedSvg';\nimport { WidgetSeasonalClassificationMediaSvg } from 'libs/shared/images/svg/widgets/WidgetSeasonalClassificationMediaSvg';\nimport { WidgetSeriesSvg } from 'libs/shared/images/svg/widgets/WidgetSeriesSvg';\nimport { WidgetTopicSvg } from 'libs/shared/images/svg/widgets/WidgetTopicSvg';\nimport { WidgetTrendingClassificationsMediaSvg } from 'libs/shared/images/svg/widgets/WidgetTrendingClassificationsMediaSvg';\nimport { WidgetTrendingClassificationsSvg } from 'libs/shared/images/svg/widgets/WidgetTrendingClassificationsSvg';\nimport { WidgetVideosSvg } from 'libs/shared/images/svg/widgets/WidgetVideosSvg';\nimport { AuthorReviewerWidgetData, Classification, CompanyClassificationVideosWidgetData, CompanyDashboardInfo, CuratedDashboard, CuratedWidgetContent, CuratedWidgetCtaAppLink, CuratedWidgetData, DashboardTargetInfo, DashboardTargetType, ParentAndChildClassificationsWidgetData, Presentation, PresentationAudience, SeriesMediaWidgetData, WidgetMetadata } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { SvgIcon } from 'libs/shared/utils/SvgHelper';\n\nimport { AddContentAuthorReviewerView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-author-reviewer/AddContentAuthorReviewerView';\nimport { AddContentBlurbView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-blurb/AddContentBlurbView';\nimport { AddContentFaqView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-faq/AddContentFaqView';\nimport { AddContentFeedbackView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/blurb/add-content-feedback/AddContentFeedbackView';\nimport { AddContentClassificationsContainerView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/add-content-classifications/AddContentClassificationsContainerView';\nimport { AddContentClassificationsWithChildrenView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/add-content-classifications-with-children/AddContentClassificationsWithChildrenView';\nimport { AddContentCuratedClassificationsViewContainer } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/add-content-curated-classifications/AddContentCuratedClassificationsViewContainer';\nimport { AddContentPersonalisedTopicsView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/add-content-personalised-topics/AddContentPersonalisedTopicsView';\nimport { AddContentClassificationLatestReleasedVideosView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/latest-released-videos/AddContentClassificationLatestVideosView';\nimport { AddContentSpecialEventClassificationsView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/classifications/special-event-classifications/AddContentSpecialEventClassificationsView';\nimport { AddContentContentPartnerVideoView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/content-partner/add-content-content-partner-video/AddContentContentPartnerVideoView';\nimport { AddContentCuratedContentPartnersView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/content-partner/AddContentCuratedContentPartnersView';\nimport { AddUpcomingLivestreamsView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/livestreams/add-upcoming-livestreams/AddUpcomingLivestreamsView';\nimport { AddContentCuratedMultimediaView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/multimedia/add-content-curated-multimedia/AddContentCuratedMultimediaView';\nimport { AddContentCuratedCompaniesView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/network/add-content-curated-companies/AddContentCuratedCompanies';\nimport { AddContentCuratedPlaylistsView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/playlists/add-content-curated-playlists/AddContentCuratedPlaylistsView';\nimport { AddContentPresentationsView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/presentations/add-content-presentations/AddContentPresentationsView';\nimport { AddContentRatingsView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/search-filter/add-content-ratings/AddContentRatingsView';\nimport { AddContentCuratedSeriesView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/series/add-content-curated-series/AddContentCuratedSeriesView';\nimport { AddContentBecauseYouWatchedView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-because-you-watched/AddContentBecauseYouWatchedView';\nimport { AddContentCompanyClassificationVideosView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-classification-company-videos/AddContentCompanyClassificationVideosView';\nimport { AddContentClassificationLatestReleasedVideoView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-classification-latest-released-video/AddContentClassificationLatestReleasedVideoView';\nimport { AddContentClassificationMediaView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-classification-media/AddContentClassificationMediaView';\nimport { AddContentCompanyVideosView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-company-videos/AddContentCompanyVideos';\nimport { AddContentContinueWatchingView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-continue-watching/AddContentContinueWatchingView';\nimport { AddContentCuratedMediaViewContainer } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-curated-media/AddContentCuratedMediaView';\nimport { AddContentLatestReleasedCompanyVideoView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-latest-company-video/AddContentLatestCompanyVideo';\nimport { AddContentLatestReleasedVideosView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-latest-released-videos/AddContentLatestReleasedVideos';\nimport { AddContentPlaylistMediaView } from 'apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-playlist-media/AddContentPlaylistMediaView';\n\nimport { AddContentSeriesMediaView } from '../views/wizard/dashboard-wizard-add-content/add-content-forms/videos/add-content-series-media/AddContentSeriesMediaView';\n\nconst bgIndigo = 'bg-indigo';\nconst bgPurple = 'bg-purple';\nconst bgNavy = 'bg-navy';\nconst bgCyan = 'bg-cyan';\nconst bgPink = 'bg-pink';\nconst bgGreen = 'bg-green';\nconst bgBlue = 'bg-blue';\nconst bgYellow = 'bg-yellow';\n\nconst videoGroup = 'Videos';\nconst multimediaGroup = 'Multimedia';\nconst topicsGroup = 'Topics';\nconst seriesGroup = 'Series';\nconst playlistGroup = 'Playlists';\nconst blurbGroup = 'Blurbs';\nconst searchFilterGroup = 'Search filters';\nconst networkGroup = 'Networks';\nconst presentationsGroup = 'Presentations';\nconst livestreamsGroup = 'Livestreams';\n\ntype CuratorWidgetTypeIdConfigMap = Record<WidgetTypeId, CuratorWidgetTypeIdConfigType>;\n\nexport interface AddWidgetContentFormViewProps {\n dashboard: CuratedDashboard;\n audiences: PresentationAudience[];\n presentation: Presentation;\n isEditing: boolean;\n onReorderWidgets: (content: CuratedWidgetContent) => void;\n content?: CuratedWidgetContent;\n classification?: Classification;\n imageCdnUrl?: string;\n availablePresentations: Presentation[];\n settings: SettingsHash;\n commonVideoProps: CommonVideoProps;\n customResultRequest?: Flight.Request;\n}\n\ninterface CuratorWidgetTypeIdConfigType {\n icon: SvgIcon;\n bgColourClass: string;\n groupName?: string;\n displayName?: string;\n searchIndices?: SearchIndices[];\n formView?: (props: AddWidgetContentFormViewProps) => React.ReactElement;\n getInitialData?: (targetInfo: DashboardTargetInfo, templateId: WidgetTemplate) => HashObject;\n getInitialMetadata?: (targetInfo: DashboardTargetInfo, templateId: WidgetTemplate) => Partial<WidgetMetadata>;\n canFetchPreview: (widgetData: CuratedWidgetData, targetInfo: DashboardTargetInfo) => boolean;\n targets: {\n [ProductId.Primary]?: Partial<Record<DashboardTargetType, boolean>>,\n [ProductId.StreamableLearning]?: Partial<Record<DashboardTargetType, boolean>>\n };\n groups: CuratorGroup[];\n}\n\nexport const CuratorWidgetTypeIdConfig: CuratorWidgetTypeIdConfigMap = {\n [WidgetTypeId.CuratedMedia]: {\n icon: VideoSvg,\n bgColourClass: bgNavy,\n groupName: videoGroup,\n displayName: 'Video',\n searchIndices: AllSearchIndicesVideoStyle,\n formView: AddContentCuratedMediaViewContainer,\n canFetchPreview: (widgetData: CuratedWidgetData) => {\n return !!widgetData.objectIds?.length;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.MoviesAndTv]: true,\n [DashboardTargetType.Classification]: true,\n [DashboardTargetType.Discover]: true,\n [DashboardTargetType.Company]: true,\n [DashboardTargetType.PartnerProfile]: true\n },\n [ProductId.StreamableLearning]: {\n [DashboardTargetType.Discover]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator, CuratorGroup.StreamableCurator ]\n },\n \n // All media, and sorted with latest publish date\n [WidgetTypeId.ClassificationMedia]: {\n icon: WidgetRecentlyAddedSvg,\n bgColourClass: bgNavy,\n groupName: videoGroup,\n displayName: 'Recently added videos in a topic',\n searchIndices: ['classification'],\n formView: AddContentClassificationMediaView,\n canFetchPreview: (widgetData: CuratedWidgetData) => {\n return !!widgetData.classificationId;\n },\n targets: {\n [ProductId.StreamableLearning]: {\n [DashboardTargetType.Classification]: true\n },\n [ProductId.Primary]: {\n [DashboardTargetType.Discover]: false\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator, CuratorGroup.StreamableCurator ]\n },\n\n [WidgetTypeId.PlaylistMedia]: {\n icon: WidgetCollectionVideosSvg,\n bgColourClass: bgNavy,\n groupName: videoGroup,\n displayName: 'Playlist videos',\n searchIndices: ['playlist'],\n formView: AddContentPlaylistMediaView,\n canFetchPreview: () => {\n return true;\n },\n targets: {},\n groups: []\n },\n\n [WidgetTypeId.SeriesMedia]: {\n icon: WidgetCollectionVideosSvg,\n bgColourClass: bgNavy,\n groupName: videoGroup,\n displayName: 'Series videos',\n searchIndices: ['series'],\n formView: AddContentSeriesMediaView,\n canFetchPreview: (widgetData: SeriesMediaWidgetData) => {\n return !!widgetData.seriesId && !!widgetData.options?.sort;\n },\n getInitialData: () => {\n return {\n options: {}\n };\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Discover]: true,\n [DashboardTargetType.Classification]: true,\n [DashboardTargetType.MoviesAndTv]: true,\n [DashboardTargetType.Company]: true,\n [DashboardTargetType.PartnerProfile]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n\n [WidgetTypeId.LatestReleasedVideos]: {\n icon: WidgetLatestReleasedVideosSvg,\n bgColourClass: bgNavy,\n groupName: videoGroup,\n displayName: 'Recent uploads',\n formView: AddContentLatestReleasedVideosView,\n canFetchPreview: () => {\n return true;\n },\n targets: {},\n groups: []\n },\n\n [WidgetTypeId.ClassificationLatestReleasedVideosV2]: {\n icon: WidgetClassificationLatestReleasedVideosSvg,\n bgColourClass: bgNavy,\n groupName: videoGroup,\n displayName: 'New releases',\n searchIndices: ['classification'],\n formView: AddContentClassificationsWithChildrenView,\n canFetchPreview: (data: ParentAndChildClassificationsWidgetData, targetInfo: DashboardTargetInfo) => {\n if (targetInfo.targetType === DashboardTargetType.Discover)\n return true;\n\n return !!data.classifications?.length;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Classification]: true,\n [DashboardTargetType.Discover]: true\n }\n },\n getInitialData: target => {\n if (target.targetType === DashboardTargetType.Classification) {\n return {\n classifications: []\n };\n }\n\n return {};\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n\n [WidgetTypeId.SeasonalClassificationMedia]: {\n icon: WidgetSeasonalClassificationMediaSvg,\n bgColourClass: bgNavy,\n groupName: videoGroup,\n displayName: 'Seasonal topic videos',\n formView: AddContentClassificationsWithChildrenView,\n canFetchPreview: () => {\n return true;\n },\n getInitialData: () => {\n return {\n classifications: []\n };\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Classification]: true\n }\n },\n searchIndices: ['classification'],\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n\n [WidgetTypeId.TrendingClassificationsMedia]: {\n icon: WidgetTrendingClassificationsMediaSvg,\n bgColourClass: bgNavy,\n groupName: videoGroup,\n displayName: 'Trending videos',\n searchIndices: ['classification'],\n formView: AddContentClassificationsWithChildrenView,\n canFetchPreview: () => {\n return true;\n },\n getInitialData: () => {\n return {\n classifications: []\n };\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Classification]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n\n [WidgetTypeId.CuratedMultimedia]: {\n icon: WidgetCuratedMultimediaSvg,\n bgColourClass: bgYellow,\n groupName: multimediaGroup,\n displayName: 'Multimedia',\n searchIndices: AllSearchIndicesVideoStyle,\n formView: AddContentCuratedMultimediaView,\n canFetchPreview: () => {\n return true;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Classification]: true,\n [DashboardTargetType.PartnerProfile]: true\n }\n },\n getInitialData: () => {\n return {\n multimedias: []\n };\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n\n [WidgetTypeId.CuratedClassifications]: {\n icon: WidgetTopicSvg,\n bgColourClass: bgPurple,\n groupName: topicsGroup,\n displayName: 'Topics',\n searchIndices: ['classification'],\n formView: AddContentCuratedClassificationsViewContainer,\n canFetchPreview: (widgetData: CuratedWidgetData) => {\n return !!widgetData.objectIds?.length;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Classification]: true,\n [DashboardTargetType.ClassificationDirectory]: true,\n [DashboardTargetType.Discover]: true,\n [DashboardTargetType.MoviesAndTv]: true\n },\n [ProductId.StreamableLearning]: {\n [DashboardTargetType.Classification]: true,\n [DashboardTargetType.Discover]: true\n }\n },\n getInitialData: (targetInfo: DashboardTargetInfo, template: WidgetTemplate) => {\n if (template === WidgetTemplate.HeroBlockColourSmall && 'classificationId' in targetInfo) {\n return {\n objectIds: [targetInfo.classificationId]\n };\n }\n\n return {};\n },\n getInitialMetadata: (targetInfo: DashboardTargetInfo, template: WidgetTemplate): Partial<WidgetMetadata> => {\n if (template === WidgetTemplate.HeroBlockColourSmall && 'classificationId' in targetInfo) {\n if (targetInfo.targetType === DashboardTargetType.ClassificationDirectory) {\n return {\n cta: {\n text: 'Explore what\\'s new',\n icon: ButtonIcon.TopicNewReleases,\n appLink: CuratedWidgetCtaAppLink.TopicNewReleases\n }\n };\n }\n \n if (targetInfo.targetType === DashboardTargetType.ClassificationCurriculum) {\n return {\n cta: {\n text: 'Explore topic',\n icon: ButtonIcon.CuratedTopic,\n appLink: CuratedWidgetCtaAppLink.CuratedTopic\n }\n };\n }\n \n return {\n cta: {\n text: 'Explore all topics',\n icon: ButtonIcon.TopicDirectory,\n appLink: CuratedWidgetCtaAppLink.TopicDirectory\n }\n };\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator, CuratorGroup.StreamableCurator ]\n },\n\n [WidgetTypeId.Classifications]: {\n icon: WidgetListOfChildrenTopicsSvg,\n bgColourClass: bgPurple,\n groupName: topicsGroup,\n displayName: 'List of children topics',\n formView: AddContentClassificationsContainerView,\n canFetchPreview: () => {\n return true;\n },\n searchIndices: ['classification'],\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Discover]: true,\n [DashboardTargetType.MoviesAndTv]: true,\n [DashboardTargetType.Classification]: true,\n [DashboardTargetType.ClassificationDirectory]: true\n },\n [ProductId.StreamableLearning]: {\n [DashboardTargetType.Discover]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator, CuratorGroup.StreamableCurator ]\n },\n\n [WidgetTypeId.ClassificationLatestReleasedVideos]: {\n icon: WidgetClassificationLatestReleasedVideosSvg,\n bgColourClass: bgPurple,\n groupName: topicsGroup,\n displayName: 'New releases',\n formView: AddContentClassificationLatestReleasedVideosView,\n canFetchPreview: () => {\n return true;\n },\n targets: {},\n groups: []\n },\n\n [WidgetTypeId.SpecialEventClassifications]: {\n icon: CalendarSvg,\n bgColourClass: bgPurple,\n groupName: topicsGroup,\n displayName: 'Special events',\n formView: AddContentSpecialEventClassificationsView,\n canFetchPreview: () => {\n return true;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Classification]: true,\n [DashboardTargetType.Discover]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n\n [WidgetTypeId.LatestReleasedClassifications]: {\n icon: WidgetClassificationLatestReleasedVideosSvg,\n bgColourClass: bgPurple,\n groupName: topicsGroup,\n displayName: 'New curated topics',\n formView: AddContentClassificationsWithChildrenView,\n canFetchPreview: () => {\n return true;\n },\n searchIndices: ['classification'],\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Classification]: true,\n [DashboardTargetType.Discover]: true\n }\n },\n getInitialData: target => {\n if (target.targetType === DashboardTargetType.Classification) {\n return {\n classifications: []\n };\n }\n\n return {};\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n\n [WidgetTypeId.TrendingClassifications]: {\n icon: WidgetTrendingClassificationsSvg,\n bgColourClass: bgPurple,\n groupName: topicsGroup,\n displayName: 'Trending topics',\n formView: AddContentClassificationsWithChildrenView,\n canFetchPreview: () => {\n return true;\n },\n searchIndices: ['classification'],\n getInitialData: () => {\n return {\n classifications: []\n };\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Classification]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n\n [WidgetTypeId.PersonalisedTopics]: {\n icon: WidgetPersonalisedTopicsSvg,\n bgColourClass: bgPurple,\n groupName: topicsGroup,\n displayName: 'Personalised topics',\n formView: AddContentPersonalisedTopicsView,\n canFetchPreview: () => {\n return true;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Discover]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n\n [WidgetTypeId.CuratedSeries]: {\n icon: WidgetSeriesSvg,\n bgColourClass: bgIndigo,\n groupName: seriesGroup,\n displayName: 'Series',\n searchIndices: ['series'],\n formView: AddContentCuratedSeriesView,\n canFetchPreview: () => {\n // we call preview endpoint in the form view cuz it's has unique params\n return false;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Discover]: true,\n [DashboardTargetType.Classification]: true,\n [DashboardTargetType.MoviesAndTv]: true,\n [DashboardTargetType.Company]: true,\n [DashboardTargetType.PartnerProfile]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n\n [WidgetTypeId.CuratedPlaylists]: {\n icon: PlaylistSvg,\n bgColourClass: bgCyan,\n groupName: playlistGroup,\n displayName: 'Playlist',\n searchIndices: ['playlist'],\n formView: AddContentCuratedPlaylistsView,\n canFetchPreview: (widgetData: CuratedWidgetData) => {\n return !!widgetData.objectIds?.length;\n },\n targets: {},\n groups: []\n },\n\n [WidgetTypeId.Blurb]: {\n icon: WidgetBlurbSvg,\n bgColourClass: bgPink,\n groupName: blurbGroup,\n displayName: 'Blurb',\n formView: AddContentBlurbView,\n canFetchPreview: () => {\n return true;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.MoviesAndTv]: true,\n [DashboardTargetType.Classification]: true,\n [DashboardTargetType.Discover]: true,\n [DashboardTargetType.ClassificationDirectory]: true,\n [DashboardTargetType.PartnerProfile]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n\n [WidgetTypeId.DynamicBlurb]: {\n icon: WidgetBlurbSvg,\n bgColourClass: bgPink,\n groupName: blurbGroup,\n displayName: 'Dynamic Blurb',\n formView: AddContentBlurbView,\n canFetchPreview: () => {\n return true;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Discover]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n [WidgetTypeId.AuthorReviewer]: {\n icon: WidgetAuthorReviewerSvg,\n bgColourClass: bgPink,\n groupName: blurbGroup,\n displayName: 'Author & Reviewer',\n formView: AddContentAuthorReviewerView,\n canFetchPreview: (widgetData: AuthorReviewerWidgetData) => {\n return !!widgetData.authorId && !!widgetData.reviewerId;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Classification]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator, CuratorGroup.SeoManager ]\n },\n\n [WidgetTypeId.Faq]: {\n icon: QuestionMarkSvg,\n bgColourClass: bgBlue,\n groupName: blurbGroup,\n displayName: 'FAQ',\n formView: AddContentFaqView,\n canFetchPreview: () => {\n return true;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Classification]: true\n }\n },\n getInitialData: (_, templateId) => {\n if (templateId === WidgetTemplate.QuestionAccordion) {\n return {\n faqs: [{\n question: '',\n answer: ''\n }, {\n question: '',\n answer: ''\n }]\n };\n }\n\n return {\n faqs: [{\n question: '',\n answer: ''\n }]\n };\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator, CuratorGroup.SeoManager ]\n },\n\n [WidgetTypeId.Feedback]: {\n icon: SpeechSvg,\n bgColourClass: bgPink,\n groupName: blurbGroup,\n displayName: 'Feedback',\n formView: AddContentFeedbackView,\n canFetchPreview: () => true,\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Classification]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n\n [WidgetTypeId.Ratings]: {\n icon: PopcornSvg,\n bgColourClass: bgGreen,\n groupName: searchFilterGroup,\n displayName: 'Ratings',\n formView: AddContentRatingsView,\n canFetchPreview: (widgetData: CuratedWidgetData) => {\n return !!widgetData.objectIds?.length;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.MoviesAndTv]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n\n [WidgetTypeId.CuratedCompanies]: {\n icon: WidgetNetworkSvg,\n bgColourClass: bgGreen,\n groupName: networkGroup,\n displayName: 'Studios',\n searchIndices: ['company'],\n formView: AddContentCuratedCompaniesView,\n canFetchPreview: (widgetData: CuratedWidgetData) => {\n return !!widgetData.objectIds?.length;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.MoviesAndTv]: true\n },\n [ProductId.StreamableLearning]: {\n [DashboardTargetType.Discover]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator, CuratorGroup.StreamableCurator ]\n },\n\n [WidgetTypeId.ContinueWatching]: {\n icon: WidgetContinueWatchingSvg,\n bgColourClass: bgNavy,\n groupName: videoGroup,\n displayName: 'Continue watching',\n formView: AddContentContinueWatchingView,\n canFetchPreview: () => {\n return true;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Discover]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n\n [WidgetTypeId.BecauseYouWatched]: {\n icon: WidgetBecauseYouWatchedSvg,\n bgColourClass: bgNavy,\n groupName: videoGroup,\n displayName: 'Because you watched',\n formView: AddContentBecauseYouWatchedView,\n canFetchPreview: () => {\n return true;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Discover]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n\n [WidgetTypeId.Presentations]: {\n icon: SchoolSvg,\n bgColourClass: bgPink,\n groupName: presentationsGroup,\n displayName: 'Presentations',\n formView: AddContentPresentationsView,\n canFetchPreview: () => {\n return true;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Discover]: true\n }\n },\n groups: [CuratorGroup.Developer]\n },\n\n [WidgetTypeId.CompanyLatestReleasedVideo]: {\n icon: WidgetVideosSvg,\n bgColourClass: bgGreen,\n groupName: videoGroup,\n displayName: 'Recently added to company',\n formView: AddContentLatestReleasedCompanyVideoView,\n canFetchPreview: () => {\n return true;\n },\n targets: {\n [ProductId.StreamableLearning]: {\n [DashboardTargetType.Company]: true\n }\n },\n getInitialData: (targetInfo: CompanyDashboardInfo) => {\n if (targetInfo.targetType !== DashboardTargetType.Company)\n return {};\n \n return {\n companyId: targetInfo.companyId\n };\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.StreamableCurator ]\n },\n\n [WidgetTypeId.CompanyVideos]: {\n icon: WidgetCompanyVideosSvg,\n bgColourClass: bgNavy,\n groupName: videoGroup,\n displayName: 'Company videos',\n formView: AddContentCompanyVideosView,\n canFetchPreview: () => {\n return true;\n },\n targets: {\n [ProductId.StreamableLearning]: {\n [DashboardTargetType.Company]: true\n }\n },\n getInitialData: (targetInfo: CompanyDashboardInfo) => {\n if (targetInfo.targetType !== DashboardTargetType.Company)\n return {};\n \n return {\n companyId: targetInfo.companyId\n };\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.StreamableCurator ]\n },\n\n [WidgetTypeId.CompanyClassificationVideos]: {\n icon: WidgetVideosSvg,\n bgColourClass: bgNavy,\n groupName: videoGroup,\n displayName: 'Studio videos',\n formView: AddContentCompanyClassificationVideosView,\n canFetchPreview: (widgetData: CompanyClassificationVideosWidgetData) => {\n return !!widgetData.companyId;\n },\n searchIndices: ['company'],\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Classification]: true,\n [DashboardTargetType.Discover]: true\n }\n },\n getInitialData: targetInfo => {\n if (targetInfo.targetType === DashboardTargetType.Classification) {\n return {\n classifications: []\n };\n }\n\n return {};\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n\n [WidgetTypeId.ClassificationLatestReleasedVideo]: {\n icon: WidgetLatestReleasedVideosSvg,\n bgColourClass: bgNavy,\n groupName: videoGroup,\n displayName: 'Recently added to topic',\n targets: {\n [ProductId.StreamableLearning]: {\n [DashboardTargetType.Classification]: true\n }\n },\n formView: AddContentClassificationLatestReleasedVideoView,\n canFetchPreview: (widgetData: CuratedWidgetData) => {\n return !!widgetData.classificationId;\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.StreamableCurator ]\n },\n\n [WidgetTypeId.UpcomingLivestreams]: {\n icon: CalendarSvg,\n bgColourClass: bgBlue,\n groupName: livestreamsGroup,\n displayName: 'Upcoming livestreams',\n formView: AddUpcomingLivestreamsView,\n canFetchPreview: () => {\n return true;\n },\n targets: {\n [ProductId.StreamableLearning]: {\n [DashboardTargetType.Company]: true,\n [DashboardTargetType.Classification]: true,\n [DashboardTargetType.Discover]: true\n }\n },\n getInitialData: (targetInfo: CompanyDashboardInfo) => {\n if (targetInfo.targetType !== DashboardTargetType.Company)\n return {};\n \n return {\n companyId: targetInfo.companyId\n };\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.StreamableCurator ]\n },\n\n [WidgetTypeId.ClassificationPlaylists]: {\n icon: PlaylistSvg,\n bgColourClass: bgCyan,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.ClassificationSeries]: {\n icon: WidgetSeriesSvg,\n bgColourClass: bgIndigo,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.ClassificationPinnedVideos]: {\n icon: WidgetSeriesSvg,\n bgColourClass: bgIndigo,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.ClassificationFeaturedVideo]: {\n icon: VideoSvg,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.ClassificationDashboardMedia]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.ClassificationDashboardExternalMedia]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.SearchCompanies]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.SearchExchangeArchive]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.SearchClickViewLive]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.SearchMySchoolLibraryFolder]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.SearchMySchoolLibraryVideos]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.SearchMyVideos]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.SearchMyVideosFolder]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.SearchPlaylists]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.SearchRelatedResults]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.SearchRelevantTopics]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.SearchSeries]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.SearchTopResults]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.SearchTags]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.SearchCurriculumCode]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.SearchSuggestions]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.SearchContentPartners]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.ClassificationCurriculumMedia]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.ContentPartners]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.ContentPartnerVideos]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: { },\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n [WidgetTypeId.ContentPartnerSeries]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: { },\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n [WidgetTypeId.ContentPartnerLatestReleasedVideos]: {\n icon: WidgetLatestReleasedVideosSvg,\n bgColourClass: bgNavy,\n groupName: videoGroup,\n displayName: 'Latest released videos',\n formView: AddContentContentPartnerVideoView,\n canFetchPreview: () => {\n return true;\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.PartnerProfile]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n [WidgetTypeId.SpotlightContentPartners]: {\n icon: WidgetNetworkSvg,\n bgColourClass: bgNavy,\n groupName: networkGroup,\n displayName: 'Featured channel',\n formView: AddContentCuratedContentPartnersView,\n searchIndices: ['partner_profile'],\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.Discover]: true\n }\n },\n canFetchPreview: () => {\n return true;\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n [WidgetTypeId.CuratedContentPartners]: {\n icon: WidgetNetworkSvg,\n bgColourClass: bgPurple,\n groupName: networkGroup,\n displayName: 'Featured channel',\n formView: AddContentCuratedContentPartnersView,\n canFetchPreview: () => {\n return true;\n },\n searchIndices: ['partner_profile'],\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.MoviesAndTv]: true,\n [DashboardTargetType.PartnerProfile]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n [WidgetTypeId.ContentPartnersHub]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n },\n\n [WidgetTypeId.TrendingContentPartnersVideo]: {\n icon: WidgetTrendingClassificationsMediaSvg,\n bgColourClass: bgNavy,\n groupName: videoGroup,\n displayName: 'Trending videos',\n // searchIndices: [''],\n formView: AddContentContentPartnerVideoView,\n canFetchPreview: () => {\n return true;\n },\n getInitialData: () => {\n return {\n classifications: []\n };\n },\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.PartnerProfile]: true\n }\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n [WidgetTypeId.ContentPartnerAllVideos]: {\n icon: WidgetAllVideosSvg,\n bgColourClass: bgNavy,\n groupName: videoGroup,\n displayName: 'More videos',\n formView: AddContentContentPartnerVideoView,\n targets: {\n [ProductId.Primary]: {\n [DashboardTargetType.PartnerProfile]: true\n }\n },\n canFetchPreview: () => {\n return true;\n },\n groups: [ CuratorGroup.Developer, CuratorGroup.Curator ]\n },\n // this widget is system generated for espresso for now\n [WidgetTypeId.ClassificationAllVideos]: {\n icon: null,\n bgColourClass: bgNavy,\n targets: {},\n canFetchPreview: () => {\n return true;\n },\n groups: []\n }\n};\n"],"mappings":"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"}