@clickview/reports 0.72.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-f5ee243b25-reports.chunk.js +0 -2
- package/dist/scripts/2999-f5ee243b25-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-8754f0e6b8.min.js +0 -2
- package/dist/scripts/bundle-8754f0e6b8.min.js.LICENSE.txt +0 -108
- package/dist/scripts/polyfills-3db3f009d4.min.js +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{aK as Y,bX as X,j as t,O as m,L as h,T as x,p as C,a7 as J,v as d,h as Z,a6 as ee,bY as te,r as se,w as ne,a4 as M,c as re,u as A,bO as H,e as ae,a as ie,bF as R,V as ce,C as le}from"./app-CQEXKRTo.js";import{I as oe,a as de,M as ue,u as me}from"./BOenBxfx.chunk.js";import{I as _,a as g}from"./DIqHgqYU.chunk.js";import{a as ge}from"./BI4Pc5Qp.chunk.js";import{d as W,I as O,e as D,f as p,a as he,b as fe,h as N,i as xe}from"./vDUMsOFT.chunk.js";import{P as be}from"./DtMtah8Q.chunk.js";import{P as je,a as Ie}from"./Cq8XHkfC.chunk.js";import{T as Se}from"./bDb9_r6g.chunk.js";import{u as we}from"./CZHffw7D.chunk.js";import{u as ye}from"./DSJfyygS.chunk.js";import{u as pe}from"./HFbpCC17.chunk.js";import{P as ve}from"./DyhdHLt7.chunk.js";import{u as ke}from"./BArX7fyb.chunk.js";import{u as Ne,a as Ce}from"./CjQHXyx0.chunk.js";import{u as Me}from"./CvkQEqoz.chunk.js";import{u as Ae,I as Re}from"./pmJce9de.chunk.js";import{u as Ue,a as Te}from"./oXJu4dT2.chunk.js";import{u as $e}from"./BP4vyxCh.chunk.js";import"./sBa2VMAv.chunk.js";import"./EpoqEdEt.chunk.js";import"./GlEgn_rx.chunk.js";import"./BzFtDyVZ.chunk.js";import"./5O9SdVRZ.chunk.js";import"./sFV5nxD4.chunk.js";import"./H-GxGp0N.chunk.js";import"./OUlVmzyS.chunk.js";import"./B-0CRp8U.chunk.js";import"./rO0zPagv.chunk.js";import"./BGYUqEPH.chunk.js";import"./Bfbk7XQF.chunk.js";import"./DdCE2h3h.chunk.js";import"./CX5q-0jT.chunk.js";const Pe={preventScrollTop(){Y.Radio.channel(X.SHELL).trigger("prevent:scroll:top")}},Fe="shared.interactionQuestionsEmptyState",Ee=h.encloseNamespace(Fe);function qe(e){return t.jsxs(m,{className:"rounded h-100 bg-white justify-content-center py-4",children:[t.jsx(m.Image,{src:e.emptyStateImageUrl,size:"small"}),t.jsx(m.Info,{className:"w-100",children:Ee("emptyStateText")})]})}const v="shared.interactionResponseList";function Le(e){function s(){switch(e.filter){case"correct":return e.correctImageUrl;case"incorrect":return e.incorrectImageUrl;case"marking_required":return e.markingRequiredImageUrl;case"skipped":return e.skippedImageUrl}}function n(){switch(e.filter){case"correct":return"correctEmptyState";case"incorrect":return"incorrectEmptyState";case"marking_required":return"markingRequiredEmptyState";case"skipped":return"skippedEmptyState"}}return t.jsx(t.Fragment,{children:t.jsxs(m,{className:"m-4",children:[t.jsx(m.Image,{src:s(),className:"w-25 h-auto"}),t.jsx(m.Info,{children:t.jsx(x,{namespace:v,phrase:n()})})]})})}function He(e){function s(r){return r===e.filter}function n(r){return`rounded-pill bg-light ${s(r)?"bg-dark text-white":""}`}return t.jsxs("div",{className:"d-flex gap-2 m-3",children:[t.jsx("button",{className:n("marking_required"),onClick:()=>e.toggleFilter("marking_required"),children:t.jsx(x,{namespace:v,phrase:"markingRequired"})}),t.jsx("button",{className:n("correct"),onClick:()=>e.toggleFilter("correct"),children:t.jsx(x,{namespace:v,phrase:"correct"})}),t.jsx("button",{className:n("incorrect"),onClick:()=>e.toggleFilter("incorrect"),children:t.jsx(x,{namespace:v,phrase:"incorrect"})}),t.jsx("button",{className:n("skipped"),onClick:()=>e.toggleFilter("skipped"),children:t.jsx(x,{namespace:v,phrase:"skipped"})})]})}const We="interactives.interactionResponseListHeader",Be=h.encloseNamespace(We);function Qe(e){var n;const s=(n=e.interaction.data)==null?void 0:n.suggestedResponse;return t.jsx("div",{className:"rounded bg-white",children:t.jsxs("div",{className:"p-2 position-relative",children:[t.jsx("div",{className:"d-flex",children:t.jsx(_,{interaction:e.interaction,iconClassName:"flex-shrink-0"})}),!!s&&t.jsxs("div",{className:"mt-2",children:[t.jsx("strong",{children:Be("suggestedResponse")}),t.jsx("p",{className:"m-0",children:s})]})]})})}const _e="shared.submitMarkedAnswers",Oe=h.encloseNamespace(_e);function B(e){return t.jsx("div",{className:"d-flex justify-content-end",children:t.jsx("button",{className:"btn btn-outline-dark",onClick:e.submit,disabled:e.disabled,children:Oe("submitAnswers")})})}const De="_awaitingMarking_1nhv5_1",Ve={awaitingMarking:De},V="shared.interactionResponseList",U=h.encloseNamespace(V);function ze(e,s){return s.filter(r=>O.isInteractionCorrect(e,D(r))===p.AwaitingMarking).reduce((r,i)=>{var l,c;return{...r,[((l=i.user)==null?void 0:l.id)||((c=i.user)==null?void 0:c.sessionId)]:!0}},{})}function Ke(e){var u;const[s,n]=C.useState(),r=ze(e.interaction,e.results.students),i=Object.keys(e.markedAnswers).length;if(!((u=e.results.students)!=null&&u.length))return t.jsx("div",{className:"d-flex flex-column h-100",children:t.jsxs(m,{className:"bg-white rounded mt-2 py-5 flex-grow-1 justify-content-center",children:[t.jsx(m.Image,{src:e.emptyStateImageUrl,size:"small"}),t.jsx(m.Heading,{children:U("emptyStateHeading")}),t.jsx(m.Info,{className:"w-100",children:U("emptyStateDescription")})]})});function l(o){n(s===o?null:o)}function c(){return e.results.students.filter(o=>{const b=D(o),j=O.isInteractionCorrect(e.interaction,b),I={correct:p.Correct,incorrect:p.Incorrect,marking_required:p.AwaitingMarking,skipped:p.UnAnswered};return!s||s in I&&j===I[s]})}const a=c();return t.jsxs(t.Fragment,{children:[e.reportsStyling&&t.jsx(Qe,{interaction:e.interaction}),t.jsxs("div",{className:e.reportsStyling?"d-flex justify-content-end":"d-flex align-items-center justify-content-between border-bottom px-3 py-2",children:[!e.reportsStyling&&t.jsx("p",{className:"fw-semibold mb-0",children:t.jsx(x,{namespace:V,phrase:"studentAnswers"})}),!!Object.keys(r).length&&t.jsx(J,{id:"submitAnswers",title:U("demoOnly"),spanHack:e.isDemo,children:t.jsx("div",{className:`${e.isDemo?"pointer-events-none":""} ${e.reportsStyling?"mt-2":""}`,children:t.jsx(B,{submit:e.submitMarkedAnswers,disabled:!i})})})]}),t.jsxs(t.Fragment,{children:[!e.reportsStyling&&t.jsx(He,{filter:s,toggleFilter:l}),!e.reportsStyling&&!a.length&&s&&t.jsx(Le,{filter:s,markingRequiredImageUrl:e.markingRequiredImageUrl,correctImageUrl:e.correctImageUrl,incorrectImageUrl:e.incorrectImageUrl,skippedImageUrl:e.skippedImageUrl}),a&&t.jsx("ul",{className:"list-unstyled mb-0",children:a.map((o,b)=>{var w,y;const j=ge(o.user,e.anonymiseUsers),I=r[((w=o.user)==null?void 0:w.id)||((y=o.user)==null?void 0:y.sessionId)];let S=e.reportsStyling?"bg-white p-2":"bg-white px-3 pt-3 pb-2";return I&&(S+=` ${Ve.awaitingMarking} my-1`),t.jsx("li",{className:e.reportsStyling?"":"border-bottom",children:e.reportsStyling?t.jsx(oe,{interaction:e.interaction,studentResults:o,markedStatus:W(e.interaction.id,o,e.markedAnswers),markInteraction:e.addMarkedAnswers,imageCdnUrl:e.imageCdnUrl,showStudentDetails:!0,anonymisedUserName:j,className:S,showFeedback:!0,reportsStyling:!0,responseComponentClass:"mx-n2"}):t.jsx(de,{interaction:e.interaction,studentResults:o,markedStatus:W(e.interaction.id,o,e.markedAnswers),markInteraction:e.addMarkedAnswers,imageCdnUrl:e.imageCdnUrl,showStudentDetails:!0,anonymisedUserName:j,className:S,showFeedback:!0})},b)})}),e.reportsStyling&&!!r.length&&t.jsx("div",{className:"mt-2",children:t.jsx(B,{submit:e.submitMarkedAnswers,disabled:!i})})]})]})}function Ge(e){const s=n=>n?n.split(/({\d+})/).map((r,i)=>{const l=r.match(/{(\d+)}/);if(l){const c=l[1],a=e.interaction.actionableItems.find(u=>+u.order==+c);if(a)return t.jsx("span",{className:"bg-white border border-gray-300 rounded p-1 lh-lg",children:a.name},i)}return r}):"";return t.jsx("div",{children:t.jsx("p",{className:"mb-0",children:s(e.interaction.data.sentence)})})}const Ye="_answerWidth_nmntd_10",$={answerWidth:Ye};function Xe(e){var n,r;return!((r=d.first((n=e.interaction)==null?void 0:n.actionableItems).data)!=null&&r.imageUrl)?t.jsx("ul",{className:`${$.answerWidth} list-unstyled row g-2`,children:e.interaction.actionableItems.map(i=>t.jsx("li",{className:"col-12",children:t.jsxs("div",{className:`${i.isCorrect?"bg-light-green border-green":"bg-light-red border-red"} rounded border py-1 px-2 m-0`,children:[t.jsxs("span",{className:"fw-semibold",children:[e.indexToLetter(i.order),". "]}),t.jsx("span",{children:i.name})]})},i.id))}):t.jsx("div",{className:$.answerWidth,children:t.jsx(ue,{interaction:e.interaction,size:"sm",showFeedback:!1,showCorrectnessIcons:!0,isDisplayOnly:!0})})}const Je="shared.questionTable";function Ze(e){var n;const s=(n=e.interaction.data)==null?void 0:n.suggestedResponse;return s?t.jsxs("div",{className:`${$.answerWidth} bg-light-blue rounded p-2 mb-2`,children:[t.jsx("div",{className:"d-flex justify-content-between",children:t.jsx("p",{className:"fw-semibold mb-2",children:t.jsx(x,{namespace:Je,phrase:"suggestedResponse"})})}),t.jsx("p",{className:"mb-0",children:s})]}):t.jsx(t.Fragment,{})}function et(e){return t.jsx("ul",{className:"list-unstyled d-flex gap-2",children:e.interaction.actionableItems.map(s=>t.jsxs("li",{className:`${s.isCorrect?"bg-light-green border-green":"bg-light-red border-red"} rounded border px-2 py-1 mb-2 w-50`,children:[t.jsxs("span",{className:"fw-semibold",children:[e.indexToLetter(s.order),". "]}),t.jsx("span",{children:s.name})]},s.id))})}function tt(e){function s(){switch(e.interaction.typeId){case g.MultipleChoice:return t.jsx(Xe,{interaction:e.interaction,indexToLetter:F});case g.TrueOrFalse:return t.jsx(et,{interaction:e.interaction,indexToLetter:F});case g.ShortAnswer:return t.jsx(Ze,{interaction:e.interaction});case g.MissingWord:return t.jsx(Ge,{interaction:e.interaction});default:return null}}const n=s();return n?t.jsx("div",{className:"w-100 mt-3",children:n}):t.jsx(t.Fragment,{})}const st="shared.questionTable",z=h.encloseNamespace(st);function nt(e,s,n){const r=e.cells.find(l=>l.column.id===n).value,i=s.cells.find(l=>l.column.id===n).value;return r.awaitingMarking?-1:i.awaitingMarking||r.percentCorrect>=i.percentCorrect?1:-1}function P(e){return t.jsx("div",{className:`d-flex ${e.className??""}`,children:e.children})}function T(e){return t.jsx(P,{className:e.column.isSorted&&"fw-bold",children:z(e.phraseKey)})}function rt(e){return[{Header:({column:s})=>t.jsx(T,{column:s,phraseKey:"#"}),accessor:"questionNumber",id:"index",Cell:({row:{original:{questionNumber:s}}})=>t.jsxs(P,{children:[s+1,"."]}),width:15,disableSortBy:!0},{Header:({column:s})=>t.jsx(T,{column:s,phraseKey:"question"}),accessor:"data",Cell:({row:{original:s},initialState:{selectedRowIds:n}})=>{const r=n==null?void 0:n[s==null?void 0:s.id];return t.jsxs(P,{className:"flex-column",children:[t.jsx("div",{className:`${r?"":"clamp-1"} pe-2`,children:t.jsx(_,{interaction:s,containerClassName:"d-flex"})}),e&&r&&t.jsx(tt,{interaction:s})]})},disableSortBy:!0},{Header:({column:s})=>t.jsx(T,{column:s,phraseKey:"score"}),accessor:"resultsSummary",id:"correctlyAnswered",Cell:({value:{percentCorrect:s,awaitingMarking:n}})=>n?t.jsx(be,{title:z("markingRequired"),className:"flex-grow-1",tooltipClassName:"d-block",showLabel:!0}):t.jsx(je,{percentage:s,layout:Ie.LabelBefore}),width:60,sortDescFirst:!0,sortType:nt}]}function at(e,s,n,r){return C.useMemo(()=>{const i=he(e),l=i.reduce((a,u,o)=>({...a,[u.id]:o}),{}),c=i.map(a=>({...a,questionNumber:l[a.id],resultsSummary:fe(a,s)}));if((r==null?void 0:r.id)==="correctlyAnswered"){const a=d.sortBy(c,u=>u.resultsSummary.awaitingMarking?-1:u.resultsSummary.percentCorrect);return r.desc?a.reverse():a}return c},[n,r])}function F(e){return String.fromCharCode(e+65)}const it="shared.questionTable",f=h.encloseNamespace(it);function ct(e,s){const n=e.actionableItems.map((r,i)=>({id:r.id,label:e.typeId===g.MultipleChoice?F(i):r.name,isCorrect:r.isCorrect,count:0}));return s.students.forEach(r=>{const i=d.last(r.results).attempts,l=d.findWhere(i,{id:e.id});l&&l.answers.forEach(c=>{const a=d.findWhere(n,{id:c.id});a&&a.count++})}),n}function lt(e,s){const n=e.actionableItems.map(r=>({id:r.id,label:r.name,isCorrect:r.isCorrect,count:0}));return n.push({label:f("incorrect"),count:0,isCorrect:!1}),s.students.forEach(r=>{const i=d.last(r.results).attempts,l=d.findWhere(i,{id:e.id});l&&l.answers.forEach(c=>{const a=d.findWhere(n,{id:c.id});if(a&&c.status===N.Correct)a.count++;else{const u=d.findWhere(n,{label:f("incorrect")});u.count++}})}),n}function ot(e,s){const n=[{label:f("correct"),isCorrect:!0,count:0},{label:f("incorrect"),isCorrect:!1,count:0}];return s.students.forEach(r=>{const i=d.last(r.results).attempts,l=d.findWhere(i,{id:e.id});l&&l.answers.forEach(c=>{if(c.status===N.Correct){const a=d.findWhere(n,{label:f("correct")});a.count++}if(c.status===N.Incorrect){const a=d.findWhere(n,{label:f("incorrect")});a.count++}if(c.status===N.PendingReview){let a=d.findWhere(n,{label:f("pending")});a||(n.push({label:f("pending"),count:0,isCorrect:!1}),a=d.findWhere(n,{label:f("pending")})),a.count++}})}),n}function dt(e){return t.jsx("svg",{...e,children:t.jsx("path",{fill:"currentColor",d:"M12 4c-3.308 0-6 2.692-6 6 0 1.923.916 3.716 2.462 4.846v3.77c0 .763.62 1.384 1.384 1.384h4.308c.763 0 1.385-.621 1.385-1.385v-3.77A6 6 0 0 0 18 10c0-3.308-2.692-6-6-6m.461 8a2.62 2.62 0 0 1 2.154-2.575v.113a2.62 2.62 0 0 1-2.154 2.575zm-.922.113a2.62 2.62 0 0 1-2.154-2.575v-.113A2.62 2.62 0 0 1 11.539 12zm3.076 4.656v.616h-5.23v-.616zm-.461 2.308H9.846a.46.46 0 0 1-.461-.462v-.307h5.23v.307a.46.46 0 0 1-.461.462m.666-4.855a.46.46 0 0 0-.205.384v1.24h-2.154v-2.8a3.544 3.544 0 0 0 3.078-3.508v-.615a.46.46 0 0 0-.462-.461A3.54 3.54 0 0 0 12 10.254a3.54 3.54 0 0 0-3.077-1.792.46.46 0 0 0-.461.461v.615a3.544 3.544 0 0 0 3.077 3.509v2.8H9.385v-1.241a.46.46 0 0 0-.205-.384A5.07 5.07 0 0 1 6.923 10c0-2.8 2.278-5.077 5.077-5.077S17.077 7.201 17.077 10a5.07 5.07 0 0 1-2.257 4.222"})})}const K="shared.questionTable",ut=h.encloseNamespace(K);function mt(e){const s=r(),n=i();function r(){if(!e.interaction||!e.results)return;let c;switch(e.interaction.typeId){case g.ShortAnswer:case g.Illustration:c=ot;break;case g.MissingWord:c=lt;break;case g.MultipleChoice:case g.TrueOrFalse:c=ct;break}return c(e.interaction,e.results)}function i(){return s==null?void 0:s.reduce((c,a)=>a.count>c?a.count:c,0)}function l(c){const a="border rounded me-2";return c.count?c.label===ut("pending")?`${a} border-blue bg-light-blue`:c.isCorrect?`${a} border-green bg-light-green`:`${a} border-red bg-light-red`:`${a} border bg-light px-1`}return t.jsxs("div",{className:"border border rounded p-3 mb-3",children:[t.jsxs("div",{className:"d-flex align-items-center gap-2 mb-3",children:[t.jsx("div",{className:"rounded-circle bg-light-teal text-teal",children:t.jsx(Z,{svg:dt,size:ee.Large})}),t.jsx("h2",{className:"h6 mb-0",children:t.jsx("span",{children:t.jsx(x,{namespace:K,phrase:"questionSummary"})})})]}),t.jsxs("div",{className:"d-flex gap-2",children:[t.jsx("div",{className:"max-w-25",children:s==null?void 0:s.map(c=>t.jsx("p",{className:"text-truncate mb-2",children:c.label},c.label))}),t.jsx("div",{className:"flex-grow-1",children:s==null?void 0:s.map((c,a)=>t.jsxs("div",{className:"d-flex mb-2",children:[t.jsx("div",{className:l(c),style:{width:`${c.count/n*100}%`,height:20}}),t.jsx("span",{children:c.count})]},`${e.interaction.id}${a}`))})]})]})}const gt="shared.selectedInteractionEmptyState",ht=h.encloseNamespace(gt);function ft(e){return t.jsxs(m,{className:"rounded h-100 bg-white justify-content-center py-4",children:[t.jsx(m.Image,{src:e.emptyStateUrl,size:"small"}),t.jsx(m.Info,{className:"w-100",children:ht("emptyStateText")})]})}function xt(e,s){switch(e){case"score_desc":return[{id:s,desc:!0}];case"score_asc":return[{id:s,desc:!1}];default:return[]}}function bt(e){var c;const[s,n]=C.useState(xt(e.sortBy,"correctlyAnswered")),r=at(e.interactive,e.results,e.refreshTable,d.first(s)),i=e.selectedInteractionId&&xe(e.interactive,e.selectedInteractionId);function l({original:a}){Pe.preventScrollTop(),te.updateParams({interactionId:a.id},{merge:!0})}return t.jsxs("div",{className:"row",children:[t.jsx("div",{className:"col-6 flex-grow-1",children:t.jsx(Se,{columns:rt(e.showAnswersInTable),data:r,theme:e.theme,onSelectRow:l,initialSelectedRowIds:i?[i.id]:null,getRowId:a=>a.id,enableSort:!0,manualSort:!0,onSort:n,initialSortBy:s,emptyState:t.jsx(qe,{emptyStateImageUrl:e.emptyQuestionsStateImageUrl})},e.selectedInteractionId)}),t.jsxs("div",{className:"col-6 d-flex flex-column",children:[!e.reportsStyling&&e.selectedInteractionId&&!!((c=e.results.students)!=null&&c.length)&&t.jsx(mt,{interaction:i,results:e.results}),t.jsxs("div",{className:`rounded flex-grow-1 ${e.reportsStyling?"":"border"}`,children:[!!i&&t.jsx(Ke,{interaction:i,results:e.results,markedAnswers:e.markedAnswers,addMarkedAnswers:e.addMarkedAnswers,submitMarkedAnswers:e.submitMarkedAnswers,imageCdnUrl:e.imageCdnUrl,anonymiseUsers:e.anonymiseUsers,emptyStateImageUrl:e.emptyResponseStateImageUrl,markingRequiredImageUrl:e.markingRequiredImageUrl,correctImageUrl:e.correctImageUrl,incorrectImageUrl:e.incorrectImageUrl,skippedImageUrl:e.skippedImageUrl,reportsStyling:e.reportsStyling,isDemo:e.isDemo}),!i&&t.jsx(ft,{emptyStateUrl:e.selectQuestionImageUrl})]})]})]})}const jt="shared.confirmationPopup",Q=h.encloseNamespace(jt);G.defaultProps={confirmButtonVariant:"primary",cancelButtonVariant:"link"};function G(e){const[s,n]=se.useState(!1);return t.jsx(ne,{title:e.title,closePopup:e.closePopup,children:t.jsxs(t.Fragment,{children:[e.children,t.jsxs(M,{children:[t.jsx(M.Cancel,{onClick:e.closePopup,variant:e.cancelButtonVariant,text:e.cancelButtonText||Q("cancel")}),t.jsx(M.Submit,{onClick:()=>{n(!0),e.onClickConfirm()},text:e.confirmButtonText||Q("confirm"),variant:e.confirmButtonVariant,showSpinner:s,disabled:e.disabledConfirmButton})]})]})})}const It="_row_1ygni_1",St={row:It},wt={table:"bg-white rounded pb-2",header:"border-bottom px-2",headerCell:"p-2 d-flex align-items-center",cell:"px-2",row:`m-2 rounded py-1 ${St.row}`,selectedRow:"bg-light",sortIndicator:"ms-2"},yt="interactives.interactiveQuestionList",k=h.encloseNamespace(yt);function ts(e){var w,y,E,q,L;const[s]=re(ce.ANONYMISE_USERS),[n,r]=C.useState(!1),i=A(H.interactiveMetadata(e.interactiveMetadataId)),l=A((w=i.data)!=null&&w.interactiveId?H.interactive(i.data.interactiveId):null),c=ae(),a=we(e.interactiveMetadataId,c),u=A(le.config());ie({title:k("pageTitle",{interactive:(y=i.data)==null?void 0:y.name})}),Me((E=i.data)==null?void 0:E.name),Ne(Ce(i.data)),$e(e.interactiveMetadataId),Ue(a),Ae(e.interactiveMetadataId),ye(i),ke(i),pe([l,a,u]);const o=Te(a),{markedAnswers:b,addMarkedAnswers:j,submitMarkedAnswers:I}=me((q=l.data)==null?void 0:q.id,(L=i.data)==null?void 0:L.id,()=>r(!1)),S=!!l.data&&!!a.data&&!!u.data;return t.jsxs(t.Fragment,{children:[t.jsxs("div",{children:[t.jsx(Re,{interactiveMetadataId:e.interactiveMetadataId}),S?t.jsx(bt,{emptyResponseStateImageUrl:R.EmptyStates.Interactives.NoResponses,emptyQuestionsStateImageUrl:R.EmptyStates.Interactives.NoQuestions,selectQuestionImageUrl:R.EmptyStates.Interactives.NoData,anonymiseUsers:s,interactive:l.data,results:a.data,markedAnswers:b,addMarkedAnswers:j,submitMarkedAnswers:()=>r(!0),imageCdnUrl:u.data.imageCdnUrl,selectedInteractionId:e.interactionId,refreshTable:o,theme:wt,reportsStyling:!0}):t.jsx("div",{className:"row",children:t.jsx("div",{className:"col-6",children:t.jsx(ve,{})})})]}),n&&t.jsx(G,{title:k("markPopupTitle",{smartCount:Object.keys(b).length??0}),closePopup:()=>r(!1),confirmButtonText:k("submit"),confirmButtonVariant:"dark",onClickConfirm:I,children:t.jsx("p",{children:k("markPopupBody")})})]})}export{ts as InteractiveQuestionListView};
|
|
2
|
+
//# sourceMappingURL=C_Famtl1.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"C_Famtl1.chunk.js","sources":["../../../../libs/common/src/backbone/utils/ScrollHelper.ts","../../../../libs/shared/src/apps/analytics/components/questions-list/interaction-questions-empty-state/InteractionQuestionsEmptyState.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseListFilters.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseListHeader.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/submit-marked-answers/SubmitMarkedAnswers.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseList.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableMissingWord.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableMultipleChoice.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableShortAnswer.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableTrueOrFalse.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/question-table/QuestionTableUtils.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/question-table/question-results-summary/QuestionResultsSummaryUtils.ts","../../../../libs/shared/src/images/svg/objects/LightbulbSvg.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/question-table/question-results-summary/QuestionResultsSummary.tsx","../../../../libs/shared/src/apps/analytics/components/questions-list/selected-interaction-empty-state/SelectedInteractionEmptyState.tsx","../../../../libs/shared/src/apps/analytics/utils/StudentTableUtils.ts","../../../../libs/shared/src/apps/analytics/components/questions-list/question-table/QuestionTable.tsx","../../../../libs/shared/src/components/confirmation-popup/ConfirmationPopup.tsx","../../src/apps/interactives/views/interactive-question-list/InteractiveQuestionListView.tsx"],"sourcesContent":["import { Radio } from 'backbone';\n\nimport { CommonChannels } from '../constants/CommonChannels';\n\nexport const ScrollHelper = {\n // Will prevent scrolling to the top of the page when applinks are triggered\n preventScrollTop(): void {\n Radio.channel(CommonChannels.SHELL).trigger('prevent:scroll:top');\n }\n};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nconst namespace = 'shared.interactionQuestionsEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractionQuestionsEmptyStateProps {\n emptyStateImageUrl: string;\n}\n\nexport function InteractionQuestionsEmptyState(props: InteractionQuestionsEmptyStateProps): JSX.Element {\n return (\n <EmptyState className='rounded h-100 bg-white justify-content-center py-4'>\n <EmptyState.Image\n src={props.emptyStateImageUrl}\n size='small'\n />\n <EmptyState.Info className='w-100'>\n {getPhrase('emptyStateText')}\n </EmptyState.Info>\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'shared.interactionResponseList';\n\nexport type InteractionResponseFilterType = 'marking_required' | 'correct' | 'incorrect' | 'skipped';\n\ninterface InteractionResponseListFiltersEmptyStatesProps {\n filter: InteractionResponseFilterType;\n markingRequiredImageUrl: string;\n correctImageUrl: string;\n incorrectImageUrl: string;\n skippedImageUrl: string;\n}\n\nexport function InteractionResponseListFiltersEmptyStates(props: InteractionResponseListFiltersEmptyStatesProps) {\n function getFilterEmptyStateImageUrl() {\n switch (props.filter) {\n case 'correct': return props.correctImageUrl;\n case 'incorrect': return props.incorrectImageUrl;\n case 'marking_required': return props.markingRequiredImageUrl;\n case 'skipped': return props.skippedImageUrl;\n }\n }\n\n function getFilterEmptyStatePhrase() {\n switch (props.filter) {\n case 'correct': return 'correctEmptyState';\n case 'incorrect': return 'incorrectEmptyState';\n case 'marking_required': return 'markingRequiredEmptyState';\n case 'skipped': return 'skippedEmptyState';\n }\n }\n\n return (\n <>\n <EmptyState className='m-4'>\n <EmptyState.Image src={getFilterEmptyStateImageUrl()} className='w-25 h-auto' />\n <EmptyState.Info>\n <Text namespace={namespace} phrase={getFilterEmptyStatePhrase()} />\n </EmptyState.Info>\n </EmptyState>\n </>\n );\n}\n\ninterface InteractionResponseListFiltersProps {\n filter: InteractionResponseFilterType;\n toggleFilter: (filter: InteractionResponseFilterType) => void\n}\n\nexport function InteractionResponseListFilters(props: InteractionResponseListFiltersProps) {\n function isFilterSelected(filterButton: InteractionResponseFilterType) {\n return filterButton === props.filter;\n }\n\n function getFilterClassName(filterButton: InteractionResponseFilterType) {\n return `rounded-pill bg-light ${isFilterSelected(filterButton) ? 'bg-dark text-white' : ''}`;\n }\n\n return (\n\n <div className='d-flex gap-2 m-3'>\n <button className={getFilterClassName('marking_required')} onClick={() => props.toggleFilter('marking_required')}>\n <Text namespace={namespace} phrase='markingRequired' />\n </button>\n <button className={getFilterClassName('correct')} onClick={() => props.toggleFilter('correct')}>\n <Text namespace={namespace} phrase='correct' />\n </button>\n <button className={getFilterClassName('incorrect')} onClick={() => props.toggleFilter('incorrect')}>\n <Text namespace={namespace} phrase='incorrect' />\n </button>\n <button className={getFilterClassName('skipped')} onClick={() => props.toggleFilter('skipped')}>\n <Text namespace={namespace} phrase='skipped' />\n </button>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InteractionLabel } from 'libs/shared/components/interactive-questions/InteractionLabel';\nimport { Interaction } from 'libs/shared/interfaces';\n\nconst namespace = 'interactives.interactionResponseListHeader';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractionResponseListHeaderProps {\n interaction: Interaction;\n}\n\nexport function InteractionResponseListHeader(props: InteractionResponseListHeaderProps): JSX.Element {\n const suggestedResponse = props.interaction.data?.suggestedResponse;\n\n return (\n <div className='rounded bg-white'>\n <div className='p-2 position-relative'>\n <div className='d-flex'>\n <InteractionLabel\n interaction={props.interaction}\n iconClassName='flex-shrink-0'\n />\n </div>\n {!!suggestedResponse &&\n <div className='mt-2'>\n <strong>{getPhrase('suggestedResponse')}</strong>\n <p className='m-0'>{suggestedResponse}</p>\n </div>\n }\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'shared.submitMarkedAnswers';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SubmitMarkedAnswersProps {\n submit: () => void;\n disabled: boolean\n}\n\nexport function SubmitMarkedAnswers(props: SubmitMarkedAnswersProps): JSX.Element {\n return (\n <div className='d-flex justify-content-end'>\n <button\n className='btn btn-outline-dark'\n onClick={props.submit}\n disabled={props.disabled}\n >\n {getPhrase('submitAnswers')}\n </button>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { InteractionResponseItem } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/InteractionResponseItem';\nimport { InteractionResponseFilterType, InteractionResponseListFilters, InteractionResponseListFiltersEmptyStates } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseListFilters';\nimport { InteractionResponseListHeader } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseListHeader';\nimport { SubmitMarkedAnswers } from 'libs/shared/apps/analytics/components/questions-list/submit-marked-answers/SubmitMarkedAnswers';\nimport { MarkedAnswerHash } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { anonymiseUserName } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { getMarkedStatus } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { InteractionResponse } from 'libs/shared/components/interaction-response/InteractionResponse';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, InteractiveResultSet, StudentAnswer, StudentResults } from 'libs/shared/interfaces';\nimport { InteractiveCorrectnessHelper } from 'libs/shared/utils/InteractiveCorrectnessHelper';\nimport { getStudentResult } from 'libs/shared/utils/InteractiveHelper';\n\nimport styles from './interaction-response-list.module.scss';\n\nconst namespace = 'shared.interactionResponseList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getResponsesToMark(\n interaction: Interaction,\n studentResults: StudentResults[]\n): HashObject {\n const responsesToMark = studentResults.filter(s => {\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(\n interaction,\n getStudentResult(s)\n );\n return correctness === InteractionCorrectness.AwaitingMarking;\n });\n\n return responsesToMark.reduce((acc, s) => ({\n ...acc,\n [s.user?.id || s.user?.sessionId]: true\n }), {});\n}\n\ninterface InteractionResponseListProps {\n interaction: Interaction\n results: InteractiveResultSet;\n markedAnswers: MarkedAnswerHash;\n addMarkedAnswers: (answer: StudentAnswer[], status: InteractiveAnswerStatus) => void;\n submitMarkedAnswers: () => void;\n imageCdnUrl: string;\n anonymiseUsers: boolean;\n reportsStyling?: boolean;\n emptyStateImageUrl: string;\n markingRequiredImageUrl: string;\n correctImageUrl: string;\n incorrectImageUrl: string;\n skippedImageUrl: string;\n isDemo?: boolean;\n}\n\nexport function InteractionResponseList(props: InteractionResponseListProps): JSX.Element {\n const [ filter, setFilter ] = React.useState<InteractionResponseFilterType>();\n\n const responsesToMark = getResponsesToMark(props.interaction, props.results.students);\n const numMarkedAnswers = Object.keys(props.markedAnswers).length;\n\n if (!props.results.students?.length)\n return (\n <div className='d-flex flex-column h-100'>\n <EmptyState className='bg-white rounded mt-2 py-5 flex-grow-1 justify-content-center'>\n <EmptyState.Image src={props.emptyStateImageUrl} size='small' />\n <EmptyState.Heading>\n {getPhrase('emptyStateHeading')}\n </EmptyState.Heading>\n <EmptyState.Info className='w-100'>\n {getPhrase('emptyStateDescription')}\n </EmptyState.Info>\n </EmptyState>\n </div>\n );\n\n\n function toggleFilter(selectedFilter: InteractionResponseFilterType) {\n setFilter(filter === selectedFilter ? null : selectedFilter);\n }\n\n function filterStudentResults() {\n return props.results.students.filter(s => {\n const result = getStudentResult(s);\n\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(props.interaction, result);\n\n const filterMap = {\n correct: InteractionCorrectness.Correct,\n incorrect: InteractionCorrectness.Incorrect,\n marking_required: InteractionCorrectness.AwaitingMarking,\n skipped: InteractionCorrectness.UnAnswered\n };\n\n return !filter || (filter in filterMap && correctness === filterMap[filter]);\n });\n }\n\n const filteredStudentResults = filterStudentResults();\n\n return (\n <>\n {props.reportsStyling && <InteractionResponseListHeader interaction={props.interaction} />}\n <div className={props.reportsStyling\n ? 'd-flex justify-content-end'\n : 'd-flex align-items-center justify-content-between border-bottom px-3 py-2'\n }>\n {!props.reportsStyling && <p className='fw-semibold mb-0'><Text namespace={namespace} phrase='studentAnswers' /></p>}\n {!!Object.keys(responsesToMark).length &&\n <Tooltip id='submitAnswers' title={getPhrase('demoOnly')} spanHack={props.isDemo}>\n <div className={`${props.isDemo ? 'pointer-events-none' : ''} ${props.reportsStyling ? 'mt-2' : ''}`}>\n <SubmitMarkedAnswers submit={props.submitMarkedAnswers} disabled={!numMarkedAnswers} />\n </div>\n </Tooltip>\n }\n </div>\n <>\n {!props.reportsStyling && <InteractionResponseListFilters filter={filter} toggleFilter={toggleFilter} />}\n\n {!props.reportsStyling && !filteredStudentResults.length && filter && (\n <InteractionResponseListFiltersEmptyStates\n filter={filter}\n markingRequiredImageUrl={props.markingRequiredImageUrl}\n correctImageUrl={props.correctImageUrl}\n incorrectImageUrl={props.incorrectImageUrl}\n skippedImageUrl={props.skippedImageUrl}\n />\n )}\n \n {filteredStudentResults && (\n <ul className='list-unstyled mb-0'>\n {filteredStudentResults.map((s, idx) => {\n const anonymisedUserName = anonymiseUserName(s.user, props.anonymiseUsers);\n const markingRequired = responsesToMark[s.user?.id || s.user?.sessionId];\n\n let className = props.reportsStyling ? 'bg-white p-2' : 'bg-white px-3 pt-3 pb-2';\n\n if (markingRequired)\n className += ` ${styles.awaitingMarking} my-1`;\n\n return (\n <li key={idx} className={props.reportsStyling ? '' : 'border-bottom'}>\n {props.reportsStyling ? (\n <InteractionResponse\n interaction={props.interaction}\n studentResults={s}\n markedStatus={getMarkedStatus(props.interaction.id, s, props.markedAnswers)}\n markInteraction={props.addMarkedAnswers}\n imageCdnUrl={props.imageCdnUrl}\n showStudentDetails\n anonymisedUserName={anonymisedUserName}\n className={className}\n showFeedback\n reportsStyling\n responseComponentClass='mx-n2'\n />\n ) : (\n <InteractionResponseItem\n interaction={props.interaction}\n studentResults={s}\n markedStatus={getMarkedStatus(props.interaction.id, s, props.markedAnswers)}\n markInteraction={props.addMarkedAnswers}\n imageCdnUrl={props.imageCdnUrl}\n showStudentDetails\n anonymisedUserName={anonymisedUserName}\n className={className}\n showFeedback\n />\n )}\n </li>\n );\n })}\n </ul>\n )}\n {props.reportsStyling && !!responsesToMark.length &&\n <div className='mt-2'>\n <SubmitMarkedAnswers submit={props.submitMarkedAnswers} disabled={!numMarkedAnswers} />\n </div>\n }\n </>\n </>\n );\n}","import React from 'react';\n\nimport { QuestionTableAnswersProps } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers';\n\nexport function QuestionTableMissingWord(props: QuestionTableAnswersProps) {\n const replacePlaceholders = (str: string) => {\n if (!str) return '';\n\n return str.split(/({\\d+})/).map((part, index) => {\n const match = part.match(/{(\\d+)}/);\n\n if (match) {\n const key = match[1];\n\n const replacement = props.interaction.actionableItems.find(answer => +answer.order === +key);\n\n\n if (replacement) {\n return <span className='bg-white border border-gray-300 rounded p-1 lh-lg' key={index}>{replacement.name}</span>;\n }\n }\n\n return part;\n });\n };\n\n return (\n <div>\n <p className='mb-0'>{replacePlaceholders(props.interaction.data.sentence)}</p>\n </div>\n );\n}","import React from 'react';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { QuestionTableAnswersProps } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers';\nimport { MultipleChoiceInteractionAnswers } from 'libs/shared/components/interaction-answers/multiple-choice/MultipleChoiceInteractionAnswers';\n\nimport styles from './question-table-answers.module.scss';\n\nexport function QuestionTableMultipleChoice(props: QuestionTableAnswersProps) {\n const hasImages = !!ArrayHelper.first(props.interaction?.actionableItems).data?.imageUrl;\n\n if (!hasImages) {\n return (\n <ul className={`${styles.answerWidth} list-unstyled row g-2`}>\n {props.interaction.actionableItems.map(option => {\n return (\n <li key={option.id} className='col-12'>\n <div className={`${option.isCorrect ? 'bg-light-green border-green' : 'bg-light-red border-red'} rounded border py-1 px-2 m-0`}>\n <span className='fw-semibold'>{props.indexToLetter(option.order)}. </span>\n <span>{option.name}</span>\n </div>\n </li>\n );\n })}\n </ul>\n );\n }\n\n return (\n <div className={styles.answerWidth}>\n <MultipleChoiceInteractionAnswers\n interaction={props.interaction}\n size='sm'\n showFeedback={false}\n showCorrectnessIcons\n isDisplayOnly\n />\n </div>\n );\n}","import React from 'react';\n\nimport { QuestionTableAnswersProps } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport styles from './question-table-answers.module.scss';\n\nconst namespace = 'shared.questionTable';\n\nexport function QuestionTableShortAnswer(props: QuestionTableAnswersProps) {\n const suggestedResponse = props.interaction.data?.suggestedResponse;\n\n if (!suggestedResponse) return <></>;\n\n return (\n <div className={`${styles.answerWidth} bg-light-blue rounded p-2 mb-2`}>\n <div className='d-flex justify-content-between'>\n <p className='fw-semibold mb-2'>\n <Text namespace={namespace} phrase='suggestedResponse' />\n </p>\n </div>\n\n <p className='mb-0'>{suggestedResponse}</p>\n </div>\n );\n}","import React from 'react';\n\nimport { QuestionTableAnswersProps } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers';\n\n\nexport function QuestionTableTrueOrFalse(props: QuestionTableAnswersProps) {\n return (\n <ul className='list-unstyled d-flex gap-2'>\n {props.interaction.actionableItems.map(option => {\n return (\n <li\n key={option.id}\n className={`${option.isCorrect ? 'bg-light-green border-green' : 'bg-light-red border-red'} rounded border px-2 py-1 mb-2 w-50`}\n >\n <span className='fw-semibold'>{props.indexToLetter(option.order)}. </span>\n <span>{option.name}</span>\n </li>\n );\n })}\n </ul>\n );\n}","import React from 'react';\n\nimport { QuestionTableMissingWord } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableMissingWord';\nimport { QuestionTableMultipleChoice } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableMultipleChoice';\nimport { QuestionTableShortAnswer } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableShortAnswer';\nimport { QuestionTableTrueOrFalse } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableTrueOrFalse';\nimport { indexToLetter } from 'libs/shared/apps/analytics/components/questions-list/question-table/QuestionTableUtils';\nimport { Interaction, InteractionTypeId } from 'libs/shared/interfaces';\n\nexport interface QuestionTableAnswersProps {\n interaction: Interaction;\n indexToLetter?: (index: number) => string;\n}\n\nexport function QuestionTableAnswers(props: QuestionTableAnswersProps) {\n function getQuestionTableAnswerComponent(): JSX.Element {\n switch (props.interaction.typeId) {\n case InteractionTypeId.MultipleChoice:\n return <QuestionTableMultipleChoice interaction={props.interaction} indexToLetter={indexToLetter} />;\n case InteractionTypeId.TrueOrFalse:\n return <QuestionTableTrueOrFalse interaction={props.interaction} indexToLetter={indexToLetter} />;\n case InteractionTypeId.ShortAnswer:\n return <QuestionTableShortAnswer interaction={props.interaction} />;\n case InteractionTypeId.MissingWord:\n return <QuestionTableMissingWord interaction={props.interaction} />;\n default: return null;\n }\n }\n\n const QuestionTableAnswerComponent = getQuestionTableAnswerComponent();\n\n if (!QuestionTableAnswerComponent) return <></>;\n\n return (\n <div className='w-100 mt-3'>\n {QuestionTableAnswerComponent}\n </div>\n );\n}","import React from 'react';\nimport { Column, ColumnInstance, Row, SortingRule } from 'react-table';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { PendingIndicator } from 'libs/shared/apps/analytics/components/pending-indicator/PendingIndicator';\nimport { QuestionTableAnswers } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers';\nimport { InteractionWithResultsSummary } from 'libs/shared/apps/analytics/interfaces/InteractionWithResultsSummary';\nimport { getInteractionResultsSummary } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { InteractionLabel } from 'libs/shared/components/interactive-questions/InteractionLabel';\nimport { PercentageIndicator, PercentageIndicatorLayout } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { Interactive, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { getInteractions } from 'libs/shared/utils/InteractiveHelper';\n\nconst namespace = 'shared.questionTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction sortScore(\n rowA: Row<InteractionWithResultsSummary>,\n rowB: Row<InteractionWithResultsSummary>,\n columnId: string\n): 1 | -1 {\n const cellA = rowA.cells.find(cell => cell.column.id === columnId).value;\n const cellB = rowB.cells.find(cell => cell.column.id === columnId).value;\n\n if (cellA.awaitingMarking)\n return -1;\n\n if (cellB.awaitingMarking)\n return 1;\n\n return cellA.percentCorrect >= cellB.percentCorrect\n ? 1\n : -1;\n}\ninterface CellWrapperProps {\n className?: string;\n}\n\nfunction CellWrapper(props: React.PropsWithChildren<CellWrapperProps>): JSX.Element {\n return (\n <div className={`d-flex ${props.className ?? ''}`}>\n {props.children}\n </div>\n );\n}\n\ninterface HeaderCellProps {\n column: ColumnInstance<InteractionWithResultsSummary>;\n phraseKey: string;\n}\n\nfunction HeaderCell(props: HeaderCellProps): JSX.Element {\n return (\n <CellWrapper className={props.column.isSorted && 'fw-bold'}>\n {getPhrase(props.phraseKey)}\n </CellWrapper>\n );\n}\n\nexport function getColumns(\n showAnswersInTable: boolean\n): Column<InteractionWithResultsSummary>[] {\n return [\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='#' />,\n accessor: 'questionNumber',\n id: 'index',\n Cell: ({ row: { original: { questionNumber } } }) => {\n return <CellWrapper>{questionNumber + 1}.</CellWrapper>;\n },\n width: 15,\n disableSortBy: true\n },\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='question' />,\n accessor: 'data', // This isn't used but it's needed for the typings on row,\n Cell: ({ row: { original: interaction }, initialState: { selectedRowIds } }) => {\n const selectedRow = selectedRowIds?.[interaction?.id];\n\n return (\n <CellWrapper className='flex-column'>\n <div className={`${!selectedRow ? 'clamp-1' : ''} pe-2`}>\n <InteractionLabel interaction={interaction} containerClassName='d-flex' />\n </div>\n\n {showAnswersInTable && selectedRow && (\n <QuestionTableAnswers interaction={interaction} />\n )}\n </CellWrapper>\n );\n },\n disableSortBy: true\n },\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='score' />,\n accessor: 'resultsSummary',\n id: 'correctlyAnswered',\n Cell: ({ value: { percentCorrect, awaitingMarking } }) => {\n if (awaitingMarking) {\n return (\n <PendingIndicator\n title={getPhrase('markingRequired')}\n className='flex-grow-1'\n tooltipClassName='d-block'\n showLabel\n />\n );\n }\n\n return (\n <PercentageIndicator\n percentage={percentCorrect}\n layout={PercentageIndicatorLayout.LabelBefore}\n />\n );\n },\n width: 60,\n sortDescFirst: true,\n sortType: sortScore\n }\n ];\n}\n\n/**\n * Returns memoized table data. To trigger a recalculation, toggle the value of `refreshData`.\n */\nexport function useGetTableData(\n interactive: Interactive,\n results: InteractiveResultSet,\n refreshData: boolean,\n sortBy?: SortingRule<InteractionWithResultsSummary>\n): InteractionWithResultsSummary[] {\n return React.useMemo(() => {\n const flattenedInteractions = getInteractions(interactive);\n const questionNumbers: HashObject = flattenedInteractions.reduce((acc, interaction, index) => ({\n ...acc, [interaction.id]: index\n }), {});\n\n const interactions = flattenedInteractions.map(i => ({\n ...i,\n questionNumber: questionNumbers[i.id],\n resultsSummary: getInteractionResultsSummary(i, results)\n }));\n\n if (sortBy?.id === 'correctlyAnswered') {\n const sorted = ArrayHelper.sortBy(interactions, interaction => {\n if (interaction.resultsSummary.awaitingMarking)\n return -1;\n\n return interaction.resultsSummary.percentCorrect;\n });\n\n return sortBy.desc ? sorted.reverse() : sorted;\n }\n\n return interactions;\n }, [ refreshData, sortBy ]);\n}\n\nexport function indexToLetter(index: number) {\n return String.fromCharCode(index + 'A'.charCodeAt(0));\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { indexToLetter } from 'libs/shared/apps/analytics/components/questions-list/question-table/QuestionTableUtils';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, InteractionTypeId, InteractiveResultSet } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.questionTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface QuestionSummary {\n id?: string;\n count: number;\n isCorrect: boolean;\n label?: string | number;\n}\n\nexport function multipleChoiceSummary(\n interaction: Interaction,\n studentResults: InteractiveResultSet\n): QuestionSummary[] {\n const questionsSummary: QuestionSummary[] = interaction.actionableItems.map((item, i) => {\n return {\n id: item.id,\n label: interaction.typeId === InteractionTypeId.MultipleChoice ? indexToLetter(i) : item.name,\n isCorrect: item.isCorrect,\n count: 0\n };\n });\n\n studentResults.students.forEach(student => {\n const latestAttempts = ArrayHelper.last(student.results).attempts;\n const response = ArrayHelper.findWhere(latestAttempts, { id: interaction.id });\n\n if (!response) return;\n\n response.answers.forEach(answer => {\n const questionSummary = ArrayHelper.findWhere(questionsSummary, { id: answer.id });\n\n if (questionSummary)\n questionSummary.count++;\n });\n });\n\n return questionsSummary;\n}\n\nexport function missingWordSummary(interaction: Interaction, studentResults: InteractiveResultSet): QuestionSummary[] {\n const questionsSummary: QuestionSummary[] = interaction.actionableItems.map(item => {\n return {\n id: item.id,\n label: item.name,\n isCorrect: item.isCorrect,\n count: 0\n };\n });\n\n questionsSummary.push({\n label: getPhrase('incorrect'),\n count: 0,\n isCorrect: false\n });\n\n studentResults.students.forEach(student => {\n const latestAttempts = ArrayHelper.last(student.results).attempts;\n const response = ArrayHelper.findWhere(latestAttempts, { id: interaction.id });\n\n if (!response) return;\n\n response.answers.forEach(answer => {\n const questionSummary = ArrayHelper.findWhere(questionsSummary, { id: answer.id });\n\n if (questionSummary && answer.status === InteractiveAnswerStatus.Correct) {\n questionSummary.count++;\n } else {\n const incorrectSummary = ArrayHelper.findWhere(questionsSummary, { label: getPhrase('incorrect') });\n\n incorrectSummary.count++;\n }\n });\n });\n\n return questionsSummary;\n}\n\nexport function markedSummary(interaction: Interaction, studentResults: InteractiveResultSet): QuestionSummary[] {\n const questionsSummary: QuestionSummary[] = [\n {\n label: getPhrase('correct'),\n isCorrect: true,\n count: 0\n },\n {\n label: getPhrase('incorrect'),\n isCorrect: false,\n count: 0\n }\n ];\n\n studentResults.students.forEach(student => {\n const latestAttempts = ArrayHelper.last(student.results).attempts;\n const response = ArrayHelper.findWhere(latestAttempts, { id: interaction.id });\n\n if (!response) return;\n\n response.answers.forEach(answer => {\n if (answer.status === InteractiveAnswerStatus.Correct) {\n const correctSummary = ArrayHelper.findWhere(questionsSummary, { label: getPhrase('correct') });\n correctSummary.count++;\n }\n if (answer.status === InteractiveAnswerStatus.Incorrect) {\n const incorrectSummary = ArrayHelper.findWhere(questionsSummary, { label: getPhrase('incorrect') });\n incorrectSummary.count++;\n }\n if (answer.status === InteractiveAnswerStatus.PendingReview) {\n let pendingSummary = ArrayHelper.findWhere(questionsSummary, { label: getPhrase('pending') });\n\n if (!pendingSummary) {\n questionsSummary.push({\n label: getPhrase('pending'),\n count: 0,\n isCorrect: false\n });\n pendingSummary = ArrayHelper.findWhere(questionsSummary, { label: getPhrase('pending') });\n }\n\n pendingSummary.count++;\n }\n });\n });\n\n return questionsSummary;\n}","import React from 'react';\n\nexport function LightbulbSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M12 4c-3.308 0-6 2.692-6 6 0 1.923.916 3.716 2.462 4.846v3.77c0 .763.62 1.384 1.384 1.384h4.308c.763 0 1.385-.621 1.385-1.385v-3.77A6 6 0 0 0 18 10c0-3.308-2.692-6-6-6m.461 8a2.62 2.62 0 0 1 2.154-2.575v.113a2.62 2.62 0 0 1-2.154 2.575zm-.922.113a2.62 2.62 0 0 1-2.154-2.575v-.113A2.62 2.62 0 0 1 11.539 12zm3.076 4.656v.616h-5.23v-.616zm-.461 2.308H9.846a.46.46 0 0 1-.461-.462v-.307h5.23v.307a.46.46 0 0 1-.461.462m.666-4.855a.46.46 0 0 0-.205.384v1.24h-2.154v-2.8a3.544 3.544 0 0 0 3.078-3.508v-.615a.46.46 0 0 0-.462-.461A3.54 3.54 0 0 0 12 10.254a3.54 3.54 0 0 0-3.077-1.792.46.46 0 0 0-.461.461v.615a3.544 3.544 0 0 0 3.077 3.509v2.8H9.385v-1.241a.46.46 0 0 0-.205-.384A5.07 5.07 0 0 1 6.923 10c0-2.8 2.278-5.077 5.077-5.077S17.077 7.201 17.077 10a5.07 5.07 0 0 1-2.257 4.222'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { markedSummary, missingWordSummary, multipleChoiceSummary, QuestionSummary } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-results-summary/QuestionResultsSummaryUtils';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { LightbulbSvg } from 'libs/shared/images/svg/objects/LightbulbSvg';\nimport { Interaction, InteractionTypeId, InteractiveResultSet } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.questionTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface QuestionResultsSummaryProps {\n interaction: Interaction;\n results: InteractiveResultSet;\n}\n\nexport function QuestionResultsSummary(props: QuestionResultsSummaryProps) {\n const questionSummary = getQuestionSummary();\n const maxResponseCount = getMaxResponseCount();\n\n function getQuestionSummary(): QuestionSummary[] {\n if (!props.interaction || !props.results) return;\n\n let summaryMethod: (\n interaction: Interaction,\n results: InteractiveResultSet,\n interactionTypeId?: InteractionTypeId\n ) => QuestionSummary[];\n\n switch (props.interaction.typeId) {\n case InteractionTypeId.ShortAnswer:\n case InteractionTypeId.Illustration:\n summaryMethod = markedSummary;\n break;\n case InteractionTypeId.MissingWord:\n summaryMethod = missingWordSummary;\n break;\n case InteractionTypeId.MultipleChoice:\n case InteractionTypeId.TrueOrFalse:\n summaryMethod = multipleChoiceSummary;\n break;\n }\n\n return summaryMethod(props.interaction, props.results);\n }\n\n function getMaxResponseCount() {\n return questionSummary?.reduce((acc, summary) => summary.count > acc ? summary.count : acc, 0);\n }\n\n function getBarClassName(summary: QuestionSummary) {\n const className = 'border rounded me-2';\n\n if (!summary.count)\n return `${className} border bg-light px-1`;\n\n if (summary.label === getPhrase('pending'))\n return `${className} border-blue bg-light-blue`;\n\n if (summary.isCorrect)\n return `${className} border-green bg-light-green`;\n\n return `${className} border-red bg-light-red`;\n }\n\n return (\n <div className='border border rounded p-3 mb-3'>\n <div className='d-flex align-items-center gap-2 mb-3'>\n <div className='rounded-circle bg-light-teal text-teal'>\n <SvgContainer svg={LightbulbSvg} size={SvgContainerSize.Large} />\n </div>\n <h2 className='h6 mb-0'>\n <span><Text namespace={namespace} phrase='questionSummary' /></span>\n </h2>\n </div>\n <div className='d-flex gap-2'>\n <div className='max-w-25'>\n {questionSummary?.map(summary => {\n return (\n <p key={summary.label} className='text-truncate mb-2'>{summary.label}</p>\n );\n })}\n </div>\n <div className='flex-grow-1'>\n {questionSummary?.map((summary, i) => {\n return (\n <div key={`${props.interaction.id}${i}`} className='d-flex mb-2'>\n <div\n className={getBarClassName(summary)}\n style={{ width: `${(summary.count / maxResponseCount) * 100}%`, height: 20 }}>\n </div>\n <span>{summary.count}</span>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nconst namespace = 'shared.selectedInteractionEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SelectedInteractionEmptyStateProps {\n emptyStateUrl: string;\n}\n\nexport function SelectedInteractionEmptyState(props: SelectedInteractionEmptyStateProps): JSX.Element {\n return (\n <EmptyState className='rounded h-100 bg-white justify-content-center py-4'>\n <EmptyState.Image\n src={props.emptyStateUrl}\n size='small'\n />\n <EmptyState.Info className='w-100'>\n {getPhrase('emptyStateText')}\n </EmptyState.Info>\n </EmptyState>\n );\n}","import { SortingRule } from 'react-table';\n\nimport { ResultsSummary } from 'libs/shared/apps/analytics/interfaces/ResultsSummary';\nimport { ScoreThresholdInsights } from 'libs/shared/constants/ScoreThresholds';\n\nexport type SortStudentsBy = 'score_desc' | 'score_asc';\n\nexport function getSortStudents(sortBy: SortStudentsBy, id: string): SortingRule<any>[] {\n switch (sortBy) {\n case 'score_desc': return [{ id, desc: true }];\n case 'score_asc': return [{ id, desc: false }];\n default: return [];\n }\n}\n\nexport type FilterStudentsBy = 'not_completed' | 'marking_required' | 'helping_hand';\n\nexport function shouldFilterStudent(filter: FilterStudentsBy, summary: ResultsSummary): boolean {\n if (filter === 'marking_required' && !summary.awaitingMarking)\n return true;\n\n if (filter === 'helping_hand' && summary.percentCorrect >= ScoreThresholdInsights.HIGH)\n return true;\n\n if (filter === 'not_completed' && !summary.unanswered)\n return true;\n \n return false;\n}\n\n","import React from 'react';\nimport { Row, SortingRule } from 'react-table';\n\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { InteractionQuestionsEmptyState } from 'libs/shared/apps/analytics/components/questions-list/interaction-questions-empty-state/InteractionQuestionsEmptyState';\nimport { InteractionResponseList } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseList';\nimport { QuestionResultsSummary } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-results-summary/QuestionResultsSummary';\nimport { SelectedInteractionEmptyState } from 'libs/shared/apps/analytics/components/questions-list/selected-interaction-empty-state/SelectedInteractionEmptyState';\nimport { InteractionWithResultsSummary } from 'libs/shared/apps/analytics/interfaces/InteractionWithResultsSummary';\nimport { getInteractionById } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { getSortStudents, SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { Table, TableTheme } from 'libs/shared/components/table/Table';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interactive, InteractiveResultSet, StudentAnswer } from 'libs/shared/interfaces';\nimport { AppRouteHelper } from 'libs/shared/utils/AppRouteHelper';\n\nimport { getColumns, useGetTableData } from './QuestionTableUtils';\n\ninterface QuestionTableProps {\n interactive: Interactive;\n results: InteractiveResultSet;\n markedAnswers: { [id: string]: StudentAnswer };\n addMarkedAnswers: (answer: StudentAnswer[], status: InteractiveAnswerStatus) => void;\n submitMarkedAnswers: () => void;\n editSuggestedResponse?: () => void;\n imageCdnUrl: string;\n selectQuestionImageUrl: string;\n anonymiseUsers: boolean;\n sortBy?: SortStudentsBy;\n emptyResponseStateImageUrl: string;\n emptyQuestionsStateImageUrl: string;\n markingRequiredImageUrl?: string;\n correctImageUrl?: string;\n incorrectImageUrl?: string;\n skippedImageUrl?: string;\n\n /**\n * As the table data is memoized, it must be prompted to recalculate.\n * Toggle `refreshTable` to do so.\n */\n refreshTable: boolean;\n selectedInteractionId?: string;\n showAnswersInTable?: boolean;\n theme: TableTheme;\n reportsStyling?: boolean;\n isDemo?: boolean;\n}\n\nexport function QuestionTable(props: QuestionTableProps): JSX.Element {\n const [ sortBy, setSortBy ] = React.useState<SortingRule<InteractionWithResultsSummary>[]>(\n getSortStudents(props.sortBy, 'correctlyAnswered')\n );\n const data = useGetTableData(props.interactive, props.results, props.refreshTable, ArrayHelper.first(sortBy));\n\n const selectedInteraction = props.selectedInteractionId &&\n getInteractionById(props.interactive, props.selectedInteractionId);\n\n function onSelectRow({ original: interaction }: Row<InteractionWithResultsSummary>): void {\n ScrollHelper.preventScrollTop();\n\n AppRouteHelper.updateParams(\n { interactionId: interaction.id },\n { merge: true }\n );\n }\n\n return (\n <div className='row'>\n <div className='col-6 flex-grow-1'>\n <Table\n key={props.selectedInteractionId}\n columns={getColumns(props.showAnswersInTable)}\n data={data}\n theme={props.theme}\n onSelectRow={onSelectRow}\n initialSelectedRowIds={selectedInteraction ? [selectedInteraction.id] : null}\n getRowId={(row: InteractionWithResultsSummary) => row.id}\n enableSort\n manualSort\n onSort={setSortBy}\n initialSortBy={sortBy}\n emptyState={<InteractionQuestionsEmptyState emptyStateImageUrl={props.emptyQuestionsStateImageUrl} />}\n />\n </div>\n <div className='col-6 d-flex flex-column'>\n {!props.reportsStyling && props.selectedInteractionId && !!props.results.students?.length && (\n <QuestionResultsSummary\n interaction={selectedInteraction}\n results={props.results}\n />\n )}\n\n <div className={`rounded flex-grow-1 ${props.reportsStyling ? '' : 'border'}`}>\n {!!selectedInteraction &&\n <InteractionResponseList\n interaction={selectedInteraction}\n results={props.results}\n markedAnswers={props.markedAnswers}\n addMarkedAnswers={props.addMarkedAnswers}\n submitMarkedAnswers={props.submitMarkedAnswers}\n imageCdnUrl={props.imageCdnUrl}\n anonymiseUsers={props.anonymiseUsers}\n emptyStateImageUrl={props.emptyResponseStateImageUrl}\n markingRequiredImageUrl={props.markingRequiredImageUrl}\n correctImageUrl={props.correctImageUrl}\n incorrectImageUrl={props.incorrectImageUrl}\n skippedImageUrl={props.skippedImageUrl}\n reportsStyling={props.reportsStyling}\n isDemo={props.isDemo}\n />\n }\n {!selectedInteraction && <SelectedInteractionEmptyState emptyStateUrl={props.selectQuestionImageUrl} />}\n </div>\n </div>\n </div>\n );\n}","import * as React from 'react';\nimport { ButtonProps } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.confirmationPopup';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ConfirmationPopupProps {\n title: string;\n onClickConfirm: () => void;\n confirmButtonText?: string;\n cancelButtonText?: string;\n confirmButtonVariant?: ButtonProps['variant'];\n cancelButtonVariant?: ButtonProps['variant'];\n disabledConfirmButton?: boolean;\n}\n\nConfirmationPopup.defaultProps = {\n confirmButtonVariant: 'primary',\n cancelButtonVariant: 'link'\n};\n\ntype PropTypes = React.PropsWithChildren<ConfirmationPopupProps & PopupViewProps>;\n\nexport function ConfirmationPopup(props: PropTypes): React.ReactElement {\n const [ showButtonSpinner, setShowButtonSpinner ] = React.useState(false);\n\n return (\n <Popup title={props.title} closePopup={props.closePopup}>\n <>\n {props.children}\n <PopupButtons>\n <PopupButtons.Cancel\n onClick={props.closePopup}\n variant={props.cancelButtonVariant}\n text={props.cancelButtonText || getPhrase('cancel')}\n />\n <PopupButtons.Submit\n onClick={() => { setShowButtonSpinner(true); props.onClickConfirm(); }}\n text={props.confirmButtonText || getPhrase('confirm')}\n variant={props.confirmButtonVariant}\n showSpinner={showButtonSpinner}\n disabled={props.disabledConfirmButton}\n />\n </PopupButtons>\n </>\n </Popup>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { QuestionTable } from 'libs/shared/apps/analytics/components/questions-list/question-table/QuestionTable';\nimport { useFetchInteractiveResults } from 'libs/shared/apps/analytics/hooks/UseFetchInteractiveResults';\nimport { useMarkAnswers } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { ConfirmationPopup } from 'libs/shared/components/confirmation-popup/ConfirmationPopup';\nimport { TableTheme } from 'libs/shared/components/table/Table';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, Interactive, InteractiveMetadata } from 'libs/shared/interfaces';\n\nimport { PartialTable } from 'shared/components/partial-loading/PartialTable';\nimport { ImageUrls } from 'shared/constants/ReportsImageUrls';\nimport { ViewModelKeys } from 'shared/constants/ReportsViewModels';\nimport { 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';\n\nimport { InteractiveNav } from 'apps/interactives/components/interactive-nav/InteractiveNav';\nimport { useNoResultsPopup } from 'apps/interactives/hooks/UseNoResultsPopup';\nimport { useRefreshInteractiveResults } from 'apps/interactives/hooks/UseRefreshInteractiveResults';\nimport { useSetInteractiveResultsAudienceFilterCount } from 'apps/interactives/hooks/UseSetInteractiveResultsAudienceFilterCount';\nimport { useSetSuggestedInteractiveResultsAudience } from 'apps/interactives/hooks/UseSetSuggestedInteractiveResultsAudience';\n\nimport styles from './interactive-question-list-view.module.scss';\n\nconst theme: TableTheme = {\n table: 'bg-white rounded pb-2',\n header: 'border-bottom px-2',\n headerCell: 'p-2 d-flex align-items-center',\n cell: 'px-2',\n row: `m-2 rounded py-1 ${styles.row}`,\n selectedRow: 'bg-light',\n sortIndicator: 'ms-2'\n};\n\nconst namespace = 'interactives.interactiveQuestionList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractiveQuestionListViewProps {\n interactiveMetadataId: string;\n interactionId?: string;\n}\n\nexport function InteractiveQuestionListView(props: InteractiveQuestionListViewProps): JSX.Element {\n const [anonymiseUsers] = useViewModel<boolean>(ViewModelKeys.ANONYMISE_USERS);\n\n const [ showMarkConfirmationPopup, setShowMarkConfirmationPopup ] = React.useState(false);\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InteractiveRequests.interactiveMetadata(props.interactiveMetadataId)\n );\n const interactive = Flight.useBasicFetch<Interactive>(interactiveMetadata.data?.interactiveId ?\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId) : null);\n const requestFilter = useGetRequestFilter();\n const results = useFetchInteractiveResults(props.interactiveMetadataId, requestFilter);\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n useSetPageMetadata({ title: getPhrase('pageTitle', { interactive: interactiveMetadata.data?.name }) });\n useSetHeaderTitle(interactiveMetadata.data?.name);\n useSetHeaderActions(useGetObjectHeaderActions(interactiveMetadata.data));\n useSetSuggestedInteractiveResultsAudience(props.interactiveMetadataId);\n useSetInteractiveResultsAudienceFilterCount(results);\n useNoResultsPopup(props.interactiveMetadataId);\n useCannotConsumeError(interactiveMetadata);\n\n useHandleVideoError(interactiveMetadata);\n useHandleObjectError([ interactive, results, config ]);\n\n const refreshTable = useRefreshInteractiveResults(results);\n\n const { markedAnswers, addMarkedAnswers, submitMarkedAnswers } = useMarkAnswers(\n interactive.data?.id,\n interactiveMetadata.data?.id,\n () => setShowMarkConfirmationPopup(false)\n );\n\n const dataLoaded = !!interactive.data && !!results.data && !!config.data;\n\n return (\n <>\n <div>\n <InteractiveNav interactiveMetadataId={props.interactiveMetadataId} />\n {dataLoaded\n ? <QuestionTable\n emptyResponseStateImageUrl={ImageUrls.EmptyStates.Interactives.NoResponses}\n emptyQuestionsStateImageUrl={ImageUrls.EmptyStates.Interactives.NoQuestions}\n selectQuestionImageUrl={ImageUrls.EmptyStates.Interactives.NoData}\n anonymiseUsers={anonymiseUsers}\n interactive={interactive.data}\n results={results.data}\n markedAnswers={markedAnswers}\n addMarkedAnswers={addMarkedAnswers}\n submitMarkedAnswers={() => setShowMarkConfirmationPopup(true)}\n imageCdnUrl={config.data.imageCdnUrl}\n selectedInteractionId={props.interactionId}\n refreshTable={refreshTable}\n theme={theme}\n reportsStyling\n />\n : <div className='row'><div className='col-6'><PartialTable /></div></div>\n }\n </div>\n {showMarkConfirmationPopup &&\n <ConfirmationPopup\n title={getPhrase('markPopupTitle', { smartCount: Object.keys(markedAnswers).length ?? 0 })}\n closePopup={() => setShowMarkConfirmationPopup(false)}\n confirmButtonText={getPhrase('submit')}\n confirmButtonVariant='dark'\n onClickConfirm={submitMarkedAnswers}\n >\n <p>{getPhrase('markPopupBody')}</p>\n </ConfirmationPopup>\n }\n </>\n );\n}"],"names":["ScrollHelper","Radio","CommonChannels","namespace","getPhrase","LanguageService","InteractionQuestionsEmptyState","props","jsxs","EmptyState","jsx","InteractionResponseListFiltersEmptyStates","getFilterEmptyStateImageUrl","getFilterEmptyStatePhrase","Fragment","Text","InteractionResponseListFilters","isFilterSelected","filterButton","getFilterClassName","InteractionResponseListHeader","suggestedResponse","_a","InteractionLabel","SubmitMarkedAnswers","getResponsesToMark","interaction","studentResults","s","InteractiveCorrectnessHelper","getStudentResult","InteractionCorrectness","acc","_b","InteractionResponseList","filter","setFilter","React","responsesToMark","numMarkedAnswers","toggleFilter","selectedFilter","filterStudentResults","result","correctness","filterMap","filteredStudentResults","Tooltip","idx","anonymisedUserName","anonymiseUserName","markingRequired","className","styles","InteractionResponse","getMarkedStatus","InteractionResponseItem","QuestionTableMissingWord","replacePlaceholders","str","part","index","match","key","replacement","answer","QuestionTableMultipleChoice","ArrayHelper","option","MultipleChoiceInteractionAnswers","QuestionTableShortAnswer","QuestionTableTrueOrFalse","QuestionTableAnswers","getQuestionTableAnswerComponent","InteractionTypeId","indexToLetter","QuestionTableAnswerComponent","sortScore","rowA","rowB","columnId","cellA","cell","cellB","CellWrapper","HeaderCell","getColumns","showAnswersInTable","column","questionNumber","selectedRowIds","selectedRow","percentCorrect","awaitingMarking","PendingIndicator","PercentageIndicator","PercentageIndicatorLayout","useGetTableData","interactive","results","refreshData","sortBy","flattenedInteractions","getInteractions","questionNumbers","interactions","i","getInteractionResultsSummary","sorted","multipleChoiceSummary","questionsSummary","item","student","latestAttempts","response","questionSummary","missingWordSummary","InteractiveAnswerStatus","incorrectSummary","markedSummary","correctSummary","pendingSummary","LightbulbSvg","QuestionResultsSummary","getQuestionSummary","maxResponseCount","getMaxResponseCount","summaryMethod","summary","getBarClassName","SvgContainer","SvgContainerSize","SelectedInteractionEmptyState","getSortStudents","id","QuestionTable","setSortBy","data","selectedInteraction","getInteractionById","onSelectRow","AppRouteHelper","Table","row","ConfirmationPopup","showButtonSpinner","setShowButtonSpinner","React.useState","Popup","PopupButtons","theme","InteractiveQuestionListView","anonymiseUsers","useViewModel","ViewModelKeys","showMarkConfirmationPopup","setShowMarkConfirmationPopup","interactiveMetadata","Flight.useBasicFetch","InteractiveRequests","requestFilter","useGetRequestFilter","useFetchInteractiveResults","config","ConfigRequests","useSetPageMetadata","useSetHeaderTitle","_c","useSetHeaderActions","useGetObjectHeaderActions","useSetSuggestedInteractiveResultsAudience","useSetInteractiveResultsAudienceFilterCount","useNoResultsPopup","useCannotConsumeError","useHandleVideoError","useHandleObjectError","refreshTable","useRefreshInteractiveResults","markedAnswers","addMarkedAnswers","submitMarkedAnswers","useMarkAnswers","_d","_e","dataLoaded","InteractiveNav","ImageUrls","PartialTable"],"mappings":"m4CAIO,MAAMA,GAAe,CAE1B,kBAAyB,CACvBC,EAAAA,MAAM,QAAQC,EAAe,KAAK,EAAE,QAAQ,oBAAoB,CAClE,CACF,ECHMC,GAAY,wCACZC,GAAYC,EAAgB,iBAAiBF,EAAS,EAMrD,SAASG,GAA+BC,EAAyD,CACtG,OACEC,EAAAA,KAACC,EAAA,CAAW,UAAU,qDACpB,SAAA,CAAAC,EAAAA,IAACD,EAAW,MAAX,CACC,IAAKF,EAAM,mBACX,KAAK,OAAA,CAAA,EAEPG,MAACD,EAAW,KAAX,CAAgB,UAAU,QACxB,SAAAL,GAAU,gBAAgB,CAAA,CAC7B,CAAA,EACF,CAEJ,CCpBA,MAAMD,EAAY,iCAYX,SAASQ,GAA0CJ,EAAuD,CAC/G,SAASK,GAA8B,CACrC,OAAQL,EAAM,OAAA,CACZ,IAAK,UAAW,OAAOA,EAAM,gBAC7B,IAAK,YAAa,OAAOA,EAAM,kBAC/B,IAAK,mBAAoB,OAAOA,EAAM,wBACtC,IAAK,UAAW,OAAOA,EAAM,eAAA,CAEjC,CAEA,SAASM,GAA4B,CACnC,OAAQN,EAAM,OAAA,CACZ,IAAK,UAAW,MAAO,oBACvB,IAAK,YAAa,MAAO,sBACzB,IAAK,mBAAoB,MAAO,4BAChC,IAAK,UAAW,MAAO,mBAAA,CAE3B,CAEA,OACEG,EAAAA,IAAAI,WAAA,CACE,SAAAN,EAAAA,KAACC,EAAA,CAAW,UAAU,MACpB,SAAA,CAAAC,MAACD,EAAW,MAAX,CAAiB,IAAKG,IAA+B,UAAU,cAAc,EAC9EF,EAAAA,IAACD,EAAW,KAAX,CACC,SAAAC,EAAAA,IAACK,aAAKZ,EAAsB,OAAQU,EAAA,CAA0B,CAAG,CAAA,CACnE,CAAA,CAAA,CACF,CAAA,CACF,CAEJ,CAOO,SAASG,GAA+BT,EAA4C,CACzF,SAASU,EAAiBC,EAA6C,CACrE,OAAOA,IAAiBX,EAAM,MAChC,CAEA,SAASY,EAAmBD,EAA6C,CACvE,MAAO,yBAAyBD,EAAiBC,CAAY,EAAI,qBAAuB,EAAE,EAC5F,CAEA,OAEEV,EAAAA,KAAC,MAAA,CAAI,UAAU,mBACb,SAAA,CAAAE,MAAC,UAAO,UAAWS,EAAmB,kBAAkB,EAAG,QAAS,IAAMZ,EAAM,aAAa,kBAAkB,EAC7G,SAAAG,EAAAA,IAACK,EAAA,CAAA,UAAKZ,EAAsB,OAAO,kBAAkB,EACvD,QACC,SAAA,CAAO,UAAWgB,EAAmB,SAAS,EAAG,QAAS,IAAMZ,EAAM,aAAa,SAAS,EAC3F,SAAAG,EAAAA,IAACK,aAAKZ,EAAsB,OAAO,UAAU,EAC/C,QACC,SAAA,CAAO,UAAWgB,EAAmB,WAAW,EAAG,QAAS,IAAMZ,EAAM,aAAa,WAAW,EAC/F,SAAAG,EAAAA,IAACK,aAAKZ,EAAsB,OAAO,YAAY,EACjD,QACC,SAAA,CAAO,UAAWgB,EAAmB,SAAS,EAAG,QAAS,IAAMZ,EAAM,aAAa,SAAS,EAC3F,SAAAG,EAAAA,IAACK,aAAKZ,EAAsB,OAAO,UAAU,CAAA,CAC/C,CAAA,EACF,CAEJ,CCxEA,MAAMA,GAAY,6CACZC,GAAYC,EAAgB,iBAAiBF,EAAS,EAMrD,SAASiB,GAA8Bb,EAAwD,OACpG,MAAMc,GAAoBC,EAAAf,EAAM,YAAY,OAAlB,YAAAe,EAAwB,kBAElD,aACG,MAAA,CAAI,UAAU,mBACb,SAAAd,EAAAA,KAAC,MAAA,CAAI,UAAU,wBACb,SAAA,CAAAE,EAAAA,IAAC,MAAA,CAAI,UAAU,SACb,SAAAA,EAAAA,IAACa,EAAA,CACC,YAAahB,EAAM,YACnB,cAAc,eAAA,CAAA,EAElB,EACC,CAAC,CAACc,GACDb,OAAC,MAAA,CAAI,UAAU,OACb,SAAA,CAAAE,EAAAA,IAAC,SAAA,CAAQ,SAAAN,GAAU,mBAAmB,CAAA,CAAE,EACxCM,EAAAA,IAAC,IAAA,CAAE,UAAU,MAAO,SAAAW,CAAA,CAAkB,CAAA,CAAA,CACxC,CAAA,CAAA,CAEJ,CAAA,CACF,CAEJ,CC/BA,MAAMlB,GAAY,6BACZC,GAAYC,EAAgB,iBAAiBF,EAAS,EAOrD,SAASqB,EAAoBjB,EAA8C,CAChF,OACEG,EAAAA,IAAC,MAAA,CAAI,UAAU,6BACb,SAAAA,EAAAA,IAAC,SAAA,CACC,UAAU,uBACV,QAASH,EAAM,OACf,SAAUA,EAAM,SAEf,YAAU,eAAe,CAAA,CAAA,EAE9B,CAEJ,6DCAMJ,EAAY,iCACZC,EAAYC,EAAgB,iBAAiBF,CAAS,EAE5D,SAASsB,GACPC,EACAC,EACY,CASZ,OARwBA,EAAe,OAAOC,GACxBC,EAA6B,qBAC/CH,EACAI,EAAiBF,CAAC,CAAA,IAEGG,EAAuB,eAC/C,EAEsB,OAAO,CAACC,EAAKJ,IAAA,SAAO,OACzC,GAAGI,EACH,GAACV,EAAAM,EAAE,OAAF,YAAAN,EAAQ,OAAMW,EAAAL,EAAE,OAAF,YAAAK,EAAQ,UAAS,EAAG,EAAA,GACjC,CAAA,CAAE,CACR,CAmBO,SAASC,GAAwB3B,EAAkD,OACxF,KAAM,CAAE4B,EAAQC,CAAU,EAAIC,EAAM,SAAA,EAE9BC,EAAkBb,GAAmBlB,EAAM,YAAaA,EAAM,QAAQ,QAAQ,EAC9EgC,EAAmB,OAAO,KAAKhC,EAAM,aAAa,EAAE,OAE1D,GAAI,GAACe,EAAAf,EAAM,QAAQ,WAAd,MAAAe,EAAwB,QAC3B,aACG,MAAA,CAAI,UAAU,2BACb,SAAAd,EAAAA,KAACC,EAAA,CAAW,UAAU,gEACpB,SAAA,CAAAC,MAACD,EAAW,MAAX,CAAiB,IAAKF,EAAM,mBAAoB,KAAK,QAAQ,QAC7DE,EAAW,QAAX,CACE,SAAAL,EAAU,mBAAmB,EAChC,EACAM,MAACD,EAAW,KAAX,CAAgB,UAAU,QACxB,SAAAL,EAAU,uBAAuB,CAAA,CACpC,CAAA,CAAA,CACF,CAAA,CACF,EAIJ,SAASoC,EAAaC,EAA+C,CACnEL,EAAUD,IAAWM,EAAiB,KAAOA,CAAc,CAC7D,CAEA,SAASC,GAAuB,CAC9B,OAAOnC,EAAM,QAAQ,SAAS,OAAOqB,GAAK,CACxC,MAAMe,EAASb,EAAiBF,CAAC,EAE3BgB,EAAcf,EAA6B,qBAAqBtB,EAAM,YAAaoC,CAAM,EAEzFE,EAAY,CAChB,QAASd,EAAuB,QAChC,UAAWA,EAAuB,UAClC,iBAAkBA,EAAuB,gBACzC,QAASA,EAAuB,UAAA,EAGlC,MAAO,CAACI,GAAWA,KAAUU,GAAaD,IAAgBC,EAAUV,CAAM,CAC5E,CAAC,CACH,CAEA,MAAMW,EAAyBJ,EAAA,EAE/B,OACElC,EAAAA,KAAAM,WAAA,CACG,SAAA,CAAAP,EAAM,gBAAkBG,MAACU,GAAA,CAA8B,YAAab,EAAM,YAAa,SACvF,MAAA,CAAI,UAAWA,EAAM,eAClB,6BACA,4EAED,SAAA,CAAA,CAACA,EAAM,gBAAkBG,EAAAA,IAAC,IAAA,CAAE,UAAU,mBAAmB,SAAAA,EAAAA,IAACK,EAAA,CAAA,UAAKZ,EAAsB,OAAO,gBAAA,CAAiB,EAAE,EAC/G,CAAC,CAAC,OAAO,KAAKmC,CAAe,EAAE,QAC9B5B,MAACqC,EAAA,CAAQ,GAAG,gBAAgB,MAAO3C,EAAU,UAAU,EAAG,SAAUG,EAAM,OACxE,SAAAG,EAAAA,IAAC,MAAA,CAAI,UAAW,GAAGH,EAAM,OAAS,sBAAwB,EAAE,IAAIA,EAAM,eAAiB,OAAS,EAAE,GAChG,SAAAG,MAACc,EAAA,CAAoB,OAAQjB,EAAM,oBAAqB,SAAU,CAACgC,EAAkB,EACvF,CAAA,CACF,CAAA,EAEJ,EACA/B,OAAAM,EAAAA,SAAA,CACG,SAAA,CAAA,CAACP,EAAM,gBAAkBG,EAAAA,IAACM,GAAA,CAA+B,OAAAmB,EAAgB,aAAAK,EAA4B,EAErG,CAACjC,EAAM,gBAAkB,CAACuC,EAAuB,QAAUX,GAC1DzB,EAAAA,IAACC,GAAA,CACC,OAAAwB,EACA,wBAAyB5B,EAAM,wBAC/B,gBAAiBA,EAAM,gBACvB,kBAAmBA,EAAM,kBACzB,gBAAiBA,EAAM,eAAA,CAAA,EAI1BuC,SACE,KAAA,CAAG,UAAU,qBACX,SAAAA,EAAuB,IAAI,CAAClB,EAAGoB,IAAQ,SACtC,MAAMC,EAAqBC,GAAkBtB,EAAE,KAAMrB,EAAM,cAAc,EACnE4C,EAAkBb,IAAgBhB,EAAAM,EAAE,OAAF,YAAAN,EAAQ,OAAMW,EAAAL,EAAE,OAAF,YAAAK,EAAQ,UAAS,EAEvE,IAAImB,EAAY7C,EAAM,eAAiB,eAAiB,0BAExD,OAAI4C,IACFC,GAAa,IAAIC,GAAO,eAAe,SAGvC3C,MAAC,MAAa,UAAWH,EAAM,eAAiB,GAAK,gBAClD,WAAM,eACLG,EAAAA,IAAC4C,GAAA,CACC,YAAa/C,EAAM,YACnB,eAAgBqB,EAChB,aAAc2B,EAAgBhD,EAAM,YAAY,GAAIqB,EAAGrB,EAAM,aAAa,EAC1E,gBAAiBA,EAAM,iBACvB,YAAaA,EAAM,YACnB,mBAAkB,GAClB,mBAAA0C,EACA,UAAAG,EACA,aAAY,GACZ,eAAc,GACd,uBAAuB,OAAA,CAAA,EAGzB1C,EAAAA,IAAC8C,GAAA,CACC,YAAajD,EAAM,YACnB,eAAgBqB,EAChB,aAAc2B,EAAgBhD,EAAM,YAAY,GAAIqB,EAAGrB,EAAM,aAAa,EAC1E,gBAAiBA,EAAM,iBACvB,YAAaA,EAAM,YACnB,mBAAkB,GAClB,mBAAA0C,EACA,UAAAG,EACA,aAAY,EAAA,CAAA,GAzBTJ,CA4BT,CAEJ,CAAC,CAAA,CACH,EAEDzC,EAAM,gBAAkB,CAAC,CAAC+B,EAAgB,cACxC,MAAA,CAAI,UAAU,OACb,SAAA5B,MAACc,GAAoB,OAAQjB,EAAM,oBAAqB,SAAU,CAACgC,EAAkB,CAAA,CACvF,CAAA,CAAA,CAEJ,CAAA,EACF,CAEJ,CCzLO,SAASkB,GAAyBlD,EAAkC,CACzE,MAAMmD,EAAuBC,GACtBA,EAEEA,EAAI,MAAM,SAAS,EAAE,IAAI,CAACC,EAAMC,IAAU,CAC/C,MAAMC,EAAQF,EAAK,MAAM,SAAS,EAElC,GAAIE,EAAO,CACT,MAAMC,EAAMD,EAAM,CAAC,EAEbE,EAAczD,EAAM,YAAY,gBAAgB,QAAe,CAAC0D,EAAO,OAAU,CAACF,CAAG,EAG3F,GAAIC,EACF,aAAQ,OAAA,CAAK,UAAU,oDAAiE,SAAAA,EAAY,MAApBH,CAAyB,CAE7G,CAEA,OAAOD,CACT,CAAC,EAjBgB,GAoBnB,OACElD,EAAAA,IAAC,MAAA,CACC,SAAAA,EAAAA,IAAC,IAAA,CAAE,UAAU,OAAQ,SAAAgD,EAAoBnD,EAAM,YAAY,KAAK,QAAQ,CAAA,CAAE,EAC5E,CAEJ,qDCtBO,SAAS2D,GAA4B3D,EAAkC,SAG5E,MAFmB,GAAC0B,EAAAkC,EAAY,OAAM7C,EAAAf,EAAM,cAAN,YAAAe,EAAmB,eAAe,EAAE,OAAtD,MAAAW,EAA4D,UAI5EvB,EAAAA,IAAC,KAAA,CAAG,UAAW,GAAG2C,EAAO,WAAW,yBACjC,SAAA9C,EAAM,YAAY,gBAAgB,IAAI6D,GAEnC1D,EAAAA,IAAC,KAAA,CAAmB,UAAU,SAC5B,SAAAF,EAAAA,KAAC,MAAA,CAAI,UAAW,GAAG4D,EAAO,UAAY,8BAAgC,yBAAyB,gCAC7F,SAAA,CAAA5D,EAAAA,KAAC,OAAA,CAAK,UAAU,cAAe,SAAA,CAAAD,EAAM,cAAc6D,EAAO,KAAK,EAAE,IAAA,EAAE,EACnE1D,EAAAA,IAAC,OAAA,CAAM,SAAA0D,EAAO,IAAA,CAAK,CAAA,EACrB,CAAA,EAJOA,EAAO,EAKhB,CAEH,CAAA,CACH,EAKF1D,EAAAA,IAAC,MAAA,CAAI,UAAW2C,EAAO,YACrB,SAAA3C,EAAAA,IAAC2D,GAAA,CACC,YAAa9D,EAAM,YACnB,KAAK,KACL,aAAc,GACd,qBAAoB,GACpB,cAAa,EAAA,CAAA,EAEjB,CAEJ,CCjCA,MAAMJ,GAAY,uBAEX,SAASmE,GAAyB/D,EAAkC,OACzE,MAAMc,GAAoBC,EAAAf,EAAM,YAAY,OAAlB,YAAAe,EAAwB,kBAElD,OAAKD,SAGF,MAAA,CAAI,UAAW,GAAGgC,EAAO,WAAW,kCACnC,SAAA,CAAA3C,MAAC,MAAA,CAAI,UAAU,iCACb,SAAAA,EAAAA,IAAC,IAAA,CAAE,UAAU,mBACX,SAAAA,EAAAA,IAACK,EAAA,CAAA,UAAKZ,GAAsB,OAAO,mBAAA,CAAoB,EACzD,EACF,EAEAO,EAAAA,IAAC,IAAA,CAAE,UAAU,OAAQ,SAAAW,CAAA,CAAkB,CAAA,EACzC,EAX6BX,MAAAI,EAAAA,SAAA,CAAA,CAAE,CAanC,CCpBO,SAASyD,GAAyBhE,EAAkC,CACzE,OACEG,MAAC,MAAG,UAAU,6BACX,WAAM,YAAY,gBAAgB,IAAI0D,GAEnC5D,EAAAA,KAAC,KAAA,CAEC,UAAW,GAAG4D,EAAO,UAAY,8BAAgC,yBAAyB,sCAE1F,SAAA,CAAA5D,EAAAA,KAAC,OAAA,CAAK,UAAU,cAAe,SAAA,CAAAD,EAAM,cAAc6D,EAAO,KAAK,EAAE,IAAA,EAAE,EACnE1D,EAAAA,IAAC,OAAA,CAAM,SAAA0D,EAAO,IAAA,CAAK,CAAA,CAAA,EAJdA,EAAO,EAAA,CAOjB,CAAA,CACH,CAEJ,CCPO,SAASI,GAAqBjE,EAAkC,CACrE,SAASkE,GAA+C,CACtD,OAAQlE,EAAM,YAAY,OAAA,CACxB,KAAKmE,EAAkB,eACrB,OAAOhE,EAAAA,IAACwD,GAAA,CAA4B,YAAa3D,EAAM,YAAa,cAAAoE,EAA8B,EACpG,KAAKD,EAAkB,YACrB,OAAOhE,EAAAA,IAAC6D,GAAA,CAAyB,YAAahE,EAAM,YAAa,cAAAoE,EAA8B,EACjG,KAAKD,EAAkB,YACrB,OAAOhE,EAAAA,IAAC4D,GAAA,CAAyB,YAAa/D,EAAM,WAAA,CAAa,EACnE,KAAKmE,EAAkB,YACrB,OAAOhE,EAAAA,IAAC+C,GAAA,CAAyB,YAAalD,EAAM,WAAA,CAAa,EACnE,QAAS,OAAO,IAAA,CAEpB,CAEA,MAAMqE,EAA+BH,EAAA,EAErC,OAAKG,EAGHlE,EAAAA,IAAC,MAAA,CAAI,UAAU,aACZ,SAAAkE,EACH,EALwClE,MAAAI,EAAAA,SAAA,CAAA,CAAE,CAO9C,CCtBA,MAAMX,GAAY,uBACZC,EAAYC,EAAgB,iBAAiBF,EAAS,EAE5D,SAAS0E,GACPC,EACAC,EACAC,EACQ,CACR,MAAMC,EAAQH,EAAK,MAAM,QAAaI,EAAK,OAAO,KAAOF,CAAQ,EAAE,MAC7DG,EAAQJ,EAAK,MAAM,QAAaG,EAAK,OAAO,KAAOF,CAAQ,EAAE,MAEnE,OAAIC,EAAM,gBACD,GAELE,EAAM,iBAGHF,EAAM,gBAAkBE,EAAM,eAF5B,EAIL,EACN,CAKA,SAASC,EAAY7E,EAA+D,CAClF,OACEG,EAAAA,IAAC,OAAI,UAAW,UAAUH,EAAM,WAAa,EAAE,GAC5C,SAAAA,EAAM,QAAA,CACT,CAEJ,CAOA,SAAS8E,EAAW9E,EAAqC,CACvD,OACEG,EAAAA,IAAC0E,EAAA,CAAY,UAAW7E,EAAM,OAAO,UAAY,UAC9C,SAAAH,EAAUG,EAAM,SAAS,CAAA,CAC5B,CAEJ,CAEO,SAAS+E,GACdC,EACyC,CACzC,MAAO,CACL,CACE,OAAQ,CAAC,CAAE,OAAAC,CAAA,IAAa9E,EAAAA,IAAC2E,EAAA,CAAW,OAAAG,EAAgB,UAAU,IAAI,EAClE,SAAU,iBACV,GAAI,QACJ,KAAM,CAAC,CAAE,IAAK,CAAE,SAAU,CAAE,eAAAC,CAAA,CAAe,YACjCL,EAAA,CAAa,SAAA,CAAAK,EAAiB,EAAE,GAAA,EAAC,EAE3C,MAAO,GACP,cAAe,EAAA,EAEjB,CACE,OAAQ,CAAC,CAAE,OAAAD,CAAA,IAAa9E,EAAAA,IAAC2E,EAAA,CAAW,OAAAG,EAAgB,UAAU,WAAW,EACzE,SAAU,OACV,KAAM,CAAC,CAAE,IAAK,CAAE,SAAU9D,CAAA,EAAe,aAAc,CAAE,eAAAgE,CAAA,KAAuB,CAC9E,MAAMC,EAAcD,GAAA,YAAAA,EAAiBhE,GAAA,YAAAA,EAAa,IAElD,OACElB,EAAAA,KAAC4E,EAAA,CAAY,UAAU,cACrB,SAAA,CAAA1E,EAAAA,IAAC,MAAA,CAAI,UAAW,GAAIiF,EAA0B,GAAZ,SAAc,QAC9C,SAAAjF,EAAAA,IAACa,EAAA,CAAiB,YAAAG,EAA0B,mBAAmB,SAAS,EAC1E,EAEC6D,GAAsBI,GACrBjF,EAAAA,IAAC8D,GAAA,CAAqB,YAAA9C,CAAA,CAA0B,CAAA,EAEpD,CAEJ,EACA,cAAe,EAAA,EAEjB,CACE,OAAQ,CAAC,CAAE,OAAA8D,CAAA,IAAa9E,EAAAA,IAAC2E,EAAA,CAAW,OAAAG,EAAgB,UAAU,QAAQ,EACtE,SAAU,iBACV,GAAI,oBACJ,KAAM,CAAC,CAAE,MAAO,CAAE,eAAAI,EAAgB,gBAAAC,CAAA,KAC5BA,EAEAnF,EAAAA,IAACoF,GAAA,CACC,MAAO1F,EAAU,iBAAiB,EAClC,UAAU,cACV,iBAAiB,UACjB,UAAS,EAAA,CAAA,EAMbM,EAAAA,IAACqF,GAAA,CACC,WAAYH,EACZ,OAAQI,GAA0B,WAAA,CAAA,EAIxC,MAAO,GACP,cAAe,GACf,SAAUnB,EAAA,CACZ,CAEJ,CAKO,SAASoB,GACdC,EACAC,EACAC,EACAC,EACiC,CACjC,OAAOhE,EAAM,QAAQ,IAAM,CACzB,MAAMiE,EAAwBC,GAAgBL,CAAW,EACnDM,EAA8BF,EAAsB,OAAO,CAACtE,EAAKN,EAAamC,KAAW,CAC7F,GAAG7B,EAAK,CAACN,EAAY,EAAE,EAAGmC,CAAA,GACxB,CAAA,CAAE,EAEA4C,EAAeH,EAAsB,IAAII,IAAM,CACnD,GAAGA,EACH,eAAgBF,EAAgBE,EAAE,EAAE,EACpC,eAAgBC,GAA6BD,EAAGP,CAAO,CAAA,EACvD,EAEF,IAAIE,GAAA,YAAAA,EAAQ,MAAO,oBAAqB,CACtC,MAAMO,EAASzC,EAAY,OAAOsC,EAAc/E,GAC1CA,EAAY,eAAe,gBACtB,GAEFA,EAAY,eAAe,cACnC,EAED,OAAO2E,EAAO,KAAOO,EAAO,QAAA,EAAYA,CAC1C,CAEA,OAAOH,CACT,EAAG,CAAEL,EAAaC,CAAO,CAAC,CAC5B,CAEO,SAAS1B,EAAcd,EAAe,CAC3C,OAAO,OAAO,aAAaA,EAAQ,EAAiB,CACtD,CC7JA,MAAM1D,GAAY,uBACZC,EAAYC,EAAgB,iBAAiBF,EAAS,EASrD,SAAS0G,GACdnF,EACAC,EACmB,CACnB,MAAMmF,EAAsCpF,EAAY,gBAAgB,IAAI,CAACqF,EAAM,KAC1E,CACL,GAAIA,EAAK,GACT,MAAOrF,EAAY,SAAWgD,EAAkB,eAAiBC,EAAc,CAAC,EAAIoC,EAAK,KACzF,UAAWA,EAAK,UAChB,MAAO,CAAA,EAEV,EAED,OAAApF,EAAe,SAAS,QAAQqF,GAAW,CACzC,MAAMC,EAAiB9C,EAAY,KAAK6C,EAAQ,OAAO,EAAE,SACnDE,EAAW/C,EAAY,UAAU8C,EAAgB,CAAE,GAAIvF,EAAY,GAAI,EAExEwF,GAELA,EAAS,QAAQ,QAAQjD,GAAU,CACjC,MAAMkD,EAAkBhD,EAAY,UAAU2C,EAAkB,CAAE,GAAI7C,EAAO,GAAI,EAE7EkD,GACFA,EAAgB,OACpB,CAAC,CACH,CAAC,EAEML,CACT,CAEO,SAASM,GAAmB1F,EAA0BC,EAAyD,CACpH,MAAMmF,EAAsCpF,EAAY,gBAAgB,IAAIqF,IACnE,CACL,GAAIA,EAAK,GACT,MAAOA,EAAK,KACZ,UAAWA,EAAK,UAChB,MAAO,CAAA,EAEV,EAED,OAAAD,EAAiB,KAAK,CACpB,MAAO1G,EAAU,WAAW,EAC5B,MAAO,EACP,UAAW,EAAA,CACZ,EAEDuB,EAAe,SAAS,QAAQqF,GAAW,CACzC,MAAMC,EAAiB9C,EAAY,KAAK6C,EAAQ,OAAO,EAAE,SACnDE,EAAW/C,EAAY,UAAU8C,EAAgB,CAAE,GAAIvF,EAAY,GAAI,EAExEwF,GAELA,EAAS,QAAQ,QAAQjD,GAAU,CACjC,MAAMkD,EAAkBhD,EAAY,UAAU2C,EAAkB,CAAE,GAAI7C,EAAO,GAAI,EAEjF,GAAIkD,GAAmBlD,EAAO,SAAWoD,EAAwB,QAC/DF,EAAgB,YACX,CACL,MAAMG,EAAmBnD,EAAY,UAAU2C,EAAkB,CAAE,MAAO1G,EAAU,WAAW,EAAG,EAElGkH,EAAiB,OACnB,CACF,CAAC,CACH,CAAC,EAEMR,CACT,CAEO,SAASS,GAAc7F,EAA0BC,EAAyD,CAC/G,MAAMmF,EAAsC,CAC1C,CACE,MAAO1G,EAAU,SAAS,EAC1B,UAAW,GACX,MAAO,CAAA,EAET,CACE,MAAOA,EAAU,WAAW,EAC5B,UAAW,GACX,MAAO,CAAA,CACT,EAGF,OAAAuB,EAAe,SAAS,QAAQqF,GAAW,CACzC,MAAMC,EAAiB9C,EAAY,KAAK6C,EAAQ,OAAO,EAAE,SACnDE,EAAW/C,EAAY,UAAU8C,EAAgB,CAAE,GAAIvF,EAAY,GAAI,EAExEwF,GAELA,EAAS,QAAQ,QAAQjD,GAAU,CACjC,GAAIA,EAAO,SAAWoD,EAAwB,QAAS,CACrD,MAAMG,EAAiBrD,EAAY,UAAU2C,EAAkB,CAAE,MAAO1G,EAAU,SAAS,EAAG,EAC9FoH,EAAe,OACjB,CACA,GAAIvD,EAAO,SAAWoD,EAAwB,UAAW,CACvD,MAAMC,EAAmBnD,EAAY,UAAU2C,EAAkB,CAAE,MAAO1G,EAAU,WAAW,EAAG,EAClGkH,EAAiB,OACnB,CACA,GAAIrD,EAAO,SAAWoD,EAAwB,cAAe,CAC3D,IAAII,EAAiBtD,EAAY,UAAU2C,EAAkB,CAAE,MAAO1G,EAAU,SAAS,EAAG,EAEvFqH,IACHX,EAAiB,KAAK,CACpB,MAAO1G,EAAU,SAAS,EAC1B,MAAO,EACP,UAAW,EAAA,CACZ,EACDqH,EAAiBtD,EAAY,UAAU2C,EAAkB,CAAE,MAAO1G,EAAU,SAAS,EAAG,GAG1FqH,EAAe,OACjB,CACF,CAAC,CACH,CAAC,EAEMX,CACT,CClIO,SAASY,GAAanH,EAAsC,CACjE,OACEG,EAAAA,IAAC,MAAA,CAAK,GAAGH,EACP,SAAAG,EAAAA,IAAC,OAAA,CACC,KAAK,eACL,EAAE,+wBAAA,CAAA,EAEN,CAEJ,CCDA,MAAMP,EAAY,uBACZC,GAAYC,EAAgB,iBAAiBF,CAAS,EAOrD,SAASwH,GAAuBpH,EAAoC,CACzE,MAAM4G,EAAkBS,EAAA,EAClBC,EAAmBC,EAAA,EAEzB,SAASF,GAAwC,CAC/C,GAAI,CAACrH,EAAM,aAAe,CAACA,EAAM,QAAS,OAE1C,IAAIwH,EAMJ,OAAQxH,EAAM,YAAY,OAAA,CACxB,KAAKmE,EAAkB,YACvB,KAAKA,EAAkB,aACrBqD,EAAgBR,GAChB,MACF,KAAK7C,EAAkB,YACrBqD,EAAgBX,GAChB,MACF,KAAK1C,EAAkB,eACvB,KAAKA,EAAkB,YACrBqD,EAAgBlB,GAChB,KAAA,CAGJ,OAAOkB,EAAcxH,EAAM,YAAaA,EAAM,OAAO,CACvD,CAEA,SAASuH,GAAsB,CAC7B,OAAOX,GAAA,YAAAA,EAAiB,OAAO,CAACnF,EAAKgG,IAAYA,EAAQ,MAAQhG,EAAMgG,EAAQ,MAAQhG,EAAK,EAC9F,CAEA,SAASiG,EAAgBD,EAA0B,CACjD,MAAM5E,EAAY,sBAElB,OAAK4E,EAAQ,MAGTA,EAAQ,QAAU5H,GAAU,SAAS,EAChC,GAAGgD,CAAS,6BAEjB4E,EAAQ,UACH,GAAG5E,CAAS,+BAEd,GAAGA,CAAS,2BARV,GAAGA,CAAS,uBASvB,CAEA,OACE5C,EAAAA,KAAC,MAAA,CAAI,UAAU,iCACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,uCACb,SAAA,CAAAE,EAAAA,IAAC,MAAA,CAAI,UAAU,yCACb,SAAAA,EAAAA,IAACwH,EAAA,CAAa,IAAKR,GAAc,KAAMS,GAAiB,KAAA,CAAO,CAAA,CACjE,EACAzH,EAAAA,IAAC,KAAA,CAAG,UAAU,UACZ,SAAAA,EAAAA,IAAC,OAAA,CAAK,SAAAA,EAAAA,IAACK,EAAA,WAAKZ,EAAsB,OAAO,iBAAA,CAAkB,CAAA,CAAE,CAAA,CAC/D,CAAA,EACF,EACAK,EAAAA,KAAC,MAAA,CAAI,UAAU,eACb,SAAA,CAAAE,MAAC,MAAA,CAAI,UAAU,WACZ,SAAAyG,GAAA,YAAAA,EAAiB,IAAIa,SAEjB,IAAA,CAAsB,UAAU,qBAAsB,SAAAA,EAAQ,KAAA,EAAvDA,EAAQ,KAAqD,EAExE,CACH,EACAtH,MAAC,OAAI,UAAU,cACZ,0BAAiB,IAAI,CAACsH,EAAStB,IAE5BlG,EAAAA,KAAC,MAAA,CAAwC,UAAU,cACjD,SAAA,CAAAE,EAAAA,IAAC,MAAA,CACC,UAAWuH,EAAgBD,CAAO,EAClC,MAAO,CAAE,MAAO,GAAIA,EAAQ,MAAQH,EAAoB,GAAG,IAAK,OAAQ,EAAA,CAAG,CAAA,EAE7EnH,EAAAA,IAAC,OAAA,CAAM,SAAAsH,EAAQ,KAAA,CAAM,CAAA,CAAA,EALb,GAAGzH,EAAM,YAAY,EAAE,GAAGmG,CAAC,EAMrC,EAEH,CACH,CAAA,CAAA,CACF,CAAA,EACF,CAEJ,CC/FA,MAAMvG,GAAY,uCACZC,GAAYC,EAAgB,iBAAiBF,EAAS,EAMrD,SAASiI,GAA8B7H,EAAwD,CACpG,OACEC,EAAAA,KAACC,EAAA,CAAW,UAAU,qDACpB,SAAA,CAAAC,EAAAA,IAACD,EAAW,MAAX,CACC,IAAKF,EAAM,cACX,KAAK,OAAA,CAAA,EAEPG,MAACD,EAAW,KAAX,CAAgB,UAAU,QACxB,SAAAL,GAAU,gBAAgB,CAAA,CAC7B,CAAA,EACF,CAEJ,CClBO,SAASiI,GAAgBhC,EAAwBiC,EAAgC,CACtF,OAAQjC,EAAA,CACN,IAAK,aAAc,MAAO,CAAC,CAAE,GAAAiC,EAAI,KAAM,GAAM,EAC7C,IAAK,YAAa,MAAO,CAAC,CAAE,GAAAA,EAAI,KAAM,GAAO,EAC7C,QAAS,MAAO,CAAA,CAAC,CAErB,CCqCO,SAASC,GAAchI,EAAwC,OACpE,KAAM,CAAE8F,EAAQmC,CAAU,EAAInG,EAAM,SAClCgG,GAAgB9H,EAAM,OAAQ,mBAAmB,CAAA,EAE7CkI,EAAOxC,GAAgB1F,EAAM,YAAaA,EAAM,QAASA,EAAM,aAAc4D,EAAY,MAAMkC,CAAM,CAAC,EAEtGqC,EAAsBnI,EAAM,uBAChCoI,GAAmBpI,EAAM,YAAaA,EAAM,qBAAqB,EAEnE,SAASqI,EAAY,CAAE,SAAUlH,GAAyD,CACxF1B,GAAa,iBAAA,EAEb6I,GAAe,aACb,CAAE,cAAenH,EAAY,EAAA,EAC7B,CAAE,MAAO,EAAA,CAAK,CAElB,CAEA,OACElB,EAAAA,KAAC,MAAA,CAAI,UAAU,MACb,SAAA,CAAAE,EAAAA,IAAC,MAAA,CAAI,UAAU,oBACb,SAAAA,EAAAA,IAACoI,GAAA,CAEC,QAASxD,GAAW/E,EAAM,kBAAkB,EAC5C,KAAAkI,EACA,MAAOlI,EAAM,MACb,YAAAqI,EACA,sBAAuBF,EAAsB,CAACA,EAAoB,EAAE,EAAI,KACxE,SAAWK,GAAuCA,EAAI,GACtD,WAAU,GACV,WAAU,GACV,OAAQP,EACR,cAAenC,EACf,WAAY3F,EAAAA,IAACJ,GAAA,CAA+B,mBAAoBC,EAAM,2BAAA,CAA6B,CAAA,EAX9FA,EAAM,qBAAA,EAaf,EACAC,EAAAA,KAAC,MAAA,CAAI,UAAU,2BACZ,SAAA,CAAA,CAACD,EAAM,gBAAkBA,EAAM,uBAAyB,CAAC,GAACe,EAAAf,EAAM,QAAQ,WAAd,MAAAe,EAAwB,SACjFZ,EAAAA,IAACiH,GAAA,CACC,YAAae,EACb,QAASnI,EAAM,OAAA,CAAA,EAInBC,EAAAA,KAAC,OAAI,UAAW,uBAAuBD,EAAM,eAAiB,GAAK,QAAQ,GACxE,SAAA,CAAA,CAAC,CAACmI,GACDhI,EAAAA,IAACwB,GAAA,CACC,YAAawG,EACb,QAASnI,EAAM,QACf,cAAeA,EAAM,cACrB,iBAAkBA,EAAM,iBACxB,oBAAqBA,EAAM,oBAC3B,YAAaA,EAAM,YACnB,eAAgBA,EAAM,eACtB,mBAAoBA,EAAM,2BAC1B,wBAAyBA,EAAM,wBAC/B,gBAAiBA,EAAM,gBACvB,kBAAmBA,EAAM,kBACzB,gBAAiBA,EAAM,gBACvB,eAAgBA,EAAM,eACtB,OAAQA,EAAM,MAAA,CAAA,EAGjB,CAACmI,GAAuBhI,EAAAA,IAAC0H,GAAA,CAA8B,cAAe7H,EAAM,sBAAA,CAAwB,CAAA,CAAA,CACvG,CAAA,CAAA,CACF,CAAA,EACF,CAEJ,CC7GA,MAAMJ,GAAY,2BACZC,EAAYC,EAAgB,iBAAiBF,EAAS,EAY5D6I,EAAkB,aAAe,CAC/B,qBAAsB,UACtB,oBAAqB,MACvB,EAIO,SAASA,EAAkBzI,EAAsC,CACtE,KAAM,CAAE0I,EAAmBC,CAAqB,EAAIC,GAAAA,SAAe,EAAK,EAExE,OACEzI,EAAAA,IAAC0I,IAAM,MAAO7I,EAAM,MAAO,WAAYA,EAAM,WAC3C,SAAAC,EAAAA,KAAAM,EAAAA,SAAA,CACG,SAAA,CAAAP,EAAM,gBACN8I,EAAA,CACC,SAAA,CAAA3I,EAAAA,IAAC2I,EAAa,OAAb,CACC,QAAS9I,EAAM,WACf,QAASA,EAAM,oBACf,KAAMA,EAAM,kBAAoBH,EAAU,QAAQ,CAAA,CAAA,EAEpDM,EAAAA,IAAC2I,EAAa,OAAb,CACC,QAAS,IAAM,CAAEH,EAAqB,EAAI,EAAG3I,EAAM,eAAA,CAAkB,EACrE,KAAMA,EAAM,mBAAqBH,EAAU,SAAS,EACpD,QAASG,EAAM,qBACf,YAAa0I,EACb,SAAU1I,EAAM,qBAAA,CAAA,CAClB,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAEJ,qCClBM+I,GAAoB,CACxB,MAAO,wBACP,OAAQ,qBACR,WAAY,gCACZ,KAAM,OACN,IAAK,oBAAoBjG,GAAO,GAAG,GACnC,YAAa,WACb,cAAe,MACjB,EAEMlD,GAAY,uCACZC,EAAYC,EAAgB,iBAAiBF,EAAS,EAOrD,SAASoJ,GAA4BhJ,EAAsD,eAChG,KAAM,CAACiJ,CAAc,EAAIC,GAAsBC,GAAc,eAAe,EAEtE,CAAEC,EAA2BC,CAA6B,EAAIvH,EAAM,SAAS,EAAK,EAElFwH,EAAsBC,EAC1BC,EAAoB,oBAAoBxJ,EAAM,qBAAqB,CAAA,EAE/D2F,EAAc4D,GAAkCxI,EAAAuI,EAAoB,OAApB,MAAAvI,EAA0B,cAC9EyI,EAAoB,YAAYF,EAAoB,KAAK,aAAa,EAAI,IAAI,EAC1EG,EAAgBC,GAAA,EAChB9D,EAAU+D,GAA2B3J,EAAM,sBAAuByJ,CAAa,EAC/EG,EAASL,EAA6BM,GAAe,QAAQ,EAEnEC,GAAmB,CAAE,MAAOjK,EAAU,YAAa,CAAE,aAAa6B,EAAA4H,EAAoB,OAApB,YAAA5H,EAA0B,IAAA,CAAM,EAAG,EACrGqI,IAAkBC,EAAAV,EAAoB,OAApB,YAAAU,EAA0B,IAAI,EAChDC,GAAoBC,GAA0BZ,EAAoB,IAAI,CAAC,EACvEa,GAA0CnK,EAAM,qBAAqB,EACrEoK,GAA4CxE,CAAO,EACnDyE,GAAkBrK,EAAM,qBAAqB,EAC7CsK,GAAsBhB,CAAmB,EAEzCiB,GAAoBjB,CAAmB,EACvCkB,GAAqB,CAAE7E,EAAaC,EAASgE,CAAO,CAAC,EAErD,MAAMa,EAAeC,GAA6B9E,CAAO,EAEnD,CAAE,cAAA+E,EAAe,iBAAAC,EAAkB,oBAAAC,CAAA,EAAwBC,IAC/DC,EAAApF,EAAY,OAAZ,YAAAoF,EAAkB,IAClBC,EAAA1B,EAAoB,OAApB,YAAA0B,EAA0B,GAC1B,IAAM3B,EAA6B,EAAK,CAAA,EAGpC4B,EAAa,CAAC,CAACtF,EAAY,MAAQ,CAAC,CAACC,EAAQ,MAAQ,CAAC,CAACgE,EAAO,KAEpE,OACE3J,EAAAA,KAAAM,WAAA,CACE,SAAA,CAAAN,OAAC,MAAA,CACC,SAAA,CAAAE,EAAAA,IAAC+K,GAAA,CAAe,sBAAuBlL,EAAM,qBAAA,CAAuB,EACnEiL,EACG9K,EAAAA,IAAC6H,GAAA,CACD,2BAA4BmD,EAAU,YAAY,aAAa,YAC/D,4BAA6BA,EAAU,YAAY,aAAa,YAChE,uBAAwBA,EAAU,YAAY,aAAa,OAC3D,eAAAlC,EACA,YAAatD,EAAY,KACzB,QAASC,EAAQ,KACjB,cAAA+E,EACA,iBAAAC,EACA,oBAAqB,IAAMvB,EAA6B,EAAI,EAC5D,YAAaO,EAAO,KAAK,YACzB,sBAAuB5J,EAAM,cAC7B,aAAAyK,EACA,MAAA1B,GACA,eAAc,EAAA,CAAA,EAEd5I,EAAAA,IAAC,MAAA,CAAI,UAAU,MAAM,SAAAA,MAAC,MAAA,CAAI,UAAU,QAAQ,SAAAA,EAAAA,IAACiL,GAAA,CAAA,CAAa,CAAA,CAAE,CAAA,CAAM,CAAA,EAExE,EACChC,GACCjJ,EAAAA,IAACsI,EAAA,CACC,MAAO5I,EAAU,iBAAkB,CAAE,WAAY,OAAO,KAAK8K,CAAa,EAAE,QAAU,EAAG,EACzF,WAAY,IAAMtB,EAA6B,EAAK,EACpD,kBAAmBxJ,EAAU,QAAQ,EACrC,qBAAqB,OACrB,eAAgBgL,EAEhB,SAAA1K,EAAAA,IAAC,IAAA,CAAG,SAAAN,EAAU,eAAe,CAAA,CAAE,CAAA,CAAA,CACjC,EAEJ,CAEJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{v as i,cQ as F,p as o}from"./app-CQEXKRTo.js";const y=50;function C(e,c){const h=i.chunk(e,y).map(u=>c(i.uniq(u))),s=F(h),r=i.flatten(s.data),t=s.data.length?r.reduce((u,d)=>({...u,[d.id]:d}),{}):null;return{itemsArr:r,items:t,isFetching:s.isFetching,hasCompleted:s.hasCompleted}}function I(e,c,f){const h=(t=>typeof t=="object"?t.id:t),{fetchItems:s,...r}=q({getRequest:c});return o.useEffect(()=>{e!=null&&e.length&&s(e)},[e==null?void 0:e.map(h).join(",")]),r}function q(e){var p,g;const c=(n=>typeof n=="object"?n.id:n),f=o.useRef(new Set),[h,s]=o.useState([]);function r(n){if(!(n!=null&&n.length))return;const a=[];n.forEach(l=>{const m=c(l);f.current.has(m)||(a.push(l),f.current.add(m))}),a.length&&s(l=>[...l,...i.chunk(a,y).map(e.getRequest)])}const t=F(h),u=i.flatten(t.data),d=t.data.length?u.reduce((n,a)=>({...n,[c(a)]:a}),{}):null;return{hasFirstRequestCompleted:!!((g=(p=t.responses)==null?void 0:p[0])!=null&&g.hasCompleted),itemsArr:u,items:d,isFetching:t.isFetching,fetchItems:r}}export{I as a,C as u};
|
|
2
|
+
//# sourceMappingURL=C_TaaD_7.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"C_TaaD_7.chunk.js","sources":["../../../../libs/shared/src/hooks/UseBatchFetch.ts"],"sourcesContent":["import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst CHUNK_SIZE = 50;\n\nexport interface UseBatchFetchResult<T extends BaseObject> {\n itemsArr: T[];\n items: { [key: string]: T} | null;\n isFetching: boolean;\n hasCompleted: boolean;\n}\n\n/**\n * Used to fetch multiple items by id with Flight. Will fetch 25 items at a time firing off multiple\n * requests if there are more than 25 items.\n * This will return items as null until we have all our items. Items will be returned as an object with\n * their ids as they key for easy mapping\n * \n * @param itemIds \n * @param getRequest \n */\nexport function useBatchFetch<T extends BaseObject>(\n itemIds: string[],\n getRequest: (ids: string[]) => Flight.Request\n): UseBatchFetchResult<T> {\n const chunks = ArrayHelper.chunk<string>(itemIds, CHUNK_SIZE);\n\n const requests = chunks.map(chunk => getRequest(ArrayHelper.uniq(chunk)));\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\n\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce((acc, item) => ({ ...acc, [item.id]: item }), {})\n : null;\n\n return {\n itemsArr,\n items,\n isFetching: responses.isFetching,\n hasCompleted: responses.hasCompleted\n };\n}\n\n/**\n * When you need the useBatchFetch() behavior, but your list of objects to hydrate\n * will grow, such as on a scrolling page. useGrowingBatchFetch() will use local state\n * to determine what we've already built a request for and what items are new\n * as to not re-fetch items - Sha\n */\nexport function useGrowingBatchFetch<TResponse, TObjects = string>(\n objs: TObjects[],\n getRequest: (items: TObjects[]) => Flight.Request,\n _getKey?: (obj: TObjects) => string\n) {\n const getKey = _getKey ?? ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const { fetchItems, ...data } = useGrowingBatchFetchFunc<TResponse, TObjects>({ getRequest, _getKey });\n\n React.useEffect(() => {\n if (!objs?.length)\n return;\n\n fetchItems(objs);\n }, [objs?.map(getKey).join(',')]);\n\n return data;\n}\n\ninterface UseGrowingBatchFetchFuncOptions<TObjects> {\n getRequest: (items: TObjects[]) => Flight.Request;\n _getKey?: (obj: TObjects) => string;\n}\n\n/**\n * When you need the useGrowingBatchFetch() behaviour, but need to trigger the\n * fetch manually and update the objects - Nish \n */\nexport function useGrowingBatchFetchFunc<TResponse, TObjects = string>(\n options: UseGrowingBatchFetchFuncOptions<TObjects>\n) {\n const getKey = options._getKey ?? ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const fetchedItems = React.useRef<Set<string>>(new Set<string>());\n const [ requests, setRequests ] = React.useState<Flight.Request[]>([]);\n\n function fetchItems(objs: TObjects[]) {\n if (!objs?.length)\n return;\n\n const unfetchedItems: TObjects[] = [];\n \n objs.forEach(obj => {\n const key = getKey(obj);\n\n if (fetchedItems.current.has(key))\n return;\n\n unfetchedItems.push(obj);\n fetchedItems.current.add(key);\n });\n \n if (!unfetchedItems.length)\n return;\n \n setRequests(r => ([ ...r, ...ArrayHelper.chunk<TObjects>(unfetchedItems, CHUNK_SIZE).map(options.getRequest) ]));\n }\n\n const responses = Flight.useBasicFetchAll<TResponse[]>(requests);\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce<Record<string, TResponse>>((acc, item) => ({ ...acc, [getKey(item)]: item }), {})\n : null;\n\n return {\n hasFirstRequestCompleted: !!responses.responses?.[0]?.hasCompleted,\n itemsArr,\n items,\n isFetching: responses.isFetching,\n fetchItems\n };\n}\n"],"names":["CHUNK_SIZE","useBatchFetch","itemIds","getRequest","requests","ArrayHelper","chunk","responses","Flight.useBasicFetchAll","itemsArr","items","acc","item","useGrowingBatchFetch","objs","_getKey","getKey","obj","fetchItems","data","useGrowingBatchFetchFunc","React","options","fetchedItems","setRequests","unfetchedItems","key","r","_b","_a"],"mappings":"qDAOA,MAAMA,EAAa,GAkBZ,SAASC,EACdC,EACAC,EACwB,CAGxB,MAAMC,EAFSC,EAAY,MAAcH,EAASF,CAAU,EAEpC,IAAIM,GAASH,EAAWE,EAAY,KAAKC,CAAK,CAAC,CAAC,EAElEC,EAAYC,EAA6BJ,CAAQ,EAEjDK,EAAWJ,EAAY,QAAQE,EAAU,IAAI,EAC7CG,EAAQH,EAAU,KAAK,OACzBE,EAAS,OAAO,CAACE,EAAKC,KAAU,CAAE,GAAGD,EAAK,CAACC,EAAK,EAAE,EAAGA,IAAS,CAAA,CAAE,EAChE,KAEJ,MAAO,CACL,SAAAH,EACA,MAAAC,EACA,WAAYH,EAAU,WACtB,aAAcA,EAAU,YAAA,CAE5B,CAQO,SAASM,EACdC,EACAX,EACAY,EACA,CACA,MAAMC,GAAsBC,GACtB,OAAOA,GAAQ,SACVA,EAAI,GAENA,GAGH,CAAE,WAAAC,EAAY,GAAGC,CAAA,EAASC,EAA8C,CAAE,WAAAjB,CAAoB,CAAC,EAErG,OAAAkB,EAAM,UAAU,IAAM,CACfP,GAAA,MAAAA,EAAM,QAGXI,EAAWJ,CAAI,CACjB,EAAG,CAACA,GAAA,YAAAA,EAAM,IAAIE,GAAQ,KAAK,IAAI,CAAC,EAEzBG,CACT,CAWO,SAASC,EACdE,EACA,SACA,MAAMN,GAA8BC,GAC9B,OAAOA,GAAQ,SACVA,EAAI,GAENA,GAGHM,EAAeF,EAAM,OAAoB,IAAI,GAAa,EAC1D,CAAEjB,EAAUoB,CAAY,EAAIH,EAAM,SAA2B,CAAA,CAAE,EAErE,SAASH,EAAWJ,EAAkB,CACpC,GAAI,EAACA,GAAA,MAAAA,EAAM,QACT,OAEF,MAAMW,EAA6B,CAAA,EAEnCX,EAAK,QAAQG,GAAO,CAClB,MAAMS,EAAMV,EAAOC,CAAG,EAElBM,EAAa,QAAQ,IAAIG,CAAG,IAGhCD,EAAe,KAAKR,CAAG,EACvBM,EAAa,QAAQ,IAAIG,CAAG,EAC9B,CAAC,EAEID,EAAe,QAGpBD,EAAYG,GAAM,CAAE,GAAGA,EAAG,GAAGtB,EAAY,MAAgBoB,EAAgBzB,CAAU,EAAE,IAAIsB,EAAQ,UAAU,CAAE,CAAE,CACjH,CAEA,MAAMf,EAAYC,EAAqCJ,CAAQ,EACzDK,EAAWJ,EAAY,QAAQE,EAAU,IAAI,EAC7CG,EAAQH,EAAU,KAAK,OACzBE,EAAS,OAAkC,CAACE,EAAKC,KAAU,CAAE,GAAGD,EAAK,CAACK,EAAOJ,CAAI,CAAC,EAAGA,IAAS,CAAA,CAAE,EAChG,KAEJ,MAAO,CACL,yBAA0B,CAAC,GAACgB,GAAAC,EAAAtB,EAAU,YAAV,YAAAsB,EAAsB,KAAtB,MAAAD,EAA0B,cACtD,SAAAnB,EACA,MAAAC,EACA,WAAYH,EAAU,WACtB,WAAAW,CAAA,CAEJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as t,O as L,L as N,a7 as S,h as A,a6 as O,bx as Te,i as B,a3 as M,T as _,aW as h,v as $,av as J,p as Ne,l as w,by as Ie,bz as V,I as Ae,bA as Le,aU as _e,aV as $e,aQ as ee,aT as De,aR as He,aS as Fe,r as te,F as ze,bB as Me,Z as Pe,bC as Oe,at as U,bD as ae,d as ue,A as he,g as ge,e as Be,E as Ee,bE as Ve,a as Ue,u as ne,bF as Re,C as Ge,U as qe}from"./app-CQEXKRTo.js";import{T as We}from"./bDb9_r6g.chunk.js";import{b as P,S as Q,a as Ke}from"./DwxW4_xW.chunk.js";import{B as Qe}from"./Dm6PeyeG.chunk.js";import{P as se,S as Xe,I as R,a as G,g as Ze,B as Ye}from"./BZV5U3ST.chunk.js";import{V as xe,T as ve,b as fe,C as I,a as Je}from"./BEjQ8YiC.chunk.js";import{M as ie}from"./mLe4zPMQ.chunk.js";import{L as et}from"./BFH1W3y4.chunk.js";import{S as X}from"./DdCE2h3h.chunk.js";import{u as tt,I as at}from"./BAt5WimN.chunk.js";import{a as re}from"./C_TaaD_7.chunk.js";import{P as nt}from"./DyhdHLt7.chunk.js";import{P as st}from"./Us8IAQKV.chunk.js";import{u as it}from"./CvkQEqoz.chunk.js";import{g as rt}from"./CX5q-0jT.chunk.js";import{u as ct}from"./H-GxGp0N.chunk.js";import"./CBjj_ih-.chunk.js";import"./Bfbk7XQF.chunk.js";import"./rO0zPagv.chunk.js";import"./BGYUqEPH.chunk.js";import"./DZWKI51S.chunk.js";import"./sBa2VMAv.chunk.js";import"./EpoqEdEt.chunk.js";import"./z0Is6h8v.chunk.js";import"./9-ob4xwW.chunk.js";import"./BzFtDyVZ.chunk.js";import"./BIcuRL8o.chunk.js";const ot="share.sharedByMeEmptyState",q=N.encloseNamespace(ot);function lt(e){return t.jsxs(L,{children:[t.jsx(L.Image,{src:e.imageUrl,size:"small"}),t.jsx(L.Heading,{children:q(e.useInteractiveCopy?"interactivesHeading":"genericHeading")}),t.jsx(L.Info,{children:q(e.useInteractiveCopy?"interactivesInfo":"genericInfo")}),!!e.appLink&&t.jsx(L.Cta,{appLink:e.appLink,text:q("cta")})]})}const dt={table:"striped-list no-full-width pb-3",header:"fw-semibold pb-1",headerCell:"py-2 ps-2 text-nowrap",row:"striped-row rounded",cell:"d-flex align-items-center p-2"};var mt=["second","minute","hour","day","week","month","year"];function ut(e,a){if(a===0)return["just now","right now"];var s=mt[Math.floor(a/2)];return e>1&&(s+="s"),[e+" "+s+" ago","in "+e+" "+s]}var ht=["秒","分钟","小时","天","周","个月","年"];function gt(e,a){if(a===0)return["刚刚","片刻后"];var s=ht[~~(a/2)];return[e+" "+s+"前",e+" "+s+"后"]}var Z={},be=function(e,a){Z[e]=a},xt=function(e){return Z[e]||Z.en_US},W=[60,60,24,7,365/7/12,12];function vt(e){return e instanceof Date?e:!isNaN(e)||/^\d+$/.test(e)?new Date(parseInt(e)):(e=(e||"").trim().replace(/\.\d+/,"").replace(/-/,"/").replace(/-/,"/").replace(/(\d)T(\d)/,"$1 $2").replace(/Z/," UTC").replace(/([+-]\d\d):?(\d\d)/," $1$2"),new Date(e))}function ft(e,a){var s=e<0?1:0;e=Math.abs(e);for(var i=e,r=0;e>=W[r]&&r<W.length;r++)e/=W[r];return e=Math.floor(e),r*=2,e>(r===0?9:1)&&(r+=1),a(e,r,i)[s].replace("%s",e.toString())}function bt(e,a){var s=new Date;return(+s-+vt(e))/1e3}var ye=function(e,a,s){var i=bt(e);return ft(i,xt(a))};be("en_US",ut);be("zh_CN",gt);var j=(e=>(e.DirectShare="DirectShare",e.ShareLink="ShareLink",e))(j||{});const yt="_indicatorContainer_1jf11_1",Ct="_indicator_1jf11_1",ce={indicatorContainer:yt,indicator:Ct},jt="share.shareStatusIndicator",F=N.encloseNamespace(jt);function pt(e){if(e.type===j.DirectShare)return F("active");switch(e.status){case P.Active:return F("active");case P.Expired:return F("expired")}}function St(e){if(e.type===j.DirectShare)return"bg-success";switch(e.status){case P.Active:return"bg-success";case P.Expired:return"bg-gray-500"}}function kt(e){var a;return e.share.type===j.DirectShare&&!((a=e.share.recipients)!=null&&a.length)?t.jsx(t.Fragment,{}):e.share.type===j.ShareLink&&e.share.isPasswordProtected?t.jsx(S,{title:F("passwordProtected"),spanHack:!0,children:t.jsx(A,{svg:Te,size:O.Small})}):t.jsx(S,{title:pt(e.share),spanHack:!0,spanHackClassName:ce.indicatorContainer,children:t.jsx("div",{className:`${ce.indicator} ${St(e.share)}`})})}const wt="_thumbnailTitle_14phd_1",Tt={thumbnailTitle:wt};function oe(e){return t.jsx("h3",{title:e.title,className:"h6",children:e.title})}function Nt(e){return e.appLink?t.jsx(B,{appLink:e.appLink,className:`${Tt.thumbnailTitle}`,children:t.jsx(oe,{...e})}):t.jsx(oe,{...e})}const It="_badge_o3vz9_1",At="_mask_o3vz9_4",Lt="_thumbnailContainer_o3vz9_7",D={badge:It,mask:At,thumbnailContainer:Lt},le="shared.collectionThumbnail";function _t(e){var m,v,y;function a(){var f;let u=(f=e.collection)==null?void 0:f.videos;if(u){if(!u.count&&e.collection.typeId===h.Playlist){const c=e.collection;c.clips.count&&(u=c.clips),c.interactives.count&&(u=c.interactives)}return $.first(u.data)}}function s(){var f,c;let u=0;if(e.collection.videos&&e.collection.videos.count&&(u+=e.collection.videos.count),e.collection.typeId===h.Playlist){const g=e.collection;(f=g.interactives)!=null&&f.count&&(u+=g.interactives.count),(c=g.clips)!=null&&c.count&&(u+=g.clips.count)}return u}function i(u){if(ie.isType(u,h.Playlist))return J.Playlist;if(ie.isType(u,h.Series))return J.Series}const r=a(),n=s(),l=((m=e.title)==null?void 0:m.length)||((v=e.subText)==null?void 0:v.length),d={id:e.collection.id.toString(),name:e.collection.name,...e.analyticsData},o={actionType:M.Click,entity:i(e.collection),...e.analyticsOptions};return t.jsxs("div",{children:[t.jsx("div",{className:`position-relative ${D.thumbnailContainer} z-1`,children:t.jsxs(B,{appLink:e.appLink,analyticsData:d,analyticsOptions:o,preventFocus:!0,children:[e.showMask&&t.jsx("div",{className:`${D.mask} position-absolute w-100 h-100 rounded-3 bg-dark bg-gradient z-1 bg-opacity-50 pointer-events-none`,children:t.jsxs("div",{className:`${D.badge} d-flex align-items-center w-fit flex-grow-0 bg-dark rounded-pill ps-1 m-2`,children:[t.jsx(A,{svg:se,className:"svg-container text-white"}),t.jsx("p",{className:"d-inline fw-medium text-white mb-0",children:(y=e.hoverText)!=null&&y.length?t.jsx("span",{children:e.hoverText}):t.jsx(_,{namespace:le,phrase:"playAll"})})]})}),r&&t.jsx(xe,{video:r,imageOptions:e.imageOptions,textPosition:ve.Independent,type:"cosmetic",hideMask:!0,hideRating:!0,hideDuration:!0,hideVideoTypeBadge:!0}),!r&&t.jsx("div",{className:"ratio ratio-16x9 bg-light rounded-3",children:t.jsx("div",{className:"d-flex justify-content-center align-items-center",children:t.jsx(A,{svg:se,className:"w-33 opacity-25 text-gray-400"})})}),e.showVideoCount&&t.jsxs("div",{className:`${D.badge} d-flex align-items-center w-fit bg-dark bg-opacity-75 rounded-pill position-absolute bottom-0 end-0 ps-1 m-2`,children:[t.jsx(A,{svg:Xe,className:"svg-container text-white me-1"}),t.jsx("p",{className:"d-inline fw-semibold text-white mb-0",children:e.onlyCount?t.jsx("span",{children:n}):t.jsx(_,{namespace:le,phrase:"videos",options:{count:n,smartCount:n}})})]})]})}),l&&t.jsxs("div",{className:"mt-2 d-flex flex-column",children:[e.subText&&t.jsx(fe,{title:e.subText,appLink:e.subTextAppLink,children:e.subText}),e.title&&t.jsx(Nt,{title:e.collection.name,appLink:e.titleAppLink})]})]})}const $t="_posterFallbackSvg_1239k_4",Dt="_coverFallbackSvg_1239k_7",Ht="_thumbnailContainer_1239k_10",Ft="_requireMarking_1239k_13",zt="_badge_1239k_19",Mt="_bar_1239k_22",Pt="_a_1239k_27",Ot="_b_1239k_19",Bt="_c_1239k_7",b={posterFallbackSvg:$t,coverFallbackSvg:Dt,thumbnailContainer:Ht,requireMarking:Ft,badge:zt,bar:Mt,a:Pt,b:Ot,c:Bt},Et="shared.sharedObjectImage",H="rounded overflow-hidden";function Vt(e){const a=Ie.getDisplayImageFromObject(e);if(w.isVideoType(e))return{image:a,imageType:V.Thumbnails,imageClassName:H,imageFallbackComponent:t.jsx(R,{type:G.Video})};switch(e.typeId){case h.Series:return{image:a,imageType:V.TallPosters,imageClassName:H,imageFallbackComponent:t.jsx(R,{type:G.Series,svgContainerClassName:b.posterFallbackSvg})};case h.Playlist:return{image:a,imageType:V.Covers,imageClassName:a!=null&&a.url?H:`${H} ${Ze(e.name,Ye)}`,imageFallbackComponent:t.jsx(R,{type:G.Playlist,svgContainerClassName:a!=null&&a.url?b.coverFallbackSvg:"d-none",extraClasses:!(a!=null&&a.url)&&"bg-transparent"})}}}function Ut(){return t.jsxs("div",{className:"d-flex pointer-events-none position-absolute bottom-0 start-0 h-100 w-100 z-1 justify-content-center align-items-center",children:[t.jsx("div",{className:"position-absolute bg-dark bg-gradient opacity-50 w-100 h-100 z-0 rounded-3"}),t.jsxs("div",{className:"d-flex align-items-end gap-2 h-50 z-1",children:[t.jsx("div",{className:"d-flex align-items-end h-50",children:t.jsx("div",{className:`${b.bar} ${b.a} rounded shadow`})}),t.jsx("div",{className:"d-flex align-items-end h-75",children:t.jsx("div",{className:`${b.bar} ${b.b} rounded shadow`})}),t.jsx("div",{className:"d-flex align-items-end h-100",children:t.jsx("div",{className:`${b.bar} ${b.c} rounded shadow`})})]})]})}function Rt(e){if(w.isVideoType(e))return 16/9;if(e.typeId===h.Playlist)return 1;if(e.typeId===h.Series)return 9/16}Ce.defaultProps={imageOptions:{size:Ae.Small}};function Ce(e){const a=Ne.useCallback(o=>{!o||!e.fixedHeight||(o.style.width=`${o.offsetHeight*Rt(e.object)}px`)},[]),s=w.isVideoType(e.object),{image:i,imageType:r,imageClassName:n,imageFallbackComponent:l}=Vt(e.object),d=e.showVideoMetadata?{hideBottomBar:e.hideBottomBar}:{hideDuration:!0,hideMask:!0,hideRating:!0,hideVideoBadgeType:!0,hideBottomBar:!0};return t.jsx("div",{className:"d-flex align-items-center justify-content-center w-100 h-100",children:t.jsxs("div",{ref:a,className:e.fixedHeight?"h-100":"w-100",children:[s&&t.jsxs("div",{className:`${b.thumbnailContainer} position-relative`,children:[e.showInsightsMask&&t.jsx(Ut,{}),t.jsx(B,{appLink:e.appLink,children:t.jsx(xe,{video:e.object,size:e.thumbnailSize,imageOptions:e.imageOptions,textPosition:ve.Independent,type:"cosmetic",imageClassName:e.imageClassName,...d})}),!!e.requireMarking&&t.jsx("div",{className:`${e.showInsightsMask&&b.requireMarking} position-absolute bottom-0 end-0 z-1 m-2`,children:t.jsx("div",{className:`${b.badge} d-flex align-items-center bg-light-ultramarine text-ultramarine fw-semibold rounded-pill w-fit mt-1 px-2`,children:t.jsx(_,{namespace:Et,phrase:"requireMarking",options:{smartCount:e.requireMarking}})})})]}),!s&&t.jsx(t.Fragment,{children:"videos"in e.object?t.jsx(_t,{collection:e.object,imageOptions:e.imageOptions,appLink:e.appLink,analyticsData:{id:e.object.id,name:e.object.name},analyticsOptions:{entity:Q.getAnalyticsEntity(e.object.type),actionType:M.Click,location:e.locationContext},showMask:e.showCollectionMask,showVideoCount:e.showVideoCount,onlyCount:e.onlyCount}):t.jsx(Qe,{data:i==null?void 0:i.url,imageType:r,imageOptions:e.imageOptions,appLink:e.appLink,className:n,analyticsData:{id:e.object.id,name:e.object.name},analyticsOptions:{entity:Q.getAnalyticsEntity(e.object.type),actionType:M.Click,location:e.locationContext},children:l})})]})})}const Gt="shared.avatarList",de=N.encloseNamespace(Gt);je.defaultProps={maxAvatars:5};function je(e){const a=e.items.length>e.maxAvatars?e.items.slice(0,e.maxAvatars-1):e.items,s=e.items.length>a.length?e.items.slice(e.maxAvatars-1):[],i=e.avatarItem,r=s.length,n=e.avatarSize==="sm"?4:8;function l(){return e.getHiddenTooltip?e.getHiddenTooltip(s):e.roleToDisplay?de(e.roleToDisplay==="staff"?"staff":"student",{count:r,smartCount:r}):de("users",{count:r,smartCount:r})}function d(){return{marginRight:`-${(a.length-1+(s.length?1:0)+(e.hasShareLink?1:0))*n}px`}}function o(m){return{transform:`translateX(${(e.hasShareLink?m+1:m)*-n}px)`,zIndex:e.maxAvatars-m}}return a.length===0&&s.length===0?t.jsx(t.Fragment,{}):t.jsxs("div",{className:"d-flex",style:d(),children:[e.hasShareLink&&t.jsx("div",{style:{zIndex:e.maxAvatars+1},children:t.jsx(pe,{text:e.shareLinkText,avatarSize:e.avatarSize,className:"bg-dark text-white"})}),a.map((m,v)=>t.jsx("div",{className:`${e.avatarContainerClassname||""}`,style:o(v),children:t.jsx(i,{item:m,imageCdnUrl:e.imageCdnUrl,index:v,maxAvatars:e.maxAvatars})},m.id)),!!s.length&&t.jsx("div",{className:`${e.avatarContainerClassname||""} bg-white rounded-circle`,style:{transform:`translateX(${a.length*-n}px)`,zIndex:e.maxAvatars-a.length},children:t.jsx(S,{title:l(),spanHack:!0,spanHackClassName:"h-100 w-100",children:t.jsx("div",{className:`d-flex justify-content-center align-items-center border border-dark rounded-circle h-100 w-100 ${e.numberClassname||""}`,children:`+${s.length}`})})})]})}const qt="_avatarContainer_p1zht_1",Wt="_sm_p1zht_5",Kt="_sharedAvatar_p1zht_10",T={avatarContainer:qt,sm:Wt,sharedAvatar:Kt},Qt="reportsShare.sharedToAvatarList",C=N.encloseNamespace(Qt);function Xt(e){const a=$.countBy(e,"typeId"),s=a[h.User],i=a[h.Classroom],r=a[h.ClassroomGroup];if(s&&i&&r)return C("classroomsGroupsAndUsers",{userCount:s,classroomCount:i,groupCount:r});if(s&&i)return C("classroomsAndUsers",{userCount:s,classroomCount:i});if(s&&r)return C("groupsAndUsers",{userCount:s,groupCount:r});if(i&&r)return C("classroomsAndGroups",{classroomCount:i,groupCount:r});if(s)return C("users",{userCount:s});if(i)return C("classrooms",{classroomCount:i});if(r)return C("groups",{groupCount:r})}function Zt(e){var n,l,d,o,m;const a=((n=e.item)==null?void 0:n.typeId)===h.User&&e.item,s=((l=e.item)==null?void 0:l.typeId)===h.Classroom&&e.item,i=((d=e.item)==null?void 0:d.typeId)===h.ClassroomGroup&&e.item,r="d-flex justify-content-center align-items-center text-white rounded-circle h-100 w-100";return t.jsxs(t.Fragment,{children:[!!a&&t.jsx(S,{title:`${a.name} ${a.surname}`,spanHack:!0,spanHackClassName:"h-100 w-100",children:t.jsx(_e,{imageUrl:(o=a.avatar)==null?void 0:o.url,imageCdnUrl:e.imageCdnUrl,initials:$e.getInitials(a.name,a.surname),extraClasses:T.sharedAvatar})}),!!s&&t.jsx(S,{title:s.name,spanHack:!0,spanHackClassName:"h-100 w-100",children:t.jsx("div",{className:r,children:t.jsx(ee,{svg:De,svgSize:O.Large,variant:"teal"})})}),!!i&&t.jsx(S,{title:i.name,spanHack:!0,spanHackClassName:"h-100 w-100",children:t.jsx("div",{className:r,children:t.jsx(ee,{svg:Fe,variant:He((m=i.metadata)==null?void 0:m.colour)})})})]})}function Yt(e){return t.jsx("div",{className:`${T.avatarContainer} ${e.avatarSize==="sm"?T.sm:""}`,children:t.jsx(S,{title:C("anonymous"),spanHack:!0,spanHackClassName:"bg-light text-dark d-flex justify-content-center align-items-center rounded-circle h-100 w-100",children:t.jsx(A,{svg:Le,size:e.avatarSize==="sm"?O.Small:null})})})}function pe(e){return t.jsx("div",{className:`${T.avatarContainer} ${e.avatarSize==="sm"?T.sm:""}`,children:t.jsx(S,{title:e.text||C("sharedLink"),spanHack:!0,spanHackClassName:`bg-light text-dark d-flex justify-content-center align-items-center rounded-circle h-100 w-100 ${e.className||""}`,children:t.jsx(A,{svg:et,size:e.avatarSize==="sm"?O.Small:null})})})}Se.defaultProps={maxAvatars:5};function Se(e){return t.jsx(je,{...e,items:e.recipients,avatarItem:Zt,avatarContainerClassname:`${T.avatarContainer} ${e.avatarSize==="sm"?T.sm:""}`,getHiddenTooltip:Xt,hasShareLink:e.hasShareLink,shareLinkText:e.shareLinkText})}var k=(e=>(e.None="None",e.Complete="Complete",e.Incomplete="Incomplete",e))(k||{});const Jt={groupByDateShared(e){const a=$.groupBy(e,"dateShared");return Object.keys(a).sort().reverse().reduce((i,r)=>{const n=ye(r);return i[n]||(i[n]=[]),i[n]=i[n].concat(a[r]),i},{})},mapActivityStatusToCheckMarkStatus(e){switch(e){case k.Complete:return I.Complete;case k.Incomplete:return I.Incomplete;case k.None:return I.None}},mapCheckMarkStatusToActivityStatus(e){switch(e){case I.Complete:return k.Complete;case I.Incomplete:return k.Incomplete;case I.None:return k.None}}};function ea(e){const a=te.useMemo(()=>e.actions.sort((n,l)=>n.order-l.order),[e.actions]),s=[],i=[];a.forEach(n=>{n.button?s.push(n):i.push(n)});let r="d-flex";return e.className&&(r+=` ${e.className}`),!s.length&&!i.length?t.jsx(t.Fragment,{}):t.jsxs("div",{className:r,children:[s.length?s.map((n,l)=>t.jsx(te.Fragment,{children:(()=>{if(n.label){const d=ze.isFunction(n.label)?n.label():t.jsx(t.Fragment,{children:n.label});return t.jsx(Me,{appLink:n.appLink,href:n.href,onClick:n.onClick,svg:n.svg,svgSize:e.dropdownToggleSvgSize,className:n.className,tooltip:n.tooltip,showSpinner:n.showSpinner,analyticsData:n.analyticsData,analyticsOptions:n.analyticsOptions,openInNewTab:n.openInNewTab,disabled:n.disabled,children:d})}return t.jsx(Pe,{appLink:n.appLink,href:n.href,onClick:n.onClick,svg:n.svg,className:n.className,analyticsData:n.analyticsData,analyticsOptions:n.analyticsOptions,openInNewTab:n.openInNewTab,disabled:n.disabled,showBorder:n.showBorder,customSize:e.customSize,ariaLabel:n.tooltip,tooltip:n.tooltip})})()},l)):t.jsx(t.Fragment,{}),e.sortComponent&&e.sortComponent,i.length?t.jsx(Oe,{actions:i,dropdownToggleClassName:e.actionsDropdownClassName,dropdownToggleSvgSize:e.dropdownToggleSvgSize,fetchMore:e.fetchMore}):t.jsx(t.Fragment,{})]})}const Y="share.sharedByMeTable",z=N.encloseNamespace(Y);function ta(e){var s;if(e.type===j.ShareLink||!((s=e==null?void 0:e.recipients)!=null&&s.length))return e.dateCreated;const a=e.recipients.map(i=>i.dateShared);return a.sort((i,r)=>ae.isSame(i,r)?0:ae.isAfter(i,r)?1:-2),a.length?$.last(a):""}function aa(e){const{index:a,dateHeading:s,getObjectAppLink:i,getObjectActions:r,imageCdnUrl:n,showStatus:l,showViewCount:d,breakpoints:o,yearGroups:m}=e,v=o&&(o.xs||o.sm),y=[{Header:l?"":s,accessor:"sharedObject",id:"image",Cell:({value:c})=>t.jsx("div",{className:"w-100",children:t.jsx(Ce,{object:c,appLink:i(c),showVideoMetadata:!0,locationContext:U.SharedByMe})}),minWidth:140,maxWidth:30},{accessor:"sharedObject",id:"name",Cell:({value:c})=>{var p;function g(){switch(c.typeId){case h.Series:return"series";case h.Playlist:return"playlist"}}if(c.name){if(w.isVideoType(c)&&!((p=w.getCanBeConsumed(c))!=null&&p.canNavigate))return t.jsx("span",{className:"clamp-2",children:c.name});const x=g();return t.jsxs("div",{className:"clamp-2",children:[x&&t.jsx(fe,{children:t.jsx(_,{namespace:Y,phrase:x})}),w.isVideoType(c)&&t.jsx(Je,{type:"series",video:c,appLink:"series"in c&&c.series?i(c.series):null,analyticsOptions:{location:U.Insights}}),t.jsx(B,{appLink:i(c),analyticsData:{id:c.id,name:c.name},analyticsOptions:{entity:Q.getAnalyticsEntity(c.type),actionType:M.Click,location:U.SharedByMe},children:c.name})]})}return t.jsx("span",{children:t.jsx(_,{namespace:Y,phrase:"videoUnavailable"})})},width:60},{Header:a===0?z("sharedTo"):"",accessor:"sharedToData",Cell:({value:c})=>{const{share:g,sharedObject:p,recipients:x}=c;if(!x){const E=g.type===j.ShareLink&&Ke.getIconAndText({entity:p,entityTypeId:p.typeId,hasStudentExp:!1,isPasswordProtected:g.isPasswordProtected,linkExpireDate:g.linkExpireDate,privacy:{privacy:g.privacy,overrideRestrictions:g.overrideRestrictions},status:g.status,yearGroups:m??[]});return t.jsx(pe,{text:E==null?void 0:E.text})}return x!=null&&x.length?t.jsx(Se,{recipients:x,imageCdnUrl:n,maxAvatars:v?1:2}):t.jsx(Yt,{})},width:40},!v&&{Header:a===0?z("shared"):"",id:"dateShared",accessor:c=>ye(c.dateShared),width:40},{accessor:"sharedObject",id:"actions",Cell:({value:c})=>t.jsx(ea,{actions:r(c),className:"w-100 justify-content-end pe-2"}),width:20}],u={Header:s,accessor:"share",id:"status",Cell:({value:c})=>t.jsx(kt,{share:c}),width:5},f={Header:z("views"),accessor:"viewCount",width:30};return l&&y.splice(0,0,u),d&&y.splice(y.length-1,0,f),y.filter(Boolean)}function na(e,a,s,i){const r=[];return e.forEach(n=>{var o;const l=a==null?void 0:a[n.objectId];let d=null;n.type===j.DirectShare&&(d=[],(o=n.recipients)==null||o.forEach(m=>{const v=s==null?void 0:s[m.id];v&&d.push(v)})),l&&r.push({share:n,sharedObject:l,sharedToData:{share:n,sharedObject:l,recipients:d},dateShared:ta(n),viewCount:n.viewCount??0})}),i?Jt.groupByDateShared(r):{[z("title")]:r}}function sa(e){const a=na(e.sentShares,e.sharedObjects,e.shareRecipients,!!e.groupByDateShared);return t.jsx(t.Fragment,{children:Object.keys(a).map((s,i)=>t.jsx(We,{columns:aa({index:i,dateHeading:s,getObjectAppLink:e.getObjectAppLink,getObjectActions:e.getObjectActions,imageCdnUrl:e.imageCdnUrl,showStatus:e.showStatus,showViewCount:e.showViewCount,breakpoints:e.breakpoints,yearGroups:e.yearGroups}),data:a[s],theme:dt},i))})}const ke={getDirectShares(e){return(e==null?void 0:e.filter(a=>a.type===j.DirectShare))??[]},getRecipients(e){return $.flatten(ke.getDirectShares(e).map(a=>a.recipients??[]))}};function ia(e){return t.jsx("svg",{...e,children:t.jsx("path",{fill:"currentColor",d:"M17.5 5h1a.5.5 0 0 1 .5.5v13a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-13a.5.5 0 0 1 .5-.5m-1.5.5v13a1.5 1.5 0 0 0 1.5 1.5h1a1.5 1.5 0 0 0 1.5-1.5v-13A1.5 1.5 0 0 0 18.5 4h-1A1.5 1.5 0 0 0 16 5.5m-4.5 3.638a.5.5 0 0 0-.5.5V18.5a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5V9.638a.5.5 0 0 0-.5-.5zm-1.5.5a1.5 1.5 0 0 1 1.5-1.5h1a1.5 1.5 0 0 1 1.5 1.5V18.5a1.5 1.5 0 0 1-1.5 1.5h-1a1.5 1.5 0 0 1-1.5-1.5zM4 12.74a1.5 1.5 0 0 1 1.5-1.5h1a1.5 1.5 0 0 1 1.5 1.5V18.5A1.5 1.5 0 0 1 6.5 20h-1A1.5 1.5 0 0 1 4 18.5zm1.5-.5a.5.5 0 0 0-.5.5V18.5a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-5.759a.5.5 0 0 0-.5-.5z"})})}const ra="reportsInteractives.sharedInteractives",K=N.encloseNamespace(ra);function ca(){const e=Be();return e?a=>{const{start:s,end:i,userId:r,groupId:n}=e;return X.sentShare({start:s,end:i,recipientUserId:r,recipientGroupId:n,objectTypeId:h.Interactive,cursor:a})}:!1}function oa(){const e=we(),a=ct(Ee.getPrimaryObjectUrl);return s=>{const{canConsume:i}=w.getCanBeConsumed(s);if(!i)return[];const r=[{tooltip:K("viewResults"),svg:ia,appLink:e(s),className:"me-2",button:!0},{label:K("editShareSettings"),appLink:{application:ge.DEFAULT,action:he.Default.SHARE,args:[s.id],params:{entityType:"interactive"}}}];return a&&r.push({label:K("viewOriginal"),href:a(s),openInNewTab:!0}),r}}function we(){const e=ue();return a=>({application:ge.INTERACTIVES,action:he.Interactives.OVERVIEW,args:[a.id],params:e})}function la(){const e=ue();return`shared:interactives:table:${rt(e)}`}const da="reportsInteractives.sharedInteractives",me=N.encloseNamespace(da);function Pa(){var p;const e=Ve();Ue({title:me("interactives")}),it(me("interactives"));const a=ne(qe.currentUser()),s=ne(Ge.config()),i=la(),r=we(),n=oa(),l=ca();function d(x){l&&e(l(x))}const{items:o,hasMore:m,isFetching:v,nextCursor:y,hasFirstPageCompleted:u}=tt(l,d),f=re(o==null?void 0:o.map(x=>x.objectId),X.sharedObjectsById),c=re(ke.getRecipients(o).map(x=>x.id),x=>X.getRecipientsById(x,a.data.customerId)),g=v||f.isFetching||c.isFetching;return!u||o!=null&&o.length&&!f.hasFirstRequestCompleted?t.jsx(nt,{variant:"interactives",children:t.jsx(st,{variant:"interactives"})}):o.length?t.jsxs(t.Fragment,{children:[t.jsx(sa,{sentShares:o,sharedObjects:f.items,shareRecipients:c.items,getObjectAppLink:r,getObjectActions:n,showStatus:!0,showViewCount:!0,imageCdnUrl:(p=s.data)==null?void 0:p.imageCdnUrl},i),(m||g)&&t.jsx(at,{isFetching:g,fetchNext:d,nextCursor:y})]}):t.jsx("div",{className:"bg-white rounded my-3 py-5",children:t.jsx("div",{className:"pb-5",children:t.jsx(lt,{imageUrl:Re.EmptyStates.Interactives.SharedInteractives,useInteractiveCopy:!0})})})}export{Pa as SharedInteractivesView};
|
|
2
|
+
//# sourceMappingURL=C_zppm7j.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"C_zppm7j.chunk.js","sources":["../../../../libs/shared/src/apps/share/components/shared-by-me/empty-state/SharedByMeEmptyState.tsx","../../../../libs/shared/src/apps/share/constants/TableTheme.ts","../../../../../node_modules/timeago.js/esm/lang/en_US.js","../../../../../node_modules/timeago.js/esm/lang/zh_CN.js","../../../../../node_modules/timeago.js/esm/register.js","../../../../../node_modules/timeago.js/esm/utils/date.js","../../../../../node_modules/timeago.js/esm/format.js","../../../../../node_modules/timeago.js/esm/index.js","../../../../libs/shared/src/enums/ShareType.ts","../../../../libs/shared/src/apps/share/components/shared-by-me/share-status-indicator/ShareStatusIndicator.tsx","../../../../libs/shared/src/components/thumbnails/collection/title/CollectionThumbnailTitle.tsx","../../../../libs/shared/src/components/thumbnails/collection/CollectionThumbnail.tsx","../../../../libs/shared/src/apps/share/components/shared-object-image/SharedObjectImage.tsx","../../../../libs/shared/src/components/avatar-list/AvatarList.tsx","../../../../libs/shared/src/apps/share/components/shared-to-avatar-list/SharedToAvatarList.tsx","../../../../libs/shared/src/enums/ShareActivityStatus.ts","../../../../libs/shared/src/apps/share/utils/ShareHelper.ts","../../../../libs/shared/src/components/actions/Actions.tsx","../../../../libs/shared/src/apps/share/components/shared-by-me/table/SharedByMeTableUtils.tsx","../../../../libs/shared/src/apps/share/components/shared-by-me/table/SharedByMeTable.tsx","../../../../libs/shared/src/utils/ShareHelper.ts","../../../../libs/shared/src/images/svg/objects/AnalyticsSvg.tsx","../../src/apps/interactives/views/shared-interactives/SharedInteractivesViewUtils.tsx","../../src/apps/interactives/views/shared-interactives/SharedInteractivesView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nconst namespace = 'share.sharedByMeEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SharedByMeEmptyStateProps {\n imageUrl: string;\n appLink?: Core.AppLink;\n useInteractiveCopy?: boolean;\n}\n\nexport function SharedByMeEmptyState(props: SharedByMeEmptyStateProps): JSX.Element {\n return (\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} size='small'/>\n <EmptyState.Heading>\n {getPhrase(props.useInteractiveCopy ? 'interactivesHeading' : 'genericHeading')}\n </EmptyState.Heading>\n <EmptyState.Info>{getPhrase(props.useInteractiveCopy ? 'interactivesInfo' : 'genericInfo')}</EmptyState.Info>\n {!!props.appLink &&\n <EmptyState.Cta appLink={props.appLink} text={getPhrase('cta')} />\n }\n </EmptyState>\n );\n}","import { TableTheme } from 'libs/shared/components/table/Table';\n\nexport const SHARES_TABLE_THEME: TableTheme = {\n table: 'striped-list no-full-width pb-3',\n header: 'fw-semibold pb-1',\n headerCell: `py-2 ps-2 text-nowrap`,\n row: 'striped-row rounded',\n cell: 'd-flex align-items-center p-2'\n};","var EN_US = ['second', 'minute', 'hour', 'day', 'week', 'month', 'year'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['just now', 'right now'];\n var unit = EN_US[Math.floor(idx / 2)];\n if (diff > 1)\n unit += 's';\n return [diff + \" \" + unit + \" ago\", \"in \" + diff + \" \" + unit];\n}\n//# sourceMappingURL=en_US.js.map","var ZH_CN = ['秒', '分钟', '小时', '天', '周', '个月', '年'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['刚刚', '片刻后'];\n var unit = ZH_CN[~~(idx / 2)];\n return [diff + \" \" + unit + \"\\u524D\", diff + \" \" + unit + \"\\u540E\"];\n}\n//# sourceMappingURL=zh_CN.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\n/**\n * All supported locales\n */\nvar Locales = {};\n/**\n * register a locale\n * @param locale\n * @param func\n */\nexport var register = function (locale, func) {\n Locales[locale] = func;\n};\n/**\n * get a locale, default is en_US\n * @param locale\n * @returns {*}\n */\nexport var getLocale = function (locale) {\n return Locales[locale] || Locales['en_US'];\n};\n//# sourceMappingURL=register.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nvar SEC_ARRAY = [\n 60,\n 60,\n 24,\n 7,\n 365 / 7 / 12,\n 12,\n];\n/**\n * format Date / string / timestamp to timestamp\n * @param input\n * @returns {*}\n */\nexport function toDate(input) {\n if (input instanceof Date)\n return input;\n // @ts-ignore\n if (!isNaN(input) || /^\\d+$/.test(input))\n return new Date(parseInt(input));\n input = (input || '')\n // @ts-ignore\n .trim()\n .replace(/\\.\\d+/, '') // remove milliseconds\n .replace(/-/, '/')\n .replace(/-/, '/')\n .replace(/(\\d)T(\\d)/, '$1 $2')\n .replace(/Z/, ' UTC') // 2017-2-5T3:57:52Z -> 2017-2-5 3:57:52UTC\n .replace(/([+-]\\d\\d):?(\\d\\d)/, ' $1$2'); // -04:00 -> -0400\n return new Date(input);\n}\n/**\n * format the diff second to *** time ago, with setting locale\n * @param diff\n * @param localeFunc\n * @returns\n */\nexport function formatDiff(diff, localeFunc) {\n /**\n * if locale is not exist, use defaultLocale.\n * if defaultLocale is not exist, use build-in `en`.\n * be sure of no error when locale is not exist.\n *\n * If `time in`, then 1\n * If `time ago`, then 0\n */\n var agoIn = diff < 0 ? 1 : 0;\n /**\n * Get absolute value of number (|diff| is non-negative) value of x\n * |diff| = diff if diff is positive\n * |diff| = -diff if diff is negative\n * |0| = 0\n */\n diff = Math.abs(diff);\n /**\n * Time in seconds\n */\n var totalSec = diff;\n /**\n * Unit of time\n */\n var idx = 0;\n for (; diff >= SEC_ARRAY[idx] && idx < SEC_ARRAY.length; idx++) {\n diff /= SEC_ARRAY[idx];\n }\n /**\n * Math.floor() is alternative of ~~\n *\n * The differences and bugs:\n * Math.floor(3.7) -> 4 but ~~3.7 -> 3\n * Math.floor(1559125440000.6) -> 1559125440000 but ~~1559125440000.6 -> 52311552\n *\n * More information about the performance of algebraic:\n * https://www.youtube.com/watch?v=65-RbBwZQdU\n */\n diff = Math.floor(diff);\n idx *= 2;\n if (diff > (idx === 0 ? 9 : 1))\n idx += 1;\n return localeFunc(diff, idx, totalSec)[agoIn].replace('%s', diff.toString());\n}\n/**\n * calculate the diff second between date to be formatted an now date.\n * @param date\n * @param relativeDate\n * @returns {number}\n */\nexport function diffSec(date, relativeDate) {\n var relDate = relativeDate ? toDate(relativeDate) : new Date();\n return (+relDate - +toDate(date)) / 1000;\n}\n/**\n * nextInterval: calculate the next interval time.\n * - diff: the diff sec between now and date to be formatted.\n *\n * What's the meaning?\n * diff = 61 then return 59\n * diff = 3601 (an hour + 1 second), then return 3599\n * make the interval with high performance.\n **/\nexport function nextInterval(diff) {\n var rst = 1, i = 0, d = Math.abs(diff);\n for (; diff >= SEC_ARRAY[i] && i < SEC_ARRAY.length; i++) {\n diff /= SEC_ARRAY[i];\n rst *= SEC_ARRAY[i];\n }\n d = d % rst;\n d = d ? rst - d : rst;\n return Math.ceil(d);\n}\n//# sourceMappingURL=date.js.map","import { formatDiff, diffSec } from './utils/date';\nimport { getLocale } from './register';\n/**\n * format a TDate into string\n * @param date\n * @param locale\n * @param opts\n */\nexport var format = function (date, locale, opts) {\n // diff seconds\n var sec = diffSec(date, opts && opts.relativeDate);\n // format it with locale\n return formatDiff(sec, getLocale(locale));\n};\n//# sourceMappingURL=format.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nimport en_US from './lang/en_US';\nimport zh_CN from './lang/zh_CN';\nimport { register } from './register';\nregister('en_US', en_US);\nregister('zh_CN', zh_CN);\nexport { format } from './format';\nexport { render, cancel } from './realtime';\nexport { register };\n//# sourceMappingURL=index.js.map","export enum ShareType {\n DirectShare = 'DirectShare',\n ShareLink = 'ShareLink'\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { ShareLinkStatus } from 'libs/shared/enums/ShareLinkStatus';\nimport { ShareType } from 'libs/shared/enums/ShareType';\nimport { LockSvg } from 'libs/shared/images/svg/status/LockSvg';\nimport { UnionShareObject } from 'libs/shared/interfaces';\n\nimport styles from './share-status-indicator.module.scss';\n\nconst namespace = 'share.shareStatusIndicator';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getStatusPhrase(share: UnionShareObject): string {\n if (share.type === ShareType.DirectShare)\n return getPhrase('active');\n\n switch (share.status) {\n case ShareLinkStatus.Active:\n return getPhrase('active');\n\n case ShareLinkStatus.Expired:\n return getPhrase('expired');\n }\n}\n\nfunction getBgColourClassName(share: UnionShareObject): string {\n if (share.type === ShareType.DirectShare)\n return 'bg-success';\n \n switch (share.status) {\n case ShareLinkStatus.Active:\n return 'bg-success';\n\n case ShareLinkStatus.Expired:\n return 'bg-gray-500';\n }\n}\n\ninterface ShareStatusIndicatorProps {\n share: UnionShareObject;\n}\n\n/**\n * TODO: add support for deleted share links (currently the api doesn't return these.)\n */\nexport function ShareStatusIndicator(props: ShareStatusIndicatorProps): JSX.Element {\n if (props.share.type === ShareType.DirectShare && !props.share.recipients?.length)\n return <></>;\n\n if (props.share.type === ShareType.ShareLink && props.share.isPasswordProtected) {\n return (\n <Tooltip title={getPhrase('passwordProtected')} spanHack>\n <SvgContainer svg={LockSvg} size={SvgContainerSize.Small} />\n </Tooltip>\n );\n }\n\n return (\n <Tooltip\n title={getStatusPhrase(props.share)}\n spanHack\n spanHackClassName={styles.indicatorContainer}\n >\n <div className={`${styles.indicator} ${getBgColourClassName(props.share)}`} />\n </Tooltip>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './collection-thumbnail-title.module.scss';\n\ninterface BaseCollectionThumbnailTitleProps {\n title: string;\n}\n\nfunction BaseCollectionThumbnailTitle(props: BaseCollectionThumbnailTitleProps): JSX.Element {\n return (\n <h3 title={props.title} className='h6'>{props.title}</h3>\n );\n}\n\ninterface CollectionThumbnailTitleProps extends BaseCollectionThumbnailTitleProps {\n appLink: Core.AppLink;\n}\n\nexport function CollectionThumbnailTitle(props: CollectionThumbnailTitleProps) {\n if (!props.appLink) {\n return (\n <BaseCollectionThumbnailTitle {...props} />\n );\n }\n \n return (\n <AppLink appLink={props.appLink} className={`${styles.thumbnailTitle}`}>\n <BaseCollectionThumbnailTitle {...props} />\n </AppLink>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsOptions, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CollectionThumbnailTitle } from 'libs/shared/components/thumbnails/collection/title/CollectionThumbnailTitle';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { PlaySvg } from 'libs/shared/images/svg/actions/PlaySvg';\nimport { SeriesSvg } from 'libs/shared/images/svg/objects/SeriesSvg';\nimport { Playlist, Series } from 'libs/shared/interfaces';\nimport { ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\nimport styles from './collection-thumbnail.module.scss';\n\nconst namespace = 'shared.collectionThumbnail';\n\ntype SupportedContentType = Playlist | Series;\n\ninterface CollectionThumbnailProps {\n appLink?: Core.AppLink\n collection: SupportedContentType;\n imageOptions?: ImageOptions;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n showMask?: boolean;\n showVideoCount?: boolean;\n onlyCount?: boolean;\n title?: string;\n titleAppLink?: Core.AppLink;\n subText?: string;\n subTextAppLink?: Core.AppLink;\n hoverText?: string;\n}\n\nexport function CollectionThumbnail(props: CollectionThumbnailProps) {\n function getFirstVideo() {\n let collectionVideos = props.collection?.videos;\n\n if (!collectionVideos)\n return;\n\n if (!collectionVideos.count && props.collection.typeId === MasterType.Playlist) {\n const playlist = props.collection as Playlist;\n\n if (playlist.clips.count)\n collectionVideos = playlist.clips;\n\n if (playlist.interactives.count)\n collectionVideos = playlist.interactives;\n }\n\n return ArrayHelper.first(collectionVideos.data);\n }\n\n function getVideoCount() {\n let totalCount = 0;\n\n if (props.collection.videos && props.collection.videos.count) {\n totalCount += props.collection.videos.count;\n }\n\n if (props.collection.typeId === MasterType.Playlist) {\n const playlist = props.collection as Playlist;\n\n if (playlist.interactives?.count)\n totalCount += playlist.interactives.count;\n\n if (playlist.clips?.count)\n totalCount += playlist.clips.count;\n }\n\n return totalCount;\n }\n\n function getEntityType(collection: SupportedContentType) {\n if (MasterTypeHelper.isType<Playlist>(collection, MasterType.Playlist)) {\n return EntityType.Playlist;\n }\n\n if (MasterTypeHelper.isType<Series>(collection, MasterType.Series)) {\n return EntityType.Series;\n }\n }\n\n const firstVideo = getFirstVideo();\n const videoCount = getVideoCount();\n const showTexts = props.title?.length || props.subText?.length;\n\n const analyticsData = {\n id: props.collection.id.toString(),\n name: props.collection.name,\n\n ...props.analyticsData\n };\n\n const analyticsOptions = {\n actionType: UserAction.Click,\n entity: getEntityType(props.collection),\n \n ...props.analyticsOptions\n };\n\n return (\n <div>\n <div className={`position-relative ${styles.thumbnailContainer} z-1`}>\n <AppLink\n appLink={props.appLink}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n preventFocus\n >\n {props.showMask &&\n <div className={`${styles.mask} position-absolute w-100 h-100 rounded-3 bg-dark bg-gradient z-1 bg-opacity-50 pointer-events-none`}>\n <div className={`${styles.badge} d-flex align-items-center w-fit flex-grow-0 bg-dark rounded-pill ps-1 m-2`}>\n <SvgContainer svg={PlaySvg} className='svg-container text-white' />\n <p className='d-inline fw-medium text-white mb-0'>\n {props.hoverText?.length ?\n <span>{props.hoverText}</span> :\n <Text namespace={namespace} phrase='playAll' />\n }\n </p>\n </div>\n </div>\n }\n\n {firstVideo &&\n <VideoThumbnail\n video={firstVideo}\n imageOptions={props.imageOptions}\n textPosition={ThumbnailTextPosition.Independent}\n type='cosmetic'\n hideMask\n hideRating\n hideDuration\n hideVideoTypeBadge\n />\n }\n\n {!firstVideo &&\n <div className='ratio ratio-16x9 bg-light rounded-3'>\n <div className='d-flex justify-content-center align-items-center'>\n <SvgContainer svg={PlaySvg} className='w-33 opacity-25 text-gray-400' />\n </div>\n </div>\n }\n\n {props.showVideoCount &&\n <div className={`${styles.badge} d-flex align-items-center w-fit bg-dark bg-opacity-75 rounded-pill position-absolute bottom-0 end-0 ps-1 m-2`}>\n <SvgContainer svg={SeriesSvg} className='svg-container text-white me-1' />\n <p className='d-inline fw-semibold text-white mb-0'>\n {props.onlyCount\n ? <span>{videoCount}</span>\n : <Text namespace={namespace} phrase='videos' options={{ count: videoCount, smartCount: videoCount }} />\n }\n </p>\n </div>\n }\n </AppLink>\n\n </div>\n \n {showTexts &&\n <div className='mt-2 d-flex flex-column'>\n {props.subText &&\n <TitleSubText title={props.subText} appLink={props.subTextAppLink}>\n {props.subText}\n </TitleSubText>\n }\n {props.title &&\n <CollectionThumbnailTitle\n title={props.collection.name}\n appLink={props.titleAppLink}\n />\n }\n </div>\n }\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CollectionThumbnail } from 'libs/shared/components/thumbnails/collection/CollectionThumbnail';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { BaseObject, Image, Playlist, Series } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper, ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './shared-object-image.module.scss';\n\nconst namespace = 'shared.sharedObjectImage';\n\nconst BASE_IMAGE_CLASS_NAME = 'rounded overflow-hidden';\n\ninterface ImageProps {\n image: Image;\n imageType: ImageType;\n imageClassName?: string;\n imageFallbackComponent: JSX.Element;\n}\n\nfunction getImageProps(object: BaseObject): ImageProps {\n const image = ImageHelper.getDisplayImageFromObject(object);\n\n if (VideoHelper.isVideoType(object))\n return {\n image,\n imageType: ImageType.Thumbnails,\n imageClassName: BASE_IMAGE_CLASS_NAME,\n imageFallbackComponent: <ImageFallback type={ImageFallbackType.Video} />\n };\n\n switch (object.typeId) {\n case MasterType.Series:\n return {\n image,\n imageType: ImageType.TallPosters,\n imageClassName: BASE_IMAGE_CLASS_NAME,\n imageFallbackComponent:\n <ImageFallback type={ImageFallbackType.Series} svgContainerClassName={styles.posterFallbackSvg} />\n };\n\n case MasterType.Playlist:\n return {\n image,\n imageType: ImageType.Covers,\n imageClassName: !image?.url\n ? `${BASE_IMAGE_CLASS_NAME} ${getBgColorClass(object.name, BG_COLOUR_CLASS_NAMES)}`\n : BASE_IMAGE_CLASS_NAME,\n imageFallbackComponent: (\n <ImageFallback\n type={ImageFallbackType.Playlist}\n svgContainerClassName={image?.url ? styles.coverFallbackSvg : 'd-none'}\n extraClasses={!image?.url && 'bg-transparent'}\n />\n )\n };\n }\n}\n\nfunction InsightsMask() {\n return (\n <div className={`d-flex pointer-events-none position-absolute bottom-0 start-0 h-100 w-100 z-1 justify-content-center align-items-center`}>\n <div className='position-absolute bg-dark bg-gradient opacity-50 w-100 h-100 z-0 rounded-3'></div>\n <div className='d-flex align-items-end gap-2 h-50 z-1'>\n <div className='d-flex align-items-end h-50'>\n <div className={`${styles.bar} ${styles.a} rounded shadow`}></div>\n </div>\n <div className='d-flex align-items-end h-75'>\n <div className={`${styles.bar} ${styles.b} rounded shadow`}></div>\n </div>\n <div className='d-flex align-items-end h-100'>\n <div className={`${styles.bar} ${styles.c} rounded shadow`}></div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction getImageRatio(object: BaseObject): ImageFallbackType {\n if (VideoHelper.isVideoType(object))\n return 16 / 9;\n\n if (object.typeId === MasterType.Playlist)\n return 1;\n\n if (object.typeId === MasterType.Series)\n return 9 / 16;\n}\n\nSharedObjectImage.defaultProps = {\n imageOptions: { size: ImageSize.Small }\n};\n\ninterface SharedObjectImageProps {\n object: BaseObject;\n locationContext: LocationContext;\n appLink?: Core.AppLink;\n showVideoMetadata?: boolean;\n fixedHeight?: boolean;\n requireMarking?: number;\n imageOptions?: ImageOptions;\n showInsightsMask?: boolean;\n showCollectionMask?: boolean;\n showVideoCount?: boolean;\n thumbnailSize?: 'sm' | 'md';\n imageClassName?: string;\n hideBottomBar?: boolean;\n onlyCount?: boolean;\n}\n\nexport function SharedObjectImage(props: SharedObjectImageProps): JSX.Element {\n const ref = React.useCallback((el: HTMLDivElement) => {\n if (!el || !props.fixedHeight)\n return;\n\n el.style.width = `${el.offsetHeight * getImageRatio(props.object)}px`;\n }, []);\n\n const useVideoThumbnail = VideoHelper.isVideoType(props.object);\n\n const {\n image,\n imageType,\n imageClassName,\n imageFallbackComponent\n } = getImageProps(props.object);\n\n const thumbnailMetadata = !props.showVideoMetadata ? {\n hideDuration: true,\n hideMask: true,\n hideRating: true,\n hideVideoBadgeType: true,\n hideBottomBar: true\n } : {\n hideBottomBar: props.hideBottomBar\n };\n\n return (\n <div className='d-flex align-items-center justify-content-center w-100 h-100'>\n <div ref={ref} className={props.fixedHeight ? 'h-100' : 'w-100'}>\n {useVideoThumbnail &&\n <div className={`${styles.thumbnailContainer} position-relative`}>\n {props.showInsightsMask && <InsightsMask />}\n <AppLink appLink={props.appLink}>\n <VideoThumbnail\n video={props.object}\n size={props.thumbnailSize}\n imageOptions={props.imageOptions}\n textPosition={ThumbnailTextPosition.Independent}\n type='cosmetic'\n imageClassName={props.imageClassName}\n {...thumbnailMetadata}\n />\n </AppLink>\n {!!props.requireMarking && (\n <div className={`${props.showInsightsMask && styles.requireMarking} position-absolute bottom-0 end-0 z-1 m-2`}>\n <div className={`${styles.badge} d-flex align-items-center bg-light-ultramarine text-ultramarine fw-semibold rounded-pill w-fit mt-1 px-2`}>\n <Text namespace={namespace} phrase='requireMarking' options={{ smartCount: props.requireMarking }} />\n </div>\n </div>\n )}\n </div>\n }\n {!useVideoThumbnail &&\n <>\n {'videos' in (props.object as Playlist | Series) ? (\n <CollectionThumbnail\n collection={props.object}\n imageOptions={props.imageOptions}\n appLink={props.appLink}\n analyticsData={{\n id: props.object.id,\n name: props.object.name\n }}\n analyticsOptions={{\n entity: ShareViewHelper.getAnalyticsEntity(props.object.type),\n actionType: UserAction.Click,\n location: props.locationContext\n }}\n showMask={props.showCollectionMask}\n showVideoCount={props.showVideoCount}\n onlyCount={props.onlyCount}\n />\n ) : (\n <BaseImage\n data={image?.url}\n imageType={imageType}\n imageOptions={props.imageOptions}\n appLink={props.appLink}\n className={imageClassName}\n analyticsData={{\n id: props.object.id,\n name: props.object.name\n }}\n analyticsOptions={{\n entity: ShareViewHelper.getAnalyticsEntity(props.object.type),\n actionType: UserAction.Click,\n location: props.locationContext\n }}\n >\n {imageFallbackComponent}\n </BaseImage>\n )}\n </>\n }\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SharedLinkAvatar } from 'libs/shared/apps/share/components/shared-to-avatar-list/SharedToAvatarList';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.avatarList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface AvatarItemProps {\n imageCdnUrl: string;\n index: number;\n item?: BaseObject;\n hiddenItems?: BaseObject[];\n maxAvatars?: number;\n}\n\ninterface AvatarListProps {\n items: BaseObject[];\n imageCdnUrl: string;\n maxAvatars?: number;\n avatarItem?: (props: AvatarItemProps) => JSX.Element;\n getHiddenTooltip?: (hiddenItems: BaseObject[]) => string;\n numberClassname?: string;\n avatarContainerClassname?: string;\n roleToDisplay?: 'student' | 'staff';\n hasShareLink?: boolean;\n avatarSize?: 'md' | 'sm';\n shareLinkText?: string;\n}\n\nAvatarList.defaultProps = {\n maxAvatars: 5\n};\n\nexport function AvatarList(props: AvatarListProps): JSX.Element {\n const itemsToDisplay = props.items.length > props.maxAvatars\n ? props.items.slice(0, props.maxAvatars - 1)\n : props.items;\n\n const hiddenItems = props.items.length > itemsToDisplay.length\n ? props.items.slice(props.maxAvatars - 1)\n : [];\n\n const AvatarItem = props.avatarItem;\n const hiddenItemsCounts = hiddenItems.length;\n const translateX = props.avatarSize === 'sm' ? 4 : 8;\n\n function getTooltip() {\n if (props.getHiddenTooltip)\n return props.getHiddenTooltip(hiddenItems);\n\n if (props.roleToDisplay)\n return getPhrase(props.roleToDisplay === 'staff' ? 'staff' : 'student', { count: hiddenItemsCounts, smartCount: hiddenItemsCounts });\n\n return getPhrase('users', { count: hiddenItemsCounts, smartCount: hiddenItemsCounts });\n }\n\n function getContainerStyles() {\n return {\n marginRight: `-${((itemsToDisplay.length - 1) + (hiddenItems.length ? 1 : 0) + (props.hasShareLink ? 1 : 0)) * translateX}px`\n };\n }\n\n function getAvatarStyles(idx: number) {\n return {\n transform: `translateX(${(props.hasShareLink ? idx + 1 : idx) * -translateX}px)`,\n zIndex: props.maxAvatars - idx\n };\n }\n\n if (itemsToDisplay.length === 0 && hiddenItems.length === 0)\n return <></>;\n\n return (\n <div\n className='d-flex'\n style={getContainerStyles()}\n >\n {props.hasShareLink && (\n <div style={{ zIndex: props.maxAvatars + 1 }}>\n <SharedLinkAvatar text={props.shareLinkText} avatarSize={props.avatarSize} className='bg-dark text-white' />\n </div>\n )}\n {itemsToDisplay.map((item, idx) => (\n <div\n className={`${props.avatarContainerClassname || ''}`} key={item.id}\n style={getAvatarStyles(idx)}\n >\n <AvatarItem\n item={item}\n imageCdnUrl={props.imageCdnUrl}\n index={idx}\n maxAvatars={props.maxAvatars}\n />\n </div>\n ))}\n\n {!!hiddenItems.length && (\n <div\n className={`${props.avatarContainerClassname || ''} bg-white rounded-circle`}\n style={{ transform: `translateX(${itemsToDisplay.length * -translateX}px)`, zIndex: props.maxAvatars - itemsToDisplay.length }}\n >\n <Tooltip title={getTooltip()} spanHack spanHackClassName='h-100 w-100'>\n <div className={`d-flex justify-content-center align-items-center border border-dark rounded-circle h-100 w-100 ${props.numberClassname || ''}`}>\n {`+${hiddenItems.length}`}\n </div>\n </Tooltip>\n </div>\n )}\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { AvatarItemProps, AvatarList } from 'libs/shared/components/avatar-list/AvatarList';\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { AnonymousSvg } from 'libs/shared/images/svg/objects/AnonymousSvg';\nimport { ClassroomsSvg } from 'libs/shared/images/svg/objects/ClassroomsSvg';\nimport { GroupSvg } from 'libs/shared/images/svg/objects/GroupSvg';\nimport { LinkSvg } from 'libs/shared/images/svg/objects/LinkSvg';\nimport { BaseObject, Classroom, ClassroomGroup, User } from 'libs/shared/interfaces';\nimport { mapColourToBsVariant } from 'libs/shared/utils/GroupHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './shared-to-avatar-list.module.scss';\n\nconst namespace = 'reportsShare.sharedToAvatarList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getHiddenRecipientText(hiddenRecipients: BaseObject[]): string {\n const counts = ArrayHelper.countBy(hiddenRecipients, 'typeId');\n const userCount = counts[MasterType.User];\n const classroomCount = counts[MasterType.Classroom];\n const groupCount = counts[MasterType.ClassroomGroup];\n\n if (userCount && classroomCount && groupCount)\n return getPhrase('classroomsGroupsAndUsers', { userCount, classroomCount, groupCount });\n\n if (userCount && classroomCount)\n return getPhrase('classroomsAndUsers', { userCount, classroomCount });\n\n if (userCount && groupCount)\n return getPhrase('groupsAndUsers', { userCount, groupCount });\n\n if (classroomCount && groupCount)\n return getPhrase('classroomsAndGroups', { classroomCount, groupCount });\n\n if (userCount)\n return getPhrase('users', { userCount });\n\n if (classroomCount)\n return getPhrase('classrooms', { classroomCount });\n\n if (groupCount)\n return getPhrase('groups', { groupCount });\n}\n\nfunction SharedToAvatar(props: AvatarItemProps): JSX.Element {\n const user: User = props.item?.typeId === MasterType.User && props.item as User;\n const classroom: Classroom = props.item?.typeId === MasterType.Classroom && props.item as Classroom;\n const classroomGroup: ClassroomGroup = props.item?.typeId === MasterType.ClassroomGroup\n && props.item as ClassroomGroup;\n\n const svgContainerClassName = 'd-flex justify-content-center align-items-center text-white rounded-circle h-100 w-100';\n\n return (\n <>\n {!!user &&\n <Tooltip title={`${user.name} ${user.surname}`} spanHack spanHackClassName='h-100 w-100'>\n <Avatar\n imageUrl={user.avatar?.url}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(user.name, user.surname)}\n extraClasses={styles.sharedAvatar}\n />\n </Tooltip>\n }\n {!!classroom &&\n <Tooltip title={classroom.name} spanHack spanHackClassName='h-100 w-100'>\n <div className={svgContainerClassName}>\n <IconCircle\n svg={ClassroomsSvg}\n svgSize={SvgContainerSize.Large}\n variant='teal'\n />\n </div>\n </Tooltip>\n }\n {!!classroomGroup &&\n <Tooltip title={classroomGroup.name} spanHack spanHackClassName='h-100 w-100'>\n <div className={svgContainerClassName}>\n <IconCircle\n svg={GroupSvg}\n variant={mapColourToBsVariant(classroomGroup.metadata?.colour)}\n />\n </div>\n </Tooltip>\n }\n </>\n );\n}\n\n\ninterface AnonymousSharedToAvatarProps {\n avatarSize?: 'md' | 'sm';\n}\n\nexport function AnonymousSharedToAvatar(props: AnonymousSharedToAvatarProps): JSX.Element {\n return (\n <div className={`${styles.avatarContainer} ${props.avatarSize === 'sm' ? styles.sm : ''}`}>\n <Tooltip\n title={getPhrase('anonymous')}\n spanHack\n spanHackClassName='bg-light text-dark d-flex justify-content-center align-items-center rounded-circle h-100 w-100'\n >\n <SvgContainer svg={AnonymousSvg} size={props.avatarSize === 'sm' ? SvgContainerSize.Small : null} />\n </Tooltip>\n </div>\n );\n}\n\ninterface SharedLinkAvatarProps {\n text?: string;\n avatarSize?: 'md' | 'sm';\n className?: string;\n}\n\nexport function SharedLinkAvatar(props: SharedLinkAvatarProps): JSX.Element {\n return (\n <div className={`${styles.avatarContainer} ${props.avatarSize === 'sm' ? styles.sm : ''}`}>\n <Tooltip\n title={props.text || getPhrase('sharedLink')}\n spanHack\n spanHackClassName={`bg-light text-dark d-flex justify-content-center align-items-center rounded-circle h-100 w-100 ${props.className || ''}`}\n >\n <SvgContainer svg={LinkSvg} size={props.avatarSize === 'sm' ? SvgContainerSize.Small : null} />\n </Tooltip>\n </div>\n );\n}\n\ninterface SharedToAvatarListProps {\n recipients: BaseObject[];\n imageCdnUrl: string;\n maxAvatars?: number;\n hasShareLink?: boolean;\n avatarSize?: 'md' | 'sm';\n shareLinkText?: string;\n}\n\nSharedToAvatarList.defaultProps = {\n maxAvatars: 5\n};\n\nexport function SharedToAvatarList(props: SharedToAvatarListProps): JSX.Element {\n return (\n <AvatarList\n {...props}\n items={props.recipients}\n avatarItem={SharedToAvatar}\n avatarContainerClassname={`${styles.avatarContainer} ${props.avatarSize === 'sm' ? styles.sm : ''}`}\n getHiddenTooltip={getHiddenRecipientText}\n hasShareLink={props.hasShareLink}\n shareLinkText={props.shareLinkText}\n />\n );\n}","export enum ShareActivityStatus {\n None = 'None',\n Complete = 'Complete',\n Incomplete = 'Incomplete'\n}","import { format } from 'timeago.js';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { CheckMarkStatus } from 'libs/shared/components/check-mark-button/CheckMarkButton';\nimport { ShareActivityStatus } from 'libs/shared/enums/ShareActivityStatus';\n\ninterface ObjectWithDateShared {\n dateShared: string;\n}\n\ntype GroupedByDate<T extends ObjectWithDateShared> = { [date: string]: T[] };\n\nexport const ShareHelper = {\n groupByDateShared<T extends ObjectWithDateShared>(data: T[]): GroupedByDate<T> {\n const dateToObjectMapping: GroupedByDate<T> = ArrayHelper.groupBy(data, 'dateShared');\n\n const sortedDates = Object.keys(dateToObjectMapping).sort().reverse();\n\n // Create a sorted mapping between dates and the \"ObjectWithDateShared\" objects\n return sortedDates.reduce((acc: GroupedByDate<T>, date) => {\n const heading = format(date);\n\n if (!acc[heading])\n acc[heading] = [];\n\n acc[heading] = acc[heading].concat(dateToObjectMapping[date]);\n return acc;\n }, {});\n },\n\n mapActivityStatusToCheckMarkStatus(activityStatus: ShareActivityStatus): CheckMarkStatus {\n switch (activityStatus) {\n case ShareActivityStatus.Complete:\n return CheckMarkStatus.Complete;\n case ShareActivityStatus.Incomplete:\n return CheckMarkStatus.Incomplete;\n case ShareActivityStatus.None:\n return CheckMarkStatus.None;\n }\n },\n\n mapCheckMarkStatusToActivityStatus(checkMarkStatus: CheckMarkStatus): ShareActivityStatus {\n switch (checkMarkStatus) {\n case CheckMarkStatus.Complete:\n return ShareActivityStatus.Complete;\n case CheckMarkStatus.Incomplete:\n return ShareActivityStatus.Incomplete;\n case CheckMarkStatus.None:\n return ShareActivityStatus.None;\n }\n }\n};","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { BaseObject } from 'libs/shared/interfaces';\nimport { SvgIcon } from 'libs/shared/utils/SvgHelper';\n\nimport { ActionButton } from './ActionButton';\nimport { ActionsDropdown } from './ActionsDropdown';\n\nexport interface ActionOptions {\n order?: number;\n label?: string | (() => JSX.Element);\n appLink?: Core.AppLink;\n href?: string;\n onClick?: () => void;\n svg?: SvgIcon;\n className?: string;\n button?: boolean; // If true, a button will be rendered. Otherwise the action will be rendered in the dropdown.\n tooltip?: string;\n showSpinner?: boolean;\n showBorder?: boolean; // only works for button without text label\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n disabled?: boolean;\n openInNewTab?: boolean; // Only used if appLink or href is provided\n group?: string;\n lazyPlaceholder?: boolean;\n}\n\nexport type ActionGenerator = (obj: BaseObject) => ActionOptions[];\n\ninterface ActionsProps {\n actions: ActionOptions[];\n className?: string;\n actionsDropdownClassName?: string;\n dropdownToggleSvgSize?: SvgContainerSize;\n sortComponent?: JSX.Element;\n customSize?: boolean;\n fetchMore?: () => void;\n}\n\nexport function Actions(props: ActionsProps): JSX.Element {\n const orderedActions = React.useMemo(() => props.actions.sort((a, b) => a.order - b.order), [props.actions]);\n\n const buttonActions: ActionOptions[] = [];\n const moreActions: ActionOptions[] = [];\n\n orderedActions.forEach(a => {\n if (a.button)\n buttonActions.push(a);\n else\n moreActions.push(a);\n });\n\n let className = 'd-flex';\n\n if (props.className)\n className += ` ${props.className}`;\n\n if (!buttonActions.length && !moreActions.length)\n return <></>;\n\n return (\n <div className={className}>\n {buttonActions.length ? buttonActions.map((a, idx) => (\n <React.Fragment key={idx}>\n {(() => {\n if (a.label) {\n const label: JSX.Element = FunctionHelper.isFunction(a.label)\n ? a.label()\n : <>{a.label}</>;\n\n return (\n <ActionButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svg={a.svg}\n svgSize={props.dropdownToggleSvgSize}\n className={a.className}\n tooltip={a.tooltip}\n showSpinner={a.showSpinner}\n analyticsData={a.analyticsData}\n analyticsOptions={a.analyticsOptions}\n openInNewTab={a.openInNewTab}\n disabled={a.disabled}\n >\n {label}\n </ActionButton>\n );\n }\n\n return (\n <IconButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svg={a.svg}\n className={a.className}\n analyticsData={a.analyticsData}\n analyticsOptions={a.analyticsOptions}\n openInNewTab={a.openInNewTab}\n disabled={a.disabled}\n showBorder={a.showBorder}\n customSize={props.customSize}\n ariaLabel={a.tooltip}\n tooltip={a.tooltip}\n />\n );\n })()}\n </React.Fragment>\n )) : <></>}\n {props.sortComponent && props.sortComponent}\n {moreActions.length ? (\n <ActionsDropdown\n actions={moreActions}\n dropdownToggleClassName={props.actionsDropdownClassName}\n dropdownToggleSvgSize={props.dropdownToggleSvgSize}\n fetchMore={props.fetchMore}\n />\n ) : <></>}\n </div>\n );\n}","import React from 'react';\nimport { Column } from 'react-table';\nimport { format as formatDate } from 'timeago.js';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport {\n ShareStatusIndicator\n} from 'libs/shared/apps/share/components/shared-by-me/share-status-indicator/ShareStatusIndicator';\nimport { SharedObjectImage } from 'libs/shared/apps/share/components/shared-object-image/SharedObjectImage';\nimport {\n AnonymousSharedToAvatar,\n SharedLinkAvatar,\n SharedToAvatarList\n} from 'libs/shared/apps/share/components/shared-to-avatar-list/SharedToAvatarList';\nimport { ShareHelper } from 'libs/shared/apps/share/utils/ShareHelper';\nimport { ShareLinkHelper } from 'libs/shared/apps/share/utils/ShareLinkHelper';\nimport { SharableEntity, SharableRecipient, ShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ShareType } from 'libs/shared/enums/ShareType';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject, UnionShareObject, YearGroup } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nconst namespace = 'share.sharedByMeTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getDateShared(share: UnionShareObject): string {\n if (share.type === ShareType.ShareLink || !share?.recipients?.length)\n return share.dateCreated;\n\n const datesShared = share.recipients.map(r => r.dateShared);\n\n datesShared.sort((date1, date2) => {\n if (DateHelper.isSame(date1, date2))\n return 0;\n\n return DateHelper.isAfter(date1, date2) ? 1 : -2;\n });\n\n\n if (!datesShared.length)\n return '';\n\n return ArrayHelper.last(datesShared);\n}\n\ninterface SharedByMeTableData {\n share: UnionShareObject;\n sharedObject: SharableEntity;\n dateShared: string;\n sharedToData: {\n share: UnionShareObject;\n sharedObject: SharableEntity;\n recipients?: BaseObject[];\n };\n viewCount: number;\n}\n\ntype TableDataGroupings = { [date: string]: SharedByMeTableData[] };\n\ninterface GetColumnsOptions {\n index: number;\n dateHeading: string;\n getObjectAppLink: (object: BaseObject) => Core.AppLink;\n getObjectActions: (object: BaseObject) => ActionOptions[];\n imageCdnUrl: string;\n showStatus?: boolean;\n showViewCount?: boolean;\n breakpoints?: Breakpoints;\n yearGroups?: YearGroup[];\n}\n\nexport function getColumns(options: GetColumnsOptions): Column<SharedByMeTableData>[] {\n const {\n index,\n dateHeading,\n getObjectAppLink,\n getObjectActions,\n imageCdnUrl,\n showStatus,\n showViewCount,\n breakpoints,\n yearGroups\n } = options;\n const isMobile = breakpoints && (breakpoints.xs || breakpoints.sm);\n\n const columns: Column<SharedByMeTableData>[] = [\n {\n Header: showStatus ? '' : dateHeading,\n accessor: 'sharedObject',\n id: 'image',\n Cell: ({ value }) => (\n <div className='w-100'>\n <SharedObjectImage\n object={value}\n appLink={getObjectAppLink(value)}\n showVideoMetadata\n locationContext={LocationContext.SharedByMe}\n />\n </div>\n ),\n minWidth: 140,\n maxWidth: 30\n },\n {\n accessor: 'sharedObject',\n id: 'name',\n Cell: ({ value }) => {\n function getSubTextPhrase(): string {\n switch (value.typeId) {\n case MasterType.Series: return 'series';\n case MasterType.Playlist: return 'playlist';\n }\n }\n\n if (value.name) {\n if (VideoHelper.isVideoType(value) && !VideoHelper.getCanBeConsumed(value)?.canNavigate) {\n return (\n <span className='clamp-2'>\n {value.name}\n </span>\n );\n }\n\n const subTextPhrase = getSubTextPhrase();\n\n return (\n <div className='clamp-2'>\n {subTextPhrase &&\n <TitleSubText>\n <Text namespace={namespace} phrase={subTextPhrase} />\n </TitleSubText>\n }\n {VideoHelper.isVideoType(value) && (\n <VideoSubText\n type='series'\n video={value}\n appLink={'series' in value && value.series ? getObjectAppLink(value.series) : null}\n analyticsOptions={{ location: LocationContext.Insights }}\n />\n )}\n <AppLink\n appLink={getObjectAppLink(value)}\n analyticsData={{ id: value.id, name: value.name }}\n analyticsOptions={{\n entity: ShareViewHelper.getAnalyticsEntity(value.type),\n actionType: UserAction.Click,\n location: LocationContext.SharedByMe\n }}\n >\n {value.name}\n </AppLink>\n </div>\n );\n }\n\n return <span><Text namespace={namespace} phrase='videoUnavailable' /></span>;\n },\n width: 60\n },\n {\n Header: index === 0 ? getPhrase('sharedTo') : '',\n accessor: 'sharedToData',\n Cell: ({ value }) => {\n const { share, sharedObject, recipients } = value;\n\n if (!recipients) {\n const iconAndText = share.type === ShareType.ShareLink && ShareLinkHelper.getIconAndText({\n entity: sharedObject,\n entityTypeId: sharedObject.typeId,\n hasStudentExp: false,\n isPasswordProtected: share.isPasswordProtected,\n linkExpireDate: share.linkExpireDate,\n privacy: {\n privacy: share.privacy,\n overrideRestrictions: share.overrideRestrictions\n },\n status: share.status,\n yearGroups: yearGroups ?? []\n });\n\n return <SharedLinkAvatar text={iconAndText?.text} />;\n }\n \n if (!recipients?.length)\n return <AnonymousSharedToAvatar />;\n\n return (\n <SharedToAvatarList\n recipients={recipients}\n imageCdnUrl={imageCdnUrl}\n maxAvatars={isMobile ? 1 : 2}\n />\n );\n },\n width: 40\n },\n !isMobile && {\n Header: index === 0 ? getPhrase('shared') : '',\n id: 'dateShared',\n accessor: s => formatDate(s.dateShared),\n width: 40\n },\n {\n accessor: 'sharedObject',\n id: 'actions',\n Cell: ({ value }) => (\n <Actions\n actions={getObjectActions(value)}\n className='w-100 justify-content-end pe-2'\n />\n ),\n width: 20\n }\n ];\n\n const statusColumn: Column<SharedByMeTableData> = {\n Header: dateHeading,\n accessor: 'share',\n id: 'status',\n Cell: ({ value }) => (\n <ShareStatusIndicator share={value} />\n ),\n width: 5\n };\n\n const viewCountColumn: Column<SharedByMeTableData> = {\n Header: getPhrase('views'),\n accessor: 'viewCount',\n width: 30\n };\n\n if (showStatus)\n columns.splice(0, 0, statusColumn);\n\n if (showViewCount)\n columns.splice(columns.length - 1, 0, viewCountColumn);\n\n return columns.filter((Boolean));\n}\n\nexport function useGetData(\n sentShares: UnionShareObject[],\n sharedObjects: Record<string, SharableEntity>,\n shareRecipients: Record<string, SharableRecipient>,\n groupByDate: boolean\n): TableDataGroupings {\n const tableData: SharedByMeTableData[] = [];\n\n sentShares.forEach(s => {\n const sharedObject = sharedObjects?.[s.objectId];\n\n let recipients: BaseObject[] | null = null;\n\n if (s.type === ShareType.DirectShare) {\n recipients = [];\n\n s.recipients?.forEach(r => {\n const recipient = shareRecipients?.[r.id];\n\n if (recipient)\n recipients.push(recipient);\n });\n }\n\n // Skip if we don't have access to the shared object (e.g. if it's been deleted)\n if (sharedObject)\n tableData.push({\n share: s,\n sharedObject,\n sharedToData: {\n share: s,\n sharedObject,\n recipients\n },\n dateShared: getDateShared(s),\n viewCount: s.viewCount ?? 0\n });\n });\n\n if (!groupByDate)\n return { [getPhrase('title')]: tableData };\n\n return ShareHelper.groupByDateShared(tableData);\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { SHARES_TABLE_THEME } from 'libs/shared/apps/share/constants/TableTheme';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Table } from 'libs/shared/components/table/Table';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject, UnionShareObject, YearGroup } from 'libs/shared/interfaces';\n\nimport { SharableEntity, SharableRecipient } from '../../../views/share/ShareViewHelper';\n\nimport { getColumns, useGetData } from './SharedByMeTableUtils';\n\ninterface SharedByMeTableProps {\n sentShares: UnionShareObject[];\n sharedObjects: Record<string, SharableEntity>;\n shareRecipients: Record<string, SharableRecipient>;\n getObjectAppLink: (object: BaseObject) => Core.AppLink;\n getObjectActions: (object: BaseObject) => ActionOptions[];\n groupByDateShared?: boolean;\n showStatus?: boolean;\n showViewCount?: boolean;\n breakpoints?: Breakpoints;\n imageCdnUrl: string;\n yearGroups?: YearGroup[];\n}\n\nexport function SharedByMeTable(props: SharedByMeTableProps): JSX.Element {\n const data = useGetData(\n props.sentShares,\n props.sharedObjects,\n props.shareRecipients,\n !!props.groupByDateShared\n );\n\n return (\n <>\n {Object.keys(data).map((heading, index) => (\n <Table\n key={index}\n columns={getColumns({\n index,\n dateHeading: heading,\n getObjectAppLink: props.getObjectAppLink,\n getObjectActions: props.getObjectActions,\n imageCdnUrl: props.imageCdnUrl,\n showStatus: props.showStatus,\n showViewCount: props.showViewCount,\n breakpoints: props.breakpoints,\n yearGroups: props.yearGroups\n })}\n data={data[heading]}\n theme={SHARES_TABLE_THEME}\n />\n ))}\n </>\n );\n}","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ShareType } from 'libs/shared/enums/ShareType';\nimport { DirectShare, ShareRecipient, UnionShareObject } from 'libs/shared/interfaces';\n\nexport const ShareHelper = {\n getDirectShares(sentShares: UnionShareObject[]): DirectShare[] {\n return sentShares?.filter(s => s.type === ShareType.DirectShare) as DirectShare[] ?? [];\n },\n \n getRecipients(sentShares: UnionShareObject[]): ShareRecipient[] {\n return ArrayHelper.flatten(ShareHelper.getDirectShares(sentShares).map(d => d.recipients ?? []));\n }\n};","import React from 'react';\n\nexport function AnalyticsSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M17.5 5h1a.5.5 0 0 1 .5.5v13a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-13a.5.5 0 0 1 .5-.5m-1.5.5v13a1.5 1.5 0 0 0 1.5 1.5h1a1.5 1.5 0 0 0 1.5-1.5v-13A1.5 1.5 0 0 0 18.5 4h-1A1.5 1.5 0 0 0 16 5.5m-4.5 3.638a.5.5 0 0 0-.5.5V18.5a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5V9.638a.5.5 0 0 0-.5-.5zm-1.5.5a1.5 1.5 0 0 1 1.5-1.5h1a1.5 1.5 0 0 1 1.5 1.5V18.5a1.5 1.5 0 0 1-1.5 1.5h-1a1.5 1.5 0 0 1-1.5-1.5zM4 12.74a1.5 1.5 0 0 1 1.5-1.5h1a1.5 1.5 0 0 1 1.5 1.5V18.5A1.5 1.5 0 0 1 6.5 20h-1A1.5 1.5 0 0 1 4 18.5zm1.5-.5a.5.5 0 0 0-.5.5V18.5a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-5.759a.5.5 0 0 0-.5-.5z'\n />\n </svg>\n );\n}\n","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { getFilterParamsKey } from 'libs/shared/apps/analytics/utils/FilterParamUtils';\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { AnalyticsSvg } from 'libs/shared/images/svg/objects/AnalyticsSvg';\nimport { Interactive } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/ReportsActions';\nimport { AppChannels } from 'shared/constants/ReportsRadioChannels';\nimport { useGetExternalUrl } from 'shared/hooks/UseGetExternalUrl';\nimport { useGetAppLinkFilterParams, useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { ExternalRouteHelper } from 'shared/utils/ExternalRouteHelper';\n\nconst namespace = 'reportsInteractives.sharedInteractives';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function useGetRequest(): ((cursor?: string) => Flight.Request) | false {\n const requestFilter = useGetRequestFilter();\n\n if (!requestFilter)\n return false;\n\n return (cursor?: string) => {\n const { start, end, userId, groupId } = requestFilter;\n\n return ShareRequests.sentShare({\n start,\n end,\n recipientUserId: userId,\n recipientGroupId: groupId,\n objectTypeId: MasterType.Interactive,\n cursor\n });\n };\n}\n\nexport function useGetActions(): (interactive: Interactive) => ActionOptions[] {\n const getAppLink = useGetInteractiveAppLink();\n\n const getObjectUrl = useGetExternalUrl(ExternalRouteHelper.getPrimaryObjectUrl);\n\n return (interactive: Interactive) => {\n const { canConsume } = VideoHelper.getCanBeConsumed(interactive);\n\n if (!canConsume)\n return [];\n\n const options: ActionOptions[] = [\n {\n tooltip: getPhrase('viewResults'),\n svg: AnalyticsSvg,\n appLink: getAppLink(interactive),\n className: 'me-2',\n button: true\n },\n {\n label: getPhrase('editShareSettings'),\n appLink: {\n application: AppChannels.DEFAULT,\n action: Actions.Default.SHARE,\n args: [interactive.id],\n params: { entityType: 'interactive' }\n }\n }\n ];\n\n if (getObjectUrl)\n options.push({\n label: getPhrase('viewOriginal'),\n href: getObjectUrl(interactive),\n openInNewTab: true\n });\n\n return options;\n };\n}\n\nexport function useGetInteractiveAppLink(): (interactive: Interactive) => Core.AppLink {\n const filterQueryParams = useGetAppLinkFilterParams();\n\n return (interactive: Interactive) => ({\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.OVERVIEW,\n args: [interactive.id],\n params: filterQueryParams\n });\n}\n\nexport function useTableKey(): string {\n const filterQueryParams = useGetAppLinkFilterParams();\n\n return `shared:interactives:table:${getFilterParamsKey(filterQueryParams)}`;\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { SharedByMeEmptyState } from 'libs/shared/apps/share/components/shared-by-me/empty-state/SharedByMeEmptyState';\nimport { SharedByMeTable } from 'libs/shared/apps/share/components/shared-by-me/table/SharedByMeTable';\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\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, CurrentUser, UnionShareObject } from 'libs/shared/interfaces';\nimport { ShareHelper } from 'libs/shared/utils/ShareHelper';\n\nimport { PartialTable } from 'shared/components/partial-loading/PartialTable';\nimport { PartialTableContent } from 'shared/components/partial-loading/PartialTableContent';\nimport { ImageUrls } from 'shared/constants/ReportsImageUrls';\nimport { useSetHeaderTitle } from 'shared/hooks/UseSetHeaderTitle';\n\nimport { useGetActions, useGetInteractiveAppLink, useGetRequest, useTableKey } from './SharedInteractivesViewUtils';\n\nconst namespace = 'reportsInteractives.sharedInteractives';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function SharedInteractivesView(): JSX.Element {\n const fetch = Flight.useGetFetch();\n useSetPageMetadata({ title: getPhrase('interactives') });\n useSetHeaderTitle(getPhrase('interactives'));\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const tableKey = useTableKey();\n\n const getAppLink = useGetInteractiveAppLink();\n const getActions = useGetActions();\n\n const getRequest = useGetRequest();\n\n function fetchNext(cursor?: string): void {\n if (!getRequest)\n return;\n\n fetch(getRequest(cursor));\n }\n\n const {\n items: sentShares,\n hasMore,\n isFetching: isFetchingSentShares,\n nextCursor,\n hasFirstPageCompleted\n } = useInfiniteList<UnionShareObject>(getRequest, fetchNext);\n\n const sharedInteractives = useGrowingBatchFetch(\n sentShares?.map(obj => obj.objectId),\n ShareRequests.sharedObjectsById\n );\n\n const recipients = useGrowingBatchFetch(\n ShareHelper.getRecipients(sentShares).map(obj => obj.id),\n ids => ShareRequests.getRecipientsById(ids, currentUser.data.customerId)\n );\n \n // Wait until all data is fetched before telling the table to re-render\n const isFetching = isFetchingSentShares\n || sharedInteractives.isFetching\n || recipients.isFetching;\n\n if (!hasFirstPageCompleted || (sentShares?.length && !sharedInteractives.hasFirstRequestCompleted))\n return (\n <PartialTable variant='interactives'>\n <PartialTableContent variant='interactives' />\n </PartialTable>\n );\n\n if (!sentShares.length)\n return (\n <div className='bg-white rounded my-3 py-5'>\n <div className='pb-5'>\n <SharedByMeEmptyState\n imageUrl={ImageUrls.EmptyStates.Interactives.SharedInteractives}\n useInteractiveCopy\n />\n </div>\n </div>\n );\n\n return (\n <>\n <SharedByMeTable\n key={tableKey}\n sentShares={sentShares}\n sharedObjects={sharedInteractives.items}\n shareRecipients={recipients.items}\n getObjectAppLink={getAppLink}\n getObjectActions={getActions}\n showStatus\n showViewCount\n imageCdnUrl={config.data?.imageCdnUrl}\n />\n {(hasMore || isFetching) &&\n <InfiniteScrollFooter isFetching={isFetching} fetchNext={fetchNext} nextCursor={nextCursor} />\n }\n </>\n );\n}"],"names":["namespace","getPhrase","LanguageService","SharedByMeEmptyState","props","EmptyState","jsx","SHARES_TABLE_THEME","EN_US","en_US","diff","idx","unit","ZH_CN","zh_CN","Locales","register","locale","func","getLocale","SEC_ARRAY","toDate","input","formatDiff","localeFunc","agoIn","totalSec","diffSec","date","relativeDate","relDate","format","opts","sec","ShareType","getStatusPhrase","share","ShareLinkStatus","getBgColourClassName","ShareStatusIndicator","_a","Fragment","Tooltip","SvgContainer","LockSvg","SvgContainerSize","styles","BaseCollectionThumbnailTitle","CollectionThumbnailTitle","AppLink","CollectionThumbnail","getFirstVideo","collectionVideos","MasterType","playlist","ArrayHelper","getVideoCount","totalCount","_b","getEntityType","collection","MasterTypeHelper","EntityType","firstVideo","videoCount","showTexts","analyticsData","analyticsOptions","UserAction","jsxs","PlaySvg","_c","Text","VideoThumbnail","ThumbnailTextPosition","SeriesSvg","TitleSubText","BASE_IMAGE_CLASS_NAME","getImageProps","object","image","ImageHelper","VideoHelper","ImageType","ImageFallback","ImageFallbackType","getBgColorClass","BG_COLOUR_CLASS_NAMES","InsightsMask","getImageRatio","SharedObjectImage","ImageSize","ref","React","el","useVideoThumbnail","imageType","imageClassName","imageFallbackComponent","thumbnailMetadata","ShareViewHelper","BaseImage","AvatarList","itemsToDisplay","hiddenItems","AvatarItem","hiddenItemsCounts","translateX","getTooltip","getContainerStyles","getAvatarStyles","SharedLinkAvatar","item","getHiddenRecipientText","hiddenRecipients","counts","userCount","classroomCount","groupCount","SharedToAvatar","user","classroom","classroomGroup","svgContainerClassName","Avatar","_d","UserHelper","IconCircle","ClassroomsSvg","GroupSvg","mapColourToBsVariant","_e","AnonymousSharedToAvatar","AnonymousSvg","LinkSvg","SharedToAvatarList","ShareActivityStatus","ShareHelper","data","dateToObjectMapping","acc","heading","activityStatus","CheckMarkStatus","checkMarkStatus","Actions","orderedActions","React.useMemo","a","b","buttonActions","moreActions","className","React.Fragment","label","FunctionHelper","ActionButton","IconButton","ActionsDropdown","getDateShared","datesShared","r","date1","date2","DateHelper","getColumns","options","index","dateHeading","getObjectAppLink","getObjectActions","imageCdnUrl","showStatus","showViewCount","breakpoints","yearGroups","isMobile","columns","value","LocationContext","getSubTextPhrase","subTextPhrase","VideoSubText","sharedObject","recipients","iconAndText","ShareLinkHelper","s","formatDate","statusColumn","viewCountColumn","useGetData","sentShares","sharedObjects","shareRecipients","groupByDate","tableData","recipient","SharedByMeTable","Table","d","AnalyticsSvg","useGetRequest","requestFilter","useGetRequestFilter","cursor","start","end","userId","groupId","ShareRequests","useGetActions","getAppLink","useGetInteractiveAppLink","getObjectUrl","useGetExternalUrl","ExternalRouteHelper","interactive","canConsume","AppChannels","filterQueryParams","useGetAppLinkFilterParams","useTableKey","getFilterParamsKey","SharedInteractivesView","fetch","Flight.useGetFetch","useSetPageMetadata","useSetHeaderTitle","currentUser","Flight.useBasicFetch","UserRequests","config","ConfigRequests","tableKey","getActions","getRequest","fetchNext","hasMore","isFetchingSentShares","nextCursor","hasFirstPageCompleted","useInfiniteList","sharedInteractives","useGrowingBatchFetch","obj","ids","isFetching","PartialTable","PartialTableContent","InfiniteScrollFooter","ImageUrls"],"mappings":"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","x_google_ignoreList":[2,3,4,5,6,7]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{s as t}from"./app-CQEXKRTo.js";import{g as o}from"./sFV5nxD4.chunk.js";const p={topSearches(e,r,s,a){return{url:t.urlBuilder("{gateway}/v1/analytics/search/top",e),key:o("top:searches",e),normalize:!1,success:r,error:s,always:a}}};export{p as S};
|
|
2
|
+
//# sourceMappingURL=CbrfSCTb.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CbrfSCTb.chunk.js","sources":["../../src/shared/flight-requests/SearchRequests.ts"],"sourcesContent":["import { Xhr } from 'libs/common/backbone/interfaces/Xhr';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsRequestFilter } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\nimport { TopSearch } from 'shared/interfaces';\n\nexport const SearchRequests = {\n topSearches(\n filter: AnalyticsRequestFilter,\n success?: (data: TopSearch[]) => void,\n error?: (xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/analytics/search/top', filter),\n key: getAnalyticsRequestKey('top:searches', filter),\n normalize: false,\n success,\n error,\n always\n };\n }\n};"],"names":["SearchRequests","filter","success","error","always","UrlHelper","getAnalyticsRequestKey"],"mappings":"8EASO,MAAMA,EAAiB,CAC5B,YACEC,EACAC,EACAC,EACAC,EACgB,CAChB,MAAO,CACL,IAAKC,EAAU,WAAW,oCAAqCJ,CAAM,EACrE,IAAKK,EAAuB,eAAgBL,CAAM,EAClD,UAAW,GACX,QAAAC,EACA,MAAAC,EACA,OAAAC,CAAA,CAEJ,CACF"}
|