@clickview/reports 0.69.1-dev.0 → 0.70.0-rc.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/bundles.json +3 -2
- package/dist/css/1103-reports-d3d5cc00db.chunk.css +31 -0
- package/dist/css/1456-reports-4a5871a275.chunk.css +9 -0
- package/dist/css/1648-reports-012456ba48.chunk.css +2 -0
- package/dist/css/209-reports-c33663a53e.chunk.css +11 -0
- package/dist/css/2150-reports-84ec0e9770.chunk.css +4 -0
- package/dist/css/2217-reports-74dec0a3fe.chunk.css +32 -0
- package/dist/css/2997-reports-e08318f14b.chunk.css +9 -0
- package/dist/css/2999-reports-f190450b10.chunk.css +60 -0
- package/dist/css/4582-reports-d3d5cc00db.chunk.css +31 -0
- package/dist/css/5304-reports-22c2d8d635.chunk.css +9 -0
- package/dist/css/6007-reports-5ba77c55a3.chunk.css +8 -0
- package/dist/css/6031-reports-d558076846.chunk.css +6 -0
- package/dist/css/6356-reports-8c5b220bf6.chunk.css +1 -0
- package/dist/css/6811-reports-baf2e97e71.chunk.css +35 -0
- package/dist/css/7723-reports-8c6d3c414b.chunk.css +4 -0
- package/dist/css/7747-reports-2d9e191b5a.chunk.css +12 -0
- package/dist/css/8087-reports-cfe23ba648.chunk.css +10 -0
- package/dist/css/8294-reports-c797263ac2.chunk.css +1 -0
- package/dist/css/8418-reports-0ada3f3ce2.chunk.css +29 -0
- package/dist/css/8450-reports-06493dfde5.chunk.css +9 -0
- package/dist/css/8622-reports-9e8970cc7f.chunk.css +8 -0
- package/dist/css/8839-reports-8e46644943.chunk.css +1 -0
- package/dist/css/8989-reports-92b4f1dde8.chunk.css +8 -0
- package/dist/css/9059-reports-a2ac630ebc.chunk.css +35 -0
- package/dist/css/9285-reports-5b9af8380f.chunk.css +13 -0
- package/dist/css/9661-reports-7435e94a85.chunk.css +4 -0
- package/dist/css/9822-reports-a1db1900c7.chunk.css +8 -0
- package/dist/css/9949-reports-f22fa2b407.chunk.css +15 -0
- package/dist/css/reports-app-b4c4ec5632.css +32 -0
- package/dist/languages/en.json +1 -0
- package/dist/scripts/1103-d77d388f5b-reports.chunk.js +1 -0
- package/dist/scripts/1177-7cf7817e74-reports.chunk.js +1 -0
- package/dist/scripts/1456-019d93e620-reports.chunk.js +1 -0
- package/dist/scripts/1648-e892604f5a-reports.chunk.js +1 -0
- package/dist/scripts/1934-ca8497c768-reports.chunk.js +2 -0
- package/dist/scripts/1934-ca8497c768-reports.chunk.js.LICENSE.txt +9 -0
- package/dist/scripts/2087-e0ef668e1f-reports.chunk.js +1 -0
- package/dist/scripts/209-79eb8be706-reports.chunk.js +1 -0
- package/dist/scripts/2150-4e9e1fb433-reports.chunk.js +1 -0
- package/dist/scripts/2217-15fa35197a-reports.chunk.js +1 -0
- package/dist/scripts/2476-a700f69dc4-reports.chunk.js +1 -0
- package/dist/scripts/2539-04dfb4f4f1-reports.chunk.js +1 -0
- package/dist/scripts/2997-62d81c3442-reports.chunk.js +1 -0
- package/dist/scripts/2999-c1890ca868-reports.chunk.js +2 -0
- package/dist/scripts/2999-c1890ca868-reports.chunk.js.LICENSE.txt +1 -0
- package/dist/scripts/312-8b006e92ff-reports.chunk.js +1 -0
- package/dist/scripts/4234-e3c04f41eb-reports.chunk.js +1 -0
- package/dist/scripts/4372-26474a3318-reports.chunk.js +1 -0
- package/dist/scripts/438-b444dfb8c6-reports.chunk.js +1 -0
- package/dist/scripts/4582-230f130f41-reports.chunk.js +1 -0
- package/dist/scripts/4752-db4247883d-reports.chunk.js +2 -0
- package/dist/scripts/4752-db4247883d-reports.chunk.js.LICENSE.txt +118 -0
- package/dist/scripts/4979-7e14b09f33-reports.chunk.js +1 -0
- package/dist/scripts/5051-72c53737e2-reports.chunk.js +1 -0
- package/dist/scripts/5091-ddd6f61b55-reports.chunk.js +1 -0
- package/dist/scripts/5173-cce3b37672-reports.chunk.js +1 -0
- package/dist/scripts/5177-a7372e7b8d-reports.chunk.js +1 -0
- package/dist/scripts/5304-d5674b32b4-reports.chunk.js +1 -0
- package/dist/scripts/5802-2125536755-reports.chunk.js +1 -0
- package/dist/scripts/6007-673706aa31-reports.chunk.js +1 -0
- package/dist/scripts/6031-b1c60cc409-reports.chunk.js +1 -0
- package/dist/scripts/6081-2bbda6cac3-reports.chunk.js +1 -0
- package/dist/scripts/6180-bdb237ffbe-reports.chunk.js +2 -0
- package/dist/scripts/6180-bdb237ffbe-reports.chunk.js.LICENSE.txt +1 -0
- package/dist/scripts/6198-189ddde870-reports.chunk.js +1 -0
- package/dist/scripts/6356-a1b313c73e-reports.chunk.js +1 -0
- package/dist/scripts/645-e8b19128e5-reports.chunk.js +1 -0
- package/dist/scripts/6545-f07bcd318a-reports.chunk.js +1 -0
- package/dist/scripts/6811-40ded4c089-reports.chunk.js +1 -0
- package/dist/scripts/7238-de5ef0ebfb-reports.chunk.js +1 -0
- package/dist/scripts/7562-748e60c3fc-reports.chunk.js +1 -0
- package/dist/scripts/7709-82750ee317-reports.chunk.js +1 -0
- package/dist/scripts/7723-1799f5aa26-reports.chunk.js +1 -0
- package/dist/scripts/7747-d34db3ff10-reports.chunk.js +2 -0
- package/dist/scripts/7747-d34db3ff10-reports.chunk.js.LICENSE.txt +1 -0
- package/dist/scripts/7925-c6c532c9c4-reports.chunk.js +1 -0
- package/dist/scripts/8087-1d9e9701e5-reports.chunk.js +1 -0
- package/dist/scripts/8393-c37cc22b4c-reports.chunk.js +1 -0
- package/dist/scripts/8418-9f96caf039-reports.chunk.js +1 -0
- package/dist/scripts/8450-f2d5d99614-reports.chunk.js +1 -0
- package/dist/scripts/8591-4811082ab0-reports.chunk.js +1 -0
- package/dist/scripts/8622-ee045574e2-reports.chunk.js +1 -0
- package/dist/scripts/8839-711793a97f-reports.chunk.js +1 -0
- package/dist/scripts/8989-ca5cab7f45-reports.chunk.js +1 -0
- package/dist/scripts/9059-b2dcf3cdb2-reports.chunk.js +1 -0
- package/dist/scripts/9162-7ffc692736-reports.chunk.js +1 -0
- package/dist/scripts/9285-ecddd01efb-reports.chunk.js +1 -0
- package/dist/scripts/9590-41bb23ae71-reports.chunk.js +1 -0
- package/dist/scripts/9647-f0c111d3f0-reports.chunk.js +1 -0
- package/dist/scripts/9661-2dee4c3417-reports.chunk.js +1 -0
- package/dist/scripts/9822-621fac26e6-reports.chunk.js +1 -0
- package/dist/scripts/9895-3b3feb12b9-reports.chunk.js +1 -0
- package/dist/scripts/9949-6b1d1f4d32-reports.chunk.js +1 -0
- package/dist/scripts/bundle-44f8e893eb.min.js +2 -0
- package/dist/scripts/bundle-44f8e893eb.min.js.LICENSE.txt +108 -0
- package/dist/scripts/polyfills-3db3f009d4.min.js +1 -0
- package/package.json +3 -5
- package/typings/utils/imports.d.ts +1 -1
- 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/css/1VpVng8x.chunk.css +0 -1
- package/dist/css/BBwBgFf_.chunk.css +0 -1
- package/dist/css/BDijM1kt.chunk.css +0 -1
- package/dist/css/BMPwvOki.chunk.css +0 -1
- package/dist/css/BNt45Kgy.chunk.css +0 -1
- package/dist/css/BSGhUWzl.chunk.css +0 -1
- package/dist/css/BZ3_uhDP.chunk.css +0 -1
- package/dist/css/BaadNO4A.chunk.css +0 -1
- package/dist/css/BdUNjJqp.chunk.css +0 -1
- package/dist/css/BdeI0FAV.chunk.css +0 -1
- package/dist/css/BxcMGr8Y.chunk.css +0 -1
- package/dist/css/ByuL_xKJ.chunk.css +0 -1
- package/dist/css/C-A0Pj_7.chunk.css +0 -1
- package/dist/css/C4jMfPWU.chunk.css +0 -1
- package/dist/css/C7XoyEPr.chunk.css +0 -1
- package/dist/css/C8sxda3R.chunk.css +0 -1
- package/dist/css/CD1qrI1T.chunk.css +0 -1
- package/dist/css/CFO--d_R.chunk.css +0 -1
- package/dist/css/CX9nw8t8.chunk.css +0 -1
- package/dist/css/C_qGRdC2.chunk.css +0 -1
- package/dist/css/CdC6ugQR.chunk.css +0 -1
- package/dist/css/ClRRGXPb.chunk.css +0 -1
- package/dist/css/Cr1bwtZG.chunk.css +0 -1
- package/dist/css/DBlPz5Fw.chunk.css +0 -1
- package/dist/css/DDnpOnVB.chunk.css +0 -1
- package/dist/css/DFZQCLLg.chunk.css +0 -1
- package/dist/css/DJwAbl6l.chunk.css +0 -1
- package/dist/css/DWjg_0sz.chunk.css +0 -1
- package/dist/css/DYV9jjVn.chunk.css +0 -1
- package/dist/css/Dgeh4AqU.chunk.css +0 -9
- package/dist/css/DlOtoSz0.chunk.css +0 -1
- package/dist/css/DlxOgKUu.chunk.css +0 -1
- package/dist/css/DwgaDUzz.chunk.css +0 -1
- package/dist/css/FPQ_LmXH.chunk.css +0 -1
- package/dist/css/H09rC9gw.chunk.css +0 -1
- package/dist/css/LAFr2dPT.chunk.css +0 -1
- package/dist/css/Pg1TlYG6.chunk.css +0 -1
- package/dist/css/PsQn3-kb.chunk.css +0 -1
- package/dist/css/alkEuPrr.chunk.css +0 -1
- package/dist/css/k4DgCj_g.chunk.css +0 -1
- package/dist/en.json +0 -1
- package/dist/scripts/-b_h0A4y.chunk.js +0 -2
- package/dist/scripts/-b_h0A4y.chunk.js.map +0 -1
- package/dist/scripts/0UfVJrf5.chunk.js +0 -2
- package/dist/scripts/0UfVJrf5.chunk.js.map +0 -1
- package/dist/scripts/2cd-ulth.chunk.js +0 -2
- package/dist/scripts/2cd-ulth.chunk.js.map +0 -1
- package/dist/scripts/5O9SdVRZ.chunk.js +0 -2
- package/dist/scripts/5O9SdVRZ.chunk.js.map +0 -1
- package/dist/scripts/72EXv822.chunk.js +0 -2
- package/dist/scripts/72EXv822.chunk.js.map +0 -1
- package/dist/scripts/8CNwntVY.chunk.js +0 -2
- package/dist/scripts/8CNwntVY.chunk.js.map +0 -1
- package/dist/scripts/9pagDMWN.chunk.js +0 -2
- package/dist/scripts/9pagDMWN.chunk.js.map +0 -1
- package/dist/scripts/AKgZQGT0.chunk.js +0 -2
- package/dist/scripts/AKgZQGT0.chunk.js.map +0 -1
- package/dist/scripts/ASoPpgM4.chunk.js +0 -2
- package/dist/scripts/ASoPpgM4.chunk.js.map +0 -1
- package/dist/scripts/B0ZIDriY.chunk.js +0 -6
- package/dist/scripts/B0ZIDriY.chunk.js.map +0 -1
- package/dist/scripts/B3PA8QNB.chunk.js +0 -2
- package/dist/scripts/B3PA8QNB.chunk.js.map +0 -1
- package/dist/scripts/B6QS1MPy.chunk.js +0 -4
- package/dist/scripts/B6QS1MPy.chunk.js.map +0 -1
- package/dist/scripts/B9I2jvNY.chunk.js +0 -2
- package/dist/scripts/B9I2jvNY.chunk.js.map +0 -1
- package/dist/scripts/B9IzwFHp.chunk.js +0 -2
- package/dist/scripts/B9IzwFHp.chunk.js.map +0 -1
- package/dist/scripts/BBGDjrt-.chunk.js +0 -2
- package/dist/scripts/BBGDjrt-.chunk.js.map +0 -1
- package/dist/scripts/BHZ8VWq7.chunk.js +0 -2
- package/dist/scripts/BHZ8VWq7.chunk.js.map +0 -1
- package/dist/scripts/BIIsc-MA.chunk.js +0 -2
- package/dist/scripts/BIIsc-MA.chunk.js.map +0 -1
- package/dist/scripts/BLEXuU9u.chunk.js +0 -2
- package/dist/scripts/BLEXuU9u.chunk.js.map +0 -1
- package/dist/scripts/BLIHpHXi.chunk.js +0 -2
- package/dist/scripts/BLIHpHXi.chunk.js.map +0 -1
- package/dist/scripts/BLSeaGtL.chunk.js +0 -2
- package/dist/scripts/BLSeaGtL.chunk.js.map +0 -1
- package/dist/scripts/BLuY6AYO.chunk.js +0 -2
- package/dist/scripts/BLuY6AYO.chunk.js.map +0 -1
- package/dist/scripts/BSe8MmUc.chunk.js +0 -2
- package/dist/scripts/BSe8MmUc.chunk.js.map +0 -1
- package/dist/scripts/BZf-mjTJ.chunk.js +0 -380
- package/dist/scripts/BZf-mjTJ.chunk.js.map +0 -1
- package/dist/scripts/BbvzsNLZ.chunk.js +0 -2
- package/dist/scripts/BbvzsNLZ.chunk.js.map +0 -1
- package/dist/scripts/BdX0pSRt.chunk.js +0 -2
- package/dist/scripts/BdX0pSRt.chunk.js.map +0 -1
- package/dist/scripts/Bgidb-to.chunk.js +0 -2
- package/dist/scripts/Bgidb-to.chunk.js.map +0 -1
- package/dist/scripts/BhPjzT2a.chunk.js +0 -2
- package/dist/scripts/BhPjzT2a.chunk.js.map +0 -1
- package/dist/scripts/BihcsiRl.chunk.js +0 -2
- package/dist/scripts/BihcsiRl.chunk.js.map +0 -1
- package/dist/scripts/BlUKEHqx.chunk.js +0 -2
- package/dist/scripts/BlUKEHqx.chunk.js.map +0 -1
- package/dist/scripts/BpWIcknK.chunk.js +0 -2
- package/dist/scripts/BpWIcknK.chunk.js.map +0 -1
- package/dist/scripts/BqY3bZyH.chunk.js +0 -2
- package/dist/scripts/BqY3bZyH.chunk.js.map +0 -1
- package/dist/scripts/BrXmRwXi.chunk.js +0 -2
- package/dist/scripts/BrXmRwXi.chunk.js.map +0 -1
- package/dist/scripts/BsOLqypJ.chunk.js +0 -2
- package/dist/scripts/BsOLqypJ.chunk.js.map +0 -1
- package/dist/scripts/BvArNs1K.chunk.js +0 -2
- package/dist/scripts/BvArNs1K.chunk.js.map +0 -1
- package/dist/scripts/BxBPX67V.chunk.js +0 -2
- package/dist/scripts/BxBPX67V.chunk.js.map +0 -1
- package/dist/scripts/C0Ak1kpS.chunk.js +0 -3
- package/dist/scripts/C0Ak1kpS.chunk.js.map +0 -1
- package/dist/scripts/C0GFlX65.chunk.js +0 -2
- package/dist/scripts/C0GFlX65.chunk.js.map +0 -1
- package/dist/scripts/C0nQ0Xnx.chunk.js +0 -6
- package/dist/scripts/C0nQ0Xnx.chunk.js.map +0 -1
- package/dist/scripts/C6UUJ8P5.chunk.js +0 -2
- package/dist/scripts/C6UUJ8P5.chunk.js.map +0 -1
- package/dist/scripts/C8oA7_zY.chunk.js +0 -2
- package/dist/scripts/C8oA7_zY.chunk.js.map +0 -1
- package/dist/scripts/CEy1YX0b.chunk.js +0 -2
- package/dist/scripts/CEy1YX0b.chunk.js.map +0 -1
- package/dist/scripts/CNfESBlK.chunk.js +0 -2
- package/dist/scripts/CNfESBlK.chunk.js.map +0 -1
- package/dist/scripts/CNgTzzan.chunk.js +0 -42
- package/dist/scripts/CNgTzzan.chunk.js.map +0 -1
- package/dist/scripts/CP2i5uhZ.chunk.js +0 -2
- package/dist/scripts/CP2i5uhZ.chunk.js.map +0 -1
- package/dist/scripts/CSmXZuTZ.chunk.js +0 -2
- package/dist/scripts/CSmXZuTZ.chunk.js.map +0 -1
- package/dist/scripts/CTMVj7AR.chunk.js +0 -2
- package/dist/scripts/CTMVj7AR.chunk.js.map +0 -1
- package/dist/scripts/CW7x8M-z.chunk.js +0 -2
- package/dist/scripts/CW7x8M-z.chunk.js.map +0 -1
- package/dist/scripts/CWEUVMEm.chunk.js +0 -2
- package/dist/scripts/CWEUVMEm.chunk.js.map +0 -1
- package/dist/scripts/CWViZWyh.chunk.js +0 -34
- package/dist/scripts/CWViZWyh.chunk.js.map +0 -1
- package/dist/scripts/CX5q-0jT.chunk.js +0 -2
- package/dist/scripts/CX5q-0jT.chunk.js.map +0 -1
- package/dist/scripts/CbBaa9Aj.chunk.js +0 -2
- package/dist/scripts/CbBaa9Aj.chunk.js.map +0 -1
- package/dist/scripts/Ce_zROQ3.chunk.js +0 -2
- package/dist/scripts/Ce_zROQ3.chunk.js.map +0 -1
- package/dist/scripts/CfTCpF5i.chunk.js +0 -4
- package/dist/scripts/CfTCpF5i.chunk.js.map +0 -1
- package/dist/scripts/Cl1c9Acb.chunk.js +0 -2
- package/dist/scripts/Cl1c9Acb.chunk.js.map +0 -1
- package/dist/scripts/Cmu1J2M7.chunk.js +0 -262
- package/dist/scripts/Cmu1J2M7.chunk.js.map +0 -1
- package/dist/scripts/Cn0ghy_D.chunk.js +0 -2
- package/dist/scripts/Cn0ghy_D.chunk.js.map +0 -1
- package/dist/scripts/Cs1UnwSi.chunk.js +0 -2
- package/dist/scripts/Cs1UnwSi.chunk.js.map +0 -1
- package/dist/scripts/CsP3Lruv.chunk.js +0 -3
- package/dist/scripts/CsP3Lruv.chunk.js.map +0 -1
- package/dist/scripts/CsROrwVV.chunk.js +0 -2
- package/dist/scripts/CsROrwVV.chunk.js.map +0 -1
- package/dist/scripts/Ctu1A4hw.chunk.js +0 -2
- package/dist/scripts/Ctu1A4hw.chunk.js.map +0 -1
- package/dist/scripts/D1UdZdfs.chunk.js +0 -2
- package/dist/scripts/D1UdZdfs.chunk.js.map +0 -1
- package/dist/scripts/D2pFW6EB.chunk.js +0 -2
- package/dist/scripts/D2pFW6EB.chunk.js.map +0 -1
- package/dist/scripts/D9oCeDYw.chunk.js +0 -10
- package/dist/scripts/D9oCeDYw.chunk.js.map +0 -1
- package/dist/scripts/DAajosqn.chunk.js +0 -2
- package/dist/scripts/DAajosqn.chunk.js.map +0 -1
- package/dist/scripts/DDGxV4ns.chunk.js +0 -2
- package/dist/scripts/DDGxV4ns.chunk.js.map +0 -1
- package/dist/scripts/DFlfmBPU.chunk.js +0 -2
- package/dist/scripts/DFlfmBPU.chunk.js.map +0 -1
- package/dist/scripts/DHZefNDC.chunk.js +0 -2
- package/dist/scripts/DHZefNDC.chunk.js.map +0 -1
- package/dist/scripts/DJzpw8qX.chunk.js +0 -2
- package/dist/scripts/DJzpw8qX.chunk.js.map +0 -1
- package/dist/scripts/DKEdZyAE.chunk.js +0 -2
- package/dist/scripts/DKEdZyAE.chunk.js.map +0 -1
- package/dist/scripts/DKu8iTnz.chunk.js +0 -2
- package/dist/scripts/DKu8iTnz.chunk.js.map +0 -1
- package/dist/scripts/DMd0fZar.chunk.js +0 -2
- package/dist/scripts/DMd0fZar.chunk.js.map +0 -1
- package/dist/scripts/DNDksLLJ.chunk.js +0 -2
- package/dist/scripts/DNDksLLJ.chunk.js.map +0 -1
- package/dist/scripts/DNP9cLqQ.chunk.js +0 -2
- package/dist/scripts/DNP9cLqQ.chunk.js.map +0 -1
- package/dist/scripts/DO-V6YKu.chunk.js +0 -2
- package/dist/scripts/DO-V6YKu.chunk.js.map +0 -1
- package/dist/scripts/DQA8MZy3.chunk.js +0 -2
- package/dist/scripts/DQA8MZy3.chunk.js.map +0 -1
- package/dist/scripts/DT1lPNaD.chunk.js +0 -2
- package/dist/scripts/DT1lPNaD.chunk.js.map +0 -1
- package/dist/scripts/DTL-Rceb.chunk.js +0 -2
- package/dist/scripts/DTL-Rceb.chunk.js.map +0 -1
- package/dist/scripts/DTotSVIi.chunk.js +0 -2
- package/dist/scripts/DTotSVIi.chunk.js.map +0 -1
- package/dist/scripts/DWkaXclo.chunk.js +0 -10
- package/dist/scripts/DWkaXclo.chunk.js.map +0 -1
- package/dist/scripts/DXFcNENa.chunk.js +0 -2
- package/dist/scripts/DXFcNENa.chunk.js.map +0 -1
- package/dist/scripts/Ddy6mQmA.chunk.js +0 -2
- package/dist/scripts/Ddy6mQmA.chunk.js.map +0 -1
- package/dist/scripts/DlxDC-9E.chunk.js +0 -2
- package/dist/scripts/DlxDC-9E.chunk.js.map +0 -1
- package/dist/scripts/Dn5-Zvws.chunk.js +0 -2
- package/dist/scripts/Dn5-Zvws.chunk.js.map +0 -1
- package/dist/scripts/DnhffgUu.chunk.js +0 -2
- package/dist/scripts/DnhffgUu.chunk.js.map +0 -1
- package/dist/scripts/Dv9OgzKw.chunk.js +0 -2
- package/dist/scripts/Dv9OgzKw.chunk.js.map +0 -1
- package/dist/scripts/DvV9e2O3.chunk.js +0 -3
- package/dist/scripts/DvV9e2O3.chunk.js.map +0 -1
- package/dist/scripts/Dvf_hOR3.chunk.js +0 -2
- package/dist/scripts/Dvf_hOR3.chunk.js.map +0 -1
- package/dist/scripts/DxOc33K6.chunk.js +0 -3
- package/dist/scripts/DxOc33K6.chunk.js.map +0 -1
- package/dist/scripts/DxbQzyJg.chunk.js +0 -2
- package/dist/scripts/DxbQzyJg.chunk.js.map +0 -1
- package/dist/scripts/DyaAoFDP.chunk.js +0 -2
- package/dist/scripts/DyaAoFDP.chunk.js.map +0 -1
- package/dist/scripts/EBNeK_uD.chunk.js +0 -2
- package/dist/scripts/EBNeK_uD.chunk.js.map +0 -1
- package/dist/scripts/HBvGjr-A.chunk.js +0 -2
- package/dist/scripts/HBvGjr-A.chunk.js.map +0 -1
- package/dist/scripts/IC6KSiqE.chunk.js +0 -2
- package/dist/scripts/IC6KSiqE.chunk.js.map +0 -1
- package/dist/scripts/LT6WE6TB.chunk.js +0 -2
- package/dist/scripts/LT6WE6TB.chunk.js.map +0 -1
- package/dist/scripts/P0RdEZGz.chunk.js +0 -2
- package/dist/scripts/P0RdEZGz.chunk.js.map +0 -1
- package/dist/scripts/P3PkkK_o.chunk.js +0 -2
- package/dist/scripts/P3PkkK_o.chunk.js.map +0 -1
- package/dist/scripts/SA1hxE7y.chunk.js +0 -15
- package/dist/scripts/SA1hxE7y.chunk.js.map +0 -1
- package/dist/scripts/YHL8PX91.chunk.js +0 -2
- package/dist/scripts/YHL8PX91.chunk.js.map +0 -1
- package/dist/scripts/app-5iiM5qQY.js +0 -224
- package/dist/scripts/app-5iiM5qQY.js.map +0 -1
- package/dist/scripts/fORcC1yd.chunk.js +0 -2
- package/dist/scripts/fORcC1yd.chunk.js.map +0 -1
- package/dist/scripts/hU1zzvt8.chunk.js +0 -2
- package/dist/scripts/hU1zzvt8.chunk.js.map +0 -1
- package/dist/scripts/kFXLewpU.chunk.js +0 -2
- package/dist/scripts/kFXLewpU.chunk.js.map +0 -1
- package/dist/scripts/k_p1R4KR.chunk.js +0 -2
- package/dist/scripts/k_p1R4KR.chunk.js.map +0 -1
- package/dist/scripts/mqFCEyYv.chunk.js +0 -2
- package/dist/scripts/mqFCEyYv.chunk.js.map +0 -1
- package/dist/scripts/qwzILhQ0.chunk.js +0 -8
- package/dist/scripts/qwzILhQ0.chunk.js.map +0 -1
- package/dist/scripts/sFV5nxD4.chunk.js +0 -2
- package/dist/scripts/sFV5nxD4.chunk.js.map +0 -1
- package/dist/scripts/uBcZoYae.chunk.js +0 -2
- package/dist/scripts/uBcZoYae.chunk.js.map +0 -1
- package/dist/scripts/yaRKidLW.chunk.js +0 -2
- package/dist/scripts/yaRKidLW.chunk.js.map +0 -1
- package/dist/scripts/ysP6mL-L.chunk.js +0 -2
- package/dist/scripts/ysP6mL-L.chunk.js.map +0 -1
- package/vite.config.ts +0 -6
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{b as m,P as g,e as E,u as n,U as V,c as S,V as U,r as h}from"./app-5iiM5qQY.js";import{V as p}from"./C0Ak1kpS.chunk.js";function l(i){const{hasPermissions:o}=m(),r=o(g.ViewCustomerAnalytics),s=E(),t=n(V.currentUser()),u=r&&!!t.data&&!!s,e=n(u&&p.individualEngagement(i,{start:s==null?void 0:s.start,end:s==null?void 0:s.end},t.data.id)),[,c]=S(U.AUDIENCE_FILTER_SUGGESTIONS);h.useEffect(()=>{var a;e.data&&c("users",(a=e.data)==null?void 0:a.data.map(d=>d.userId))},[e.isFetching])}export{l as u};
|
|
2
|
-
//# sourceMappingURL=B3PA8QNB.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"B3PA8QNB.chunk.js","sources":["../../src/shared/hooks/UseSetEngagementAudienceSuggestions.ts"],"sourcesContent":["import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { AudienceFilterSuggestions } from 'libs/shared/apps/analytics/interfaces/AudienceFilterSuggestions';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoViewRequests as SharedVideoViewRequests } from 'libs/shared/flight-requests/VideoViewRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { CurrentUser } from 'libs/shared/interfaces';\nimport { IndividualEngagementResponse } from 'libs/shared/interfaces';\n\nimport { ViewModelKeys } from 'shared/constants/ReportsViewModels';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\n\n/**\n * This hook sets engagement data for all users within the set date range (ignoring the audience filter)\n * and sets any users with results as audience suggestions.\n * \n * Note: this is only for admins as staff have a different audience filter.\n */\nexport function useSetEngagementAudienceSuggestions(videoId: string): void {\n const { hasPermissions } = usePermissions();\n const canViewCustomerAnalytics = hasPermissions(PermissionName.ViewCustomerAnalytics);\n\n const filter = useGetRequestFilter();\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const shouldFetch = canViewCustomerAnalytics && !!currentUser.data && !!filter;\n\n const engagement = Flight.useBasicFetch<IndividualEngagementResponse>(shouldFetch &&\n SharedVideoViewRequests.individualEngagement(\n videoId,\n { start: filter?.start, end: filter?.end },\n currentUser.data.id\n ));\n\n const [ , setSuggestions ] = useViewModel<AudienceFilterSuggestions>(ViewModelKeys.AUDIENCE_FILTER_SUGGESTIONS);\n\n useEffect(() => {\n if (!engagement.data)\n return;\n\n setSuggestions('users', engagement.data?.data.map(e => e.userId));\n }, [engagement.isFetching]);\n}"],"names":["useSetEngagementAudienceSuggestions","videoId","hasPermissions","usePermissions","canViewCustomerAnalytics","PermissionName","filter","useGetRequestFilter","currentUser","Flight.useBasicFetch","UserRequests","shouldFetch","engagement","SharedVideoViewRequests","setSuggestions","useViewModel","ViewModelKeys","useEffect","_a","e"],"mappings":"+HAsBO,SAASA,EAAoCC,EAAuB,CACzE,KAAM,CAAE,eAAAC,CAAA,EAAmBC,EAAA,EACrBC,EAA2BF,EAAeG,EAAe,qBAAqB,EAE9EC,EAASC,EAAA,EACTC,EAAcC,EAAkCC,EAAa,aAAa,EAE1EC,EAAcP,GAA4B,CAAC,CAACI,EAAY,MAAQ,CAAC,CAACF,EAElEM,EAAaH,EAAmDE,GACpEE,EAAwB,qBACtBZ,EACA,CAAE,MAAOK,GAAA,YAAAA,EAAQ,MAAO,IAAKA,GAAA,YAAAA,EAAQ,GAAA,EACrCE,EAAY,KAAK,EAAA,CAClB,EAEG,CAAA,CAAIM,CAAe,EAAIC,EAAwCC,EAAc,2BAA2B,EAE9GC,EAAAA,UAAU,IAAM,OACTL,EAAW,MAGhBE,EAAe,SAASI,EAAAN,EAAW,OAAX,YAAAM,EAAiB,KAAK,IAAIC,GAAKA,EAAE,OAAO,CAClE,EAAG,CAACP,EAAW,UAAU,CAAC,CAC5B"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{j as t,p as m,b$ as j,L as b,c0 as S,h as p,a4 as M,aa as $,c as C,V as v,v as g}from"./app-5iiM5qQY.js";import{P as x}from"./BdX0pSRt.chunk.js";import{a as R}from"./CsP3Lruv.chunk.js";import{b as H,I as L,e as k,f as u,g as T,a as A}from"./DTL-Rceb.chunk.js";import{P as N,a as y}from"./P3PkkK_o.chunk.js";import{D as E}from"./Cs1UnwSi.chunk.js";import{b as O,I as D}from"./CNgTzzan.chunk.js";const P="_container_18up8_1",U="_interaction_18up8_6",w={container:P,interaction:U};function F(e,n){return e.interactions.find(i=>i.id===n.id)||e.interactions[0]}function K(e){return e.duration?t.jsx(t.Fragment,{children:e.interactive.timepoints.map((n,i)=>{if(!n.interactions.length)return t.jsx(t.Fragment,{});const r=F(n,e.selectedInteraction),c=r.id===e.selectedInteraction.id,s=c?O.getTypeInfo(r.typeId).bgClassName:"bg-gray-500",a=n.visibleAt/1e3/e.duration*100;return t.jsxs("div",{className:`${w.container} text-center`,style:{left:`${a}%`},children:[t.jsx("div",{className:`${w.interaction} ${s}`}),!!c&&t.jsx("div",{children:E.ToDisplayDuration(n.visibleAt)})]},i)})}):t.jsx(t.Fragment,{})}const V="_bar_1r368_1",q={bar:V},G="shared.interactionResultsSummary",f=b.encloseNamespace(G);function W(e){return e._parentClip?e._parentClip.endTime-e._parentClip.startTime:e._parentVideo.duration?e._parentVideo.duration/1e3:0}function Y(e){const n=m.useMemo(()=>H(e.interaction,e.results),[e.interaction,e.results]);return t.jsxs("div",{className:"px-1 pt-1",children:[t.jsx("div",{className:"d-flex",children:t.jsx(D,{interaction:e.interaction,iconClassName:"flex-shrink-0"})}),t.jsx("div",{className:`my-4 ${q.bar}`,children:t.jsx(K,{interactive:e.interactive,duration:W(e.interactiveMetadata),selectedInteraction:e.interaction})}),t.jsxs("div",{className:"row pt-1 pb-2",children:[t.jsx("div",{className:"col-6 pe-1",children:t.jsxs("div",{className:"bg-light rounded p-2 h-100",children:[!n.awaitingMarking&&t.jsxs("div",{className:"d-flex align-items-center justify-content-between",children:[t.jsx("strong",{children:f("correctlyAnswered")}),t.jsx(N,{percentage:n.percentCorrect,layout:y.LabelOnly})]}),!!n.awaitingMarking&&t.jsx("div",{className:"d-flex align-items-center justify-content-center",children:t.jsx("strong",{children:t.jsx("em",{children:f("pending")})})})]})}),t.jsx("div",{className:"col-6 ps-1",children:t.jsxs("div",{className:"bg-light rounded h-100 p-2 d-flex align-items-center justify-content-between",children:[t.jsx("strong",{children:f("unanswered")}),t.jsx("span",{children:n.unanswered})]})})]})]})}const z=m.forwardRef(({interaction:e,interactive:n,interactiveMetadata:i,results:r,...c},s)=>t.jsx("div",{className:"popover-lg",children:t.jsx(j,{id:`interaction-results-summary-${e.id}`,ref:s,...c,children:t.jsx(j.Body,{children:t.jsx(Y,{interaction:e,interactive:n,interactiveMetadata:i,results:r})})})})),J="_header_2be6f_1",Q="_row_2be6f_4",X="_fixedTable_2be6f_7",Z="_interactionHeaderCellOuter_2be6f_26",B="_hasResults_2be6f_29",ee="_interactionHeaderCellInner_2be6f_36",te="_resultsCellOuter_2be6f_40",ne="_correct_2be6f_56",re="_incorrect_2be6f_70",se="_awaitingMarking_2be6f_80",ie="_unanswered_2be6f_90",ae="_highlightColumn_2be6f_100",ce="_resultsCellInner_2be6f_110",le="_highlightResultsRow_2be6f_121",oe="_resultsRow_2be6f_137",l={header:J,row:Q,fixedTable:X,interactionHeaderCellOuter:Z,hasResults:B,interactionHeaderCellInner:ee,resultsCellOuter:te,correct:ne,incorrect:re,awaitingMarking:se,unanswered:ie,highlightColumn:ae,resultsCellInner:ce,highlightResultsRow:le,resultsRow:oe};function ue(e){var n;return t.jsx(S,{trigger:(n=e.results.students)!=null&&n.length?"click":null,placement:"bottom",overlay:t.jsx(z,{interaction:e.interaction,interactive:e.interactive,interactiveMetadata:e.interactiveMetadata,results:e.results}),rootClose:!0,children:t.jsx("div",{className:`text-center h-100
|
|
2
|
-
d-flex align-items-center justify-content-center
|
|
3
|
-
${l.interactionHeaderCellInner}`,onMouseEnter:e.onMouseEnter,onMouseLeave:e.onMouseLeave,children:t.jsx("div",{className:"p-1 position-relative",children:e.interactionNumber})})})}function de(e){return t.jsx("svg",{...e,children:t.jsx("path",{fillRule:"evenodd",d:"M7 11h10c.554 0 1 .446 1 1s-.446 1-1 1H7c-.554 0-1-.446-1-1s.446-1 1-1",fill:"currentColor"})})}function me(e){if(e===u.Correct)return M;if(e===u.Incorrect)return $;if(e===u.UnAnswered)return de}function he(e){let n=`${l.resultsCellInner} h-100 position-relative`;return e===u.Correct&&(n+=` ${l.correct} text-success`),e===u.Incorrect&&(n+=` ${l.incorrect} text-danger`),e===u.AwaitingMarking&&(n+=` ${l.awaitingMarking}`),e===u.UnAnswered&&(n+=` ${l.unanswered} text-warning`),n}function ge(e){const n=L.isInteractionCorrect(e.interaction,k(e.studentResults)),i=me(n);return t.jsxs("div",{className:he(n),children:[!!i&&t.jsx(p,{svg:i}),n===u.AwaitingMarking&&t.jsx(x,{})]})}const fe="interactives.studentResultsTable",_=b.encloseNamespace(fe),xe=60;function d(e){return t.jsx("div",{className:`d-flex align-items-center p-2 h-100 ${e.className??""}`,children:e.children})}function h(e){return t.jsx(d,{className:e.column.isSorted&&"fw-bold",children:_(e.phraseKey)})}function ye(e){var r;const[n]=C(v.ANONYMISE_USERS),i=!!((r=e.students)!=null&&r.length);return m.useMemo(()=>[{Header:({column:s})=>t.jsx(h,{column:s,phraseKey:"name"}),accessor:"user",Cell:({value:s})=>t.jsx(d,{children:t.jsx("span",{className:"text-truncate",children:R(s,n)})}),disableSortBy:!i},{Header:({column:s})=>t.jsx(h,{column:s,phraseKey:"unanswered"}),accessor:"summary.unanswered",sortType:"basic",sortDescFirst:!0,disableSortBy:!i,Cell:({value:s})=>t.jsx(d,{children:s})},{Header:({column:s})=>t.jsx(h,{column:s,phraseKey:"score"}),accessor:"summary",id:"score",Cell:({value:s})=>s.awaitingMarking?t.jsx(d,{children:t.jsx(x,{title:_("markingRequired"),className:"flex-grow-1",showLabel:!0})}):t.jsx(d,{children:`${s.correct}/${s.answered+s.unanswered}`}),width:125,sortDescFirst:!0,disableSortBy:!i},{Header:({column:s})=>t.jsx(h,{column:s,phraseKey:"percentage"}),accessor:"summary",id:"percentage",Cell:({value:s})=>s.awaitingMarking?t.jsx(d,{children:t.jsx(x,{title:_("markingRequired"),className:"flex-grow-1",showLabel:!0})}):t.jsx(d,{children:t.jsx(N,{percentage:s.percentCorrect,layout:y.LabelBefore,className:"flex-grow-1"})}),width:125,sortDescFirst:!0,disableSortBy:!i}],[n,i])}function Ie(e,n,i,r,c){return m.useMemo(()=>A(e).map((a,o)=>({Header:()=>t.jsx(ue,{interaction:a,results:i,interactive:e,interactiveMetadata:n,interactionNumber:o+1,onMouseEnter:()=>r(o),onMouseLeave:()=>r(null)}),accessor:"results",id:a.id,disableSortBy:!0,width:xe,Cell:({row:{original:I}})=>t.jsx(ge,{interaction:a,studentResults:I})})),[c])}function Se(e,n,i,r){const[c]=C(v.ANONYMISE_USERS);return m.useMemo(()=>{const s=[];if(n.students.forEach(a=>{s.push({...a,summary:T(e,a)})}),(r==null?void 0:r.id)==="user"){const a=g.sortBy(s,o=>R(o.user,c));return r.desc?a.reverse():a}if((r==null?void 0:r.id)==="summary.unanswered"){const a=g.sortBy(s,o=>o.summary.unanswered);return r.desc?a.reverse():a}if((r==null?void 0:r.id)==="score"||(r==null?void 0:r.id)==="percentage"){const a=g.sortBy(s,o=>o.summary.awaitingMarking?-1:o.summary.percentCorrect);return r.desc?a.reverse():a}return s},[i,r,c])}function pe(e,n){if(!e)return;const i=e.querySelectorAll(`.${l.resultsRow}`);i==null||i.forEach(r=>{r.childNodes.forEach((c,s)=>{c.classList.remove(l.highlightColumn),s===n&&c.classList.add(l.highlightColumn)})})}function Me(e,n){if(!e)return;const i=e.querySelectorAll(`.${l.resultsRow}`);i==null||i.forEach((r,c)=>{r.classList.remove(l.highlightResultsRow),c===n&&r.classList.add(l.highlightResultsRow)})}export{xe as R,Ie as a,Se as b,Me as c,pe as h,l as s,ye as u};
|
|
4
|
-
//# sourceMappingURL=B6QS1MPy.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"B6QS1MPy.chunk.js","sources":["../../../../libs/shared/src/apps/analytics/components/student-results/interactions-bar/InteractionsBar.tsx","../../../../libs/shared/src/apps/analytics/components/student-results/interaction-results-summary/InteractionResultsSummary.tsx","../../src/apps/interactives/views/interactive-student-results-list/components/student-results-table/InteractionHeaderCell.tsx","../../../../libs/shared/src/images/svg/actions/MinusSvg.tsx","../../src/apps/interactives/views/interactive-student-results-list/components/student-results-table/StudentResultCell.tsx","../../src/apps/interactives/views/interactive-student-results-list/components/student-results-table/StudentResultsTableUtils.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Interaction, Interactive, Timepoint } from 'libs/shared/interfaces';\nimport { DurationHelper } from 'libs/shared/utils/DurationHelper';\nimport { InteractionTypeHelper } from 'libs/shared/utils/interaction-type-helper/InteractionTypeHelper';\n\nimport styles from './interactions-bar.module.scss';\n\nfunction getInteraction(timepoint: Timepoint, selectedInteraction: Interaction): Interaction {\n return timepoint.interactions.find(i => i.id === selectedInteraction.id) || timepoint.interactions[0];\n}\n\ninterface InteractionBarProps {\n interactive: Interactive;\n duration: number;\n selectedInteraction: Interaction;\n}\n\nexport function InteractionsBar(props: InteractionBarProps): React.ReactElement {\n if (!props.duration)\n return <></>;\n\n return (\n <>\n {props.interactive.timepoints.map((t, i) => {\n if (!t.interactions.length)\n return <></>;\n\n const interaction = getInteraction(t, props.selectedInteraction);\n const isSelected = interaction.id === props.selectedInteraction.id;\n\n const bgClassName = isSelected ? (InteractionTypeHelper.getTypeInfo(interaction.typeId)).bgClassName : 'bg-gray-500';\n\n const left = ((t.visibleAt / 1000) / props.duration) * 100;\n\n return (\n <div\n key={i}\n className={`${styles.container} text-center`}\n style={{ left: `${left}%` }}\n >\n <div className={`${styles.interaction} ${bgClassName}`} />\n {!!isSelected &&\n <div>\n {DurationHelper.ToDisplayDuration(t.visibleAt)}\n </div>\n }\n </div>\n );\n })}\n </>\n );\n}","import React from 'react';\nimport { Popover } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InteractionsBar } from 'libs/shared/apps/analytics/components/student-results/interactions-bar/InteractionsBar';\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 { Interaction, Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\n\nimport styles from './interaction-results-summary.module.scss';\n\nconst namespace = 'shared.interactionResultsSummary';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getDuration(interactiveMetadata: InteractiveMetadata): number {\n if (interactiveMetadata._parentClip)\n return interactiveMetadata._parentClip.endTime - interactiveMetadata._parentClip.startTime;\n\n if (!interactiveMetadata._parentVideo.duration)\n return 0;\n\n return interactiveMetadata._parentVideo.duration / 1000;\n}\n\ninterface InteractionResultsSummaryProps {\n interaction: Interaction;\n interactive: Interactive;\n interactiveMetadata: InteractiveMetadata;\n results: InteractiveResultSet;\n}\n\nfunction InteractionResultsSummary(props: InteractionResultsSummaryProps): JSX.Element {\n const summary = React.useMemo(\n () => getInteractionResultsSummary(props.interaction, props.results),\n [ props.interaction, props.results ]\n );\n\n return (\n <div className='px-1 pt-1'>\n <div className='d-flex'>\n <InteractionLabel\n interaction={props.interaction}\n iconClassName='flex-shrink-0'\n />\n </div>\n <div className={`my-4 ${styles.bar}`}>\n <InteractionsBar\n interactive={props.interactive}\n duration={getDuration(props.interactiveMetadata)}\n selectedInteraction={props.interaction}\n />\n </div>\n <div className='row pt-1 pb-2'>\n <div className='col-6 pe-1'>\n <div className='bg-light rounded p-2 h-100'>\n {!summary.awaitingMarking &&\n <div className='d-flex align-items-center justify-content-between'>\n <strong>{getPhrase('correctlyAnswered')}</strong>\n <PercentageIndicator\n percentage={summary.percentCorrect}\n layout={PercentageIndicatorLayout.LabelOnly}\n />\n </div>\n }\n {!!summary.awaitingMarking &&\n <div className='d-flex align-items-center justify-content-center'>\n <strong>\n <em>{getPhrase('pending')}</em>\n </strong>\n </div>\n }\n </div>\n </div>\n <div className='col-6 ps-1'>\n <div className='bg-light rounded h-100 p-2 d-flex align-items-center justify-content-between'>\n <strong>{getPhrase('unanswered')}</strong>\n <span>{summary.unanswered}</span>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nconst InteractionResultsSummaryPopover = React.forwardRef((\n { interaction, interactive, interactiveMetadata, results, ...popoverProps }: InteractionResultsSummaryProps,\n ref: React.MutableRefObject<HTMLElement>\n) => {\n return (\n <div className='popover-lg'>\n <Popover\n id={`interaction-results-summary-${interaction.id}`}\n ref={ref as any}\n {...popoverProps}\n >\n <Popover.Body>\n <InteractionResultsSummary\n interaction={interaction}\n interactive={interactive}\n interactiveMetadata={interactiveMetadata}\n results={results}\n />\n </Popover.Body>\n </Popover>\n </div>\n );\n});\n\nexport { InteractionResultsSummaryPopover as InteractionResultsSummary };","import React from 'react';\nimport { OverlayTrigger } from 'react-bootstrap';\n\nimport {\n InteractionResultsSummary\n} from 'libs/shared/apps/analytics/components/student-results/interaction-results-summary/InteractionResultsSummary';\nimport { Interaction, Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\n\nimport styles from './student-results-table.module.scss';\n\ninterface InteractionHeaderCellProps {\n interaction: Interaction;\n results: InteractiveResultSet;\n interactionNumber: number;\n interactive: Interactive;\n interactiveMetadata: InteractiveMetadata;\n onMouseEnter?: () => void;\n onMouseLeave?: () => void;\n}\n\nexport function InteractionHeaderCell(props: InteractionHeaderCellProps): JSX.Element {\n return (\n <OverlayTrigger\n trigger={props.results.students?.length ? 'click' : null}\n placement='bottom'\n overlay={\n <InteractionResultsSummary\n interaction={props.interaction}\n interactive={props.interactive}\n interactiveMetadata={props.interactiveMetadata}\n results={props.results}\n />\n }\n rootClose\n >\n <div\n className={\n `text-center h-100\n d-flex align-items-center justify-content-center\n ${styles.interactionHeaderCellInner}`\n }\n onMouseEnter={props.onMouseEnter}\n onMouseLeave={props.onMouseLeave}\n >\n <div className='p-1 position-relative'>\n {props.interactionNumber}\n </div>\n </div>\n </OverlayTrigger>\n );\n}","import React from 'react';\n\nexport function MinusSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fillRule='evenodd'\n d='M7 11h10c.554 0 1 .446 1 1s-.446 1-1 1H7c-.554 0-1-.446-1-1s.446-1 1-1'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nimport { PendingIndicator } from 'libs/shared/apps/analytics/components/pending-indicator/PendingIndicator';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { CloseSvg } from 'libs/shared/images/svg/actions/CloseSvg';\nimport { MinusSvg } from 'libs/shared/images/svg/actions/MinusSvg';\nimport { CheckSvg } from 'libs/shared/images/svg/status/CheckSvg';\nimport { Interaction, StudentResults } from 'libs/shared/interfaces';\nimport { InteractiveCorrectnessHelper } from 'libs/shared/utils/InteractiveCorrectnessHelper';\nimport { getStudentResult } from 'libs/shared/utils/InteractiveHelper';\n\nimport styles from './student-results-table.module.scss';\n\nfunction getSvg(correctness: InteractionCorrectness) {\n if (correctness === InteractionCorrectness.Correct)\n return CheckSvg;\n\n if (correctness === InteractionCorrectness.Incorrect)\n return CloseSvg;\n\n if (correctness === InteractionCorrectness.UnAnswered)\n return MinusSvg;\n}\n\nfunction getClassName(correctness: InteractionCorrectness): string {\n let className = `${styles.resultsCellInner} h-100 position-relative`;\n\n if (correctness === InteractionCorrectness.Correct)\n className += ` ${styles.correct} text-success`;\n\n if (correctness === InteractionCorrectness.Incorrect)\n className += ` ${styles.incorrect} text-danger`;\n\n if (correctness === InteractionCorrectness.AwaitingMarking)\n className += ` ${styles.awaitingMarking}`;\n\n if (correctness === InteractionCorrectness.UnAnswered)\n className += ` ${styles.unanswered} text-warning`;\n\n return className;\n}\n\ninterface StudentResultCellProps {\n interaction: Interaction;\n studentResults: StudentResults;\n}\n\nexport function StudentResultCell(props: StudentResultCellProps): JSX.Element {\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(\n props.interaction,\n getStudentResult(props.studentResults)\n );\n\n const svg = getSvg(correctness);\n\n return (\n <div className={getClassName(correctness)}>\n {!!svg && <SvgContainer svg={svg} />}\n {correctness === InteractionCorrectness.AwaitingMarking &&\n <PendingIndicator />\n }\n </div>\n );\n}","import React from 'react';\nimport { CellProps, Column, ColumnInstance, SortingRule } from 'react-table';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { PendingIndicator } from 'libs/shared/apps/analytics/components/pending-indicator/PendingIndicator';\nimport { StudentResultsWithSummary } from 'libs/shared/apps/analytics/interfaces/StudentResultsWithSummary';\nimport { anonymiseUserName } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { getStudentResultsSummary } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { PercentageIndicator, PercentageIndicatorLayout } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { getInteractions } from 'libs/shared/utils/InteractiveHelper';\n\nimport { ViewModelKeys } from 'shared/constants/ReportsViewModels';\n\nimport { InteractionHeaderCell } from './InteractionHeaderCell';\nimport { StudentResultCell } from './StudentResultCell';\n\nimport styles from './student-results-table.module.scss';\n\nconst namespace = 'interactives.studentResultsTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport const RESULTS_COL_WIDTH = 60;\n\ninterface CellWrapperProps {\n className?: string;\n}\n\nfunction CellWrapper(props: React.PropsWithChildren<CellWrapperProps>): JSX.Element {\n return (\n <div className={`d-flex align-items-center p-2 h-100 ${props.className ?? ''}`}>\n {props.children}\n </div>\n );\n}\n\ninterface HeaderCellProps {\n column: ColumnInstance<StudentResultsWithSummary>;\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 useGetFixedColumns(results: InteractiveResultSet): Column<StudentResultsWithSummary>[] {\n const [anonymiseUsers] = useViewModel<boolean>(ViewModelKeys.ANONYMISE_USERS);\n const hasResults = !!results.students?.length;\n\n return React.useMemo(() => {\n const cols: Column<StudentResultsWithSummary>[] = [\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='name' />,\n accessor: 'user',\n Cell: ({ value }) => (\n <CellWrapper>\n <span className='text-truncate'>{anonymiseUserName(value, anonymiseUsers)}</span>\n </CellWrapper>\n ),\n disableSortBy: !hasResults\n },\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='unanswered' />,\n accessor: 'summary.unanswered' as keyof StudentResultsWithSummary,\n sortType: 'basic', // Default is 'alphanumeric' which would treat the numbers as strings\n sortDescFirst: true,\n disableSortBy: !hasResults,\n Cell: ({ value }: CellProps<StudentResultsWithSummary, any>) => <CellWrapper>{value}</CellWrapper>\n },\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='score' />,\n accessor: 'summary',\n id: 'score',\n Cell: ({ value }) => {\n if (value.awaitingMarking) {\n return (\n <CellWrapper>\n <PendingIndicator\n title={getPhrase('markingRequired')}\n className='flex-grow-1'\n showLabel\n />\n </CellWrapper>\n );\n }\n\n return (\n <CellWrapper>\n {`${value.correct}/${value.answered + value.unanswered}`}\n </CellWrapper>\n );\n },\n width: 125,\n sortDescFirst: true,\n disableSortBy: !hasResults\n },\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='percentage' />,\n accessor: 'summary',\n id: 'percentage',\n Cell: ({ value }) => {\n if (value.awaitingMarking) {\n return (\n <CellWrapper>\n <PendingIndicator\n title={getPhrase('markingRequired')}\n className='flex-grow-1'\n showLabel\n />\n </CellWrapper>\n );\n }\n\n return (\n <CellWrapper>\n <PercentageIndicator\n percentage={value.percentCorrect}\n layout={PercentageIndicatorLayout.LabelBefore}\n className='flex-grow-1'\n />\n </CellWrapper>\n );\n },\n width: 125,\n sortDescFirst: true,\n disableSortBy: !hasResults\n }\n ];\n\n return cols;\n }, [ anonymiseUsers, hasResults ]);\n}\n\n/**\n * Returns memoized table columns. To trigger a recalculation, toggle the value of `refreshData`.\n */\nexport function useGetResultColumns(\n interactive: Interactive,\n interactiveMetadata: InteractiveMetadata,\n results: InteractiveResultSet,\n onColumnHover: (index?: number) => void,\n refreshData: boolean\n): Column<StudentResultsWithSummary>[] {\n return React.useMemo(() => {\n const interactions = getInteractions(interactive);\n\n return interactions.map((interaction, index) => {\n const col: Column<StudentResultsWithSummary> = {\n Header: () => {\n return (\n <InteractionHeaderCell\n interaction={interaction}\n results={results}\n interactive={interactive}\n interactiveMetadata={interactiveMetadata}\n interactionNumber={index + 1}\n onMouseEnter={() => onColumnHover(index)}\n onMouseLeave={() => onColumnHover(null)}\n />\n );\n },\n accessor: 'results',\n /**\n * `onSelectStudentResponse` in `StudentResultsTable` expects the column id to the interaction id\n */\n id: interaction.id,\n disableSortBy: true,\n width: RESULTS_COL_WIDTH,\n Cell: ({ row: { original: studentResults } }) => (\n <StudentResultCell interaction={interaction} studentResults={studentResults} />\n )\n };\n return col;\n });\n }, [refreshData]);\n}\n\n/**\n * Returns memoized table data. To trigger a recalculation, toggle the value of `refreshData`.\n */\nexport function useGetResultsTableData(\n interactive: Interactive,\n results: InteractiveResultSet,\n refreshData: boolean,\n sortBy?: SortingRule<StudentResultsWithSummary>\n): StudentResultsWithSummary[] {\n const [anonymiseUsers] = useViewModel<boolean>(ViewModelKeys.ANONYMISE_USERS);\n\n return React.useMemo(() => {\n const students: StudentResultsWithSummary[] = [];\n\n results.students.forEach(s => {\n students.push(({ ...s, summary: getStudentResultsSummary(interactive, s) }));\n });\n\n if (sortBy?.id === 'user') {\n const sorted = ArrayHelper.sortBy(students, student => anonymiseUserName(student.user, anonymiseUsers));\n\n return sortBy.desc ? sorted.reverse() : sorted;\n }\n\n if (sortBy?.id === 'summary.unanswered') {\n const sorted = ArrayHelper.sortBy(students, student => student.summary.unanswered);\n\n return sortBy.desc ? sorted.reverse() : sorted;\n }\n\n if (sortBy?.id === 'score' || sortBy?.id === 'percentage') {\n const sorted = ArrayHelper.sortBy(students, student => {\n if (student.summary.awaitingMarking)\n return -1;\n\n return student.summary.percentCorrect;\n });\n\n return sortBy.desc ? sorted.reverse() : sorted;\n }\n\n return students;\n }, [ refreshData, sortBy, anonymiseUsers ]);\n}\n\nexport function highlightColumns(tableEl: HTMLElement, highlightIndex?: number): void {\n if (!tableEl)\n return;\n\n const rows = tableEl.querySelectorAll(`.${styles.resultsRow}`);\n\n rows?.forEach(row => {\n row.childNodes.forEach((col: HTMLElement, colIdx: number) => {\n col.classList.remove(styles.highlightColumn);\n\n if (colIdx === highlightIndex)\n col.classList.add(styles.highlightColumn);\n });\n });\n}\n\nexport function highlightRows(tableEl: HTMLElement, highlightIndex?: number): void {\n if (!tableEl)\n return;\n\n const rows = tableEl.querySelectorAll(`.${styles.resultsRow}`);\n\n rows?.forEach((row, rowIdx) => {\n row.classList.remove(styles.highlightResultsRow);\n\n if (rowIdx === highlightIndex)\n row.classList.add(styles.highlightResultsRow);\n });\n}"],"names":["getInteraction","timepoint","selectedInteraction","InteractionsBar","props","t","jsx","Fragment","interaction","isSelected","bgClassName","InteractionTypeHelper","left","jsxs","styles","DurationHelper","namespace","getPhrase","LanguageService","getDuration","interactiveMetadata","InteractionResultsSummary","summary","React","getInteractionResultsSummary","InteractionLabel","PercentageIndicator","PercentageIndicatorLayout","InteractionResultsSummaryPopover","interactive","results","popoverProps","ref","Popover","InteractionHeaderCell","OverlayTrigger","_a","MinusSvg","getSvg","correctness","InteractionCorrectness","CheckSvg","CloseSvg","getClassName","className","StudentResultCell","InteractiveCorrectnessHelper","getStudentResult","svg","SvgContainer","PendingIndicator","RESULTS_COL_WIDTH","CellWrapper","HeaderCell","useGetFixedColumns","anonymiseUsers","useViewModel","ViewModelKeys","hasResults","column","value","anonymiseUserName","useGetResultColumns","onColumnHover","refreshData","getInteractions","index","studentResults","useGetResultsTableData","sortBy","students","s","getStudentResultsSummary","sorted","ArrayHelper","student","highlightColumns","tableEl","highlightIndex","rows","row","col","colIdx","highlightRows","rowIdx"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as c,bC as s,v as y,e as T}from"./app-5iiM5qQY.js";import{a as D,H as Y,b as C}from"./DvV9e2O3.chunk.js";import{m as _,u as x}from"./k_p1R4KR.chunk.js";const A="_chartContainer_aj1wj_1",j="_heading_aj1wj_4",H="_partialHeading_aj1wj_9",u={chartContainer:A,heading:j,partialHeading:H};function v(){return c.jsx("div",{className:`partial-loading-background mb-2 ${u.partialHeading}`})}const p=45,m={MONTH:35,YEAR:365},g={day:"YYYY-MM-DD",month:"YYYY-MM",year:"YYYY"},O={day:"D MMM",month:"MMM",year:"YYYY"},M={enabled:!0,align:"right",verticalAlign:"top",floating:!0,y:-p},b={title:{text:null},credits:{enabled:!1},yAxis:{title:{text:null},min:0,minRange:10,minPadding:0,maxPadding:.02,endOnTick:!1},chart:{backgroundColor:"transparent",spacing:[p,0,0,4]},plotOptions:{series:{stacking:"normal"}}};function N(a){const t=s.diffBetween(a.end,a.start,"day");return t>m.YEAR?"year":t>m.MONTH?"month":"day"}function R(a,t){const r=[];let n=s.format(a.start,g[t]);do r.push(n),n=s.format(s.add(n,1,t),g[t]);while(!s.isAfter(n,a.end,t));return r}function P(a,t,r){const n=N(r),l=R(r,n),i={};a.forEach(e=>{if(!e.userType)return;const o=s.format(s.convertUTCToLocal(t(e)),g[n]);i[e.userType]=i[e.userType]??{},i[e.userType][o]=i[e.userType][o]??0,i[e.userType][o]+=e.count});const d=Object.keys(i),f=d.length?y.sortBy(d.map(e=>({name:D(e),type:"column",data:l.map(o=>i[e][o]??0)})),"name"):[{type:"column",data:l.map(()=>0)}],h={...M};return d.length||(h.enabled=!1),{categories:l.map(e=>s.format(e,O[n])),legendOptions:h,seriesData:_(f)}}function E(a,t,r){const n=P(a,t,r);return{...b,xAxis:{categories:n.categories},legend:n.legendOptions,series:n.seriesData}}function G(a){const t=T();return x(),c.jsxs("div",{className:"position-relative h-100",children:[c.jsx("h3",{className:`h6 ${u.heading}`,children:a.title}),!!t&&c.jsx(Y,{highcharts:C,options:E(a.events,a.getEventDate,t),containerProps:{className:`${u.chartContainer} position-absolute w-100 h-100`}})]})}export{v as P,G as U};
|
|
2
|
-
//# sourceMappingURL=B9I2jvNY.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"B9I2jvNY.chunk.js","sources":["../../src/shared/components/user-activity-bar-chart/PartialUserActivityBarChart.tsx","../../src/shared/components/user-activity-bar-chart/UserActivityBarChartConstants.ts","../../src/shared/components/user-activity-bar-chart/UserActivityBarChartUtils.ts","../../src/shared/components/user-activity-bar-chart/UserActivityBarChart.tsx"],"sourcesContent":["import React from 'react';\n\nimport styles from './user-activity-bar-chart.module.scss';\n\nexport function PartialUserActivityBarChart(): JSX.Element {\n return (\n <div className={`partial-loading-background mb-2 ${styles.partialHeading}`} />\n );\n}","import Highcharts from 'highcharts';\n\nconst CHART_PADDING_TOP = 45;\n\nexport const GroupByThresholds = {\n MONTH: 35,\n YEAR: 365\n};\n\nexport const DateFormats = {\n day: 'YYYY-MM-DD',\n month: 'YYYY-MM',\n year: 'YYYY'\n};\n\nexport const DisplayFormats = {\n day: 'D MMM',\n month: 'MMM',\n year: 'YYYY'\n};\n\nexport const DEFAULT_LEGEND_OPTIONS: Highcharts.LegendOptions = {\n enabled: true,\n align: 'right',\n verticalAlign: 'top',\n floating: true,\n y: -CHART_PADDING_TOP\n};\n\nexport const STATIC_CHART_OPTIONS: Highcharts.Options = {\n title: {\n text: null\n },\n credits: {\n enabled: false\n },\n yAxis: {\n title: {\n text: null\n },\n min: 0,\n minRange: 10,\n minPadding: 0,\n maxPadding: 0.02,\n endOnTick: false\n },\n chart: {\n backgroundColor: 'transparent',\n spacing: [ CHART_PADDING_TOP, 0, 0, 4 ]\n },\n plotOptions: {\n series: {\n stacking: 'normal'\n }\n }\n};","import Highcharts from 'highcharts';\n\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { BaseAnalyticsEvent } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { mixinSeriesColours } from 'libs/shared/apps/analytics/utils/ChartColourUtils';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { AnalyticsRequestFilter } from 'libs/shared/interfaces';\n\nimport { mapUserTypeToChartLabel } from 'shared/utils/UserUtils';\n\nimport { DateFormats, DEFAULT_LEGEND_OPTIONS, DisplayFormats, GroupByThresholds, STATIC_CHART_OPTIONS } from './UserActivityBarChartConstants';\n\ntype GroupBy = 'day' | 'month' | 'year';\n\ninterface ChartData {\n categories: string[];\n legendOptions: Highcharts.LegendOptions;\n seriesData: Highcharts.SeriesColumnOptions[];\n}\n\nfunction getGroupBy(requestFilter: AnalyticsRequestFilter): GroupBy {\n const range = DateHelper.diffBetween(requestFilter.end, requestFilter.start, 'day');\n\n if (range > GroupByThresholds.YEAR)\n return 'year';\n\n if (range > GroupByThresholds.MONTH)\n return 'month';\n\n return 'day';\n}\n\nfunction getFullDateRange(requestFilter: AnalyticsRequestFilter, groupBy: GroupBy): string[] {\n const range: string[] = [];\n\n let currentDate = DateHelper.format(requestFilter.start, DateFormats[groupBy]);\n\n do {\n range.push(currentDate);\n currentDate = DateHelper.format(DateHelper.add(currentDate, 1, groupBy), DateFormats[groupBy]);\n } while (!DateHelper.isAfter(currentDate, requestFilter.end, groupBy));\n\n return range;\n}\n\nfunction getChartData<T extends BaseAnalyticsEvent>(\n events: T[],\n getEventDate: (ev: T) => string,\n requestFilter: AnalyticsRequestFilter\n): ChartData {\n const groupBy = getGroupBy(requestFilter);\n const fullDateRange = getFullDateRange(requestFilter, groupBy);\n\n /**\n * e.g. { 'staff': { '2021-01-01': 2, '2021-01-02': 4 }, 'learner': { '2021-01-01': 10, '2021-01-04': 40 }}\n */\n const grouped: HashObject<HashObject<number>> = {};\n\n events.forEach(ev => {\n if (!ev.userType)\n return;\n\n const eventDate = DateHelper.format(DateHelper.convertUTCToLocal(getEventDate(ev)), DateFormats[groupBy]);\n\n grouped[ev.userType] = grouped[ev.userType] ?? {};\n grouped[ev.userType][eventDate] = grouped[ev.userType][eventDate] ?? 0;\n grouped[ev.userType][eventDate] += ev.count;\n });\n\n const roles = Object.keys(grouped) as UserGroup[];\n\n const seriesData: Highcharts.SeriesColumnOptions[] = roles.length\n ? ArrayHelper.sortBy(roles.map(r => ({\n name: mapUserTypeToChartLabel(r),\n type: 'column',\n data: fullDateRange.map(d => grouped[r][d] ?? 0)\n })), 'name')\n : [{\n type: 'column',\n data: fullDateRange.map(() => 0)\n }];\n\n const legendOptions = { ...DEFAULT_LEGEND_OPTIONS };\n\n if (!roles.length)\n legendOptions.enabled = false;\n\n return {\n categories: fullDateRange.map(d => DateHelper.format(d, DisplayFormats[groupBy])),\n legendOptions,\n seriesData: mixinSeriesColours(seriesData)\n };\n}\n\nexport function getChartOptions<T extends BaseAnalyticsEvent>(\n events: T[],\n getEventDate: (ev: T) => string,\n requestFilter: AnalyticsRequestFilter\n): Highcharts.Options {\n const data = getChartData(events, getEventDate, requestFilter);\n\n return {\n ...STATIC_CHART_OPTIONS,\n xAxis: {\n categories: data.categories\n },\n legend: data.legendOptions,\n series: data.seriesData\n };\n}","import React from 'react';\nimport Highcharts from 'highcharts';\nimport HighchartsReact from 'highcharts-react-official';\n\nimport { BaseAnalyticsEvent } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\n\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { useListenToNavState } from 'shared/hooks/UseListenToNavState';\n\nimport { getChartOptions } from './UserActivityBarChartUtils';\n\nimport styles from './user-activity-bar-chart.module.scss';\n\ninterface UserActivityBarChartProps<T extends BaseAnalyticsEvent> {\n events: T[];\n getEventDate: (ev: T) => string;\n title: string;\n}\n\nexport function UserActivityBarChart<T extends BaseAnalyticsEvent>(props: UserActivityBarChartProps<T>): JSX.Element {\n const requestFilter = useGetRequestFilter();\n useListenToNavState();\n\n return (\n <div className='position-relative h-100'>\n <h3 className={`h6 ${styles.heading}`}>{props.title}</h3>\n {!!requestFilter &&\n <HighchartsReact\n highcharts={Highcharts}\n options={getChartOptions(props.events, props.getEventDate, requestFilter)}\n containerProps={{\n className: `${styles.chartContainer} position-absolute w-100 h-100`\n }}\n />\n }\n </div>\n );\n}"],"names":["PartialUserActivityBarChart","styles","CHART_PADDING_TOP","GroupByThresholds","DateFormats","DisplayFormats","DEFAULT_LEGEND_OPTIONS","STATIC_CHART_OPTIONS","getGroupBy","requestFilter","range","DateHelper","getFullDateRange","groupBy","currentDate","getChartData","events","getEventDate","fullDateRange","grouped","ev","eventDate","roles","seriesData","ArrayHelper","r","mapUserTypeToChartLabel","d","legendOptions","mixinSeriesColours","getChartOptions","data","UserActivityBarChart","props","useGetRequestFilter","useListenToNavState","jsxs","jsx","HighchartsReact","Highcharts"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as a}from"./app-5iiM5qQY.js";function o(r){return a.jsx("svg",{...r,children:a.jsx("path",{fill:"currentColor",d:"M4 5.5A1.5 1.5 0 0 1 5.5 4h9A1.5 1.5 0 0 1 16 5.5v1a.5.5 0 0 1-1 0v-1a.5.5 0 0 0-.5-.5h-9a.5.5 0 0 0-.5.5V15a.5.5 0 0 0 .5.5h1a.5.5 0 0 1 0 1h-1A1.5 1.5 0 0 1 4 15zM7.5 9A1.5 1.5 0 0 1 9 7.5h9.5A1.5 1.5 0 0 1 20 9v9.5a1.5 1.5 0 0 1-1.5 1.5H9a1.5 1.5 0 0 1-1.5-1.5zM9 8.5a.5.5 0 0 0-.5.5v9.5a.5.5 0 0 0 .5.5h9.5a.5.5 0 0 0 .5-.5V9a.5.5 0 0 0-.5-.5z"})})}export{o as C};
|
|
2
|
-
//# sourceMappingURL=B9IzwFHp.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"B9IzwFHp.chunk.js","sources":["../../../../libs/shared/src/images/svg/actions/CopySvg.tsx"],"sourcesContent":["import React from 'react';\n\nexport function CopySvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M4 5.5A1.5 1.5 0 0 1 5.5 4h9A1.5 1.5 0 0 1 16 5.5v1a.5.5 0 0 1-1 0v-1a.5.5 0 0 0-.5-.5h-9a.5.5 0 0 0-.5.5V15a.5.5 0 0 0 .5.5h1a.5.5 0 0 1 0 1h-1A1.5 1.5 0 0 1 4 15zM7.5 9A1.5 1.5 0 0 1 9 7.5h9.5A1.5 1.5 0 0 1 20 9v9.5a1.5 1.5 0 0 1-1.5 1.5H9a1.5 1.5 0 0 1-1.5-1.5zM9 8.5a.5.5 0 0 0-.5.5v9.5a.5.5 0 0 0 .5.5h9.5a.5.5 0 0 0 .5-.5V9a.5.5 0 0 0-.5-.5z'\n />\n </svg>\n );\n}\n"],"names":["CopySvg","props","jsx"],"mappings":"sCAEO,SAASA,EAAQC,EAAsC,CAC5D,OACEC,EAAAA,IAAC,MAAA,CAAK,GAAGD,EACP,SAAAC,EAAAA,IAAC,OAAA,CACC,KAAK,eACL,EAAE,6VAAA,CAAA,EAEN,CAEJ"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as e,O as o,bE as j,L as m,e as g,u as f,T as y,a as T}from"./app-5iiM5qQY.js";import{T as d}from"./BlUKEHqx.chunk.js";import{u as S,b as N}from"./DFlfmBPU.chunk.js";import{u as _}from"./BxBPX67V.chunk.js";import{S as E,a as L}from"./DlxDC-9E.chunk.js";import{T as l}from"./DKEdZyAE.chunk.js";import{C as R,V as b}from"./BLIHpHXi.chunk.js";import{C as n}from"./DvV9e2O3.chunk.js";import{V as I}from"./BLSeaGtL.chunk.js";import{S as O}from"./DT1lPNaD.chunk.js";import"./sFV5nxD4.chunk.js";import"./C8oA7_zY.chunk.js";import"./Ddy6mQmA.chunk.js";import"./BLuY6AYO.chunk.js";import"./BihcsiRl.chunk.js";import"./CP2i5uhZ.chunk.js";import"./Cn0ghy_D.chunk.js";import"./DNP9cLqQ.chunk.js";import"./DMd0fZar.chunk.js";import"./SA1hxE7y.chunk.js";import"./BqY3bZyH.chunk.js";import"./Cs1UnwSi.chunk.js";const P="_image_1a110_1",B={image:P},$="reportsShared.totalViewsByContentCardEmptyState",p=m.encloseNamespace($);function A(){return e.jsxs(o,{className:"flex-grow-1 justify-content-center",children:[e.jsx(o.Image,{src:j.EmptyStates.Shared.PuzzleGroup,className:B.image}),e.jsx(o.Heading,{className:"h6",children:p("heading")}),e.jsx(o.Info,{className:"w-100",children:p("description")})]})}const h="reportsShared.videoViewsByContentCard",c=m.encloseNamespace(h);function G(){const x=g(),C=f(I.aggregation("content_type",x));function V(a){switch(a){case"ClickView content":return n.YELLOW;case"TV content":return n.PURPLE;case"User generated content":return n.GREEN}}function w(a){switch(a){case"ClickView content":return c("clickview");case"TV content":return c("tv");case"User generated content":return c("userGenerated")}}function v(a){return a?a.filter(t=>t.name==="ClickView content"||t.name==="TV content"||t.name==="User generated content").map(t=>({name:w(t.name),y:t.count,color:V(t.name)})):null}const r=v(C.data);return e.jsx("div",{className:"d-flex flex-column h-100 bg-white rounded p-3",children:r?e.jsxs(e.Fragment,{children:[e.jsx("h2",{className:"h6 mb-3",children:e.jsx(y,{namespace:h,phrase:"videoViews"})}),r.length?e.jsx(R,{data:r}):e.jsx(A,{})]}):e.jsx("div",{className:"partial-loading-background w-25",children:" "})})}const U="_column1_1s749_1",k="_column2_1s749_4",F="_videoViewsCard_1s749_7",s={column1:U,column2:k,videoViewsCard:F},H="videos.schoolVideoOverview",i=m.encloseNamespace(H),u=50;function pe(){return T({title:i("videos")}),_(i("videos")),S(N()),e.jsxs("div",{children:[e.jsx(O,{}),e.jsxs("div",{className:"d-flex gap-3",children:[e.jsxs("div",{className:`d-flex flex-column gap-3 ${s.column1}`,children:[e.jsx("div",{className:s.videoViewsCard,children:e.jsx(E,{type:"year_group"})}),e.jsx("div",{className:s.videoViewsCard,children:e.jsx(b,{})}),e.jsx("div",{className:s.videoViewsCard,children:e.jsx(G,{})})]}),e.jsxs("div",{className:`d-flex flex-column gap-3 ${s.column2}`,children:[e.jsx("div",{className:s.videoViewsCard,children:e.jsx(L,{type:"user_type"})}),e.jsx("div",{className:s.videoViewsCard,children:e.jsx(l,{type:d.RootTopic,heading:i("totalViewsSubject"),emptyStateText:i("emptySubjects"),limit:u})}),e.jsx("div",{className:s.videoViewsCard,children:e.jsx(l,{type:d.ChildTopic,heading:i("totalViewsTopic"),emptyStateText:i("emptyTopics"),limit:u})})]})]})]})}export{pe as SchoolVideoOverviewView};
|
|
2
|
-
//# sourceMappingURL=BBGDjrt-.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BBGDjrt-.chunk.js","sources":["../../src/shared/views/overview-cards/video-views-by-content-card/empty-state/TotalViewsByContentCardEmptyState.tsx","../../src/shared/views/overview-cards/video-views-by-content-card/VideoViewsByContentCard.tsx","../../src/apps/videos/views/school-video-overview/SchoolVideoOverviewView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nimport { ImageUrls } from 'shared/constants/ReportsImageUrls';\n\nimport styles from './total-views-by-content-card-empty-state.module.scss';\n\nconst namespace = 'reportsShared.totalViewsByContentCardEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function TotalViewsByContentCardEmptyState() {\n return (\n <EmptyState className='flex-grow-1 justify-content-center'>\n <EmptyState.Image\n src={ImageUrls.EmptyStates.Shared.PuzzleGroup}\n className={styles.image}\n />\n <EmptyState.Heading className='h6'>\n {getPhrase('heading')}\n </EmptyState.Heading>\n <EmptyState.Info className='w-100'>\n {getPhrase('description')}\n </EmptyState.Info>\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { ColumnChart } from 'shared/components/column-chart/ColumnChart';\nimport { CHART_COLOUR } from 'shared/constants/ChartStyles';\nimport { VideoViewsV2Requests } from 'shared/flight-requests/VideoViewsV2Requests';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { TotalViewsByContentCardEmptyState } from 'shared/views/overview-cards/video-views-by-content-card/empty-state/TotalViewsByContentCardEmptyState';\n\nconst namespace = 'reportsShared.videoViewsByContentCard';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nenum ContentType {\n ClickView = 'ClickView content',\n TV = 'TV content',\n UserGenerated = 'User generated content'\n}\n\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function VideoViewsByContentCardView() {\n const requestFilter = useGetRequestFilter();\n\n const contentTypeCount = Flight.useBasicFetch<GroupedAnalyticsCount[]>(\n VideoViewsV2Requests.aggregation('content_type', requestFilter)\n );\n\n function mapContentTypeToChartColour(contentType: string) {\n switch (contentType) {\n case ContentType.ClickView: return CHART_COLOUR.YELLOW;\n case ContentType.TV: return CHART_COLOUR.PURPLE;\n case ContentType.UserGenerated: return CHART_COLOUR.GREEN;\n }\n }\n\n function mapContentTypeToLabel(contentType: string) {\n switch (contentType) {\n case ContentType.ClickView: return getPhrase('clickview');\n case ContentType.TV: return getPhrase('tv');\n case ContentType.UserGenerated: return getPhrase('userGenerated');\n }\n }\n\n function getChartData(contentTypeCount: GroupedAnalyticsCount[]) {\n if (!contentTypeCount) return null;\n\n const mappedGroups = contentTypeCount.filter(group => (\n group.name === ContentType.ClickView ||\n group.name === ContentType.TV ||\n group.name === ContentType.UserGenerated\n )).map(group => ({\n name: mapContentTypeToLabel(group.name),\n y: group.count,\n color: mapContentTypeToChartColour(group.name)\n }));\n\n return mappedGroups;\n }\n\n const chartData = getChartData(contentTypeCount.data);\n\n return (\n <div className='d-flex flex-column h-100 bg-white rounded p-3'>\n {chartData ?\n <>\n <h2 className='h6 mb-3'><Text namespace={namespace} phrase='videoViews' /></h2>\n\n {chartData.length ?\n <ColumnChart data={chartData} />\n : <TotalViewsByContentCardEmptyState />\n }\n </>\n : <div className='partial-loading-background w-25'> </div>\n }\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\n\nimport { TopicAnalyticsType } from 'shared/enums/TopicAnalyticsType';\nimport { useSetHeaderActions } from 'shared/hooks/UseSetHeaderActions';\nimport { useSetHeaderTitle } from 'shared/hooks/UseSetHeaderTitle';\nimport { getVideoHeaderActions } from 'shared/utils/HeaderActionUtils';\nimport { StreamsBarChartCardView } from 'shared/views/overview-cards/streams-bar-chart-card/StreamsBarChartCardView';\nimport { StreamsChartCardView } from 'shared/views/overview-cards/streams-chart-card/StreamsChartCardView';\nimport { TopClassificationsCardView } from 'shared/views/overview-cards/top-classifications-card/TopClassificationsCardView';\nimport { VideoViewsByContentCardView } from 'shared/views/overview-cards/video-views-by-content-card/VideoViewsByContentCard';\nimport { VideoViewsByRoleCardView } from 'shared/views/overview-cards/video-views-by-role-card/VideoViewsByRoleCardView';\n\nimport { SchoolVideosNav } from 'apps/videos/components/school-videos-nav/SchoolVideosNav';\n\nimport styles from './school-video-overview.module.scss';\n\nconst namespace = 'videos.schoolVideoOverview';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst TOP_CLASSIFICATIONS_LIMIT = 50;\n\nexport function SchoolVideoOverviewView(): JSX.Element {\n useSetPageMetadata({ title: getPhrase('videos') });\n useSetHeaderTitle(getPhrase('videos'));\n useSetHeaderActions(getVideoHeaderActions());\n\n return (\n <div>\n <SchoolVideosNav />\n <div className='d-flex gap-3'>\n <div className={`d-flex flex-column gap-3 ${styles.column1}`}>\n <div className={styles.videoViewsCard}>\n <StreamsBarChartCardView type='year_group' />\n </div>\n <div className={styles.videoViewsCard}>\n <VideoViewsByRoleCardView />\n </div>\n <div className={styles.videoViewsCard}>\n <VideoViewsByContentCardView />\n </div>\n </div>\n <div className={`d-flex flex-column gap-3 ${styles.column2}`}>\n <div className={styles.videoViewsCard}>\n <StreamsChartCardView type='user_type' />\n </div>\n <div className={styles.videoViewsCard}>\n <TopClassificationsCardView\n type={TopicAnalyticsType.RootTopic}\n heading={getPhrase('totalViewsSubject')}\n emptyStateText={getPhrase('emptySubjects')}\n limit={TOP_CLASSIFICATIONS_LIMIT}\n />\n </div>\n <div className={styles.videoViewsCard}>\n <TopClassificationsCardView\n type={TopicAnalyticsType.ChildTopic}\n heading={getPhrase('totalViewsTopic')}\n emptyStateText={getPhrase('emptyTopics')}\n limit={TOP_CLASSIFICATIONS_LIMIT}\n />\n </div>\n </div>\n </div>\n </div>\n );\n}"],"names":["namespace","getPhrase","LanguageService","TotalViewsByContentCardEmptyState","jsxs","EmptyState","jsx","ImageUrls","styles","VideoViewsByContentCardView","requestFilter","useGetRequestFilter","contentTypeCount","Flight.useBasicFetch","VideoViewsV2Requests","mapContentTypeToChartColour","contentType","CHART_COLOUR","mapContentTypeToLabel","getChartData","group","chartData","Fragment","Text","ColumnChart","TOP_CLASSIFICATIONS_LIMIT","SchoolVideoOverviewView","useSetPageMetadata","useSetHeaderTitle","useSetHeaderActions","getVideoHeaderActions","SchoolVideosNav","StreamsBarChartCardView","VideoViewsByRoleCardView","StreamsChartCardView","TopClassificationsCardView","TopicAnalyticsType"],"mappings":"00BAUMA,EAAY,kDACZC,EAAYC,EAAgB,iBAAiBF,CAAS,EAErD,SAASG,GAAoC,CAClD,OACEC,EAAAA,KAACC,EAAA,CAAW,UAAU,qCACpB,SAAA,CAAAC,EAAAA,IAACD,EAAW,MAAX,CACC,IAAKE,EAAU,YAAY,OAAO,YAClC,UAAWC,EAAO,KAAA,CAAA,EAEpBF,MAACD,EAAW,QAAX,CAAmB,UAAU,KAC3B,SAAAJ,EAAU,SAAS,EACtB,EACAK,MAACD,EAAW,KAAX,CAAgB,UAAU,QACxB,SAAAJ,EAAU,aAAa,CAAA,CAC1B,CAAA,EACF,CAEJ,CCdA,MAAMD,EAAY,wCACZC,EAAYC,EAAgB,iBAAiBF,CAAS,EAUrD,SAASS,GAA8B,CAC5C,MAAMC,EAAgBC,EAAA,EAEhBC,EAAmBC,EACvBC,EAAqB,YAAY,eAAgBJ,CAAa,CAAA,EAGhE,SAASK,EAA4BC,EAAqB,CACxD,OAAQA,EAAA,CACN,IAAK,oBAAuB,OAAOC,EAAa,OAChD,IAAK,aAAgB,OAAOA,EAAa,OACzC,IAAK,yBAA2B,OAAOA,EAAa,KAAA,CAExD,CAEA,SAASC,EAAsBF,EAAqB,CAClD,OAAQA,EAAA,CACN,IAAK,oBAAuB,OAAOf,EAAU,WAAW,EACxD,IAAK,aAAgB,OAAOA,EAAU,IAAI,EAC1C,IAAK,yBAA2B,OAAOA,EAAU,eAAe,CAAA,CAEpE,CAEA,SAASkB,EAAaP,EAA2C,CAC/D,OAAKA,EAEgBA,EAAiB,OAAOQ,GAC3CA,EAAM,OAAS,qBACfA,EAAM,OAAS,cACfA,EAAM,OAAS,0BACd,IAAIA,IAAU,CACf,KAAMF,EAAsBE,EAAM,IAAI,EACtC,EAAGA,EAAM,MACT,MAAOL,EAA4BK,EAAM,IAAI,CAAA,EAC7C,EAV4B,IAahC,CAEA,MAAMC,EAAYF,EAAaP,EAAiB,IAAI,EAEpD,OACEN,MAAC,MAAA,CAAI,UAAU,gDACZ,WACCF,EAAAA,KAAAkB,WAAA,CACE,SAAA,CAAAhB,EAAAA,IAAC,KAAA,CAAG,UAAU,UAAU,SAAAA,EAAAA,IAACiB,aAAKvB,EAAsB,OAAO,aAAa,CAAA,CAAE,EAEzEqB,EAAU,OACTf,EAAAA,IAACkB,EAAA,CAAY,KAAMH,EAAW,QAC3BlB,EAAA,CAAA,CAAkC,CAAA,EAEzC,EACEG,MAAC,MAAA,CAAI,UAAU,kCAAkC,aAAM,EAE7D,CAEJ,sHC7DMN,EAAY,6BACZC,EAAYC,EAAgB,iBAAiBF,CAAS,EAEtDyB,EAA4B,GAE3B,SAASC,IAAuC,CACrD,OAAAC,EAAmB,CAAE,MAAO1B,EAAU,QAAQ,EAAG,EACjD2B,EAAkB3B,EAAU,QAAQ,CAAC,EACrC4B,EAAoBC,GAAuB,SAGxC,MAAA,CACC,SAAA,CAAAxB,EAAAA,IAACyB,EAAA,EAAgB,EACjB3B,EAAAA,KAAC,MAAA,CAAI,UAAU,eACb,SAAA,CAAAA,OAAC,MAAA,CAAI,UAAW,4BAA4BI,EAAO,OAAO,GACxD,SAAA,CAAAF,EAAAA,IAAC,MAAA,CAAI,UAAWE,EAAO,eACrB,eAACwB,EAAA,CAAwB,KAAK,aAAa,CAAA,CAC7C,QACC,MAAA,CAAI,UAAWxB,EAAO,eACrB,SAAAF,MAAC2B,IAAyB,EAC5B,QACC,MAAA,CAAI,UAAWzB,EAAO,eACrB,SAAAF,EAAAA,IAACG,IAA4B,CAAA,CAC/B,CAAA,EACF,SACC,MAAA,CAAI,UAAW,4BAA4BD,EAAO,OAAO,GACxD,SAAA,CAAAF,EAAAA,IAAC,MAAA,CAAI,UAAWE,EAAO,eACrB,eAAC0B,EAAA,CAAqB,KAAK,YAAY,CAAA,CACzC,EACA5B,EAAAA,IAAC,MAAA,CAAI,UAAWE,EAAO,eACrB,SAAAF,EAAAA,IAAC6B,EAAA,CACC,KAAMC,EAAmB,UACzB,QAASnC,EAAU,mBAAmB,EACtC,eAAgBA,EAAU,eAAe,EACzC,MAAOwB,CAAA,CAAA,EAEX,EACAnB,EAAAA,IAAC,MAAA,CAAI,UAAWE,EAAO,eACrB,SAAAF,EAAAA,IAAC6B,EAAA,CACC,KAAMC,EAAmB,WACzB,QAASnC,EAAU,iBAAiB,EACpC,eAAgBA,EAAU,aAAa,EACvC,MAAOwB,CAAA,CAAA,CACT,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,EACF,CAEJ"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a,L as t,j as o}from"./app-5iiM5qQY.js";import{u as e}from"./BxBPX67V.chunk.js";import{V as i}from"./DAajosqn.chunk.js";import{V as m}from"./8CNwntVY.chunk.js";import{T as p,a as c,b as n}from"./DnhffgUu.chunk.js";import"./C0Ak1kpS.chunk.js";import"./sFV5nxD4.chunk.js";import"./DNP9cLqQ.chunk.js";import"./DMd0fZar.chunk.js";import"./C6UUJ8P5.chunk.js";import"./BvArNs1K.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";import"./BIIsc-MA.chunk.js";import"./CEy1YX0b.chunk.js";import"./C8oA7_zY.chunk.js";import"./EBNeK_uD.chunk.js";import"./D9oCeDYw.chunk.js";import"./BqY3bZyH.chunk.js";import"./Cs1UnwSi.chunk.js";import"./DO-V6YKu.chunk.js";import"./BLuY6AYO.chunk.js";import"./CP2i5uhZ.chunk.js";import"./Cn0ghy_D.chunk.js";import"./LT6WE6TB.chunk.js";import"./Cl1c9Acb.chunk.js";import"./CbBaa9Aj.chunk.js";import"./CTMVj7AR.chunk.js";const d="_column1_kdgy5_1",l="_column2_kdgy5_4",h="_column3_kdgy5_7",u="_pieChart_kdgy5_11",x="_barChart_kdgy5_14",_="_topSearches_kdgy5_17",C="_topTopics_kdgy5_20",r={column1:d,column2:l,column3:h,pieChart:u,barChart:x,topSearches:_,topTopics:C},j="reportsDashboard.adminOverviewDashboard",s=t.encloseNamespace(j);function X(){return a({title:s("dashboard")}),e(s("dashboard")),o.jsx("div",{children:o.jsxs("div",{className:"d-flex",children:[o.jsxs("div",{className:`d-flex flex-column ${r.column1}`,children:[o.jsx("div",{className:"pb-3",children:o.jsx(m,{className:r.pieChart})}),o.jsx(p,{className:r.topSearches})]}),o.jsx("div",{className:`${r.column2} px-3`,children:o.jsx(c,{})}),o.jsxs("div",{className:`d-flex flex-column ${r.column3}`,children:[o.jsx("div",{className:"pb-3",children:o.jsx(i,{className:r.barChart})}),o.jsx(n,{className:r.topTopics})]})]})})}export{X as AdminOverviewDashboardView};
|
|
2
|
-
//# sourceMappingURL=BHZ8VWq7.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BHZ8VWq7.chunk.js","sources":["../../src/apps/dashboard/views/admin-overview-dashboard/AdminOverviewDashboardView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\n\nimport { useSetHeaderTitle } from 'shared/hooks/UseSetHeaderTitle';\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 { TopSearchesCardView } from 'apps/dashboard/views/overview-cards/top-searches/TopSearchesCardView';\nimport { TopTopicsCardView } from 'apps/dashboard/views/overview-cards/top-topics/TopTopicsCardView';\nimport { TopVideosCardView } from 'apps/dashboard/views/overview-cards/top-videos/TopVideosCardView';\n\nimport styles from './admin-overview-dashboard.module.scss';\n\nconst namespace = 'reportsDashboard.adminOverviewDashboard';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function AdminOverviewDashboardView(): JSX.Element {\n useSetPageMetadata({ title: getPhrase('dashboard') });\n useSetHeaderTitle(getPhrase('dashboard'));\n\n return (\n <div>\n <div className='d-flex'>\n <div className={`d-flex flex-column ${styles.column1}`}>\n <div className='pb-3'>\n <ViewCountPieChartCardView className={styles.pieChart} />\n </div>\n <TopSearchesCardView className={styles.topSearches} />\n </div>\n <div className={`${styles.column2} px-3`}>\n <TopVideosCardView />\n </div>\n <div className={`d-flex flex-column ${styles.column3}`}>\n <div className='pb-3'>\n <ViewCountBarChartCardView className={styles.barChart} />\n </div>\n <TopTopicsCardView className={styles.topTopics} />\n </div>\n </div>\n </div>\n );\n}"],"names":["namespace","getPhrase","LanguageService","AdminOverviewDashboardView","useSetPageMetadata","useSetHeaderTitle","jsx","jsxs","styles","ViewCountPieChartCardView","TopSearchesCardView","TopVideosCardView","ViewCountBarChartCardView","TopTopicsCardView"],"mappings":"wsCAgBMA,EAAY,0CACZC,EAAYC,EAAgB,iBAAiBF,CAAS,EAErD,SAASG,GAA0C,CACxD,OAAAC,EAAmB,CAAE,MAAOH,EAAU,WAAW,EAAG,EACpDI,EAAkBJ,EAAU,WAAW,CAAC,EAGtCK,EAAAA,IAAC,MAAA,CACC,SAAAC,EAAAA,KAAC,MAAA,CAAI,UAAU,SACb,SAAA,CAAAA,OAAC,MAAA,CAAI,UAAW,sBAAsBC,EAAO,OAAO,GAClD,SAAA,CAAAF,EAAAA,IAAC,MAAA,CAAI,UAAU,OACb,SAAAA,EAAAA,IAACG,GAA0B,UAAWD,EAAO,SAAU,CAAA,CACzD,EACAF,EAAAA,IAACI,EAAA,CAAoB,UAAWF,EAAO,WAAA,CAAa,CAAA,EACtD,EACAF,EAAAA,IAAC,OAAI,UAAW,GAAGE,EAAO,OAAO,QAC/B,SAAAF,EAAAA,IAACK,EAAA,CAAA,CAAkB,CAAA,CACrB,SACC,MAAA,CAAI,UAAW,sBAAsBH,EAAO,OAAO,GAClD,SAAA,CAAAF,EAAAA,IAAC,MAAA,CAAI,UAAU,OACb,SAAAA,EAAAA,IAACM,GAA0B,UAAWJ,EAAO,SAAU,CAAA,CACzD,EACAF,EAAAA,IAACO,EAAA,CAAkB,UAAWL,EAAO,SAAA,CAAW,CAAA,CAAA,CAClD,CAAA,CAAA,CACF,CAAA,CACF,CAEJ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BIIsc-MA.chunk.js","sources":["../../../../libs/shared/src/components/emoji-text/EmojiText.tsx"],"sourcesContent":["import React from 'react';\n\nimport styles from './emoji-text.module.scss';\n\ninterface EmojiTextProps {\n emoji: string;\n}\n\nexport function EmojiText(props: React.PropsWithChildren<EmojiTextProps>): JSX.Element {\n return (\n <>\n <span className={styles.emoji}>{props.emoji}</span>\n {props.children}\n </>\n );\n}"],"names":["EmojiText","props","jsxs","Fragment","jsx","styles"],"mappings":"2EAQO,SAASA,EAAUC,EAA6D,CACrF,OACEC,EAAAA,KAAAC,WAAA,CACE,SAAA,CAAAC,MAAC,OAAA,CAAK,UAAWC,EAAO,MAAQ,WAAM,MAAM,EAC3CJ,EAAM,QAAA,EACT,CAEJ"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{d as C,j as n,A as o,g as r,L as d,bF as E,e as T,u as N,bY as v,p as k,bZ as A,bQ as j,O as c,bE as y}from"./app-5iiM5qQY.js";import{S as x}from"./SA1hxE7y.chunk.js";import{u as F}from"./DJzpw8qX.chunk.js";import{S as b}from"./DTotSVIi.chunk.js";const P="reportsInteractives.interactiveNav",i=d.encloseNamespace(P);function D(e,t,s){const a=[e];return[{label:i("overview"),appLink:{application:r.INTERACTIVES,action:o.Interactives.OVERVIEW,args:a,params:t}},...s?[]:[{label:i("results"),appLink:{application:r.INTERACTIVES,action:o.Interactives.RESULTS,args:a,params:t}},{label:i("questions"),appLink:{application:r.INTERACTIVES,action:o.Interactives.QUESTION_LIST,args:a,params:t}}],{label:i("engagement"),appLink:{application:r.INTERACTIVES,action:o.Interactives.ENGAGEMENT,args:a,params:t}}]}function U(e){const t=C(),s=D(e.interactiveMetadataId,t,e.hasInsights);return n.jsx(x,{items:s})}const H="reportsInteractives.hooks",p=d.encloseNamespace(H);function V(e){return`no:interactive:results:warning:${e}`}function w(){return n.jsxs(c,{className:"py-3",children:[n.jsx(c.Image,{src:y.EmptyStates.Interactives.NoData,className:"w-50 h-auto"}),n.jsx(c.Heading,{children:p("noResultsHeading")}),n.jsx(c.Info,{className:"w-100",children:p("noResultsDescription")})]})}function Q(e){var I,g;const t=V(e),s=E.cacheGet(t),a=T(),l=F(e,a),f=(g=(I=l.data)==null?void 0:I.students)==null?void 0:g.length,u=!!l.data&&!f,h=N(u&&b.getShareLinkByObjectId(e)),m=N(u&&b.getSentDirectShareByObjectId(e)),L=!!h.hasCompleted&&h.statusCode===v.NotFound,R=!!m.hasCompleted&&m.statusCode===v.NotFound,S=L&&R;k.useEffect(()=>{!S||s||(E.cacheSet(t,!0),A.render(n.jsx(w,{}),{title:p("shareInteractive"),buttonContainerClassName:"border-top-0 justify-content-center mt-n4 pb-3",submitButtonProps:{text:p("shareInteractive"),onClick:()=>{j.trigger({application:r.DEFAULT,action:o.Default.SHARE,args:[e],params:{entityType:"interactive"}})},variant:"dark",className:"me-2"}}))},[S,s])}export{U as I,Q as u};
|
|
2
|
-
//# sourceMappingURL=BLEXuU9u.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BLEXuU9u.chunk.js","sources":["../../src/apps/interactives/components/interactive-nav/InteractiveNav.tsx","../../src/apps/interactives/hooks/UseNoResultsPopup.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { FilterQueryParams } from 'libs/shared/apps/analytics/interfaces/FilterQueryParams';\n\nimport { SubNav, SubNavItem } from 'shared/components/sub-nav/SubNav';\nimport { Actions } from 'shared/constants/ReportsActions';\nimport { AppChannels } from 'shared/constants/ReportsRadioChannels';\nimport { useGetAppLinkFilterParams } from 'shared/hooks/UseGetFilterQueryParams';\n\nconst namespace = 'reportsInteractives.interactiveNav';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getNavItems(interactiveMetadataId: string, params: FilterQueryParams, hasInsights: boolean): SubNavItem[] {\n const args = [interactiveMetadataId];\n\n return [\n {\n label: getPhrase('overview'),\n appLink: { application: AppChannels.INTERACTIVES, action: Actions.Interactives.OVERVIEW, args, params }\n },\n ...(!hasInsights ? [\n {\n label: getPhrase('results'),\n appLink: { application: AppChannels.INTERACTIVES, action: Actions.Interactives.RESULTS, args, params }\n },\n {\n label: getPhrase('questions'),\n appLink: { application: AppChannels.INTERACTIVES, action: Actions.Interactives.QUESTION_LIST, args, params }\n }\n ] : []),\n {\n label: getPhrase('engagement'),\n appLink: { application: AppChannels.INTERACTIVES, action: Actions.Interactives.ENGAGEMENT, args, params }\n }\n ];\n}\n\ninterface InteractiveNavProps {\n interactiveMetadataId: string;\n hasInsights?: boolean;\n}\n\nexport function InteractiveNav(props: InteractiveNavProps): JSX.Element {\n const filterQueryParams = useGetAppLinkFilterParams();\n\n const navItems = getNavItems(props.interactiveMetadataId, filterQueryParams, props.hasInsights);\n\n return (\n <SubNav items={navItems} />\n );\n}","import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { useFetchInteractiveResults } from 'libs/shared/apps/analytics/hooks/UseFetchInteractiveResults';\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { DirectShare, ShareLink } from 'libs/shared/interfaces';\nimport { DialogHelper } from 'libs/shared/utils/DialogHelper';\n\nimport { Actions } from 'shared/constants/ReportsActions';\nimport { ImageUrls } from 'shared/constants/ReportsImageUrls';\nimport { AppChannels } from 'shared/constants/ReportsRadioChannels';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\n\n\nconst namespace = 'reportsInteractives.hooks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getLocalStorageKey(interactiveMetadataId: string): string {\n return `no:interactive:results:warning:${interactiveMetadataId}`;\n}\n\nfunction PopupContent(): JSX.Element {\n return (\n <EmptyState className='py-3'>\n <EmptyState.Image src={ImageUrls.EmptyStates.Interactives.NoData} className='w-50 h-auto' />\n <EmptyState.Heading>\n {getPhrase('noResultsHeading')}\n </EmptyState.Heading>\n <EmptyState.Info className='w-100'>\n {getPhrase('noResultsDescription')}\n </EmptyState.Info>\n </EmptyState>\n );\n}\n\nexport function useNoResultsPopup(interactiveMetadataId: string): void {\n const localStorageKey = getLocalStorageKey(interactiveMetadataId);\n const hasSeenPopup = LocalStorageHelper.cacheGet(localStorageKey);\n\n const requestFilter = useGetRequestFilter();\n const results = useFetchInteractiveResults(interactiveMetadataId, requestFilter);\n\n const hasResults = results.data?.students?.length;\n\n const shouldCheckShare = !!results.data && !hasResults;\n\n const shareLink = Flight.useBasicFetch<ShareLink>(shouldCheckShare &&\n ShareRequests.getShareLinkByObjectId(interactiveMetadataId));\n\n const directShare = Flight.useBasicFetch<DirectShare>(shouldCheckShare &&\n ShareRequests.getSentDirectShareByObjectId(interactiveMetadataId));\n\n const noShareLink = !!shareLink.hasCompleted && shareLink.statusCode === HttpStatus.NotFound;\n\n const noDirectShare = !!directShare.hasCompleted && directShare.statusCode === HttpStatus.NotFound;\n\n const showWarning = noShareLink && noDirectShare;\n\n React.useEffect(() => {\n if (!showWarning || hasSeenPopup)\n return;\n\n LocalStorageHelper.cacheSet(localStorageKey, true);\n\n DialogHelper.render(\n <PopupContent />,\n {\n title: getPhrase('shareInteractive'),\n buttonContainerClassName: 'border-top-0 justify-content-center mt-n4 pb-3',\n submitButtonProps: {\n text: getPhrase('shareInteractive'),\n onClick: () => {\n Core.AppLinkHelper.trigger({\n application: AppChannels.DEFAULT,\n action: Actions.Default.SHARE,\n args: [interactiveMetadataId],\n params: { entityType: 'interactive' }\n });\n },\n variant: 'dark',\n className: 'me-2'\n }\n }\n );\n }, [ showWarning, hasSeenPopup ]);\n}"],"names":["namespace","getPhrase","LanguageService","getNavItems","interactiveMetadataId","params","hasInsights","args","AppChannels","Actions","InteractiveNav","props","filterQueryParams","useGetAppLinkFilterParams","navItems","jsx","SubNav","getLocalStorageKey","PopupContent","jsxs","EmptyState","ImageUrls","useNoResultsPopup","localStorageKey","hasSeenPopup","LocalStorageHelper","requestFilter","useGetRequestFilter","results","useFetchInteractiveResults","hasResults","_b","_a","shouldCheckShare","shareLink","Flight.useBasicFetch","ShareRequests","directShare","noShareLink","HttpStatus","noDirectShare","showWarning","React","DialogHelper","Core.AppLinkHelper"],"mappings":"8PAWA,MAAMA,EAAY,qCACZC,EAAYC,EAAgB,iBAAiBF,CAAS,EAE5D,SAASG,EAAYC,EAA+BC,EAA2BC,EAAoC,CACjH,MAAMC,EAAO,CAACH,CAAqB,EAEnC,MAAO,CACL,CACE,MAAOH,EAAU,UAAU,EAC3B,QAAS,CAAE,YAAaO,EAAY,aAAc,OAAQC,EAAQ,aAAa,SAAU,KAAAF,EAAM,OAAAF,CAAA,CAAO,EAExG,GAAKC,EASD,CAAA,EATe,CACjB,CACE,MAAOL,EAAU,SAAS,EAC1B,QAAS,CAAE,YAAaO,EAAY,aAAc,OAAQC,EAAQ,aAAa,QAAS,KAAAF,EAAM,OAAAF,CAAA,CAAO,EAEvG,CACE,MAAOJ,EAAU,WAAW,EAC5B,QAAS,CAAE,YAAaO,EAAY,aAAc,OAAQC,EAAQ,aAAa,cAAe,KAAAF,EAAM,OAAAF,CAAA,CAAO,CAC7G,EAEF,CACE,MAAOJ,EAAU,YAAY,EAC7B,QAAS,CAAE,YAAaO,EAAY,aAAc,OAAQC,EAAQ,aAAa,WAAY,KAAAF,EAAM,OAAAF,CAAA,CAAO,CAC1G,CAEJ,CAOO,SAASK,EAAeC,EAAyC,CACtE,MAAMC,EAAoBC,EAAA,EAEpBC,EAAWX,EAAYQ,EAAM,sBAAuBC,EAAmBD,EAAM,WAAW,EAE9F,OACEI,EAAAA,IAACC,EAAA,CAAO,MAAOF,CAAA,CAAU,CAE7B,CChCA,MAAMd,EAAY,4BACZC,EAAYC,EAAgB,iBAAiBF,CAAS,EAE5D,SAASiB,EAAmBb,EAAuC,CACjE,MAAO,kCAAkCA,CAAqB,EAChE,CAEA,SAASc,GAA4B,CACnC,OACEC,EAAAA,KAACC,EAAA,CAAW,UAAU,OACpB,SAAA,CAAAL,EAAAA,IAACK,EAAW,MAAX,CAAiB,IAAKC,EAAU,YAAY,aAAa,OAAQ,UAAU,aAAA,CAAc,QACzFD,EAAW,QAAX,CACE,SAAAnB,EAAU,kBAAkB,EAC/B,EACAc,MAACK,EAAW,KAAX,CAAgB,UAAU,QACxB,SAAAnB,EAAU,sBAAsB,CAAA,CACnC,CAAA,EACF,CAEJ,CAEO,SAASqB,EAAkBlB,EAAqC,SACrE,MAAMmB,EAAkBN,EAAmBb,CAAqB,EAC1DoB,EAAeC,EAAmB,SAASF,CAAe,EAE1DG,EAAgBC,EAAA,EAChBC,EAAUC,EAA2BzB,EAAuBsB,CAAa,EAEzEI,GAAaC,GAAAC,EAAAJ,EAAQ,OAAR,YAAAI,EAAc,WAAd,YAAAD,EAAwB,OAErCE,EAAmB,CAAC,CAACL,EAAQ,MAAQ,CAACE,EAEtCI,EAAYC,EAAgCF,GAChDG,EAAc,uBAAuBhC,CAAqB,CAAC,EAEvDiC,EAAcF,EAAkCF,GACpDG,EAAc,6BAA6BhC,CAAqB,CAAC,EAE7DkC,EAAc,CAAC,CAACJ,EAAU,cAAgBA,EAAU,aAAeK,EAAW,SAE9EC,EAAgB,CAAC,CAACH,EAAY,cAAgBA,EAAY,aAAeE,EAAW,SAEpFE,EAAcH,GAAeE,EAEnCE,EAAM,UAAU,IAAM,CAChB,CAACD,GAAejB,IAGpBC,EAAmB,SAASF,EAAiB,EAAI,EAEjDoB,EAAa,aACVzB,EAAA,EAAa,EACd,CACE,MAAOjB,EAAU,kBAAkB,EACnC,yBAA0B,iDAC1B,kBAAmB,CACjB,KAAMA,EAAU,kBAAkB,EAClC,QAAS,IAAM,CACb2C,EAAmB,QAAQ,CACzB,YAAapC,EAAY,QACzB,OAAQC,EAAQ,QAAQ,MACxB,KAAM,CAACL,CAAqB,EAC5B,OAAQ,CAAE,WAAY,aAAA,CAAc,CACrC,CACH,EACA,QAAS,OACT,UAAW,MAAA,CACb,CACF,EAEJ,EAAG,CAAEqC,EAAajB,CAAa,CAAC,CAClC"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as e,O as r,bE as y,L as j,e as w,u as C,T,ag as N}from"./app-5iiM5qQY.js";import{c as h,H as S,b as V,m as v,a as R}from"./DvV9e2O3.chunk.js";import{V as p}from"./BLSeaGtL.chunk.js";const g={chart:{spacing:[4,0,4,0]},title:{text:null},tooltip:{enabled:!1},credits:{enabled:!1},yAxis:{gridLineWidth:0,labels:{enabled:!1},title:{text:null},endOnTick:!0,tickAmount:10},xAxis:{lineWidth:0,labels:{style:{...h}}},legend:{enabled:!1},plotOptions:{column:{borderRadius:4,dataLabels:{enabled:!0,style:h,inside:!1,crop:!1,overflow:"allow"},groupPadding:0,minPointLength:8}},series:[{type:"column",label:{enabled:!1},states:{hover:{enabled:!1}}}]},O=(a,t)=>({...g,xAxis:{...g.xAxis,categories:a},series:[{type:"column",label:{enabled:!1},states:{hover:{enabled:!1}},data:t}]});function _(a){const t=O(a.data.map(l=>l.name),a.data);return e.jsx(e.Fragment,{children:e.jsx(S,{highcharts:V,options:t,containerProps:{className:"h-100"}})})}const A="_image_1a110_1",I={image:A},L="reportsShared.totalViewsByRoleCardEmptyState",f=j.encloseNamespace(L);function E(){return e.jsxs(r,{className:"flex-grow-1 justify-content-center",children:[e.jsx(r.Image,{src:y.EmptyStates.Shared.Ticket,className:I.image}),e.jsx(r.Heading,{className:"h6",children:f("heading")}),e.jsx(r.Info,{className:"w-100",children:f("description")})]})}const B="reportsShared.videoViewsByRoleCard";function U(a){const t=w(),l=C(a.videoId?p.videoAggregation(a.videoId,"user_type",t):p.aggregation("user_type",t));function x(c){if(!c)return null;const n=c.reduce((s,i)=>{const m=[N.System,"255"].includes(i.name)?null:i.name,u=s.find(b=>b.name===m);return u?u.count+=i.count:s.push({name:m,count:i.count}),s},[]).map(s=>({name:R(s.name),y:s.count,color:v(s.name)})),d=n.findIndex(s=>s.name==="Staff");if(d>-1){const[s]=n.splice(d,1);n.push(s)}return n}const o=x(l.data);return e.jsx("div",{className:"d-flex flex-column h-100 bg-white rounded p-3",children:o?e.jsxs(e.Fragment,{children:[e.jsx("h2",{className:"h6 mb-3",children:e.jsx(T,{namespace:B,phrase:"videoViews"})}),o.length?e.jsx("div",{className:"flex-grow-1 position-relative",children:e.jsx("div",{className:"position-absolute w-100 h-100",children:e.jsx(_,{data:o})})}):e.jsx(E,{})]}):e.jsx("div",{className:"partial-loading-background w-25",children:" "})})}export{_ as C,U as V};
|
|
2
|
-
//# sourceMappingURL=BLIHpHXi.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BLIHpHXi.chunk.js","sources":["../../src/shared/components/column-chart/ColumnChart.tsx","../../src/shared/views/overview-cards/video-views-by-role-card/empty-state/TotalViewsByRoleCardEmptyState.tsx","../../src/shared/views/overview-cards/video-views-by-role-card/VideoViewsByRoleCardView.tsx"],"sourcesContent":["import React from 'react';\nimport Highcharts from 'highcharts';\nimport HighchartsReact from 'highcharts-react-official';\n\nimport { CHART_FONT_STYLES } from 'shared/constants/ChartStyles';\n\nconst STATIC_COLUMN_CHART_OPTIONS: Highcharts.Options = {\n chart: {\n spacing: [ 4, 0, 4, 0 ]\n },\n title: {\n text: null\n },\n tooltip: {\n enabled: false\n },\n credits: {\n enabled: false\n },\n yAxis: {\n gridLineWidth: 0,\n labels: {\n enabled: false\n },\n title: {\n text: null\n },\n endOnTick: true,\n tickAmount: 10\n },\n xAxis: {\n lineWidth: 0,\n labels: {\n style: {\n ...CHART_FONT_STYLES\n }\n }\n },\n legend: {\n enabled: false\n },\n plotOptions: {\n column: {\n borderRadius: 4,\n dataLabels: {\n enabled: true,\n style: CHART_FONT_STYLES,\n inside: false,\n crop: false,\n overflow: 'allow'\n },\n groupPadding: 0,\n minPointLength: 8\n }\n },\n series: [{\n type: 'column',\n label: {\n enabled: false\n },\n states: {\n hover: {\n enabled: false\n }\n }\n }]\n};\n\nconst getChartOptions = (\n categories: string[],\n data: Highcharts.PointOptionsObject[]\n): Highcharts.Options => ({\n ...STATIC_COLUMN_CHART_OPTIONS,\n xAxis: {\n ...STATIC_COLUMN_CHART_OPTIONS.xAxis,\n categories\n },\n series: [{\n type: 'column',\n label: {\n enabled: false\n },\n states: {\n hover: {\n enabled: false\n }\n },\n data\n }]\n});\n\ninterface ColumnChartProps {\n data: Highcharts.PointOptionsObject[]\n}\n\nexport function ColumnChart(props: ColumnChartProps) {\n const chartOptions = getChartOptions(props.data.map(data => data.name as string), props.data);\n\n return (\n <>\n <HighchartsReact\n highcharts={Highcharts}\n options={chartOptions}\n containerProps={{ className: 'h-100' }}\n />\n </>\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\nimport { ImageUrls } from 'shared/constants/ReportsImageUrls';\n\nimport styles from './total-views-by-role-card-empty-state.module.scss';\n\nconst namespace = 'reportsShared.totalViewsByRoleCardEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\n\nexport function TotalViewsByRoleCardEmptyState() {\n return (\n <EmptyState className='flex-grow-1 justify-content-center'>\n <EmptyState.Image\n src={ImageUrls.EmptyStates.Shared.Ticket}\n className={styles.image}\n />\n <EmptyState.Heading className='h6'>\n {getPhrase('heading')}\n </EmptyState.Heading>\n <EmptyState.Info className='w-100'>\n {getPhrase('description')}\n </EmptyState.Info>\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\n\nimport { ColumnChart } from 'shared/components/column-chart/ColumnChart';\nimport { VideoViewsV2Requests } from 'shared/flight-requests/VideoViewsV2Requests';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { mapUserTypeToChartColour, mapUserTypeToChartLabel } from 'shared/utils/UserUtils';\nimport { TotalViewsByRoleCardEmptyState } from 'shared/views/overview-cards/video-views-by-role-card/empty-state/TotalViewsByRoleCardEmptyState';\n\n\nconst namespace = 'reportsShared.videoViewsByRoleCard';\n\ninterface VideoViewsByRoleCardProps {\n videoId?: string;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function VideoViewsByRoleCardView(props: VideoViewsByRoleCardProps) {\n const requestFilter = useGetRequestFilter();\n\n const viewsByGroup = Flight.useBasicFetch<GroupedAnalyticsCount[]>(props.videoId ?\n VideoViewsV2Requests.videoAggregation(props.videoId, 'user_type', requestFilter) :\n VideoViewsV2Requests.aggregation('user_type', requestFilter));\n\n function getChartData(views: GroupedAnalyticsCount[]): Highcharts.PointOptionsObject[] {\n if (!views) return null;\n\n // Bucketing System user data as Anonymous\n const mergedViews = views.reduce((acc, val) => {\n const key = [ UserGroup.System, '255' ].includes(val.name) ? null : val.name;\n const existing = acc.find(v => v.name === key);\n\n if (existing)\n existing.count += val.count;\n else\n acc.push({ name: key, count: val.count });\n\n return acc;\n }, []);\n\n const mappedGroups: Highcharts.PointOptionsObject[] = mergedViews.map(group => ({\n name: mapUserTypeToChartLabel(group.name),\n y: group.count,\n color: mapUserTypeToChartColour(group.name as UserGroup)\n }));\n\n const staffIndex = mappedGroups.findIndex(group => group.name === 'Staff');\n\n // Move Staff to last index\n if (staffIndex > -1) {\n const [staffObject] = mappedGroups.splice(staffIndex, 1);\n\n mappedGroups.push(staffObject);\n }\n return mappedGroups;\n }\n\n const chartData = getChartData(viewsByGroup.data);\n\n return (\n <div className='d-flex flex-column h-100 bg-white rounded p-3'>\n {chartData ?\n <>\n <h2 className='h6 mb-3'><Text namespace={namespace} phrase='videoViews' /></h2>\n\n {chartData.length ?\n <div className='flex-grow-1 position-relative'>\n <div className='position-absolute w-100 h-100'>\n <ColumnChart data={chartData} />\n </div>\n </div>\n : <TotalViewsByRoleCardEmptyState />\n }\n </>\n : <div className='partial-loading-background w-25'> </div>\n }\n </div>\n );\n}"],"names":["STATIC_COLUMN_CHART_OPTIONS","CHART_FONT_STYLES","getChartOptions","categories","data","ColumnChart","props","chartOptions","jsx","Fragment","HighchartsReact","Highcharts","namespace","getPhrase","LanguageService","TotalViewsByRoleCardEmptyState","jsxs","EmptyState","ImageUrls","styles","VideoViewsByRoleCardView","requestFilter","useGetRequestFilter","viewsByGroup","Flight.useBasicFetch","VideoViewsV2Requests","getChartData","views","mappedGroups","acc","val","key","UserGroup","existing","v","group","mapUserTypeToChartLabel","mapUserTypeToChartColour","staffIndex","staffObject","chartData","Text"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{s as t}from"./app-5iiM5qQY.js";import{g as s}from"./sFV5nxD4.chunk.js";function g(a){const{userId:e,customerId:r,...i}=a;return{...i,uid:e,cid:r}}const l={aggregation(a,e){return{url:t.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${a}`,g(e)),key:s("video:views:v2:aggregation",e,a),normalize:!1}},videoAggregation(a,e,r){return{url:t.urlBuilder(`{gateway}/v2/analytics/streams/videos/${a}/aggregation/${e}`,g(r)),key:s(`video:views:v2:aggregation:${a}`,r,e),normalize:!1}},aggregationChart(a,e){return{url:t.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${a}/chart`,g(e)),key:s("video:views:v2:aggregation:chart",e,a),normalize:!1}},videoAggregationChart(a,e,r){return{url:t.urlBuilder(`{gateway}/v2/analytics/streams/videos/${a}/aggregation/${e}/chart`,g(r)),key:s(`video:views:v2:aggregation:chart:${a}`,r,e),normalize:!1}},topStreams(a,e){return{url:t.urlBuilder("{gateway}/v2/analytics/streams/top",{...g(e),limit:a}),key:s(`video:views:v2:top:streams:${a}`,e),normalize:!1}},videoHeatMap(a,e,r){return{url:t.urlBuilder(`{gateway}/v2/analytics/streams/videos/${a}/heat-map`,{...g(e),cursor:r}),key:s(`video:views:v2:heatmap:${a}`,e,r),normalize:!1}},videoHeatMapAggregation(a,e){return{url:t.urlBuilder(`{gateway}/v2/analytics/streams/videos/${a}/aggregation/heat-map`,g(e)),key:s(`video:views:v2:aggregation:heatmap:${a}`,e),normalize:!1}}};export{l as V};
|
|
2
|
-
//# sourceMappingURL=BLSeaGtL.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BLSeaGtL.chunk.js","sources":["../../src/shared/flight-requests/VideoViewsV2Requests.ts"],"sourcesContent":["\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/react/index';\n\nimport { StreamAggregationType } from 'libs/shared/apps/analytics/interfaces/StreamAggregationType';\nimport { AnalyticsRequestFilter } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\n/**\n * Becasue the V2 endpoints take the user context,\n * userId and customerId cannot be used for these values so instead\n * we are using uid and cid - sha\n */\nfunction formatFilter(filter: AnalyticsRequestFilter) {\n const { userId, customerId, ...rest } = filter;\n return { ...rest, uid: userId, cid: customerId };\n}\n\nexport const VideoViewsV2Requests = {\n aggregation(\n type: StreamAggregationType,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${type}`, formatFilter(filter)),\n key: getAnalyticsRequestKey('video:views:v2:aggregation', filter, type),\n normalize: false\n };\n },\n\n videoAggregation(\n videoId: string,\n type: StreamAggregationType,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/videos/${videoId}/aggregation/${type}`, formatFilter(filter)),\n key: getAnalyticsRequestKey(`video:views:v2:aggregation:${videoId}`, filter, type),\n normalize: false\n };\n },\n\n aggregationChart(\n type: StreamAggregationType,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${type}/chart`, formatFilter(filter)),\n key: getAnalyticsRequestKey('video:views:v2:aggregation:chart', filter, type),\n normalize: false\n };\n },\n\n videoAggregationChart(\n videoId: string,\n type: StreamAggregationType,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/videos/${videoId}/aggregation/${type}/chart`, formatFilter(filter)),\n key: getAnalyticsRequestKey(`video:views:v2:aggregation:chart:${videoId}`, filter, type),\n normalize: false\n };\n },\n\n topStreams(limit: number, filter: AnalyticsRequestFilter): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/top`, { ...formatFilter(filter), limit }),\n key: getAnalyticsRequestKey(`video:views:v2:top:streams:${limit}`, filter),\n normalize: false\n };\n },\n\n videoHeatMap(\n videoId: string,\n filter: AnalyticsRequestFilter,\n cursor?: string\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/videos/${videoId}/heat-map`, { ...formatFilter(filter), cursor }),\n key: getAnalyticsRequestKey(`video:views:v2:heatmap:${videoId}`, filter, cursor),\n normalize: false\n };\n },\n\n videoHeatMapAggregation(\n videoId: string,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/videos/${videoId}/aggregation/heat-map`, formatFilter(filter)),\n key: getAnalyticsRequestKey(`video:views:v2:aggregation:heatmap:${videoId}`, filter),\n normalize: false\n };\n }\n};"],"names":["formatFilter","filter","userId","customerId","rest","VideoViewsV2Requests","type","UrlHelper","getAnalyticsRequestKey","videoId","limit","cursor"],"mappings":"8EAaA,SAASA,EAAaC,EAAgC,CACpD,KAAM,CAAE,OAAAC,EAAQ,WAAAC,EAAY,GAAGC,GAASH,EACxC,MAAO,CAAE,GAAGG,EAAM,IAAKF,EAAQ,IAAKC,CAAA,CACtC,CAEO,MAAME,EAAuB,CAClC,YACEC,EACAL,EACgB,CAChB,MAAO,CACL,IAAKM,EAAU,WAAW,8CAA8CD,CAAI,GAAIN,EAAaC,CAAM,CAAC,EACpG,IAAKO,EAAuB,6BAA8BP,EAAQK,CAAI,EACtE,UAAW,EAAA,CAEf,EAEA,iBACEG,EACAH,EACAL,EACgB,CAChB,MAAO,CACL,IAAKM,EAAU,WAAW,yCAAyCE,CAAO,gBAAgBH,CAAI,GAAIN,EAAaC,CAAM,CAAC,EACtH,IAAKO,EAAuB,8BAA8BC,CAAO,GAAIR,EAAQK,CAAI,EACjF,UAAW,EAAA,CAEf,EAEA,iBACEA,EACAL,EACgB,CAChB,MAAO,CACL,IAAKM,EAAU,WAAW,8CAA8CD,CAAI,SAAUN,EAAaC,CAAM,CAAC,EAC1G,IAAKO,EAAuB,mCAAoCP,EAAQK,CAAI,EAC5E,UAAW,EAAA,CAEf,EAEA,sBACEG,EACAH,EACAL,EACgB,CAChB,MAAO,CACL,IAAKM,EAAU,WAAW,yCAAyCE,CAAO,gBAAgBH,CAAI,SAAUN,EAAaC,CAAM,CAAC,EAC5H,IAAKO,EAAuB,oCAAoCC,CAAO,GAAIR,EAAQK,CAAI,EACvF,UAAW,EAAA,CAEf,EAEA,WAAWI,EAAeT,EAAgD,CACxE,MAAO,CACL,IAAKM,EAAU,WAAW,qCAAsC,CAAE,GAAGP,EAAaC,CAAM,EAAG,MAAAS,EAAO,EAClG,IAAKF,EAAuB,8BAA8BE,CAAK,GAAIT,CAAM,EACzE,UAAW,EAAA,CAEf,EAEA,aACEQ,EACAR,EACAU,EACgB,CAChB,MAAO,CACL,IAAKJ,EAAU,WAAW,yCAAyCE,CAAO,YAAa,CAAE,GAAGT,EAAaC,CAAM,EAAG,OAAAU,CAAA,CAAQ,EAC1H,IAAKH,EAAuB,0BAA0BC,CAAO,GAAIR,EAAQU,CAAM,EAC/E,UAAW,EAAA,CAEf,EAEA,wBACEF,EACAR,EACgB,CAChB,MAAO,CACL,IAAKM,EAAU,WAAW,yCAAyCE,CAAO,wBAAyBT,EAAaC,CAAM,CAAC,EACvH,IAAKO,EAAuB,sCAAsCC,CAAO,GAAIR,CAAM,EACnF,UAAW,EAAA,CAEf,CACF"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{cT as n,r as a,ap as s,aq as c,cU as o}from"./app-5iiM5qQY.js";function i(r){const e=n.getInstance(r);return a.useEffect(()=>()=>{n.releaseInstance(r)}),e}function u(r){return i(r)}function g(){const r=u(o.ALERT);return{success(e){r.success(e)()},error(e){r.error(e)()},warning(e){r.createAlert({type:s.Warning,heading:c.Warning,message:e})},info(e,t){r.createAlert({heading:e,message:t,type:s.Info})}}}export{u as a,g as u};
|
|
2
|
-
//# sourceMappingURL=BLuY6AYO.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BLuY6AYO.chunk.js","sources":["../../../../libs/common/src/react/hooks/UseInstance.ts","../../../../libs/common/src/react/hooks/UseService.ts","../../../../libs/shared/src/hooks/UseAlerts.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\n\n/**\n * Hook to retrieve an instance from InstanceManager.\n * It handles releasing the instance in the cleanup function.\n * @param instanceName \n */\nexport function useInstance<T>(instanceName: string): T {\n const instance = InstanceManager.getInstance<T>(instanceName);\n\n React.useEffect(() => {\n return () => { InstanceManager.releaseInstance(instanceName); };\n }), [];\n\n return instance;\n}\n\n/**\n * Can be used to conditionally get an instance safely. Passing in a falsey value\n * will not return an instance, and will also not error\n */\nexport function useInstanceSafe<T>(instanceName: string): T {\n let instance: T = null;\n\n if (instanceName)\n instance = InstanceManager.getInstance<T>(instanceName);\n\n React.useEffect(() => {\n return () => { InstanceManager.releaseInstance(instanceName); };\n }), [];\n\n return instance;\n}","import { BaseService } from 'libs/common/backbone/core/BaseService';\n\nimport { useInstance } from './UseInstance';\n\nexport function useService<T extends BaseService>(serviceName: string): T {\n const service = useInstance<T>(serviceName);\n\n return service;\n}","import { CommonServices } from 'libs/common/backbone/constants/CommonServices';\nimport { AlertType, BaseAlert, BaseAlertOptions, BaseAlertService, DefaultAlertHeading } from 'libs/common/backbone/services/BaseAlertService';\nimport { useService } from 'libs/common/react/hooks/UseService';\n\nexport interface Alerts {\n success(alertContent: string | BaseAlert | BaseAlertOptions): void,\n error(alertContent: string | BaseAlert | BaseAlertOptions): void,\n warning(alertContent: string): void\n info(heading: string, message: string): void\n}\n\nexport function useAlerts(): Alerts {\n const alertService = useService<BaseAlertService>(CommonServices.ALERT);\n\n return {\n success(alertContent: string | BaseAlert | BaseAlertOptions): void {\n alertService.success(alertContent)();\n },\n error(alertContent: string | BaseAlert | BaseAlertOptions): void {\n alertService.error(alertContent)();\n },\n warning(alertContent: string): void {\n alertService.createAlert({\n type: AlertType.Warning,\n heading: DefaultAlertHeading.Warning,\n message: alertContent\n });\n },\n info(heading: string, message: string): void {\n alertService.createAlert({\n heading,\n message,\n type: AlertType.Info\n });\n }\n };\n}"],"names":["useInstance","instanceName","instance","InstanceManager","React.useEffect","useService","serviceName","useAlerts","alertService","CommonServices","alertContent","AlertType","DefaultAlertHeading","heading","message"],"mappings":"sEASO,SAASA,EAAeC,EAAyB,CACtD,MAAMC,EAAWC,EAAgB,YAAeF,CAAY,EAE5DG,OAAAA,EAAAA,UAAgB,IACP,IAAM,CAAED,EAAgB,gBAAgBF,CAAY,CAAG,CAC/D,EAEMC,CACT,CCbO,SAASG,EAAkCC,EAAwB,CAGxE,OAFgBN,EAAeM,CAAW,CAG5C,CCGO,SAASC,GAAoB,CAClC,MAAMC,EAAeH,EAA6BI,EAAe,KAAK,EAEtE,MAAO,CACL,QAAQC,EAA2D,CACjEF,EAAa,QAAQE,CAAY,EAAA,CACnC,EACA,MAAMA,EAA2D,CAC/DF,EAAa,MAAME,CAAY,EAAA,CACjC,EACA,QAAQA,EAA4B,CAClCF,EAAa,YAAY,CACvB,KAAMG,EAAU,QAChB,QAASC,EAAoB,QAC7B,QAASF,CAAA,CACV,CACH,EACA,KAAKG,EAAiBC,EAAuB,CAC3CN,EAAa,YAAY,CACvB,QAAAK,EACA,QAAAC,EACA,KAAMH,EAAU,IAAA,CACjB,CACH,CAAA,CAEJ"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as a,j as s,ae as v,h as H,a3 as I,F as m,ca as P,cb as g}from"./app-5iiM5qQY.js";import{u as w}from"./Cn0ghy_D.chunk.js";import{C as L}from"./CsROrwVV.chunk.js";const N="_container_1kfhe_1",_="_spinner_1kfhe_4",C={container:N,spinner:_};j.defaultProps={fetchOnScroll:!1};function j(e){const[i,n]=w();return a.useEffect(()=>{var r;e.fetchOnScroll&&(!n||e.isFetching||(r=e.fetchNext)==null||r.call(e,e.nextCursor))},[n,e.isFetching]),s.jsx("div",{className:`p-3 text-center ${C.container}`,children:e.isFetching?s.jsx(v,{as:"span",animation:"border",role:"status",className:C.spinner}):s.jsx("div",{ref:i,children:s.jsx(H,{svg:L,className:"svg-container cursor-pointer",size:I.Large,onClick:()=>{var r;return(r=e.fetchNext)==null?void 0:r.call(e,e.nextCursor)}})})})}const d=400;function k(e){const i=()=>{if(!e.isFetching){if(e.scrollContainer){const{scrollContainer:n}=e,r=n.getBoundingClientRect().height+n.scrollTop,u=n.scrollHeight-d;if(r<u)return}else{const n=window.innerHeight+document.documentElement.scrollTop,r=document.documentElement.scrollHeight-d;if(n<r)return}e.fetchNextPage()}};a.useEffect(()=>{const n=m.throttle(i,200),r=e.scrollContainer||window;return e.hasMore&&r.addEventListener("scroll",n),()=>r.removeEventListener("scroll",n)},[e.hasMore,e.fetchNextPage,e.scrollContainer])}function y(e,i,n,r,u,S){const[x,o]=a.useState(0),f=i;function F(c){if(!e)return null;const l=e(c);return l?l.key:null}const t=P(F,r);function E(){if(!(!i||!e||!t))return o(c=>c+1),f(t.nextCursor)}return k({fetchNextPage:E,hasMore:!!(t!=null&&t.nextCursor),isFetching:t==null?void 0:t.isFetching,scrollContainer:S}),a.useEffect(()=>{t&&t.shouldInitialFetch&&i&&(f(),o(c=>c+1))},[t==null?void 0:t.shouldInitialFetch,i]),a.useEffect(()=>{var l,h;if(!(t!=null&&t.statusCode)||!m.isFunction(n))return;const c=+((h=(l=t.statusCode)==null?void 0:l.toString())==null?void 0:h.substr(0,1));c!==g.ClientError&&c!==g.ServerError||n(x,t.statusCode)},[t==null?void 0:t.statusCode]),{items:t==null?void 0:t.items,hasMore:!!(t!=null&&t.nextCursor),nextCursor:t==null?void 0:t.nextCursor,isFetching:t==null?void 0:t.isFetching,totalItems:t==null?void 0:t.totalItems,hasFirstPageCompleted:t==null?void 0:t.hasFirstPageCompleted}}export{j as I,y as u};
|
|
2
|
-
//# sourceMappingURL=BSe8MmUc.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BSe8MmUc.chunk.js","sources":["../../../../libs/shared/src/components/infinite-scroll-footer/InfiniteScrollFooter.tsx","../../../../libs/shared/src/hooks/UseInfiniteScroll.ts","../../../../libs/shared/src/hooks/UseInfiniteList.ts"],"sourcesContent":["import * as React from 'react';\nimport { Spinner } from 'react-bootstrap';\nimport { useInView } from 'react-intersection-observer';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ChevronDownSvg } from 'libs/shared/images/svg/arrows/ChevronDownSvg';\n\nimport styles from './infinite-scroll-footer.module.scss';\n\ninterface InfiniteScrollFooterProps {\n isFetching: boolean;\n fetchNext?: (nextCursor: string) => void;\n nextCursor?: string;\n fetchOnScroll?: boolean;\n}\n\nInfiniteScrollFooter.defaultProps = {\n fetchOnScroll: false\n};\n\nexport function InfiniteScrollFooter(props: InfiniteScrollFooterProps): React.ReactElement {\n const [ ref, inView ] = useInView();\n\n React.useEffect(() => {\n if (!props.fetchOnScroll)\n return;\n\n if (!inView || props.isFetching)\n return;\n\n props.fetchNext?.(props.nextCursor);\n }, [ inView, props.isFetching ]);\n\n return (\n <div className={`p-3 text-center ${styles.container}`}>\n {props.isFetching\n ? <Spinner as='span' animation='border' role='status' className={styles.spinner} />\n : (\n <div ref={ref}>\n <SvgContainer\n svg={ChevronDownSvg}\n className='svg-container cursor-pointer'\n size={SvgContainerSize.Large}\n onClick={() => props.fetchNext?.(props.nextCursor)}\n />\n </div>\n )\n }\n </div>\n );\n}","import { useEffect } from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nconst SCROLL_TOLERANCE = 400; // value in px\n\ninterface UseInfiniteScrollOptions {\n fetchNextPage: () => void;\n hasMore: boolean;\n isFetching: boolean;\n scrollContainer?: HTMLElement;\n}\n\nexport function useInfiniteScroll(options: UseInfiniteScrollOptions): void {\n const handleScroll = (): void => {\n if (options.isFetching)\n return;\n\n if (!options.scrollContainer) {\n const currentScrollHeight = window.innerHeight + document.documentElement.scrollTop;\n \n const totalHeight = document.documentElement.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n } else {\n const { scrollContainer } = options;\n const currentScrollHeight = scrollContainer.getBoundingClientRect().height + scrollContainer.scrollTop;\n \n const totalHeight = scrollContainer.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n }\n\n options.fetchNextPage();\n };\n\n useEffect(() => {\n const onScroll = FunctionHelper.throttle(handleScroll, 200);\n\n const scrollContainer = options.scrollContainer || window;\n\n if (options.hasMore)\n scrollContainer.addEventListener('scroll', onScroll);\n\n return () => scrollContainer.removeEventListener('scroll', onScroll);\n }, [ options.hasMore, options.fetchNextPage, options.scrollContainer ]);\n}","import { useEffect, useState } from 'react';\n\nimport { HttpStatus, HttpStatusClass } from 'libs/common/backbone/enums/HttpStatus';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { BaseObject, BasePaginatedCollection } from 'libs/shared/interfaces';\n\nimport { useInfiniteScroll } from './UseInfiniteScroll';\nimport { useSelectAllPages } from './UseSelectAllPages';\n\nexport interface UseInfiniteListResult<T extends BaseObject> {\n items: T[];\n hasMore: boolean;\n isFetching: boolean;\n nextCursor: string;\n totalItems?: number;\n hasFirstPageCompleted: boolean;\n}\n\n/**\n * Hook to extract an infinite list from the application state,\n * save it locally in state and only update when new data\n * is fetched.\n * \n * @param getRequest - callback function to get the request for each page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n * \n * @param fetchNext - callback function to fetch a page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n */\nexport function useInfiniteList<TObject = BaseObject, TResponse = BasePaginatedCollection<TObject>>(\n getRequest: ((cursor?: string) => Flight.Request) | false,\n fetchNext: ((cursor?: string) => void) | false,\n onError?: (pageNumber: number, statusCode: HttpStatus) => void,\n getItems?: (responseData: TResponse) => TObject[],\n getCursor?: (responseData: TResponse) => string,\n scrollContainer?: HTMLElement\n): UseInfiniteListResult<TObject> {\n const [ pagesFetched, setPagesFetched ] = useState(0);\n\n const fetchNextFn = fetchNext as (cursor?: string) => void;\n\n function getKey(cursor?: string): string {\n if (!getRequest)\n return null;\n\n const request = getRequest(cursor);\n\n if (!request)\n return null;\n\n return request.key;\n }\n\n const response = useSelectAllPages<TObject, TResponse>(\n getKey,\n getItems,\n getCursor\n );\n\n function fetchNextPage(): void {\n if (!fetchNext || !getRequest || !response)\n return;\n\n setPagesFetched(currentVal => currentVal + 1);\n return fetchNextFn(response.nextCursor);\n }\n\n useInfiniteScroll({\n fetchNextPage,\n hasMore: !!response?.nextCursor,\n isFetching: response?.isFetching,\n scrollContainer\n });\n\n useEffect(() => {\n if (!response)\n return;\n\n if (response.shouldInitialFetch && fetchNext) {\n fetchNextFn();\n setPagesFetched(currentVal => currentVal + 1);\n }\n }, [ response?.shouldInitialFetch, fetchNext ]);\n\n useEffect(() => {\n if (!response?.statusCode || !FunctionHelper.isFunction(onError))\n return;\n\n const httpStatusClass: HttpStatusClass = +(response.statusCode?.toString()?.substr(0, 1));\n\n if (httpStatusClass !== HttpStatusClass.ClientError && httpStatusClass !== HttpStatusClass.ServerError)\n return;\n\n onError(pagesFetched, response.statusCode);\n }, [response?.statusCode]);\n\n return {\n items: response?.items,\n hasMore: !!response?.nextCursor,\n nextCursor: response?.nextCursor,\n isFetching: response?.isFetching,\n totalItems: response?.totalItems,\n hasFirstPageCompleted: response?.hasFirstPageCompleted\n };\n}"],"names":["InfiniteScrollFooter","props","ref","inView","useInView","React.useEffect","_a","jsx","styles","Spinner","SvgContainer","ChevronDownSvg","SvgContainerSize","SCROLL_TOLERANCE","useInfiniteScroll","options","handleScroll","scrollContainer","currentScrollHeight","totalHeight","useEffect","onScroll","FunctionHelper","useInfiniteList","getRequest","fetchNext","onError","getItems","getCursor","pagesFetched","setPagesFetched","useState","fetchNextFn","getKey","cursor","request","response","useSelectAllPages","fetchNextPage","currentVal","httpStatusClass","_b","HttpStatusClass"],"mappings":"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"}
|