@clickview/reports 0.72.0-rc.0 → 0.73.0-rc.2
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/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/dist/bundles.json +2 -3
- package/dist/css/1VpVng8x.chunk.css +1 -0
- package/dist/css/BDijM1kt.chunk.css +1 -0
- package/dist/css/BMPwvOki.chunk.css +1 -0
- package/dist/css/BNt45Kgy.chunk.css +1 -0
- package/dist/css/BSGhUWzl.chunk.css +1 -0
- package/dist/css/BZ3_uhDP.chunk.css +1 -0
- package/dist/css/BaadNO4A.chunk.css +1 -0
- package/dist/css/BdUNjJqp.chunk.css +1 -0
- package/dist/css/BdeI0FAV.chunk.css +1 -0
- package/dist/css/BxcMGr8Y.chunk.css +1 -0
- package/dist/css/ByuL_xKJ.chunk.css +1 -0
- package/dist/css/C-A0Pj_7.chunk.css +1 -0
- package/dist/css/C4jMfPWU.chunk.css +1 -0
- package/dist/css/C7XoyEPr.chunk.css +1 -0
- package/dist/css/C8sxda3R.chunk.css +1 -0
- package/dist/css/CD1qrI1T.chunk.css +1 -0
- package/dist/css/CFO--d_R.chunk.css +1 -0
- package/dist/css/CX9nw8t8.chunk.css +1 -0
- package/dist/css/C_qGRdC2.chunk.css +1 -0
- package/dist/css/CdC6ugQR.chunk.css +1 -0
- package/dist/css/ClRRGXPb.chunk.css +1 -0
- package/dist/css/Cr1bwtZG.chunk.css +1 -0
- package/dist/css/DBlPz5Fw.chunk.css +1 -0
- package/dist/css/DDnpOnVB.chunk.css +1 -0
- package/dist/css/DFZQCLLg.chunk.css +1 -0
- package/dist/css/DJwAbl6l.chunk.css +1 -0
- package/dist/css/DWjg_0sz.chunk.css +1 -0
- package/dist/css/DYV9jjVn.chunk.css +1 -0
- package/dist/css/Dgeh4AqU.chunk.css +9 -0
- package/dist/css/DlOtoSz0.chunk.css +1 -0
- package/dist/css/DlxOgKUu.chunk.css +1 -0
- package/dist/css/Dp3arkyy.chunk.css +1 -0
- package/dist/css/DwgaDUzz.chunk.css +1 -0
- package/dist/css/FPQ_LmXH.chunk.css +1 -0
- package/dist/css/H09rC9gw.chunk.css +1 -0
- package/dist/css/LAFr2dPT.chunk.css +1 -0
- package/dist/css/Pg1TlYG6.chunk.css +1 -0
- package/dist/css/PsQn3-kb.chunk.css +1 -0
- package/dist/css/alkEuPrr.chunk.css +1 -0
- package/dist/css/k4DgCj_g.chunk.css +1 -0
- package/dist/en.json +1 -0
- package/dist/scripts/0Uji-0Ig.chunk.js +2 -0
- package/dist/scripts/0Uji-0Ig.chunk.js.map +1 -0
- package/dist/scripts/1uUClbTi.chunk.js +2 -0
- package/dist/scripts/1uUClbTi.chunk.js.map +1 -0
- package/dist/scripts/5O9SdVRZ.chunk.js +2 -0
- package/dist/scripts/5O9SdVRZ.chunk.js.map +1 -0
- package/dist/scripts/9-ob4xwW.chunk.js +2 -0
- package/dist/scripts/9-ob4xwW.chunk.js.map +1 -0
- package/dist/scripts/B-0CRp8U.chunk.js +15 -0
- package/dist/scripts/B-0CRp8U.chunk.js.map +1 -0
- package/dist/scripts/B-M_POW7.chunk.js +2 -0
- package/dist/scripts/B-M_POW7.chunk.js.map +1 -0
- package/dist/scripts/B0HNQPjj.chunk.js +2 -0
- package/dist/scripts/B0HNQPjj.chunk.js.map +1 -0
- package/dist/scripts/B2kHUvkf.chunk.js +2 -0
- package/dist/scripts/B2kHUvkf.chunk.js.map +1 -0
- package/dist/scripts/BADbeO_o.chunk.js +2 -0
- package/dist/scripts/BADbeO_o.chunk.js.map +1 -0
- package/dist/scripts/BAR_V9AM.chunk.js +2 -0
- package/dist/scripts/BAR_V9AM.chunk.js.map +1 -0
- package/dist/scripts/BArX7fyb.chunk.js +2 -0
- package/dist/scripts/BArX7fyb.chunk.js.map +1 -0
- package/dist/scripts/BAt5WimN.chunk.js +2 -0
- package/dist/scripts/BAt5WimN.chunk.js.map +1 -0
- package/dist/scripts/BBKDp0Ea.chunk.js +4 -0
- package/dist/scripts/BBKDp0Ea.chunk.js.map +1 -0
- package/dist/scripts/BE4qMmvm.chunk.js +2 -0
- package/dist/scripts/BE4qMmvm.chunk.js.map +1 -0
- package/dist/scripts/BEjQ8YiC.chunk.js +10 -0
- package/dist/scripts/BEjQ8YiC.chunk.js.map +1 -0
- package/dist/scripts/BFH1W3y4.chunk.js +2 -0
- package/dist/scripts/BFH1W3y4.chunk.js.map +1 -0
- package/dist/scripts/BGYUqEPH.chunk.js +2 -0
- package/dist/scripts/BGYUqEPH.chunk.js.map +1 -0
- package/dist/scripts/BI4Pc5Qp.chunk.js +3 -0
- package/dist/scripts/BI4Pc5Qp.chunk.js.map +1 -0
- package/dist/scripts/BIcuRL8o.chunk.js +2 -0
- package/dist/scripts/BIcuRL8o.chunk.js.map +1 -0
- package/dist/scripts/BK5Lddwt.chunk.js +2 -0
- package/dist/scripts/BK5Lddwt.chunk.js.map +1 -0
- package/dist/scripts/BM1URibR.chunk.js +2 -0
- package/dist/scripts/BM1URibR.chunk.js.map +1 -0
- package/dist/scripts/BOenBxfx.chunk.js +34 -0
- package/dist/scripts/BOenBxfx.chunk.js.map +1 -0
- package/dist/scripts/BOoxRruH.chunk.js +2 -0
- package/dist/scripts/BOoxRruH.chunk.js.map +1 -0
- package/dist/scripts/BP4vyxCh.chunk.js +2 -0
- package/dist/scripts/BP4vyxCh.chunk.js.map +1 -0
- package/dist/scripts/BRR3J_Zy.chunk.js +2 -0
- package/dist/scripts/BRR3J_Zy.chunk.js.map +1 -0
- package/dist/scripts/BUJR0SBs.chunk.js +2 -0
- package/dist/scripts/BUJR0SBs.chunk.js.map +1 -0
- package/dist/scripts/BY58fjpA.chunk.js +2 -0
- package/dist/scripts/BY58fjpA.chunk.js.map +1 -0
- package/dist/scripts/BZV5U3ST.chunk.js +2 -0
- package/dist/scripts/BZV5U3ST.chunk.js.map +1 -0
- package/dist/scripts/BfaprYhg.chunk.js +2 -0
- package/dist/scripts/BfaprYhg.chunk.js.map +1 -0
- package/dist/scripts/Bfbk7XQF.chunk.js +2 -0
- package/dist/scripts/Bfbk7XQF.chunk.js.map +1 -0
- package/dist/scripts/BgBDu2hA.chunk.js +2 -0
- package/dist/scripts/BgBDu2hA.chunk.js.map +1 -0
- package/dist/scripts/BoLC4I50.chunk.js +2 -0
- package/dist/scripts/BoLC4I50.chunk.js.map +1 -0
- package/dist/scripts/BsXmQt2a.chunk.js +2 -0
- package/dist/scripts/BsXmQt2a.chunk.js.map +1 -0
- package/dist/scripts/ByUxUi78.chunk.js +2 -0
- package/dist/scripts/ByUxUi78.chunk.js.map +1 -0
- package/dist/scripts/BzFtDyVZ.chunk.js +2 -0
- package/dist/scripts/BzFtDyVZ.chunk.js.map +1 -0
- package/dist/scripts/C1TqvuUF.chunk.js +2 -0
- package/dist/scripts/C1TqvuUF.chunk.js.map +1 -0
- package/dist/scripts/C5lK-q9T.chunk.js +2 -0
- package/dist/scripts/C5lK-q9T.chunk.js.map +1 -0
- package/dist/scripts/C7IXStcD.chunk.js +2 -0
- package/dist/scripts/C7IXStcD.chunk.js.map +1 -0
- package/dist/scripts/CANX99lP.chunk.js +2 -0
- package/dist/scripts/CANX99lP.chunk.js.map +1 -0
- package/dist/scripts/CBjj_ih-.chunk.js +2 -0
- package/dist/scripts/CBjj_ih-.chunk.js.map +1 -0
- package/dist/scripts/CCIDM29p.chunk.js +2 -0
- package/dist/scripts/CCIDM29p.chunk.js.map +1 -0
- package/dist/scripts/CFjwQ5Sg.chunk.js +2 -0
- package/dist/scripts/CFjwQ5Sg.chunk.js.map +1 -0
- package/dist/scripts/CGbmnb6g.chunk.js +380 -0
- package/dist/scripts/CGbmnb6g.chunk.js.map +1 -0
- package/dist/scripts/CSd_qFwj.chunk.js +2 -0
- package/dist/scripts/CSd_qFwj.chunk.js.map +1 -0
- package/dist/scripts/CW7x8M-z.chunk.js +2 -0
- package/dist/scripts/CW7x8M-z.chunk.js.map +1 -0
- package/dist/scripts/CX5q-0jT.chunk.js +2 -0
- package/dist/scripts/CX5q-0jT.chunk.js.map +1 -0
- package/dist/scripts/CZHffw7D.chunk.js +2 -0
- package/dist/scripts/CZHffw7D.chunk.js.map +1 -0
- package/dist/scripts/C_Famtl1.chunk.js +2 -0
- package/dist/scripts/C_Famtl1.chunk.js.map +1 -0
- package/dist/scripts/C_TaaD_7.chunk.js +2 -0
- package/dist/scripts/C_TaaD_7.chunk.js.map +1 -0
- package/dist/scripts/C_zppm7j.chunk.js +2 -0
- package/dist/scripts/C_zppm7j.chunk.js.map +1 -0
- package/dist/scripts/CbrfSCTb.chunk.js +2 -0
- package/dist/scripts/CbrfSCTb.chunk.js.map +1 -0
- package/dist/scripts/CjL3q_zy.chunk.js +6 -0
- package/dist/scripts/CjL3q_zy.chunk.js.map +1 -0
- package/dist/scripts/CjQHXyx0.chunk.js +2 -0
- package/dist/scripts/CjQHXyx0.chunk.js.map +1 -0
- package/dist/scripts/Cmu1J2M7.chunk.js +262 -0
- package/dist/scripts/Cmu1J2M7.chunk.js.map +1 -0
- package/dist/scripts/Co9J1lM_.chunk.js +2 -0
- package/dist/scripts/Co9J1lM_.chunk.js.map +1 -0
- package/dist/scripts/Cq8XHkfC.chunk.js +2 -0
- package/dist/scripts/Cq8XHkfC.chunk.js.map +1 -0
- package/dist/scripts/Crxtdvtr.chunk.js +2 -0
- package/dist/scripts/Crxtdvtr.chunk.js.map +1 -0
- package/dist/scripts/CvkQEqoz.chunk.js +2 -0
- package/dist/scripts/CvkQEqoz.chunk.js.map +1 -0
- package/dist/scripts/DC24UA5G.chunk.js +2 -0
- package/dist/scripts/DC24UA5G.chunk.js.map +1 -0
- package/dist/scripts/DDQPxnFm.chunk.js +2 -0
- package/dist/scripts/DDQPxnFm.chunk.js.map +1 -0
- package/dist/scripts/DGmD-zcu.chunk.js +3 -0
- package/dist/scripts/DGmD-zcu.chunk.js.map +1 -0
- package/dist/scripts/DIqHgqYU.chunk.js +42 -0
- package/dist/scripts/DIqHgqYU.chunk.js.map +1 -0
- package/dist/scripts/DLNH1FET.chunk.js +2 -0
- package/dist/scripts/DLNH1FET.chunk.js.map +1 -0
- package/dist/scripts/DREQwdto.chunk.js +2 -0
- package/dist/scripts/DREQwdto.chunk.js.map +1 -0
- package/dist/scripts/DSJfyygS.chunk.js +2 -0
- package/dist/scripts/DSJfyygS.chunk.js.map +1 -0
- package/dist/scripts/DUPqT4A_.chunk.js +2 -0
- package/dist/scripts/DUPqT4A_.chunk.js.map +1 -0
- package/dist/scripts/DZWKI51S.chunk.js +2 -0
- package/dist/scripts/DZWKI51S.chunk.js.map +1 -0
- package/dist/scripts/DaLaLgLY.chunk.js +2 -0
- package/dist/scripts/DaLaLgLY.chunk.js.map +1 -0
- package/dist/scripts/DcnG6LJL.chunk.js +2 -0
- package/dist/scripts/DcnG6LJL.chunk.js.map +1 -0
- package/dist/scripts/DdCE2h3h.chunk.js +2 -0
- package/dist/scripts/DdCE2h3h.chunk.js.map +1 -0
- package/dist/scripts/DdaZekkP.chunk.js +2 -0
- package/dist/scripts/DdaZekkP.chunk.js.map +1 -0
- package/dist/scripts/DkJdzeV5.chunk.js +2 -0
- package/dist/scripts/DkJdzeV5.chunk.js.map +1 -0
- package/dist/scripts/DlVmB7me.chunk.js +4 -0
- package/dist/scripts/DlVmB7me.chunk.js.map +1 -0
- package/dist/scripts/Dm6PeyeG.chunk.js +2 -0
- package/dist/scripts/Dm6PeyeG.chunk.js.map +1 -0
- package/dist/scripts/DqMufS1U.chunk.js +2 -0
- package/dist/scripts/DqMufS1U.chunk.js.map +1 -0
- package/dist/scripts/DtMtah8Q.chunk.js +2 -0
- package/dist/scripts/DtMtah8Q.chunk.js.map +1 -0
- package/dist/scripts/DwxW4_xW.chunk.js +2 -0
- package/dist/scripts/DwxW4_xW.chunk.js.map +1 -0
- package/dist/scripts/Dx4VsESo.chunk.js +2 -0
- package/dist/scripts/Dx4VsESo.chunk.js.map +1 -0
- package/dist/scripts/DyhdHLt7.chunk.js +2 -0
- package/dist/scripts/DyhdHLt7.chunk.js.map +1 -0
- package/dist/scripts/EpoqEdEt.chunk.js +2 -0
- package/dist/scripts/EpoqEdEt.chunk.js.map +1 -0
- package/dist/scripts/Etwv4iY4.chunk.js +2 -0
- package/dist/scripts/Etwv4iY4.chunk.js.map +1 -0
- package/dist/scripts/GlEgn_rx.chunk.js +2 -0
- package/dist/scripts/GlEgn_rx.chunk.js.map +1 -0
- package/dist/scripts/H-GxGp0N.chunk.js +2 -0
- package/dist/scripts/H-GxGp0N.chunk.js.map +1 -0
- package/dist/scripts/HFbpCC17.chunk.js +2 -0
- package/dist/scripts/HFbpCC17.chunk.js.map +1 -0
- package/dist/scripts/HVSLS_Hw.chunk.js +2 -0
- package/dist/scripts/HVSLS_Hw.chunk.js.map +1 -0
- package/dist/scripts/Hdw9KpzY.chunk.js +10 -0
- package/dist/scripts/Hdw9KpzY.chunk.js.map +1 -0
- package/dist/scripts/L-FEMlca.chunk.js +2 -0
- package/dist/scripts/L-FEMlca.chunk.js.map +1 -0
- package/dist/scripts/OUlVmzyS.chunk.js +2 -0
- package/dist/scripts/OUlVmzyS.chunk.js.map +1 -0
- package/dist/scripts/SdlfGvLH.chunk.js +2 -0
- package/dist/scripts/SdlfGvLH.chunk.js.map +1 -0
- package/dist/scripts/Us8IAQKV.chunk.js +2 -0
- package/dist/scripts/Us8IAQKV.chunk.js.map +1 -0
- package/dist/scripts/ZPrCrk06.chunk.js +2 -0
- package/dist/scripts/ZPrCrk06.chunk.js.map +1 -0
- package/dist/scripts/app-CQEXKRTo.js +228 -0
- package/dist/scripts/app-CQEXKRTo.js.map +1 -0
- package/dist/scripts/bDb9_r6g.chunk.js +8 -0
- package/dist/scripts/bDb9_r6g.chunk.js.map +1 -0
- package/dist/scripts/bfga3fp9.chunk.js +6 -0
- package/dist/scripts/bfga3fp9.chunk.js.map +1 -0
- package/dist/scripts/ckwYvamH.chunk.js +2 -0
- package/dist/scripts/ckwYvamH.chunk.js.map +1 -0
- package/dist/scripts/gVHcxSzg.chunk.js +2 -0
- package/dist/scripts/gVHcxSzg.chunk.js.map +1 -0
- package/dist/scripts/j7UObMj5.chunk.js +3 -0
- package/dist/scripts/j7UObMj5.chunk.js.map +1 -0
- package/dist/scripts/jNUTSO6y.chunk.js +2 -0
- package/dist/scripts/jNUTSO6y.chunk.js.map +1 -0
- package/dist/scripts/mLe4zPMQ.chunk.js +2 -0
- package/dist/scripts/mLe4zPMQ.chunk.js.map +1 -0
- package/dist/scripts/oXJu4dT2.chunk.js +2 -0
- package/dist/scripts/oXJu4dT2.chunk.js.map +1 -0
- package/dist/scripts/pW31gVxo.chunk.js +2 -0
- package/dist/scripts/pW31gVxo.chunk.js.map +1 -0
- package/dist/scripts/pmJce9de.chunk.js +2 -0
- package/dist/scripts/pmJce9de.chunk.js.map +1 -0
- package/dist/scripts/rO0zPagv.chunk.js +2 -0
- package/dist/scripts/rO0zPagv.chunk.js.map +1 -0
- package/dist/scripts/rf9OuobP.chunk.js +2 -0
- package/dist/scripts/rf9OuobP.chunk.js.map +1 -0
- package/dist/scripts/sBa2VMAv.chunk.js +2 -0
- package/dist/scripts/sBa2VMAv.chunk.js.map +1 -0
- package/dist/scripts/sFV5nxD4.chunk.js +2 -0
- package/dist/scripts/sFV5nxD4.chunk.js.map +1 -0
- package/dist/scripts/vDUMsOFT.chunk.js +2 -0
- package/dist/scripts/vDUMsOFT.chunk.js.map +1 -0
- package/dist/scripts/z0Is6h8v.chunk.js +2 -0
- package/dist/scripts/z0Is6h8v.chunk.js.map +1 -0
- package/dist/scripts/zVke3nt7.chunk.js +3 -0
- package/dist/scripts/zVke3nt7.chunk.js.map +1 -0
- package/package.json +5 -3
- package/typings/utils/env.d.ts +3 -0
- package/typings/utils/imports.d.ts +1 -1
- package/dist/css/1103-reports-d3d5cc00db.chunk.css +0 -31
- package/dist/css/1456-reports-4a5871a275.chunk.css +0 -9
- package/dist/css/1648-reports-012456ba48.chunk.css +0 -2
- package/dist/css/209-reports-c33663a53e.chunk.css +0 -11
- package/dist/css/2150-reports-84ec0e9770.chunk.css +0 -4
- package/dist/css/2217-reports-74dec0a3fe.chunk.css +0 -32
- package/dist/css/2997-reports-e08318f14b.chunk.css +0 -9
- package/dist/css/2999-reports-f190450b10.chunk.css +0 -60
- package/dist/css/4582-reports-d3d5cc00db.chunk.css +0 -31
- package/dist/css/5304-reports-22c2d8d635.chunk.css +0 -9
- package/dist/css/6007-reports-5ba77c55a3.chunk.css +0 -8
- package/dist/css/6031-reports-d558076846.chunk.css +0 -6
- package/dist/css/6356-reports-8c5b220bf6.chunk.css +0 -1
- package/dist/css/6811-reports-baf2e97e71.chunk.css +0 -35
- package/dist/css/7723-reports-8c6d3c414b.chunk.css +0 -4
- package/dist/css/7747-reports-2d9e191b5a.chunk.css +0 -12
- package/dist/css/8087-reports-cfe23ba648.chunk.css +0 -10
- package/dist/css/8294-reports-c797263ac2.chunk.css +0 -1
- package/dist/css/8418-reports-0ada3f3ce2.chunk.css +0 -29
- package/dist/css/8450-reports-06493dfde5.chunk.css +0 -9
- package/dist/css/8622-reports-9e8970cc7f.chunk.css +0 -8
- package/dist/css/8839-reports-8e46644943.chunk.css +0 -1
- package/dist/css/8989-reports-92b4f1dde8.chunk.css +0 -8
- package/dist/css/9059-reports-a2ac630ebc.chunk.css +0 -35
- package/dist/css/9285-reports-5b9af8380f.chunk.css +0 -13
- package/dist/css/9661-reports-7435e94a85.chunk.css +0 -4
- package/dist/css/9822-reports-a1db1900c7.chunk.css +0 -8
- package/dist/css/9949-reports-f22fa2b407.chunk.css +0 -15
- package/dist/css/reports-app-b4c4ec5632.css +0 -32
- package/dist/languages/en.json +0 -1
- package/dist/scripts/1103-d77d388f5b-reports.chunk.js +0 -1
- package/dist/scripts/1177-7cf7817e74-reports.chunk.js +0 -1
- package/dist/scripts/1456-b7f437ef87-reports.chunk.js +0 -1
- package/dist/scripts/1648-e892604f5a-reports.chunk.js +0 -1
- package/dist/scripts/1934-ca8497c768-reports.chunk.js +0 -2
- package/dist/scripts/1934-ca8497c768-reports.chunk.js.LICENSE.txt +0 -9
- package/dist/scripts/2087-e0ef668e1f-reports.chunk.js +0 -1
- package/dist/scripts/209-72e77f375e-reports.chunk.js +0 -1
- package/dist/scripts/2150-4e9e1fb433-reports.chunk.js +0 -1
- package/dist/scripts/2217-15fa35197a-reports.chunk.js +0 -1
- package/dist/scripts/2476-a700f69dc4-reports.chunk.js +0 -1
- package/dist/scripts/2539-04dfb4f4f1-reports.chunk.js +0 -1
- package/dist/scripts/2997-444b5bdaf0-reports.chunk.js +0 -1
- package/dist/scripts/2999-4d87eebbbd-reports.chunk.js +0 -2
- package/dist/scripts/2999-4d87eebbbd-reports.chunk.js.LICENSE.txt +0 -1
- package/dist/scripts/312-8b006e92ff-reports.chunk.js +0 -1
- package/dist/scripts/4234-e3c04f41eb-reports.chunk.js +0 -1
- package/dist/scripts/4372-26474a3318-reports.chunk.js +0 -1
- package/dist/scripts/438-b444dfb8c6-reports.chunk.js +0 -1
- package/dist/scripts/4582-230f130f41-reports.chunk.js +0 -1
- package/dist/scripts/4752-db4247883d-reports.chunk.js +0 -2
- package/dist/scripts/4752-db4247883d-reports.chunk.js.LICENSE.txt +0 -118
- package/dist/scripts/4979-7e14b09f33-reports.chunk.js +0 -1
- package/dist/scripts/5051-ff0ec9348d-reports.chunk.js +0 -1
- package/dist/scripts/5091-ddd6f61b55-reports.chunk.js +0 -1
- package/dist/scripts/5173-cce3b37672-reports.chunk.js +0 -1
- package/dist/scripts/5177-a7372e7b8d-reports.chunk.js +0 -1
- package/dist/scripts/5304-d5674b32b4-reports.chunk.js +0 -1
- package/dist/scripts/5802-2125536755-reports.chunk.js +0 -1
- package/dist/scripts/6007-42edca6bba-reports.chunk.js +0 -1
- package/dist/scripts/6031-b1c60cc409-reports.chunk.js +0 -1
- package/dist/scripts/6081-2bbda6cac3-reports.chunk.js +0 -1
- package/dist/scripts/6180-bdb237ffbe-reports.chunk.js +0 -2
- package/dist/scripts/6180-bdb237ffbe-reports.chunk.js.LICENSE.txt +0 -1
- package/dist/scripts/6198-189ddde870-reports.chunk.js +0 -1
- package/dist/scripts/6356-a1b313c73e-reports.chunk.js +0 -1
- package/dist/scripts/645-e8b19128e5-reports.chunk.js +0 -1
- package/dist/scripts/6545-eadce8e749-reports.chunk.js +0 -1
- package/dist/scripts/6811-40ded4c089-reports.chunk.js +0 -1
- package/dist/scripts/7238-de5ef0ebfb-reports.chunk.js +0 -1
- package/dist/scripts/7562-748e60c3fc-reports.chunk.js +0 -1
- package/dist/scripts/7709-82750ee317-reports.chunk.js +0 -1
- package/dist/scripts/7723-1799f5aa26-reports.chunk.js +0 -1
- package/dist/scripts/7747-bc33e51d7b-reports.chunk.js +0 -2
- package/dist/scripts/7747-bc33e51d7b-reports.chunk.js.LICENSE.txt +0 -1
- package/dist/scripts/7925-c6c532c9c4-reports.chunk.js +0 -1
- package/dist/scripts/8087-1d9e9701e5-reports.chunk.js +0 -1
- package/dist/scripts/8393-c37cc22b4c-reports.chunk.js +0 -1
- package/dist/scripts/8418-9f96caf039-reports.chunk.js +0 -1
- package/dist/scripts/8450-f2d5d99614-reports.chunk.js +0 -1
- package/dist/scripts/8591-4811082ab0-reports.chunk.js +0 -1
- package/dist/scripts/8622-a422eff0c4-reports.chunk.js +0 -1
- package/dist/scripts/8839-711793a97f-reports.chunk.js +0 -1
- package/dist/scripts/8989-ca5cab7f45-reports.chunk.js +0 -1
- package/dist/scripts/9059-b2dcf3cdb2-reports.chunk.js +0 -1
- package/dist/scripts/9162-7ffc692736-reports.chunk.js +0 -1
- package/dist/scripts/9285-ecddd01efb-reports.chunk.js +0 -1
- package/dist/scripts/9590-41bb23ae71-reports.chunk.js +0 -1
- package/dist/scripts/9647-f0c111d3f0-reports.chunk.js +0 -1
- package/dist/scripts/9661-2dee4c3417-reports.chunk.js +0 -1
- package/dist/scripts/9822-1b202f9d49-reports.chunk.js +0 -1
- package/dist/scripts/9895-3b3feb12b9-reports.chunk.js +0 -1
- package/dist/scripts/9949-63e32c6733-reports.chunk.js +0 -1
- package/dist/scripts/bundle-1bfbac149b.min.js +0 -2
- package/dist/scripts/bundle-1bfbac149b.min.js.LICENSE.txt +0 -108
- package/dist/scripts/polyfills-3db3f009d4.min.js +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as g,c9 as b,ca as U,j as e,L as O,i as k,h as K,a6 as W,ar as D,c as Q,e as X,d as z,l as Y,u as w,a as J,A as Z,g as ee,V as te,C as ae,U as se,bR as ie,aW as S}from"./app-CQEXKRTo.js";import{P as ne,M as re,V as oe,a as le,E as ce}from"./CGbmnb6g.chunk.js";import{g as de}from"./CX5q-0jT.chunk.js";import{C as me}from"./bDb9_r6g.chunk.js";import{u as ge,I as ue}from"./BAt5WimN.chunk.js";import{a as he}from"./C_TaaD_7.chunk.js";import{V as L}from"./B-M_POW7.chunk.js";import{u as pe}from"./BArX7fyb.chunk.js";import{u as xe,a as fe}from"./CjQHXyx0.chunk.js";import{u as je}from"./CvkQEqoz.chunk.js";import{a as ve,S as ye}from"./jNUTSO6y.chunk.js";import{V as Ce}from"./ByUxUi78.chunk.js";import"./BI4Pc5Qp.chunk.js";import"./Cq8XHkfC.chunk.js";import"./5O9SdVRZ.chunk.js";import"./CW7x8M-z.chunk.js";import"./GlEgn_rx.chunk.js";import"./z0Is6h8v.chunk.js";import"./EpoqEdEt.chunk.js";import"./DqMufS1U.chunk.js";import"./BIcuRL8o.chunk.js";import"./9-ob4xwW.chunk.js";import"./BGYUqEPH.chunk.js";import"./sBa2VMAv.chunk.js";import"./DGmD-zcu.chunk.js";import"./DIqHgqYU.chunk.js";import"./CBjj_ih-.chunk.js";import"./sFV5nxD4.chunk.js";import"./DSJfyygS.chunk.js";import"./HFbpCC17.chunk.js";import"./H-GxGp0N.chunk.js";import"./OUlVmzyS.chunk.js";import"./pW31gVxo.chunk.js";const we={numItems:5,minWidth:50,maxWidth:100},Ie={getPartialLoadingItems(t={}){const n={...we,...t},s=()=>Math.max(Math.floor(Math.random()*n.maxWidth),n.minWidth);return[...Array(n.numItems)].map(()=>({width:`${s()}px`}))}},Ne="shared.breadcrumbComponent",Ve=O.encloseNamespace(Ne),Se=64,_=48,h=g.forwardRef((t,n)=>{const{breadcrumb:{name:s,appLink:c,active:d},withBackIcon:m}=t;let i=s,r=null;return i.length>_&&(i=s.slice(0,_)+"...",r=s),e.jsx("li",{className:`breadcrumb-item${d?" active":""}`,title:r,children:d?e.jsx("strong",{children:i}):e.jsxs(k,{appLink:c,ref:n,children:[m&&e.jsx(K,{svg:me,size:W.Small}),e.jsx("span",{className:m?"ms-2":"",children:i})]})})}),Ee=({breadcrumbs:t})=>{const n=b(U.XS),s=(t==null?void 0:t.length)||0,[c,d]=g.useState(!1),[m,i]=g.useState(!1),r=g.useRef(null);g.useEffect(()=>{const l=(t==null?void 0:t.reduce((u,N)=>u+N.name.length,0))??0;s>4&&l>Se&&d(!0)},[t==null?void 0:t.length]),g.useLayoutEffect(()=>{var l;m&&((l=r.current)==null||l.focus())},[r.current,m]);function x(){d(!1),i(!0)}if(!s||n&&s<2)return e.jsx(e.Fragment,{});if(n)return e.jsx("nav",{"aria-label":"breadcrumb",children:e.jsx("ol",{className:"breadcrumb m-0 p-0",children:e.jsx(h,{breadcrumb:t[s-2],withBackIcon:!0})})});const f=e.jsx(h,{breadcrumb:t[0]}),j=s>2?e.jsx(h,{breadcrumb:t[1]}):e.jsx(e.Fragment,{}),v=s>3?e.jsx(h,{breadcrumb:t[s-2]}):e.jsx(e.Fragment,{}),o=s>1?e.jsx(h,{breadcrumb:t[s-1]}):e.jsx(e.Fragment,{}),I=t.slice(2,s-2);return e.jsx("nav",{"aria-label":"breadcrumb",children:e.jsxs("ol",{className:"breadcrumb m-0 p-0",children:[f,j,c?e.jsx("li",{className:"breadcrumb-item",children:e.jsx("button",{className:"btn-link",onClick:x,"aria-label":Ve("expand"),children:"..."})}):I.map((l,u)=>e.jsx(h,{breadcrumb:l,ref:u===0?r:null},u)),v,o]})})},Ae=g.memo(function({numItems:t=3}){return b(U.XS)?e.jsx("div",{className:"partial-loading-background",style:{height:"1.3125rem",width:"6rem"}}):e.jsx("nav",{"aria-label":"breadcrumb",children:e.jsx("ol",{className:"breadcrumb m-0 p-0",children:Ie.getPartialLoadingItems({numItems:t}).map(({width:s},c)=>e.jsx("li",{className:"breadcrumb-item",children:e.jsx("span",{className:"d-inline-block partial-loading-background",style:{width:s},dangerouslySetInnerHTML:{__html:" "}})},c))})})}),Me="_rowA_1gcwf_1",Fe="_videoEngagement_1gcwf_4",E={rowA:Me,videoEngagement:Fe},Re="reportsVideos.schoolVideoViews",A=O.encloseNamespace(Re);function mt(t){var M,F,R;const n=D(),[s]=Q(te.ANONYMISE_USERS),c=X(),d=z(),m=Y.getVideoRequest(t.id,t.typeId),i=w(m),r=w(ae.config()),x=w(L.videoHeatMapAggregation(t.id,c)),f=w(ne.createViewKey(t.id,re.MasterObject)),j=a=>L.videoHeatMap(t.id,c,a),v=a=>n(j(a)),{items:o,hasMore:I,isFetching:l,nextCursor:u,hasFirstPageCompleted:N}=ge(j,v),y=o==null?void 0:o.map(a=>a.userId).filter(a=>!!a),{items:V,hasFirstRequestCompleted:T}=he(y,se.getById);pe(i),J({title:A("title",{video:(M=i.data)==null?void 0:M.name})}),je((F=i.data)==null?void 0:F.name),xe(fe(i.data,B));function B(){var P;const a=ie.getCurrentAppLink(),C=(P=a==null?void 0:a.args)==null?void 0:P[0];let p="";return C&&(t.typeId===S.Interactive&&(p=`/interactives/${a==null?void 0:a.args[0]}`),t.typeId===S.Video&&(p=`/videos/${a==null?void 0:a.args[0]}`),t.typeId===S.Clip&&(p=`/clips/${a==null?void 0:a.args[0]}`)),p}function q(a){if(a.userId){const C=V==null?void 0:V[a.userId];return C||{id:a.userId,deleted:!0}}return{sessionId:a.sessionId}}const H=o==null?void 0:o.map(a=>({...q(a),percentage:a.engagementRate})),$=i.hasCompleted&&r.data&&f.data&&x.hasCompleted,G=!!i.hasCompleted&&N&&(T||!(y!=null&&y.length));return e.jsxs("div",{children:[e.jsx("div",{className:"mb-3",children:i.data?e.jsx(Ee,{breadcrumbs:[{name:A("videoViews"),appLink:{application:ee.VIDEOS,action:Z.Videos.HOME}},{name:i.data.name,active:!0}]}):e.jsx(Ae,{})}),e.jsxs("div",{className:"d-flex flex-column gap-3",children:[e.jsx("div",{className:`${E.rowA} w-100`,children:e.jsx(ve,{videoId:t.id,type:"user_type"})}),e.jsx("div",{className:"w-100",children:e.jsxs("div",{className:"row",children:[e.jsxs("div",{className:`${E.rowB} col row`,children:[e.jsx("div",{className:"col-6",children:e.jsx(ye,{videoId:t.id,type:"year_group"})}),e.jsx("div",{className:"col-6",children:e.jsx(Ce,{videoId:t.id})})]}),e.jsx("div",{className:E.videoEngagement,children:$?e.jsx(oe,{heading:A("totalEngagement"),className:"p-3 h-auto",engagement:x.data,viewKey:f.data.viewKey,playerApiUrl:r.data.playerApiUrl,imageCdnUrl:r.data.imageCdnUrl}):e.jsx(le,{hasHeading:!0})})]})}),G&&e.jsxs(e.Fragment,{children:[e.jsx(ce,{engagement:o,users:H,imageCdnUrl:(R=r.data)==null?void 0:R.imageCdnUrl,anonymiseUsers:s},de(d)),(I||l)&&e.jsx(ue,{isFetching:l,fetchNext:v,nextCursor:u})]})]})]})}export{mt as SchoolVideoViewsView};
|
|
2
|
+
//# sourceMappingURL=ckwYvamH.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ckwYvamH.chunk.js","sources":["../../../../libs/shared/src/utils/PartialLoadingHelper.ts","../../../../libs/shared/src/components/breadcrumbs/Breadcrumbs.tsx","../../src/apps/videos/views/school-video-views/SchoolVideoViewsView.tsx"],"sourcesContent":["const DEFAULT_PARTIAL_LOADING_OPTIONS: PartialLoadingOptions = {\n numItems: 5,\n minWidth: 50, // px\n maxWidth: 100 // px\n};\n\nexport interface PartialLoadingOptions {\n numItems?: number;\n minWidth?: number;\n maxWidth?: number;\n}\n\ninterface PartialLoadingItem {\n width: string;\n}\n\nexport const PartialLoadingHelper = {\n getPartialLoadingItems(options: PartialLoadingOptions = {}): PartialLoadingItem[] {\n const opts = {\n ...DEFAULT_PARTIAL_LOADING_OPTIONS,\n ...options\n };\n\n const getRandomFilterWidth = () => Math.max(Math.floor(Math.random() * opts.maxWidth), opts.minWidth);\n\n return [...Array(opts.numItems)].map(() => ({ width: `${getRandomFilterWidth()}px` }));\n }\n};","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { ChevronLeftSvg } from 'libs/shared/images/svg/arrows/ChevronLeftSvg';\nimport { PartialLoadingHelper } from 'libs/shared/utils/PartialLoadingHelper';\n\nimport { SvgContainer, SvgContainerSize } from '../svg-container/SvgContainer';\n\nconst namespace = 'shared.breadcrumbComponent';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst COLLAPSE_CHARACTER_COUNT = 64;\nconst MAX_SEGMENT_LENGTH = 48;\n\nexport interface Breadcrumb {\n name: string;\n appLink?: Core.AppLink;\n active?: boolean;\n}\n\ninterface BreadcrumbItemProps {\n breadcrumb: Breadcrumb;\n withBackIcon?: boolean;\n}\n\nexport const BreadcrumbItem = React.forwardRef((\n props: BreadcrumbItemProps,\n ref: React.ForwardedRef<HTMLElement>\n) => {\n const { breadcrumb: { name, appLink, active }, withBackIcon } = props;\n\n let trimmedName = name;\n let title: string = null;\n\n if (trimmedName.length > MAX_SEGMENT_LENGTH) {\n trimmedName = name.slice(0, MAX_SEGMENT_LENGTH) + '...';\n\n // Only setting the title when we trim, because otherwise it's really not needed - Sha\n title = name;\n }\n\n return (\n <li\n className={`breadcrumb-item${active ? ' active' : ''}`}\n title={title}\n >\n {active\n ? <strong>{trimmedName}</strong>\n : <AppLink appLink={appLink} ref={ref}>\n {withBackIcon && <SvgContainer svg={ChevronLeftSvg} size={SvgContainerSize.Small} />}\n <span className={withBackIcon ? 'ms-2' : ''}>{trimmedName}</span>\n </AppLink>\n }\n </li>\n );\n});\n\ninterface BreadcrumbsProps {\n breadcrumbs: Breadcrumb[];\n}\n\nexport const Breadcrumbs = ({ breadcrumbs }: BreadcrumbsProps) => {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n const length = breadcrumbs?.length || 0;\n \n const [ collapse, setCollapse ] = React.useState(false);\n const [ shouldFocus, setShouldFocus ] = React.useState(false);\n const expandRef = React.useRef<HTMLElement>(null);\n\n React.useEffect(() => {\n const characterLength = breadcrumbs?.reduce((prev, next) => prev + next.name.length, 0) ?? 0;\n\n if (length > 4 && characterLength > COLLAPSE_CHARACTER_COUNT)\n setCollapse(true);\n }, [breadcrumbs?.length]);\n\n /**\n * Focus our first expanded item the first time it appears.\n */\n React.useLayoutEffect(() => {\n if (shouldFocus)\n expandRef.current?.focus();\n }, [ expandRef.current, shouldFocus ]);\n\n function onClickExpand() {\n setCollapse(false);\n setShouldFocus(true);\n }\n\n if (!length || (isMobile && length < 2))\n return <></>;\n\n if (isMobile)\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} withBackIcon />\n </ol>\n </nav>\n );\n\n const first = <BreadcrumbItem breadcrumb={breadcrumbs[0]} />;\n const second = length > 2 ? <BreadcrumbItem breadcrumb={breadcrumbs[1]} /> : <></>;\n const secondLast = length > 3 ? <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} /> : <></>;\n const last = length > 1 ? <BreadcrumbItem breadcrumb={breadcrumbs[length - 1]} /> : <></>;\n const rest = breadcrumbs.slice(2, length - 2);\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {first}\n {second}\n {collapse ?\n <li className='breadcrumb-item'>\n <button\n className='btn-link'\n onClick={onClickExpand}\n aria-label={getPhrase('expand')}\n >\n ...\n </button>\n </li> :\n rest.map((breadcrumb, idx) => (\n <BreadcrumbItem\n key={idx}\n breadcrumb={breadcrumb}\n ref={idx === 0 ? expandRef : null}\n />\n ))\n }\n {secondLast}\n {last}\n </ol>\n </nav>\n );\n};\n\nexport const PartialBreadcrumbs = React.memo(function({ numItems = 3 }: { numItems?: number; }) {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n if (isMobile) {\n return (\n <div className='partial-loading-background' style={{ height: '1.3125rem', width: '6rem' }} />\n );\n }\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {PartialLoadingHelper.getPartialLoadingItems({ numItems }).map(({ width }, idx) => (\n <li key={idx} className='breadcrumb-item'>\n <span className='d-inline-block partial-loading-background' style={{ width }} dangerouslySetInnerHTML={{ __html: ' ' }} />\n </li>\n ))}\n </ol>\n </nav>\n );\n});","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { EngagementTable } from 'libs/shared/apps/analytics/components/engagement-table/EngagementTable';\nimport { getFilterParamsKey } from 'libs/shared/apps/analytics/utils/FilterParamUtils';\nimport { Breadcrumbs, PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useGrowingBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, Engagement, PlayerViewKey, User, VideoTypes } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { PartialVideoEngagementOverlay } from 'shared/components/video-engagement-overlay/PartialVideoEngagementOverlay';\nimport { VideoEngagementOverlay } from 'shared/components/video-engagement-overlay/VideoEngagementOverlay';\nimport { Actions } from 'shared/constants/ReportsActions';\nimport { AppChannels } from 'shared/constants/ReportsRadioChannels';\nimport { ViewModelKeys } from 'shared/constants/ReportsViewModels';\nimport { VideoViewsV2Requests } from 'shared/flight-requests/VideoViewsV2Requests';\nimport { useGetAppLinkFilterParams, useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { useHandleVideoError } from 'shared/hooks/UseHandleVideoError';\nimport { useSetHeaderActions } from 'shared/hooks/UseSetHeaderActions';\nimport { useSetHeaderTitle } from 'shared/hooks/UseSetHeaderTitle';\nimport { useGetObjectHeaderActions } from 'shared/utils/HeaderActionUtils';\nimport { StreamsBarChartCardView } from 'shared/views/overview-cards/streams-bar-chart-card/StreamsBarChartCardView';\nimport { StreamsChartCardView } from 'shared/views/overview-cards/streams-chart-card/StreamsChartCardView';\nimport { VideoViewsByRoleCardView } from 'shared/views/overview-cards/video-views-by-role-card/VideoViewsByRoleCardView';\n\nimport styles from './school-video-views.module.scss';\n\nconst namespace = 'reportsVideos.schoolVideoViews';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SchoolVideoViewsViewProps {\n id: string;\n typeId: MasterType;\n}\n\nexport function SchoolVideoViewsView(props: SchoolVideoViewsViewProps) {\n const fetchAsync = Flight.useGetFetchAsync();\n\n const [anonymiseUsers] = useViewModel<boolean>(ViewModelKeys.ANONYMISE_USERS);\n\n const requestFilter = useGetRequestFilter();\n const filterQueryParams = useGetAppLinkFilterParams();\n\n const videoRequest = VideoHelper.getVideoRequest(props.id, props.typeId);\n const video = Flight.useBasicFetch<VideoTypes>(videoRequest);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const heatmapAggregation = Flight.useBasicFetch<Engagement>(\n VideoViewsV2Requests.videoHeatMapAggregation(props.id, requestFilter)\n );\n\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(\n PlayerRequests.createViewKey(props.id, MediaIdType.MasterObject)\n );\n\n const getRequest = (cursor?: string) => VideoViewsV2Requests.videoHeatMap(props.id, requestFilter, cursor);\n const fetchNext = (cursor?: string) => fetchAsync(getRequest(cursor));\n const {\n items: individualHeatmaps,\n hasMore,\n isFetching,\n nextCursor,\n hasFirstPageCompleted: heatmapFirstPageCompleted\n } = useInfiniteList<Engagement>(getRequest, fetchNext);\n\n const individualHeatmapUserIds = individualHeatmaps?.map(h => h.userId).filter(u => !!u);\n const {\n items: users,\n hasFirstRequestCompleted: usersFirstPageCompleted\n } = useGrowingBatchFetch<User>(\n individualHeatmapUserIds,\n UserRequests.getById\n );\n\n useHandleVideoError(video);\n\n useSetPageMetadata({ title: getPhrase('title', { video: video.data?.name }) });\n useSetHeaderTitle(video.data?.name);\n useSetHeaderActions(useGetObjectHeaderActions(video.data, getInsightsUrl));\n\n\n function getInsightsUrl(): string {\n const currentAppLink = AppLinkHelper.getCurrentAppLink();\n const videoId = currentAppLink?.args?.[0];\n let videoRoute = '';\n\n if (!videoId) return videoRoute;\n\n if (props.typeId === MasterType.Interactive)\n videoRoute = `/interactives/${currentAppLink?.args[0]}`;\n\n if (props.typeId === MasterType.Video)\n videoRoute = `/videos/${currentAppLink?.args[0]}`;\n\n if (props.typeId === MasterType.Clip)\n videoRoute = `/clips/${currentAppLink?.args[0]}`;\n\n return videoRoute;\n }\n\n function getAnonUser(e: Engagement): AnonUser {\n if (e.userId) {\n const user = users?.[e.userId];\n\n if (!user)\n return { id: e.userId, deleted: true } as AnonUser;\n\n return user;\n }\n\n return { sessionId: e.sessionId } as AnonUser;\n }\n \n const viewers = individualHeatmaps?.map(e => ({ ...getAnonUser(e), percentage: e.engagementRate }));\n\n const playerLoaded = (\n video.hasCompleted &&\n config.data &&\n viewKey.data &&\n heatmapAggregation.hasCompleted\n );\n\n const tableDataLoaded = (\n !!video.hasCompleted &&\n heatmapFirstPageCompleted &&\n (usersFirstPageCompleted || !individualHeatmapUserIds?.length)\n );\n\n return (\n <div>\n <div className='mb-3'>\n {video.data ?\n <Breadcrumbs\n breadcrumbs={[\n {\n name: getPhrase('videoViews'),\n appLink: {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.HOME\n }\n }, {\n name: video.data.name,\n active: true\n }\n ]}\n />\n : <PartialBreadcrumbs />\n }\n </div>\n\n <div className='d-flex flex-column gap-3'>\n <div className={`${styles.rowA} w-100`}>\n <StreamsChartCardView videoId={props.id} type='user_type' />\n </div>\n <div className='w-100'>\n <div className='row'>\n <div className={`${styles.rowB} col row`}>\n <div className='col-6'>\n <StreamsBarChartCardView videoId={props.id} type='year_group' />\n </div>\n <div className='col-6'>\n <VideoViewsByRoleCardView videoId={props.id} />\n </div>\n </div>\n <div className={styles.videoEngagement}>\n {playerLoaded ?\n <VideoEngagementOverlay\n heading={getPhrase('totalEngagement')}\n className='p-3 h-auto'\n engagement={heatmapAggregation.data}\n viewKey={viewKey.data.viewKey}\n playerApiUrl={config.data.playerApiUrl}\n imageCdnUrl={config.data.imageCdnUrl}\n />\n : <PartialVideoEngagementOverlay hasHeading />\n }\n </div>\n </div>\n </div>\n {tableDataLoaded &&\n <>\n <EngagementTable\n key={getFilterParamsKey(filterQueryParams)}\n engagement={individualHeatmaps}\n users={viewers}\n imageCdnUrl={config.data?.imageCdnUrl}\n anonymiseUsers={anonymiseUsers}\n />\n {(hasMore || isFetching) &&\n <InfiniteScrollFooter\n isFetching={isFetching}\n fetchNext={fetchNext}\n nextCursor={nextCursor}\n />\n }\n </>\n }\n </div>\n </div>\n );\n}"],"names":["DEFAULT_PARTIAL_LOADING_OPTIONS","PartialLoadingHelper","options","opts","getRandomFilterWidth","namespace","getPhrase","LanguageService","COLLAPSE_CHARACTER_COUNT","MAX_SEGMENT_LENGTH","BreadcrumbItem","React.forwardRef","props","ref","name","appLink","active","withBackIcon","trimmedName","title","jsx","jsxs","AppLink","SvgContainer","ChevronLeftSvg","SvgContainerSize","Breadcrumbs","breadcrumbs","isMobile","useMediaQuery","MediaQueryStrings","length","collapse","setCollapse","React.useState","shouldFocus","setShouldFocus","expandRef","React.useRef","React.useEffect","characterLength","prev","next","React.useLayoutEffect","_a","onClickExpand","Fragment","first","second","secondLast","last","rest","breadcrumb","idx","PartialBreadcrumbs","React.memo","numItems","width","SchoolVideoViewsView","fetchAsync","Flight.useGetFetchAsync","anonymiseUsers","useViewModel","ViewModelKeys","requestFilter","useGetRequestFilter","filterQueryParams","useGetAppLinkFilterParams","videoRequest","VideoHelper","video","Flight.useBasicFetch","config","ConfigRequests","heatmapAggregation","VideoViewsV2Requests","viewKey","PlayerRequests","MediaIdType","getRequest","cursor","fetchNext","individualHeatmaps","hasMore","isFetching","nextCursor","heatmapFirstPageCompleted","useInfiniteList","individualHeatmapUserIds","h","u","users","usersFirstPageCompleted","useGrowingBatchFetch","UserRequests","useHandleVideoError","useSetPageMetadata","useSetHeaderTitle","_b","useSetHeaderActions","useGetObjectHeaderActions","getInsightsUrl","currentAppLink","AppLinkHelper","videoId","videoRoute","MasterType","getAnonUser","e","user","viewers","playerLoaded","tableDataLoaded","AppChannels","Actions","styles","StreamsChartCardView","StreamsBarChartCardView","VideoViewsByRoleCardView","VideoEngagementOverlay","PartialVideoEngagementOverlay","EngagementTable","_c","getFilterParamsKey","InfiniteScrollFooter"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as e,O as o,bF as j,L as m,e as g,u as f,T as y,a as T}from"./app-CQEXKRTo.js";import{T as d}from"./DDQPxnFm.chunk.js";import{u as S,b as N}from"./CjQHXyx0.chunk.js";import{u as _}from"./CvkQEqoz.chunk.js";import{S as E,a as L}from"./jNUTSO6y.chunk.js";import{T as l}from"./BADbeO_o.chunk.js";import{C as R,V as b}from"./ByUxUi78.chunk.js";import{C as n}from"./DGmD-zcu.chunk.js";import{V as I}from"./B-M_POW7.chunk.js";import{S as O}from"./BsXmQt2a.chunk.js";import"./sFV5nxD4.chunk.js";import"./H-GxGp0N.chunk.js";import"./OUlVmzyS.chunk.js";import"./sBa2VMAv.chunk.js";import"./pW31gVxo.chunk.js";import"./Dm6PeyeG.chunk.js";import"./CBjj_ih-.chunk.js";import"./BZV5U3ST.chunk.js";import"./Bfbk7XQF.chunk.js";import"./B-0CRp8U.chunk.js";import"./rO0zPagv.chunk.js";import"./BGYUqEPH.chunk.js";const P="_image_1a110_1",B={image:P},$="reportsShared.totalViewsByContentCardEmptyState",p=m.encloseNamespace($);function A(){return e.jsxs(o,{className:"flex-grow-1 justify-content-center",children:[e.jsx(o.Image,{src:j.EmptyStates.Shared.PuzzleGroup,className:B.image}),e.jsx(o.Heading,{className:"h6",children:p("heading")}),e.jsx(o.Info,{className:"w-100",children:p("description")})]})}const h="reportsShared.videoViewsByContentCard",c=m.encloseNamespace(h);function F(){const x=g(),C=f(I.aggregation("content_type",x));function V(a){switch(a){case"ClickView content":return n.YELLOW;case"TV content":return n.PURPLE;case"User generated content":return n.GREEN}}function w(a){switch(a){case"ClickView content":return c("clickview");case"TV content":return c("tv");case"User generated content":return c("userGenerated")}}function v(a){return a?a.filter(t=>t.name==="ClickView content"||t.name==="TV content"||t.name==="User generated content").map(t=>({name:w(t.name),y:t.count,color:V(t.name)})):null}const r=v(C.data);return e.jsx("div",{className:"d-flex flex-column h-100 bg-white rounded p-3",children:r?e.jsxs(e.Fragment,{children:[e.jsx("h2",{className:"h6 mb-3",children:e.jsx(y,{namespace:h,phrase:"videoViews"})}),r.length?e.jsx(R,{data:r}):e.jsx(A,{})]}):e.jsx("div",{className:"partial-loading-background w-25",children:" "})})}const G="_column1_1s749_1",U="_column2_1s749_4",k="_videoViewsCard_1s749_7",s={column1:G,column2:U,videoViewsCard:k},H="videos.schoolVideoOverview",i=m.encloseNamespace(H),u=50;function pe(){return T({title:i("videos")}),_(i("videos")),S(N()),e.jsxs("div",{children:[e.jsx(O,{}),e.jsxs("div",{className:"d-flex gap-3",children:[e.jsxs("div",{className:`d-flex flex-column gap-3 ${s.column1}`,children:[e.jsx("div",{className:s.videoViewsCard,children:e.jsx(E,{type:"year_group"})}),e.jsx("div",{className:s.videoViewsCard,children:e.jsx(b,{})}),e.jsx("div",{className:s.videoViewsCard,children:e.jsx(F,{})})]}),e.jsxs("div",{className:`d-flex flex-column gap-3 ${s.column2}`,children:[e.jsx("div",{className:s.videoViewsCard,children:e.jsx(L,{type:"user_type"})}),e.jsx("div",{className:s.videoViewsCard,children:e.jsx(l,{type:d.RootTopic,heading:i("totalViewsSubject"),emptyStateText:i("emptySubjects"),limit:u})}),e.jsx("div",{className:s.videoViewsCard,children:e.jsx(l,{type:d.ChildTopic,heading:i("totalViewsTopic"),emptyStateText:i("emptyTopics"),limit:u})})]})]})]})}export{pe as SchoolVideoOverviewView};
|
|
2
|
+
//# sourceMappingURL=gVHcxSzg.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gVHcxSzg.chunk.js","sources":["../../src/shared/views/overview-cards/video-views-by-content-card/empty-state/TotalViewsByContentCardEmptyState.tsx","../../src/shared/views/overview-cards/video-views-by-content-card/VideoViewsByContentCard.tsx","../../src/apps/videos/views/school-video-overview/SchoolVideoOverviewView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nimport { ImageUrls } from 'shared/constants/ReportsImageUrls';\n\nimport styles from './total-views-by-content-card-empty-state.module.scss';\n\nconst namespace = 'reportsShared.totalViewsByContentCardEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function TotalViewsByContentCardEmptyState() {\n return (\n <EmptyState className='flex-grow-1 justify-content-center'>\n <EmptyState.Image\n src={ImageUrls.EmptyStates.Shared.PuzzleGroup}\n className={styles.image}\n />\n <EmptyState.Heading className='h6'>\n {getPhrase('heading')}\n </EmptyState.Heading>\n <EmptyState.Info className='w-100'>\n {getPhrase('description')}\n </EmptyState.Info>\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { ColumnChart } from 'shared/components/column-chart/ColumnChart';\nimport { CHART_COLOUR } from 'shared/constants/ChartStyles';\nimport { VideoViewsV2Requests } from 'shared/flight-requests/VideoViewsV2Requests';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { TotalViewsByContentCardEmptyState } from 'shared/views/overview-cards/video-views-by-content-card/empty-state/TotalViewsByContentCardEmptyState';\n\nconst namespace = 'reportsShared.videoViewsByContentCard';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nenum ContentType {\n ClickView = 'ClickView content',\n TV = 'TV content',\n UserGenerated = 'User generated content'\n}\n\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function VideoViewsByContentCardView() {\n const requestFilter = useGetRequestFilter();\n\n const contentTypeCount = Flight.useBasicFetch<GroupedAnalyticsCount[]>(\n VideoViewsV2Requests.aggregation('content_type', requestFilter)\n );\n\n function mapContentTypeToChartColour(contentType: string) {\n switch (contentType) {\n case ContentType.ClickView: return CHART_COLOUR.YELLOW;\n case ContentType.TV: return CHART_COLOUR.PURPLE;\n case ContentType.UserGenerated: return CHART_COLOUR.GREEN;\n }\n }\n\n function mapContentTypeToLabel(contentType: string) {\n switch (contentType) {\n case ContentType.ClickView: return getPhrase('clickview');\n case ContentType.TV: return getPhrase('tv');\n case ContentType.UserGenerated: return getPhrase('userGenerated');\n }\n }\n\n function getChartData(contentTypeCount: GroupedAnalyticsCount[]) {\n if (!contentTypeCount) return null;\n\n const mappedGroups = contentTypeCount.filter(group => (\n group.name === ContentType.ClickView ||\n group.name === ContentType.TV ||\n group.name === ContentType.UserGenerated\n )).map(group => ({\n name: mapContentTypeToLabel(group.name),\n y: group.count,\n color: mapContentTypeToChartColour(group.name)\n }));\n\n return mappedGroups;\n }\n\n const chartData = getChartData(contentTypeCount.data);\n\n return (\n <div className='d-flex flex-column h-100 bg-white rounded p-3'>\n {chartData ?\n <>\n <h2 className='h6 mb-3'><Text namespace={namespace} phrase='videoViews' /></h2>\n\n {chartData.length ?\n <ColumnChart data={chartData} />\n : <TotalViewsByContentCardEmptyState />\n }\n </>\n : <div className='partial-loading-background w-25'> </div>\n }\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\n\nimport { TopicAnalyticsType } from 'shared/enums/TopicAnalyticsType';\nimport { useSetHeaderActions } from 'shared/hooks/UseSetHeaderActions';\nimport { useSetHeaderTitle } from 'shared/hooks/UseSetHeaderTitle';\nimport { getVideoHeaderActions } from 'shared/utils/HeaderActionUtils';\nimport { StreamsBarChartCardView } from 'shared/views/overview-cards/streams-bar-chart-card/StreamsBarChartCardView';\nimport { StreamsChartCardView } from 'shared/views/overview-cards/streams-chart-card/StreamsChartCardView';\nimport { TopClassificationsCardView } from 'shared/views/overview-cards/top-classifications-card/TopClassificationsCardView';\nimport { VideoViewsByContentCardView } from 'shared/views/overview-cards/video-views-by-content-card/VideoViewsByContentCard';\nimport { VideoViewsByRoleCardView } from 'shared/views/overview-cards/video-views-by-role-card/VideoViewsByRoleCardView';\n\nimport { SchoolVideosNav } from 'apps/videos/components/school-videos-nav/SchoolVideosNav';\n\nimport styles from './school-video-overview.module.scss';\n\nconst namespace = 'videos.schoolVideoOverview';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst TOP_CLASSIFICATIONS_LIMIT = 50;\n\nexport function SchoolVideoOverviewView(): JSX.Element {\n useSetPageMetadata({ title: getPhrase('videos') });\n useSetHeaderTitle(getPhrase('videos'));\n useSetHeaderActions(getVideoHeaderActions());\n\n return (\n <div>\n <SchoolVideosNav />\n <div className='d-flex gap-3'>\n <div className={`d-flex flex-column gap-3 ${styles.column1}`}>\n <div className={styles.videoViewsCard}>\n <StreamsBarChartCardView type='year_group' />\n </div>\n <div className={styles.videoViewsCard}>\n <VideoViewsByRoleCardView />\n </div>\n <div className={styles.videoViewsCard}>\n <VideoViewsByContentCardView />\n </div>\n </div>\n <div className={`d-flex flex-column gap-3 ${styles.column2}`}>\n <div className={styles.videoViewsCard}>\n <StreamsChartCardView type='user_type' />\n </div>\n <div className={styles.videoViewsCard}>\n <TopClassificationsCardView\n type={TopicAnalyticsType.RootTopic}\n heading={getPhrase('totalViewsSubject')}\n emptyStateText={getPhrase('emptySubjects')}\n limit={TOP_CLASSIFICATIONS_LIMIT}\n />\n </div>\n <div className={styles.videoViewsCard}>\n <TopClassificationsCardView\n type={TopicAnalyticsType.ChildTopic}\n heading={getPhrase('totalViewsTopic')}\n emptyStateText={getPhrase('emptyTopics')}\n limit={TOP_CLASSIFICATIONS_LIMIT}\n />\n </div>\n </div>\n </div>\n </div>\n );\n}"],"names":["namespace","getPhrase","LanguageService","TotalViewsByContentCardEmptyState","jsxs","EmptyState","jsx","ImageUrls","styles","VideoViewsByContentCardView","requestFilter","useGetRequestFilter","contentTypeCount","Flight.useBasicFetch","VideoViewsV2Requests","mapContentTypeToChartColour","contentType","CHART_COLOUR","mapContentTypeToLabel","getChartData","group","chartData","Fragment","Text","ColumnChart","TOP_CLASSIFICATIONS_LIMIT","SchoolVideoOverviewView","useSetPageMetadata","useSetHeaderTitle","useSetHeaderActions","getVideoHeaderActions","SchoolVideosNav","StreamsBarChartCardView","VideoViewsByRoleCardView","StreamsChartCardView","TopClassificationsCardView","TopicAnalyticsType"],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{bD as L,s as d,j as i,i as b,by as I,I as N,R as $,aQ as T,a6 as P,_ as M,X as D,T as w,r as O,c2 as V,a3 as B,av as E,at as H}from"./app-CQEXKRTo.js";import{g as r}from"./sFV5nxD4.chunk.js";import{g as R,B as A,I as U,a as z}from"./BZV5U3ST.chunk.js";import{M as F}from"./mLe4zPMQ.chunk.js";const ue={individualEngagement(e,a,t,l){const n={objectId:e,...a};return t&&(n.sharerId=t),l&&(n.includePublicViews=!0),{url:d.urlBuilder("{gateway}/v1/analytics/heat-map",n),key:r(`engagement:${e}`,a,t),formatData:c=>{var o;return{...c,data:(o=c.data)==null?void 0:o.map(m=>({...m,heatMap:m.heatMap??[]}))}},normalize:!1}},aggregateEngagement(e,a,t,l){const n={objectId:e,...a};return t&&(n.sharerId=t),l&&(n.includePublicViews=!0),{url:d.urlBuilder("{gateway}/v1/analytics/heat-map/aggregations",n),key:r(`aggregate:engagement:${e}`,a,t),formatData:c=>({...c,heatMap:c.heatMap??[]}),normalize:!1}},views(e,a,t,l){const n={...e,timeOffset:L.getTimezoneOffset()};return a&&(n.objectId=a),t&&(n.sharerId=t),l&&(n.includePublicViews=!0),{url:d.urlBuilder("{gateway}/v1/analytics/video-views",n),key:r(`video:views:${a}`,e,t),normalize:!1}}},q="_appLink_18mu0_1",W="_name_18mu0_4",G="_selectedMask_18mu0_7",K="_widgetItem_18mu0_15",Q="_hasThemeColor_18mu0_19",X="_text_18mu0_26",J="_imagePanel_18mu0_29",Y="_selected_18mu0_7",Z="_image_18mu0_29",p="_large_18mu0_59",ee="_comingSoonPanel_18mu0_69",ae="_newVideos_18mu0_75",te="_partialIcon_18mu0_106",s={appLink:q,name:W,selectedMask:G,widgetItem:K,hasThemeColor:Q,text:X,imagePanel:J,selected:Y,image:Z,large:p,comingSoonPanel:ee,newVideos:ae,partialIcon:te},S="shared.subjectWidgetItem",ne=({name:e,multiline:a,noUnderLine:t})=>{let l=`${s.comingSoonPanel}
|
|
2
|
+
d-flex flex-column align-items-center justify-content-center px-3 text-center`,n="";return a?n+=` ${s.clamped} clamp-2`:(l+=" text-nowrap",n+=" text-truncate"),i.jsxs("div",{className:l,children:[i.jsx("small",{className:"text-secondary",children:i.jsx(w,{namespace:S,phrase:"comingSoon"})}),i.jsx("p",{className:`${t?"":s.name} h6`,children:i.jsx("span",{className:n,children:e})})]})},ie=({name:e,multiline:a,subtitle:t,noUnderLine:l,newVideosCount:n})=>{let c="px-3 d-flex flex-column justify-content-center",o=`${l?"":s.name} h6`;return a?o+=` ${n?"clamp-2":"clamp-3"} text-start`:(c+=" text-nowrap text-truncate",o+=" text-truncate mb-0"),i.jsxs("div",{className:c,children:[t&&i.jsx("div",{className:`text-secondary clamp-1 ${s.text}`,children:t}),i.jsx("div",{className:o,title:e,children:e}),!!n&&i.jsx("div",{className:`fw-semibold d-inline-block rounded-pill px-2 mt-1 bg-light-green w-fit h-fit text-green ${s.newVideos}`,children:i.jsx(w,{namespace:S,phrase:"newVideos",options:{smartCount:n}})})]})};g.defaultProps={showFallbackBackgroundColour:!0};function g(e){var o;const a=I.createUrl(e.coverUrl,{size:e.isLarge?N.Medium:N.Small});let t;F.isClassification(e.data)&&(t=e.data);const l={name:e.data.name,multiline:e.isLarge||e.multiline,subtitle:e.subtitle,noUnderLine:e.highlightOnHover,newVideosCount:e.showNewVideosCount?(o=t==null?void 0:t.externalMetadata)==null?void 0:o.childDashboardNewVideoCount:0},n={backgroundImage:a?`url('${a}')`:null,backgroundColor:e.coverBgColor},c=R(e.data.name,A);return i.jsxs("div",{className:`${e.themeColor?s.hasThemeColor:"border"} d-flex position-relative ${e.className} ${s.widgetItem} ${e.isSelected?"border-success border-2":""} ${e.highlightOnHover&&!e.themeColor?"bg-light-blue-hover":""}`,style:e.themeColor?{"--themeColor":e.themeColor}:{},id:`${e.data.id}-${$.getRandomInt()}`,onClick:e.onClick,children:[e.isSelected&&i.jsx("div",{className:`${s.selectedMask} border-2`}),i.jsxs("div",{className:`${s.imagePanel} ${e.isLarge?s.large:""}`,children:[e.isSelected&&!e.hideCheckmark&&i.jsx("div",{className:s.selected,children:i.jsx(T,{svg:M,svgSize:P.Large,textVariant:"white",variant:"green"})}),a&&i.jsx("div",{className:D(s.image,e.imageClassName,!e.coverBgColor&&e.showFallbackBackgroundColour&&c),style:n}),!e.hideFallback&&i.jsx(U,{type:z.Subject,extraClasses:e.isLarge?s.large:""})]}),e.isComingSoon?i.jsx(ne,{...l}):i.jsx(ie,{...l})]})}function le(e){var t;const a=e.getChildAppLink?e.getChildAppLink(e.data):null;return i.jsx(i.Fragment,{children:a?i.jsx(b,{className:s.appLink,appLink:a,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,appLinkOptions:(t=e.getChildAppLinkOptions)==null?void 0:t.call(e),children:i.jsx(g,{...e})}):i.jsx(g,{...e})})}const se={MULTI_PRESENTATION_THRESHOLD:2};var j=(e=>(e.Draft="Draft",e.ComingSoon="ComingSoon",e.Published="Published",e))(j||{});function ce(e,a){var l;if((a==null?void 0:a.length)>=se.MULTI_PRESENTATION_THRESHOLD)return(l=a==null?void 0:a.find(n=>n.id===e))==null?void 0:l.name}function oe(e){var c,o,m,u,h,x,C,_,f,y,k,v;const a=((c=e.data)==null?void 0:c.status)===j.ComingSoon,t=ce(e.data.presentationId,e==null?void 0:e.availablePresentations),l={...e.analyticsData,id:((o=e.analyticsData)==null?void 0:o.id)||((m=e.data)==null?void 0:m.id),name:(u=e.data)==null?void 0:u.name,presentationId:((h=e.analyticsData)==null?void 0:h.presentationId)||e.data.presentationId,comingSoon:!!a},n={location:H.ClassificationListItem,entity:E.Classification,...e.analyticsOptions,actionType:B.Click,descriptor:V.Cover};return i.jsx(le,{...e,analyticsData:l,analyticsOptions:n,coverUrl:(x=e.data.cover)==null?void 0:x.url,coverBgColor:(_=(C=e.data)==null?void 0:C.metadata)==null?void 0:_.backgroundColor,subtitle:((f=e.getSubtitle)==null?void 0:f.call(e,e.data))||t,isComingSoon:a,themeColor:(y=e.shouldHighlight)!=null&&y.call(e,e.data)?((v=(k=e.data)==null?void 0:k.metadata)==null?void 0:v.backgroundColor)??"":""})}const he=O.memo(oe);export{he as M,ue as V,s};
|
|
3
|
+
//# sourceMappingURL=j7UObMj5.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"j7UObMj5.chunk.js","sources":["../../../../libs/shared/src/flight-requests/VideoViewRequests.ts","../../../../libs/shared/src/components/widgets/items/subject-widget-item/CoverPill.tsx","../../../../libs/shared/src/constants/TopicsConstants.ts","../../../../libs/shared/src/enums/ClassificationStatus.ts","../../../../libs/shared/src/components/widgets/items/subject-widget-item/SubjectWidgetItem.tsx"],"sourcesContent":["import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AnalyticsRequestFilter, Engagement } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\nexport const VideoViewRequests = {\n individualEngagement(\n objectId: string,\n filter: AnalyticsRequestFilter,\n sharerId?: string,\n includePublicViews?: boolean\n ): Flight.Request {\n const queryParams: HashObject = {\n objectId,\n ...filter\n };\n\n if (sharerId)\n queryParams.sharerId = sharerId;\n\n if (includePublicViews)\n queryParams.includePublicViews = true;\n\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/analytics/heat-map', queryParams),\n key: getAnalyticsRequestKey(`engagement:${objectId}`, filter, sharerId),\n formatData: (data: any) => {\n return {\n ...data,\n data: data.data?.map((d: any) => ({\n ...d,\n heatMap: d.heatMap ?? []\n }))\n };\n },\n normalize: false\n };\n },\n \n aggregateEngagement(\n objectId: string,\n filter: AnalyticsRequestFilter,\n sharerId?: string,\n includePublicViews?: boolean\n ): Flight.Request {\n const queryParams: HashObject = {\n objectId,\n ...filter\n };\n\n if (sharerId)\n queryParams.sharerId = sharerId;\n \n if (includePublicViews)\n queryParams.includePublicViews = true;\n\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/analytics/heat-map/aggregations', queryParams),\n key: getAnalyticsRequestKey(`aggregate:engagement:${objectId}`, filter, sharerId),\n formatData: (data: Engagement) => {\n return {\n ...data,\n heatMap: data.heatMap ?? []\n };\n },\n normalize: false\n };\n },\n \n views(\n filter: AnalyticsRequestFilter,\n objectId?: string,\n sharerId?: string,\n includePublicViews?: boolean\n ): Flight.Request {\n const queryParams: HashObject = {\n ...filter,\n timeOffset: DateHelper.getTimezoneOffset()\n };\n\n if (objectId)\n queryParams.objectId = objectId;\n\n if (sharerId)\n queryParams.sharerId = sharerId;\n \n if (includePublicViews)\n queryParams.includePublicViews = true;\n\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/analytics/video-views', queryParams),\n key: getAnalyticsRequestKey(`video:views:${objectId}`, filter, sharerId),\n normalize: false\n };\n }\n};","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\nimport { RandomHelper } from 'libs/common/react/utils/RandomHelper';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { CheckSvg } from 'libs/shared/images/svg/status/CheckSvg';\nimport { BaseObject, Classification, Presentation } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\nimport styles from './cover-pill.module.scss';\n\nconst namespace = 'shared.subjectWidgetItem';\n\ninterface NamePanelProps {\n name: string;\n multiline?: boolean;\n subtitle?: string;\n noUnderLine?: boolean;\n newVideosCount?: number;\n}\n\nconst ComingSoonNamePanel = ({ name, multiline, noUnderLine }: NamePanelProps) => {\n let wrapperClassName = `${styles.comingSoonPanel} \n d-flex flex-column align-items-center justify-content-center px-3 text-center`;\n\n let textClassName = '';\n\n if (!multiline) {\n wrapperClassName += ' text-nowrap';\n textClassName += ' text-truncate';\n } else {\n textClassName += ` ${styles.clamped} clamp-2`;\n }\n\n return (\n <div className={wrapperClassName}>\n <small className='text-secondary'><Text namespace={namespace} phrase='comingSoon' /></small>\n <p className={`${noUnderLine ? '' : styles.name} h6`}><span className={textClassName}>{name}</span></p>\n </div>\n );\n};\n\nconst NormalNamePanel = ({ name, multiline, subtitle, noUnderLine, newVideosCount }: NamePanelProps) => {\n let wrapperClassName = 'px-3 d-flex flex-column justify-content-center';\n let textClassName = `${noUnderLine ? '' : styles.name} h6`;\n\n if (!multiline) {\n wrapperClassName += ' text-nowrap text-truncate';\n textClassName += ' text-truncate mb-0';\n } else {\n textClassName += ` ${newVideosCount ? 'clamp-2' : 'clamp-3'} text-start`;\n }\n\n return (\n <div className={wrapperClassName}>\n {subtitle && <div className={`text-secondary clamp-1 ${styles.text}`}>{subtitle}</div>}\n <div className={textClassName} title={name}>{name}</div>\n {!!newVideosCount && (\n <div className={`fw-semibold d-inline-block rounded-pill px-2 mt-1 bg-light-green w-fit h-fit text-green ${styles.newVideos}`}>\n <Text namespace={namespace} phrase='newVideos' options={{ smartCount: newVideosCount }} />\n </div>\n )}\n </div>\n );\n};\n\nexport interface CoverPillWidgetItemProps<T extends BaseObject> {\n data: T;\n getChildAppLink?: (data: T) => Core.AppLink;\n getChildAppLinkOptions?: () => Core.AppLinkOptions;\n isLarge?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n availablePresentations?: Presentation[];\n getSubtitle?: (data: T) => string;\n multiline?: boolean;\n // set to true it will highlight on hover and also remove the hover text underline\n highlightOnHover?: boolean;\n showNewVideosCount?: boolean;\n shouldHighlight?: (data: T) => boolean;\n showFallbackBackgroundColour?: boolean;\n onClick?: () => void;\n}\n\nCoverPillWidgetContent.defaultProps = {\n showFallbackBackgroundColour: true\n};\n\ninterface CoverPillWidgetContentProps<T> extends CoverPillWidgetItemProps<T> {\n coverUrl?: string;\n coverBgColor?: string;\n subtitle?: string;\n isComingSoon?: boolean;\n className?: string;\n imageClassName?: string;\n isSelected?: boolean;\n hideFallback?: boolean;\n hideCheckmark?: boolean;\n themeColor?: string;\n}\n\nexport function CoverPillWidgetContent(props: CoverPillWidgetContentProps<BaseObject>): JSX.Element {\n const coverUrl = ImageHelper.createUrl(props.coverUrl, { size: props.isLarge ? ImageSize.Medium : ImageSize.Small });\n\n let classification: Classification | undefined = undefined;\n if (MasterTypeHelper.isClassification(props.data)) {\n classification = props.data;\n }\n\n const childProps = {\n name: props.data.name,\n multiline: props.isLarge || props.multiline,\n subtitle: props.subtitle,\n noUnderLine: props.highlightOnHover,\n newVideosCount: props.showNewVideosCount ? classification?.externalMetadata?.childDashboardNewVideoCount : 0\n };\n\n const coverStyle: React.CSSProperties = {\n backgroundImage: coverUrl ? `url('${coverUrl}')` : null,\n backgroundColor: props.coverBgColor\n };\n\n const fallbackCoverBgClassName = getBgColorClass(props.data.name, BG_COLOUR_CLASS_NAMES);\n\n return (\n <div\n className={`${props.themeColor ? styles.hasThemeColor : 'border'} d-flex position-relative ${props.className} ${styles.widgetItem} ${props.isSelected ? 'border-success border-2' : ''} ${props.highlightOnHover && !props.themeColor ? 'bg-light-blue-hover' : ''}`}\n style={props.themeColor ? { '--themeColor': props.themeColor } as unknown as React.CSSProperties : {}}\n id={`${props.data.id}-${RandomHelper.getRandomInt()}`}\n onClick={props.onClick}\n >\n {props.isSelected && (\n <div className={`${styles.selectedMask} border-2`} />\n )}\n\n <div className={`${styles.imagePanel} ${props.isLarge ? styles.large : ''}`}>\n {props.isSelected && !props.hideCheckmark && (\n <div className={styles.selected}>\n <IconCircle svg={CheckSvg} svgSize={SvgContainerSize.Large} textVariant='white' variant='green' />\n </div>\n )}\n\n {coverUrl &&\n <div\n className={classNames(\n styles.image,\n props.imageClassName,\n !props.coverBgColor && props.showFallbackBackgroundColour && fallbackCoverBgClassName\n )}\n style={coverStyle}\n />\n }\n {!props.hideFallback && (\n <ImageFallback\n type={ImageFallbackType.Subject}\n extraClasses={props.isLarge ? styles.large : ''}\n />\n )}\n </div>\n\n {props.isComingSoon\n ? <ComingSoonNamePanel {...childProps} />\n : <NormalNamePanel {...childProps} />\n }\n </div>\n );\n}\n\nexport function CoverPillWidgetContentWrapper(props: CoverPillWidgetContentProps<BaseObject>) {\n const appLink = props.getChildAppLink ? props.getChildAppLink(props.data) : null;\n\n return (\n <>\n {appLink ? (\n <AppLink\n className={styles.appLink}\n appLink={appLink}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n appLinkOptions={props.getChildAppLinkOptions?.()}\n >\n <CoverPillWidgetContent {...props} />\n </AppLink>\n ) : (<CoverPillWidgetContent {...props} />)\n }\n </>\n );\n}","export const TopicsConstants = {\n MULTI_PRESENTATION_THRESHOLD: 2\n};","// Maps to enum in SubjectApi but uses the\n// key rather than the value as SubjectsApi returns the key.\nexport enum ClassificationStatus {\n Draft = 'Draft',\n ComingSoon = 'ComingSoon',\n Published = 'Published'\n}","import * as React from 'react';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CoverPillWidgetContentWrapper, CoverPillWidgetItemProps } from 'libs/shared/components/widgets/items/subject-widget-item/CoverPill';\nimport { TopicsConstants } from 'libs/shared/constants/TopicsConstants';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { Classification, Presentation } from 'libs/shared/interfaces';\n\nfunction usePresentationName(presentationId: string, availablePresentations: Presentation[]): string {\n const showPresentationName = availablePresentations?.length >= TopicsConstants.MULTI_PRESENTATION_THRESHOLD;\n\n if (!showPresentationName) {\n return undefined;\n }\n\n return availablePresentations?.find(p => p.id === presentationId)?.name;\n}\n\nfunction SubjectWidgetItem(props: CoverPillWidgetItemProps<Classification>): JSX.Element {\n const isComingSoon = props.data?.status === ClassificationStatus.ComingSoon;\n const presentationName = usePresentationName(props.data.presentationId, props?.availablePresentations);\n\n const analyticsData = {\n ...props.analyticsData,\n id: props.analyticsData?.id || props.data?.id,\n name: props.data?.name,\n presentationId: props.analyticsData?.presentationId || props.data.presentationId,\n comingSoon: !!isComingSoon\n };\n\n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n entity: EntityType.Classification,\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.Cover\n };\n\n return (\n <CoverPillWidgetContentWrapper\n {...props}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n coverUrl={props.data.cover?.url}\n coverBgColor={props.data?.metadata?.backgroundColor}\n subtitle={props.getSubtitle?.(props.data) || presentationName}\n isComingSoon={isComingSoon}\n themeColor={props.shouldHighlight?.(props.data) ? props.data?.metadata?.backgroundColor ?? '' : ''}\n />\n );\n}\n\nconst Memoized = React.memo(SubjectWidgetItem);\n\nexport { Memoized as SubjectWidgetItem };"],"names":["VideoViewRequests","objectId","filter","sharerId","includePublicViews","queryParams","UrlHelper","getAnalyticsRequestKey","data","_a","d","DateHelper","namespace","ComingSoonNamePanel","name","multiline","noUnderLine","wrapperClassName","styles","textClassName","jsxs","jsx","Text","NormalNamePanel","subtitle","newVideosCount","CoverPillWidgetContent","props","coverUrl","ImageHelper","ImageSize","classification","MasterTypeHelper","childProps","coverStyle","fallbackCoverBgClassName","getBgColorClass","BG_COLOUR_CLASS_NAMES","RandomHelper","IconCircle","CheckSvg","SvgContainerSize","classNames","ImageFallback","ImageFallbackType","CoverPillWidgetContentWrapper","appLink","AppLink","TopicsConstants","ClassificationStatus","usePresentationName","presentationId","availablePresentations","p","SubjectWidgetItem","isComingSoon","presentationName","analyticsData","_b","_c","_d","_e","analyticsOptions","LocationContext","EntityType","UserAction","ClickDescriptor","_f","_h","_g","_i","_j","_l","_k","Memoized","React.memo"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as a,O as h,bF as M,L as b,e as j,u as C,T as w,i as S,S as D,bD as r,ag as L,v as B}from"./app-CQEXKRTo.js";import{g as T,V as k,L as V}from"./pW31gVxo.chunk.js";import{V as g}from"./B-M_POW7.chunk.js";import{g as v,m as E}from"./DGmD-zcu.chunk.js";const A="_image_1a110_1",F={image:A},I="shared.streamsBarChartCardEmptyState",f=b.encloseNamespace(I);function R(){return a.jsxs(h,{className:"flex-grow-1 justify-content-center",children:[a.jsx(h.Image,{src:M.EmptyStates.Shared.BagQuestionOrange,className:F.image}),a.jsx(h.Heading,{className:"h6",children:f("heading")}),a.jsx(h.Info,{className:"w-100",children:f("description")})]})}const G="shared.streamsBarChartCard";function z(e){const s=j(),o=C(e.videoId?g.videoAggregation(e.videoId,e.type,s):g.aggregation(e.type,s)),t=T(o.data,v(e.type)),c=t==null?void 0:t.reduce((i,d)=>i+d.y,0);return a.jsx("div",{className:"d-flex flex-column h-100 bg-white overflow-hidden rounded pt-3 px-3",children:t?a.jsxs(a.Fragment,{children:[a.jsxs("div",{className:"d-flex justify-content-between",children:[a.jsx("h2",{className:"h6 mb-1",children:a.jsx(w,{namespace:G,phrase:"totalViews",options:{views:c}})}),e.appLink&&e.appLinkText&&a.jsx(S,{appLink:e.appLink,className:"text-info",children:e.appLinkText})]}),t.length?a.jsx(D,{className:"position-relative",children:a.jsx("div",{className:"position-absolute w-100 pe-2",children:a.jsx(k,{data:t})})}):a.jsx(R,{})]}):a.jsx("div",{className:"partial-loading-background d-block w-50",children:" "})})}const x={MONTH:35,YEAR:365},u={day:"YYYY-MM-DD",month:"YYYY-MM",year:"YYYY"},y={day:"D MMM",month:"MMM",year:"YYYY"};function H(e){const s=r.diffBetween(e.end,e.start,"day");return s>x.YEAR?"year":s>x.MONTH?"month":"day"}function O(e,s){const o=[];let t=r.format(e.start,u[s]);for(;!r.isAfter(t,e.end,s);)o.push(t),t=r.format(r.add(t,1,s),u[s]);return o}function U(e,s,o){if(!e)return null;const t=H(s),c=O(s,t),i=new Map;e.forEach(n=>{const l=r.format(r.convertUTCToLocal(n.dateStreamed),u[t]),p=[L.System,"255"].includes(n.name)?null:n.name;let m=i.get(p);m||i.set(p,m=new Map);const N=m.get(l)??0;m.set(l,N+n.count)});const d=[...i.keys()];if(!d.length)return{categories:c.map(n=>r.format(n,y[t])),data:[]};const Y=v(o);return{categories:c.map(n=>r.format(n,y[t])),data:B.sortBy(d.map(n=>({name:Y(n),type:"line",data:c.map(l=>i.get(n).get(l)??0),color:E(n)})),"name")}}const _="reportsShared.streamsChartCard";function J(e){const s=j(),o=C(e.videoId?g.videoAggregationChart(e.videoId,e.type,s):g.aggregationChart(e.type,s)),t=U(o.data,s,e.type);return a.jsx("div",{className:"d-flex flex-column h-100 bg-white rounded p-3 position-relative",children:t?a.jsxs(a.Fragment,{children:[a.jsx("h2",{className:"position-absolute h6 mb-1",children:a.jsx(w,{namespace:_,phrase:"videoViews"})}),a.jsx(V,{categories:t.categories,data:t.data})]}):a.jsx("div",{className:"partial-loading-background w-25",children:" "})})}export{z as S,J as a};
|
|
2
|
+
//# sourceMappingURL=jNUTSO6y.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jNUTSO6y.chunk.js","sources":["../../src/shared/views/overview-cards/streams-bar-chart-card/empty-state/StreamsBarChartCardEmptyState.tsx","../../src/shared/views/overview-cards/streams-bar-chart-card/StreamsBarChartCardView.tsx","../../src/shared/views/overview-cards/streams-chart-card/StreamsChartCardViewUtils.ts","../../src/shared/views/overview-cards/streams-chart-card/StreamsChartCardView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nimport { ImageUrls } from 'shared/constants/ReportsImageUrls';\n\nconst namespace = 'shared.streamsBarChartCardEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nimport styles from './total-views-by-group-card-empty-state.module.scss';\n\nexport function StreamsBarChartCardEmptyState() {\n return (\n <EmptyState className='flex-grow-1 justify-content-center'>\n <EmptyState.Image\n src={ImageUrls.EmptyStates.Shared.BagQuestionOrange}\n className={styles.image}\n />\n <EmptyState.Heading className='h6'>\n {getPhrase('heading')}\n </EmptyState.Heading>\n <EmptyState.Info className='w-100'>\n {getPhrase('description')}\n </EmptyState.Info>\n </EmptyState>\n );\n}","import React from 'react';\nimport Scrollbars from 'react-custom-scrollbars-2';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\n\nimport { GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { StreamAggregationType } from 'libs/shared/apps/analytics/interfaces/StreamAggregationType';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { VerticalBarChart } from 'shared/components/vertical-bar-chart/VerticalBarChart';\nimport { VideoViewsV2Requests } from 'shared/flight-requests/VideoViewsV2Requests';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { getCountByGroup } from 'shared/utils/BarChartByGroupUtils';\nimport { getLabelMapper } from 'shared/utils/UserUtils';\nimport { StreamsBarChartCardEmptyState } from 'shared/views/overview-cards/streams-bar-chart-card/empty-state/StreamsBarChartCardEmptyState';\n\nconst namespace = 'shared.streamsBarChartCard';\n\ninterface TotalViewsByGroupViewProps {\n type: StreamAggregationType;\n videoId?: string;\n appLink?: Core.AppLink;\n appLinkText?: string;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function StreamsBarChartCardView(props: TotalViewsByGroupViewProps) {\n const requestFilter = useGetRequestFilter();\n\n const chartData = Flight.useBasicFetch<GroupedAnalyticsCount[]>(props.videoId ?\n VideoViewsV2Requests.videoAggregation(props.videoId, props.type, requestFilter) :\n VideoViewsV2Requests.aggregation(props.type, requestFilter));\n\n const grouped = getCountByGroup(\n chartData.data,\n getLabelMapper(props.type)\n );\n const total = grouped?.reduce((acc, group) => (acc + group.y), 0);\n\n return (\n <div className='d-flex flex-column h-100 bg-white overflow-hidden rounded pt-3 px-3'>\n {grouped ?\n <>\n <div className='d-flex justify-content-between'>\n <h2 className='h6 mb-1'><Text namespace={namespace} phrase='totalViews' options={{ views: total }} /></h2>\n {props.appLink && props.appLinkText &&\n <AppLink\n appLink={props.appLink}\n className='text-info'\n >\n {props.appLinkText}\n </AppLink>\n }\n </div>\n\n {grouped.length ?\n <Scrollbars className='position-relative'>\n <div className='position-absolute w-100 pe-2'>\n <VerticalBarChart data={grouped} />\n </div>\n </Scrollbars>\n : <StreamsBarChartCardEmptyState />\n }\n </>\n : <div className='partial-loading-background d-block w-50'> </div>\n }\n </div >\n );\n}","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { GroupedAnalyticsChartCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { StreamAggregationType } from 'libs/shared/apps/analytics/interfaces/StreamAggregationType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { AnalyticsRequestFilter } from 'libs/shared/interfaces';\n\nimport { getLabelMapper, mapUserTypeToChartColour } from 'shared/utils/UserUtils';\n\nconst GroupByThresholds = {\n MONTH: 35,\n YEAR: 365\n};\n\nconst DateFormats = {\n day: 'YYYY-MM-DD',\n month: 'YYYY-MM',\n year: 'YYYY'\n};\n\nconst DisplayFormats = {\n day: 'D MMM',\n month: 'MMM',\n year: 'YYYY'\n};\n\ntype GroupBy = 'day' | 'month' | 'year';\n\ninterface ChartData {\n categories: string[];\n data: Highcharts.SeriesLineOptions[];\n}\n\nfunction getGroupBy(requestFilter: AnalyticsRequestFilter): GroupBy {\n const range = DateHelper.diffBetween(requestFilter.end, requestFilter.start, 'day');\n\n if (range > GroupByThresholds.YEAR)\n return 'year';\n\n if (range > GroupByThresholds.MONTH)\n return 'month';\n\n return 'day';\n}\n\nfunction getFullDateRange(requestFilter: AnalyticsRequestFilter, groupBy: GroupBy): string[] {\n const range: string[] = [];\n\n let currentDate = DateHelper.format(requestFilter.start, DateFormats[groupBy]);\n\n while (!DateHelper.isAfter(currentDate, requestFilter.end, groupBy)) {\n range.push(currentDate);\n currentDate = DateHelper.format(DateHelper.add(currentDate, 1, groupBy), DateFormats[groupBy]);\n }\n\n return range;\n}\n\nexport function getChartData(\n events: GroupedAnalyticsChartCount[],\n requestFilter: AnalyticsRequestFilter,\n type: StreamAggregationType\n): ChartData {\n if (!events) return null;\n\n const groupBy = getGroupBy(requestFilter);\n const fullDateRange = getFullDateRange(requestFilter, groupBy);\n \n const grouped = new Map<string, Map<string, number>>();\n \n events.forEach(ev => {\n const eventDate = DateHelper.format(DateHelper.convertUTCToLocal(ev.dateStreamed), DateFormats[groupBy]);\n \n // Bucketing System user data as Anonymous\n const name = [ UserGroup.System, '255' ].includes(ev.name) ? null : ev.name;\n\n let group = grouped.get(name);\n\n if (!group)\n grouped.set(name, group = new Map<string, number>);\n\n const oldCount = group.get(eventDate) ?? 0;\n group.set(eventDate, oldCount + ev.count);\n });\n\n const roles = [...grouped.keys()] as UserGroup[];\n\n if (!roles.length) return {\n categories: fullDateRange.map(d => DateHelper.format(d, DisplayFormats[groupBy])),\n data: []\n };\n\n const labelMapper = getLabelMapper(type);\n\n return {\n categories: fullDateRange.map(d => DateHelper.format(d, DisplayFormats[groupBy])),\n data:\n ArrayHelper.sortBy(roles.map(r => ({\n name: labelMapper(r),\n type: 'line',\n data: fullDateRange.map(d => grouped.get(r).get(d) ?? 0),\n color: mapUserTypeToChartColour(r)\n })), 'name')\n };\n}","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { GroupedAnalyticsChartCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { StreamAggregationType } from 'libs/shared/apps/analytics/interfaces/StreamAggregationType';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { LineChart } from 'shared/components/line-chart/LineChart';\nimport { VideoViewsV2Requests } from 'shared/flight-requests/VideoViewsV2Requests';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\n\nimport { getChartData } from './StreamsChartCardViewUtils';\n\nconst namespace = 'reportsShared.streamsChartCard';\n\ninterface StreamsChartCardViewProps {\n type: StreamAggregationType;\n videoId?: string;\n className?: string;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function StreamsChartCardView(props: StreamsChartCardViewProps) {\n const requestFilter = useGetRequestFilter();\n\n const viewsByGroup = Flight.useBasicFetch<GroupedAnalyticsChartCount[]>(props.videoId ?\n VideoViewsV2Requests.videoAggregationChart(props.videoId, props.type, requestFilter) :\n VideoViewsV2Requests.aggregationChart(props.type, requestFilter));\n\n const chartData = getChartData(viewsByGroup.data, requestFilter, props.type);\n\n return (\n <div className='d-flex flex-column h-100 bg-white rounded p-3 position-relative'>\n {chartData ?\n <>\n <h2 className='position-absolute h6 mb-1'><Text namespace={namespace} phrase='videoViews' /></h2>\n <LineChart categories={chartData.categories} data={chartData.data} />\n </>\n : <div className='partial-loading-background w-25'> </div>\n }\n </div>\n );\n}"],"names":["namespace","getPhrase","LanguageService","StreamsBarChartCardEmptyState","jsxs","EmptyState","jsx","ImageUrls","styles","StreamsBarChartCardView","props","requestFilter","useGetRequestFilter","chartData","Flight.useBasicFetch","VideoViewsV2Requests","grouped","getCountByGroup","getLabelMapper","total","acc","group","Fragment","Text","AppLink","Scrollbars","VerticalBarChart","GroupByThresholds","DateFormats","DisplayFormats","getGroupBy","range","DateHelper","getFullDateRange","groupBy","currentDate","getChartData","events","type","fullDateRange","ev","eventDate","name","UserGroup","oldCount","roles","d","labelMapper","ArrayHelper","r","mapUserTypeToChartColour","StreamsChartCardView","viewsByGroup","LineChart"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{aW as s}from"./app-CQEXKRTo.js";const p={isType(e,r){var t;return e!=null&&e.typeId?e.typeId===r:((t=e==null?void 0:e.type)==null?void 0:t.toLowerCase())===s[r].toLowerCase()},isResource(e){return p.isType(e,s.Resource)},isClassification(e){return e.type==="Subject"}};export{p as M};
|
|
2
|
+
//# sourceMappingURL=mLe4zPMQ.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mLe4zPMQ.chunk.js","sources":["../../../../libs/shared/src/utils/MasterTypeHelper.ts"],"sourcesContent":["import { MasterType } from 'libs/shared/enums/MasterType';\nimport { BaseObject, Classification, Resource } from 'libs/shared/interfaces';\n\nexport const MasterTypeHelper = {\n isType<T extends BaseObject>(obj: any, typeId: MasterType): obj is T {\n if (obj?.typeId)\n return obj.typeId === typeId;\n\n // Fallback to comparing actual string types\n return obj?.type?.toLowerCase() === MasterType[typeId].toLowerCase();\n },\n\n isResource(obj: any): obj is Resource {\n return MasterTypeHelper.isType<Resource>(obj, MasterType.Resource);\n },\n\n isClassification(obj: any): obj is Classification {\n return obj.type === 'Subject';\n }\n};"],"names":["MasterTypeHelper","obj","typeId","_a","MasterType"],"mappings":"uCAGO,MAAMA,EAAmB,CAC9B,OAA6BC,EAAUC,EAA8B,OACnE,OAAID,GAAA,MAAAA,EAAK,OACAA,EAAI,SAAWC,IAGjBC,EAAAF,GAAA,YAAAA,EAAK,OAAL,YAAAE,EAAW,iBAAkBC,EAAWF,CAAM,EAAE,YAAA,CACzD,EAEA,WAAWD,EAA2B,CACpC,OAAOD,EAAiB,OAAiBC,EAAKG,EAAW,QAAQ,CACnE,EAEA,iBAAiBH,EAAiC,CAChD,OAAOA,EAAI,OAAS,SACtB,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as a,d as u,c as i,V as o}from"./app-CQEXKRTo.js";import{g as f}from"./CX5q-0jT.chunk.js";function E(e){const[s,t]=a.useState(!1),n=f(u());return a.useEffect(()=>{t(r=>!r)},[e.isFetching]),a.useEffect(()=>{t(r=>!r)},[n]),s}function d(e){var t;const[,s]=i(o.AUDIENCE_FILTER_SELECTED_COUNT);a.useEffect(()=>{if(!e.data){s(null);return}s(e.data.studentCount)},[(t=e.data)==null?void 0:t.studentCount])}export{E as a,d as u};
|
|
2
|
+
//# sourceMappingURL=oXJu4dT2.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oXJu4dT2.chunk.js","sources":["../../src/apps/interactives/hooks/UseRefreshInteractiveResults.ts","../../src/apps/interactives/hooks/UseSetInteractiveResultsAudienceFilterCount.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { getFilterParamsKey } from 'libs/shared/apps/analytics/utils/FilterParamUtils';\nimport { InteractiveResultSet } from 'libs/shared/interfaces';\n\nimport { useGetAppLinkFilterParams } from 'shared/hooks/UseGetFilterQueryParams';\n\nexport function useRefreshInteractiveResults(results: Flight.Response<InteractiveResultSet>): boolean {\n const [ refresh, setRefresh ] = useState(false);\n\n const filterKey = getFilterParamsKey(useGetAppLinkFilterParams());\n\n useEffect(() => {\n setRefresh(r => !r);\n }, [results.isFetching]);\n\n useEffect(() => {\n setRefresh(r => !r);\n }, [filterKey]);\n \n return refresh;\n}","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { InteractiveResultSet } from 'libs/shared/interfaces';\n\nimport { ViewModelKeys } from 'shared/constants/ReportsViewModels';\n\n/**\n * So that we can display the number of selected users in the audience filter\n * (including users in classrooms and groups), we read it from the InteractiveResultSet and\n * set it in a view model so that it can be read in AudienceFilterToggle.\n */\nexport function useSetInteractiveResultsAudienceFilterCount(results: Flight.Response<InteractiveResultSet>): void {\n const [ , setFilterCount ] = useViewModel<number>(ViewModelKeys.AUDIENCE_FILTER_SELECTED_COUNT);\n\n useEffect(() => {\n if (!results.data) {\n setFilterCount(null);\n return;\n }\n \n setFilterCount(results.data.studentCount);\n }, [results.data?.studentCount]);\n}"],"names":["useRefreshInteractiveResults","results","refresh","setRefresh","useState","filterKey","getFilterParamsKey","useGetAppLinkFilterParams","useEffect","useSetInteractiveResultsAudienceFilterCount","setFilterCount","useViewModel","ViewModelKeys","_a"],"mappings":"mGASO,SAASA,EAA6BC,EAAyD,CACpG,KAAM,CAAEC,EAASC,CAAW,EAAIC,EAAAA,SAAS,EAAK,EAExCC,EAAYC,EAAmBC,GAA2B,EAEhEC,OAAAA,EAAAA,UAAU,IAAM,CACdL,EAAW,GAAK,CAAC,CAAC,CACpB,EAAG,CAACF,EAAQ,UAAU,CAAC,EAEvBO,EAAAA,UAAU,IAAM,CACdL,EAAW,GAAK,CAAC,CAAC,CACpB,EAAG,CAACE,CAAS,CAAC,EAEPH,CACT,CCTO,SAASO,EAA4CR,EAAsD,OAChH,KAAM,CAAA,CAAIS,CAAe,EAAIC,EAAqBC,EAAc,8BAA8B,EAE9FJ,EAAAA,UAAU,IAAM,CACd,GAAI,CAACP,EAAQ,KAAM,CACjBS,EAAe,IAAI,EACnB,MACF,CAEAA,EAAeT,EAAQ,KAAK,YAAY,CAC1C,EAAG,EAACY,EAAAZ,EAAQ,OAAR,YAAAY,EAAc,YAAY,CAAC,CACjC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as i,v as u,L as b}from"./app-CQEXKRTo.js";import{c as l,H as m,b as p,m as y}from"./DGmD-zcu.chunk.js";const o={chart:{spacing:[0,36,0,0]},title:{text:null},tooltip:{enabled:!1},credits:{enabled:!1},yAxis:{gridLineWidth:0,labels:{enabled:!1},title:{text:null}},xAxis:{lineWidth:0,labels:{style:l,align:"left",reserveSpace:!0}},legend:{enabled:!1},plotOptions:{bar:{borderRadius:4,dataLabels:{enabled:!0,style:l,inside:!1,crop:!1,overflow:"allow"},pointWidth:12,pointPadding:0,minPointLength:8}}},A=(e,t)=>({...o,chart:{...o.chart,height:8+t.length*40},xAxis:{...o.xAxis,categories:e},series:[{type:"bar",label:{enabled:!1},states:{hover:{enabled:!1}},data:t}]});function I(e){const t=A(e.data.map(n=>n.name),e.data);return i.jsx(i.Fragment,{children:i.jsx(m,{highcharts:p,options:t})})}function H(e,t,n){if(!e)return null;const s=e.map(a=>({name:t?t(a.name):a.name,y:a.count,color:n?n(a.name):y(a.name)})),c=s.findIndex(a=>a.name==="Staff");if(c>-1){const[a]=s.splice(c,1);s.push(a)}return s.sort((a,x)=>{var d,h;const g=parseInt((d=a.name.match(/\d+/))==null?void 0:d[0]),f=parseInt((h=x.name.match(/\d+/))==null?void 0:h[0]);return g-f})}const S="reportsShared.lineChart",T=b.encloseNamespace(S),r={title:{text:null},credits:{enabled:!1},yAxis:{title:{text:null},labels:{style:l},gridLineDashStyle:"LongDash",endOnTick:!0,tickAmount:5,min:0},xAxis:{labels:{style:l},min:0},chart:{backgroundColor:"transparent",spacing:[40,0,0,4]},legend:{enabled:!0,align:"right",verticalAlign:"top",floating:!0,y:-40,itemStyle:l},tooltip:{style:{...l,fontSize:"12px"},borderRadius:6}},C=(e,t)=>{var s;const n=(s=u.first(t))==null?void 0:s.data.length;return{...r,yAxis:{...r.yAxis,max:n?null:100},xAxis:{...r.xAxis,categories:e,max:e.length-1},legend:{...r.legend,...n?{}:{symbolPadding:0,symbolWidth:0,symbolHeight:0,squareSymbol:!1}},series:n?t:[{type:"line",name:T("noViews"),data:[]}]}};function R(e){const t=C(e.categories,e.data);return i.jsx(i.Fragment,{children:i.jsx(m,{highcharts:p,options:t,containerProps:{className:"h-100"}})})}export{R as L,I as V,H as g};
|
|
2
|
+
//# sourceMappingURL=pW31gVxo.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pW31gVxo.chunk.js","sources":["../../src/shared/components/vertical-bar-chart/VerticalBarChart.tsx","../../src/shared/utils/BarChartByGroupUtils.ts","../../src/shared/components/line-chart/LineChart.tsx"],"sourcesContent":["import React from 'react';\nimport Highcharts from 'highcharts';\nimport HighchartsReact from 'highcharts-react-official';\n\nimport { CHART_FONT_STYLES } from 'shared/constants/ChartStyles';\n\nconst STATIC_BAR_CHART_OPTIONS: Highcharts.Options = {\n chart: {\n spacing: [ 0, 36, 0, 0 ]\n },\n title: {\n text: null\n },\n tooltip: {\n enabled: false\n },\n credits: {\n enabled: false\n },\n yAxis: {\n gridLineWidth: 0,\n labels: {\n enabled: false\n },\n title: {\n text: null\n }\n },\n xAxis: {\n lineWidth: 0,\n labels: {\n style: CHART_FONT_STYLES,\n align: 'left',\n reserveSpace: true\n }\n },\n legend: {\n enabled: false\n },\n plotOptions: {\n bar: {\n borderRadius: 4,\n dataLabels: {\n enabled: true,\n style: CHART_FONT_STYLES,\n inside: false,\n crop: false,\n overflow: 'allow'\n },\n pointWidth: 12,\n pointPadding: 0,\n minPointLength: 8\n }\n }\n};\n\nconst getChartOptions = (\n categories: string[],\n data: Highcharts.PointOptionsObject[]\n): Highcharts.Options => ({\n ...STATIC_BAR_CHART_OPTIONS,\n chart: {\n ...STATIC_BAR_CHART_OPTIONS.chart,\n height: 8 + (data.length * 40)\n },\n xAxis: {\n ...STATIC_BAR_CHART_OPTIONS.xAxis,\n categories\n },\n series: [{\n type: 'bar',\n label: {\n enabled: false\n },\n states: {\n hover: {\n enabled: false\n }\n },\n data\n }]\n});\n\ninterface VerticalBarChartProps {\n data: Highcharts.PointOptionsObject[]\n}\n\nexport function VerticalBarChart(props: VerticalBarChartProps) {\n const chartOptions = getChartOptions(props.data.map(data => data.name as string), props.data);\n\n return (\n <>\n <HighchartsReact\n highcharts={Highcharts}\n options={chartOptions}\n />\n </>\n );\n}","import { GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\n\nimport { mapUserTypeToChartColour } from 'shared/utils/UserUtils';\n\nexport function getCountByGroup(\n countGroup: GroupedAnalyticsCount[],\n getGroupName?: (group: string) => string,\n getChartColour?: (group: string) => string\n): Highcharts.PointOptionsObject[] {\n if (!countGroup) return null;\n\n const mappedGroups: Highcharts.PointOptionsObject[] = countGroup.map(group => {\n return {\n name: getGroupName ? getGroupName(group.name) : group.name,\n y: group.count,\n color: getChartColour ? getChartColour(group.name) : mapUserTypeToChartColour(group.name)\n };\n });\n\n const staffIndex = mappedGroups.findIndex(group => group.name === 'Staff');\n\n // Move Staff to last index\n if (staffIndex > -1) {\n const [staffObject] = mappedGroups.splice(staffIndex, 1);\n\n mappedGroups.push(staffObject);\n }\n return mappedGroups.sort((a, b) => {\n const numA = parseInt((a.name as string).match(/\\d+/)?.[0]);\n const numB = parseInt((b.name as string).match(/\\d+/)?.[0]);\n return numA - numB;\n });\n}","import React from 'react';\nimport Highcharts from 'highcharts';\nimport HighchartsReact from 'highcharts-react-official';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { CHART_FONT_STYLES } from 'shared/constants/ChartStyles';\n\nconst namespace = 'reportsShared.lineChart';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst STATIC_LINE_CHART_OPTIONS: Highcharts.Options = {\n title: {\n text: null\n },\n credits: {\n enabled: false\n },\n yAxis: {\n title: {\n text: null\n },\n labels: {\n style: CHART_FONT_STYLES\n },\n gridLineDashStyle: 'LongDash',\n endOnTick: true,\n tickAmount: 5,\n min: 0\n },\n xAxis: {\n labels: {\n style: CHART_FONT_STYLES\n },\n min: 0\n },\n chart: {\n backgroundColor: 'transparent',\n spacing: [ 40, 0, 0, 4 ]\n },\n legend: {\n enabled: true,\n align: 'right',\n verticalAlign: 'top',\n floating: true,\n y: -40,\n itemStyle: CHART_FONT_STYLES\n },\n tooltip: {\n style: {\n ...CHART_FONT_STYLES,\n fontSize: '12px'\n },\n borderRadius: 6\n }\n};\n\nconst getChartOptions = (\n categories: string[],\n data: Highcharts.SeriesLineOptions[]\n): Highcharts.Options => {\n const hasData = ArrayHelper.first(data)?.data.length;\n\n return {\n ...STATIC_LINE_CHART_OPTIONS,\n yAxis: {\n ...STATIC_LINE_CHART_OPTIONS.yAxis,\n max: !hasData ? 100 : null\n },\n xAxis: {\n ...STATIC_LINE_CHART_OPTIONS.xAxis,\n categories,\n max: categories.length - 1\n },\n legend: {\n ...STATIC_LINE_CHART_OPTIONS.legend,\n ...(!hasData ? {\n symbolPadding: 0,\n symbolWidth: 0,\n symbolHeight: 0,\n squareSymbol: false\n } : {})\n },\n series: hasData ? data : [{\n type: 'line',\n name: getPhrase('noViews'),\n data: []\n }]\n };\n};\n\ninterface LineChartProps {\n categories: string[];\n data: Highcharts.SeriesLineOptions[]\n}\n\nexport function LineChart(props: LineChartProps) {\n const chartOptions = getChartOptions(props.categories, props.data);\n\n return (\n <>\n <HighchartsReact\n highcharts={Highcharts}\n options={chartOptions}\n containerProps={{ className: 'h-100' }}\n />\n </>\n );\n}"],"names":["STATIC_BAR_CHART_OPTIONS","CHART_FONT_STYLES","getChartOptions","categories","data","VerticalBarChart","props","chartOptions","jsx","Fragment","HighchartsReact","Highcharts","getCountByGroup","countGroup","getGroupName","getChartColour","mappedGroups","group","mapUserTypeToChartColour","staffIndex","staffObject","b","numA","_a","numB","_b","namespace","getPhrase","LanguageService","STATIC_LINE_CHART_OPTIONS","hasData","ArrayHelper","LineChart"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{d as C,j as n,A as o,g as r,L as b,bG as N,e as T,u as E,bZ as v,p as k,b_ as A,bR as j,O as c,bF as y}from"./app-CQEXKRTo.js";import{S as x}from"./B-0CRp8U.chunk.js";import{u as F}from"./CZHffw7D.chunk.js";import{S as R}from"./DdCE2h3h.chunk.js";const P="reportsInteractives.interactiveNav",i=b.encloseNamespace(P);function D(e,t,s){const a=[e];return[{label:i("overview"),appLink:{application:r.INTERACTIVES,action:o.Interactives.OVERVIEW,args:a,params:t}},...s?[]:[{label:i("results"),appLink:{application:r.INTERACTIVES,action:o.Interactives.RESULTS,args:a,params:t}},{label:i("questions"),appLink:{application:r.INTERACTIVES,action:o.Interactives.QUESTION_LIST,args:a,params:t}}],{label:i("engagement"),appLink:{application:r.INTERACTIVES,action:o.Interactives.ENGAGEMENT,args:a,params:t}}]}function U(e){const t=C(),s=D(e.interactiveMetadataId,t,e.hasInsights);return n.jsx(x,{items:s})}const H="reportsInteractives.hooks",p=b.encloseNamespace(H);function G(e){return`no:interactive:results:warning:${e}`}function V(){return n.jsxs(c,{className:"py-3",children:[n.jsx(c.Image,{src:y.EmptyStates.Interactives.NoData,className:"w-50 h-auto"}),n.jsx(c.Heading,{children:p("noResultsHeading")}),n.jsx(c.Info,{className:"w-100",children:p("noResultsDescription")})]})}function $(e){var I,g;const t=G(e),s=N.cacheGet(t),a=T(),l=F(e,a),d=(g=(I=l.data)==null?void 0:I.students)==null?void 0:g.length,u=!!l.data&&!d,h=E(u&&R.getShareLinkByObjectId(e)),m=E(u&&R.getSentDirectShareByObjectId(e)),f=!!h.hasCompleted&&h.statusCode===v.NotFound,L=!!m.hasCompleted&&m.statusCode===v.NotFound,S=f&&L;k.useEffect(()=>{!S||s||(N.cacheSet(t,!0),A.render(n.jsx(V,{}),{title:p("shareInteractive"),buttonContainerClassName:"border-top-0 justify-content-center mt-n4 pb-3",submitButtonProps:{text:p("shareInteractive"),onClick:()=>{j.trigger({application:r.DEFAULT,action:o.Default.SHARE,args:[e],params:{entityType:"interactive"}})},variant:"dark",className:"me-2"}}))},[S,s])}export{U as I,$ as u};
|
|
2
|
+
//# sourceMappingURL=pmJce9de.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pmJce9de.chunk.js","sources":["../../src/apps/interactives/components/interactive-nav/InteractiveNav.tsx","../../src/apps/interactives/hooks/UseNoResultsPopup.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { FilterQueryParams } from 'libs/shared/apps/analytics/interfaces/FilterQueryParams';\n\nimport { SubNav, SubNavItem } from 'shared/components/sub-nav/SubNav';\nimport { Actions } from 'shared/constants/ReportsActions';\nimport { AppChannels } from 'shared/constants/ReportsRadioChannels';\nimport { useGetAppLinkFilterParams } from 'shared/hooks/UseGetFilterQueryParams';\n\nconst namespace = 'reportsInteractives.interactiveNav';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getNavItems(interactiveMetadataId: string, params: FilterQueryParams, hasInsights: boolean): SubNavItem[] {\n const args = [interactiveMetadataId];\n\n return [\n {\n label: getPhrase('overview'),\n appLink: { application: AppChannels.INTERACTIVES, action: Actions.Interactives.OVERVIEW, args, params }\n },\n ...(!hasInsights ? [\n {\n label: getPhrase('results'),\n appLink: { application: AppChannels.INTERACTIVES, action: Actions.Interactives.RESULTS, args, params }\n },\n {\n label: getPhrase('questions'),\n appLink: { application: AppChannels.INTERACTIVES, action: Actions.Interactives.QUESTION_LIST, args, params }\n }\n ] : []),\n {\n label: getPhrase('engagement'),\n appLink: { application: AppChannels.INTERACTIVES, action: Actions.Interactives.ENGAGEMENT, args, params }\n }\n ];\n}\n\ninterface InteractiveNavProps {\n interactiveMetadataId: string;\n hasInsights?: boolean;\n}\n\nexport function InteractiveNav(props: InteractiveNavProps): JSX.Element {\n const filterQueryParams = useGetAppLinkFilterParams();\n\n const navItems = getNavItems(props.interactiveMetadataId, filterQueryParams, props.hasInsights);\n\n return (\n <SubNav items={navItems} />\n );\n}","import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { useFetchInteractiveResults } from 'libs/shared/apps/analytics/hooks/UseFetchInteractiveResults';\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { DirectShare, ShareLink } from 'libs/shared/interfaces';\nimport { DialogHelper } from 'libs/shared/utils/DialogHelper';\n\nimport { Actions } from 'shared/constants/ReportsActions';\nimport { ImageUrls } from 'shared/constants/ReportsImageUrls';\nimport { AppChannels } from 'shared/constants/ReportsRadioChannels';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\n\n\nconst namespace = 'reportsInteractives.hooks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getLocalStorageKey(interactiveMetadataId: string): string {\n return `no:interactive:results:warning:${interactiveMetadataId}`;\n}\n\nfunction PopupContent(): JSX.Element {\n return (\n <EmptyState className='py-3'>\n <EmptyState.Image src={ImageUrls.EmptyStates.Interactives.NoData} className='w-50 h-auto' />\n <EmptyState.Heading>\n {getPhrase('noResultsHeading')}\n </EmptyState.Heading>\n <EmptyState.Info className='w-100'>\n {getPhrase('noResultsDescription')}\n </EmptyState.Info>\n </EmptyState>\n );\n}\n\nexport function useNoResultsPopup(interactiveMetadataId: string): void {\n const localStorageKey = getLocalStorageKey(interactiveMetadataId);\n const hasSeenPopup = LocalStorageHelper.cacheGet(localStorageKey);\n\n const requestFilter = useGetRequestFilter();\n const results = useFetchInteractiveResults(interactiveMetadataId, requestFilter);\n\n const hasResults = results.data?.students?.length;\n\n const shouldCheckShare = !!results.data && !hasResults;\n\n const shareLink = Flight.useBasicFetch<ShareLink>(shouldCheckShare &&\n ShareRequests.getShareLinkByObjectId(interactiveMetadataId));\n\n const directShare = Flight.useBasicFetch<DirectShare>(shouldCheckShare &&\n ShareRequests.getSentDirectShareByObjectId(interactiveMetadataId));\n\n const noShareLink = !!shareLink.hasCompleted && shareLink.statusCode === HttpStatus.NotFound;\n\n const noDirectShare = !!directShare.hasCompleted && directShare.statusCode === HttpStatus.NotFound;\n\n const showWarning = noShareLink && noDirectShare;\n\n React.useEffect(() => {\n if (!showWarning || hasSeenPopup)\n return;\n\n LocalStorageHelper.cacheSet(localStorageKey, true);\n\n DialogHelper.render(\n <PopupContent />,\n {\n title: getPhrase('shareInteractive'),\n buttonContainerClassName: 'border-top-0 justify-content-center mt-n4 pb-3',\n submitButtonProps: {\n text: getPhrase('shareInteractive'),\n onClick: () => {\n Core.AppLinkHelper.trigger({\n application: AppChannels.DEFAULT,\n action: Actions.Default.SHARE,\n args: [interactiveMetadataId],\n params: { entityType: 'interactive' }\n });\n },\n variant: 'dark',\n className: 'me-2'\n }\n }\n );\n }, [ showWarning, hasSeenPopup ]);\n}"],"names":["namespace","getPhrase","LanguageService","getNavItems","interactiveMetadataId","params","hasInsights","args","AppChannels","Actions","InteractiveNav","props","filterQueryParams","useGetAppLinkFilterParams","navItems","jsx","SubNav","getLocalStorageKey","PopupContent","jsxs","EmptyState","ImageUrls","useNoResultsPopup","localStorageKey","hasSeenPopup","LocalStorageHelper","requestFilter","useGetRequestFilter","results","useFetchInteractiveResults","hasResults","_b","_a","shouldCheckShare","shareLink","Flight.useBasicFetch","ShareRequests","directShare","noShareLink","HttpStatus","noDirectShare","showWarning","React","DialogHelper","Core.AppLinkHelper"],"mappings":"8PAWA,MAAMA,EAAY,qCACZC,EAAYC,EAAgB,iBAAiBF,CAAS,EAE5D,SAASG,EAAYC,EAA+BC,EAA2BC,EAAoC,CACjH,MAAMC,EAAO,CAACH,CAAqB,EAEnC,MAAO,CACL,CACE,MAAOH,EAAU,UAAU,EAC3B,QAAS,CAAE,YAAaO,EAAY,aAAc,OAAQC,EAAQ,aAAa,SAAU,KAAAF,EAAM,OAAAF,CAAA,CAAO,EAExG,GAAKC,EASD,CAAA,EATe,CACjB,CACE,MAAOL,EAAU,SAAS,EAC1B,QAAS,CAAE,YAAaO,EAAY,aAAc,OAAQC,EAAQ,aAAa,QAAS,KAAAF,EAAM,OAAAF,CAAA,CAAO,EAEvG,CACE,MAAOJ,EAAU,WAAW,EAC5B,QAAS,CAAE,YAAaO,EAAY,aAAc,OAAQC,EAAQ,aAAa,cAAe,KAAAF,EAAM,OAAAF,CAAA,CAAO,CAC7G,EAEF,CACE,MAAOJ,EAAU,YAAY,EAC7B,QAAS,CAAE,YAAaO,EAAY,aAAc,OAAQC,EAAQ,aAAa,WAAY,KAAAF,EAAM,OAAAF,CAAA,CAAO,CAC1G,CAEJ,CAOO,SAASK,EAAeC,EAAyC,CACtE,MAAMC,EAAoBC,EAAA,EAEpBC,EAAWX,EAAYQ,EAAM,sBAAuBC,EAAmBD,EAAM,WAAW,EAE9F,OACEI,EAAAA,IAACC,EAAA,CAAO,MAAOF,CAAA,CAAU,CAE7B,CChCA,MAAMd,EAAY,4BACZC,EAAYC,EAAgB,iBAAiBF,CAAS,EAE5D,SAASiB,EAAmBb,EAAuC,CACjE,MAAO,kCAAkCA,CAAqB,EAChE,CAEA,SAASc,GAA4B,CACnC,OACEC,EAAAA,KAACC,EAAA,CAAW,UAAU,OACpB,SAAA,CAAAL,EAAAA,IAACK,EAAW,MAAX,CAAiB,IAAKC,EAAU,YAAY,aAAa,OAAQ,UAAU,aAAA,CAAc,QACzFD,EAAW,QAAX,CACE,SAAAnB,EAAU,kBAAkB,EAC/B,EACAc,MAACK,EAAW,KAAX,CAAgB,UAAU,QACxB,SAAAnB,EAAU,sBAAsB,CAAA,CACnC,CAAA,EACF,CAEJ,CAEO,SAASqB,EAAkBlB,EAAqC,SACrE,MAAMmB,EAAkBN,EAAmBb,CAAqB,EAC1DoB,EAAeC,EAAmB,SAASF,CAAe,EAE1DG,EAAgBC,EAAA,EAChBC,EAAUC,EAA2BzB,EAAuBsB,CAAa,EAEzEI,GAAaC,GAAAC,EAAAJ,EAAQ,OAAR,YAAAI,EAAc,WAAd,YAAAD,EAAwB,OAErCE,EAAmB,CAAC,CAACL,EAAQ,MAAQ,CAACE,EAEtCI,EAAYC,EAAgCF,GAChDG,EAAc,uBAAuBhC,CAAqB,CAAC,EAEvDiC,EAAcF,EAAkCF,GACpDG,EAAc,6BAA6BhC,CAAqB,CAAC,EAE7DkC,EAAc,CAAC,CAACJ,EAAU,cAAgBA,EAAU,aAAeK,EAAW,SAE9EC,EAAgB,CAAC,CAACH,EAAY,cAAgBA,EAAY,aAAeE,EAAW,SAEpFE,EAAcH,GAAeE,EAEnCE,EAAM,UAAU,IAAM,CAChB,CAACD,GAAejB,IAGpBC,EAAmB,SAASF,EAAiB,EAAI,EAEjDoB,EAAa,aACVzB,EAAA,EAAa,EACd,CACE,MAAOjB,EAAU,kBAAkB,EACnC,yBAA0B,iDAC1B,kBAAmB,CACjB,KAAMA,EAAU,kBAAkB,EAClC,QAAS,IAAM,CACb2C,EAAmB,QAAQ,CACzB,YAAapC,EAAY,QACzB,OAAQC,EAAQ,QAAQ,MACxB,KAAM,CAACL,CAAqB,EAC5B,OAAQ,CAAE,WAAY,aAAA,CAAc,CACrC,CACH,EACA,QAAS,OACT,UAAW,MAAA,CACb,CACF,EAEJ,EAAG,CAAEqC,EAAajB,CAAa,CAAC,CAClC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as n,L as c,a7 as w,ab as x,X as p,h as v,bI as g,a6 as d,c5 as z}from"./app-CQEXKRTo.js";import{D as b}from"./BGYUqEPH.chunk.js";import{a as P,F as S}from"./Bfbk7XQF.chunk.js";var f=(e=>(e.Draft="Draft",e.Published="Published",e.Archived="Archived",e))(f||{}),u=(e=>(e.Exchange="exchange",e.Streamable="streamable",e.MoviesAndTv="movies_and_tv",e.Twig="twig",e))(u||{});function j(e){return n.jsx("svg",{...e,children:n.jsx("path",{fill:"currentColor",fillRule:"evenodd",d:"M15.333 7.333a.667.667 0 1 0 0 1.334h2.39L13 13.39l-2.862-2.862a.667.667 0 0 0-.943 0l-5 5a.667.667 0 1 0 .943.942l4.529-4.528 2.862 2.862c.26.26.682.26.942 0l5.196-5.196V12A.667.667 0 0 0 20 12V8a.667.667 0 0 0-.667-.666z",clipRule:"evenodd"})})}function H(e){return n.jsx("svg",{...e,children:n.jsx("path",{d:"M7.5 5A2.5 2.5 0 0 0 5 7.5v9A2.5 2.5 0 0 0 7.5 19h9a2.5 2.5 0 0 0 2.5-2.5v-9A2.5 2.5 0 0 0 16.5 5zm0-1h9A3.5 3.5 0 0 1 20 7.5v9a3.5 3.5 0 0 1-3.5 3.5h-9A3.5 3.5 0 0 1 4 16.5v-9A3.5 3.5 0 0 1 7.5 4M11 9a.5.5 0 1 1 0 1H9.5A1.5 1.5 0 0 0 8 11.5v1A1.5 1.5 0 0 0 9.5 14H11a.5.5 0 1 1 0 1H9.5A2.5 2.5 0 0 1 7 12.5v-1A2.5 2.5 0 0 1 9.5 9zm5 0a.5.5 0 1 1 0 1h-1.5a1.5 1.5 0 0 0-1.5 1.5v1a1.5 1.5 0 0 0 1.5 1.5H16a.5.5 0 1 1 0 1h-1.5a2.5 2.5 0 0 1-2.5-2.5v-1A2.5 2.5 0 0 1 14.5 9z",fill:"currentColor"})})}var l=(e=>(e.Folder="category",e.CategoryTree="category_tree",e.CustomLibrary="custom_library",e.HostedLibrary="hosted_library",e.Exchange="exchange",e.Workspace="workspace",e.Video="video",e.Clip="clip",e.Interactive="interactive",e))(l||{}),i=(e=>(e.Pdf="pdf",e.Image="image",e.PowerPoint="powerpoint",e.Document="document",e.Excel="excel",e.Zip="archive",e.File="text",e))(i||{});function A(e){return n.jsx("svg",{...e,children:n.jsx("path",{d:"M6 4h12a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1m0 1v14h12V5zm5.09 7-2.3-3.4h1.82l1.4 2.28 1.45-2.28h1.72l-2.29 3.41 2.49 3.73h-1.87l-1.56-2.47-1.59 2.47H8.6z",fill:"currentColor"})})}function D(e){return n.jsx("svg",{...e,children:n.jsx("path",{d:"M9.833 15.006c-.328.765-.657 1.316-.997 1.619-.35.312-.762.394-1.138.15a1.4 1.4 0 0 1-.358-.322c-.298-.402-.194-.843.165-1.2.228-.227.563-.433.983-.63.226-.106.466-.204.706-.292q.213-.539.43-1.205a42 42 0 0 0 .866-3.123c-.435-.563-.75-1.057-.924-1.473-.28-.67-.211-1.242.372-1.494.56-.24 1.047-.086 1.307.391.17.312.234.736.231 1.26a8 8 0 0 1-.086 1.088q.238.293.513.606a31 31 0 0 0 1.73 1.81 14 14 0 0 0 .863.761q.697-.106 1.213-.105c.947.002 1.554.319 1.415 1.079-.107.585-.514.888-1.06.834-.365-.036-.781-.224-1.259-.532a9 9 0 0 1-.538-.38 21 21 0 0 0-.944.191q-.586.131-1.22.3a45 45 0 0 0-2.27.667M6 4h12a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1m0 1v14h12V5zm4.43 8.39q-.104.315-.207.606l.055-.016a46 46 0 0 1 1.608-.459 34 34 0 0 1 1.538-.37 16 16 0 0 1-.378-.35 32 32 0 0 1-1.882-1.98l-.083.32a39 39 0 0 1-.652 2.248zm-2.157 2.603q.18-.162.382-.51a2.4 2.4 0 0 0-.553.37c-.092.092-.09.086-.083.096a.5.5 0 0 0 .138.116c.017.01.025.01.116-.072m7.434-2.3q-.07 0-.146.002c.242.132.443.209.585.223.11.011.118.005.146-.145.005-.027-.095-.079-.585-.08m-5.36-5.49q.098.235.283.53v-.05c.003-.393-.044-.696-.128-.85-.046-.086-.063-.091-.23-.02-.04.018-.05.092.075.39",fill:"currentColor"})})}function E(e){return n.jsx("svg",{...e,children:n.jsx("path",{d:"M6 4h12a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1m0 1v14h12V5zm5.07 6.96h1.22q.27 0 .52-.04a1.2 1.2 0 0 0 .44-.155.84.84 0 0 0 .305-.325q.115-.21.115-.55t-.115-.55a.84.84 0 0 0-.305-.325 1.2 1.2 0 0 0-.44-.155 3 3 0 0 0-.52-.04h-1.22zM9.5 8.6h3.22q.67 0 1.14.195t.765.515.43.73a2.7 2.7 0 0 1 0 1.695q-.135.415-.43.735a2.1 2.1 0 0 1-.765.515q-.47.195-1.14.195h-1.65v2.56H9.5z",fill:"currentColor"})})}function N(e){return n.jsx("svg",{...e,children:n.jsx("path",{d:"M6 4h7l6 5v10a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1m6.586 1H6v14h12V9.414zM13 10h3.5a.5.5 0 1 1 0 1h-4a.5.5 0 0 1-.5-.5v-4a.5.5 0 1 1 1 0z",fill:"currentColor"})})}function q(e){return n.jsx("svg",{...e,children:n.jsx("path",{d:"M6 4h12a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1m0 1v14h12V5zm8.77 10.74h-1.56L12 10.88h-.02l-1.19 4.86H9.2L7.31 8.6h1.57l1.13 4.86h.02l1.24-4.86h1.47l1.22 4.92h.02l1.17-4.92h1.54z",fill:"currentColor"})})}function L(e){return n.jsx("svg",{...e,children:n.jsx("path",{d:"M6 4h12a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1m0 1v14h12V5zm5 0h1v1h-1zm1 1h1v1h-1zm-1 1h1v1h-1zm1 1h1v1h-1zm-1 1h1v1h-1zm1 1h1v1h-1zm-1 1h1v1h-1zm1 1h1v1h-1zm-1 1h1v1h-1zm1 1h1v1h-1zm-1 1h1v1h-1zm1 1h1v1h-1zm-1 1h1v1h-1zm1 1h1v1h-1z",fill:"currentColor"})})}const o="shared.shared-utils",V={mapRatingToClass(e){return e?(t=>{switch(!0){case t<32:return"bg-purple";case t<48:return"bg-green";case t<80:return"bg-blue";case t<96:return"bg-red";case t<128:return"bg-pink";case t>=128:return"bg-yellow";default:return""}})(e):""},mapSourceToDisplayName(e,r){switch(e.type){case l.HostedLibrary:case l.CustomLibrary:return e.name;case l.Exchange:return c.getPhrase(o,"exchange");case l.Workspace:return c.getPhrase(o,r?"myVideos":"workspace");default:return""}},mapSourceToClass(e){switch(e){case l.HostedLibrary:case l.CustomLibrary:return"bg-blue";case l.Exchange:return"bg-green";case l.Workspace:default:return"bg-red"}},isInteractive(e){var r,t;return!!((t=(r=e==null?void 0:e.interactives)==null?void 0:r.data)!=null&&t.length)},mapTypeToSvg(e){let t={[i.Pdf]:D,[i.Image]:P,[i.PowerPoint]:E,[i.Document]:q,[i.Excel]:A,[i.Zip]:L,[i.File]:N}[e];return t||(t=S),t},mapTypeToClass(e){switch(e){case i.Pdf:return"icon-red";case i.Image:return"icon-purple";case i.Document:return"icon-blue";case i.Excel:return"icon-green";case i.PowerPoint:return"icon-orange";case i.Zip:return"icon-teal";case i.File:return"icon-gray";default:return""}},mapTypeToExtension(e){return e?{pdf:"pdf",image:"png",powerpoint:"pptx"}[e.toLowerCase()]:""},mapTypeToName(e){if(!e)return"";switch(e){case i.Pdf:return c.getPhrase(o,"pdf");case i.Image:return c.getPhrase(o,"image");case i.Document:return c.getPhrase(o,"document");case i.Excel:return c.getPhrase(o,"spreadsheet");case i.PowerPoint:return c.getPhrase(o,"presentation");case i.Zip:return c.getPhrase(o,"zipArchive");case i.File:return c.getPhrase(o,"file");default:return""}}},k="shared.badges",F=c.encloseNamespace(k);var I=(e=>(e.DurationExact="duration-exact",e.DurationApproximate="duration-approximate",e.Interactive="interactive",e.Rating="rating",e.ProductionYear="production-year",e.Captions="captions",e.Status="status",e.Trending="trending",e.Count="count",e.Restriction="restriction",e.Source="source",e))(I||{});const M={xs:d.ExtraSmall,sm:d.Small,std:d.Standard,lg:d.Large},$={xs:"badge-xs",sm:"badge-sm",std:"badge-std",lg:"badge-lg"};function R(e){switch(e){case g.Published:case f.Published:return"bg-success";case g.Archived:case g.Rejected:case f.Archived:return"bg-danger";case g.Draft:case f.Draft:return"draft-badge px-2 rounded-pill text-nowrap d-flex align-items-center";case g.Pending:case g.Processing:return"bg-warning"}}function T(e){return e.includes(u.Streamable)?`px-1 text-nowrap d-flex align-items-center ${z.streamable}`:e.includes(u.MoviesAndTv)?"bg-indigo text-white px-1 text-nowrap d-flex align-items-center":e.includes(u.Exchange)?"bg-orange text-white px-1 text-nowrap d-flex align-items-center":e.includes(u.Twig)?"bg-pink text-white px-1 text-nowrap d-flex align-items-center":""}function Z(e,r,t){const a="badge",h=$[t];let s="";if(e==="duration-approximate"&&(s="duration-badge-new px-2 rounded-pill text-nowrap d-flex align-items-center"),e==="duration-exact"&&(s="duration-badge"),e==="interactive"&&(s="interactive-badge"),e==="rating"&&(s=`rating-badge text-shadow ${V.mapRatingToClass(r.value)}`),e==="production-year"&&(s="production-year-badge text-shadow"),e==="captions")return"p-0";if(e==="status")return`badge ${R(r)}`;if(e==="trending")return`trending-badge px-1 d-flex align-items-center ${h}`;if(e==="count"&&(s="count-badge px-1 rounded"),e==="restriction"){const m=x.mapRestrictionToClass(r.restrictions);return p("restriction-badge rounded-pill px-2 d-flex align-items-center",m)}return e==="source"&&(s=T(r)),p(a,s)}function _(e,r,t){if(e==="interactive")return F("interactive");if(e==="duration-approximate")return b.ToDisplayDurationNewStyle(r);if(e==="duration-exact")return b.ToDisplayDuration(r);if(e==="rating")return r.code;if(e==="production-year")return r;if(e==="captions")return n.jsx(v,{svg:H});if(e==="status")return typeof r=="number"?g[r]:r;if(e==="trending")return n.jsxs(n.Fragment,{children:[n.jsx(v,{svg:j,size:M[t]}),n.jsx("span",{className:"ps-1",children:r})]});if(e==="count")return r;if(e==="restriction")return n.jsxs(n.Fragment,{children:[n.jsx(v,{svg:x.mapRestrictionToSvg(r.restrictions)}),n.jsx("span",{children:x.mapRestrictionToText(r.restrictions,r.yearGroups)})]});if(e==="source"){const a=r;return a.includes(u.Streamable)?"streamable":a.includes(u.MoviesAndTv)?"movies + tv":a.includes(u.Exchange)?"exchange":a.includes(u.Twig)?"twig":"-"}}function W(e,r){return e==="rating"?{title:r.name,placement:"top"}:null}function G(e,r){var t,a;return typeof r=="boolean"?!!r:e==="rating"?r&&!!r.value:e==="interactive"?!!(r!=null&&r.length)||!!((t=r==null?void 0:r.data)!=null&&t.length):e==="captions"?!!(r!=null&&r.length)||!!((a=r==null?void 0:r.data)!=null&&a.length):e==="status"?typeof r=="number"||typeof r=="string":!!r}function K(e){const{type:r,data:t,size:a="std"}=e;if(!G(r,t))return n.jsx(n.Fragment,{});let h=Z(r,t,a);h=`${h} ${e.inline?"d-inline-block":"d-flex justify-content-center"} ${e.className||""}`;const s=_(r,t,a),m=W(r,t),C=e.inline&&"d-inline-block";return m?n.jsx("div",{className:"badge-wrapper d-inline",children:n.jsx(w,{...m,spanHack:!0,spanHackClassName:C,children:n.jsx("span",{className:h,children:s})})}):n.jsx("span",{className:`${h} badge-wrapper`,children:s})}export{K as B,H as C,I as a};
|
|
2
|
+
//# sourceMappingURL=rO0zPagv.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rO0zPagv.chunk.js","sources":["../../../../libs/shared/src/interfaces/models/Dashboard.ts","../../../../libs/shared/src/enums/VideoSource.ts","../../../../libs/shared/src/images/svg/objects/TrendingSvg.tsx","../../../../libs/shared/src/images/svg/status/CloseCaptionBadgeSvg.tsx","../../../../libs/shared/src/enums/MasterObjectTypes.ts","../../../../libs/shared/src/enums/ResourceFileType.ts","../../../../libs/shared/src/images/svg/objects/FileExcelSvg.tsx","../../../../libs/shared/src/images/svg/objects/FilePdfSvg.tsx","../../../../libs/shared/src/images/svg/objects/FilePptSvg.tsx","../../../../libs/shared/src/images/svg/objects/FileSvg.tsx","../../../../libs/shared/src/images/svg/objects/FileWordSvg.tsx","../../../../libs/shared/src/images/svg/objects/FileZipSvg.tsx","../../../../libs/shared/src/utils/VideoDetailsHelper.ts","../../../../libs/shared/src/components/badges/Badge.tsx"],"sourcesContent":["import { HashObject } from 'libs/common/react/interfaces';\n\nimport { ContentRegion } from 'libs/shared/enums/ContentRegion';\nimport { CustomerType } from 'libs/shared/enums/CustomerType';\nimport { LibraryType } from 'libs/shared/enums/LibraryType';\nimport { BaseObject, BasePaginatedCollection, CuratedWidget, CuratedWidgetContent, CuratedWidgetData } from 'libs/shared/interfaces';\n\nexport enum DashboardLearningLevel {\n Any = 'Any',\n Level_1 = 'Level_1',\n Level_2 = 'Level_2',\n Level_3 = 'Level_3',\n Level_4 = 'Level_4',\n}\n\nexport enum DashboardUserType {\n Any = 'Any',\n Staff = 'Staff',\n Learner = 'Learner',\n}\n\nexport enum DashboardStatus {\n Draft = 'Draft',\n Published = 'Published',\n Archived = 'Archived',\n}\n\nexport interface Dashboard extends BaseObject {\n libraryType: LibraryType;\n customerType: CustomerType;\n userRole: number;\n}\n\nexport interface CuratedDashboard<\n TWidgetData extends CuratedWidgetData = CuratedWidgetData,\n TWidgetContent extends CuratedWidgetContent = CuratedWidgetContent\n> extends BaseObject {\n contentRegion: ContentRegion;\n description: string;\n learningLevel: DashboardLearningLevel;\n userType: DashboardUserType;\n status: DashboardStatus;\n target: string;\n widgets: CuratedWidget<TWidgetData, TWidgetContent>[];\n metadata: HashObject;\n datePublished: string;\n}\n\nexport interface CuratedDashboardCollection<\n TWidgetData extends CuratedWidgetData = CuratedWidgetData,\n TWidgetContent extends CuratedWidgetContent = CuratedWidgetContent\n> extends BasePaginatedCollection<CuratedDashboard<TWidgetData, TWidgetContent>>{}\n\n/**\n * Dashboard identification below\n */\nexport enum DashboardTargetType {\n Discover = 'discover',\n Classification = 'classification',\n ClassificationDirectory = 'classification-directory',\n ClassificationCurriculum = 'classification-curriculum',\n MoviesAndTv = 'movies-and-tv',\n Company = 'company',\n Search = 'search'\n}\n\ninterface DiscoverDashboardInfo {\n targetType: DashboardTargetType.Discover;\n presentationId: string;\n}\n\nexport interface ClassificationDashboardInfo {\n targetType: DashboardTargetType.Classification;\n classificationId: string;\n}\n\nexport interface ClassificationDirectoryInfo {\n targetType: DashboardTargetType.ClassificationDirectory;\n classificationId: string;\n}\n\nexport interface ClassificationCurriculumInfo {\n targetType: DashboardTargetType.ClassificationCurriculum;\n classificationId: string;\n}\n\ninterface MoviesAndTvDashboardInfo {\n targetType: DashboardTargetType.MoviesAndTv;\n presentationId: string;\n}\n\nexport interface CompanyDashboardInfo {\n targetType: DashboardTargetType.Company;\n companyId: string;\n presentationId: string;\n}\n\nexport type DashboardTargetInfo = DiscoverDashboardInfo |\n ClassificationDashboardInfo |\n ClassificationDirectoryInfo |\n ClassificationCurriculumInfo |\n MoviesAndTvDashboardInfo |\n CompanyDashboardInfo;\n\nexport interface UnknownDashboardTargetInfo {\n targetType: DashboardTargetType;\n presentationId: string;\n classificationId: string;\n companyId: string;\n}","export enum VideoSource {\n Exchange = 'exchange',\n Streamable = 'streamable',\n MoviesAndTv = 'movies_and_tv',\n Twig = 'twig'\n}","import React from 'react';\n\nexport function TrendingSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n fillRule='evenodd'\n d='M15.333 7.333a.667.667 0 1 0 0 1.334h2.39L13 13.39l-2.862-2.862a.667.667 0 0 0-.943 0l-5 5a.667.667 0 1 0 .943.942l4.529-4.528 2.862 2.862c.26.26.682.26.942 0l5.196-5.196V12A.667.667 0 0 0 20 12V8a.667.667 0 0 0-.667-.666z'\n clipRule='evenodd'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function CloseCaptionBadgeSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='M7.5 5A2.5 2.5 0 0 0 5 7.5v9A2.5 2.5 0 0 0 7.5 19h9a2.5 2.5 0 0 0 2.5-2.5v-9A2.5 2.5 0 0 0 16.5 5zm0-1h9A3.5 3.5 0 0 1 20 7.5v9a3.5 3.5 0 0 1-3.5 3.5h-9A3.5 3.5 0 0 1 4 16.5v-9A3.5 3.5 0 0 1 7.5 4M11 9a.5.5 0 1 1 0 1H9.5A1.5 1.5 0 0 0 8 11.5v1A1.5 1.5 0 0 0 9.5 14H11a.5.5 0 1 1 0 1H9.5A2.5 2.5 0 0 1 7 12.5v-1A2.5 2.5 0 0 1 9.5 9zm5 0a.5.5 0 1 1 0 1h-1.5a1.5 1.5 0 0 0-1.5 1.5v1a1.5 1.5 0 0 0 1.5 1.5H16a.5.5 0 1 1 0 1h-1.5a2.5 2.5 0 0 1-2.5-2.5v-1A2.5 2.5 0 0 1 14.5 9z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","export enum MasterObjectTypes {\n Folder = 'category',\n CategoryTree = 'category_tree',\n CustomLibrary = 'custom_library',\n HostedLibrary = 'hosted_library',\n Exchange = 'exchange',\n Workspace = 'workspace',\n Video = 'video',\n Clip = 'clip',\n Interactive = 'interactive'\n}","// File types match metadata for a resource FileApi\nexport enum ResourceFileType {\n Pdf = 'pdf',\n Image = 'image',\n PowerPoint = 'powerpoint',\n Document = 'document',\n Excel = 'excel',\n Zip = 'archive',\n File = 'text'\n}\n","import React from 'react';\n\nexport function FileExcelSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='M6 4h12a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1m0 1v14h12V5zm5.09 7-2.3-3.4h1.82l1.4 2.28 1.45-2.28h1.72l-2.29 3.41 2.49 3.73h-1.87l-1.56-2.47-1.59 2.47H8.6z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function FilePdfSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='M9.833 15.006c-.328.765-.657 1.316-.997 1.619-.35.312-.762.394-1.138.15a1.4 1.4 0 0 1-.358-.322c-.298-.402-.194-.843.165-1.2.228-.227.563-.433.983-.63.226-.106.466-.204.706-.292q.213-.539.43-1.205a42 42 0 0 0 .866-3.123c-.435-.563-.75-1.057-.924-1.473-.28-.67-.211-1.242.372-1.494.56-.24 1.047-.086 1.307.391.17.312.234.736.231 1.26a8 8 0 0 1-.086 1.088q.238.293.513.606a31 31 0 0 0 1.73 1.81 14 14 0 0 0 .863.761q.697-.106 1.213-.105c.947.002 1.554.319 1.415 1.079-.107.585-.514.888-1.06.834-.365-.036-.781-.224-1.259-.532a9 9 0 0 1-.538-.38 21 21 0 0 0-.944.191q-.586.131-1.22.3a45 45 0 0 0-2.27.667M6 4h12a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1m0 1v14h12V5zm4.43 8.39q-.104.315-.207.606l.055-.016a46 46 0 0 1 1.608-.459 34 34 0 0 1 1.538-.37 16 16 0 0 1-.378-.35 32 32 0 0 1-1.882-1.98l-.083.32a39 39 0 0 1-.652 2.248zm-2.157 2.603q.18-.162.382-.51a2.4 2.4 0 0 0-.553.37c-.092.092-.09.086-.083.096a.5.5 0 0 0 .138.116c.017.01.025.01.116-.072m7.434-2.3q-.07 0-.146.002c.242.132.443.209.585.223.11.011.118.005.146-.145.005-.027-.095-.079-.585-.08m-5.36-5.49q.098.235.283.53v-.05c.003-.393-.044-.696-.128-.85-.046-.086-.063-.091-.23-.02-.04.018-.05.092.075.39'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function FilePptSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='M6 4h12a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1m0 1v14h12V5zm5.07 6.96h1.22q.27 0 .52-.04a1.2 1.2 0 0 0 .44-.155.84.84 0 0 0 .305-.325q.115-.21.115-.55t-.115-.55a.84.84 0 0 0-.305-.325 1.2 1.2 0 0 0-.44-.155 3 3 0 0 0-.52-.04h-1.22zM9.5 8.6h3.22q.67 0 1.14.195t.765.515.43.73a2.7 2.7 0 0 1 0 1.695q-.135.415-.43.735a2.1 2.1 0 0 1-.765.515q-.47.195-1.14.195h-1.65v2.56H9.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function FileSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='M6 4h7l6 5v10a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1m6.586 1H6v14h12V9.414zM13 10h3.5a.5.5 0 1 1 0 1h-4a.5.5 0 0 1-.5-.5v-4a.5.5 0 1 1 1 0z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function FileWordSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='M6 4h12a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1m0 1v14h12V5zm8.77 10.74h-1.56L12 10.88h-.02l-1.19 4.86H9.2L7.31 8.6h1.57l1.13 4.86h.02l1.24-4.86h1.47l1.22 4.92h.02l1.17-4.92h1.54z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function FileZipSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='M6 4h12a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1m0 1v14h12V5zm5 0h1v1h-1zm1 1h1v1h-1zm-1 1h1v1h-1zm1 1h1v1h-1zm-1 1h1v1h-1zm1 1h1v1h-1zm-1 1h1v1h-1zm1 1h1v1h-1zm-1 1h1v1h-1zm1 1h1v1h-1zm-1 1h1v1h-1zm1 1h1v1h-1zm-1 1h1v1h-1zm1 1h1v1h-1z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { MasterObjectTypes } from 'libs/shared/enums/MasterObjectTypes';\nimport { ResourceFileType } from 'libs/shared/enums/ResourceFileType';\nimport { Library, Video } from 'libs/shared/interfaces';\n\nimport { FileExcelSvg } from '../images/svg/objects/FileExcelSvg';\nimport { FileImgSvg } from '../images/svg/objects/FileImgSvg';\nimport { FilePdfSvg } from '../images/svg/objects/FilePdfSvg';\nimport { FilePptSvg } from '../images/svg/objects/FilePptSvg';\nimport { FileSvg } from '../images/svg/objects/FileSvg';\nimport { FileWordSvg } from '../images/svg/objects/FileWordSvg';\nimport { FileZipSvg } from '../images/svg/objects/FileZipSvg';\nimport { FolderSvg } from '../images/svg/objects/FolderSvg';\n\n\nconst lang = 'shared.shared-utils';\n\nexport const VideoDetailsHelper = {\n mapRatingToClass(ratingValue: number): string {\n if (!ratingValue) return '';\n\n const ratings = (rating: number): string => {\n switch (true) {\n case (rating < 32):\n return 'bg-purple';\n case (rating < 48):\n return 'bg-green';\n case (rating < 80):\n return 'bg-blue';\n case (rating < 96):\n return 'bg-red';\n case (rating < 128):\n return 'bg-pink';\n case (rating >= 128):\n return 'bg-yellow';\n default:\n return ''; // Handles unrated\n }\n };\n\n return ratings(ratingValue);\n },\n\n mapSourceToDisplayName(library: Library, hasLite?: boolean): string {\n switch (library.type) {\n case MasterObjectTypes.HostedLibrary:\n case MasterObjectTypes.CustomLibrary:\n return library.name;\n case MasterObjectTypes.Exchange:\n return LanguageService.getPhrase(lang, 'exchange');\n case MasterObjectTypes.Workspace:\n return LanguageService.getPhrase(lang, hasLite ? 'myVideos' : 'workspace');\n default:\n return '';\n }\n },\n\n mapSourceToClass(sourceType: MasterObjectTypes | 'online_supplementary_library'): string {\n switch (sourceType) {\n case MasterObjectTypes.HostedLibrary:\n case MasterObjectTypes.CustomLibrary:\n return 'bg-blue';\n case MasterObjectTypes.Exchange:\n return 'bg-green';\n case MasterObjectTypes.Workspace:\n default:\n return 'bg-red';\n }\n },\n\n isInteractive(video: Video): boolean {\n return !!video?.interactives?.data?.length;\n },\n\n mapTypeToSvg(type: string): any {\n const types: HashObject = {\n [ResourceFileType.Pdf]: FilePdfSvg,\n [ResourceFileType.Image]: FileImgSvg,\n [ResourceFileType.PowerPoint]: FilePptSvg,\n [ResourceFileType.Document]: FileWordSvg,\n [ResourceFileType.Excel]: FileExcelSvg,\n [ResourceFileType.Zip]: FileZipSvg,\n [ResourceFileType.File]: FileSvg\n };\n\n let mappedType = types[type];\n\n if (!mappedType)\n mappedType = FolderSvg;\n\n return mappedType;\n },\n\n mapTypeToClass(type: string): any {\n switch (type) {\n case ResourceFileType.Pdf:\n return 'icon-red';\n\n case ResourceFileType.Image:\n return 'icon-purple';\n\n case ResourceFileType.Document:\n return 'icon-blue';\n\n case ResourceFileType.Excel:\n return 'icon-green';\n\n case ResourceFileType.PowerPoint:\n return 'icon-orange';\n\n case ResourceFileType.Zip:\n return 'icon-teal';\n\n case ResourceFileType.File:\n return 'icon-gray';\n\n default:\n return '';\n }\n },\n\n mapTypeToExtension(type: string): string {\n if (!type) return '';\n\n const extensions: HashObject = {\n pdf: 'pdf',\n image: 'png',\n powerpoint: 'pptx'\n };\n\n return extensions[type.toLowerCase()];\n },\n\n mapTypeToName(type: string): string {\n if (!type) return '';\n\n switch (type) {\n case ResourceFileType.Pdf: return LanguageService.getPhrase(lang, 'pdf');\n case ResourceFileType.Image: return LanguageService.getPhrase(lang, 'image');\n case ResourceFileType.Document: return LanguageService.getPhrase(lang, 'document');\n case ResourceFileType.Excel: return LanguageService.getPhrase(lang, 'spreadsheet');\n case ResourceFileType.PowerPoint: return LanguageService.getPhrase(lang, 'presentation');\n case ResourceFileType.Zip: return LanguageService.getPhrase(lang, 'zipArchive');\n case ResourceFileType.File: return LanguageService.getPhrase(lang, 'file');\n\n default:\n return '';\n }\n }\n};\n","import * as React from 'react';\nimport { Placement } from 'react-bootstrap/esm/types';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { VideoSource } from 'libs/shared/enums/VideoSource';\nimport { TrendingSvg } from 'libs/shared/images/svg/objects/TrendingSvg';\nimport { CloseCaptionBadgeSvg } from 'libs/shared/images/svg/status/CloseCaptionBadgeSvg';\nimport { DashboardStatus, Rating } from 'libs/shared/interfaces';\nimport { DurationHelper } from 'libs/shared/utils/DurationHelper';\nimport { RestrictionHelper } from 'libs/shared/utils/RestrictionHelper';\nimport { VideoDetailsHelper } from 'libs/shared/utils/VideoDetailsHelper';\n\nimport styles from './badge.module.scss';\n\nconst namespace = 'shared.badges';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport enum BadgeType {\n DurationExact = 'duration-exact',\n DurationApproximate = 'duration-approximate',\n Interactive = 'interactive',\n Rating = 'rating',\n ProductionYear = 'production-year',\n Captions = 'captions',\n Status = 'status',\n Trending = 'trending',\n Count = 'count',\n Restriction = 'restriction',\n Source = 'source'\n}\n\ntype BadgeSize = 'xs' | 'sm' | 'std' | 'lg';\n\ninterface BadgeProps {\n type: BadgeType;\n data: any;\n inline?: boolean;\n className?: string;\n /**\n * Only Trending badge supports this attribute atm\n */\n size?: BadgeSize;\n}\n\ninterface TooltipOptions {\n placement: Placement;\n title: string;\n}\n\nconst badgeSvgContainerSizeMap: {[key in BadgeSize]: SvgContainerSize} = {\n xs: SvgContainerSize.ExtraSmall,\n sm: SvgContainerSize.Small,\n std: SvgContainerSize.Standard,\n lg: SvgContainerSize.Large\n};\n\nconst badgeSizeClassNameMap: {[key in BadgeSize]: string} = {\n xs: 'badge-xs',\n sm: 'badge-sm',\n std: 'badge-std',\n lg: 'badge-lg'\n};\n\nfunction getStatusClassName(status: CurationStatus | DashboardStatus): string {\n switch (status) {\n case CurationStatus.Published:\n case DashboardStatus.Published:\n return 'bg-success';\n\n case CurationStatus.Archived:\n case CurationStatus.Rejected:\n case DashboardStatus.Archived:\n return 'bg-danger';\n\n case CurationStatus.Draft:\n case DashboardStatus.Draft:\n return 'draft-badge px-2 rounded-pill text-nowrap d-flex align-items-center';\n\n case CurationStatus.Pending:\n case CurationStatus.Processing:\n return 'bg-warning';\n }\n}\n\nfunction getSourceClassName(sources: VideoSource[]): string {\n if (sources.includes(VideoSource.Streamable))\n return `px-1 text-nowrap d-flex align-items-center ${styles.streamable}`;\n\n if (sources.includes(VideoSource.MoviesAndTv))\n return 'bg-indigo text-white px-1 text-nowrap d-flex align-items-center';\n\n if (sources.includes(VideoSource.Exchange))\n return 'bg-orange text-white px-1 text-nowrap d-flex align-items-center';\n\n if (sources.includes(VideoSource.Twig))\n return `bg-pink text-white px-1 text-nowrap d-flex align-items-center`;\n\n return '';\n}\n\nfunction getClassName(type: BadgeType, data: any, size: BadgeSize): string {\n const baseClass = 'badge';\n const sizeClass = badgeSizeClassNameMap[size];\n\n let typeClass = '';\n\n if (type === BadgeType.DurationApproximate)\n typeClass = 'duration-badge-new px-2 rounded-pill text-nowrap d-flex align-items-center';\n\n if (type === BadgeType.DurationExact)\n typeClass = 'duration-badge';\n\n if (type === BadgeType.Interactive)\n typeClass = 'interactive-badge';\n\n if (type === BadgeType.Rating)\n typeClass = `rating-badge text-shadow ${VideoDetailsHelper.mapRatingToClass((data as Rating).value)}`;\n\n if (type === BadgeType.ProductionYear)\n typeClass = 'production-year-badge text-shadow';\n\n if (type === BadgeType.Captions)\n return 'p-0';\n\n if (type === BadgeType.Status)\n return `badge ${getStatusClassName(data)}`;\n\n if (type === BadgeType.Trending)\n return `trending-badge px-1 d-flex align-items-center ${sizeClass}`;\n\n if (type === BadgeType.Count)\n typeClass = 'count-badge px-1 rounded';\n\n if (type === BadgeType.Restriction) {\n const restrictionBgClass = RestrictionHelper.mapRestrictionToClass(data.restrictions);\n return classNames('restriction-badge rounded-pill px-2 d-flex align-items-center', restrictionBgClass);\n }\n \n if (type === BadgeType.Source)\n typeClass = getSourceClassName(data);\n\n return classNames(baseClass, typeClass);\n}\n\nfunction getBadgeContent(type: BadgeType, data: any, size: BadgeSize): string | JSX.Element {\n if (type === BadgeType.Interactive)\n return getPhrase('interactive');\n\n if (type === BadgeType.DurationApproximate)\n return DurationHelper.ToDisplayDurationNewStyle(data);\n\n if (type === BadgeType.DurationExact)\n return DurationHelper.ToDisplayDuration(data);\n\n if (type === BadgeType.Rating)\n return (data as Rating).code; // data expected to be a rating object\n\n if (type === BadgeType.ProductionYear)\n return data; // data should be the production year\n\n if (type === BadgeType.Captions)\n return <SvgContainer svg={CloseCaptionBadgeSvg} />;\n\n if (type === BadgeType.Status) {\n if (typeof(data) === 'number') {\n return CurationStatus[data];\n }\n return data;\n }\n\n if (type === BadgeType.Trending)\n return (\n <>\n <SvgContainer svg={TrendingSvg} size={badgeSvgContainerSizeMap[size]} />\n <span className='ps-1'>{data}</span>\n </>\n );\n\n if (type === BadgeType.Count)\n return data;\n\n if (type === BadgeType.Restriction)\n return (\n <>\n <SvgContainer\n svg={RestrictionHelper.mapRestrictionToSvg(data.restrictions)}\n />\n <span>\n {RestrictionHelper.mapRestrictionToText(data.restrictions, data.yearGroups)}\n </span>\n </>\n );\n\n if (type === BadgeType.Source) {\n const sources = data as VideoSource[];\n\n if (sources.includes(VideoSource.Streamable))\n return 'streamable';\n\n if (sources.includes(VideoSource.MoviesAndTv))\n return 'movies + tv';\n\n if (sources.includes(VideoSource.Exchange))\n return 'exchange';\n\n if (sources.includes(VideoSource.Twig))\n return 'twig';\n\n return '-';\n }\n}\n\nfunction getTooltip(type: BadgeType, data: any): TooltipOptions {\n if (type === BadgeType.Rating)\n return {\n title: (data as Rating).name,\n placement: 'top'\n };\n\n return null;\n}\n\nfunction hasData(type: BadgeType, data: any): boolean {\n if (typeof(data) === 'boolean')\n return !!data;\n\n if (type === BadgeType.Rating)\n return data && !!(data as Rating).value;\n\n if (type === BadgeType.Interactive)\n return !!data?.length || !!data?.data?.length;\n\n if (type === BadgeType.Captions)\n return !!data?.length || !!data?.data?.length;\n\n if (type === BadgeType.Status)\n return typeof(data) === 'number' || typeof(data) === 'string';\n\n return !!data;\n}\n\nexport function Badge(props: BadgeProps): JSX.Element {\n const { type, data, size = 'std' } = props;\n \n if (!hasData(type, data))\n return <></>;\n\n let className = getClassName(type, data, size);\n className = `${className} ${props.inline ? 'd-inline-block' : 'd-flex justify-content-center'} ${props.className || ''}`;\n const content = getBadgeContent(type, data, size);\n const tooltip = getTooltip(type, data);\n const spanHackClassName = props.inline && 'd-inline-block';\n\n if (tooltip) {\n return (\n <div className='badge-wrapper d-inline'>\n <Tooltip {...tooltip} spanHack spanHackClassName={spanHackClassName}>\n <span className={className}>{content}</span>\n </Tooltip>\n </div>\n );\n }\n\n return <span className={`${className} badge-wrapper`}>{content}</span>;\n}"],"names":["DashboardStatus","VideoSource","TrendingSvg","props","jsx","CloseCaptionBadgeSvg","MasterObjectTypes","ResourceFileType","FileExcelSvg","FilePdfSvg","FilePptSvg","FileSvg","FileWordSvg","FileZipSvg","lang","VideoDetailsHelper","ratingValue","rating","library","hasLite","LanguageService","sourceType","video","_b","_a","type","mappedType","FileImgSvg","FolderSvg","namespace","getPhrase","BadgeType","badgeSvgContainerSizeMap","SvgContainerSize","badgeSizeClassNameMap","getStatusClassName","status","CurationStatus","getSourceClassName","sources","styles","getClassName","data","size","baseClass","sizeClass","typeClass","restrictionBgClass","RestrictionHelper","classNames","getBadgeContent","DurationHelper","SvgContainer","jsxs","Fragment","getTooltip","hasData","Badge","className","content","tooltip","spanHackClassName","Tooltip"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as i,j as r,O as n,N as s}from"./app-CQEXKRTo.js";const o="_container_nowrk_1",c="_subContainer_nowrk_7",a={container:o,subContainer:c};function d(e){var t;return i({title:(t=e.error)==null?void 0:t.heading}),e.error?r.jsx("div",{style:{height:"85vh"},children:r.jsx("div",{style:{backgroundImage:`url(${e.imageUrl})`},className:a.container,children:r.jsxs(n,{className:a.subContainer,children:[r.jsx(n.Heading,{children:e.error.heading}),r.jsx(n.Info,{className:"w-33 mb-4",children:e.error.description}),e.error.cta!==!1&&r.jsx(n.Cta,{text:e.error.cta.text,className:`btn btn-dark ${e.error.description?"mt-n2":""}`,href:e.error.cta.url,icon:s,openInNewTab:!0})]})})}):r.jsx(r.Fragment,{})}export{d as NoClassroomsErrorView};
|
|
2
|
+
//# sourceMappingURL=rf9OuobP.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rf9OuobP.chunk.js","sources":["../../src/apps/default/views/no-classrooms-error/NoClassroomsErrorView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { NewWindowSvg } from 'libs/shared/images/svg/actions/NewWindowSvg';\n\nimport styles from './no-classrooms-error.module.scss';\n\ninterface NoClassroomsErrorViewProps {\n error: ErrorPageError;\n imageUrl?: string;\n}\n\nexport function NoClassroomsErrorView(props: NoClassroomsErrorViewProps): React.ReactElement {\n useSetPageMetadata({ title: props.error?.heading });\n\n if (!props.error)\n return <></>;\n\n return (\n <div style={{ height: '85vh' }}>\n <div style={{ backgroundImage: `url(${props.imageUrl})` }} className={styles.container}>\n <EmptyState className={styles.subContainer}>\n <EmptyState.Heading>{props.error.heading}</EmptyState.Heading>\n\n <EmptyState.Info className='w-33 mb-4'>{props.error.description}</EmptyState.Info>\n\n {props.error.cta !== false &&\n <EmptyState.Cta\n text={props.error.cta.text}\n className={`btn btn-dark ${props.error.description ? 'mt-n2' : ''}`}\n href={props.error.cta.url}\n icon={NewWindowSvg}\n openInNewTab\n />\n }\n </EmptyState>\n </div>\n </div>\n );\n}"],"names":["NoClassroomsErrorView","props","useSetPageMetadata","_a","jsx","styles","jsxs","EmptyState","NewWindowSvg","Fragment"],"mappings":"iJAcO,SAASA,EAAsBC,EAAuD,OAG3F,OAFAC,EAAmB,CAAE,OAAOC,EAAAF,EAAM,QAAN,YAAAE,EAAa,QAAS,EAE7CF,EAAM,MAITG,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,OAAQ,QACpB,SAAAA,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,gBAAiB,OAAOH,EAAM,QAAQ,GAAA,EAAO,UAAWI,EAAO,UAC3E,SAAAC,EAAAA,KAACC,EAAA,CAAW,UAAWF,EAAO,aAC5B,SAAA,CAAAD,EAAAA,IAACG,EAAW,QAAX,CAAoB,SAAAN,EAAM,MAAM,QAAQ,EAEzCG,MAACG,EAAW,KAAX,CAAgB,UAAU,YAAa,SAAAN,EAAM,MAAM,YAAY,EAE/DA,EAAM,MAAM,MAAQ,IACnBG,EAAAA,IAACG,EAAW,IAAX,CACC,KAAMN,EAAM,MAAM,IAAI,KACtB,UAAW,gBAAgBA,EAAM,MAAM,YAAc,QAAU,EAAE,GACjE,KAAMA,EAAM,MAAM,IAAI,IACtB,KAAMO,EACN,aAAY,EAAA,CAAA,CACd,CAAA,CAEJ,EACF,EACF,EArBOJ,EAAAA,IAAAK,EAAAA,SAAA,EAAE,CAuBb"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{cU as n,r as a,ap as s,aq as c,cV as o}from"./app-CQEXKRTo.js";function i(r){const e=n.getInstance(r);return a.useEffect(()=>()=>{n.releaseInstance(r)}),e}function u(r){return i(r)}function g(){const r=u(o.ALERT);return{success(e){r.success(e)()},error(e){r.error(e)()},warning(e){r.createAlert({type:s.Warning,heading:c.Warning,message:e})},info(e,t){r.createAlert({heading:e,message:t,type:s.Info})}}}export{u as a,g as u};
|
|
2
|
+
//# sourceMappingURL=sBa2VMAv.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sBa2VMAv.chunk.js","sources":["../../../../libs/common/src/react/hooks/UseInstance.ts","../../../../libs/common/src/react/hooks/UseService.ts","../../../../libs/shared/src/hooks/UseAlerts.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\n\n/**\n * Hook to retrieve an instance from InstanceManager.\n * It handles releasing the instance in the cleanup function.\n * @param instanceName \n */\nexport function useInstance<T>(instanceName: string): T {\n const instance = InstanceManager.getInstance<T>(instanceName);\n\n React.useEffect(() => {\n return () => { InstanceManager.releaseInstance(instanceName); };\n }), [];\n\n return instance;\n}\n\n/**\n * Can be used to conditionally get an instance safely. Passing in a falsey value\n * will not return an instance, and will also not error\n */\nexport function useInstanceSafe<T>(instanceName: string): T {\n let instance: T = null;\n\n if (instanceName)\n instance = InstanceManager.getInstance<T>(instanceName);\n\n React.useEffect(() => {\n return () => { InstanceManager.releaseInstance(instanceName); };\n }), [];\n\n return instance;\n}","import { BaseService } from 'libs/common/backbone/core/BaseService';\n\nimport { useInstance } from './UseInstance';\n\nexport function useService<T extends BaseService>(serviceName: string): T {\n const service = useInstance<T>(serviceName);\n\n return service;\n}","import { CommonServices } from 'libs/common/backbone/constants/CommonServices';\nimport { AlertType, BaseAlert, BaseAlertOptions, BaseAlertService, DefaultAlertHeading } from 'libs/common/backbone/services/BaseAlertService';\nimport { useService } from 'libs/common/react/hooks/UseService';\n\nexport interface Alerts {\n success(alertContent: string | BaseAlert | BaseAlertOptions): void,\n error(alertContent: string | BaseAlert | BaseAlertOptions): void,\n warning(alertContent: string): void\n info(heading: string, message: string): void\n}\n\nexport function useAlerts(): Alerts {\n const alertService = useService<BaseAlertService>(CommonServices.ALERT);\n\n return {\n success(alertContent: string | BaseAlert | BaseAlertOptions): void {\n alertService.success(alertContent)();\n },\n error(alertContent: string | BaseAlert | BaseAlertOptions): void {\n alertService.error(alertContent)();\n },\n warning(alertContent: string): void {\n alertService.createAlert({\n type: AlertType.Warning,\n heading: DefaultAlertHeading.Warning,\n message: alertContent\n });\n },\n info(heading: string, message: string): void {\n alertService.createAlert({\n heading,\n message,\n type: AlertType.Info\n });\n }\n };\n}"],"names":["useInstance","instanceName","instance","InstanceManager","React.useEffect","useService","serviceName","useAlerts","alertService","CommonServices","alertContent","AlertType","DefaultAlertHeading","heading","message"],"mappings":"sEASO,SAASA,EAAeC,EAAyB,CACtD,MAAMC,EAAWC,EAAgB,YAAeF,CAAY,EAE5DG,OAAAA,EAAAA,UAAgB,IACP,IAAM,CAAED,EAAgB,gBAAgBF,CAAY,CAAG,CAC/D,EAEMC,CACT,CCbO,SAASG,EAAkCC,EAAwB,CAGxE,OAFgBN,EAAeM,CAAW,CAG5C,CCGO,SAASC,GAAoB,CAClC,MAAMC,EAAeH,EAA6BI,EAAe,KAAK,EAEtE,MAAO,CACL,QAAQC,EAA2D,CACjEF,EAAa,QAAQE,CAAY,EAAA,CACnC,EACA,MAAMA,EAA2D,CAC/DF,EAAa,MAAME,CAAY,EAAA,CACjC,EACA,QAAQA,EAA4B,CAClCF,EAAa,YAAY,CACvB,KAAMG,EAAU,QAChB,QAASC,EAAoB,QAC7B,QAASF,CAAA,CACV,CACH,EACA,KAAKG,EAAiBC,EAAuB,CAC3CN,EAAa,YAAY,CACvB,QAAAK,EACA,QAAAC,EACA,KAAMH,EAAU,IAAA,CACjB,CACH,CAAA,CAEJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function y(o,r,u){if(!r)return o;let s=`${o}:${r.start}:${r.end}`;const d=Array.isArray(r.userId)?r.userId.sort().join(":"):r.userId,n=Array.isArray(r.groupId)?r.groupId.sort().join(":"):r.groupId,I=Array.isArray(r.customerId)?r.customerId.sort().join(":"):r.customerId;return d&&(s+=`:${d}`),n&&(s+=`:${n}`),I&&(s+=`:${I}`),u&&(s+=`:${u}`),s}export{y as g};
|
|
2
|
+
//# sourceMappingURL=sFV5nxD4.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sFV5nxD4.chunk.js","sources":["../../../../libs/shared/src/utils/AnalyticsRequestUtils.ts"],"sourcesContent":["import { AnalyticsRequestFilter } from 'libs/shared/interfaces';\n\nexport function getAnalyticsRequestKey(baseKey: string, filter: AnalyticsRequestFilter, extra?: string): string {\n if (!filter)\n return baseKey;\n\n let key = `${baseKey}:${filter.start}:${filter.end}`;\n\n const userIdKey = Array.isArray(filter.userId) ? filter.userId.sort().join(':') : filter.userId;\n const groupIdKey = Array.isArray(filter.groupId) ? filter.groupId.sort().join(':') : filter.groupId;\n const customerIdKey = Array.isArray(filter.customerId) ? filter.customerId.sort().join(':') : filter.customerId;\n\n if (userIdKey)\n key += `:${userIdKey}`;\n\n if (groupIdKey)\n key += `:${groupIdKey}`;\n\n if (customerIdKey)\n key += `:${customerIdKey}`;\n\n if (extra)\n key += `:${extra}`;\n\n return key;\n}"],"names":["getAnalyticsRequestKey","baseKey","filter","extra","key","userIdKey","groupIdKey","customerIdKey"],"mappings":"AAEO,SAASA,EAAuBC,EAAiBC,EAAgCC,EAAwB,CAC9G,GAAI,CAACD,EACH,OAAOD,EAET,IAAIG,EAAM,GAAGH,CAAO,IAAIC,EAAO,KAAK,IAAIA,EAAO,GAAG,GAElD,MAAMG,EAAY,MAAM,QAAQH,EAAO,MAAM,EAAIA,EAAO,OAAO,KAAA,EAAO,KAAK,GAAG,EAAIA,EAAO,OACnFI,EAAa,MAAM,QAAQJ,EAAO,OAAO,EAAIA,EAAO,QAAQ,KAAA,EAAO,KAAK,GAAG,EAAIA,EAAO,QACtFK,EAAgB,MAAM,QAAQL,EAAO,UAAU,EAAIA,EAAO,WAAW,KAAA,EAAO,KAAK,GAAG,EAAIA,EAAO,WAErG,OAAIG,IACFD,GAAO,IAAIC,CAAS,IAElBC,IACFF,GAAO,IAAIE,CAAU,IAEnBC,IACFH,GAAO,IAAIG,CAAa,IAEtBJ,IACFC,GAAO,IAAID,CAAK,IAEXC,CACT"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{v as p}from"./app-CQEXKRTo.js";import{S as A}from"./5O9SdVRZ.chunk.js";import{a as g}from"./DIqHgqYU.chunk.js";var c=(t=>(t[t.Correct=0]="Correct",t[t.Incorrect=1]="Incorrect",t[t.AwaitingMarking=2]="AwaitingMarking",t[t.Answered=3]="Answered",t[t.UnAnswered=4]="UnAnswered",t[t.NotApplicable=5]="NotApplicable",t))(c||{}),m=(t=>(t[t.Incorrect=0]="Incorrect",t[t.Correct=1]="Correct",t[t.PendingReview=2]="PendingReview",t))(m||{});function I(){return c.NotApplicable}function H(){return c.AwaitingMarking}function b(t,e){const o=t.actionableItems.filter(r=>r.isCorrect);return o.every(r=>!e(r.id))?c.UnAnswered:o.every(r=>{var i;return r.name.trim().toLowerCase()===((i=e(r.id))==null?void 0:i.trim().toLowerCase())})?c.Correct:c.Incorrect}function U(t,e){return t.actionableItems.every(r=>!e(r.id))?c.UnAnswered:t.actionableItems.filter(r=>r.isCorrect).every(r=>{var u;const i=e(r.id);return(i==null?void 0:i.toString())===((u=r.id)==null?void 0:u.toString())||i===r.name})?c.Correct:c.Incorrect}function R(t,e){let o;return t.actionableItems.forEach(n=>{const r=e(n.id);if(!r){o=c.UnAnswered;return}if(r.status===m.Correct){o=c.Correct;return}if(r.status===m.Incorrect){o=c.Incorrect;return}o=c.AwaitingMarking}),o}function h(t,e){return o=>{const n=e==null?void 0:e.attempts.find(r=>r.id===t.id);return n==null?void 0:n.answers.find(r=>r.id===o)}}function T(t,e){const o=h(t,e);return b(t,n=>{const r=o(n);return r==null?void 0:r.text})}function S(t,e){const o=h(t,e);return U(t,n=>{const r=o(n);return r==null?void 0:r.text})}function k(t,e){const o=h(t,e);return R(t,o)}const L={[g.Annotation]:I,[g.Image]:I,[g.MissingWord]:T,[g.MultipleChoice]:S,[g.ShortAnswer]:k,[g.TrueOrFalse]:S,[g.Illustration]:k};function W(t,e){const o=L[t.typeId];return o(t,e)}const q={notApplicable:I,awaitingMarking:H,isMissingWordCorrect:b,isMultipleChoiceCorrect:U,isInteractionCorrect:W};function x(t){return t.typeId!==g.Annotation&&t.typeId!==g.Image}function v(t){return p.flatten(t.timepoints.map(e=>e.interactions))}function C(t){return p.last(t.results)}function B(t,e){return p.findWhere(e==null?void 0:e.attempts,{id:t})}function E(t){return v(t).filter(x)}function O(t,e,o){const n={markingRequired:[],lowScore:[],highScore:[],completed:[],notCompleted:[]},r=E(t),i=new Set(r.map(s=>s.id));e.students.forEach(s=>{const a={...s,summary:N(t,s)};if(a.summary.awaitingMarking){n.markingRequired.push(a);return}if(p.last(s.results).attempts.filter(w=>{var M;return!!i.has((M=w==null?void 0:w.answers[0])==null?void 0:M.questionId)}).length===i.size)n.completed.push(a);else{n.notCompleted.push(a);return}a.summary.percentCorrect>=A.HIGH&&n.highScore.push(a),a.summary.percentCorrect<A.MODERATE&&n.lowScore.push(a)});const u=p.sortBy(n.lowScore,s=>s.summary.percentCorrect),d=p.sortBy(n.highScore,s=>-s.summary.percentCorrect);return{...n,lowScore:u,highScore:d}}function P(t,e){return v(t).find(n=>n.id.toString()===e.toString())}function y(t){return`${t.questionId}:${t.resultId}`}function $(t,e,o){const n=C(e),r=B(t,n);if(r==null?void 0:r.answers.every(d=>{var s;return((s=o[y(d)])==null?void 0:s.status)===m.Correct}))return m.Correct;if(r==null?void 0:r.answers.every(d=>{var s;return((s=o[y(d)])==null?void 0:s.status)===m.Incorrect}))return m.Incorrect}function j(t,e){const o=e.students.length;let n=0,r=0,i=0,u=0,d=0;return e.students.forEach(a=>{const l=C(a);if(!l)return;d=d+a.results.length;const f=q.isInteractionCorrect(t,l);f===c.Correct&&n++,f===c.UnAnswered&&i++,f===c.AwaitingMarking&&u++,f!==c.UnAnswered&&r++}),{percentCorrect:o>0?n/o:0,correct:n,answered:r,unanswered:i,awaitingMarking:u,attempts:d}}function N(t,e){const o=C(e),n=E(t),r=n.length;let i=0,u=0;n.forEach(l=>{const f=q.isInteractionCorrect(l,o);f===c.Correct&&i++,f===c.AwaitingMarking&&u++});const d=r>0?i/r:0,s=new Set(n.map(l=>l.id)),a=o.attempts.filter(l=>{var f;return!!s.has((f=l==null?void 0:l.answers[0])==null?void 0:f.questionId)}).length;return{answered:a,attempts:e.results.length,unanswered:r-a,percentCorrect:d,correct:i,awaitingMarking:u}}export{q as I,E as a,j as b,O as c,$ as d,C as e,c as f,N as g,m as h,P as i,y as j,B as k};
|
|
2
|
+
//# sourceMappingURL=vDUMsOFT.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vDUMsOFT.chunk.js","sources":["../../../../libs/shared/src/enums/InteractionCorrectness.ts","../../../../libs/shared/src/enums/InteractiveAnswerStatus.ts","../../../../libs/shared/src/utils/InteractiveCorrectnessHelper.ts","../../../../libs/shared/src/utils/InteractiveHelper.ts","../../../../libs/shared/src/apps/analytics/utils/InteractiveUtils.ts"],"sourcesContent":["export enum InteractionCorrectness {\n Correct,\n Incorrect,\n AwaitingMarking,\n \n Answered,\n UnAnswered,\n NotApplicable\n}","export enum InteractiveAnswerStatus {\n Incorrect = 0,\n Correct = 1,\n PendingReview = 2\n}","import { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, InteractionTypeId, InteractiveResult, StudentAnswer } from 'libs/shared/interfaces';\n\ntype GetStudentAnswerByActionableItemId = (id: string) => string;\n\nfunction notApplicable(): InteractionCorrectness {\n return InteractionCorrectness.NotApplicable;\n}\n\nfunction awaitingMarking(): InteractionCorrectness {\n return InteractionCorrectness.AwaitingMarking;\n}\n\nfunction isMissingWordCorrect(\n interaction: Interaction,\n getStudentAnswer: GetStudentAnswerByActionableItemId\n): InteractionCorrectness {\n const items = interaction.actionableItems.filter(a => a\n .isCorrect);\n\n if (items.every(a => !getStudentAnswer(a.id)))\n return InteractionCorrectness.UnAnswered;\n\n const correct = items.every(a => a.name.trim().toLowerCase() === getStudentAnswer(a.id)?.trim().toLowerCase());\n return correct ? InteractionCorrectness.Correct : InteractionCorrectness.Incorrect;\n}\n\nfunction isMultipleChoiceCorrect(\n interaction: Interaction,\n getStudentAnswer: GetStudentAnswerByActionableItemId\n): InteractionCorrectness {\n if (interaction.actionableItems.every(a => !getStudentAnswer(a.id)))\n return InteractionCorrectness.UnAnswered;\n \n const correctItems = interaction.actionableItems.filter(a => a.isCorrect);\n\n const correct = correctItems.every(a => {\n const studentAnswer = getStudentAnswer(a.id);\n\n /**\n * In the past we've only ever checked the answer name. But since we introduced the ability to have image interactions\n * with no question text, we've need to swap to saving the id. But past submissions still have the name\n * - Sha\n */\n return studentAnswer?.toString() === a.id?.toString() || studentAnswer === a.name;\n });\n return correct ? InteractionCorrectness.Correct : InteractionCorrectness.Incorrect;\n}\n\nfunction isMarkableAnswerMarkedCorrect(\n interaction: Interaction,\n getStudentAnswer: (id: string) => StudentAnswer\n): InteractionCorrectness {\n let correctness: InteractionCorrectness;\n\n // There should only be one actionableItem\n interaction.actionableItems.forEach(item => {\n const studentAnswer = getStudentAnswer(item.id);\n\n if (!studentAnswer) {\n correctness = InteractionCorrectness.UnAnswered;\n return;\n }\n\n if (studentAnswer.status === InteractiveAnswerStatus.Correct) {\n correctness = InteractionCorrectness.Correct;\n return;\n }\n\n if (studentAnswer.status === InteractiveAnswerStatus.Incorrect) {\n correctness = InteractionCorrectness.Incorrect;\n return;\n }\n\n correctness = InteractionCorrectness.AwaitingMarking;\n });\n\n return correctness;\n}\n\ntype IsCorrectFunction = (interaction: Interaction, result: InteractiveResult) => InteractionCorrectness;\n\nfunction getGetStudentAnswer(interaction: Interaction, result: InteractiveResult): (id: string) => StudentAnswer {\n return (id: string) => {\n const attempt = result?.attempts.find(a => a.id === interaction.id);\n return attempt?.answers.find(s => s.id === id);\n };\n}\n\nfunction wrapIsMissingWordCorrect(interaction: Interaction, result: InteractiveResult): InteractionCorrectness {\n const getStudentAnswer = getGetStudentAnswer(interaction, result);\n\n return isMissingWordCorrect(interaction, (id: string) => {\n const answer = getStudentAnswer(id);\n return answer?.text;\n });\n}\n\nfunction wrapIsMultipleChoiceCorrect(interaction: Interaction, result: InteractiveResult): InteractionCorrectness {\n const getStudentAnswer = getGetStudentAnswer(interaction, result);\n\n return isMultipleChoiceCorrect(interaction, (id: string) => {\n const answer = getStudentAnswer(id);\n return answer?.text;\n });\n}\n\nfunction wrapIsMarkableAnswerMarkedCorrect(\n interaction: Interaction,\n result: InteractiveResult\n): InteractionCorrectness {\n const getStudentAnswer = getGetStudentAnswer(interaction, result);\n return isMarkableAnswerMarkedCorrect(interaction, getStudentAnswer);\n}\n\nconst IsCorrectLookup: {[typeId: number]: IsCorrectFunction} = {\n [InteractionTypeId.Annotation]: notApplicable,\n [InteractionTypeId.Image]: notApplicable,\n [InteractionTypeId.MissingWord]: wrapIsMissingWordCorrect,\n [InteractionTypeId.MultipleChoice]: wrapIsMultipleChoiceCorrect,\n [InteractionTypeId.ShortAnswer]: wrapIsMarkableAnswerMarkedCorrect,\n [InteractionTypeId.TrueOrFalse]: wrapIsMultipleChoiceCorrect,\n [InteractionTypeId.Illustration]: wrapIsMarkableAnswerMarkedCorrect\n};\n\nfunction isInteractionCorrect(interaction: Interaction, result: InteractiveResult): InteractionCorrectness {\n const isCorrectFn = IsCorrectLookup[interaction.typeId];\n\n return isCorrectFn(interaction, result);\n}\n\nexport const InteractiveCorrectnessHelper = {\n notApplicable,\n awaitingMarking,\n isMissingWordCorrect,\n isMultipleChoiceCorrect,\n isInteractionCorrect\n};\n","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport {\n Interaction,\n InteractionTypeId,\n Interactive,\n InteractiveMetadata,\n InteractiveResult,\n StudentAttempt,\n StudentResults\n} from 'libs/shared/interfaces';\n\nfunction interactionRequiresAnswer(interaction: Interaction): boolean {\n return interaction.typeId !== InteractionTypeId.Annotation && interaction.typeId !== InteractionTypeId.Image;\n}\n\nexport function flattenInteractions(interactive: Interactive): Interaction[] {\n return ArrayHelper.flatten(interactive.timepoints.map(i => i.interactions));\n}\n\n/**\n * Centralised logic for using the most recent student result.\n */\nexport function getStudentResult(studentResults: StudentResults): InteractiveResult {\n return ArrayHelper.last(studentResults.results);\n}\n\nexport function getStudentAttempt(interactionId: string, result: InteractiveResult): StudentAttempt {\n return ArrayHelper.findWhere(result?.attempts, { id: interactionId });\n}\n\n/**\n * Returns a flat list of interactions on an interactive and filters out\n * those that don't require an answer (annotations and images).\n */\nexport function getInteractions(interactive: Interactive): Interaction [] {\n return flattenInteractions(interactive).filter(interactionRequiresAnswer);\n}\n\nexport function getTotalInteractions(interactive: InteractiveMetadata): number {\n return interactive._timepoints?.value?.reduce((total, timepoint) => {\n if (!timepoint.interactions?.length)\n return total;\n \n return total + timepoint.interactions.length;\n }, 0) ?? 0;\n}","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { MarkedAnswerHash } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { ResultsSummary } from 'libs/shared/apps/analytics/interfaces/ResultsSummary';\nimport { StudentResultsWithSummary } from 'libs/shared/apps/analytics/interfaces/StudentResultsWithSummary';\nimport { ScoreThresholdDefaults, ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, StudentAnswer, StudentResults } from 'libs/shared/interfaces';\nimport { Interactive, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { InteractiveCorrectnessHelper } from 'libs/shared/utils/InteractiveCorrectnessHelper';\nimport { flattenInteractions, getInteractions, getStudentAttempt, getStudentResult } from 'libs/shared/utils/InteractiveHelper';\n\ninterface StudentGroups {\n markingRequired: StudentResultsWithSummary[];\n lowScore: StudentResultsWithSummary[];\n highScore: StudentResultsWithSummary[];\n completed: StudentResultsWithSummary[];\n notCompleted: StudentResultsWithSummary[];\n}\n\nexport function groupStudents(\n interactive: Interactive,\n results: InteractiveResultSet,\n scoreThreshold?: ScoreThresholds\n): StudentGroups {\n const groups: StudentGroups = {\n markingRequired: [],\n lowScore: [],\n highScore: [],\n completed: [],\n notCompleted: []\n };\n\n const interactions = getInteractions(interactive);\n const interactionIds = new Set(interactions.map(i => i.id));\n \n results.students.forEach(s => {\n const withSummary = {\n ...s,\n summary: getStudentResultsSummary(interactive, s)\n };\n \n if (withSummary.summary.awaitingMarking) {\n groups.markingRequired.push(withSummary);\n return;\n }\n\n const result = ArrayHelper.last(s.results);\n const answeredInteractions = result.attempts.filter(a => !!interactionIds.has(a?.answers[0]?.questionId)).length;\n\n if (answeredInteractions === interactionIds.size) {\n groups.completed.push(withSummary);\n } else {\n groups.notCompleted.push(withSummary);\n return;\n }\n \n if (withSummary.summary.percentCorrect >= (scoreThreshold?.HIGH || ScoreThresholdDefaults.HIGH))\n groups.highScore.push(withSummary);\n \n if (withSummary.summary.percentCorrect < (scoreThreshold?.MODERATE || ScoreThresholdDefaults.MODERATE))\n groups.lowScore.push(withSummary);\n });\n \n const sortedLowScore = ArrayHelper.sortBy(groups.lowScore, s => s.summary.percentCorrect);\n const sortedHighScore = ArrayHelper.sortBy(groups.highScore, s => -s.summary.percentCorrect);\n \n return {\n ...groups,\n lowScore: sortedLowScore,\n highScore: sortedHighScore\n };\n}\n\nexport function getInteractionById(interactive: Interactive, interactionId: string): Interaction {\n const flattenedInteractions = flattenInteractions(interactive);\n return flattenedInteractions.find(i => i.id.toString() === interactionId.toString());\n}\n\n/**\n * We need to use the question and result ids as a list of one student's responses\n * to multiple questions will all have the same result id and a list of multiple\n * students responses to one question will all have the same questionId.\n */\nexport function getMarkedAnswerId(answer: StudentAnswer): string {\n return `${answer.questionId}:${answer.resultId}`;\n}\n\nexport function getMarkedStatus(\n interactionId: string,\n studentResults: StudentResults,\n markedAnswers: MarkedAnswerHash\n): InteractiveAnswerStatus {\n const result = getStudentResult(studentResults);\n const studentResponse = getStudentAttempt(interactionId, result);\n\n const isMarkedCorrect = studentResponse?.answers.every(a => {\n return markedAnswers[getMarkedAnswerId(a)]?.status === InteractiveAnswerStatus.Correct;\n });\n\n if (isMarkedCorrect)\n return InteractiveAnswerStatus.Correct;\n\n const isMarkedIncorrect = studentResponse?.answers.every(a => {\n return markedAnswers[getMarkedAnswerId(a)]?.status === InteractiveAnswerStatus.Incorrect;\n });\n\n if (isMarkedIncorrect)\n return InteractiveAnswerStatus.Incorrect;\n}\n\nexport function getInteractionResultsSummary(\n interaction: Interaction,\n results: InteractiveResultSet\n): ResultsSummary {\n const numStudents = results.students.length;\n let numCorrect = 0;\n let answered = 0;\n let unanswered = 0;\n let awaitingMarking = 0;\n let attempts = 0;\n\n results.students.forEach(s => {\n const result = getStudentResult(s);\n\n if (!result)\n return;\n\n attempts = attempts + s.results.length;\n\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(interaction, result);\n\n if (correctness === InteractionCorrectness.Correct)\n numCorrect++;\n\n if (correctness === InteractionCorrectness.UnAnswered)\n unanswered++;\n\n if (correctness === InteractionCorrectness.AwaitingMarking)\n awaitingMarking++;\n\n if (correctness !== InteractionCorrectness.UnAnswered)\n answered++;\n });\n\n\n const percentCorrect = numStudents > 0\n ? numCorrect / numStudents\n : 0;\n\n return {\n percentCorrect,\n correct: numCorrect,\n answered,\n unanswered,\n awaitingMarking,\n attempts\n };\n}\n\nexport function getStudentResultsSummary(interactive: Interactive, studentResults: StudentResults): ResultsSummary {\n const result = getStudentResult(studentResults);\n\n const interactions = getInteractions(interactive);\n\n const numInteractions = interactions.length;\n\n let numCorrect = 0;\n let awaitingMarking = 0;\n\n interactions.forEach(i => {\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(i, result);\n\n if (correctness === InteractionCorrectness.Correct)\n numCorrect++;\n\n if (correctness === InteractionCorrectness.AwaitingMarking)\n awaitingMarking++;\n });\n\n const percentCorrect = numInteractions > 0 ? numCorrect / numInteractions : 0;\n\n /**\n * Our interactions list has images and annotations filtered out.\n * We built a map of valid questions, so that we can calculate the unswered accurately.\n * We're doing this because of a bug that caused annotations and images to record answers in the player.\n * - Sha\n */\n const interactionIds = new Set(interactions.map(i => i.id));\n const answeredInteractions = result.attempts.filter(a => !!interactionIds.has(a?.answers[0]?.questionId)).length;\n\n return {\n answered: answeredInteractions,\n attempts: studentResults.results.length,\n unanswered: numInteractions - answeredInteractions,\n percentCorrect,\n correct: numCorrect,\n awaitingMarking\n };\n}"],"names":["InteractionCorrectness","InteractiveAnswerStatus","notApplicable","awaitingMarking","isMissingWordCorrect","interaction","getStudentAnswer","items","a","_a","isMultipleChoiceCorrect","studentAnswer","isMarkableAnswerMarkedCorrect","correctness","item","getGetStudentAnswer","result","id","attempt","s","wrapIsMissingWordCorrect","answer","wrapIsMultipleChoiceCorrect","wrapIsMarkableAnswerMarkedCorrect","IsCorrectLookup","InteractionTypeId","isInteractionCorrect","isCorrectFn","InteractiveCorrectnessHelper","interactionRequiresAnswer","flattenInteractions","interactive","ArrayHelper","i","getStudentResult","studentResults","getStudentAttempt","interactionId","getInteractions","groupStudents","results","scoreThreshold","groups","interactions","interactionIds","withSummary","getStudentResultsSummary","ScoreThresholdDefaults","sortedLowScore","sortedHighScore","getInteractionById","getMarkedAnswerId","getMarkedStatus","markedAnswers","studentResponse","getInteractionResultsSummary","numStudents","numCorrect","answered","unanswered","attempts","numInteractions","percentCorrect","answeredInteractions"],"mappings":"sHAAO,IAAKA,GAAAA,IACVA,EAAAA,EAAA,QAAA,CAAA,EAAA,UACAA,EAAAA,EAAA,UAAA,CAAA,EAAA,YACAA,EAAAA,EAAA,gBAAA,CAAA,EAAA,kBAEAA,EAAAA,EAAA,SAAA,CAAA,EAAA,WACAA,EAAAA,EAAA,WAAA,CAAA,EAAA,aACAA,EAAAA,EAAA,cAAA,CAAA,EAAA,gBAPUA,IAAAA,GAAA,CAAA,CAAA,ECAAC,GAAAA,IACVA,EAAAA,EAAA,UAAY,CAAA,EAAZ,YACAA,EAAAA,EAAA,QAAU,CAAA,EAAV,UACAA,EAAAA,EAAA,cAAgB,CAAA,EAAhB,gBAHUA,IAAAA,GAAA,CAAA,CAAA,ECMZ,SAASC,GAAwC,CAC/C,OAAOF,EAAuB,aAChC,CAEA,SAASG,GAA0C,CACjD,OAAOH,EAAuB,eAChC,CAEA,SAASI,EACPC,EACAC,EACwB,CACxB,MAAMC,EAAQF,EAAY,gBAAgB,OAAOG,GAAKA,EACnD,SAAS,EAEZ,OAAID,EAAM,MAAMC,GAAK,CAACF,EAAiBE,EAAE,EAAE,CAAC,EACnCR,EAAuB,WAEhBO,EAAM,MAAMC,GAAA,OAAK,OAAAA,EAAE,KAAK,KAAA,EAAO,YAAA,MAAkBC,EAAAH,EAAiBE,EAAE,EAAE,IAArB,YAAAC,EAAwB,OAAO,eAAa,EAC5FT,EAAuB,QAAUA,EAAuB,SAC3E,CAEA,SAASU,EACPL,EACAC,EACwB,CACxB,OAAID,EAAY,gBAAgB,MAAMG,GAAK,CAACF,EAAiBE,EAAE,EAAE,CAAC,EACzDR,EAAuB,WAEXK,EAAY,gBAAgB,OAAOG,GAAKA,EAAE,SAAS,EAE3C,MAAMA,GAAK,OACtC,MAAMG,EAAgBL,EAAiBE,EAAE,EAAE,EAO3C,OAAOG,GAAA,YAAAA,EAAe,gBAAeF,EAAAD,EAAE,KAAF,YAAAC,EAAM,aAAcE,IAAkBH,EAAE,IAC/E,CAAC,EACgBR,EAAuB,QAAUA,EAAuB,SAC3E,CAEA,SAASY,EACPP,EACAC,EACwB,CACxB,IAAIO,EAGJ,OAAAR,EAAY,gBAAgB,QAAQS,GAAQ,CAC1C,MAAMH,EAAgBL,EAAiBQ,EAAK,EAAE,EAE9C,GAAI,CAACH,EAAe,CAClBE,EAAcb,EAAuB,WACrC,MACF,CAEA,GAAIW,EAAc,SAAWV,EAAwB,QAAS,CAC5DY,EAAcb,EAAuB,QACrC,MACF,CAEA,GAAIW,EAAc,SAAWV,EAAwB,UAAW,CAC9DY,EAAcb,EAAuB,UACrC,MACF,CAEAa,EAAcb,EAAuB,eACvC,CAAC,EAEMa,CACT,CAIA,SAASE,EAAoBV,EAA0BW,EAA0D,CAC/G,OAAQC,GAAe,CACrB,MAAMC,EAAUF,GAAA,YAAAA,EAAQ,SAAS,QAAUR,EAAE,KAAOH,EAAY,IAChE,OAAOa,GAAA,YAAAA,EAAS,QAAQ,KAAKC,GAAKA,EAAE,KAAOF,EAC7C,CACF,CAEA,SAASG,EAAyBf,EAA0BW,EAAmD,CAC7G,MAAMV,EAAmBS,EAAoBV,EAAaW,CAAM,EAEhE,OAAOZ,EAAqBC,EAAcY,GAAe,CACvD,MAAMI,EAASf,EAAiBW,CAAE,EAClC,OAAOI,GAAA,YAAAA,EAAQ,IACjB,CAAC,CACH,CAEA,SAASC,EAA4BjB,EAA0BW,EAAmD,CAChH,MAAMV,EAAmBS,EAAoBV,EAAaW,CAAM,EAEhE,OAAON,EAAwBL,EAAcY,GAAe,CAC1D,MAAMI,EAASf,EAAiBW,CAAE,EAClC,OAAOI,GAAA,YAAAA,EAAQ,IACjB,CAAC,CACH,CAEA,SAASE,EACPlB,EACAW,EACwB,CACxB,MAAMV,EAAmBS,EAAoBV,EAAaW,CAAM,EAChE,OAAOJ,EAA8BP,EAAaC,CAAgB,CACpE,CAEA,MAAMkB,EAAyD,CAC7D,CAACC,EAAkB,UAAU,EAAGvB,EAChC,CAACuB,EAAkB,KAAK,EAAGvB,EAC3B,CAACuB,EAAkB,WAAW,EAAGL,EACjC,CAACK,EAAkB,cAAc,EAAGH,EACpC,CAACG,EAAkB,WAAW,EAAGF,EACjC,CAACE,EAAkB,WAAW,EAAGH,EACjC,CAACG,EAAkB,YAAY,EAAGF,CACpC,EAEA,SAASG,EAAqBrB,EAA0BW,EAAmD,CACzG,MAAMW,EAAcH,EAAgBnB,EAAY,MAAM,EAEtD,OAAOsB,EAAYtB,EAAaW,CAAM,CACxC,CAEO,MAAMY,EAA+B,CAC1C,cAAA1B,EACA,gBAAAC,EACA,qBAAAC,EACA,wBAAAM,EACA,qBAAAgB,CACF,EC9HA,SAASG,EAA0BxB,EAAmC,CACpE,OAAOA,EAAY,SAAWoB,EAAkB,YAAcpB,EAAY,SAAWoB,EAAkB,KACzG,CAEO,SAASK,EAAoBC,EAAyC,CAC3E,OAAOC,EAAY,QAAQD,EAAY,WAAW,IAAIE,GAAKA,EAAE,YAAY,CAAC,CAC5E,CAKO,SAASC,EAAiBC,EAAmD,CAClF,OAAOH,EAAY,KAAKG,EAAe,OAAO,CAChD,CAEO,SAASC,EAAkBC,EAAuBrB,EAA2C,CAClG,OAAOgB,EAAY,UAAUhB,GAAA,YAAAA,EAAQ,SAAU,CAAE,GAAIqB,EAAe,CACtE,CAMO,SAASC,EAAgBP,EAA0C,CACxE,OAAOD,EAAoBC,CAAW,EAAE,OAAOF,CAAyB,CAC1E,CChBO,SAASU,EACdR,EACAS,EACAC,EACe,CACf,MAAMC,EAAwB,CAC5B,gBAAiB,CAAA,EACjB,SAAU,CAAA,EACV,UAAW,CAAA,EACX,UAAW,CAAA,EACX,aAAc,CAAA,CAAC,EAGXC,EAAeL,EAAgBP,CAAW,EAC1Ca,EAAiB,IAAI,IAAID,EAAa,IAAIV,GAAKA,EAAE,EAAE,CAAC,EAE1DO,EAAQ,SAAS,QAAQ,GAAK,CAC5B,MAAMK,EAAc,CAClB,GAAG,EACH,QAASC,EAAyBf,EAAa,CAAC,CAAA,EAGlD,GAAIc,EAAY,QAAQ,gBAAiB,CACvCH,EAAO,gBAAgB,KAAKG,CAAW,EACvC,MACF,CAKA,GAHeb,EAAY,KAAK,EAAE,OAAO,EACL,SAAS,iBAAY,OAAC,CAACY,EAAe,KAAInC,EAAAD,GAAA,YAAAA,EAAG,QAAQ,KAAX,YAAAC,EAAe,UAAU,EAAC,EAAE,SAE7EmC,EAAe,KAC1CF,EAAO,UAAU,KAAKG,CAAW,MAC5B,CACLH,EAAO,aAAa,KAAKG,CAAW,EACpC,MACF,CAEIA,EAAY,QAAQ,gBAA2CE,EAAuB,MACxFL,EAAO,UAAU,KAAKG,CAAW,EAE/BA,EAAY,QAAQ,eAA8CE,EAAuB,UAC3FL,EAAO,SAAS,KAAKG,CAAW,CACpC,CAAC,EAED,MAAMG,EAAiBhB,EAAY,OAAOU,EAAO,SAAU,GAAK,EAAE,QAAQ,cAAc,EAClFO,EAAkBjB,EAAY,OAAOU,EAAO,UAAW,GAAK,CAAC,EAAE,QAAQ,cAAc,EAE3F,MAAO,CACL,GAAGA,EACH,SAAUM,EACV,UAAWC,CAAA,CAEf,CAEO,SAASC,EAAmBnB,EAA0BM,EAAoC,CAE/F,OAD8BP,EAAoBC,CAAW,EAChC,KAAKE,GAAKA,EAAE,GAAG,SAAA,IAAeI,EAAc,UAAU,CACrF,CAOO,SAASc,EAAkB9B,EAA+B,CAC/D,MAAO,GAAGA,EAAO,UAAU,IAAIA,EAAO,QAAQ,EAChD,CAEO,SAAS+B,EACdf,EACAF,EACAkB,EACyB,CACzB,MAAMrC,EAASkB,EAAiBC,CAAc,EACxCmB,EAAkBlB,EAAkBC,EAAerB,CAAM,EAM/D,GAJwBsC,GAAA,YAAAA,EAAiB,QAAQ,MAAM9C,GAAK,OAC1D,QAAOC,EAAA4C,EAAcF,EAAkB3C,CAAC,CAAC,IAAlC,YAAAC,EAAqC,UAAWR,EAAwB,OACjF,GAGE,OAAOA,EAAwB,QAMjC,GAJ0BqD,GAAA,YAAAA,EAAiB,QAAQ,MAAM9C,GAAK,OAC5D,QAAOC,EAAA4C,EAAcF,EAAkB3C,CAAC,CAAC,IAAlC,YAAAC,EAAqC,UAAWR,EAAwB,SACjF,GAGE,OAAOA,EAAwB,SACnC,CAEO,SAASsD,EACdlD,EACAmC,EACgB,CAChB,MAAMgB,EAAchB,EAAQ,SAAS,OACrC,IAAIiB,EAAa,EACbC,EAAW,EACXC,EAAa,EACbxD,EAAkB,EAClByD,EAAW,EAEf,OAAApB,EAAQ,SAAS,QAAQrB,GAAK,CAC5B,MAAMH,EAASkB,EAAiBf,CAAC,EAEjC,GAAI,CAACH,EACH,OAEF4C,EAAWA,EAAWzC,EAAE,QAAQ,OAEhC,MAAMN,EAAce,EAA6B,qBAAqBvB,EAAaW,CAAM,EAErFH,IAAgBb,EAAuB,SACzCyD,IAEE5C,IAAgBb,EAAuB,YACzC2D,IAEE9C,IAAgBb,EAAuB,iBACzCG,IAEEU,IAAgBb,EAAuB,YACzC0D,GACJ,CAAC,EAOM,CACL,eALqBF,EAAc,EACjCC,EAAaD,EACb,EAIF,QAASC,EACT,SAAAC,EACA,WAAAC,EACA,gBAAAxD,EACA,SAAAyD,CAAA,CAEJ,CAEO,SAASd,EAAyBf,EAA0BI,EAAgD,CACjH,MAAMnB,EAASkB,EAAiBC,CAAc,EAExCQ,EAAeL,EAAgBP,CAAW,EAE1C8B,EAAkBlB,EAAa,OAErC,IAAIc,EAAa,EACbtD,EAAkB,EAEtBwC,EAAa,QAAQV,GAAK,CACxB,MAAMpB,EAAce,EAA6B,qBAAqBK,EAAGjB,CAAM,EAE3EH,IAAgBb,EAAuB,SACzCyD,IAEE5C,IAAgBb,EAAuB,iBACzCG,GACJ,CAAC,EAED,MAAM2D,EAAiBD,EAAkB,EAAIJ,EAAaI,EAAkB,EAQtEjB,EAAiB,IAAI,IAAID,EAAa,IAAIV,GAAKA,EAAE,EAAE,CAAC,EACpD8B,EAAuB/C,EAAO,SAAS,iBAAY,OAAC,CAAC4B,EAAe,KAAInC,EAAAD,GAAA,YAAAA,EAAG,QAAQ,KAAX,YAAAC,EAAe,UAAU,EAAC,EAAE,OAE1G,MAAO,CACL,SAAUsD,EACV,SAAU5B,EAAe,QAAQ,OACjC,WAAY0B,EAAkBE,EAC9B,eAAAD,EACA,QAASL,EACT,gBAAAtD,CAAA,CAEJ"}
|