@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":"Cp6Af16p.chunk.js","names":[],"sources":["../../../../../src/apps/playlists/views/delete-playlist/DeletePlaylistView.tsx","../../../../../src/apps/playlists/components/edit-playlist/EditPlaylistDetailsForm.tsx","../../../../../src/apps/playlists/components/edit-playlist/EditPlaylistDetails.tsx","../../../../../src/apps/playlists/views/edit-playlist/EditPlaylistView.tsx","../../../../../src/apps/playlists/views/edit-playlist-audiences/EditPlaylistAudiencesView.tsx","../../../../../src/apps/playlists/views/edit-playlist-subjects/EditPlaylistSubjectsView.tsx","../../../../../../../libs/shared/src/hooks/UseReorderedItems.ts","../../../../../src/apps/playlists/views/edit-playlist-videos/EditPlaylistVideosView.tsx","../../../../../src/apps/playlists/views/edit-playlist-aliases/EditPlaylistAliasesView.tsx","../../../../../src/apps/playlists/views/edit-playlist-curation/EditPlaylistCurationView.tsx","../../../../../src/apps/playlists/views/new-playlist/NewPlaylistView.tsx","../../../../../src/apps/playlists/views/remove-video/RemoveVideoView.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Playlist, PopupViewProps } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/CuratorActions';\nimport { AppChannels } from 'shared/constants/RadioChannels';\n\nimport { PlaylistRequests } from 'apps/playlists/flight-requests/CuratorPlaylistRequests';\n\ninterface DeletePlaylistViewProps {\n playlistId: string;\n}\n\nexport function DeletePlaylistView(props: DeletePlaylistViewProps & PopupViewProps): React.ReactElement {\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const [ showButtonSpinner, setShowButtonSpinner ] = React.useState(false);\n\n const playlist = Flight.useBasicFetch<Playlist>(PlaylistRequests.playlist(props.playlistId));\n\n function deletePlaylist(): void {\n setShowButtonSpinner(true);\n\n const onSuccess = () => {\n alerts.success('Successfully deleted playlist.');\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.PLAYLISTS\n });\n };\n\n const onError = () => {\n setShowButtonSpinner(false);\n alerts.error('Failed to delete playlist.');\n };\n\n Flight.fetch(dispatch, PlaylistRequests.deletePlaylist(props.playlistId, onSuccess, onError, props.closePopup));\n }\n\n const dataLoaded = !!playlist.data;\n\n return (\n <Popup title='Delete Playlist' closePopup={props.closePopup} showLoadingSpinner={!dataLoaded}>\n {dataLoaded &&\n <>\n <div>\n <p>Are you sure you want to delete <strong>{playlist.data.name}</strong>?</p>\n <p>Please ensure it is not being used in any widgets.</p>\n </div>\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.closePopup} />\n <PopupButtons.Submit\n variant='danger'\n onClick={deletePlaylist}\n text='Yes, delete playlist'\n showSpinner={showButtonSpinner}\n />\n </PopupButtons>\n </>\n }\n </Popup>\n );\n}\n","import * as React from 'react';\nimport { Form, useFormikContext } from 'formik';\n\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { useCanSubmitForm } from 'libs/shared/hooks/UseCanSubmitForm';\nimport { User } from 'libs/shared/interfaces';\n\nimport { ImageSelect } from 'shared/components';\nimport { Actions as AppActions, AppChannels } from 'shared/constants';\n\nimport { CreateOrUpdatePlaylistRequest } from 'apps/playlists/interfaces';\n\ninterface EditPlaylistDetailsFormProps {\n id?: string;\n owner?: User;\n actions?: ActionOptions[];\n}\n\nexport function EditPlaylistDetailsForm(props: EditPlaylistDetailsFormProps): React.ReactElement {\n const formikProps = useFormikContext<CreateOrUpdatePlaylistRequest>();\n\n const canSubmit = useCanSubmitForm(formikProps);\n\n return (\n <Form>\n {!!props.owner?.username &&\n <p className='my-2'><strong>Owner:</strong> {props.owner.username}</p>\n }\n <FormField<CreateOrUpdatePlaylistRequest>\n label='Name'\n type='text'\n name='name'\n id='name'\n value={formikProps.values.name}\n placeholder='Enter a name for this playlist'\n autoFocus\n />\n <FormField<CreateOrUpdatePlaylistRequest>\n label='Description'\n as='textarea'\n name='description'\n id='description'\n value={formikProps.values.description}\n placeholder='Describe this playlist here'\n />\n <FormField<CreateOrUpdatePlaylistRequest>\n label='Internal Description'\n as='textarea'\n name='metadata.internalDescription'\n id='metadata.internalDescription'\n value={formikProps.values.metadata?.internalDescription}\n placeholder='This description will only be displayed in Curator'\n />\n <ImageSelect<CreateOrUpdatePlaylistRequest>\n imageType={ImageType.Covers}\n fieldName='cover'\n uploadAppLink={{ application: AppChannels.PLAYLISTS, action: AppActions.Playlists.UPLOAD_IMAGE }}\n />\n <ImageSelect<CreateOrUpdatePlaylistRequest>\n imageType={ImageType.Banners}\n fieldName='banner'\n uploadAppLink={{ application: AppChannels.PLAYLISTS, action: AppActions.Playlists.UPLOAD_IMAGE }}\n />\n <div className='d-flex justify-content-between align-items-center'>\n <SpinnerButton showSpinner={formikProps.isSubmitting} type='submit' disabled={!canSubmit}>\n {!props.id ? 'Create' : 'Save'}\n </SpinnerButton>\n {!!props.actions && <Actions actions={props.actions} />}\n </div>\n </Form>\n );\n}\n","import * as React from 'react';\n\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\n\nimport { Actions, AppChannels } from 'shared/constants';\n\nimport { CreateOrUpdatePlaylistRequest, PlaylistWithMetadata } from 'apps/playlists/interfaces';\nimport { PlaylistValidationSchema } from 'apps/playlists/utils';\n\nimport { EditPlaylistDetailsForm } from './EditPlaylistDetailsForm';\n\nconst getActions = (playlistId: string) => ([{\n label: 'Delete playlist',\n appLink: {\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.DELETE_PLAYLIST,\n args: [playlistId]\n },\n className: 'text-danger'\n}]);\n\ninterface EditPlaylistDetailsProps {\n savePlaylist: (data: CreateOrUpdatePlaylistRequest, onDone: () => void) => void;\n playlist?: PlaylistWithMetadata;\n}\n\nexport function EditPlaylistDetails(props: EditPlaylistDetailsProps): React.ReactElement {\n const id = props.playlist?.id;\n\n return (\n <FormWrapper<CreateOrUpdatePlaylistRequest, PlaylistWithMetadata>\n initialValues={props.playlist}\n validationSchema={PlaylistValidationSchema}\n onSubmit={props.savePlaylist}\n >\n <EditPlaylistDetailsForm\n id={id}\n owner={props.playlist?.owner}\n actions={!!id && getActions(id)}\n />\n </FormWrapper>\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 { CuratorUser } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/CuratorActions';\n\nimport { EditPlaylistDetails, EditPlaylistNav } from 'apps/playlists/components';\nimport { PlaylistRequests } from 'apps/playlists/flight-requests/CuratorPlaylistRequests';\nimport { CreateOrUpdatePlaylistRequest, PlaylistWithMetadata } from 'apps/playlists/interfaces';\n\ninterface EditPlaylistViewProps {\n playlistId: string;\n}\n\nexport function EditPlaylistView(props: EditPlaylistViewProps): React.ReactElement {\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const playlist = Flight.useBasicFetch<PlaylistWithMetadata>(PlaylistRequests.playlist(props.playlistId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n\n function savePlaylist(data: CreateOrUpdatePlaylistRequest, onDone: () => void): void {\n const onSuccess = () => {\n alerts.success('Successfully updated playlist.');\n };\n\n const onError = () => {\n alerts.error('Failed to update playlist.');\n };\n\n Flight.fetch(dispatch, PlaylistRequests.updatePlaylist(props.playlistId, data, onSuccess, onError, onDone));\n }\n\n return (\n <>\n {!!currentUser.data &&\n <EditPlaylistNav\n playlistId={props.playlistId}\n activeAction={Actions.Playlists.EDIT_PLAYLIST}\n currentUser={currentUser.data}\n />\n }\n {!!playlist.data &&\n <EditPlaylistDetails\n playlist={playlist.data}\n savePlaylist={savePlaylist}\n />\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, Playlist, Presentation, PresentationAudience } 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 { EditPlaylistNav } from 'apps/playlists/components';\nimport { PlaylistRequests } from 'apps/playlists/flight-requests/CuratorPlaylistRequests';\nimport { EditObjectAudiences } from 'apps/subjects/components';\n\ninterface EditPlaylistAudiencesViewState {\n presentations?: Presentation[];\n levels?: Level[];\n\n playlistLevels?: Level[];\n playlistAudiences?: PresentationAudience[];\n\n currentPresentation?: Presentation;\n presentationAudiences?: PresentationAudience[];\n}\n\ntype SetState = React.Dispatch<React.SetStateAction<EditPlaylistAudiencesViewState>>;\n\nfunction useFetchData(playlistId: string, state: EditPlaylistAudiencesViewState, setState: SetState): void {\n const getSetState = (key: keyof EditPlaylistAudiencesViewState) => StateHelper.getSetStateByKey(setState, key);\n\n // Fetch playlist and playlist levels\n useBulkFetch([\n SubjectDataServiceHelper.getObjectLevelsFetchOptions(playlistId, SubjectMemberType.Playlists, getSetState('playlistLevels'))\n ], [playlistId]);\n\n // Fetch playlist audiences. Re-fetch when playlistLevels changes as audiences may have changed.\n useFetch(\n SubjectDataServiceHelper.getObjectAudiencesFetchOptions(playlistId, SubjectMemberType.Playlists, getSetState('playlistAudiences')),\n [ playlistId, state.playlistLevels ]\n );\n\n // Fetch presentations and levels\n useBulkFetch([\n SubjectDataServiceHelper.getPresentationsFetchOptions(getSetState('presentations'), PresentationType.Subject),\n SubjectDataServiceHelper.getLevelsFetchOptions(getSetState('levels'))\n ], []);\n\n // Fetched audiences for current presentation\n useFetch(\n !!state.currentPresentation && SubjectDataServiceHelper.getAudiencesFetchOptions(state.currentPresentation.id, getSetState('presentationAudiences')),\n [state.currentPresentation],\n !!state.currentPresentation\n );\n}\n\ninterface EditPlaylistAudiencesViewProps {\n playlistId: string;\n}\n\nexport function EditPlaylistAudiencesView(props: EditPlaylistAudiencesViewProps): JSX.Element {\n const playlist = Flight.useBasicFetch<Playlist>(PlaylistRequests.playlist(props.playlistId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n\n const [ state, setState ] = React.useState<EditPlaylistAudiencesViewState>({});\n\n const subjectDataService = useService<SubjectDataService>(DataServices.SUBJECT);\n\n useFetchData(props.playlistId, state, setState);\n useSetDefaultPresentation(state, setState);\n\n const dataLoaded = !!state.presentations && !!state.levels && !!state.presentationAudiences\n && !!state.playlistLevels && !!state.playlistAudiences;\n\n return (\n <>\n {!!currentUser.data &&\n <EditPlaylistNav\n playlistId={props.playlistId}\n activeAction={Actions.Playlists.EDIT_PLAYLIST_AUDIENCES}\n currentUser={currentUser.data}\n />\n }\n <ObjectHeader object={playlist.data} />\n {!!dataLoaded &&\n <EditObjectAudiences\n objectLevels={state.playlistLevels}\n objectAudiences={state.playlistAudiences}\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.Playlists}\n saveLevels={(backboneAudienceIds: string[], addToAudiences: boolean, onDone: () => void) =>\n subjectDataService.updateObjectLevels(\n props.playlistId,\n backboneAudienceIds,\n SubjectMemberType.Playlists,\n addToAudiences,\n onDone,\n onDone\n )\n }\n saveAudiences={(audienceIds: string[], onDone: () => void) =>\n subjectDataService.updateObjectAudiences(\n props.playlistId,\n state.currentPresentation.id,\n audienceIds,\n SubjectMemberType.Playlists,\n onDone,\n onDone\n )\n }\n />\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 { Classification, CuratorUser, Playlist, Presentation, Subject } from 'libs/shared/interfaces';\nimport { StateHelper } from 'libs/shared/utils/StateHelper';\n\nimport { EditObjectSubjects, ObjectHeader } from 'shared/components';\nimport { Actions, DataServices } from 'shared/constants';\nimport { SubjectMemberType } from 'shared/enums';\nimport { useSetDefaultPresentation } from 'shared/hooks';\nimport { ClassificationTree, SubjectTree } from 'shared/interfaces/models';\nimport { SubjectDataService, SubjectDataServiceHelper } from 'shared/services';\n\nimport { EditPlaylistNav } from 'apps/playlists/components';\nimport { PlaylistRequests } from 'apps/playlists/flight-requests/CuratorPlaylistRequests';\n\ninterface EditPlaylistSubjectsViewState {\n playlistSubjects?: Subject[];\n subjectTree?: SubjectTree;\n subjectClassifications?: Classification[];\n\n presentations?: Presentation[];\n currentPresentation?: Presentation;\n\n classificationTree?: ClassificationTree;\n playlistClassifications?: Classification[];\n}\n\ntype SetState = React.Dispatch<React.SetStateAction<EditPlaylistSubjectsViewState>>;\n\nfunction useFetchData(playlistId: string, state: EditPlaylistSubjectsViewState, setState: SetState): void {\n const getSetState = (key: keyof EditPlaylistSubjectsViewState) => StateHelper.getSetStateByKey(setState, key);\n\n // Fetch subject tree and presentations\n useBulkFetch([\n SubjectDataServiceHelper.getSubjectTreeFetchOptions(getSetState('subjectTree'), PresentationType.Subject),\n SubjectDataServiceHelper.getPresentationsFetchOptions(getSetState('presentations'), PresentationType.Subject)\n ], []);\n\n // Fetch playlist and playlist subjects\n useBulkFetch([\n SubjectDataServiceHelper.getObjectSubjectsFetchOptions(playlistId, SubjectMemberType.Playlists, getSetState('playlistSubjects'))\n ], [playlistId]);\n\n // Fetch classification tree for presentation\n useFetch(\n !!state.currentPresentation && SubjectDataServiceHelper.getClassificationTreeFetchOptions(state.currentPresentation.id, getSetState('classificationTree')),\n [state.currentPresentation],\n !!state.currentPresentation\n );\n\n // Reset subjectClassifications whenever playlistSubjects changes\n React.useEffect(() => getSetState('subjectClassifications')([]), [state.playlistSubjects]);\n\n const setSubjectClassifications = (\n classifications: Classification[],\n currentState: EditPlaylistSubjectsViewState\n ) => ([ ...(currentState.subjectClassifications || []), ...classifications ]);\n\n // Fetch classifications for each subject\n const subjectClassificationsFetchOptions = state.playlistSubjects && state.playlistSubjects.map(s =>\n SubjectDataServiceHelper.getSubjectClassificationFetchOptions(s.id, StateHelper.getSetStateByKey(setState, 'subjectClassifications', setSubjectClassifications)));\n\n useBulkFetch(subjectClassificationsFetchOptions, [state.playlistSubjects], !!subjectClassificationsFetchOptions);\n\n // Fetch playlist classifications\n useFetch(\n SubjectDataServiceHelper.getObjectClassificationsFetchOptions(playlistId, SubjectMemberType.Playlists, getSetState('playlistClassifications')),\n [ playlistId, state.playlistSubjects ]\n );\n}\n\ninterface EditPlaylistSubjectsViewProps {\n playlistId: string;\n}\n\nexport function EditPlaylistSubjectsView(props: EditPlaylistSubjectsViewProps): React.ReactElement {\n const playlist = Flight.useBasicFetch<Playlist>(PlaylistRequests.playlist(props.playlistId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n\n const [ state, setState ] = React.useState<EditPlaylistSubjectsViewState>({});\n\n const subjectDataService = useService<SubjectDataService>(DataServices.SUBJECT);\n\n useFetchData(props.playlistId, state, setState);\n useSetDefaultPresentation(state, setState);\n\n const dataLoaded = !!state.playlistSubjects && !!state.subjectTree && !!state.presentations\n && !!state.classificationTree && !!state.playlistClassifications && !!state.subjectClassifications;\n\n return (\n <>\n {!!currentUser.data &&\n <EditPlaylistNav\n playlistId={props.playlistId}\n activeAction={Actions.Playlists.EDIT_PLAYLIST_SUBJECTS}\n currentUser={currentUser.data}\n />\n }\n <ObjectHeader object={playlist.data} />\n {dataLoaded &&\n <EditObjectSubjects\n objectSubjects={state.playlistSubjects}\n subjectTree={state.subjectTree}\n memberType={SubjectMemberType.Playlists}\n presentations={state.presentations}\n presentationType={PresentationType.Subject}\n currentPresentation={state.currentPresentation}\n setCurrentPresentation={StateHelper.getSetStateByKey(setState, 'currentPresentation')}\n objectClassifications={state.playlistClassifications}\n objectSubjectClassifications={state.subjectClassifications}\n classificationTree={state.classificationTree}\n saveSubjects={(subjectsId: string[], addToClassifications: boolean, onDone: () => void) =>\n subjectDataService.updateObjectSubjects(\n props.playlistId,\n subjectsId,\n SubjectMemberType.Playlists,\n addToClassifications,\n onDone,\n onDone\n )\n }\n saveClassifications={(classificationIds: string[], onDone: () => void) =>\n subjectDataService.updateObjectClassifications(\n props.playlistId,\n state.currentPresentation.id,\n classificationIds,\n SubjectMemberType.Playlists,\n onDone,\n onDone\n )\n }\n />\n }\n </>\n );\n}\n","import { useEffect, useState } from 'react';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nfunction isOrderEqual(arr1: BaseObject[], arr2: BaseObject[]): boolean {\n let isEqual = true;\n\n if (arr1.length !== arr2.length)\n return false;\n\n for (let i = 0; i < arr1.length; i++) {\n if (arr1[i].id !== arr2[i].id) {\n isEqual = false;\n break;\n }\n }\n\n return isEqual;\n}\n\n/**\n * This function can be used to temporarily store an array of reordered objects\n * until the array obtained from the application store updates to the new order.\n * \n * @param items array of objects from application store.\n */\nexport function useReorderedItems<T extends BaseObject>(\n items: T[]\n): [ T[], React.Dispatch<React.SetStateAction<T[]>> ] {\n const [ reorderedItems, setReorderedItems ] = useState<T[]>();\n\n useEffect(() => {\n if (!reorderedItems)\n return;\n\n if (items.length !== reorderedItems.length || isOrderEqual(items, reorderedItems))\n setReorderedItems(null);\n }, [items]);\n\n return [ reorderedItems, setReorderedItems ];\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 { useReorderedItems } from 'libs/shared/hooks/UseReorderedItems';\nimport { CuratorUser, Playlist, Video, VideoCollection } from 'libs/shared/interfaces';\nimport { ReorderHelper } from 'libs/shared/utils/ReorderHelper';\n\nimport { ObjectHeader } from 'shared/components/object-header';\nimport { SortableVideoList } from 'shared/components/video-list';\nimport { Actions } from 'shared/constants/CuratorActions';\nimport { AppChannels } from 'shared/constants/RadioChannels';\n\nimport { EditPlaylistNav } from 'apps/playlists/components/edit-playlist-nav';\nimport { PlaylistRequests } from 'apps/playlists/flight-requests/CuratorPlaylistRequests';\n\nconst getVideoAppLink = (video: Video) => ({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.EDIT_VIDEO,\n args: [video.id]\n});\n\ninterface EditPlaylistVideosViewProps {\n playlistId: string;\n}\n\nexport function EditPlaylistVideosView(props: EditPlaylistVideosViewProps): React.ReactElement {\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const playlist = Flight.useBasicFetch<Playlist>(PlaylistRequests.playlist(props.playlistId));\n const videos = Flight.useBasicFetch<VideoCollection>(PlaylistRequests.playlistVideos(props.playlistId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n\n /**\n * Temporary storage of videos used while waiting for the reorder request response\n * and subsequent re-fetch of videos.\n */\n const [ reorderedVideos, setReorderedVideos ] = useReorderedItems(videos.data?.data);\n\n const getVideoActions = (playlistId: string) => (video: Video) => {\n return [\n {\n label: 'Add to your workbench',\n appLink: {\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.ADD_TO_WORKBENCH,\n args: [video.id]\n }\n },\n {\n label: 'Remove video',\n appLink: {\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.REMOVE_VIDEO,\n args: [ playlistId.toString(), video.id.toString() ]\n },\n className: 'text-danger'\n }\n ];\n };\n\n const onSort = (oldIdx: number, newIdx: number) => {\n if (oldIdx === newIdx)\n return;\n\n const { reorderRequest, reorderedItems } = ReorderHelper.reorder(videos.data.data, oldIdx, newIdx);\n\n setReorderedVideos(reorderedItems);\n\n const onError = () => {\n alerts.error('Failed to update playlist order.');\n setReorderedVideos(null);\n };\n\n Flight.fetch(dispatch, PlaylistRequests.reorderVideos(props.playlistId, reorderRequest, null, onError));\n };\n\n const videoCollection = reorderedVideos ?\n ({ data: reorderedVideos, pagination: null } as VideoCollection) :\n videos.data;\n\n return (\n <>\n {!!currentUser.data &&\n <EditPlaylistNav\n playlistId={props.playlistId}\n activeAction={Actions.Playlists.EDIT_PLAYLIST_VIDEOS}\n currentUser={currentUser.data}\n />\n }\n <ObjectHeader object={playlist.data} />\n {!!videoCollection &&\n <SortableVideoList\n onSortEnd={onSort}\n videos={videoCollection}\n getVideoAppLink={getVideoAppLink}\n getVideoActions={getVideoActions(props.playlistId)}\n emptyMessage='There are no videos in this playlist.'\n />\n }\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 } 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 { EditPlaylistNav } from 'apps/playlists/components';\n\ninterface EditPlaylistAliasesViewProps {\n playlistId: string;\n}\n\nexport function EditPlaylistAliasesView(props: EditPlaylistAliasesViewProps): JSX.Element {\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const aliases = Flight.useBasicFetch<AliasCollection>(AliasesRequests.getAliases(props.playlistId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n\n function createAlias(alias: CreateAliasRequest, success: () => void): void {\n Flight.fetch(dispatch, AliasesRequests.createAlias(props.playlistId, 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.playlistId, 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) {\n return <>Loading...</>;\n }\n\n return (\n <>\n <EditPlaylistNav\n playlistId={props.playlistId}\n activeAction={Actions.Playlists.EDIT_PLAYLIST_ALIASES}\n currentUser={currentUser.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 { PlaylistRequests } from 'libs/shared/flight-requests/PlaylistRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { CuratorUser, Playlist, Tag } 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 { EditPlaylistNav } from 'apps/playlists/components';\n\ninterface EditPlaylistCurationView {\n playlistId: string;\n}\n\nexport function EditPlaylistCurationView(props: EditPlaylistCurationView) {\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n const playlist = Flight.useBasicFetch<Playlist>(PlaylistRequests.getPlaylist(props.playlistId));\n\n const allCurationTags = Flight.useBasicFetch<Tag[]>(TagRequests.curationTags());\n const selectedCurationTags = Flight.useBasicFetch<Tag[]>(TagRequests.selectedCurationTags(props.playlistId));\n const fetch = useGetFetch();\n\n function addCurationTag(tag: Tag, success: () => void, error: () => void) {\n fetch(TagRequests.addTag(props.playlistId, tag, success, error));\n }\n\n function removeCurationTag(tag: Tag, success: () => void, error: () => void) {\n fetch(TagRequests.removeTag(props.playlistId, tag, success, error));\n }\n \n return (\n <>\n {!!currentUser.data &&\n <EditPlaylistNav\n playlistId={props.playlistId}\n activeAction={Actions.Playlists.EDIT_PLAYLIST_CURATION}\n currentUser={currentUser.data}\n />\n }\n {!!playlist.data && !!allCurationTags.data && !!selectedCurationTags.data &&\n <CurationTags\n id={props.playlistId}\n heading={playlist.data.name}\n curationTags={allCurationTags.data}\n selectedCurationTags={selectedCurationTags.data}\n addCurationTag={addCurationTag}\n removeCurationTag={removeCurationTag}\n disableClickViewCurated\n />\n }\n </>\n );\n}\n","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Playlist } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/CuratorActions';\nimport { AppChannels } from 'shared/constants/RadioChannels';\n\nimport { EditPlaylistDetails } from 'apps/playlists/components';\nimport { PlaylistRequests } from 'apps/playlists/flight-requests/CuratorPlaylistRequests';\nimport { CreateOrUpdatePlaylistRequest } from 'apps/playlists/interfaces';\n\nfunction goToPlaylist(playlist: Playlist): void {\n if (!playlist || !playlist.id)\n return;\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.EDIT_PLAYLIST,\n args: [playlist.id]\n });\n}\n\nexport function NewPlaylistView(): React.ReactElement {\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n function savePlaylist(data: CreateOrUpdatePlaylistRequest, onDone: () => void): void {\n const onSuccess = (playlist: Playlist) => {\n alerts.success('Successfully created playlist.');\n goToPlaylist(playlist);\n };\n\n const onError = () => {\n alerts.error('Failed to create playlist.');\n };\n\n Flight.fetch(dispatch, PlaylistRequests.createPlaylist(data, onSuccess, onError, onDone));\n }\n\n return (\n <EditPlaylistDetails savePlaylist={savePlaylist} />\n );\n}\n","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Playlist, PopupViewProps, Video } from 'libs/shared/interfaces';\n\nimport { PlaylistRequests } from 'apps/playlists/flight-requests/CuratorPlaylistRequests';\nimport { VideoRequests } from 'apps/videos/flight-requests/CuratorVideoRequests';\n\ninterface RemoveVideoViewProps {\n videoId: string;\n playlistId: string;\n}\n\nexport function RemoveVideoView(props: RemoveVideoViewProps & PopupViewProps): React.ReactElement {\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const playlist = Flight.useBasicFetch<Playlist>(PlaylistRequests.playlist(props.playlistId));\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.videoId));\n\n const [ showButtonSpinner, setShowButtonSpinner ] = React.useState(false);\n\n function removeVideo(): void {\n setShowButtonSpinner(true);\n\n const onSuccess = () => {\n alerts.success('Successfully removed video from playlist');\n };\n\n const onError = () => {\n alerts.error('Failed to remove video from playlist');\n };\n\n Flight.fetch(\n dispatch,\n PlaylistRequests.removeVideo(props.playlistId, props.videoId, onSuccess, onError, props.closePopup)\n );\n }\n\n const dataLoaded = !!playlist.data && !!video.data;\n\n return (\n <Popup title='Remove Video' closePopup={props.closePopup} showLoadingSpinner={!dataLoaded}>\n {!!dataLoaded &&\n <>\n <div>\n <p>\n Are you sure you want to remove <strong>\n {video.data.name}</strong> from <strong>{playlist.data.name}</strong>?\n </p>\n </div>\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.closePopup} />\n <PopupButtons.Submit\n variant='danger'\n onClick={removeVideo}\n text='Yes, remove video'\n showSpinner={showButtonSpinner}\n />\n </PopupButtons>\n </>\n }\n </Popup>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Uc2eW092.chunk.js","names":[],"sources":["../../../../../src/apps/playlists/views/delete-playlist/DeletePlaylistView.tsx","../../../../../src/apps/playlists/components/edit-playlist/EditPlaylistDetailsForm.tsx","../../../../../src/apps/playlists/components/edit-playlist/EditPlaylistDetails.tsx","../../../../../src/apps/playlists/views/edit-playlist/EditPlaylistView.tsx","../../../../../src/apps/playlists/views/edit-playlist-audiences/EditPlaylistAudiencesView.tsx","../../../../../src/apps/playlists/views/edit-playlist-subjects/EditPlaylistSubjectsView.tsx","../../../../../../../libs/shared/src/hooks/UseReorderedItems.ts","../../../../../src/apps/playlists/views/edit-playlist-videos/EditPlaylistVideosView.tsx","../../../../../src/apps/playlists/views/edit-playlist-aliases/EditPlaylistAliasesView.tsx","../../../../../src/apps/playlists/views/edit-playlist-curation/EditPlaylistCurationView.tsx","../../../../../src/apps/playlists/views/new-playlist/NewPlaylistView.tsx","../../../../../src/apps/playlists/views/remove-video/RemoveVideoView.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Playlist, PopupViewProps } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/CuratorActions';\nimport { AppChannels } from 'shared/constants/RadioChannels';\n\nimport { PlaylistRequests } from 'apps/playlists/flight-requests/CuratorPlaylistRequests';\n\ninterface DeletePlaylistViewProps {\n playlistId: string;\n}\n\nexport function DeletePlaylistView(props: DeletePlaylistViewProps & PopupViewProps): React.ReactElement {\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const [ showButtonSpinner, setShowButtonSpinner ] = React.useState(false);\n\n const playlist = Flight.useBasicFetch<Playlist>(PlaylistRequests.playlist(props.playlistId));\n\n function deletePlaylist(): void {\n setShowButtonSpinner(true);\n\n const onSuccess = () => {\n alerts.success('Successfully deleted playlist.');\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.PLAYLISTS\n });\n };\n\n const onError = () => {\n setShowButtonSpinner(false);\n alerts.error('Failed to delete playlist.');\n };\n\n Flight.fetch(dispatch, PlaylistRequests.deletePlaylist(props.playlistId, onSuccess, onError, props.closePopup));\n }\n\n const dataLoaded = !!playlist.data;\n\n return (\n <Popup title='Delete Playlist' closePopup={props.closePopup} showLoadingSpinner={!dataLoaded}>\n {dataLoaded &&\n <>\n <div>\n <p>Are you sure you want to delete <strong>{playlist.data.name}</strong>?</p>\n <p>Please ensure it is not being used in any widgets.</p>\n </div>\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.closePopup} />\n <PopupButtons.Submit\n variant='danger'\n onClick={deletePlaylist}\n text='Yes, delete playlist'\n showSpinner={showButtonSpinner}\n />\n </PopupButtons>\n </>\n }\n </Popup>\n );\n}\n","import * as React from 'react';\nimport { Form, useFormikContext } from 'formik';\n\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { useCanSubmitForm } from 'libs/shared/hooks/UseCanSubmitForm';\nimport { User } from 'libs/shared/interfaces';\n\nimport { ImageSelect } from 'shared/components';\nimport { Actions as AppActions, AppChannels } from 'shared/constants';\n\nimport { CreateOrUpdatePlaylistRequest } from 'apps/playlists/interfaces';\n\ninterface EditPlaylistDetailsFormProps {\n id?: string;\n owner?: User;\n actions?: ActionOptions[];\n}\n\nexport function EditPlaylistDetailsForm(props: EditPlaylistDetailsFormProps): React.ReactElement {\n const formikProps = useFormikContext<CreateOrUpdatePlaylistRequest>();\n\n const canSubmit = useCanSubmitForm(formikProps);\n\n return (\n <Form>\n {!!props.owner?.username &&\n <p className='my-2'><strong>Owner:</strong> {props.owner.username}</p>\n }\n <FormField<CreateOrUpdatePlaylistRequest>\n label='Name'\n type='text'\n name='name'\n id='name'\n value={formikProps.values.name}\n placeholder='Enter a name for this playlist'\n autoFocus\n />\n <FormField<CreateOrUpdatePlaylistRequest>\n label='Description'\n as='textarea'\n name='description'\n id='description'\n value={formikProps.values.description}\n placeholder='Describe this playlist here'\n />\n <FormField<CreateOrUpdatePlaylistRequest>\n label='Internal Description'\n as='textarea'\n name='metadata.internalDescription'\n id='metadata.internalDescription'\n value={formikProps.values.metadata?.internalDescription}\n placeholder='This description will only be displayed in Curator'\n />\n <ImageSelect<CreateOrUpdatePlaylistRequest>\n imageType={ImageType.Covers}\n fieldName='cover'\n uploadAppLink={{ application: AppChannels.PLAYLISTS, action: AppActions.Playlists.UPLOAD_IMAGE }}\n />\n <ImageSelect<CreateOrUpdatePlaylistRequest>\n imageType={ImageType.Banners}\n fieldName='banner'\n uploadAppLink={{ application: AppChannels.PLAYLISTS, action: AppActions.Playlists.UPLOAD_IMAGE }}\n />\n <div className='d-flex justify-content-between align-items-center'>\n <SpinnerButton showSpinner={formikProps.isSubmitting} type='submit' disabled={!canSubmit}>\n {!props.id ? 'Create' : 'Save'}\n </SpinnerButton>\n {!!props.actions && <Actions actions={props.actions} />}\n </div>\n </Form>\n );\n}\n","import * as React from 'react';\n\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\n\nimport { Actions, AppChannels } from 'shared/constants';\n\nimport { CreateOrUpdatePlaylistRequest, PlaylistWithMetadata } from 'apps/playlists/interfaces';\nimport { PlaylistValidationSchema } from 'apps/playlists/utils';\n\nimport { EditPlaylistDetailsForm } from './EditPlaylistDetailsForm';\n\nconst getActions = (playlistId: string) => ([{\n label: 'Delete playlist',\n appLink: {\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.DELETE_PLAYLIST,\n args: [playlistId]\n },\n className: 'text-danger'\n}]);\n\ninterface EditPlaylistDetailsProps {\n savePlaylist: (data: CreateOrUpdatePlaylistRequest, onDone: () => void) => void;\n playlist?: PlaylistWithMetadata;\n}\n\nexport function EditPlaylistDetails(props: EditPlaylistDetailsProps): React.ReactElement {\n const id = props.playlist?.id;\n\n return (\n <FormWrapper<CreateOrUpdatePlaylistRequest, PlaylistWithMetadata>\n initialValues={props.playlist}\n validationSchema={PlaylistValidationSchema}\n onSubmit={props.savePlaylist}\n >\n <EditPlaylistDetailsForm\n id={id}\n owner={props.playlist?.owner}\n actions={!!id && getActions(id)}\n />\n </FormWrapper>\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 { CuratorUser } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/CuratorActions';\n\nimport { EditPlaylistDetails, EditPlaylistNav } from 'apps/playlists/components';\nimport { PlaylistRequests } from 'apps/playlists/flight-requests/CuratorPlaylistRequests';\nimport { CreateOrUpdatePlaylistRequest, PlaylistWithMetadata } from 'apps/playlists/interfaces';\n\ninterface EditPlaylistViewProps {\n playlistId: string;\n}\n\nexport function EditPlaylistView(props: EditPlaylistViewProps): React.ReactElement {\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const playlist = Flight.useBasicFetch<PlaylistWithMetadata>(PlaylistRequests.playlist(props.playlistId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n\n function savePlaylist(data: CreateOrUpdatePlaylistRequest, onDone: () => void): void {\n const onSuccess = () => {\n alerts.success('Successfully updated playlist.');\n };\n\n const onError = () => {\n alerts.error('Failed to update playlist.');\n };\n\n Flight.fetch(dispatch, PlaylistRequests.updatePlaylist(props.playlistId, data, onSuccess, onError, onDone));\n }\n\n return (\n <>\n {!!currentUser.data &&\n <EditPlaylistNav\n playlistId={props.playlistId}\n activeAction={Actions.Playlists.EDIT_PLAYLIST}\n currentUser={currentUser.data}\n />\n }\n {!!playlist.data &&\n <EditPlaylistDetails\n playlist={playlist.data}\n savePlaylist={savePlaylist}\n />\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, Playlist, Presentation, PresentationAudience } 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 { EditPlaylistNav } from 'apps/playlists/components';\nimport { PlaylistRequests } from 'apps/playlists/flight-requests/CuratorPlaylistRequests';\nimport { EditObjectAudiences } from 'apps/subjects/components';\n\ninterface EditPlaylistAudiencesViewState {\n presentations?: Presentation[];\n levels?: Level[];\n\n playlistLevels?: Level[];\n playlistAudiences?: PresentationAudience[];\n\n currentPresentation?: Presentation;\n presentationAudiences?: PresentationAudience[];\n}\n\ntype SetState = React.Dispatch<React.SetStateAction<EditPlaylistAudiencesViewState>>;\n\nfunction useFetchData(playlistId: string, state: EditPlaylistAudiencesViewState, setState: SetState): void {\n const getSetState = (key: keyof EditPlaylistAudiencesViewState) => StateHelper.getSetStateByKey(setState, key);\n\n // Fetch playlist and playlist levels\n useBulkFetch([\n SubjectDataServiceHelper.getObjectLevelsFetchOptions(playlistId, SubjectMemberType.Playlists, getSetState('playlistLevels'))\n ], [playlistId]);\n\n // Fetch playlist audiences. Re-fetch when playlistLevels changes as audiences may have changed.\n useFetch(\n SubjectDataServiceHelper.getObjectAudiencesFetchOptions(playlistId, SubjectMemberType.Playlists, getSetState('playlistAudiences')),\n [ playlistId, state.playlistLevels ]\n );\n\n // Fetch presentations and levels\n useBulkFetch([\n SubjectDataServiceHelper.getPresentationsFetchOptions(getSetState('presentations'), PresentationType.Subject),\n SubjectDataServiceHelper.getLevelsFetchOptions(getSetState('levels'))\n ], []);\n\n // Fetched audiences for current presentation\n useFetch(\n !!state.currentPresentation && SubjectDataServiceHelper.getAudiencesFetchOptions(state.currentPresentation.id, getSetState('presentationAudiences')),\n [state.currentPresentation],\n !!state.currentPresentation\n );\n}\n\ninterface EditPlaylistAudiencesViewProps {\n playlistId: string;\n}\n\nexport function EditPlaylistAudiencesView(props: EditPlaylistAudiencesViewProps): JSX.Element {\n const playlist = Flight.useBasicFetch<Playlist>(PlaylistRequests.playlist(props.playlistId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n\n const [ state, setState ] = React.useState<EditPlaylistAudiencesViewState>({});\n\n const subjectDataService = useService<SubjectDataService>(DataServices.SUBJECT);\n\n useFetchData(props.playlistId, state, setState);\n useSetDefaultPresentation(state, setState);\n\n const dataLoaded = !!state.presentations && !!state.levels && !!state.presentationAudiences\n && !!state.playlistLevels && !!state.playlistAudiences;\n\n return (\n <>\n {!!currentUser.data &&\n <EditPlaylistNav\n playlistId={props.playlistId}\n activeAction={Actions.Playlists.EDIT_PLAYLIST_AUDIENCES}\n currentUser={currentUser.data}\n />\n }\n <ObjectHeader object={playlist.data} />\n {!!dataLoaded &&\n <EditObjectAudiences\n objectLevels={state.playlistLevels}\n objectAudiences={state.playlistAudiences}\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.Playlists}\n saveLevels={(backboneAudienceIds: string[], addToAudiences: boolean, onDone: () => void) =>\n subjectDataService.updateObjectLevels(\n props.playlistId,\n backboneAudienceIds,\n SubjectMemberType.Playlists,\n addToAudiences,\n onDone,\n onDone\n )\n }\n saveAudiences={(audienceIds: string[], onDone: () => void) =>\n subjectDataService.updateObjectAudiences(\n props.playlistId,\n state.currentPresentation.id,\n audienceIds,\n SubjectMemberType.Playlists,\n onDone,\n onDone\n )\n }\n />\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 { Classification, CuratorUser, Playlist, Presentation, Subject } from 'libs/shared/interfaces';\nimport { StateHelper } from 'libs/shared/utils/StateHelper';\n\nimport { EditObjectSubjects, ObjectHeader } from 'shared/components';\nimport { Actions, DataServices } from 'shared/constants';\nimport { SubjectMemberType } from 'shared/enums';\nimport { useSetDefaultPresentation } from 'shared/hooks';\nimport { ClassificationTree, SubjectTree } from 'shared/interfaces/models';\nimport { SubjectDataService, SubjectDataServiceHelper } from 'shared/services';\n\nimport { EditPlaylistNav } from 'apps/playlists/components';\nimport { PlaylistRequests } from 'apps/playlists/flight-requests/CuratorPlaylistRequests';\n\ninterface EditPlaylistSubjectsViewState {\n playlistSubjects?: Subject[];\n subjectTree?: SubjectTree;\n subjectClassifications?: Classification[];\n\n presentations?: Presentation[];\n currentPresentation?: Presentation;\n\n classificationTree?: ClassificationTree;\n playlistClassifications?: Classification[];\n}\n\ntype SetState = React.Dispatch<React.SetStateAction<EditPlaylistSubjectsViewState>>;\n\nfunction useFetchData(playlistId: string, state: EditPlaylistSubjectsViewState, setState: SetState): void {\n const getSetState = (key: keyof EditPlaylistSubjectsViewState) => StateHelper.getSetStateByKey(setState, key);\n\n // Fetch subject tree and presentations\n useBulkFetch([\n SubjectDataServiceHelper.getSubjectTreeFetchOptions(getSetState('subjectTree'), PresentationType.Subject),\n SubjectDataServiceHelper.getPresentationsFetchOptions(getSetState('presentations'), PresentationType.Subject)\n ], []);\n\n // Fetch playlist and playlist subjects\n useBulkFetch([\n SubjectDataServiceHelper.getObjectSubjectsFetchOptions(playlistId, SubjectMemberType.Playlists, getSetState('playlistSubjects'))\n ], [playlistId]);\n\n // Fetch classification tree for presentation\n useFetch(\n !!state.currentPresentation && SubjectDataServiceHelper.getClassificationTreeFetchOptions(state.currentPresentation.id, getSetState('classificationTree')),\n [state.currentPresentation],\n !!state.currentPresentation\n );\n\n // Reset subjectClassifications whenever playlistSubjects changes\n React.useEffect(() => getSetState('subjectClassifications')([]), [state.playlistSubjects]);\n\n const setSubjectClassifications = (\n classifications: Classification[],\n currentState: EditPlaylistSubjectsViewState\n ) => ([ ...(currentState.subjectClassifications || []), ...classifications ]);\n\n // Fetch classifications for each subject\n const subjectClassificationsFetchOptions = state.playlistSubjects && state.playlistSubjects.map(s =>\n SubjectDataServiceHelper.getSubjectClassificationFetchOptions(s.id, StateHelper.getSetStateByKey(setState, 'subjectClassifications', setSubjectClassifications)));\n\n useBulkFetch(subjectClassificationsFetchOptions, [state.playlistSubjects], !!subjectClassificationsFetchOptions);\n\n // Fetch playlist classifications\n useFetch(\n SubjectDataServiceHelper.getObjectClassificationsFetchOptions(playlistId, SubjectMemberType.Playlists, getSetState('playlistClassifications')),\n [ playlistId, state.playlistSubjects ]\n );\n}\n\ninterface EditPlaylistSubjectsViewProps {\n playlistId: string;\n}\n\nexport function EditPlaylistSubjectsView(props: EditPlaylistSubjectsViewProps): React.ReactElement {\n const playlist = Flight.useBasicFetch<Playlist>(PlaylistRequests.playlist(props.playlistId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n\n const [ state, setState ] = React.useState<EditPlaylistSubjectsViewState>({});\n\n const subjectDataService = useService<SubjectDataService>(DataServices.SUBJECT);\n\n useFetchData(props.playlistId, state, setState);\n useSetDefaultPresentation(state, setState);\n\n const dataLoaded = !!state.playlistSubjects && !!state.subjectTree && !!state.presentations\n && !!state.classificationTree && !!state.playlistClassifications && !!state.subjectClassifications;\n\n return (\n <>\n {!!currentUser.data &&\n <EditPlaylistNav\n playlistId={props.playlistId}\n activeAction={Actions.Playlists.EDIT_PLAYLIST_SUBJECTS}\n currentUser={currentUser.data}\n />\n }\n <ObjectHeader object={playlist.data} />\n {dataLoaded &&\n <EditObjectSubjects\n objectSubjects={state.playlistSubjects}\n subjectTree={state.subjectTree}\n memberType={SubjectMemberType.Playlists}\n presentations={state.presentations}\n presentationType={PresentationType.Subject}\n currentPresentation={state.currentPresentation}\n setCurrentPresentation={StateHelper.getSetStateByKey(setState, 'currentPresentation')}\n objectClassifications={state.playlistClassifications}\n objectSubjectClassifications={state.subjectClassifications}\n classificationTree={state.classificationTree}\n saveSubjects={(subjectsId: string[], addToClassifications: boolean, onDone: () => void) =>\n subjectDataService.updateObjectSubjects(\n props.playlistId,\n subjectsId,\n SubjectMemberType.Playlists,\n addToClassifications,\n onDone,\n onDone\n )\n }\n saveClassifications={(classificationIds: string[], onDone: () => void) =>\n subjectDataService.updateObjectClassifications(\n props.playlistId,\n state.currentPresentation.id,\n classificationIds,\n SubjectMemberType.Playlists,\n onDone,\n onDone\n )\n }\n />\n }\n </>\n );\n}\n","import { useEffect, useState } from 'react';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nfunction isOrderEqual(arr1: BaseObject[], arr2: BaseObject[]): boolean {\n let isEqual = true;\n\n if (arr1.length !== arr2.length)\n return false;\n\n for (let i = 0; i < arr1.length; i++) {\n if (arr1[i].id !== arr2[i].id) {\n isEqual = false;\n break;\n }\n }\n\n return isEqual;\n}\n\n/**\n * This function can be used to temporarily store an array of reordered objects\n * until the array obtained from the application store updates to the new order.\n * \n * @param items array of objects from application store.\n */\nexport function useReorderedItems<T extends BaseObject>(\n items: T[]\n): [ T[], React.Dispatch<React.SetStateAction<T[]>> ] {\n const [ reorderedItems, setReorderedItems ] = useState<T[]>();\n\n useEffect(() => {\n if (!reorderedItems)\n return;\n\n if (items.length !== reorderedItems.length || isOrderEqual(items, reorderedItems))\n setReorderedItems(null);\n }, [items]);\n\n return [ reorderedItems, setReorderedItems ];\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 { useReorderedItems } from 'libs/shared/hooks/UseReorderedItems';\nimport { CuratorUser, Playlist, Video, VideoCollection } from 'libs/shared/interfaces';\nimport { ReorderHelper } from 'libs/shared/utils/ReorderHelper';\n\nimport { ObjectHeader } from 'shared/components/object-header';\nimport { SortableVideoList } from 'shared/components/video-list';\nimport { Actions } from 'shared/constants/CuratorActions';\nimport { AppChannels } from 'shared/constants/RadioChannels';\n\nimport { EditPlaylistNav } from 'apps/playlists/components/edit-playlist-nav';\nimport { PlaylistRequests } from 'apps/playlists/flight-requests/CuratorPlaylistRequests';\n\nconst getVideoAppLink = (video: Video) => ({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.EDIT_VIDEO,\n args: [video.id]\n});\n\ninterface EditPlaylistVideosViewProps {\n playlistId: string;\n}\n\nexport function EditPlaylistVideosView(props: EditPlaylistVideosViewProps): React.ReactElement {\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const playlist = Flight.useBasicFetch<Playlist>(PlaylistRequests.playlist(props.playlistId));\n const videos = Flight.useBasicFetch<VideoCollection>(PlaylistRequests.playlistVideos(props.playlistId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n\n /**\n * Temporary storage of videos used while waiting for the reorder request response\n * and subsequent re-fetch of videos.\n */\n const [ reorderedVideos, setReorderedVideos ] = useReorderedItems(videos.data?.data);\n\n const getVideoActions = (playlistId: string) => (video: Video) => {\n return [\n {\n label: 'Add to your workbench',\n appLink: {\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.ADD_TO_WORKBENCH,\n args: [video.id]\n }\n },\n {\n label: 'Remove video',\n appLink: {\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.REMOVE_VIDEO,\n args: [ playlistId.toString(), video.id.toString() ]\n },\n className: 'text-danger'\n }\n ];\n };\n\n const onSort = (oldIdx: number, newIdx: number) => {\n if (oldIdx === newIdx)\n return;\n\n const { reorderRequest, reorderedItems } = ReorderHelper.reorder(videos.data.data, oldIdx, newIdx);\n\n setReorderedVideos(reorderedItems);\n\n const onError = () => {\n alerts.error('Failed to update playlist order.');\n setReorderedVideos(null);\n };\n\n Flight.fetch(dispatch, PlaylistRequests.reorderVideos(props.playlistId, reorderRequest, null, onError));\n };\n\n const videoCollection = reorderedVideos ?\n ({ data: reorderedVideos, pagination: null } as VideoCollection) :\n videos.data;\n\n return (\n <>\n {!!currentUser.data &&\n <EditPlaylistNav\n playlistId={props.playlistId}\n activeAction={Actions.Playlists.EDIT_PLAYLIST_VIDEOS}\n currentUser={currentUser.data}\n />\n }\n <ObjectHeader object={playlist.data} />\n {!!videoCollection &&\n <SortableVideoList\n onSortEnd={onSort}\n videos={videoCollection}\n getVideoAppLink={getVideoAppLink}\n getVideoActions={getVideoActions(props.playlistId)}\n emptyMessage='There are no videos in this playlist.'\n />\n }\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 } 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 { EditPlaylistNav } from 'apps/playlists/components';\n\ninterface EditPlaylistAliasesViewProps {\n playlistId: string;\n}\n\nexport function EditPlaylistAliasesView(props: EditPlaylistAliasesViewProps): JSX.Element {\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const aliases = Flight.useBasicFetch<AliasCollection>(AliasesRequests.getAliases(props.playlistId));\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n\n function createAlias(alias: CreateAliasRequest, success: () => void): void {\n Flight.fetch(dispatch, AliasesRequests.createAlias(props.playlistId, 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.playlistId, 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) {\n return <>Loading...</>;\n }\n\n return (\n <>\n <EditPlaylistNav\n playlistId={props.playlistId}\n activeAction={Actions.Playlists.EDIT_PLAYLIST_ALIASES}\n currentUser={currentUser.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 { PlaylistRequests } from 'libs/shared/flight-requests/PlaylistRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { CuratorUser, Playlist, Tag } 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 { EditPlaylistNav } from 'apps/playlists/components';\n\ninterface EditPlaylistCurationView {\n playlistId: string;\n}\n\nexport function EditPlaylistCurationView(props: EditPlaylistCurationView) {\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n const playlist = Flight.useBasicFetch<Playlist>(PlaylistRequests.getPlaylist(props.playlistId));\n\n const allCurationTags = Flight.useBasicFetch<Tag[]>(TagRequests.curationTags());\n const selectedCurationTags = Flight.useBasicFetch<Tag[]>(TagRequests.selectedCurationTags(props.playlistId));\n const fetch = useGetFetch();\n\n function addCurationTag(tag: Tag, success: () => void, error: () => void) {\n fetch(TagRequests.addTag(props.playlistId, tag, success, error));\n }\n\n function removeCurationTag(tag: Tag, success: () => void, error: () => void) {\n fetch(TagRequests.removeTag(props.playlistId, tag, success, error));\n }\n \n return (\n <>\n {!!currentUser.data &&\n <EditPlaylistNav\n playlistId={props.playlistId}\n activeAction={Actions.Playlists.EDIT_PLAYLIST_CURATION}\n currentUser={currentUser.data}\n />\n }\n {!!playlist.data && !!allCurationTags.data && !!selectedCurationTags.data &&\n <CurationTags\n id={props.playlistId}\n heading={playlist.data.name}\n curationTags={allCurationTags.data}\n selectedCurationTags={selectedCurationTags.data}\n addCurationTag={addCurationTag}\n removeCurationTag={removeCurationTag}\n disableClickViewCurated\n />\n }\n </>\n );\n}\n","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Playlist } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/CuratorActions';\nimport { AppChannels } from 'shared/constants/RadioChannels';\n\nimport { EditPlaylistDetails } from 'apps/playlists/components';\nimport { PlaylistRequests } from 'apps/playlists/flight-requests/CuratorPlaylistRequests';\nimport { CreateOrUpdatePlaylistRequest } from 'apps/playlists/interfaces';\n\nfunction goToPlaylist(playlist: Playlist): void {\n if (!playlist || !playlist.id)\n return;\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.EDIT_PLAYLIST,\n args: [playlist.id]\n });\n}\n\nexport function NewPlaylistView(): React.ReactElement {\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n function savePlaylist(data: CreateOrUpdatePlaylistRequest, onDone: () => void): void {\n const onSuccess = (playlist: Playlist) => {\n alerts.success('Successfully created playlist.');\n goToPlaylist(playlist);\n };\n\n const onError = () => {\n alerts.error('Failed to create playlist.');\n };\n\n Flight.fetch(dispatch, PlaylistRequests.createPlaylist(data, onSuccess, onError, onDone));\n }\n\n return (\n <EditPlaylistDetails savePlaylist={savePlaylist} />\n );\n}\n","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Playlist, PopupViewProps, Video } from 'libs/shared/interfaces';\n\nimport { PlaylistRequests } from 'apps/playlists/flight-requests/CuratorPlaylistRequests';\nimport { VideoRequests } from 'apps/videos/flight-requests/CuratorVideoRequests';\n\ninterface RemoveVideoViewProps {\n videoId: string;\n playlistId: string;\n}\n\nexport function RemoveVideoView(props: RemoveVideoViewProps & PopupViewProps): React.ReactElement {\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const playlist = Flight.useBasicFetch<Playlist>(PlaylistRequests.playlist(props.playlistId));\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.videoId));\n\n const [ showButtonSpinner, setShowButtonSpinner ] = React.useState(false);\n\n function removeVideo(): void {\n setShowButtonSpinner(true);\n\n const onSuccess = () => {\n alerts.success('Successfully removed video from playlist');\n };\n\n const onError = () => {\n alerts.error('Failed to remove video from playlist');\n };\n\n Flight.fetch(\n dispatch,\n PlaylistRequests.removeVideo(props.playlistId, props.videoId, onSuccess, onError, props.closePopup)\n );\n }\n\n const dataLoaded = !!playlist.data && !!video.data;\n\n return (\n <Popup title='Remove Video' closePopup={props.closePopup} showLoadingSpinner={!dataLoaded}>\n {!!dataLoaded &&\n <>\n <div>\n <p>\n Are you sure you want to remove <strong>\n {video.data.name}</strong> from <strong>{playlist.data.name}</strong>?\n </p>\n </div>\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.closePopup} />\n <PopupButtons.Submit\n variant='danger'\n onClick={removeVideo}\n text='Yes, remove video'\n showSpinner={showButtonSpinner}\n />\n </PopupButtons>\n </>\n }\n </Popup>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as e,i as t}from"./rp704-Pm.chunk.js";import{t as n}from"./Di_u2uix.chunk.js";import"./CfCYHRuo.chunk.js";import{t as r}from"./UCDGupVs.chunk.js";import{a as i}from"./
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{a as e,i as t}from"./rp704-Pm.chunk.js";import{t as n}from"./Di_u2uix.chunk.js";import"./CfCYHRuo.chunk.js";import{t as r}from"./UCDGupVs.chunk.js";import{a as i}from"./DWHKdmdQ.chunk.js";import{y as a}from"./GpDEun8c2.chunk.js";import{s as o}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as s}from"./JmL1DHFu.chunk.js";import{t as c}from"./DjnvbVQs.chunk.js";import{t as l}from"./BT-jeT7C.chunk.js";import"./B1pBJzjh.chunk.js";e();var u=t();function d(e){let t=o(r.currentUser()),d=o(s.video(e.videoId));return(0,u.jsxs)(u.Fragment,{children:[e.context===`live`?(0,u.jsx)(c,{videoId:e.videoId,activeAction:n.Videos.EDIT_VIDEO_RESOURCES}):(0,u.jsx)(l,{videoId:e.videoId,activeAction:n.Videos.EDIT_VIDEO_RESOURCES,currentUser:t.data}),d.data&&(0,u.jsx)(a,{object:d.data}),(0,u.jsx)(`div`,{className:`pt-2`,children:(0,u.jsx)(i,{id:e.videoId,popup:!1,onNext:()=>{},closePopup:null})})]})}export{d as EditVideoResourcesTabView};
|
|
2
|
+
//# sourceMappingURL=XHoEdG1q.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"XHoEdG1q.chunk.js","names":[],"sources":["../../../../../src/apps/videos/views/edit-video-resources/EditVideoResourcesTabView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { CuratorUser } from 'libs/shared/interfaces';\n\nimport { ObjectHeader } from 'shared/components';\nimport { Actions } from 'shared/constants';\nimport { CuratorProductContext } from 'shared/interfaces/models/CuratorProductContext';\n\nimport { EditVideoResourcesView } from 'apps/assembly-line/views/edit-video/edit-resources/EditVideoResourcesView';\nimport { CvLiveVideoNav } from 'apps/cv-live/components/video-nav/CvLiveVideoNav';\nimport { EditVideoNav } from 'apps/videos/components/edit-video-nav';\nimport { VideoRequests } from 'apps/videos/flight-requests/CuratorVideoRequests';\n\ninterface EditVideoResourcesTabViewProps {\n videoId: string;\n context: CuratorProductContext;\n}\n\nexport function EditVideoResourcesTabView(props: EditVideoResourcesTabViewProps): JSX.Element {\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch(VideoRequests.video(props.videoId));\n\n return (\n <>\n {props.context === 'live' ? (\n <CvLiveVideoNav\n videoId={props.videoId}\n activeAction={Actions.Videos.EDIT_VIDEO_RESOURCES}\n />\n ) : (\n <EditVideoNav\n videoId={props.videoId}\n activeAction={Actions.Videos.EDIT_VIDEO_RESOURCES}\n currentUser={currentUser.data}\n />\n )}\n\n {video.data && <ObjectHeader object={video.data} />}\n\n <div className='pt-2'>\n <EditVideoResourcesView\n id={props.videoId}\n popup={false}\n onNext={() => {}}\n closePopup={null}\n />\n </div>\n </>\n );\n}\n"],"mappings":"kdAqBA,SAAgB,EAA0B,EAAoD,CAC5F,IAAM,EAAc,EAAkC,EAAa,YAAY,CAAC,EAC1E,EAAQ,EAAqB,EAAc,MAAM,EAAM,OAAO,CAAC,EAErE,OACE,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,CACG,EAAM,UAAY,QACjB,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,QAAS,EAAM,QACf,aAAc,EAAQ,OAAO,oBAC9B,CAAA,GAED,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,QAAS,EAAM,QACf,aAAc,EAAQ,OAAO,qBAC7B,YAAa,EAAY,IAC1B,CAAA,EAGF,EAAM,OAAQ,EAAA,EAAA,IAAA,CAAC,EAAD,CAAc,OAAQ,EAAM,IAAO,CAAA,GAElD,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,iBACb,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,GAAI,EAAM,QACV,MAAO,GACP,WAAc,CAAC,EACf,WAAY,IACb,CAAA,CACE,CAAA,CACL,CAAA,CAAA,CAEN"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{C as e,a as t,i as n,ln as r}from"./rp704-Pm.chunk.js";import{n as i,r as a,t as o}from"./Crs6pJ2h.chunk.js";import{t as s}from"./C1kx8Ra5.chunk.js";import{t as c}from"./Di_u2uix.chunk.js";import{t as l}from"./BvMTtGLi.chunk.js";import"./CfCYHRuo.chunk.js";import{t as u}from"./CLCeObem2.chunk.js";import{v as d}from"./
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{C as e,a as t,i as n,ln as r}from"./rp704-Pm.chunk.js";import{n as i,r as a,t as o}from"./Crs6pJ2h.chunk.js";import{t as s}from"./C1kx8Ra5.chunk.js";import{t as c}from"./Di_u2uix.chunk.js";import{t as l}from"./BvMTtGLi.chunk.js";import"./CfCYHRuo.chunk.js";import{t as u}from"./CLCeObem2.chunk.js";import{v as d}from"./GpDEun8c2.chunk.js";import{t as f}from"./D-JsEiDq2.chunk.js";import{h as p,r as m,s as h}from"./Dgk5cBBe.chunk.js";import{t as g}from"./Bw7dP6jB.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as _}from"./CVHQXNzi.chunk.js";import{t as v}from"./B1uI4W1W.chunk.js";import{t as y}from"./DhW1fXNd.chunk.js";import{c as b,i as x}from"./DA0I3jYA.chunk.js";import{t as S}from"./dKyhMawf.chunk.js";import{t as C}from"./R3C4JT9X2.chunk.js";import{t as w}from"./D0JviwKV2.chunk.js";import{n as T}from"./C4Ey4nzb2.chunk.js";var E=function(e){return e.Boolean=`System.Boolean`,e.String=`System.String`,e.Long=`System.Int64`,e}({}),D=function(e){return e[e.Setting=0]=`Setting`,e[e.FeatureFlag=1]=`FeatureFlag`,e}({}),O={namespace:`domain_options`},k={getAll:()=>`/api/domain/v3/settings/types`,getOne:e=>`/api/domain/v3/settings/types/${e}`,createOne:()=>`/api/domain/v3/settings/types`,updateOne:e=>`/api/domain/v3/settings/types/${e}`,deleteOne:e=>`/api/domain/v3/settings/types/${e}`},A={DOMAIN_OPTIONS:`domain:options`,DOMAIN_OPTION:`domain:option`,UPDATE_DOMAIN_OPTION:`update:domain:option`,DELETE_DOMAIN_OPTION:`delete:domain:option`},j={getAllOptions(){return{key:A.DOMAIN_OPTIONS,url:k.getAll(),normalizeOptions:O}},getOption(e){return{key:`${A.DOMAIN_OPTION}:${e}`,url:k.getOne(e),normalizeOptions:O}},createOption(e,t,n){return e.type===E.String&&(e=M(e)),{key:A.DOMAIN_OPTION,url:k.createOne(),data:e,type:p.POST,success:t,error:n,invalidationKeys:[A.DOMAIN_OPTIONS],normalizeOptions:O}},updateOption(e,t){return e.type===E.String&&(e=M(e)),{key:`${A.UPDATE_DOMAIN_OPTION}:${e.id}`,url:k.updateOne(e.id),data:e,type:p.PUT,always:t,formatData:()=>e,normalizeOptions:O}},deleteOption(e,t){return{key:`${A.DELETE_DOMAIN_OPTION}:${e}`,url:k.deleteOne(e),type:p.DELETE,invalidationKeys:[A.DOMAIN_OPTIONS],normalizeOptions:O,success:t}}};function M(e){let{defaultValue:t}=e,n=t;if(n===`"`)return{...e,defaultValue:`"${n}"`};let r=n.charAt(0),i=n.charAt(n.length-1);return r!==`"`&&(n=`"${n}`),i!==`"`&&(n=`${n}"`),{...e,defaultValue:n}}var N=r(t(),1),P=n();function F(t){let[n,r]=N.useState(!1),i=h(j.getOption(t.optionId)),a=g(),o=()=>{t.closePopup(),e.trigger({application:l.DOMAIN_OPTIONS,action:c.DomainOptions.DOMAIN_OPTIONS})};return(0,P.jsx)(f,{title:`Delete Domain Option`,closePopup:t.closePopup,showLoadingSpinner:!i.data,children:i.data&&(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(`div`,{children:(0,P.jsxs)(`p`,{children:[`Are you sure you want to delete `,(0,P.jsx)(`strong`,{children:i.data.name}),`?`]})}),(0,P.jsxs)(w,{children:[(0,P.jsx)(w.Cancel,{onClick:t.closePopup}),(0,P.jsx)(w.Submit,{variant:`danger`,onClick:()=>{r(!0),m(a,j.deleteOption(t.optionId,o))},text:`Yes, delete this domain option`,showSpinner:n})]})]})})}var I=e=>({application:l.DOMAIN_OPTIONS,action:c.DomainOptions.EDIT_DOMAIN_OPTION,args:[e.id]}),L={application:l.DOMAIN_OPTIONS,action:c.DomainOptions.NEW_DOMAIN_OPTION};function R(){let e=h(j.getAllOptions());if(!e.data)return(0,P.jsx)(P.Fragment,{});let t=e.data.map(e=>(e.displayName&&(e.name=e.displayName),e));return(0,P.jsxs)(P.Fragment,{children:[(0,P.jsxs)(`div`,{className:`d-flex justify-content-between mb-2`,children:[(0,P.jsx)(`h5`,{className:`d-inline-block m-0`,children:`Select a domain option type to edit:`}),(0,P.jsxs)(o,{appLink:L,className:`d-block`,children:[(0,P.jsx)(i,{svg:v,size:a.Small}),(0,P.jsx)(`span`,{children:`New Domain Option`})]})]}),(0,P.jsx)(d,{objects:t,getAppLink:I})]})}var z=r(u(),1),B=z.object().shape({id:z.string(),name:z.string().trim().max(64,`Name is too long`).required(`Name is required`).default(``),displayName:z.string().trim().max(255,`Display name is too long`).required(`Display name is required`).default(``),type:z.mixed().required(`Type is required`).default(E.Boolean),entityType:z.mixed().required(`Entity type is required`).default(_.Customer),kind:z.mixed().required(`Kind is required`).default(D.FeatureFlag),defaultValue:z.mixed().required(`Default value is required`).default(`false`)}).noUnknown();function V({type:e,defaultValue:t}){if(!e)return(0,P.jsx)(P.Fragment,{});let n={label:`Default Value`,name:`defaultValue`,id:`defaultValue`,value:t};if(e===E.Boolean)return(0,P.jsxs)(T,{as:`select`,...n,children:[(0,P.jsx)(`option`,{value:`true`,children:`True`}),(0,P.jsx)(`option`,{value:`false`,children:`False`})]});if(e===E.String)return(0,P.jsx)(T,{as:`input`,...n})}var H=[_.Customer,_.User,_.Organisation];function U(e){let t=e.id===null||e.id===void 0,n=b(),r=C(n);return(0,P.jsxs)(x,{children:[(0,P.jsx)(T,{label:`Name (snake_case)`,type:`text`,name:`name`,id:`name`,value:n.values.name,placeholder:`Enter a name for this domain option`,autoFocus:!0}),(0,P.jsx)(T,{label:`Display Name`,type:`text`,name:`displayName`,id:`displayName`,value:n.values.displayName,placeholder:`Enter a display name for this domain option`}),(0,P.jsx)(T,{as:`select`,label:`Kind`,name:`kind`,id:`kind`,value:n.values.kind,children:s.getEnumKeys(D).map(e=>(0,P.jsx)(`option`,{value:D[e],children:e},e))}),(0,P.jsx)(T,{as:`select`,label:`Entity`,name:`entityType`,id:`entityType`,value:n.values.entityType,children:s.getEnumKeys(_).filter(e=>H.includes(_[e])).map(e=>(0,P.jsx)(`option`,{value:_[e],children:e},e))}),(0,P.jsx)(T,{as:`select`,label:`Type`,name:`type`,id:`type`,value:n.values.type,children:s.getEnumKeys(E).map(e=>(0,P.jsx)(`option`,{value:E[e],children:e},e))}),(0,P.jsx)(V,{type:n.values.type,defaultValue:n.values.defaultValue}),(0,P.jsxs)(`div`,{className:`d-flex justify-content-between`,children:[(0,P.jsx)(y,{showSpinner:n.isSubmitting,type:`submit`,disabled:!r,children:t?`Create`:`Save`}),!t&&(0,P.jsx)(o,{className:`btn btn-outline-danger`,appLink:{application:l.DOMAIN_OPTIONS,action:c.DomainOptions.DELETE_DOMAIN_OPTION,args:[e.id]},children:`Delete`})]})]})}function W(e){return(0,P.jsx)(S,{initialValues:e.domainOption,validationSchema:B,onSubmit:e.saveDomainOption,children:(0,P.jsx)(U,{id:e.domainOption&&e.domainOption.id})})}function G(){let t=g();return(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(`h4`,{className:`py-2`,children:`Create New Domain Option`}),(0,P.jsx)(W,{saveDomainOption:(n,r)=>{m(t,j.createOption(n,t=>{r(),e.trigger({application:l.DOMAIN_OPTIONS,action:c.DomainOptions.EDIT_DOMAIN_OPTION,args:[t.id]})},r))}})]})}function K({optionId:e}){let t=h(j.getOption(e)),n=g();return(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(`h4`,{className:`py-2`,children:`Edit Domain Option`}),t.data&&(0,P.jsx)(W,{domainOption:t.data,saveDomainOption:(e,t)=>m(n,j.updateOption(e,t))})]})}export{F as DeleteDomainOptionView,R as DomainOptionsView,K as EditDomainOptionView,G as NewDomainOptionView};
|
|
2
|
+
//# sourceMappingURL=Y14NYZ692.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BdVoyBI02.chunk.js","names":[],"sources":["../../../../../src/apps/domain-options/interfaces/models/DomainOption.ts","../../../../../src/apps/domain-options/data-requests/DomainOptionRequests.ts","../../../../../src/apps/domain-options/views/delete-domain-option/DeleteDomainOptionView.tsx","../../../../../src/apps/domain-options/views/domain-options/DomainOptionsView.tsx","../../../../../src/apps/domain-options/utils/validation/DomainOptionValidation.ts","../../../../../src/apps/domain-options/components/edit-domain-option-details/DefaultValueField.tsx","../../../../../src/apps/domain-options/components/edit-domain-option-details/EditDomainOptionDetailsForm.tsx","../../../../../src/apps/domain-options/components/edit-domain-option-details/EditDomainOptionDetails.tsx","../../../../../src/apps/domain-options/views/new-domain-option/NewDomainOptionView.tsx","../../../../../src/apps/domain-options/views/edit-domain-option/EditDomainOptionView.tsx"],"sourcesContent":["import { MasterType } from 'libs/shared/enums/MasterType';\n\n/**\n * In the database the types are saved as C# types written as strings. Every field here\n * has been copied from what already exists in the database.\n */\nexport enum DomainOptionType {\n Boolean = 'System.Boolean',\n String = 'System.String',\n Long = 'System.Int64'\n}\n\nexport enum DomainOptionKind {\n Setting = 0,\n FeatureFlag = 1\n}\n\nexport interface DomainOption {\n id: string;\n name: string;\n displayName: string;\n type: DomainOptionType;\n entityType: MasterType;\n kind: DomainOptionKind;\n defaultValue: string | number;\n}\n","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/flight';\n\nimport { DomainOption, DomainOptionType } from 'apps/domain-options/interfaces';\n\nconst normalizeOptions = {\n namespace: 'domain_options'\n};\n\nconst endpoints = {\n getAll: () => `/api/domain/v3/settings/types`,\n getOne: (id: string) => `/api/domain/v3/settings/types/${id}`,\n createOne: () => `/api/domain/v3/settings/types`,\n updateOne: (id: string) => `/api/domain/v3/settings/types/${id}`,\n deleteOne: (id: string) => `/api/domain/v3/settings/types/${id}`\n};\n\nconst DataPrefixes = {\n DOMAIN_OPTIONS: 'domain:options',\n DOMAIN_OPTION: 'domain:option',\n UPDATE_DOMAIN_OPTION: 'update:domain:option',\n DELETE_DOMAIN_OPTION: 'delete:domain:option'\n};\n\nexport const DomainOptionRequests = {\n getAllOptions(): Flight.Request {\n return {\n key: DataPrefixes.DOMAIN_OPTIONS,\n url: endpoints.getAll(),\n normalizeOptions\n };\n },\n getOption(id: string): Flight.Request {\n return {\n key: `${DataPrefixes.DOMAIN_OPTION}:${id}`,\n url: endpoints.getOne(id),\n normalizeOptions\n };\n },\n\n createOption(option: DomainOption, success: (data: any) => void, error: (data: any) => void): Flight.Request {\n /**\n * DefaultValue for String option types must always be wrapped with quotation marks.\n */\n if (option.type === DomainOptionType.String)\n option = quotifyDefaultValue(option);\n\n return {\n key: DataPrefixes.DOMAIN_OPTION,\n url: endpoints.createOne(),\n data: option,\n type: HttpVerbs.POST,\n success,\n error,\n invalidationKeys: [DataPrefixes.DOMAIN_OPTIONS],\n normalizeOptions\n };\n },\n\n updateOption(option: DomainOption, callback: () => void): Flight.Request {\n /**\n * DefaultValue for String option types must always be wrapped with quotation marks.\n */\n if (option.type === DomainOptionType.String)\n option = quotifyDefaultValue(option);\n\n return {\n key: `${DataPrefixes.UPDATE_DOMAIN_OPTION}:${option.id}`,\n url: endpoints.updateOne(option.id),\n data: option,\n type: HttpVerbs.PUT,\n always: callback,\n formatData: () => option,\n normalizeOptions\n };\n },\n deleteOption(id: string, success: () => void): Flight.Request {\n return {\n key: `${DataPrefixes.DELETE_DOMAIN_OPTION}:${id}`,\n url: endpoints.deleteOne(id),\n type: HttpVerbs.DELETE,\n invalidationKeys: [DataPrefixes.DOMAIN_OPTIONS],\n normalizeOptions,\n success\n };\n }\n};\n\nfunction quotifyDefaultValue(option: DomainOption): DomainOption {\n const { defaultValue } = option;\n let defaultValueString = defaultValue as string;\n\n if (defaultValueString === '\"') {\n return {\n ...option,\n defaultValue: `\"${defaultValueString}\"`\n };\n }\n\n const firstChar = defaultValueString.charAt(0);\n const lastChar = defaultValueString.charAt(defaultValueString.length - 1);\n\n if (firstChar !== '\"')\n defaultValueString = `\"${defaultValueString}`;\n\n if (lastChar !== '\"')\n defaultValueString = `${defaultValueString}\"`;\n\n return {\n ...option,\n defaultValue: defaultValueString\n };\n}\n","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nimport { Actions, AppChannels } from 'shared/constants';\n\nimport { DomainOptionRequests } from 'apps/domain-options/data-requests';\nimport { DomainOption } from 'apps/domain-options/interfaces';\n\ninterface DeleteDomainOptionViewProps {\n optionId: string;\n}\n\nexport function DeleteDomainOptionView(props: DeleteDomainOptionViewProps & PopupViewProps): React.ReactElement {\n const [ showButtonSpinner, setShowButtonSpinner ] = React.useState(false);\n\n const domainOption = Flight.useBasicFetch<DomainOption>(DomainOptionRequests.getOption(props.optionId));\n const dispatch = useDispatch();\n\n const onDeleteSuccess = () => {\n props.closePopup();\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.DOMAIN_OPTIONS,\n action: Actions.DomainOptions.DOMAIN_OPTIONS\n });\n };\n\n const deleteDomainOption = () => {\n setShowButtonSpinner(true);\n\n Flight.fetch(dispatch, DomainOptionRequests.deleteOption(props.optionId, onDeleteSuccess));\n };\n\n return (\n <Popup title='Delete Domain Option' closePopup={props.closePopup} showLoadingSpinner={!domainOption.data}>\n {domainOption.data &&\n <>\n <div>\n <p>Are you sure you want to delete <strong>{domainOption.data.name}</strong>?</p>\n </div>\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.closePopup} />\n <PopupButtons.Submit\n variant='danger'\n onClick={deleteDomainOption}\n text='Yes, delete this domain option'\n showSpinner={showButtonSpinner}\n />\n </PopupButtons>\n </>\n }\n </Popup>\n );\n}\n","import * as React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\n\nimport { ObjectListNav } from 'shared/components';\nimport { Actions, AppChannels } from 'shared/constants';\n\nimport { DomainOptionRequests } from 'apps/domain-options/data-requests';\nimport { DomainOption } from 'apps/domain-options/interfaces';\n\nconst getOptionAppLink = (option: DomainOption) => ({\n application: AppChannels.DOMAIN_OPTIONS,\n action: Actions.DomainOptions.EDIT_DOMAIN_OPTION,\n args: [option.id]\n});\n\nconst newOptionAppLink = {\n application: AppChannels.DOMAIN_OPTIONS,\n action: Actions.DomainOptions.NEW_DOMAIN_OPTION\n};\n\nexport function DomainOptionsView(): JSX.Element {\n const domainOptions = Flight.useBasicFetch<DomainOption[]>(DomainOptionRequests.getAllOptions());\n\n if (!domainOptions.data)\n return <></>;\n\n const optionNames = domainOptions.data.map(option => {\n if (option.displayName)\n option.name = option.displayName;\n\n return option;\n });\n\n return (\n <>\n <div className='d-flex justify-content-between mb-2'>\n <h5 className='d-inline-block m-0'>Select a domain option type to edit:</h5>\n <AppLink appLink={newOptionAppLink} className='d-block'>\n <SvgContainer svg={PlusSvg} size={SvgContainerSize.Small} />\n <span>New Domain Option</span>\n </AppLink>\n </div>\n <ObjectListNav objects={optionNames} getAppLink={getOptionAppLink} />\n </>\n );\n}\n","import * as Yup from 'yup';\n\nimport { MasterType } from 'libs/shared/enums/MasterType';\n\nimport { DomainOption, DomainOptionKind, DomainOptionType } from 'apps/domain-options/interfaces';\n\nexport const DomainOptionValidationSchema = Yup.object().shape<DomainOption>({\n id: Yup.string(),\n\n name: Yup.string()\n .trim()\n .max(64, 'Name is too long')\n .required('Name is required')\n .default(''),\n\n displayName: Yup.string()\n .trim()\n .max(255, 'Display name is too long')\n .required('Display name is required')\n .default(''),\n\n type: Yup.mixed<DomainOptionType>()\n .required('Type is required')\n .default(DomainOptionType.Boolean),\n\n entityType: Yup.mixed<MasterType>()\n .required('Entity type is required')\n .default(MasterType.Customer),\n\n kind: Yup.mixed<DomainOptionKind>()\n .required('Kind is required')\n .default(DomainOptionKind.FeatureFlag),\n\n defaultValue: Yup.mixed<string | number>()\n .required('Default value is required')\n .default('false')\n\n}).noUnknown();\n","import * as React from 'react';\nimport { FieldAttributes } from 'formik';\n\nimport { FormField, FormFieldProps } from 'libs/shared/components/forms/form-field/FormField';\n\nimport { DomainOption, DomainOptionType } from 'apps/domain-options/interfaces';\n\ninterface DefaultValueFieldProps {\n type: DomainOptionType;\n defaultValue: string | number;\n}\n\nexport function DefaultValueField({ type, defaultValue }: DefaultValueFieldProps): JSX.Element {\n if (!type)\n return <></>;\n\n const formFieldProps: FieldAttributes<FormFieldProps> = {\n label: 'Default Value',\n name: 'defaultValue',\n id: 'defaultValue',\n value: defaultValue\n };\n\n if (type === DomainOptionType.Boolean) {\n return (\n <FormField<DomainOption>\n as='select'\n {...formFieldProps}\n >\n <option value='true'>True</option>\n <option value='false'>False</option>\n </FormField>\n );\n }\n\n if (type === DomainOptionType.String)\n return <FormField<DomainOption> as='input' {...formFieldProps} />;\n}\n","import * as React from 'react';\nimport { Form, useFormikContext } from 'formik';\n\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { useCanSubmitForm } from 'libs/shared/hooks/UseCanSubmitForm';\n\nimport { Actions, AppChannels } from 'shared/constants';\n\nimport { DomainOption, DomainOptionKind, DomainOptionType } from 'apps/domain-options/interfaces';\n\nimport { DefaultValueField } from './DefaultValueField';\n\nconst validEntities = [ MasterType.Customer, MasterType.User, MasterType.Organisation ];\n\ninterface EditDomainOptionDetailsFormProps {\n id?: string;\n}\n\nexport function EditDomainOptionDetailsForm(props: EditDomainOptionDetailsFormProps): React.ReactElement {\n const isNew = props.id === null || props.id === undefined;\n\n const formikProps = useFormikContext<DomainOption>();\n\n const canSubmit = useCanSubmitForm(formikProps);\n\n return (\n <Form>\n <FormField<DomainOption>\n label='Name (snake_case)'\n type='text'\n name='name'\n id='name'\n value={formikProps.values.name}\n placeholder='Enter a name for this domain option'\n autoFocus\n />\n\n <FormField<DomainOption>\n label='Display Name'\n type='text'\n name='displayName'\n id='displayName'\n value={formikProps.values.displayName}\n placeholder='Enter a display name for this domain option'\n />\n\n <FormField<DomainOption>\n as='select'\n label='Kind'\n name='kind'\n id='kind'\n value={formikProps.values.kind}\n >\n {ObjectHelper.getEnumKeys(DomainOptionKind).map((key: DomainOptionKind) =>\n <option key={key} value={(DomainOptionKind as any)[key]}>{key}</option>)}\n </FormField>\n\n <FormField<DomainOption>\n as='select'\n label='Entity'\n name='entityType'\n id='entityType'\n value={formikProps.values.entityType}\n >\n {ObjectHelper.getEnumKeys(MasterType)\n .filter((key: MasterType) => validEntities.includes((MasterType as any)[key]))\n .map((key: MasterType) =>\n <option key={key} value={(MasterType as any)[key]}>{key}</option>)\n }\n </FormField>\n\n <FormField<DomainOption>\n as='select'\n label='Type'\n name='type'\n id='type'\n value={formikProps.values.type}\n >\n {ObjectHelper.getEnumKeys(DomainOptionType).map((key: DomainOptionType) =>\n <option key={key} value={(DomainOptionType as any)[key]}>{key}</option>)}\n </FormField>\n\n <DefaultValueField type={formikProps.values.type} defaultValue={formikProps.values.defaultValue} />\n\n <div className='d-flex justify-content-between'>\n <SpinnerButton showSpinner={formikProps.isSubmitting} type='submit' disabled={!canSubmit}>\n {isNew ? 'Create' : 'Save'}\n </SpinnerButton>\n {!isNew &&\n <AppLink\n className='btn btn-outline-danger'\n appLink={{\n application: AppChannels.DOMAIN_OPTIONS,\n action: Actions.DomainOptions.DELETE_DOMAIN_OPTION,\n args: [props.id]\n }}\n >\n Delete\n </AppLink>\n }\n </div>\n </Form>\n );\n}\n","import * as React from 'react';\n\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\n\nimport { DomainOption } from 'apps/domain-options/interfaces';\nimport { DomainOptionValidationSchema } from 'apps/domain-options/utils';\n\nimport { EditDomainOptionDetailsForm } from './EditDomainOptionDetailsForm';\n\ninterface EditDomainOptionDetailsProps {\n domainOption?: DomainOption;\n saveDomainOption: (data: DomainOption, onDone: () => void) => void;\n}\n\nexport function EditDomainOptionDetails(props: EditDomainOptionDetailsProps): React.ReactElement {\n return (\n <FormWrapper<DomainOption>\n initialValues={props.domainOption}\n validationSchema={DomainOptionValidationSchema}\n onSubmit={props.saveDomainOption}\n >\n <EditDomainOptionDetailsForm id={props.domainOption && props.domainOption.id} />\n </FormWrapper>\n );\n}\n","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { Actions, AppChannels } from 'shared/constants';\n\nimport { EditDomainOptionDetails } from 'apps/domain-options/components';\nimport { DomainOptionRequests } from 'apps/domain-options/data-requests';\nimport { DomainOption } from 'apps/domain-options/interfaces';\n\nexport function NewDomainOptionView(): JSX.Element {\n const dispatch = useDispatch();\n\n const createDomainOption = (data: DomainOption, onDone: () => void): void => {\n const onSuccess = (newDomainOption: DomainOption) => {\n onDone();\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.DOMAIN_OPTIONS,\n action: Actions.DomainOptions.EDIT_DOMAIN_OPTION,\n args: [newDomainOption.id]\n });\n };\n\n Flight.fetch(dispatch, DomainOptionRequests.createOption(data, onSuccess, onDone));\n };\n\n return (\n <>\n <h4 className='py-2'>Create New Domain Option</h4>\n <EditDomainOptionDetails saveDomainOption={createDomainOption} />\n </>\n );\n}\n","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { EditDomainOptionDetails } from 'apps/domain-options/components';\nimport { DomainOptionRequests } from 'apps/domain-options/data-requests';\nimport { DomainOption } from 'apps/domain-options/interfaces';\n\ninterface EditDomainOptionViewProps {\n optionId: string;\n}\n\nexport function EditDomainOptionView({ optionId }: EditDomainOptionViewProps): JSX.Element {\n const domainOption = Flight.useBasicFetch<DomainOption>(DomainOptionRequests.getOption(optionId));\n\n const dispatch = useDispatch();\n const saveDomainOption = (data: DomainOption, onDone: () => void): void =>\n Flight.fetch(dispatch, DomainOptionRequests.updateOption(data, onDone));\n\n return (\n <>\n <h4 className='py-2'>Edit Domain Option</h4>\n {domainOption.data &&\n <EditDomainOptionDetails domainOption={domainOption.data} saveDomainOption={saveDomainOption} />\n }\n </>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Y14NYZ692.chunk.js","names":[],"sources":["../../../../../src/apps/domain-options/interfaces/models/DomainOption.ts","../../../../../src/apps/domain-options/data-requests/DomainOptionRequests.ts","../../../../../src/apps/domain-options/views/delete-domain-option/DeleteDomainOptionView.tsx","../../../../../src/apps/domain-options/views/domain-options/DomainOptionsView.tsx","../../../../../src/apps/domain-options/utils/validation/DomainOptionValidation.ts","../../../../../src/apps/domain-options/components/edit-domain-option-details/DefaultValueField.tsx","../../../../../src/apps/domain-options/components/edit-domain-option-details/EditDomainOptionDetailsForm.tsx","../../../../../src/apps/domain-options/components/edit-domain-option-details/EditDomainOptionDetails.tsx","../../../../../src/apps/domain-options/views/new-domain-option/NewDomainOptionView.tsx","../../../../../src/apps/domain-options/views/edit-domain-option/EditDomainOptionView.tsx"],"sourcesContent":["import { MasterType } from 'libs/shared/enums/MasterType';\n\n/**\n * In the database the types are saved as C# types written as strings. Every field here\n * has been copied from what already exists in the database.\n */\nexport enum DomainOptionType {\n Boolean = 'System.Boolean',\n String = 'System.String',\n Long = 'System.Int64'\n}\n\nexport enum DomainOptionKind {\n Setting = 0,\n FeatureFlag = 1\n}\n\nexport interface DomainOption {\n id: string;\n name: string;\n displayName: string;\n type: DomainOptionType;\n entityType: MasterType;\n kind: DomainOptionKind;\n defaultValue: string | number;\n}\n","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/flight';\n\nimport { DomainOption, DomainOptionType } from 'apps/domain-options/interfaces';\n\nconst normalizeOptions = {\n namespace: 'domain_options'\n};\n\nconst endpoints = {\n getAll: () => `/api/domain/v3/settings/types`,\n getOne: (id: string) => `/api/domain/v3/settings/types/${id}`,\n createOne: () => `/api/domain/v3/settings/types`,\n updateOne: (id: string) => `/api/domain/v3/settings/types/${id}`,\n deleteOne: (id: string) => `/api/domain/v3/settings/types/${id}`\n};\n\nconst DataPrefixes = {\n DOMAIN_OPTIONS: 'domain:options',\n DOMAIN_OPTION: 'domain:option',\n UPDATE_DOMAIN_OPTION: 'update:domain:option',\n DELETE_DOMAIN_OPTION: 'delete:domain:option'\n};\n\nexport const DomainOptionRequests = {\n getAllOptions(): Flight.Request {\n return {\n key: DataPrefixes.DOMAIN_OPTIONS,\n url: endpoints.getAll(),\n normalizeOptions\n };\n },\n getOption(id: string): Flight.Request {\n return {\n key: `${DataPrefixes.DOMAIN_OPTION}:${id}`,\n url: endpoints.getOne(id),\n normalizeOptions\n };\n },\n\n createOption(option: DomainOption, success: (data: any) => void, error: (data: any) => void): Flight.Request {\n /**\n * DefaultValue for String option types must always be wrapped with quotation marks.\n */\n if (option.type === DomainOptionType.String)\n option = quotifyDefaultValue(option);\n\n return {\n key: DataPrefixes.DOMAIN_OPTION,\n url: endpoints.createOne(),\n data: option,\n type: HttpVerbs.POST,\n success,\n error,\n invalidationKeys: [DataPrefixes.DOMAIN_OPTIONS],\n normalizeOptions\n };\n },\n\n updateOption(option: DomainOption, callback: () => void): Flight.Request {\n /**\n * DefaultValue for String option types must always be wrapped with quotation marks.\n */\n if (option.type === DomainOptionType.String)\n option = quotifyDefaultValue(option);\n\n return {\n key: `${DataPrefixes.UPDATE_DOMAIN_OPTION}:${option.id}`,\n url: endpoints.updateOne(option.id),\n data: option,\n type: HttpVerbs.PUT,\n always: callback,\n formatData: () => option,\n normalizeOptions\n };\n },\n deleteOption(id: string, success: () => void): Flight.Request {\n return {\n key: `${DataPrefixes.DELETE_DOMAIN_OPTION}:${id}`,\n url: endpoints.deleteOne(id),\n type: HttpVerbs.DELETE,\n invalidationKeys: [DataPrefixes.DOMAIN_OPTIONS],\n normalizeOptions,\n success\n };\n }\n};\n\nfunction quotifyDefaultValue(option: DomainOption): DomainOption {\n const { defaultValue } = option;\n let defaultValueString = defaultValue as string;\n\n if (defaultValueString === '\"') {\n return {\n ...option,\n defaultValue: `\"${defaultValueString}\"`\n };\n }\n\n const firstChar = defaultValueString.charAt(0);\n const lastChar = defaultValueString.charAt(defaultValueString.length - 1);\n\n if (firstChar !== '\"')\n defaultValueString = `\"${defaultValueString}`;\n\n if (lastChar !== '\"')\n defaultValueString = `${defaultValueString}\"`;\n\n return {\n ...option,\n defaultValue: defaultValueString\n };\n}\n","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nimport { Actions, AppChannels } from 'shared/constants';\n\nimport { DomainOptionRequests } from 'apps/domain-options/data-requests';\nimport { DomainOption } from 'apps/domain-options/interfaces';\n\ninterface DeleteDomainOptionViewProps {\n optionId: string;\n}\n\nexport function DeleteDomainOptionView(props: DeleteDomainOptionViewProps & PopupViewProps): React.ReactElement {\n const [ showButtonSpinner, setShowButtonSpinner ] = React.useState(false);\n\n const domainOption = Flight.useBasicFetch<DomainOption>(DomainOptionRequests.getOption(props.optionId));\n const dispatch = useDispatch();\n\n const onDeleteSuccess = () => {\n props.closePopup();\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.DOMAIN_OPTIONS,\n action: Actions.DomainOptions.DOMAIN_OPTIONS\n });\n };\n\n const deleteDomainOption = () => {\n setShowButtonSpinner(true);\n\n Flight.fetch(dispatch, DomainOptionRequests.deleteOption(props.optionId, onDeleteSuccess));\n };\n\n return (\n <Popup title='Delete Domain Option' closePopup={props.closePopup} showLoadingSpinner={!domainOption.data}>\n {domainOption.data &&\n <>\n <div>\n <p>Are you sure you want to delete <strong>{domainOption.data.name}</strong>?</p>\n </div>\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.closePopup} />\n <PopupButtons.Submit\n variant='danger'\n onClick={deleteDomainOption}\n text='Yes, delete this domain option'\n showSpinner={showButtonSpinner}\n />\n </PopupButtons>\n </>\n }\n </Popup>\n );\n}\n","import * as React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\n\nimport { ObjectListNav } from 'shared/components';\nimport { Actions, AppChannels } from 'shared/constants';\n\nimport { DomainOptionRequests } from 'apps/domain-options/data-requests';\nimport { DomainOption } from 'apps/domain-options/interfaces';\n\nconst getOptionAppLink = (option: DomainOption) => ({\n application: AppChannels.DOMAIN_OPTIONS,\n action: Actions.DomainOptions.EDIT_DOMAIN_OPTION,\n args: [option.id]\n});\n\nconst newOptionAppLink = {\n application: AppChannels.DOMAIN_OPTIONS,\n action: Actions.DomainOptions.NEW_DOMAIN_OPTION\n};\n\nexport function DomainOptionsView(): JSX.Element {\n const domainOptions = Flight.useBasicFetch<DomainOption[]>(DomainOptionRequests.getAllOptions());\n\n if (!domainOptions.data)\n return <></>;\n\n const optionNames = domainOptions.data.map(option => {\n if (option.displayName)\n option.name = option.displayName;\n\n return option;\n });\n\n return (\n <>\n <div className='d-flex justify-content-between mb-2'>\n <h5 className='d-inline-block m-0'>Select a domain option type to edit:</h5>\n <AppLink appLink={newOptionAppLink} className='d-block'>\n <SvgContainer svg={PlusSvg} size={SvgContainerSize.Small} />\n <span>New Domain Option</span>\n </AppLink>\n </div>\n <ObjectListNav objects={optionNames} getAppLink={getOptionAppLink} />\n </>\n );\n}\n","import * as Yup from 'yup';\n\nimport { MasterType } from 'libs/shared/enums/MasterType';\n\nimport { DomainOption, DomainOptionKind, DomainOptionType } from 'apps/domain-options/interfaces';\n\nexport const DomainOptionValidationSchema = Yup.object().shape<DomainOption>({\n id: Yup.string(),\n\n name: Yup.string()\n .trim()\n .max(64, 'Name is too long')\n .required('Name is required')\n .default(''),\n\n displayName: Yup.string()\n .trim()\n .max(255, 'Display name is too long')\n .required('Display name is required')\n .default(''),\n\n type: Yup.mixed<DomainOptionType>()\n .required('Type is required')\n .default(DomainOptionType.Boolean),\n\n entityType: Yup.mixed<MasterType>()\n .required('Entity type is required')\n .default(MasterType.Customer),\n\n kind: Yup.mixed<DomainOptionKind>()\n .required('Kind is required')\n .default(DomainOptionKind.FeatureFlag),\n\n defaultValue: Yup.mixed<string | number>()\n .required('Default value is required')\n .default('false')\n\n}).noUnknown();\n","import * as React from 'react';\nimport { FieldAttributes } from 'formik';\n\nimport { FormField, FormFieldProps } from 'libs/shared/components/forms/form-field/FormField';\n\nimport { DomainOption, DomainOptionType } from 'apps/domain-options/interfaces';\n\ninterface DefaultValueFieldProps {\n type: DomainOptionType;\n defaultValue: string | number;\n}\n\nexport function DefaultValueField({ type, defaultValue }: DefaultValueFieldProps): JSX.Element {\n if (!type)\n return <></>;\n\n const formFieldProps: FieldAttributes<FormFieldProps> = {\n label: 'Default Value',\n name: 'defaultValue',\n id: 'defaultValue',\n value: defaultValue\n };\n\n if (type === DomainOptionType.Boolean) {\n return (\n <FormField<DomainOption>\n as='select'\n {...formFieldProps}\n >\n <option value='true'>True</option>\n <option value='false'>False</option>\n </FormField>\n );\n }\n\n if (type === DomainOptionType.String)\n return <FormField<DomainOption> as='input' {...formFieldProps} />;\n}\n","import * as React from 'react';\nimport { Form, useFormikContext } from 'formik';\n\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { useCanSubmitForm } from 'libs/shared/hooks/UseCanSubmitForm';\n\nimport { Actions, AppChannels } from 'shared/constants';\n\nimport { DomainOption, DomainOptionKind, DomainOptionType } from 'apps/domain-options/interfaces';\n\nimport { DefaultValueField } from './DefaultValueField';\n\nconst validEntities = [ MasterType.Customer, MasterType.User, MasterType.Organisation ];\n\ninterface EditDomainOptionDetailsFormProps {\n id?: string;\n}\n\nexport function EditDomainOptionDetailsForm(props: EditDomainOptionDetailsFormProps): React.ReactElement {\n const isNew = props.id === null || props.id === undefined;\n\n const formikProps = useFormikContext<DomainOption>();\n\n const canSubmit = useCanSubmitForm(formikProps);\n\n return (\n <Form>\n <FormField<DomainOption>\n label='Name (snake_case)'\n type='text'\n name='name'\n id='name'\n value={formikProps.values.name}\n placeholder='Enter a name for this domain option'\n autoFocus\n />\n\n <FormField<DomainOption>\n label='Display Name'\n type='text'\n name='displayName'\n id='displayName'\n value={formikProps.values.displayName}\n placeholder='Enter a display name for this domain option'\n />\n\n <FormField<DomainOption>\n as='select'\n label='Kind'\n name='kind'\n id='kind'\n value={formikProps.values.kind}\n >\n {ObjectHelper.getEnumKeys(DomainOptionKind).map((key: DomainOptionKind) =>\n <option key={key} value={(DomainOptionKind as any)[key]}>{key}</option>)}\n </FormField>\n\n <FormField<DomainOption>\n as='select'\n label='Entity'\n name='entityType'\n id='entityType'\n value={formikProps.values.entityType}\n >\n {ObjectHelper.getEnumKeys(MasterType)\n .filter((key: MasterType) => validEntities.includes((MasterType as any)[key]))\n .map((key: MasterType) =>\n <option key={key} value={(MasterType as any)[key]}>{key}</option>)\n }\n </FormField>\n\n <FormField<DomainOption>\n as='select'\n label='Type'\n name='type'\n id='type'\n value={formikProps.values.type}\n >\n {ObjectHelper.getEnumKeys(DomainOptionType).map((key: DomainOptionType) =>\n <option key={key} value={(DomainOptionType as any)[key]}>{key}</option>)}\n </FormField>\n\n <DefaultValueField type={formikProps.values.type} defaultValue={formikProps.values.defaultValue} />\n\n <div className='d-flex justify-content-between'>\n <SpinnerButton showSpinner={formikProps.isSubmitting} type='submit' disabled={!canSubmit}>\n {isNew ? 'Create' : 'Save'}\n </SpinnerButton>\n {!isNew &&\n <AppLink\n className='btn btn-outline-danger'\n appLink={{\n application: AppChannels.DOMAIN_OPTIONS,\n action: Actions.DomainOptions.DELETE_DOMAIN_OPTION,\n args: [props.id]\n }}\n >\n Delete\n </AppLink>\n }\n </div>\n </Form>\n );\n}\n","import * as React from 'react';\n\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\n\nimport { DomainOption } from 'apps/domain-options/interfaces';\nimport { DomainOptionValidationSchema } from 'apps/domain-options/utils';\n\nimport { EditDomainOptionDetailsForm } from './EditDomainOptionDetailsForm';\n\ninterface EditDomainOptionDetailsProps {\n domainOption?: DomainOption;\n saveDomainOption: (data: DomainOption, onDone: () => void) => void;\n}\n\nexport function EditDomainOptionDetails(props: EditDomainOptionDetailsProps): React.ReactElement {\n return (\n <FormWrapper<DomainOption>\n initialValues={props.domainOption}\n validationSchema={DomainOptionValidationSchema}\n onSubmit={props.saveDomainOption}\n >\n <EditDomainOptionDetailsForm id={props.domainOption && props.domainOption.id} />\n </FormWrapper>\n );\n}\n","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { Actions, AppChannels } from 'shared/constants';\n\nimport { EditDomainOptionDetails } from 'apps/domain-options/components';\nimport { DomainOptionRequests } from 'apps/domain-options/data-requests';\nimport { DomainOption } from 'apps/domain-options/interfaces';\n\nexport function NewDomainOptionView(): JSX.Element {\n const dispatch = useDispatch();\n\n const createDomainOption = (data: DomainOption, onDone: () => void): void => {\n const onSuccess = (newDomainOption: DomainOption) => {\n onDone();\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.DOMAIN_OPTIONS,\n action: Actions.DomainOptions.EDIT_DOMAIN_OPTION,\n args: [newDomainOption.id]\n });\n };\n\n Flight.fetch(dispatch, DomainOptionRequests.createOption(data, onSuccess, onDone));\n };\n\n return (\n <>\n <h4 className='py-2'>Create New Domain Option</h4>\n <EditDomainOptionDetails saveDomainOption={createDomainOption} />\n </>\n );\n}\n","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { EditDomainOptionDetails } from 'apps/domain-options/components';\nimport { DomainOptionRequests } from 'apps/domain-options/data-requests';\nimport { DomainOption } from 'apps/domain-options/interfaces';\n\ninterface EditDomainOptionViewProps {\n optionId: string;\n}\n\nexport function EditDomainOptionView({ optionId }: EditDomainOptionViewProps): JSX.Element {\n const domainOption = Flight.useBasicFetch<DomainOption>(DomainOptionRequests.getOption(optionId));\n\n const dispatch = useDispatch();\n const saveDomainOption = (data: DomainOption, onDone: () => void): void =>\n Flight.fetch(dispatch, DomainOptionRequests.updateOption(data, onDone));\n\n return (\n <>\n <h4 className='py-2'>Edit Domain Option</h4>\n {domainOption.data &&\n <EditDomainOptionDetails domainOption={domainOption.data} saveDomainOption={saveDomainOption} />\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"./Di_u2uix.chunk.js";import"./CfCYHRuo.chunk.js";import{n as r}from"./CFoexGFe.chunk.js";import{t as i}from"./cwPDEI372.chunk.js";import{l as a,y as o}from"./
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{a as e,i as t}from"./rp704-Pm.chunk.js";import{t as n}from"./Di_u2uix.chunk.js";import"./CfCYHRuo.chunk.js";import{n as r}from"./CFoexGFe.chunk.js";import{t as i}from"./cwPDEI372.chunk.js";import{l as a,y as o}from"./GpDEun8c2.chunk.js";import{n as s}from"./CbiGs3Tn.chunk.js";import{s as c,u as l}from"./Dgk5cBBe.chunk.js";import{t as u}from"./DpqbC5uX.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as d}from"./CZyPFSXo.chunk.js";import{t as f}from"./JmL1DHFu.chunk.js";import{t as p}from"./CxUyw6yf.chunk.js";import{t as m}from"./CUVnn-Rk.chunk.js";import{t as h}from"./DjnvbVQs.chunk.js";e();var g=t();function _(e){let t=c(f.video(e.videoId)),_=l(),v=c(d.objectClassifications(e.videoId)),y=c(d.memberBackboneClassifications(e.videoId)),b=c(m.cvLivePresentation()),x=c(b.data&&d.getClassificationTree(b.data.id));async function S(t,n){let i=p.flatten(x.data),a=t.reduce((e,t)=>({...e,[t]:!0}),{}),o=i.filter(e=>a[e.id]),s=u.uniq(u.flatten(o.map(e=>e.backboneClassificationIds)));await _(d.updateObjectBackboneClassification(e.videoId,s,r.Videos)),await _(d.updateObjectClassification(e.videoId,t,b.data.id,r.Videos)),n()}let C=v.data&&y.data&&x.data&&b.data;return(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(h,{videoId:e.videoId,activeAction:n.CvLive.EDIT_VIDEO_CLASSIFICATIONS}),(0,g.jsx)(o,{object:t.data}),C?(0,g.jsx)(a,{initialValues:{classificationIds:v.data.map(e=>e.id)},presentationId:b.data.id,presentationType:i.StreamableLearning,classificationTree:x.data,saveClassifications:S}):(0,g.jsx)(`div`,{className:`text-center p-5`,children:(0,g.jsx)(s,{as:`div`,animation:`border`,role:`status`})})]})}export{_ as CvLiveVideoClassificationsView};
|
|
2
|
+
//# sourceMappingURL=Y_IcNhI9.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"Y_IcNhI9.chunk.js","names":[],"sources":["../../../../../src/apps/cv-live/views/edit-video-classifications/CvLiveVideoClassificationsView.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { Classification, Presentation, Video } from 'libs/shared/interfaces';\nimport { TreeHelper } from 'libs/shared/utils/TreeHelper';\n\nimport { ObjectHeader } from 'shared/components';\nimport { SelectClassifications } from 'shared/components/classifications/select-classifications/SelectClassifications';\nimport { Actions } from 'shared/constants';\nimport { SubjectMemberType } from 'shared/enums';\nimport { SubjectRequests } from 'shared/flight-requests/SubjectRequests';\nimport { ClassificationTree } from 'shared/interfaces';\n\nimport { CvLiveVideoNav } from 'apps/cv-live/components/video-nav/CvLiveVideoNav';\nimport { PresentationRequests } from 'apps/cv-live/flight-requests/CvLivePresentationRequests';\nimport { VideoRequests } from 'apps/videos/flight-requests/CuratorVideoRequests';\n\ninterface CvLiveVideoClassificationsViewProps {\n videoId: string;\n}\n\nexport function CvLiveVideoClassificationsView(props: CvLiveVideoClassificationsViewProps): React.ReactElement {\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.videoId));\n \n const fetchAsync = Flight.useGetFetchAsync();\n \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 const presentation = Flight.useBasicFetch<Presentation>(\n PresentationRequests.cvLivePresentation()\n );\n\n const classificationTree = Flight.useBasicFetch<ClassificationTree>(\n presentation.data && SubjectRequests.getClassificationTree(presentation.data.id)\n );\n\n async function onSave(classificationIds: string[], setSubmittingFalse: () => void): Promise<void> {\n const allClassifications = TreeHelper.flatten<Classification>(classificationTree.data);\n\n const idHash = classificationIds.reduce<HashObject>((acc, id) => ({ ...acc, [id]: true }), {});\n\n const classifications = allClassifications.filter(c => idHash[c.id]);\n\n const backboneIds = ArrayHelper.uniq(ArrayHelper.flatten(classifications.map(c => c.backboneClassificationIds)));\n\n await fetchAsync(\n SubjectRequests.updateObjectBackboneClassification(props.videoId, backboneIds, SubjectMemberType.Videos)\n );\n\n await fetchAsync(SubjectRequests.updateObjectClassification(\n props.videoId,\n classificationIds,\n presentation.data.id,\n SubjectMemberType.Videos\n ));\n\n setSubmittingFalse();\n }\n\n const dataLoaded = videoClassifications.data &&\n videoSubjects.data &&\n classificationTree.data &&\n presentation.data;\n\n return (\n <>\n <CvLiveVideoNav\n videoId={props.videoId}\n activeAction={Actions.CvLive.EDIT_VIDEO_CLASSIFICATIONS}\n />\n\n <ObjectHeader object={video.data} />\n\n {dataLoaded ? (\n <SelectClassifications\n initialValues={{ classificationIds: videoClassifications.data.map(c => c.id) }}\n presentationId={presentation.data.id}\n presentationType={PresentationType.StreamableLearning}\n classificationTree={classificationTree.data}\n saveClassifications={onSave}\n />\n ) : (\n <div className='text-center p-5'>\n <Spinner as='div' animation='border' role='status' />\n </div>\n )}\n </>\n );\n}\n"],"mappings":"qmBA0BA,SAAgB,EAA+B,EAAgE,CAC7G,IAAM,EAAQ,EAA4B,EAAc,MAAM,EAAM,OAAO,CAAC,EAEtE,EAAa,EAAwB,EAErC,EAAuB,EAC3B,EAAgB,sBAAsB,EAAM,OAAO,CACrD,EAEM,EAAgB,EACpB,EAAgB,8BAA8B,EAAM,OAAO,CAC7D,EAEM,EAAe,EACnB,EAAqB,mBAAmB,CAC1C,EAEM,EAAqB,EACzB,EAAa,MAAQ,EAAgB,sBAAsB,EAAa,KAAK,EAAE,CACjF,EAEA,eAAe,EAAO,EAA6B,EAA+C,CAChG,IAAM,EAAqB,EAAW,QAAwB,EAAmB,IAAI,EAE/E,EAAS,EAAkB,QAAoB,EAAK,KAAQ,CAAE,GAAG,GAAM,GAAK,EAAK,GAAI,CAAC,CAAC,EAEvF,EAAkB,EAAmB,OAAO,GAAK,EAAO,EAAE,GAAG,EAE7D,EAAc,EAAY,KAAK,EAAY,QAAQ,EAAgB,IAAI,GAAK,EAAE,yBAAyB,CAAC,CAAC,EAE/G,MAAM,EACJ,EAAgB,mCAAmC,EAAM,QAAS,EAAa,EAAkB,MAAM,CACzG,EAEA,MAAM,EAAW,EAAgB,2BAC/B,EAAM,QACN,EACA,EAAa,KAAK,GAClB,EAAkB,MACpB,CAAC,EAED,EAAmB,CACrB,CAEA,IAAM,EAAa,EAAqB,MACtC,EAAc,MACd,EAAmB,MACnB,EAAa,KAEf,OACE,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,QAAS,EAAM,QACf,aAAc,EAAQ,OAAO,0BAC9B,CAAA,GAED,EAAA,EAAA,IAAA,CAAC,EAAD,CAAc,OAAQ,EAAM,IAAO,CAAA,EAElC,GACC,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,cAAe,CAAE,kBAAmB,EAAqB,KAAK,IAAI,GAAK,EAAE,EAAE,CAAE,EAC7E,eAAgB,EAAa,KAAK,GAClC,iBAAkB,EAAiB,mBACnC,mBAAoB,EAAmB,KACvC,oBAAqB,CACtB,CAAA,GAED,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,4BACb,EAAA,EAAA,IAAA,CAAC,EAAD,CAAS,GAAG,MAAM,UAAU,SAAS,KAAK,QAAU,CAAA,CACjD,CAAA,CAEP,CAAA,CAAA,CAEN"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{C as e,a as t,i as n,ln as r}from"./rp704-Pm.chunk.js";import{t as i}from"./Di_u2uix.chunk.js";import{t as a}from"./BvMTtGLi.chunk.js";import"./CfCYHRuo.chunk.js";import{t as o}from"./UCDGupVs.chunk.js";import{G as s}from"./
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{C as e,a as t,i as n,ln as r}from"./rp704-Pm.chunk.js";import{t as i}from"./Di_u2uix.chunk.js";import{t as a}from"./BvMTtGLi.chunk.js";import"./CfCYHRuo.chunk.js";import{t as o}from"./UCDGupVs.chunk.js";import{G as s}from"./DWHKdmdQ.chunk.js";import{t as c}from"./eoeMwpAO2.chunk.js";import{y as l}from"./GpDEun8c2.chunk.js";import{n as u}from"./CbiGs3Tn.chunk.js";import{s as d}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as f}from"./BDwjs8qz.chunk.js";import{R as p,z as m}from"./Bznq7eHJ.chunk.js";import{t as h}from"./Bwpvc7Th2.chunk.js";import{t as g}from"./C5i_8zoU.chunk.js";import{t as _}from"./MtOi7z-o.chunk.js";import{t as v}from"./DnZGILQc.chunk.js";import{t as y}from"./BMj3pXcm.chunk.js";var b=r(t()),x=n();function S(t){let[n,r]=b.useState(!1),S=h(),C=d(o.currentUser()),w=d(g.clip(t.id)),T=d(s.getAssemblyLineVideo(t.id)),E=d(w.data&&p.createViewKey(w.data.id,m.MasterObject));return b.useEffect(()=>{E.hasError&&(S.error(`You cannot preview this clip as it has been created on a video from a different region. You have been redirected to the edit details page.`),e.trigger({application:a.CLIPS,action:i.Clips.EDIT_CLIP_DETAILS,args:[t.id]},{replace:!0}))},[E.hasError]),!w.data||!C.data||!E.hasCompleted?(0,x.jsx)(`div`,{className:`text-center py-5`,children:(0,x.jsx)(u,{as:`div`,animation:`border`})}):E.hasError?(0,x.jsx)(x.Fragment,{}):(0,x.jsxs)(`div`,{children:[!!C.data&&(0,x.jsx)(v,{clipId:t.id,activeAction:i.Clips.PREVIEW_CLIP,currentUser:C.data}),w.data.status===f.Published&&(0,x.jsxs)(c,{variant:`info`,className:`mt-3 mb-1`,children:[`This clip is `,(0,x.jsx)(`strong`,{children:`published`}),` and cannot be edited or deleted. You may archive it if you believe it should no longer be in use.`]}),w.data.status===f.Archived&&(0,x.jsxs)(c,{variant:`info`,className:`mt-3 mb-1`,children:[`This clip is `,(0,x.jsx)(`strong`,{children:`archived`}),`. You may publish it again from the options menu.`]}),(0,x.jsxs)(`div`,{className:`${n?``:`d-none`}`,children:[(0,x.jsx)(l,{object:{name:w.data.name,status:w.data.status},actions:y.getClipActions(w.data,T.data),actionsDropdownClassName:`btn btn-outline-dark`,showStatus:!0}),(0,x.jsx)(_,{viewKey:E.data.viewKey,playerApi:new URL(ClickView.Config.Urls.PlayerApi),hotkeyElQuerySelector:`body`,onReady:()=>r(!0),eventLogging:!1})]})]})}export{S as PreviewClipView};
|
|
2
|
+
//# sourceMappingURL=Yr5eNz05.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"Yr5eNz05.chunk.js","names":[],"sources":["../../../../../src/apps/clips/views/preview-clip/PreviewClipView.tsx"],"sourcesContent":["import React from 'react';\nimport { Alert, Spinner } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\n\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Clip, CuratorUser, PlayerViewKey } from 'libs/shared/interfaces';\n\nimport { ClickViewPlayer } from 'projects/player/react/Player';\n\nimport { ObjectHeader } from 'shared/components';\nimport { Actions, AppChannels } from 'shared/constants';\n\nimport { AssemblyLineRequests } from 'apps/assembly-line/flight-requests/AssemblyLineRequests';\nimport { AssemblyLineVideoResponse } from 'apps/assembly-line/interfaces/responses/AssemblyLineVideoResponse';\nimport { EditClipNav } from 'apps/clips/components/edit-clip-nav/EditClipNav';\nimport { ClipRequests } from 'apps/clips/flight-requests/CuratorClipRequests';\nimport { ClipActionsHelper } from 'apps/clips/utils/ClipActionsHelper';\n\ninterface PreviewClipViewProps {\n id: string;\n}\n\nexport function PreviewClipView(props: PreviewClipViewProps): JSX.Element {\n const [ ready, setReady ] = React.useState(false);\n\n const alerts = useAlerts();\n\n const currentUser = Flight.useBasicFetch<CuratorUser>(UserRequests.currentUser());\n const clip = Flight.useBasicFetch<Clip>(ClipRequests.clip(props.id));\n const contentPipelineClip = Flight.useBasicFetch<AssemblyLineVideoResponse>(\n AssemblyLineRequests.getAssemblyLineVideo(props.id)\n );\n\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(\n clip.data &&\n PlayerRequests.createViewKey(clip.data.id, MediaIdType.MasterObject)\n );\n\n React.useEffect(() => {\n if (!viewKey.hasError)\n return;\n\n alerts.error(`You cannot preview this clip as it has been created on a video from a different region. You have been redirected to the edit details page.`);\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLIPS,\n action: Actions.Clips.EDIT_CLIP_DETAILS,\n args: [props.id]\n }, { replace: true });\n }, [viewKey.hasError]);\n\n if (!clip.data || !currentUser.data || !viewKey.hasCompleted) {\n return (\n <div className='text-center py-5'>\n <Spinner as='div' animation='border' />\n </div>\n );\n }\n\n if (viewKey.hasError)\n return <></>;\n\n return (\n <div>\n {!!currentUser.data &&\n <EditClipNav\n clipId={props.id}\n activeAction={Actions.Clips.PREVIEW_CLIP}\n currentUser={currentUser.data}\n />\n }\n {clip.data.status === CurationStatus.Published && (\n <Alert variant='info' className='mt-3 mb-1'>\n This clip is <strong>published</strong> and cannot be edited or deleted.\n You may archive it if you believe it should no longer be in use.\n </Alert>\n )}\n\n {clip.data.status === CurationStatus.Archived && (\n <Alert variant='info' className='mt-3 mb-1'>\n This clip is <strong>archived</strong>. You may publish it again\n from the options menu.\n </Alert>\n )}\n\n <div className={`${ready ? '' : 'd-none'}`}>\n <ObjectHeader\n object={{ name: clip.data.name, status: clip.data.status }}\n actions={ClipActionsHelper.getClipActions(clip.data, contentPipelineClip.data)}\n actionsDropdownClassName='btn btn-outline-dark'\n showStatus\n />\n <ClickViewPlayer\n viewKey={viewKey.data.viewKey}\n playerApi={new URL(ClickView.Config.Urls.PlayerApi)}\n hotkeyElQuerySelector='body'\n onReady={() => setReady(true)}\n eventLogging={false}\n />\n </div>\n </div>\n );\n}\n"],"mappings":"2uBA4BA,SAAgB,EAAgB,EAA0C,CACxE,GAAM,CAAE,EAAO,GAAA,EAAmB,SAAS,EAAK,EAE1C,EAAS,EAAU,EAEnB,EAAc,EAAkC,EAAa,YAAY,CAAC,EAC1E,EAAO,EAA2B,EAAa,KAAK,EAAM,EAAE,CAAC,EAC7D,EAAsB,EAC1B,EAAqB,qBAAqB,EAAM,EAAE,CACpD,EAEM,EAAU,EACd,EAAK,MACL,EAAe,cAAc,EAAK,KAAK,GAAI,EAAY,YAAY,CACrE,EA0BA,OAxBA,EAAM,cAAgB,CACf,EAAQ,WAGb,EAAO,MAAM,4IAA4I,EAEzJ,EAAmB,QAAQ,CACzB,YAAa,EAAY,MACzB,OAAQ,EAAQ,MAAM,kBACtB,KAAM,CAAC,EAAM,EAAE,CACjB,EAAG,CAAE,QAAS,EAAK,CAAC,EACtB,EAAG,CAAC,EAAQ,QAAQ,CAAC,EAEjB,CAAC,EAAK,MAAQ,CAAC,EAAY,MAAQ,CAAC,EAAQ,cAE5C,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,6BACb,EAAA,EAAA,IAAA,CAAC,EAAD,CAAS,GAAG,MAAM,UAAU,QAAU,CAAA,CACnC,CAAA,EAIL,EAAQ,UACH,EAAA,EAAA,IAAA,CAAA,EAAA,SAAA,CAAI,CAAA,GAGX,EAAA,EAAA,KAAA,CAAC,MAAD,CAAA,SAAA,CACG,CAAC,CAAC,EAAY,OACb,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,OAAQ,EAAM,GACd,aAAc,EAAQ,MAAM,aAC5B,YAAa,EAAY,IAC1B,CAAA,EAEF,EAAK,KAAK,SAAW,EAAe,YACnC,EAAA,EAAA,KAAA,CAAC,EAAD,CAAO,QAAQ,OAAO,UAAU,qBAAhC,CAA4C,iBAC7B,EAAA,EAAA,IAAA,CAAC,SAAD,CAAA,SAAQ,WAAiB,CAAA,EAAC,oGAElC,IAGR,EAAK,KAAK,SAAW,EAAe,WACnC,EAAA,EAAA,KAAA,CAAC,EAAD,CAAO,QAAQ,OAAO,UAAU,qBAAhC,CAA4C,iBAC7B,EAAA,EAAA,IAAA,CAAC,SAAD,CAAA,SAAQ,UAAgB,CAAA,EAAC,mDAEjC,KAGT,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,GAAG,EAAQ,GAAK,oBAAhC,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,OAAQ,CAAE,KAAM,EAAK,KAAK,KAAM,OAAQ,EAAK,KAAK,MAAO,EACzD,QAAS,EAAkB,eAAe,EAAK,KAAM,EAAoB,IAAI,EAC7E,yBAAyB,uBACzB,WAAA,EACD,CAAA,GACD,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,QAAS,EAAQ,KAAK,QACtB,UAAW,IAAI,IAAI,UAAU,OAAO,KAAK,SAAS,EAClD,sBAAsB,OACtB,YAAe,EAAS,EAAI,EAC5B,aAAc,EACf,CAAA,CACE,GACF,CAAA,CAAA,CAET"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{C as e,a as t,i as n}from"./rp704-Pm.chunk.js";import{t as r}from"./Di_u2uix.chunk.js";import{t as i}from"./BvMTtGLi.chunk.js";import"./CfCYHRuo.chunk.js";import{a,n as o,t as s}from"./
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{C as e,a as t,i as n}from"./rp704-Pm.chunk.js";import{t as r}from"./Di_u2uix.chunk.js";import{t as i}from"./BvMTtGLi.chunk.js";import"./CfCYHRuo.chunk.js";import{a,n as o,t as s}from"./C-M2om56.chunk.js";import{y as c}from"./GpDEun8c2.chunk.js";import{l}from"./Dgk5cBBe.chunk.js";import"./Oh4_zGIH.chunk.js";import{t as u}from"./B1uI4W1W.chunk.js";import{t as d}from"./Broadxiw.chunk.js";import{t as f}from"./BhWPGAdN2.chunk.js";import{t as p}from"./2NdfwDHB.chunk.js";import{t as m}from"./DB-51xws2.chunk.js";import{t as h}from"./BcwM0but2.chunk.js";import{t as g}from"./Duk0omCc2.chunk.js";import{t as _}from"./CoubHv2S.chunk.js";import{t as v}from"./DwJsrLcL2.chunk.js";import{t as y}from"./CE7PE1jj.chunk.js";import{t as b}from"./SVXAAhk02.chunk.js";import{n as x,r as S,t as C}from"./CF4nszK12.chunk.js";t();var w=n();function T(t){let n=l(),{data:T,appLinks:E}=x({id:t.id}),{currentUser:D,contentPartner:O}=T,{data:k,searchQuery:A,setSearchQuery:j,isFetching:M,isSearching:N}=C({partnerProfileId:t.id,type:`videos`});function P(e){return h.partnerProfileObjects({id:t.id,type:`videos`,cursor:e})}function F(e){N||n(P(e))}let{items:I,hasFirstPageCompleted:L,isFetching:R,hasMore:z,nextCursor:B}=y(P,F),V=N&&!M?k:I,H=!N&&z,U=g(V||[]),W=o.getColumnSet(s.ContentPartnerVideos),G={actions:e=>[{label:`Delete`,button:!0,appLink:E.deleteContentPartnerVideos(t.id,e.id),svg:p,className:`btn btn-outline-danger`}],appLinks:{[a.Video]:e=>({application:i.VIDEOS,action:r.Videos.EDIT_VIDEO,args:[e.id]}),[a.Series]:e=>({application:i.SERIES,action:r.Series.EDIT_SERIES,args:[e.id]})},extraData:{checkboxManager:U}};function K(){e.trigger(E.deleteContentPartnerVideos(t.id,U.getSelected()))}let q=L&&T.loaded;return(0,w.jsxs)(w.Fragment,{children:[!!D.data&&(0,w.jsx)(b,{contentPartnerId:t.id,activeAction:E.viewVideos(t.id).action,currentUser:D.data}),q?(0,w.jsxs)(`div`,{className:`tw-relative`,children:[M&&(0,w.jsx)(S,{}),(0,w.jsx)(c,{object:{name:`${O.data?.name} Videos`}}),(0,w.jsxs)(m,{members:V,columnGroups:[a.Video,a.Series],columns:W,columnData:G,emptyStateText:`No videos found.`,isFetching:R,fetchNext:F,nextCursor:B,hasMoreMembers:H,classNames:{filterContainer:`flex-wrap gap-2 justify-content-between`},onlyHideTableOnEmpty:!0,children:[(0,w.jsxs)(`div`,{className:`mx-1 d-flex flex-row gap-3`,children:[(0,w.jsx)(_,{name:`content-partner-videos-search`,query:A,setQuery:j,placeholder:`Search videos`,disabled:!N&&!V.length}),(0,w.jsx)(d,{svg:u,className:`btn btn-outline-dark`,appLink:E.addVideos(t.id),children:`Add Video(s)`})]}),(0,w.jsx)(`div`,{className:`mx-1 w-100`,children:(0,w.jsx)(v,{selectedCount:U.getSelectedCount(),onClickDeselectAll:U.deselectAll,onClickSelectBulk:K,getTypeText:()=>`of ${I.length} videos`,selectBulkActionButtonText:`Bulk remove videos`,selectAllCount:I.length})})]})]}):(0,w.jsx)(f,{})]})}export{T as ContentPartnerVideosView};
|
|
2
|
+
//# sourceMappingURL=Yrc9o6bG2.chunk.js.map
|