@clickview/lite 0.75.0-rc.2 → 0.75.0-rc.4
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/{119-lite-a1f592f602.chunk.css → 1243-lite-13eda8f6a0.chunk.css} +2 -4
- package/dist/css/{7230-lite-36ff6e6d53.chunk.css → 1867-lite-8baa8af02b.chunk.css} +3 -5
- package/dist/css/{5241-lite-baab687563.chunk.css → 4203-lite-9ffab89741.chunk.css} +3 -5
- package/dist/css/{8364-lite-99938dea56.chunk.css → 5193-lite-d434056013.chunk.css} +1 -0
- package/dist/css/{7339-lite-05c396fed3.chunk.css → 6756-lite-839687d3d7.chunk.css} +1 -0
- package/dist/css/{9527-lite-1d2221b6a8.chunk.css → 7103-lite-fef3024f61.chunk.css} +2 -4
- package/dist/css/{8856-lite-827b34aed7.chunk.css → 8856-lite-c114ab5c89.chunk.css} +1 -1
- package/dist/languages/en.json +1 -1
- package/dist/scripts/104-0c03791b45-lite.chunk.js +2 -0
- package/dist/scripts/104-0c03791b45-lite.chunk.js.map +1 -0
- package/dist/scripts/1074-4f6b136f9a-lite.chunk.js +2 -0
- package/dist/scripts/1074-4f6b136f9a-lite.chunk.js.map +1 -0
- package/dist/scripts/1087-861be5211f-lite.chunk.js +2 -0
- package/dist/scripts/1087-861be5211f-lite.chunk.js.map +1 -0
- package/dist/scripts/1192-d409863a3c-lite.chunk.js +2 -0
- package/dist/scripts/1192-d409863a3c-lite.chunk.js.map +1 -0
- package/dist/scripts/1199-d2fcbb547e-lite.chunk.js +2 -0
- package/dist/scripts/1199-d2fcbb547e-lite.chunk.js.map +1 -0
- package/dist/scripts/121-1b744469ee-lite.chunk.js +2 -0
- package/dist/scripts/121-1b744469ee-lite.chunk.js.map +1 -0
- package/dist/scripts/{1221-502395e693-lite.chunk.js → 1221-1109d5379d-lite.chunk.js} +3 -3
- package/dist/scripts/1221-1109d5379d-lite.chunk.js.map +1 -0
- package/dist/scripts/1243-ede924125c-lite.chunk.js +2 -0
- package/dist/scripts/1243-ede924125c-lite.chunk.js.map +1 -0
- package/dist/scripts/147-44ee7e9a78-lite.chunk.js +2 -0
- package/dist/scripts/147-44ee7e9a78-lite.chunk.js.map +1 -0
- package/dist/scripts/1491-ab92a040e5-lite.chunk.js +2 -0
- package/dist/scripts/1491-ab92a040e5-lite.chunk.js.map +1 -0
- package/dist/scripts/{1610-7f58bb25a9-lite.chunk.js → 1610-bb6eff2ff1-lite.chunk.js} +2 -2
- package/dist/scripts/1610-bb6eff2ff1-lite.chunk.js.map +1 -0
- package/dist/scripts/{7230-71f8d6d1bd-lite.chunk.js → 1867-3b447a1b85-lite.chunk.js} +2 -2
- package/dist/scripts/{7230-71f8d6d1bd-lite.chunk.js.map → 1867-3b447a1b85-lite.chunk.js.map} +1 -1
- package/dist/scripts/{218-297de74688-lite.chunk.js → 218-f6cc4a3b6a-lite.chunk.js} +2 -2
- package/dist/scripts/218-f6cc4a3b6a-lite.chunk.js.map +1 -0
- package/dist/scripts/2258-ed7383502f-lite.chunk.js +3 -0
- package/dist/scripts/2258-ed7383502f-lite.chunk.js.map +1 -0
- package/dist/scripts/{2968-c4c0114915-lite.chunk.js → 2968-13e56eeff8-lite.chunk.js} +1 -1
- package/dist/scripts/2968-13e56eeff8-lite.chunk.js.map +1 -0
- package/dist/scripts/3268-2736356687-lite.chunk.js +2 -0
- package/dist/scripts/{3268-faca1bf46e-lite.chunk.js.map → 3268-2736356687-lite.chunk.js.map} +1 -1
- package/dist/scripts/3597-eaae787997-lite.chunk.js +3 -0
- package/dist/scripts/3597-eaae787997-lite.chunk.js.map +1 -0
- package/dist/scripts/3836-425334ab13-lite.chunk.js +2 -0
- package/dist/scripts/{3836-f2a0c9f713-lite.chunk.js.map → 3836-425334ab13-lite.chunk.js.map} +1 -1
- package/dist/scripts/3837-e4c5bb738b-lite.chunk.js +2 -0
- package/dist/scripts/3837-e4c5bb738b-lite.chunk.js.map +1 -0
- package/dist/scripts/4185-7178e5a716-lite.chunk.js +2 -0
- package/dist/scripts/4185-7178e5a716-lite.chunk.js.map +1 -0
- package/dist/scripts/4203-ee50e89841-lite.chunk.js +3 -0
- package/dist/scripts/4203-ee50e89841-lite.chunk.js.map +1 -0
- package/dist/scripts/4598-bcd3f6f8a7-lite.chunk.js +2 -0
- package/dist/scripts/{4598-2b1daca7ae-lite.chunk.js.map → 4598-bcd3f6f8a7-lite.chunk.js.map} +1 -1
- package/dist/scripts/{4722-d96da2a258-lite.chunk.js → 4722-9eb591621a-lite.chunk.js} +3 -3
- package/dist/scripts/4722-9eb591621a-lite.chunk.js.map +1 -0
- package/dist/scripts/4948-f21dad2ca1-lite.chunk.js +2 -0
- package/dist/scripts/4948-f21dad2ca1-lite.chunk.js.map +1 -0
- package/dist/scripts/{5153-079b4125ae-lite.chunk.js → 5153-cf62a95421-lite.chunk.js} +3 -3
- package/dist/scripts/5153-cf62a95421-lite.chunk.js.map +1 -0
- package/dist/scripts/6137-bc8b193237-lite.chunk.js +2 -0
- package/dist/scripts/6137-bc8b193237-lite.chunk.js.map +1 -0
- package/dist/scripts/6756-cfd00009e4-lite.chunk.js +3 -0
- package/dist/scripts/6756-cfd00009e4-lite.chunk.js.map +1 -0
- package/dist/scripts/6790-36ce6dda04-lite.chunk.js +2 -0
- package/dist/scripts/6790-36ce6dda04-lite.chunk.js.map +1 -0
- package/dist/scripts/705-10a85bae7a-lite.chunk.js +2 -0
- package/dist/scripts/705-10a85bae7a-lite.chunk.js.map +1 -0
- package/dist/scripts/7103-14bd3771d2-lite.chunk.js +2 -0
- package/dist/scripts/7103-14bd3771d2-lite.chunk.js.map +1 -0
- package/dist/scripts/7148-d966512e45-lite.chunk.js +2 -0
- package/dist/scripts/7148-d966512e45-lite.chunk.js.map +1 -0
- package/dist/scripts/7205-12a6b2ac55-lite.chunk.js +2 -0
- package/dist/scripts/7205-12a6b2ac55-lite.chunk.js.map +1 -0
- package/dist/scripts/7438-38f60d3e8e-lite.chunk.js +2 -0
- package/dist/scripts/7438-38f60d3e8e-lite.chunk.js.map +1 -0
- package/dist/scripts/7480-e0749592fc-lite.chunk.js +2 -0
- package/dist/scripts/7480-e0749592fc-lite.chunk.js.map +1 -0
- package/dist/scripts/8010-e9163f5bee-lite.chunk.js +2 -0
- package/dist/scripts/8010-e9163f5bee-lite.chunk.js.map +1 -0
- package/dist/scripts/8410-1f1fd5ccf0-lite.chunk.js +3 -0
- package/dist/scripts/8410-1f1fd5ccf0-lite.chunk.js.map +1 -0
- package/dist/scripts/8705-ecd20ef6cb-lite.chunk.js +2 -0
- package/dist/scripts/8705-ecd20ef6cb-lite.chunk.js.map +1 -0
- package/dist/scripts/8856-4da691f96f-lite.chunk.js +2 -0
- package/dist/scripts/8856-4da691f96f-lite.chunk.js.map +1 -0
- package/dist/scripts/9003-fc8e674468-lite.chunk.js +2 -0
- package/dist/scripts/9003-fc8e674468-lite.chunk.js.map +1 -0
- package/dist/scripts/9042-add0f1c2e2-lite.chunk.js +2 -0
- package/dist/scripts/9042-add0f1c2e2-lite.chunk.js.map +1 -0
- package/dist/scripts/9103-4eec16d73b-lite.chunk.js +2 -0
- package/dist/scripts/9103-4eec16d73b-lite.chunk.js.map +1 -0
- package/dist/scripts/9134-a6a5fc92cf-lite.chunk.js +2 -0
- package/dist/scripts/9134-a6a5fc92cf-lite.chunk.js.map +1 -0
- package/dist/scripts/9266-f0ad8d5cb3-lite.chunk.js +2 -0
- package/dist/scripts/9266-f0ad8d5cb3-lite.chunk.js.map +1 -0
- package/dist/scripts/9620-3746c84350-lite.chunk.js +3 -0
- package/dist/scripts/9620-3746c84350-lite.chunk.js.map +1 -0
- package/dist/scripts/9740-9d50d31b72-lite.chunk.js +2 -0
- package/dist/scripts/9740-9d50d31b72-lite.chunk.js.map +1 -0
- package/dist/scripts/{bundle-95a6fc2722.min.js → bundle-fc60888464.min.js} +3 -3
- package/dist/scripts/{bundle-95a6fc2722.min.js.map → bundle-fc60888464.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/104-b62a8447f0-lite.chunk.js +0 -2
- package/dist/scripts/104-b62a8447f0-lite.chunk.js.map +0 -1
- package/dist/scripts/107-989ac2dc47-lite.chunk.js +0 -2
- package/dist/scripts/107-989ac2dc47-lite.chunk.js.map +0 -1
- package/dist/scripts/119-e3a8bd94dd-lite.chunk.js +0 -2
- package/dist/scripts/119-e3a8bd94dd-lite.chunk.js.map +0 -1
- package/dist/scripts/1199-a2ac2338d0-lite.chunk.js +0 -2
- package/dist/scripts/1199-a2ac2338d0-lite.chunk.js.map +0 -1
- package/dist/scripts/121-bf7a153eb8-lite.chunk.js +0 -2
- package/dist/scripts/121-bf7a153eb8-lite.chunk.js.map +0 -1
- package/dist/scripts/1221-502395e693-lite.chunk.js.map +0 -1
- package/dist/scripts/1400-43b37bfa8d-lite.chunk.js +0 -2
- package/dist/scripts/1400-43b37bfa8d-lite.chunk.js.map +0 -1
- package/dist/scripts/1610-7f58bb25a9-lite.chunk.js.map +0 -1
- package/dist/scripts/218-297de74688-lite.chunk.js.map +0 -1
- package/dist/scripts/2258-4d0639c9fe-lite.chunk.js +0 -3
- package/dist/scripts/2258-4d0639c9fe-lite.chunk.js.map +0 -1
- package/dist/scripts/2968-c4c0114915-lite.chunk.js.map +0 -1
- package/dist/scripts/3268-faca1bf46e-lite.chunk.js +0 -2
- package/dist/scripts/3836-f2a0c9f713-lite.chunk.js +0 -2
- package/dist/scripts/3837-fe321e8deb-lite.chunk.js +0 -2
- package/dist/scripts/3837-fe321e8deb-lite.chunk.js.map +0 -1
- package/dist/scripts/4025-306e0fbdd5-lite.chunk.js +0 -2
- package/dist/scripts/4025-306e0fbdd5-lite.chunk.js.map +0 -1
- package/dist/scripts/4164-5d3af57b67-lite.chunk.js +0 -2
- package/dist/scripts/4164-5d3af57b67-lite.chunk.js.map +0 -1
- package/dist/scripts/4185-e8e40dab72-lite.chunk.js +0 -2
- package/dist/scripts/4185-e8e40dab72-lite.chunk.js.map +0 -1
- package/dist/scripts/4562-545f04c53f-lite.chunk.js +0 -2
- package/dist/scripts/4562-545f04c53f-lite.chunk.js.map +0 -1
- package/dist/scripts/4598-2b1daca7ae-lite.chunk.js +0 -2
- package/dist/scripts/4722-d96da2a258-lite.chunk.js.map +0 -1
- package/dist/scripts/4948-66ba60c8e3-lite.chunk.js +0 -2
- package/dist/scripts/4948-66ba60c8e3-lite.chunk.js.map +0 -1
- package/dist/scripts/5153-079b4125ae-lite.chunk.js.map +0 -1
- package/dist/scripts/5241-163f5ac64c-lite.chunk.js +0 -3
- package/dist/scripts/5241-163f5ac64c-lite.chunk.js.map +0 -1
- package/dist/scripts/5349-bc0fcb4083-lite.chunk.js +0 -2
- package/dist/scripts/5349-bc0fcb4083-lite.chunk.js.map +0 -1
- package/dist/scripts/6135-a878a9cff0-lite.chunk.js +0 -3
- package/dist/scripts/6135-a878a9cff0-lite.chunk.js.map +0 -1
- package/dist/scripts/6509-23fdb20a4b-lite.chunk.js +0 -2
- package/dist/scripts/6509-23fdb20a4b-lite.chunk.js.map +0 -1
- package/dist/scripts/6790-5086b72662-lite.chunk.js +0 -2
- package/dist/scripts/6790-5086b72662-lite.chunk.js.map +0 -1
- package/dist/scripts/7148-432ab72091-lite.chunk.js +0 -2
- package/dist/scripts/7148-432ab72091-lite.chunk.js.map +0 -1
- package/dist/scripts/7205-2428f775a5-lite.chunk.js +0 -2
- package/dist/scripts/7205-2428f775a5-lite.chunk.js.map +0 -1
- package/dist/scripts/7339-5793c921bb-lite.chunk.js +0 -3
- package/dist/scripts/7339-5793c921bb-lite.chunk.js.map +0 -1
- package/dist/scripts/7438-a5f96e58fc-lite.chunk.js +0 -2
- package/dist/scripts/7438-a5f96e58fc-lite.chunk.js.map +0 -1
- package/dist/scripts/7926-6b040931aa-lite.chunk.js +0 -2
- package/dist/scripts/7926-6b040931aa-lite.chunk.js.map +0 -1
- package/dist/scripts/8536-f75009dd87-lite.chunk.js +0 -2
- package/dist/scripts/8536-f75009dd87-lite.chunk.js.map +0 -1
- package/dist/scripts/8687-549a2d9278-lite.chunk.js +0 -3
- package/dist/scripts/8687-549a2d9278-lite.chunk.js.map +0 -1
- package/dist/scripts/8856-df102acdff-lite.chunk.js +0 -2
- package/dist/scripts/8856-df102acdff-lite.chunk.js.map +0 -1
- package/dist/scripts/9134-42dc2390ce-lite.chunk.js +0 -2
- package/dist/scripts/9134-42dc2390ce-lite.chunk.js.map +0 -1
- package/dist/scripts/9266-c5d6705147-lite.chunk.js +0 -2
- package/dist/scripts/9266-c5d6705147-lite.chunk.js.map +0 -1
- package/dist/scripts/9284-402a14d41c-lite.chunk.js +0 -2
- package/dist/scripts/9284-402a14d41c-lite.chunk.js.map +0 -1
- package/dist/scripts/9470-11c8c2ca71-lite.chunk.js +0 -2
- package/dist/scripts/9470-11c8c2ca71-lite.chunk.js.map +0 -1
- package/dist/scripts/9527-111c8586a7-lite.chunk.js +0 -2
- package/dist/scripts/9527-111c8586a7-lite.chunk.js.map +0 -1
- package/dist/scripts/9528-2b478f4ca8-lite.chunk.js +0 -3
- package/dist/scripts/9528-2b478f4ca8-lite.chunk.js.map +0 -1
- package/dist/scripts/9591-230bcf0935-lite.chunk.js +0 -2
- package/dist/scripts/9591-230bcf0935-lite.chunk.js.map +0 -1
- /package/dist/css/{8687-lite-6787cc731a.chunk.css → 3597-lite-6787cc731a.chunk.css} +0 -0
- /package/dist/css/{5349-lite-829df3b4e7.chunk.css → 6137-lite-829df3b4e7.chunk.css} +0 -0
- /package/dist/css/{9470-lite-edb2d29928.chunk.css → 8010-lite-edb2d29928.chunk.css} +0 -0
- /package/dist/css/{6135-lite-41bdd1c5a3.chunk.css → 8410-lite-41bdd1c5a3.chunk.css} +0 -0
- /package/dist/css/{121-lite-1337d9acf0.chunk.css → 9042-lite-1337d9acf0.chunk.css} +0 -0
- /package/dist/css/{9528-lite-6787cc731a.chunk.css → 9620-lite-6787cc731a.chunk.css} +0 -0
- /package/dist/scripts/{1221-502395e693-lite.chunk.js.LICENSE.txt → 1221-1109d5379d-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{2258-4d0639c9fe-lite.chunk.js.LICENSE.txt → 2258-ed7383502f-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{4722-d96da2a258-lite.chunk.js.LICENSE.txt → 3597-eaae787997-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{5153-079b4125ae-lite.chunk.js.LICENSE.txt → 4203-ee50e89841-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{5241-163f5ac64c-lite.chunk.js.LICENSE.txt → 4722-9eb591621a-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6135-a878a9cff0-lite.chunk.js.LICENSE.txt → 5153-cf62a95421-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{7339-5793c921bb-lite.chunk.js.LICENSE.txt → 6756-cfd00009e4-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{8687-549a2d9278-lite.chunk.js.LICENSE.txt → 8410-1f1fd5ccf0-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9528-2b478f4ca8-lite.chunk.js.LICENSE.txt → 9620-3746c84350-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-95a6fc2722.min.js.LICENSE.txt → bundle-fc60888464.min.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
/*! For license information please see 4203-ee50e89841-lite.chunk.js.LICENSE.txt */
|
|
2
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4203],{38307:(e,t,n)=>{n.d(t,{c:()=>y,l:()=>h});var r=n(32735),o=n(232),a=n.n(o),i=n(8604),l=n(83345);const c={heatMap:"epapa",legend:"uhH4p"};function u(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="shared.engagementHeatMap",f="#f1f1f1",d=a().scale(["#daf07d","#08bd1a"]),m=[0,.01,.25,.5,.75,1];function p(e,t){return e?d(e/t).hex():f}function v(e,t){for(var n=[],r=0;r<e.length;r++){var o=r>0&&e[r-1],a=e[r],i=r<e.length-1&&e[r+1];a===o&&a===i||n.push("".concat(p(a,t)," ").concat(100/e.length*r,"%"))}return"linear-gradient(to right, ".concat(n.join(","),")")}function h(){var e=Math.max.apply(Math,m),t=100/m.length;return r.createElement("div",{className:"d-flex justify-content-between w-100"},r.createElement(l.x,{namespace:s,phrase:"less"}),r.createElement("div",{className:"d-flex mx-1 flex-grow-1 ".concat(c.legend)},m.map((function(n,o){return r.createElement("div",{key:o,style:{width:"".concat(t,"%"),backgroundColor:p(n,e)}})}))),r.createElement(l.x,{namespace:s,phrase:"more"}))}function y(e){var t,n,o,a=(0,i.O)(e.engagement),l=null!==(t=e.max)&&void 0!==t?t:Math.max.apply(Math,function(e){if(Array.isArray(e))return u(e)}(o=a)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(o)||function(e,t){if(e){if("string"==typeof e)return u(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)?u(e,t):void 0}}(o)||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.")}());return r.createElement("div",{className:"border rounded ".concat(c.heatMap," ").concat(null!==(n=e.className)&&void 0!==n?n:""),style:{background:v(a,l)}})}},84621:(e,t,n)=>{n.d(t,{L:()=>i});var r=n(32735),o=n(83914);const a={icon:"sAmpy",count:"faDs4"};function i(e){return r.createElement("section",{className:"d-flex flex-column border rounded p-3 h-100"},r.createElement("div",{className:"d-flex ".concat(e.subtitle?"align-items-top":"align-items-center"," mb-2")},r.createElement("div",{className:"".concat(a.icon," ").concat(e.svgClassName," rounded-circle d-flex justify-content-center align-items-center")},r.createElement(o.x,{svgName:e.svgName,size:o.S.Small})),r.createElement("div",{className:"d-flex flex-column ms-2"},r.createElement("h2",{className:"h6 mb-0"},e.title)),"number"==typeof e.count&&r.createElement("div",{className:"".concat(a.count," d-flex justify-content-center align-items-center bg-light rounded-circle ms-auto")},e.count)),e.children)}},70072:(e,t,n)=>{n.d(t,{d:()=>r});var r={fontSize:"12px",fontFamily:'"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"',fontWeight:"400",color:"#313543"}},8604:(e,t,n)=>{function r(e){var t=e.videoDuration||0;return new Array(Math.ceil(t)).fill(null).map((function(t,n){return(null==e?void 0:e.heatMap[n])||0}))}function o(e){return null==e?void 0:e.reduce((function(t,n){return t+n.engagementRate/e.length}),0)}n.d(t,{O:()=>r,Q:()=>o})},6748:(e,t,n)=>{n.d(t,{i:()=>S});var r=n(32735),o=n(42648),a=n(35509),i=n(91967),l=n(15611),c=n(17808),u=n(1287),s=n(83914),f=n(90281),d={opacity:"0.8",cursor:"grabbing"},m=n(35223);function p(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)||v(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 v(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 y(e){var t,n,r,o;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===(o=e.current)||void 0===o?void 0:o.clientWidth)}}const g={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 w=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 o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n};function E(e){var t,n;return e.column.canSort?r.createElement("span",{className:"".concat(g.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(s.x,{svgName:e.column.isSortedDesc||!e.column.isSorted?m.vn.ArrowRight:m.vn.ArrowLeft,size:s.S.Small})):r.createElement(r.Fragment,null)}function O(e){var t,n,o,s,f,m,v,h,y={columns:e.columns,data:e.data,disableSortBy:!e.enableSort,manualSortBy:e.manualSort,autoResetHiddenColumns:e.autoResetHiddenColumns,autoResetSortBy:e.autoResetSortBy,initialState:{sortBy:e.initialSortBy||[]}};e.initialSelectedRowIds&&(y.initialState={selectedRowIds:(v=e.initialSelectedRowIds,h={},v.forEach((function(e){return h[e]=!0})),h)}),e.getRowId&&(y.getRowId=e.getRowId);var g,w=a.useTable.apply(void 0,[y].concat((g=function(e){var t=[a.useSortBy,a.useRowSelect,"flex"===e.layout?a.useFlexLayout:a.useBlockLayout];return e.allowFiltering&&(t=[].concat(p(t),[a.useFilters])),e.allowGlobalFiltering&&(t=[].concat(p(t),[a.useGlobalFilter])),t}(Object.assign({},e)),function(e){if(Array.isArray(e))return b(e)}(g)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(g)||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}}(g)||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.")}()))),O=w.getTableProps,S=w.getTableBodyProps,j=w.headerGroups,C=w.rows,x=w.prepareRow,k=w.toggleAllRowsSelected,N=w.setGlobalFilter,P=w.setHiddenColumns,T=w.state.sortBy;function I(){return!C.length&&e.emptyState?e.emptyState:C.map((function(t){x(t);var n=function(t){var n,r,o,a,l,c=i.q.isFunction(null===(n=e.theme)||void 0===n?void 0:n.row)?e.theme.row(t):null!==(o=null===(r=e.theme)||void 0===r?void 0:r.row)&&void 0!==o?o:"";return t.isSelected&&(null===(a=e.theme)||void 0===a?void 0:a.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),o=!!e.getRowAppLink&&e.getRowAppLink(t);function a(){e.onSelectRow&&(e.allowSelectMultipleRows||k(!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 o?r.createElement("div",{role:"row",key:t.id},r.createElement(l.F,Object.assign({},e,c,{className:n,appLink:o}),L(t))):r.createElement("div",Object.assign({},e,c,{key:t.id,role:"row",className:n,onClick:a}),L(t))}var s=t.getRowProps();return e.enableSortableRows?r.createElement(u.W,{id:t.original.id,key:t.id,childProps:s,childComponent:r.forwardRef((function(e,t){return c(e,t)}))}):c(s)}))}function L(t){return t.cells.map((function(n){var o=function(t,n){var r,o,a="";return"function"==typeof(null===(r=e.theme)||void 0===r?void 0:r.cell)&&(a=e.theme.cell(t,n)),"string"==typeof(null===(o=e.theme)||void 0===o?void 0:o.cell)&&(a=e.theme.cell),e.onSelectCell&&(a+=" cursor-pointer"),a}(t,n);return r.createElement("div",Object.assign({key:n.column.id},n.getCellProps(),{className:o,onClick:function(){e.onSelectCell&&e.onSelectCell(n)}}),n.render("Cell"))}))}return r.useEffect((function(){e.onSort&&e.onSort(T)}),[T]),r.useEffect((function(){e.globalFilter&&N(e.globalFilter)}),[e.globalFilter]),r.useEffect((function(){e.hiddenColumns&&P(e.hiddenColumns)}),[e.hiddenColumns&&e.hiddenColumns.length]),r.createElement("div",Object.assign({},O(),{className:null!==(n=null===(t=e.theme)||void 0===t?void 0:t.table)&&void 0!==n?n:""}),r.createElement("div",{className:null!==(s=null===(o=e.theme)||void 0===o?void 0:o.header)&&void 0!==s?s:""},j.map((function(t){var n,o;return r.createElement("div",Object.assign({},t.getHeaderGroupProps(),{className:null!==(o=null===(n=e.theme)||void 0===n?void 0:n.headerRow)&&void 0!==o?o:""}),t.headers.map((function(t){var n,o;return r.createElement("div",Object.assign({},t.getHeaderProps(t.getSortByToggleProps()),{className:null!==(o=null===(n=e.theme)||void 0===n?void 0:n.headerCell)&&void 0!==o?o:""}),t.render("Header",{renderSortIndicator:function(){return r.createElement(E,{column:t,theme:e.theme})}}),!t.hideSortIndicator&&r.createElement(E,{column:t,theme:e.theme}))})))}))),r.createElement("div",Object.assign({},S(),{className:null!==(m=null===(f=e.theme)||void 0===f?void 0:f.body)&&void 0!==m?m:""}),e.enableSortableRows?r.createElement(c.Q,{ids:C.map((function(e){return e.original.id})),getDragOverlay:function(t){var n,o,a=C.findIndex((function(e){return e.original.id===t})),i=C[a];return r.createElement("div",Object.assign({},e,{className:(n=e.theme,o="g-0 ",n&&(o+=n.row),o),style:d}),L(i))},onSortEnd:e.onSortingRowsEnd},I()):I()))}function S(e){var t=e.enableSlider,n=e.scrollIncrement,a=e.scrollable,l=w(e,["enableSlider","scrollIncrement","scrollable"]),c=function(){var e,t,n=r.useRef(null),o=(e=r.useState(y(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,o,a,i,l=[],c=!0,u=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){u=!0,o=e}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw o}}return l}}(e,t)||v(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.")}()),a=o[0],l=o[1],c=i.q.throttle((function(){l(y(n))}),200),u=r.useCallback((function(e){var t;n.current&&(null===(t=n.current)||void 0===t||t.removeEventListener("scroll",c)),e&&(l(y(n)),e.addEventListener("scroll",c)),n.current=e}),[]);return r.useEffect((function(){(null==n?void 0:n.current)&&l(y(n))}),[n]),{ref:u,scrollState:a,scroll:function(e){var t;null===(t=n.current)||void 0===t||t.scrollBy({left:e,top:0,behavior:"smooth"})}}}(),u=c.ref,s=c.scrollState,d=c.scroll;if(a)return r.createElement(o.$B,{renderTrackHorizontal:function(){return r.createElement("div",{className:g.scrollbarTrack})},autoHeightMax:1e4,autoHeight:!0},r.createElement(O,Object.assign({},l)));if(!t)return r.createElement(O,Object.assign({},l));function m(e){d(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(f.W,{direction:f.f.Left,onClick:function(){return m("left")},hide:!s.canScrollLeft}),r.createElement("div",{className:"".concat(g.scrollContainer," ").concat(e.scrollContainerClassName),ref:u},r.createElement(O,Object.assign({},l))),r.createElement(f.W,{direction:f.f.Right,onClick:function(){return m("right")},hide:!s.canScrollRight}))))}S.defaultProps={scrollIncrement:250,scrollable:!1,layout:"flex"}},17132:(e,t,n)=>{n.d(t,{w:()=>$e});var r=n(32735),o=n(6748),a=n(23481),i=n(38307),l=n(26136),c=n(97408),u=n(40782),s=n(64818);const f={heatMap:"rwDjh",avatarContainer:"kW4ZM"};function d(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)||function(e,t){if(e){if("string"==typeof e)return m(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)?m(e,t):void 0}}(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 m(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 p=a.T.encloseNamespace("shared.engagementTable"),v={heatMap:[],engagementRate:0,viewCount:0};function h(e){var t;return r.createElement("div",{className:"".concat(null!==(t=e.className)&&void 0!==t?t:"")},e.children)}function y(e){return r.createElement(h,{className:"d-inline-block ".concat(e.column.isSorted?"fw-bold":"")},p(e.phraseKey))}var g={table:"bg-white rounded px-0",header:"border-bottom",headerCell:"m-3",cell:"mx-3 my-2"};function b(e){var t,n,a,m=function(e){return r.useMemo((function(){var t,n,o=(t=e.engagement,n=0,t.forEach((function(e){var t=Math.max.apply(Math,d(e.heatMap));t>n&&(n=t)})),n);return[{Header:function(e){var t=e.column;return r.createElement(y,{column:t,phraseKey:"name"})},width:22,accessor:"user",sortType:function(t,n){return(0,l.B)(t.values.user,e.anonymiseUsers)>(0,l.B)(n.values.user,e.anonymiseUsers)?1:-1},Cell:function(t){var n,o,a,i,u=t.value,d=(o=u,a=e.anonymiseUsers,{name:(i=(0,l.B)(o,a).split(" ").filter((function(e){return!!e})))[0],surname:i.slice(1).join(" ")}),m=d.name,p=d.surname;return r.createElement(h,{className:"d-flex align-items-center h-100"},r.createElement("span",{className:f.avatarContainer},r.createElement(c.q,{imageCdnUrl:e.imageCdnUrl,initials:s.l.getInitials(m,p),imageUrl:!e.anonymiseUsers&&(null===(n=null==u?void 0:u.avatar)||void 0===n?void 0:n.url),showAnonymousUser:!(e.anonymiseUsers||u&&!u.sessionId)})),r.createElement("span",{className:"ms-2 clamp-1"},m," ",p))}},{Header:function(e){var t=e.column;return r.createElement(y,{column:t,phraseKey:"views"})},accessor:"viewCount",width:15,sortType:"basic",sortDescFirst:!0,Cell:function(e){var t=e.value;return r.createElement(h,{className:"d-flex align-items-center h-100"},r.createElement("div",null,t))}},{Header:function(e){var t=e.column;return r.createElement(y,{column:t,phraseKey:"engagement"})},accessor:"engagementRate",width:20,sortType:"basic",sortDescFirst:!0,Cell:function(e){var t=e.value;return r.createElement(h,{className:"w-33"},r.createElement(u.O,{percentage:t,layout:u.I.LabelBefore}))}},{Header:function(e){var t=e.column;return r.createElement(y,{column:t,phraseKey:"heatMap"})},accessor:"heatMap",width:48,disableSortBy:!0,Cell:function(e){var t=e.row.original;return r.createElement(h,{className:"d-flex align-items-center h-100"},r.createElement(i.c,{engagement:t,max:o,className:"".concat(f.heatMap," flex-grow-1")}))}}]}),[e.anonymiseUsers])}({engagement:e.engagement,imageCdnUrl:e.imageCdnUrl,anonymiseUsers:e.anonymiseUsers}),p=(t=e.engagement,n=e.users,a=e.classroomStudents,r.useMemo((function(){if(!(null==t?void 0:t.length))return[];var e=[],r=new Set;if(t.forEach((function(t){var o=null==n?void 0:n.find((function(e){return e.id&&e.id===t.userId?(r.add(e.id),!0):!(!e.sessionId||e.sessionId!==t.sessionId)}));e.push(Object.assign(Object.assign({},t),{user:o}))})),null==a?void 0:a.length){var o=a.filter((function(e){return!r.has(e.id)})).map((function(e){return Object.assign(Object.assign({},v),{user:e})}));e.push.apply(e,d(o))}return e}),[null==n?void 0:n.length]));return p.length?r.createElement(o.i,{columns:m,data:p,theme:Object.assign(Object.assign({},g),{table:e.border?"".concat(g.table," border"):g.table}),enableSort:e.enableSort}):r.createElement(r.Fragment,null)}var w=n(84621),E=n(8604);function O(e){return r.createElement(u.O,{layout:e.layout,className:e.className,percentage:0,customLabel:"--%"})}var S=n(83345),j=n(35223),C="shared.insightAmountWatched",x=a.T.encloseNamespace(C);function k(e){var t=(0,E.Q)(e.engagement),n=Math.round(100*t);return r.createElement(w.L,{title:x("title"),svgName:j.vn.Timer,svgClassName:"bg-light-green text-green"},r.createElement("div",{className:"d-flex flex-column align-items-center my-auto gap-2"},!!e.engagement&&r.createElement(r.Fragment,null,r.createElement(u.O,{percentage:t,layout:u.I.LabelInside}),r.createElement("p",{className:"text-center"},"number"==typeof t?r.createElement(S.x,{namespace:C,phrase:"everyoneWatched",options:{percentage:n}}):r.createElement(S.x,{namespace:C,phrase:"notWatched"}))),!e.engagement&&r.createElement(r.Fragment,null,r.createElement(O,{layout:u.I.LabelInside}))))}var N=n(72306),P=n.n(N),T=n(70312),I=n.n(T),L=n(70072),A=n(75896),M=["#FF9300","#38A2E8","#7A76E8","#B679C7","#F7847B","#D9584F","#FFCD52","#5DC786","#40BCC3","#40C2BB"];function R(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 _=n(97958),B="shared.insightTotalViews",U=a.T.encloseNamespace(B),D={title:{text:null},credits:{enabled:!1},chart:{backgroundColor:"transparent",spacing:[0,0,0,0]},legend:{itemStyle:L.d,itemDistance:8},plotOptions:{pie:{allowPointSelect:!0,cursor:"pointer",dataLabels:{enabled:!1},showInLegend:!0,borderWidth:0,size:"80%"}}};function F(e){var t,n,o,a,i,l,c,u=function(e){var t,n,r=e.findIndex((function(e){return"Staff"===e.name}));if(r>-1){var o=(t=e.splice(r,1),n=1,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,l=[],c=!0,u=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){u=!0,o=e}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw o}}return l}}(t,n)||function(e,t){if(e){if("string"==typeof e)return R(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)?R(e,t):void 0}}(t,n)||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];e.push(o)}return e.sort((function(e,t){var n,r;return parseInt(null===(n=e.name.match(/\d+/))||void 0===n?void 0:n[0])-parseInt(null===(r=t.name.match(/\d+/))||void 0===r?void 0:r[0])}))}((o=e.events,a=[],l={},null==(c=o["yearGroupCount"])||c.forEach((function(e){var t,n=e.name||"Unknown";n&&!(null==a?void 0:a.includes(n.toLowerCase()))&&(l[n]=null!==(t=l[n])&&void 0!==t?t:0,l[n]+=e.count)})),A.m.sortBy(Object.keys(l).map((function(e){return{name:i?i(e):e,y:l[e],type:"pie"}})),"name").map((function(e,t){return Object.assign(Object.assign({},e),{color:M[t%M.length]})})))),s=null!==(n=null==(t=u)?void 0:t.reduce((function(e,t){return e+t.y}),0))&&void 0!==n?n:null;return r.createElement(w.L,{title:U("title"),svgClassName:"bg-light-blue text-blue",svgName:j.vn.VisibleOn},(null==u?void 0:u.length)?r.createElement(r.Fragment,null,r.createElement("p",{className:"mb-0"},r.createElement(S.x,{namespace:B,phrase:"totalViews",options:{totalViews:s}})),r.createElement("div",{className:"d-flex justify-content-center h-75"},r.createElement(I(),{highcharts:P(),options:function(e){return Object.assign(Object.assign({},D),{series:[{type:"pie",name:U("title"),data:e}]})}(u),containerProps:{className:"w-100"}}))):r.createElement(_.u,{className:"pt-0 my-auto"},r.createElement(_.u.Image,{src:e.emptyStateImage,className:"w-75 h-auto"}),r.createElement(_.u.Heading,{className:"h4"},r.createElement(S.x,{namespace:B,phrase:"noViews"})),r.createElement(_.u.Info,{className:"w-100"},r.createElement(S.x,{namespace:B,phrase:"notWatched"}))))}var H=n(99742);const V={partialInsights:"nKLWa",videoContainer:"WF2iA"};function W(){return r.createElement("div",null,r.createElement("div",{className:"row g-3 mb-3"},r.createElement("div",{className:"col"},r.createElement("div",{className:"".concat(V.partialInsights," rounded partial-loading-background")})),r.createElement("div",{className:"col"},r.createElement("div",{className:"".concat(V.partialInsights," rounded partial-loading-background")})),r.createElement("div",{className:V.videoContainer},r.createElement("div",{className:"".concat(V.partialInsights," rounded partial-loading-background")}))),r.createElement("div",{className:"row g-3 mb-5"},r.createElement("div",{className:"col-12"},r.createElement("div",{className:"".concat(V.partialInsights," rounded partial-loading-background")}))))}var z=n(87252),G=n(41386),Z=n(76032);function K(e){return K="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},K(e)}function $(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,q(r.key),r)}}function q(e){var t=function(e){if("object"!=K(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=K(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==K(t)?t:t+""}function Q(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Q=function(){return!!e})()}function Y(){return Y="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,n){var r=function(e,t){for(;!{}.hasOwnProperty.call(e,t)&&null!==(e=X(e)););return e}(e,t);if(r){var o=Object.getOwnPropertyDescriptor(r,t);return o.get?o.get.call(arguments.length<3?e:n):o.value}},Y.apply(null,arguments)}function X(e){return X=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},X(e)}function J(e,t){return J=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},J(e,t)}var ee=function(e){function t(e,n){var r;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(r=function(e,t,n){return t=X(t),function(e,t){if(t&&("object"==K(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Q()?Reflect.construct(t,n||[],X(e).constructor):t.apply(e,n))}(this,t,[e,n])).overlayVisible=n.overlayVisible,r.toggle(r.overlayVisible),r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&J(e,t)}(t,e),n=t,r=[{key:"handleToggle",value:function(){this.toggle(!this.overlayVisible)}},{key:"toggle",value:function(e){e?this.toggleOn():this.toggleOff()}},{key:"toggleOn",value:function(){Z.Z.dom.addClass(this.toggleEl,"on"),this.overlayVisible=!0,this.player().engagementOverlayPlugin().toggleOverlay(this.overlayVisible),this.player().addClass("cv-reports-player-overlay-visible")}},{key:"toggleOff",value:function(){Z.Z.dom.removeClass(this.toggleEl,"on"),this.overlayVisible=!1,this.player().engagementOverlayPlugin().toggleOverlay(this.overlayVisible),this.player().removeClass("cv-reports-player-overlay-visible")}},{key:"handleClick",value:function(e){e.stopImmediatePropagation()}},{key:"createEl",value:function(e,n,r){this.handlerBound||(this.handleToggle=this.handleToggle.bind(this),this.handlerBound=!0),this.toggleEl&&this.toggleEl.removeEventListener("click",this.handleToggle),this.toggleEl=Z.Z.dom.createEl("div",{className:"custom-toggle custom-toggle-info toggle-option float-end",innerHTML:'<span class="handle"></span></div>'}),this.toggleEl.addEventListener("click",this.handleToggle);var o,a,i,l=(o=t,a=this,"function"==typeof(i=Y(X(1&3?o.prototype:o),"createEl",a))?function(e){return i.apply(a,e)}:i)([e,{className:"vjs-menu-item cv-cog-menu-item",innerHTML:'\n <span class="vjs-menu-item-text">Heat Map</span>\n <span class="cv-toggle-container"></span>'},r]);return l.children[1].appendChild(this.toggleEl),l}}],r&&$(n.prototype,r),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r}(Z.Z.getComponent("MenuItem"));Z.Z.registerComponent("EngagementOverlayMenuItem",ee);var te=n(74161),ne=n(86572);function re(e){var t,n=e.interactive.timepoints.find((function(t){var n=t.visibleAt/1e3;return Math.floor(e.time)===Math.floor(n)||Math.ceil(e.time)===Math.ceil(n)}));if(!(null===(t=null==n?void 0:n.interactions)||void 0===t?void 0:t.length))return r.createElement(r.Fragment,null);var o=n.interactions.length>3?n.interactions.slice(0,2):n.interactions,a=n.interactions.length-o.length;return r.createElement("div",{className:"d-flex justify-content-end ms-2"},o.map((function(e,t){return r.createElement(ne.y,{key:t,interaction:e,showQuestion:!1,iconClassName:"ms-1"})})),!!a&&r.createElement("div",{className:"interaction-type-icon d-flex justify-content-center align-items-center border border-dark text-body ms-1"},"+".concat(a)))}var oe=n(42503);function ae(e){return function(e){if(Array.isArray(e))return ie(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return ie(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)?ie(e,t):void 0}}(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 ie(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 le={title:{text:null},xAxis:{visible:!1,minPadding:0,maxPadding:0},legend:{enabled:!1},credits:{enabled:!1},defs:{gradient:{tagName:"linearGradient",id:"area-gradient",x1:0,y1:1,x2:0,y2:0,children:[{tagName:"stop",offset:0},{tagName:"stop",offset:1}]}}};function ce(e,t){return{styledMode:!0,spacing:[15,0,0,0],width:e,height:t}}function ue(e){return ue="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},ue(e)}function se(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,fe(r.key),r)}}function fe(e){var t=function(e){if("object"!=ue(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=ue(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==ue(t)?t:t+""}function de(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(de=function(){return!!e})()}function me(){return me="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,n){var r=function(e,t){for(;!{}.hasOwnProperty.call(e,t)&&null!==(e=pe(e)););return e}(e,t);if(r){var o=Object.getOwnPropertyDescriptor(r,t);return o.get?o.get.call(arguments.length<3?e:n):o.value}},me.apply(null,arguments)}function pe(e){return pe=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},pe(e)}function ve(e,t){return ve=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},ve(e,t)}var he=Z.Z.getComponent("Component");P().AST.allowedTags.push("g"),P().AST.allowedAttributes.push("viewBox","transform");var ye=function(e){function t(e,n){var r;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(r=function(e,t,n){return t=pe(t),function(e,t){if(t&&("object"==ue(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,de()?Reflect.construct(t,n||[],pe(e).constructor):t.apply(e,n))}(this,t,[e,n])).initialize(),r.bindListeners(),r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&ve(e,t)}(t,e),n=t,o=[{key:"initialize",value:function(){var e=this;this.player().ready((function(){return e.buildChart()}))}},{key:"buildCSSClass",value:function(){return"cv-engagement-overlay"}},{key:"createEl",value:function(e,n,r){var o,a,i;return(o=t,a=this,"function"==typeof(i=me(pe(1&3?o.prototype:o),"createEl",a))?function(e){return i.apply(a,e)}:i)([e,Object.assign(Object.assign({},n),{className:this.buildCSSClass(),innerHTML:'<div class="cv-engagement-chart"></div><div class="cv-engagement-timepoint-indicator"></div>'}),r])}},{key:"toggleChart",value:function(e){e?this.buildChart():this.destroyChart()}},{key:"bindListeners",value:function(){var e=this;this.handleClick=this.handleClick.bind(this),this.resizeChart=this.resizeChart.bind(this),this.player().on("playerresize",this.resizeChart),this.on(this.el(),"mouseup",this.handleClick),this.player().on("dispose",(function(){e.player().off("playerresize",e.resizeChart),e.off(e.el(),"mouseup",e.handleClick)}))}},{key:"handleClick",value:function(e){Z.Z.dom.isSingleLeftClick(e)&&(this.player().paused()?this.player().play():this.player().pause())}},{key:"buildChart",value:function(){var e=this;if(!this.chart){var t=this.getChartDimensions();if(t){var n=this.el().querySelector(".cv-engagement-chart");this.chart=P().chart(n,this.getHighchartOptions(t))}else this.player().one("play",(function(){return e.buildChart()}))}}},{key:"resizeChart",value:function(){var e=this.getChartDimensions();this.chart&&e&&this.chart.setSize(e.width,e.height)}},{key:"destroyChart",value:function(){var e;null===(e=this.chart)||void 0===e||e.destroy(),this.chart=null}},{key:"getChartDimensions",value:function(){var e=this.player().getChild("collapserator"),t=null==e?void 0:e.currentHeight(),n=this.el().clientWidth;return t&&n?{width:n,height:this.player().currentDimensions().height-t}:null}},{key:"getHighchartOptions",value:function(e){var t,n,o,a=e.width,i=e.height;return Object.assign(Object.assign({},le),{chart:ce(a,i),yAxis:(n=this.options_.heatMap,{max:1.05*Math.max.apply(Math,ae(n)),min:0,minPadding:0,maxPadding:0,allowDecimals:!0,startOnTick:!1,endOnTick:!1,visible:!1}),tooltip:(o=this.options_.interactive,{formatter:function(){var e=o?function(e,t){return(0,te.renderToStaticMarkup)(r.createElement(re,{time:t,interactive:e}))}(o,this.x):"";return'<div class="cv-engagement-tooltip bg-white rounded"><div class="d-flex justify-content-between">'+"<strong>".concat((0,oe.m)(this.x),"</strong>")+"".concat(e)+'</div><div class="d-flex justify-content-between rounded bg-light cv-view-count-container">'+'<strong>Views</strong> <span class="cv-view-count">'.concat(this.y,"</span>")+"</div></div>"},positioner:function(e,t,n){var r=this.chart.plotWidth-e,o=n.plotX-e/2;return{x:Math.min(Math.max(o,0),r),y:this.chart.plotTop}},useHTML:!0,padding:0}),plotOptions:(t=this.moveTimepointIndicator.bind(this),{area:{point:{events:{mouseOver:function(){t(this.x)},mouseOut:function(){t(null)}}}},series:{marker:{enabled:!1}}}),series:[{type:"area",data:this.options_.heatMap}]})}},{key:"moveTimepointIndicator",value:function(e){this.options_.onTimepointHover&&this.options_.onTimepointHover(e);var t=this.el().querySelector(".cv-engagement-timepoint-indicator");null!==e?(Z.Z.dom.addClass(t,"cv-engagement-timepoint-indicator-visible"),t.style.left="".concat(e/this.options_.heatMap.length*100,"%")):Z.Z.dom.removeClass(t,"cv-engagement-timepoint-indicator-visible")}}],o&&se(n.prototype,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,o}(he);function ge(e){return ge="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},ge(e)}function be(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,we(r.key),r)}}function we(e){var t=function(e){if("object"!=ge(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=ge(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==ge(t)?t:t+""}function Ee(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Ee=function(){return!!e})()}function Oe(e){return Oe=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Oe(e)}function Se(e,t){return Se=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Se(e,t)}Z.Z.registerComponent("EngagementOverlay",ye);var je=function(e){function t(e,n){var r;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(r=function(e,t,n){return t=Oe(t),function(e,t){if(t&&("object"==ge(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Ee()?Reflect.construct(t,n||[],Oe(e).constructor):t.apply(e,n))}(this,t,[e,n])).options=n,e.ready((function(){r.initialize()})),r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Se(e,t)}(t,e),n=t,(r=[{key:"initialize",value:function(){var e;this.hasHeatMapData()&&(this.player.addChild("engagementOverlay",{heatMap:this.options.heatMap,interactive:this.options.interactive,onTimepointHover:this.options.onTimepointHover}),(null===(e=this.player.getChild("collapserator"))||void 0===e?void 0:e.getChild("cogButton")).addItem({index:0,ctor:ee,name:"EngagementOverlayMenuItem",options:{overlayVisible:!0}}))}},{key:"toggleOverlay",value:function(e){var t=this.player.getChild("engagementOverlay");null==t||t.toggleChart(e)}},{key:"hasHeatMapData",value:function(){var e;return(null===(e=this.options.heatMap)||void 0===e?void 0:e.reduce((function(e,t){return e+t}),0))>0}}])&&be(n.prototype,r),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r}(Z.Z.getPlugin("plugin"));Z.Z.registerPlugin("engagementOverlayPlugin",je),n(16852);var Ce=n(4271),xe=n(10463);function ke(e){return ke="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},ke(e)}function Ne(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,Pe(r.key),r)}}function Pe(e){var t=function(e){if("object"!=ke(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=ke(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==ke(t)?t:t+""}function Te(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Te=function(){return!!e})()}function Ie(e){return Ie=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Ie(e)}function Le(e,t){return Le=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Le(e,t)}n(6994);var Ae=function(e){function t(e,n){var r;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(r=function(e,t,n){return t=Ie(t),function(e,t){if(t&&("object"==ke(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Te()?Reflect.construct(t,n||[],Ie(e).constructor):t.apply(e,n))}(this,t,[e])).options=n,r.player.one("loadedmetadata",(function(){return r.player.ready(r.initialize.bind(r))})),r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Le(e,t)}(t,e),n=t,(r=[{key:"initialize",value:function(){xe.O.useMetadataTrack(this.player,"interactive",this.onTrackLoaded.bind(this)),this.player.addClass("cv-interactive-plugin")}},{key:"onTrackLoaded",value:function(e){this.addChildren(e)}},{key:"addChildren",value:function(e){this.player.controlBar.getChild("progressControl").getChild("SeekBar").addChild(new Ce.N(this.player,{interactive:this.options.interactive,track:e}))}}])&&Ne(n.prototype,r),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r}(Z.Z.getPlugin("plugin"));function Me(e){return Me="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},Me(e)}function Re(){Re=function(){return t};var e,t={},n=Object.prototype,r=n.hasOwnProperty,o=Object.defineProperty||function(e,t,n){e[t]=n.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",l=a.asyncIterator||"@@asyncIterator",c=a.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function s(e,t,n,r){var a=t&&t.prototype instanceof y?t:y,i=Object.create(a.prototype),l=new T(r||[]);return o(i,"_invoke",{value:x(e,n,l)}),i}function f(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}t.wrap=s;var d="suspendedStart",m="suspendedYield",p="executing",v="completed",h={};function y(){}function g(){}function b(){}var w={};u(w,i,(function(){return this}));var E=Object.getPrototypeOf,O=E&&E(E(I([])));O&&O!==n&&r.call(O,i)&&(w=O);var S=b.prototype=y.prototype=Object.create(w);function j(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function C(e,t){function n(o,a,i,l){var c=f(e[o],e,a);if("throw"!==c.type){var u=c.arg,s=u.value;return s&&"object"==Me(s)&&r.call(s,"__await")?t.resolve(s.__await).then((function(e){n("next",e,i,l)}),(function(e){n("throw",e,i,l)})):t.resolve(s).then((function(e){u.value=e,i(u)}),(function(e){return n("throw",e,i,l)}))}l(c.arg)}var a;o(this,"_invoke",{value:function(e,r){function o(){return new t((function(t,o){n(e,r,t,o)}))}return a=a?a.then(o,o):o()}})}function x(t,n,r){var o=d;return function(a,i){if(o===p)throw Error("Generator is already running");if(o===v){if("throw"===a)throw i;return{value:e,done:!0}}for(r.method=a,r.arg=i;;){var l=r.delegate;if(l){var c=k(l,r);if(c){if(c===h)continue;return c}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===d)throw o=v,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=p;var u=f(t,n,r);if("normal"===u.type){if(o=r.done?v:m,u.arg===h)continue;return{value:u.arg,done:r.done}}"throw"===u.type&&(o=v,r.method="throw",r.arg=u.arg)}}}function k(t,n){var r=n.method,o=t.iterator[r];if(o===e)return n.delegate=null,"throw"===r&&t.iterator.return&&(n.method="return",n.arg=e,k(t,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),h;var a=f(o,t.iterator,n.arg);if("throw"===a.type)return n.method="throw",n.arg=a.arg,n.delegate=null,h;var i=a.arg;return i?i.done?(n[t.resultName]=i.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,h):i:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,h)}function N(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function P(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function T(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(N,this),this.reset(!0)}function I(t){if(t||""===t){var n=t[i];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function n(){for(;++o<t.length;)if(r.call(t,o))return n.value=t[o],n.done=!1,n;return n.value=e,n.done=!0,n};return a.next=a}}throw new TypeError(Me(t)+" is not iterable")}return g.prototype=b,o(S,"constructor",{value:b,configurable:!0}),o(b,"constructor",{value:g,configurable:!0}),g.displayName=u(b,c,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===g||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,b):(e.__proto__=b,u(e,c,"GeneratorFunction")),e.prototype=Object.create(S),e},t.awrap=function(e){return{__await:e}},j(C.prototype),u(C.prototype,l,(function(){return this})),t.AsyncIterator=C,t.async=function(e,n,r,o,a){void 0===a&&(a=Promise);var i=new C(s(e,n,r,o),a);return t.isGeneratorFunction(n)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},j(S),u(S,c,"Generator"),u(S,i,(function(){return this})),u(S,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),n=[];for(var r in t)n.push(r);return n.reverse(),function e(){for(;n.length;){var r=n.pop();if(r in t)return e.value=r,e.done=!1,e}return e.done=!0,e}},t.values=I,T.prototype={constructor:T,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(P),!t)for(var n in this)"t"===n.charAt(0)&&r.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var n=this;function o(r,o){return l.type="throw",l.arg=t,n.next=r,o&&(n.method="next",n.arg=e),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],l=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var c=r.call(i,"catchLoc"),u=r.call(i,"finallyLoc");if(c&&u){if(this.prev<i.catchLoc)return o(i.catchLoc,!0);if(this.prev<i.finallyLoc)return o(i.finallyLoc)}else if(c){if(this.prev<i.catchLoc)return o(i.catchLoc,!0)}else{if(!u)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return o(i.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=t&&t<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=t,a?(this.method="next",this.next=a.finallyLoc,h):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),h},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),P(n),h}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;P(n)}return o}}throw Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:I(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=e),h}},t}function _e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,Be(r.key),r)}}function Be(e){var t=function(e){if("object"!=Me(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=Me(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==Me(t)?t:t+""}function Ue(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Ue=function(){return!!e})()}function De(){return De="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,n){var r=function(e,t){for(;!{}.hasOwnProperty.call(e,t)&&null!==(e=Fe(e)););return e}(e,t);if(r){var o=Object.getOwnPropertyDescriptor(r,t);return o.get?o.get.call(arguments.length<3?e:n):o.value}},De.apply(null,arguments)}function Fe(e){return Fe=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Fe(e)}function He(e,t){return He=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},He(e,t)}Z.Z.registerPlugin("interactiveSeekBarPlugin",Ae);var Ve=function(e){function t(e,n){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t,n){return t=Fe(t),function(e,t){if(t&&("object"==Me(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Ue()?Reflect.construct(t,n||[],Fe(e).constructor):t.apply(e,n))}(this,t,[e,n])}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&He(e,t)}(t,e),n=t,r=[{key:"getPlayerClassName",value:function(){return"cv-reports-player"}},{key:"getAnalyticsPlayerType",value:function(){return"reports-player"}},{key:"additionalSetup",value:function(e){var n,r,o,a,i=this,l=Object.create(null,{additionalSetup:{get:function(){return e=t,n=i,De(Fe(1&1?e.prototype:e),"additionalSetup",n);var e,n}}});return n=this,r=void 0,o=void 0,a=Re().mark((function t(){return Re().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:l.additionalSetup.call(this,e),this.setupEngagementOverlayPlugin(e),this.setupUpClipPlugin(e),this.setupInteractiveSeekBarPlugin(e);case 4:case"end":return t.stop()}}),t,this)})),new(o||(o=Promise))((function(e,t){function i(e){try{c(a.next(e))}catch(e){t(e)}}function l(e){try{c(a.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof o?n:new o((function(e){e(n)}))).then(i,l)}c((a=a.apply(n,r||[])).next())}))}},{key:"setupEngagementOverlayPlugin",value:function(e){var t;this.player.engagementOverlayPlugin({heatMap:this.options.heatMap,interactive:null===(t=e.additionalData)||void 0===t?void 0:t.interactive,onTimepointHover:this.options.onTimepointHover})}},{key:"setupUpClipPlugin",value:function(e){var t,n,r="MasterClip"===e.mediaType,o="MasterInteractive"===e.mediaType;if((r||o)&&(r&&(n=e.additionalData),!o||(n=null===(t=e.additionalData)||void 0===t?void 0:t.clipData))){if(!n)throw Error("Invalid clip data");this.player.clipPlugin({startTime:n.startTime,endTime:n.endTime})}}},{key:"setupInteractiveSeekBarPlugin",value:function(e){var t,n,r=null===(t=e.additionalData)||void 0===t?void 0:t.interactive;(null===(n=e.additionalData)||void 0===n?void 0:n.interactive)&&(this.track=G.h.getInteractiveTrack(this.player,e),this.player.interactiveSeekBarPlugin({interactive:r}))}},{key:"getSeekBarOptions",value:function(){return{ignoreChapters:!0}}}],r&&_e(n.prototype,r),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r}(z.r);function We(e){var t=r.useRef(null),n=r.useRef(null);return r.useEffect((function(){n.current=new Ve(t.current,e)}),[]),r.createElement("div",{ref:t})}const ze={playerContainer:"fGWsk",playerPlaceholder:"v1MjE",heatMap:"lp1Yn",heatMapTimepointIndicator:"yOOK6",heatMapTimepointIndicatorVisible:"rTXmB",partialLoadingContainer:"gW1HU"};var Ge=a.T.encloseNamespace("shared.videoEngagementOverlay");function Ze(e){var t=r.useRef(null),n=(0,E.O)(e.engagement);return r.createElement("div",{className:"bg-white border rounded overflow-hidden h-100"},r.createElement("div",{className:"position-relative"},r.createElement("div",{className:ze.playerPlaceholder}),r.createElement("div",{className:ze.playerContainer},r.createElement(We,{viewKey:e.viewKey,playerApi:new URL(e.playerApiUrl),hotkeyElQuerySelector:"body",heatMap:n,onTimepointHover:function(e){var r=t.current;r&&(null!==e?(r.classList.add(ze.heatMapTimepointIndicatorVisible),r.style.left="".concat(e/n.length*100,"%")):r.classList.remove(ze.heatMapTimepointIndicatorVisible))},aspectRatio:"16:9"}))),r.createElement("div",{className:"p-3"},r.createElement("div",{className:"position-relative"},r.createElement(i.c,{engagement:e.engagement,className:ze.heatMap}),r.createElement("div",{ref:t,className:ze.heatMapTimepointIndicator})),r.createElement("div",{className:"d-flex justify-content-between mt-2"},r.createElement("strong",null,Ge("heatmap")),r.createElement("div",{className:"w-33"},r.createElement(i.l,null)))))}const Ke={videoContainer:"cpl68"};function $e(e){var t;return r.createElement(r.Fragment,null,!e.hasDataLoaded&&r.createElement(W,null),r.createElement("div",{className:"row g-3 mb-3"},e.hasDataLoaded&&r.createElement(r.Fragment,null,r.createElement("div",{className:"col"},r.createElement(F,{events:{yearGroupCount:e.yearGroups},emptyStateImage:H.W.EmptyStates.MY_VIDEOS})),r.createElement("div",{className:"col"},r.createElement(k,{engagement:e.individualEngagement})),r.createElement("div",{className:Ke.videoContainer},r.createElement(Ze,{engagement:e.aggregateEngagement,viewKey:e.viewKey.viewKey,playerApiUrl:e.config.playerApiUrl,imageCdnUrl:e.config.imageCdnUrl}))),e.tableDataLoaded&&r.createElement("div",{className:"col-12"},r.createElement(b,{engagement:e.individualEngagement,users:e.users,imageCdnUrl:null===(t=e.config)||void 0===t?void 0:t.imageCdnUrl,anonymiseUsers:e.anonymiseUsers,classroomStudents:e.classroomStudents,border:!0,enableSort:!0}))))}}}]);
|
|
3
|
+
//# sourceMappingURL=4203-ee50e89841-lite.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/4203-ee50e89841-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/components/engagement-heat-map/engagement-heat-map.scss","file:///app/packages/libs/shared/src/apps/analytics/components/engagement-heat-map/EngagementHeatMap.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insight-card/insight-card.scss","file:///app/packages/libs/shared/src/apps/analytics/components/insight-card/InsightCard.tsx","file:///app/packages/libs/shared/src/apps/analytics/constants/ChartStyles.ts","file:///app/packages/libs/shared/src/apps/analytics/utils/EngagementUtils.ts","file:///app/packages/libs/shared/src/constants/DragOverlayStyles.ts","file:///app/packages/libs/shared/src/components/table/TableUtils.ts","file:///app/packages/libs/shared/src/components/table/table.scss","file:///app/packages/libs/shared/src/components/table/Table.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/engagement-table/engagement-table.scss","file:///app/packages/libs/shared/src/apps/analytics/components/engagement-table/EngagementTableUtils.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/engagement-table/EngagementTable.tsx","file:///app/packages/libs/shared/src/components/percentage-indicator/PartialPercentageIndicator.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/amount-watched/InsightAmountWatched.tsx","file:///app/packages/libs/shared/src/apps/analytics/utils/ChartColourUtils.ts","file:///app/packages/libs/shared/src/apps/analytics/components/insights/total-views/InsightTotalViews.tsx","file:///app/packages/libs/shared/src/apps/analytics/utils/SharedUserActivityPieChartUtils.ts","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-heatmap/partial-loading/partial-insights-heatmap.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-heatmap/partial-loading/PartialInsightsHeatmap.tsx","file:///app/packages/projects/player/src/plugins/engagement-overlay-plugin/components/engagement-overlay-menu-item/engagement-overlay-menu-item.ts","file:///app/packages/projects/player/src/plugins/engagement-overlay-plugin/components/timepoint-interactions/timepoint-interactions.tsx","file:///app/packages/projects/player/src/plugins/engagement-overlay-plugin/components/engagement-overlay/engagement-overlay-chart-options.tsx","file:///app/packages/projects/player/src/plugins/engagement-overlay-plugin/components/engagement-overlay/engagement-overlay.ts","file:///app/packages/projects/player/src/plugins/engagement-overlay-plugin/engagement-overlay-plugin.ts","file:///app/packages/projects/player/src/plugins/interactive-plugin/interactive-seek-bar-plugin.ts","file:///app/packages/projects/player/src/players/reports/reports-player.ts","file:///app/packages/projects/player/src/react/ReportsPlayer.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/video-engagement-overlay/video-engagement-overlay.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/video-engagement-overlay/VideoEngagementOverlay.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-heatmap/insights-heatmap.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-heatmap/InsightsHeatmap.tsx"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"heatMap\":\"epapa\",\"legend\":\"uhH4p\"};","import React from 'react';\nimport chroma from 'chroma-js';\n\nimport { getFullHeatMap } from 'libs/shared/apps/analytics/utils/EngagementUtils';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Engagement } from 'libs/shared/interfaces';\n\nimport styles from './engagement-heat-map.scss';\n\nconst namespace = 'shared.engagementHeatMap';\n\nconst ZERO_COLOUR = '#f1f1f1';\nconst MIN_COLOUR = '#daf07d';\nconst MAX_COLOUR = '#08bd1a';\n\nconst COLOUR_SCALE = chroma.scale([ MIN_COLOUR, MAX_COLOUR ]);\n\nconst LEGEND_VALUES = [ 0, 0.01, 0.25, 0.5, 0.75, 1 ];\n\nfunction getBackgroundColor(value: number, max: number): string {\n if (!value)\n return ZERO_COLOUR;\n\n return COLOUR_SCALE(value / max).hex();\n}\n\nfunction getGradient(data: number[], max: number): string {\n const gradient: string[] = [];\n\n for (let i = 0; i < data.length; i++) {\n const previousValue = i > 0 && data[i - 1];\n const currentValue = data[i];\n const nextValue = i < data.length - 1 && data[i + 1];\n\n /**\n * We want to capture colour changes but if a value has the same value\n * of both of its neighbours, we can skip it.\n */\n if (currentValue === previousValue && currentValue === nextValue)\n continue;\n\n gradient.push(`${getBackgroundColor(currentValue, max)} ${100 / data.length * i}%`);\n }\n\n return `linear-gradient(to right, ${gradient.join(',')})`;\n}\n\nexport function EngagementHeatMapLegend(): JSX.Element {\n const max = Math.max(...LEGEND_VALUES);\n const legendSquareWidthPercentage = 100 / LEGEND_VALUES.length;\n\n return (\n <div className='d-flex justify-content-between w-100'>\n <Text namespace={namespace} phrase='less' />\n <div className={`d-flex mx-1 flex-grow-1 ${styles.legend}`}>\n {LEGEND_VALUES.map((val, idx) => (\n <div\n key={idx}\n style={{\n width: `${legendSquareWidthPercentage}%`,\n backgroundColor: getBackgroundColor(val, max)\n }}\n />\n ))}\n </div>\n <Text namespace={namespace} phrase='more' />\n </div>\n );\n}\n\ninterface EngagementHeatMapProps {\n engagement: Engagement;\n max?: number;\n className?: string;\n}\n\nexport function EngagementHeatMap(props: EngagementHeatMapProps): JSX.Element {\n const heatMap = getFullHeatMap(props.engagement);\n const max = props.max ?? Math.max(...heatMap);\n\n return (\n <div\n className={`border rounded ${styles.heatMap} ${props.className ?? ''}`}\n style={{\n background: getGradient(heatMap, max)\n }}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"icon\":\"sAmpy\",\"count\":\"faDs4\"};","import React from 'react';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\n\nimport styles from './insight-card.scss';\n\ninterface InsightCardProps extends React.PropsWithChildren {\n svgName: string;\n svgClassName: string;\n title: string;\n subtitle?: string;\n count?: number;\n}\n\nexport function InsightCard(props: InsightCardProps) {\n return (\n <section className='d-flex flex-column border rounded p-3 h-100'>\n <div className={`d-flex ${props.subtitle ? 'align-items-top' : 'align-items-center'} mb-2`}>\n <div className={`${styles.icon} ${props.svgClassName} rounded-circle d-flex justify-content-center align-items-center`}>\n <SvgContainer svgName={props.svgName} size={SvgContainerSize.Small} />\n </div>\n <div className='d-flex flex-column ms-2'>\n <h2 className='h6 mb-0'>{props.title}</h2>\n </div>\n {typeof props.count === 'number' && (\n <div className={`${styles.count} d-flex justify-content-center align-items-center bg-light rounded-circle ms-auto`}>\n {props.count}\n </div>\n )}\n </div>\n {props.children}\n </section>\n );\n}","export const CHART_FONT_STYLES = {\n fontSize: '12px',\n fontFamily: `\"Inter\",-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",\"Liberation Sans\",sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\"`,\n fontWeight: '400',\n color: '#313543'\n};","import { Engagement } from 'libs/shared/interfaces';\n\n/**\n * The heat map in the API response won't contain trailing zeros so we need to add those\n * in manually.\n */\nexport function getFullHeatMap(engagement: Engagement): number[] {\n const videoDuration = engagement.videoDuration || 0;\n \n return (new Array(Math.ceil(videoDuration))).fill(null).map((t, idx) => engagement?.heatMap[idx] || 0);\n}\n\nexport function getEngagementRate(engagement: Engagement[]): number {\n return engagement?.reduce((prev, next) => prev + next.engagementRate / engagement.length, 0);\n}","export const DragOverlayStyles = { opacity: '0.8', cursor: 'grabbing' };","import React from 'react';\nimport { PluginHook, useBlockLayout, useFilters, useFlexLayout, useGlobalFilter, useRowSelect, useSortBy } from 'react-table';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\ninterface PluginOptions {\n allowFiltering?: boolean;\n allowGlobalFiltering?: boolean;\n layout?: 'flex' | 'block';\n}\n\nexport function getPlugins<T extends HashObject>(props: PluginOptions): PluginHook<T>[] {\n let plugins: PluginHook<T>[] = [\n useSortBy,\n useRowSelect,\n props.layout === 'flex' ? useFlexLayout : useBlockLayout\n ];\n\n if (props.allowFiltering)\n plugins = [\n ...plugins,\n useFilters\n ];\n\n if (props.allowGlobalFiltering)\n plugins = [\n ...plugins,\n useGlobalFilter\n ];\n\n return plugins;\n}\n\nexport function getSelectedRowIds(ids: string[]): Record<string, boolean> {\n const idHash: Record<string, boolean> = {};\n\n ids.forEach(id => idHash[id] = true);\n\n return idHash;\n}\n\ninterface TableScrollState {\n canScrollLeft: boolean;\n canScrollRight: boolean;\n}\n\nfunction calculateScrollState(ref: React.MutableRefObject<HTMLDivElement>): TableScrollState {\n const canScrollLeft = ref.current?.scrollLeft > 0;\n const canScrollRight = (ref.current?.scrollLeft + 1) < ref.current?.scrollWidth - ref.current?.clientWidth;\n\n return { canScrollLeft, canScrollRight };\n}\n\ninterface UseTableScroll {\n ref: (el: HTMLDivElement) => void;\n scrollState: TableScrollState;\n scroll: (scrollBy: number) => void;\n}\n\nexport function useTableScroll(): UseTableScroll {\n const elRef = React.useRef<HTMLDivElement>(null);\n const [ scrollState, setScrollState ] = React.useState<TableScrollState>(calculateScrollState(elRef));\n\n function onScroll(): void {\n setScrollState(calculateScrollState(elRef));\n }\n\n function scroll(scrollBy: number): void {\n elRef.current?.scrollBy({ left: scrollBy, top: 0, behavior: 'smooth' });\n }\n\n const throttledOnScroll = FunctionHelper.throttle(onScroll, 200);\n\n const ref = React.useCallback((el: HTMLDivElement) => {\n if (elRef.current) {\n elRef.current?.removeEventListener('scroll', throttledOnScroll);\n }\n\n if (el) {\n setScrollState(calculateScrollState(elRef));\n el.addEventListener('scroll', throttledOnScroll);\n }\n\n elRef.current = el;\n }, []);\n\n React.useEffect(() => {\n if (elRef?.current) {\n setScrollState(calculateScrollState(elRef));\n }\n }, [elRef]);\n\n return { ref, scrollState, scroll };\n}","// extracted by mini-css-extract-plugin\nexport default {\"sortIndicator\":\"gFhu0\",\"scrollContainer\":\"sWUp9\",\"scrollbarTrack\":\"Vn2qM\"};","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\nimport {\n Cell,\n Column as BaseColumn,\n HeaderGroup,\n HeaderProps as BaseHeaderProps,\n IdType,\n Row,\n SortingRule,\n TableOptions,\n TableRowProps,\n useTable } from 'react-table';\nimport { DragEndEvent } from '@dnd-kit/core';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SortableContainerWrapper } from 'libs/shared/components/sortable/SortableContainerWrapper';\nimport { PropsWithSortableItemProps, SortableItemWrapper } from 'libs/shared/components/sortable/SortableItemWrapper';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { WidgetButton, WidgetButtonDirection } from 'libs/shared/components/widgets/widget-button/WidgetButton';\nimport { DragOverlayStyles } from 'libs/shared/constants/DragOverlayStyles';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { getPlugins, getSelectedRowIds, useTableScroll } from './TableUtils';\n\nimport styles from './table.scss';\n\nexport interface TableTheme {\n table?: string;\n header?: string;\n headerRow?: string;\n headerCell?: string;\n body?: string;\n row?: string | ((row: Row<any>) => string);\n selectedRow?: string;\n cell?: string | ((row?: Row<any>, cell?: Cell<any, any>) => string);\n sortIndicator?: string;\n}\n\nexport type HeaderProps<T extends HashObject> = BaseHeaderProps<T> & {\n renderSortIndicator: () => void;\n}\n\nexport type Column<T extends HashObject> = BaseColumn<T> & {\n hideSortIndicator?: boolean;\n}\n\ninterface SortIndicatorProps<T extends HashObject> {\n column: HeaderGroup<T>;\n theme?: TableTheme;\n}\n\nfunction SortIndicator<T extends HashObject>(props: SortIndicatorProps<T>): JSX.Element {\n if (!props.column.canSort)\n return <></>;\n\n return (\n <span\n className={\n `${styles.sortIndicator}\n ${!props.column.isSorted ? 'text-secondary' : ''}\n ${props.theme?.sortIndicator ?? ''}`\n }\n >\n <SvgContainer\n svgName={(props.column.isSortedDesc || !props.column.isSorted)\n ? cvSvgLibrary.ArrowRight\n : cvSvgLibrary.ArrowLeft\n }\n size={SvgContainerSize.Small}\n />\n </span>\n );\n}\n\ninterface BaseTableProps<T extends HashObject> {\n /**\n * Must be memoized.\n */\n data: T[];\n\n /**\n * Must be memoized.\n * \n * For documentation on Column Options, see https://react-table.tanstack.com/docs/api/useTable#column-options\n */\n columns: Column<T>[];\n\n theme?: TableTheme;\n\n onSelectRow?: (row: Row<T>) => void;\n\n onSelectCell?: (cell: Cell<T>) => void;\n\n onRowMouseOver?: (row: Row<T>) => void;\n\n onRowMouseLeave?: (row: Row<T>) => void;\n\n allowSelectMultipleRows?: boolean;\n\n initialSelectedRowIds?: string[];\n\n getRowId?: (row: T) => string;\n\n getRowAppLink?: (row: Row<T>) => Core.AppLink;\n\n enableSort?: boolean;\n\n manualSort?: boolean;\n\n onSort?: (sortingRule: SortingRule<T>[]) => void;\n \n // Opt-in to utilise react-table's useFilter hook.\n allowFiltering?: boolean;\n\n // Opt-in to utilise react-table's useGlobalFilter hook.\n allowGlobalFiltering?: boolean;\n\n // Use either a flex layout or a block layout. Default is flex.\n layout?: 'flex' | 'block';\n\n // Used by useGlobalFilter hook, needs to be enabled by prop above.\n globalFilter?: string;\n\n // Set initial state of hidden columns in react-table.\n hiddenColumns?: IdType<T>[];\n\n // Determine whether hidden columns should be preserved on a table update event.\n autoResetHiddenColumns?: boolean;\n\n // Determine whether sort order state should be preserved on a table update event.\n autoResetSortBy?: boolean;\n\n // Determine whether rows are sortable by drag and drop\n enableSortableRows?: boolean;\n\n onSortingRowsEnd?: (event: DragEndEvent) => void;\n\n // Set initial state of sorting in react-table\n initialSortBy?: SortingRule<T>[];\n\n emptyState?: JSX.Element;\n}\n \ntype SortableRowProps = PropsWithSortableItemProps<TableRowProps>;\n\nfunction BaseTable<T extends HashObject>(props: BaseTableProps<T>): JSX.Element {\n const tableOptions: TableOptions<T> = {\n columns: props.columns,\n data: props.data,\n disableSortBy: !props.enableSort,\n manualSortBy: props.manualSort,\n autoResetHiddenColumns: props.autoResetHiddenColumns,\n autoResetSortBy: props.autoResetSortBy,\n initialState: {\n sortBy: props.initialSortBy || []\n }\n };\n\n if (props.initialSelectedRowIds)\n tableOptions.initialState = { selectedRowIds: getSelectedRowIds(props.initialSelectedRowIds) };\n\n if (props.getRowId)\n tableOptions.getRowId = props.getRowId;\n\n const {\n getTableProps,\n getTableBodyProps,\n headerGroups,\n rows,\n prepareRow,\n toggleAllRowsSelected,\n setGlobalFilter,\n setHiddenColumns,\n state: { sortBy }\n } = useTable<T>(tableOptions, ...getPlugins<T>({ ...props }));\n\n function getTableRowsClass(row: Row<T>) {\n let className = FunctionHelper.isFunction(props.theme?.row)\n ? props.theme.row(row)\n : props.theme?.row ?? '';\n\n if (row.isSelected && props.theme?.selectedRow)\n className += ` ${props.theme?.selectedRow}`;\n\n if (props.onSelectRow)\n className += ' cursor-pointer';\n\n if (props.enableSortableRows)\n className += ' cursor-grab';\n\n return className;\n }\n\n function renderTableRows() {\n if (!rows.length && props.emptyState)\n return props.emptyState;\n \n return rows.map(row => {\n prepareRow(row);\n \n const className = getTableRowsClass(row);\n const rowAppLink = !!props.getRowAppLink && props.getRowAppLink(row);\n\n function onClickRow(): void {\n if (!props.onSelectRow)\n return;\n\n if (!props.allowSelectMultipleRows)\n toggleAllRowsSelected(false);\n \n props.onSelectRow(row);\n row.toggleRowSelected(true);\n }\n\n function getSortableProps(props: TableRowProps | PropsWithSortableItemProps<TableRowProps>, ref?: any) {\n if ('dragAttributes' in props && 'dragListeners' in props) {\n return {\n ...props.dragAttributes,\n ...props.dragListeners,\n 'aria-roledescription': 'Sortable row',\n ref\n };\n }\n\n return {};\n }\n\n function renderRow(props: TableRowProps | PropsWithSortableItemProps<TableRowProps>, ref?: any): JSX.Element {\n const sortableProps = getSortableProps(props, ref);\n\n if (rowAppLink) {\n return (\n <div\n role='row'\n key={row.id}\n >\n <AppLink\n {...props}\n {...sortableProps}\n className={className}\n appLink={rowAppLink}\n >\n {renderCells(row)}\n </AppLink>\n </div>\n );\n }\n\n return (\n <div\n {...props}\n {...sortableProps}\n key={row.id}\n role='row'\n className={className}\n onClick={onClickRow}\n >\n {renderCells(row)}\n </div>\n );\n }\n\n const rowProps = row.getRowProps();\n\n if (props.enableSortableRows) {\n return (\n <SortableItemWrapper\n id={row.original.id}\n key={row.id}\n childProps={rowProps}\n childComponent={React.forwardRef(\n (props: SortableRowProps, ref: React.LegacyRef<HTMLDivElement>) => (renderRow(props, ref))\n )}\n />\n );\n }\n\n return renderRow(rowProps);\n });\n }\n\n function getDragOverlayClassName(theme: TableTheme): string {\n let className = 'g-0 ';\n\n if (theme)\n className += theme.row;\n\n return className;\n }\n\n function getDragOverlay(id: string) {\n const rowIndex = rows.findIndex(item => item.original.id === id);\n const row = rows[rowIndex];\n \n return (\n <div\n {...props}\n className={getDragOverlayClassName(props.theme)}\n style={DragOverlayStyles}\n >\n {renderCells(row)}\n </div>\n );\n }\n\n function getCellClassName(row: Row<T>, cell: Cell<T>): string {\n let cellClassName = '';\n\n if (typeof props.theme?.cell === 'function')\n cellClassName = props.theme.cell(row, cell);\n\n if (typeof props.theme?.cell === 'string')\n cellClassName = props.theme.cell;\n\n if (props.onSelectCell)\n cellClassName += ' cursor-pointer';\n\n return cellClassName;\n }\n\n function renderCells(row: Row<T>): JSX.Element[] {\n return row.cells.map(cell => {\n const cellClassName = getCellClassName(row, cell);\n\n function onClickCell(): void {\n props.onSelectCell && props.onSelectCell(cell);\n }\n\n return (\n <div key={cell.column.id} {...cell.getCellProps()} className={cellClassName} onClick={onClickCell} >\n {cell.render('Cell')}\n </div>\n );\n });\n }\n\n React.useEffect(() => {\n if (!props.onSort)\n return;\n\n props.onSort(sortBy);\n }, [sortBy]);\n\n React.useEffect(() => {\n if (!props.globalFilter)\n return;\n\n setGlobalFilter(props.globalFilter);\n }, [props.globalFilter]);\n\n React.useEffect(() => {\n if (!props.hiddenColumns)\n return;\n\n setHiddenColumns(props.hiddenColumns);\n }, [props.hiddenColumns && props.hiddenColumns.length]);\n\n return (\n <div {...getTableProps()} className={props.theme?.table ?? ''}>\n <div className={props.theme?.header ?? ''}>\n {headerGroups.map(headerGroup => (\n <div {...headerGroup.getHeaderGroupProps()} className={props.theme?.headerRow ?? ''}>\n {headerGroup.headers.map(column => (\n <div {...column.getHeaderProps(column.getSortByToggleProps())} className={props.theme?.headerCell ?? ''}>\n {column.render('Header', { renderSortIndicator: () => <SortIndicator column={column} theme={props.theme} /> })}\n {!(column as Column<T>).hideSortIndicator &&\n <SortIndicator column={column} theme={props.theme} />\n }\n </div>\n ))}\n </div>\n ))}\n </div>\n <div {...getTableBodyProps()} className={props.theme?.body ?? ''}>\n { props.enableSortableRows ? (\n <SortableContainerWrapper\n ids={rows.map(row => row.original.id)}\n getDragOverlay={getDragOverlay}\n onSortEnd={props.onSortingRowsEnd}\n >\n {renderTableRows()}\n </SortableContainerWrapper>\n ) : (\n renderTableRows()\n )}\n </div>\n </div>\n );\n}\n\ninterface TableProps<T extends HashObject> extends BaseTableProps<T> {\n enableSlider?: boolean;\n scrollIncrement?: number;\n scrollContainerClassName?: string;\n scrollable?: boolean;\n initialSortBy?: SortingRule<T>[];\n}\n\nTable.defaultProps = {\n scrollIncrement: 250,\n scrollable: false,\n layout: 'flex'\n};\n\nexport function Table<T extends HashObject>(props: TableProps<T>): JSX.Element {\n const { enableSlider, scrollIncrement, scrollable, ...tableProps } = props;\n\n const { ref, scrollState, scroll } = useTableScroll();\n\n if (scrollable) {\n return (\n <Scrollbars\n renderTrackHorizontal={() => <div className={styles.scrollbarTrack} />}\n autoHeightMax={10000}\n autoHeight\n >\n <BaseTable {...tableProps} />\n </Scrollbars>\n );\n }\n\n if (!enableSlider)\n return <BaseTable {...tableProps} />;\n\n function onClickScroll(direction: 'left' | 'right'): void {\n scroll(scrollIncrement * (direction === 'right' ? 1 : -1));\n }\n\n return (\n <div className='mx-n4 overflow-x-hidden overflow-y-hidden'>\n <div className='px-4'>\n <div className='position-relative'>\n <WidgetButton\n direction={WidgetButtonDirection.Left}\n onClick={() => onClickScroll('left')}\n hide={!scrollState.canScrollLeft}\n />\n <div className={`${styles.scrollContainer} ${props.scrollContainerClassName}`} ref={ref}>\n <BaseTable {...tableProps } />\n </div>\n <WidgetButton\n direction={WidgetButtonDirection.Right}\n onClick={() => onClickScroll('right')}\n hide={!scrollState.canScrollRight}\n />\n </div>\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"heatMap\":\"rwDjh\",\"avatarContainer\":\"kW4ZM\"};","import React from 'react';\nimport { Column, ColumnInstance, Row } from 'react-table';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EngagementHeatMap } from 'libs/shared/apps/analytics/components/engagement-heat-map/EngagementHeatMap';\nimport { anonymiseUserName } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { PercentageIndicator, PercentageIndicatorLayout } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { Engagement } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './engagement-table.scss';\n\nconst namespace = 'shared.engagementTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst EMPTY_ENGAGEMENT: Partial<Engagement> = {\n heatMap: [],\n engagementRate: 0,\n viewCount: 0\n};\n\ninterface CellWrapperProps {\n className?: string;\n}\n\nfunction CellWrapper(props: React.PropsWithChildren<CellWrapperProps>): JSX.Element {\n return (\n <div className={`${props.className ?? ''}`}>\n {props.children}\n </div>\n );\n}\n\ninterface HeaderCellProps {\n column: ColumnInstance<EngagementTableData>;\n phraseKey: string;\n}\n\nfunction HeaderCell(props: HeaderCellProps): JSX.Element {\n return (\n <CellWrapper className={`d-inline-block ${props.column.isSorted ? 'fw-bold' : ''}`}>\n {getPhrase(props.phraseKey)}\n </CellWrapper>\n );\n}\n\nexport interface EngagementTableData extends Engagement {\n user: AnonUser;\n}\n\nfunction getMaxHeatMapValue(engagement: Engagement[]): number {\n let max = 0;\n\n engagement.forEach(e => {\n const localMax = Math.max(...e.heatMap);\n\n if (localMax > max)\n max = localMax;\n });\n\n return max;\n}\n\nfunction getUsersName(user: AnonUser, anonymiseUsers: boolean) {\n const fullName = anonymiseUserName(user, anonymiseUsers);\n const nameParts = fullName.split(' ').filter(n => !!n);\n\n return {\n name: nameParts[0],\n surname: nameParts.slice(1).join(' ')\n };\n}\n\ninterface EngagementColumnProps {\n engagement: Engagement[],\n imageCdnUrl: string;\n anonymiseUsers: boolean;\n}\n\nexport function useGetColumns(props: EngagementColumnProps): Column<EngagementTableData>[] {\n return React.useMemo(() => {\n const maxHeatMapValue = getMaxHeatMapValue(props.engagement);\n\n return [\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='name' />,\n width: 22,\n accessor: 'user',\n sortType: (rowA: Row<EngagementTableData>, rowB: Row<EngagementTableData>) => {\n const nameA = anonymiseUserName(rowA.values.user, props.anonymiseUsers);\n const nameB = anonymiseUserName(rowB.values.user, props.anonymiseUsers);\n\n return nameA > nameB ? 1 : -1;\n },\n Cell: ({ value }) => {\n const { name, surname } = getUsersName(value, props.anonymiseUsers);\n return (\n <CellWrapper className='d-flex align-items-center h-100'>\n <span className={styles.avatarContainer}>\n <Avatar\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(name, surname)}\n imageUrl={!props.anonymiseUsers && value?.avatar?.url}\n showAnonymousUser={!props.anonymiseUsers && (!value || !!value.sessionId)}\n />\n </span>\n <span className={'ms-2 clamp-1'}>\n {name} {surname}\n </span>\n </CellWrapper>\n );\n }\n },\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='views' />,\n accessor: 'viewCount',\n width: 15,\n sortType: 'basic', // Default is 'alphanumeric' which would treat the numbers as strings\n sortDescFirst: true,\n Cell: ({ value }) => (\n <CellWrapper className='d-flex align-items-center h-100'>\n <div>{value}</div>\n </CellWrapper>\n )\n },\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='engagement' />,\n accessor: 'engagementRate',\n width: 20,\n sortType: 'basic', // Default is 'alphanumeric' which would treat the numbers as strings\n sortDescFirst: true,\n Cell: ({ value }) => (\n <CellWrapper className='w-33'>\n <PercentageIndicator\n percentage={value}\n layout={PercentageIndicatorLayout.LabelBefore}\n />\n </CellWrapper>\n )\n },\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='heatMap' />,\n accessor: 'heatMap',\n width: 48,\n disableSortBy: true,\n Cell: ({ row: { original } }) => (\n <CellWrapper className='d-flex align-items-center h-100'>\n <EngagementHeatMap\n engagement={original}\n max={maxHeatMapValue}\n className={`${styles.heatMap} flex-grow-1`}\n />\n </CellWrapper>\n )\n }\n ];\n }, [props.anonymiseUsers]);\n}\n\nexport function useGetTableData(\n engagement: Engagement[],\n users: AnonUser[],\n classroomStudents?: AnonUser[]\n): EngagementTableData[] {\n return React.useMemo(() => {\n if (!engagement?.length)\n return [];\n\n const data: EngagementTableData[] = [];\n\n const userIdSet = new Set<string>();\n engagement.forEach(e => {\n const user = users?.find(u => {\n if (u.id && u.id === e.userId) {\n userIdSet.add(u.id);\n return true;\n }\n\n if (u.sessionId && u.sessionId === e.sessionId)\n return true;\n\n return false;\n });\n\n data.push({ ...e, user });\n });\n\n if (classroomStudents?.length) {\n const students = classroomStudents\n .filter(s => !userIdSet.has(s.id))\n .map(user => ({ ...EMPTY_ENGAGEMENT, user } as EngagementTableData));\n data.push(...students);\n }\n\n return data;\n }, [users?.length]);\n}","import React from 'react';\n\nimport { Table, TableTheme } from 'libs/shared/components/table/Table';\nimport { Engagement } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport { useGetColumns, useGetTableData } from './EngagementTableUtils';\n\nconst theme: TableTheme = {\n table: 'bg-white rounded px-0',\n header: 'border-bottom',\n headerCell: 'm-3',\n cell: 'mx-3 my-2'\n};\n\ninterface EngagementTableProps {\n engagement: Engagement[];\n imageCdnUrl: string;\n users?: AnonUser[];\n classroomStudents?: AnonUser[];\n anonymiseUsers: boolean;\n border?: boolean;\n enableSort?: boolean;\n}\n\nexport function EngagementTable(props: EngagementTableProps): JSX.Element {\n const columns = useGetColumns({\n engagement: props.engagement,\n imageCdnUrl: props.imageCdnUrl,\n anonymiseUsers: props.anonymiseUsers\n });\n\n const data = useGetTableData(props.engagement, props.users, props.classroomStudents);\n\n if (!data.length)\n return <></>;\n\n return (\n <Table\n columns={columns}\n data={data}\n theme={{\n ...theme,\n table: props.border ? `${theme.table} border` : theme.table\n }}\n enableSort={props.enableSort}\n />\n );\n}","import React from 'react';\n\nimport { PercentageIndicator, PercentageIndicatorLayout } from './PercentageIndicator';\n\ninterface PartialPercentageIndicatorProps {\n layout: PercentageIndicatorLayout;\n className?: string;\n}\n\nexport function PartialPercentageIndicator(props: PartialPercentageIndicatorProps): JSX.Element {\n return (\n <PercentageIndicator\n layout={props.layout}\n className={props.className}\n percentage={0}\n customLabel='--%'\n />\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { getEngagementRate } from 'libs/shared/apps/analytics/utils/EngagementUtils';\nimport { PartialPercentageIndicator } from 'libs/shared/components/percentage-indicator/PartialPercentageIndicator';\nimport { PercentageIndicator, PercentageIndicatorLayout } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Engagement } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.insightAmountWatched';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightAmountWatchedProps {\n engagement: Engagement[];\n}\n\nexport function InsightAmountWatched(props: InsightAmountWatchedProps) {\n const engagementRate = getEngagementRate(props.engagement);\n const percentage = Math.round(engagementRate * 100);\n\n return (\n <InsightCard\n title={getPhrase('title')}\n svgName={cvSvgLibrary.Timer}\n svgClassName='bg-light-green text-green'\n >\n <div className='d-flex flex-column align-items-center my-auto gap-2'>\n {!!props.engagement &&\n <>\n <PercentageIndicator\n percentage={engagementRate}\n layout={PercentageIndicatorLayout.LabelInside}\n />\n <p className='text-center'>\n {typeof engagementRate === 'number'\n ? <Text namespace={namespace} phrase='everyoneWatched' options={{ percentage }} />\n : <Text namespace={namespace} phrase='notWatched' />\n }\n </p>\n </>\n }\n {!props.engagement &&\n <>\n <PartialPercentageIndicator layout={PercentageIndicatorLayout.LabelInside} />\n </>\n }\n </div>\n </InsightCard>\n );\n}","const CHART_COLOURS = [\n '#FF9300', // Pizazz\n '#38A2E8', // Picton Blue\n '#7A76E8', // Portage\n '#B679C7', // East Side\n '#F7847B', // Froly\n '#D9584F', // Red (Not in the Primary palette)\n '#FFCD52', // Yellow (Not in the Primary Palette)\n '#5DC786', // Emerald\n '#40BCC3', // Perolous\n '#40C2BB' // Puerto rico\n];\n\nexport function mixinSeriesColours<T>(data: T[]): T[] {\n return data.map((d, idx) => ({\n ...d,\n color: CHART_COLOURS[idx % CHART_COLOURS.length]\n }));\n}","import React from 'react';\nimport Highcharts from 'highcharts';\nimport HighchartsReact from 'highcharts-react-official';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { CHART_FONT_STYLES } from 'libs/shared/apps/analytics/constants/ChartStyles';\nimport { VideoViewEventResponse } from 'libs/shared/apps/analytics/interfaces/VideoViewEvent';\nimport { getTotalEventCount, groupEvents, sortByYearGroup } from 'libs/shared/apps/analytics/utils/SharedUserActivityPieChartUtils';\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.insightTotalViews';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst STATIC_CHART_OPTIONS: Highcharts.Options = {\n title: {\n text: null\n },\n credits: {\n enabled: false\n },\n chart: {\n backgroundColor: 'transparent',\n spacing: [ 0, 0, 0, 0 ]\n },\n legend: {\n itemStyle: CHART_FONT_STYLES,\n itemDistance: 8\n },\n plotOptions: {\n pie: {\n allowPointSelect: true,\n cursor: 'pointer',\n dataLabels: {\n enabled: false\n },\n showInLegend: true,\n borderWidth: 0,\n size: '80%'\n }\n }\n};\n\ninterface InsightTotalViewsProps {\n events: VideoViewEventResponse;\n emptyStateImage: string;\n}\n\nexport function InsightTotalViews(props: InsightTotalViewsProps) {\n const chartData = sortByYearGroup(groupEvents(props.events, 'yearGroupCount', []));\n const totalViews = getTotalEventCount(chartData);\n\n function getChartOptions(\n data: Highcharts.PointOptionsObject[]\n ): Highcharts.Options {\n return {\n ...STATIC_CHART_OPTIONS,\n series: [{\n type: 'pie',\n name: getPhrase('title'),\n data\n }]\n };\n }\n\n return (\n <InsightCard\n title={getPhrase('title')}\n // Replace with ultra marine + light colour\n svgClassName='bg-light-blue text-blue'\n // Add visibility icon \n svgName={cvSvgLibrary.VisibleOn}\n >\n {chartData?.length ? (\n <>\n <p className='mb-0'><Text namespace={namespace} phrase='totalViews' options={{ totalViews }} /></p>\n\n <div className='d-flex justify-content-center h-75'>\n <HighchartsReact\n highcharts={Highcharts}\n options={getChartOptions(chartData)}\n containerProps={{\n className: `w-100`\n }}\n />\n </div>\n </>\n ) : (\n <EmptyState className='pt-0 my-auto'>\n <EmptyState.Image src={props.emptyStateImage} className='w-75 h-auto'></EmptyState.Image>\n <EmptyState.Heading className='h4'><Text namespace={namespace} phrase='noViews' /></EmptyState.Heading>\n <EmptyState.Info className='w-100'><Text namespace={namespace} phrase='notWatched' /></EmptyState.Info>\n </EmptyState>\n )}\n </InsightCard>\n );\n}","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { BaseAnalyticsEventResponse, GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { UnionEventResponse } from 'libs/shared/apps/analytics/interfaces/UnionEvent';\nimport { VideoViewEventResponse } from 'libs/shared/apps/analytics/interfaces/VideoViewEvent';\nimport { mixinSeriesColours } from 'libs/shared/apps/analytics/utils/ChartColourUtils';\n\ntype EventResponseGroupByAttributes = keyof Pick<VideoViewEventResponse, 'contentTypeCount'>\n | keyof Pick<BaseAnalyticsEventResponse, 'userTypeCount' | 'yearGroupCount'>;\n\nexport function groupEvents(\n events: UnionEventResponse,\n groupBy: EventResponseGroupByAttributes,\n groupsToOmit?: string[],\n getSeriesName?: (group: string) => string\n): Highcharts.PointOptionsObject[] {\n const groups: HashObject<number> = {};\n\n const eventCounts = events[groupBy as keyof UnionEventResponse] as GroupedAnalyticsCount[];\n\n eventCounts?.forEach(ev => {\n const name = ev.name || 'Unknown';\n\n if (!name || groupsToOmit?.includes(name.toLowerCase()))\n return;\n\n groups[name] = groups[name] ?? 0;\n groups[name] += ev.count;\n });\n\n return mixinSeriesColours(ArrayHelper.sortBy(Object.keys(groups).map(group => ({\n name: getSeriesName ? getSeriesName(group) : group,\n y: groups[group],\n type: 'pie'\n })), 'name'));\n}\n\nexport function sortByYearGroup(data: Highcharts.PointOptionsObject[]) {\n const staffIndex = data.findIndex(group => group.name === 'Staff');\n\n // Move Staff to last index\n if (staffIndex > -1) {\n const [staffObject] = data.splice(staffIndex, 1);\n\n data.push(staffObject);\n }\n return data.sort((a, b) => {\n const numA = parseInt((a.name as string).match(/\\d+/)?.[0]);\n const numB = parseInt((b.name as string).match(/\\d+/)?.[0]);\n return numA - numB;\n });\n}\n\nexport function getTotalEventCount(data?: Highcharts.PointOptionsObject[]): number | null {\n return data?.reduce((a, b) => a + b.y, 0) ?? null;\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialInsights\":\"nKLWa\",\"videoContainer\":\"WF2iA\"};","import React from 'react';\n\nimport styles from './partial-insights-heatmap.scss';\n\nexport function PartialInsightsHeatmap() {\n return (\n <div>\n <div className='row g-3 mb-3'>\n <div className='col'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n <div className='col'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n <div className={styles.videoContainer}>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n </div>\n\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 videojs, { VideoJsPlayer } from 'video.js';\n\nconst MenuItem = videojs.getComponent('MenuItem');\n\ninterface EngagementOverlayMenuItemOptions extends videojs.MenuItemOptions {\n overlayVisible: boolean\n}\n\nexport class EngagementOverlayMenuItem extends MenuItem {\n private toggleEl: Element;\n private overlayVisible: boolean;\n\n /**\n * Because we want to bind our listener in createEl\n * and createEl runs in super. We store if we've bounud\n * our handler, so we only call bind once and \n * the call to removeEventListener will still work\n */\n private handlerBound: boolean;\n\n constructor(player: VideoJsPlayer, options: EngagementOverlayMenuItemOptions) {\n super(player, options);\n\n this.overlayVisible = options.overlayVisible;\n this.toggle(this.overlayVisible);\n }\n\n public handleToggle(): void {\n this.toggle(!this.overlayVisible);\n }\n\n private toggle(state: boolean): void {\n state ? this.toggleOn() : this.toggleOff();\n }\n\n private toggleOn(): void {\n videojs.dom.addClass(this.toggleEl, 'on');\n this.overlayVisible = true;\n this.player().engagementOverlayPlugin().toggleOverlay(this.overlayVisible);\n this.player().addClass('cv-reports-player-overlay-visible');\n }\n\n private toggleOff(): void {\n videojs.dom.removeClass(this.toggleEl, 'on');\n this.overlayVisible = false;\n this.player().engagementOverlayPlugin().toggleOverlay(this.overlayVisible);\n this.player().removeClass('cv-reports-player-overlay-visible');\n }\n\n /**\n * Because we extend MenuItem which will close the menu by default\n * we need to halt the event propogation here\n */\n public handleClick(event: videojs.EventTarget.Event): void {\n event.stopImmediatePropagation();\n }\n\n public createEl(tagName?: string, properties?: any, attributes?: any): HTMLLIElement {\n /**\n * Bind our event listener only once\n * see the comment where handlerBound is defined\n */\n if (!this.handlerBound) {\n this.handleToggle = this.handleToggle.bind(this);\n this.handlerBound = true;\n }\n\n if (this.toggleEl)\n this.toggleEl.removeEventListener('click', this.handleToggle);\n\n this.toggleEl = videojs.dom.createEl('div', {\n className: `custom-toggle custom-toggle-info toggle-option float-end`,\n innerHTML: '<span class=\"handle\"></span></div>'\n });\n this.toggleEl.addEventListener('click', this.handleToggle);\n\n const innerHTML = `\n <span class=\"vjs-menu-item-text\">Heat Map</span>\n <span class=\"cv-toggle-container\"></span>`;\n\n const el = super.createEl(tagName, {\n className: 'vjs-menu-item cv-cog-menu-item',\n innerHTML\n }, attributes);\n\n /**\n * Indexing into the child this way is only safe to do because\n * we know that the el only has two children\n */\n el.children[1].appendChild(this.toggleEl);\n\n return el;\n }\n}\n\nvideojs.registerComponent('EngagementOverlayMenuItem', EngagementOverlayMenuItem);\n","import React from 'react';\n\nimport { InteractionLabel } from 'libs/shared/components/interactive-questions/InteractionLabel';\nimport { Interactive } from 'libs/shared/interfaces';\n\nconst MAX_INTERACTIONS_TO_SHOW = 3;\n\ninterface TimepointInteractionsProps {\n interactive: Interactive;\n time: number;\n}\n\nexport function TimepointInteractions(props: TimepointInteractionsProps): JSX.Element {\n const timepoint = props.interactive.timepoints.find(t => {\n const timepointTime = t.visibleAt / 1000;\n \n return Math.floor(props.time) === Math.floor(timepointTime)\n || Math.ceil(props.time) === Math.ceil(timepointTime);\n });\n\n if (!timepoint?.interactions?.length)\n return <></>;\n\n const interactions = timepoint.interactions.length > MAX_INTERACTIONS_TO_SHOW\n ? timepoint.interactions.slice(0, MAX_INTERACTIONS_TO_SHOW - 1)\n : timepoint.interactions;\n\n const hiddenInteractions = timepoint.interactions.length - interactions.length;\n\n return (\n <div className='d-flex justify-content-end ms-2'>\n {interactions.map((i, idx) => (\n <InteractionLabel\n key={idx}\n interaction={i}\n showQuestion={false}\n iconClassName='ms-1'\n />\n ))}\n {!!hiddenInteractions &&\n <div\n className={'interaction-type-icon d-flex justify-content-center'\n + ' align-items-center border border-dark text-body ms-1'}\n >\n {`+${hiddenInteractions}`}\n </div>\n }\n </div>\n );\n}","import React from 'react';\nimport { renderToStaticMarkup } from 'react-dom/server';\nimport Highcharts from 'highcharts';\n\nimport { Interactive } from 'libs/shared/interfaces';\n\nimport { TimepointInteractions } from 'projects/player/plugins/engagement-overlay-plugin/components/timepoint-interactions/timepoint-interactions';\nimport { formatTime } from 'projects/player/utils/formatTime';\n\nexport const STATIC_CHART_OPTIONS: Highcharts.Options = {\n title: {\n text: null\n },\n xAxis: {\n visible: false,\n minPadding: 0,\n maxPadding: 0\n },\n legend: {\n enabled: false\n },\n credits: {\n enabled: false\n },\n defs: {\n gradient: ({\n tagName: 'linearGradient',\n id: 'area-gradient',\n x1: 0,\n y1: 1,\n x2: 0,\n y2: 0,\n children: [\n ({\n tagName: 'stop',\n offset: 0\n } as Highcharts.ASTNode),\n ({\n tagName: 'stop',\n offset: 1\n } as Highcharts.ASTNode)\n ]\n } as Highcharts.ASTNode)\n }\n};\n\nexport function getChartOptions(width: number, height: number): Highcharts.ChartOptions {\n return {\n styledMode: true,\n spacing: [ 15, 0, 0, 0 ],\n width,\n height\n };\n}\n\nexport function getYAxisChartOptions(heatMap: number[]): Highcharts.YAxisOptions {\n const maxValue = Math.max(...heatMap);\n\n return {\n /**\n * To prevent max values from being cut off, we pad them relative to the chart scale.\n */\n max: maxValue * 1.05,\n min: 0,\n minPadding: 0,\n maxPadding: 0,\n allowDecimals: true,\n startOnTick: false,\n endOnTick: false,\n visible: false\n };\n}\n\nexport function getTooltipOptions(interactive?: Interactive): Highcharts.TooltipOptions {\n return {\n formatter: function () {\n const timepointInteractionsHtml = interactive\n ? getTimepointInteractionsHtml(interactive, this.x)\n : '';\n\n return (\n '<div class=\"cv-engagement-tooltip bg-white rounded\">'\n + '<div class=\"d-flex justify-content-between\">'\n + `<strong>${formatTime(this.x)}</strong>`\n + `${timepointInteractionsHtml}`\n + '</div>'\n + '<div class=\"d-flex justify-content-between rounded bg-light cv-view-count-container\">'\n + `<strong>Views</strong> <span class=\"cv-view-count\">${this.y}</span>`\n + '</div>'\n + '</div>'\n );\n },\n positioner: function (\n labelWidth: number,\n labelHeight: number,\n point: Highcharts.TooltipPositionerPointObject\n ) {\n const minX = 0;\n const maxX = this.chart.plotWidth - labelWidth;\n const x = point.plotX - labelWidth / 2;\n \n return {\n // Clamp x between min and max\n x: Math.min(Math.max(x, minX), maxX),\n y: this.chart.plotTop\n };\n },\n useHTML: true,\n padding: 0\n };\n}\n\nexport function getPlotOptions(moveTimepointIndicator: (x: number | null) => void): Highcharts.PlotOptions {\n return {\n area: {\n point: {\n events: {\n mouseOver: function () {\n moveTimepointIndicator(this.x);\n },\n mouseOut: function () {\n moveTimepointIndicator(null);\n }\n }\n }\n },\n series: {\n marker: {\n enabled: false\n }\n }\n };\n}\n\nfunction getTimepointInteractionsHtml(interactive: Interactive, time: number): string {\n return renderToStaticMarkup(\n <TimepointInteractions time={time} interactive={interactive} />\n );\n}","import Highcharts from 'highcharts';\nimport videojs, { VideoJsPlayer } from 'video.js';\n\nimport { Interactive } from 'libs/shared/interfaces';\n\nimport {\n getChartOptions,\n getPlotOptions,\n getTooltipOptions,\n getYAxisChartOptions,\n STATIC_CHART_OPTIONS\n} from './engagement-overlay-chart-options';\n\nimport './engagement-overlay.scss';\n\nconst Component = videojs.getComponent('Component');\n\nHighcharts.AST.allowedTags.push('g');\nHighcharts.AST.allowedAttributes.push('viewBox', 'transform');\n\ninterface ChartDimensions {\n width: number;\n height: number;\n}\n\ninterface EngagementOverlayOptions extends videojs.ComponentOptions {\n heatMap: number[];\n interactive?: Interactive;\n onTimepointHover?: (time: number | null) => void;\n}\n\nexport class EngagementOverlay extends Component {\n public options_: EngagementOverlayOptions;\n private chart: Highcharts.Chart;\n\n constructor(player: VideoJsPlayer, options: EngagementOverlayOptions) {\n super(player, options);\n\n this.initialize();\n this.bindListeners();\n }\n\n public initialize(): void {\n this.player().ready(() => this.buildChart());\n }\n\n public buildCSSClass(): string {\n return 'cv-engagement-overlay';\n }\n\n public createEl(tagName?: string, properties?: any, attributes?: any): Element {\n const innerHTML = '<div class=\"cv-engagement-chart\"></div>'\n + '<div class=\"cv-engagement-timepoint-indicator\"></div>';\n\n return super.createEl(tagName, {\n ...properties,\n className: this.buildCSSClass(),\n innerHTML\n }, attributes);\n }\n\n public toggleChart(show: boolean): void {\n if (show)\n this.buildChart();\n else\n this.destroyChart();\n }\n\n private bindListeners(): void {\n this.handleClick = this.handleClick.bind(this);\n this.resizeChart = this.resizeChart.bind(this);\n\n this.player().on('playerresize', this.resizeChart);\n\n this.on(this.el(), 'mouseup', this.handleClick);\n\n this.player().on('dispose', () => {\n this.player().off('playerresize', this.resizeChart);\n\n this.off(this.el(), 'mouseup', this.handleClick);\n });\n }\n\n private handleClick(event: videojs.EventTarget.Event): void {\n if (!videojs.dom.isSingleLeftClick(event))\n return;\n\n if (this.player().paused()) {\n this.player().play();\n return;\n }\n\n this.player().pause();\n }\n\n private buildChart(): void {\n if (this.chart)\n return;\n\n const chartDimensions = this.getChartDimensions();\n\n /**\n * The dimensions calculation relies on the control bar and progress control\n * being visible, so if it isn't, we wait for the play event.\n */\n if (!chartDimensions) {\n this.player().one('play', () => this.buildChart());\n return;\n }\n\n const container: HTMLElement = this.el().querySelector('.cv-engagement-chart');\n\n this.chart = Highcharts.chart(container, this.getHighchartOptions(chartDimensions));\n }\n\n private resizeChart(): void {\n const chartDimensions = this.getChartDimensions();\n\n if (!this.chart || !chartDimensions)\n return;\n\n this.chart.setSize(chartDimensions.width, chartDimensions.height);\n }\n\n private destroyChart(): void {\n this.chart?.destroy();\n this.chart = null;\n }\n\n private getChartDimensions(): ChartDimensions {\n const collapserator = this.player().getChild('collapserator');\n const collapseratorHeight = collapserator?.currentHeight();\n\n const width = this.el().clientWidth;\n\n if (!collapseratorHeight || !width)\n return null;\n\n const { height } = this.player().currentDimensions();\n \n return {\n width,\n height: height - collapseratorHeight\n };\n }\n\n private getHighchartOptions({ width, height }: ChartDimensions): Highcharts.Options {\n return {\n ...STATIC_CHART_OPTIONS,\n chart: getChartOptions(width, height),\n yAxis: getYAxisChartOptions(this.options_.heatMap),\n tooltip: getTooltipOptions(this.options_.interactive),\n plotOptions: getPlotOptions(this.moveTimepointIndicator.bind(this)),\n series: [{\n type: 'area',\n data: this.options_.heatMap\n }]\n };\n }\n\n private moveTimepointIndicator(x: number | null): void {\n if (this.options_.onTimepointHover)\n this.options_.onTimepointHover(x);\n\n const indicator: HTMLDivElement = this.el().querySelector('.cv-engagement-timepoint-indicator');\n\n if (x === null) {\n videojs.dom.removeClass(indicator, 'cv-engagement-timepoint-indicator-visible');\n return;\n }\n\n videojs.dom.addClass(indicator, 'cv-engagement-timepoint-indicator-visible');\n indicator.style.left = `${x / this.options_.heatMap.length * 100}%`;\n }\n}\n\nvideojs.registerComponent('EngagementOverlay', EngagementOverlay);","import videojs, { VideoJsPlayer } from 'video.js';\n\nimport { Interactive } from 'libs/shared/interfaces';\n\nimport { CogButton } from 'projects/player/components/cog-button/cog-button';\nimport { EngagementOverlay } from 'projects/player/plugins/engagement-overlay-plugin/components/engagement-overlay/engagement-overlay';\nimport { EngagementOverlayMenuItem } from 'projects/player/plugins/engagement-overlay-plugin/components/engagement-overlay-menu-item/engagement-overlay-menu-item';\n\nimport 'projects/player/plugins/engagement-overlay-plugin/components/engagement-overlay/engagement-overlay';\n\nconst Plugin = videojs.getPlugin('plugin');\n\ninterface EngagementOverlayPluginOptions {\n heatMap: number[];\n interactive?: Interactive;\n onTimepointHover?: (time: number | null) => void;\n}\n\nclass EngagementOverlayPlugin extends Plugin {\n private options: EngagementOverlayPluginOptions;\n\n constructor(player: VideoJsPlayer, options: EngagementOverlayPluginOptions) {\n super(player, options);\n\n this.options = options;\n\n player.ready(() => {\n this.initialize();\n });\n }\n \n private initialize(): void {\n if (!this.hasHeatMapData())\n return;\n\n this.player.addChild('engagementOverlay', {\n heatMap: this.options.heatMap,\n interactive: this.options.interactive,\n onTimepointHover: this.options.onTimepointHover\n });\n\n const cogButton = this.player.getChild('collapserator')?.getChild('cogButton') as CogButton;\n cogButton.addItem({\n index: 0,\n ctor: EngagementOverlayMenuItem,\n name: 'EngagementOverlayMenuItem',\n options: { overlayVisible: true }\n });\n }\n\n public toggleOverlay(show: boolean): void {\n const engagementOverlay = this.player.getChild('engagementOverlay') as EngagementOverlay;\n engagementOverlay?.toggleChart(show);\n }\n\n private hasHeatMapData(): boolean {\n return this.options.heatMap?.reduce((acc, val) => acc + val, 0) > 0;\n }\n}\n\nvideojs.registerPlugin('engagementOverlayPlugin', EngagementOverlayPlugin);\n\ndeclare module 'video.js' {\n export interface VideoJsPlayer {\n engagementOverlayPlugin(options?: EngagementOverlayPluginOptions): EngagementOverlayPlugin;\n }\n}","import videojs, { VideoJsPlayer } from 'video.js';\n\nimport { Interactive } from 'libs/shared/interfaces';\n\nimport { InteractiveBarItems } from 'projects/player/plugins/interactive-plugin/components/seek-bar/interactive-bar-items';\nimport { TrackHelper } from 'projects/player/utils/track-helper';\n\nimport './interactive-plugin-styles.scss';\n\nconst Plugin = videojs.getPlugin('plugin');\n\ninterface InteractiveSeekBarPluginOptions {\n interactive: Interactive;\n}\n\n/**\n * This plugin will just render the interactive seek bar (i.e. just the interaction markers).\n * The user won't be able to interact with any of the interactions.\n * Currently this is just used in reports-player\n */\nclass InteractiveSeekBarPlugin extends Plugin {\n private options: InteractiveSeekBarPluginOptions;\n\n constructor(player: VideoJsPlayer, options: InteractiveSeekBarPluginOptions) {\n super(player);\n\n this.options = options;\n\n this.player.one('loadedmetadata', () => this.player.ready(this.initialize.bind(this)));\n }\n\n private initialize(): void {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n TrackHelper.useMetadataTrack(this.player, 'interactive', this.onTrackLoaded.bind(this));\n\n this.player.addClass('cv-interactive-plugin');\n }\n\n private onTrackLoaded(track: TextTrack): void {\n this.addChildren(track);\n }\n\n private addChildren(track: TextTrack): void {\n const seekBar = this.player.controlBar.getChild('progressControl').getChild('SeekBar');\n\n seekBar.addChild(new InteractiveBarItems(this.player, {\n interactive: this.options.interactive,\n track\n }));\n }\n}\n\nvideojs.registerPlugin('interactiveSeekBarPlugin', InteractiveSeekBarPlugin);\n\ndeclare module 'video.js' {\n export interface VideoJsPlayer {\n interactiveSeekBarPlugin(options?: InteractiveSeekBarPluginOptions): InteractiveSeekBarPlugin;\n }\n}","import { Interactive } from 'libs/shared/interfaces';\n\nimport { ClipData } from 'projects/player/interfaces/models/ClipData';\nimport { PlaybackObject } from 'projects/player/interfaces/models/PlaybackObject';\nimport { BasePlayer, BasePlayerOptions } from 'projects/player/players/base-player';\nimport { AnalyticsPlayerType } from 'projects/player/services/analytics-service';\nimport { InteractiveTrackHelper } from 'projects/player/utils/interactive-track-helper';\n\nimport './reports-player.scss';\n\nimport 'projects/player/plugins/engagement-overlay-plugin/engagement-overlay-plugin';\nimport 'projects/player/plugins/clip-plugin/clip-plugin';\nimport 'projects/player/plugins/interactive-plugin/interactive-seek-bar-plugin';\n\nexport interface ReportsPlayerOptions extends BasePlayerOptions {\n heatMap: number[];\n onTimepointHover?: (time: number | null) => void;\n}\n\nexport class ReportsPlayer extends BasePlayer {\n protected options: ReportsPlayerOptions;\n private track: TextTrack;\n\n constructor(id: string | Element, options: ReportsPlayerOptions) {\n super(id, options);\n }\n\n protected getPlayerClassName(): string {\n return 'cv-reports-player';\n }\n\n protected getAnalyticsPlayerType(): AnalyticsPlayerType {\n return 'reports-player';\n }\n\n protected async additionalSetup(playbackObject: PlaybackObject): Promise<void> {\n super.additionalSetup(playbackObject);\n\n this.setupEngagementOverlayPlugin(playbackObject);\n this.setupUpClipPlugin(playbackObject);\n this.setupInteractiveSeekBarPlugin(playbackObject);\n }\n\n private setupEngagementOverlayPlugin(playbackObject: PlaybackObject): void {\n this.player.engagementOverlayPlugin({\n heatMap: this.options.heatMap,\n interactive: playbackObject.additionalData?.interactive as Interactive,\n onTimepointHover: this.options.onTimepointHover\n });\n }\n\n private setupUpClipPlugin(playbackObject: PlaybackObject): void {\n const isClip = playbackObject.mediaType === 'MasterClip';\n const isInteractive = playbackObject.mediaType === 'MasterInteractive';\n\n if (!isClip && !isInteractive)\n return;\n\n let clipData: ClipData;\n if (isClip)\n clipData = playbackObject.additionalData;\n \n if (isInteractive) {\n clipData = playbackObject.additionalData?.clipData;\n\n // Not all interactives will have clip data\n if (!clipData)\n return;\n }\n\n if (!clipData)\n throw Error('Invalid clip data');\n\n this.player.clipPlugin({\n startTime: clipData.startTime,\n endTime: clipData.endTime\n });\n }\n\n private setupInteractiveSeekBarPlugin(playbackObject: PlaybackObject): void {\n const interactive = playbackObject.additionalData?.interactive as Interactive;\n\n if (!playbackObject.additionalData?.interactive)\n return;\n\n this.track = InteractiveTrackHelper.getInteractiveTrack(this.player, playbackObject);\n\n this.player.interactiveSeekBarPlugin({ interactive });\n }\n\n protected getSeekBarOptions(): any {\n return {\n ignoreChapters: true\n };\n }\n}\n","import React from 'react';\n\nimport { ReportsPlayer, ReportsPlayerOptions } from 'projects/player/players/reports/reports-player';\n\nexport function ClickViewReportsPlayer(props: ReportsPlayerOptions): React.ReactElement {\n const ref = React.useRef(null);\n const playerRef = React.useRef<ReportsPlayer>(null);\n\n React.useEffect(() => {\n playerRef.current = new ReportsPlayer(ref.current, props);\n }, []);\n\n return (\n <div ref={ref}></div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"playerContainer\":\"fGWsk\",\"playerPlaceholder\":\"v1MjE\",\"heatMap\":\"lp1Yn\",\"heatMapTimepointIndicator\":\"yOOK6\",\"heatMapTimepointIndicatorVisible\":\"rTXmB\",\"partialLoadingContainer\":\"gW1HU\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EngagementHeatMap, EngagementHeatMapLegend } from 'libs/shared/apps/analytics/components/engagement-heat-map/EngagementHeatMap';\nimport { getFullHeatMap } from 'libs/shared/apps/analytics/utils/EngagementUtils';\nimport { Engagement } from 'libs/shared/interfaces';\n\nimport { ClickViewReportsPlayer } from 'projects/player/react/ReportsPlayer';\n\nimport styles from './video-engagement-overlay.scss';\n\nconst namespace = 'shared.videoEngagementOverlay';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface VideoEngagementOverlayProps {\n engagement: Engagement;\n viewKey: string;\n imageCdnUrl: string;\n playerApiUrl: string;\n}\n\nexport function VideoEngagementOverlay(props: VideoEngagementOverlayProps): JSX.Element {\n const timepointIndicatorRef = React.useRef<HTMLDivElement>(null);\n\n const heatMap = getFullHeatMap(props.engagement);\n\n function setHoverTimepoint(time: number | null): void {\n const el = timepointIndicatorRef.current;\n\n if (!el)\n return;\n\n if (time === null) {\n el.classList.remove(styles.heatMapTimepointIndicatorVisible);\n return;\n }\n\n el.classList.add(styles.heatMapTimepointIndicatorVisible);\n el.style.left = `${time / heatMap.length * 100}%`;\n }\n\n return (\n <div className='bg-white border rounded overflow-hidden h-100'>\n <div className='position-relative'>\n {/**\n * The below div is an empty 16:9 rectangle which maintains this component's\n * height while the player is loading.\n */\n }\n <div className={styles.playerPlaceholder} />\n <div className={styles.playerContainer}>\n <ClickViewReportsPlayer\n viewKey={props.viewKey}\n playerApi={new URL(props.playerApiUrl)}\n hotkeyElQuerySelector='body'\n heatMap={heatMap}\n onTimepointHover={setHoverTimepoint}\n aspectRatio='16:9'\n />\n </div>\n </div>\n <div className='p-3'>\n <div className='position-relative'>\n <EngagementHeatMap\n engagement={props.engagement}\n className={styles.heatMap}\n />\n <div ref={timepointIndicatorRef} className={styles.heatMapTimepointIndicator} />\n </div>\n <div className='d-flex justify-content-between mt-2'>\n <strong>\n {getPhrase('heatmap')}\n </strong>\n <div className='w-33'>\n <EngagementHeatMapLegend />\n </div>\n </div>\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"videoContainer\":\"cpl68\"};","import React from 'react';\n\nimport { EngagementTable } from 'libs/shared/apps/analytics/components/engagement-table/EngagementTable';\nimport { InsightAmountWatched } from 'libs/shared/apps/analytics/components/insights/amount-watched/InsightAmountWatched';\nimport { InsightTotalViews } from 'libs/shared/apps/analytics/components/insights/total-views/InsightTotalViews';\nimport { GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { VideoViewEventResponse } from 'libs/shared/apps/analytics/interfaces/VideoViewEvent';\nimport { Config, Engagement, PlayerViewKey } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { PartialInsightsHeatmap } from 'apps/my-shares/components/insights-heatmap/partial-loading/PartialInsightsHeatmap';\nimport { VideoEngagementOverlay } from 'apps/my-shares/components/video-engagement-overlay/VideoEngagementOverlay';\n\nimport styles from './insights-heatmap.scss';\n\ninterface InsightsHeatmapProps {\n hasDataLoaded: boolean;\n tableDataLoaded: boolean;\n yearGroups: GroupedAnalyticsCount[];\n aggregateEngagement: Engagement;\n individualEngagement: Engagement[];\n viewKey: PlayerViewKey;\n config: Config;\n users: AnonUser[];\n classroomStudents?: AnonUser[];\n anonymiseUsers: boolean;\n}\n\nexport function InsightsHeatmap(props: InsightsHeatmapProps) {\n return (\n <>\n {!props.hasDataLoaded && <PartialInsightsHeatmap />}\n\n <div className='row g-3 mb-3'>\n {props.hasDataLoaded &&\n <>\n <div className='col'>\n <InsightTotalViews\n events={{ yearGroupCount: props.yearGroups } as VideoViewEventResponse}\n emptyStateImage={ImageUrls.EmptyStates.MY_VIDEOS}\n />\n </div>\n <div className='col'>\n <InsightAmountWatched engagement={props.individualEngagement} />\n </div>\n <div className={styles.videoContainer}>\n <VideoEngagementOverlay\n engagement={props.aggregateEngagement}\n viewKey={props.viewKey.viewKey}\n playerApiUrl={props.config.playerApiUrl}\n imageCdnUrl={props.config.imageCdnUrl}\n />\n </div>\n </>\n }\n\n {props.tableDataLoaded &&\n <div className='col-12'>\n <EngagementTable\n engagement={props.individualEngagement}\n users={props.users}\n imageCdnUrl={props.config?.imageCdnUrl}\n anonymiseUsers={props.anonymiseUsers}\n classroomStudents={props.classroomStudents}\n border\n enableSort\n />\n </div>\n }\n </div>\n </>\n );\n}"],"names":["namespace","ZERO_COLOUR","COLOUR_SCALE","LEGEND_VALUES","getBackgroundColor","value","max","hex","getGradient","data","gradient","i","length","previousValue","currentValue","nextValue","push","join","EngagementHeatMapLegend","Math","legendSquareWidthPercentage","className","Text","phrase","map","val","idx","key","style","width","backgroundColor","EngagementHeatMap","props","heatMap","engagement","background","InsightCard","subtitle","svgClassName","SvgContainer","svgName","size","S","title","count","children","CHART_FONT_STYLES","fontSize","fontFamily","fontWeight","color","getFullHeatMap","videoDuration","Array","ceil","fill","t","getEngagementRate","reduce","prev","next","engagementRate","DragOverlayStyles","opacity","cursor","calculateScrollState","ref","canScrollLeft","current","scrollLeft","canScrollRight","scrollWidth","clientWidth","SortIndicator","column","canSort","isSorted","theme","sortIndicator","isSortedDesc","BaseTable","ids","idHash","tableOptions","columns","disableSortBy","enableSort","manualSortBy","manualSort","autoResetHiddenColumns","autoResetSortBy","initialState","sortBy","initialSortBy","initialSelectedRowIds","selectedRowIds","forEach","id","getRowId","useTable","plugins","useSortBy","useRowSelect","layout","useFlexLayout","useBlockLayout","allowFiltering","useFilters","allowGlobalFiltering","useGlobalFilter","getPlugins","getTableProps","getTableBodyProps","headerGroups","rows","prepareRow","toggleAllRowsSelected","setGlobalFilter","setHiddenColumns","state","renderTableRows","emptyState","row","FunctionHelper","isSelected","selectedRow","onSelectRow","enableSortableRows","getTableRowsClass","rowAppLink","getRowAppLink","onClickRow","allowSelectMultipleRows","toggleRowSelected","renderRow","sortableProps","dragAttributes","dragListeners","getSortableProps","role","AppLink","appLink","renderCells","onClick","rowProps","getRowProps","SortableItemWrapper","original","childProps","childComponent","cells","cell","cellClassName","onSelectCell","getCellClassName","getCellProps","render","onSort","globalFilter","hiddenColumns","table","header","headerGroup","getHeaderGroupProps","headerRow","headers","getHeaderProps","getSortByToggleProps","headerCell","renderSortIndicator","hideSortIndicator","body","SortableContainerWrapper","getDragOverlay","rowIndex","findIndex","item","onSortEnd","onSortingRowsEnd","Table","enableSlider","scrollIncrement","scrollable","tableProps","elRef","scrollState","setScrollState","throttledOnScroll","el","removeEventListener","addEventListener","scroll","scrollBy","left","top","behavior","useTableScroll","renderTrackHorizontal","autoHeightMax","autoHeight","onClickScroll","direction","WidgetButton","W","hide","scrollContainerClassName","defaultProps","getPhrase","LanguageService","EMPTY_ENGAGEMENT","viewCount","CellWrapper","HeaderCell","phraseKey","EngagementTable","users","classroomStudents","maxHeatMapValue","e","localMax","Header","accessor","sortType","rowA","rowB","values","user","anonymiseUsers","Cell","nameParts","name","split","filter","n","surname","slice","Avatar","imageCdnUrl","initials","UserHelper","imageUrl","avatar","url","showAnonymousUser","sessionId","sortDescFirst","PercentageIndicator","percentage","useGetColumns","userIdSet","Set","find","u","userId","add","students","s","has","border","PartialPercentageIndicator","customLabel","InsightAmountWatched","round","options","CHART_COLOURS","STATIC_CHART_OPTIONS","text","credits","enabled","chart","spacing","legend","itemStyle","itemDistance","plotOptions","pie","allowPointSelect","dataLabels","showInLegend","borderWidth","InsightTotalViews","events","groupsToOmit","getSeriesName","groups","eventCounts","chartData","staffIndex","group","staffObject","splice","sort","a","b","parseInt","match","sortByYearGroup","ev","includes","toLowerCase","ArrayHelper","Object","keys","y","type","d","totalViews","highcharts","series","getChartOptions","containerProps","EmptyState","src","emptyStateImage","PartialInsightsHeatmap","EngagementOverlayMenuItem","player","overlayVisible","toggle","this","toggleOn","toggleOff","toggleEl","engagementOverlayPlugin","toggleOverlay","addClass","removeClass","event","stopImmediatePropagation","tagName","properties","attributes","handlerBound","handleToggle","bind","innerHTML","appendChild","TimepointInteractions","timepoint","interactive","timepoints","timepointTime","visibleAt","floor","time","interactions","MAX_INTERACTIONS_TO_SHOW","hiddenInteractions","InteractionLabel","interaction","showQuestion","iconClassName","xAxis","visible","minPadding","maxPadding","defs","x1","y1","x2","y2","offset","height","styledMode","Component","EngagementOverlay","initialize","bindListeners","ready","buildChart","buildCSSClass","show","destroyChart","handleClick","resizeChart","on","off","paused","play","pause","chartDimensions","getChartDimensions","container","querySelector","getHighchartOptions","one","setSize","destroy","collapserator","getChild","collapseratorHeight","currentHeight","currentDimensions","moveTimepointIndicator","yAxis","options_","min","allowDecimals","startOnTick","endOnTick","tooltip","formatter","timepointInteractionsHtml","renderToStaticMarkup","getTimepointInteractionsHtml","x","formatTime","positioner","labelWidth","labelHeight","point","maxX","plotWidth","plotX","plotTop","useHTML","padding","area","mouseOver","mouseOut","marker","onTimepointHover","indicator","EngagementOverlayPlugin","hasHeatMapData","addChild","addItem","index","ctor","engagementOverlay","toggleChart","acc","InteractiveSeekBarPlugin","onTrackLoaded","track","addChildren","controlBar","ReportsPlayer","playbackObject","additionalSetup","setupEngagementOverlayPlugin","setupUpClipPlugin","setupInteractiveSeekBarPlugin","additionalData","clipData","isClip","mediaType","isInteractive","Error","clipPlugin","startTime","endTime","interactiveSeekBarPlugin","ignoreChapters","ClickViewReportsPlayer","playerRef","VideoEngagementOverlay","timepointIndicatorRef","viewKey","playerApi","URL","playerApiUrl","hotkeyElQuerySelector","classList","remove","aspectRatio","InsightsHeatmap","hasDataLoaded","yearGroupCount","yearGroups","ImageUrls","individualEngagement","aggregateEngagement","config","tableDataLoaded"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4598],{54405:(e,a,t)=>{t.d(a,{X:()=>n});var n={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}}}},18006:(e,a,t)=>{t.d(a,{c:()=>n,q:()=>i});var n="D8qRe7",i="GRWx6w"},9566:(e,a,t)=>{t.d(a,{G6:()=>m,GJ:()=>v,VE:()=>h});var n=t(23481),i=t(110),r=t(33518),s=t(2510),o=t(4594),c=t(35223),d=t(14070),l=t(97291),u=n.T.encloseNamespace("myShares.demoInsights"),m={type:s.y.Link,privacy:r.e.JustMySchool,objectId:"0",objectTypeId:o.E.Interactive,viewCount:28,accessCount:15,dateCreated:(new Date).toISOString(),expireDate:null,link:{shortenedEmbedUrl:"",shortenedUrl:""},shareId:"0",ownerCustomerId:0,ownerId:0,recipients:[],options:{preventScrubbing:!1,immediateFeedback:!1}},v={share:m,sharedObject:null,shareRecipients:null,dateShared:i.O.subtract(new Date,7,"days").toISOString()},g={application:l.O.MY_SHARES,action:d.e.MyShares.INTERACTIVE_OVERVIEW_DEMO},h={svgName:c.vn.Analytics,label:u("demoInsights"),appLink:g,group:"insights",className:"btn btn-outline-dark"}},44183:(e,a,t)=>{t.r(a),t.d(a,{InsightsHeatmapDemoView:()=>S});var n=t(32735),i=t(23481),r=t(2948),s=t(20354),o=t(26025),c=t(60051),d=t(39151),l=t(54405),u=t(47812),m=t(31949),v=t(93322),g=t(79612),h=t(86702),p=t(9540),y=t(17132),f=t(18006),b=t(9566),k=t(10447);function w(e,a){(null==a||a>e.length)&&(a=e.length);for(var t=0,n=Array(a);t<a;t++)n[t]=e[t];return n}var j=i.T.encloseNamespace("shared.insightsHeatmap");function S(){var e,a,t,i,S,I,E,O=(I=(0,r.D)(h.y.ANONYMISE_USERS),E=1,function(e){if(Array.isArray(e))return e}(I)||function(e,a){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var n,i,r,s,o=[],c=!0,d=!1;try{if(r=(t=t.call(e)).next,0===a){if(Object(t)!==t)return;c=!1}else for(;!(c=(n=r.call(t)).done)&&(o.push(n.value),o.length!==a);c=!0);}catch(e){d=!0,i=e}finally{try{if(!c&&null!=t.return&&(s=t.return(),Object(s)!==s))return}finally{if(d)throw i}}return o}}(I,E)||function(e,a){if(e){if("string"==typeof e)return w(e,a);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?w(e,a):void 0}}(I,E)||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,v.F)();var A=s.a.useBasicFetch(m.N.currentUser()),D=s.a.useBasicFetch(l.X.interactiveMetadata()),B=s.a.useBasicFetch(d.L.config()),F=o.B.getAudienceAppLinkParams(),R=o.B.getDateRangeAppLinkParams(),C=s.a.useBasicFetch(l.X.aggregateHeatmap()),M=s.a.useBasicFetch(l.X.individualHeatmap()),N=s.a.useBasicFetch(l.X.users()),L=s.a.useBasicFetch(l.X.videoViews()),V=s.a.useBasicFetch(D.data&&u.k.createViewKey(function(){var e;return(null===(e=B.data)||void 0===e?void 0:e.liteUrl.includes("staging"))?f.c:f.q}(),c.f.Share));(0,g.M)({title:D.data?j("pageTitle",{video:null===(e=D.data)||void 0===e?void 0:e.name}):null});var _=!!(A.data&&L.data&&D.data&&C.data&&V.data&&N.data),z=!!M.data,G=Object.assign(Object.assign({},F),R),H=Object.assign(Object.assign({},b.G6),{objectId:null===(a=D.data)||void 0===a?void 0:a.id});return n.createElement("div",{className:"px-3"},n.createElement(p.j,{video:D.data,tabs:(0,k.aq)(null===(t=D.data)||void 0===t?void 0:t.id,"heatmap",G),dateRangeAppLinkParams:R,share:H,yearGroups:[],isDemo:!0}),n.createElement(y.w,{aggregateEngagement:C.data,individualEngagement:null===(i=M.data)||void 0===i?void 0:i.data,yearGroups:null===(S=L.data)||void 0===S?void 0:S.yearGroupCount,config:B.data,users:N.data,viewKey:V.data,hasDataLoaded:_,tableDataLoaded:z,anonymiseUsers:O}))}}}]);
|
|
2
|
+
//# sourceMappingURL=4598-bcd3f6f8a7-lite.chunk.js.map
|
package/dist/scripts/{4598-2b1daca7ae-lite.chunk.js.map → 4598-bcd3f6f8a7-lite.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/4598-2b1daca7ae-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/flight-requests/InsightsDemoRequests.ts","file:///app/packages/projects/lite/src/apps/my-shares/constants/DemoInsights.ts","file:///app/packages/projects/lite/src/apps/my-shares/constants/MySharesDemoInsights.ts","file:///app/packages/projects/lite/src/apps/my-shares/views/demo/heatmap/InsightsHeatmapDemoView.tsx"],"sourcesContent":["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};","export const DEMO_INTERACTIVE_STAGING_ID = 'D8qRe7';\nexport const DEMO_INTERACTIVE_PROD_ID = 'GRWx6w';","import { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SharePrivacy } from 'libs/shared/apps/share-v2/enums/SharePrivacy';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { MySharesTableData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\n\nconst namespace = 'myShares.demoInsights';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst DEMO_INSIGHT_DAYS_AGO = 7;\n\nexport const DEMO_INSIGHTS_SHARE: Share = {\n type: ShareType.Link,\n privacy: SharePrivacy.JustMySchool,\n objectId: '0',\n objectTypeId: MasterType.Interactive,\n viewCount: 28,\n accessCount: 15,\n dateCreated: new Date().toISOString(),\n expireDate: null,\n link: {\n shortenedEmbedUrl: '',\n shortenedUrl: ''\n },\n shareId: '0',\n ownerCustomerId: 0,\n ownerId: 0,\n recipients: [],\n options: {\n preventScrubbing: false,\n immediateFeedback: false\n }\n};\n\nexport const DEMO_INSIGHTS_SHARE_TABLE_DATA: MySharesTableData = {\n share: DEMO_INSIGHTS_SHARE,\n sharedObject: null,\n shareRecipients: null,\n dateShared: DateHelper.subtract(new Date(), DEMO_INSIGHT_DAYS_AGO, 'days').toISOString()\n};\n\nconst DEMO_INSIGHTS_APPLINK: Core.AppLink = {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_DEMO\n};\n\nexport const DEMO_INSIGHTS_ACTION: ActionOptions = {\n svgName: cvSvgLibrary.Analytics,\n label: getPhrase('demoInsights'),\n appLink: DEMO_INSIGHTS_APPLINK,\n group: 'insights',\n className: 'btn btn-outline-dark'\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 { VideoViewEventResponse } from 'libs/shared/apps/analytics/interfaces/VideoViewEvent';\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InsightsDemoRequests } from 'libs/shared/flight-requests/InsightsDemoRequests';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, CurrentUser, Engagement, IndividualEngagementResponse, InteractiveMetadata, PlayerViewKey } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\n\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InsightsHeatmap } from 'apps/my-shares/components/insights-heatmap/InsightsHeatmap';\nimport { DEMO_INTERACTIVE_PROD_ID, DEMO_INTERACTIVE_STAGING_ID } from 'apps/my-shares/constants/DemoInsights';\nimport { DEMO_INSIGHTS_SHARE } from 'apps/my-shares/constants/MySharesDemoInsights';\nimport { getInsightsDemoInteractiveTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\n\nconst namespace = 'shared.insightsHeatmap';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function InsightsHeatmapDemoView() {\n const [anonymiseUsers] = useViewModel<boolean>(ViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<InteractiveMetadata>(\n InsightsDemoRequests.interactiveMetadata()\n );\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const audienceAppLinkParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n const dateRangeAppLinkParams = AnalyticsFilterHelper.getDateRangeAppLinkParams();\n\n const aggregateEngagement = Flight.useBasicFetch<Engagement>(\n InsightsDemoRequests.aggregateHeatmap()\n );\n\n const individualEngagement = Flight.useBasicFetch<IndividualEngagementResponse>(\n InsightsDemoRequests.individualHeatmap()\n );\n\n const users = Flight.useBasicFetch<AnonUser[]>(InsightsDemoRequests.users());\n\n const videoViews = Flight.useBasicFetch<VideoViewEventResponse>(InsightsDemoRequests.videoViews());\n\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(video.data &&\n PlayerRequests.createViewKey(getDemoInteractiveId(), MediaIdType.Share));\n\n useSetPageMetadata({ title: video.data ? getPhrase('pageTitle', { video: video.data?.name }) : null });\n\n const hasDataLoaded =\n !!currentUser.data &&\n !!videoViews.data &&\n !!video.data &&\n !!aggregateEngagement.data &&\n !!viewKey.data &&\n !!users.data;\n\n const tableDataLoaded = !!individualEngagement.data;\n\n const params = {\n ...audienceAppLinkParams,\n ...dateRangeAppLinkParams\n };\n\n function getDemoInteractiveId() {\n if (config.data?.liteUrl.includes('staging')) return DEMO_INTERACTIVE_STAGING_ID;\n\n return DEMO_INTERACTIVE_PROD_ID;\n }\n\n const share = {\n ...DEMO_INSIGHTS_SHARE,\n objectId: video.data?.id\n };\n\n return (\n <div className='px-3'>\n <InsightsHeader\n video={video.data}\n tabs={getInsightsDemoInteractiveTabs(video.data?.id, 'heatmap', params)}\n dateRangeAppLinkParams={dateRangeAppLinkParams}\n share={share}\n yearGroups={[]}\n isDemo\n />\n\n <InsightsHeatmap\n aggregateEngagement={aggregateEngagement.data}\n individualEngagement={individualEngagement.data?.data}\n yearGroups={videoViews.data?.yearGroupCount}\n config={config.data}\n users={users.data}\n viewKey={viewKey.data}\n hasDataLoaded={hasDataLoaded}\n tableDataLoaded={tableDataLoaded}\n anonymiseUsers={anonymiseUsers}\n />\n </div>\n );\n}"],"names":["InsightsDemoRequests","interactive","url","key","normalize","interactiveMetadata","interactiveResults","videoViews","users","individualHeatmap","aggregateHeatmap","DEMO_INTERACTIVE_STAGING_ID","DEMO_INTERACTIVE_PROD_ID","getPhrase","DEMO_INSIGHTS_SHARE","type","privacy","objectId","objectTypeId","viewCount","accessCount","dateCreated","Date","toISOString","expireDate","link","shortenedEmbedUrl","shortenedUrl","shareId","ownerCustomerId","ownerId","recipients","options","preventScrubbing","immediateFeedback","DEMO_INSIGHTS_SHARE_TABLE_DATA","share","sharedObject","shareRecipients","dateShared","DEMO_INSIGHTS_APPLINK","application","action","DEMO_INSIGHTS_ACTION","svgName","label","appLink","group","className","InsightsHeatmapDemoView","anonymiseUsers","currentUser","video","config","audienceAppLinkParams","dateRangeAppLinkParams","aggregateEngagement","individualEngagement","viewKey","data","liteUrl","includes","getDemoInteractiveId","title","name","hasDataLoaded","tableDataLoaded","params","id","tabs","yearGroups","isDemo","yearGroupCount"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"scripts/4598-bcd3f6f8a7-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/flight-requests/InsightsDemoRequests.ts","file:///app/packages/projects/lite/src/apps/my-shares/constants/DemoInsights.ts","file:///app/packages/projects/lite/src/apps/my-shares/constants/MySharesDemoInsights.ts","file:///app/packages/projects/lite/src/apps/my-shares/views/demo/heatmap/InsightsHeatmapDemoView.tsx"],"sourcesContent":["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};","export const DEMO_INTERACTIVE_STAGING_ID = 'D8qRe7';\nexport const DEMO_INTERACTIVE_PROD_ID = 'GRWx6w';","import { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SharePrivacy } from 'libs/shared/apps/share-v2/enums/SharePrivacy';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { MySharesTableData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\n\nconst namespace = 'myShares.demoInsights';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst DEMO_INSIGHT_DAYS_AGO = 7;\n\nexport const DEMO_INSIGHTS_SHARE: Share = {\n type: ShareType.Link,\n privacy: SharePrivacy.JustMySchool,\n objectId: '0',\n objectTypeId: MasterType.Interactive,\n viewCount: 28,\n accessCount: 15,\n dateCreated: new Date().toISOString(),\n expireDate: null,\n link: {\n shortenedEmbedUrl: '',\n shortenedUrl: ''\n },\n shareId: '0',\n ownerCustomerId: 0,\n ownerId: 0,\n recipients: [],\n options: {\n preventScrubbing: false,\n immediateFeedback: false\n }\n};\n\nexport const DEMO_INSIGHTS_SHARE_TABLE_DATA: MySharesTableData = {\n share: DEMO_INSIGHTS_SHARE,\n sharedObject: null,\n shareRecipients: null,\n dateShared: DateHelper.subtract(new Date(), DEMO_INSIGHT_DAYS_AGO, 'days').toISOString()\n};\n\nconst DEMO_INSIGHTS_APPLINK: Core.AppLink = {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_DEMO\n};\n\nexport const DEMO_INSIGHTS_ACTION: ActionOptions = {\n svgName: cvSvgLibrary.Analytics,\n label: getPhrase('demoInsights'),\n appLink: DEMO_INSIGHTS_APPLINK,\n group: 'insights',\n className: 'btn btn-outline-dark'\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 { VideoViewEventResponse } from 'libs/shared/apps/analytics/interfaces/VideoViewEvent';\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InsightsDemoRequests } from 'libs/shared/flight-requests/InsightsDemoRequests';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, CurrentUser, Engagement, IndividualEngagementResponse, InteractiveMetadata, PlayerViewKey } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\n\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InsightsHeatmap } from 'apps/my-shares/components/insights-heatmap/InsightsHeatmap';\nimport { DEMO_INTERACTIVE_PROD_ID, DEMO_INTERACTIVE_STAGING_ID } from 'apps/my-shares/constants/DemoInsights';\nimport { DEMO_INSIGHTS_SHARE } from 'apps/my-shares/constants/MySharesDemoInsights';\nimport { getInsightsDemoInteractiveTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\n\nconst namespace = 'shared.insightsHeatmap';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function InsightsHeatmapDemoView() {\n const [anonymiseUsers] = useViewModel<boolean>(ViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<InteractiveMetadata>(\n InsightsDemoRequests.interactiveMetadata()\n );\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const audienceAppLinkParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n const dateRangeAppLinkParams = AnalyticsFilterHelper.getDateRangeAppLinkParams();\n\n const aggregateEngagement = Flight.useBasicFetch<Engagement>(\n InsightsDemoRequests.aggregateHeatmap()\n );\n\n const individualEngagement = Flight.useBasicFetch<IndividualEngagementResponse>(\n InsightsDemoRequests.individualHeatmap()\n );\n\n const users = Flight.useBasicFetch<AnonUser[]>(InsightsDemoRequests.users());\n\n const videoViews = Flight.useBasicFetch<VideoViewEventResponse>(InsightsDemoRequests.videoViews());\n\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(video.data &&\n PlayerRequests.createViewKey(getDemoInteractiveId(), MediaIdType.Share));\n\n useSetPageMetadata({ title: video.data ? getPhrase('pageTitle', { video: video.data?.name }) : null });\n\n const hasDataLoaded =\n !!currentUser.data &&\n !!videoViews.data &&\n !!video.data &&\n !!aggregateEngagement.data &&\n !!viewKey.data &&\n !!users.data;\n\n const tableDataLoaded = !!individualEngagement.data;\n\n const params = {\n ...audienceAppLinkParams,\n ...dateRangeAppLinkParams\n };\n\n function getDemoInteractiveId() {\n if (config.data?.liteUrl.includes('staging')) return DEMO_INTERACTIVE_STAGING_ID;\n\n return DEMO_INTERACTIVE_PROD_ID;\n }\n\n const share = {\n ...DEMO_INSIGHTS_SHARE,\n objectId: video.data?.id\n };\n\n return (\n <div className='px-3'>\n <InsightsHeader\n video={video.data}\n tabs={getInsightsDemoInteractiveTabs(video.data?.id, 'heatmap', params)}\n dateRangeAppLinkParams={dateRangeAppLinkParams}\n share={share}\n yearGroups={[]}\n isDemo\n />\n\n <InsightsHeatmap\n aggregateEngagement={aggregateEngagement.data}\n individualEngagement={individualEngagement.data?.data}\n yearGroups={videoViews.data?.yearGroupCount}\n config={config.data}\n users={users.data}\n viewKey={viewKey.data}\n hasDataLoaded={hasDataLoaded}\n tableDataLoaded={tableDataLoaded}\n anonymiseUsers={anonymiseUsers}\n />\n </div>\n );\n}"],"names":["InsightsDemoRequests","interactive","url","key","normalize","interactiveMetadata","interactiveResults","videoViews","users","individualHeatmap","aggregateHeatmap","DEMO_INTERACTIVE_STAGING_ID","DEMO_INTERACTIVE_PROD_ID","getPhrase","DEMO_INSIGHTS_SHARE","type","privacy","objectId","objectTypeId","viewCount","accessCount","dateCreated","Date","toISOString","expireDate","link","shortenedEmbedUrl","shortenedUrl","shareId","ownerCustomerId","ownerId","recipients","options","preventScrubbing","immediateFeedback","DEMO_INSIGHTS_SHARE_TABLE_DATA","share","sharedObject","shareRecipients","dateShared","DEMO_INSIGHTS_APPLINK","application","action","DEMO_INSIGHTS_ACTION","svgName","label","appLink","group","className","InsightsHeatmapDemoView","anonymiseUsers","currentUser","video","config","audienceAppLinkParams","dateRangeAppLinkParams","aggregateEngagement","individualEngagement","viewKey","data","liteUrl","includes","getDemoInteractiveId","title","name","hasDataLoaded","tableDataLoaded","params","id","tabs","yearGroups","isDemo","yearGroupCount"],"sourceRoot":""}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
/*! For license information please see 4722-
|
|
2
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4722],{35115:(t,e,r)=>{r.d(e,{p:()=>u});var n=r(32735),a=r(49935),o=r(95278);const i="pJf6R",c="MSvzY",l="IFmvc",s="pOcvk";var u=n.memo((function(){return n.createElement("div",{className:"px-3"},n.createElement("div",{className:"mb-1 partial-loading-background ".concat("YrP_G")}),n.createElement("div",{className:"pb-3"},n.createElement(a.b2,{numItems:2})),n.createElement("div",{className:"pb-2"},n.createElement(o.Z,null)),n.createElement("div",{className:"d-flex align-items-center py-2"},n.createElement("div",{className:"mx-4 partial-loading-background ".concat(i)}),n.createElement("div",{className:"me-2 partial-loading-background ".concat(c)}),n.createElement("div",{className:"me-auto partial-loading-background ".concat(c)}),n.createElement("div",{className:"partial-loading-background ".concat("j62jt")})),n.createElement("ul",{className:"striped-list list-unstyled"},Array(20).fill(null).map((function(t,e){return n.createElement("li",{key:e},n.createElement("div",{className:"d-flex align-items-center py-1 px-4"},n.createElement("div",{className:"me-2 partial-loading-background ".concat(i)}),n.createElement("div",{className:"me-2 partial-loading-background ".concat("droqZ")}),n.createElement("div",{className:"w-25"},n.createElement("div",{className:"partial-loading-background ".concat("gorcb")})),n.createElement("div",{className:"me-auto d-flex"},Math.random()>.5?n.createElement(n.Fragment,null,n.createElement("div",{className:"partial-loading-background rounded-pill me-1 ".concat(l," ").concat("SdQ90")}),n.createElement("div",{className:"partial-loading-background rounded-pill ".concat(l," ").concat(s)})):n.createElement("div",{className:"partial-loading-background rounded-pill ".concat(l," ").concat(s)})),n.createElement("div",{className:"me-2 partial-loading-background ".concat(c)}),n.createElement("div",{className:"partial-loading-background ".concat("S7p4K")})))}))))}))},16566:(t,e,r)=>{r.r(e),r.d(e,{ClassroomAssignmentsView:()=>S});var n=r(32735),a=r(23481),o=r(20354),i=r(2510),c=r(87801),l=r(16714),s=r(39151),u=r(1666),h=r(31949),d=r(79967),f=r(22902),m=r(79612),p=r(37802),v=r(46390),g=r(98623),y=r(35115),b=r(88630),w=r(31491),E=r(22602),x=r(67467),k=r(5056),N=r(28001),L=r(69003);function _(t){return _="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_(t)}function F(){F=function(){return e};var t,e={},r=Object.prototype,n=r.hasOwnProperty,a=Object.defineProperty||function(t,e,r){t[e]=r.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",c=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag";function s(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{s({},"")}catch(t){s=function(t,e,r){return t[e]=r}}function u(t,e,r,n){var o=e&&e.prototype instanceof g?e:g,i=Object.create(o.prototype),c=new G(n||[]);return a(i,"_invoke",{value:j(t,r,c)}),i}function h(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}e.wrap=u;var d="suspendedStart",f="suspendedYield",m="executing",p="completed",v={};function g(){}function y(){}function b(){}var w={};s(w,i,(function(){return this}));var E=Object.getPrototypeOf,x=E&&E(E(C([])));x&&x!==r&&n.call(x,i)&&(w=x);var k=b.prototype=g.prototype=Object.create(w);function N(t){["next","throw","return"].forEach((function(e){s(t,e,(function(t){return this._invoke(e,t)}))}))}function L(t,e){function r(a,o,i,c){var l=h(t[a],t,o);if("throw"!==l.type){var s=l.arg,u=s.value;return u&&"object"==_(u)&&n.call(u,"__await")?e.resolve(u.__await).then((function(t){r("next",t,i,c)}),(function(t){r("throw",t,i,c)})):e.resolve(u).then((function(t){s.value=t,i(s)}),(function(t){return r("throw",t,i,c)}))}c(l.arg)}var o;a(this,"_invoke",{value:function(t,n){function a(){return new e((function(e,a){r(t,n,e,a)}))}return o=o?o.then(a,a):a()}})}function j(e,r,n){var a=d;return function(o,i){if(a===m)throw Error("Generator is already running");if(a===p){if("throw"===o)throw i;return{value:t,done:!0}}for(n.method=o,n.arg=i;;){var c=n.delegate;if(c){var l=O(c,n);if(l){if(l===v)continue;return l}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(a===d)throw a=p,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);a=m;var s=h(e,r,n);if("normal"===s.type){if(a=n.done?p:f,s.arg===v)continue;return{value:s.arg,done:n.done}}"throw"===s.type&&(a=p,n.method="throw",n.arg=s.arg)}}}function O(e,r){var n=r.method,a=e.iterator[n];if(a===t)return r.delegate=null,"throw"===n&&e.iterator.return&&(r.method="return",r.arg=t,O(e,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),v;var o=h(a,e.iterator,r.arg);if("throw"===o.type)return r.method="throw",r.arg=o.arg,r.delegate=null,v;var i=o.arg;return i?i.done?(r[e.resultName]=i.value,r.next=e.nextLoc,"return"!==r.method&&(r.method="next",r.arg=t),r.delegate=null,v):i:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,v)}function S(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function P(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function G(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(S,this),this.reset(!0)}function C(e){if(e||""===e){var r=e[i];if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var a=-1,o=function r(){for(;++a<e.length;)if(n.call(e,a))return r.value=e[a],r.done=!1,r;return r.value=t,r.done=!0,r};return o.next=o}}throw new TypeError(_(e)+" is not iterable")}return y.prototype=b,a(k,"constructor",{value:b,configurable:!0}),a(b,"constructor",{value:y,configurable:!0}),y.displayName=s(b,l,"GeneratorFunction"),e.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===y||"GeneratorFunction"===(e.displayName||e.name))},e.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,b):(t.__proto__=b,s(t,l,"GeneratorFunction")),t.prototype=Object.create(k),t},e.awrap=function(t){return{__await:t}},N(L.prototype),s(L.prototype,c,(function(){return this})),e.AsyncIterator=L,e.async=function(t,r,n,a,o){void 0===o&&(o=Promise);var i=new L(u(t,r,n,a),o);return e.isGeneratorFunction(r)?i:i.next().then((function(t){return t.done?t.value:i.next()}))},N(k),s(k,l,"Generator"),s(k,i,(function(){return this})),s(k,"toString",(function(){return"[object Generator]"})),e.keys=function(t){var e=Object(t),r=[];for(var n in e)r.push(n);return r.reverse(),function t(){for(;r.length;){var n=r.pop();if(n in e)return t.value=n,t.done=!1,t}return t.done=!0,t}},e.values=C,G.prototype={constructor:G,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=t,this.done=!1,this.delegate=null,this.method="next",this.arg=t,this.tryEntries.forEach(P),!e)for(var r in this)"t"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=t)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var r=this;function a(n,a){return c.type="throw",c.arg=e,r.next=n,a&&(r.method="next",r.arg=t),!!a}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],c=i.completion;if("root"===i.tryLoc)return a("end");if(i.tryLoc<=this.prev){var l=n.call(i,"catchLoc"),s=n.call(i,"finallyLoc");if(l&&s){if(this.prev<i.catchLoc)return a(i.catchLoc,!0);if(this.prev<i.finallyLoc)return a(i.finallyLoc)}else if(l){if(this.prev<i.catchLoc)return a(i.catchLoc,!0)}else{if(!s)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return a(i.finallyLoc)}}}},abrupt:function(t,e){for(var r=this.tryEntries.length-1;r>=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev<a.finallyLoc){var o=a;break}}o&&("break"===t||"continue"===t)&&o.tryLoc<=e&&e<=o.finallyLoc&&(o=null);var i=o?o.completion:{};return i.type=t,i.arg=e,o?(this.method="next",this.next=o.finallyLoc,v):this.complete(i)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),v},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),P(r),v}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var a=n.arg;P(r)}return a}}throw Error("illegal catch attempt")},delegateYield:function(e,r,n){return this.delegate={iterator:C(e),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=t),v}},e}var j=function(t,e,r,n){return new(r||(r=Promise))((function(a,o){function i(t){try{l(n.next(t))}catch(t){o(t)}}function c(t){try{l(n.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?a(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(i,c)}l((n=n.apply(t,e||[])).next())}))},O=a.T.encloseNamespace("classrooms.classroomAssignments");function S(t){var e,r,a,_,S=(0,d.k)(),P=(0,f.T)().hasPermissions,G=(0,p.r)(null).hasShareFlowV2,C=(0,v.G)().isPlugin,T=o.a.useGetFetchAsync(),A=o.a.useBasicFetch(h.N.currentUser()),I=o.a.useBasicFetch(s.L.config()),R=o.a.useBasicFetch((null===(e=A.data)||void 0===e?void 0:e.isAuthenticated)&&u.h.yearGroups(A.data.customerId)),B=o.a.useBasicFetch(A.data&&b.F.getClassroom(t.id,A.data.id)),M=(0,g.a)({interactiveInsights:!0,shouldFetch:G,params:{type:i.y.Classroom,scopeId:t.id}}),U=null===(a=null===(r=B.data)||void 0===r?void 0:r._integrations)||void 0===a?void 0:a.rostered;return(0,m.M)({title:O("pageTitle",{classroomName:null===(_=B.data)||void 0===_?void 0:_.name})}),(0,w._)(B),B.data?n.createElement(E.R,{classroom:B.data,currentUser:A.data,onTogglePin:function(t,e,r){return j(this,void 0,void 0,F().mark((function n(){var a;return F().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(!U){n.next=2;break}return n.abrupt("return");case 2:return a=t?b.F.pinClassroom:b.F.unpinClassroom,n.prev=3,n.next=6,T(a(B.data));case 6:e(),n.next=12;break;case 9:n.prev=9,n.t0=n.catch(3),r();case 12:case"end":return n.stop()}}),n,null,[[3,9]])})))},activeTab:"assignments",isRostered:U,hasShareFlowV2:G},n.createElement("div",{className:"mt-3"},function(){var t,e=G&&P(l.C.ViewInsights),r=(0,L.cl)([]);return M.showPartialLoading?n.createElement(N.L,null):M.sentShares.length?n.createElement(n.Fragment,null,n.createElement(k.R,{sentShares:M.sentShares,sharedObjects:M.sharedObjects.items,shareRecipients:M.shareRecipients.items,interactivesPendingReview:M.interactivesPendingReview.itemsArr,getObjectActions:function(t){return(0,L.sD)({share:t.share,sharedObject:t.sharedObject,audienceParams:r.audienceAppLinkParams,hasInsights:e,isPlugin:C,breakpoints:S})},groupByDateShared:!0,breakpoints:S,imageCdnUrl:null===(t=I.data)||void 0===t?void 0:t.imageCdnUrl,yearGroups:R.data}),(M.hasMore||M.isFetching)&&n.createElement(c._,{isFetching:M.isFetching,fetchNext:M.fetchNext,nextCursor:M.nextCursor})):n.createElement(x.o,null)}())):n.createElement(y.p,null)}}}]);
|
|
3
|
-
//# sourceMappingURL=4722-
|
|
1
|
+
/*! For license information please see 4722-9eb591621a-lite.chunk.js.LICENSE.txt */
|
|
2
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4722],{35115:(t,e,r)=>{r.d(e,{p:()=>u});var n=r(32735),a=r(49935),o=r(95278);const i="pJf6R",c="MSvzY",l="IFmvc",s="pOcvk";var u=n.memo((function(){return n.createElement("div",{className:"px-3"},n.createElement("div",{className:"mb-1 partial-loading-background ".concat("YrP_G")}),n.createElement("div",{className:"pb-3"},n.createElement(a.b2,{numItems:2})),n.createElement("div",{className:"pb-2"},n.createElement(o.Z,null)),n.createElement("div",{className:"d-flex align-items-center py-2"},n.createElement("div",{className:"mx-4 partial-loading-background ".concat(i)}),n.createElement("div",{className:"me-2 partial-loading-background ".concat(c)}),n.createElement("div",{className:"me-auto partial-loading-background ".concat(c)}),n.createElement("div",{className:"partial-loading-background ".concat("j62jt")})),n.createElement("ul",{className:"striped-list list-unstyled"},Array(20).fill(null).map((function(t,e){return n.createElement("li",{key:e},n.createElement("div",{className:"d-flex align-items-center py-1 px-4"},n.createElement("div",{className:"me-2 partial-loading-background ".concat(i)}),n.createElement("div",{className:"me-2 partial-loading-background ".concat("droqZ")}),n.createElement("div",{className:"w-25"},n.createElement("div",{className:"partial-loading-background ".concat("gorcb")})),n.createElement("div",{className:"me-auto d-flex"},Math.random()>.5?n.createElement(n.Fragment,null,n.createElement("div",{className:"partial-loading-background rounded-pill me-1 ".concat(l," ").concat("SdQ90")}),n.createElement("div",{className:"partial-loading-background rounded-pill ".concat(l," ").concat(s)})):n.createElement("div",{className:"partial-loading-background rounded-pill ".concat(l," ").concat(s)})),n.createElement("div",{className:"me-2 partial-loading-background ".concat(c)}),n.createElement("div",{className:"partial-loading-background ".concat("S7p4K")})))}))))}))},16566:(t,e,r)=>{r.r(e),r.d(e,{ClassroomAssignmentsView:()=>S});var n=r(32735),a=r(23481),o=r(20354),i=r(2510),c=r(87801),l=r(16714),s=r(39151),u=r(1666),h=r(31949),d=r(79967),f=r(22902),m=r(79612),p=r(37802),v=r(46390),g=r(98623),y=r(35115),b=r(88630),w=r(31491),E=r(22602),x=r(67467),k=r(5056),N=r(28001),L=r(69003);function _(t){return _="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_(t)}function F(){F=function(){return e};var t,e={},r=Object.prototype,n=r.hasOwnProperty,a=Object.defineProperty||function(t,e,r){t[e]=r.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",c=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag";function s(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{s({},"")}catch(t){s=function(t,e,r){return t[e]=r}}function u(t,e,r,n){var o=e&&e.prototype instanceof g?e:g,i=Object.create(o.prototype),c=new G(n||[]);return a(i,"_invoke",{value:j(t,r,c)}),i}function h(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}e.wrap=u;var d="suspendedStart",f="suspendedYield",m="executing",p="completed",v={};function g(){}function y(){}function b(){}var w={};s(w,i,(function(){return this}));var E=Object.getPrototypeOf,x=E&&E(E(C([])));x&&x!==r&&n.call(x,i)&&(w=x);var k=b.prototype=g.prototype=Object.create(w);function N(t){["next","throw","return"].forEach((function(e){s(t,e,(function(t){return this._invoke(e,t)}))}))}function L(t,e){function r(a,o,i,c){var l=h(t[a],t,o);if("throw"!==l.type){var s=l.arg,u=s.value;return u&&"object"==_(u)&&n.call(u,"__await")?e.resolve(u.__await).then((function(t){r("next",t,i,c)}),(function(t){r("throw",t,i,c)})):e.resolve(u).then((function(t){s.value=t,i(s)}),(function(t){return r("throw",t,i,c)}))}c(l.arg)}var o;a(this,"_invoke",{value:function(t,n){function a(){return new e((function(e,a){r(t,n,e,a)}))}return o=o?o.then(a,a):a()}})}function j(e,r,n){var a=d;return function(o,i){if(a===m)throw Error("Generator is already running");if(a===p){if("throw"===o)throw i;return{value:t,done:!0}}for(n.method=o,n.arg=i;;){var c=n.delegate;if(c){var l=O(c,n);if(l){if(l===v)continue;return l}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(a===d)throw a=p,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);a=m;var s=h(e,r,n);if("normal"===s.type){if(a=n.done?p:f,s.arg===v)continue;return{value:s.arg,done:n.done}}"throw"===s.type&&(a=p,n.method="throw",n.arg=s.arg)}}}function O(e,r){var n=r.method,a=e.iterator[n];if(a===t)return r.delegate=null,"throw"===n&&e.iterator.return&&(r.method="return",r.arg=t,O(e,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),v;var o=h(a,e.iterator,r.arg);if("throw"===o.type)return r.method="throw",r.arg=o.arg,r.delegate=null,v;var i=o.arg;return i?i.done?(r[e.resultName]=i.value,r.next=e.nextLoc,"return"!==r.method&&(r.method="next",r.arg=t),r.delegate=null,v):i:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,v)}function S(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function P(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function G(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(S,this),this.reset(!0)}function C(e){if(e||""===e){var r=e[i];if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var a=-1,o=function r(){for(;++a<e.length;)if(n.call(e,a))return r.value=e[a],r.done=!1,r;return r.value=t,r.done=!0,r};return o.next=o}}throw new TypeError(_(e)+" is not iterable")}return y.prototype=b,a(k,"constructor",{value:b,configurable:!0}),a(b,"constructor",{value:y,configurable:!0}),y.displayName=s(b,l,"GeneratorFunction"),e.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===y||"GeneratorFunction"===(e.displayName||e.name))},e.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,b):(t.__proto__=b,s(t,l,"GeneratorFunction")),t.prototype=Object.create(k),t},e.awrap=function(t){return{__await:t}},N(L.prototype),s(L.prototype,c,(function(){return this})),e.AsyncIterator=L,e.async=function(t,r,n,a,o){void 0===o&&(o=Promise);var i=new L(u(t,r,n,a),o);return e.isGeneratorFunction(r)?i:i.next().then((function(t){return t.done?t.value:i.next()}))},N(k),s(k,l,"Generator"),s(k,i,(function(){return this})),s(k,"toString",(function(){return"[object Generator]"})),e.keys=function(t){var e=Object(t),r=[];for(var n in e)r.push(n);return r.reverse(),function t(){for(;r.length;){var n=r.pop();if(n in e)return t.value=n,t.done=!1,t}return t.done=!0,t}},e.values=C,G.prototype={constructor:G,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=t,this.done=!1,this.delegate=null,this.method="next",this.arg=t,this.tryEntries.forEach(P),!e)for(var r in this)"t"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=t)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var r=this;function a(n,a){return c.type="throw",c.arg=e,r.next=n,a&&(r.method="next",r.arg=t),!!a}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],c=i.completion;if("root"===i.tryLoc)return a("end");if(i.tryLoc<=this.prev){var l=n.call(i,"catchLoc"),s=n.call(i,"finallyLoc");if(l&&s){if(this.prev<i.catchLoc)return a(i.catchLoc,!0);if(this.prev<i.finallyLoc)return a(i.finallyLoc)}else if(l){if(this.prev<i.catchLoc)return a(i.catchLoc,!0)}else{if(!s)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return a(i.finallyLoc)}}}},abrupt:function(t,e){for(var r=this.tryEntries.length-1;r>=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev<a.finallyLoc){var o=a;break}}o&&("break"===t||"continue"===t)&&o.tryLoc<=e&&e<=o.finallyLoc&&(o=null);var i=o?o.completion:{};return i.type=t,i.arg=e,o?(this.method="next",this.next=o.finallyLoc,v):this.complete(i)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),v},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),P(r),v}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var a=n.arg;P(r)}return a}}throw Error("illegal catch attempt")},delegateYield:function(e,r,n){return this.delegate={iterator:C(e),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=t),v}},e}var j=function(t,e,r,n){return new(r||(r=Promise))((function(a,o){function i(t){try{l(n.next(t))}catch(t){o(t)}}function c(t){try{l(n.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?a(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(i,c)}l((n=n.apply(t,e||[])).next())}))},O=a.T.encloseNamespace("classrooms.classroomAssignments");function S(t){var e,r,a,_,S=(0,d.k)(),P=(0,f.T)().hasPermissions,G=(0,p.r)(null).hasShareFlowV2,C=(0,v.G)().isPlugin,T=o.a.useGetFetchAsync(),A=o.a.useBasicFetch(h.N.currentUser()),I=o.a.useBasicFetch(s.L.config()),R=o.a.useBasicFetch((null===(e=A.data)||void 0===e?void 0:e.isAuthenticated)&&u.h.yearGroups(A.data.customerId)),B=o.a.useBasicFetch(A.data&&b.F.getClassroom(t.id,A.data.id)),M=(0,g.a)({interactiveInsights:!0,shouldFetch:G,params:{type:[i.y.Classroom],scopeId:t.id}}),U=null===(a=null===(r=B.data)||void 0===r?void 0:r._integrations)||void 0===a?void 0:a.rostered;return(0,m.M)({title:O("pageTitle",{classroomName:null===(_=B.data)||void 0===_?void 0:_.name})}),(0,w._)(B),B.data?n.createElement(E.R,{classroom:B.data,currentUser:A.data,onTogglePin:function(t,e,r){return j(this,void 0,void 0,F().mark((function n(){var a;return F().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(!U){n.next=2;break}return n.abrupt("return");case 2:return a=t?b.F.pinClassroom:b.F.unpinClassroom,n.prev=3,n.next=6,T(a(B.data));case 6:e(),n.next=12;break;case 9:n.prev=9,n.t0=n.catch(3),r();case 12:case"end":return n.stop()}}),n,null,[[3,9]])})))},activeTab:"assignments",isRostered:U,hasShareFlowV2:G},n.createElement("div",{className:"mt-3"},function(){var t,e=G&&P(l.C.ViewInsights),r=(0,L.cl)([]);return M.showPartialLoading?n.createElement(N.L,null):M.sentShares.length?n.createElement(n.Fragment,null,n.createElement(k.R,{sentShares:M.sentShares,sharedObjects:M.sharedObjects.items,shareRecipients:M.shareRecipients.items,interactivesPendingReview:M.interactivesPendingReview.itemsArr,getObjectActions:function(t){return(0,L.sD)({share:t.share,sharedObject:t.sharedObject,audienceParams:r.audienceAppLinkParams,hasInsights:e,isPlugin:C,breakpoints:S})},groupByDateShared:!0,breakpoints:S,imageCdnUrl:null===(t=I.data)||void 0===t?void 0:t.imageCdnUrl,yearGroups:R.data}),(M.hasMore||M.isFetching)&&n.createElement(c._,{isFetching:M.isFetching,fetchNext:M.fetchNext,nextCursor:M.nextCursor})):n.createElement(x.o,null)}())):n.createElement(y.p,null)}}}]);
|
|
3
|
+
//# sourceMappingURL=4722-9eb591621a-lite.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/4722-9eb591621a-lite.chunk.js","mappings":"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","sources":["file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-students/partial-loading/partial-manage-classroom-students.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-students/partial-loading/PartialManageClassroomStudents.tsx","file:///app/packages/projects/lite/src/apps/classrooms/views/classroom-assignments/ClassroomAssignmentsView.tsx"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"heading\":\"YrP_G\",\"avatar\":\"droqZ\",\"checkbox\":\"pJf6R\",\"actionIcon\":\"MSvzY\",\"addStudents\":\"j62jt\",\"studentName\":\"gorcb\",\"group\":\"IFmvc\",\"sm\":\"pOcvk\",\"lg\":\"SdQ90\",\"moreActions\":\"S7p4K\"};","import React from 'react';\n\nimport { PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PartialPillTabSelector } from 'libs/shared/components/pill-tab-selector/partial-loading/PartialPillTabSelector';\n\nimport styles from './partial-manage-classroom-students.scss';\n\nexport const PartialManageClassroomStudents = React.memo(function(): JSX.Element {\n return (\n <div className='px-3'>\n {/* Heading */}\n <div className={`mb-1 partial-loading-background ${styles.heading}`} />\n\n {/* Breadcrumbs */}\n <div className='pb-3'>\n <PartialBreadcrumbs numItems={2} />\n </div>\n\n {/* Pill tab selector */}\n <div className='pb-2'>\n <PartialPillTabSelector />\n </div>\n\n <div className='d-flex align-items-center py-2'>\n {/* Checkbox */}\n <div className={`mx-4 partial-loading-background ${styles.checkbox}`} />\n {/* Group selector */}\n <div className={`me-2 partial-loading-background ${styles.actionIcon}`} />\n {/* Delete action */}\n <div className={`me-auto partial-loading-background ${styles.actionIcon}`} />\n\n {/* Add new students button */}\n <div className={`partial-loading-background ${styles.addStudents}`} />\n </div>\n\n {/* Students list */}\n <ul className='striped-list list-unstyled'>\n {Array(20).fill(null).map((student, i) => (\n <li key={i}>\n <div className='d-flex align-items-center py-1 px-4'>\n {/* Checkbox */}\n <div className={`me-2 partial-loading-background ${styles.checkbox}`} />\n\n {/* Avatar */}\n <div className={`me-2 partial-loading-background ${styles.avatar}`} />\n\n {/* Student name */}\n <div className='w-25'>\n <div className={`partial-loading-background ${styles.studentName}`} />\n </div>\n\n {/* Groups list. Randomly renders either 1 or 2 groups. Group widths are randomly generated */}\n <div className='me-auto d-flex'>\n {Math.random() > 0.5\n ? (\n <>\n <div className={`partial-loading-background rounded-pill me-1 ${styles.group} ${styles.lg}`} />\n <div className={`partial-loading-background rounded-pill ${styles.group} ${styles.sm}`} />\n </>\n ) : <div className={`partial-loading-background rounded-pill ${styles.group} ${styles.sm}`} />\n }\n </div>\n\n {/* Group selector */}\n <div className={`me-2 partial-loading-background ${styles.actionIcon}`} />\n {/* More actions */}\n <div className={`partial-loading-background ${styles.moreActions}`} />\n </div>\n </li>\n ))}\n </ul>\n </div>\n );\n});","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\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 { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\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, YearGroup } from 'libs/shared/interfaces';\n\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useSharesTable } from 'shared/hooks/useSharesTable';\n\nimport { PartialManageClassroomStudents } from 'apps/classrooms/components/manage-classroom-students/partial-loading/PartialManageClassroomStudents';\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { useHandleClassroomErrors } from 'apps/classrooms/hooks/useHandleClassroomErrors';\nimport { ClassroomLayout } from 'apps/classrooms/layouts/ClassroomLayout';\nimport { MySharesTableEmptyState } from 'apps/my-shares/components/my-shares-table/empty-state/MySharesTableEmptyState';\nimport { MySharesTable } from 'apps/my-shares/components/my-shares-table/MySharesTable';\nimport { PartialMySharesTable } from 'apps/my-shares/components/my-shares-table/partial-loading/PartialMySharesTable';\nimport { getShareObjectActions, getSharesParams } from 'apps/my-shares/views/my-shares/MySharesViewUtils';\n\nconst namespace = 'classrooms.classroomAssignments';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ClassroomAssignmentsViewProps {\n id: string;\n}\n\nexport function ClassroomAssignmentsView(props: ClassroomAssignmentsViewProps): JSX.Element {\n const breakpoints = useBreakpoints();\n const { hasPermissions } = usePermissions();\n const { hasShareFlowV2 } = useSettings(null);\n const { isPlugin } = usePluginHelper();\n\n const fetchAsync = Flight.useGetFetchAsync();\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?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n const classroom = Flight.useBasicFetch<Classroom>(\n currentUser.data && ClassroomRequests.getClassroom(props.id, currentUser.data.id)\n );\n const shareData = useSharesTable({\n interactiveInsights: true,\n shouldFetch: hasShareFlowV2,\n params: {\n type: [ShareType.Classroom],\n scopeId: props.id\n }\n });\n\n const isRostered = classroom.data?._integrations?.rostered;\n\n useSetPageMetadata({\n title: getPhrase('pageTitle', { classroomName: classroom.data?.name })\n });\n\n useHandleClassroomErrors(classroom);\n\n async function onTogglePin(shouldPin: boolean, onSuccess: () => void, onError: () => void): Promise<void> {\n if (isRostered)\n return;\n\n const request = shouldPin\n ? ClassroomRequests.pinClassroom\n : ClassroomRequests.unpinClassroom;\n\n try {\n await fetchAsync(request(classroom.data));\n \n onSuccess();\n } catch (ex) {\n onError();\n }\n }\n\n function renderTable() {\n const hasInsightsPermission = hasShareFlowV2 && hasPermissions(PermissionName.ViewInsights);\n const sharesParams = getSharesParams([]);\n\n if (shareData.showPartialLoading)\n return <PartialMySharesTable />;\n \n if (!shareData.sentShares.length)\n return (<MySharesTableEmptyState />);\n \n return (\n <>\n <MySharesTable\n sentShares={shareData.sentShares}\n sharedObjects={shareData.sharedObjects.items}\n shareRecipients={shareData.shareRecipients.items}\n interactivesPendingReview={shareData.interactivesPendingReview.itemsArr}\n getObjectActions={row => getShareObjectActions({\n share: row.share,\n sharedObject: row.sharedObject,\n audienceParams: sharesParams.audienceAppLinkParams,\n hasInsights: hasInsightsPermission,\n isPlugin,\n breakpoints\n })}\n groupByDateShared\n breakpoints={breakpoints}\n imageCdnUrl={config.data?.imageCdnUrl}\n yearGroups={yearGroups.data}\n />\n {(shareData.hasMore || shareData.isFetching) &&\n <InfiniteScrollFooter\n isFetching={shareData.isFetching}\n fetchNext={shareData.fetchNext}\n nextCursor={shareData.nextCursor}\n />\n }\n </>\n );\n }\n\n if (!classroom.data)\n return <PartialManageClassroomStudents />;\n\n return (\n <ClassroomLayout\n classroom={classroom.data}\n currentUser={currentUser.data}\n onTogglePin={onTogglePin}\n activeTab='assignments'\n isRostered={isRostered}\n hasShareFlowV2={hasShareFlowV2}\n >\n <div className='mt-3'>\n {renderTable()}\n </div>\n </ClassroomLayout>\n );\n}"],"names":["PartialManageClassroomStudents","className","numItems","PartialPillTabSelector","Array","fill","map","student","i","key","Math","random","getPhrase","ClassroomAssignmentsView","props","breakpoints","hasPermissions","hasShareFlowV2","isPlugin","fetchAsync","currentUser","config","yearGroups","data","isAuthenticated","customerId","classroom","id","shareData","interactiveInsights","shouldFetch","params","type","scopeId","isRostered","_integrations","rostered","title","classroomName","name","onTogglePin","shouldPin","onSuccess","onError","request","activeTab","hasInsightsPermission","sharesParams","showPartialLoading","sentShares","length","sharedObjects","items","shareRecipients","interactivesPendingReview","itemsArr","getObjectActions","row","share","sharedObject","audienceParams","audienceAppLinkParams","hasInsights","groupByDateShared","imageCdnUrl","hasMore","isFetching","fetchNext","nextCursor","renderTable"],"sourceRoot":""}
|