@clickview/lite 0.82.1 → 0.82.2-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 +1 -1
- package/dist/css/2074-lite-ac8da6c78b.chunk.css +4 -0
- package/dist/languages/en.json +1 -1
- package/dist/scripts/{1199-01cc084886-lite.chunk.js → 1199-da55d69853-lite.chunk.js} +1 -1
- package/dist/scripts/{1199-01cc084886-lite.chunk.js.map → 1199-da55d69853-lite.chunk.js.map} +1 -1
- package/dist/scripts/1202-d96ad80884-lite.chunk.js +2 -0
- package/dist/scripts/1202-d96ad80884-lite.chunk.js.map +1 -0
- package/dist/scripts/{4208-0706461da6-lite.chunk.js → 1336-1826f6e582-lite.chunk.js} +2 -2
- package/dist/scripts/1336-1826f6e582-lite.chunk.js.map +1 -0
- package/dist/scripts/2074-39b86b9a22-lite.chunk.js +2 -0
- package/dist/scripts/2074-39b86b9a22-lite.chunk.js.map +1 -0
- package/dist/scripts/{2664-907153c03b-lite.chunk.js → 2664-87c8cbfa7f-lite.chunk.js} +2 -2
- package/dist/scripts/2664-87c8cbfa7f-lite.chunk.js.map +1 -0
- package/dist/scripts/2888-2596e106a5-lite.chunk.js +2 -0
- package/dist/scripts/2888-2596e106a5-lite.chunk.js.map +1 -0
- package/dist/scripts/289-669c0c8222-lite.chunk.js +2 -0
- package/dist/scripts/289-669c0c8222-lite.chunk.js.map +1 -0
- package/dist/scripts/{9911-8892b6dbfe-lite.chunk.js → 3612-8c6423bd51-lite.chunk.js} +2 -2
- package/dist/scripts/{9911-8892b6dbfe-lite.chunk.js.map → 3612-8c6423bd51-lite.chunk.js.map} +1 -1
- package/dist/scripts/3840-98c79fc0d8-lite.chunk.js +2 -0
- package/dist/scripts/3840-98c79fc0d8-lite.chunk.js.map +1 -0
- package/dist/scripts/3893-2856933742-lite.chunk.js +2 -0
- package/dist/scripts/3893-2856933742-lite.chunk.js.map +1 -0
- package/dist/scripts/4006-9dfe9cec1b-lite.chunk.js +3 -0
- package/dist/scripts/4006-9dfe9cec1b-lite.chunk.js.map +1 -0
- package/dist/scripts/{4177-2d876c7b14-lite.chunk.js → 4177-285ddf9ae3-lite.chunk.js} +2 -2
- package/dist/scripts/4177-285ddf9ae3-lite.chunk.js.map +1 -0
- package/dist/scripts/{4578-27028d26eb-lite.chunk.js → 4578-7578bcf17a-lite.chunk.js} +2 -2
- package/dist/scripts/4578-7578bcf17a-lite.chunk.js.map +1 -0
- package/dist/scripts/{4621-7fb0a05bcb-lite.chunk.js → 4621-1f79d94416-lite.chunk.js} +2 -2
- package/dist/scripts/4621-1f79d94416-lite.chunk.js.map +1 -0
- package/dist/scripts/4806-f36469abb7-lite.chunk.js +2 -0
- package/dist/scripts/4806-f36469abb7-lite.chunk.js.map +1 -0
- package/dist/scripts/{4948-ba684e5f4f-lite.chunk.js → 4948-de1c75e7fb-lite.chunk.js} +1 -1
- package/dist/scripts/{4948-ba684e5f4f-lite.chunk.js.map → 4948-de1c75e7fb-lite.chunk.js.map} +1 -1
- package/dist/scripts/4985-bdfa839f8f-lite.chunk.js +2 -0
- package/dist/scripts/4985-bdfa839f8f-lite.chunk.js.map +1 -0
- package/dist/scripts/{5554-f1f3baf822-lite.chunk.js → 5554-17bb3b86fc-lite.chunk.js} +2 -2
- package/dist/scripts/5554-17bb3b86fc-lite.chunk.js.map +1 -0
- package/dist/scripts/5579-a9c152057f-lite.chunk.js +2 -0
- package/dist/scripts/5579-a9c152057f-lite.chunk.js.map +1 -0
- package/dist/scripts/5712-e784cfe89c-lite.chunk.js +2 -0
- package/dist/scripts/5712-e784cfe89c-lite.chunk.js.map +1 -0
- package/dist/scripts/6070-a390fdce21-lite.chunk.js +2 -0
- package/dist/scripts/6070-a390fdce21-lite.chunk.js.map +1 -0
- package/dist/scripts/{6909-ba75701156-lite.chunk.js → 6909-a9b8930e37-lite.chunk.js} +2 -2
- package/dist/scripts/6909-a9b8930e37-lite.chunk.js.map +1 -0
- package/dist/scripts/7401-98135f09e8-lite.chunk.js +2 -0
- package/dist/scripts/7401-98135f09e8-lite.chunk.js.map +1 -0
- package/dist/scripts/{7617-211f084b70-lite.chunk.js → 7617-9d34c841e6-lite.chunk.js} +2 -2
- package/dist/scripts/7617-9d34c841e6-lite.chunk.js.map +1 -0
- package/dist/scripts/7742-342db3ce4f-lite.chunk.js +2 -0
- package/dist/scripts/7742-342db3ce4f-lite.chunk.js.map +1 -0
- package/dist/scripts/7843-f6033528ce-lite.chunk.js +2 -0
- package/dist/scripts/7843-f6033528ce-lite.chunk.js.map +1 -0
- package/dist/scripts/787-dcb3a0a26c-lite.chunk.js +2 -0
- package/dist/scripts/787-dcb3a0a26c-lite.chunk.js.map +1 -0
- package/dist/scripts/8077-9fdb522d7e-lite.chunk.js +2 -0
- package/dist/scripts/8077-9fdb522d7e-lite.chunk.js.map +1 -0
- package/dist/scripts/{3392-f7f8cb65e5-lite.chunk.js → 8133-ffcff3b7fc-lite.chunk.js} +3 -3
- package/dist/scripts/8133-ffcff3b7fc-lite.chunk.js.map +1 -0
- package/dist/scripts/8364-ff63447d36-lite.chunk.js +3 -0
- package/dist/scripts/8364-ff63447d36-lite.chunk.js.map +1 -0
- package/dist/scripts/8672-6967ce8a23-lite.chunk.js +2 -0
- package/dist/scripts/8672-6967ce8a23-lite.chunk.js.map +1 -0
- package/dist/scripts/{9042-fd7e79b891-lite.chunk.js → 9042-fdc5ecb459-lite.chunk.js} +1 -1
- package/dist/scripts/{9042-fd7e79b891-lite.chunk.js.map → 9042-fdc5ecb459-lite.chunk.js.map} +1 -1
- package/dist/scripts/9295-4242401e60-lite.chunk.js +2 -0
- package/dist/scripts/9295-4242401e60-lite.chunk.js.map +1 -0
- package/dist/scripts/{9742-3f6b75484a-lite.chunk.js → 9742-5f99d74bb0-lite.chunk.js} +2 -2
- package/dist/scripts/9742-5f99d74bb0-lite.chunk.js.map +1 -0
- package/dist/scripts/979-4b893e5603-lite.chunk.js +2 -0
- package/dist/scripts/979-4b893e5603-lite.chunk.js.map +1 -0
- package/dist/scripts/9911-9272b96e46-lite.chunk.js +2 -0
- package/dist/scripts/9911-9272b96e46-lite.chunk.js.map +1 -0
- package/dist/scripts/bundle-9a3e49399a.min.js +3 -0
- package/dist/scripts/{bundle-1187cb1e9f.min.js.map → bundle-9a3e49399a.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/1074-fdce06d863-lite.chunk.js +0 -2
- package/dist/scripts/1074-fdce06d863-lite.chunk.js.map +0 -1
- package/dist/scripts/2664-907153c03b-lite.chunk.js.map +0 -1
- package/dist/scripts/2970-024b1dd55d-lite.chunk.js +0 -2
- package/dist/scripts/2970-024b1dd55d-lite.chunk.js.map +0 -1
- package/dist/scripts/3392-f7f8cb65e5-lite.chunk.js.map +0 -1
- package/dist/scripts/3840-59e5e53cda-lite.chunk.js +0 -2
- package/dist/scripts/3840-59e5e53cda-lite.chunk.js.map +0 -1
- package/dist/scripts/4177-2d876c7b14-lite.chunk.js.map +0 -1
- package/dist/scripts/4208-0706461da6-lite.chunk.js.map +0 -1
- package/dist/scripts/4578-27028d26eb-lite.chunk.js.map +0 -1
- package/dist/scripts/4598-8f5266e4c2-lite.chunk.js +0 -2
- package/dist/scripts/4598-8f5266e4c2-lite.chunk.js.map +0 -1
- package/dist/scripts/4621-7fb0a05bcb-lite.chunk.js.map +0 -1
- package/dist/scripts/4806-a6f31d703c-lite.chunk.js +0 -2
- package/dist/scripts/4806-a6f31d703c-lite.chunk.js.map +0 -1
- package/dist/scripts/4985-7e02d5df40-lite.chunk.js +0 -2
- package/dist/scripts/4985-7e02d5df40-lite.chunk.js.map +0 -1
- package/dist/scripts/5554-f1f3baf822-lite.chunk.js.map +0 -1
- package/dist/scripts/5712-7cee70c6b4-lite.chunk.js +0 -2
- package/dist/scripts/5712-7cee70c6b4-lite.chunk.js.map +0 -1
- package/dist/scripts/6550-d99e0ed75d-lite.chunk.js +0 -2
- package/dist/scripts/6550-d99e0ed75d-lite.chunk.js.map +0 -1
- package/dist/scripts/6909-ba75701156-lite.chunk.js.map +0 -1
- package/dist/scripts/7148-1ced1b5dce-lite.chunk.js +0 -2
- package/dist/scripts/7148-1ced1b5dce-lite.chunk.js.map +0 -1
- package/dist/scripts/7568-55e9b01367-lite.chunk.js +0 -3
- package/dist/scripts/7568-55e9b01367-lite.chunk.js.map +0 -1
- package/dist/scripts/7617-211f084b70-lite.chunk.js.map +0 -1
- package/dist/scripts/7742-514844bd1a-lite.chunk.js +0 -2
- package/dist/scripts/7742-514844bd1a-lite.chunk.js.map +0 -1
- package/dist/scripts/7843-cbebf1a786-lite.chunk.js +0 -2
- package/dist/scripts/7843-cbebf1a786-lite.chunk.js.map +0 -1
- package/dist/scripts/8077-dfd239131d-lite.chunk.js +0 -2
- package/dist/scripts/8077-dfd239131d-lite.chunk.js.map +0 -1
- package/dist/scripts/843-4dbc5df109-lite.chunk.js +0 -3
- package/dist/scripts/843-4dbc5df109-lite.chunk.js.map +0 -1
- package/dist/scripts/8735-e74a148502-lite.chunk.js +0 -2
- package/dist/scripts/8735-e74a148502-lite.chunk.js.map +0 -1
- package/dist/scripts/8856-2d332952ae-lite.chunk.js +0 -2
- package/dist/scripts/8856-2d332952ae-lite.chunk.js.map +0 -1
- package/dist/scripts/904-2784e45cfc-lite.chunk.js +0 -2
- package/dist/scripts/904-2784e45cfc-lite.chunk.js.map +0 -1
- package/dist/scripts/9295-eb130a0b17-lite.chunk.js +0 -2
- package/dist/scripts/9295-eb130a0b17-lite.chunk.js.map +0 -1
- package/dist/scripts/9528-4e954d9dff-lite.chunk.js +0 -2
- package/dist/scripts/9528-4e954d9dff-lite.chunk.js.map +0 -1
- package/dist/scripts/9742-3f6b75484a-lite.chunk.js.map +0 -1
- package/dist/scripts/979-6a70a0e616-lite.chunk.js +0 -2
- package/dist/scripts/979-6a70a0e616-lite.chunk.js.map +0 -1
- package/dist/scripts/bundle-1187cb1e9f.min.js +0 -3
- /package/dist/css/{9528-lite-4a892bdbf2.chunk.css → 1202-lite-4a892bdbf2.chunk.css} +0 -0
- /package/dist/css/{7148-lite-856c02f000.chunk.css → 2888-lite-856c02f000.chunk.css} +0 -0
- /package/dist/css/{904-lite-2435a34b13.chunk.css → 289-lite-2435a34b13.chunk.css} +0 -0
- /package/dist/css/{9911-lite-2b4142796a.chunk.css → 3612-lite-2b4142796a.chunk.css} +0 -0
- /package/dist/css/{8856-lite-f8e496136d.chunk.css → 5579-lite-f8e496136d.chunk.css} +0 -0
- /package/dist/css/{6550-lite-45dc286aab.chunk.css → 6070-lite-45dc286aab.chunk.css} +0 -0
- /package/dist/css/{2970-lite-5a317efacd.chunk.css → 787-lite-5a317efacd.chunk.css} +0 -0
- /package/dist/css/{843-lite-db31e36b79.chunk.css → 8364-lite-db31e36b79.chunk.css} +0 -0
- /package/dist/css/{8735-lite-856c02f000.chunk.css → 9911-lite-856c02f000.chunk.css} +0 -0
- /package/dist/scripts/{3392-f7f8cb65e5-lite.chunk.js.LICENSE.txt → 4006-9dfe9cec1b-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{7568-55e9b01367-lite.chunk.js.LICENSE.txt → 8133-ffcff3b7fc-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{843-4dbc5df109-lite.chunk.js.LICENSE.txt → 8364-ff63447d36-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-1187cb1e9f.min.js.LICENSE.txt → bundle-9a3e49399a.min.js.LICENSE.txt} +0 -0
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[8735],{26136:(e,t,n)=>{n.d(t,{B:()=>o});var r=n(76198),a=n(23481),i=n(64818),s=a.T.encloseNamespace("shared.analyticsUtils");function o(e,t){return e?t?(0,r._8)((n=e.id,a=e.sessionId,o=+"".concat(n||function(e){if(!e)return 0;for(var t=0,n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n),t|=0;return Math.abs(t)}(a)).concat(Math.floor((new Date).getMinutes()/5)),{dictionaries:[r.O9,r.yd],separator:" ",length:2,style:"capital",seed:o})):e.deleted?s("deleted"):i.l.getFullName(e)||s("anonUser"):s("anonUser");var n,a,o}},3218:(e,t,n)=>{n.d(t,{R:()=>S});var r=n(32735),a=n(69087),i=n(26136),s=n(39157),o=n(69186),l=n(86572),u=n(28972),c=n(83140),d=n(80845),m=n(23481),v=n(2102),f=n(36532),g=m.T.encloseNamespace("interactives.studentResponseList");function b(e){var t=Object.keys(e.markedAnswers).length;return r.createElement("div",{className:"d-flex justify-content-end pt-3"},r.createElement("div",null,!e.showSubmitButtonSpinner&&r.createElement("button",{className:"btn btn-link",onClick:e.onClickClose},g("close")),!!e.interactionsToMark.length&&r.createElement(r.Fragment,null,e.isDemo?r.createElement(f.u,{id:"submitAnswers",title:g("demoOnly"),spanHack:!0,spanHackClassName:"d-inline-flex"},r.createElement("button",{className:"btn btn-outline-dark pointer-events-none",disabled:!t},g("submitAnswers"))):r.createElement(v.m,{variant:"outline-dark",onClick:e.onClickSubmit,disabled:!t,showSpinner:e.showSubmitButtonSpinner},g("submitAnswers")))))}var k=m.T.encloseNamespace("interactives.studentResponseList");function h(e){var t=Object.keys(e.markedAnswers).length;return r.createElement("div",{className:"d-flex justify-content-between pb-3"},r.createElement("div",{className:"d-flex"},!!e.summary.unanswered&&r.createElement("div",{className:"bg-light rounded p-2 me-2"},r.createElement("strong",{className:"me-2"},k("unanswered")),e.summary.unanswered),r.createElement("div",{className:"bg-light rounded p-2 me-2"},r.createElement("strong",{className:"me-2"},k("score")),e.summary.awaitingMarking?r.createElement("em",null,k("pending")):"".concat(Math.round(100*e.summary.percentCorrect),"%"))),!!e.interactionsToMark.length&&r.createElement(r.Fragment,null,e.isDemo?r.createElement(f.u,{id:"submitAnswers",title:k("demoOnly"),spanHack:!0},r.createElement("button",{className:"btn btn-outline-dark pointer-events-none",disabled:!t},k("submitAnswers"))):r.createElement(v.m,{variant:"outline-dark",onClick:e.onClickSubmit,disabled:!t,showSpinner:e.showSubmitButtonSpinner},k("submitAnswers"))))}const y={awaitingMarking:"MvGb5"};function p(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,s,o=[],l=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(o.push(r.value),o.length!==t);l=!0);}catch(e){u=!0,a=e}finally{try{if(!l&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(u)throw a}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return w(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?w(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function w(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function S(e){var t,n,m,v,f=p(r.useState(!1),2),g=f[0],k=f[1],w=(t=r.useRef(null),n=p(r.useState(!1),2),m=n[0],v=n[1],r.useEffect(function(){t.current&&!m&&(v(!0),requestAnimationFrame(function(){return t.current.scrollIntoView({behavior:"smooth",block:"center"})}))},[t.current,m]),t),S=(0,s.Rt)(e.interactive,e.studentResults),A=(0,d.Q)(e.interactive),E=function(e,t){return e.filter(function(e){return c.A.isInteractionCorrect(e,(0,d.j_)(t))===u.w.AwaitingMarking})}(A,e.studentResults);function C(){k(!0),e.submitMarkedAnswers()}return r.createElement(r.Fragment,null,r.createElement(h,{summary:S,interactionsToMark:E,markedAnswers:e.markedAnswers,onClickSubmit:C,showSubmitButtonSpinner:g,isDemo:e.isDemo}),r.createElement("ul",{className:"list-unstyled"},A.map(function(t,n){var u,c=t.id.toString()===(null===(u=e.selectedInteractionId)||void 0===u?void 0:u.toString()),d=E.some(function(e){return e.id===t.id}),m=(0,i.B)(e.studentResults.user,e.anonymiseUsers),v="p-2 mb-3 rounded";return c&&(v+=" border-2 border-info shadow"),v+=d?" ".concat(y.awaitingMarking):" border",r.createElement("li",{key:n,className:v,ref:c?w:null},r.createElement("div",{className:"d-flex mb-2"},r.createElement(l.y,{interaction:t,iconClassName:"flex-shrink-0"})),e.reportsStyling?r.createElement(o.O,{interaction:t,studentResults:e.studentResults,markedStatus:(0,s.HI)(t.id,e.studentResults,e.markedAnswers),markInteraction:e.addMarkedAnswers,imageCdnUrl:e.imageCdnUrl,anonymisedUserName:m,className:"bg-light ps-2",showFeedback:!0,reportsStyling:!0,responseComponentClass:"mx-n2"}):r.createElement(a.d,{interaction:t,studentResults:e.studentResults,markedStatus:(0,s.HI)(t.id,e.studentResults,e.markedAnswers),markInteraction:e.addMarkedAnswers,imageCdnUrl:e.imageCdnUrl,anonymisedUserName:m,showFeedback:!0}))})),r.createElement(b,{interactionsToMark:E,markedAnswers:e.markedAnswers,onClickSubmit:C,onClickClose:e.onClickClose,showSubmitButtonSpinner:g,isDemo:e.isDemo}))}},94892:(e,t,n)=>{n.d(t,{T:()=>a,i:()=>r});var r={HIGH:.75,MODERATE:.5},a={HIGH:.7,MODERATE:.7}},94644:(e,t,n)=>{n.d(t,{r:()=>c});var r=n(50242),a=n(81886),i=n(67058),s=n(14553),o=n(49267),l=n(49075),u={notFound:i.d,forbidden:{rating:s.q,yearLevel:s.q,region:o.a,privacy:s.q},badRequest:l._,internalServerError:l._};function c(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var i;i="number"==typeof e?e:e.status;var s=Object.assign(Object.assign({},u),t);i&&a.Q.Ry.isStatusCodeError(i)&&(i!==r.o.InternalServer?i!==r.o.NotFound?i!==r.o.Forbidden?n.badRequest||a.Q.Ry.throw(new s.badRequest):n.forbidden||a.Q.Ry.throw(new s.forbidden.privacy):n.notFound||a.Q.Ry.throw(new s.notFound):n.internalServerError||a.Q.Ry.throw(new l._))}}},54405:(e,t,n)=>{n.d(t,{X:()=>r});var r={interactive:function(){return{url:"/mocks/insights/interactive.json",key:"demo:interactive",normalize:!1}},interactiveMetadata:function(){return{url:"/mocks/insights/interactive-metadata.json",key:"demo:interactive:metadata",normalize:!1}},interactiveResults:function(){return{url:"/mocks/insights/interactive-results.json",key:"demo:interactive:results",normalize:!1}},videoViews:function(){return{url:"/mocks/insights/video-views.json",key:"demo:video:views",normalize:!1}},users:function(){return{url:"/mocks/insights/users.json",key:"demo:users",normalize:!1}},individualHeatmap:function(){return{url:"/mocks/insights/individual-heatmap.json",key:"demo:individual:heatmap",normalize:!1}},aggregateHeatmap:function(){return{url:"/mocks/insights/aggregate-heatmap.json",key:"demo:aggregate:heatmap",normalize:!1}}}},91286:(e,t,n)=>{n.d(t,{v:()=>s});var r=n(32735),a=n(94644);function i(e){return e.map(function(e){return e.statusCode}).join(":")}function s(e,t,n){var s=Array.isArray(e)?e:[e];(0,r.useEffect)(function(){s.forEach(function(e){(0,a.r)(e.statusCode,t,n)})},[i(s),t,n])}},93322:(e,t,n)=>{n.d(t,{F:()=>i});var r=n(32735),a=n(13126);function i(){r.useEffect(function(){return a.e.lockContentWidth(),function(){return a.e.unlockContentWidth()}},[])}},55588:(e,t,n)=>{n.r(t),n.d(t,{InteractiveStudentResultsDemoView:()=>y});var r=n(32735),a=n(23481),i=n(20354),s=n(2948),o=n(9193),l=n(26136),u=n(3218),c=n(9111),d=n(38143),m=n(39151),v=n(54405),f=n(82541),g=n(91286),b=n(93322);function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var h=a.T.encloseNamespace("shared.interactiveStudentResults");function y(e){var t,n,a,y,p,w=(y=(0,s.D)(d.g.ANONYMISE_USERS),p=1,function(e){if(Array.isArray(e))return e}(y)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,s,o=[],l=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(o.push(r.value),o.length!==t);l=!0);}catch(e){u=!0,a=e}finally{try{if(!l&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(u)throw a}}return o}}(y,p)||function(e,t){if(e){if("string"==typeof e)return k(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?k(e,t):void 0}}(y,p)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0];(0,b.F)();var S=i.a.useBasicFetch(v.X.interactiveMetadata()),A=i.a.useBasicFetch(v.X.interactive()),E=i.a.useBasicFetch(v.X.interactiveResults()),C=i.a.useBasicFetch(m.L.config());(0,g.v)([S,E]),(0,f.b)(S);var R=(0,o.D)(null===(t=A.data)||void 0===t?void 0:t.id,null===(n=S.data)||void 0===n?void 0:n.id,e.closePopup),I=R.markedAnswers,M=R.addMarkedAnswers,N=R.submitMarkedAnswers,j=null===(a=E.data)||void 0===a?void 0:a.students.find(function(t){var n,r,a,i,s,o;return e.userId?(null===(r=null===(n=t.user)||void 0===n?void 0:n.id)||void 0===r?void 0:r.toString())===(null===(a=e.userId)||void 0===a?void 0:a.toString()):!!e.sessionId&&(null===(s=null===(i=t.user)||void 0===i?void 0:i.sessionId)||void 0===s?void 0:s.toString())===(null===(o=e.sessionId)||void 0===o?void 0:o.toString())}),F=j?h("heading",{studentName:(0,l.B)(j.user,w)}):"",O=!!A.data&&!!E.data&&!!C.data;return r.createElement(c.G,{title:F,showLoadingSpinner:!O,closePopup:e.closePopup,size:"lg"},O&&r.createElement(u.R,{interactive:A.data,studentResults:j,markedAnswers:I,addMarkedAnswers:M,submitMarkedAnswers:N,imageCdnUrl:C.data.imageCdnUrl,selectedInteractionId:e.interactionId,onClickClose:e.closePopup,anonymiseUsers:w,reportsStyling:e.reportsStyling,isDemo:!0}))}}}]);
|
|
2
|
-
//# sourceMappingURL=8735-e74a148502-lite.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/8735-e74a148502-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/utils/AnonymiseUserUtils.ts","file:///app/packages/libs/shared/src/apps/student-response-list/StudentResponseListFooter.tsx","file:///app/packages/libs/shared/src/apps/student-response-list/StudentResponseListHeader.tsx","file:///app/packages/libs/shared/src/apps/student-response-list/student-response-list.scss","file:///app/packages/libs/shared/src/apps/student-response-list/StudentResponseList.tsx","file:///app/packages/libs/shared/src/constants/ScoreThresholds.ts","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/flight-requests/InsightsDemoRequests.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/hooks/useLockContentWidth.ts","file:///app/packages/projects/lite/src/apps/my-shares/views/demo/interactive-student-results/InteractiveStudentResultsDemoView.tsx"],"sourcesContent":["import { animals, colors, Config as UniqueNamesConfig, uniqueNamesGenerator } from 'unique-names-generator';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nconst namespace = 'shared.analyticsUtils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction guidToSeed(guid: string): number {\n if (!guid)\n return 0;\n\n // Simple hash function (DJB2-like) for browsers\n let hash = 0;\n for (let i = 0; i < guid.length; i++) {\n const char = guid.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash |= 0; // Convert to 32bit integer\n }\n return Math.abs(hash);\n}\n\nfunction getUniqueNamesConfig(userId: string, sessionId: string): UniqueNamesConfig {\n /**\n * Generate a seed that is unique to each user but changes every 5 minutes.\n * \n * We use a seed so that if the same user's name is anonymised multiple times\n * in quick succession (e.g. multiple renders), the same name will be returned each time.\n * \n * We change the seed every 5 minutes so that students don't always have the same name.\n */\n const seed = +`${userId || guidToSeed(sessionId)}${Math.floor((new Date()).getMinutes() / 5)}`;\n\n return {\n dictionaries: [ colors, animals ],\n separator: ' ',\n length: 2,\n style: 'capital',\n seed\n };\n}\n\nexport function anonymiseUserName(user: AnonUser, shouldAnonymise: boolean): string {\n if (!user) {\n return getPhrase('anonUser');\n }\n\n if (!shouldAnonymise) {\n if (user.deleted)\n return getPhrase('deleted');\n\n return UserHelper.getFullName(user) || getPhrase('anonUser');\n }\n\n return uniqueNamesGenerator(getUniqueNamesConfig(user.id, user.sessionId));\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { MarkedAnswerHash } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { Interaction } from 'libs/shared/interfaces';\n\nconst namespace = 'interactives.studentResponseList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface StudentResponseListFooterProps {\n interactionsToMark: Interaction[];\n markedAnswers: MarkedAnswerHash;\n onClickSubmit: () => void;\n onClickClose: () => void;\n showSubmitButtonSpinner: boolean;\n isDemo?: boolean;\n}\n\nexport function StudentResponseListFooter(props: StudentResponseListFooterProps): JSX.Element {\n const numMarkedAnswers = Object.keys(props.markedAnswers).length;\n\n return (\n <div className='d-flex justify-content-end pt-3'>\n <div>\n {!props.showSubmitButtonSpinner &&\n <button className='btn btn-link' onClick={props.onClickClose}>\n {getPhrase('close')}\n </button>\n }\n {!!props.interactionsToMark.length && (\n <>\n {props.isDemo ? (\n <Tooltip\n id='submitAnswers'\n title={getPhrase('demoOnly')}\n spanHack\n spanHackClassName='d-inline-flex'\n >\n <button\n className='btn btn-outline-dark pointer-events-none'\n disabled={!numMarkedAnswers}\n >\n {getPhrase('submitAnswers')}\n </button>\n </Tooltip>\n ) : (\n <SpinnerButton\n variant='outline-dark'\n onClick={props.onClickSubmit}\n disabled={!numMarkedAnswers}\n showSpinner={props.showSubmitButtonSpinner}\n >\n {getPhrase('submitAnswers')}\n </SpinnerButton>\n )}\n </>\n )}\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { MarkedAnswerHash } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { ResultsSummary } from 'libs/shared/apps/analytics/interfaces/ResultsSummary';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { Interaction } from 'libs/shared/interfaces';\n\nconst namespace = 'interactives.studentResponseList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface StudentResponseListHeaderProps {\n summary: ResultsSummary;\n interactionsToMark: Interaction[];\n markedAnswers: MarkedAnswerHash;\n onClickSubmit: () => void;\n showSubmitButtonSpinner: boolean;\n isDemo?: boolean;\n}\n\nexport function StudentResponseListHeader(props: StudentResponseListHeaderProps): JSX.Element {\n const numMarkedAnswers = Object.keys(props.markedAnswers).length;\n\n return (\n <div className='d-flex justify-content-between pb-3'>\n <div className='d-flex'>\n {!!props.summary.unanswered &&\n <div className='bg-light rounded p-2 me-2'>\n <strong className='me-2'>{getPhrase('unanswered')}</strong>\n {props.summary.unanswered}\n </div>\n }\n <div className='bg-light rounded p-2 me-2'>\n <strong className='me-2'>{getPhrase('score')}</strong>\n {props.summary.awaitingMarking\n ? <em>{getPhrase('pending')}</em>\n : `${Math.round(props.summary.percentCorrect * 100)}%`\n }\n </div>\n </div>\n {!!props.interactionsToMark.length && (\n <>\n {props.isDemo ? (\n <Tooltip id='submitAnswers' title={getPhrase('demoOnly')} spanHack>\n <button\n className='btn btn-outline-dark pointer-events-none'\n disabled={!numMarkedAnswers}\n >\n {getPhrase('submitAnswers')}\n </button>\n </Tooltip>\n ) : (\n <SpinnerButton\n variant='outline-dark'\n onClick={props.onClickSubmit}\n disabled={!numMarkedAnswers}\n showSpinner={props.showSubmitButtonSpinner}\n >\n {getPhrase('submitAnswers')}\n </SpinnerButton>\n )}\n </>\n )}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"awaitingMarking\":\"MvGb5\"};","import React from 'react';\n\nimport { InteractionResponseItem } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/InteractionResponseItem';\nimport { MarkedAnswerHash } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { anonymiseUserName } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { getMarkedStatus, getStudentResultsSummary } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { InteractionResponse } from 'libs/shared/components/interaction-response/InteractionResponse';\nimport { InteractionLabel } from 'libs/shared/components/interactive-questions/InteractionLabel';\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, Interactive, StudentAnswer, StudentResults } from 'libs/shared/interfaces';\nimport { InteractiveCorrectnessHelper } from 'libs/shared/utils/InteractiveCorrectnessHelper';\nimport { getInteractions, getStudentResult } from 'libs/shared/utils/InteractiveHelper';\n\nimport { StudentResponseListFooter } from './StudentResponseListFooter';\nimport { StudentResponseListHeader } from './StudentResponseListHeader';\n\nimport styles from './student-response-list.scss';\n\nfunction getInteractionsToMark(\n interactions: Interaction[],\n studentResults: StudentResults\n): Interaction[] {\n return interactions.filter(i => {\n return InteractiveCorrectnessHelper.isInteractionCorrect(\n i,\n getStudentResult(studentResults)\n ) === InteractionCorrectness.AwaitingMarking;\n });\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nfunction useScrollSelectedInteractionIntoView(): React.MutableRefObject<HTMLLIElement> {\n const ref = React.useRef<HTMLLIElement>(null);\n const [ scrolled, setScrolled ] = React.useState(false);\n\n // Only scroll once\n React.useEffect(() => {\n if (!ref.current || scrolled)\n return;\n\n setScrolled(true);\n requestAnimationFrame(() => ref.current.scrollIntoView({ behavior: 'smooth', block: 'center' }));\n }, [ ref.current, scrolled ]);\n\n return ref;\n}\n\ninterface StudentResponseListProps {\n interactive: Interactive;\n markedAnswers: MarkedAnswerHash;\n studentResults: StudentResults;\n addMarkedAnswers: (answer: StudentAnswer[], status: InteractiveAnswerStatus) => void;\n submitMarkedAnswers: () => void;\n onClickClose: () => void;\n imageCdnUrl: string;\n selectedInteractionId?: string;\n anonymiseUsers: boolean;\n reportsStyling?: boolean;\n isDemo?: boolean;\n}\n\nexport function StudentResponseList(props: StudentResponseListProps): JSX.Element {\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n const selectedInteractionRef = useScrollSelectedInteractionIntoView();\n\n const summary = getStudentResultsSummary(props.interactive, props.studentResults);\n const interactions = getInteractions(props.interactive);\n const questionsToMark = getInteractionsToMark(interactions, props.studentResults);\n\n function onClickSubmit(): void {\n setShowSpinner(true);\n props.submitMarkedAnswers();\n }\n\n return (\n <>\n <StudentResponseListHeader\n summary={summary}\n interactionsToMark={questionsToMark}\n markedAnswers={props.markedAnswers}\n onClickSubmit={onClickSubmit}\n showSubmitButtonSpinner={showSpinner}\n isDemo={props.isDemo}\n />\n <ul className='list-unstyled'>\n {interactions.map((interaction, idx) => {\n const isSelected = interaction.id.toString() === props.selectedInteractionId?.toString();\n const markingRequired = questionsToMark.some(q => q.id === interaction.id);\n const anonymisedUserName = anonymiseUserName(\n props.studentResults.user,\n props.anonymiseUsers\n );\n\n let className = 'p-2 mb-3 rounded';\n\n if (isSelected)\n className += ' border-2 border-info shadow';\n\n if (markingRequired)\n className += ` ${styles.awaitingMarking}`;\n else\n className += ' border';\n\n return (\n <li key={idx} className={className} ref={isSelected ? selectedInteractionRef : null}>\n <div className='d-flex mb-2'>\n <InteractionLabel\n interaction={interaction}\n iconClassName='flex-shrink-0'\n />\n </div>\n {props.reportsStyling ? (\n <InteractionResponse\n interaction={interaction}\n studentResults={props.studentResults}\n markedStatus={getMarkedStatus(interaction.id, props.studentResults, props.markedAnswers)}\n markInteraction={props.addMarkedAnswers}\n imageCdnUrl={props.imageCdnUrl}\n anonymisedUserName={anonymisedUserName}\n className='bg-light ps-2'\n showFeedback\n reportsStyling\n responseComponentClass='mx-n2'\n />\n ) : (\n <InteractionResponseItem\n interaction={interaction}\n studentResults={props.studentResults}\n markedStatus={getMarkedStatus(interaction.id, props.studentResults, props.markedAnswers)}\n markInteraction={props.addMarkedAnswers}\n imageCdnUrl={props.imageCdnUrl}\n anonymisedUserName={anonymisedUserName}\n showFeedback\n />\n )}\n </li>\n );\n })}\n </ul>\n <StudentResponseListFooter\n interactionsToMark={questionsToMark}\n markedAnswers={props.markedAnswers}\n onClickSubmit={onClickSubmit}\n onClickClose={props.onClickClose}\n showSubmitButtonSpinner={showSpinner}\n isDemo={props.isDemo}\n />\n </>\n );\n}","export interface ScoreThresholds {\n HIGH: number;\n MODERATE: number;\n}\n\nexport const ScoreThresholdDefaults: ScoreThresholds = {\n HIGH: 0.75,\n MODERATE: 0.5\n};\n\nexport const ScoreThresholdInsights: ScoreThresholds = {\n HIGH: 0.7,\n MODERATE: 0.7\n};","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n internalServerError?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError,\n internalServerError: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.InternalServer) {\n if (!ignoreMap.internalServerError)\n Core.ErrorHelper.throw(new UnspecifiedError());\n return;\n }\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { Flight } from 'libs/common/react/index';\n\nexport const InsightsDemoRequests = {\n interactive(): Flight.Request {\n return {\n url: `/mocks/insights/interactive.json`,\n key: `demo:interactive`,\n normalize: false\n };\n },\n\n interactiveMetadata(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-metadata.json`,\n key: `demo:interactive:metadata`,\n normalize: false\n };\n },\n\n interactiveResults(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-results.json`,\n key: `demo:interactive:results`,\n normalize: false\n };\n },\n\n videoViews(): Flight.Request {\n return {\n url: `/mocks/insights/video-views.json`,\n key: `demo:video:views`,\n normalize: false\n };\n },\n\n users(): Flight.Request {\n return {\n url: `/mocks/insights/users.json`,\n key: `demo:users`,\n normalize: false\n };\n },\n\n individualHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/individual-heatmap.json`,\n key: `demo:individual:heatmap`,\n normalize: false\n };\n },\n\n aggregateHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/aggregate-heatmap.json`,\n key: `demo:aggregate:heatmap`,\n normalize: false\n };\n }\n};","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import React from 'react';\n\nimport { LayoutHelper } from 'libs/shared/utils/LayoutHelper';\n\nexport function useLockContentWidth(): void {\n React.useEffect(() => {\n LayoutHelper.lockContentWidth();\n return () => LayoutHelper.unlockContentWidth();\n }, []);\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { useMarkAnswers } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { anonymiseUserName } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { StudentResponseList } from 'libs/shared/apps/student-response-list/StudentResponseList';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InsightsDemoRequests } from 'libs/shared/flight-requests/InsightsDemoRequests';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { Config, Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.interactiveStudentResults';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractiveStudentResultsViewProps extends PopupViewProps {\n userId: string;\n interactiveId: string;\n interactionId?: string;\n reportsStyling?: boolean;\n sessionId?: string;\n}\n\nexport function InteractiveStudentResultsDemoView(props: InteractiveStudentResultsViewProps): JSX.Element {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InsightsDemoRequests.interactiveMetadata()\n );\n const interactive = Flight.useBasicFetch<Interactive>(InsightsDemoRequests.interactive());\n\n const results = Flight.useBasicFetch<InteractiveResultSet>(InsightsDemoRequests.interactiveResults());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n useHandleObjectError([ interactiveMetadata, results ]);\n useCannotConsumeError(interactiveMetadata);\n\n const { markedAnswers, addMarkedAnswers, submitMarkedAnswers } = useMarkAnswers(\n interactive.data?.id,\n interactiveMetadata.data?.id,\n props.closePopup\n );\n\n const studentResults = results.data?.students.find(s => {\n if (props.userId)\n return s.user?.id?.toString() === props.userId?.toString();\n\n if (props.sessionId)\n return s.user?.sessionId?.toString() === props.sessionId?.toString();\n\n return false;\n });\n\n const popupTitle = studentResults\n ? getPhrase('heading', { studentName: anonymiseUserName(studentResults.user, anonymiseUsers) })\n : '';\n const dataLoaded = !!interactive.data && !!results.data && !!config.data;\n\n return (\n <Popup\n title={popupTitle}\n showLoadingSpinner={!dataLoaded}\n closePopup={props.closePopup}\n size='lg'\n >\n {dataLoaded &&\n <StudentResponseList\n interactive={interactive.data}\n studentResults={studentResults}\n markedAnswers={markedAnswers}\n addMarkedAnswers={addMarkedAnswers}\n submitMarkedAnswers={submitMarkedAnswers}\n imageCdnUrl={config.data.imageCdnUrl}\n selectedInteractionId={props.interactionId}\n onClickClose={props.closePopup}\n anonymiseUsers={anonymiseUsers}\n reportsStyling={props.reportsStyling}\n isDemo\n />\n }\n </Popup>\n );\n}"],"names":["getPhrase","anonymiseUserName","user","shouldAnonymise","userId","id","sessionId","seed","guid","hash","i","length","charCodeAt","Math","abs","guidToSeed","floor","Date","getMinutes","dictionaries","separator","style","deleted","LanguageService","StudentResponseListFooter","props","numMarkedAnswers","Object","keys","markedAnswers","className","showSubmitButtonSpinner","onClick","onClickClose","interactionsToMark","isDemo","Tooltip","title","spanHack","spanHackClassName","disabled","SpinnerButton","variant","onClickSubmit","showSpinner","StudentResponseListHeader","summary","unanswered","awaitingMarking","round","percentCorrect","StudentResponseList","ref","scrolled","setScrolled","setShowSpinner","selectedInteractionRef","current","requestAnimationFrame","scrollIntoView","behavior","block","interactive","studentResults","interactions","questionsToMark","filter","InteractiveCorrectnessHelper","InteractionCorrectness","getInteractionsToMark","submitMarkedAnswers","map","interaction","idx","isSelected","toString","selectedInteractionId","markingRequired","some","q","anonymisedUserName","anonymiseUsers","key","InteractionLabel","iconClassName","reportsStyling","InteractionResponse","markedStatus","markInteraction","addMarkedAnswers","imageCdnUrl","showFeedback","responseComponentClass","InteractionResponseItem","ScoreThresholdDefaults","HIGH","MODERATE","ScoreThresholdInsights","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","internalServerError","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","InsightsDemoRequests","url","normalize","interactiveMetadata","interactiveResults","videoViews","users","individualHeatmap","aggregateHeatmap","generateCacheKey","flightObjs","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","forEach","useLockContentWidth","InteractiveStudentResultsDemoView","results","config","data","closePopup","students","find","s","popupTitle","studentName","dataLoaded","showLoadingSpinner","size","interactionId"],"sourceRoot":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[8856],{41196:(e,t,a)=>{a.d(t,{W:()=>o});var r=a(20354),n=a(93479),i=a(20768),s=a(31949);function o(e,t,a){var o,l=r.a.useBasicFetch(s.N.currentUser()),c=r.a.useBasicFetch(!!e&&i.b.interactiveMetadata(e)),u=r.a.useBasicFetch(!!(null===(o=c.data)||void 0===o?void 0:o.interactiveId)&&i.b.interactive(c.data.interactiveId)),d=!!l.data&&!!u.data;return r.a.useBasicFetch(d&&n.I.interactiveResultSet(c.data.interactiveId,c.data.id,l.data,t,a))}},94644:(e,t,a)=>{a.d(t,{r:()=>u});var r=a(50242),n=a(81886),i=a(67058),s=a(14553),o=a(49267),l=a(49075),c={notFound:i.d,forbidden:{rating:s.q,yearLevel:s.q,region:o.a,privacy:s.q},badRequest:l._,internalServerError:l._};function u(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var i;i="number"==typeof e?e:e.status;var s=Object.assign(Object.assign({},c),t);i&&n.Q.Ry.isStatusCodeError(i)&&(i!==r.o.InternalServer?i!==r.o.NotFound?i!==r.o.Forbidden?a.badRequest||n.Q.Ry.throw(new s.badRequest):a.forbidden||n.Q.Ry.throw(new s.forbidden.privacy):a.notFound||n.Q.Ry.throw(new s.notFound):a.internalServerError||n.Q.Ry.throw(new l._))}}},39902:(e,t,a)=>{a.d(t,{FN:()=>f,SW:()=>v,fh:()=>h});var r=a(32735),n=a(20354),i=a(75896);function s(e){return function(e){if(Array.isArray(e))return l(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||o(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(e,t){if(e){if("string"==typeof e)return l(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?l(e,t):void 0}}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=Array(t);a<t;a++)r[a]=e[a];return r}function c(e){return c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c(e)}function u(e,t,a){return(t=function(e){var t=function(e){if("object"!=c(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var a=t.call(e,"string");if("object"!=c(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==c(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}var d=function(e,t){var a={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(a[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var n=0;for(r=Object.getOwnPropertySymbols(e);n<r.length;n++)t.indexOf(r[n])<0&&Object.prototype.propertyIsEnumerable.call(e,r[n])&&(a[r[n]]=e[r[n]])}return a},m=50;function h(e,t){var a=i.m.chunk(e,m).map(function(e){return t(i.m.uniq(e))}),r=n.a.useBasicFetchAll(a),s=i.m.flatten(r.data),o=r.data.length?s.reduce(function(e,t){return Object.assign(Object.assign({},e),u({},t.id,t))},{}):null;return{itemsArr:s,items:o,isFetching:r.isFetching,hasCompleted:r.hasCompleted}}function f(e,t,a){var n=null!=a?a:function(e){return"object"===c(e)?e.id:e},i=v({getRequest:t,_getKey:a}),s=i.fetchItems,o=d(i,["fetchItems"]);return r.useEffect(function(){(null==e?void 0:e.length)&&s(e)},[null==e?void 0:e.map(n).join(",")]),o}function v(e){var t,a,l,d,h,f=null!==(t=e._getKey)&&void 0!==t?t:function(e){return"object"===c(e)?e.id:e},v=r.useRef(new Set),g=(d=r.useState([]),h=2,function(e){if(Array.isArray(e))return e}(d)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var r,n,i,s,o=[],l=!0,c=!1;try{if(i=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;l=!1}else for(;!(l=(r=i.call(a)).done)&&(o.push(r.value),o.length!==t);l=!0);}catch(e){c=!0,n=e}finally{try{if(!l&&null!=a.return&&(s=a.return(),Object(s)!==s))return}finally{if(c)throw n}}return o}}(d,h)||o(d,h)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),p=g[0],y=g[1],b=n.a.useBasicFetchAll(p),I=i.m.flatten(b.data),S=b.data.length?I.reduce(function(e,t){return Object.assign(Object.assign({},e),u({},f(t),t))},{}):null;return{hasFirstRequestCompleted:!!(null===(l=null===(a=b.responses)||void 0===a?void 0:a[0])||void 0===l?void 0:l.hasCompleted),itemsArr:I,items:S,isFetching:b.isFetching,fetchItems:function(t){if(null==t?void 0:t.length){var a=[];t.forEach(function(e){var t=f(e);v.current.has(t)||(a.push(e),v.current.add(t))}),a.length&&y(function(t){return[].concat(s(t),s(i.m.chunk(a,m).map(e.getRequest)))})}}}}},91286:(e,t,a)=>{a.d(t,{v:()=>s});var r=a(32735),n=a(94644);function i(e){return e.map(function(e){return e.statusCode}).join(":")}function s(e,t,a){var s=Array.isArray(e)?e:[e];(0,r.useEffect)(function(){s.forEach(function(e){(0,n.r)(e.statusCode,t,a)})},[i(s),t,a])}},78057:(e,t,a)=>{a.d(t,{R:()=>C});var r=a(32735),n=a(75896),i=a(23481),s=a(97958),o=i.T.encloseNamespace("shared.studentResultsTable");function l(e){return"not_completed"===e.filter?r.createElement(s.u,{className:"bg-white rounded-bottom py-5"},r.createElement(s.u.Image,{src:e.notCompletedImageUrl,size:"small"}),r.createElement(s.u.Info,null,o("notCompletedDescription"))):"marking_required"===e.filter?r.createElement(s.u,{className:"bg-white rounded-bottom py-5"},r.createElement(s.u.Image,{src:e.markingRequiredImageUrl,size:"small"}),r.createElement(s.u.Info,null,o("markingRequiredDescription"))):"helping_hand"===e.filter?r.createElement(s.u,{className:"bg-white rounded-bottom py-5"},r.createElement(s.u.Image,{src:e.helpingHandImageUrl,size:"small"}),r.createElement(s.u.Info,null,o("helpingHandDescription"))):r.createElement(s.u,{className:"bg-white rounded-bottom py-5"},r.createElement(s.u.Image,{src:e.emptyStateImageUrl,size:"small"}),r.createElement(s.u.Heading,null,o("emptyStateHeading")),r.createElement(s.u.Info,null,o("emptyStateDescription")))}var c=a(83345),u="shared.studentResultsTable";function d(e){function t(t){var a=e.filter===t?null:t;e.setFilter(a)}function a(t){return"btn btn-outline-dark ".concat(function(t){return e.filter===t}(t)?"bg-dark text-white":"")}return r.createElement("div",{className:"d-flex align-items-center mb-3"},r.createElement("p",{className:"h6 mb-0"},r.createElement(c.x,{namespace:u,phrase:"filters"})),r.createElement("div",{className:"d-flex border-start ps-3 ms-3 gap-2"},r.createElement("button",{className:a("not_completed"),onClick:function(){return t("not_completed")}},r.createElement(c.x,{namespace:u,phrase:"notCompletedFilter"})),r.createElement("button",{className:a("marking_required"),onClick:function(){return t("marking_required")}},r.createElement(c.x,{namespace:u,phrase:"markingRequiredFilter"})),r.createElement("button",{className:a("helping_hand"),onClick:function(){return t("helping_hand")}},r.createElement(c.x,{namespace:u,phrase:"helpingHandFilter"}))))}var m=a(97364),h=a(6748),f=a(84806),v=a(19912);function g(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var r,n,i,s,o=[],l=!0,c=!1;try{if(i=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;l=!1}else for(;!(l=(r=i.call(a)).done)&&(o.push(r.value),o.length!==t);l=!0);}catch(e){c=!0,n=e}finally{try{if(!l&&null!=a.return&&(s=a.return(),Object(s)!==s))return}finally{if(c)throw n}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return p(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?p(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function p(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=Array(t);a<t;a++)r[a]=e[a];return r}var y={table:"".concat(v.Z.fixedTable," bg-white rounded-start border border-end-0"),header:"".concat(v.Z.header," border-bottom"),headerRow:"h-100",headerCell:"d-flex align-items-center justify-content-start",row:v.Z.row},b={header:"".concat(v.Z.header," fw-bold"),headerRow:"h-100",headerCell:"".concat(v.Z.interactionHeaderCellOuter," bg-white border-bottom"),row:"".concat(v.Z.row," ").concat(v.Z.resultsRow),cell:v.Z.resultsCellOuter};function I(e){var t,a=g(r.useState((0,m.P)(e.sortBy,"score")),2),i=a[0],s=a[1],o=g(r.useState(e.filterBy),2),c=o[0],u=o[1],p=r.useRef(null),I=(0,f.R7)(e.results,e.anonymiseUsers,null===(t=e.config)||void 0===t?void 0:t.imageCdnUrl,e.showSeparateNameColumns),S=(0,f.lE)(e.interactive,e.interactiveMetadata,e.results,function(e){(0,f.bB)(p.current,e)},e.refreshTable),E=(0,f.Fx)(e.interactive,e.results,e.refreshTable,e.anonymiseUsers,n.m.first(i),c,e.showSeparateNameColumns);function w(e){(0,f.l8)(p.current,e)}return r.createElement("div",null,!!e.results.students.length&&r.createElement(d,{filter:c,setFilter:u}),!E.length&&r.createElement(l,{emptyStateImageUrl:e.emptyStateImageUrl,helpingHandImageUrl:e.helpingHandImageUrl,markingRequiredImageUrl:e.markingRequiredImageUrl,notCompletedImageUrl:e.notCompletedImageUrl,filter:c}),!!E.length&&r.createElement("div",{ref:p,className:"d-flex".concat(E.length&&S.length?" ".concat(v.Z.hasResults):"")},r.createElement(h.i,{columns:I,data:E,theme:S.length?y:Object.assign(Object.assign({},y),{table:"".concat(v.Z.fixedTable," bg-white rounded border")}),onSelectRow:function(t){var a=t.original;e.viewStudentResults(a.user,e.interactiveMetadata.id)},onRowMouseOver:function(e){return w(e.index)},onRowMouseLeave:function(){return w()},enableSort:!0,manualSort:!0,onSort:s,initialSortBy:i}),!!S.length&&r.createElement(h.i,{columns:S,data:E,theme:b,enableSlider:!0,scrollIncrement:8*f.Ju,onSelectCell:function(t){e.viewStudentResults(t.row.original.user,e.interactiveMetadata.id,t.column.id)},scrollContainerClassName:"rounded-end border border-start-0 border"})))}var S=a(99742);const E={partialInsights:"qSeTe"};function w(){return r.createElement("div",null,r.createElement("div",{className:"d-flex align-items-center mb-3"},r.createElement("p",{className:"h6 px-4 mb-0 me-4 partial-loading-background"}," "),r.createElement("div",{className:"row g-2 w-50"},r.createElement("div",{className:"col-3"},r.createElement("div",{className:"p-2 rounded-1 partial-loading-background"}," ")),r.createElement("div",{className:"col-3"},r.createElement("div",{className:"p-2 rounded-1 partial-loading-background"}," ")),r.createElement("div",{className:"col-3"},r.createElement("div",{className:"p-2 rounded-1 partial-loading-background"}," ")))),r.createElement("div",{className:"row g-3 mb-5"},r.createElement("div",{className:"col-12"},r.createElement("div",{className:"".concat(E.partialInsights," rounded partial-loading-background")}))))}function C(e){return r.createElement(r.Fragment,null,!e.hasDataLoaded&&r.createElement(w,null),e.hasDataLoaded&&r.createElement(I,{interactive:e.interactive,interactiveMetadata:e.interactiveMetadata,results:e.results,refreshTable:e.isFetching||e.hideStaffResults,viewStudentResults:e.viewStudentResults,emptyStateImageUrl:S.W.Insights.NO_RESPONSES,sortBy:e.sortBy,filterBy:e.filterBy,anonymiseUsers:e.anonymiseUsers,notCompletedImageUrl:S.W.Insights.JIGSAW,markingRequiredImageUrl:S.W.Insights.CLIPBOARD,helpingHandImageUrl:S.W.Insights.SPEECH_BUBBLE_HEART,config:e.config,showSeparateNameColumns:!0}))}},9447:(e,t,a)=>{a.d(t,{Y:()=>s});var r=a(20354),n=a(30439);function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function s(e){var t,a=r.a.useBasicFetch(n.o.getAnonSessions(e));return{items:(null===(t=a.data)||void 0===t?void 0:t.reduce(function(e,t){return Object.assign(Object.assign({},e),(a={},r=t.sessionId,n={sessionId:(s=t).sessionId,name:s.sessionName},(r=function(e){var t=function(e){if("object"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var a=t.call(e,"string");if("object"!=i(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==i(t)?t:t+""}(r))in a?Object.defineProperty(a,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):a[r]=n,a));var a,r,n,s},{}))||{},hasCompleted:a.hasCompleted,isFetching:a.isFetching}}},5780:(e,t,a)=>{a.d(t,{p:()=>c});var r=a(20354),n=a(2510),i=a(18488),s=a(4594),o=a(3010),l=a(88630);function c(e){var t,a,c,u,d=r.a.useGetFetch(),m=r.a.useBasicFetch(i.o.getShare(e)),h=(null===(t=m.data)||void 0===t?void 0:t.type)===n.y.Classroom&&(null===(u=null===(c=null===(a=m.data)||void 0===a?void 0:a.recipients)||void 0===c?void 0:c.find(function(e){return e.recipientTypeId===s.E.Classroom}))||void 0===u?void 0:u.recipientId),f=function(e){return l.F.getClassroomStudents(h,e)},v=(0,o.i)(h&&f,function(e){return d(f(e))});return Object.assign(Object.assign({},v),{hasCompleted:!h||v.hasCompleted})}},52389:(e,t,a)=>{a.d(t,{_:()=>f});var r=a(2948),n=a(20354),i=a(41196),s=a(18488),o=a(38143),l=a(91286),c=a(9447),u=a(5780);function d(e,t){if(e){if("string"==typeof e)return m(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?m(e,t):void 0}}function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=Array(t);a<t;a++)r[a]=e[a];return r}var h=[{id:"0",attempts:[{id:"0",answeredAt:0,answers:[]}]}];function f(e){var t,a,f,v,g=(f=(0,r.D)(o.g.HIDE_STAFF_RESULTS),v=1,function(e){if(Array.isArray(e))return e}(f)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var r,n,i,s,o=[],l=!0,c=!1;try{if(i=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;l=!1}else for(;!(l=(r=i.call(a)).done)&&(o.push(r.value),o.length!==t);l=!0);}catch(e){c=!0,n=e}finally{try{if(!l&&null!=a.return&&(s=a.return(),Object(s)!==s))return}finally{if(c)throw n}}return o}}(f,v)||d(f,v)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0],p=n.a.useBasicFetch(s.o.getShare(e)),y=(0,i.W)(null===(t=p.data)||void 0===t?void 0:t.objectId,null,e),b=(0,c.Y)(e),I=(0,u.p)(e);(0,l.v)(y);var S=y.hasCompleted&&b.hasCompleted&&I.hasCompleted;if(!S)return{data:null,hasCompleted:!1};var E=new Set,w=y.data.students.map(function(e){var t,a=null===(t=e.user)||void 0===t?void 0:t.userType;return g&&1===a?null:e.user?(E.add(e.user.id),e):Object.assign(Object.assign({},e),{user:b.items[e.sessionId]||{sessionId:e.sessionId}})}).filter(function(e){return!!e});return(null===(a=null==I?void 0:I.items)||void 0===a?void 0:a.length)&&w.push.apply(w,function(e){return function(e){if(Array.isArray(e))return m(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||d(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(I.items.filter(function(e){return!E.has(e.id)}).map(function(e){return{user:e,results:h,isPlaceholder:!0}}))),{hasCompleted:S,isFetching:p.isFetching||y.isFetching||b.isFetching||I.isFetching,data:Object.assign(Object.assign({},y.data),{students:w})}}},50808:(e,t,a)=>{a.r(t),a.d(t,{BaseInsightsView:()=>Oe});var r=a(32735),n=a(81886),i=a(20354),s=a(18488),o=a(86099),l=a(4594),c=a(23481),u=a(2948),d=a(93479),m=a(21789),h=a(60051),f=a(16714),v=a(39151),g=a(1666),p=a(47812),y=a(31949),b=a(91286),I=a(93322),S=a(22902),E=a(79612),w=a(31908),C=a(86702),A=a(88630),F=a(9540),j=a(17132),N=function(e,t){return{url:"{gateway}/v2/analytics/streams/shares/".concat(e,"/aggregation/").concat(t),key:"video:views:v2:share:aggregation:".concat(e,":").concat(t),normalize:!1}},U=function(e){return{url:"{gateway}/v2/analytics/streams/shares/".concat(e,"/heat-map"),key:"video:views:v2:share:heatmap:".concat(e),normalize:!1}},B=function(e){return{url:"{gateway}/v2/analytics/streams/shares/".concat(e,"/aggregation/heat-map"),key:"video:views:v2:share:heatmap:aggregation:".concat(e),normalize:!1}},O=a(38143),R=a(39902),T=a(9447);function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=Array(t);a<t;a++)r[a]=e[a];return r}function L(e){var t,a,r,n,s,o=(n=(0,u.D)(O.g.HIDE_STAFF_RESULTS),s=1,function(e){if(Array.isArray(e))return e}(n)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var r,n,i,s,o=[],l=!0,c=!1;try{if(i=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;l=!1}else for(;!(l=(r=i.call(a)).done)&&(o.push(r.value),o.length!==t);l=!0);}catch(e){c=!0,n=e}finally{try{if(!l&&null!=a.return&&(s=a.return(),Object(s)!==s))return}finally{if(c)throw n}}return o}}(n,s)||function(e,t){if(e){if("string"==typeof e)return k(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?k(e,t):void 0}}(n,s)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0],l=i.a.useBasicFetch(U(e)),c=(0,T.Y)(e),d=(null===(t=l.data)||void 0===t?void 0:t.map(function(e){return e.userId}).filter(function(e){return!!e}))||[],m=(0,R.fh)(d,y.N.getById),h=Object.assign(Object.assign({},c.items),m.items),f=null===(a=l.data)||void 0===a?void 0:a.filter(function(e){var t=h[e.userId||e.sessionId];return t&&1===t.userType&&o?null:e}).filter(function(e){return!!e}),v=null===(r=l.data)||void 0===r?void 0:r.map(function(e){return Object.assign(Object.assign({},function(e){var t,a;return e.userId?(null===(t=m.items)||void 0===t?void 0:t[e.userId])||{id:e.userId,deleted:!0}:(null===(a=c.items)||void 0===a?void 0:a[e.sessionId])||{sessionId:e.sessionId}}(e)),{percentage:e.engagementRate})});return{engagement:f,users:v,hasCompleted:l.hasCompleted&&c.hasCompleted&&(!(null==d?void 0:d.length)||m.hasCompleted)}}var _=a(5780),x=a(10447);function M(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var r,n,i,s,o=[],l=!0,c=!1;try{if(i=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;l=!1}else for(;!(l=(r=i.call(a)).done)&&(o.push(r.value),o.length!==t);l=!0);}catch(e){c=!0,n=e}finally{try{if(!l&&null!=a.return&&(s=a.return(),Object(s)!==s))return}finally{if(c)throw n}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return D(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?D(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function D(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=Array(t);a<t;a++)r[a]=e[a];return r}var q=c.T.encloseNamespace("shared.insightsHeatmap");function P(e){var t,a,n,o,c,U=M((0,u.D)(C.y.ANONYMISE_USERS),1)[0],O=M((0,u.D)(C.y.HIDE_STAFF_RESULTS),1)[0];(0,I.F)();var R=(0,S.T)().hasPermissions,T=i.a.useBasicFetch(s.o.getShare(e.shareId)),k=m.x.getClassroomIdFromShare(T.data),D=i.a.useBasicFetch(k&&A.F.getClassroom(k)),P=(0,_.p)(e.shareId),W=T.data&&w.M.getVideoRequest(T.data.objectId,T.data.objectTypeId),H=i.a.useBasicFetch(W),V=i.a.useBasicFetch(v.L.config()),G=i.a.useBasicFetch(y.N.currentUser()),$=i.a.useBasicFetch(G.data&&g.h.yearGroups(G.data.customerId)),Z=w.M.isInteractive(H.data)&&d.I.pendingReviews({interactives:[H.data].map(function(t){return{interactiveId:t.interactiveId,metadataId:t.id,shareId:e.shareId}}),filters:{currentCustomerId:G.data.customerId,currentUserId:G.data.id}}),z=(null===(a=null===(t=i.a.useBasicFetch(Z).data)||void 0===t?void 0:t[0])||void 0===a?void 0:a.pendingReviewCount)>0,Q=i.a.useBasicFetch(B(e.shareId)),Y=L(e.shareId),K=Y.users,J=Y.engagement,X=Y.hasCompleted,ee=i.a.useBasicFetch(N(e.shareId,"year_group")),te=i.a.useBasicFetch((null===(n=T.data)||void 0===n?void 0:n.objectId)&&p.k.createViewKey(T.data.objectId,h.f.MasterObject));(0,E.M)({title:H.data?q("pageTitle",{video:null===(o=H.data)||void 0===o?void 0:o.name}):null}),(0,b.v)([T,H]);var ae=T.hasCompleted&&H.hasCompleted&&V.hasCompleted&&Q.hasCompleted&&ee.hasCompleted&&te.hasCompleted&&$.hasCompleted;return r.createElement("div",{className:"px-3"},r.createElement(F.j,{video:H.data,tabs:function(){var e;return(null===(e=T.data)||void 0===e?void 0:e.objectTypeId)===l.E.Interactive?(0,x.kj)(T.data,"heatmap"):(0,x.$6)(T.data,"heatmap")}(),hasAnalytics:R(f.C.ViewCustomerAnalytics),analyticsWebUrl:null===(c=V.data)||void 0===c?void 0:c.analyticsWebUrl,share:T.data,yearGroups:$.data,classroom:D.data,markingRequired:z,hasData:!!(null==J?void 0:J.length)}),r.createElement(j.w,{aggregateEngagement:Q.data,individualEngagement:J,yearGroups:ee.data,config:V.data,users:K,viewKey:te.data,hasDataLoaded:ae,tableDataLoaded:X,anonymiseUsers:U,classroomStudents:P.items,hideStaffResults:O}))}var W=a(39157),H=a(94892),V=a(20768),G=a(54948),$=a(52389);function Z(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=Array(t);a<t;a++)r[a]=e[a];return r}var z=c.T.encloseNamespace("insights.interactiveInsightsOverviewView");function Q(e){var t,a,n,l,c,d,h,p=(d=(0,u.D)(O.g.ANONYMISE_USERS),h=1,function(e){if(Array.isArray(e))return e}(d)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var r,n,i,s,o=[],l=!0,c=!1;try{if(i=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;l=!1}else for(;!(l=(r=i.call(a)).done)&&(o.push(r.value),o.length!==t);l=!0);}catch(e){c=!0,n=e}finally{try{if(!l&&null!=a.return&&(s=a.return(),Object(s)!==s))return}finally{if(c)throw n}}return o}}(d,h)||function(e,t){if(e){if("string"==typeof e)return Z(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?Z(e,t):void 0}}(d,h)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0];(0,I.F)();var w=(0,S.T)().hasPermissions,C=i.a.useBasicFetch(v.L.config()),j=i.a.useBasicFetch(y.N.currentUser()),R=i.a.useBasicFetch(j.data&&g.h.yearGroups(j.data.customerId)),T=i.a.useBasicFetch(s.o.getShare(e.shareId)),k=m.x.getClassroomIdFromShare(T.data),L=i.a.useBasicFetch(k&&A.F.getClassroom(k)),M=(0,_.p)(e.shareId),D=i.a.useBasicFetch((null===(t=T.data)||void 0===t?void 0:t.objectId)&&V.b.interactiveMetadata(T.data.objectId)),q=i.a.useBasicFetch((null===(a=D.data)||void 0===a?void 0:a.interactiveId)&&V.b.interactive(D.data.interactiveId)),P=(0,$._)(e.shareId),Q=i.a.useBasicFetch(U(e.shareId)),Y=i.a.useBasicFetch(B(e.shareId)),K=i.a.useBasicFetch(N(e.shareId,"os_name"));(0,E.M)({title:D.data?z("pageTitle",{video:null===(n=D.data)||void 0===n?void 0:n.name}):null}),(0,b.v)([T,q,D]);var J=C.hasCompleted&&D.hasCompleted&&q.data&&Y.hasCompleted&&Q.hasCompleted&&K.hasCompleted&&P.hasCompleted&&R.hasCompleted,X=function(e,t){return{resultsAppLink:(0,o.rq)(e,t),questionsAppLink:(0,o.Sj)(e,t),heatmapAppLink:(0,o.Rv)(e,t)}}(T.data),ee=J&&(0,W.R6)(q.data,P.data,H.T),te=ee&&ee.markingRequired.length>0;return r.createElement("div",{className:"px-3"},r.createElement(F.j,{video:D.data,tabs:(0,x.kj)(T.data,"insights"),hasAnalytics:w(f.C.ViewCustomerAnalytics),analyticsWebUrl:null===(l=C.data)||void 0===l?void 0:l.analyticsWebUrl,share:T.data,yearGroups:R.data,classroom:L.data,markingRequired:te,hasData:!!(null===(c=P.data)||void 0===c?void 0:c.students.length)}),r.createElement(G.m,{aggregateEngagement:Y.data,individualEngagement:Q.data,interactive:q.data,interactiveMetadata:D.data,interactiveInsightsAppLinks:X,classroomStudents:M.items,results:P.data,osCount:K.data,config:C.data,anonymiseUsers:p,hasDataLoaded:J,share:T.data}))}var Y=a(48705);function K(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=Array(t);a<t;a++)r[a]=e[a];return r}var J=c.T.encloseNamespace("shared.interactiveInsightsQuestionsView");function X(e){var t,a,n,o,l,c,d,h,p=(d=(0,u.D)(O.g.ANONYMISE_USERS),h=1,function(e){if(Array.isArray(e))return e}(d)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var r,n,i,s,o=[],l=!0,c=!1;try{if(i=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;l=!1}else for(;!(l=(r=i.call(a)).done)&&(o.push(r.value),o.length!==t);l=!0);}catch(e){c=!0,n=e}finally{try{if(!l&&null!=a.return&&(s=a.return(),Object(s)!==s))return}finally{if(c)throw n}}return o}}(d,h)||function(e,t){if(e){if("string"==typeof e)return K(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?K(e,t):void 0}}(d,h)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0];(0,I.F)();var w=(0,S.T)().hasPermissions,C=i.a.useBasicFetch(y.N.currentUser()),j=i.a.useBasicFetch(v.L.config()),N=i.a.useBasicFetch(C.data&&g.h.yearGroups(C.data.customerId)),U=i.a.useBasicFetch(s.o.getShare(e.shareId)),B=m.x.getClassroomIdFromShare(U.data),R=i.a.useBasicFetch(B&&A.F.getClassroom(B)),T=i.a.useBasicFetch((null===(t=U.data)||void 0===t?void 0:t.objectId)&&V.b.interactiveMetadata(null===(a=U.data)||void 0===a?void 0:a.objectId)),k=i.a.useBasicFetch((null===(n=T.data)||void 0===n?void 0:n.interactiveId)&&V.b.interactive(T.data.interactiveId)),L=(0,$._)(e.shareId);(0,E.M)({title:T.data?J("pageTitle",{video:null===(o=T.data)||void 0===o?void 0:o.name}):null}),(0,b.v)([U,k,T]);var _=k.data&&T.data&&!!L.data&&!!N.data,M=_&&(0,W.R6)(k.data,L.data,H.T),D=M&&M.markingRequired.length>0;return r.createElement("div",{className:"px-3"},r.createElement(F.j,{tabs:(0,x.kj)(U.data,"questions"),video:T.data,hasAnalytics:w(f.C.ViewCustomerAnalytics),analyticsWebUrl:null===(l=j.data)||void 0===l?void 0:l.analyticsWebUrl,share:U.data,yearGroups:N.data,classroom:R.data,markingRequired:D,hasData:!!(null===(c=L.data)||void 0===c?void 0:c.students.length)}),r.createElement(Y.x,{interactive:k.data,interactiveMetadata:T.data,interactionId:e.interactionId,config:j.data,sortBy:e.sortBy,isFetching:!L.hasCompleted||k.isFetching,anonymiseUsers:p,results:L.data,hasDataLoaded:_}))}var ee=a(14070),te=a(97291),ae=a(78057);function re(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var r,n,i,s,o=[],l=!0,c=!1;try{if(i=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;l=!1}else for(;!(l=(r=i.call(a)).done)&&(o.push(r.value),o.length!==t);l=!0);}catch(e){c=!0,n=e}finally{try{if(!l&&null!=a.return&&(s=a.return(),Object(s)!==s))return}finally{if(c)throw n}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return ne(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?ne(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ne(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=Array(t);a<t;a++)r[a]=e[a];return r}var ie=c.T.encloseNamespace("insights.interactiveInsightsStudents");function se(e){var t,a,o,l,c,d=re((0,u.D)(O.g.ANONYMISE_USERS),1)[0],h=re((0,u.D)(O.g.HIDE_STAFF_RESULTS),1)[0],p=(0,S.T)().hasPermissions,I=i.a.useBasicFetch(y.N.currentUser()),w=i.a.useBasicFetch(v.L.config()),C=i.a.useBasicFetch(I.data&&g.h.yearGroups(I.data.customerId)),j=i.a.useBasicFetch(s.o.getShare(e.shareId)),N=m.x.getClassroomIdFromShare(j.data),U=i.a.useBasicFetch(N&&A.F.getClassroom(N)),B=i.a.useBasicFetch((null===(t=j.data)||void 0===t?void 0:t.objectId)&&V.b.interactiveMetadata(j.data.objectId)),R=i.a.useBasicFetch((null===(a=B.data)||void 0===a?void 0:a.interactiveId)&&V.b.interactive(B.data.interactiveId)),T=(0,$._)(e.shareId),k=R.data&&B.data&&!!T.data&&!!C.data,L=k&&(0,W.R6)(R.data,T.data,H.T),_=L&&L.markingRequired.length>0;return(0,E.M)({title:B.data?ie("pageTitle",{video:null===(o=B.data)||void 0===o?void 0:o.name}):null}),(0,b.v)([j,R,B]),r.createElement("div",{className:"px-3"},r.createElement(F.j,{tabs:(0,x.kj)(j.data,"results"),video:B.data,hasAnalytics:p(f.C.ViewCustomerAnalytics),analyticsWebUrl:null===(l=w.data)||void 0===l?void 0:l.analyticsWebUrl,share:j.data,yearGroups:C.data,classroom:U.data,markingRequired:_,hasData:!!(null===(c=T.data)||void 0===c?void 0:c.students.length)}),r.createElement(ae.R,{interactiveMetadata:B.data,viewStudentResults:function(t,a,r){n.Q.C$.trigger({application:te.O.MY_SHARES,action:ee.e.MyShares.INTERACTIVE_STUDENT_RESULTS,params:{studentId:t.id,shareId:e.shareId,interactionId:r,sessionId:t.sessionId}})},interactive:R.data,results:T.data,filterBy:e.filterBy,sortBy:e.sortBy,isFetching:T.isFetching,anonymiseUsers:d,hasDataLoaded:k,config:w.data,hideStaffResults:h}))}var oe=a(37802),le=a(51870),ce=a(50916),ue=a(84621),de=a(98551),me=a(35223),he=c.T.encloseNamespace("shared.insightStudentsNotWatched");function fe(e){var t,a=(null===(t=e.students)||void 0===t?void 0:t.filter(function(t){var a;return!(null===(a=e.watchedIds)||void 0===a?void 0:a.includes(t.id))}))||[];return r.createElement(ue.L,{title:he("title"),svgName:me.vn.Puzzle,svgClassName:"bg-light-teal text-teal"},r.createElement(de.y,{students:a,imageCdnUrl:e.imageCdnUrl,imageUrl:e.imageUrl,description:he("studentsDisplay"),anonymiseUsers:e.anonymiseUsers}))}var ve=c.T.encloseNamespace("shared.insightStudentsWatched");function ge(e){return r.createElement(ue.L,{title:ve("title"),svgName:me.vn.Flag,svgClassName:"bg-light-indigo text-indigo",count:e.students.length},r.createElement(de.y,{students:e.students,imageCdnUrl:e.imageCdnUrl,imageUrl:e.imageUrl,description:ve("studentsDisplay"),appLink:e.heatmapAppLink,appLinkText:ve("viewAll"),anonymiseUsers:e.anonymiseUsers}))}var pe=a(8604),ye=a(83345),be=a(99742),Ie=a(53214);const Se="oHwkx";function Ee(){return r.createElement("div",null,r.createElement("h2",{className:"h4 w-25 partial-loading-background"}," "),r.createElement("div",{className:"row g-3 mb-5"},r.createElement("div",{className:"col-12"},r.createElement("div",{className:"".concat(Se," rounded partial-loading-background")}))),r.createElement("h2",{className:"h4 w-25 partial-loading-background"}," "),r.createElement("div",{className:"row g-3 mb-5"},r.createElement("div",{className:"col-6"},r.createElement("div",{className:"".concat(Se," rounded partial-loading-background")})),r.createElement("div",{className:"col-6"},r.createElement("div",{className:"".concat(Se," rounded partial-loading-background")}))))}var we="insights.videoInsightsOverview";function Ce(e){var t,a,n,i=e.hasDataLoaded&&!!(null===(t=e.viewers)||void 0===t?void 0:t.length);function s(){return e.viewers?Object.values(e.viewers):[]}return r.createElement(r.Fragment,null,!e.hasDataLoaded&&r.createElement(Ee,null),e.hasDataLoaded&&r.createElement(Ie.u,{video:e.video,hasData:i,share:e.share},r.createElement("section",{className:"mb-5"},r.createElement("h2",{className:"h4"},r.createElement(ye.x,{namespace:we,phrase:"studentViewing"}),r.createElement("span",null,": ",s().length,e.classroomStudents?"/".concat(e.classroomStudents.length):"")),r.createElement("div",{className:"row g-3"},!!(null===(a=e.classroomStudents)||void 0===a?void 0:a.length)&&r.createElement("div",{className:"col-12 col-md"},r.createElement(fe,{students:e.classroomStudents,watchedIds:null===(n=e.viewers)||void 0===n?void 0:n.map(function(e){return e.id}),imageCdnUrl:e.config.imageCdnUrl,heatmapAppLink:e.videoInsightsAppLinks.heatmapAppLink,imageUrl:be.W.Insights.AVATAR,anonymiseUsers:e.anonymiseUsers})),r.createElement("div",{className:"col-12 col-md"},r.createElement(ge,{students:s(),imageCdnUrl:e.config.imageCdnUrl,heatmapAppLink:e.videoInsightsAppLinks.heatmapAppLink,imageUrl:be.W.Insights.AVATAR,anonymiseUsers:e.anonymiseUsers})))),r.createElement("section",{className:"mb-5"},r.createElement("h2",{className:"h4"},r.createElement(ye.x,{namespace:we,phrase:e.hasClassrooms?"classEngagement":"engagement"})),r.createElement("div",{className:"row g-3"},r.createElement("div",{className:"col-12 col-md-6"},r.createElement(le.i,{osCount:e.osCount})),r.createElement("div",{className:"col-12 col-md-6"},r.createElement(ce.b,{engagement:e.aggregateEngagement,heatmapAppLink:e.videoInsightsAppLinks.heatmapAppLink,engagementRate:(0,pe.Q)(e.individualEngagement)}))))))}function Ae(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=Array(t);a<t;a++)r[a]=e[a];return r}var Fe=c.T.encloseNamespace("insights.videoInsightsOverviewView");function je(e){var t,a,n,l,c=(n=(0,u.D)(O.g.ANONYMISE_USERS),l=1,function(e){if(Array.isArray(e))return e}(n)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var r,n,i,s,o=[],l=!0,c=!1;try{if(i=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;l=!1}else for(;!(l=(r=i.call(a)).done)&&(o.push(r.value),o.length!==t);l=!0);}catch(e){c=!0,n=e}finally{try{if(!l&&null!=a.return&&(s=a.return(),Object(s)!==s))return}finally{if(c)throw n}}return o}}(n,l)||function(e,t){if(e){if("string"==typeof e)return Ae(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?Ae(e,t):void 0}}(n,l)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0];(0,I.F)();var d=(0,oe.r)(null).hasClassrooms,h=(0,S.T)().hasPermissions,p=i.a.useBasicFetch(v.L.config()),C=i.a.useBasicFetch(y.N.currentUser()),j=i.a.useBasicFetch(C.data&&g.h.yearGroups(C.data.customerId)),R=i.a.useBasicFetch(s.o.getShare(e.shareId)),T=m.x.getClassroomIdFromShare(R.data),k=i.a.useBasicFetch(T&&A.F.getClassroom(T)),M=(0,_.p)(e.shareId),D=R.data&&w.M.getVideoRequest(R.data.objectId,R.data.objectTypeId),q=i.a.useBasicFetch(D);(0,E.M)({title:q.data?Fe("pageTitle",{video:null===(t=q.data)||void 0===t?void 0:t.name}):null}),(0,b.v)([R,q]);var P=i.a.useBasicFetch(U(e.shareId)),W=i.a.useBasicFetch(B(e.shareId)),H=i.a.useBasicFetch(N(e.shareId,"os_name")),V=L(e.shareId),G=V.users,$=V.hasCompleted,Z=p.hasCompleted&&q.hasCompleted&&P.hasCompleted&&W.hasCompleted&&H.hasCompleted&&j.data&&$,z=function(e){return{heatmapAppLink:(0,o.Rv)(e,void 0)}}(R.data);return r.createElement("div",{className:"px-3"},r.createElement(F.j,{video:q.data,classroom:k.data,tabs:(0,x.$6)(R.data,"insights"),hasAnalytics:h(f.C.ViewCustomerAnalytics),analyticsWebUrl:null===(a=p.data)||void 0===a?void 0:a.analyticsWebUrl,share:R.data,yearGroups:j.data,hasData:Z&&!!(null==G?void 0:G.length)}),r.createElement(Ce,{hasDataLoaded:!!Z,hasClassrooms:d,anonymiseUsers:c,videoInsightsAppLinks:z,config:p.data,video:q.data,classroomStudents:M.items,viewers:G,individualEngagement:P.data,aggregateEngagement:W.data,share:R.data,osCount:H.data}))}function Ne(e){return Ne="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ne(e)}function Ue(e,t,a){return(t=function(e){var t=function(e){if("object"!=Ne(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var a=t.call(e,"string");if("object"!=Ne(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==Ne(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}var Be=Ue(Ue(Ue({},l.E.Video,{insights:function(e){return r.createElement(je,{shareId:e.share.shareId})},heatmap:function(e){return r.createElement(P,{shareId:e.share.shareId})}}),l.E.Clip,{insights:function(e){return r.createElement(je,{shareId:e.share.shareId})},heatmap:function(e){return r.createElement(P,{shareId:e.share.shareId})}}),l.E.Interactive,{insights:function(e){return r.createElement(Q,{shareId:e.share.shareId})},heatmap:function(e){return r.createElement(P,{shareId:e.share.shareId})},questions:function(e){return r.createElement(X,{interactionId:e.interactionId,sortBy:e.sortBy,shareId:e.share.shareId})},results:function(e){return r.createElement(se,{filterBy:e.filterBy,sortBy:e.sortBy,shareId:e.share.shareId})}});function Oe(e){var t=i.a.useBasicFetch(s.o.getShare(e.shareId)),a=function(e){var t,a=e.share,n=e.tab,i=null===(t=Be[null==a?void 0:a.objectTypeId])||void 0===t?void 0:t[n];return i?i(e):r.createElement(r.Fragment,null)}({share:t.data,tab:e.tab,interactionId:e.interactionId,sortBy:e.sortBy,filterBy:e.filterBy});return r.useEffect(function(){if(e.showShareOptions&&t.data){var a=(0,o.Zm)(t.data);a&&n.Q.C$.trigger(a)}},[t.data,e.showShareOptions]),r.createElement(r.Fragment,null,a)}}}]);
|
|
2
|
-
//# sourceMappingURL=8856-2d332952ae-lite.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/8856-2d332952ae-lite.chunk.js","mappings":"oLAOM,SAAUA,EACdC,EACAC,EACAC,G,MAEMC,EAAc,kBAAkC,mBAEhDC,EAAsB,oBAA4CJ,GACtE,wBAAwCA,IAEpCK,EAAc,qBAA4D,QAAxB,EAAAD,EAAoBE,YAAI,eAAEC,gBAChF,gBAAgCH,EAAoBE,KAAKC,gBAErDC,IAAuBL,EAAYG,QAAUD,EAAYC,KAE/D,OAAO,kBAA2CE,GAChD,EAAAC,EAAA,qBACEL,EAAoBE,KAAKC,cACzBH,EAAoBE,KAAKI,GACzBP,EAAYG,KACZL,EACAC,GAEN,C,yGCHMS,EAA8B,CAClCC,SAAU,IACVC,UAAW,CACTC,OAAQ,IACRC,UAAW,IACXC,OAAQ,IACRC,QAAS,KAEXC,WAAY,IACZC,oBAAqB,KAGjB,SAAUC,EACdC,GAMkC,IALlCC,EAAA,uDAA+B,CAAC,EAKhCC,EAAA,uDAAgC,CAAC,EAEjC,GAAKF,EAAL,CAGA,IAAIG,EAGFA,EADmB,iBAAVH,EACIA,EAEAA,EAAKI,OAGpB,IAAMC,EAAW,OAAH,wBACTf,GACAW,GAGAE,GAGA,yBAAmCA,KAGpCA,IAAe,mBAMfA,IAAe,aAMfA,IAAe,cAUdD,EAAUL,YACb,aAAuB,IAAIQ,EAASR,YAN/BK,EAAUV,WACb,aAAuB,IAAIa,EAASb,UAAUI,SAX3CM,EAAUX,UACb,aAAuB,IAAIc,EAASd,UAPjCW,EAAUJ,qBACb,aAAuB,IAAI,KAvBvB,CA6CV,C,+vDCvFMQ,EAAa,GAkBb,SAAUC,EACdC,EACAC,GAEA,IAEMC,EAFS,UAA0BF,EAASF,GAE1BK,IAAI,SAAAC,GAAK,OAAIH,EAAW,SAAiBG,GAAO,GAElEC,EAAY,qBAA6BH,GAEzCI,EAAW,YAAoBD,EAAU5B,MACzC8B,EAAQF,EAAU5B,KAAK+B,OACzBF,EAASG,OAAO,SAACC,EAAKC,GAAI,OAAK,+BAAMD,GAAG,KAAGC,EAAK9B,GAAK8B,GAAI,EAAK,CAAC,GAC/D,KAEJ,MAAO,CACLL,SAAAA,EACAC,MAAAA,EACAK,WAAYP,EAAUO,WACtBC,aAAcR,EAAUQ,aAE5B,CAQM,SAAUC,EACdC,EACAd,EACAe,GAEA,IAAMC,EAASD,QAAAA,EAAY,SAACE,GAC1B,MAAmB,WAAf,EAAOA,GACFA,EAAIrC,GAENqC,CACT,EAEM,EAA0BC,EAA8C,CAAElB,WAAAA,EAAYe,QAAAA,IAApFI,EAAU,EAAVA,WAAe3C,EAAI,IAArB,gBASN,OAPA,YAAgB,YACTsC,aAAI,EAAJA,EAAMP,SAGXY,EAAWL,EACb,EAAG,CAACA,aAAI,EAAJA,EAAMZ,IAAIc,GAAQI,KAAK,OAEpB5C,CACT,CAWM,SAAU0C,EACdG,G,cAEML,EAAwB,QAAf,EAAAK,EAAQN,eAAO,QAAK,SAACE,GAClC,MAAmB,WAAf,EAAOA,GACFA,EAAIrC,GAENqC,CACT,EAEMK,EAAe,SAA0B,IAAIC,KACmB,G,EAApC,WAAiC,I,EAAG,E,unBAA9DtB,EAAQ,KAAEuB,EAAW,KAwBvBpB,EAAY,qBAAqCH,GACjDI,EAAW,YAAoBD,EAAU5B,MACzC8B,EAAQF,EAAU5B,KAAK+B,OACzBF,EAASG,OAAkC,SAACC,EAAKC,GAAI,OAAK,+BAAMD,GAAG,KAAGO,EAAON,GAAQA,GAAI,EAAK,CAAC,GAC/F,KAEJ,MAAO,CACLe,4BAAoD,QAAxB,EAAmB,QAAnB,EAAArB,EAAUA,iBAAS,eAAG,UAAE,eAAEQ,cACtDP,SAAAA,EACAC,MAAAA,EACAK,WAAYP,EAAUO,WACtBQ,WAjCF,SAAoBL,GAClB,GAAKA,aAAI,EAAJA,EAAMP,OAAX,CAGA,IAAMmB,EAA6B,GAEnCZ,EAAKa,QAAQ,SAAAV,GACX,IAAMW,EAAMZ,EAAOC,GAEfK,EAAaO,QAAQC,IAAIF,KAG7BF,EAAeK,KAAKd,GACpBK,EAAaO,QAAQG,IAAIJ,GAC3B,GAEKF,EAAenB,QAGpBiB,EAAY,SAAAS,GAAC,kBAAUA,GAAC,EAAK,UAA4BP,EAAgB7B,GAAYK,IAAImB,EAAQrB,aAAW,EAjBpG,CAkBV,EAeF,C,6DCjIA,SAASkC,EAAiBC,GACxB,OAAOA,EAAWjC,IAAI,SAAAe,GAAG,OAAIA,EAAIvB,UAAU,GAAE0B,KAAK,IACpD,CAGM,SAAUgB,EACdC,EACAC,EACAC,GAEA,IAAMJ,EAAaK,MAAMC,QAAQJ,GAAeA,EAAc,CAACA,IAE/D,IAAAK,WAAU,WACRP,EAAWR,QAAQ,SAAAV,IACjB,OAAgBA,EAAIvB,WAAY4C,EAAcC,EAChD,EACF,EAAG,CAAEL,EAAiBC,GAAaG,EAAcC,GACnD,C,mFCdMI,EAAYC,EAAA,mBADA,8BAWZ,SAAUC,EAAyBC,GACvC,MAAqB,kBAAjBA,EAAMC,OAEN,gBAACC,EAAA,EAAU,CAACC,UAAU,gCACpB,gBAACD,EAAA,QAAgB,CAACE,IAAKJ,EAAMK,qBAAsBC,KAAK,UACxD,gBAACJ,EAAA,OAAe,KACbL,EAAU,6BAKE,qBAAjBG,EAAMC,OAEN,gBAACC,EAAA,EAAU,CAACC,UAAU,gCACpB,gBAACD,EAAA,QAAgB,CAACE,IAAKJ,EAAMO,wBAAyBD,KAAK,UAC3D,gBAACJ,EAAA,OAAe,KACbL,EAAU,gCAME,iBAAjBG,EAAMC,OAEN,gBAACC,EAAA,EAAU,CAACC,UAAU,gCACpB,gBAACD,EAAA,QAAgB,CAACE,IAAKJ,EAAMQ,oBAAqBF,KAAK,UACvD,gBAACJ,EAAA,OAAe,KACbL,EAAU,4BAOjB,gBAACK,EAAA,EAAU,CAACC,UAAU,gCACpB,gBAACD,EAAA,QAAgB,CAACE,IAAKJ,EAAMS,mBAAoBH,KAAK,UACtD,gBAACJ,EAAA,UAAkB,KAChBL,EAAU,sBAEb,gBAACK,EAAA,OAAe,KACbL,EAAU,0BAInB,C,eC1DM,EAAY,6BAOZ,SAAUa,EAAiCV,GAC/C,SAASW,EAAaC,GACpB,IAAMC,EAAgBb,EAAMC,SAAWW,EAAiB,KAAOA,EAE/DZ,EAAMc,UAAUD,EAClB,CAMA,SAASE,EAAad,GACpB,MAAO,wBAAP,OALF,SAA0BA,GACxB,OAAOD,EAAMC,SAAWA,CAC1B,CAGiCe,CAAiBf,GAAU,qBAAuB,GACnF,CAEA,OACE,uBAAKE,UAAU,kCACb,qBAAGA,UAAU,WAAU,gBAACc,EAAA,EAAI,CAACC,UAAW,EAAWC,OAAO,aAC1D,uBAAKhB,UAAU,uCACb,0BAAQA,UAAWY,EAAa,iBAAkBK,QAAS,WAAF,OAAQT,EAAa,gBAAgB,GAC5F,gBAACM,EAAA,EAAI,CAACC,UAAW,EAAWC,OAAO,wBAErC,0BAAQhB,UAAWY,EAAa,oBAAqBK,QAAS,WAAF,OAAQT,EAAa,mBAAmB,GAClG,gBAACM,EAAA,EAAI,CAACC,UAAW,EAAWC,OAAO,2BAErC,0BAAQhB,UAAWY,EAAa,gBAAiBK,QAAS,WAAF,OAAQT,EAAa,eAAe,GAC1F,gBAACM,EAAA,EAAI,CAACC,UAAW,EAAWC,OAAO,wBAK7C,C,+iCCnBA,IAAME,EAA8B,CAClCC,MAAO,GAAF,OAAK,eAAiB,+CAC3BC,OAAQ,GAAF,OAAK,WAAa,kBACxBC,UAAW,QACXC,WAAY,kDACZC,IAAK,SAGDC,EAAgC,CACpCJ,OAAQ,GAAF,OAAK,WAAa,YACxBC,UAAW,QACXC,WAAY,GAAF,OAAK,+BAAiC,2BAChDC,IAAK,GAAF,OAAK,QAAU,YAAI,gBACtBE,KAAM,sBA8BF,SAAUC,EAAoB7B,G,MAGjC,IAF6B,YAC5B,OAAgBA,EAAM8B,OAAQ,UAC/B,GAFOA,EAAM,KAAEC,EAAS,KAGqD,IAAhD,WAAiC/B,EAAMgC,UAAS,GAAtE/B,EAAM,KAAEa,EAAS,KAEnBmB,EAAM,SAA6B,MAEnCC,GAAe,QACnBlC,EAAMmC,QACNnC,EAAMoC,eACM,QAAZ,EAAApC,EAAMqC,cAAM,eAAEC,YACdtC,EAAMuC,yBAEFC,GAAgB,QACpBxC,EAAMvE,YACNuE,EAAMxE,oBACNwE,EAAMmC,QA0BR,SAAuBM,IACrB,QAAiBR,EAAIlD,QAAS0D,EAChC,EA1BEzC,EAAM0C,cAEFhH,GAAO,QACXsE,EAAMvE,YACNuE,EAAMmC,QACNnC,EAAM0C,aACN1C,EAAMoC,eACNO,EAAA,QAAkBb,GAClB7B,EACAD,EAAMuC,yBAmBR,SAASK,EAAWH,IAClB,QAAcR,EAAIlD,QAAS0D,EAC7B,CAYA,OACE,6BACKzC,EAAMmC,QAAQU,SAASpF,QAAU,gBAACiD,EAAgC,CAACT,OAAQA,EAAQa,UAAWA,KAE/FpF,EAAK+B,QACL,gBAACsC,EAAwB,CACvBU,mBAAoBT,EAAMS,mBAC1BD,oBAAqBR,EAAMQ,oBAC3BD,wBAAyBP,EAAMO,wBAC/BF,qBAAsBL,EAAMK,qBAC5BJ,OAAQA,MAITvE,EAAK+B,QACN,uBAAKwE,IAAKA,EAAK9B,UAAS,gBAAWzE,EAAK+B,QAAU+E,EAAc/E,OAAS,IAAH,OAAO,gBAAsB,KACjG,gBAACqF,EAAA,EAAK,CACJC,QAASb,EACTxG,KAAMA,EACNsH,MA5BJR,EAAc/E,OACT4D,EAEF,OAAP,wBACKA,GAAe,CAClBC,MAAO,GAAF,OAAK,eAAiB,8BAwBrB2B,YAlDV,SAAyB,GAA4C,IAA1CC,EAAQ,EAARA,SACzBlD,EAAMmD,mBAAmBD,EAASE,KAAMpD,EAAMxE,oBAAoBM,GACpE,EAiDUuH,eAAgB,SAAA3B,GAAG,OAAIkB,EAAWlB,EAAIe,MAAM,EAC5Ca,gBAAiB,WAAF,OAAQV,GAAY,EACnCW,YAAU,EACVC,YAAU,EACVC,OAAQ1B,EACR2B,cAAe5B,MAEdU,EAAc/E,QACf,gBAACqF,EAAA,EAAK,CACJC,QAASP,EACT9G,KAAMA,EACNsH,MAAOrB,EACPgC,cAAY,EACZC,gBAAqC,EAApB,KACjBC,aA7DZ,SAAiCjC,GAC/B5B,EAAMmD,mBACJvB,EAAKF,IAAIwB,SAASE,KAClBpD,EAAMxE,oBAAoBM,GAC1B8F,EAAKkC,OAAOhI,GAEhB,EAwDYiI,yBAAyB,8CAOvC,C,eC1KA,SAAgB,gBAAkB,SCG5B,SAAUC,IACd,OACE,2BACE,uBAAK7D,UAAU,kCACb,qBAAGA,UAAU,gDAA8C,KAC3D,uBAAKA,UAAU,gBACb,uBAAKA,UAAU,SACb,uBAAKA,UAAU,4CAA0C,MAE3D,uBAAKA,UAAU,SACb,uBAAKA,UAAU,4CAA0C,MAE3D,uBAAKA,UAAU,SACb,uBAAKA,UAAU,4CAA0C,QAI/D,uBAAKA,UAAU,gBACb,uBAAKA,UAAU,UACb,uBAAKA,UAAS,UAAK,kBAAsB,2CAKnD,CCEM,SAAU8D,EAA4BjE,GAC1C,OACE,iCACIA,EAAMkE,eACN,gBAACF,EAAkC,MAGpChE,EAAMkE,eACL,gBAACrC,EAAmB,CAClBpG,YAAauE,EAAMvE,YACnBD,oBAAqBwE,EAAMxE,oBAC3B2G,QAASnC,EAAMmC,QACfO,aAAc1C,EAAMnC,YAAcmC,EAAMmE,iBACxChB,mBAAoBnD,EAAMmD,mBAC1B1C,mBAAoB2D,EAAA,wBACpBtC,OAAQ9B,EAAM8B,OACdE,SAAUhC,EAAMgC,SAChBI,eAAgBpC,EAAMoC,eACtB/B,qBAAsB+D,EAAA,kBACtB7D,wBAAyB6D,EAAA,qBACzB5D,oBAAqB4D,EAAA,+BACrB/B,OAAQrC,EAAMqC,OACdE,yBAAuB,IAKjC,C,kSC/CM,SAAU8B,EAAgB/I,G,MACxBgJ,EAAe,kBAAoC,oBAA8BhJ,IAUvF,MAAO,CACLkC,OATsC,QAAjB,EAAA8G,EAAa5I,YAAI,eACpCgC,OAAiC,SAAC6G,EAAMC,GACxC,OAAO,OAAP,wBACKD,I,EAAI,G,EACNC,EAAKC,U,EAVL,CAAEA,WADSC,EAWiBF,GAVHC,UAAWE,KAAMD,EAAYE,c,gYAD3CF,CAahB,EAAG,CAAC,KAGqB,CAAC,EAC1B5G,aAAcwG,EAAaxG,aAC3BD,WAAYyG,EAAazG,WAE7B,C,qGCfM,SAAUgH,EAA6BvJ,G,YACrCwJ,EAAQ,kBAERC,EAAQ,kBAA4B,aAAuBzJ,IAE3D0J,GAAwB,QAAV,EAAAD,EAAMrJ,YAAI,eAAEuJ,QAAS,gBACsC,QAA7E,EAAsB,QAAtB,EAAU,QAAV,EAAAF,EAAMrJ,YAAI,eAAEwJ,kBAAU,eAAEC,KAAK,SAAAhG,GAAC,OAAIA,EAAEiG,kBAAoB,aAAoB,UAAC,eAAEC,aAE3EnI,EAAa,SAACoI,GAAc,OAAK,yBAAuCN,EAAaM,EAAO,EAC5FC,GAAS,OAAkBP,GAAe9H,EAAY,SAAAoI,GAAM,OAAIR,EAAM5H,EAAWoI,GAAQ,GAE/F,OAAO,OAAP,wBACKC,GAAM,CACTzH,cAAekH,GAAeO,EAAOzH,cAEzC,C,kfCZA,IAAM0H,EAAiD,CACrD,CACE1J,GAAI,IACJ2J,SAAU,CAAC,CAAE3J,GAAI,IAAK4J,WAAY,EAAGC,QAAS,OAI5C,SAAUC,EAA8BtK,G,YACrC6I,G,GAAoB,OAAsB,wB,EAAuC,E,unBAAjE,GAEjBY,EAAQ,kBAA4B,aAAuBzJ,IAC3D6G,GAAU,OAAqC,QAAV,EAAA4C,EAAMrJ,YAAI,eAAEmK,SAAU,KAAMvK,GAEjEgJ,GAAe,OAAgBhJ,GAE/BwK,GAAoB,OAA6BxK,IAEvD,OAAqB6G,GAErB,IAAMrE,EACJqE,EAAQrE,cACRwG,EAAaxG,cACbgI,EAAkBhI,aAGpB,IAAKA,EACH,MAAO,CACLpC,KAAM,KACNoC,cAAc,GAIlB,IAAMiI,EAAc,IAAItH,IAElBoE,EAAWV,EAAQzG,KAAKmH,SAASzF,IAAI,SAAA4I,G,MAEnCC,EAAiB,QAAN,EAAAD,EAAE5C,YAAI,eAAE6C,SACzB,OAAI9B,GAAiC,IAAb8B,EACf,KAELD,EAAE5C,MACJ2C,EAAY7G,IAAI8G,EAAE5C,KAAKtH,IAChBkK,GAOF,OAAP,wBACKA,GAAC,CACJ5C,KAAMkB,EAAa9G,MAAMwI,EAAEvB,YAAc,CAAEA,UAAWuB,EAAEvB,YAE5D,GAAGxE,OAAO,SAAA+F,GAAC,QAAMA,CAAC,GAiBlB,OAX4B,QAAxB,EAAAF,aAAiB,EAAjBA,EAAmBtI,aAAK,eAAEC,SAC5BoF,EAAS5D,KAAI,MAAb4D,E,yWAAQ,CAASiD,EAAkBtI,MAChCyC,OAAO,SAAA+F,GAAC,OAAKD,EAAY/G,IAAIgH,EAAElK,GAAG,GAClCsB,IAAI,SAAAgG,GAAI,MAAK,CAAEA,KAAAA,EAAMjB,QAASqD,EAA2BU,eAAe,EAAM,KAQ5E,CACLpI,aAAAA,EACAD,WAPiBkH,EAAMlH,YACpBsE,EAAQtE,YACRyG,EAAazG,YACbiI,EAAkBjI,WAKrBnC,KAAM,OAAF,wBACCyG,EAAQzG,MAAI,CACfmH,SAAAA,IAGN,C,6UCxFasD,EASK,SAAC7K,EAAiB2J,GAChC,MAAO,CACLmB,IAAK,yCAAF,OAA2C9K,EAAO,wBAAgB2J,GACrEnG,IAAK,oCAAF,OAAsCxD,EAAO,YAAI2J,GACpDoB,WAAW,EAEf,EAfWF,EAiBC,SAAC7K,GACX,MAAO,CACL8K,IAAK,yCAAF,OAA2C9K,EAAO,aACrDwD,IAAK,gCAAF,OAAkCxD,GACrC+K,WAAW,EAEf,EAvBWF,EAyBY,SAAC7K,GACtB,MAAO,CACL8K,IAAK,yCAAF,OAA2C9K,EAAO,yBACrDwD,IAAK,4CAAF,OAA8CxD,GACjD+K,WAAW,EAEf,E,sICvBI,SAAUC,EAAqBhL,G,cAC5B6I,G,GAAoB,OAAsBoC,EAAA,sB,EAAuC,E,o4BAAjE,GAEjBC,EAAa,kBACjBL,EAAkC7K,IAG9BgJ,GAAe,EAAAD,EAAA,GAAgB/I,GAE/BmL,GAAyB,QAAf,EAAAD,EAAW9K,YAAI,eAAE0B,IAAI,SAAAsJ,GAAC,OAAIA,EAAEC,MAAM,GAAE1G,OAAO,SAAAnE,GAAE,QAAMA,CAAE,KAAK,GACpE8K,GAAQ,QAAwBH,EAASI,EAAA,WAmBzCC,EAAU,OAAH,wBACRxC,EAAa9G,OACboJ,EAAMpJ,OAGLuJ,EAAoC,QAAf,EAAAP,EAAW9K,YAAI,eAAEuE,OAAO,SAAA+G,GACjD,IAAM5D,EAAO0D,EAAQE,EAAEL,QAAUK,EAAEvC,WAEnC,OAAKrB,GAKY,IADAA,EAAK6C,UACA9B,EACb,KALA6C,CAQX,GAAG/G,OAAO,SAAA+G,GAAC,QAAMA,CAAC,GAEZC,EACC,QADS,EAAAT,EACb9K,YAAI,eAAE0B,IAAI,SAAA4J,GAAC,OAAI,+BArClB,SAAqBA,G,QACnB,OAAIA,EAAEL,QACoB,QAAX,EAAAC,EAAMpJ,aAAK,eAAGwJ,EAAEL,UAGpB,CAAE7K,GAAIkL,EAAEL,OAAQO,SAAS,IAKE,QAAlB,EAAA5C,EAAa9G,aAAK,eAAGwJ,EAAEvC,aAIpC,CAAEA,UAAWuC,EAAEvC,UACxB,CAsBwB0C,CAAYH,IAAE,CAAEI,WAAYJ,EAAEK,gBAAc,GAEpE,MAAO,CACLb,WAAYO,EACZH,MAAOK,EACPnJ,aACE0I,EAAW1I,cACXwG,EAAaxG,iBACX2I,aAAO,EAAPA,EAAShJ,SAAUmJ,EAAM9I,cAGjC,C,yhCCpCA,IACM+B,EAAYC,EAAA,mBADA,0BAOZ,SAAUwH,EAAoBtH,G,cAC3BoC,EAAsE,GAApD,OAAsB,qBAA8B,GAAxD,GACd+B,EAA2E,GAAvD,OAAsB,wBAAiC,GAA3D,IAEvB,EAAAoD,EAAA,KAEA,IAAQC,GAAmB,EAAAC,EAAA,KAAnBD,eAEFzC,EAAQ,kBAA4B2C,EAAA,WAAuB1H,EAAM1E,UAEjE0J,EAAc2C,EAAA,0BAAoC5C,EAAMrJ,MACxDkM,EAAY,kBAAgC5C,GAAe6C,EAAA,eAA+B7C,IAE1Fc,GAAoB,EAAAjB,EAAA,GAA6B7E,EAAM1E,SAEvDwM,EAAe/C,EAAMrJ,MAAQqM,EAAA,kBAA4BhD,EAAMrJ,KAAKmK,SAAUd,EAAMrJ,KAAKsM,cACzFC,EAAQ,kBAAiCH,GAEzCzF,EAAS,kBAA6B6F,EAAA,YACtC3M,EAAc,kBAAkCsL,EAAA,iBAChDsB,EAAa,kBACjB5M,EAAYG,MAAQ0M,EAAA,aAA4B7M,EAAYG,KAAK2M,aAG7DC,EAAwBP,EAAA,gBAA0BE,EAAMvM,OAAS6M,EAAA1M,EAAA,eAA0C,CAC/G2M,aAAc,CAACP,EAAMvM,MAAM0B,IAAI,SAAAe,GAAG,MAAK,CACrCxC,cAAewC,EAAIxC,cACnB8M,WAAYtK,EAAIrC,GAChBR,QAAS0E,EAAM1E,QAChB,GACDoN,QAAS,CACPC,kBAAmBpN,EAAYG,KAAK2M,WACpCO,cAAerN,EAAYG,KAAKI,MAI9B+M,GAA0C,QAAxB,EAAmB,QAAnB,EADD,kBAAmDP,GACnC5M,YAAI,eAAG,UAAE,eAAEoN,oBAAqB,EAEjEC,EAAsB,kBAC1B5C,EAA6CnG,EAAM1E,UAGrD,EAA4CgL,EAAqBtG,EAAM1E,SAA/DsL,EAAK,EAALA,MAAOJ,EAAU,EAAVA,WAAY1I,EAAY,EAAZA,aAErBkL,GAAkB,kBACtB7C,EAAsCnG,EAAM1E,QAAS,eAGjD2N,GAAU,mBACJ,QAAV,EAAAlE,EAAMrJ,YAAI,eAAEmK,WACZqD,EAAA,gBAA6BnE,EAAMrJ,KAAKmK,SAAUsD,EAAA,kBAGpD,EAAAC,EAAA,GAAmB,CAAEC,MAAOpB,EAAMvM,KAAOmE,EAAU,YAAa,CAAEoI,MAAiB,QAAV,EAAAA,EAAMvM,YAAI,eAAEiJ,OAAU,QAC/F,OAAqB,CAAEI,EAAOkD,IAE9B,IAAM/D,GACJa,EAAMjH,cACNmK,EAAMnK,cACNuE,EAAOvE,cACPiL,EAAoBjL,cACpBkL,GAAgBlL,cAChBmL,GAAQnL,cACRqK,EAAWrK,aASb,OACE,uBAAKqC,UAAU,QACb,gBAACmJ,EAAA,EAAc,CACbrB,MAAOA,EAAMvM,KACb6N,KAXN,W,MACE,OAAc,QAAV,EAAAxE,EAAMrJ,YAAI,eAAEsM,gBAAiBwB,EAAA,eACxB,QAA2BzE,EAAMrJ,KAAM,YAEzC,QAAqBqJ,EAAMrJ,KAAM,UAC1C,CAMY+N,GACNC,aAAclC,EAAemC,EAAA,yBAC7BC,gBAA4B,QAAX,EAAAvH,EAAO3G,YAAI,eAAEkO,gBAC9B7E,MAAOA,EAAMrJ,KACbyM,WAAYA,EAAWzM,KACvBkM,UAAWA,EAAUlM,KACrBmN,gBAAiBA,EACjBgB,WAAWrD,aAAU,EAAVA,EAAY/I,UAEzB,gBAACqM,EAAA,EAAe,CACdf,oBAAqBA,EAAoBrN,KACzCqO,qBAAsBvD,EACtB2B,WAAYa,GAAgBtN,KAC5B2G,OAAQA,EAAO3G,KACfkL,MAAOA,EACPqC,QAASA,GAAQvN,KACjBwI,cAAeA,GACf8F,gBAAiBlM,EACjBsE,eAAgBA,EAChB0D,kBAAmBA,EAAkBtI,MACrC2G,iBAAkBA,IAI1B,C,iKC9GA,IACM,EAAYrE,EAAA,mBADA,4CAOZ,SAAUmK,EAAgCjK,G,kBACvCoC,G,GAAkB,OAAsBmE,EAAA,mB,EAAoC,E,o4BAA9D,IAErB,EAAAgB,EAAA,KAEA,IAAQC,GAAmB,EAAAC,EAAA,KAAnBD,eAEFnF,EAAS,kBAA6B6F,EAAA,YACtC3M,EAAc,kBAAkCsL,EAAA,iBAChDsB,EAAa,kBACjB5M,EAAYG,MAAQ0M,EAAA,aAA4B7M,EAAYG,KAAK2M,aAG7DtD,EAAQ,kBAA4B2C,EAAA,WAAuB1H,EAAM1E,UAEjE0J,EAAc2C,EAAA,0BAAoC5C,EAAMrJ,MACxDkM,EAAY,kBAAgC5C,GAAe6C,EAAA,eAA+B7C,IAE1Fc,GAAoB,EAAAjB,EAAA,GAA6B7E,EAAM1E,SAEvDE,EAAsB,mBAChB,QAAV,EAAAuJ,EAAMrJ,YAAI,eAAEmK,WACZqE,EAAA,sBAAwCnF,EAAMrJ,KAAKmK,WAG/CpK,EAAc,mBACM,QAAxB,EAAAD,EAAoBE,YAAI,eAAEC,gBAC1BuO,EAAA,cAAgC1O,EAAoBE,KAAKC,gBAGrDwG,GAAU,EAAAyD,EAAA,GAA8B5F,EAAM1E,SAE9CkL,EAAa,kBACjBL,EAAkCnG,EAAM1E,UAGpCyN,EAAsB,kBAC1B5C,EAA6CnG,EAAM1E,UAG/C6O,EAAU,kBACdhE,EAAsCnG,EAAM1E,QAAS,aAGvD,EAAA8N,EAAA,GAAmB,CAAEC,MAAO7N,EAAoBE,KAAO,EAAU,YAAa,CAAEuM,MAA+B,QAAxB,EAAAzM,EAAoBE,YAAI,eAAEiJ,OAAU,QAE3H,OAAqB,CAAEI,EAAOtJ,EAAaD,IAE3C,IAAM0I,EACJ7B,EAAOvE,cACPtC,EAAoBsC,cACpBrC,EAAYC,MACZqN,EAAoBjL,cACpB0I,EAAW1I,cACXqM,EAAQrM,cACRqE,EAAQrE,cACRqK,EAAWrK,aAEPsM,EC5FF,SAAyCrF,EAAcsF,GAC3D,MAAO,CACLC,gBAAgB,QAA2BvF,EAAOsF,GAClDE,kBAAkB,QAA4BxF,EAAOsF,GACrDG,gBAAgB,QAA0BzF,EAAOsF,GAErD,CDsFsCI,CAA+B1F,EAAMrJ,MAEnEgP,GAAgBxG,IAAiB,QAAczI,EAAYC,KAAMyG,EAAQzG,KAAM,KAC/EmN,GAAkB6B,IAAiBA,GAAc7B,gBAAgBpL,OAAS,EAEhF,OACE,uBAAK0C,UAAU,QACb,gBAACmJ,EAAA,EAAc,CACbrB,MAAOzM,EAAoBE,KAC3B6N,MAAM,QAA2BxE,EAAMrJ,KAAM,YAC7CgO,aAAclC,EAAemC,EAAA,yBAC7BC,gBAA4B,QAAX,EAAAvH,EAAO3G,YAAI,eAAEkO,gBAC9B7E,MAAOA,EAAMrJ,KACbyM,WAAYA,EAAWzM,KACvBkM,UAAWA,EAAUlM,KACrBmN,gBAAiBA,GACjBgB,WAAuB,QAAZ,EAAA1H,EAAQzG,YAAI,eAAEmH,SAASpF,UAGpC,gBAACkN,EAAA,EAA2B,CAC1B5B,oBAAqBA,EAAoBrN,KACzCqO,qBAAsBvD,EAAW9K,KACjCD,YAAaA,EAAYC,KACzBF,oBAAqBA,EAAoBE,KACzC0O,4BAA6BA,EAC7BtE,kBAAmBA,EAAkBtI,MACrC2E,QAASA,EAAQzG,KACjByO,QAASA,EAAQzO,KACjB2G,OAAQA,EAAO3G,KACf0G,eAAgBA,EAChB8B,cAAeA,EACfa,MAAOA,EAAMrJ,OAIrB,C,qHEvGA,IACM,EAAYoE,EAAA,mBADA,2CASZ,SAAU8K,EAAiC5K,G,oBACxCoC,G,GAAkB,OAAsBmE,EAAA,mB,EAAoC,E,o4BAA9D,IAErB,EAAAgB,EAAA,KAEA,IAAQC,GAAmB,EAAAC,EAAA,KAAnBD,eAEFjM,EAAc,kBAAkCsL,EAAA,iBAChDxE,EAAS,kBAA6B6F,EAAA,YACtCC,EAAa,kBACjB5M,EAAYG,MAAQ0M,EAAA,aAA4B7M,EAAYG,KAAK2M,aAG7DtD,EAAQ,kBAA4B2C,EAAA,WAAuB1H,EAAM1E,UAEjE0J,EAAc2C,EAAA,0BAAoC5C,EAAMrJ,MACxDkM,EAAY,kBAAgC5C,GAAe6C,EAAA,eAA+B7C,IAE1FxJ,EAAsB,mBAChB,QAAV,EAAAuJ,EAAMrJ,YAAI,eAAEmK,WACZqE,EAAA,sBAAkD,QAAV,EAAAnF,EAAMrJ,YAAI,eAAEmK,WAGhDpK,EAAc,mBAA0D,QAAxB,EAAAD,EAAoBE,YAAI,eAAEC,gBAC9EuO,EAAA,cAAgC1O,EAAoBE,KAAKC,gBAErDwG,GAAU,EAAAyD,EAAA,GAA8B5F,EAAM1E,UAEpD,EAAA8N,EAAA,GAAmB,CAAEC,MAAO7N,EAAoBE,KAAO,EAAU,YAAa,CAAEuM,MAA+B,QAAxB,EAAAzM,EAAoBE,YAAI,eAAEiJ,OAAU,QAC3H,OAAqB,CAAEI,EAAOtJ,EAAaD,IAE3C,IAAM0I,EAAgBzI,EAAYC,MAAQF,EAAoBE,QAAUyG,EAAQzG,QAAUyM,EAAWzM,KAE/FgP,EAAgBxG,IAAiB,QAAczI,EAAYC,KAAMyG,EAAQzG,KAAM,KAC/EmN,EAAkB6B,GAAiBA,EAAc7B,gBAAgBpL,OAAS,EAEhF,OACE,uBAAK0C,UAAU,QACb,gBAACmJ,EAAA,EAAc,CACbC,MAAM,QAA2BxE,EAAMrJ,KAAM,aAC7CuM,MAAOzM,EAAoBE,KAC3BgO,aAAclC,EAAemC,EAAA,yBAC7BC,gBAA4B,QAAX,EAAAvH,EAAO3G,YAAI,eAAEkO,gBAC9B7E,MAAOA,EAAMrJ,KACbyM,WAAYA,EAAWzM,KACvBkM,UAAWA,EAAUlM,KACrBmN,gBAAiBA,EACjBgB,WAAuB,QAAZ,EAAA1H,EAAQzG,YAAI,eAAEmH,SAASpF,UAGpC,gBAACoN,EAAA,EAA4B,CAC3BpP,YAAaA,EAAYC,KACzBF,oBAAqBA,EAAoBE,KACzCoP,cAAe9K,EAAM8K,cACrBzI,OAAQA,EAAO3G,KACfoG,OAAQ9B,EAAM8B,OACdjE,YAAasE,EAAQrE,cAAgBrC,EAAYoC,WACjDuE,eAAgBA,EAChBD,QAASA,EAAQzG,KACjBwI,cAAeA,IAIvB,C,4iCCpEA,IACM,GAAYpE,EAAA,mBADA,wCASZ,SAAUiL,GAAgC/K,G,cACvCoC,EAA4E,IAA1D,OAAsBmE,EAAA,mBAAoC,GAA9D,GACdpC,EAAiF,IAA7D,OAAsBoC,EAAA,sBAAuC,GAAjE,GAGfiB,GAAmB,EAAAC,EAAA,KAAnBD,eAEFjM,EAAc,kBAAkCsL,EAAA,iBAChDxE,EAAS,kBAA6B6F,EAAA,YACtCC,EAAa,kBACjB5M,EAAYG,MAAQ0M,EAAA,aAA4B7M,EAAYG,KAAK2M,aAG7DtD,EAAQ,kBAA4B2C,EAAA,WAAuB1H,EAAM1E,UAEjE0J,EAAc2C,EAAA,0BAAoC5C,EAAMrJ,MACxDkM,EAAY,kBAAgC5C,GAAe6C,EAAA,eAA+B7C,IAE1FxJ,EAAsB,mBAChB,QAAV,EAAAuJ,EAAMrJ,YAAI,eAAEmK,WACZqE,EAAA,sBAAwCnF,EAAMrJ,KAAKmK,WAG/CpK,EAAc,mBAA0D,QAAxB,EAAAD,EAAoBE,YAAI,eAAEC,gBAC9EuO,EAAA,cAAgC1O,EAAoBE,KAAKC,gBAErDwG,GAAU,EAAAyD,EAAA,GAA8B5F,EAAM1E,SAE9C4I,EAAgBzI,EAAYC,MAAQF,EAAoBE,QAAUyG,EAAQzG,QAAUyM,EAAWzM,KAE/FgP,EAAgBxG,IAAiB,QAAczI,EAAYC,KAAMyG,EAAQzG,KAAM,KAC/EmN,EAAkB6B,GAAiBA,EAAc7B,gBAAgBpL,OAAS,EAsBhF,OApBA,EAAA2L,EAAA,GAAmB,CAAEC,MAAO7N,EAAoBE,KAAO,GAAU,YAAa,CAAEuM,MAA+B,QAAxB,EAAAzM,EAAoBE,YAAI,eAAEiJ,OAAU,QAC3H,OAAqB,CAAEI,EAAOtJ,EAAaD,IAoBzC,uBAAK2E,UAAU,QACb,gBAACmJ,EAAA,EAAc,CACbC,MAAM,QAA2BxE,EAAMrJ,KAAM,WAC7CuM,MAAOzM,EAAoBE,KAC3BgO,aAAclC,EAAemC,EAAA,yBAC7BC,gBAA4B,QAAX,EAAAvH,EAAO3G,YAAI,eAAEkO,gBAC9B7E,MAAOA,EAAMrJ,KACbyM,WAAYA,EAAWzM,KACvBkM,UAAWA,EAAUlM,KACrBmN,gBAAiBA,EACjBgB,WAAuB,QAAZ,EAAA1H,EAAQzG,YAAI,eAAEmH,SAASpF,UAGpC,gBAACwG,GAAA,EAA2B,CAC1BzI,oBAAqBA,EAAoBE,KACzCyH,mBAjCN,SACEC,EACAhI,EACA0P,GAEA,eAA2B,CACzBE,YAAa,eACbC,OAAQ,0CACRZ,OAAQ,CACNa,UAAW9H,EAAKtH,GAChBR,QAAS0E,EAAM1E,QACfwP,cAAAA,EACArG,UAAWrB,EAAKqB,YAGtB,EAmBMhJ,YAAaA,EAAYC,KACzByG,QAASA,EAAQzG,KACjBsG,SAAUhC,EAAMgC,SAChBF,OAAQ9B,EAAM8B,OAEdjE,WAAYsE,EAAQtE,WACpBuE,eAAgBA,EAChB8B,cAAeA,EACf7B,OAAQA,EAAO3G,KACfyI,iBAAkBA,IAI1B,C,4ECnHM,GAAYrE,EAAA,mBADA,oCAYZ,SAAUqL,GAA0BnL,G,MAClCoL,GAAmC,QAAd,EAAApL,EAAM6C,gBAAQ,eAAE5C,OAAO,SAAAoL,GAAU,MAAC,QAAiB,QAAhB,EAAArL,EAAMsL,kBAAU,eAAEC,SAASF,EAAQvP,IAAG,KAAK,GAEzG,OACE,gBAAC0P,GAAA,EAAW,CACVnC,MAAO,GAAU,SACjBoC,QAAS,aACTC,aAAa,2BAEb,gBAACC,GAAA,EAAkB,CACjB9I,SAAUuI,EACV9I,YAAatC,EAAMsC,YACnBsJ,SAAU5L,EAAM4L,SAChBC,YAAa,GAAU,mBACvBzJ,eAAgBpC,EAAMoC,iBAI9B,CC9BA,IACM,GAAYtC,EAAA,mBADA,iCAWZ,SAAUgM,GAAuB9L,GACrC,OACE,gBAACwL,GAAA,EAAW,CACVnC,MAAO,GAAU,SACjBoC,QAAS,WACTC,aAAa,8BACbK,MAAO/L,EAAM6C,SAASpF,QAEtB,gBAACkO,GAAA,EAAkB,CACjB9I,SAAU7C,EAAM6C,SAChBP,YAAatC,EAAMsC,YACnBsJ,SAAU5L,EAAM4L,SAChBC,YAAa,GAAU,mBACvBG,QAAShM,EAAMwK,eACfyB,YAAa,GAAU,WACvB7J,eAAgBpC,EAAMoC,iBAI9B,C,mDCvCA,SAAkC,QCG5B,SAAU8J,KACd,OACE,2BACE,sBAAI/L,UAAU,sCAAoC,KAClD,uBAAKA,UAAU,gBACb,uBAAKA,UAAU,UACb,uBAAKA,UAAS,UAAK,GAAsB,2CAI7C,sBAAIA,UAAU,sCAAoC,KAClD,uBAAKA,UAAU,gBACb,uBAAKA,UAAU,SACb,uBAAKA,UAAS,UAAK,GAAsB,0CAE3C,uBAAKA,UAAU,SACb,uBAAKA,UAAS,UAAK,GAAsB,2CAKnD,CCLA,IAAM,GAAY,iCAiBZ,SAAUgM,GAAsBnM,G,UAC9B6J,EAAU7J,EAAMkE,kBAAgC,QAAb,EAAAlE,EAAMiH,eAAO,eAAExJ,QAExD,SAAS2O,IACP,OAAKpM,EAAMiH,QAEJoF,OAAOC,OAAOtM,EAAMiH,SAFA,EAG7B,CAEA,OACE,iCACIjH,EAAMkE,eAAiB,gBAACgI,GAA4B,MAErDlM,EAAMkE,eACL,gBAACqI,GAAA,EAAiB,CAACtE,MAAOjI,EAAMiI,MAAO4B,QAASA,EAAS9E,MAAO/E,EAAM+E,OACpE,2BAAS5E,UAAU,QACjB,sBAAIA,UAAU,MACZ,gBAACc,GAAA,EAAI,CAACC,UAAW,GAAWC,OAAO,mBACnC,iCAASiL,IAAkB3O,OAAQuC,EAAM8F,kBAAoB,IAAH,OAAO9F,EAAM8F,kBAAkBrI,QAAW,KAEtG,uBAAK0C,UAAU,cACa,QAAvB,EAAAH,EAAM8F,yBAAiB,eAAErI,SAC1B,uBAAK0C,UAAU,iBACb,gBAACgL,GAAyB,CACxBtI,SAAU7C,EAAM8F,kBAChBwF,WAAyB,QAAb,EAAAtL,EAAMiH,eAAO,eAAE7J,IAAI,SAAAsJ,GAAC,OAAIA,EAAE5K,EAAE,GACxCwG,YAAatC,EAAMqC,OAAOC,YAC1BkI,eAAgBxK,EAAMwM,sBAAsBhC,eAC5CoB,SAAUxH,GAAA,kBACVhC,eAAgBpC,EAAMoC,kBAI5B,uBAAKjC,UAAU,iBACb,gBAAC2L,GAAsB,CACrBjJ,SAAUuJ,IACV9J,YAAatC,EAAMqC,OAAOC,YAC1BkI,eAAgBxK,EAAMwM,sBAAsBhC,eAC5CoB,SAAUxH,GAAA,kBACVhC,eAAgBpC,EAAMoC,oBAK9B,2BAASjC,UAAU,QACjB,sBAAIA,UAAU,MACZ,gBAACc,GAAA,EAAI,CACHC,UAAW,GACXC,OAAQnB,EAAMyM,cAAgB,kBAAoB,gBAGtD,uBAAKtM,UAAU,WACb,uBAAKA,UAAU,mBACb,gBAACuM,GAAA,EAAc,CACbvC,QAASnK,EAAMmK,WAGnB,uBAAKhK,UAAU,mBACb,gBAACwM,GAAA,EAAc,CACbnG,WAAYxG,EAAM+I,oBAClByB,eAAgBxK,EAAMwM,sBAAsBhC,eAC5CnD,gBAAgB,QAAkBrH,EAAM+J,4BAS1D,C,uGC3EA,IACM,GAAYjK,EAAA,mBADA,sCAOZ,SAAU8M,GAA0B5M,G,YACjCoC,G,GAAkB,OAAsBmE,EAAA,mB,EAAoC,E,s4BAA9D,IAErB,EAAAgB,EAAA,KAEA,IAAQkF,GAAkB,EAAAI,GAAA,GAAY,MAA9BJ,cAEAjF,GAAmB,EAAAC,EAAA,KAAnBD,eAEFnF,EAAS,kBAA6B6F,EAAA,YACtC3M,EAAc,kBAAkCsL,EAAA,iBAChDsB,EAAa,kBACjB5M,EAAYG,MAAQ0M,EAAA,aAA4B7M,EAAYG,KAAK2M,aAG7DtD,EAAQ,kBAA4B2C,EAAA,WAAuB1H,EAAM1E,UAEjE0J,EAAc2C,EAAA,0BAAoC5C,EAAMrJ,MACxDkM,EAAY,kBAAgC5C,GAAe6C,EAAA,eAA+B7C,IAE1Fc,GAAoB,EAAAjB,EAAA,GAA6B7E,EAAM1E,SAEvDwM,EAAe/C,EAAMrJ,MAAQqM,EAAA,kBAA4BhD,EAAMrJ,KAAKmK,SAAUd,EAAMrJ,KAAKsM,cACzFC,EAAQ,kBAAiCH,IAE/C,EAAAsB,EAAA,GAAmB,CAAEC,MAAOpB,EAAMvM,KAAO,GAAU,YAAa,CAAEuM,MAAiB,QAAV,EAAAA,EAAMvM,YAAI,eAAEiJ,OAAU,QAC/F,OAAqB,CAAEI,EAAOkD,IAE9B,IAAMzB,EAAa,kBACjBL,EAAkCnG,EAAM1E,UAGpCyN,EAAsB,kBAC1B5C,EAA6CnG,EAAM1E,UAG/C6O,EAAU,kBACdhE,EAAsCnG,EAAM1E,QAAS,YAGvD,EAAgCgL,EAAqBtG,EAAM1E,SAAnDsL,EAAK,EAALA,MAAO9I,EAAY,EAAZA,aAEToG,EACJ7B,EAAOvE,cACPmK,EAAMnK,cACN0I,EAAW1I,cACXiL,EAAoBjL,cACpBqM,EAAQrM,cACRqK,EAAWzM,MACXoC,EAEI0O,ECpFF,SAAmCzH,GACvC,MAAO,CACLyF,gBAAgB,QAA0BzF,ODkFd+H,GChFhC,CDgFgCA,CAAyB/H,EAAMrJ,MAE7D,OACE,uBAAKyE,UAAU,QACb,gBAACmJ,EAAA,EAAc,CACbrB,MAAOA,EAAMvM,KACbkM,UAAWA,EAAUlM,KACrB6N,MAAM,QAAqBxE,EAAMrJ,KAAM,YACvCgO,aAAclC,EAAemC,EAAA,yBAC7BC,gBAA4B,QAAX,EAAAvH,EAAO3G,YAAI,eAAEkO,gBAC9B7E,MAAOA,EAAMrJ,KACbyM,WAAYA,EAAWzM,KACvBmO,QAAS3F,MAAmB0C,aAAK,EAALA,EAAOnJ,UAGrC,gBAAC0O,GAAqB,CACpBjI,gBAAiBA,EACjBuI,cAAeA,EACfrK,eAAgBA,EAChBoK,sBAAuBA,EACvBnK,OAAQA,EAAO3G,KACfuM,MAAOA,EAAMvM,KACboK,kBAAmBA,EAAkBtI,MACrCyJ,QAASL,EACTmD,qBAAsBvD,EAAW9K,KACjCqN,oBAAqBA,EAAoBrN,KACzCqJ,MAAOA,EAAMrJ,KACbyO,QAASA,EAAQzO,OAIzB,C,0nBEhGA,IAAMqR,GAAc,YACjBvD,EAAA,QAAmB,CAClBwD,SAAU,SAAAC,GAAG,OAAI,gBAACL,GAAyB,CAACtR,QAAS2R,EAAIlI,MAAMzJ,SAAW,EAC1E4R,QAAS,SAAAD,GAAG,OAAI,gBAAC3F,EAAmB,CAAChM,QAAS2R,EAAIlI,MAAMzJ,SAAW,IAEpEkO,EAAA,OAAkB,CACjBwD,SAAU,SAAAC,GAAG,OAAI,gBAACL,GAAyB,CAACtR,QAAS2R,EAAIlI,MAAMzJ,SAAW,EAC1E4R,QAAS,SAAAD,GAAG,OAAI,gBAAC3F,EAAmB,CAAChM,QAAS2R,EAAIlI,MAAMzJ,SAAW,IAEpEkO,EAAA,cAAyB,CACxBwD,SAAU,SAAAC,GAAG,OAAI,gBAAChD,EAA+B,CAAC3O,QAAS2R,EAAIlI,MAAMzJ,SAAW,EAChF4R,QAAS,SAAAD,GAAG,OAAI,gBAAC3F,EAAmB,CAAChM,QAAS2R,EAAIlI,MAAMzJ,SAAW,EACnE6R,UAAW,SAAAF,GAAG,OACZ,gBAACrC,EAAgC,CAC/BE,cAAemC,EAAInC,cACnBhJ,OAAQmL,EAAInL,OACZxG,QAAS2R,EAAIlI,MAAMzJ,SACnB,EAEJ6G,QAAS,SAAA8K,GAAG,OACV,gBAAClC,GAA+B,CAC9B/I,SAAUiL,EAAIjL,SACdF,OAAQmL,EAAInL,OACZxG,QAAS2R,EAAIlI,MAAMzJ,SACnB,IClBF,SAAU8R,GAAiBpN,GAC/B,IAAM+E,EAAQ,kBAA4B2C,EAAA,WAAuB1H,EAAM1E,UAEjE+R,EDyBF,SAA0B9O,G,MACtBwG,EAAexG,EAAfwG,MAAOuI,EAAQ/O,EAAR+O,IACTC,EAA4C,QAAnC,EAAAR,GAAehI,aAAK,EAALA,EAAOiD,qBAAa,eAAGsF,GAErD,OAAIC,EACKA,EAAOhP,GAET,gCACT,CCjCeiP,CAAgB,CAC3BzI,MAAOA,EAAMrJ,KACb4R,IAAKtN,EAAMsN,IACXxC,cAAe9K,EAAM8K,cACrBhJ,OAAQ9B,EAAM8B,OACdE,SAAUhC,EAAMgC,WAclB,OAXA,YAAgB,WACd,GAAKhC,EAAMyN,kBACN1I,EAAMrJ,KAAX,CAEA,IAAMsQ,GAAU,QAAuBjH,EAAMrJ,MAExCsQ,GAEL,eAA2BA,EANJ,CAOzB,EAAG,CAAEjH,EAAMrJ,KAAMsE,EAAMyN,mBAGrB,gCACGJ,EAGP,C","sources":["file:///app/packages/libs/shared/src/apps/analytics/hooks/UseFetchInteractiveResults.ts","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/student-results-table/StudentResultsEmptyState.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/student-results-table/StudentResultsTableFilters.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/student-results-table/StudentResultsTable.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/interactive-insights-students/partial-loading/partial-interactive-insights-students.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/interactive-insights-students/partial-loading/PartialInteractiveInsightsStudents.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/interactive-insights-students/InteractiveInsightsStudents.tsx","file:///app/packages/projects/lite/src/apps/my-shares/hooks/useAnonSessions.ts","file:///app/packages/projects/lite/src/apps/my-shares/hooks/useInsightsClassroomStudents.ts","file:///app/packages/projects/lite/src/apps/my-shares/hooks/useInsightsInteractiveResults.ts","file:///app/packages/projects/lite/src/apps/my-shares/flight-requests/VideoViewsV2Requests.ts","file:///app/packages/projects/lite/src/apps/my-shares/hooks/useInsightEngagement.ts","file:///app/packages/projects/lite/src/apps/my-shares/views/heatmap/InsightsHeatmapView.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/interactive/overview/InteractiveInsightsOverviewView.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/interactive/overview/InteractiveInsightsOverviewUtils.ts","file:///app/packages/projects/lite/src/apps/my-shares/views/interactive/questions/InteractiveInsightsQuestionsView.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/interactive/students/InteractiveInsightsStudentsView.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/students-not-watched/InsightStudentsNotWatched.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/students-watched/InsightStudentsWatched.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/video-insights-overview/partial-loading/partial-video-insights-overview.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/video-insights-overview/partial-loading/PartialVideoInsightsOverview.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/video-insights-overview/VideoInsightsOvervew.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/video/overview/VideoInsightsOverviewView.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/video/overview/VideoInsightsOverviewUtils.ts","file:///app/packages/projects/lite/src/apps/my-shares/views/base-insights-view/useInsightsView.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/base-insights-view/BaseInsightsView.tsx"],"sourcesContent":["import { Flight } from 'libs/common/flight';\n\nimport { InteractiveResultsRequests } from 'libs/shared/apps/analytics/flight-requests/InteractiveResultsRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { AnalyticsRequestFilter, CurrentUser, Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\n\nexport function useFetchInteractiveResults(\n interactiveMetadataId: string,\n requestFilter?: AnalyticsRequestFilter,\n shareId?: string\n): Flight.Response<InteractiveResultSet> {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(!!interactiveMetadataId &&\n InteractiveRequests.interactiveMetadata(interactiveMetadataId));\n\n const interactive = Flight.useBasicFetch<Interactive>(!!interactiveMetadata.data?.interactiveId &&\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId));\n\n const shouldFetchResults = !!currentUser.data && !!interactive.data;\n\n return Flight.useBasicFetch<InteractiveResultSet>(shouldFetchResults &&\n InteractiveResultsRequests.interactiveResultSet(\n interactiveMetadata.data.interactiveId,\n interactiveMetadata.data.id,\n currentUser.data,\n requestFilter,\n shareId\n ));\n}","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n internalServerError?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError,\n internalServerError: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.InternalServer) {\n if (!ignoreMap.internalServerError)\n Core.ErrorHelper.throw(new UnspecifiedError());\n return;\n }\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst CHUNK_SIZE = 50;\n\nexport interface UseBatchFetchResult<T extends BaseObject> {\n itemsArr: T[];\n items: { [key: string]: T} | null;\n isFetching: boolean;\n hasCompleted: boolean;\n}\n\n/**\n * Used to fetch multiple items by id with Flight. Will fetch 25 items at a time firing off multiple\n * requests if there are more than 25 items.\n * This will return items as null until we have all our items. Items will be returned as an object with\n * their ids as they key for easy mapping\n * \n * @param itemIds \n * @param getRequest \n */\nexport function useBatchFetch<T extends BaseObject>(\n itemIds: string[],\n getRequest: (ids: string[]) => Flight.Request\n): UseBatchFetchResult<T> {\n const chunks = ArrayHelper.chunk<string>(itemIds, CHUNK_SIZE);\n\n const requests = chunks.map(chunk => getRequest(ArrayHelper.uniq(chunk)));\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\n\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce((acc, item) => ({ ...acc, [item.id]: item }), {})\n : null;\n\n return {\n itemsArr,\n items,\n isFetching: responses.isFetching,\n hasCompleted: responses.hasCompleted\n };\n}\n\n/**\n * When you need the useBatchFetch() behavior, but your list of objects to hydrate\n * will grow, such as on a scrolling page. useGrowingBatchFetch() will use local state\n * to determine what we've already built a request for and what items are new\n * as to not re-fetch items - Sha\n */\nexport function useGrowingBatchFetch<TResponse, TObjects = string>(\n objs: TObjects[],\n getRequest: (items: TObjects[]) => Flight.Request,\n _getKey?: (obj: TObjects) => string\n) {\n const getKey = _getKey ?? ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const { fetchItems, ...data } = useGrowingBatchFetchFunc<TResponse, TObjects>({ getRequest, _getKey });\n\n React.useEffect(() => {\n if (!objs?.length)\n return;\n\n fetchItems(objs);\n }, [objs?.map(getKey).join(',')]);\n\n return data;\n}\n\ninterface UseGrowingBatchFetchFuncOptions<TObjects> {\n getRequest: (items: TObjects[]) => Flight.Request;\n _getKey?: (obj: TObjects) => string;\n}\n\n/**\n * When you need the useGrowingBatchFetch() behaviour, but need to trigger the\n * fetch manually and update the objects - Nish \n */\nexport function useGrowingBatchFetchFunc<TResponse, TObjects = string>(\n options: UseGrowingBatchFetchFuncOptions<TObjects>\n) {\n const getKey = options._getKey ?? ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const fetchedItems = React.useRef<Set<string>>(new Set<string>());\n const [ requests, setRequests ] = React.useState<Flight.Request[]>([]);\n\n function fetchItems(objs: TObjects[]) {\n if (!objs?.length)\n return;\n\n const unfetchedItems: TObjects[] = [];\n \n objs.forEach(obj => {\n const key = getKey(obj);\n\n if (fetchedItems.current.has(key))\n return;\n\n unfetchedItems.push(obj);\n fetchedItems.current.add(key);\n });\n \n if (!unfetchedItems.length)\n return;\n \n setRequests(r => ([ ...r, ...ArrayHelper.chunk<TObjects>(unfetchedItems, CHUNK_SIZE).map(options.getRequest) ]));\n }\n\n const responses = Flight.useBasicFetchAll<TResponse[]>(requests);\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce<Record<string, TResponse>>((acc, item) => ({ ...acc, [getKey(item)]: item }), {})\n : null;\n\n return {\n hasFirstRequestCompleted: !!responses.responses?.[0]?.hasCompleted,\n itemsArr,\n items,\n isFetching: responses.isFetching,\n fetchItems\n };\n}\n","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { FilterStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\n\nconst namespace = 'shared.studentResultsTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface StudentResultsEmptyStateProps {\n filter: FilterStudentsBy;\n notCompletedImageUrl: string;\n helpingHandImageUrl: string;\n markingRequiredImageUrl: string;\n emptyStateImageUrl: string;\n}\n\nexport function StudentResultsEmptyState(props: StudentResultsEmptyStateProps) {\n if (props.filter === 'not_completed') {\n return (\n <EmptyState className='bg-white rounded-bottom py-5'>\n <EmptyState.Image src={props.notCompletedImageUrl} size='small' />\n <EmptyState.Info>\n {getPhrase('notCompletedDescription')}\n </EmptyState.Info>\n </EmptyState>\n );\n }\n if (props.filter === 'marking_required') {\n return (\n <EmptyState className='bg-white rounded-bottom py-5'>\n <EmptyState.Image src={props.markingRequiredImageUrl} size='small' />\n <EmptyState.Info>\n {getPhrase('markingRequiredDescription')}\n </EmptyState.Info>\n </EmptyState>\n );\n }\n\n if (props.filter === 'helping_hand') {\n return (\n <EmptyState className='bg-white rounded-bottom py-5'>\n <EmptyState.Image src={props.helpingHandImageUrl} size='small' />\n <EmptyState.Info>\n {getPhrase('helpingHandDescription')}\n </EmptyState.Info>\n </EmptyState>\n );\n }\n\n return (\n <EmptyState className='bg-white rounded-bottom py-5'>\n <EmptyState.Image src={props.emptyStateImageUrl} size='small' />\n <EmptyState.Heading>\n {getPhrase('emptyStateHeading')}\n </EmptyState.Heading>\n <EmptyState.Info>\n {getPhrase('emptyStateDescription')}\n </EmptyState.Info>\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { FilterStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'shared.studentResultsTable';\n\ninterface StudentResultsTableFiltersProps {\n filter: FilterStudentsBy;\n setFilter: (filter: FilterStudentsBy) => void;\n}\n\nexport function StudentResultsTableFilterButtons(props: StudentResultsTableFiltersProps) {\n function toggleFilter(selectedFilter: FilterStudentsBy) {\n const updatedFilter = props.filter === selectedFilter ? null : selectedFilter;\n\n props.setFilter(updatedFilter);\n }\n\n function isFilterSelected(filter: FilterStudentsBy) {\n return props.filter === filter;\n }\n\n function getClassName(filter: FilterStudentsBy) {\n return `btn btn-outline-dark ${isFilterSelected(filter) ? 'bg-dark text-white' : ''}`;\n }\n\n return (\n <div className='d-flex align-items-center mb-3'>\n <p className='h6 mb-0'><Text namespace={namespace} phrase='filters' /></p>\n <div className='d-flex border-start ps-3 ms-3 gap-2'>\n <button className={getClassName('not_completed')} onClick={() => toggleFilter('not_completed')}>\n <Text namespace={namespace} phrase='notCompletedFilter' />\n </button>\n <button className={getClassName('marking_required')} onClick={() => toggleFilter('marking_required')}>\n <Text namespace={namespace} phrase='markingRequiredFilter' />\n </button>\n <button className={getClassName('helping_hand')} onClick={() => toggleFilter('helping_hand')}>\n <Text namespace={namespace} phrase='helpingHandFilter' />\n </button>\n </div>\n </div>\n );\n}","import React from 'react';\nimport { Cell, Row, SortingRule } from 'react-table';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { StudentResultsEmptyState } from 'libs/shared/apps/analytics/components/student-results/student-results-table/StudentResultsEmptyState';\nimport { StudentResultsTableFilterButtons } from 'libs/shared/apps/analytics/components/student-results/student-results-table/StudentResultsTableFilters';\nimport { StudentResultsWithSummary } from 'libs/shared/apps/analytics/interfaces/StudentResultsWithSummary';\nimport { FilterStudentsBy, getSortStudents, SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { Table, TableTheme } from 'libs/shared/components/table/Table';\nimport { Config, Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport {\n highlightColumns,\n highlightRows,\n RESULTS_COL_WIDTH,\n useGetFixedColumns,\n useGetResultColumns,\n useGetResultsTableData\n} from './StudentResultsTableUtils';\n\nimport styles from './student-results-table.scss';\n\nconst fixedTableTheme: TableTheme = {\n table: `${styles.fixedTable} bg-white rounded-start border border-end-0`,\n header: `${styles.header} border-bottom`,\n headerRow: 'h-100',\n headerCell: 'd-flex align-items-center justify-content-start',\n row: styles.row\n};\n\nconst resultsTableTheme: TableTheme = {\n header: `${styles.header} fw-bold`,\n headerRow: 'h-100',\n headerCell: `${styles.interactionHeaderCellOuter} bg-white border-bottom`,\n row: `${styles.row} ${styles.resultsRow}`,\n cell: styles.resultsCellOuter\n};\n\ninterface StudentResultsTableProps {\n interactive: Interactive;\n interactiveMetadata: InteractiveMetadata;\n results: InteractiveResultSet;\n\n /**\n * As the table data is memoized, it must be prompted to recalculate.\n * Toggle `refreshTable` to do so.\n */\n refreshTable: boolean;\n config?: Config;\n selectedStudentId?: string;\n emptyStateImageUrl?: string;\n notCompletedImageUrl?: string;\n helpingHandImageUrl?: string;\n markingRequiredImageUrl?: string;\n anonymiseUsers?: boolean;\n sortBy?: SortStudentsBy;\n filterBy?: FilterStudentsBy;\n showSeparateNameColumns?: boolean;\n viewStudentResults: (\n student: AnonUser,\n interactiveMetadataId: string,\n interactionId?: string\n ) => void;\n}\n\nexport function StudentResultsTable(props: StudentResultsTableProps): JSX.Element {\n const [ sortBy, setSortBy ] = React.useState<SortingRule<StudentResultsWithSummary>[]>(\n getSortStudents(props.sortBy, 'score')\n );\n const [ filter, setFilter ] = React.useState<FilterStudentsBy>(props.filterBy);\n\n const ref = React.useRef<HTMLDivElement>(null);\n\n const fixedColumns = useGetFixedColumns(\n props.results,\n props.anonymiseUsers,\n props.config?.imageCdnUrl,\n props.showSeparateNameColumns\n );\n const resultColumns = useGetResultColumns(\n props.interactive,\n props.interactiveMetadata,\n props.results,\n onColumnHover,\n props.refreshTable\n );\n const data = useGetResultsTableData(\n props.interactive,\n props.results,\n props.refreshTable,\n props.anonymiseUsers,\n ArrayHelper.first(sortBy),\n filter,\n props.showSeparateNameColumns\n );\n\n function onSelectStudent({ original }: Row<StudentResultsWithSummary>): void {\n props.viewStudentResults(original.user, props.interactiveMetadata.id);\n }\n\n function onSelectStudentResponse(cell: Cell<StudentResultsWithSummary>): void {\n props.viewStudentResults(\n cell.row.original.user,\n props.interactiveMetadata.id,\n cell.column.id\n );\n }\n\n function onColumnHover(index?: number): void {\n highlightColumns(ref.current, index);\n }\n\n function onRowHover(index?: number): void {\n highlightRows(ref.current, index);\n }\n\n function getFixedTableTheme(): TableTheme {\n if (resultColumns.length)\n return fixedTableTheme;\n\n return {\n ...fixedTableTheme,\n table: `${styles.fixedTable} bg-white rounded border`\n };\n }\n\n return (\n <div>\n {!!props.results.students.length && <StudentResultsTableFilterButtons filter={filter} setFilter={setFilter} />}\n\n {!data.length && (\n <StudentResultsEmptyState\n emptyStateImageUrl={props.emptyStateImageUrl}\n helpingHandImageUrl={props.helpingHandImageUrl}\n markingRequiredImageUrl={props.markingRequiredImageUrl}\n notCompletedImageUrl={props.notCompletedImageUrl}\n filter={filter}\n />\n )}\n\n {!!data.length && (\n <div ref={ref} className={`d-flex${data.length && resultColumns.length ? ` ${styles.hasResults}` : ''}`}>\n <Table\n columns={fixedColumns}\n data={data}\n theme={getFixedTableTheme()}\n onSelectRow={onSelectStudent}\n onRowMouseOver={row => onRowHover(row.index)}\n onRowMouseLeave={() => onRowHover()}\n enableSort\n manualSort\n onSort={setSortBy}\n initialSortBy={sortBy}\n />\n {!!resultColumns.length &&\n <Table\n columns={resultColumns}\n data={data}\n theme={resultsTableTheme}\n enableSlider\n scrollIncrement={RESULTS_COL_WIDTH * 8}\n onSelectCell={onSelectStudentResponse}\n scrollContainerClassName='rounded-end border border-start-0 border'\n />\n }\n </div>\n )}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialInsights\":\"qSeTe\"};","import React from 'react';\n\nimport styles from './partial-interactive-insights-students.scss';\n\nexport function PartialInteractiveInsightsStudents() {\n return (\n <div>\n <div className='d-flex align-items-center mb-3'>\n <p className='h6 px-4 mb-0 me-4 partial-loading-background'> </p>\n <div className='row g-2 w-50'>\n <div className='col-3'>\n <div className='p-2 rounded-1 partial-loading-background'> </div>\n </div>\n <div className='col-3'>\n <div className='p-2 rounded-1 partial-loading-background'> </div>\n </div>\n <div className='col-3'>\n <div className='p-2 rounded-1 partial-loading-background'> </div>\n </div>\n </div>\n </div>\n <div className='row g-3 mb-5'>\n <div className='col-12'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { StudentResultsTable } from 'libs/shared/apps/analytics/components/student-results/student-results-table/StudentResultsTable';\nimport { FilterStudentsBy, SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { Config, Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { PartialInteractiveInsightsStudents } from 'apps/my-shares/components/interactive-insights-students/partial-loading/PartialInteractiveInsightsStudents';\n\ninterface InteractiveInsightsStudentsProps {\n interactive: Interactive;\n interactiveMetadata: InteractiveMetadata;\n results: InteractiveResultSet;\n isFetching: boolean;\n sortBy: SortStudentsBy;\n filterBy: FilterStudentsBy;\n anonymiseUsers: boolean;\n config: Config;\n viewStudentResults: (\n user: AnonUser,\n interactiveMetadataId: string,\n interactionId?: string\n ) => void;\n hasDataLoaded: boolean;\n hideStaffResults: boolean;\n showSeparateNameColumns?: boolean;\n}\n\nexport function InteractiveInsightsStudents(props: InteractiveInsightsStudentsProps) {\n return (\n <>\n {!props.hasDataLoaded &&\n <PartialInteractiveInsightsStudents />\n }\n\n {props.hasDataLoaded &&\n <StudentResultsTable\n interactive={props.interactive}\n interactiveMetadata={props.interactiveMetadata}\n results={props.results}\n refreshTable={props.isFetching || props.hideStaffResults}\n viewStudentResults={props.viewStudentResults}\n emptyStateImageUrl={ImageUrls.Insights.NO_RESPONSES}\n sortBy={props.sortBy}\n filterBy={props.filterBy}\n anonymiseUsers={props.anonymiseUsers}\n notCompletedImageUrl={ImageUrls.Insights.JIGSAW}\n markingRequiredImageUrl={ImageUrls.Insights.CLIPBOARD}\n helpingHandImageUrl={ImageUrls.Insights.SPEECH_BUBBLE_HEART}\n config={props.config}\n showSeparateNameColumns\n />\n }\n </>\n );\n}","import { Flight } from 'libs/common/react/index';\n\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { AnonSession } from 'libs/shared/apps/share/interfaces/AnonSession';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nfunction toAnonUser(anonSession: AnonSession) {\n return { sessionId: anonSession.sessionId, name: anonSession.sessionName } as AnonUser;\n}\n\nexport function useAnonSessions(shareId: string) {\n const anonSessions = Flight.useBasicFetch<AnonSession[]>(ShareRequests.getAnonSessions(shareId));\n\n const anonSessionMap = anonSessions.data\n ?.reduce<Record<string, AnonUser>>((prev, next) => {\n return {\n ...prev,\n [next.sessionId]: toAnonUser(next)\n };\n }, {});\n\n return {\n items: anonSessionMap || {},\n hasCompleted: anonSessions.hasCompleted,\n isFetching: anonSessions.isFetching\n };\n}","import { Flight } from 'libs/common/react/index';\n\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { useFetchAll } from 'libs/shared/hooks/UseFetchAll';\nimport { User } from 'libs/shared/interfaces/models/User';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\n\nexport function useInsightsClassroomStudents(shareId: string) {\n const fetch = Flight.useGetFetch();\n\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(shareId));\n \n const classroomId = share.data?.type === ShareType.Classroom &&\n share.data?.recipients?.find(r => r.recipientTypeId === MasterType.Classroom)?.recipientId;\n\n const getRequest = (cursor: string) => ClassroomRequests.getClassroomStudents(classroomId, cursor);\n const result = useFetchAll<User>(classroomId && getRequest, cursor => fetch(getRequest(cursor)));\n\n return {\n ...result,\n hasCompleted: !classroomId || result.hasCompleted\n };\n}","import { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { useFetchInteractiveResults } from 'libs/shared/apps/analytics/hooks/UseFetchInteractiveResults';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { InteractiveResult, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport { useAnonSessions } from 'apps/my-shares/hooks/useAnonSessions';\nimport { useInsightsClassroomStudents } from 'apps/my-shares/hooks/useInsightsClassroomStudents';\n\nconst EMPTY_INTERACTIVE_RESULTS: InteractiveResult[] = [\n {\n id: '0',\n attempts: [{ id: '0', answeredAt: 0, answers: []}]\n }\n];\n\nexport function useInsightsInteractiveResults(shareId: string) {\n const [hideStaffResults] = useViewModel<boolean>(SharedViewModelKeys.HIDE_STAFF_RESULTS);\n\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(shareId));\n const results = useFetchInteractiveResults(share.data?.objectId, null, shareId);\n\n const anonSessions = useAnonSessions(shareId);\n\n const classroomStudents = useInsightsClassroomStudents(shareId);\n\n useHandleObjectError(results);\n\n const hasCompleted = (\n results.hasCompleted &&\n anonSessions.hasCompleted &&\n classroomStudents.hasCompleted\n );\n\n if (!hasCompleted) {\n return {\n data: null as InteractiveResultSet,\n hasCompleted: false\n };\n }\n\n const studentHash = new Set<string>();\n\n const students = results.data.students.map(s => {\n // Domain is returning userType as a number - Sha\n const userType = s.user?.userType as unknown as number;\n if (hideStaffResults && userType === 1)\n return null;\n\n if (s.user) {\n studentHash.add(s.user.id);\n return s;\n }\n\n /**\n * Set the user to our anon user, so we can display the name they entered\n * when completing the interactive - Sha\n */\n return {\n ...s,\n user: anonSessions.items[s.sessionId] || { sessionId: s.sessionId } as AnonUser\n };\n }).filter(s => !!s);\n\n /**\n * If we have classroom students, we're adding any students who haven't attempted to the list\n * with an empty attempt. This is so the student list can show all classroom students - Sha\n */\n if (classroomStudents?.items?.length) {\n students.push(...classroomStudents.items\n .filter(s => !studentHash.has(s.id))\n .map(user => ({ user, results: EMPTY_INTERACTIVE_RESULTS, isPlaceholder: true })));\n }\n\n const isFetching = share.isFetching\n || results.isFetching\n || anonSessions.isFetching\n || classroomStudents.isFetching;\n\n return {\n hasCompleted,\n isFetching,\n data: {\n ...results.data,\n students\n }\n };\n}","import { Flight } from 'libs/common/react/index';\n\nimport { StreamAggregationType } from 'libs/shared/apps/analytics/interfaces/StreamAggregationType';\n\nexport const VideoViewsV2Requests = {\n shareViews(shareId: string): Flight.Request {\n return {\n url: `{gateway}/v2/analytics/streams/shares/${shareId}/users/count`,\n key: `video:views:v2:share:${shareId}`,\n normalize: false\n };\n },\n\n shareAggregation(shareId: string, type: StreamAggregationType): Flight.Request {\n return {\n url: `{gateway}/v2/analytics/streams/shares/${shareId}/aggregation/${type}`,\n key: `video:views:v2:share:aggregation:${shareId}:${type}`,\n normalize: false\n };\n },\n\n shareHeatMap(shareId: string): Flight.Request {\n return {\n url: `{gateway}/v2/analytics/streams/shares/${shareId}/heat-map`,\n key: `video:views:v2:share:heatmap:${shareId}`,\n normalize: false\n };\n },\n\n shareHeatMapAggregation(shareId: string): Flight.Request {\n return {\n url: `{gateway}/v2/analytics/streams/shares/${shareId}/aggregation/heat-map`,\n key: `video:views:v2:share:heatmap:aggregation:${shareId}`,\n normalize: false\n };\n }\n};","import { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { Engagement } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport { VideoViewsV2Requests } from 'apps/my-shares/flight-requests/VideoViewsV2Requests';\nimport { useAnonSessions } from 'apps/my-shares/hooks/useAnonSessions';\n\nexport function useInsightEngagement(shareId: string) {\n const [hideStaffResults] = useViewModel<boolean>(SharedViewModelKeys.HIDE_STAFF_RESULTS);\n\n const engagement = Flight.useBasicFetch<Engagement[]>(\n VideoViewsV2Requests.shareHeatMap(shareId)\n );\n\n const anonSessions = useAnonSessions(shareId);\n\n const userIds = engagement.data?.map(u => u.userId).filter(id => !!id) || [];\n const users = useBatchFetch<AnonUser>(userIds, UserRequests.getById);\n\n function getAnonUser(e: Engagement): AnonUser {\n if (e.userId) {\n const user = users.items?.[e.userId];\n\n if (!user)\n return { id: e.userId, deleted: true } as AnonUser;\n\n return user;\n }\n\n const anonSession = anonSessions.items?.[e.sessionId];\n if (anonSession)\n return anonSession;\n\n return { sessionId: e.sessionId } as AnonUser;\n }\n \n const userMap = {\n ...anonSessions.items,\n ...users.items\n };\n\n const filteredEngagement = engagement.data?.filter(e => {\n const user = userMap[e.userId || e.sessionId];\n\n if (!user)\n return e;\n\n // Video views is returning userType as a number - Sha\n const userType = user.userType as unknown as number;\n if (userType === 1 && hideStaffResults)\n return null;\n\n return e;\n }).filter(e => !!e);\n\n const viewers = engagement\n .data?.map(e => ({ ...getAnonUser(e), percentage: e.engagementRate }));\n\n return {\n engagement: filteredEngagement,\n users: viewers,\n hasCompleted: (\n engagement.hasCompleted &&\n anonSessions.hasCompleted &&\n (!userIds?.length || users.hasCompleted)\n )\n };\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { InteractiveResultsRequests } from 'libs/shared/apps/analytics/flight-requests/InteractiveResultsRequests';\nimport { GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { InteractivesPendingReviews } from 'libs/shared/apps/analytics/interfaces/response/InteractivesPendingReviewsResponse';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Classroom, Config, CurrentUser, Engagement, PlayerViewKey, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InsightsHeatmap } from 'apps/my-shares/components/insights-heatmap/InsightsHeatmap';\nimport { VideoViewsV2Requests } from 'apps/my-shares/flight-requests/VideoViewsV2Requests';\nimport { useInsightEngagement } from 'apps/my-shares/hooks/useInsightEngagement';\nimport { useInsightsClassroomStudents } from 'apps/my-shares/hooks/useInsightsClassroomStudents';\nimport { getInsightsInteractiveTabs, getInsightsVideoTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\n\nconst namespace = 'shared.insightsHeatmap';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightsHeatmapViewProps {\n shareId: string;\n}\n\nexport function InsightsHeatmapView(props: InsightsHeatmapViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(ViewModelKeys.ANONYMISE_USERS);\n const [hideStaffResults] = useViewModel<boolean>(ViewModelKeys.HIDE_STAFF_RESULTS);\n\n useLockContentWidth();\n\n const { hasPermissions } = usePermissions();\n\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(props.shareId));\n \n const classroomId = ShareHelper.getClassroomIdFromShare(share.data);\n const classroom = Flight.useBasicFetch<Classroom>(classroomId && ClassroomRequests.getClassroom(classroomId));\n\n const classroomStudents = useInsightsClassroomStudents(props.shareId);\n \n const videoRequest = share.data && VideoHelper.getVideoRequest(share.data.objectId, share.data.objectTypeId);\n const video = Flight.useBasicFetch<VideoTypes>(videoRequest);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const pendingReviewsRequest = VideoHelper.isInteractive(video.data) && InteractiveResultsRequests.pendingReviews({\n interactives: [video.data].map(obj => ({\n interactiveId: obj.interactiveId,\n metadataId: obj.id,\n shareId: props.shareId\n })),\n filters: {\n currentCustomerId: currentUser.data.customerId,\n currentUserId: currentUser.data.id\n }\n });\n const pendingReviews = Flight.useBasicFetch<InteractivesPendingReviews[]>(pendingReviewsRequest);\n const markingRequired = pendingReviews.data?.[0]?.pendingReviewCount > 0;\n\n const aggregateEngagement = Flight.useBasicFetch<Engagement>(\n VideoViewsV2Requests.shareHeatMapAggregation(props.shareId)\n );\n\n const { users, engagement, hasCompleted } = useInsightEngagement(props.shareId);\n\n const yearGroupsCount = Flight.useBasicFetch<GroupedAnalyticsCount[]>(\n VideoViewsV2Requests.shareAggregation(props.shareId, 'year_group')\n );\n\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(\n share.data?.objectId &&\n PlayerRequests.createViewKey(share.data.objectId, MediaIdType.MasterObject)\n );\n\n useSetPageMetadata({ title: video.data ? getPhrase('pageTitle', { video: video.data?.name }) : null });\n useHandleObjectError([ share, video ]);\n\n const hasDataLoaded =\n share.hasCompleted &&\n video.hasCompleted &&\n config.hasCompleted &&\n aggregateEngagement.hasCompleted &&\n yearGroupsCount.hasCompleted &&\n viewKey.hasCompleted &&\n yearGroups.hasCompleted;\n\n function getInsightsTabs() {\n if (share.data?.objectTypeId === MasterType.Interactive)\n return getInsightsInteractiveTabs(share.data, 'heatmap');\n\n return getInsightsVideoTabs(share.data, 'heatmap');\n }\n\n return (\n <div className='px-3'>\n <InsightsHeader\n video={video.data}\n tabs={getInsightsTabs()}\n hasAnalytics={hasPermissions(PermissionName.ViewCustomerAnalytics)}\n analyticsWebUrl={config.data?.analyticsWebUrl}\n share={share.data}\n yearGroups={yearGroups.data}\n classroom={classroom.data}\n markingRequired={markingRequired}\n hasData={!!engagement?.length}\n />\n <InsightsHeatmap\n aggregateEngagement={aggregateEngagement.data}\n individualEngagement={engagement}\n yearGroups={yearGroupsCount.data}\n config={config.data}\n users={users}\n viewKey={viewKey.data}\n hasDataLoaded={hasDataLoaded}\n tableDataLoaded={hasCompleted}\n anonymiseUsers={anonymiseUsers}\n classroomStudents={classroomStudents.items}\n hideStaffResults={hideStaffResults}\n />\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { groupStudents } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { ScoreThresholdInsights } from 'libs/shared/constants/ScoreThresholds';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Classroom, Config, CurrentUser, Engagement, Interactive, InteractiveMetadata, YearGroup } from 'libs/shared/interfaces';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InteractiveInsightsOverview } from 'apps/my-shares/components/interactive-insights-overview/InteractiveInsightsOverview';\nimport { VideoViewsV2Requests } from 'apps/my-shares/flight-requests/VideoViewsV2Requests';\nimport { useInsightsClassroomStudents } from 'apps/my-shares/hooks/useInsightsClassroomStudents';\nimport { useInsightsInteractiveResults } from 'apps/my-shares/hooks/useInsightsInteractiveResults';\nimport { getInsightsInteractiveTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\nimport { getInteractiveInsightsAppLinks } from 'apps/my-shares/views/interactive/overview/InteractiveInsightsOverviewUtils';\n\nconst namespace = 'insights.interactiveInsightsOverviewView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractiveInsightsViewProps {\n shareId: string;\n}\n\nexport function InteractiveInsightsOverviewView(props: InteractiveInsightsViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const { hasPermissions } = usePermissions();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(props.shareId));\n \n const classroomId = ShareHelper.getClassroomIdFromShare(share.data);\n const classroom = Flight.useBasicFetch<Classroom>(classroomId && ClassroomRequests.getClassroom(classroomId));\n\n const classroomStudents = useInsightsClassroomStudents(props.shareId);\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n share.data?.objectId &&\n InteractiveRequests.interactiveMetadata(share.data.objectId)\n );\n\n const interactive = Flight.useBasicFetch<Interactive>(\n interactiveMetadata.data?.interactiveId &&\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId)\n );\n\n const results = useInsightsInteractiveResults(props.shareId);\n\n const engagement = Flight.useBasicFetch<Engagement[]>(\n VideoViewsV2Requests.shareHeatMap(props.shareId)\n );\n\n const aggregateEngagement = Flight.useBasicFetch<Engagement>(\n VideoViewsV2Requests.shareHeatMapAggregation(props.shareId)\n );\n\n const osCount = Flight.useBasicFetch<GroupedAnalyticsCount[]>(\n VideoViewsV2Requests.shareAggregation(props.shareId, 'os_name')\n );\n\n useSetPageMetadata({ title: interactiveMetadata.data ? getPhrase('pageTitle', { video: interactiveMetadata.data?.name }) : null });\n\n useHandleObjectError([ share, interactive, interactiveMetadata ]);\n\n const hasDataLoaded =\n config.hasCompleted &&\n interactiveMetadata.hasCompleted &&\n interactive.data &&\n aggregateEngagement.hasCompleted &&\n engagement.hasCompleted &&\n osCount.hasCompleted &&\n results.hasCompleted &&\n yearGroups.hasCompleted;\n\n const interactiveInsightsAppLinks = getInteractiveInsightsAppLinks(share.data);\n\n const studentGroups = hasDataLoaded && groupStudents(interactive.data, results.data, ScoreThresholdInsights);\n const markingRequired = studentGroups && studentGroups.markingRequired.length > 0;\n\n return (\n <div className='px-3'>\n <InsightsHeader\n video={interactiveMetadata.data}\n tabs={getInsightsInteractiveTabs(share.data, 'insights')}\n hasAnalytics={hasPermissions(PermissionName.ViewCustomerAnalytics)}\n analyticsWebUrl={config.data?.analyticsWebUrl}\n share={share.data}\n yearGroups={yearGroups.data}\n classroom={classroom.data}\n markingRequired={markingRequired}\n hasData={!!results.data?.students.length}\n />\n\n <InteractiveInsightsOverview\n aggregateEngagement={aggregateEngagement.data}\n individualEngagement={engagement.data}\n interactive={interactive.data}\n interactiveMetadata={interactiveMetadata.data}\n interactiveInsightsAppLinks={interactiveInsightsAppLinks}\n classroomStudents={classroomStudents.items}\n results={results.data}\n osCount={osCount.data}\n config={config.data}\n anonymiseUsers={anonymiseUsers}\n hasDataLoaded={hasDataLoaded}\n share={share.data}\n />\n </div>\n );\n}","import { HashObject } from 'libs/common/react/interfaces';\n\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\n\nimport { getInsightsHeatmapAppLink, getInsightsQuestionsAppLink, getInsightsStudentsAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nexport function getInteractiveInsightsAppLinks(share: Share, params?: HashObject) {\n return {\n resultsAppLink: getInsightsStudentsAppLink(share, params),\n questionsAppLink: getInsightsQuestionsAppLink(share, params),\n heatmapAppLink: getInsightsHeatmapAppLink(share, params)\n };\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { groupStudents } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { ScoreThresholdInsights } from 'libs/shared/constants/ScoreThresholds';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Classroom, Config, CurrentUser, Interactive, InteractiveMetadata, YearGroup } from 'libs/shared/interfaces';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InteractiveInsightsQuestions } from 'apps/my-shares/components/interactive-insights-questions/InteractiveInsightsQuestions';\nimport { useInsightsInteractiveResults } from 'apps/my-shares/hooks/useInsightsInteractiveResults';\nimport { getInsightsInteractiveTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\n\nconst namespace = 'shared.interactiveInsightsQuestionsView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractiveInsightsQuestionsViewProps {\n shareId: string;\n interactionId: string;\n sortBy: SortStudentsBy;\n}\n\nexport function InteractiveInsightsQuestionsView(props: InteractiveInsightsQuestionsViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const { hasPermissions } = usePermissions();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(props.shareId));\n \n const classroomId = ShareHelper.getClassroomIdFromShare(share.data);\n const classroom = Flight.useBasicFetch<Classroom>(classroomId && ClassroomRequests.getClassroom(classroomId));\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n share.data?.objectId &&\n InteractiveRequests.interactiveMetadata(share.data?.objectId)\n );\n\n const interactive = Flight.useBasicFetch<Interactive>(interactiveMetadata.data?.interactiveId &&\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId));\n\n const results = useInsightsInteractiveResults(props.shareId);\n\n useSetPageMetadata({ title: interactiveMetadata.data ? getPhrase('pageTitle', { video: interactiveMetadata.data?.name }) : null });\n useHandleObjectError([ share, interactive, interactiveMetadata ]);\n\n const hasDataLoaded = interactive.data && interactiveMetadata.data && !!results.data && !!yearGroups.data;\n \n const studentGroups = hasDataLoaded && groupStudents(interactive.data, results.data, ScoreThresholdInsights);\n const markingRequired = studentGroups && studentGroups.markingRequired.length > 0;\n\n return (\n <div className='px-3'>\n <InsightsHeader\n tabs={getInsightsInteractiveTabs(share.data, 'questions')}\n video={interactiveMetadata.data}\n hasAnalytics={hasPermissions(PermissionName.ViewCustomerAnalytics)}\n analyticsWebUrl={config.data?.analyticsWebUrl}\n share={share.data}\n yearGroups={yearGroups.data}\n classroom={classroom.data}\n markingRequired={markingRequired}\n hasData={!!results.data?.students.length}\n />\n\n <InteractiveInsightsQuestions\n interactive={interactive.data}\n interactiveMetadata={interactiveMetadata.data}\n interactionId={props.interactionId}\n config={config.data}\n sortBy={props.sortBy}\n isFetching={!results.hasCompleted || interactive.isFetching}\n anonymiseUsers={anonymiseUsers}\n results={results.data}\n hasDataLoaded={hasDataLoaded}\n />\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { groupStudents } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { FilterStudentsBy, SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { ScoreThresholdInsights } from 'libs/shared/constants/ScoreThresholds';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Classroom, Config, CurrentUser, Interactive, InteractiveMetadata, YearGroup } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InteractiveInsightsStudents } from 'apps/my-shares/components/interactive-insights-students/InteractiveInsightsStudents';\nimport { useInsightsInteractiveResults } from 'apps/my-shares/hooks/useInsightsInteractiveResults';\nimport { getInsightsInteractiveTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\n\nconst namespace = 'insights.interactiveInsightsStudents';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractiveInsightsStudentsViewProps {\n shareId: string;\n sortBy: SortStudentsBy;\n filterBy: FilterStudentsBy;\n}\n\nexport function InteractiveInsightsStudentsView(props: InteractiveInsightsStudentsViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n const [hideStaffResults] = useViewModel<boolean>(SharedViewModelKeys.HIDE_STAFF_RESULTS);\n\n\n const { hasPermissions } = usePermissions();\n \n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(props.shareId));\n \n const classroomId = ShareHelper.getClassroomIdFromShare(share.data);\n const classroom = Flight.useBasicFetch<Classroom>(classroomId && ClassroomRequests.getClassroom(classroomId));\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n share.data?.objectId &&\n InteractiveRequests.interactiveMetadata(share.data.objectId)\n );\n\n const interactive = Flight.useBasicFetch<Interactive>(interactiveMetadata.data?.interactiveId &&\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId));\n\n const results = useInsightsInteractiveResults(props.shareId);\n\n const hasDataLoaded = interactive.data && interactiveMetadata.data && !!results.data && !!yearGroups.data;\n\n const studentGroups = hasDataLoaded && groupStudents(interactive.data, results.data, ScoreThresholdInsights);\n const markingRequired = studentGroups && studentGroups.markingRequired.length > 0;\n\n useSetPageMetadata({ title: interactiveMetadata.data ? getPhrase('pageTitle', { video: interactiveMetadata.data?.name }) : null });\n useHandleObjectError([ share, interactive, interactiveMetadata ]);\n\n function viewStudentResults(\n user: AnonUser,\n interactiveMetadataId: string,\n interactionId?: string\n ) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_STUDENT_RESULTS,\n params: {\n studentId: user.id,\n shareId: props.shareId,\n interactionId,\n sessionId: user.sessionId\n }\n });\n }\n\n return (\n <div className='px-3'>\n <InsightsHeader\n tabs={getInsightsInteractiveTabs(share.data, 'results')}\n video={interactiveMetadata.data}\n hasAnalytics={hasPermissions(PermissionName.ViewCustomerAnalytics)}\n analyticsWebUrl={config.data?.analyticsWebUrl}\n share={share.data}\n yearGroups={yearGroups.data}\n classroom={classroom.data}\n markingRequired={markingRequired}\n hasData={!!results.data?.students.length}\n />\n\n <InteractiveInsightsStudents\n interactiveMetadata={interactiveMetadata.data}\n viewStudentResults={viewStudentResults}\n interactive={interactive.data}\n results={results.data}\n filterBy={props.filterBy}\n sortBy={props.sortBy}\n // Must be isFetching, not hasCompleted, as we need to refresh the table when the results are updated\n isFetching={results.isFetching}\n anonymiseUsers={anonymiseUsers}\n hasDataLoaded={hasDataLoaded}\n config={config.data}\n hideStaffResults={hideStaffResults}\n />\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { InsightStudentList } from 'libs/shared/apps/analytics/components/insight-student-list/InsightStudentList';\nimport { User } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.insightStudentsNotWatched';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightStudentsNotWatchedProps {\n students: User[];\n imageCdnUrl: string;\n imageUrl: string;\n heatmapAppLink: Core.AppLink;\n watchedIds: string[];\n anonymiseUsers: boolean;\n}\n\nexport function InsightStudentsNotWatched(props: InsightStudentsNotWatchedProps) {\n const studentsNotWatched = props.students?.filter(student => !props.watchedIds?.includes(student.id)) || [];\n\n return (\n <InsightCard\n title={getPhrase('title')}\n svgName={cvSvgLibrary.Puzzle}\n svgClassName='bg-light-teal text-teal'\n >\n <InsightStudentList\n students={studentsNotWatched}\n imageCdnUrl={props.imageCdnUrl}\n imageUrl={props.imageUrl}\n description={getPhrase('studentsDisplay')}\n anonymiseUsers={props.anonymiseUsers}\n />\n </InsightCard>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { InsightStudentList } from 'libs/shared/apps/analytics/components/insight-student-list/InsightStudentList';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.insightStudentsWatched';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightWatchedProps {\n students: AnonUser[];\n imageCdnUrl: string;\n heatmapAppLink: Core.AppLink;\n imageUrl: string;\n anonymiseUsers: boolean;\n}\n\nexport function InsightStudentsWatched(props: InsightWatchedProps) {\n return (\n <InsightCard\n title={getPhrase('title')}\n svgName={cvSvgLibrary.Flag}\n svgClassName='bg-light-indigo text-indigo'\n count={props.students.length}\n >\n <InsightStudentList\n students={props.students}\n imageCdnUrl={props.imageCdnUrl}\n imageUrl={props.imageUrl}\n description={getPhrase('studentsDisplay')}\n appLink={props.heatmapAppLink}\n appLinkText={getPhrase('viewAll')}\n anonymiseUsers={props.anonymiseUsers}\n />\n </InsightCard>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialInsights\":\"oHwkx\"};","import React from 'react';\n\nimport styles from './partial-video-insights-overview.scss';\n\nexport function PartialVideoInsightsOverview() {\n return (\n <div>\n <h2 className='h4 w-25 partial-loading-background'> </h2>\n <div className='row g-3 mb-5'>\n <div className='col-12'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n </div>\n\n <h2 className='h4 w-25 partial-loading-background'> </h2>\n <div className='row g-3 mb-5'>\n <div className='col-6'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n <div className='col-6'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { InsightDevices } from 'libs/shared/apps/analytics/components/insights/devices/InsightDevices';\nimport { InsightHeatmap } from 'libs/shared/apps/analytics/components/insights/heatmap/InsightHeatmap';\nimport { InsightStudentsNotWatched } from 'libs/shared/apps/analytics/components/insights/students-not-watched/InsightStudentsNotWatched';\nimport { InsightStudentsWatched } from 'libs/shared/apps/analytics/components/insights/students-watched/InsightStudentsWatched';\nimport { GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { getEngagementRate } from 'libs/shared/apps/analytics/utils/EngagementUtils';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Config, Engagement, User, Video } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { InsightsShareMask } from 'apps/my-shares/components/insights-mask/InsightsShareMask';\nimport { PartialVideoInsightsOverview } from 'apps/my-shares/components/video-insights-overview/partial-loading/PartialVideoInsightsOverview';\n\nconst namespace = 'insights.videoInsightsOverview';\n\ninterface VideoInsightsOverviewProps {\n hasDataLoaded: boolean;\n hasClassrooms: boolean;\n anonymiseUsers: boolean;\n videoInsightsAppLinks: HashObject;\n config: Config;\n video: Video;\n classroomStudents: User[];\n viewers: AnonUser[];\n individualEngagement: Engagement[];\n aggregateEngagement: Engagement;\n share: Share;\n osCount: GroupedAnalyticsCount[];\n}\n\nexport function VideoInsightsOverview(props: VideoInsightsOverviewProps) {\n const hasData = props.hasDataLoaded && !!props.viewers?.length;\n\n function getStudentsList() {\n if (!props.viewers) return [];\n\n return Object.values(props.viewers);\n }\n\n return (\n <>\n {!props.hasDataLoaded && <PartialVideoInsightsOverview />}\n\n {props.hasDataLoaded &&\n <InsightsShareMask video={props.video} hasData={hasData} share={props.share}>\n <section className='mb-5'>\n <h2 className='h4'>\n <Text namespace={namespace} phrase='studentViewing' />\n <span>: {getStudentsList().length}{props.classroomStudents ? `/${props.classroomStudents.length}` : ''}</span>\n </h2>\n <div className='row g-3'>\n {!!props.classroomStudents?.length && (\n <div className='col-12 col-md'>\n <InsightStudentsNotWatched\n students={props.classroomStudents}\n watchedIds={props.viewers?.map(u => u.id)}\n imageCdnUrl={props.config.imageCdnUrl}\n heatmapAppLink={props.videoInsightsAppLinks.heatmapAppLink}\n imageUrl={ImageUrls.Insights.AVATAR}\n anonymiseUsers={props.anonymiseUsers}\n />\n </div>\n )}\n <div className='col-12 col-md'>\n <InsightStudentsWatched\n students={getStudentsList()}\n imageCdnUrl={props.config.imageCdnUrl}\n heatmapAppLink={props.videoInsightsAppLinks.heatmapAppLink}\n imageUrl={ImageUrls.Insights.AVATAR}\n anonymiseUsers={props.anonymiseUsers}\n />\n </div>\n </div>\n </section>\n <section className='mb-5'>\n <h2 className='h4'>\n <Text\n namespace={namespace}\n phrase={props.hasClassrooms ? 'classEngagement' : 'engagement'}\n />\n </h2>\n <div className='row g-3'>\n <div className='col-12 col-md-6'>\n <InsightDevices\n osCount={props.osCount}\n />\n </div>\n <div className='col-12 col-md-6'>\n <InsightHeatmap\n engagement={props.aggregateEngagement}\n heatmapAppLink={props.videoInsightsAppLinks.heatmapAppLink}\n engagementRate={getEngagementRate(props.individualEngagement)}\n />\n </div>\n </div>\n </section>\n </InsightsShareMask>\n }\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Classroom, Config, CurrentUser, Engagement, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { VideoInsightsOverview } from 'apps/my-shares/components/video-insights-overview/VideoInsightsOvervew';\nimport { VideoViewsV2Requests } from 'apps/my-shares/flight-requests/VideoViewsV2Requests';\nimport { useInsightEngagement } from 'apps/my-shares/hooks/useInsightEngagement';\nimport { useInsightsClassroomStudents } from 'apps/my-shares/hooks/useInsightsClassroomStudents';\nimport { getInsightsVideoTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\nimport { getVideoInsightsAppLinks } from 'apps/my-shares/views/video/overview/VideoInsightsOverviewUtils';\n\nconst namespace = 'insights.videoInsightsOverviewView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface VideoInsightsViewProps {\n shareId: string;\n}\n\nexport function VideoInsightsOverviewView(props: VideoInsightsViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const { hasClassrooms } = useSettings(null);\n\n const { hasPermissions } = usePermissions();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(props.shareId));\n\n const classroomId = ShareHelper.getClassroomIdFromShare(share.data);\n const classroom = Flight.useBasicFetch<Classroom>(classroomId && ClassroomRequests.getClassroom(classroomId));\n\n const classroomStudents = useInsightsClassroomStudents(props.shareId);\n\n const videoRequest = share.data && VideoHelper.getVideoRequest(share.data.objectId, share.data.objectTypeId);\n const video = Flight.useBasicFetch<VideoTypes>(videoRequest);\n\n useSetPageMetadata({ title: video.data ? getPhrase('pageTitle', { video: video.data?.name }) : null });\n useHandleObjectError([ share, video ]);\n\n const engagement = Flight.useBasicFetch<Engagement[]>(\n VideoViewsV2Requests.shareHeatMap(props.shareId)\n );\n\n const aggregateEngagement = Flight.useBasicFetch<Engagement>(\n VideoViewsV2Requests.shareHeatMapAggregation(props.shareId)\n );\n\n const osCount = Flight.useBasicFetch<GroupedAnalyticsCount[]>(\n VideoViewsV2Requests.shareAggregation(props.shareId, 'os_name')\n );\n\n const { users, hasCompleted } = useInsightEngagement(props.shareId);\n \n const hasDataLoaded =\n config.hasCompleted &&\n video.hasCompleted &&\n engagement.hasCompleted &&\n aggregateEngagement.hasCompleted &&\n osCount.hasCompleted &&\n yearGroups.data &&\n hasCompleted;\n\n const videoInsightsAppLinks = getVideoInsightsAppLinks(share.data);\n\n return (\n <div className='px-3'>\n <InsightsHeader\n video={video.data}\n classroom={classroom.data}\n tabs={getInsightsVideoTabs(share.data, 'insights')}\n hasAnalytics={hasPermissions(PermissionName.ViewCustomerAnalytics)}\n analyticsWebUrl={config.data?.analyticsWebUrl}\n share={share.data}\n yearGroups={yearGroups.data}\n hasData={hasDataLoaded && !!users?.length}\n />\n\n <VideoInsightsOverview\n hasDataLoaded={!!hasDataLoaded}\n hasClassrooms={hasClassrooms}\n anonymiseUsers={anonymiseUsers}\n videoInsightsAppLinks={videoInsightsAppLinks}\n config={config.data}\n video={video.data}\n classroomStudents={classroomStudents.items}\n viewers={users}\n individualEngagement={engagement.data}\n aggregateEngagement={aggregateEngagement.data}\n share={share.data}\n osCount={osCount.data}\n />\n </div>\n );\n}","import { HashObject } from 'libs/common/react/interfaces';\n\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\n\nimport { getInsightsHeatmapAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nexport function getVideoInsightsAppLinks(share: Share, params?: HashObject) {\n return {\n heatmapAppLink: getInsightsHeatmapAppLink(share, params)\n };\n}","import React from 'react';\n\nimport { FilterStudentsBy, SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { MasterType } from 'libs/shared/enums/MasterType';\n\nimport { InsightsTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\nimport { InsightsHeatmapView } from 'apps/my-shares/views/heatmap/InsightsHeatmapView';\nimport { InteractiveInsightsOverviewView } from 'apps/my-shares/views/interactive/overview/InteractiveInsightsOverviewView';\nimport { InteractiveInsightsQuestionsView } from 'apps/my-shares/views/interactive/questions/InteractiveInsightsQuestionsView';\nimport { InteractiveInsightsStudentsView } from 'apps/my-shares/views/interactive/students/InteractiveInsightsStudentsView';\nimport { VideoInsightsOverviewView } from 'apps/my-shares/views/video/overview/VideoInsightsOverviewView';\n\ninterface UseInsightsViewOptions {\n share: Share | undefined;\n tab: InsightsTabs;\n interactionId: string;\n sortBy: SortStudentsBy;\n filterBy: FilterStudentsBy;\n}\n\ntype ShareContext = Omit<UseInsightsViewOptions, 'tab'>;\ntype ViewFn = (ctx: ShareContext) => JSX.Element;\ntype ViewRegistry = Partial<Record<MasterType, Partial<Record<InsightsTabs, ViewFn>>>>;\n\nconst INSIGHTS_VIEWS: ViewRegistry = {\n [MasterType.Video]: {\n insights: ctx => <VideoInsightsOverviewView shareId={ctx.share.shareId} />,\n heatmap: ctx => <InsightsHeatmapView shareId={ctx.share.shareId} />\n },\n [MasterType.Clip]: {\n insights: ctx => <VideoInsightsOverviewView shareId={ctx.share.shareId} />,\n heatmap: ctx => <InsightsHeatmapView shareId={ctx.share.shareId} />\n },\n [MasterType.Interactive]: {\n insights: ctx => <InteractiveInsightsOverviewView shareId={ctx.share.shareId} />,\n heatmap: ctx => <InsightsHeatmapView shareId={ctx.share.shareId} />,\n questions: ctx => (\n <InteractiveInsightsQuestionsView\n interactionId={ctx.interactionId}\n sortBy={ctx.sortBy}\n shareId={ctx.share.shareId}\n />\n ),\n results: ctx => (\n <InteractiveInsightsStudentsView\n filterBy={ctx.filterBy}\n sortBy={ctx.sortBy}\n shareId={ctx.share.shareId}\n />\n )\n }\n};\n\n/**\n * Takes any Share object and a tab, and returns the corresponding \"insights\" view.\n * This is just a utility hook, and as such doesn't need to set the page title directly.\n */\n// eslint-disable-next-line rulesdir/require-view-title\nexport function useInsightsView(options: UseInsightsViewOptions): JSX.Element {\n const { share, tab } = options;\n const viewFn = INSIGHTS_VIEWS[share?.objectTypeId]?.[tab];\n\n if (viewFn)\n return viewFn(options);\n\n return <></>;\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\n\nimport { FilterStudentsBy, SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\n\nimport { getShareOptionsAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport { InsightsTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\nimport { useInsightsView } from 'apps/my-shares/views/base-insights-view/useInsightsView';\n\ninterface BaseInsightsViewProps {\n shareId: string;\n tab: InsightsTabs;\n interactionId: string;\n sortBy: SortStudentsBy;\n filterBy: FilterStudentsBy;\n showShareOptions?: boolean;\n}\n\n/**\n * BaseInsightsView is a generic component that renders different \"insights\" views based on the provided share.\n * The child views will handle setting the page title and other specific details.\n * \n * It also handles the logic for showing share options if `showShareOptions` is true - which is currently used\n * in our used in our LCE emails.\n */\n// eslint-disable-next-line rulesdir/require-view-title\nexport function BaseInsightsView(props: BaseInsightsViewProps): JSX.Element {\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(props.shareId));\n\n const view = useInsightsView({\n share: share.data,\n tab: props.tab,\n interactionId: props.interactionId,\n sortBy: props.sortBy,\n filterBy: props.filterBy\n });\n\n React.useEffect(() => {\n if (!props.showShareOptions) return;\n if (!share.data) return;\n\n const appLink = getShareOptionsAppLink(share.data);\n \n if (!appLink) return;\n\n Core.AppLinkHelper.trigger(appLink);\n }, [ share.data, props.showShareOptions ]);\n\n return (\n <>\n {view}\n </>\n );\n}"],"names":["useFetchInteractiveResults","interactiveMetadataId","requestFilter","shareId","currentUser","interactiveMetadata","interactive","data","interactiveId","shouldFetchResults","I","id","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","internalServerError","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","CHUNK_SIZE","useBatchFetch","itemIds","getRequest","requests","map","chunk","responses","itemsArr","items","length","reduce","acc","item","isFetching","hasCompleted","useGrowingBatchFetch","objs","_getKey","getKey","obj","useGrowingBatchFetchFunc","fetchItems","join","options","fetchedItems","Set","setRequests","hasFirstRequestCompleted","unfetchedItems","forEach","key","current","has","push","add","r","generateCacheKey","flightObjs","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","getPhrase","LanguageService","StudentResultsEmptyState","props","filter","EmptyState","className","src","notCompletedImageUrl","size","markingRequiredImageUrl","helpingHandImageUrl","emptyStateImageUrl","StudentResultsTableFilterButtons","toggleFilter","selectedFilter","updatedFilter","setFilter","getClassName","isFilterSelected","Text","namespace","phrase","onClick","fixedTableTheme","table","header","headerRow","headerCell","row","resultsTableTheme","cell","StudentResultsTable","sortBy","setSortBy","filterBy","ref","fixedColumns","results","anonymiseUsers","config","imageCdnUrl","showSeparateNameColumns","resultColumns","index","refreshTable","ArrayHelper","onRowHover","students","Table","columns","theme","onSelectRow","original","viewStudentResults","user","onRowMouseOver","onRowMouseLeave","enableSort","manualSort","onSort","initialSortBy","enableSlider","scrollIncrement","onSelectCell","column","scrollContainerClassName","PartialInteractiveInsightsStudents","InteractiveInsightsStudents","hasDataLoaded","hideStaffResults","ImageUrls","useAnonSessions","anonSessions","prev","next","sessionId","anonSession","name","sessionName","useInsightsClassroomStudents","fetch","share","classroomId","type","recipients","find","recipientTypeId","recipientId","cursor","result","EMPTY_INTERACTIVE_RESULTS","attempts","answeredAt","answers","useInsightsInteractiveResults","objectId","classroomStudents","studentHash","s","userType","isPlaceholder","VideoViewsV2Requests","url","normalize","useInsightEngagement","SharedViewModelKeys","engagement","userIds","u","userId","users","UserRequests","userMap","filteredEngagement","e","viewers","deleted","getAnonUser","percentage","engagementRate","InsightsHeatmapView","useLockContentWidth","hasPermissions","usePermissions","ShareRequests","ShareHelper","classroom","ClassroomRequests","videoRequest","VideoHelper","objectTypeId","video","ConfigRequests","yearGroups","CustomerRequests","customerId","pendingReviewsRequest","InteractiveResultsRequests","interactives","metadataId","filters","currentCustomerId","currentUserId","markingRequired","pendingReviewCount","aggregateEngagement","yearGroupsCount","viewKey","PlayerRequests","MediaIdType","useSetPageMetadata","title","InsightsHeader","tabs","MasterType","getInsightsTabs","hasAnalytics","PermissionName","analyticsWebUrl","hasData","InsightsHeatmap","individualEngagement","tableDataLoaded","InteractiveInsightsOverviewView","InteractiveRequests","osCount","interactiveInsightsAppLinks","params","resultsAppLink","questionsAppLink","heatmapAppLink","getInteractiveInsightsAppLinks","studentGroups","InteractiveInsightsOverview","InteractiveInsightsQuestionsView","InteractiveInsightsQuestions","interactionId","InteractiveInsightsStudentsView","application","action","studentId","InsightStudentsNotWatched","studentsNotWatched","student","watchedIds","includes","InsightCard","svgName","svgClassName","InsightStudentList","imageUrl","description","InsightStudentsWatched","count","appLink","appLinkText","PartialVideoInsightsOverview","VideoInsightsOverview","getStudentsList","Object","values","InsightsShareMask","videoInsightsAppLinks","hasClassrooms","InsightDevices","InsightHeatmap","VideoInsightsOverviewView","useSettings","getVideoInsightsAppLinks","INSIGHTS_VIEWS","insights","ctx","heatmap","questions","BaseInsightsView","view","tab","viewFn","useInsightsView","showShareOptions"],"sourceRoot":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[904],{34079:(e,t,n)=>{n.d(t,{O:()=>s});var r=n(32735),a=n(23481),o=n(40782),i=n(36532),l=a.T.encloseNamespace("interactives.pendingIndicator");function c(e){var t="d-flex align-items-center h-100";return t+=e.showLabel?" justify-content-between":" justify-content-center",e.className&&(t+=" ".concat(e.className)),t}function s(e){var t=e.title,n=e.showLabel,a=e.tooltipClassName,s=e.showIndicator,u=void 0===s||s,d=function(){return r.createElement("div",{className:c(e)},!!n&&r.createElement("em",null,l("pending")),!!u&&r.createElement(o.O,null))};return t?r.createElement(i.u,{title:t,spanHack:!0,spanHackClassName:a||"h-100 w-100 d-flex align-items-center"},r.createElement(d,null)):r.createElement(d,null)}},97364:(e,t,n)=>{n.d(t,{C:()=>o,P:()=>a});var r=n(94892);function a(e,t){switch(e){case"score_desc":return[{id:t,desc:!0}];case"score_asc":return[{id:t,desc:!1}];default:return[]}}function o(e,t){return"marking_required"===e&&!t.awaitingMarking||"helping_hand"===e&&t.percentCorrect>=r.T.HIGH||"not_completed"===e&&!t.unanswered}},6748:(e,t,n)=>{n.d(t,{i:()=>O});var r=n(32735),a=n(42648),o=n(35509),i=n(91967),l=n(15611),c=n(17808),s=n(1287),u=n(83914),d=n(90281),m={opacity:"0.8",cursor:"grabbing"},v=n(35223);function f(e){return function(e){if(Array.isArray(e))return h(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||g(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function g(e,t){if(e){if("string"==typeof e)return h(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?h(e,t):void 0}}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function p(e){var t,n,r,a;return{canScrollLeft:(null===(t=e.current)||void 0===t?void 0:t.scrollLeft)>0,canScrollRight:(null===(n=e.current)||void 0===n?void 0:n.scrollLeft)+1<(null===(r=e.current)||void 0===r?void 0:r.scrollWidth)-(null===(a=e.current)||void 0===a?void 0:a.clientWidth)}}const y={sortIndicator:"gFhu0",scrollContainer:"sWUp9",scrollbarTrack:"Vn2qM"};function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var S=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n};function w(e){var t,n;return e.column.canSort?r.createElement("span",{className:"".concat(y.sortIndicator,"\n ").concat(e.column.isSorted?"":"text-secondary","\n ").concat(null!==(n=null===(t=e.theme)||void 0===t?void 0:t.sortIndicator)&&void 0!==n?n:"")},r.createElement(u.x,{svgName:e.column.isSortedDesc||!e.column.isSorted?v.vn.ArrowRight:v.vn.ArrowLeft,size:u.S.Small})):r.createElement(r.Fragment,null)}function E(e){var t,n,a,u,d,v,g,h,p={columns:e.columns,data:e.data,disableSortBy:!e.enableSort,manualSortBy:e.manualSort,autoResetHiddenColumns:e.autoResetHiddenColumns,autoResetSortBy:e.autoResetSortBy,initialState:{sortBy:e.initialSortBy||[]}};e.initialSelectedRowIds&&(p.initialState={selectedRowIds:(g=e.initialSelectedRowIds,h={},g.forEach(function(e){return h[e]=!0}),h)}),e.getRowId&&(p.getRowId=e.getRowId);var y,S=o.useTable.apply(void 0,[p].concat((y=function(e){var t=[o.useSortBy,o.useRowSelect,"flex"===e.layout?o.useFlexLayout:o.useBlockLayout];return e.allowFiltering&&(t=[].concat(f(t),[o.useFilters])),e.allowGlobalFiltering&&(t=[].concat(f(t),[o.useGlobalFilter])),t}(Object.assign({},e)),function(e){if(Array.isArray(e))return b(e)}(y)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(y)||function(e,t){if(e){if("string"==typeof e)return b(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?b(e,t):void 0}}(y)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()))),E=S.getTableProps,O=S.getTableBodyProps,I=S.headerGroups,j=S.rows,k=S.prepareRow,R=S.toggleAllRowsSelected,C=S.setGlobalFilter,A=S.setHiddenColumns,N=S.state.sortBy;function L(){return!j.length&&e.emptyState?e.emptyState:j.map(function(t){k(t);var n=function(t){var n,r,a,o,l,c=i.q.isFunction(null===(n=e.theme)||void 0===n?void 0:n.row)?e.theme.row(t):null!==(a=null===(r=e.theme)||void 0===r?void 0:r.row)&&void 0!==a?a:"";return t.isSelected&&(null===(o=e.theme)||void 0===o?void 0:o.selectedRow)&&(c+=" ".concat(null===(l=e.theme)||void 0===l?void 0:l.selectedRow)),e.onSelectRow&&(c+=" cursor-pointer"),e.enableSortableRows&&(c+=" cursor-grab"),c}(t),a=!!e.getRowAppLink&&e.getRowAppLink(t);function o(){e.onSelectRow&&(e.allowSelectMultipleRows||R(!1),e.onSelectRow(t),t.toggleRowSelected(!0))}function c(e,i){var c=function(e,t){return"dragAttributes"in e&&"dragListeners"in e?Object.assign(Object.assign(Object.assign({},e.dragAttributes),e.dragListeners),{"aria-roledescription":"Sortable row",ref:t}):{}}(e,i);return a?r.createElement("div",{role:"row",key:t.id},r.createElement(l.F,Object.assign({},e,c,{className:n,appLink:a}),F(t))):r.createElement("div",Object.assign({},e,c,{key:t.id,role:"row",className:n,onClick:o}),F(t))}var u=t.getRowProps();return e.enableSortableRows?r.createElement(s.W,{id:t.original.id,key:t.id,childProps:u,childComponent:r.forwardRef(function(e,t){return c(e,t)})}):c(u)})}function F(t){return t.cells.map(function(n){var a=function(t,n){var r,a,o="";return"function"==typeof(null===(r=e.theme)||void 0===r?void 0:r.cell)&&(o=e.theme.cell(t,n)),"string"==typeof(null===(a=e.theme)||void 0===a?void 0:a.cell)&&(o=e.theme.cell),e.onSelectCell&&(o+=" cursor-pointer"),o}(t,n);return r.createElement("div",Object.assign({key:n.column.id},n.getCellProps(),{className:a,onClick:function(){e.onSelectCell&&e.onSelectCell(n)}}),n.render("Cell"))})}return r.useEffect(function(){e.onSort&&e.onSort(N)},[N]),r.useEffect(function(){e.globalFilter&&C(e.globalFilter)},[e.globalFilter]),r.useEffect(function(){e.hiddenColumns&&A(e.hiddenColumns)},[e.hiddenColumns&&e.hiddenColumns.length]),r.createElement("div",Object.assign({},E(),{className:null!==(n=null===(t=e.theme)||void 0===t?void 0:t.table)&&void 0!==n?n:""}),r.createElement("div",{className:null!==(u=null===(a=e.theme)||void 0===a?void 0:a.header)&&void 0!==u?u:""},I.map(function(t){var n,a;return r.createElement("div",Object.assign({},t.getHeaderGroupProps(),{className:null!==(a=null===(n=e.theme)||void 0===n?void 0:n.headerRow)&&void 0!==a?a:""}),t.headers.map(function(t){var n,a;return r.createElement("div",Object.assign({},t.getHeaderProps(t.getSortByToggleProps()),{className:null!==(a=null===(n=e.theme)||void 0===n?void 0:n.headerCell)&&void 0!==a?a:""}),t.render("Header",{renderSortIndicator:function(){return r.createElement(w,{column:t,theme:e.theme})}}),!t.hideSortIndicator&&r.createElement(w,{column:t,theme:e.theme}))}))})),r.createElement("div",Object.assign({},O(),{className:null!==(v=null===(d=e.theme)||void 0===d?void 0:d.body)&&void 0!==v?v:""}),e.enableSortableRows?r.createElement(c.Q,{ids:j.map(function(e){return e.original.id}),getDragOverlay:function(t){var n,a,o=j.findIndex(function(e){return e.original.id===t}),i=j[o];return r.createElement("div",Object.assign({},e,{className:(n=e.theme,a="g-0 ",n&&(a+=n.row),a),style:m}),F(i))},onSortEnd:e.onSortingRowsEnd},L()):L()))}function O(e){var t=e.enableSlider,n=e.scrollIncrement,o=e.scrollable,l=S(e,["enableSlider","scrollIncrement","scrollable"]),c=function(){var e,t,n=r.useRef(null),a=(e=r.useState(p(n)),t=2,function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],c=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw a}}return l}}(e,t)||g(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),o=a[0],l=a[1],c=i.q.throttle(function(){l(p(n))},200),s=r.useCallback(function(e){var t;n.current&&(null===(t=n.current)||void 0===t||t.removeEventListener("scroll",c)),e&&(l(p(n)),e.addEventListener("scroll",c)),n.current=e},[]);return r.useEffect(function(){(null==n?void 0:n.current)&&l(p(n))},[n]),{ref:s,scrollState:o,scroll:function(e){var t;null===(t=n.current)||void 0===t||t.scrollBy({left:e,top:0,behavior:"smooth"})}}}(),s=c.ref,u=c.scrollState,m=c.scroll;if(o)return r.createElement(a.$B,{renderTrackHorizontal:function(){return r.createElement("div",{className:y.scrollbarTrack})},autoHeightMax:1e4,autoHeight:!0},r.createElement(E,Object.assign({},l)));if(!t)return r.createElement(E,Object.assign({},l));function v(e){m(n*("right"===e?1:-1))}return r.createElement("div",{className:"mx-n4 overflow-x-hidden overflow-y-hidden"},r.createElement("div",{className:"px-4"},r.createElement("div",{className:"position-relative"},r.createElement(d.W,{direction:d.f.Left,onClick:function(){return v("left")},hide:!u.canScrollLeft}),r.createElement("div",{className:"".concat(y.scrollContainer," ").concat(e.scrollContainerClassName),ref:s},r.createElement(E,Object.assign({},l))),r.createElement(d.W,{direction:d.f.Right,onClick:function(){return v("right")},hide:!u.canScrollRight}))))}O.defaultProps={scrollIncrement:250,scrollable:!1,layout:"flex"}},54405:(e,t,n)=>{n.d(t,{X:()=>r});var r={interactive:function(){return{url:"/mocks/insights/interactive.json",key:"demo:interactive",normalize:!1}},interactiveMetadata:function(){return{url:"/mocks/insights/interactive-metadata.json",key:"demo:interactive:metadata",normalize:!1}},interactiveResults:function(){return{url:"/mocks/insights/interactive-results.json",key:"demo:interactive:results",normalize:!1}},videoViews:function(){return{url:"/mocks/insights/video-views.json",key:"demo:video:views",normalize:!1}},users:function(){return{url:"/mocks/insights/users.json",key:"demo:users",normalize:!1}},individualHeatmap:function(){return{url:"/mocks/insights/individual-heatmap.json",key:"demo:individual:heatmap",normalize:!1}},aggregateHeatmap:function(){return{url:"/mocks/insights/aggregate-heatmap.json",key:"demo:aggregate:heatmap",normalize:!1}}}},9566:(e,t,n)=>{n.d(t,{$Z:()=>g,G6:()=>m,GJ:()=>f,VE:()=>y,_w:()=>v,po:()=>p,vJ:()=>h});var r=n(23481),a=n(110),o=n(33518),i=n(2510),l=n(4594),c=n(35223),s=n(14070),u=n(97291),d=r.T.encloseNamespace("myShares.demoInsights"),m={type:i.y.Link,privacy:o.e.JustMySchool,objectId:"0",objectTypeId:l.E.Interactive,viewCount:28,accessCount:15,dateCreated:(new Date).toISOString(),dateShared:(new Date).toISOString(),expireDate:null,link:{shortenedEmbedUrl:"",shortenedUrl:""},shareId:"0",ownerCustomerId:0,ownerId:0,recipients:[],options:{preventScrubbing:!1,immediateFeedback:!1}},v=Object.assign(Object.assign({},m),{type:i.y.Open,expireDate:a.O.add(new Date(m.dateCreated),30,"days").toISOString(),privacy:o.e.PinCode}),f={share:m,sharedObject:null,shareRecipients:null,dateShared:a.O.subtract(new Date,7,"days").toISOString()},g=Object.assign(Object.assign({},f),{share:v}),h={application:u.O.MY_SHARES,action:s.e.MyShares.INTERACTIVE_OVERVIEW_DEMO},p={application:u.O.MY_SHARES,action:s.e.MyShares.INTERACTIVE_OVERVIEW_OPEN_CLASSROOM_DEMO},y={svgName:c.vn.Analytics,label:d("demoInsights"),appLink:h,group:"insights",className:"btn btn-outline-dark"}},71519:(e,t,n)=>{n.r(t),n.d(t,{InteractiveInsightsQuestionsDemoView:()=>S});var r=n(32735),a=n(23481),o=n(2948),i=n(20354),l=n(26025),c=n(2510),s=n(38143),u=n(39151),d=n(54405),m=n(93322),v=n(79612),f=n(9540),g=n(48705),h=n(9566),p=n(10447);function y(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var b=a.T.encloseNamespace("shared.interactiveInsightsQuestionsView");function S(e){var t,n,a,S,w,E=(S=(0,o.D)(s.g.ANONYMISE_USERS),w=1,function(e){if(Array.isArray(e))return e}(S)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],c=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw a}}return l}}(S,w)||function(e,t){if(e){if("string"==typeof e)return y(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?y(e,t):void 0}}(S,w)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0];(0,m.F)();var O=i.a.useBasicFetch(u.L.config()),I=i.a.useBasicFetch(d.X.interactiveMetadata()),j=i.a.useBasicFetch(d.X.interactive()),k=l.B.getAudienceAppLinkParams(),R=l.B.getDateRangeAppLinkParams(),C=i.a.useBasicFetch(d.X.interactiveResults());(0,v.M)({title:I.data?b("pageTitle",{video:null===(t=I.data)||void 0===t?void 0:t.name}):null});var A=j.data&&I.data&&!!C.data,N=Object.assign(Object.assign({},k),R),L=e.type===c.y.Open?h._w:h.G6;return r.createElement("div",{className:"px-3"},r.createElement(f.j,{tabs:(0,p.aq)(null===(n=I.data)||void 0===n?void 0:n.id,"questions",N,e.type),video:I.data,dateRangeAppLinkParams:R,share:Object.assign(Object.assign({},L),{objectId:null===(a=I.data)||void 0===a?void 0:a.id}),yearGroups:[],markingRequired:e.type!==c.y.Open,isDemo:!0,hasData:!0}),r.createElement(g.x,{interactive:j.data,interactiveMetadata:I.data,interactionId:e.interactionId,config:O.data,sortBy:e.sortBy,isFetching:C.isFetching||j.isFetching,anonymiseUsers:E,results:C.data,hasDataLoaded:A,isDemo:!0}))}}}]);
|
|
2
|
-
//# sourceMappingURL=904-2784e45cfc-lite.chunk.js.map
|