@clickview/reports 0.69.0-rc.0 → 0.69.1-dev.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/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/BBwBgFf_.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/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/-b_h0A4y.chunk.js +2 -0
- package/dist/scripts/-b_h0A4y.chunk.js.map +1 -0
- package/dist/scripts/0UfVJrf5.chunk.js +2 -0
- package/dist/scripts/0UfVJrf5.chunk.js.map +1 -0
- package/dist/scripts/2cd-ulth.chunk.js +2 -0
- package/dist/scripts/2cd-ulth.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/72EXv822.chunk.js +2 -0
- package/dist/scripts/72EXv822.chunk.js.map +1 -0
- package/dist/scripts/8CNwntVY.chunk.js +2 -0
- package/dist/scripts/8CNwntVY.chunk.js.map +1 -0
- package/dist/scripts/9pagDMWN.chunk.js +2 -0
- package/dist/scripts/9pagDMWN.chunk.js.map +1 -0
- package/dist/scripts/AKgZQGT0.chunk.js +2 -0
- package/dist/scripts/AKgZQGT0.chunk.js.map +1 -0
- package/dist/scripts/ASoPpgM4.chunk.js +2 -0
- package/dist/scripts/ASoPpgM4.chunk.js.map +1 -0
- package/dist/scripts/B0ZIDriY.chunk.js +6 -0
- package/dist/scripts/B0ZIDriY.chunk.js.map +1 -0
- package/dist/scripts/B3PA8QNB.chunk.js +2 -0
- package/dist/scripts/B3PA8QNB.chunk.js.map +1 -0
- package/dist/scripts/B6QS1MPy.chunk.js +4 -0
- package/dist/scripts/B6QS1MPy.chunk.js.map +1 -0
- package/dist/scripts/B9I2jvNY.chunk.js +2 -0
- package/dist/scripts/B9I2jvNY.chunk.js.map +1 -0
- package/dist/scripts/B9IzwFHp.chunk.js +2 -0
- package/dist/scripts/B9IzwFHp.chunk.js.map +1 -0
- package/dist/scripts/BBGDjrt-.chunk.js +2 -0
- package/dist/scripts/BBGDjrt-.chunk.js.map +1 -0
- package/dist/scripts/BHZ8VWq7.chunk.js +2 -0
- package/dist/scripts/BHZ8VWq7.chunk.js.map +1 -0
- package/dist/scripts/BIIsc-MA.chunk.js +2 -0
- package/dist/scripts/BIIsc-MA.chunk.js.map +1 -0
- package/dist/scripts/BLEXuU9u.chunk.js +2 -0
- package/dist/scripts/BLEXuU9u.chunk.js.map +1 -0
- package/dist/scripts/BLIHpHXi.chunk.js +2 -0
- package/dist/scripts/BLIHpHXi.chunk.js.map +1 -0
- package/dist/scripts/BLSeaGtL.chunk.js +2 -0
- package/dist/scripts/BLSeaGtL.chunk.js.map +1 -0
- package/dist/scripts/BLuY6AYO.chunk.js +2 -0
- package/dist/scripts/BLuY6AYO.chunk.js.map +1 -0
- package/dist/scripts/BSe8MmUc.chunk.js +2 -0
- package/dist/scripts/BSe8MmUc.chunk.js.map +1 -0
- package/dist/scripts/BZf-mjTJ.chunk.js +380 -0
- package/dist/scripts/BZf-mjTJ.chunk.js.map +1 -0
- package/dist/scripts/BbvzsNLZ.chunk.js +2 -0
- package/dist/scripts/BbvzsNLZ.chunk.js.map +1 -0
- package/dist/scripts/BdX0pSRt.chunk.js +2 -0
- package/dist/scripts/BdX0pSRt.chunk.js.map +1 -0
- package/dist/scripts/Bgidb-to.chunk.js +2 -0
- package/dist/scripts/Bgidb-to.chunk.js.map +1 -0
- package/dist/scripts/BhPjzT2a.chunk.js +2 -0
- package/dist/scripts/BhPjzT2a.chunk.js.map +1 -0
- package/dist/scripts/BihcsiRl.chunk.js +2 -0
- package/dist/scripts/BihcsiRl.chunk.js.map +1 -0
- package/dist/scripts/BlUKEHqx.chunk.js +2 -0
- package/dist/scripts/BlUKEHqx.chunk.js.map +1 -0
- package/dist/scripts/BpWIcknK.chunk.js +2 -0
- package/dist/scripts/BpWIcknK.chunk.js.map +1 -0
- package/dist/scripts/BqY3bZyH.chunk.js +2 -0
- package/dist/scripts/BqY3bZyH.chunk.js.map +1 -0
- package/dist/scripts/BrXmRwXi.chunk.js +2 -0
- package/dist/scripts/BrXmRwXi.chunk.js.map +1 -0
- package/dist/scripts/BsOLqypJ.chunk.js +2 -0
- package/dist/scripts/BsOLqypJ.chunk.js.map +1 -0
- package/dist/scripts/BvArNs1K.chunk.js +2 -0
- package/dist/scripts/BvArNs1K.chunk.js.map +1 -0
- package/dist/scripts/BxBPX67V.chunk.js +2 -0
- package/dist/scripts/BxBPX67V.chunk.js.map +1 -0
- package/dist/scripts/C0Ak1kpS.chunk.js +3 -0
- package/dist/scripts/C0Ak1kpS.chunk.js.map +1 -0
- package/dist/scripts/C0GFlX65.chunk.js +2 -0
- package/dist/scripts/C0GFlX65.chunk.js.map +1 -0
- package/dist/scripts/C0nQ0Xnx.chunk.js +6 -0
- package/dist/scripts/C0nQ0Xnx.chunk.js.map +1 -0
- package/dist/scripts/C6UUJ8P5.chunk.js +2 -0
- package/dist/scripts/C6UUJ8P5.chunk.js.map +1 -0
- package/dist/scripts/C8oA7_zY.chunk.js +2 -0
- package/dist/scripts/C8oA7_zY.chunk.js.map +1 -0
- package/dist/scripts/CEy1YX0b.chunk.js +2 -0
- package/dist/scripts/CEy1YX0b.chunk.js.map +1 -0
- package/dist/scripts/CNfESBlK.chunk.js +2 -0
- package/dist/scripts/CNfESBlK.chunk.js.map +1 -0
- package/dist/scripts/CNgTzzan.chunk.js +42 -0
- package/dist/scripts/CNgTzzan.chunk.js.map +1 -0
- package/dist/scripts/CP2i5uhZ.chunk.js +2 -0
- package/dist/scripts/CP2i5uhZ.chunk.js.map +1 -0
- package/dist/scripts/CSmXZuTZ.chunk.js +2 -0
- package/dist/scripts/CSmXZuTZ.chunk.js.map +1 -0
- package/dist/scripts/CTMVj7AR.chunk.js +2 -0
- package/dist/scripts/CTMVj7AR.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/CWEUVMEm.chunk.js +2 -0
- package/dist/scripts/CWEUVMEm.chunk.js.map +1 -0
- package/dist/scripts/CWViZWyh.chunk.js +34 -0
- package/dist/scripts/CWViZWyh.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/CbBaa9Aj.chunk.js +2 -0
- package/dist/scripts/CbBaa9Aj.chunk.js.map +1 -0
- package/dist/scripts/Ce_zROQ3.chunk.js +2 -0
- package/dist/scripts/Ce_zROQ3.chunk.js.map +1 -0
- package/dist/scripts/CfTCpF5i.chunk.js +4 -0
- package/dist/scripts/CfTCpF5i.chunk.js.map +1 -0
- package/dist/scripts/Cl1c9Acb.chunk.js +2 -0
- package/dist/scripts/Cl1c9Acb.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/Cn0ghy_D.chunk.js +2 -0
- package/dist/scripts/Cn0ghy_D.chunk.js.map +1 -0
- package/dist/scripts/Cs1UnwSi.chunk.js +2 -0
- package/dist/scripts/Cs1UnwSi.chunk.js.map +1 -0
- package/dist/scripts/CsP3Lruv.chunk.js +3 -0
- package/dist/scripts/CsP3Lruv.chunk.js.map +1 -0
- package/dist/scripts/CsROrwVV.chunk.js +2 -0
- package/dist/scripts/CsROrwVV.chunk.js.map +1 -0
- package/dist/scripts/Ctu1A4hw.chunk.js +2 -0
- package/dist/scripts/Ctu1A4hw.chunk.js.map +1 -0
- package/dist/scripts/D1UdZdfs.chunk.js +2 -0
- package/dist/scripts/D1UdZdfs.chunk.js.map +1 -0
- package/dist/scripts/D2pFW6EB.chunk.js +2 -0
- package/dist/scripts/D2pFW6EB.chunk.js.map +1 -0
- package/dist/scripts/D9oCeDYw.chunk.js +10 -0
- package/dist/scripts/D9oCeDYw.chunk.js.map +1 -0
- package/dist/scripts/DAajosqn.chunk.js +2 -0
- package/dist/scripts/DAajosqn.chunk.js.map +1 -0
- package/dist/scripts/DDGxV4ns.chunk.js +2 -0
- package/dist/scripts/DDGxV4ns.chunk.js.map +1 -0
- package/dist/scripts/DFlfmBPU.chunk.js +2 -0
- package/dist/scripts/DFlfmBPU.chunk.js.map +1 -0
- package/dist/scripts/DHZefNDC.chunk.js +2 -0
- package/dist/scripts/DHZefNDC.chunk.js.map +1 -0
- package/dist/scripts/DJzpw8qX.chunk.js +2 -0
- package/dist/scripts/DJzpw8qX.chunk.js.map +1 -0
- package/dist/scripts/DKEdZyAE.chunk.js +2 -0
- package/dist/scripts/DKEdZyAE.chunk.js.map +1 -0
- package/dist/scripts/DKu8iTnz.chunk.js +2 -0
- package/dist/scripts/DKu8iTnz.chunk.js.map +1 -0
- package/dist/scripts/DMd0fZar.chunk.js +2 -0
- package/dist/scripts/DMd0fZar.chunk.js.map +1 -0
- package/dist/scripts/DNDksLLJ.chunk.js +2 -0
- package/dist/scripts/DNDksLLJ.chunk.js.map +1 -0
- package/dist/scripts/DNP9cLqQ.chunk.js +2 -0
- package/dist/scripts/DNP9cLqQ.chunk.js.map +1 -0
- package/dist/scripts/DO-V6YKu.chunk.js +2 -0
- package/dist/scripts/DO-V6YKu.chunk.js.map +1 -0
- package/dist/scripts/DQA8MZy3.chunk.js +2 -0
- package/dist/scripts/DQA8MZy3.chunk.js.map +1 -0
- package/dist/scripts/DT1lPNaD.chunk.js +2 -0
- package/dist/scripts/DT1lPNaD.chunk.js.map +1 -0
- package/dist/scripts/DTL-Rceb.chunk.js +2 -0
- package/dist/scripts/DTL-Rceb.chunk.js.map +1 -0
- package/dist/scripts/DTotSVIi.chunk.js +2 -0
- package/dist/scripts/DTotSVIi.chunk.js.map +1 -0
- package/dist/scripts/DWkaXclo.chunk.js +10 -0
- package/dist/scripts/DWkaXclo.chunk.js.map +1 -0
- package/dist/scripts/DXFcNENa.chunk.js +2 -0
- package/dist/scripts/DXFcNENa.chunk.js.map +1 -0
- package/dist/scripts/Ddy6mQmA.chunk.js +2 -0
- package/dist/scripts/Ddy6mQmA.chunk.js.map +1 -0
- package/dist/scripts/DlxDC-9E.chunk.js +2 -0
- package/dist/scripts/DlxDC-9E.chunk.js.map +1 -0
- package/dist/scripts/Dn5-Zvws.chunk.js +2 -0
- package/dist/scripts/Dn5-Zvws.chunk.js.map +1 -0
- package/dist/scripts/DnhffgUu.chunk.js +2 -0
- package/dist/scripts/DnhffgUu.chunk.js.map +1 -0
- package/dist/scripts/Dv9OgzKw.chunk.js +2 -0
- package/dist/scripts/Dv9OgzKw.chunk.js.map +1 -0
- package/dist/scripts/DvV9e2O3.chunk.js +3 -0
- package/dist/scripts/DvV9e2O3.chunk.js.map +1 -0
- package/dist/scripts/Dvf_hOR3.chunk.js +2 -0
- package/dist/scripts/Dvf_hOR3.chunk.js.map +1 -0
- package/dist/scripts/DxOc33K6.chunk.js +3 -0
- package/dist/scripts/DxOc33K6.chunk.js.map +1 -0
- package/dist/scripts/DxbQzyJg.chunk.js +2 -0
- package/dist/scripts/DxbQzyJg.chunk.js.map +1 -0
- package/dist/scripts/DyaAoFDP.chunk.js +2 -0
- package/dist/scripts/DyaAoFDP.chunk.js.map +1 -0
- package/dist/scripts/EBNeK_uD.chunk.js +2 -0
- package/dist/scripts/EBNeK_uD.chunk.js.map +1 -0
- package/dist/scripts/HBvGjr-A.chunk.js +2 -0
- package/dist/scripts/HBvGjr-A.chunk.js.map +1 -0
- package/dist/scripts/IC6KSiqE.chunk.js +2 -0
- package/dist/scripts/IC6KSiqE.chunk.js.map +1 -0
- package/dist/scripts/LT6WE6TB.chunk.js +2 -0
- package/dist/scripts/LT6WE6TB.chunk.js.map +1 -0
- package/dist/scripts/P0RdEZGz.chunk.js +2 -0
- package/dist/scripts/P0RdEZGz.chunk.js.map +1 -0
- package/dist/scripts/P3PkkK_o.chunk.js +2 -0
- package/dist/scripts/P3PkkK_o.chunk.js.map +1 -0
- package/dist/scripts/SA1hxE7y.chunk.js +15 -0
- package/dist/scripts/SA1hxE7y.chunk.js.map +1 -0
- package/dist/scripts/YHL8PX91.chunk.js +2 -0
- package/dist/scripts/YHL8PX91.chunk.js.map +1 -0
- package/dist/scripts/app-5iiM5qQY.js +224 -0
- package/dist/scripts/app-5iiM5qQY.js.map +1 -0
- package/dist/scripts/fORcC1yd.chunk.js +2 -0
- package/dist/scripts/fORcC1yd.chunk.js.map +1 -0
- package/dist/scripts/hU1zzvt8.chunk.js +2 -0
- package/dist/scripts/hU1zzvt8.chunk.js.map +1 -0
- package/dist/scripts/kFXLewpU.chunk.js +2 -0
- package/dist/scripts/kFXLewpU.chunk.js.map +1 -0
- package/dist/scripts/k_p1R4KR.chunk.js +2 -0
- package/dist/scripts/k_p1R4KR.chunk.js.map +1 -0
- package/dist/scripts/mqFCEyYv.chunk.js +2 -0
- package/dist/scripts/mqFCEyYv.chunk.js.map +1 -0
- package/dist/scripts/qwzILhQ0.chunk.js +8 -0
- package/dist/scripts/qwzILhQ0.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/uBcZoYae.chunk.js +2 -0
- package/dist/scripts/uBcZoYae.chunk.js.map +1 -0
- package/dist/scripts/yaRKidLW.chunk.js +2 -0
- package/dist/scripts/yaRKidLW.chunk.js.map +1 -0
- package/dist/scripts/ysP6mL-L.chunk.js +2 -0
- package/dist/scripts/ysP6mL-L.chunk.js.map +1 -0
- package/package.json +5 -3
- package/typings/utils/imports.d.ts +1 -1
- package/vite.config.ts +6 -0
- 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-cdae99d0ee.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/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/6546-reports-f190450b10.chunk.css +0 -60
- 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-019d93e620-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-d769572af9-reports.chunk.js +0 -1
- package/dist/scripts/2150-2cbadacf12-reports.chunk.js +0 -1
- package/dist/scripts/2217-eb2f8619c9-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-62d81c3442-reports.chunk.js +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-72c53737e2-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-346d08e3ae-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-e72b3d845e-reports.chunk.js +0 -1
- package/dist/scripts/6545-f07bcd318a-reports.chunk.js +0 -1
- package/dist/scripts/6546-72384574e1-reports.chunk.js +0 -2
- package/dist/scripts/6546-72384574e1-reports.chunk.js.LICENSE.txt +0 -1
- package/dist/scripts/6811-add7c7c1a2-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-a4fcf6b02f-reports.chunk.js +0 -2
- package/dist/scripts/7747-a4fcf6b02f-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-686a7866e1-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-ca384ec4b0-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-379ea90dd3-reports.chunk.js +0 -1
- package/dist/scripts/9895-3b3feb12b9-reports.chunk.js +0 -1
- package/dist/scripts/9949-6b1d1f4d32-reports.chunk.js +0 -1
- package/dist/scripts/bundle-17c29f9bf9.min.js +0 -2
- package/dist/scripts/bundle-17c29f9bf9.min.js.LICENSE.txt +0 -108
- package/dist/scripts/polyfills-3db3f009d4.min.js +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as g,c8 as b,c9 as U,j as e,L as O,i as k,h as K,a3 as W,ar as D,c as Q,e as X,d as z,l as Y,u as w,a as J,A as Z,g as ee,V as te,C as se,U as ae,bQ as ie,aV as S}from"./app-5iiM5qQY.js";import{P as ne,M as re,V as oe,a as le,E as ce}from"./BZf-mjTJ.chunk.js";import{g as de}from"./CX5q-0jT.chunk.js";import{C as me}from"./qwzILhQ0.chunk.js";import{u as ge,I as ue}from"./BSe8MmUc.chunk.js";import{a as he}from"./DKu8iTnz.chunk.js";import{V as L}from"./BLSeaGtL.chunk.js";import{u as pe}from"./D2pFW6EB.chunk.js";import{u as xe,a as fe}from"./DFlfmBPU.chunk.js";import{u as je}from"./BxBPX67V.chunk.js";import{a as ve,S as ye}from"./DlxDC-9E.chunk.js";import{V as Ce}from"./BLIHpHXi.chunk.js";import"./CsP3Lruv.chunk.js";import"./P3PkkK_o.chunk.js";import"./5O9SdVRZ.chunk.js";import"./CW7x8M-z.chunk.js";import"./hU1zzvt8.chunk.js";import"./Cl1c9Acb.chunk.js";import"./LT6WE6TB.chunk.js";import"./B9IzwFHp.chunk.js";import"./CsROrwVV.chunk.js";import"./CbBaa9Aj.chunk.js";import"./Cs1UnwSi.chunk.js";import"./BLuY6AYO.chunk.js";import"./DvV9e2O3.chunk.js";import"./CNgTzzan.chunk.js";import"./Cn0ghy_D.chunk.js";import"./sFV5nxD4.chunk.js";import"./CSmXZuTZ.chunk.js";import"./BvArNs1K.chunk.js";import"./C8oA7_zY.chunk.js";import"./Ddy6mQmA.chunk.js";import"./BihcsiRl.chunk.js";const we={numItems:5,minWidth:50,maxWidth:100},Ie={getPartialLoadingItems(t={}){const n={...we,...t},a=()=>Math.max(Math.floor(Math.random()*n.maxWidth),n.minWidth);return[...Array(n.numItems)].map(()=>({width:`${a()}px`}))}},Ne="shared.breadcrumbComponent",Ve=O.encloseNamespace(Ne),Se=64,_=48,h=g.forwardRef((t,n)=>{const{breadcrumb:{name:a,appLink:c,active:d},withBackIcon:m}=t;let i=a,r=null;return i.length>_&&(i=a.slice(0,_)+"...",r=a),e.jsx("li",{className:`breadcrumb-item${d?" active":""}`,title:r,children:d?e.jsx("strong",{children:i}):e.jsxs(k,{appLink:c,ref:n,children:[m&&e.jsx(K,{svg:me,size:W.Small}),e.jsx("span",{className:m?"ms-2":"",children:i})]})})}),Ee=({breadcrumbs:t})=>{const n=b(U.XS),a=(t==null?void 0:t.length)||0,[c,d]=g.useState(!1),[m,i]=g.useState(!1),r=g.useRef(null);g.useEffect(()=>{const l=(t==null?void 0:t.reduce((u,N)=>u+N.name.length,0))??0;a>4&&l>Se&&d(!0)},[t==null?void 0:t.length]),g.useLayoutEffect(()=>{var l;m&&((l=r.current)==null||l.focus())},[r.current,m]);function x(){d(!1),i(!0)}if(!a||n&&a<2)return e.jsx(e.Fragment,{});if(n)return e.jsx("nav",{"aria-label":"breadcrumb",children:e.jsx("ol",{className:"breadcrumb m-0 p-0",children:e.jsx(h,{breadcrumb:t[a-2],withBackIcon:!0})})});const f=e.jsx(h,{breadcrumb:t[0]}),j=a>2?e.jsx(h,{breadcrumb:t[1]}):e.jsx(e.Fragment,{}),v=a>3?e.jsx(h,{breadcrumb:t[a-2]}):e.jsx(e.Fragment,{}),o=a>1?e.jsx(h,{breadcrumb:t[a-1]}):e.jsx(e.Fragment,{}),I=t.slice(2,a-2);return e.jsx("nav",{"aria-label":"breadcrumb",children:e.jsxs("ol",{className:"breadcrumb m-0 p-0",children:[f,j,c?e.jsx("li",{className:"breadcrumb-item",children:e.jsx("button",{className:"btn-link",onClick:x,"aria-label":Ve("expand"),children:"..."})}):I.map((l,u)=>e.jsx(h,{breadcrumb:l,ref:u===0?r:null},u)),v,o]})})},Ae=g.memo(function({numItems:t=3}){return b(U.XS)?e.jsx("div",{className:"partial-loading-background",style:{height:"1.3125rem",width:"6rem"}}):e.jsx("nav",{"aria-label":"breadcrumb",children:e.jsx("ol",{className:"breadcrumb m-0 p-0",children:Ie.getPartialLoadingItems({numItems:t}).map(({width:a},c)=>e.jsx("li",{className:"breadcrumb-item",children:e.jsx("span",{className:"d-inline-block partial-loading-background",style:{width:a},dangerouslySetInnerHTML:{__html:" "}})},c))})})}),Me="_rowA_1gcwf_1",Fe="_videoEngagement_1gcwf_4",E={rowA:Me,videoEngagement:Fe},Re="reportsVideos.schoolVideoViews",A=O.encloseNamespace(Re);function mt(t){var M,F,R;const n=D(),[a]=Q(te.ANONYMISE_USERS),c=X(),d=z(),m=Y.getVideoRequest(t.id,t.typeId),i=w(m),r=w(se.config()),x=w(L.videoHeatMapAggregation(t.id,c)),f=w(ne.createViewKey(t.id,re.MasterObject)),j=s=>L.videoHeatMap(t.id,c,s),v=s=>n(j(s)),{items:o,hasMore:I,isFetching:l,nextCursor:u,hasFirstPageCompleted:N}=ge(j,v),y=o==null?void 0:o.map(s=>s.userId).filter(s=>!!s),{items:V,hasFirstRequestCompleted:T}=he(y,ae.getById);pe(i),J({title:A("title",{video:(M=i.data)==null?void 0:M.name})}),je((F=i.data)==null?void 0:F.name),xe(fe(i.data,B));function B(){var P;const s=ie.getCurrentAppLink(),C=(P=s==null?void 0:s.args)==null?void 0:P[0];let p="";return C&&(t.typeId===S.Interactive&&(p=`/interactives/${s==null?void 0:s.args[0]}`),t.typeId===S.Video&&(p=`/videos/${s==null?void 0:s.args[0]}`),t.typeId===S.Clip&&(p=`/clips/${s==null?void 0:s.args[0]}`)),p}function q(s){if(s.userId){const C=V==null?void 0:V[s.userId];return C||{id:s.userId,deleted:!0}}return{sessionId:s.sessionId}}const H=o==null?void 0:o.map(s=>({...q(s),percentage:s.engagementRate})),$=i.hasCompleted&&r.data&&f.data&&x.hasCompleted,G=!!i.hasCompleted&&N&&(T||!(y!=null&&y.length));return e.jsxs("div",{children:[e.jsx("div",{className:"mb-3",children:i.data?e.jsx(Ee,{breadcrumbs:[{name:A("videoViews"),appLink:{application:ee.VIDEOS,action:Z.Videos.HOME}},{name:i.data.name,active:!0}]}):e.jsx(Ae,{})}),e.jsxs("div",{className:"d-flex flex-column gap-3",children:[e.jsx("div",{className:`${E.rowA} w-100`,children:e.jsx(ve,{videoId:t.id,type:"user_type"})}),e.jsx("div",{className:"w-100",children:e.jsxs("div",{className:"row",children:[e.jsxs("div",{className:`${E.rowB} col row`,children:[e.jsx("div",{className:"col-6",children:e.jsx(ye,{videoId:t.id,type:"year_group"})}),e.jsx("div",{className:"col-6",children:e.jsx(Ce,{videoId:t.id})})]}),e.jsx("div",{className:E.videoEngagement,children:$?e.jsx(oe,{heading:A("totalEngagement"),className:"p-3 h-auto",engagement:x.data,viewKey:f.data.viewKey,playerApiUrl:r.data.playerApiUrl,imageCdnUrl:r.data.imageCdnUrl}):e.jsx(le,{hasHeading:!0})})]})}),G&&e.jsxs(e.Fragment,{children:[e.jsx(ce,{engagement:o,users:H,imageCdnUrl:(R=r.data)==null?void 0:R.imageCdnUrl,anonymiseUsers:a},de(d)),(I||l)&&e.jsx(ue,{isFetching:l,fetchNext:v,nextCursor:u})]})]})]})}export{mt as SchoolVideoViewsView};
|
|
2
|
+
//# sourceMappingURL=Dvf_hOR3.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dvf_hOR3.chunk.js","sources":["../../../../libs/shared/src/utils/PartialLoadingHelper.ts","../../../../libs/shared/src/components/breadcrumbs/Breadcrumbs.tsx","../../src/apps/videos/views/school-video-views/SchoolVideoViewsView.tsx"],"sourcesContent":["const DEFAULT_PARTIAL_LOADING_OPTIONS: PartialLoadingOptions = {\n numItems: 5,\n minWidth: 50, // px\n maxWidth: 100 // px\n};\n\nexport interface PartialLoadingOptions {\n numItems?: number;\n minWidth?: number;\n maxWidth?: number;\n}\n\ninterface PartialLoadingItem {\n width: string;\n}\n\nexport const PartialLoadingHelper = {\n getPartialLoadingItems(options: PartialLoadingOptions = {}): PartialLoadingItem[] {\n const opts = {\n ...DEFAULT_PARTIAL_LOADING_OPTIONS,\n ...options\n };\n\n const getRandomFilterWidth = () => Math.max(Math.floor(Math.random() * opts.maxWidth), opts.minWidth);\n\n return [...Array(opts.numItems)].map(() => ({ width: `${getRandomFilterWidth()}px` }));\n }\n};","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { ChevronLeftSvg } from 'libs/shared/images/svg/arrows/ChevronLeftSvg';\nimport { PartialLoadingHelper } from 'libs/shared/utils/PartialLoadingHelper';\n\nimport { SvgContainer, SvgContainerSize } from '../svg-container/SvgContainer';\n\nconst namespace = 'shared.breadcrumbComponent';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst COLLAPSE_CHARACTER_COUNT = 64;\nconst MAX_SEGMENT_LENGTH = 48;\n\nexport interface Breadcrumb {\n name: string;\n appLink?: Core.AppLink;\n active?: boolean;\n}\n\ninterface BreadcrumbItemProps {\n breadcrumb: Breadcrumb;\n withBackIcon?: boolean;\n}\n\nexport const BreadcrumbItem = React.forwardRef((\n props: BreadcrumbItemProps,\n ref: React.ForwardedRef<HTMLElement>\n) => {\n const { breadcrumb: { name, appLink, active }, withBackIcon } = props;\n\n let trimmedName = name;\n let title: string = null;\n\n if (trimmedName.length > MAX_SEGMENT_LENGTH) {\n trimmedName = name.slice(0, MAX_SEGMENT_LENGTH) + '...';\n\n // Only setting the title when we trim, because otherwise it's really not needed - Sha\n title = name;\n }\n\n return (\n <li\n className={`breadcrumb-item${active ? ' active' : ''}`}\n title={title}\n >\n {active\n ? <strong>{trimmedName}</strong>\n : <AppLink appLink={appLink} ref={ref}>\n {withBackIcon && <SvgContainer svg={ChevronLeftSvg} size={SvgContainerSize.Small} />}\n <span className={withBackIcon ? 'ms-2' : ''}>{trimmedName}</span>\n </AppLink>\n }\n </li>\n );\n});\n\ninterface BreadcrumbsProps {\n breadcrumbs: Breadcrumb[];\n}\n\nexport const Breadcrumbs = ({ breadcrumbs }: BreadcrumbsProps) => {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n const length = breadcrumbs?.length || 0;\n \n const [ collapse, setCollapse ] = React.useState(false);\n const [ shouldFocus, setShouldFocus ] = React.useState(false);\n const expandRef = React.useRef<HTMLElement>(null);\n\n React.useEffect(() => {\n const characterLength = breadcrumbs?.reduce((prev, next) => prev + next.name.length, 0) ?? 0;\n\n if (length > 4 && characterLength > COLLAPSE_CHARACTER_COUNT)\n setCollapse(true);\n }, [breadcrumbs?.length]);\n\n /**\n * Focus our first expanded item the first time it appears.\n */\n React.useLayoutEffect(() => {\n if (shouldFocus)\n expandRef.current?.focus();\n }, [ expandRef.current, shouldFocus ]);\n\n function onClickExpand() {\n setCollapse(false);\n setShouldFocus(true);\n }\n\n if (!length || (isMobile && length < 2))\n return <></>;\n\n if (isMobile)\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} withBackIcon />\n </ol>\n </nav>\n );\n\n const first = <BreadcrumbItem breadcrumb={breadcrumbs[0]} />;\n const second = length > 2 ? <BreadcrumbItem breadcrumb={breadcrumbs[1]} /> : <></>;\n const secondLast = length > 3 ? <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} /> : <></>;\n const last = length > 1 ? <BreadcrumbItem breadcrumb={breadcrumbs[length - 1]} /> : <></>;\n const rest = breadcrumbs.slice(2, length - 2);\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {first}\n {second}\n {collapse ?\n <li className='breadcrumb-item'>\n <button\n className='btn-link'\n onClick={onClickExpand}\n aria-label={getPhrase('expand')}\n >\n ...\n </button>\n </li> :\n rest.map((breadcrumb, idx) => (\n <BreadcrumbItem\n key={idx}\n breadcrumb={breadcrumb}\n ref={idx === 0 ? expandRef : null}\n />\n ))\n }\n {secondLast}\n {last}\n </ol>\n </nav>\n );\n};\n\nexport const PartialBreadcrumbs = React.memo(function({ numItems = 3 }: { numItems?: number; }) {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n if (isMobile) {\n return (\n <div className='partial-loading-background' style={{ height: '1.3125rem', width: '6rem' }} />\n );\n }\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {PartialLoadingHelper.getPartialLoadingItems({ numItems }).map(({ width }, idx) => (\n <li key={idx} className='breadcrumb-item'>\n <span className='d-inline-block partial-loading-background' style={{ width }} dangerouslySetInnerHTML={{ __html: ' ' }} />\n </li>\n ))}\n </ol>\n </nav>\n );\n});","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { EngagementTable } from 'libs/shared/apps/analytics/components/engagement-table/EngagementTable';\nimport { getFilterParamsKey } from 'libs/shared/apps/analytics/utils/FilterParamUtils';\nimport { Breadcrumbs, PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useGrowingBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, Engagement, PlayerViewKey, User, VideoTypes } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { PartialVideoEngagementOverlay } from 'shared/components/video-engagement-overlay/PartialVideoEngagementOverlay';\nimport { VideoEngagementOverlay } from 'shared/components/video-engagement-overlay/VideoEngagementOverlay';\nimport { Actions } from 'shared/constants/ReportsActions';\nimport { AppChannels } from 'shared/constants/ReportsRadioChannels';\nimport { ViewModelKeys } from 'shared/constants/ReportsViewModels';\nimport { VideoViewsV2Requests } from 'shared/flight-requests/VideoViewsV2Requests';\nimport { useGetAppLinkFilterParams, useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { useHandleVideoError } from 'shared/hooks/UseHandleVideoError';\nimport { useSetHeaderActions } from 'shared/hooks/UseSetHeaderActions';\nimport { useSetHeaderTitle } from 'shared/hooks/UseSetHeaderTitle';\nimport { useGetObjectHeaderActions } from 'shared/utils/HeaderActionUtils';\nimport { StreamsBarChartCardView } from 'shared/views/overview-cards/streams-bar-chart-card/StreamsBarChartCardView';\nimport { StreamsChartCardView } from 'shared/views/overview-cards/streams-chart-card/StreamsChartCardView';\nimport { VideoViewsByRoleCardView } from 'shared/views/overview-cards/video-views-by-role-card/VideoViewsByRoleCardView';\n\nimport styles from './school-video-views.module.scss';\n\nconst namespace = 'reportsVideos.schoolVideoViews';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SchoolVideoViewsViewProps {\n id: string;\n typeId: MasterType;\n}\n\nexport function SchoolVideoViewsView(props: SchoolVideoViewsViewProps) {\n const fetchAsync = Flight.useGetFetchAsync();\n\n const [anonymiseUsers] = useViewModel<boolean>(ViewModelKeys.ANONYMISE_USERS);\n\n const requestFilter = useGetRequestFilter();\n const filterQueryParams = useGetAppLinkFilterParams();\n\n const videoRequest = VideoHelper.getVideoRequest(props.id, props.typeId);\n const video = Flight.useBasicFetch<VideoTypes>(videoRequest);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const heatmapAggregation = Flight.useBasicFetch<Engagement>(\n VideoViewsV2Requests.videoHeatMapAggregation(props.id, requestFilter)\n );\n\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(\n PlayerRequests.createViewKey(props.id, MediaIdType.MasterObject)\n );\n\n const getRequest = (cursor?: string) => VideoViewsV2Requests.videoHeatMap(props.id, requestFilter, cursor);\n const fetchNext = (cursor?: string) => fetchAsync(getRequest(cursor));\n const {\n items: individualHeatmaps,\n hasMore,\n isFetching,\n nextCursor,\n hasFirstPageCompleted: heatmapFirstPageCompleted\n } = useInfiniteList<Engagement>(getRequest, fetchNext);\n\n const individualHeatmapUserIds = individualHeatmaps?.map(h => h.userId).filter(u => !!u);\n const {\n items: users,\n hasFirstRequestCompleted: usersFirstPageCompleted\n } = useGrowingBatchFetch<User>(\n individualHeatmapUserIds,\n UserRequests.getById\n );\n\n useHandleVideoError(video);\n\n useSetPageMetadata({ title: getPhrase('title', { video: video.data?.name }) });\n useSetHeaderTitle(video.data?.name);\n useSetHeaderActions(useGetObjectHeaderActions(video.data, getInsightsUrl));\n\n\n function getInsightsUrl(): string {\n const currentAppLink = AppLinkHelper.getCurrentAppLink();\n const videoId = currentAppLink?.args?.[0];\n let videoRoute = '';\n\n if (!videoId) return videoRoute;\n\n if (props.typeId === MasterType.Interactive)\n videoRoute = `/interactives/${currentAppLink?.args[0]}`;\n\n if (props.typeId === MasterType.Video)\n videoRoute = `/videos/${currentAppLink?.args[0]}`;\n\n if (props.typeId === MasterType.Clip)\n videoRoute = `/clips/${currentAppLink?.args[0]}`;\n\n return videoRoute;\n }\n\n function getAnonUser(e: Engagement): AnonUser {\n if (e.userId) {\n const user = users?.[e.userId];\n\n if (!user)\n return { id: e.userId, deleted: true } as AnonUser;\n\n return user;\n }\n\n return { sessionId: e.sessionId } as AnonUser;\n }\n \n const viewers = individualHeatmaps?.map(e => ({ ...getAnonUser(e), percentage: e.engagementRate }));\n\n const playerLoaded = (\n video.hasCompleted &&\n config.data &&\n viewKey.data &&\n heatmapAggregation.hasCompleted\n );\n\n const tableDataLoaded = (\n !!video.hasCompleted &&\n heatmapFirstPageCompleted &&\n (usersFirstPageCompleted || !individualHeatmapUserIds?.length)\n );\n\n return (\n <div>\n <div className='mb-3'>\n {video.data ?\n <Breadcrumbs\n breadcrumbs={[\n {\n name: getPhrase('videoViews'),\n appLink: {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.HOME\n }\n }, {\n name: video.data.name,\n active: true\n }\n ]}\n />\n : <PartialBreadcrumbs />\n }\n </div>\n\n <div className='d-flex flex-column gap-3'>\n <div className={`${styles.rowA} w-100`}>\n <StreamsChartCardView videoId={props.id} type='user_type' />\n </div>\n <div className='w-100'>\n <div className='row'>\n <div className={`${styles.rowB} col row`}>\n <div className='col-6'>\n <StreamsBarChartCardView videoId={props.id} type='year_group' />\n </div>\n <div className='col-6'>\n <VideoViewsByRoleCardView videoId={props.id} />\n </div>\n </div>\n <div className={styles.videoEngagement}>\n {playerLoaded ?\n <VideoEngagementOverlay\n heading={getPhrase('totalEngagement')}\n className='p-3 h-auto'\n engagement={heatmapAggregation.data}\n viewKey={viewKey.data.viewKey}\n playerApiUrl={config.data.playerApiUrl}\n imageCdnUrl={config.data.imageCdnUrl}\n />\n : <PartialVideoEngagementOverlay hasHeading />\n }\n </div>\n </div>\n </div>\n {tableDataLoaded &&\n <>\n <EngagementTable\n key={getFilterParamsKey(filterQueryParams)}\n engagement={individualHeatmaps}\n users={viewers}\n imageCdnUrl={config.data?.imageCdnUrl}\n anonymiseUsers={anonymiseUsers}\n />\n {(hasMore || isFetching) &&\n <InfiniteScrollFooter\n isFetching={isFetching}\n fetchNext={fetchNext}\n nextCursor={nextCursor}\n />\n }\n </>\n }\n </div>\n </div>\n );\n}"],"names":["DEFAULT_PARTIAL_LOADING_OPTIONS","PartialLoadingHelper","options","opts","getRandomFilterWidth","namespace","getPhrase","LanguageService","COLLAPSE_CHARACTER_COUNT","MAX_SEGMENT_LENGTH","BreadcrumbItem","React.forwardRef","props","ref","name","appLink","active","withBackIcon","trimmedName","title","jsx","jsxs","AppLink","SvgContainer","ChevronLeftSvg","SvgContainerSize","Breadcrumbs","breadcrumbs","isMobile","useMediaQuery","MediaQueryStrings","length","collapse","setCollapse","React.useState","shouldFocus","setShouldFocus","expandRef","React.useRef","React.useEffect","characterLength","prev","next","React.useLayoutEffect","_a","onClickExpand","Fragment","first","second","secondLast","last","rest","breadcrumb","idx","PartialBreadcrumbs","React.memo","numItems","width","SchoolVideoViewsView","fetchAsync","Flight.useGetFetchAsync","anonymiseUsers","useViewModel","ViewModelKeys","requestFilter","useGetRequestFilter","filterQueryParams","useGetAppLinkFilterParams","videoRequest","VideoHelper","video","Flight.useBasicFetch","config","ConfigRequests","heatmapAggregation","VideoViewsV2Requests","viewKey","PlayerRequests","MediaIdType","getRequest","cursor","fetchNext","individualHeatmaps","hasMore","isFetching","nextCursor","heatmapFirstPageCompleted","useInfiniteList","individualHeatmapUserIds","h","u","users","usersFirstPageCompleted","useGrowingBatchFetch","UserRequests","useHandleVideoError","useSetPageMetadata","useSetHeaderTitle","_b","useSetHeaderActions","useGetObjectHeaderActions","getInsightsUrl","currentAppLink","AppLinkHelper","videoId","videoRoute","MasterType","getAnonUser","e","user","viewers","playerLoaded","tableDataLoaded","AppChannels","Actions","styles","StreamsChartCardView","StreamsBarChartCardView","VideoViewsByRoleCardView","VideoEngagementOverlay","PartialVideoEngagementOverlay","EngagementTable","_c","getFilterParamsKey","InfiniteScrollFooter"],"mappings":"0wCAAA,MAAMA,GAAyD,CAC7D,SAAU,EACV,SAAU,GACV,SAAU,GACZ,EAYaC,GAAuB,CAClC,uBAAuBC,EAAiC,GAA0B,CAChF,MAAMC,EAAO,CACX,GAAGH,GACH,GAAGE,CAAA,EAGCE,EAAuB,IAAM,KAAK,IAAI,KAAK,MAAM,KAAK,OAAA,EAAWD,EAAK,QAAQ,EAAGA,EAAK,QAAQ,EAEpG,MAAO,CAAC,GAAG,MAAMA,EAAK,QAAQ,CAAC,EAAE,IAAI,KAAO,CAAE,MAAO,GAAGC,EAAA,CAAsB,MAAO,CACvF,CACF,ECdMC,GAAY,6BACZC,GAAYC,EAAgB,iBAAiBF,EAAS,EAEtDG,GAA2B,GAC3BC,EAAqB,GAadC,EAAiBC,EAAAA,WAAiB,CAC7CC,EACAC,IACG,CACH,KAAM,CAAE,WAAY,CAAE,KAAAC,EAAM,QAAAC,EAAS,OAAAC,CAAA,EAAU,aAAAC,GAAiBL,EAEhE,IAAIM,EAAcJ,EACdK,EAAgB,KAEpB,OAAID,EAAY,OAAST,IACvBS,EAAcJ,EAAK,MAAM,EAAGL,CAAkB,EAAI,MAGlDU,EAAQL,GAIRM,EAAAA,IAAC,KAAA,CACC,UAAW,kBAAkBJ,EAAS,UAAY,EAAE,GACpD,MAAAG,EAEC,SAAAH,QACI,SAAA,CAAQ,SAAAE,EAAY,EACrBG,EAAAA,KAACC,EAAA,CAAQ,QAAAP,EAAkB,IAAAF,EAC1B,SAAA,CAAAI,SAAiBM,EAAA,CAAa,IAAKC,GAAgB,KAAMC,EAAiB,MAAO,QACjF,OAAA,CAAK,UAAWR,EAAe,OAAS,GAAK,SAAAC,CAAA,CAAY,CAAA,CAAA,CAC5D,CAAA,CAAA,CAIR,CAAC,EAMYQ,GAAc,CAAC,CAAE,YAAAC,KAAoC,CAChE,MAAMC,EAAWC,EAAcC,EAAkB,EAAE,EAE7CC,GAASJ,GAAA,YAAAA,EAAa,SAAU,EAEhC,CAAEK,EAAUC,CAAY,EAAIC,EAAAA,SAAe,EAAK,EAChD,CAAEC,EAAaC,CAAe,EAAIF,EAAAA,SAAe,EAAK,EACtDG,EAAYC,EAAAA,OAA0B,IAAI,EAEhDC,EAAAA,UAAgB,IAAM,CACpB,MAAMC,GAAkBb,GAAA,YAAAA,EAAa,OAAO,CAACc,EAAMC,IAASD,EAAOC,EAAK,KAAK,OAAQ,KAAM,EAEvFX,EAAS,GAAKS,EAAkBhC,IAClCyB,EAAY,EAAI,CACpB,EAAG,CAACN,GAAA,YAAAA,EAAa,MAAM,CAAC,EAKxBgB,EAAAA,gBAAsB,IAAM,OACtBR,KACFS,EAAAP,EAAU,UAAV,MAAAO,EAAmB,QACvB,EAAG,CAAEP,EAAU,QAASF,CAAY,CAAC,EAErC,SAASU,GAAgB,CACvBZ,EAAY,EAAK,EACjBG,EAAe,EAAI,CACrB,CAEA,GAAI,CAACL,GAAWH,GAAYG,EAAS,EACnC,OAAOX,EAAAA,IAAA0B,EAAAA,SAAA,EAAE,EAEX,GAAIlB,EACF,aACG,MAAA,CAAI,aAAW,aACd,SAAAR,EAAAA,IAAC,KAAA,CAAG,UAAU,qBACZ,SAAAA,EAAAA,IAACV,EAAA,CAAe,WAAYiB,EAAYI,EAAS,CAAC,EAAG,aAAY,GAAC,EACpE,CAAA,CACF,EAGJ,MAAMgB,EAAQ3B,EAAAA,IAACV,EAAA,CAAe,WAAYiB,EAAY,CAAC,EAAG,EACpDqB,EAASjB,EAAS,EAAIX,EAAAA,IAACV,EAAA,CAAe,WAAYiB,EAAY,CAAC,CAAA,CAAG,EAAKP,EAAAA,IAAA0B,EAAAA,SAAA,CAAA,CAAE,EACzEG,EAAalB,EAAS,EAAIX,EAAAA,IAACV,EAAA,CAAe,WAAYiB,EAAYI,EAAS,CAAC,CAAA,CAAG,EAAKX,EAAAA,IAAA0B,EAAAA,SAAA,CAAA,CAAE,EACtFI,EAAOnB,EAAS,EAAIX,EAAAA,IAACV,EAAA,CAAe,WAAYiB,EAAYI,EAAS,CAAC,CAAA,CAAG,EAAKX,EAAAA,IAAA0B,EAAAA,SAAA,CAAA,CAAE,EAChFK,EAAOxB,EAAY,MAAM,EAAGI,EAAS,CAAC,EAE5C,aACG,MAAA,CAAI,aAAW,aACd,SAAAV,EAAAA,KAAC,KAAA,CAAG,UAAU,qBACX,SAAA,CAAA0B,EACAC,EACAhB,EACCZ,EAAAA,IAAC,KAAA,CAAG,UAAU,kBACZ,SAAAA,EAAAA,IAAC,SAAA,CACC,UAAU,WACV,QAASyB,EACT,aAAYvC,GAAU,QAAQ,EAC/B,SAAA,KAAA,CAAA,EAGH,EACA6C,EAAK,IAAI,CAACC,EAAYC,IACpBjC,EAAAA,IAACV,EAAA,CAEC,WAAA0C,EACA,IAAKC,IAAQ,EAAIhB,EAAY,IAAA,EAFxBgB,CAAA,CAIR,EAEFJ,EACAC,CAAA,CAAA,CACH,CAAA,CACF,CAEJ,EAEaI,GAAqBC,EAAAA,KAAW,SAAS,CAAE,SAAAC,EAAW,GAA6B,CAG9F,OAFiB3B,EAAcC,EAAkB,EAAE,EAI/CV,MAAC,MAAA,CAAI,UAAU,6BAA6B,MAAO,CAAE,OAAQ,YAAa,MAAO,MAAA,CAAO,CAAG,QAK5F,MAAA,CAAI,aAAW,aACd,SAAAA,EAAAA,IAAC,KAAA,CAAG,UAAU,qBACX,SAAAnB,GAAqB,uBAAuB,CAAE,SAAAuD,EAAU,EAAE,IAAI,CAAC,CAAE,MAAAC,GAASJ,IACzEjC,EAAAA,IAAC,KAAA,CAAa,UAAU,kBACtB,SAAAA,EAAAA,IAAC,QAAK,UAAU,4CAA4C,MAAO,CAAE,MAAAqC,CAAA,EAAS,wBAAyB,CAAE,OAAQ,OAAA,CAAQ,CAAG,GADrHJ,CAET,CACD,EACH,EACF,CAEJ,CAAC,kFC3HKhD,GAAY,iCACZC,EAAYC,EAAgB,iBAAiBF,EAAS,EAOrD,SAASqD,GAAqB9C,EAAkC,WACrE,MAAM+C,EAAaC,EAAO,EAEpB,CAACC,CAAc,EAAIC,EAAsBC,GAAc,eAAe,EAEtEC,EAAgBC,EAAA,EAChBC,EAAoBC,EAAA,EAEpBC,EAAeC,EAAY,gBAAgBzD,EAAM,GAAIA,EAAM,MAAM,EACjE0D,EAAQC,EAAiCH,CAAY,EAErDI,EAASD,EAA6BE,GAAe,QAAQ,EAE7DC,EAAqBH,EACzBI,EAAqB,wBAAwB/D,EAAM,GAAIoD,CAAa,CAAA,EAGhEY,EAAUL,EACdM,GAAe,cAAcjE,EAAM,GAAIkE,GAAY,YAAY,CAAA,EAG3DC,EAAcC,GAAoBL,EAAqB,aAAa/D,EAAM,GAAIoD,EAAegB,CAAM,EACnGC,EAAaD,GAAoBrB,EAAWoB,EAAWC,CAAM,CAAC,EAC9D,CACJ,MAAOE,EACP,QAAAC,EACA,WAAAC,EACA,WAAAC,EACA,sBAAuBC,CAAA,EACrBC,GAA4BR,EAAYE,CAAS,EAE/CO,EAA2BN,GAAA,YAAAA,EAAoB,IAAIO,GAAKA,EAAE,QAAQ,OAAOC,GAAK,CAAC,CAACA,GAChF,CACJ,MAAOC,EACP,yBAA0BC,CAAA,EACxBC,GACFL,EACAM,GAAa,OAAA,EAGfC,GAAoBzB,CAAK,EAEzB0B,EAAmB,CAAE,MAAO1F,EAAU,QAAS,CAAE,OAAOsC,EAAA0B,EAAM,OAAN,YAAA1B,EAAY,IAAA,CAAM,EAAG,EAC7EqD,IAAkBC,EAAA5B,EAAM,OAAN,YAAA4B,EAAY,IAAI,EAClCC,GAAoBC,GAA0B9B,EAAM,KAAM+B,CAAc,CAAC,EAGzE,SAASA,GAAyB,OAChC,MAAMC,EAAiBC,GAAc,kBAAA,EAC/BC,GAAU5D,EAAA0D,GAAA,YAAAA,EAAgB,OAAhB,YAAA1D,EAAuB,GACvC,IAAI6D,EAAa,GAEjB,OAAKD,IAED5F,EAAM,SAAW8F,EAAW,cAC9BD,EAAa,iBAAiBH,GAAA,YAAAA,EAAgB,KAAK,EAAE,IAEnD1F,EAAM,SAAW8F,EAAW,QAC9BD,EAAa,WAAWH,GAAA,YAAAA,EAAgB,KAAK,EAAE,IAE7C1F,EAAM,SAAW8F,EAAW,OAC9BD,EAAa,UAAUH,GAAA,YAAAA,EAAgB,KAAK,EAAE,KAEzCG,CACT,CAEA,SAASE,EAAYC,EAAyB,CAC5C,GAAIA,EAAE,OAAQ,CACZ,MAAMC,EAAOlB,GAAA,YAAAA,EAAQiB,EAAE,QAEvB,OAAKC,GACI,CAAE,GAAID,EAAE,OAAQ,QAAS,EAAA,CAGpC,CAEA,MAAO,CAAE,UAAWA,EAAE,SAAA,CACxB,CAEA,MAAME,EAAU5B,GAAA,YAAAA,EAAoB,IAAI0B,IAAM,CAAE,GAAGD,EAAYC,CAAC,EAAG,WAAYA,EAAE,cAAA,IAE3EG,EACJzC,EAAM,cACNE,EAAO,MACPI,EAAQ,MACRF,EAAmB,aAGfsC,EACJ,CAAC,CAAC1C,EAAM,cACRgB,IACCM,GAA2B,EAACJ,GAAA,MAAAA,EAA0B,SAGzD,cACG,MAAA,CACC,SAAA,CAAApE,EAAAA,IAAC,MAAA,CAAI,UAAU,OACZ,SAAAkD,EAAM,KACLlD,EAAAA,IAACM,GAAA,CACC,YAAa,CACX,CACE,KAAMpB,EAAU,YAAY,EAC5B,QAAS,CACP,YAAa2G,GAAY,OACzB,OAAQC,EAAQ,OAAO,IAAA,CACzB,EACC,CACD,KAAM5C,EAAM,KAAK,KACjB,OAAQ,EAAA,CACV,CACF,CAAA,EAEAlD,MAACkC,GAAA,CAAA,CAAmB,EAE1B,EAEAjC,EAAAA,KAAC,MAAA,CAAI,UAAU,2BACb,SAAA,CAAAD,EAAAA,IAAC,MAAA,CAAI,UAAW,GAAG+F,EAAO,IAAI,SAC5B,SAAA/F,EAAAA,IAACgG,GAAA,CAAqB,QAASxG,EAAM,GAAI,KAAK,YAAY,EAC5D,QACC,MAAA,CAAI,UAAU,QACb,SAAAS,EAAAA,KAAC,MAAA,CAAI,UAAU,MACb,SAAA,CAAAA,OAAC,MAAA,CAAI,UAAW,GAAG8F,EAAO,IAAI,WAC5B,SAAA,CAAA/F,EAAAA,IAAC,MAAA,CAAI,UAAU,QACb,SAAAA,EAAAA,IAACiG,GAAA,CAAwB,QAASzG,EAAM,GAAI,KAAK,YAAA,CAAa,CAAA,CAChE,EACAQ,EAAAA,IAAC,OAAI,UAAU,QACb,eAACkG,GAAA,CAAyB,QAAS1G,EAAM,EAAA,CAAI,CAAA,CAC/C,CAAA,EACF,EACAQ,EAAAA,IAAC,MAAA,CAAI,UAAW+F,EAAO,gBACpB,SAAAJ,EACC3F,EAAAA,IAACmG,GAAA,CACC,QAASjH,EAAU,iBAAiB,EACpC,UAAU,aACV,WAAYoE,EAAmB,KAC/B,QAASE,EAAQ,KAAK,QACtB,aAAcJ,EAAO,KAAK,aAC1B,YAAaA,EAAO,KAAK,WAAA,CAAA,EAEzBpD,EAAAA,IAACoG,GAAA,CAA8B,WAAU,GAAC,CAAA,CAEhD,CAAA,CAAA,CACF,CAAA,CACF,EACCR,GACC3F,EAAAA,KAAAyB,WAAA,CACE,SAAA,CAAA1B,EAAAA,IAACqG,GAAA,CAEC,WAAYvC,EACZ,MAAO4B,EACP,aAAaY,EAAAlD,EAAO,OAAP,YAAAkD,EAAa,YAC1B,eAAA7D,CAAA,EAJK8D,GAAmBzD,CAAiB,CAAA,GAMzCiB,GAAWC,IACXhE,EAAAA,IAACwG,GAAA,CACC,WAAAxC,EACA,UAAAH,EACA,WAAAI,CAAA,CAAA,CACF,CAAA,CAEJ,CAAA,CAAA,CAEJ,CAAA,EACF,CAEJ"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{j as e,d as x,e as h,u as l,U as j,L as f}from"./app-5iiM5qQY.js";import{P as g,a as d}from"./P3PkkK_o.chunk.js";import{V as m}from"./C0Ak1kpS.chunk.js";import{u as y}from"./BvArNs1K.chunk.js";function v(a){return e.jsx(g,{layout:a.layout,className:a.className,percentage:0,customLabel:"--%"})}const b="shared.engagementOverviewCard",r=f.encloseNamespace(b);function E(a){var i;const s=x(),n=h(),u=!s.users&&!s.classrooms&&!s.classroomGroups,c=l(!!a.useSharerId&&j.currentUser()),t=l(!!n&&(a.useSharerId?!!c.data&&m.aggregateEngagement(a.objectId,n,c.data.id):m.aggregateEngagement(a.objectId,n)));y(t);const o=((i=t.data)==null?void 0:i.engagementRate)>0?t.data.engagementRate:null;return e.jsxs("div",{className:`d-flex flex-column rounded bg-white p-3 ${a.className??""}`,children:[e.jsx("h3",{className:"h6 mb-2",children:r("heading")}),e.jsxs("div",{className:`d-flex align-items-center flex-grow-1
|
|
2
|
+
${a.layout==="vertical"?" flex-column justify-content-center text-center":""}`,children:[!!t.data&&e.jsxs(e.Fragment,{children:[e.jsx(g,{percentage:o,layout:d.LabelInside}),e.jsx("p",{className:a.layout==="horizontal"?"ms-2":"",children:typeof o=="number"?r(u?"descriptionEveryone":"descriptionSome",{percentage:Math.round(t.data.engagementRate*100)}):r("descriptionNoData")})]}),!t.data&&e.jsxs(e.Fragment,{children:[e.jsx(v,{layout:d.LabelInside}),a.layout==="vertical"&&e.jsx("p",{children:" "})]})]})]})}export{E,v as P};
|
|
3
|
+
//# sourceMappingURL=DxOc33K6.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DxOc33K6.chunk.js","sources":["../../../../libs/shared/src/components/percentage-indicator/PartialPercentageIndicator.tsx","../../src/shared/views/overview-cards/engagement-overview-card/EngagementOverviewCardView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { PercentageIndicator, PercentageIndicatorLayout } from './PercentageIndicator';\n\ninterface PartialPercentageIndicatorProps {\n layout: PercentageIndicatorLayout;\n className?: string;\n}\n\nexport function PartialPercentageIndicator(props: PartialPercentageIndicatorProps): JSX.Element {\n return (\n <PercentageIndicator\n layout={props.layout}\n className={props.className}\n percentage={0}\n customLabel='--%'\n />\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { PartialPercentageIndicator } from 'libs/shared/components/percentage-indicator/PartialPercentageIndicator';\nimport { PercentageIndicator, PercentageIndicatorLayout } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoViewRequests } from 'libs/shared/flight-requests/VideoViewRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { CurrentUser, Engagement } from 'libs/shared/interfaces';\n\nimport { useGetAppLinkFilterParams, useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\n\nconst namespace = 'shared.engagementOverviewCard';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface EngagementOverviewCardViewProps {\n objectId: string | null; // Passing `null` will trigger partial loading\n layout: 'vertical' | 'horizontal';\n className?: string;\n useSharerId?: boolean;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function EngagementOverviewCardView(props: EngagementOverviewCardViewProps): JSX.Element {\n const filterQueryParams = useGetAppLinkFilterParams();\n const requestFilter = useGetRequestFilter();\n\n const everyoneSelected = !filterQueryParams.users\n && !filterQueryParams.classrooms\n && !filterQueryParams.classroomGroups;\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(!!props.useSharerId && UserRequests.currentUser());\n\n const engagement = Flight.useBasicFetch<Engagement>(!!requestFilter && (props.useSharerId\n ? !!currentUser.data && VideoViewRequests.aggregateEngagement(props.objectId, requestFilter, currentUser.data.id)\n : VideoViewRequests.aggregateEngagement(props.objectId, requestFilter)\n ));\n\n useHandleObjectError(engagement);\n\n const engagementRate = engagement.data?.engagementRate > 0 ? engagement.data.engagementRate : null;\n\n return (\n <div className={`d-flex flex-column rounded bg-white p-3 ${props.className ?? ''}`}>\n <h3 className='h6 mb-2'>{getPhrase('heading')}</h3>\n <div\n className={\n `d-flex align-items-center flex-grow-1\n ${props.layout === 'vertical' ? ' flex-column justify-content-center text-center' : ''}`\n }\n >\n {!!engagement.data &&\n <>\n <PercentageIndicator\n percentage={engagementRate}\n layout={PercentageIndicatorLayout.LabelInside}\n />\n <p className={props.layout === 'horizontal' ? 'ms-2' : ''}>\n {typeof engagementRate === 'number'\n ? getPhrase(everyoneSelected ? 'descriptionEveryone' : 'descriptionSome', {\n percentage: Math.round(engagement.data.engagementRate * 100)\n })\n : getPhrase('descriptionNoData')\n }\n </p>\n </>\n }\n {!engagement.data &&\n <>\n <PartialPercentageIndicator layout={PercentageIndicatorLayout.LabelInside} />\n {props.layout === 'vertical' && <p> </p>}\n </>\n }\n </div>\n </div>\n );\n}"],"names":["PartialPercentageIndicator","props","jsx","PercentageIndicator","namespace","getPhrase","LanguageService","EngagementOverviewCardView","filterQueryParams","useGetAppLinkFilterParams","requestFilter","useGetRequestFilter","everyoneSelected","currentUser","Flight.useBasicFetch","UserRequests","engagement","VideoViewRequests","useHandleObjectError","engagementRate","_a","jsxs","Fragment","PercentageIndicatorLayout"],"mappings":"wMASO,SAASA,EAA2BC,EAAqD,CAC9F,OACEC,EAAAA,IAACC,EAAA,CACC,OAAQF,EAAM,OACd,UAAWA,EAAM,UACjB,WAAY,EACZ,YAAY,KAAA,CAAA,CAGlB,CCJA,MAAMG,EAAY,gCACZC,EAAYC,EAAgB,iBAAiBF,CAAS,EAUrD,SAASG,EAA2BN,EAAqD,OAC9F,MAAMO,EAAoBC,EAAA,EACpBC,EAAgBC,EAAA,EAEhBC,EAAmB,CAACJ,EAAkB,OACvC,CAACA,EAAkB,YACnB,CAACA,EAAkB,gBAElBK,EAAcC,EAAkC,CAAC,CAACb,EAAM,aAAec,EAAa,aAAa,EAEjGC,EAAaF,EAAiC,CAAC,CAACJ,IAAkBT,EAAM,YAC1E,CAAC,CAACY,EAAY,MAAQI,EAAkB,oBAAoBhB,EAAM,SAAUS,EAAeG,EAAY,KAAK,EAAE,EAC9GI,EAAkB,oBAAoBhB,EAAM,SAAUS,CAAa,EACtE,EAEDQ,EAAqBF,CAAU,EAE/B,MAAMG,IAAiBC,EAAAJ,EAAW,OAAX,YAAAI,EAAiB,gBAAiB,EAAIJ,EAAW,KAAK,eAAiB,KAE9F,cACG,MAAA,CAAI,UAAW,2CAA2Cf,EAAM,WAAa,EAAE,GAC9E,SAAA,CAAAC,MAAC,KAAA,CAAG,UAAU,UAAW,SAAAG,EAAU,SAAS,EAAE,EAC9CgB,EAAAA,KAAC,MAAA,CACC,UACE;AAAA,YACEpB,EAAM,SAAW,WAAa,kDAAoD,EAAE,GAGvF,SAAA,CAAA,CAAC,CAACe,EAAW,MACZK,EAAAA,KAAAC,EAAAA,SAAA,CACE,SAAA,CAAApB,EAAAA,IAACC,EAAA,CACC,WAAYgB,EACZ,OAAQI,EAA0B,WAAA,CAAA,EAEpCrB,EAAAA,IAAC,IAAA,CAAE,UAAWD,EAAM,SAAW,aAAe,OAAS,GACpD,SAAA,OAAOkB,GAAmB,SACvBd,EAAUO,EAAmB,sBAAwB,kBAAmB,CACxE,WAAY,KAAK,MAAMI,EAAW,KAAK,eAAiB,GAAG,CAAA,CAC5D,EACCX,EAAU,mBAAmB,CAAA,CAEnC,CAAA,EACF,EAED,CAACW,EAAW,MACXK,EAAAA,KAAAC,EAAAA,SAAA,CACE,SAAA,CAAApB,EAAAA,IAACF,EAAA,CAA2B,OAAQuB,EAA0B,WAAA,CAAa,EAC1EtB,EAAM,SAAW,YAAcC,EAAAA,IAAC,KAAE,SAAA,GAAA,CAAM,CAAA,CAAA,CAC3C,CAAA,CAAA,CAAA,CAEJ,EACF,CAEJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{aJ as J,bW as X,j as t,O as m,L as h,T as x,p as C,a5 as Y,v as d,h as Z,a3 as ee,bX as te,r as se,w as ne,a1 as M,c as re,u as A,bN as W,e as ae,a as ie,bE as R,V as ce,C as le}from"./app-5iiM5qQY.js";import{I as oe,a as de,M as ue,u as me}from"./CWViZWyh.chunk.js";import{I as _,a as g}from"./CNgTzzan.chunk.js";import{a as ge}from"./CsP3Lruv.chunk.js";import{d as H,I as O,e as D,f as p,a as he,b as fe,h as N,i as xe}from"./DTL-Rceb.chunk.js";import{P as be}from"./BdX0pSRt.chunk.js";import{P as je,a as Ie}from"./P3PkkK_o.chunk.js";import{T as Se}from"./qwzILhQ0.chunk.js";import{u as we}from"./DJzpw8qX.chunk.js";import{u as ye}from"./CSmXZuTZ.chunk.js";import{u as pe}from"./BvArNs1K.chunk.js";import{P as ve}from"./72EXv822.chunk.js";import{u as ke}from"./D2pFW6EB.chunk.js";import{u as Ne,a as Ce}from"./DFlfmBPU.chunk.js";import{u as Me}from"./BxBPX67V.chunk.js";import{u as Ae,I as Re}from"./BLEXuU9u.chunk.js";import{u as Ue,a as Te}from"./HBvGjr-A.chunk.js";import{u as $e}from"./yaRKidLW.chunk.js";import"./BLuY6AYO.chunk.js";import"./LT6WE6TB.chunk.js";import"./hU1zzvt8.chunk.js";import"./CTMVj7AR.chunk.js";import"./5O9SdVRZ.chunk.js";import"./sFV5nxD4.chunk.js";import"./C8oA7_zY.chunk.js";import"./Ddy6mQmA.chunk.js";import"./SA1hxE7y.chunk.js";import"./BqY3bZyH.chunk.js";import"./Cs1UnwSi.chunk.js";import"./DMd0fZar.chunk.js";import"./DTotSVIi.chunk.js";import"./CX5q-0jT.chunk.js";const Pe={preventScrollTop(){J.Radio.channel(X.SHELL).trigger("prevent:scroll:top")}},Ee="shared.interactionQuestionsEmptyState",Fe=h.encloseNamespace(Ee);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:Fe("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 We(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 He="interactives.interactionResponseListHeader",Be=h.encloseNamespace(He);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(Y,{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(We,{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:H(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:H(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 Je="_answerWidth_nmntd_10",$={answerWidth:Je};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 Ye="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:Ye,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:E});case g.TrueOrFalse:return t.jsx(et,{interaction:e.interaction,indexToLetter:E});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 E(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?E(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,F,q,L;const[s]=re(ce.ANONYMISE_USERS),[n,r]=C.useState(!1),i=A(W.interactiveMetadata(e.interactiveMetadataId)),l=A((w=i.data)!=null&&w.interactiveId?W.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((F=i.data)==null?void 0:F.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=DxbQzyJg.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DxbQzyJg.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":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{s as i,bI as f,bJ as c,bL as j,j as o}from"./app-5iiM5qQY.js";var a=(e=>(e.Playlists="playlists",e.Series="series",e.Videos="videos",e.PinnedVideos="pinnedVideos",e))(a||{}),n=(e=>(e.Subject="Subject",e.Curriculum="Curriculum",e.StreamableLearning="StreamableLearning",e))(n||{});const m=e=>`subjectpresentationaudiences.id:[${e.join(",")}]`,L={topicsFromAllAvailablePresentations(e){const s={filterType:"topics",presentationId:e};return{url:i.urlBuilder("{gateway}/v1/search/filters",s),publicUrl:i.urlBuilder("/api/search/filters",s),key:"classification:availableTopics",normalize:!1}},availablePresentations(e){const s={type:e==null?void 0:e.toLowerCase()};return{url:i.urlBuilder("{gateway}/v1/users/me/presentations/available",s),publicUrl:i.urlBuilder("/api/subjects/presentations/available",s),key:`available:presentations:${e}`,normalizeOptions:{namespace:"presentation"}}},topLevelTopics(e){const s={query:c.CLASSIFICATION_COLLECTION,sort:"alphabetical"};return{url:i.urlBuilder(`{gateway}/v1/subjects/presentations/${e}/classifications`,s),publicUrl:i.urlBuilder(`/api/subjects/presentations/${e}/classifications`,s),key:`presentation:${e}:classifications`}},presentationById(e){return{url:`{gateway}/v1/subjects/presentations/${e}`,publicUrl:`/api/subjects/presentations/${e}`,key:`presentation:${e}`}},presentationBySlug(e,s,r){const t={type:r.toLowerCase(),contentRegion:s};return{url:i.urlBuilder(`/api/subjects/presentations/${e}`,t),publicUrl:i.urlBuilder(`/api/subjects/presentations/${e}`,t),key:`current:presentation:${r.toLowerCase()}:${s}:${e??""}`,bootstrapName:"presentation",normalizeOptions:{namespace:"presentation"}}},presentation(e,s){const r={type:e==null?void 0:e.toLowerCase()};return{url:i.urlBuilder("{gateway}/v1/users/me/presentations",r),publicUrl:i.urlBuilder(`/api/subjects/presentations/${s}`,r),key:`current:presentation${e?`:${e.toLowerCase()}`:""}${s?`:${s}`:""}`,normalizeOptions:{namespace:"presentation"}}},classifications(){return{url:i.urlBuilder("{gateway}/v1/users/me/classifications",{query:c.CLASSIFICATION_COLLECTION,type:n.Subject.toLowerCase()}),publicUrl:i.urlBuilder("/api/subjects/classifications",{query:j.CLASSIFICATION_COLLECTION,type:n.Subject.toLowerCase()}),key:"classifications"}},classification(e,s,r){return{url:i.urlBuilder(`{gateway}/v1/subjects/classifications/${e}`,{query:c.CLASSIFICATION(s)}),publicUrl:i.urlBuilder(`/api/subjects/classifications/${e}`,{query:j.CLASSIFICATION}),key:`classification:${e}`,error:r}},path(e,s){const r={type:s};return{url:i.urlBuilder(`{gateway}/v1/subjects/classifications/${e}/path`,r),publicUrl:`/api/subjects/classifications/${e}/path`,key:`classification:${e}:path`}},paths(e){return{url:`/api/subjects/classifications/${e}/paths`,key:`classification:${e}:paths`}},children(e){return{url:i.urlBuilder(`{gateway}/v1/subjects/classifications/${e}/children`,{query:c.CLASSIFICATION_COLLECTION}),publicUrl:i.urlBuilder(`/api/subjects/classifications/${e}/children`,{query:j.CLASSIFICATION_COLLECTION}),key:`classification:${e}:children`}},videos(e,s,r){if(!s)return;let t="limit:100,orderbydesc:timestamp";r.length&&(t+=`,${m(r)}`);const l={query:`{${t}}(videoCollection),subjectpresentationaudiences{presentationId:${s}}`,permissionFilterOption:f.StripMetadata};return{url:i.urlBuilder(`{gateway}/v1/subjects/classifications/${e}/${a.PinnedVideos}`,l),publicUrl:i.urlBuilder(`/api/subjects/classifications/${e}/${a.PinnedVideos}`,l),key:`classification:${e}:${a.PinnedVideos}:${r.join(":")}`}},playlists(e,s,r){if(!s)return;let t="limit:100,orderby:name";r.length&&(t+=`,${m(r)}`);const l={query:`{${t}}${c.PLAYLIST_COLLECTION},subjectpresentationaudiences{presentationId:${s}}`,permissionFilterOption:f.StripMetadata};return{url:i.urlBuilder(`{gateway}/v1/subjects/classifications/${e}/${a.Playlists}`,l),publicUrl:i.urlBuilder(`/api/subjects/classifications/${e}/${a.Playlists}`,l),key:`classification:${e}:${a.Playlists}:${r.join(":")}`,formatData:u=>{var p;if(u)return{...u,data:(p=u.data)==null?void 0:p.filter($=>{var b;return(b=$.cover)==null?void 0:b.url})}}}},series(e,s,r){if(!s)return;let t="limit:100";r.length&&(t+=`,${m(r)}`);const l={query:`{${t}}${c.SERIES},subjectpresentationaudiences{presentationId:${s}}`,permissionFilterOption:f.StripMetadata};return{url:i.urlBuilder(`{gateway}/v1/subjects/classifications/${e}/${a.Series}`,l),publicUrl:i.urlBuilder(`/api/subjects/classifications/${e}/${a.Series}`,l),key:`classification:${e}:${a.Series}:${r.join(":")}`,formatData:u=>{var p;if(u)return{...u,data:(p=u.data)==null?void 0:p.filter($=>{var b;return(b=$.tallPoster)==null?void 0:b.url})}}}},curriculumLinks(e,s){return{url:i.urlBuilder(`/api/subjects/presentations/${s}/objects/${e}/classifications/paths`,{type:n.Curriculum.toLowerCase()}),publicUrl:i.urlBuilder(`/api/subjects/presentations/${s}/objects/${e}/classifications/paths`,{type:n.Curriculum.toLowerCase()}),key:`curriculum:links:${e}:${s}`,normalize:!1}},subjectLinks(e,s){const r=i.urlBuilder(`/api/subjects/presentations/${s}/objects/${e}/classifications/paths`,{type:n.Subject.toLowerCase()});return{url:r,publicUrl:r,key:`subject:links:${e}:${s}`,normalize:!1}},getMappedCurriculums(e,s){const r={type:n.Curriculum.toLowerCase()};return{url:i.urlBuilder(`{gateway}/v1/objects/${e}/presentations`,r),publicUrl:i.urlBuilder(`/api/subjects/${e}/presentations`,{...r,pid:s}),key:`mapped:curriculums:${e}:${s.join(",")}`,normalize:!1}},regionAlternatives(e,s,r,t){return{url:`/api/subjects/classifications/${e}/region-alternatives`,publicUrl:`/api/subjects/classifications/${e}/region-alternatives`,key:`classification:regionAlternatives:${e}`,normalize:!1,success:s,error:r,always:t}}};function S(e){return o.jsxs("svg",{...e,children:[o.jsx("defs",{children:o.jsx("path",{id:"a",d:"M3 12c0-2.44 4.5-6.025 9.003-6C16.494 6.025 21 9.614 21 12c0 2.45-4.504 6-9 6-4.466 0-9-3.586-9-6m1 0c0 1.804 4.042 5 8 5 3.989 0 8-3.161 8-5 0-1.778-4.017-4.977-8.003-5C8.006 6.978 4 10.17 4 12m8 4a4 4 0 1 1 0-8 4 4 0 0 1 0 8m0-1a3 3 0 1 0 0-6 3 3 0 0 0 0 6",fill:"currentColor"})}),o.jsx("use",{xlinkHref:"#a",fill:"#333"})]})}function d(e){return o.jsx("svg",{...e,children:o.jsx("path",{fill:"currentColor",d:"M17.834 5.916a2.5 2.5 0 0 0-3.536 0L12.53 7.684a.5.5 0 0 1-.707-.707l1.768-1.768a3.5 3.5 0 1 1 4.95 4.95l-3.687 3.687a3.786 3.786 0 0 1-5.354 0l-.152-.152a.5.5 0 0 1 .707-.707l.152.152a2.786 2.786 0 0 0 3.94 0l3.687-3.687a2.5 2.5 0 0 0 0-3.536m-8.94 3.99a3.643 3.643 0 0 1 5.152 0l.606.607a.5.5 0 1 1-.707.707l-.607-.606a2.643 2.643 0 0 0-3.737 0l-3.435 3.434a2.5 2.5 0 1 0 3.536 3.536l1.414-1.415a.5.5 0 0 1 .707.707l-1.414 1.415a3.5 3.5 0 1 1-4.95-4.95z"})})}export{L as C,d as L,n as P,S as V};
|
|
2
|
+
//# sourceMappingURL=DyaAoFDP.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DyaAoFDP.chunk.js","sources":["../../../../libs/shared/src/apps/subjects/enums/ClassificationMemberType.ts","../../../../libs/shared/src/enums/PresentationType.ts","../../../../libs/shared/src/flight-requests/ClassificationRequests.ts","../../../../libs/shared/src/images/svg/actions/VisibleOnSvg.tsx","../../../../libs/shared/src/images/svg/objects/LinkSvg.tsx"],"sourcesContent":["export enum ClassificationMemberType {\n Playlists = 'playlists',\n Series = 'series',\n Videos = 'videos',\n PinnedVideos = 'pinnedVideos'\n}","export enum PresentationType {\n Subject = 'Subject',\n Curriculum = 'Curriculum',\n StreamableLearning = 'StreamableLearning'\n}","import { Xhr } from 'libs/common/backbone/interfaces/Xhr';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { ClassificationMemberType } from 'libs/shared/apps/subjects/enums/ClassificationMemberType';\nimport { PublicWithStatement, SharedWithStatements } from 'libs/shared/constants/WithStatements';\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { PlaylistCollection, RegionAlternative, SeriesCollection } from 'libs/shared/interfaces';\n\nconst getClassificationMemberFilter = (ids: string[]) => `subjectpresentationaudiences.id:[${ids.join(',')}]`;\n\nexport const ClassificationRequests = {\n topicsFromAllAvailablePresentations(ids: string[]): Flight.PublicRequest {\n const params = { filterType: 'topics', presentationId: ids };\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/search/filters', params),\n publicUrl: UrlHelper.urlBuilder('/api/search/filters', params),\n key: 'classification:availableTopics',\n normalize: false\n };\n },\n\n availablePresentations(type?: PresentationType): Flight.PublicRequest {\n const queryStringOpts = { type: type?.toLowerCase() };\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/users/me/presentations/available', queryStringOpts),\n publicUrl: UrlHelper.urlBuilder('/api/subjects/presentations/available', queryStringOpts),\n key: `available:presentations:${type}`,\n normalizeOptions: {\n namespace: 'presentation'\n }\n };\n },\n\n topLevelTopics(presentationId: string): Flight.PublicRequest {\n const params = {\n query: SharedWithStatements.CLASSIFICATION_COLLECTION,\n sort: 'alphabetical'\n };\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/subjects/presentations/${presentationId}/classifications`, params),\n publicUrl: UrlHelper.urlBuilder(`/api/subjects/presentations/${presentationId}/classifications`, params),\n key: `presentation:${presentationId}:classifications`\n };\n },\n\n presentationById(presentationId: string): Flight.PublicRequest {\n return {\n url: `{gateway}/v1/subjects/presentations/${presentationId}`,\n publicUrl: `/api/subjects/presentations/${presentationId}`,\n key: `presentation:${presentationId}`\n };\n },\n\n presentationBySlug(presentationSlug: string, contentRegion: string, type: PresentationType): Flight.PublicRequest {\n const params = {\n type: type.toLowerCase(),\n contentRegion: contentRegion\n };\n\n return {\n url: UrlHelper.urlBuilder(`/api/subjects/presentations/${presentationSlug}`, params),\n publicUrl: UrlHelper.urlBuilder(`/api/subjects/presentations/${presentationSlug}`, params),\n key: `current:presentation:${type.toLowerCase()}:${contentRegion}:${presentationSlug ?? ''}`,\n bootstrapName: 'presentation',\n normalizeOptions: {\n namespace: 'presentation'\n }\n };\n },\n\n presentation(type: PresentationType, presentationId?: string): Flight.PublicRequest {\n const params = {\n type: type?.toLowerCase()\n };\n\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/users/me/presentations', params),\n publicUrl: UrlHelper.urlBuilder(`/api/subjects/presentations/${presentationId}`, params),\n key: `current:presentation${type ? `:${type.toLowerCase()}` : ''}${presentationId ? `:${presentationId}` : ''}`,\n normalizeOptions: {\n namespace: 'presentation'\n }\n };\n },\n\n classifications(): Flight.PublicRequest {\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/users/me/classifications', {\n query: SharedWithStatements.CLASSIFICATION_COLLECTION,\n type: PresentationType.Subject.toLowerCase()\n }),\n publicUrl: UrlHelper.urlBuilder('/api/subjects/classifications', {\n query: PublicWithStatement.CLASSIFICATION_COLLECTION,\n type: PresentationType.Subject.toLowerCase()\n }),\n key: `classifications`\n };\n },\n\n classification(id: string, userId?: string, error?: (xhr: Xhr) => void): Flight.PublicRequest {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/subjects/classifications/${id}`, {\n query: SharedWithStatements.CLASSIFICATION(userId)\n }),\n publicUrl: UrlHelper.urlBuilder(`/api/subjects/classifications/${id}`, {\n query: PublicWithStatement.CLASSIFICATION\n }),\n key: `classification:${id}`,\n error\n };\n },\n\n path(id: string, presentationType?: PresentationType): Flight.PublicRequest {\n const params = { type: presentationType };\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/subjects/classifications/${id}/path`, params),\n publicUrl: `/api/subjects/classifications/${id}/path`,\n key: `classification:${id}:path`\n };\n },\n\n paths(id: string): Flight.Request {\n return {\n url: `/api/subjects/classifications/${id}/paths`,\n key: `classification:${id}:paths`\n };\n },\n\n children(id: string): Flight.PublicRequest {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/subjects/classifications/${id}/children`, {\n query: SharedWithStatements.CLASSIFICATION_COLLECTION\n }),\n publicUrl: UrlHelper.urlBuilder(`/api/subjects/classifications/${id}/children`, {\n query: PublicWithStatement.CLASSIFICATION_COLLECTION\n }),\n key: `classification:${id}:children`\n };\n },\n\n videos(\n id: string,\n presentationId: string,\n activeAudiences: string[]\n ): Flight.PublicRequest {\n if (!presentationId)\n return;\n\n let filter = 'limit:100,orderbydesc:timestamp';\n\n if (activeAudiences.length)\n filter += `,${getClassificationMemberFilter(activeAudiences)}`;\n\n const query = `{${filter}}(videoCollection),subjectpresentationaudiences{presentationId:${presentationId}}`;\n\n // TODO (public): Remove this permissionFilterOpts\n const queryStringObj = {\n query,\n permissionFilterOption: PermissionFilterOption.StripMetadata\n };\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/subjects/classifications/${id}/${ClassificationMemberType.PinnedVideos}`, queryStringObj),\n publicUrl: UrlHelper.urlBuilder(`/api/subjects/classifications/${id}/${ClassificationMemberType.PinnedVideos}`, queryStringObj),\n key: `classification:${id}:${ClassificationMemberType.PinnedVideos}:${activeAudiences.join(':')}`\n };\n },\n\n /**\n * This request should only be used when displaying the playlist widget within a classification/topic page.\n * The current behaviour is to filter out any playlist that don't yet have a poster, this will ensure that\n * all topic pages are only showed in a complete state.\n */\n playlists(id: string, presentationId: string, activeAudiences: string[]): Flight.PublicRequest {\n if (!presentationId)\n return;\n\n let filter = 'limit:100,orderby:name';\n\n if (activeAudiences.length)\n filter += `,${getClassificationMemberFilter(activeAudiences)}`;\n\n const query = `{${filter}}${SharedWithStatements.PLAYLIST_COLLECTION}` +\n `,subjectpresentationaudiences{presentationId:${presentationId}}`;\n\n // TODO (public): Remove this permissionFilterOpts\n const queryStringObj = {\n query,\n permissionFilterOption: PermissionFilterOption.StripMetadata\n };\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/subjects/classifications/${id}/${ClassificationMemberType.Playlists}`, queryStringObj),\n publicUrl: UrlHelper.urlBuilder(`/api/subjects/classifications/${id}/${ClassificationMemberType.Playlists}`, queryStringObj),\n key: `classification:${id}:${ClassificationMemberType.Playlists}:${activeAudiences.join(':')}`,\n formatData: (playlist: PlaylistCollection): PlaylistCollection => {\n if (!playlist)\n return;\n\n return {\n ...playlist,\n data: playlist.data?.filter(p => p.cover?.url)\n };\n }\n };\n },\n\n /**\n * This request should only be used when displaying the series widget within a classification/topic page.\n * The current behaviour is to filter out any series that don't yet have a poster, this will ensure that\n * all topic pages are only showed in a complete state.\n */\n series(id: string, presentationId: string, activeAudiences: string[]): Flight.PublicRequest {\n if (!presentationId)\n return;\n\n let filter = 'limit:100';\n\n if (activeAudiences.length)\n filter += `,${getClassificationMemberFilter(activeAudiences)}`;\n\n const query = `{${filter}}${SharedWithStatements.SERIES}` +\n `,subjectpresentationaudiences{presentationId:${presentationId}}`;\n\n // TODO (public): Remove this permissionFilterOpts\n const queryStringObj = {\n query,\n permissionFilterOption: PermissionFilterOption.StripMetadata\n };\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/subjects/classifications/${id}/${ClassificationMemberType.Series}`, queryStringObj),\n publicUrl: UrlHelper.urlBuilder(`/api/subjects/classifications/${id}/${ClassificationMemberType.Series}`, queryStringObj),\n key: `classification:${id}:${ClassificationMemberType.Series}:${activeAudiences.join(':')}`,\n formatData: (series: SeriesCollection): SeriesCollection => {\n if (!series)\n return;\n\n return {\n ...series,\n data: series.data?.filter(s => s.tallPoster?.url)\n };\n }\n };\n },\n\n curriculumLinks(id: string, curriculumId: string): Flight.PublicRequest {\n return {\n url: UrlHelper.urlBuilder(`/api/subjects/presentations/${curriculumId}/objects/${id}/classifications/paths`, {\n type: PresentationType.Curriculum.toLowerCase()\n }),\n publicUrl: UrlHelper.urlBuilder(`/api/subjects/presentations/${curriculumId}/objects/${id}/classifications/paths`, {\n type: PresentationType.Curriculum.toLowerCase()\n }),\n key: `curriculum:links:${id}:${curriculumId}`,\n normalize: false\n };\n },\n\n subjectLinks(id: string, presentationId: string): Flight.PublicRequest {\n const url = UrlHelper.urlBuilder(`/api/subjects/presentations/${presentationId}/objects/${id}/classifications/paths`, {\n type: PresentationType.Subject.toLowerCase()\n });\n\n return {\n url,\n publicUrl: url,\n key: `subject:links:${id}:${presentationId}`,\n normalize: false\n };\n },\n\n getMappedCurriculums(\n id: string,\n pids: string[]\n ): Flight.PublicRequest {\n const params: HashObject = {\n type: PresentationType.Curriculum.toLowerCase()\n };\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${id}/presentations`, params),\n publicUrl: UrlHelper.urlBuilder(`/api/subjects/${id}/presentations`, { ...params, pid: pids }),\n key: `mapped:curriculums:${id}:${pids.join(',')}`,\n normalize: false\n };\n },\n\n regionAlternatives(\n classificationId: string,\n success?: (data: RegionAlternative[]) => void,\n error?: (xhr: Xhr) => void,\n always?: () => void\n ): Flight.PublicRequest {\n return {\n url: `/api/subjects/classifications/${classificationId}/region-alternatives`,\n publicUrl: `/api/subjects/classifications/${classificationId}/region-alternatives`,\n key: `classification:regionAlternatives:${classificationId}`,\n normalize: false,\n success,\n error,\n always\n };\n }\n};\n","import React from 'react';\n\nexport function VisibleOnSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <defs>\n <path\n id='a'\n d='M3 12c0-2.44 4.5-6.025 9.003-6C16.494 6.025 21 9.614 21 12c0 2.45-4.504 6-9 6-4.466 0-9-3.586-9-6m1 0c0 1.804 4.042 5 8 5 3.989 0 8-3.161 8-5 0-1.778-4.017-4.977-8.003-5C8.006 6.978 4 10.17 4 12m8 4a4 4 0 1 1 0-8 4 4 0 0 1 0 8m0-1a3 3 0 1 0 0-6 3 3 0 0 0 0 6'\n fill='currentColor'\n />\n </defs>\n <use xlinkHref='#a' fill='#333' />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function LinkSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M17.834 5.916a2.5 2.5 0 0 0-3.536 0L12.53 7.684a.5.5 0 0 1-.707-.707l1.768-1.768a3.5 3.5 0 1 1 4.95 4.95l-3.687 3.687a3.786 3.786 0 0 1-5.354 0l-.152-.152a.5.5 0 0 1 .707-.707l.152.152a2.786 2.786 0 0 0 3.94 0l3.687-3.687a2.5 2.5 0 0 0 0-3.536m-8.94 3.99a3.643 3.643 0 0 1 5.152 0l.606.607a.5.5 0 1 1-.707.707l-.607-.606a2.643 2.643 0 0 0-3.737 0l-3.435 3.434a2.5 2.5 0 1 0 3.536 3.536l1.414-1.415a.5.5 0 0 1 .707.707l-1.414 1.415a3.5 3.5 0 1 1-4.95-4.95z'\n />\n </svg>\n );\n}\n"],"names":["ClassificationMemberType","PresentationType","getClassificationMemberFilter","ids","ClassificationRequests","params","UrlHelper","type","queryStringOpts","presentationId","SharedWithStatements","presentationSlug","contentRegion","PublicWithStatement","id","userId","error","presentationType","activeAudiences","filter","queryStringObj","PermissionFilterOption","playlist","_a","p","series","s","curriculumId","url","pids","classificationId","success","always","VisibleOnSvg","props","jsxs","jsx","LinkSvg"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{s as n,v as u}from"./app-5iiM5qQY.js";import{g as l}from"./sFV5nxD4.chunk.js";const y={topVideos(e,r,o,i,s){return{url:n.urlBuilder("{gateway}/v1/analytics/videos/top",{"query.video":"thumbnail,series","query.interactive":"_parentVideo[_rating],_parentClip,_thumbnail","query.clip":"_parentVideo[_rating],_thumbnail",limit:r,...e}),key:l(`top:videos:${r??0}`,e),normalize:!1,formatData:t=>{const a=u.sortBy(t.data,"count");return a.reverse(),{...t,data:a}},success:o,error:i,always:s}}};export{y as V};
|
|
2
|
+
//# sourceMappingURL=EBNeK_uD.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EBNeK_uD.chunk.js","sources":["../../src/shared/flight-requests/VideoViewRequests.ts"],"sourcesContent":["import { Xhr } from 'libs/common/backbone/interfaces/Xhr';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsRequestFilter } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\nimport { TopVideosResponse } from 'shared/interfaces';\n\nexport const VideoViewRequests = {\n topVideos(\n filter: AnalyticsRequestFilter,\n limit?: number,\n success?: (data: TopVideosResponse) => void,\n error?: (xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/analytics/videos/top', {\n 'query.video': 'thumbnail,series',\n 'query.interactive': '_parentVideo[_rating],_parentClip,_thumbnail',\n 'query.clip': '_parentVideo[_rating],_thumbnail',\n limit,\n ...filter\n }),\n key: getAnalyticsRequestKey(`top:videos:${limit ?? 0}`, filter),\n normalize: false,\n formatData: (data: TopVideosResponse) => {\n const sorted = ArrayHelper.sortBy(data.data, 'count');\n \n sorted.reverse();\n \n return {\n ...data,\n data: sorted\n };\n },\n success,\n error,\n always\n };\n }\n};"],"names":["VideoViewRequests","filter","limit","success","error","always","UrlHelper","getAnalyticsRequestKey","data","sorted","ArrayHelper"],"mappings":"qFAUO,MAAMA,EAAoB,CAC/B,UACEC,EACAC,EACAC,EACAC,EACAC,EACgB,CAChB,MAAO,CACL,IAAKC,EAAU,WAAW,oCAAqC,CAC7D,cAAe,mBACf,oBAAqB,+CACrB,aAAc,mCACd,MAAAJ,EACA,GAAGD,CAAA,CACJ,EACD,IAAKM,EAAuB,cAAcL,GAAS,CAAC,GAAID,CAAM,EAC9D,UAAW,GACX,WAAaO,GAA4B,CACvC,MAAMC,EAASC,EAAY,OAAOF,EAAK,KAAM,OAAO,EAEpD,OAAAC,EAAO,QAAA,EAEA,CACL,GAAGD,EACH,KAAMC,CAAA,CAEV,EACA,QAAAN,EACA,MAAAC,EACA,OAAAC,CAAA,CAEJ,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as a,d as u,c as i,V as o}from"./app-5iiM5qQY.js";import{g as f}from"./CX5q-0jT.chunk.js";function E(e){const[s,t]=a.useState(!1),n=f(u());return a.useEffect(()=>{t(r=>!r)},[e.isFetching]),a.useEffect(()=>{t(r=>!r)},[n]),s}function d(e){var t;const[,s]=i(o.AUDIENCE_FILTER_SELECTED_COUNT);a.useEffect(()=>{if(!e.data){s(null);return}s(e.data.studentCount)},[(t=e.data)==null?void 0:t.studentCount])}export{E as a,d as u};
|
|
2
|
+
//# sourceMappingURL=HBvGjr-A.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HBvGjr-A.chunk.js","sources":["../../src/apps/interactives/hooks/UseRefreshInteractiveResults.ts","../../src/apps/interactives/hooks/UseSetInteractiveResultsAudienceFilterCount.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { getFilterParamsKey } from 'libs/shared/apps/analytics/utils/FilterParamUtils';\nimport { InteractiveResultSet } from 'libs/shared/interfaces';\n\nimport { useGetAppLinkFilterParams } from 'shared/hooks/UseGetFilterQueryParams';\n\nexport function useRefreshInteractiveResults(results: Flight.Response<InteractiveResultSet>): boolean {\n const [ refresh, setRefresh ] = useState(false);\n\n const filterKey = getFilterParamsKey(useGetAppLinkFilterParams());\n\n useEffect(() => {\n setRefresh(r => !r);\n }, [results.isFetching]);\n\n useEffect(() => {\n setRefresh(r => !r);\n }, [filterKey]);\n \n return refresh;\n}","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { InteractiveResultSet } from 'libs/shared/interfaces';\n\nimport { ViewModelKeys } from 'shared/constants/ReportsViewModels';\n\n/**\n * So that we can display the number of selected users in the audience filter\n * (including users in classrooms and groups), we read it from the InteractiveResultSet and\n * set it in a view model so that it can be read in AudienceFilterToggle.\n */\nexport function useSetInteractiveResultsAudienceFilterCount(results: Flight.Response<InteractiveResultSet>): void {\n const [ , setFilterCount ] = useViewModel<number>(ViewModelKeys.AUDIENCE_FILTER_SELECTED_COUNT);\n\n useEffect(() => {\n if (!results.data) {\n setFilterCount(null);\n return;\n }\n \n setFilterCount(results.data.studentCount);\n }, [results.data?.studentCount]);\n}"],"names":["useRefreshInteractiveResults","results","refresh","setRefresh","useState","filterKey","getFilterParamsKey","useGetAppLinkFilterParams","useEffect","useSetInteractiveResultsAudienceFilterCount","setFilterCount","useViewModel","ViewModelKeys","_a"],"mappings":"mGASO,SAASA,EAA6BC,EAAyD,CACpG,KAAM,CAAEC,EAASC,CAAW,EAAIC,EAAAA,SAAS,EAAK,EAExCC,EAAYC,EAAmBC,GAA2B,EAEhEC,OAAAA,EAAAA,UAAU,IAAM,CACdL,EAAW,GAAK,CAAC,CAAC,CACpB,EAAG,CAACF,EAAQ,UAAU,CAAC,EAEvBO,EAAAA,UAAU,IAAM,CACdL,EAAW,GAAK,CAAC,CAAC,CACpB,EAAG,CAACE,CAAS,CAAC,EAEPH,CACT,CCTO,SAASO,EAA4CR,EAAsD,OAChH,KAAM,CAAA,CAAIS,CAAe,EAAIC,EAAqBC,EAAc,8BAA8B,EAE9FJ,EAAAA,UAAU,IAAM,CACd,GAAI,CAACP,EAAQ,KAAM,CACjBS,EAAe,IAAI,EACnB,MACF,CAEAA,EAAeT,EAAQ,KAAK,YAAY,CAC1C,EAAG,EAACY,EAAAZ,EAAQ,OAAR,YAAAY,EAAc,YAAY,CAAC,CACjC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as i,j as r,O as n,N as s}from"./app-5iiM5qQY.js";const o="_container_nowrk_1",c="_subContainer_nowrk_7",a={container:o,subContainer:c};function d(e){var t;return i({title:(t=e.error)==null?void 0:t.heading}),e.error?r.jsx("div",{style:{height:"85vh"},children:r.jsx("div",{style:{backgroundImage:`url(${e.imageUrl})`},className:a.container,children:r.jsxs(n,{className:a.subContainer,children:[r.jsx(n.Heading,{children:e.error.heading}),r.jsx(n.Info,{className:"w-33 mb-4",children:e.error.description}),e.error.cta!==!1&&r.jsx(n.Cta,{text:e.error.cta.text,className:`btn btn-dark ${e.error.description?"mt-n2":""}`,href:e.error.cta.url,icon:s,openInNewTab:!0})]})})}):r.jsx(r.Fragment,{})}export{d as NoClassroomsErrorView};
|
|
2
|
+
//# sourceMappingURL=IC6KSiqE.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IC6KSiqE.chunk.js","sources":["../../src/apps/default/views/no-classrooms-error/NoClassroomsErrorView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { NewWindowSvg } from 'libs/shared/images/svg/actions/NewWindowSvg';\n\nimport styles from './no-classrooms-error.module.scss';\n\ninterface NoClassroomsErrorViewProps {\n error: ErrorPageError;\n imageUrl?: string;\n}\n\nexport function NoClassroomsErrorView(props: NoClassroomsErrorViewProps): React.ReactElement {\n useSetPageMetadata({ title: props.error?.heading });\n\n if (!props.error)\n return <></>;\n\n return (\n <div style={{ height: '85vh' }}>\n <div style={{ backgroundImage: `url(${props.imageUrl})` }} className={styles.container}>\n <EmptyState className={styles.subContainer}>\n <EmptyState.Heading>{props.error.heading}</EmptyState.Heading>\n\n <EmptyState.Info className='w-33 mb-4'>{props.error.description}</EmptyState.Info>\n\n {props.error.cta !== false &&\n <EmptyState.Cta\n text={props.error.cta.text}\n className={`btn btn-dark ${props.error.description ? 'mt-n2' : ''}`}\n href={props.error.cta.url}\n icon={NewWindowSvg}\n openInNewTab\n />\n }\n </EmptyState>\n </div>\n </div>\n );\n}"],"names":["NoClassroomsErrorView","props","useSetPageMetadata","_a","jsx","styles","jsxs","EmptyState","NewWindowSvg","Fragment"],"mappings":"iJAcO,SAASA,EAAsBC,EAAuD,OAG3F,OAFAC,EAAmB,CAAE,OAAOC,EAAAF,EAAM,QAAN,YAAAE,EAAa,QAAS,EAE7CF,EAAM,MAITG,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,OAAQ,QACpB,SAAAA,EAAAA,IAAC,MAAA,CAAI,MAAO,CAAE,gBAAiB,OAAOH,EAAM,QAAQ,GAAA,EAAO,UAAWI,EAAO,UAC3E,SAAAC,EAAAA,KAACC,EAAA,CAAW,UAAWF,EAAO,aAC5B,SAAA,CAAAD,EAAAA,IAACG,EAAW,QAAX,CAAoB,SAAAN,EAAM,MAAM,QAAQ,EAEzCG,MAACG,EAAW,KAAX,CAAgB,UAAU,YAAa,SAAAN,EAAM,MAAM,YAAY,EAE/DA,EAAM,MAAM,MAAQ,IACnBG,EAAAA,IAACG,EAAW,IAAX,CACC,KAAMN,EAAM,MAAM,IAAI,KACtB,UAAW,gBAAgBA,EAAM,MAAM,YAAc,QAAU,EAAE,GACjE,KAAMA,EAAM,MAAM,IAAI,IACtB,KAAMO,EACN,aAAY,EAAA,CAAA,CACd,CAAA,CAEJ,EACF,EACF,EArBOJ,EAAAA,IAAAK,EAAAA,SAAA,EAAE,CAuBb"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{cq as E,r as p}from"./app-5iiM5qQY.js";var P=(function(){var o=function(r,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var a in n)n.hasOwnProperty(a)&&(t[a]=n[a])},o(r,e)};return function(r,e){o(r,e);function t(){this.constructor=r}r.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}})(),c="html",d="svg",g="http://www.w3.org/2000/svg",_=function(o,r){if(r===c)return o instanceof HTMLElement;if(r===d)return o instanceof SVGElement;throw new Error('Unrecognized element type "'+r+'" for validateElementType.')},v=function(o,r){var e={},t,n,a;if(o===c)a=document.createElement("div");else if(o===d)a=document.createElementNS(g,"g");else throw new Error('Invalid element type "'+o+'" for createPortalNode: must be "html" or "svg".');if(r&&typeof r=="object")for(var s=0,h=Object.entries(r.attributes);s<h.length;s++){var f=h[s],m=f[0],N=f[1];a.setAttribute(m,N)}var u={element:a,elementType:o,setPortalProps:function(i){e=i},getInitialPortalProps:function(){return e},mount:function(i,l){if(l!==n){if(u.unmount(),i!==t&&!_(i,o))throw new Error('Invalid element type for portal: "'+o+'" portalNodes must be used with '+o+" elements, but OutPortal is within <"+i.tagName+">.");i.replaceChild(u.element,l),t=i,n=l}},unmount:function(i){i&&i!==n||t&&n&&(t.replaceChild(n,u.element),t=void 0,n=void 0)}};return u},O=(function(o){P(r,o);function r(e){var t=o.call(this,e)||this;return t.addPropsChannel=function(){Object.assign(t.props.node,{setPortalProps:function(n){t.setState({nodeProps:n})}})},t.state={nodeProps:t.props.node.getInitialPortalProps()},t}return r.prototype.componentDidMount=function(){this.addPropsChannel()},r.prototype.componentDidUpdate=function(){this.addPropsChannel()},r.prototype.render=function(){var e=this,t=this.props,n=t.children,a=t.node;return E.createPortal(p.Children.map(n,function(s){return p.isValidElement(s)?p.cloneElement(s,e.state.nodeProps):s}),a.element)},r})(p.PureComponent),C=(function(o){P(r,o);function r(e){var t=o.call(this,e)||this;return t.placeholderNode=p.createRef(),t.passPropsThroughPortal(),t}return r.prototype.passPropsThroughPortal=function(){var e=Object.assign({},this.props,{node:void 0});this.props.node.setPortalProps(e)},r.prototype.componentDidMount=function(){var e=this.props.node;this.currentPortalNode=e;var t=this.placeholderNode.current,n=t.parentNode;e.mount(n,t),this.passPropsThroughPortal()},r.prototype.componentDidUpdate=function(){var e=this.props.node;this.currentPortalNode&&e!==this.currentPortalNode&&(this.currentPortalNode.unmount(this.placeholderNode.current),this.currentPortalNode.setPortalProps({}),this.currentPortalNode=e);var t=this.placeholderNode.current,n=t.parentNode;e.mount(n,t),this.passPropsThroughPortal()},r.prototype.componentWillUnmount=function(){var e=this.props.node;e.unmount(this.placeholderNode.current),e.setPortalProps({})},r.prototype.render=function(){return p.createElement("div",{ref:this.placeholderNode})},r})(p.PureComponent),w=v.bind(null,c);v.bind(null,d);export{O as I,C as O,w as c};
|
|
2
|
+
//# sourceMappingURL=LT6WE6TB.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LT6WE6TB.chunk.js","sources":["../../../../../node_modules/react-reverse-portal/dist/web/index.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\n// Internally, the portalNode must be for either HTML or SVG elements\nvar ELEMENT_TYPE_HTML = 'html';\nvar ELEMENT_TYPE_SVG = 'svg';\n// ReactDOM can handle several different namespaces, but they're not exported publicly\n// https://github.com/facebook/react/blob/b87aabdfe1b7461e7331abb3601d9e6bb27544bc/packages/react-dom/src/shared/DOMNamespaces.js#L8-L10\nvar SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\nvar validateElementType = function (domElement, elementType) {\n if (elementType === ELEMENT_TYPE_HTML) {\n return domElement instanceof HTMLElement;\n }\n if (elementType === ELEMENT_TYPE_SVG) {\n return domElement instanceof SVGElement;\n }\n throw new Error(\"Unrecognized element type \\\"\" + elementType + \"\\\" for validateElementType.\");\n};\n// This is the internal implementation: the public entry points set elementType to an appropriate value\nvar createPortalNode = function (elementType, options) {\n var initialProps = {};\n var parent;\n var lastPlaceholder;\n var element;\n if (elementType === ELEMENT_TYPE_HTML) {\n element = document.createElement('div');\n }\n else if (elementType === ELEMENT_TYPE_SVG) {\n element = document.createElementNS(SVG_NAMESPACE, 'g');\n }\n else {\n throw new Error(\"Invalid element type \\\"\" + elementType + \"\\\" for createPortalNode: must be \\\"html\\\" or \\\"svg\\\".\");\n }\n if (options && typeof options === \"object\") {\n for (var _i = 0, _a = Object.entries(options.attributes); _i < _a.length; _i++) {\n var _b = _a[_i], key = _b[0], value = _b[1];\n element.setAttribute(key, value);\n }\n }\n var portalNode = {\n element: element,\n elementType: elementType,\n setPortalProps: function (props) {\n initialProps = props;\n },\n getInitialPortalProps: function () {\n return initialProps;\n },\n mount: function (newParent, newPlaceholder) {\n if (newPlaceholder === lastPlaceholder) {\n // Already mounted - noop.\n return;\n }\n portalNode.unmount();\n // To support SVG and other non-html elements, the portalNode's elementType needs to match\n // the elementType it's being rendered into\n if (newParent !== parent) {\n if (!validateElementType(newParent, elementType)) {\n throw new Error(\"Invalid element type for portal: \\\"\" + elementType + \"\\\" portalNodes must be used with \" + elementType + \" elements, but OutPortal is within <\" + newParent.tagName + \">.\");\n }\n }\n newParent.replaceChild(portalNode.element, newPlaceholder);\n parent = newParent;\n lastPlaceholder = newPlaceholder;\n },\n unmount: function (expectedPlaceholder) {\n if (expectedPlaceholder && expectedPlaceholder !== lastPlaceholder) {\n // Skip unmounts for placeholders that aren't currently mounted\n // They will have been automatically unmounted already by a subsequent mount()\n return;\n }\n if (parent && lastPlaceholder) {\n parent.replaceChild(lastPlaceholder, portalNode.element);\n parent = undefined;\n lastPlaceholder = undefined;\n }\n }\n };\n return portalNode;\n};\nvar InPortal = /** @class */ (function (_super) {\n __extends(InPortal, _super);\n function InPortal(props) {\n var _this = _super.call(this, props) || this;\n _this.addPropsChannel = function () {\n Object.assign(_this.props.node, {\n setPortalProps: function (props) {\n // Rerender the child node here if/when the out portal props change\n _this.setState({ nodeProps: props });\n }\n });\n };\n _this.state = {\n nodeProps: _this.props.node.getInitialPortalProps(),\n };\n return _this;\n }\n InPortal.prototype.componentDidMount = function () {\n this.addPropsChannel();\n };\n InPortal.prototype.componentDidUpdate = function () {\n this.addPropsChannel();\n };\n InPortal.prototype.render = function () {\n var _this = this;\n var _a = this.props, children = _a.children, node = _a.node;\n return ReactDOM.createPortal(React.Children.map(children, function (child) {\n if (!React.isValidElement(child))\n return child;\n return React.cloneElement(child, _this.state.nodeProps);\n }), node.element);\n };\n return InPortal;\n}(React.PureComponent));\nvar OutPortal = /** @class */ (function (_super) {\n __extends(OutPortal, _super);\n function OutPortal(props) {\n var _this = _super.call(this, props) || this;\n _this.placeholderNode = React.createRef();\n _this.passPropsThroughPortal();\n return _this;\n }\n OutPortal.prototype.passPropsThroughPortal = function () {\n var propsForTarget = Object.assign({}, this.props, { node: undefined });\n this.props.node.setPortalProps(propsForTarget);\n };\n OutPortal.prototype.componentDidMount = function () {\n var node = this.props.node;\n this.currentPortalNode = node;\n var placeholder = this.placeholderNode.current;\n var parent = placeholder.parentNode;\n node.mount(parent, placeholder);\n this.passPropsThroughPortal();\n };\n OutPortal.prototype.componentDidUpdate = function () {\n // We re-mount on update, just in case we were unmounted (e.g. by\n // a second OutPortal, which has now been removed)\n var node = this.props.node;\n // If we're switching portal nodes, we need to clean up the current one first.\n if (this.currentPortalNode && node !== this.currentPortalNode) {\n this.currentPortalNode.unmount(this.placeholderNode.current);\n this.currentPortalNode.setPortalProps({});\n this.currentPortalNode = node;\n }\n var placeholder = this.placeholderNode.current;\n var parent = placeholder.parentNode;\n node.mount(parent, placeholder);\n this.passPropsThroughPortal();\n };\n OutPortal.prototype.componentWillUnmount = function () {\n var node = this.props.node;\n node.unmount(this.placeholderNode.current);\n node.setPortalProps({});\n };\n OutPortal.prototype.render = function () {\n // Render a placeholder to the DOM, so we can get a reference into\n // our location in the DOM, and swap it out for the portaled node.\n // A <div> placeholder works fine even for SVG.\n return React.createElement(\"div\", { ref: this.placeholderNode });\n };\n return OutPortal;\n}(React.PureComponent));\nvar createHtmlPortalNode = createPortalNode.bind(null, ELEMENT_TYPE_HTML);\nvar createSvgPortalNode = createPortalNode.bind(null, ELEMENT_TYPE_SVG);\nexport { createHtmlPortalNode, createSvgPortalNode, InPortal, OutPortal, };\n//# sourceMappingURL=index.js.map"],"names":["__extends","extendStatics","d","b","p","__","ELEMENT_TYPE_HTML","ELEMENT_TYPE_SVG","SVG_NAMESPACE","validateElementType","domElement","elementType","createPortalNode","options","initialProps","parent","lastPlaceholder","element","_i","_a","_b","key","value","portalNode","props","newParent","newPlaceholder","expectedPlaceholder","InPortal","_super","_this","children","node","ReactDOM.createPortal","React.Children","child","React.isValidElement","React.cloneElement","React.PureComponent","OutPortal","React.createRef","propsForTarget","placeholder","React.createElement","createHtmlPortalNode"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{u as c,a as n,L as p,b as l,P as d,j as e}from"./app-5iiM5qQY.js";import{C as u,a as h}from"./DNDksLLJ.chunk.js";import{u as C}from"./D2pFW6EB.chunk.js";import{u as v,a as j}from"./DFlfmBPU.chunk.js";import{u as x}from"./BxBPX67V.chunk.js";import{E as f}from"./DxOc33K6.chunk.js";import{V as w}from"./DAajosqn.chunk.js";import{V}from"./8CNwntVY.chunk.js";import"./SA1hxE7y.chunk.js";import"./BqY3bZyH.chunk.js";import"./Cs1UnwSi.chunk.js";import"./DMd0fZar.chunk.js";import"./CSmXZuTZ.chunk.js";import"./BvArNs1K.chunk.js";import"./C8oA7_zY.chunk.js";import"./Ddy6mQmA.chunk.js";import"./BLuY6AYO.chunk.js";import"./P3PkkK_o.chunk.js";import"./5O9SdVRZ.chunk.js";import"./C0Ak1kpS.chunk.js";import"./sFV5nxD4.chunk.js";import"./DNP9cLqQ.chunk.js";import"./C6UUJ8P5.chunk.js";import"./B9I2jvNY.chunk.js";import"./DvV9e2O3.chunk.js";import"./k_p1R4KR.chunk.js";import"./uBcZoYae.chunk.js";import"./Bgidb-to.chunk.js";import"./BlUKEHqx.chunk.js";const b="_column1_1i69v_1",N="_column2_1i69v_4",_="_barChart_1i69v_7",t={column1:b,column2:N,barChart:_},S="reportsClips.clipOverview",g=p.encloseNamespace(S);function re(i){var a,o;const r=c(u.clip(i.id));n({title:g("pageTitle",{clip:(a=r.data)==null?void 0:a.name})}),x((o=r.data)==null?void 0:o.name),v(j(r.data)),C(r);const{hasPermissions:m}=l(),s=!m(d.ViewCustomerAnalytics);return e.jsxs("div",{children:[e.jsx(h,{id:i.id}),e.jsxs("div",{className:"d-flex",children:[e.jsx("div",{className:`pe-2 ${t.column1}`,children:e.jsx(V,{objectId:i.id,useSharerId:s,className:"h-100"})}),e.jsxs("div",{className:`ps-2 ${t.column2}`,children:[e.jsx(w,{objectId:i.id,className:t.barChart,useSharerId:s}),e.jsx("div",{className:"mt-3",children:e.jsx(f,{objectId:i.id,useSharerId:s,layout:"horizontal"})})]})]})]})}export{re as ClipOverviewView};
|
|
2
|
+
//# sourceMappingURL=P0RdEZGz.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"P0RdEZGz.chunk.js","sources":["../../src/apps/clips/views/clip-overview/ClipOverviewView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Clip } from 'libs/shared/interfaces';\n\nimport { ClipRequests } from 'shared/flight-requests/ClipRequests';\nimport { useHandleVideoError } from 'shared/hooks/UseHandleVideoError';\nimport { useSetHeaderActions } from 'shared/hooks/UseSetHeaderActions';\nimport { useSetHeaderTitle } from 'shared/hooks/UseSetHeaderTitle';\nimport { useGetObjectHeaderActions } from 'shared/utils/HeaderActionUtils';\nimport { EngagementOverviewCardView } from 'shared/views/overview-cards/engagement-overview-card/EngagementOverviewCardView';\nimport { ViewCountBarChartCardView } from 'shared/views/overview-cards/view-count-bar-chart-card/ViewCountBarChartCardView';\nimport { ViewCountPieChartCardView } from 'shared/views/overview-cards/view-count-pie-chart-card/ViewCountPieChartCardView';\n\nimport { ClipNav } from 'apps/clips/components/clip-nav/ClipNav';\n\nimport styles from './clip-overview.module.scss';\n\nconst namespace = 'reportsClips.clipOverview';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ClipOverviewViewProps {\n id: string;\n}\n\nexport function ClipOverviewView(props: ClipOverviewViewProps): JSX.Element {\n const clip = Flight.useBasicFetch<Clip>(ClipRequests.clip(props.id));\n \n useSetPageMetadata({ title: getPhrase('pageTitle', { clip: clip.data?.name }) });\n useSetHeaderTitle(clip.data?.name);\n useSetHeaderActions(useGetObjectHeaderActions(clip.data));\n\n useHandleVideoError(clip);\n\n const { hasPermissions } = usePermissions();\n\n const scopeBySharerId = !hasPermissions(PermissionName.ViewCustomerAnalytics);\n\n return (\n <div>\n <ClipNav id={props.id} />\n <div className='d-flex'>\n <div className={`pe-2 ${styles.column1}`}>\n <ViewCountPieChartCardView\n objectId={props.id}\n useSharerId={scopeBySharerId}\n className='h-100'\n />\n </div>\n <div className={`ps-2 ${styles.column2}`}>\n <ViewCountBarChartCardView\n objectId={props.id}\n className={styles.barChart}\n useSharerId={scopeBySharerId}\n />\n <div className='mt-3'>\n <EngagementOverviewCardView\n objectId={props.id}\n useSharerId={scopeBySharerId}\n layout='horizontal'\n />\n </div>\n </div>\n </div>\n </div>\n );\n}"],"names":["namespace","getPhrase","LanguageService","ClipOverviewView","props","clip","Flight.useBasicFetch","ClipRequests","useSetPageMetadata","_a","useSetHeaderTitle","_b","useSetHeaderActions","useGetObjectHeaderActions","useHandleVideoError","hasPermissions","usePermissions","scopeBySharerId","PermissionName","jsx","ClipNav","jsxs","styles","ViewCountPieChartCardView","ViewCountBarChartCardView","EngagementOverviewCardView"],"mappings":"+hCAuBMA,EAAY,4BACZC,EAAYC,EAAgB,iBAAiBF,CAAS,EAMrD,SAASG,GAAiBC,EAA2C,SAC1E,MAAMC,EAAOC,EAA2BC,EAAa,KAAKH,EAAM,EAAE,CAAC,EAEnEI,EAAmB,CAAE,MAAOP,EAAU,YAAa,CAAE,MAAMQ,EAAAJ,EAAK,OAAL,YAAAI,EAAW,IAAA,CAAM,EAAG,EAC/EC,GAAkBC,EAAAN,EAAK,OAAL,YAAAM,EAAW,IAAI,EACjCC,EAAoBC,EAA0BR,EAAK,IAAI,CAAC,EAExDS,EAAoBT,CAAI,EAExB,KAAM,CAAE,eAAAU,CAAA,EAAmBC,EAAA,EAErBC,EAAkB,CAACF,EAAeG,EAAe,qBAAqB,EAE5E,cACG,MAAA,CACC,SAAA,CAAAC,EAAAA,IAACC,EAAA,CAAQ,GAAIhB,EAAM,EAAA,CAAI,EACvBiB,EAAAA,KAAC,MAAA,CAAI,UAAU,SACb,SAAA,CAAAF,MAAC,MAAA,CAAI,UAAW,QAAQG,EAAO,OAAO,GACpC,SAAAH,EAAAA,IAACI,EAAA,CACC,SAAUnB,EAAM,GAChB,YAAaa,EACb,UAAU,OAAA,CAAA,EAEd,SACC,MAAA,CAAI,UAAW,QAAQK,EAAO,OAAO,GACpC,SAAA,CAAAH,EAAAA,IAACK,EAAA,CACC,SAAUpB,EAAM,GAChB,UAAWkB,EAAO,SAClB,YAAaL,CAAA,CAAA,EAEfE,EAAAA,IAAC,MAAA,CAAI,UAAU,OACb,SAAAA,EAAAA,IAACM,EAAA,CACC,SAAUrB,EAAM,GAChB,YAAaa,EACb,OAAO,YAAA,CAAA,CACT,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,EACF,CAEJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as c,p as _}from"./app-5iiM5qQY.js";import{S as u}from"./5O9SdVRZ.chunk.js";const d="_circleContainer_1g8w5_1",f="_backgroundCircle_1g8w5_17",m="_circleSuccess_1g8w5_20",x="_circleWarning_1g8w5_23",b="_circleDanger_1g8w5_26",h="_lgCircleContainer_1g8w5_29",T="_xsCircleContainer_1g8w5_40",y="_pendingCircle_1g8w5_48",S="_centredPercentageText_1g8w5_58",t={circleContainer:d,backgroundCircle:f,circleSuccess:m,circleWarning:x,circleDanger:b,lgCircleContainer:h,xsCircleContainer:T,pendingCircle:y,centredPercentageText:S},o=2,D=5.8,j=.2,w=.36;var s=(e=>(e.Small="small",e.Large="large",e.ExtraSmall="extraSmall",e))(s||{});const E={extraSmall:{size:o},small:{size:o},large:{size:D}};function g(e){const n=E[e].size,r=e==="large"?w:j;return`${n/2-r*2}rem`}function N(e,n=u){return e>=n.HIGH?t.circleSuccess:e>=n.MODERATE?t.circleWarning:t.circleDanger}function R(e,n=u){return e>=n.HIGH?"text-success":e>=n.MODERATE?"text-warning":"text-danger"}function I(e,n){let r=`d-inline-block ${t.circleContainer}`;return e==="large"&&(r+=` ${t.lgCircleContainer}`),e==="extraSmall"&&(r+=` ${t.xsCircleContainer}`),i(n)&&(r+=` ${t.pendingCircle}`),r}function L(e){if(!i(e))return+e.toFixed(2)}function k(e){return i(e)?"--%":`${Math.round(e*100)}%`}function i(e){return typeof e!="number"}function W(e){const n=_.useCallback(r=>{if(!r)return;const l=r.r.baseVal.value,a=2*Math.PI*l,C=a-e.percentage*a;r.style.strokeDasharray=`${a} ${a}`,r.style.strokeDashoffset=C.toString()},[e.percentage]);return c.jsxs("svg",{children:[c.jsx("circle",{r:g(e.size),className:t.backgroundCircle}),!i(e.percentage)&&c.jsx("circle",{ref:n,r:g(e.size),className:N(e.percentage,e.scoreThresholds)})]})}var $=(e=>(e.CircleOnly="circle_only",e.LabelOnly="label_only",e.LabelBefore="label_before",e.LabelInside="label_inside",e))($||{});H.defaultProps={layout:"circle_only"};function H(e){const n=L(e.percentage),r=e.size||(e.layout==="label_inside"?s.Large:s.Small),l=e.customLabel||k(n);return e.layout==="label_only"?c.jsx("span",{className:R(n),children:l}):c.jsxs("div",{className:`d-flex align-items-center justify-content-between ${e.className??""}`,children:[e.layout==="label_before"&&c.jsx("span",{className:"me-2",children:l}),c.jsxs("div",{className:I(r,n),children:[c.jsx(W,{percentage:n,size:r,scoreThresholds:e.scoreThresholds}),e.layout==="label_inside"&&c.jsx("span",{className:t.centredPercentageText,children:l})]})]})}export{H as P,$ as a,L as b,k as g};
|
|
2
|
+
//# sourceMappingURL=P3PkkK_o.chunk.js.map
|