@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.
- package/dist/.vite/manifest.json +1779 -1779
- package/dist/Assets/js/dist/scripts/{CYhNyVj0.chunk.js → -6zuD8lo.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CYhNyVj0.chunk.js.map → -6zuD8lo.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{D28bEsam.chunk.js → 0A42jU2r.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{D28bEsam.chunk.js.map → 0A42jU2r.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{oYHUjbwb2.chunk.js → 0ogjGD4J2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{oYHUjbwb2.chunk.js.map → 0ogjGD4J2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{PeuFojmJ2.chunk.js → 2aCj1HHJ2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{PeuFojmJ2.chunk.js.map → 2aCj1HHJ2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{q7pjZoNd.chunk.js → 2zbtFQka.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{q7pjZoNd.chunk.js.map → 2zbtFQka.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{0S5J0xX22.chunk.js → 3IQ_8AZP2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{0S5J0xX22.chunk.js.map → 3IQ_8AZP2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DvP7S5Uq.chunk.js → 3eMwLZ5D.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DvP7S5Uq.chunk.js.map → 3eMwLZ5D.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{y1L3G7XA2.chunk.js → 4Tx2JSvk2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{y1L3G7XA2.chunk.js.map → 4Tx2JSvk2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{BbR7yW4A2.chunk.js → 5uVJfyDx2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{BbR7yW4A2.chunk.js.map → 5uVJfyDx2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{B52yjTo5.chunk.js → 6l2s6d3Q.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{B52yjTo5.chunk.js.map → 6l2s6d3Q.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DezIbRcB2.chunk.js → 8RAh0VA72.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DezIbRcB2.chunk.js.map → 8RAh0VA72.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{CixcMUHF.chunk.js → 9nk_zFtT.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CixcMUHF.chunk.js.map → 9nk_zFtT.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{Bk9vy70e2.chunk.js → Ae4rMqFm2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{Bk9vy70e2.chunk.js.map → Ae4rMqFm2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{Bzh_AwaG.chunk.js → B0mCquXn.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{Bzh_AwaG.chunk.js.map → B0mCquXn.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/B1pBJzjh.chunk.js +1 -0
- package/dist/Assets/js/dist/scripts/{BswFY0mR2.chunk.js → B6IinlWw2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{BswFY0mR2.chunk.js.map → B6IinlWw2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{ClpIRgLR.chunk.js → B6NMAAhW.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{ClpIRgLR.chunk.js.map → B6NMAAhW.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{BCMXlwdC2.chunk.js → B8RZKQTs2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{BCMXlwdC2.chunk.js.map → B8RZKQTs2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{CymdouaN.chunk.js → B9R92bqj.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CymdouaN.chunk.js.map → B9R92bqj.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{CtVYDK7g.chunk.js → BAFYJZ4c.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CtVYDK7g.chunk.js.map → BAFYJZ4c.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{_wZpe632.chunk.js → BFPSIGJg.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{_wZpe632.chunk.js.map → BFPSIGJg.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{BNHULwJy2.chunk.js → BGiLDtc92.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{BNHULwJy2.chunk.js.map → BGiLDtc92.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DA9R8atp2.chunk.js → BH6LIpwu2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DA9R8atp2.chunk.js.map → BH6LIpwu2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DbrVjVdn.chunk.js → BMj3pXcm.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DbrVjVdn.chunk.js.map → BMj3pXcm.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{CDvLjxwS.chunk.js → BQTfNBFU.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CDvLjxwS.chunk.js.map → BQTfNBFU.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{mStmtFRo.chunk.js → BT-jeT7C.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{mStmtFRo.chunk.js.map → BT-jeT7C.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{FlF2O19P2.chunk.js → BUD4osIg2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{FlF2O19P2.chunk.js.map → BUD4osIg2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DWS9yr24.chunk.js → BVoG71Kc.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DWS9yr24.chunk.js.map → BVoG71Kc.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{B9tf3oT62.chunk.js → BW5iVK1B2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{B9tf3oT62.chunk.js.map → BW5iVK1B2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{C2mEE4FT.chunk.js → BW9r-3iO.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{C2mEE4FT.chunk.js.map → BW9r-3iO.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{Dpgqkqbp.chunk.js → BX1tMzoa.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{Dpgqkqbp.chunk.js.map → BX1tMzoa.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DVRzbAn6.chunk.js → BXaC-l33.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DVRzbAn6.chunk.js.map → BXaC-l33.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{BaR7D4NT2.chunk.js → BY-c3M2b2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{BaR7D4NT2.chunk.js.map → BY-c3M2b2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{CJpVJtZk.chunk.js → BYMuPFbe.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CJpVJtZk.chunk.js.map → BYMuPFbe.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{C5INFWaM2.chunk.js → BaOAOuSc2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{C5INFWaM2.chunk.js.map → BaOAOuSc2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{wAWlO6hc.chunk.js → Bb_f3Lku.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{wAWlO6hc.chunk.js.map → Bb_f3Lku.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{BLJO44vl.chunk.js → BdJYoUIO.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{BLJO44vl.chunk.js.map → BdJYoUIO.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{CW2k5Ut-2.chunk.js → Bf-6iyfX2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CW2k5Ut-2.chunk.js.map → Bf-6iyfX2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DxL0ZEcN2.chunk.js → BiPUuGEE2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DxL0ZEcN2.chunk.js.map → BiPUuGEE2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{2XS-c0Xo.chunk.js → Bj4-NRWf.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{2XS-c0Xo.chunk.js.map → Bj4-NRWf.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{D13ViJt82.chunk.js → BkVcraos2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{D13ViJt82.chunk.js.map → BkVcraos2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{U1L4Dfoc.chunk.js → BkZ7WS_H.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{U1L4Dfoc.chunk.js.map → BkZ7WS_H.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DoQiTqRX2.chunk.js → BoMt5mMW2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DoQiTqRX2.chunk.js.map → BoMt5mMW2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{Da_9BBKD2.chunk.js → Bo_WsHZq2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{Da_9BBKD2.chunk.js.map → Bo_WsHZq2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{CnyrKBG0.chunk.js → BpV5ErII.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CnyrKBG0.chunk.js.map → BpV5ErII.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{Dfhl7nI62.chunk.js → BrBPGjLi2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{Dfhl7nI62.chunk.js.map → BrBPGjLi2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DcxGcCkR.chunk.js → BrHyZG_m.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DcxGcCkR.chunk.js.map → BrHyZG_m.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{FXPxauLF.chunk.js → Bu4F3uuX.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{FXPxauLF.chunk.js.map → Bu4F3uuX.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DZdJx-7j.chunk.js → BvW9SXzy.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DZdJx-7j.chunk.js.map → BvW9SXzy.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{CAU0Lbgd.chunk.js → BwKHls91.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CAU0Lbgd.chunk.js.map → BwKHls91.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{BiTzUyxj2.chunk.js → BxZNJjbX2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{BiTzUyxj2.chunk.js.map → BxZNJjbX2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{cymXuIcM.chunk.js → BygVW5WL.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{cymXuIcM.chunk.js.map → BygVW5WL.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{Dx07A6Ct.chunk.js → ByzsHBuo.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{Dx07A6Ct.chunk.js.map → ByzsHBuo.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/C-M2om56.chunk.js +3 -0
- package/dist/Assets/js/dist/scripts/C-M2om56.chunk.js.map +1 -0
- package/dist/Assets/js/dist/scripts/{B6dlmRQL.chunk.js → C0UYMHUe.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{B6dlmRQL.chunk.js.map → C0UYMHUe.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{V0N7tCBl.chunk.js → C0_pEFCD.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{V0N7tCBl.chunk.js.map → C0_pEFCD.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{Cpr1J8Rk2.chunk.js → C2jRLu4_2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{Cpr1J8Rk2.chunk.js.map → C2jRLu4_2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{CY56FWb9.chunk.js → C2tBl3l9.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CY56FWb9.chunk.js.map → C2tBl3l9.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{C3Lx9PwR.chunk.js → C4eazpDh.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{C3Lx9PwR.chunk.js.map → C4eazpDh.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{puobgAYi.chunk.js → CBq4vrjT.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{puobgAYi.chunk.js.map → CBq4vrjT.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{Bcx1C8ae.chunk.js → CBzqRw-k.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{Bcx1C8ae.chunk.js.map → CBzqRw-k.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{BD6DIPGL2.chunk.js → CDAdfAL02.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{BD6DIPGL2.chunk.js.map → CDAdfAL02.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{Ddp1uNfH.chunk.js → CE1Dxq8p.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{Ddp1uNfH.chunk.js.map → CE1Dxq8p.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{C99MPG7E.chunk.js → CG2julEA.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{C99MPG7E.chunk.js.map → CG2julEA.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{tyY3GHEC2.chunk.js → CGcN4g0d2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{tyY3GHEC2.chunk.js.map → CGcN4g0d2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{wODD7tmB2.chunk.js → CJmV_FfR2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{wODD7tmB2.chunk.js.map → CJmV_FfR2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DavA1dZZ.chunk.js → CKvVGIRL.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DavA1dZZ.chunk.js.map → CKvVGIRL.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{CrndJnZp.chunk.js → CL1DcbTZ.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CrndJnZp.chunk.js.map → CL1DcbTZ.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DLLL2lwS.chunk.js → CNLx6_fS.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DLLL2lwS.chunk.js.map → CNLx6_fS.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{w2lackHw.chunk.js → CNUVs80P.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{w2lackHw.chunk.js.map → CNUVs80P.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{CCzvD0H4.chunk.js → CPa__SNX.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CCzvD0H4.chunk.js.map → CPa__SNX.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DeDh-wVP.chunk.js → CSA2Tnv9.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DeDh-wVP.chunk.js.map → CSA2Tnv9.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{CjZJx6-O2.chunk.js → CT-xEpNT2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CjZJx6-O2.chunk.js.map → CT-xEpNT2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{BRPP3VZ1.chunk.js → CT0vfLa0.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{BRPP3VZ1.chunk.js.map → CT0vfLa0.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DGjNB2Bz.chunk.js → CUDnXypB.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DGjNB2Bz.chunk.js.map → CUDnXypB.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{cXanUGwK.chunk.js → CeMQZB5J.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{cXanUGwK.chunk.js.map → CeMQZB5J.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/Cf5cjLzK.chunk.js +2 -0
- package/dist/Assets/js/dist/scripts/{D2iK_uRt.chunk.js.map → Cf5cjLzK.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{CRNBuqmR.chunk.js → CfGaxIgd.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CRNBuqmR.chunk.js.map → CfGaxIgd.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{BNr7ZL3F2.chunk.js → Cqfub35W2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{BNr7ZL3F2.chunk.js.map → Cqfub35W2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DRmwJ1it2.chunk.js → Cv8UpP5_2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DRmwJ1it2.chunk.js.map → Cv8UpP5_2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DOfeXfSj.chunk.js → CvV6jx2d.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DOfeXfSj.chunk.js.map → CvV6jx2d.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DnGnhqys.chunk.js → CxENQntH.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DnGnhqys.chunk.js.map → CxENQntH.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{NMDkdR-8.chunk.js → CxIfJCSc.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{NMDkdR-8.chunk.js.map → CxIfJCSc.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{B9H-d-YC.chunk.js → CxggKQxV.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{B9H-d-YC.chunk.js.map → CxggKQxV.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{B3I44IzQ.chunk.js → CyNNZ1So.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{B3I44IzQ.chunk.js.map → CyNNZ1So.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{B2V1N14S.chunk.js → Cz-WSyAE.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{B2V1N14S.chunk.js.map → Cz-WSyAE.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{S9cTzcQc2.chunk.js → D2aQFJWt2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{S9cTzcQc2.chunk.js.map → D2aQFJWt2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{CEsXUxxo2.chunk.js → D2h9W4GA2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CEsXUxxo2.chunk.js.map → D2h9W4GA2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DqCsVhOS.chunk.js → D3NAhMJm.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DqCsVhOS.chunk.js.map → D3NAhMJm.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DpM1KgHy.chunk.js → D3aWaqBW.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DpM1KgHy.chunk.js.map → D3aWaqBW.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{CxtxOtyF2.chunk.js → D4xcR0492.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CxtxOtyF2.chunk.js.map → D4xcR0492.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{BEeh_Vbr.chunk.js → D5ek2PiI.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{BEeh_Vbr.chunk.js.map → D5ek2PiI.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DjqQYm43.chunk.js → D61ei_h6.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DjqQYm43.chunk.js.map → D61ei_h6.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{lgpeNdac.chunk.js → D6wyTufc.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{lgpeNdac.chunk.js.map → D6wyTufc.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{B8li8ced.chunk.js → D7I90XOo.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{B8li8ced.chunk.js.map → D7I90XOo.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DBAwgllB.chunk.js → DArfNv9S.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DBAwgllB.chunk.js.map → DArfNv9S.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{B6uYrrzJ2.chunk.js → DB-51xws2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{B6uYrrzJ2.chunk.js.map → DB-51xws2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{C-flCrUr.chunk.js → DENdEA1F.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{C-flCrUr.chunk.js.map → DENdEA1F.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{BuF_pg9-2.chunk.js → DFYiLmms2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{BuF_pg9-2.chunk.js.map → DFYiLmms2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{BE6LUVEo2.chunk.js → DHa-x1js2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{BE6LUVEo2.chunk.js.map → DHa-x1js2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DDHep0UM.chunk.js → DHeA2NJS.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DDHep0UM.chunk.js.map → DHeA2NJS.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{D5OaPA-v.chunk.js → DIDxfMO_.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{D5OaPA-v.chunk.js.map → DIDxfMO_.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{CV7UIOmh2.chunk.js → DMq1wDNm2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CV7UIOmh2.chunk.js.map → DMq1wDNm2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{ByMU9ltp2.chunk.js → DNWM9yfh2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{ByMU9ltp2.chunk.js.map → DNWM9yfh2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DFwtjofq2.chunk.js → DSj7VCEo2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DFwtjofq2.chunk.js.map → DSj7VCEo2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{BSYuzR8N2.chunk.js → DSvehN9D2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{BSYuzR8N2.chunk.js.map → DSvehN9D2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{FS74_jrx.chunk.js → DTvCgZ4c.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{FS74_jrx.chunk.js.map → DTvCgZ4c.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{C7Gmh7eY.chunk.js → DWHKdmdQ.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{C7Gmh7eY.chunk.js.map → DWHKdmdQ.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DXcaOjI_.chunk.js → DYFGF9Pe.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DXcaOjI_.chunk.js.map → DYFGF9Pe.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{CIw53qNO2.chunk.js → DYOxTenc2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CIw53qNO2.chunk.js.map → DYOxTenc2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{CignflP_2.chunk.js → DZthp5T62.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CignflP_2.chunk.js.map → DZthp5T62.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{BlqDwJRY.chunk.js → Djgwr16q.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{BlqDwJRY.chunk.js.map → Djgwr16q.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{BwToh2X9.chunk.js → DjnvbVQs.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{BwToh2X9.chunk.js.map → DjnvbVQs.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{UelJUmgx2.chunk.js → DmrhyI9D2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{UelJUmgx2.chunk.js.map → DmrhyI9D2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{0KUhq7W7.chunk.js → DnZGILQc.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{0KUhq7W7.chunk.js.map → DnZGILQc.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{BSPrErub.chunk.js → DqnZw1cj.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{BSPrErub.chunk.js.map → DqnZw1cj.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{Bkx2vKcX2.chunk.js → DrAKpy8L2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{Bkx2vKcX2.chunk.js.map → DrAKpy8L2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DX9DFxX2.chunk.js → DsM1bfoR.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DX9DFxX2.chunk.js.map → DsM1bfoR.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{Dh3G-ann.chunk.js → Dt2TCPUI.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{Dh3G-ann.chunk.js.map → Dt2TCPUI.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DA6Ynhan.chunk.js → DtylOK55.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DA6Ynhan.chunk.js.map → DtylOK55.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{CJBiVila2.chunk.js → DuTcsFNo2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CJBiVila2.chunk.js.map → DuTcsFNo2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{BBFS0f7w.chunk.js → Dw0mo6Cf.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{BBFS0f7w.chunk.js.map → Dw0mo6Cf.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{Cg5KHpRA.chunk.js → DwISzabN.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{Cg5KHpRA.chunk.js.map → DwISzabN.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DMxtE2iS.chunk.js → DxW67uUT.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DMxtE2iS.chunk.js.map → DxW67uUT.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{BOGS-BOS.chunk.js → Eg4zYYCO.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{BOGS-BOS.chunk.js.map → Eg4zYYCO.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{CSuC7le7.chunk.js → GT6nO4Jv.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CSuC7le7.chunk.js.map → GT6nO4Jv.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{BhKv6dKl2.chunk.js → GpDEun8c2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{BhKv6dKl2.chunk.js.map → GpDEun8c2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DKJC5qg0.chunk.js → OKjYL31I.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DKJC5qg0.chunk.js.map → OKjYL31I.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{D8rrJ-jY2.chunk.js → OrCUhFjq2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{D8rrJ-jY2.chunk.js.map → OrCUhFjq2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{D3exV_Ay2.chunk.js → SVXAAhk02.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{D3exV_Ay2.chunk.js.map → SVXAAhk02.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{CcZKy7SH.chunk.js → SmmnJrec.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CcZKy7SH.chunk.js.map → SmmnJrec.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{Dy4nscVE2.chunk.js → T3BageSw2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{Dy4nscVE2.chunk.js.map → T3BageSw2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{B8PM5Ji3.chunk.js → T6xxjp_W.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{B8PM5Ji3.chunk.js.map → T6xxjp_W.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{Cp6Af16p.chunk.js → Uc2eW092.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{Cp6Af16p.chunk.js.map → Uc2eW092.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DmKyGgLu.chunk.js → XHoEdG1q.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DmKyGgLu.chunk.js.map → XHoEdG1q.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{BdVoyBI02.chunk.js → Y14NYZ692.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{BdVoyBI02.chunk.js.map → Y14NYZ692.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DrszevCi.chunk.js → Y_IcNhI9.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DrszevCi.chunk.js.map → Y_IcNhI9.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{CMGpVYHd.chunk.js → Yr5eNz05.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CMGpVYHd.chunk.js.map → Yr5eNz05.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{QnwProbJ2.chunk.js → Yrc9o6bG2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{QnwProbJ2.chunk.js.map → Yrc9o6bG2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{app-Dl-tzfIp.js → app-RphP4Ht0.js} +4 -4
- package/dist/Assets/js/dist/scripts/{app-Dl-tzfIp.js.map → app-RphP4Ht0.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{B96Bwi2D.chunk.js → cUgHqo-u.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{B96Bwi2D.chunk.js.map → cUgHqo-u.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{oGkpmMft2.chunk.js → dmUfJoJz2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{oGkpmMft2.chunk.js.map → dmUfJoJz2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DjlPflaG.chunk.js → fapHSEex.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DjlPflaG.chunk.js.map → fapHSEex.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{CaEXONXp2.chunk.js → jf0e_ii92.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CaEXONXp2.chunk.js.map → jf0e_ii92.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{Co7TevGA.chunk.js → kp4jXqVv.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{Co7TevGA.chunk.js.map → kp4jXqVv.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/lAvSm0ti.chunk.js +2 -0
- package/dist/Assets/js/dist/scripts/lAvSm0ti.chunk.js.map +1 -0
- package/dist/Assets/js/dist/scripts/{Dmf5vYc42.chunk.js → n7lzp_Mc2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{Dmf5vYc42.chunk.js.map → n7lzp_Mc2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{CG9yCT4r2.chunk.js → nvtWO4PW2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CG9yCT4r2.chunk.js.map → nvtWO4PW2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{CACu0hGi2.chunk.js → oYKM19q12.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{CACu0hGi2.chunk.js.map → oYKM19q12.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{B5v11U7g.chunk.js → ohTu1tHz.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{B5v11U7g.chunk.js.map → ohTu1tHz.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{BrT-onLe2.chunk.js → uCRnfBEw2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{BrT-onLe2.chunk.js.map → uCRnfBEw2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{3XkTogZ22.chunk.js → udVWVmrH2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{3XkTogZ22.chunk.js.map → udVWVmrH2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DW-yUqjB2.chunk.js → v0VARBBE2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DW-yUqjB2.chunk.js.map → v0VARBBE2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{B4lIRWK22.chunk.js → vf9_5VGa2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{B4lIRWK22.chunk.js.map → vf9_5VGa2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{pOwOak4Z2.chunk.js → wTEWtWoE2.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{pOwOak4Z2.chunk.js.map → wTEWtWoE2.chunk.js.map} +1 -1
- package/dist/Assets/js/dist/scripts/{DPYIBfGB.chunk.js → xj8_Pfx7.chunk.js} +2 -2
- package/dist/Assets/js/dist/scripts/{DPYIBfGB.chunk.js.map → xj8_Pfx7.chunk.js.map} +1 -1
- package/dist/bundles.json +1 -1
- package/dist/en.json +1 -1
- package/package.json +1 -1
- package/dist/Assets/js/dist/scripts/D2iK_uRt.chunk.js +0 -2
- package/dist/Assets/js/dist/scripts/DBUreHJA.chunk.js +0 -3
- package/dist/Assets/js/dist/scripts/DBUreHJA.chunk.js.map +0 -1
- package/dist/Assets/js/dist/scripts/Dh5DbdtP.chunk.js +0 -2
- package/dist/Assets/js/dist/scripts/Dh5DbdtP.chunk.js.map +0 -1
- package/dist/Assets/js/dist/scripts/DrBVabtm.chunk.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"B52yjTo5.chunk.js","names":[],"sources":["../../../../../src/apps/videos/utils/VideoValidation.ts","../../../../../src/apps/videos/components/edit-video-details/EditVideoDetails.tsx","../../../../../src/apps/videos/views/edit-video/EditVideoView.tsx","../../../../../src/apps/videos/views/edit-video-audiences/EditVideoAudiencesView.tsx","../../../../../src/apps/videos/views/edit-video-subjects/EditVideoSubjectsView.tsx","../../../../../src/apps/videos/hooks/useCurriculums.ts","../../../../../src/apps/videos/views/edit-video-curriculums/EditVideoCurriculumsView.tsx","../../../../../src/apps/videos/views/edit-video-aliases/EditVideoAliasesView.tsx","../../../../../src/apps/videos/views/edit-video-curation/EditVideoCurationView.tsx"],"sourcesContent":["import * as Yup from 'yup';\n\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { GlanceFormat } from 'libs/shared/enums/GlanceFormat';\nimport { ThemeType } from 'libs/shared/enums/ThemeType';\nimport { Glance, Season, Series, UpdateObjectRating } from 'libs/shared/interfaces';\n\nimport { ImageValidationSchema } from 'shared/utils/validation/ImageValidationSchema';\n\nimport { UpdateVideoRequest } from 'apps/videos/interfaces';\n\nexport const VideoValidationSchema = Yup.object().shape<UpdateVideoRequest>({\n\n name: Yup.string()\n .trim()\n .max(255, 'Name is too long')\n .required('Name is required')\n .default(''),\n\n description: Yup.string()\n .trim()\n .default(''),\n\n status: Yup.mixed<CurationStatus>()\n .required('Status is required'),\n\n productionYear: Yup.number()\n .min(1900),\n\n rating: Yup.object()\n .shape<UpdateObjectRating>({\n id: Yup.string()\n })\n .default({})\n .noUnknown(),\n\n thumbnail: ImageValidationSchema,\n heroBanner: ImageValidationSchema,\n\n glance: Yup.object()\n .shape<Glance>({\n theme: Yup.string(),\n format: Yup.mixed<GlanceFormat>(),\n content: Yup.string(),\n type: Yup.mixed<ThemeType>()\n })\n .default({})\n .noUnknown(),\n\n subtitles: Yup.array(),\n producers: Yup.array(),\n productionCompanies: Yup.array(),\n directors: Yup.array(),\n distributors: Yup.array(),\n libraries: Yup.array(),\n series: Yup.object<Series>().nullable(),\n season: Yup.object<Season>().nullable(),\n episodeNumber: Yup.number()\n\n}).noUnknown();\n","import * as React from 'react';\n\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { Company, FileUpload, Library, Person, Rating, Video } from 'libs/shared/interfaces';\n\nimport { RightslineVideo, UpdateVideoRequest } from 'apps/videos/interfaces';\nimport { VideoValidationSchema } from 'apps/videos/utils/VideoValidation';\n\nimport { VideoDetailsForm } from './VideoDetailsForm';\n\nfunction getVideoData(video: Video, rightslineVideo: RightslineVideo): UpdateVideoRequest {\n if (!video)\n return;\n\n return {\n ...video,\n ...(rightslineVideo || {}),\n libraries: video.libraries?.data ?? [],\n subtitles: video.subtitles?.data ?? [],\n producers: video.producers?.data ?? [],\n directors: video.directors?.data ?? [],\n productionCompanies: video.productionCompanies?.data ?? [],\n distributors: video.distributors?.data ?? [],\n series: video.series,\n season: video.season,\n glance: { ...video.glance, theme: video.glance?.theme || '' }\n };\n}\n\ninterface EditVideoDetailsProps {\n video: Video;\n saveVideo: (data: UpdateVideoRequest, onDone: () => void) => void;\n ratings: Rating[];\n libraries: Library[];\n onSubtitleFilesAdded?: (files: File[]) => Promise<FileUpload>;\n hideHeroBanner?: boolean;\n rightslineId?: string;\n rightslineVideo?: RightslineVideo;\n hideActions?: boolean;\n onClickCreatePerson?: (name: string) => Promise<Person>;\n onClickCreateCompany?: (name: string) => Promise<Company>;\n getAiGeneratedDescription?: () => Promise<string>;\n}\n\nexport function EditVideoDetails(props: EditVideoDetailsProps): JSX.Element {\n return (\n <FormWrapper<UpdateVideoRequest, Video>\n initialValues={getVideoData(props.video, props.rightslineVideo)}\n validationSchema={VideoValidationSchema}\n onSubmit={props.saveVideo}\n allowInitialSubmit={!!props.rightslineVideo} // data may have changed on sync from Rightsline\n >\n <VideoDetailsForm\n id={props.video && props.video.id}\n ratings={props.ratings}\n libraries={props.libraries}\n rightslineId={props.rightslineId}\n hideActions={props.hideActions}\n hideHeroBanner={props.hideHeroBanner}\n hideThumbnailText\n onSubtitleFilesAdded={props.onSubtitleFilesAdded}\n onClickCreatePerson={props.onClickCreatePerson}\n onClickCreateCompany={props.onClickCreateCompany}\n getAiGeneratedDescription={props.getAiGeneratedDescription}\n />\n </FormWrapper>\n );\n}\n","import React from 'react';\nimport { Button, Spinner } from 'react-bootstrap';\nimport Radio from 'backbone.radio';\n\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { useService } from 'libs/common/react/hooks/UseService';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { UploadEventNames } from 'libs/shared/apps/upload/constants/UploadConstants';\nimport { SubtitleUploadService } from 'libs/shared/apps/upload/services/UploadService';\nimport { ActionButton } from 'libs/shared/components/actions/ActionButton';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SharedServiceChannels } from 'libs/shared/constants/RadioChannels';\nimport { SharedServices } from 'libs/shared/constants/SharedServices';\nimport { RatingRequests } from 'libs/shared/flight-requests/RatingRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { VisibleOnSvg } from 'libs/shared/images/svg/actions/VisibleOnSvg';\nimport { CuratorUser, FileUpload, Library, Person, Rating, TagCollection, Video } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/CuratorActions';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { AiRequests } from 'shared/flight-requests/AiRequests';\nimport { LibraryRequests } from 'shared/flight-requests/LibraryRequests';\nimport { DescriptionSuggestion } from 'shared/interfaces/models/DescriptionSuggestion';\n\nimport { AssemblyLineRequests } from 'apps/assembly-line/flight-requests/AssemblyLineRequests';\nimport { AiError, getErrorMessage } from 'apps/assembly-line/hooks/useAi';\nimport { AssemblyLineVideoResponse } from 'apps/assembly-line/interfaces/responses/AssemblyLineVideoResponse';\nimport { AssemblyLineHelper } from 'apps/assembly-line/utils/AssemblyLineHelper';\nimport { CompanyRequests } from 'apps/companies/flight-requests';\nimport { CvLiveVideoNav } from 'apps/cv-live/components/video-nav/CvLiveVideoNav';\nimport { useFetchPointsOfInterest } from 'apps/glance/hooks/useFetchPointsOfInterest';\nimport { PersonRequests } from 'apps/people/flight-requests/PersonRequests';\nimport { EditVideoDetails } from 'apps/videos/components/edit-video-details';\nimport { EditVideoNav } from 'apps/videos/components/edit-video-nav';\nimport { VideoRequests } from 'apps/videos/flight-requests/CuratorVideoRequests';\nimport { RightslineVideo, UpdateVideoRequest } from 'apps/videos/interfaces';\n\nexport type VideoManagementContext = 'live' | 'clickview';\n\nfunction getLegacyVideoAppLink(videoId: string): Core.AppLink {\n return {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.LEGACY_EDIT_VIDEO,\n args: [videoId]\n };\n}\n\ninterface EditVideoViewProps {\n videoId: string;\n context: VideoManagementContext;\n}\n\nexport function EditVideoView(props: EditVideoViewProps): JSX.Element {\n const [ useRightslineVideoData, setUseRightslineVideoData ] = React.useState(false);\n\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.videoId));\n const rightslineVideo = Flight.useBasicFetch<RightslineVideo>(VideoRequests.rightslineVideo(props.videoId));\n const ratings = Flight.useBasicFetch<Rating[]>(RatingRequests.ratings());\n const clickViewTags = Flight.useBasicFetch<TagCollection>(VideoRequests.clickViewTags(props.videoId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n const pointsOfInterest = useFetchPointsOfInterest(props.videoId);\n const contentPipelineVideo = Flight.useBasicFetch<AssemblyLineVideoResponse>(\n AssemblyLineRequests.getAssemblyLineVideo(props.videoId)\n );\n const hostedLibraries = Flight.useBasicFetch<Library[]>(LibraryRequests.hostedLibraries());\n\n const subtitleUploadService = useService<SubtitleUploadService>(SharedServices.SubtitleUpload);\n const fetchAsync = Flight.useGetFetchAsync();\n const alerts = useAlerts();\n\n function getContentPipelineAppLink(): Core.AppLink {\n if (!contentPipelineVideo.data) return;\n\n return {\n application: AppChannels.ASSEMBLY_LINE,\n action: AssemblyLineHelper.mapStageToAction(contentPipelineVideo.data.stage),\n params: { query: props.videoId }\n };\n }\n \n function fetchRightsline(): void {\n if (rightslineVideo.isFetching)\n return;\n\n setUseRightslineVideoData(true);\n\n // Re-fetch Rightsline data in case it has changed while this page is open.\n fetchAsync(VideoRequests.rightslineVideo(props.videoId));\n }\n\n async function saveVideo(data: UpdateVideoRequest, onDone: () => void): Promise<void> {\n try {\n await dissociateRemovedMembers(data);\n await addNewSubtitles(data);\n await updateLibraries(data);\n\n await fetchAsync(\n VideoRequests.updateVideo(\n props.videoId,\n ObjectHelper.omit(data, [ 'subtitles', 'libraries', 'series', 'season', 'episodeNumber', 'glance' ])\n )\n );\n\n if (data.thumbnail?.fileId !== video.data.thumbnail?.fileId && !contentPipelineVideo.data?.hasCuratedThumbnail)\n await fetchAsync(VideoRequests.updateContentPipelineVideo(props.videoId, { hasCuratedThumbnail: true }));\n\n onDone();\n\n alerts.success(`Successfully saved video.`);\n } catch {\n alerts.error('Something went wrong while trying to save the video. Please try again.');\n }\n }\n\n async function dissociateRemovedMembers(data: UpdateVideoRequest): Promise<void[]> {\n const dissocedProducers = video.data.producers?.data?.filter(p => {\n return !data.producers?.find(p2 => p2.id === p.id);\n });\n const dissocedProductionCompanies = video.data.productionCompanies?.data?.filter(p => {\n return !data.productionCompanies?.find(p2 => p2.id === p.id);\n });\n const dissocedDirectors = video.data.directors?.data?.filter(p => {\n return !data.directors?.find(p2 => p2.id === p.id);\n });\n const dissocedDistributors = video.data.distributors?.data?.filter(p => {\n return !data.distributors?.find(p2 => p2.id === p.id);\n });\n const dissocedSubtitles = video.data.subtitles?.data?.filter(s => {\n return !data.subtitles?.find(s2 => s2.id === s.id);\n });\n\n const dissocRequests = [];\n\n if (dissocedProducers?.length)\n dissocRequests.push(VideoRequests.dissociateMember(props.videoId, 'producers', dissocedProducers.map(p => p.id)));\n\n if (dissocedProductionCompanies?.length)\n dissocRequests.push(VideoRequests.dissociateMember(props.videoId, 'productionCompanies', dissocedProductionCompanies.map(p => p.id)));\n\n if (dissocedDirectors?.length)\n dissocRequests.push(VideoRequests.dissociateMember(props.videoId, 'directors', dissocedDirectors.map(p => p.id)));\n\n if (dissocedDistributors?.length)\n dissocRequests.push(VideoRequests.dissociateMember(props.videoId, 'distributors', dissocedDistributors.map(p => p.id)));\n \n if (dissocedSubtitles?.length)\n dissocRequests.push(VideoRequests.dissociateMember(props.videoId, 'subtitles', dissocedSubtitles.map(p => p.id)));\n\n return Promise.all<void>(dissocRequests.map(r => fetchAsync(r)));\n }\n\n async function addNewSubtitles(data: UpdateVideoRequest): Promise<void[]> {\n const requests: Flight.Request[] = [];\n\n data.subtitles?.forEach(sub => {\n if (!sub.id)\n requests.push(VideoRequests.addSubtitle(props.videoId, sub));\n });\n\n return Promise.all<void>(requests.map(r => fetchAsync(r)));\n }\n\n async function updateLibraries(data: UpdateVideoRequest): Promise<void> {\n const newLibs = data.libraries.filter(l => {\n return !video.data.libraries?.data?.find(existingLibrary => existingLibrary.id.toString() === l.id.toString());\n });\n\n const removedLibraries = video.data.libraries?.data?.filter(l => {\n return !data.libraries.find(lib => lib.id.toString() === l.id.toString());\n }) ?? [];\n\n if (newLibs.length) {\n await fetchAsync(VideoRequests.addToLibraries(video.data.id, newLibs.map(l => l.id)));\n }\n\n if (removedLibraries.length) {\n await Promise.all(removedLibraries.map(l => {\n return fetchAsync(VideoRequests.removeFromLibraries(video.data.id, l.id));\n }));\n }\n }\n\n function onSubtitleFilesAdded(files: File[]): Promise<FileUpload> {\n return new Promise(resolve => {\n subtitleUploadService.addFiles(files);\n\n Radio.channel(SharedServiceChannels.SUBTITLE_UPLOAD)\n .once(UploadEventNames.UPLOAD_COMPLETE, (upload: Core.Model) => {\n resolve(upload.toJSON());\n });\n });\n }\n\n async function onClickCreatePerson(name: string): Promise<Person> {\n return fetchAsync(PersonRequests.createPerson({ name }));\n }\n\n async function onClickCreateCompany(name: string): Promise<Person> {\n return fetchAsync(CompanyRequests.createCompany({ name }));\n }\n\n async function getAiGeneratedDescription(): Promise<string | undefined> {\n if (!video.data.subtitles?.data?.length)\n return;\n\n try {\n const response = await fetchAsync<DescriptionSuggestion>(\n AiRequests.getVideoDescriptionSuggestion(video.data.id, { subtitleId: video.data.subtitles?.data?.[0]?.id })\n );\n return response.description;\n } catch (exception) {\n alerts.error(getErrorMessage((exception as AiError).responseJSON?.type));\n }\n }\n\n function isLoading(): boolean {\n return (\n !video.hasCompleted ||\n !ratings.hasCompleted ||\n !contentPipelineVideo.hasCompleted ||\n !currentUser.hasCompleted ||\n !clickViewTags.hasCompleted ||\n !rightslineVideo.hasCompleted ||\n !pointsOfInterest?.hasCompleted ||\n !hostedLibraries.hasCompleted\n );\n }\n\n if (isLoading()) {\n return (\n <div className='py-5 text-center'>\n <Spinner />\n </div>\n );\n }\n\n return (\n <>\n {props.context === 'live' ? (\n <CvLiveVideoNav\n videoId={props.videoId}\n activeAction={Actions.CvLive.EDIT_VIDEO}\n />\n ) : (\n <EditVideoNav\n videoId={props.videoId}\n activeAction={Actions.Videos.EDIT_VIDEO}\n currentUser={currentUser.data}\n />\n )}\n\n {props.context === 'clickview' && (\n <div className='d-flex justify-content-end gap-2 pt-3'>\n <ActionButton\n appLink={getContentPipelineAppLink()}\n disabled={!contentPipelineVideo.data}\n tooltip={!contentPipelineVideo.data ? 'Video is not in the content pipeline' : ''}\n svg={VisibleOnSvg}\n className='btn btn-outline-dark'\n openInNewTab\n >Open in Content Pipeline</ActionButton>\n\n {!!rightslineVideo.data &&\n <Button variant='outline-dark' onClick={fetchRightsline}>Sync from Rightsline</Button>\n }\n </div>\n )}\n\n <EditVideoDetails\n video={video.data}\n saveVideo={saveVideo}\n ratings={ratings.data}\n libraries={hostedLibraries.data}\n rightslineId={rightslineVideo.data?.rightslineId}\n rightslineVideo={useRightslineVideoData && rightslineVideo.data}\n onSubtitleFilesAdded={onSubtitleFilesAdded}\n hideHeroBanner={props.context === 'live'}\n hideActions={props.context === 'live'}\n onClickCreatePerson={onClickCreatePerson}\n onClickCreateCompany={onClickCreateCompany}\n getAiGeneratedDescription={getAiGeneratedDescription}\n />\n\n {props.context === 'clickview' && (\n <div className='py-3 text-end'>\n {'Can\\'t find what you\\'re looking for? Try the old edit video page '}\n <AppLink className='info-link' appLink={getLegacyVideoAppLink(props.videoId)}>here</AppLink>.\n </div>\n )}\n </>\n );\n}\n","import * as React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { useBulkFetch } from 'libs/common/react/hooks/UseBulkFetch';\nimport { useFetch } from 'libs/common/react/hooks/UseFetch';\nimport { useService } from 'libs/common/react/hooks/UseService';\n\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { CuratorUser, Presentation, PresentationAudience, Video } from 'libs/shared/interfaces';\nimport { StateHelper } from 'libs/shared/utils/StateHelper';\n\nimport { ObjectHeader } from 'shared/components';\nimport { Actions, DataServices } from 'shared/constants';\nimport { SubjectMemberType } from 'shared/enums';\nimport { useSetDefaultPresentation } from 'shared/hooks';\nimport { Level } from 'shared/interfaces/models';\nimport { SubjectDataService, SubjectDataServiceHelper } from 'shared/services';\n\nimport { EditObjectAudiences } from 'apps/subjects/components';\nimport { EditVideoNav } from 'apps/videos/components/edit-video-nav';\nimport { VideoRequests } from 'apps/videos/flight-requests/CuratorVideoRequests';\n\ninterface EditVideoAudiencesViewState {\n presentations?: Presentation[];\n levels?: Level[];\n\n videoLevels?: Level[];\n videoAudiences?: PresentationAudience[];\n\n currentPresentation?: Presentation;\n presentationAudiences?: PresentationAudience[];\n}\n\ntype SetState = React.Dispatch<React.SetStateAction<EditVideoAudiencesViewState>>;\n\nfunction useFetchData(videoId: string, state: EditVideoAudiencesViewState, setState: SetState): void {\n const getSetState = (key: keyof EditVideoAudiencesViewState) => StateHelper.getSetStateByKey(setState, key);\n\n useFetch(\n SubjectDataServiceHelper.getObjectLevelsFetchOptions(videoId, SubjectMemberType.Videos, getSetState('videoLevels')),\n [videoId]\n );\n\n useFetch(\n SubjectDataServiceHelper.getObjectAudiencesFetchOptions(videoId, SubjectMemberType.Videos, getSetState('videoAudiences')),\n [ videoId, state.videoLevels ]\n );\n\n useBulkFetch([\n SubjectDataServiceHelper.getPresentationsFetchOptions(getSetState('presentations'), PresentationType.Subject),\n SubjectDataServiceHelper.getLevelsFetchOptions(getSetState('levels'))\n ], []);\n\n useFetch(\n !!state.currentPresentation && SubjectDataServiceHelper.getAudiencesFetchOptions(state.currentPresentation.id, getSetState('presentationAudiences')),\n [state.currentPresentation],\n !!state.currentPresentation\n );\n}\n\ninterface EditVideoAudiencesViewProps {\n videoId: string;\n}\n\nexport function EditVideoAudiencesView(props: EditVideoAudiencesViewProps): JSX.Element {\n const [ state, setState ] = React.useState<EditVideoAudiencesViewState>({});\n\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.videoId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n\n const subjectDataService = useService<SubjectDataService>(DataServices.SUBJECT);\n\n useFetchData(props.videoId, state, setState);\n useSetDefaultPresentation(state, setState);\n\n const dataLoaded = !!state.presentations && !!state.levels && !!state.presentationAudiences\n && !!state.videoLevels && !!state.videoAudiences;\n\n return (\n <>\n {!!currentUser.data &&\n <EditVideoNav\n videoId={props.videoId}\n activeAction={Actions.Videos.EDIT_VIDEO_AUDIENCES}\n currentUser={currentUser.data}\n />\n }\n <ObjectHeader object={video.data} />\n {!!dataLoaded &&\n <EditObjectAudiences\n objectLevels={state.videoLevels}\n objectAudiences={state.videoAudiences}\n presentations={state.presentations}\n currentPresentation={state.currentPresentation}\n setCurrentPresentation={StateHelper.getSetStateByKey(setState, 'currentPresentation')}\n levels={state.levels}\n presentationAudiences={state.presentationAudiences}\n memberType={SubjectMemberType.Videos}\n saveLevels={(backboneAudienceIds: string[], addToAudiences: boolean, onDone: () => void) =>\n subjectDataService.updateObjectLevels(\n props.videoId,\n backboneAudienceIds,\n SubjectMemberType.Videos,\n addToAudiences,\n onDone,\n onDone\n )\n }\n saveAudiences={(audienceIds: string[], onDone: () => void) =>\n subjectDataService.updateObjectAudiences(\n props.videoId,\n state.currentPresentation.id,\n audienceIds,\n SubjectMemberType.Videos,\n onDone,\n onDone\n )\n }\n />\n }\n </>\n );\n}\n","import * as React from 'react';\nimport { Spinner } from 'react-bootstrap';\nimport { useDispatch } from 'react-redux';\n\nimport { Flight } from 'libs/common/flight';\nimport { useBulkFetch } from 'libs/common/react/hooks/UseBulkFetch';\nimport { useService } from 'libs/common/react/hooks/UseService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Classification, CuratorUser, Presentation, Subject, Video } from 'libs/shared/interfaces';\nimport { StateHelper } from 'libs/shared/utils/StateHelper';\n\nimport { ColumnData, EditObjectSubjects, ObjectHeader } from 'shared/components';\nimport { Actions, AppChannels, DataServices } from 'shared/constants';\nimport { OwnerType, SubjectMemberType } from 'shared/enums';\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\nimport { ClassificationTree, SubjectTree } from 'shared/interfaces/models';\nimport { SubjectDataService, SubjectDataServiceHelper } from 'shared/services';\nimport { ClassificationMemberHelper } from 'shared/utils';\n\nimport { EditVideoNav } from 'apps/videos/components/edit-video-nav';\nimport { VideoRequests } from 'apps/videos/flight-requests/CuratorVideoRequests';\nimport { ClassificationPaths, ClassificationPathsMap } from 'apps/videos/interfaces';\n\ninterface EditVideoSubjectsViewState {\n videoSubjects?: Subject[];\n subjectTree?: SubjectTree;\n subjectClassifications?: Classification[];\n\n presentations?: Presentation[];\n currentPresentation?: Presentation;\n\n classificationTree?: ClassificationTree;\n videoClassifications?: Classification[];\n videoClassificationsPaths?: ClassificationPathsMap;\n availableClassifications?: Classification[];\n}\n\ntype SetState = React.Dispatch<React.SetStateAction<EditVideoSubjectsViewState>>;\n\ntype ActionType = 'hide' | 'remove' | 'add' | 'show';\n\nfunction getOnSuccessMessage(actionType: ActionType): string {\n switch (actionType) {\n case 'show':\n return `Video is now visible within the topic`;\n case 'hide':\n return `Video has been hidden in the topic`;\n case 'add':\n return `Successfully added video to topic`;\n case 'remove':\n return `Successfully removed video from topic`;\n default:\n return '';\n }\n}\n\nfunction getOnErrorMessage(actionType: ActionType): string {\n switch (actionType) {\n case 'show':\n case 'add':\n return `Failed to ${actionType} video to topic`;\n case 'hide':\n case 'remove':\n return `Failed to ${actionType} video from topic`;\n default:\n return '';\n }\n}\n\nfunction useFetchData(setState: SetState): void {\n const getSetState = (key: keyof EditVideoSubjectsViewState) => StateHelper.getSetStateByKey(setState, key);\n\n useBulkFetch([\n SubjectDataServiceHelper.getSubjectTreeFetchOptions(getSetState('subjectTree'), PresentationType.Subject),\n SubjectDataServiceHelper.getPresentationsFetchOptions(getSetState('presentations'), PresentationType.Subject)\n ], []);\n}\n\nfunction useFetchPaths(\n classificationIds: string[],\n setState: SetState\n): void {\n const key = classificationIds?.join(',');\n\n const requests = classificationIds?.length ?\n ArrayHelper.chunk<string>(classificationIds, 100)\n .map(idSet => SubjectRequests.classificationPaths(idSet)) :\n [];\n\n const classificationPathData = Flight.useBasicFetchAll<ClassificationPaths>(requests);\n\n let paths: ClassificationPaths = [];\n\n classificationPathData.data?.forEach(pathSet => paths = paths.concat(pathSet));\n\n React.useEffect(() => {\n if (!classificationPathData.hasCompleted)\n return;\n\n const pathMap: HashObject = {};\n\n paths?.forEach((paths: Classification[][]) => {\n // The last classification in the collection is the one we're creating the path for\n const classification = ArrayHelper.last(paths?.[0]);\n\n if (!classification)\n return;\n\n if (!pathMap[classification.id])\n pathMap[classification.id] = [];\n\n pathMap[classification.id].push(paths);\n });\n\n setState(prev => ({ ...prev, videoClassificationsPaths: pathMap }));\n }, [ key, classificationPathData.hasCompleted, classificationPathData.data?.length ]);\n}\n\nfunction useFetchAvailableClassifications(availableBackboneClassificationIds: string[], setState: SetState): void {\n const key = availableBackboneClassificationIds?.join(',');\n\n const classificationData = Flight.useBasicFetch<Classification[]>(availableBackboneClassificationIds?.length &&\n SubjectRequests.mappedClassificationFromBackboneClassification(availableBackboneClassificationIds));\n\n React.useEffect(() => {\n // handle case where we don't have any data to fetch (as the video hasn't been mapped to a backbone classification)\n if (classificationData.data?.length === 0) {\n setState(prev => ({ ...prev, availableClassifications: []}));\n return;\n }\n\n if (!classificationData.hasCompleted)\n return;\n\n setState(prev => ({ ...prev, availableClassifications: classificationData.data }));\n }, [ key, classificationData.hasCompleted, classificationData.data?.length ]);\n}\n\ninterface EditVideoSubjectsViewProps {\n videoId: string;\n}\n\nexport function EditVideoSubjectsView(props: EditVideoSubjectsViewProps): React.ReactElement {\n const [ state, setState ] = React.useState<EditVideoSubjectsViewState>({});\n\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.videoId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n const visibilities = Flight.useBasicFetch<string[]>(SubjectRequests.videoClassification(props.videoId));\n const videoClassifications = Flight.useBasicFetch<Classification[]>(\n SubjectRequests.objectClassifications(props.videoId)\n );\n\n const videoSubjects = Flight.useBasicFetch<Classification[]>(\n SubjectRequests.memberBackboneClassifications(props.videoId)\n );\n \n useFetchAvailableClassifications(videoSubjects.data?.map(c => c.id), setState);\n\n useFetchPaths(state.availableClassifications?.map(c => c.id), setState);\n \n const subjectDataService = useService<SubjectDataService>(DataServices.SUBJECT);\n\n useFetchData(setState);\n\n function hideVideoInClassification(\n classificationId: string,\n videoId: string\n ): void {\n Flight.fetch(dispatch, SubjectRequests.removeObjectsFromClassification(\n classificationId,\n [videoId],\n SubjectMemberType.PinnedVideos,\n () => onClassificationUpdateSuccess('hide'),\n () => onClassificationUpdateError('hide')\n ));\n }\n\n function showVideoInClassification(\n classificationId: string,\n videoId: string,\n actionType?: 'show' | 'add'\n ): void {\n Flight.fetch(dispatch, SubjectRequests.addObjectsToClassification(\n classificationId,\n [videoId],\n SubjectMemberType.PinnedVideos,\n () => onClassificationUpdateSuccess(actionType),\n () => onClassificationUpdateError(actionType)\n ));\n }\n\n function onClassificationUpdateSuccess(actionType?: ActionType): void {\n alerts.success(getOnSuccessMessage(actionType));\n }\n\n function onClassificationUpdateError(actionType?: ActionType): void {\n alerts.error(getOnErrorMessage(actionType));\n }\n\n function addVideoToClassification(\n classificationId: string,\n videoId: string\n ): void {\n showVideoInClassification(classificationId, videoId, 'add');\n }\n\n function columnActions(data: Classification): ActionOptions[] {\n const options = {\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects,\n subjectId: data.id,\n videoId: props.videoId,\n ownerType: OwnerType.Classification,\n memberType: SubjectMemberType.Videos,\n memberId: props.videoId\n };\n\n const isCurrentlyVisible = visibilities.data?.includes(data.id);\n const isVideoMapped = !!videoClassifications.data?.find((c: Classification) => c.id === data.id);\n\n if (!isVideoMapped) {\n return [\n {\n label: 'Add',\n button: true,\n className: 'btn btn-dark',\n onClick: () => {\n addVideoToClassification(data.id, props.videoId);\n }\n }\n ];\n }\n\n return [\n ClassificationMemberHelper.buildMemberAction({\n actionName: isCurrentlyVisible ? 'hideInClassification' : 'showInClassification',\n callback: isCurrentlyVisible ? () => hideVideoInClassification(data.id, video.data.id) : () => showVideoInClassification(data.id, video.data.id, 'show'),\n ...options\n }),\n {\n label: `Remove Video`,\n appLink: {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.REMOVE_VIDEO_CLASSIFICATION,\n args: [ options.subjectId, options.memberId, options.memberType ]\n },\n className: 'text-danger'\n }\n ];\n }\n\n const columnData: ColumnData = {\n actions: columnActions\n };\n\n const dataLoaded = !!state.subjectTree\n && !!state.presentations\n && !!videoClassifications.data\n && videoSubjects.hasCompleted;\n\n return (\n <>\n {!!currentUser.data &&\n <EditVideoNav\n videoId={props.videoId}\n activeAction={Actions.Videos.EDIT_VIDEO_SUBJECTS}\n currentUser={currentUser.data}\n />\n }\n <ObjectHeader object={video.data} />\n {dataLoaded ?\n <EditObjectSubjects\n objectSubjects={videoSubjects.data}\n subjectTree={state.subjectTree}\n memberType={SubjectMemberType.Videos}\n presentations={state.presentations}\n presentationType={PresentationType.Subject}\n currentPresentation={state.currentPresentation}\n setCurrentPresentation={StateHelper.getSetStateByKey(setState, 'currentPresentation')}\n objectClassifications={videoClassifications.data}\n objectSubjectClassifications={state.subjectClassifications}\n classificationTree={state.classificationTree}\n saveSubjects={(subjectsId: string[], addToClassifications: boolean, onDone: () => void) =>\n Flight.fetch(dispatch, SubjectRequests.updateObjectBackboneClassification(\n props.videoId,\n subjectsId,\n SubjectMemberType.Videos,\n onDone\n ))\n }\n saveClassifications={(classificationIds: string[], onDone: () => void) =>\n subjectDataService.updateObjectClassifications(\n props.videoId,\n state.currentPresentation.id,\n classificationIds,\n SubjectMemberType.Videos,\n onDone,\n onDone\n )\n }\n classificationsPaths={state.videoClassificationsPaths}\n availableClassifications={state.availableClassifications}\n visibleInClassification={visibilities.data}\n videoId={props.videoId}\n columnData={columnData}\n mappedClassification={videoClassifications.data}\n isFetchingVisibility={visibilities.isFetching}\n isVideoClassification\n /> :\n <div className='text-center p-5'>\n <Spinner as='div' animation='border' role='status' />\n </div>\n }\n </>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Curriculum, CurriculumData, Presentation } from 'libs/shared/interfaces';\n\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\n\nconst curriculumLinksCache = new Map<string, Curriculum[][]>();\n\nexport const useCurriculums = (videoId?: string): CurriculumData => {\n const [ activeCurriculum, setActiveCurriculum ] = React.useState<Presentation>(null);\n const [ curriculumLinks, setCurriculumLinks ] = React.useState<Curriculum[][]>(null);\n const [ isFetching, setIsFetching ] = React.useState<boolean>(false);\n\n const fetchAsync = Flight.useGetFetchAsync();\n const alerts = useAlerts();\n\n const allCurriculums = Flight.useBasicFetch<Presentation[]>(\n SubjectRequests.presentations(PresentationType.Curriculum)\n );\n\n React.useEffect(() => {\n if (allCurriculums.data?.length) {\n setActiveCurriculum(allCurriculums.data[0]);\n\n if (videoId) {\n setIsFetching(true);\n fetchAsync<Curriculum[][]>(SubjectRequests.curriculumLinksPresentation(videoId, allCurriculums.data[0].id))\n .then(links => {\n setCurriculumLinks(links);\n }).finally(() => {\n setIsFetching(false);\n });\n }\n }\n }, [allCurriculums.data?.map(c => c.id).join(',')]);\n\n const allCurriculumIds = allCurriculums.data?.map(c => c.id) ?? [];\n\n const mappedCurriculums = Flight.useBasicFetch<Presentation[]>(\n videoId &&\n allCurriculumIds.length &&\n SubjectRequests.getVideoPresentations(\n videoId,\n allCurriculumIds\n )\n );\n\n async function updateCurriculum(curriculumId: string): Promise<void> {\n if (activeCurriculum.id.toString() === curriculumId.toString())\n return;\n\n const curriculum = allCurriculums.data.find(c => c.id.toString() === curriculumId.toString());\n\n setActiveCurriculum(curriculum);\n\n try {\n if (videoId) {\n // If we've already fetched the links for this curriculum, use the cached data\n if (curriculumLinksCache.has(curriculumId.toString())) {\n setCurriculumLinks(curriculumLinksCache.get(curriculumId.toString()));\n return;\n }\n\n setIsFetching(true);\n const links = await fetchAsync<Curriculum[][]>(\n SubjectRequests.curriculumLinksPresentation(videoId, curriculumId)\n );\n setCurriculumLinks(links);\n curriculumLinksCache.set(curriculumId, links);\n setIsFetching(false);\n }\n } catch {\n alerts.error('Something went wrong while trying to switch curriculums. Please try again.');\n\n // If we fail to update, rollback to the previous curriculum\n setActiveCurriculum(activeCurriculum);\n }\n }\n\n function hasCompleted(): boolean {\n if (!activeCurriculum)\n return false;\n\n if (!videoId)\n return true;\n\n return !!curriculumLinks && mappedCurriculums.hasCompleted;\n }\n\n return {\n preferredCurriculum: activeCurriculum,\n curriculumLinks: curriculumLinks || [],\n availableCurriculums: allCurriculums.data || [],\n mappedCurriculums: mappedCurriculums.data || [],\n updateCurriculum,\n hasCompleted: hasCompleted(),\n isFetching\n };\n};\n","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { CurriculumDropdown } from 'libs/shared/components/curriculum-links/CurriculumDropdown';\nimport { CurriculumLinks } from 'libs/shared/components/curriculum-links/CurriculumLinks';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { CuratorUser, Video } from 'libs/shared/interfaces';\n\nimport { ObjectHeader } from 'shared/components';\nimport { Actions } from 'shared/constants';\n\nimport { EditVideoNav } from 'apps/videos/components/edit-video-nav';\nimport { VideoRequests } from 'apps/videos/flight-requests/CuratorVideoRequests';\nimport { useCurriculums } from 'apps/videos/hooks/useCurriculums';\n\ninterface EditVideoSubjectsViewProps {\n videoId: string;\n}\n\nexport function EditVideoCurriculumsView(props: EditVideoSubjectsViewProps): React.ReactElement {\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.videoId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n const {\n availableCurriculums,\n updateCurriculum,\n preferredCurriculum,\n mappedCurriculums,\n curriculumLinks,\n hasCompleted,\n isFetching\n } = useCurriculums(props.videoId);\n\n function onChangeCurriculum(curriculumId: string): void {\n updateCurriculum(curriculumId, { shouldLog: false });\n }\n\n return (\n <>\n {!!currentUser.data &&\n <EditVideoNav\n videoId={props.videoId}\n activeAction={Actions.Videos.EDIT_VIDEO_CURRICULUMS}\n currentUser={currentUser.data}\n />\n }\n <ObjectHeader object={video.data} />\n <CurriculumDropdown\n availableCurriculums={availableCurriculums}\n onChangeCurriculum={onChangeCurriculum}\n selectedCurriculum={preferredCurriculum}\n />\n\n <div className='rounded border position-relative'>\n <Scrollbars autoHeight autoHeightMax={600}>\n <div className='p-3'>\n <CurriculumLinks\n curriculumLinks={curriculumLinks}\n onChangeCurriculum={onChangeCurriculum}\n hasCompleted={hasCompleted}\n mappedCurriculums={mappedCurriculums}\n isFetching={isFetching}\n locationContext={null}\n />\n </div>\n </Scrollbars>\n </div>\n </>\n );\n}\n","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { AliasCollection, CuratorUser, Video } from 'libs/shared/interfaces';\n\nimport { Aliases } from 'shared/components/aliases';\nimport { Actions } from 'shared/constants';\nimport { AliasesRequests } from 'shared/flight-requests/AliasRequests';\nimport { CreateAliasRequest } from 'shared/interfaces';\n\nimport { EditVideoMemberHeader } from 'apps/videos/components/edit-video-member-header/EditVideoMemberHeader';\nimport { EditVideoNav } from 'apps/videos/components/edit-video-nav';\nimport { VideoRequests } from 'apps/videos/flight-requests/CuratorVideoRequests';\n\ninterface EditVideoAliasesViewProps {\n videoId: string;\n}\n\nexport function EditVideoAliasesView(props: EditVideoAliasesViewProps): React.ReactElement {\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.videoId));\n const aliases = Flight.useBasicFetch<AliasCollection>(AliasesRequests.getAliases(props.videoId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n\n function createAlias(alias: CreateAliasRequest, success: () => void): void {\n Flight.fetch(dispatch, AliasesRequests.createAlias(props.videoId, alias, () => {\n alerts.success('Successfully created alias');\n success();\n }, () => {\n alerts.error('Something went wrong creating your alias');\n }));\n }\n\n function deleteAlias(id: string): void {\n Flight.fetch(dispatch, AliasesRequests.deleteAlias(props.videoId, id, () => {\n alerts.success('Successfully deleted alias');\n }, () => {\n alerts.error('Something went wrong deleting your alias');\n }));\n }\n \n if (!aliases.data || !currentUser.data || !video.data) {\n return <>Loading...</>;\n }\n\n return (\n <>\n <EditVideoNav\n videoId={props.videoId}\n activeAction={Actions.Videos.EDIT_VIDEO_ALIASES}\n currentUser={currentUser.data}\n />\n \n <EditVideoMemberHeader memberName='Alias' video={video.data}/>\n\n <Aliases\n aliases={aliases.data.data}\n onSave={createAlias}\n onDelete={deleteAlias}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { useGetFetch } from 'libs/common/react/flight';\nimport { Flight } from 'libs/common/react/index';\n\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { CuratorUser, Tag, Video } from 'libs/shared/interfaces';\n\nimport { CurationTags } from 'shared/components/curation-tags/CurationTags';\nimport { Actions } from 'shared/constants';\nimport { TagRequests } from 'shared/flight-requests/TagRequests';\n\nimport { EditVideoNav } from 'apps/videos/components/edit-video-nav';\nimport { VideoRequests } from 'apps/videos/flight-requests/CuratorVideoRequests';\n\ninterface EditVideoCurationView {\n videoId: string;\n}\n\nexport function EditVideoCurationView(props: EditVideoCurationView) {\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.videoId));\n \n const allCurationTags = Flight.useBasicFetch<Tag[]>(TagRequests.curationTags());\n const selectedCurationTags = Flight.useBasicFetch<Tag[]>(TagRequests.selectedCurationTags(props.videoId));\n const fetch = useGetFetch();\n\n function addCurationTag(tag: Tag, success: () => void, error: () => void) {\n fetch(TagRequests.addTag(props.videoId, tag, success, error));\n }\n\n function removeCurationTag(tag: Tag, success: () => void, error: () => void) {\n fetch(TagRequests.removeTag(props.videoId, tag, success, error));\n }\n\n return (\n <>\n {!!currentUser.data &&\n <EditVideoNav\n videoId={props.videoId}\n activeAction={Actions.Videos.EDIT_VIDEO_CURATION}\n currentUser={currentUser.data}\n />\n }\n {!!video.data && !!allCurationTags.data && !!selectedCurationTags.data &&\n <CurationTags\n id={props.videoId}\n heading={video.data.name}\n curationTags={allCurationTags.data}\n selectedCurationTags={selectedCurationTags.data}\n addCurationTag={addCurationTag}\n removeCurationTag={removeCurationTag}\n disableClickViewCurated\n />\n }\n </>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"6l2s6d3Q.chunk.js","names":[],"sources":["../../../../../src/apps/videos/utils/VideoValidation.ts","../../../../../src/apps/videos/components/edit-video-details/EditVideoDetails.tsx","../../../../../src/apps/videos/views/edit-video/EditVideoView.tsx","../../../../../src/apps/videos/views/edit-video-audiences/EditVideoAudiencesView.tsx","../../../../../src/apps/videos/views/edit-video-subjects/EditVideoSubjectsView.tsx","../../../../../src/apps/videos/hooks/useCurriculums.ts","../../../../../src/apps/videos/views/edit-video-curriculums/EditVideoCurriculumsView.tsx","../../../../../src/apps/videos/views/edit-video-aliases/EditVideoAliasesView.tsx","../../../../../src/apps/videos/views/edit-video-curation/EditVideoCurationView.tsx"],"sourcesContent":["import * as Yup from 'yup';\n\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { GlanceFormat } from 'libs/shared/enums/GlanceFormat';\nimport { ThemeType } from 'libs/shared/enums/ThemeType';\nimport { Glance, Season, Series, UpdateObjectRating } from 'libs/shared/interfaces';\n\nimport { ImageValidationSchema } from 'shared/utils/validation/ImageValidationSchema';\n\nimport { UpdateVideoRequest } from 'apps/videos/interfaces';\n\nexport const VideoValidationSchema = Yup.object().shape<UpdateVideoRequest>({\n\n name: Yup.string()\n .trim()\n .max(255, 'Name is too long')\n .required('Name is required')\n .default(''),\n\n description: Yup.string()\n .trim()\n .default(''),\n\n status: Yup.mixed<CurationStatus>()\n .required('Status is required'),\n\n productionYear: Yup.number()\n .min(1900),\n\n rating: Yup.object()\n .shape<UpdateObjectRating>({\n id: Yup.string()\n })\n .default({})\n .noUnknown(),\n\n thumbnail: ImageValidationSchema,\n heroBanner: ImageValidationSchema,\n\n glance: Yup.object()\n .shape<Glance>({\n theme: Yup.string(),\n format: Yup.mixed<GlanceFormat>(),\n content: Yup.string(),\n type: Yup.mixed<ThemeType>()\n })\n .default({})\n .noUnknown(),\n\n subtitles: Yup.array(),\n producers: Yup.array(),\n productionCompanies: Yup.array(),\n directors: Yup.array(),\n distributors: Yup.array(),\n libraries: Yup.array(),\n series: Yup.object<Series>().nullable(),\n season: Yup.object<Season>().nullable(),\n episodeNumber: Yup.number()\n\n}).noUnknown();\n","import * as React from 'react';\n\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { Company, FileUpload, Library, Person, Rating, Video } from 'libs/shared/interfaces';\n\nimport { RightslineVideo, UpdateVideoRequest } from 'apps/videos/interfaces';\nimport { VideoValidationSchema } from 'apps/videos/utils/VideoValidation';\n\nimport { VideoDetailsForm } from './VideoDetailsForm';\n\nfunction getVideoData(video: Video, rightslineVideo: RightslineVideo): UpdateVideoRequest {\n if (!video)\n return;\n\n return {\n ...video,\n ...(rightslineVideo || {}),\n libraries: video.libraries?.data ?? [],\n subtitles: video.subtitles?.data ?? [],\n producers: video.producers?.data ?? [],\n directors: video.directors?.data ?? [],\n productionCompanies: video.productionCompanies?.data ?? [],\n distributors: video.distributors?.data ?? [],\n series: video.series,\n season: video.season,\n glance: { ...video.glance, theme: video.glance?.theme || '' }\n };\n}\n\ninterface EditVideoDetailsProps {\n video: Video;\n saveVideo: (data: UpdateVideoRequest, onDone: () => void) => void;\n ratings: Rating[];\n libraries: Library[];\n onSubtitleFilesAdded?: (files: File[]) => Promise<FileUpload>;\n hideHeroBanner?: boolean;\n rightslineId?: string;\n rightslineVideo?: RightslineVideo;\n hideActions?: boolean;\n onClickCreatePerson?: (name: string) => Promise<Person>;\n onClickCreateCompany?: (name: string) => Promise<Company>;\n getAiGeneratedDescription?: () => Promise<string>;\n}\n\nexport function EditVideoDetails(props: EditVideoDetailsProps): JSX.Element {\n return (\n <FormWrapper<UpdateVideoRequest, Video>\n initialValues={getVideoData(props.video, props.rightslineVideo)}\n validationSchema={VideoValidationSchema}\n onSubmit={props.saveVideo}\n allowInitialSubmit={!!props.rightslineVideo} // data may have changed on sync from Rightsline\n >\n <VideoDetailsForm\n id={props.video && props.video.id}\n ratings={props.ratings}\n libraries={props.libraries}\n rightslineId={props.rightslineId}\n hideActions={props.hideActions}\n hideHeroBanner={props.hideHeroBanner}\n hideThumbnailText\n onSubtitleFilesAdded={props.onSubtitleFilesAdded}\n onClickCreatePerson={props.onClickCreatePerson}\n onClickCreateCompany={props.onClickCreateCompany}\n getAiGeneratedDescription={props.getAiGeneratedDescription}\n />\n </FormWrapper>\n );\n}\n","import React from 'react';\nimport { Button, Spinner } from 'react-bootstrap';\nimport Radio from 'backbone.radio';\n\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { useService } from 'libs/common/react/hooks/UseService';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { UploadEventNames } from 'libs/shared/apps/upload/constants/UploadConstants';\nimport { SubtitleUploadService } from 'libs/shared/apps/upload/services/UploadService';\nimport { ActionButton } from 'libs/shared/components/actions/ActionButton';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SharedServiceChannels } from 'libs/shared/constants/RadioChannels';\nimport { SharedServices } from 'libs/shared/constants/SharedServices';\nimport { RatingRequests } from 'libs/shared/flight-requests/RatingRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { VisibleOnSvg } from 'libs/shared/images/svg/actions/VisibleOnSvg';\nimport { CuratorUser, FileUpload, Library, Person, Rating, TagCollection, Video } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/CuratorActions';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { AiRequests } from 'shared/flight-requests/AiRequests';\nimport { LibraryRequests } from 'shared/flight-requests/LibraryRequests';\nimport { DescriptionSuggestion } from 'shared/interfaces/models/DescriptionSuggestion';\n\nimport { AssemblyLineRequests } from 'apps/assembly-line/flight-requests/AssemblyLineRequests';\nimport { AiError, getErrorMessage } from 'apps/assembly-line/hooks/useAi';\nimport { AssemblyLineVideoResponse } from 'apps/assembly-line/interfaces/responses/AssemblyLineVideoResponse';\nimport { AssemblyLineHelper } from 'apps/assembly-line/utils/AssemblyLineHelper';\nimport { CompanyRequests } from 'apps/companies/flight-requests';\nimport { CvLiveVideoNav } from 'apps/cv-live/components/video-nav/CvLiveVideoNav';\nimport { useFetchPointsOfInterest } from 'apps/glance/hooks/useFetchPointsOfInterest';\nimport { PersonRequests } from 'apps/people/flight-requests/PersonRequests';\nimport { EditVideoDetails } from 'apps/videos/components/edit-video-details';\nimport { EditVideoNav } from 'apps/videos/components/edit-video-nav';\nimport { VideoRequests } from 'apps/videos/flight-requests/CuratorVideoRequests';\nimport { RightslineVideo, UpdateVideoRequest } from 'apps/videos/interfaces';\n\nexport type VideoManagementContext = 'live' | 'clickview';\n\nfunction getLegacyVideoAppLink(videoId: string): Core.AppLink {\n return {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.LEGACY_EDIT_VIDEO,\n args: [videoId]\n };\n}\n\ninterface EditVideoViewProps {\n videoId: string;\n context: VideoManagementContext;\n}\n\nexport function EditVideoView(props: EditVideoViewProps): JSX.Element {\n const [ useRightslineVideoData, setUseRightslineVideoData ] = React.useState(false);\n\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.videoId));\n const rightslineVideo = Flight.useBasicFetch<RightslineVideo>(VideoRequests.rightslineVideo(props.videoId));\n const ratings = Flight.useBasicFetch<Rating[]>(RatingRequests.ratings());\n const clickViewTags = Flight.useBasicFetch<TagCollection>(VideoRequests.clickViewTags(props.videoId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n const pointsOfInterest = useFetchPointsOfInterest(props.videoId);\n const contentPipelineVideo = Flight.useBasicFetch<AssemblyLineVideoResponse>(\n AssemblyLineRequests.getAssemblyLineVideo(props.videoId)\n );\n const hostedLibraries = Flight.useBasicFetch<Library[]>(LibraryRequests.hostedLibraries());\n\n const subtitleUploadService = useService<SubtitleUploadService>(SharedServices.SubtitleUpload);\n const fetchAsync = Flight.useGetFetchAsync();\n const alerts = useAlerts();\n\n function getContentPipelineAppLink(): Core.AppLink {\n if (!contentPipelineVideo.data) return;\n\n return {\n application: AppChannels.ASSEMBLY_LINE,\n action: AssemblyLineHelper.mapStageToAction(contentPipelineVideo.data.stage),\n params: { query: props.videoId }\n };\n }\n \n function fetchRightsline(): void {\n if (rightslineVideo.isFetching)\n return;\n\n setUseRightslineVideoData(true);\n\n // Re-fetch Rightsline data in case it has changed while this page is open.\n fetchAsync(VideoRequests.rightslineVideo(props.videoId));\n }\n\n async function saveVideo(data: UpdateVideoRequest, onDone: () => void): Promise<void> {\n try {\n await dissociateRemovedMembers(data);\n await addNewSubtitles(data);\n await updateLibraries(data);\n\n await fetchAsync(\n VideoRequests.updateVideo(\n props.videoId,\n ObjectHelper.omit(data, [ 'subtitles', 'libraries', 'series', 'season', 'episodeNumber', 'glance' ])\n )\n );\n\n if (data.thumbnail?.fileId !== video.data.thumbnail?.fileId && !contentPipelineVideo.data?.hasCuratedThumbnail)\n await fetchAsync(VideoRequests.updateContentPipelineVideo(props.videoId, { hasCuratedThumbnail: true }));\n\n onDone();\n\n alerts.success(`Successfully saved video.`);\n } catch {\n alerts.error('Something went wrong while trying to save the video. Please try again.');\n }\n }\n\n async function dissociateRemovedMembers(data: UpdateVideoRequest): Promise<void[]> {\n const dissocedProducers = video.data.producers?.data?.filter(p => {\n return !data.producers?.find(p2 => p2.id === p.id);\n });\n const dissocedProductionCompanies = video.data.productionCompanies?.data?.filter(p => {\n return !data.productionCompanies?.find(p2 => p2.id === p.id);\n });\n const dissocedDirectors = video.data.directors?.data?.filter(p => {\n return !data.directors?.find(p2 => p2.id === p.id);\n });\n const dissocedDistributors = video.data.distributors?.data?.filter(p => {\n return !data.distributors?.find(p2 => p2.id === p.id);\n });\n const dissocedSubtitles = video.data.subtitles?.data?.filter(s => {\n return !data.subtitles?.find(s2 => s2.id === s.id);\n });\n\n const dissocRequests = [];\n\n if (dissocedProducers?.length)\n dissocRequests.push(VideoRequests.dissociateMember(props.videoId, 'producers', dissocedProducers.map(p => p.id)));\n\n if (dissocedProductionCompanies?.length)\n dissocRequests.push(VideoRequests.dissociateMember(props.videoId, 'productionCompanies', dissocedProductionCompanies.map(p => p.id)));\n\n if (dissocedDirectors?.length)\n dissocRequests.push(VideoRequests.dissociateMember(props.videoId, 'directors', dissocedDirectors.map(p => p.id)));\n\n if (dissocedDistributors?.length)\n dissocRequests.push(VideoRequests.dissociateMember(props.videoId, 'distributors', dissocedDistributors.map(p => p.id)));\n \n if (dissocedSubtitles?.length)\n dissocRequests.push(VideoRequests.dissociateMember(props.videoId, 'subtitles', dissocedSubtitles.map(p => p.id)));\n\n return Promise.all<void>(dissocRequests.map(r => fetchAsync(r)));\n }\n\n async function addNewSubtitles(data: UpdateVideoRequest): Promise<void[]> {\n const requests: Flight.Request[] = [];\n\n data.subtitles?.forEach(sub => {\n if (!sub.id)\n requests.push(VideoRequests.addSubtitle(props.videoId, sub));\n });\n\n return Promise.all<void>(requests.map(r => fetchAsync(r)));\n }\n\n async function updateLibraries(data: UpdateVideoRequest): Promise<void> {\n const newLibs = data.libraries.filter(l => {\n return !video.data.libraries?.data?.find(existingLibrary => existingLibrary.id.toString() === l.id.toString());\n });\n\n const removedLibraries = video.data.libraries?.data?.filter(l => {\n return !data.libraries.find(lib => lib.id.toString() === l.id.toString());\n }) ?? [];\n\n if (newLibs.length) {\n await fetchAsync(VideoRequests.addToLibraries(video.data.id, newLibs.map(l => l.id)));\n }\n\n if (removedLibraries.length) {\n await Promise.all(removedLibraries.map(l => {\n return fetchAsync(VideoRequests.removeFromLibraries(video.data.id, l.id));\n }));\n }\n }\n\n function onSubtitleFilesAdded(files: File[]): Promise<FileUpload> {\n return new Promise(resolve => {\n subtitleUploadService.addFiles(files);\n\n Radio.channel(SharedServiceChannels.SUBTITLE_UPLOAD)\n .once(UploadEventNames.UPLOAD_COMPLETE, (upload: Core.Model) => {\n resolve(upload.toJSON());\n });\n });\n }\n\n async function onClickCreatePerson(name: string): Promise<Person> {\n return fetchAsync(PersonRequests.createPerson({ name }));\n }\n\n async function onClickCreateCompany(name: string): Promise<Person> {\n return fetchAsync(CompanyRequests.createCompany({ name }));\n }\n\n async function getAiGeneratedDescription(): Promise<string | undefined> {\n if (!video.data.subtitles?.data?.length)\n return;\n\n try {\n const response = await fetchAsync<DescriptionSuggestion>(\n AiRequests.getVideoDescriptionSuggestion(video.data.id, { subtitleId: video.data.subtitles?.data?.[0]?.id })\n );\n return response.description;\n } catch (exception) {\n alerts.error(getErrorMessage((exception as AiError).responseJSON?.type));\n }\n }\n\n function isLoading(): boolean {\n return (\n !video.hasCompleted ||\n !ratings.hasCompleted ||\n !contentPipelineVideo.hasCompleted ||\n !currentUser.hasCompleted ||\n !clickViewTags.hasCompleted ||\n !rightslineVideo.hasCompleted ||\n !pointsOfInterest?.hasCompleted ||\n !hostedLibraries.hasCompleted\n );\n }\n\n if (isLoading()) {\n return (\n <div className='py-5 text-center'>\n <Spinner />\n </div>\n );\n }\n\n return (\n <>\n {props.context === 'live' ? (\n <CvLiveVideoNav\n videoId={props.videoId}\n activeAction={Actions.CvLive.EDIT_VIDEO}\n />\n ) : (\n <EditVideoNav\n videoId={props.videoId}\n activeAction={Actions.Videos.EDIT_VIDEO}\n currentUser={currentUser.data}\n />\n )}\n\n {props.context === 'clickview' && (\n <div className='d-flex justify-content-end gap-2 pt-3'>\n <ActionButton\n appLink={getContentPipelineAppLink()}\n disabled={!contentPipelineVideo.data}\n tooltip={!contentPipelineVideo.data ? 'Video is not in the content pipeline' : ''}\n svg={VisibleOnSvg}\n className='btn btn-outline-dark'\n openInNewTab\n >Open in Content Pipeline</ActionButton>\n\n {!!rightslineVideo.data &&\n <Button variant='outline-dark' onClick={fetchRightsline}>Sync from Rightsline</Button>\n }\n </div>\n )}\n\n <EditVideoDetails\n video={video.data}\n saveVideo={saveVideo}\n ratings={ratings.data}\n libraries={hostedLibraries.data}\n rightslineId={rightslineVideo.data?.rightslineId}\n rightslineVideo={useRightslineVideoData && rightslineVideo.data}\n onSubtitleFilesAdded={onSubtitleFilesAdded}\n hideHeroBanner={props.context === 'live'}\n hideActions={props.context === 'live'}\n onClickCreatePerson={onClickCreatePerson}\n onClickCreateCompany={onClickCreateCompany}\n getAiGeneratedDescription={getAiGeneratedDescription}\n />\n\n {props.context === 'clickview' && (\n <div className='py-3 text-end'>\n {'Can\\'t find what you\\'re looking for? Try the old edit video page '}\n <AppLink className='info-link' appLink={getLegacyVideoAppLink(props.videoId)}>here</AppLink>.\n </div>\n )}\n </>\n );\n}\n","import * as React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { useBulkFetch } from 'libs/common/react/hooks/UseBulkFetch';\nimport { useFetch } from 'libs/common/react/hooks/UseFetch';\nimport { useService } from 'libs/common/react/hooks/UseService';\n\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { CuratorUser, Presentation, PresentationAudience, Video } from 'libs/shared/interfaces';\nimport { StateHelper } from 'libs/shared/utils/StateHelper';\n\nimport { ObjectHeader } from 'shared/components';\nimport { Actions, DataServices } from 'shared/constants';\nimport { SubjectMemberType } from 'shared/enums';\nimport { useSetDefaultPresentation } from 'shared/hooks';\nimport { Level } from 'shared/interfaces/models';\nimport { SubjectDataService, SubjectDataServiceHelper } from 'shared/services';\n\nimport { EditObjectAudiences } from 'apps/subjects/components';\nimport { EditVideoNav } from 'apps/videos/components/edit-video-nav';\nimport { VideoRequests } from 'apps/videos/flight-requests/CuratorVideoRequests';\n\ninterface EditVideoAudiencesViewState {\n presentations?: Presentation[];\n levels?: Level[];\n\n videoLevels?: Level[];\n videoAudiences?: PresentationAudience[];\n\n currentPresentation?: Presentation;\n presentationAudiences?: PresentationAudience[];\n}\n\ntype SetState = React.Dispatch<React.SetStateAction<EditVideoAudiencesViewState>>;\n\nfunction useFetchData(videoId: string, state: EditVideoAudiencesViewState, setState: SetState): void {\n const getSetState = (key: keyof EditVideoAudiencesViewState) => StateHelper.getSetStateByKey(setState, key);\n\n useFetch(\n SubjectDataServiceHelper.getObjectLevelsFetchOptions(videoId, SubjectMemberType.Videos, getSetState('videoLevels')),\n [videoId]\n );\n\n useFetch(\n SubjectDataServiceHelper.getObjectAudiencesFetchOptions(videoId, SubjectMemberType.Videos, getSetState('videoAudiences')),\n [ videoId, state.videoLevels ]\n );\n\n useBulkFetch([\n SubjectDataServiceHelper.getPresentationsFetchOptions(getSetState('presentations'), PresentationType.Subject),\n SubjectDataServiceHelper.getLevelsFetchOptions(getSetState('levels'))\n ], []);\n\n useFetch(\n !!state.currentPresentation && SubjectDataServiceHelper.getAudiencesFetchOptions(state.currentPresentation.id, getSetState('presentationAudiences')),\n [state.currentPresentation],\n !!state.currentPresentation\n );\n}\n\ninterface EditVideoAudiencesViewProps {\n videoId: string;\n}\n\nexport function EditVideoAudiencesView(props: EditVideoAudiencesViewProps): JSX.Element {\n const [ state, setState ] = React.useState<EditVideoAudiencesViewState>({});\n\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.videoId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n\n const subjectDataService = useService<SubjectDataService>(DataServices.SUBJECT);\n\n useFetchData(props.videoId, state, setState);\n useSetDefaultPresentation(state, setState);\n\n const dataLoaded = !!state.presentations && !!state.levels && !!state.presentationAudiences\n && !!state.videoLevels && !!state.videoAudiences;\n\n return (\n <>\n {!!currentUser.data &&\n <EditVideoNav\n videoId={props.videoId}\n activeAction={Actions.Videos.EDIT_VIDEO_AUDIENCES}\n currentUser={currentUser.data}\n />\n }\n <ObjectHeader object={video.data} />\n {!!dataLoaded &&\n <EditObjectAudiences\n objectLevels={state.videoLevels}\n objectAudiences={state.videoAudiences}\n presentations={state.presentations}\n currentPresentation={state.currentPresentation}\n setCurrentPresentation={StateHelper.getSetStateByKey(setState, 'currentPresentation')}\n levels={state.levels}\n presentationAudiences={state.presentationAudiences}\n memberType={SubjectMemberType.Videos}\n saveLevels={(backboneAudienceIds: string[], addToAudiences: boolean, onDone: () => void) =>\n subjectDataService.updateObjectLevels(\n props.videoId,\n backboneAudienceIds,\n SubjectMemberType.Videos,\n addToAudiences,\n onDone,\n onDone\n )\n }\n saveAudiences={(audienceIds: string[], onDone: () => void) =>\n subjectDataService.updateObjectAudiences(\n props.videoId,\n state.currentPresentation.id,\n audienceIds,\n SubjectMemberType.Videos,\n onDone,\n onDone\n )\n }\n />\n }\n </>\n );\n}\n","import * as React from 'react';\nimport { Spinner } from 'react-bootstrap';\nimport { useDispatch } from 'react-redux';\n\nimport { Flight } from 'libs/common/flight';\nimport { useBulkFetch } from 'libs/common/react/hooks/UseBulkFetch';\nimport { useService } from 'libs/common/react/hooks/UseService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Classification, CuratorUser, Presentation, Subject, Video } from 'libs/shared/interfaces';\nimport { StateHelper } from 'libs/shared/utils/StateHelper';\n\nimport { ColumnData, EditObjectSubjects, ObjectHeader } from 'shared/components';\nimport { Actions, AppChannels, DataServices } from 'shared/constants';\nimport { OwnerType, SubjectMemberType } from 'shared/enums';\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\nimport { ClassificationTree, SubjectTree } from 'shared/interfaces/models';\nimport { SubjectDataService, SubjectDataServiceHelper } from 'shared/services';\nimport { ClassificationMemberHelper } from 'shared/utils';\n\nimport { EditVideoNav } from 'apps/videos/components/edit-video-nav';\nimport { VideoRequests } from 'apps/videos/flight-requests/CuratorVideoRequests';\nimport { ClassificationPaths, ClassificationPathsMap } from 'apps/videos/interfaces';\n\ninterface EditVideoSubjectsViewState {\n videoSubjects?: Subject[];\n subjectTree?: SubjectTree;\n subjectClassifications?: Classification[];\n\n presentations?: Presentation[];\n currentPresentation?: Presentation;\n\n classificationTree?: ClassificationTree;\n videoClassifications?: Classification[];\n videoClassificationsPaths?: ClassificationPathsMap;\n availableClassifications?: Classification[];\n}\n\ntype SetState = React.Dispatch<React.SetStateAction<EditVideoSubjectsViewState>>;\n\ntype ActionType = 'hide' | 'remove' | 'add' | 'show';\n\nfunction getOnSuccessMessage(actionType: ActionType): string {\n switch (actionType) {\n case 'show':\n return `Video is now visible within the topic`;\n case 'hide':\n return `Video has been hidden in the topic`;\n case 'add':\n return `Successfully added video to topic`;\n case 'remove':\n return `Successfully removed video from topic`;\n default:\n return '';\n }\n}\n\nfunction getOnErrorMessage(actionType: ActionType): string {\n switch (actionType) {\n case 'show':\n case 'add':\n return `Failed to ${actionType} video to topic`;\n case 'hide':\n case 'remove':\n return `Failed to ${actionType} video from topic`;\n default:\n return '';\n }\n}\n\nfunction useFetchData(setState: SetState): void {\n const getSetState = (key: keyof EditVideoSubjectsViewState) => StateHelper.getSetStateByKey(setState, key);\n\n useBulkFetch([\n SubjectDataServiceHelper.getSubjectTreeFetchOptions(getSetState('subjectTree'), PresentationType.Subject),\n SubjectDataServiceHelper.getPresentationsFetchOptions(getSetState('presentations'), PresentationType.Subject)\n ], []);\n}\n\nfunction useFetchPaths(\n classificationIds: string[],\n setState: SetState\n): void {\n const key = classificationIds?.join(',');\n\n const requests = classificationIds?.length ?\n ArrayHelper.chunk<string>(classificationIds, 100)\n .map(idSet => SubjectRequests.classificationPaths(idSet)) :\n [];\n\n const classificationPathData = Flight.useBasicFetchAll<ClassificationPaths>(requests);\n\n let paths: ClassificationPaths = [];\n\n classificationPathData.data?.forEach(pathSet => paths = paths.concat(pathSet));\n\n React.useEffect(() => {\n if (!classificationPathData.hasCompleted)\n return;\n\n const pathMap: HashObject = {};\n\n paths?.forEach((paths: Classification[][]) => {\n // The last classification in the collection is the one we're creating the path for\n const classification = ArrayHelper.last(paths?.[0]);\n\n if (!classification)\n return;\n\n if (!pathMap[classification.id])\n pathMap[classification.id] = [];\n\n pathMap[classification.id].push(paths);\n });\n\n setState(prev => ({ ...prev, videoClassificationsPaths: pathMap }));\n }, [ key, classificationPathData.hasCompleted, classificationPathData.data?.length ]);\n}\n\nfunction useFetchAvailableClassifications(availableBackboneClassificationIds: string[], setState: SetState): void {\n const key = availableBackboneClassificationIds?.join(',');\n\n const classificationData = Flight.useBasicFetch<Classification[]>(availableBackboneClassificationIds?.length &&\n SubjectRequests.mappedClassificationFromBackboneClassification(availableBackboneClassificationIds));\n\n React.useEffect(() => {\n // handle case where we don't have any data to fetch (as the video hasn't been mapped to a backbone classification)\n if (classificationData.data?.length === 0) {\n setState(prev => ({ ...prev, availableClassifications: []}));\n return;\n }\n\n if (!classificationData.hasCompleted)\n return;\n\n setState(prev => ({ ...prev, availableClassifications: classificationData.data }));\n }, [ key, classificationData.hasCompleted, classificationData.data?.length ]);\n}\n\ninterface EditVideoSubjectsViewProps {\n videoId: string;\n}\n\nexport function EditVideoSubjectsView(props: EditVideoSubjectsViewProps): React.ReactElement {\n const [ state, setState ] = React.useState<EditVideoSubjectsViewState>({});\n\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.videoId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n const visibilities = Flight.useBasicFetch<string[]>(SubjectRequests.videoClassification(props.videoId));\n const videoClassifications = Flight.useBasicFetch<Classification[]>(\n SubjectRequests.objectClassifications(props.videoId)\n );\n\n const videoSubjects = Flight.useBasicFetch<Classification[]>(\n SubjectRequests.memberBackboneClassifications(props.videoId)\n );\n \n useFetchAvailableClassifications(videoSubjects.data?.map(c => c.id), setState);\n\n useFetchPaths(state.availableClassifications?.map(c => c.id), setState);\n \n const subjectDataService = useService<SubjectDataService>(DataServices.SUBJECT);\n\n useFetchData(setState);\n\n function hideVideoInClassification(\n classificationId: string,\n videoId: string\n ): void {\n Flight.fetch(dispatch, SubjectRequests.removeObjectsFromClassification(\n classificationId,\n [videoId],\n SubjectMemberType.PinnedVideos,\n () => onClassificationUpdateSuccess('hide'),\n () => onClassificationUpdateError('hide')\n ));\n }\n\n function showVideoInClassification(\n classificationId: string,\n videoId: string,\n actionType?: 'show' | 'add'\n ): void {\n Flight.fetch(dispatch, SubjectRequests.addObjectsToClassification(\n classificationId,\n [videoId],\n SubjectMemberType.PinnedVideos,\n () => onClassificationUpdateSuccess(actionType),\n () => onClassificationUpdateError(actionType)\n ));\n }\n\n function onClassificationUpdateSuccess(actionType?: ActionType): void {\n alerts.success(getOnSuccessMessage(actionType));\n }\n\n function onClassificationUpdateError(actionType?: ActionType): void {\n alerts.error(getOnErrorMessage(actionType));\n }\n\n function addVideoToClassification(\n classificationId: string,\n videoId: string\n ): void {\n showVideoInClassification(classificationId, videoId, 'add');\n }\n\n function columnActions(data: Classification): ActionOptions[] {\n const options = {\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects,\n subjectId: data.id,\n videoId: props.videoId,\n ownerType: OwnerType.Classification,\n memberType: SubjectMemberType.Videos,\n memberId: props.videoId\n };\n\n const isCurrentlyVisible = visibilities.data?.includes(data.id);\n const isVideoMapped = !!videoClassifications.data?.find((c: Classification) => c.id === data.id);\n\n if (!isVideoMapped) {\n return [\n {\n label: 'Add',\n button: true,\n className: 'btn btn-dark',\n onClick: () => {\n addVideoToClassification(data.id, props.videoId);\n }\n }\n ];\n }\n\n return [\n ClassificationMemberHelper.buildMemberAction({\n actionName: isCurrentlyVisible ? 'hideInClassification' : 'showInClassification',\n callback: isCurrentlyVisible ? () => hideVideoInClassification(data.id, video.data.id) : () => showVideoInClassification(data.id, video.data.id, 'show'),\n ...options\n }),\n {\n label: `Remove Video`,\n appLink: {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.REMOVE_VIDEO_CLASSIFICATION,\n args: [ options.subjectId, options.memberId, options.memberType ]\n },\n className: 'text-danger'\n }\n ];\n }\n\n const columnData: ColumnData = {\n actions: columnActions\n };\n\n const dataLoaded = !!state.subjectTree\n && !!state.presentations\n && !!videoClassifications.data\n && videoSubjects.hasCompleted;\n\n return (\n <>\n {!!currentUser.data &&\n <EditVideoNav\n videoId={props.videoId}\n activeAction={Actions.Videos.EDIT_VIDEO_SUBJECTS}\n currentUser={currentUser.data}\n />\n }\n <ObjectHeader object={video.data} />\n {dataLoaded ?\n <EditObjectSubjects\n objectSubjects={videoSubjects.data}\n subjectTree={state.subjectTree}\n memberType={SubjectMemberType.Videos}\n presentations={state.presentations}\n presentationType={PresentationType.Subject}\n currentPresentation={state.currentPresentation}\n setCurrentPresentation={StateHelper.getSetStateByKey(setState, 'currentPresentation')}\n objectClassifications={videoClassifications.data}\n objectSubjectClassifications={state.subjectClassifications}\n classificationTree={state.classificationTree}\n saveSubjects={(subjectsId: string[], addToClassifications: boolean, onDone: () => void) =>\n Flight.fetch(dispatch, SubjectRequests.updateObjectBackboneClassification(\n props.videoId,\n subjectsId,\n SubjectMemberType.Videos,\n onDone\n ))\n }\n saveClassifications={(classificationIds: string[], onDone: () => void) =>\n subjectDataService.updateObjectClassifications(\n props.videoId,\n state.currentPresentation.id,\n classificationIds,\n SubjectMemberType.Videos,\n onDone,\n onDone\n )\n }\n classificationsPaths={state.videoClassificationsPaths}\n availableClassifications={state.availableClassifications}\n visibleInClassification={visibilities.data}\n videoId={props.videoId}\n columnData={columnData}\n mappedClassification={videoClassifications.data}\n isFetchingVisibility={visibilities.isFetching}\n isVideoClassification\n /> :\n <div className='text-center p-5'>\n <Spinner as='div' animation='border' role='status' />\n </div>\n }\n </>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Curriculum, CurriculumData, Presentation } from 'libs/shared/interfaces';\n\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\n\nconst curriculumLinksCache = new Map<string, Curriculum[][]>();\n\nexport const useCurriculums = (videoId?: string): CurriculumData => {\n const [ activeCurriculum, setActiveCurriculum ] = React.useState<Presentation>(null);\n const [ curriculumLinks, setCurriculumLinks ] = React.useState<Curriculum[][]>(null);\n const [ isFetching, setIsFetching ] = React.useState<boolean>(false);\n\n const fetchAsync = Flight.useGetFetchAsync();\n const alerts = useAlerts();\n\n const allCurriculums = Flight.useBasicFetch<Presentation[]>(\n SubjectRequests.presentations(PresentationType.Curriculum)\n );\n\n React.useEffect(() => {\n if (allCurriculums.data?.length) {\n setActiveCurriculum(allCurriculums.data[0]);\n\n if (videoId) {\n setIsFetching(true);\n fetchAsync<Curriculum[][]>(SubjectRequests.curriculumLinksPresentation(videoId, allCurriculums.data[0].id))\n .then(links => {\n setCurriculumLinks(links);\n }).finally(() => {\n setIsFetching(false);\n });\n }\n }\n }, [allCurriculums.data?.map(c => c.id).join(',')]);\n\n const allCurriculumIds = allCurriculums.data?.map(c => c.id) ?? [];\n\n const mappedCurriculums = Flight.useBasicFetch<Presentation[]>(\n videoId &&\n allCurriculumIds.length &&\n SubjectRequests.getVideoPresentations(\n videoId,\n allCurriculumIds\n )\n );\n\n async function updateCurriculum(curriculumId: string): Promise<void> {\n if (activeCurriculum.id.toString() === curriculumId.toString())\n return;\n\n const curriculum = allCurriculums.data.find(c => c.id.toString() === curriculumId.toString());\n\n setActiveCurriculum(curriculum);\n\n try {\n if (videoId) {\n // If we've already fetched the links for this curriculum, use the cached data\n if (curriculumLinksCache.has(curriculumId.toString())) {\n setCurriculumLinks(curriculumLinksCache.get(curriculumId.toString()));\n return;\n }\n\n setIsFetching(true);\n const links = await fetchAsync<Curriculum[][]>(\n SubjectRequests.curriculumLinksPresentation(videoId, curriculumId)\n );\n setCurriculumLinks(links);\n curriculumLinksCache.set(curriculumId, links);\n setIsFetching(false);\n }\n } catch {\n alerts.error('Something went wrong while trying to switch curriculums. Please try again.');\n\n // If we fail to update, rollback to the previous curriculum\n setActiveCurriculum(activeCurriculum);\n }\n }\n\n function hasCompleted(): boolean {\n if (!activeCurriculum)\n return false;\n\n if (!videoId)\n return true;\n\n return !!curriculumLinks && mappedCurriculums.hasCompleted;\n }\n\n return {\n preferredCurriculum: activeCurriculum,\n curriculumLinks: curriculumLinks || [],\n availableCurriculums: allCurriculums.data || [],\n mappedCurriculums: mappedCurriculums.data || [],\n updateCurriculum,\n hasCompleted: hasCompleted(),\n isFetching\n };\n};\n","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { CurriculumDropdown } from 'libs/shared/components/curriculum-links/CurriculumDropdown';\nimport { CurriculumLinks } from 'libs/shared/components/curriculum-links/CurriculumLinks';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { CuratorUser, Video } from 'libs/shared/interfaces';\n\nimport { ObjectHeader } from 'shared/components';\nimport { Actions } from 'shared/constants';\n\nimport { EditVideoNav } from 'apps/videos/components/edit-video-nav';\nimport { VideoRequests } from 'apps/videos/flight-requests/CuratorVideoRequests';\nimport { useCurriculums } from 'apps/videos/hooks/useCurriculums';\n\ninterface EditVideoSubjectsViewProps {\n videoId: string;\n}\n\nexport function EditVideoCurriculumsView(props: EditVideoSubjectsViewProps): React.ReactElement {\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.videoId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n const {\n availableCurriculums,\n updateCurriculum,\n preferredCurriculum,\n mappedCurriculums,\n curriculumLinks,\n hasCompleted,\n isFetching\n } = useCurriculums(props.videoId);\n\n function onChangeCurriculum(curriculumId: string): void {\n updateCurriculum(curriculumId, { shouldLog: false });\n }\n\n return (\n <>\n {!!currentUser.data &&\n <EditVideoNav\n videoId={props.videoId}\n activeAction={Actions.Videos.EDIT_VIDEO_CURRICULUMS}\n currentUser={currentUser.data}\n />\n }\n <ObjectHeader object={video.data} />\n <CurriculumDropdown\n availableCurriculums={availableCurriculums}\n onChangeCurriculum={onChangeCurriculum}\n selectedCurriculum={preferredCurriculum}\n />\n\n <div className='rounded border position-relative'>\n <Scrollbars autoHeight autoHeightMax={600}>\n <div className='p-3'>\n <CurriculumLinks\n curriculumLinks={curriculumLinks}\n onChangeCurriculum={onChangeCurriculum}\n hasCompleted={hasCompleted}\n mappedCurriculums={mappedCurriculums}\n isFetching={isFetching}\n locationContext={null}\n />\n </div>\n </Scrollbars>\n </div>\n </>\n );\n}\n","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { AliasCollection, CuratorUser, Video } from 'libs/shared/interfaces';\n\nimport { Aliases } from 'shared/components/aliases';\nimport { Actions } from 'shared/constants';\nimport { AliasesRequests } from 'shared/flight-requests/AliasRequests';\nimport { CreateAliasRequest } from 'shared/interfaces';\n\nimport { EditVideoMemberHeader } from 'apps/videos/components/edit-video-member-header/EditVideoMemberHeader';\nimport { EditVideoNav } from 'apps/videos/components/edit-video-nav';\nimport { VideoRequests } from 'apps/videos/flight-requests/CuratorVideoRequests';\n\ninterface EditVideoAliasesViewProps {\n videoId: string;\n}\n\nexport function EditVideoAliasesView(props: EditVideoAliasesViewProps): React.ReactElement {\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.videoId));\n const aliases = Flight.useBasicFetch<AliasCollection>(AliasesRequests.getAliases(props.videoId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n\n function createAlias(alias: CreateAliasRequest, success: () => void): void {\n Flight.fetch(dispatch, AliasesRequests.createAlias(props.videoId, alias, () => {\n alerts.success('Successfully created alias');\n success();\n }, () => {\n alerts.error('Something went wrong creating your alias');\n }));\n }\n\n function deleteAlias(id: string): void {\n Flight.fetch(dispatch, AliasesRequests.deleteAlias(props.videoId, id, () => {\n alerts.success('Successfully deleted alias');\n }, () => {\n alerts.error('Something went wrong deleting your alias');\n }));\n }\n \n if (!aliases.data || !currentUser.data || !video.data) {\n return <>Loading...</>;\n }\n\n return (\n <>\n <EditVideoNav\n videoId={props.videoId}\n activeAction={Actions.Videos.EDIT_VIDEO_ALIASES}\n currentUser={currentUser.data}\n />\n \n <EditVideoMemberHeader memberName='Alias' video={video.data}/>\n\n <Aliases\n aliases={aliases.data.data}\n onSave={createAlias}\n onDelete={deleteAlias}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { useGetFetch } from 'libs/common/react/flight';\nimport { Flight } from 'libs/common/react/index';\n\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { CuratorUser, Tag, Video } from 'libs/shared/interfaces';\n\nimport { CurationTags } from 'shared/components/curation-tags/CurationTags';\nimport { Actions } from 'shared/constants';\nimport { TagRequests } from 'shared/flight-requests/TagRequests';\n\nimport { EditVideoNav } from 'apps/videos/components/edit-video-nav';\nimport { VideoRequests } from 'apps/videos/flight-requests/CuratorVideoRequests';\n\ninterface EditVideoCurationView {\n videoId: string;\n}\n\nexport function EditVideoCurationView(props: EditVideoCurationView) {\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.videoId));\n \n const allCurationTags = Flight.useBasicFetch<Tag[]>(TagRequests.curationTags());\n const selectedCurationTags = Flight.useBasicFetch<Tag[]>(TagRequests.selectedCurationTags(props.videoId));\n const fetch = useGetFetch();\n\n function addCurationTag(tag: Tag, success: () => void, error: () => void) {\n fetch(TagRequests.addTag(props.videoId, tag, success, error));\n }\n\n function removeCurationTag(tag: Tag, success: () => void, error: () => void) {\n fetch(TagRequests.removeTag(props.videoId, tag, success, error));\n }\n\n return (\n <>\n {!!currentUser.data &&\n <EditVideoNav\n videoId={props.videoId}\n activeAction={Actions.Videos.EDIT_VIDEO_CURATION}\n currentUser={currentUser.data}\n />\n }\n {!!video.data && !!allCurationTags.data && !!selectedCurationTags.data &&\n <CurationTags\n id={props.videoId}\n heading={video.data.name}\n curationTags={allCurationTags.data}\n selectedCurationTags={selectedCurationTags.data}\n addCurationTag={addCurationTag}\n removeCurationTag={removeCurationTag}\n disableClickViewCurated\n />\n }\n </>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as e,i as t}from"./rp704-Pm.chunk.js";import{t as n}from"./BvMTtGLi.chunk.js";import"./CfCYHRuo.chunk.js";import{G as r,W as i,tt as a}from"./
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{a as e,i as t}from"./rp704-Pm.chunk.js";import{t as n}from"./BvMTtGLi.chunk.js";import"./CfCYHRuo.chunk.js";import{G as r,W as i,tt as a}from"./DWHKdmdQ.chunk.js";import{t as o}from"./DmpWpl-3.chunk.js";import{t as s}from"./BMjA_FNA.chunk.js";import{s as c,u as l}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{n as u}from"./BDwjs8qz.chunk.js";import"./BCfBk23W.chunk.js";import{t as d}from"./DjzD1n9W.chunk.js";import{t as f}from"./BNgL3wBw.chunk.js";import{t as p}from"./T3BageSw2.chunk.js";import{i as m,n as h,r as g,t as _}from"./B8RZKQTs2.chunk.js";import{t as v}from"./BYiE7xZS2.chunk.js";import{t as y}from"./MBxuLnEp2.chunk.js";import{t as b}from"./BiPUuGEE2.chunk.js";e();var x={table:`w-100`,header:`fw-semibold`,headerCell:`px-3 py-1 mh-100 align-items-center bg-white ${y.headerCell} text-nowrap`,row:`${y.row} ${y.livestreamRow}`,cell:`d-flex align-items-center border-end border-light ${y.cell} ${y.livestreamCell}`},S=t();function C(e){let{hasPermissions:t}=d(),n=i.getColumns({stage:e.stage,hasPermissions:t},e.stage,`livestream`,null);return(0,S.jsxs)(S.Fragment,{children:[!e.livestreams&&(0,S.jsx)(m,{}),e.livestreams?.data&&!e.livestreams.data.length&&(0,S.jsx)(_,{queryParams:e.queryParams,pipelineId:`cv-live`}),e.livestreams?.data&&e.livestreams.data.length&&(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(s,{columns:n,data:e.livestreams.data,defaultPinnedColumns:e.columnVisibility,columnPinning:{left:i.getPinnedTopicColumnIds()},pinnedColumnsKey:`assembly_line_columns_settings`,columnResizerKey:`assembly_line_column_size_settings:livestream`,scrollable:!0,resizable:!0,virtualiser:{on:!0,rowHeight:60,containerHeight:`75vh`},theme:x}),(0,S.jsx)(`div`,{className:`d-flex flex-row justify-content-end`,children:(0,S.jsx)(f,{cursors:e.livestreams.pagination.cursors||{next:null,previous:null},appLink:o.getCurrentRoute().appLink,buttonVariant:`outline-dark`,className:`text-end pe-1 mt-2`})})]})]})}var w={getBackendParams(e,t,n){let r={name:e.query,cursor:e.cursor,order:[`asc`,`desc`].includes(e.sort)?e.sort:`asc`};switch(t){case`draft_livestreams`:r.status=u.Draft;break;case`past_livestreams`:r.status=u.Published,r.withRecordings=!1,r.to=g;break;case`upcoming_livestreams`:r.status=u.Published,r.withRecordings=!1,r.from=g;break;case`completed_livestreams`:r.withRecordings=!0;break}return n.reduce((e,t)=>{switch(t.field){case`object_status`:e.status=t.values?.[0]?.value;break;case`content_partner`:e.companyId=t.values?.[0]?.value;break;case`classification`:e.topicId=t.values?.map(e=>e.value);break;case`audience`:e.audienceId=t.values?.map(e=>e.value);break}return e},r)}};function T(e){let t=b(e.queryParams,e.subStage,`livestream`),o=p(e.queryParams,e.subStage),s=w.getBackendParams(e.queryParams,e.subStage,o),u=l(),d=c(v.livestreams({...s,query:`audiences,classifications`})),f=i.getNextStage(e.subStage);async function m(t){let a=i.mapStageToAction(f);if(await u(r.updateTopicStage(t,e.subStage,f)),a)return{application:n.ASSEMBLY_LINE,action:a,params:e.queryParams}}return(0,S.jsx)(a,{subStage:e.subStage,pipelineId:e.pipelineId,children:(0,S.jsx)(h,{stage:e.stage,subStage:e.subStage,objectType:`livestream`,pipelineId:e.pipelineId,queryParams:e.queryParams,columnVisibility:t,filters:o,counts:{showing:d.data?.data?.length??0,total:d.data?.count??0},children:(0,S.jsx)(C,{stage:e.subStage,onClickMoveToNextStage:m,livestreams:d.data,queryParams:e.queryParams,columnVisibility:t})})})}export{T as AssemblyLineLivestreamStageView};
|
|
2
|
+
//# sourceMappingURL=8RAh0VA72.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DezIbRcB2.chunk.js","names":[],"sources":["../../../../../src/apps/assembly-line/constants/AssemblyLineLivestreamTableTheme.ts","../../../../../src/apps/cv-live-pipeline/components/livestream-table/AssemblyLineLivestreamTable.tsx","../../../../../src/apps/cv-live-pipeline/utils/CvLivePipelineFilterHelper.ts","../../../../../src/apps/cv-live-pipeline/views/AssemblyLineLivestreamStageView.tsx"],"sourcesContent":["import { TableThemeV2 } from 'libs/shared/components/table-v2/TableV2';\n\nimport styles from './theme.module.scss';\n\nexport const ASSEMBLY_LINE_LIVESTREAM_TABLE_THEME: TableThemeV2 = {\n table: 'w-100',\n header: 'fw-semibold',\n headerCell: `px-3 py-1 mh-100 align-items-center bg-white ${styles.headerCell} text-nowrap`,\n row: `${styles.row} ${styles.livestreamRow}`,\n cell: `d-flex align-items-center border-end border-light ${styles.cell} ${styles.livestreamCell}`\n};\n","import React from 'react';\nimport { VisibilityState } from '@tanstack/react-table';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { Pagination } from 'libs/shared/components/pagination/Pagination';\nimport { TableV2 } from 'libs/shared/components/table-v2/TableV2';\nimport { LivestreamCollection } from 'libs/shared/interfaces';\nimport { ContextService } from 'libs/shared/services/ContextService';\n\nimport { useCuratorPermissions } from 'shared/hooks';\n\nimport { AssemblyLineEmptyState } from 'apps/assembly-line/components/empty-state/AssemblyLineEmptyState';\nimport { AssemblyLineSpinner } from 'apps/assembly-line/components/spinner/AssemblyLineSpinner';\nimport { ASSEMBLY_LINE_LIVESTREAM_TABLE_THEME } from 'apps/assembly-line/constants/AssemblyLineLivestreamTableTheme';\nimport { ASSEMBLY_LINE_COLUMN_SIZE_SETTINGS, ASSEMBLY_LINE_PINNED_COLUMN_SETTINGS } from 'apps/assembly-line/constants/AssemblyLineTableColumnsSettingString';\nimport { AssemblyLineQueryParams } from 'apps/assembly-line/interfaces/AssemblyLineQueryParams';\nimport { AssemblyLineStage } from 'apps/assembly-line/interfaces/AssemblyLineStage';\nimport { AssemblyLineHelper } from 'apps/assembly-line/utils/AssemblyLineHelper';\n\ninterface AssemblyLineLivestreamTableProps {\n livestreams: LivestreamCollection;\n queryParams: AssemblyLineQueryParams;\n onClickMoveToNextStage: (id: string) => Promise<Core.AppLink>;\n stage: AssemblyLineStage;\n columnVisibility: VisibilityState;\n}\n\nexport function AssemblyLineLivestreamTable(props: AssemblyLineLivestreamTableProps): JSX.Element {\n const { hasPermissions } = useCuratorPermissions();\n\n const columns = AssemblyLineHelper.getColumns(\n {\n stage: props.stage,\n hasPermissions\n },\n props.stage,\n 'livestream',\n null\n );\n\n return (\n <>\n {!props.livestreams && <AssemblyLineSpinner />}\n\n {props.livestreams?.data && !props.livestreams.data.length && (\n <AssemblyLineEmptyState queryParams={props.queryParams} pipelineId='cv-live' />\n )}\n\n {props.livestreams?.data && props.livestreams.data.length && (\n <>\n <TableV2<any>\n columns={columns}\n data={props.livestreams.data}\n defaultPinnedColumns={props.columnVisibility}\n columnPinning={{\n left: AssemblyLineHelper.getPinnedTopicColumnIds()\n }}\n pinnedColumnsKey={ASSEMBLY_LINE_PINNED_COLUMN_SETTINGS}\n columnResizerKey={`${ASSEMBLY_LINE_COLUMN_SIZE_SETTINGS}:livestream`}\n scrollable\n resizable\n virtualiser={{\n on: true,\n rowHeight: 60,\n containerHeight: '75vh'\n }}\n theme={ASSEMBLY_LINE_LIVESTREAM_TABLE_THEME}\n />\n\n <div className='d-flex flex-row justify-content-end'>\n <Pagination\n cursors={props.livestreams.pagination.cursors || { next: null, previous: null }}\n appLink={ContextService.getCurrentRoute().appLink}\n buttonVariant='outline-dark'\n className='text-end pe-1 mt-2'\n />\n </div>\n </>\n )}\n </>\n );\n}\n","import { HashObject } from 'libs/common/react/interfaces';\n\nimport { CurationStatusString } from 'libs/shared/enums/CurationStatus';\n\nimport { ConditionalFilterState } from 'apps/assembly-line/components/conditional-filters/ConditionalFilters';\nimport { TODAY_TIMESTAMP } from 'apps/assembly-line/hooks/useFetchAssemblyLineStageCounts';\nimport { AssemblyLineQueryParams } from 'apps/assembly-line/interfaces/AssemblyLineQueryParams';\nimport { AssemblyLineStage } from 'apps/assembly-line/interfaces/AssemblyLineStage';\nimport { AssemblyLineFilterField } from 'apps/assembly-line/interfaces/requests/AssemblyLineFilterRequest';\n\nexport const CvLivePipelineFilterHelper = {\n getBackendParams(\n queryParams: AssemblyLineQueryParams,\n stage: AssemblyLineStage,\n state: ConditionalFilterState<AssemblyLineFilterField>[]\n ): any {\n const getSortParam = () => {\n if ([ 'asc', 'desc' ].includes(queryParams.sort))\n return queryParams.sort;\n\n return 'asc';\n };\n\n const backendParams: HashObject = {\n name: queryParams.query,\n cursor: queryParams.cursor,\n order: getSortParam()\n };\n\n switch (stage) {\n case 'draft_livestreams': {\n backendParams.status = CurationStatusString.Draft;\n break;\n }\n\n case 'past_livestreams': {\n backendParams.status = CurationStatusString.Published;\n backendParams.withRecordings = false;\n backendParams.to = TODAY_TIMESTAMP;\n break;\n }\n\n case 'upcoming_livestreams': {\n backendParams.status = CurationStatusString.Published;\n backendParams.withRecordings = false;\n backendParams.from = TODAY_TIMESTAMP;\n break;\n }\n\n case 'completed_livestreams': {\n backendParams.withRecordings = true;\n break;\n }\n }\n\n return state.reduce<HashObject>((backendParams, filter) => {\n switch (filter.field) {\n case 'object_status': {\n backendParams.status = filter.values?.[0]?.value;\n break;\n }\n\n case 'content_partner': {\n backendParams.companyId = filter.values?.[0]?.value;\n break;\n }\n\n case 'classification': {\n backendParams.topicId = filter.values?.map(value => value.value);\n break;\n }\n\n case 'audience': {\n backendParams.audienceId = filter.values?.map(value => value.value);\n break;\n }\n }\n\n return backendParams;\n }, backendParams);\n }\n};\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\n\nimport { LivestreamCollection } from 'libs/shared/interfaces';\n\nimport { AppChannels } from 'shared/constants';\n\nimport { AssemblyLineLayoutView } from 'apps/assembly-line/components/layout/AssemblyLineLayout';\nimport { AssemblyLineStageContext } from 'apps/assembly-line/contexts/AssemblyLineStageContext';\nimport { AssemblyLineRequests } from 'apps/assembly-line/flight-requests/AssemblyLineRequests';\nimport { useAssemblyLineColumns } from 'apps/assembly-line/hooks/useAssemblyLineColumns';\nimport { useAssemblyLineFilters } from 'apps/assembly-line/hooks/useAssemblyLineFilters';\nimport { AssemblyLineViewProps } from 'apps/assembly-line/interfaces/AssemblyLineViewProps';\nimport { AssemblyLineHelper } from 'apps/assembly-line/utils/AssemblyLineHelper';\nimport { LivestreamRequests } from 'apps/cv-live/flight-requests/CvLiveLivestreamRequests';\n\nimport { AssemblyLineLivestreamTable } from '../components/livestream-table/AssemblyLineLivestreamTable';\nimport { CvLivePipelineFilterHelper } from '../utils/CvLivePipelineFilterHelper';\n\nexport function AssemblyLineLivestreamStageView(props: AssemblyLineViewProps): JSX.Element {\n const columnVisibility = useAssemblyLineColumns(props.queryParams, props.subStage, 'livestream');\n const filters = useAssemblyLineFilters(props.queryParams, props.subStage);\n\n const params = CvLivePipelineFilterHelper.getBackendParams(props.queryParams, props.subStage, filters);\n\n const fetchAsync = Flight.useGetFetchAsync();\n\n const livestreams = Flight.useBasicFetch<LivestreamCollection>(\n LivestreamRequests.livestreams({ ...params, query: 'audiences,classifications' })\n );\n\n const nextStage = AssemblyLineHelper.getNextStage(props.subStage);\n\n async function onClickMoveToNextStage(id: string): Promise<Core.AppLink> {\n const action = AssemblyLineHelper.mapStageToAction(nextStage);\n\n await fetchAsync(AssemblyLineRequests.updateTopicStage(id, props.subStage, nextStage));\n\n if (!action)\n return;\n\n return {\n application: AppChannels.ASSEMBLY_LINE,\n action,\n params: props.queryParams\n };\n }\n\n return (\n <AssemblyLineStageContext subStage={props.subStage} pipelineId={props.pipelineId}>\n <AssemblyLineLayoutView\n stage={props.stage}\n subStage={props.subStage}\n objectType='livestream'\n pipelineId={props.pipelineId}\n queryParams={props.queryParams}\n columnVisibility={columnVisibility}\n filters={filters}\n counts={{\n showing: livestreams.data?.data?.length ?? 0,\n total: livestreams.data?.count ?? 0\n }}\n >\n <AssemblyLineLivestreamTable\n stage={props.subStage}\n onClickMoveToNextStage={onClickMoveToNextStage}\n livestreams={livestreams.data}\n queryParams={props.queryParams}\n columnVisibility={columnVisibility}\n />\n </AssemblyLineLayoutView>\n </AssemblyLineStageContext>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"8RAh0VA72.chunk.js","names":[],"sources":["../../../../../src/apps/assembly-line/constants/AssemblyLineLivestreamTableTheme.ts","../../../../../src/apps/cv-live-pipeline/components/livestream-table/AssemblyLineLivestreamTable.tsx","../../../../../src/apps/cv-live-pipeline/utils/CvLivePipelineFilterHelper.ts","../../../../../src/apps/cv-live-pipeline/views/AssemblyLineLivestreamStageView.tsx"],"sourcesContent":["import { TableThemeV2 } from 'libs/shared/components/table-v2/TableV2';\n\nimport styles from './theme.module.scss';\n\nexport const ASSEMBLY_LINE_LIVESTREAM_TABLE_THEME: TableThemeV2 = {\n table: 'w-100',\n header: 'fw-semibold',\n headerCell: `px-3 py-1 mh-100 align-items-center bg-white ${styles.headerCell} text-nowrap`,\n row: `${styles.row} ${styles.livestreamRow}`,\n cell: `d-flex align-items-center border-end border-light ${styles.cell} ${styles.livestreamCell}`\n};\n","import React from 'react';\nimport { VisibilityState } from '@tanstack/react-table';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { Pagination } from 'libs/shared/components/pagination/Pagination';\nimport { TableV2 } from 'libs/shared/components/table-v2/TableV2';\nimport { LivestreamCollection } from 'libs/shared/interfaces';\nimport { ContextService } from 'libs/shared/services/ContextService';\n\nimport { useCuratorPermissions } from 'shared/hooks';\n\nimport { AssemblyLineEmptyState } from 'apps/assembly-line/components/empty-state/AssemblyLineEmptyState';\nimport { AssemblyLineSpinner } from 'apps/assembly-line/components/spinner/AssemblyLineSpinner';\nimport { ASSEMBLY_LINE_LIVESTREAM_TABLE_THEME } from 'apps/assembly-line/constants/AssemblyLineLivestreamTableTheme';\nimport { ASSEMBLY_LINE_COLUMN_SIZE_SETTINGS, ASSEMBLY_LINE_PINNED_COLUMN_SETTINGS } from 'apps/assembly-line/constants/AssemblyLineTableColumnsSettingString';\nimport { AssemblyLineQueryParams } from 'apps/assembly-line/interfaces/AssemblyLineQueryParams';\nimport { AssemblyLineStage } from 'apps/assembly-line/interfaces/AssemblyLineStage';\nimport { AssemblyLineHelper } from 'apps/assembly-line/utils/AssemblyLineHelper';\n\ninterface AssemblyLineLivestreamTableProps {\n livestreams: LivestreamCollection;\n queryParams: AssemblyLineQueryParams;\n onClickMoveToNextStage: (id: string) => Promise<Core.AppLink>;\n stage: AssemblyLineStage;\n columnVisibility: VisibilityState;\n}\n\nexport function AssemblyLineLivestreamTable(props: AssemblyLineLivestreamTableProps): JSX.Element {\n const { hasPermissions } = useCuratorPermissions();\n\n const columns = AssemblyLineHelper.getColumns(\n {\n stage: props.stage,\n hasPermissions\n },\n props.stage,\n 'livestream',\n null\n );\n\n return (\n <>\n {!props.livestreams && <AssemblyLineSpinner />}\n\n {props.livestreams?.data && !props.livestreams.data.length && (\n <AssemblyLineEmptyState queryParams={props.queryParams} pipelineId='cv-live' />\n )}\n\n {props.livestreams?.data && props.livestreams.data.length && (\n <>\n <TableV2<any>\n columns={columns}\n data={props.livestreams.data}\n defaultPinnedColumns={props.columnVisibility}\n columnPinning={{\n left: AssemblyLineHelper.getPinnedTopicColumnIds()\n }}\n pinnedColumnsKey={ASSEMBLY_LINE_PINNED_COLUMN_SETTINGS}\n columnResizerKey={`${ASSEMBLY_LINE_COLUMN_SIZE_SETTINGS}:livestream`}\n scrollable\n resizable\n virtualiser={{\n on: true,\n rowHeight: 60,\n containerHeight: '75vh'\n }}\n theme={ASSEMBLY_LINE_LIVESTREAM_TABLE_THEME}\n />\n\n <div className='d-flex flex-row justify-content-end'>\n <Pagination\n cursors={props.livestreams.pagination.cursors || { next: null, previous: null }}\n appLink={ContextService.getCurrentRoute().appLink}\n buttonVariant='outline-dark'\n className='text-end pe-1 mt-2'\n />\n </div>\n </>\n )}\n </>\n );\n}\n","import { HashObject } from 'libs/common/react/interfaces';\n\nimport { CurationStatusString } from 'libs/shared/enums/CurationStatus';\n\nimport { ConditionalFilterState } from 'apps/assembly-line/components/conditional-filters/ConditionalFilters';\nimport { TODAY_TIMESTAMP } from 'apps/assembly-line/hooks/useFetchAssemblyLineStageCounts';\nimport { AssemblyLineQueryParams } from 'apps/assembly-line/interfaces/AssemblyLineQueryParams';\nimport { AssemblyLineStage } from 'apps/assembly-line/interfaces/AssemblyLineStage';\nimport { AssemblyLineFilterField } from 'apps/assembly-line/interfaces/requests/AssemblyLineFilterRequest';\n\nexport const CvLivePipelineFilterHelper = {\n getBackendParams(\n queryParams: AssemblyLineQueryParams,\n stage: AssemblyLineStage,\n state: ConditionalFilterState<AssemblyLineFilterField>[]\n ): any {\n const getSortParam = () => {\n if ([ 'asc', 'desc' ].includes(queryParams.sort))\n return queryParams.sort;\n\n return 'asc';\n };\n\n const backendParams: HashObject = {\n name: queryParams.query,\n cursor: queryParams.cursor,\n order: getSortParam()\n };\n\n switch (stage) {\n case 'draft_livestreams': {\n backendParams.status = CurationStatusString.Draft;\n break;\n }\n\n case 'past_livestreams': {\n backendParams.status = CurationStatusString.Published;\n backendParams.withRecordings = false;\n backendParams.to = TODAY_TIMESTAMP;\n break;\n }\n\n case 'upcoming_livestreams': {\n backendParams.status = CurationStatusString.Published;\n backendParams.withRecordings = false;\n backendParams.from = TODAY_TIMESTAMP;\n break;\n }\n\n case 'completed_livestreams': {\n backendParams.withRecordings = true;\n break;\n }\n }\n\n return state.reduce<HashObject>((backendParams, filter) => {\n switch (filter.field) {\n case 'object_status': {\n backendParams.status = filter.values?.[0]?.value;\n break;\n }\n\n case 'content_partner': {\n backendParams.companyId = filter.values?.[0]?.value;\n break;\n }\n\n case 'classification': {\n backendParams.topicId = filter.values?.map(value => value.value);\n break;\n }\n\n case 'audience': {\n backendParams.audienceId = filter.values?.map(value => value.value);\n break;\n }\n }\n\n return backendParams;\n }, backendParams);\n }\n};\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\n\nimport { LivestreamCollection } from 'libs/shared/interfaces';\n\nimport { AppChannels } from 'shared/constants';\n\nimport { AssemblyLineLayoutView } from 'apps/assembly-line/components/layout/AssemblyLineLayout';\nimport { AssemblyLineStageContext } from 'apps/assembly-line/contexts/AssemblyLineStageContext';\nimport { AssemblyLineRequests } from 'apps/assembly-line/flight-requests/AssemblyLineRequests';\nimport { useAssemblyLineColumns } from 'apps/assembly-line/hooks/useAssemblyLineColumns';\nimport { useAssemblyLineFilters } from 'apps/assembly-line/hooks/useAssemblyLineFilters';\nimport { AssemblyLineViewProps } from 'apps/assembly-line/interfaces/AssemblyLineViewProps';\nimport { AssemblyLineHelper } from 'apps/assembly-line/utils/AssemblyLineHelper';\nimport { LivestreamRequests } from 'apps/cv-live/flight-requests/CvLiveLivestreamRequests';\n\nimport { AssemblyLineLivestreamTable } from '../components/livestream-table/AssemblyLineLivestreamTable';\nimport { CvLivePipelineFilterHelper } from '../utils/CvLivePipelineFilterHelper';\n\nexport function AssemblyLineLivestreamStageView(props: AssemblyLineViewProps): JSX.Element {\n const columnVisibility = useAssemblyLineColumns(props.queryParams, props.subStage, 'livestream');\n const filters = useAssemblyLineFilters(props.queryParams, props.subStage);\n\n const params = CvLivePipelineFilterHelper.getBackendParams(props.queryParams, props.subStage, filters);\n\n const fetchAsync = Flight.useGetFetchAsync();\n\n const livestreams = Flight.useBasicFetch<LivestreamCollection>(\n LivestreamRequests.livestreams({ ...params, query: 'audiences,classifications' })\n );\n\n const nextStage = AssemblyLineHelper.getNextStage(props.subStage);\n\n async function onClickMoveToNextStage(id: string): Promise<Core.AppLink> {\n const action = AssemblyLineHelper.mapStageToAction(nextStage);\n\n await fetchAsync(AssemblyLineRequests.updateTopicStage(id, props.subStage, nextStage));\n\n if (!action)\n return;\n\n return {\n application: AppChannels.ASSEMBLY_LINE,\n action,\n params: props.queryParams\n };\n }\n\n return (\n <AssemblyLineStageContext subStage={props.subStage} pipelineId={props.pipelineId}>\n <AssemblyLineLayoutView\n stage={props.stage}\n subStage={props.subStage}\n objectType='livestream'\n pipelineId={props.pipelineId}\n queryParams={props.queryParams}\n columnVisibility={columnVisibility}\n filters={filters}\n counts={{\n showing: livestreams.data?.data?.length ?? 0,\n total: livestreams.data?.count ?? 0\n }}\n >\n <AssemblyLineLivestreamTable\n stage={props.subStage}\n onClickMoveToNextStage={onClickMoveToNextStage}\n livestreams={livestreams.data}\n queryParams={props.queryParams}\n columnVisibility={columnVisibility}\n />\n </AssemblyLineLayoutView>\n </AssemblyLineStageContext>\n );\n}\n"],"mappings":"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"}
|