@clickview/lite 0.64.0-rc.0 → 0.64.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/css/{7153-lite-0cc5db0db7.chunk.css → 2962-lite-2002c62a24.chunk.css} +0 -1
- package/dist/css/{1857-lite-324255d395.chunk.css → 6173-lite-911f35513f.chunk.css} +0 -1
- package/dist/css/{2083-lite-6cb1775e12.chunk.css → 7324-lite-238bd550b7.chunk.css} +0 -1
- package/dist/css/{9013-lite-620f218839.chunk.css → 9013-lite-3c31b606c5.chunk.css} +2 -2
- package/dist/languages/en.json +1 -1
- package/dist/scripts/1216-899540dc73-lite.chunk.js +2 -0
- package/dist/scripts/1216-899540dc73-lite.chunk.js.map +1 -0
- package/dist/scripts/1820-b572681b3a-lite.chunk.js +2 -0
- package/dist/scripts/1820-b572681b3a-lite.chunk.js.map +1 -0
- package/dist/scripts/{2056-84f388df20-lite.chunk.js → 2056-a9e8d17a46-lite.chunk.js} +3 -3
- package/dist/scripts/2056-a9e8d17a46-lite.chunk.js.map +1 -0
- package/dist/scripts/229-ac9f12e165-lite.chunk.js +2 -0
- package/dist/scripts/229-ac9f12e165-lite.chunk.js.map +1 -0
- package/dist/scripts/{2564-65e3fc9619-lite.chunk.js → 2564-f5628d4e56-lite.chunk.js} +3 -3
- package/dist/scripts/{2564-65e3fc9619-lite.chunk.js.map → 2564-f5628d4e56-lite.chunk.js.map} +1 -1
- package/dist/scripts/2712-a851ddc3c3-lite.chunk.js +2 -0
- package/dist/scripts/2712-a851ddc3c3-lite.chunk.js.map +1 -0
- package/dist/scripts/{2788-eca70707c6-lite.chunk.js → 2788-c8ae3be73f-lite.chunk.js} +1 -1
- package/dist/scripts/2788-c8ae3be73f-lite.chunk.js.map +1 -0
- package/dist/scripts/{7153-0ed8513e59-lite.chunk.js → 2962-7f2e4412f0-lite.chunk.js} +2 -2
- package/dist/scripts/{7153-0ed8513e59-lite.chunk.js.map → 2962-7f2e4412f0-lite.chunk.js.map} +1 -1
- package/dist/scripts/2988-b602b64344-lite.chunk.js +2 -0
- package/dist/scripts/2988-b602b64344-lite.chunk.js.map +1 -0
- package/dist/scripts/3180-c1f065183d-lite.chunk.js +2 -0
- package/dist/scripts/3180-c1f065183d-lite.chunk.js.map +1 -0
- package/dist/scripts/3549-111225ff0e-lite.chunk.js +2 -0
- package/dist/scripts/3549-111225ff0e-lite.chunk.js.map +1 -0
- package/dist/scripts/4591-f78fa6c784-lite.chunk.js +2 -0
- package/dist/scripts/4591-f78fa6c784-lite.chunk.js.map +1 -0
- package/dist/scripts/4667-5101904582-lite.chunk.js +2 -0
- package/dist/scripts/4667-5101904582-lite.chunk.js.map +1 -0
- package/dist/scripts/{5056-6057435479-lite.chunk.js → 5056-65c739468f-lite.chunk.js} +1 -1
- package/dist/scripts/5056-65c739468f-lite.chunk.js.map +1 -0
- package/dist/scripts/5157-e38b666fce-lite.chunk.js +2 -0
- package/dist/scripts/5157-e38b666fce-lite.chunk.js.map +1 -0
- package/dist/scripts/5201-98ee21febb-lite.chunk.js +2 -0
- package/dist/scripts/5201-98ee21febb-lite.chunk.js.map +1 -0
- package/dist/scripts/5595-79068997ce-lite.chunk.js +2 -0
- package/dist/scripts/5595-79068997ce-lite.chunk.js.map +1 -0
- package/dist/scripts/5770-f88f6d9c00-lite.chunk.js +2 -0
- package/dist/scripts/5770-f88f6d9c00-lite.chunk.js.map +1 -0
- package/dist/scripts/5896-60133bfdad-lite.chunk.js +3 -0
- package/dist/scripts/5896-60133bfdad-lite.chunk.js.map +1 -0
- package/dist/scripts/6173-7f9939c29e-lite.chunk.js +3 -0
- package/dist/scripts/6173-7f9939c29e-lite.chunk.js.map +1 -0
- package/dist/scripts/6181-9d7668c9e4-lite.chunk.js +3 -0
- package/dist/scripts/6181-9d7668c9e4-lite.chunk.js.map +1 -0
- package/dist/scripts/6455-37039eb687-lite.chunk.js +2 -0
- package/dist/scripts/6455-37039eb687-lite.chunk.js.map +1 -0
- package/dist/scripts/6623-84b33c6856-lite.chunk.js +3 -0
- package/dist/scripts/6623-84b33c6856-lite.chunk.js.map +1 -0
- package/dist/scripts/6919-0f2cef64e5-lite.chunk.js +2 -0
- package/dist/scripts/6919-0f2cef64e5-lite.chunk.js.map +1 -0
- package/dist/scripts/7267-1f5006c9c5-lite.chunk.js +2 -0
- package/dist/scripts/7267-1f5006c9c5-lite.chunk.js.map +1 -0
- package/dist/scripts/{2083-7daacf0112-lite.chunk.js → 7324-ee20e73ac1-lite.chunk.js} +2 -2
- package/dist/scripts/{2083-7daacf0112-lite.chunk.js.map → 7324-ee20e73ac1-lite.chunk.js.map} +1 -1
- package/dist/scripts/7434-fef3ea4e89-lite.chunk.js +2 -0
- package/dist/scripts/7434-fef3ea4e89-lite.chunk.js.map +1 -0
- package/dist/scripts/7443-4866d0c9ab-lite.chunk.js +3 -0
- package/dist/scripts/7443-4866d0c9ab-lite.chunk.js.map +1 -0
- package/dist/scripts/8416-7d71a55a14-lite.chunk.js +2 -0
- package/dist/scripts/8416-7d71a55a14-lite.chunk.js.map +1 -0
- package/dist/scripts/8465-01b0f72699-lite.chunk.js +2 -0
- package/dist/scripts/8465-01b0f72699-lite.chunk.js.map +1 -0
- package/dist/scripts/8722-a9eac1941c-lite.chunk.js +2 -0
- package/dist/scripts/8722-a9eac1941c-lite.chunk.js.map +1 -0
- package/dist/scripts/9013-6fcc58f028-lite.chunk.js +2 -0
- package/dist/scripts/9013-6fcc58f028-lite.chunk.js.map +1 -0
- package/dist/scripts/9264-998d93d1c2-lite.chunk.js +2 -0
- package/dist/scripts/9264-998d93d1c2-lite.chunk.js.map +1 -0
- package/dist/scripts/9894-0fba5cf702-lite.chunk.js +3 -0
- package/dist/scripts/9894-0fba5cf702-lite.chunk.js.map +1 -0
- package/dist/scripts/bundle-2e839958ca.min.js +3 -0
- package/dist/scripts/bundle-2e839958ca.min.js.map +1 -0
- package/package.json +1 -1
- package/dist/scripts/1755-462bcd99e9-lite.chunk.js +0 -2
- package/dist/scripts/1755-462bcd99e9-lite.chunk.js.map +0 -1
- package/dist/scripts/180-6c4779f6ab-lite.chunk.js +0 -2
- package/dist/scripts/180-6c4779f6ab-lite.chunk.js.map +0 -1
- package/dist/scripts/1820-3b5d0a340d-lite.chunk.js +0 -2
- package/dist/scripts/1820-3b5d0a340d-lite.chunk.js.map +0 -1
- package/dist/scripts/1857-d3af9d98eb-lite.chunk.js +0 -3
- package/dist/scripts/1857-d3af9d98eb-lite.chunk.js.map +0 -1
- package/dist/scripts/2056-84f388df20-lite.chunk.js.map +0 -1
- package/dist/scripts/229-900e650427-lite.chunk.js +0 -2
- package/dist/scripts/229-900e650427-lite.chunk.js.map +0 -1
- package/dist/scripts/2788-eca70707c6-lite.chunk.js.map +0 -1
- package/dist/scripts/3180-22edf4c9fc-lite.chunk.js +0 -2
- package/dist/scripts/3180-22edf4c9fc-lite.chunk.js.map +0 -1
- package/dist/scripts/3549-30d3b1cd05-lite.chunk.js +0 -2
- package/dist/scripts/3549-30d3b1cd05-lite.chunk.js.map +0 -1
- package/dist/scripts/3776-0027340c98-lite.chunk.js +0 -2
- package/dist/scripts/3776-0027340c98-lite.chunk.js.map +0 -1
- package/dist/scripts/4591-3e8dddd0e9-lite.chunk.js +0 -2
- package/dist/scripts/4591-3e8dddd0e9-lite.chunk.js.map +0 -1
- package/dist/scripts/4667-f3882f2379-lite.chunk.js +0 -2
- package/dist/scripts/4667-f3882f2379-lite.chunk.js.map +0 -1
- package/dist/scripts/5056-6057435479-lite.chunk.js.map +0 -1
- package/dist/scripts/5157-ad13101a6e-lite.chunk.js +0 -2
- package/dist/scripts/5157-ad13101a6e-lite.chunk.js.map +0 -1
- package/dist/scripts/5201-7d3867d027-lite.chunk.js +0 -2
- package/dist/scripts/5201-7d3867d027-lite.chunk.js.map +0 -1
- package/dist/scripts/5595-10e586779d-lite.chunk.js +0 -2
- package/dist/scripts/5595-10e586779d-lite.chunk.js.map +0 -1
- package/dist/scripts/5896-5d2f32c59e-lite.chunk.js +0 -3
- package/dist/scripts/5896-5d2f32c59e-lite.chunk.js.map +0 -1
- package/dist/scripts/6181-50a39979ec-lite.chunk.js +0 -3
- package/dist/scripts/6181-50a39979ec-lite.chunk.js.map +0 -1
- package/dist/scripts/6455-2f45be17cf-lite.chunk.js +0 -2
- package/dist/scripts/6455-2f45be17cf-lite.chunk.js.map +0 -1
- package/dist/scripts/6623-ebbffb59b3-lite.chunk.js +0 -3
- package/dist/scripts/6623-ebbffb59b3-lite.chunk.js.map +0 -1
- package/dist/scripts/6919-cb2de57c2e-lite.chunk.js +0 -2
- package/dist/scripts/6919-cb2de57c2e-lite.chunk.js.map +0 -1
- package/dist/scripts/7267-c2d30dd339-lite.chunk.js +0 -2
- package/dist/scripts/7267-c2d30dd339-lite.chunk.js.map +0 -1
- package/dist/scripts/7434-c34ca23a21-lite.chunk.js +0 -2
- package/dist/scripts/7434-c34ca23a21-lite.chunk.js.map +0 -1
- package/dist/scripts/7443-7c72de0cb9-lite.chunk.js +0 -3
- package/dist/scripts/7443-7c72de0cb9-lite.chunk.js.map +0 -1
- package/dist/scripts/8022-0656cce655-lite.chunk.js +0 -2
- package/dist/scripts/8022-0656cce655-lite.chunk.js.map +0 -1
- package/dist/scripts/8722-69c1c7a24f-lite.chunk.js +0 -2
- package/dist/scripts/8722-69c1c7a24f-lite.chunk.js.map +0 -1
- package/dist/scripts/9013-adc5d3517a-lite.chunk.js +0 -2
- package/dist/scripts/9013-adc5d3517a-lite.chunk.js.map +0 -1
- package/dist/scripts/9155-87c9030ce9-lite.chunk.js +0 -2
- package/dist/scripts/9155-87c9030ce9-lite.chunk.js.map +0 -1
- package/dist/scripts/9264-750b3d6ea0-lite.chunk.js +0 -2
- package/dist/scripts/9264-750b3d6ea0-lite.chunk.js.map +0 -1
- package/dist/scripts/9894-bc34edcd67-lite.chunk.js +0 -3
- package/dist/scripts/9894-bc34edcd67-lite.chunk.js.map +0 -1
- package/dist/scripts/bundle-3d3d127d98.min.js +0 -3
- package/dist/scripts/bundle-3d3d127d98.min.js.map +0 -1
- package/dist/css/{6455-lite-fe0bc6d95f.chunk.css → 6455-lite-c07987d46c.chunk.css} +1 -1
- /package/dist/css/{9155-lite-447d345417.chunk.css → 8465-lite-447d345417.chunk.css} +0 -0
- /package/dist/scripts/{1857-d3af9d98eb-lite.chunk.js.LICENSE.txt → 2056-a9e8d17a46-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{2056-84f388df20-lite.chunk.js.LICENSE.txt → 2564-f5628d4e56-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{2564-65e3fc9619-lite.chunk.js.LICENSE.txt → 5896-60133bfdad-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{5896-5d2f32c59e-lite.chunk.js.LICENSE.txt → 6173-7f9939c29e-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6181-50a39979ec-lite.chunk.js.LICENSE.txt → 6181-9d7668c9e4-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6623-ebbffb59b3-lite.chunk.js.LICENSE.txt → 6623-84b33c6856-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{7443-7c72de0cb9-lite.chunk.js.LICENSE.txt → 7443-4866d0c9ab-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9894-bc34edcd67-lite.chunk.js.LICENSE.txt → 9894-0fba5cf702-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-3d3d127d98.min.js.LICENSE.txt → bundle-2e839958ca.min.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1216],{53353:(e,t,a)=>{a.d(t,{c:()=>f,l:()=>h});var n=a(32735),r=a(232),s=a.n(r),i=a(8604),c=a(83345);const o={heatMap:"epapa",legend:"uhH4p"};function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var m="shared.engagementHeatMap",u="#f1f1f1",d=s().scale(["#daf07d","#08bd1a"]),v=[0,.01,.25,.5,.75,1];function p(e,t){return e?d(e/t).hex():u}function g(e,t){for(var a=[],n=0;n<e.length;n++){var r=n>0&&e[n-1],s=e[n],i=n<e.length-1&&e[n+1];s===r&&s===i||a.push("".concat(p(s,t)," ").concat(100/e.length*n,"%"))}return"linear-gradient(to right, ".concat(a.join(","),")")}function h(){var e=Math.max.apply(Math,v),t=100/v.length;return n.createElement("div",{className:"d-flex justify-content-between w-100"},n.createElement(c.x,{namespace:m,phrase:"less"}),n.createElement("div",{className:"d-flex mx-1 flex-grow-1 ".concat(o.legend)},v.map((function(a,r){return n.createElement("div",{key:r,style:{width:"".concat(t,"%"),backgroundColor:p(a,e)}})}))),n.createElement(c.x,{namespace:m,phrase:"more"}))}function f(e){var t,a,r,s=(0,i.O)(e.engagement),c=null!==(t=e.max)&&void 0!==t?t:Math.max.apply(Math,function(e){if(Array.isArray(e))return l(e)}(r=s)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(r)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?l(e,t):void 0}}(r)||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 n.createElement("div",{className:"border rounded ".concat(o.heatMap," ").concat(null!==(a=e.className)&&void 0!==a?a:""),style:{background:g(s,c)}})}},25216:(e,t,a)=>{a.d(t,{L:()=>i});var n=a(32735),r=a(83914);const s={icon:"sAmpy",count:"faDs4"};function i(e){return n.createElement("section",{className:"d-flex flex-column border border-light rounded p-3 h-100"},n.createElement("div",{className:"d-flex ".concat(e.subtitle?"align-items-top":"align-items-center"," mb-2")},n.createElement("div",{className:"".concat(s.icon," ").concat(e.svgClassName," rounded-circle d-flex justify-content-center align-items-center")},n.createElement(r.x,{svgName:e.svgName,size:r.S.Small})),n.createElement("div",{className:"d-flex flex-column ms-2"},n.createElement("h2",{className:"h6 mb-0"},e.title)),"number"==typeof e.count&&n.createElement("div",{className:"".concat(s.count," d-flex justify-content-center align-items-center bg-light rounded-circle ms-auto")},e.count)),e.children)}},21976:(e,t,a)=>{a.d(t,{x:()=>u});var n=a(32735),r=a(72306),s=a.n(r),i=a(70312),c=a.n(i),o=a(75896),l=a(70072),m=function(e){return{title:{text:null},credits:{enabled:!1},yAxis:{title:{text:null},labels:{enabled:!1},gridLineWidth:0,tickPixelInterval:1,startOnTick:!1,endOnTick:!1,min:-.2},xAxis:{title:{text:e,margin:8,style:l.d},labels:{style:l.d},lineWidth:0},legend:{enabled:!1},chart:{type:"column",backgroundColor:"transparent",height:"160px",spacingTop:20},plotOptions:{column:{dataLabels:{enabled:!1},enableMouseTracking:!1,minPointLength:8}}}};function u(e){return n.createElement(c(),{highcharts:s(),options:(a=e.chartData,r=m(e.label),i=null===(t=o.m.first(a.series))||void 0===t?void 0:t.data.some((function(e){return e.y>0})),Object.assign(Object.assign({},r),{yAxis:Object.assign(Object.assign({},r.yAxis),i?{min:-.2}:{min:0,max:1}),xAxis:Object.assign(Object.assign(Object.assign({},r.xAxis),e.xAxis),{categories:a.categories}),series:a.series}))});var t,a,r,i}},461:(e,t,a)=>{a.d(t,{y:()=>m});var n=a(32735),r=a(77640),s=a(36848),i=a(40782),c=a(2606);const o={avatar:"uMuZt",image:"WdKiU"};var l=3;function m(e){return n.createElement(n.Fragment,null,e.students.length?n.createElement("ul",{className:"list-unstyled mb-2"},e.students.slice(0,l).map((function(t,a){return n.createElement("li",{key:a,className:"d-flex align-items-center mb-2"},n.createElement(r.t,{user:t,imageCdnUrl:e.imageCdnUrl,avatarClassName:o.avatar,detailsClassName:"ms-2",showDisplayName:!0,showSubText:!1,anonymiseUsers:e.anonymiseUsers}),n.createElement("div",{className:"d-flex align-items-center ms-auto"},n.createElement("span",{className:"me-2"},void 0===t.percentage?"- ":Math.round(100*t.percentage),"%"),n.createElement(i.O,{percentage:t.percentage,size:c.Mk.ExtraSmall})))}))):n.createElement("div",{className:"text-center"},n.createElement("img",{className:"".concat(o.image," mb-2"),src:e.imageUrl}),n.createElement("p",{className:"text-secondary mb-0",dangerouslySetInnerHTML:{__html:e.description}})),!!e.students.length&&e.appLink&&n.createElement(s.F,{appLink:e.appLink,className:"text-info mt-auto"},e.appLinkText))}},42642:(e,t,a)=>{a.d(t,{i:()=>p});var n=a(32735),r=a(23481),s=a(25216),i=a(21976),c=a(70072),o=a(83345),l=a(35223);const m={purpleChart:"OPcvi",grayChart:"HlWj7"};function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var d="shared.insightDevices",v=r.T.encloseNamespace(d);function p(e){var t,a,r=function(){var t,a={Phone:0,Computer:0};return(null===(t=e.osCount)||void 0===t?void 0:t.length)?e.osCount.reduce((function(e,t){if(!t.name)return e;var a=function(e){switch(e){case"Android":case"Windows Phone":case"iOS":case"BlackBerry":return"Phone";case"Linux":case"Unix":case"Macintosh":case"Windows":return"Computer"}}(t.name);return a?(e[a]=e[a]+t.count,e):e}),a):a}(),p=Math.max.apply(Math,function(e){if(Array.isArray(e))return u(e)}(a=Object.keys(r).map((function(e){return r[e]})))||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(a)||function(e,t){if(e){if("string"==typeof e)return u(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?u(e,t):void 0}}(a)||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.")}()),g=Object.keys(r).filter((function(e){return r[e]===p})),h={categories:Object.keys(r),series:[{type:"column",borderRadius:4,dataLabels:{enabled:!0,style:c.d,inside:!1,overflow:"allow",crop:!1},data:Object.keys(r).map((function(e){var t=0!==p&&r[e]===p;return{className:"".concat(0===r[e]?m.grayChart:m.purpleChart," ").concat(t?"":"opacity-25"),borderWidth:t?2:0,borderColor:t?"black":"",y:r[e]}}))}]};return n.createElement(s.L,{title:v("title"),svgClassName:"bg-light-ultramarine text-ultramarine",svgName:l.vn.Monitor},n.createElement("p",{className:"mb-0"},(null===(t=e.osCount)||void 0===t?void 0:t.filter((function(e){return e.name})).length)?n.createElement(o.x,{namespace:d,phrase:"description",options:{smartCount:g.length,device:1===g.length?g[0].toLowerCase():null}}):n.createElement(o.x,{namespace:d,phrase:"notViewed"})),n.createElement("div",{className:"position-relative mt-auto"},n.createElement(i.x,{label:v("device"),chartData:h,xAxis:{labels:{useHTML:!0,formatter:function(){return'\n <div class="d-flex flex-column align-items-center">\n <span class="'.concat(m.font,' font-size-sm text-dark mb-1">').concat(this.value,"</span>\n ").concat(function(e){var t="";switch(e){case"Computer":t=l.vn.Monitor;break;case"Phone":t=l.vn.Mobile;break;case"Tablet":t=l.vn.Tablet;break;default:return}return l.Nj.getSvg(t).replace(/<svg[^>]*>/g,'<svg class="svg-container">')}(this.value),"\n </div>\n ")}}}})))}},94652:(e,t,a)=>{a.d(t,{b:()=>v});var n=a(32735),r=a(23481),s=a(53353),i=a(25216),c=a(36848),o=a(83345),l=a(35223);const m={heatMap:"Rfr9N",heatMapTimepointIndicator:"s6JbA",heatMapTimepointIndicatorVisible:"mgjWX"};var u="shared.insightHeatmap",d=r.T.encloseNamespace(u);function v(e){var t=e.engagement.engagementRate>0?Math.round(100*e.engagement.engagementRate):null;return n.createElement(i.L,{title:d("title"),svgName:l.vn.Timer,svgClassName:"bg-light-green text-green"},n.createElement("div",{className:"mb-2"},n.createElement("p",{className:"mb-0"},t?n.createElement(o.x,{namespace:u,phrase:"everyoneWatched",options:{engagementRate:t}}):n.createElement(o.x,{namespace:u,phrase:"notWatched"})),t&&n.createElement(c.F,{appLink:e.heatmapAppLink,className:"text-info"},n.createElement(o.x,{namespace:u,phrase:"viewHeatmap"}))),n.createElement("div",{className:"mb-2"},n.createElement(s.c,{engagement:e.engagement,className:m.heatMap})),n.createElement("p",{className:"h3 text-center mb-2"},t||"--","%"),n.createElement("p",{className:"text-center mb-0 font-size-sm"},n.createElement(o.x,{namespace:u,phrase:"amountWatched"})))}},70072:(e,t,a)=>{a.d(t,{d:()=>n});var n={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,a)=>{function n(e){return new Array(Math.ceil(e.videoDuration)).fill(null).map((function(t,a){return e.heatMap[a]||0}))}a.d(t,{O:()=>n})},77640:(e,t,a)=>{a.d(t,{t:()=>v});var n=a(32735),r=a(23481),s=a(26136),i=a(20789),c=a(83914),o=a(76881),l=a(86613),m=a(64818),u=a(94831),d=r.T.encloseNamespace("shared.userRecipientItemMetadata");function v(e){var t,a,r,v,p,g=(r=(t=e).user,v=t.anonymiseUsers,p=t.showDisplayName,"profileId"in r?{name:(0,s.B)(r,v),surname:"",avatarUrl:null}:{name:v?(0,s.B)(r,!0):p?m.l.getDisplayName(r):m.l.getFullName(r),surname:r.surname,avatarUrl:null===(a=r.avatar)||void 0===a?void 0:a.url}),h=g.name,f=g.surname,y=g.avatarUrl;return n.createElement(n.Fragment,null,n.createElement("div",{className:"".concat(u.Z.avatarContainer," ").concat(e.avatarClassName," d-inline-block")},n.createElement(i.q,{imageUrl:y,imageCdnUrl:e.imageCdnUrl,initials:m.l.getInitials(h,f),showAnonymousUser:"profileId"in e.user,anonymousSvgSize:c.S.Small})),n.createElement("div",{className:e.detailsClassName},n.createElement("h4",{className:"font-size-normal fw-normal m-0"},h),e.showSubText&&"id"in e.user&&n.createElement("p",{className:"text-secondary m-0"},e.getSubText?e.getSubText(e.user):function(e){var t=m.l.getUserType(e),a=m.l.getUserRole(e);if(t===o.Y.Staff)return a===l.i.Admin?d("admin"):d("staff");var n=m.l.getYearGroup(e);return(null==n?void 0:n.name)&&"Learners"!==n.name?n.name:d("student")}(e.user))))}v.defaults={showSubText:!0}},40391:(e,t,a)=>{a.d(t,{m9:()=>b,Ad:()=>x,Kh:()=>E});var n=a(32735),r=a(23481),s=a(75896),i=a(20789),c=a(18995),o=a(60376),l=a(83914),m=a(36532),u=a(4594),d=a(36511),v=a(35223),p=a(64818);const g={avatarContainer:"ByxQa",sm:"EgJ0v",sharedAvatar:"cW0NT"};var h=r.T.encloseNamespace("reportsShare.sharedToAvatarList");function f(e){var t=s.m.countBy(e,"typeId"),a=t[u.E.User],n=t[u.E.Classroom],r=t[u.E.ClassroomGroup];return a&&n&&r?h("classroomsGroupsAndUsers",{userCount:a,classroomCount:n,groupCount:r}):a&&n?h("classroomsAndUsers",{userCount:a,classroomCount:n}):a&&r?h("groupsAndUsers",{userCount:a,groupCount:r}):n&&r?h("classroomsAndGroups",{classroomCount:n,groupCount:r}):a?h("users",{userCount:a}):n?h("classrooms",{classroomCount:n}):r?h("groups",{groupCount:r}):void 0}function y(e){var t,a,r,s,c,h=(null===(t=e.item)||void 0===t?void 0:t.typeId)===u.E.User&&e.item,f=(null===(a=e.item)||void 0===a?void 0:a.typeId)===u.E.Classroom&&e.item,y=(null===(r=e.item)||void 0===r?void 0:r.typeId)===u.E.ClassroomGroup&&e.item,b="d-flex justify-content-center align-items-center text-white rounded-circle h-100 w-100";return n.createElement(n.Fragment,null,!!h&&n.createElement(m.u,{title:"".concat(h.name," ").concat(h.surname),spanHack:!0,spanHackClassName:"h-100 w-100"},n.createElement(i.q,{imageUrl:null===(s=h.avatar)||void 0===s?void 0:s.url,imageCdnUrl:e.imageCdnUrl,initials:p.l.getInitials(h.name,h.surname),extraClasses:g.sharedAvatar})),!!f&&n.createElement(m.u,{title:f.name,spanHack:!0,spanHackClassName:"h-100 w-100"},n.createElement("div",{className:b},n.createElement(o.f,{svgName:v.vn.Classrooms,svgSize:l.S.Large,variant:"teal"}))),!!y&&n.createElement(m.u,{title:y.name,spanHack:!0,spanHackClassName:"h-100 w-100"},n.createElement("div",{className:b},n.createElement(o.f,{svgName:v.vn.Group,variant:(0,d.I)(null===(c=y.metadata)||void 0===c?void 0:c.colour)}))))}function b(e){return n.createElement("div",{className:"".concat(g.avatarContainer," ").concat("sm"===e.avatarSize?g.sm:"")},n.createElement(m.u,{title:h("anonymous"),spanHack:!0,spanHackClassName:"bg-light text-dark d-flex justify-content-center align-items-center rounded-circle h-100 w-100"},n.createElement(l.x,{svgName:v.vn.Anonymous,size:"sm"===e.avatarSize?l.S.Small:null})))}function x(e){return n.createElement("div",{className:"".concat(g.avatarContainer," ").concat("sm"===e.avatarSize?g.sm:"")},n.createElement(m.u,{title:e.text||h("sharedLink"),spanHack:!0,spanHackClassName:"bg-light text-dark d-flex justify-content-center align-items-center rounded-circle h-100 w-100 ".concat(e.className||"")},n.createElement(l.x,{svgName:v.vn.Link,size:"sm"===e.avatarSize?l.S.Small:null})))}function E(e){return n.createElement(c.e,Object.assign({},e,{items:e.recipients,avatarItem:y,avatarContainerClassname:"".concat(g.avatarContainer," ").concat("sm"===e.avatarSize?g.sm:""),getHiddenTooltip:f,hasShareLink:e.hasShareLink,shareLinkText:e.shareLinkText}))}E.defaultProps={maxAvatars:5}},65853:(e,t,a)=>{a.d(t,{R:()=>d});var n=a(23481),r=a(110),s=a(4594),i=a(49080),c=a(26361),o=a(35223),l=a(31908);function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var u=n.T.encloseNamespace("share.shareLinkInfo"),d={getPrivateIconAndText:function(e){var t=e.entityTypeId,a=e.privacy,n=e.hasStudentExp,r=e.entity,i=e.yearGroups;if(t===s.E.Topic||t===s.E.Series)return{icon:o.vn.VisibleOn,text:u(n?"justMySchoolTeachers":"justMySchoolDescription")};if(!Array.isArray(a))switch(a.privacy){case"public":return{icon:o.vn.VisibleOn,text:u("publicDescription")};case"protected":return a.overrideRestrictions?{icon:o.vn.VisibleOn,text:u("clickViewOnly")}:{icon:o.vn.Lock,text:d.getRespectRatingText(r,i,n)};case"just_my_customer":return a.overrideRestrictions?{icon:o.vn.Lock,text:u(n?"justMySchoolTeachers":"justMySchoolDescription")}:{icon:o.vn.Lock,text:d.getRespectRatingText(r,i,n)};case"restricted":case"private":return{icon:o.vn.Lock,text:u("privateDescription")};default:return{}}},getIconAndText:function(e){var t=e.linkExpireDate,a=e.isPasswordProtected,n=e.status;if(!t&&!a)return d.getPrivateIconAndText(e);if(!t)return{icon:o.vn.Lock,text:u("password")};var s=r.O.isToday(t),c=r.O.diffBetween(t,new Date,"day");if(!a){var l=s?u("expiryToday"):u("expiry",{days:c});return n===i.F.Expired&&(l=u("expired")),{icon:o.vn.Timer,text:l}}var m=s?u("passwordExpiryToday"):u("passwordExpiry",{days:c});return n===i.F.Expired&&(m=u("passwordExpired")),{icon:o.vn.Lock,text:m}},getRespectRatingText:function(e,t,a){var n;if(!e||!t)return null;if(a)return u("justMySchoolTeachers");if(!l.M.isVideoType(e))return u("collectionRating");var r=c.l.getWeightedRestriction(null===(n=e._restrictions)||void 0===n?void 0:n.value);if(r&&!r.yearGroup)return u("onlyAdmins");var s,i,o,d=l.M.getRating(e),v=function(e,t){var a="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!a){if(Array.isArray(e)||(a=function(e,t){if(e){if("string"==typeof e)return m(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?m(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){a&&(e=a);var n=0,r=function(){};return{s:r,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,i=!0,c=!1;return{s:function(){a=a.call(e)},n:function(){var e=a.next();return i=e.done,e},e:function(e){c=!0,s=e},f:function(){try{i||null==a.return||a.return()}finally{if(c)throw s}}}}(t);try{for(v.s();!(o=v.n()).done;){var p=o.value;(!s||p.value>s.value)&&(s=p),r&&p.value<=r.yearGroup||d&&p.rating.value<d.value||(!i||p.value<i.value)&&(i=p)}}catch(e){v.e(e)}finally{v.f()}return i?1===t.length?u("clickViewOnly"):i.value===s.value?u("maxYearGroup",{yearGroup:s.name}):u("yearGroupRange",{yearGroup:i.name}):u("onlyStaff")}}},18995:(e,t,a)=>{a.d(t,{e:()=>o});var n=a(32735),r=a(23481),s=a(40391),i=a(36532),c=r.T.encloseNamespace("shared.avatarList");function o(e){var t=e.items.length>e.maxAvatars?e.items.slice(0,e.maxAvatars-1):e.items,a=e.items.length>t.length?e.items.slice(e.maxAvatars-1):[],r=e.avatarItem,o=a.length,l="sm"===e.avatarSize?4:8;function m(t){return{transform:"translateX(".concat((e.hasShareLink?t+1:t)*-l,"px)"),zIndex:e.maxAvatars-t}}return 0===t.length&&0===a.length?n.createElement(n.Fragment,null):n.createElement("div",{className:"d-flex",style:{marginRight:"-".concat((t.length-1+(a.length?1:0)+(e.hasShareLink?1:0))*l,"px")}},e.hasShareLink&&n.createElement("div",{style:{zIndex:e.maxAvatars+1}},n.createElement(s.Ad,{text:e.shareLinkText,avatarSize:e.avatarSize,className:"bg-dark text-white"})),t.map((function(t,a){return n.createElement("div",{className:"".concat(e.avatarContainerClassname||""),key:t.id,style:m(a)},n.createElement(r,{item:t,imageCdnUrl:e.imageCdnUrl,index:a,maxAvatars:e.maxAvatars}))})),!!a.length&&n.createElement("div",{className:"".concat(e.avatarContainerClassname||""," bg-white rounded-circle"),style:{transform:"translateX(".concat(t.length*-l,"px)"),zIndex:e.maxAvatars-t.length}},n.createElement(i.u,{title:e.getHiddenTooltip?e.getHiddenTooltip(a):e.roleToDisplay?c("staff"===e.roleToDisplay?"staff":"student",{count:o,smartCount:o}):c("users",{count:o,smartCount:o}),spanHack:!0,spanHackClassName:"h-100 w-100"},n.createElement("div",{className:"d-flex justify-content-center align-items-center border border-dark rounded-circle h-100 w-100 ".concat(e.numberClassname||"")},"+".concat(a.length)))))}o.defaultProps={maxAvatars:5}},94644:(e,t,a)=>{a.d(t,{r:()=>m});var n=a(50242),r=a(81886),s=a(67058),i=a(14553),c=a(49267),o=a(49075),l={notFound:s.d,forbidden:{rating:i.q,yearLevel:i.q,region:c.a,privacy:i.q},badRequest:o._,internalServerError:o._};function m(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var s;s="number"==typeof e?e:e.status;var i=Object.assign(Object.assign({},l),t);s&&r.Q.Ry.isStatusCodeError(s)&&(s!==n.o.InternalServer?s!==n.o.NotFound?s!==n.o.Forbidden?a.badRequest||r.Q.Ry.throw(new i.badRequest):a.forbidden||r.Q.Ry.throw(new i.forbidden.privacy):a.notFound||r.Q.Ry.throw(new i.notFound):a.internalServerError||r.Q.Ry.throw(new o._))}}},17913:(e,t,a)=>{a.d(t,{u:()=>i});var n=a(97395),r=a(110),s=a(62875),i={individualEngagement:function(e,t,a,r){var i=Object.assign({objectId:e},t);return a&&(i.sharerId=a),r&&(i.includePublicViews=!0),{url:n._.urlBuilder("{gateway}/v1/analytics/heat-map",i),key:(0,s.H)("engagement:".concat(e),t,a),formatData:function(e){var t;return Object.assign(Object.assign({},e),{data:null===(t=e.data)||void 0===t?void 0:t.map((function(e){var t;return Object.assign(Object.assign({},e),{heatMap:null!==(t=e.heatMap)&&void 0!==t?t:[]})}))})},normalize:!1}},aggregateEngagement:function(e,t,a,r){var i=Object.assign({objectId:e},t);return a&&(i.sharerId=a),r&&(i.includePublicViews=!0),{url:n._.urlBuilder("{gateway}/v1/analytics/heat-map/aggregations",i),key:(0,s.H)("aggregate:engagement:".concat(e),t,a),formatData:function(e){var t;return Object.assign(Object.assign({},e),{heatMap:null!==(t=e.heatMap)&&void 0!==t?t:[]})},normalize:!1}},views:function(e,t,a,i){var c=Object.assign(Object.assign({},e),{timeOffset:r.O.getTimezoneOffset()});return t&&(c.objectId=t),a&&(c.sharerId=a),i&&(c.includePublicViews=!0),{url:n._.urlBuilder("{gateway}/v1/analytics/video-views",c),key:(0,s.H)("video:views:".concat(t),e,a),normalize:!1}}}},91286:(e,t,a)=>{a.d(t,{v:()=>i});var n=a(32735),r=a(94644);function s(e){return e.map((function(e){return e.statusCode})).join(":")}function i(e,t,a){var i=Array.isArray(e)?e:[e];(0,n.useEffect)((function(){i.forEach((function(e){(0,r.r)(e.statusCode,t,a)}))}),[s(i),t,a])}},93322:(e,t,a)=>{a.d(t,{F:()=>s});var n=a(32735),r=a(13126);function s(){n.useEffect((function(){return r.e.lockContentWidth(),function(){return r.e.unlockContentWidth()}}),[])}},49673:(e,t,a)=>{a.d(t,{u:()=>u});var n=a(32735),r=a(10874),s=a(83345),i=a(35223),c=a(99742),o=a(86099),l=a(25419),m="lite.insightsMask";function u(e){return n.createElement("div",{className:"".concat(!e.hasShared&&l.Z.mask," position-relative")},n.createElement("div",{className:e.hasShared?"":"position-absolute"},e.children),n.createElement("div",{className:e.hasShared?"":"".concat(l.Z.backdrop," d-flex flex-column align-items-center justify-content-start py-5")},!e.hasShared&&n.createElement("div",{className:"text-center p-5 m-5 w-50"},n.createElement("img",{className:"mb-3",src:c.W.Insights.SEND_PAPER_PLANE,width:288}),n.createElement("h2",{className:"h3 mb-3"},n.createElement(s.x,{namespace:m,phrase:"shareHeading"})),n.createElement("p",{className:"mb-3"},n.createElement(s.x,{namespace:m,phrase:"shareDescription"})),n.createElement(r.h,{svgName:i.vn.Share,className:"btn btn-dark",appLink:(0,o.YK)(e.video)},n.createElement(s.x,{namespace:m,phrase:"share"})))))}},17934:(e,t,a)=>{a.d(t,{R:()=>E});var n=a(32735),r=a(82602),s=a(20354),i=a(74901),c=a(40003),o=a(30439),l=a(65853),m=a(64249),u=a(10874),d=a(83345),v=a(39151),p=a(1666),g=a(31949),h=a(17913),f=a(35223),y=a(86099),b=a(24758),x="insights.shareInfo";function E(e){var t,a,E,N,k,C=s.a.useBasicFetch(v.L.config()),S=Object.assign(Object.assign({},(0,c.wO)((0,c.Hb)(),e.dateRangeAppLinkParams)),(0,i.K)(e.audienceAppLinkParams)),w=s.a.useBasicFetch(g.N.currentUser()),A=s.a.useBasicFetch(e.video&&o.o.getShareLinkByObjectId(e.video.id)),T=s.a.useBasicFetch(e.video&&o.o.getSentDirectShareByObjectId(e.video.id)),j=s.a.useBasicFetch((null===(t=w.data)||void 0===t?void 0:t.customerId)&&m.I.getDirectShareRecipientsRequest(w.data.customerId,T.data)),I=s.a.useBasicFetch(w.data&&e.video&&h.u.views(S,e.video.id,w.data.id)),L=s.a.useBasicFetch(e.video&&o.o.getPrivacy(e.video.id)),O=s.a.useBasicFetch((null===(a=w.data)||void 0===a?void 0:a.isAuthenticated)&&p.h.yearGroups(w.data.customerId)),M=A.hasCompleted&&!A.data&&T.hasCompleted&&!T.data,U=A.hasCompleted&&A.data||T.hasCompleted&&T.data&&(!A.data||L.data)&&(!A.data||O.data)&&j.data&&I.data,R=A.data&&L.data&&O.data&&l.R.getIconAndText({entity:e.video,entityTypeId:e.video.typeId,hasStudentExp:!1,isPasswordProtected:A.data.isPasswordProtected,linkExpireDate:A.data.linkExpireDate,privacy:L.data,status:A.data.status,yearGroups:O.data});return n.createElement("div",{className:"mb-4"},U&&n.createElement(n.Fragment,null,n.createElement("h2",{className:"h4"},n.createElement(d.x,{namespace:x,phrase:"shareInfo"})),n.createElement("div",{className:"d-flex border border-light p-3 rounded-3 align-items-center justify-content-between"},n.createElement("div",{className:"d-flex align-items-center gap-2"},n.createElement(b.A,{shareRecipients:j.data,imageCdnUrl:null===(E=C.data)||void 0===E?void 0:E.imageCdnUrl,hasShareLink:!!A.data,maxAvatars:4,shareLinkText:null==R?void 0:R.text}),"·",n.createElement("p",{className:"mb-0"},(0,r.WU)(null===(N=T.data)||void 0===N?void 0:N.dateCreated)),"·",n.createElement("p",{className:"mb-0"},n.createElement(d.x,{namespace:x,phrase:"views",options:{count:null===(k=I.data)||void 0===k?void 0:k.data.length}}))),n.createElement(u.h,{appLink:(0,y.YK)(e.video),svgName:f.vn.Share,className:"btn btn-outline-dark"},n.createElement(d.x,{namespace:x,phrase:"share"})))),!M&&!U&&n.createElement(n.Fragment,null,n.createElement("div",{className:"h4 partial-loading-background w-25"}," "),n.createElement("div",{className:"p-3 rounded partial-loading-background"},n.createElement("p",{className:"mb-1"}," "))))}},24758:(e,t,a)=>{a.d(t,{A:()=>c});var n=a(32735),r=a(40391),s=a(83345),i="myShares.sharedToPill";function c(e){var t=e.shareRecipients;return n.createElement("div",{className:"d-flex align-items-center bg-gray-100 rounded-pill w-fit gap-2 p-2"},n.createElement("span",{className:"text-nowrap"},n.createElement(s.x,{namespace:i,phrase:t?"sharedTo":"sharedVia"})),!t&&n.createElement(r.Ad,{text:e.shareLinkText,avatarSize:"sm",className:"bg-dark text-white"}),t&&!(null==t?void 0:t.length)&&n.createElement(r.m9,{avatarSize:"sm"}),t&&n.createElement(r.Kh,{recipients:t,imageCdnUrl:e.imageCdnUrl,maxAvatars:e.maxAvatars,avatarSize:"sm",hasShareLink:e.hasShareLink,shareLinkText:e.shareLinkText}))}c.defaultProps={maxAvatars:3}},94831:(e,t,a)=>{a.d(t,{Z:()=>n});const n={removeRecipient:"mCbMC",recipientItem:"kdcb0",showSpinner:"xH6Mu",avatarContainer:"Zcpg3",recipientDetails:"v5EmV",recipientDetailsWithRemoveButton:"_V928"}},25419:(e,t,a)=>{a.d(t,{Z:()=>n});const n={mask:"LVGFp",backdrop:"cpCjr"}},82602:(e,t,a)=>{a.d(t,{WU:()=>l});var n=["second","minute","hour","day","week","month","year"],r=["秒","分钟","小时","天","周","个月","年"],s={},i=function(e,t){s[e]=t},c=[60,60,24,7,365/7/12,12];function o(e){return e instanceof Date?e:!isNaN(e)||/^\d+$/.test(e)?new Date(parseInt(e)):(e=(e||"").trim().replace(/\.\d+/,"").replace(/-/,"/").replace(/-/,"/").replace(/(\d)T(\d)/,"$1 $2").replace(/Z/," UTC").replace(/([+-]\d\d):?(\d\d)/," $1$2"),new Date(e))}var l=function(e,t,a){var n=function(e,t){return(+(t?o(t):new Date)-+o(e))/1e3}(e,a&&a.relativeDate);return function(e,t){for(var a=e<0?1:0,n=e=Math.abs(e),r=0;e>=c[r]&&r<c.length;r++)e/=c[r];return(e=Math.floor(e))>(0==(r*=2)?9:1)&&(r+=1),t(e,r,n)[a].replace("%s",e.toString())}(n,function(e){return s[e]||s.en_US}(t))};i("en_US",(function(e,t){if(0===t)return["just now","right now"];var a=n[Math.floor(t/2)];return e>1&&(a+="s"),[e+" "+a+" ago","in "+e+" "+a]})),i("zh_CN",(function(e,t){if(0===t)return["刚刚","片刻后"];var a=r[~~(t/2)];return[e+" "+a+"前",e+" "+a+"后"]}))}}]);
|
|
2
|
+
//# sourceMappingURL=1216-899540dc73-lite.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/1216-899540dc73-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/components/insight-chart/InsightChart.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insight-student-list/insight-student-list.scss","file:///app/packages/libs/shared/src/apps/analytics/components/insight-student-list/InsightStudentList.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/devices/insight-devices.scss","file:///app/packages/libs/shared/src/apps/analytics/components/insights/devices/InsightDevices.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/heatmap/insight-heatmap.scss","file:///app/packages/libs/shared/src/apps/analytics/components/insights/heatmap/InsightHeatmap.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/apps/share/components/recipient-item/user-recipient-item-metadata/UserRecipientItemMetadata.tsx","file:///app/packages/libs/shared/src/apps/share/components/shared-to-avatar-list/shared-to-avatar-list.scss","file:///app/packages/libs/shared/src/apps/share/components/shared-to-avatar-list/SharedToAvatarList.tsx","file:///app/packages/libs/shared/src/apps/share/utils/ShareLinkHelper.ts","file:///app/packages/libs/shared/src/components/avatar-list/AvatarList.tsx","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/flight-requests/VideoViewRequests.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/hooks/useLockContentWidth.ts","file:///app/packages/projects/lite/src/apps/insights/components/insights-mask/InsightsShareMask.tsx","file:///app/packages/projects/lite/src/apps/insights/views/share-info/ShareInfoView.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/shared-to-pill/SharedToPill.tsx","file:///app/packages/libs/shared/src/apps/share/components/recipient-item/recipient-item.scss","file:///app/packages/projects/lite/src/apps/insights/components/insights-mask/insights-mask.scss","file:///app/node_modules/timeago.js/esm/lang/en_US.js","file:///app/node_modules/timeago.js/esm/lang/zh_CN.js","file:///app/node_modules/timeago.js/esm/register.js","file:///app/node_modules/timeago.js/esm/utils/date.js","file:///app/node_modules/timeago.js/esm/format.js","file:///app/node_modules/timeago.js/esm/index.js"],"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 border-light 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}","import React from 'react';\nimport Highcharts from 'highcharts';\nimport HighchartsReact from 'highcharts-react-official';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { CHART_FONT_STYLES } from 'libs/shared/apps/analytics/constants/ChartStyles';\nimport { ChartData } from 'libs/shared/apps/analytics/interfaces/ChartData';\n\nconst getStaticChartOptions = (label: string): Highcharts.Options => {\n return {\n title: {\n text: null\n },\n credits: {\n enabled: false\n },\n yAxis: {\n title: {\n text: null\n },\n labels: {\n enabled: false\n },\n gridLineWidth: 0,\n tickPixelInterval: 1,\n startOnTick: false,\n endOnTick: false,\n min: -0.2\n },\n xAxis: {\n title: {\n text: label,\n margin: 8,\n style: CHART_FONT_STYLES\n },\n labels: {\n style: CHART_FONT_STYLES\n },\n lineWidth: 0\n },\n legend: {\n enabled: false\n },\n chart: {\n type: 'column',\n backgroundColor: 'transparent',\n height: '160px',\n spacingTop: 20\n },\n plotOptions: {\n column: {\n dataLabels: {\n enabled: false\n },\n enableMouseTracking: false,\n minPointLength: 8\n }\n }\n };\n};\n\ninterface InsightChartProps {\n label: string;\n chartData: ChartData;\n xAxis?: Highcharts.XAxisOptions;\n}\n\nexport function InsightChart(props: InsightChartProps) {\n function getChartOptions(): Highcharts.Options {\n const data = props.chartData;\n const staticChartOptions = getStaticChartOptions(props.label);\n\n const hasData = ArrayHelper.first(data.series)?.data.some((data: Highcharts.PointOptionsObject) => data.y > 0);\n\n return {\n ...staticChartOptions,\n yAxis: {\n ...staticChartOptions.yAxis,\n ...(hasData ? {\n min: -0.2\n } : {\n min: 0,\n max: 1\n })\n },\n xAxis: {\n ...staticChartOptions.xAxis,\n ...props.xAxis,\n categories: data.categories\n },\n series: data.series\n };\n }\n\n return (\n <HighchartsReact\n highcharts={Highcharts}\n options={getChartOptions()}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"avatar\":\"uMuZt\",\"image\":\"WdKiU\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { UserRecipientItemMetadata } from 'libs/shared/apps/share/components/recipient-item/user-recipient-item-metadata/UserRecipientItemMetadata';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { PercentageIndicator } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { ProgressCircleSize } from 'libs/shared/components/percentage-indicator/PercentageIndicatorUtils';\nimport { User } from 'libs/shared/interfaces';\nimport { PublicInteractiveUser } from 'libs/shared/interfaces/models/interactive-results/PublicInteractiveUser';\n\nimport styles from './insight-student-list.scss';\n\ntype UserPercentage = (User | PublicInteractiveUser) & {\n percentage?: number;\n}\n\nconst MAX_ITEMS = 3;\n\ninterface InsightStudentListProps {\n students: UserPercentage[];\n imageUrl: string;\n imageCdnUrl: string;\n description: string;\n anonymiseUsers: boolean;\n appLink?: Core.AppLink;\n appLinkText?: string;\n}\n\nexport function InsightStudentList(props: InsightStudentListProps) {\n return (\n <>\n {props.students.length ? (\n <ul className='list-unstyled mb-2'>\n {props.students.slice(0, MAX_ITEMS).map((student, index) => (\n <li key={index} className='d-flex align-items-center mb-2'>\n <UserRecipientItemMetadata\n user={student}\n imageCdnUrl={props.imageCdnUrl}\n avatarClassName={styles.avatar}\n detailsClassName='ms-2'\n showDisplayName\n showSubText={false}\n anonymiseUsers={props.anonymiseUsers}\n />\n\n <div className='d-flex align-items-center ms-auto'>\n <span className='me-2'>{student.percentage === undefined ? '- ' : Math.round(student.percentage * 100)}%</span>\n <PercentageIndicator percentage={student.percentage} size={ProgressCircleSize.ExtraSmall} />\n </div>\n </li>\n ))}\n </ul>\n ) : (\n <div className='text-center'>\n <img className={`${styles.image} mb-2`} src={props.imageUrl} />\n <p className='text-secondary mb-0' dangerouslySetInnerHTML={{ __html: props.description }} />\n </div>\n )}\n\n {!!props.students.length && props.appLink && (\n <AppLink appLink={props.appLink} className='text-info mt-auto'>\n {props.appLinkText}\n </AppLink>\n )}\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"purpleChart\":\"OPcvi\",\"grayChart\":\"HlWj7\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { InsightChart } from 'libs/shared/apps/analytics/components/insight-chart/InsightChart';\nimport { CHART_FONT_STYLES } from 'libs/shared/apps/analytics/constants/ChartStyles';\nimport { GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { ChartData } from 'libs/shared/apps/analytics/interfaces/ChartData';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary, SvgHelper } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './insight-devices.scss';\n\nconst namespace = 'shared.insightDevices';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\n// Names from UserAgentHelper.getOperatingSystem()\nfunction getDeviceType(name: string) {\n switch (name) {\n case 'Android':\n case 'Windows Phone':\n case 'iOS':\n case 'BlackBerry':\n return 'Phone';\n case 'Linux':\n case 'Unix':\n case 'Macintosh':\n case 'Windows':\n return 'Computer';\n }\n}\n\nfunction getDeviceIcon(name: string) {\n let svgName = '';\n \n switch (name) {\n case 'Computer':\n svgName = cvSvgLibrary.Monitor;\n break;\n case 'Phone':\n svgName = cvSvgLibrary.Mobile;\n break;\n case 'Tablet':\n svgName = cvSvgLibrary.Tablet;\n break;\n default: return;\n }\n \n // Default svg attributes causes Highcharts error\n return SvgHelper.getSvg(svgName).replace(/<svg[^>]*>/g, '<svg class=\"svg-container\">');\n}\n\ninterface InsightDevicesProps {\n osCount: GroupedAnalyticsCount[]\n}\n\nexport function InsightDevices(props: InsightDevicesProps) {\n const categoriesData = getCategoriesData();\n const topDeviceCount = getTopDeviceCount();\n const topDevices = getTopDevices();\n\n function getCategoriesData() {\n const defaultDevices: HashObject = { Phone: 0, Computer: 0 };\n\n if (!props.osCount?.length)\n return defaultDevices;\n\n return props.osCount.reduce((acc, group) => {\n if (!group.name) return acc;\n\n const deviceCategory = getDeviceType(group.name);\n\n if (!deviceCategory) return acc;\n\n acc[deviceCategory] = acc[deviceCategory] + group.count;\n\n return acc;\n }, defaultDevices);\n }\n\n function getTopDeviceCount() {\n return Math.max(...Object.keys(categoriesData).map(category => categoriesData[category]));\n }\n\n function getTopDevices() {\n return Object.keys(categoriesData).filter(category => categoriesData[category] === topDeviceCount);\n }\n\n function getXAxisLabelIcons(): any {\n return {\n labels: {\n useHTML: true,\n formatter: function () {\n return `\n <div class=\"d-flex flex-column align-items-center\">\n <span class=\"${styles.font} font-size-sm text-dark mb-1\">${this.value}</span>\n ${getDeviceIcon(this.value)}\n </div>\n `;\n }\n }\n };\n }\n\n function getChartData(): ChartData {\n return {\n categories: Object.keys(categoriesData),\n series: [{\n type: 'column',\n borderRadius: 4,\n dataLabels: {\n enabled: true,\n style: CHART_FONT_STYLES,\n inside: false,\n overflow: 'allow',\n crop: false\n },\n data: Object.keys(categoriesData).map(category => {\n const highestCount =\n topDeviceCount !== 0 && categoriesData[category] === topDeviceCount;\n\n return {\n className: `${categoriesData[category] === 0 ? styles.grayChart : styles.purpleChart} ${!highestCount ? 'opacity-25' : ''}`,\n borderWidth: highestCount ? 2 : 0,\n borderColor: highestCount ? 'black' : '',\n y: categoriesData[category]\n };\n })\n }]\n };\n }\n\n const chartData = getChartData();\n\n return (\n <InsightCard\n title={getPhrase('title')}\n svgClassName='bg-light-ultramarine text-ultramarine'\n svgName={cvSvgLibrary.Monitor}\n >\n <p className='mb-0'>\n {props.osCount?.filter(group => group.name).length\n ? (\n <Text\n namespace={namespace}\n phrase='description'\n options={{\n smartCount: topDevices.length,\n device: topDevices.length === 1 ? topDevices[0].toLowerCase() : null\n }}\n />\n ) : (\n <Text\n namespace={namespace}\n phrase='notViewed'\n />\n )}\n </p>\n\n <div className='position-relative mt-auto'>\n <InsightChart label={getPhrase('device')} chartData={chartData} xAxis={getXAxisLabelIcons()} />\n </div>\n </InsightCard>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"heatMap\":\"Rfr9N\",\"heatMapTimepointIndicator\":\"s6JbA\",\"heatMapTimepointIndicatorVisible\":\"mgjWX\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EngagementHeatMap } from 'libs/shared/apps/analytics/components/engagement-heat-map/EngagementHeatMap';\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Engagement } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './insight-heatmap.scss';\n\nconst namespace = 'shared.insightHeatmap';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightHeatmapProps {\n engagement: Engagement;\n heatmapAppLink: Core.AppLink;\n}\n\nexport function InsightHeatmap(props: InsightHeatmapProps) {\n const engagementRate = props.engagement.engagementRate > 0 ? Math.round(props.engagement.engagementRate * 100) : null;\n\n return (\n <InsightCard\n title={getPhrase('title')}\n svgName={cvSvgLibrary.Timer}\n svgClassName='bg-light-green text-green'\n >\n <div className='mb-2'>\n <p className='mb-0'>\n {engagementRate\n ? (\n <Text namespace={namespace} phrase='everyoneWatched' options={{ engagementRate }} />\n )\n : <Text namespace={namespace} phrase='notWatched' />\n }\n </p>\n {engagementRate &&\n <AppLink appLink={props.heatmapAppLink} className='text-info'>\n <Text namespace={namespace} phrase='viewHeatmap' />\n </AppLink>\n }\n </div>\n\n <div className='mb-2'>\n <EngagementHeatMap\n engagement={props.engagement}\n className={styles.heatMap}\n />\n </div>\n\n <p className='h3 text-center mb-2'>{engagementRate || '--'}%</p>\n <p className='text-center mb-0 font-size-sm'><Text namespace={namespace} phrase='amountWatched' /></p>\n </InsightCard>\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 return (new Array(Math.ceil(engagement.videoDuration))).fill(null).map((t, idx) => engagement.heatMap[idx] || 0);\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { anonymiseUserName } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { UserRole } from 'libs/shared/enums/UserRole';\nimport { BaseObject, User } from 'libs/shared/interfaces';\nimport { PublicInteractiveUser } from 'libs/shared/interfaces/models/interactive-results/PublicInteractiveUser';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from '../recipient-item.scss';\n\nconst namespace = 'shared.userRecipientItemMetadata';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getSubText(user: User): string {\n const userType = UserHelper.getUserType(user);\n const role = UserHelper.getUserRole(user);\n\n if (userType === UserGroup.Staff) {\n if (role === UserRole.Admin)\n return getPhrase('admin');\n\n return getPhrase('staff');\n }\n\n const yearGroup = UserHelper.getYearGroup(user);\n \n /**\n * Tertiary puts all students into a single group called 'Learners'.\n * When a student is in the 'Learners' group, we don't want to display the group name,\n * but instead we want to just show \"Student\". - Sha\n */\n if (yearGroup?.name && yearGroup.name !== 'Learners')\n return yearGroup.name;\n\n return getPhrase('student');\n}\n\nfunction getUserProps({\n user, anonymiseUsers, showDisplayName\n}: {\n user: User | PublicInteractiveUser,\n showDisplayName: boolean;\n anonymiseUsers?: boolean;\n}) {\n if ('profileId' in user) {\n return {\n name: anonymiseUserName(user, anonymiseUsers),\n surname: '',\n avatarUrl: null\n };\n }\n\n return {\n name: anonymiseUsers\n ? anonymiseUserName(user, true)\n : showDisplayName\n ? UserHelper.getDisplayName(user)\n : UserHelper.getFullName(user),\n surname: user.surname,\n avatarUrl: user.avatar?.url\n };\n}\n\nUserRecipientItemMetadata.defaults = {\n showSubText: true\n};\n\ninterface UserRecipientItemMetadataProps {\n user: User | PublicInteractiveUser;\n imageCdnUrl: string;\n detailsClassName?: string;\n avatarClassName?: string;\n showDisplayName: boolean;\n showSubText?: boolean;\n anonymiseUsers?: boolean;\n getSubText?: (user: BaseObject) => string;\n}\n\nexport function UserRecipientItemMetadata(props: UserRecipientItemMetadataProps): JSX.Element {\n const { name, surname, avatarUrl } = getUserProps(props);\n\n return (\n <>\n <div className={`${styles.avatarContainer} ${props.avatarClassName} d-inline-block`}>\n <Avatar\n imageUrl={avatarUrl}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(name, surname)}\n showAnonymousUser={'profileId' in props.user}\n anonymousSvgSize={SvgContainerSize.Small}\n />\n </div>\n\n <div className={props.detailsClassName}>\n <h4 className='font-size-normal fw-normal m-0'>\n {name}\n </h4>\n {props.showSubText && `id` in props.user && <p className='text-secondary m-0'>{props.getSubText ? props.getSubText(props.user) : getSubText(props.user)}</p>}\n </div>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"avatarContainer\":\"ByxQa\",\"sm\":\"EgJ0v\",\"sharedAvatar\":\"cW0NT\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { AvatarItemProps, AvatarList } from 'libs/shared/components/avatar-list/AvatarList';\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BaseObject, Classroom, ClassroomGroup, User } from 'libs/shared/interfaces';\nimport { mapColourToBsVariant } from 'libs/shared/utils/GroupHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './shared-to-avatar-list.scss';\n\nconst namespace = 'reportsShare.sharedToAvatarList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getHiddenRecipientText(hiddenRecipients: BaseObject[]): string {\n const counts = ArrayHelper.countBy(hiddenRecipients, 'typeId');\n const userCount = counts[MasterType.User];\n const classroomCount = counts[MasterType.Classroom];\n const groupCount = counts[MasterType.ClassroomGroup];\n\n if (userCount && classroomCount && groupCount)\n return getPhrase('classroomsGroupsAndUsers', { userCount, classroomCount, groupCount });\n\n if (userCount && classroomCount)\n return getPhrase('classroomsAndUsers', { userCount, classroomCount });\n\n if (userCount && groupCount)\n return getPhrase('groupsAndUsers', { userCount, groupCount });\n\n if (classroomCount && groupCount)\n return getPhrase('classroomsAndGroups', { classroomCount, groupCount });\n\n if (userCount)\n return getPhrase('users', { userCount });\n\n if (classroomCount)\n return getPhrase('classrooms', { classroomCount });\n\n if (groupCount)\n return getPhrase('groups', { groupCount });\n}\n\nfunction SharedToAvatar(props: AvatarItemProps): JSX.Element {\n const user: User = props.item?.typeId === MasterType.User && props.item as User;\n const classroom: Classroom = props.item?.typeId === MasterType.Classroom && props.item as Classroom;\n const classroomGroup: ClassroomGroup = props.item?.typeId === MasterType.ClassroomGroup\n && props.item as ClassroomGroup;\n\n const svgContainerClassName = 'd-flex justify-content-center align-items-center text-white rounded-circle h-100 w-100';\n\n return (\n <>\n {!!user &&\n <Tooltip title={`${user.name} ${user.surname}`} spanHack spanHackClassName='h-100 w-100'>\n <Avatar\n imageUrl={user.avatar?.url}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(user.name, user.surname)}\n extraClasses={styles.sharedAvatar}\n />\n </Tooltip>\n }\n {!!classroom &&\n <Tooltip title={classroom.name} spanHack spanHackClassName='h-100 w-100'>\n <div className={svgContainerClassName}>\n <IconCircle\n svgName={cvSvgLibrary.Classrooms}\n svgSize={SvgContainerSize.Large}\n variant='teal'\n />\n </div>\n </Tooltip>\n }\n {!!classroomGroup &&\n <Tooltip title={classroomGroup.name} spanHack spanHackClassName='h-100 w-100'>\n <div className={svgContainerClassName}>\n <IconCircle\n svgName={cvSvgLibrary.Group}\n variant={mapColourToBsVariant(classroomGroup.metadata?.colour)}\n />\n </div>\n </Tooltip>\n }\n </>\n );\n}\n\n\ninterface AnonymousSharedToAvatarProps {\n avatarSize?: 'md' | 'sm';\n}\n\nexport function AnonymousSharedToAvatar(props: AnonymousSharedToAvatarProps): JSX.Element {\n return (\n <div className={`${styles.avatarContainer} ${props.avatarSize === 'sm' ? styles.sm : ''}`}>\n <Tooltip\n title={getPhrase('anonymous')}\n spanHack\n spanHackClassName='bg-light text-dark d-flex justify-content-center align-items-center rounded-circle h-100 w-100'\n >\n <SvgContainer svgName={cvSvgLibrary.Anonymous} size={props.avatarSize === 'sm' ? SvgContainerSize.Small : null} />\n </Tooltip>\n </div>\n );\n}\n\ninterface SharedLinkAvatarProps {\n text?: string;\n avatarSize?: 'md' | 'sm';\n className?: string;\n}\n\nexport function SharedLinkAvatar(props: SharedLinkAvatarProps): JSX.Element {\n return (\n <div className={`${styles.avatarContainer} ${props.avatarSize === 'sm' ? styles.sm : ''}`}>\n <Tooltip\n title={props.text || getPhrase('sharedLink')}\n spanHack\n spanHackClassName={`bg-light text-dark d-flex justify-content-center align-items-center rounded-circle h-100 w-100 ${props.className || ''}`}\n >\n <SvgContainer svgName={cvSvgLibrary.Link} size={props.avatarSize === 'sm' ? SvgContainerSize.Small : null} />\n </Tooltip>\n </div>\n );\n}\n\ninterface SharedToAvatarListProps {\n recipients: BaseObject[];\n imageCdnUrl: string;\n maxAvatars?: number;\n hasShareLink?: boolean;\n avatarSize?: 'md' | 'sm';\n shareLinkText?: string;\n}\n\nSharedToAvatarList.defaultProps = {\n maxAvatars: 5\n};\n\nexport function SharedToAvatarList(props: SharedToAvatarListProps): JSX.Element {\n return (\n <AvatarList\n {...props}\n items={props.recipients}\n avatarItem={SharedToAvatar}\n avatarContainerClassname={`${styles.avatarContainer} ${props.avatarSize === 'sm' ? styles.sm : ''}`}\n getHiddenTooltip={getHiddenRecipientText}\n hasShareLink={props.hasShareLink}\n shareLinkText={props.shareLinkText}\n />\n );\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SharePrivacyResponse } from 'libs/shared/apps/share/interfaces/responses/SharePrivacyResponse';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ShareLinkStatus } from 'libs/shared/enums/ShareLinkStatus';\nimport { BaseObject, YearGroup } from 'libs/shared/interfaces';\nimport { RestrictionHelper } from 'libs/shared/utils/RestrictionHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nconst namespace = 'share.shareLinkInfo';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface GetIconAndTextOptions {\n linkExpireDate: string;\n isPasswordProtected: boolean;\n privacy: SharePrivacyResponse;\n status: ShareLinkStatus;\n entityTypeId: MasterType;\n hasStudentExp: boolean;\n entity: BaseObject;\n yearGroups: YearGroup[];\n}\n\n\nexport const ShareLinkHelper = {\n getPrivateIconAndText: (options: GetIconAndTextOptions) => {\n const { entityTypeId, privacy, hasStudentExp, entity, yearGroups } = options;\n \n if (entityTypeId === MasterType.Topic || entityTypeId === MasterType.Series)\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase(hasStudentExp ? 'justMySchoolTeachers' : 'justMySchoolDescription') };\n \n /**\n * This is mainly for typescript, privacy will be an array for playlists\n * but that is handled above\n */\n if (Array.isArray(privacy))\n return;\n \n switch (privacy.privacy) {\n case 'public':\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase('publicDescription') };\n case 'protected':\n if (privacy.overrideRestrictions)\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase('clickViewOnly') };\n return {\n icon: cvSvgLibrary.Lock,\n text: ShareLinkHelper.getRespectRatingText(entity, yearGroups, hasStudentExp)\n };\n case 'just_my_customer':\n if (privacy.overrideRestrictions)\n return { icon: cvSvgLibrary.Lock, text: getPhrase(hasStudentExp ? 'justMySchoolTeachers' : 'justMySchoolDescription') };\n return {\n icon: cvSvgLibrary.Lock,\n text: ShareLinkHelper.getRespectRatingText(entity, yearGroups, hasStudentExp)\n };\n /**\n * Because we plan to add restricted management later \n * for the time being we treat is the same as private \n */\n case 'restricted':\n case 'private':\n return { icon: cvSvgLibrary.Lock, text: getPhrase('privateDescription') };\n default:\n return {};\n }\n },\n\n getIconAndText: (options: GetIconAndTextOptions) => {\n const { linkExpireDate, isPasswordProtected, status } = options;\n if (!linkExpireDate && !isPasswordProtected)\n return ShareLinkHelper.getPrivateIconAndText(options);\n \n if (!linkExpireDate)\n return { icon: cvSvgLibrary.Lock, text: getPhrase('password') };\n \n const isToday = DateHelper.isToday(linkExpireDate);\n const dayDifference = DateHelper.diffBetween(linkExpireDate, new Date(), 'day');\n \n if (!isPasswordProtected) {\n let text = isToday\n ? getPhrase('expiryToday')\n : getPhrase('expiry', { days: dayDifference });\n \n if (status === ShareLinkStatus.Expired)\n text = getPhrase('expired');\n \n return { icon: cvSvgLibrary.Timer, text };\n }\n \n let text = isToday\n ? getPhrase('passwordExpiryToday')\n : getPhrase('passwordExpiry', { days: dayDifference });\n \n if (status === ShareLinkStatus.Expired)\n text = getPhrase('passwordExpired');\n \n return { icon: cvSvgLibrary.Lock, text };\n },\n\n getRespectRatingText(video: BaseObject, yearGroups: YearGroup[], hasStudentExp: boolean) {\n if (!video || !yearGroups)\n return null;\n \n if (hasStudentExp)\n return getPhrase('justMySchoolTeachers');\n \n if (!VideoHelper.isVideoType(video))\n return getPhrase('collectionRating');\n \n const restriction = RestrictionHelper.getWeightedRestriction(video._restrictions?.value);\n \n /**\n * Restrictions without a year level are teacher restricitons, which means only admins can see it.\n */\n if (restriction && !restriction.yearGroup)\n return getPhrase('onlyAdmins');\n \n const rating = VideoHelper.getRating(video);\n \n let maxYearGroup: YearGroup;\n let minAllowedYearGroup: YearGroup;\n \n for (const yearGroup of yearGroups) {\n /**\n * If our year level is our new highest so far, save it\n */\n if (!maxYearGroup || yearGroup.value > maxYearGroup.value)\n maxYearGroup = yearGroup;\n \n /**\n * If the restriction is higher than this year level, skip it.\n */\n if (restriction && yearGroup.value <= restriction.yearGroup)\n continue;\n \n /**\n * If therating is higher than this year level's rating value, skip it.\n */\n if (rating && yearGroup.rating.value < rating.value)\n continue;\n \n /**\n * If our year level is the new lowest so far, save it\n */\n if (!minAllowedYearGroup || yearGroup.value < minAllowedYearGroup.value)\n minAllowedYearGroup = yearGroup;\n }\n \n /**\n * If no year levels are allowed, then it's staff only.\n */\n if (!minAllowedYearGroup)\n return getPhrase('onlyStaff');\n \n \n /**\n * If there's only one year level, and it's allowed, then we can just\n * say that everyone in your school can access it.\n */\n if (yearGroups.length === 1)\n return getPhrase('clickViewOnly');\n \n /**\n * We differentiate the copy if it's the highest year level or not. \n * Basically if we need to say \"X and above\" or not.\n */\n if (minAllowedYearGroup.value === maxYearGroup.value)\n return getPhrase('maxYearGroup', { yearGroup: maxYearGroup.name });\n \n return getPhrase('yearGroupRange', { yearGroup: minAllowedYearGroup.name });\n }\n};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SharedLinkAvatar } from 'libs/shared/apps/share/components/shared-to-avatar-list/SharedToAvatarList';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.avatarList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface AvatarItemProps {\n imageCdnUrl: string;\n index: number;\n item?: BaseObject;\n hiddenItems?: BaseObject[];\n maxAvatars?: number;\n}\n\ninterface AvatarListProps {\n items: BaseObject[];\n imageCdnUrl: string;\n maxAvatars?: number;\n avatarItem?: (props: AvatarItemProps) => JSX.Element;\n getHiddenTooltip?: (hiddenItems: BaseObject[]) => string;\n numberClassname?: string;\n avatarContainerClassname?: string;\n roleToDisplay?: 'student' | 'staff';\n hasShareLink?: boolean;\n avatarSize?: 'md' | 'sm';\n shareLinkText?: string;\n}\n\nAvatarList.defaultProps = {\n maxAvatars: 5\n};\n\nexport function AvatarList(props: AvatarListProps): JSX.Element {\n const itemsToDisplay = props.items.length > props.maxAvatars\n ? props.items.slice(0, props.maxAvatars - 1)\n : props.items;\n\n const hiddenItems = props.items.length > itemsToDisplay.length\n ? props.items.slice(props.maxAvatars - 1)\n : [];\n\n const AvatarItem = props.avatarItem;\n const hiddenItemsCounts = hiddenItems.length;\n const translateX = props.avatarSize === 'sm' ? 4 : 8;\n\n function getTooltip() {\n if (props.getHiddenTooltip)\n return props.getHiddenTooltip(hiddenItems);\n\n if (props.roleToDisplay)\n return getPhrase(props.roleToDisplay === 'staff' ? 'staff' : 'student', { count: hiddenItemsCounts, smartCount: hiddenItemsCounts });\n\n return getPhrase('users', { count: hiddenItemsCounts, smartCount: hiddenItemsCounts });\n }\n\n function getContainerStyles() {\n return {\n marginRight: `-${((itemsToDisplay.length - 1) + (hiddenItems.length ? 1 : 0) + (props.hasShareLink ? 1 : 0)) * translateX}px`\n };\n }\n\n function getAvatarStyles(idx: number) {\n return {\n transform: `translateX(${(props.hasShareLink ? idx + 1 : idx) * -translateX}px)`,\n zIndex: props.maxAvatars - idx\n };\n }\n\n if (itemsToDisplay.length === 0 && hiddenItems.length === 0)\n return <></>;\n\n return (\n <div\n className='d-flex'\n style={getContainerStyles()}\n >\n {props.hasShareLink && (\n <div style={{ zIndex: props.maxAvatars + 1 }}>\n <SharedLinkAvatar text={props.shareLinkText} avatarSize={props.avatarSize} className='bg-dark text-white' />\n </div>\n )}\n {itemsToDisplay.map((item, idx) => (\n <div\n className={`${props.avatarContainerClassname || ''}`} key={item.id}\n style={getAvatarStyles(idx)}\n >\n <AvatarItem\n item={item}\n imageCdnUrl={props.imageCdnUrl}\n index={idx}\n maxAvatars={props.maxAvatars}\n />\n </div>\n ))}\n\n {!!hiddenItems.length && (\n <div\n className={`${props.avatarContainerClassname || ''} bg-white rounded-circle`}\n style={{ transform: `translateX(${itemsToDisplay.length * -translateX}px)`, zIndex: props.maxAvatars - itemsToDisplay.length }}\n >\n <Tooltip title={getTooltip()} spanHack spanHackClassName='h-100 w-100'>\n <div className={`d-flex justify-content-center align-items-center border border-dark rounded-circle h-100 w-100 ${props.numberClassname || ''}`}>\n {`+${hiddenItems.length}`}\n </div>\n </Tooltip>\n </div>\n )}\n </div>\n );\n}","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n internalServerError?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError,\n internalServerError: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.InternalServer) {\n if (!ignoreMap.internalServerError)\n Core.ErrorHelper.throw(new UnspecifiedError());\n return;\n }\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AnalyticsRequestFilter, Engagement } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\nexport const VideoViewRequests = {\n individualEngagement(\n objectId: string,\n filter: AnalyticsRequestFilter,\n sharerId?: string,\n includePublicViews?: boolean\n ): Flight.Request {\n const queryParams: HashObject = {\n objectId,\n ...filter\n };\n\n if (sharerId)\n queryParams.sharerId = sharerId;\n\n if (includePublicViews)\n queryParams.includePublicViews = true;\n\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/analytics/heat-map', queryParams),\n key: getAnalyticsRequestKey(`engagement:${objectId}`, filter, sharerId),\n formatData: (data: any) => {\n return {\n ...data,\n data: data.data?.map((d: any) => ({\n ...d,\n heatMap: d.heatMap ?? []\n }))\n };\n },\n normalize: false\n };\n },\n \n aggregateEngagement(\n objectId: string,\n filter: AnalyticsRequestFilter,\n sharerId?: string,\n includePublicViews?: boolean\n ): Flight.Request {\n const queryParams: HashObject = {\n objectId,\n ...filter\n };\n\n if (sharerId)\n queryParams.sharerId = sharerId;\n \n if (includePublicViews)\n queryParams.includePublicViews = true;\n\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/analytics/heat-map/aggregations', queryParams),\n key: getAnalyticsRequestKey(`aggregate:engagement:${objectId}`, filter, sharerId),\n formatData: (data: Engagement) => {\n return {\n ...data,\n heatMap: data.heatMap ?? []\n };\n },\n normalize: false\n };\n },\n \n views(\n filter: AnalyticsRequestFilter,\n objectId?: string,\n sharerId?: string,\n includePublicViews?: boolean\n ): Flight.Request {\n const queryParams: HashObject = {\n ...filter,\n timeOffset: DateHelper.getTimezoneOffset()\n };\n\n if (objectId)\n queryParams.objectId = objectId;\n\n if (sharerId)\n queryParams.sharerId = sharerId;\n \n if (includePublicViews)\n queryParams.includePublicViews = true;\n\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/analytics/video-views', queryParams),\n key: getAnalyticsRequestKey(`video:views:${objectId}`, filter, sharerId),\n normalize: false\n };\n }\n};","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import React from 'react';\n\nimport { LayoutHelper } from 'libs/shared/utils/LayoutHelper';\n\nexport function useLockContentWidth(): void {\n React.useEffect(() => {\n LayoutHelper.lockContentWidth();\n return () => LayoutHelper.unlockContentWidth();\n }, []);\n}","import React from 'react';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { getShareAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport styles from './insights-mask.scss';\n\nconst namespace = 'lite.insightsMask';\n\ninterface InsightsShareMaskProps extends React.PropsWithChildren {\n hasShared: boolean;\n video: VideoTypes;\n}\n\nexport function InsightsShareMask(props: InsightsShareMaskProps) {\n return (\n <div className={`${!props.hasShared && styles.mask} position-relative`}>\n <div className={!props.hasShared ? 'position-absolute' : ''}>{props.children}</div>\n <div\n className={!props.hasShared ? `${styles.backdrop} d-flex flex-column align-items-center justify-content-start py-5` : ''}\n >\n {!props.hasShared && (\n <div className='text-center p-5 m-5 w-50'>\n <img className='mb-3' src={ImageUrls.Insights.SEND_PAPER_PLANE} width={288} />\n <h2 className='h3 mb-3'><Text namespace={namespace} phrase='shareHeading' /></h2>\n <p className='mb-3'><Text namespace={namespace} phrase='shareDescription' /></p>\n <IconButton svgName={cvSvgLibrary.Share} className='btn btn-dark' appLink={getShareAppLink(props.video)}>\n <Text namespace={namespace} phrase='share' />\n </IconButton>\n </div>\n )}\n </div>\n </div>\n );\n}","import React from 'react';\nimport { format as formatDate } from 'timeago.js';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { AudienceQueryParams } from 'libs/shared/apps/analytics/interfaces/AudienceQueryParams';\nimport { BaseAnalyticsEventResponse } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { DateRangeQueryParams } from 'libs/shared/apps/analytics/interfaces/DateRangeQueryParams';\nimport { getAudienceParams } from 'libs/shared/apps/analytics/utils/AudienceUtils';\nimport { getInsightsDateRangePresets, getStartEndParams } from 'libs/shared/apps/analytics/utils/DateRangeUtils';\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { SharePrivacyResponse } from 'libs/shared/apps/share/interfaces/responses/SharePrivacyResponse';\nimport { ShareLinkHelper } from 'libs/shared/apps/share/utils/ShareLinkHelper';\nimport { SharableRecipient, ShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\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 { VideoViewRequests } from 'libs/shared/flight-requests/VideoViewRequests';\nimport { Config, CurrentUser, DirectShare, ShareLink, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { getShareAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport { SharedToPill } from 'apps/my-shares/components/shared-to-pill/SharedToPill';\n\nconst namespace = 'insights.shareInfo';\n\ninterface ShareInfoViewProps {\n video: VideoTypes;\n audienceAppLinkParams: AudienceQueryParams;\n dateRangeAppLinkParams: DateRangeQueryParams;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function ShareInfoView(props: ShareInfoViewProps) {\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const requestFilter = {\n ...getStartEndParams(getInsightsDateRangePresets(), props.dateRangeAppLinkParams),\n ...getAudienceParams(props.audienceAppLinkParams)\n };\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const shareLink = Flight.useBasicFetch<ShareLink>(props.video &&\n ShareRequests.getShareLinkByObjectId(props.video.id));\n const sentDirectShare = Flight.useBasicFetch<DirectShare>(props.video &&\n ShareRequests.getSentDirectShareByObjectId(props.video.id));\n const recipients = Flight.useBasicFetch<SharableRecipient[]>(currentUser.data?.customerId &&\n ShareViewHelper.getDirectShareRecipientsRequest(currentUser.data.customerId, sentDirectShare.data));\n const videoViews = Flight.useBasicFetch<BaseAnalyticsEventResponse>(currentUser.data && props.video &&\n VideoViewRequests.views(requestFilter, props.video.id, currentUser.data.id));\n const privacy = Flight.useBasicFetch<SharePrivacyResponse>(props.video && ShareRequests.getPrivacy(props.video.id));\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const notShared =\n (shareLink.hasCompleted && !shareLink.data) &&\n (sentDirectShare.hasCompleted && !sentDirectShare.data);\n\n const hasShareData =\n (shareLink.hasCompleted && shareLink.data) ||\n (sentDirectShare.hasCompleted && sentDirectShare.data) &&\n (!shareLink.data || privacy.data) &&\n (!shareLink.data || yearGroups.data) &&\n recipients.data &&\n videoViews.data;\n\n const shareLinkText = shareLink.data && privacy.data && yearGroups.data &&\n ShareLinkHelper.getIconAndText({\n entity: props.video,\n entityTypeId: props.video.typeId,\n hasStudentExp: false,\n isPasswordProtected: shareLink.data.isPasswordProtected,\n linkExpireDate: shareLink.data.linkExpireDate,\n privacy: privacy.data,\n status: shareLink.data.status,\n yearGroups: yearGroups.data\n });\n\n return (\n <div className='mb-4'>\n {hasShareData &&\n <>\n <h2 className='h4'><Text namespace={namespace} phrase='shareInfo' /></h2>\n\n <div className='d-flex border border-light p-3 rounded-3 align-items-center justify-content-between'>\n <div className='d-flex align-items-center gap-2'>\n <SharedToPill\n shareRecipients={recipients.data}\n imageCdnUrl={config.data?.imageCdnUrl}\n hasShareLink={!!shareLink.data}\n maxAvatars={4}\n shareLinkText={shareLinkText?.text}\n />\n ·\n <p className='mb-0'>{formatDate(sentDirectShare.data?.dateCreated)}</p>\n ·\n <p className='mb-0'><Text namespace={namespace} phrase='views' options={{ count: videoViews.data?.data.length }} /></p>\n </div>\n <IconButton\n appLink={getShareAppLink(props.video)}\n svgName={cvSvgLibrary.Share}\n className='btn btn-outline-dark'\n >\n <Text namespace={namespace} phrase='share' />\n </IconButton>\n </div>\n </>\n }\n\n {!notShared && !hasShareData &&\n <>\n <div className='h4 partial-loading-background w-25'> </div>\n <div className='p-3 rounded partial-loading-background'>\n <p className='mb-1'> </p>\n </div>\n </>\n }\n </div>\n );\n}","import React from 'react';\n\nimport { AnonymousSharedToAvatar, SharedLinkAvatar, SharedToAvatarList } from 'libs/shared/apps/share/components/shared-to-avatar-list/SharedToAvatarList';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst namespace = 'myShares.sharedToPill';\n\ninterface SharedToPillProps {\n shareRecipients: BaseObject[];\n hasShareLink?: boolean;\n maxAvatars?: number;\n imageCdnUrl: string;\n shareLinkText?: string;\n}\n\nSharedToPill.defaultProps = {\n maxAvatars: 3\n};\n\nexport function SharedToPill(props: SharedToPillProps) {\n const { shareRecipients } = props;\n\n return (\n <div className='d-flex align-items-center bg-gray-100 rounded-pill w-fit gap-2 p-2'>\n <span className='text-nowrap'><Text namespace={namespace} phrase={!shareRecipients ? 'sharedVia' : 'sharedTo'} /></span>\n\n {!shareRecipients &&\n <SharedLinkAvatar text={props.shareLinkText} avatarSize='sm' className='bg-dark text-white' />\n }\n\n {shareRecipients && !shareRecipients?.length &&\n <AnonymousSharedToAvatar avatarSize='sm' />\n }\n\n {shareRecipients &&\n <SharedToAvatarList\n recipients={shareRecipients}\n imageCdnUrl={props.imageCdnUrl}\n maxAvatars={props.maxAvatars}\n avatarSize='sm'\n hasShareLink={props.hasShareLink}\n shareLinkText={props.shareLinkText}\n />\n }\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"removeRecipient\":\"mCbMC\",\"recipientItem\":\"kdcb0\",\"showSpinner\":\"xH6Mu\",\"avatarContainer\":\"Zcpg3\",\"recipientDetails\":\"v5EmV\",\"recipientDetailsWithRemoveButton\":\"_V928\"};","// extracted by mini-css-extract-plugin\nexport default {\"mask\":\"LVGFp\",\"backdrop\":\"cpCjr\"};","var EN_US = ['second', 'minute', 'hour', 'day', 'week', 'month', 'year'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['just now', 'right now'];\n var unit = EN_US[Math.floor(idx / 2)];\n if (diff > 1)\n unit += 's';\n return [diff + \" \" + unit + \" ago\", \"in \" + diff + \" \" + unit];\n}\n//# sourceMappingURL=en_US.js.map","var ZH_CN = ['秒', '分钟', '小时', '天', '周', '个月', '年'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['刚刚', '片刻后'];\n var unit = ZH_CN[~~(idx / 2)];\n return [diff + \" \" + unit + \"\\u524D\", diff + \" \" + unit + \"\\u540E\"];\n}\n//# sourceMappingURL=zh_CN.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\n/**\n * All supported locales\n */\nvar Locales = {};\n/**\n * register a locale\n * @param locale\n * @param func\n */\nexport var register = function (locale, func) {\n Locales[locale] = func;\n};\n/**\n * get a locale, default is en_US\n * @param locale\n * @returns {*}\n */\nexport var getLocale = function (locale) {\n return Locales[locale] || Locales['en_US'];\n};\n//# sourceMappingURL=register.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nvar SEC_ARRAY = [\n 60,\n 60,\n 24,\n 7,\n 365 / 7 / 12,\n 12,\n];\n/**\n * format Date / string / timestamp to timestamp\n * @param input\n * @returns {*}\n */\nexport function toDate(input) {\n if (input instanceof Date)\n return input;\n // @ts-ignore\n if (!isNaN(input) || /^\\d+$/.test(input))\n return new Date(parseInt(input));\n input = (input || '')\n // @ts-ignore\n .trim()\n .replace(/\\.\\d+/, '') // remove milliseconds\n .replace(/-/, '/')\n .replace(/-/, '/')\n .replace(/(\\d)T(\\d)/, '$1 $2')\n .replace(/Z/, ' UTC') // 2017-2-5T3:57:52Z -> 2017-2-5 3:57:52UTC\n .replace(/([+-]\\d\\d):?(\\d\\d)/, ' $1$2'); // -04:00 -> -0400\n return new Date(input);\n}\n/**\n * format the diff second to *** time ago, with setting locale\n * @param diff\n * @param localeFunc\n * @returns\n */\nexport function formatDiff(diff, localeFunc) {\n /**\n * if locale is not exist, use defaultLocale.\n * if defaultLocale is not exist, use build-in `en`.\n * be sure of no error when locale is not exist.\n *\n * If `time in`, then 1\n * If `time ago`, then 0\n */\n var agoIn = diff < 0 ? 1 : 0;\n /**\n * Get absolute value of number (|diff| is non-negative) value of x\n * |diff| = diff if diff is positive\n * |diff| = -diff if diff is negative\n * |0| = 0\n */\n diff = Math.abs(diff);\n /**\n * Time in seconds\n */\n var totalSec = diff;\n /**\n * Unit of time\n */\n var idx = 0;\n for (; diff >= SEC_ARRAY[idx] && idx < SEC_ARRAY.length; idx++) {\n diff /= SEC_ARRAY[idx];\n }\n /**\n * Math.floor() is alternative of ~~\n *\n * The differences and bugs:\n * Math.floor(3.7) -> 4 but ~~3.7 -> 3\n * Math.floor(1559125440000.6) -> 1559125440000 but ~~1559125440000.6 -> 52311552\n *\n * More information about the performance of algebraic:\n * https://www.youtube.com/watch?v=65-RbBwZQdU\n */\n diff = Math.floor(diff);\n idx *= 2;\n if (diff > (idx === 0 ? 9 : 1))\n idx += 1;\n return localeFunc(diff, idx, totalSec)[agoIn].replace('%s', diff.toString());\n}\n/**\n * calculate the diff second between date to be formatted an now date.\n * @param date\n * @param relativeDate\n * @returns {number}\n */\nexport function diffSec(date, relativeDate) {\n var relDate = relativeDate ? toDate(relativeDate) : new Date();\n return (+relDate - +toDate(date)) / 1000;\n}\n/**\n * nextInterval: calculate the next interval time.\n * - diff: the diff sec between now and date to be formatted.\n *\n * What's the meaning?\n * diff = 61 then return 59\n * diff = 3601 (an hour + 1 second), then return 3599\n * make the interval with high performance.\n **/\nexport function nextInterval(diff) {\n var rst = 1, i = 0, d = Math.abs(diff);\n for (; diff >= SEC_ARRAY[i] && i < SEC_ARRAY.length; i++) {\n diff /= SEC_ARRAY[i];\n rst *= SEC_ARRAY[i];\n }\n d = d % rst;\n d = d ? rst - d : rst;\n return Math.ceil(d);\n}\n//# sourceMappingURL=date.js.map","import { formatDiff, diffSec } from './utils/date';\nimport { getLocale } from './register';\n/**\n * format a TDate into string\n * @param date\n * @param locale\n * @param opts\n */\nexport var format = function (date, locale, opts) {\n // diff seconds\n var sec = diffSec(date, opts && opts.relativeDate);\n // format it with locale\n return formatDiff(sec, getLocale(locale));\n};\n//# sourceMappingURL=format.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nimport en_US from './lang/en_US';\nimport zh_CN from './lang/zh_CN';\nimport { register } from './register';\nregister('en_US', en_US);\nregister('zh_CN', zh_CN);\nexport { format } from './format';\nexport { render, cancel } from './realtime';\nexport { register };\n//# sourceMappingURL=index.js.map"],"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","getStaticChartOptions","label","text","credits","enabled","yAxis","labels","gridLineWidth","tickPixelInterval","startOnTick","endOnTick","min","xAxis","margin","lineWidth","legend","chart","type","height","spacingTop","plotOptions","column","dataLabels","enableMouseTracking","minPointLength","InsightChart","highcharts","options","chartData","staticChartOptions","hasData","series","some","y","categories","MAX_ITEMS","InsightStudentList","students","slice","student","index","UserRecipientItemMetadata","user","imageCdnUrl","avatarClassName","detailsClassName","showDisplayName","showSubText","anonymiseUsers","undefined","percentage","round","PercentageIndicator","src","imageUrl","dangerouslySetInnerHTML","__html","description","appLink","AppLink","appLinkText","getPhrase","LanguageService","InsightDevices","categoriesData","defaultDevices","Phone","Computer","osCount","reduce","acc","group","name","deviceCategory","getDeviceType","getCategoriesData","topDeviceCount","Object","keys","category","topDevices","filter","borderRadius","inside","overflow","crop","highestCount","borderWidth","borderColor","smartCount","device","toLowerCase","useHTML","formatter","this","SvgHelper","replace","getDeviceIcon","InsightHeatmap","engagementRate","heatmapAppLink","CHART_FONT_STYLES","fontSize","fontFamily","fontWeight","color","getFullHeatMap","Array","ceil","videoDuration","fill","t","surname","avatarUrl","avatar","url","initials","showAnonymousUser","anonymousSvgSize","getSubText","userType","role","yearGroup","defaults","getHiddenRecipientText","hiddenRecipients","counts","ArrayHelper","userCount","MasterType","classroomCount","groupCount","SharedToAvatar","item","typeId","classroom","classroomGroup","svgContainerClassName","Tooltip","spanHack","spanHackClassName","Avatar","UserHelper","extraClasses","IconCircle","svgSize","variant","metadata","colour","AnonymousSharedToAvatar","avatarSize","SharedLinkAvatar","SharedToAvatarList","AvatarList","items","recipients","avatarItem","avatarContainerClassname","getHiddenTooltip","hasShareLink","shareLinkText","defaultProps","maxAvatars","ShareLinkHelper","getPrivateIconAndText","entityTypeId","privacy","hasStudentExp","entity","yearGroups","icon","isArray","overrideRestrictions","getRespectRatingText","getIconAndText","linkExpireDate","isPasswordProtected","status","isToday","dayDifference","Date","days","video","restriction","_restrictions","maxYearGroup","minAllowedYearGroup","rating","itemsToDisplay","hiddenItems","AvatarItem","hiddenItemsCounts","translateX","getAvatarStyles","transform","zIndex","marginRight","id","roleToDisplay","numberClassname","defaultErrors","notFound","forbidden","yearLevel","region","badRequest","internalServerError","handleHttpError","info","customErrorMap","ignoreMap","statusCode","errorMap","VideoViewRequests","individualEngagement","objectId","sharerId","includePublicViews","queryParams","formatData","d","normalize","aggregateEngagement","views","timeOffset","generateCacheKey","flightObjs","obj","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","useEffect","forEach","useLockContentWidth","InsightsShareMask","hasShared","ShareInfoView","config","requestFilter","dateRangeAppLinkParams","audienceAppLinkParams","currentUser","shareLink","sentDirectShare","customerId","videoViews","isAuthenticated","notShared","hasCompleted","hasShareData","shareRecipients","dateCreated","SharedToPill","EN_US","ZH_CN","Locales","register","locale","func","SEC_ARRAY","toDate","input","isNaN","test","parseInt","trim","format","date","opts","sec","relativeDate","diff","localeFunc","agoIn","totalSec","abs","floor","toString","unit"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1820],{50690:(e,t,n)=>{n.d(t,{b:()=>a});var r=n(12788),a={renderInPortalIfExists:function(e,t){return t?(0,r.createPortal)(e,t):e}}},84963:(e,t,n)=>{n.d(t,{r:()=>u});var r=n(32735),a=n(23481),i=n(83914),o=n(36532),l=n(35223);const s={tag:"XRj8d",tooltip:"X6mLk"};var c="specialEventCalendar.comingSoonTag";function u(e){return r.createElement(o.u,{title:a.T.getPhrase(c,"tooltip"),spanHackClassName:"d-block ".concat(s.tooltip),spanHack:!0},r.createElement("div",{className:"d-flex text-dark align-items-center ".concat(s.tag," ").concat(e.className)},r.createElement(i.x,{svgName:l.vn.Timer}),!e.onlyIcon&&a.T.getPhrase(c,"comingSoon")))}},73679:(e,t,n)=>{n.d(t,{s:()=>o});var r=n(32735),a=n(36848);const i={dateItem:"I3SBm",label:"PRORs",body:"RfiM_",bodyDay:"ZOVny",bodyRange:"vYhXN",bodyMonth:"mYslO",month:"EPkkQ"};function o(e){var t,n,o;return r.createElement(a.F,{appLink:null===(t=e.getAppLink)||void 0===t?void 0:t.call(e),className:"text-decoration-none text-center bg-white text-dark border border-3 ".concat(null===(n=e.theme)||void 0===n?void 0:n.border," rounded-3 d-block fw-semibold ").concat(e.className),analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions},r.createElement("div",{className:"position-relative ".concat(i.dateItem)},r.createElement("div",{className:"".concat(null===(o=e.theme)||void 0===o?void 0:o.background," py-1 ").concat(i.label," d-flex align-items-center justify-content-center")},e.label?e.label:r.createElement(r.Fragment,null," ")),r.createElement("div",{className:"".concat(function(){switch(e.body.type){case"range":return i.bodyRange;case"day":return i.bodyDay;case"month":return i.bodyMonth}}()," ").concat(i.body," my-2")},e.body.text),r.createElement("div",{className:"mb-0 ".concat(i.month)},e.month)))}},44522:(e,t,n)=>{n.d(t,{p:()=>k,v:()=>N});var r=n(32735),a=n(110),i=n(50690),o=n(84963),l=n(73679),s=n(83657),c=n(23481),u=n(36848),d=n(83914),m=n(35223),f="shared.backButton";function p(e){var t=Object.assign({textShadow:!0},e),n=t.backToName,a=t.appLink,i=t.color,o=t.extraClasses,l=t.textShadow,s=n?c.T.getPhrase(f,"backTo",{backToName:n}):c.T.getPhrase(f,"back"),p="black"===i?"":"text-white",v=l?"text-shadow":"";return r.createElement(u.F,{appLink:a,className:"d-inline-flex align-items-center h5 mb-0 ".concat(o," ").concat(p," ").concat(v)},r.createElement(d.x,{svgName:m.vn.ChevronLeft,size:d.S.Medium}),r.createElement("span",{className:"ms-1"},s))}p.defaultProps={color:"black",extraClasses:""};var v=n(36518),y=n(83345),h=n(7733),g=n(10587),b=n(94232),E=n(54610),w=n(79967),C=n(9085),S=n(67453);const I={bannerContent:"sSCTB",actionsContainer:"Z5WI2",bannerContentWithLogo:"rgs7Q",container:"M51HJ",logoContainer:"vkeJk",logoContainerLeft:"M3U9B",logoHeading:"EtRwC",specialEventContainer:"rOxDc",headingLarge:"_8pnV",heading:"JXVBH"};var A="".concat(g.y[E.__.Banners].width,":").concat(g.y[E.__.Banners].height);function O(e){return e.length<160?"h1":I.headingLarge}var k=r.memo((function(e){var t,n,c,u,d=e.heading,m=e.banner,f=e.imageCdnUrl,g=e.actions,k=e.sortComponent,N=e.blockColourClass,L=e.specialEvent,x=r.useContext(b.n),P=(0,w.k)().xxl?1920:1200,j=r.useMemo((function(){if(!L||e.showComingSoon)return!1;var t=a.O.format(new Date,"YYYY-MM-DD");return L.endDate?L.startDate<=t&&L.endDate>=t:L.startDate===t}),[L]),F=e.imageOptions||{width:P,ratio:A,resizeType:E.Nq.Cover},T=!!m&&!!f&&S.j.createBannerUrl(m,{fallbackBaseUrl:f,fallbackCategoryName:d,type:E.__.Banners},F),D={className:"banner banner-header ".concat(e.bannerClassName),style:T?{backgroundImage:"url('".concat(T,"')")}:{}};!m&&N&&(delete D.style,D.className+=" ".concat(N));var M=e.detailsComponent,V=(0,C.x)(e.heading,h.o);return i.b.renderInPortalIfExists(r.createElement("header",Object.assign({},D),r.createElement("div",{className:"container ".concat(I.container," position-relative inner-banner")},e.backButtonAppLink&&r.createElement("div",{className:"pt-3"},r.createElement(p,{appLink:e.backButtonAppLink,backToName:e.backButtonText,extraClasses:e.backButtonClasses,color:"white"})),r.createElement("div",{className:"".concat(e.alignLogoLeft?"position-absolute top-50 start-0 translate-middle-y w-100 ps-4":"".concat(I.bannerContent," px-2 ").concat((null===(t=e.logo)||void 0===t?void 0:t.url)?I.bannerContentWithLogo:""))},!!L&&r.createElement("div",{className:"position-relative ".concat(I.specialEventContainer)},r.createElement(l.s,{body:{type:L.endDate?"range":"day",text:L.endDate?"".concat(a.O.format(L.startDate,"DD"),"-").concat(a.O.format(L.endDate,"DD")):a.O.format(L.startDate,"DD")},month:function(e){return e.endDate?a.O.isSame(e.startDate,e.endDate,"month")?a.O.format(e.startDate,"MMMM"):"".concat(a.O.format(e.startDate,"MMM")," - ").concat(a.O.format(e.endDate,"MMM")):a.O.format(e.startDate,"MMMM")}(L),theme:e.calendarTheme})),r.createElement("div",null,j&&r.createElement("div",{className:"rounded-pill py-1 px-2 my-1 me-1 fw-semibold bg-light-blue lh-1 d-inline-block"},r.createElement(y.x,{namespace:"shared.bannerHeader",phrase:"onToday"})),e.showComingSoon&&r.createElement(o.r,{className:"pe-2 fw-semibold mb-1 rounded-pill justify-content-start text-nowrap"}),r.createElement("div",{className:"d-flex align-items-center"},e.alignLogoLeft&&(null===(n=e.logo)||void 0===n?void 0:n.url)&&r.createElement("div",{className:"".concat(I.logoContainerLeft," d-none d-md-block rounded-circle overflow-hidden me-3 ").concat(V)},r.createElement(v.w,{src:S.j.createUrl(null===(c=e.logo)||void 0===c?void 0:c.url,{size:E.h2.Medium}),style:{backgroundColor:e.logoBgColour}})),r.createElement("h1",{className:"text-white text-shadow pe-3 position-static ".concat(I.heading," ").concat(O(d)," ").concat(e.alignLogoLeft?"w-50":"")},d,M&&r.createElement(M,null)))),!!g&&r.createElement("div",{className:I.actionsContainer},r.createElement(s.e,{actions:g,sortComponent:k,actionsDropdownClassName:e.actionsDropdownClassName}))),!e.alignLogoLeft&&!!(null===(u=e.logo)||void 0===u?void 0:u.url)&&r.createElement("div",{className:I.logoContainer},r.createElement("img",{src:S.j.createUrl(e.logo.url,{size:E.h2.Small}),className:"rounded-circle"})))),null==x?void 0:x.container)}),(function(e,t){var n,r;return e.actions===t.actions&&e.heading===t.heading&&(null===(n=e.logo)||void 0===n?void 0:n.url)===(null===(r=t.logo)||void 0===r?void 0:r.url)}));function N(){var e=r.useContext(b.n);return i.b.renderInPortalIfExists(r.createElement("div",{className:"partial-banner partial-loading-background ".concat(I.banner)}),null==e?void 0:e.container)}},49935:(e,t,n)=>{n.d(t,{Oo:()=>v,b2:()=>y});var r=n(32735),a=n(23481),i=n(36848),o=n(86764),l=n(3747),s=n(5859),c=n(35223),u=n(83914);function d(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,o,l=[],s=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=i.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw a}}return l}}(e,t)||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,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function 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 f=a.T.encloseNamespace("shared.breadcrumbComponent"),p=r.forwardRef((function(e,t){var n=e.breadcrumb,a=n.name,o=n.appLink,l=n.active,s=e.withBackIcon,d=a,m=null;return d.length>48&&(d=a.slice(0,48)+"...",m=a),r.createElement("li",{className:"breadcrumb-item".concat(l?" active":""),title:m},l?r.createElement("strong",null,d):r.createElement(i.F,{appLink:o,ref:t},s&&r.createElement(u.x,{svgName:c.vn.ChevronLeft,size:u.S.Small}),r.createElement("span",{className:s?"ms-2":""},d)))})),v=function(e){var t=e.breadcrumbs,n=(0,l.a)(o.r.XS),a=(null==t?void 0:t.length)||0,i=d(r.useState(!1),2),s=i[0],c=i[1],u=d(r.useState(!1),2),m=u[0],v=u[1],y=r.useRef();if(r.useEffect((function(){var e,n=null!==(e=null==t?void 0:t.reduce((function(e,t){return e+t.name.length}),0))&&void 0!==e?e:0;a>4&&n>64&&c(!0)}),[null==t?void 0:t.length]),r.useLayoutEffect((function(){var e;m&&(null===(e=y.current)||void 0===e||e.focus())}),[y.current,m]),!a||n&&a<2)return r.createElement(r.Fragment,null);if(n)return r.createElement("nav",{"aria-label":"breadcrumb"},r.createElement("ol",{className:"breadcrumb m-0 p-0"},r.createElement(p,{breadcrumb:t[a-2],withBackIcon:!0})));var h=r.createElement(p,{breadcrumb:t[0]}),g=a>2?r.createElement(p,{breadcrumb:t[1]}):r.createElement(r.Fragment,null),b=a>3?r.createElement(p,{breadcrumb:t[a-2]}):r.createElement(r.Fragment,null),E=a>1?r.createElement(p,{breadcrumb:t[a-1]}):r.createElement(r.Fragment,null),w=t.slice(2,a-2);return r.createElement("nav",{"aria-label":"breadcrumb"},r.createElement("ol",{className:"breadcrumb m-0 p-0"},h,g,s?r.createElement("li",{className:"breadcrumb-item"},r.createElement("button",{className:"btn-link",onClick:function(){c(!1),v(!0)},"aria-label":f("expand")},"...")):w.map((function(e,t){return r.createElement(p,{key:t,breadcrumb:e,ref:0===t?y:null})})),b,E))},y=r.memo((function(e){var t=e.numItems,n=void 0===t?3:t;return(0,l.a)(o.r.XS)?r.createElement("div",{className:"partial-loading-background",style:{height:"1.3125rem",width:"6rem"}}):r.createElement("nav",{"aria-label":"breadcrumb"},r.createElement("ol",{className:"breadcrumb m-0 p-0"},s.u.getPartialLoadingItems({numItems:n}).map((function(e,t){var n=e.width;return r.createElement("li",{key:t,className:"breadcrumb-item"},r.createElement("span",{className:"d-inline-block partial-loading-background",style:{width:n},dangerouslySetInnerHTML:{__html:" "}}))}))))}))},71020:(e,t,n)=>{n.d(t,{_:()=>u});var r=n(32735),a=n(80247),i=n(34152),o=n(83914),l=n(35223);const s={container:"VwD1b",spinner:"eJ85e"};function c(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 u(e){var t,n,u=(t=(0,i.YD)(),n=2,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,a,i,o,l=[],s=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=i.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw a}}return l}}(t,n)||function(e,t){if(e){if("string"==typeof e)return c(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)?c(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.")}()),d=u[0],m=u[1];return r.useEffect((function(){var t;e.fetchOnScroll&&m&&!e.isFetching&&(null===(t=e.fetchNext)||void 0===t||t.call(e,e.nextCursor))}),[m,e.isFetching]),r.createElement("div",{className:"p-3 text-center ".concat(s.container),ref:d},e.isFetching?r.createElement(a.Z,{as:"span",animation:"border",role:"status",className:s.spinner}):r.createElement(o.x,{svgName:l.vn.ChevronDown,className:"svg-container cursor-pointer",size:o.S.Large,onClick:function(){var t;return null===(t=e.fetchNext)||void 0===t?void 0:t.call(e,e.nextCursor)}}))}u.defaultProps={fetchOnScroll:!1}},94644:(e,t,n)=>{n.d(t,{r:()=>u});var r=n(50242),a=n(81886),i=n(67058),o=n(14553),l=n(49267),s=n(49075),c={notFound:i.d,forbidden:{rating:o.q,yearLevel:o.q,region:l.a,privacy:o.q},badRequest:s._,internalServerError:s._};function u(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var i;i="number"==typeof e?e:e.status;var o=Object.assign(Object.assign({},c),t);i&&a.Q.Ry.isStatusCodeError(i)&&(i!==r.o.InternalServer?i!==r.o.NotFound?i!==r.o.Forbidden?n.badRequest||a.Q.Ry.throw(new o.badRequest):n.forbidden||a.Q.Ry.throw(new o.forbidden.privacy):n.notFound||a.Q.Ry.throw(new o.notFound):n.internalServerError||a.Q.Ry.throw(new s._))}}},91286:(e,t,n)=>{n.d(t,{v:()=>o});var r=n(32735),a=n(94644);function i(e){return e.map((function(e){return e.statusCode})).join(":")}function o(e,t,n){var o=Array.isArray(e)?e:[e];(0,r.useEffect)((function(){o.forEach((function(e){(0,a.r)(e.statusCode,t,n)}))}),[i(o),t,n])}},60115:(e,t,n)=>{n.d(t,{K:()=>c});var r=n(32735),a=n(50242),i=n(91967),o=400,l=n(45719);function s(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 c(e,t,n,c,u,d){var m,f,p,v,y=(m=(0,r.useState)(0),f=2,function(e){if(Array.isArray(e))return e}(m)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,o,l=[],s=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=i.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw a}}return l}}(m,f)||function(e,t){if(e){if("string"==typeof e)return s(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)?s(e,t):void 0}}(m,f)||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.")}()),h=y[0],g=y[1],b=t,E=(0,l.P)((function(t){if(!e)return null;var n=e(t);return n?n.key:null}),c,u);return p={fetchNextPage:function(){if(t&&e&&E)return g((function(e){return e+1})),b(E.nextCursor)},hasMore:!!(null==E?void 0:E.nextCursor),isFetching:null==E?void 0:E.isFetching,scrollContainer:d},v=function(){if(!p.isFetching){if(p.scrollContainer){var e=p.scrollContainer;if(e.getBoundingClientRect().height+e.scrollTop<e.scrollHeight-o)return}else if(window.innerHeight+document.documentElement.scrollTop<document.documentElement.scrollHeight-o)return;p.fetchNextPage()}},(0,r.useEffect)((function(){var e=i.q.throttle(v,200),t=p.scrollContainer||window;return p.hasMore&&t.addEventListener("scroll",e),function(){return t.removeEventListener("scroll",e)}}),[p.hasMore,p.fetchNextPage,p.scrollContainer]),(0,r.useEffect)((function(){E&&E.shouldInitialFetch&&t&&(b(),g((function(e){return e+1})))}),[null==E?void 0:E.shouldInitialFetch,t]),(0,r.useEffect)((function(){var e,t;if((null==E?void 0:E.statusCode)&&i.q.isFunction(n)){var r=+(null===(t=null===(e=E.statusCode)||void 0===e?void 0:e.toString())||void 0===t?void 0:t.substr(0,1));r!==a.k.ClientError&&r!==a.k.ServerError||n(h,E.statusCode)}}),[null==E?void 0:E.statusCode]),{items:null==E?void 0:E.items,hasMore:!!(null==E?void 0:E.nextCursor),nextCursor:null==E?void 0:E.nextCursor,isFetching:null==E?void 0:E.isFetching,totalItems:null==E?void 0:E.totalItems,hasFirstPageCompleted:null==E?void 0:E.hasFirstPageCompleted}}},63719:(e,t,n)=>{n.d(t,{h:()=>l});var r=n(32735),a=n(77316);function i(e,t){if(e){if("string"==typeof e)return o(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)?o(e,t):void 0}}function o(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 l(e){var t,n,l=(t=r.useMemo((function(){return a.p.getBuilder()}),[]),n=2,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,a,i,o,l=[],s=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=i.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw a}}return l}}(t,n)||i(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.")}()),s=l[0],c=(0,l[1])(s);return c&&e?[].concat(function(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||i(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.")}()}(c),[Object.assign(Object.assign({},e),{active:!0})]):c}},5859:(e,t,n)=>{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}n.d(t,{u:()=>i});var a={numItems:5,minWidth:50,maxWidth:100},i={getPartialLoadingItems:function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=Object.assign(Object.assign({},a),t);return(e=Array(n.numItems),function(e){if(Array.isArray(e))return r(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 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}}(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.")}()).map((function(){return{width:"".concat(Math.max(Math.floor(Math.random()*n.maxWidth),n.minWidth),"px")}}))}}},6263:(e,t,n)=>{n.r(t),n.d(t,{PlaylistView:()=>je});var r=n(32735),a=n(70680),i=n(23481),o=n(81886),l=n(20354),s=n(65858),c=n(1048),u=n(4594),d={isPlaylist:function(e){return(null==e?void 0:e.typeId)===u.E.Playlist},isOwner:function(e,t){var n;return!(!t||!e||c.t.isEmpty(e._liteOwner))&&e._liteOwner.id.toString()===(null===(n=t.id)||void 0===n?void 0:n.toString())},getVideoCount:function(e){var t,n,r;if(e){var a=0;return(null===(t=e.videos)||void 0===t?void 0:t.count)&&(a+=e.videos.count),(null===(n=e.clips)||void 0===n?void 0:n.count)&&(a+=e.clips.count),(null===(r=e.interactives)||void 0===r?void 0:r.count)&&(a+=e.interactives.count),a}}},m=n(71020),f=n(51365),p=n(183),v=n(89454),y=n(21750),h=n(39151),g=n(1666),b=n(5112),E=n(31949),w=n(69883),C=n(63719),S=n(56520),I=n(91286),A=n(60115),O=n(22902);function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var N=n(79612),L=n(76753),x=n(54569),P=n(31908),j=n(14070),F=n(97291),T=n(51855),D=n(7179),M=n(27638),V=n(97816),B=n(10741),U=n(33192),R=n(22490),_=n(110),H=n(28400),Y=n(89725),$=n(83345),q="playlists.playlistHeaderDetails",G=function(e){var t=e.className;return r.createElement("span",{className:t},"•")};function Q(e){var t=e._liteOwner;if(t)return t.name&&t.surname?H.m.toTitleCase(t.name+" "+t.surname.substring(0,1)):t.name?t.name.split(" ")[0]:void 0}function W(e){var t,n,a=d.isOwner(e.playlist,e.currentUser),i=null===(t=e.playlist.followers)||void 0===t?void 0:t.count,o=function(e){if(!e.contentModifiedDate)return"";var t=new Date,n=_.O.convertUTCToLocal(e.contentModifiedDate);return _.O.isBefore(n,_.O.subtract(t,1,"month"))?"":_.O.fromNow(n)}(e.playlist);return r.createElement("div",{className:e.detailsClassName},!e.hideOwnerName&&!a&&r.createElement(r.Fragment,null,(null===(n=e.playlist._isClickViewCurated)||void 0===n?void 0:n.value)?r.createElement(r.Fragment,null,r.createElement("div",{className:e.clickViewAvatarClassName},r.createElement(Y.F,null)),r.createElement("span",null,"ClickView")):r.createElement($.x,{namespace:q,phrase:"createdBy",options:{user:Q(e.playlist)}}),r.createElement(G,{className:e.separatorClassName})),"number"==typeof e.totalVideos&&r.createElement($.x,{namespace:q,phrase:"videos",options:{smartCount:e.totalVideos}}),i>0&&r.createElement(r.Fragment,null,r.createElement(G,{className:e.separatorClassName}),r.createElement($.x,{namespace:q,phrase:"followers",options:{smartCount:i}})),!!o&&r.createElement(r.Fragment,null,r.createElement(G,{className:e.separatorClassName}),r.createElement($.x,{namespace:q,phrase:"lastUpdated",options:{timeAgo:o}})))}var X=n(44522),z=n(49935),Z=n(7733),J=n(86764),K=n(3747),ee=n(9085);const te={partialDescription:"vDX0m"};function ne(){return r.createElement(r.Fragment,null,r.createElement(X.v,null),r.createElement("div",{className:"mb-2"},r.createElement("div",{className:"partial-loading-background my-2 border-bottom ".concat(te.partialDescription)})))}var re=n(49985),ae=n(35223),ie=i.T.encloseNamespace("playlists.playlistHeader"),oe={getPlaylistActions:function(e,t){var n,r,a,i,o,l,c=t.isAuthenticated,u=t.isPlugin,m=t.isMobile,f=t.setIsFollowing,p=t.isFollowing,v=t.setShowFollowSpinner,y=t.showFollowSpinner,h=t.isUserCurator,g=t.openInCuratorLink,b={id:e.playlist.id,name:e.playlist.name,followerCount:null===(n=e.playlist.followers)||void 0===n?void 0:n.count,videoCount:null===(r=e.playlist.videos)||void 0===r?void 0:r.count,interactiveCount:null===(a=e.playlist.interactives)||void 0===a?void 0:a.count,clipCount:null===(i=e.playlist.clips)||void 0===i?void 0:i.count,isClickViewPlaylist:null===(o=e.playlist._isClickViewCurated)||void 0===o?void 0:o.value},E={location:s.LZ.Banner,entity:s.py.Playlist,workflowPhase:s.eu.Start},w=[];if(!c)return w;var C=d.isOwner(e.playlist,e.currentUser);return u||(e.playAllAppLink&&w.push({label:ie("playAll"),appLink:e.playAllAppLink,svgName:ae.vn.Play,className:m?"":"btn btn-outline-dark me-2",button:!m,analyticsData:b,analyticsOptions:Object.assign(Object.assign({},E),{actionType:s.Vw.Play})}),h&&w.push({label:(0,S.eR)(),href:g,openInNewTab:!0}),w.push({label:ie("share"),appLink:{application:F.O.DEFAULT,action:j.e.Default.SHARE,args:[e.playlist.id],params:{entityType:"playlist"}},svgName:ae.vn.Share,className:m?"":"btn btn-outline-dark me-2",button:!m,analyticsData:b,analyticsOptions:Object.assign(Object.assign({},E),{actionType:s.Vw.Share,eventVersion:s.eq.V3})})),C||w.push({label:ie(p?"following":"follow"),onClick:function(){f(!p),v(!0),e.follow(!p,(function(){v(!1),re.k.logUserAction(b,Object.assign(Object.assign({},E),{actionType:s.Vw.Follow,descriptor:p?s.DL.Off:s.DL.On,workflowPhase:s.eu.Complete}))}),(function(){v(!1),f(p)}))},svgName:p?ae.vn.BellFilled:ae.vn.Bell,className:m?"":"btn follow-btn btn-".concat(p?"outline-dark":"dark"," me-2"),button:!m,showSpinner:y}),C&&(w.push({label:ie("edit"),appLink:{application:F.O.PLAYLISTS,action:j.e.Playlists.EDIT_PLAYLIST,args:[e.playlist.id]},svgName:ae.vn.Edit,button:!1,analyticsData:b,analyticsOptions:Object.assign(Object.assign({},E),{actionType:s.Vw.Edit})}),w.push({label:ie("delete"),appLink:{application:F.O.PLAYLISTS,action:j.e.Playlists.DELETE_PLAYLIST,args:[e.playlist.id]},svgName:ae.vn.Delete,className:"text-danger",button:!1,analyticsData:b,analyticsOptions:Object.assign(Object.assign({},E),{actionType:s.Vw.Delete})})),(null===(l=e.playlist._isClickViewCurated)||void 0===l?void 0:l.value)&&w.push({label:ie("copy"),appLink:{application:F.O.PLAYLISTS,action:j.e.Playlists.COPY_PLAYLIST,args:[e.playlist.id]},button:!1,analyticsData:b,analyticsOptions:Object.assign(Object.assign({},E),{actionType:s.Vw.Copy})}),w}};const le={clickViewAvatar:"PHe9c"};function se(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,o,l=[],s=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=i.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return ce(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)?ce(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ce(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 ue(e){var t=(0,T.G)().isPlugin,n=se(r.useState(e.isFollowing),2),a=n[0],i=n[1],o=se(r.useState(!1),2),l=o[0],s=o[1];r.useEffect((function(){return i(e.isFollowing)}),[e.isFollowing]);var c=(0,K.a)(J.r.XS);if(e.showPartialLoading)return r.createElement(ne,null);var u=e.playlist.description,d=oe.getPlaylistActions(e,{isAuthenticated:e.currentUser.isAuthenticated,isPlugin:t,isMobile:c,setIsFollowing:i,isFollowing:a,setShowFollowSpinner:s,showFollowSpinner:l,isUserCurator:e.isUserCurator,openInCuratorLink:e.openInCuratorLink}),m=e.getBreadcrumbs();return r.createElement(r.Fragment,null,r.createElement(X.p,{heading:e.playlist.name,banner:e.playlist.banner,imageCdnUrl:e.imageCdnUrl,actions:d.length&&d,actionsDropdownClassName:"btn btn-outline-dark",blockColourClass:(0,ee.x)(e.playlist.name,Z.o),detailsComponent:function(){return r.createElement(W,{playlist:e.playlist,currentUser:e.currentUser,detailsClassName:"mb-n1 font-size-normal fw-normal mt-1",clickViewAvatarClassName:le.clickViewAvatar,separatorClassName:"mx-1",totalVideos:e.totalVideos})}}),(!!u||!!(null==m?void 0:m.length))&&r.createElement("div",{className:"border-bottom py-3"},!e.playlist||e.classificationId&&!e.topicPath?r.createElement(z.b2,null):r.createElement("div",{className:"pb-2"},r.createElement(z.Oo,{breadcrumbs:m})),!!u&&r.createElement("p",{className:"mb-0"},u)))}var de=n(56050),me=n(91967),fe=n(83914),pe=n(74696),ve=n(13231);function ye(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 he=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n};function ge(e){var t,n,a=e.onSortComplete,i=e.onSortStart,l=e.showPartialLoading,s=he(e,["onSortComplete","onSortStart","showPartialLoading"]),c=(t=r.useState(),n=2,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,a,i,o,l=[],s=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=i.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw a}}return l}}(t,n)||function(e,t){if(e){if("string"==typeof e)return ye(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)?ye(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.")}()),u=c[0],d=c[1];return l?r.createElement(pe.S,{withReordering:e.canEdit||e.showIndexes}):e.canEdit?r.createElement(ve.NB,Object.assign({},s,{currentSortingIndex:u,onSortStart:function(t){var n=e.videos.findIndex((function(e){return e.id.toString()===t.active.id.toString()}));d(n),me.q.isFunction(i)&&i(n)},onSortEnd:function(t){d(null);var n=t.active,r=t.over,i=e.videos.findIndex((function(e){return e.id.toString()===n.id.toString()})),l=e.videos.findIndex((function(e){return e.id.toString()===r.id.toString()}));me.q.isFunction(a)?a(i,l):o.Q.Ry.throw(new de.H("An onSortComplete callback function must be passed to SortableVideoListComponent"))},dragHandleIcon:ae.vn.Hamburger,dragHandleIconSize:fe.S.XXL,presentationAudiences:e.presentationAudiences})):r.createElement(ve.E4,Object.assign({},s))}var be=n(23232),Ee=n(99742),we="playlists.playlistEmptyState";function Ce(){return r.createElement($.D.Provider,{value:we},r.createElement(be.u,null,r.createElement(be.u.Image,{src:Ee.W.EmptyStates.Playlists.PLAYLIST_VIDEOS}),r.createElement(be.u.Heading,null,r.createElement($.x,{phrase:"heading"})),r.createElement(be.u.Info,null,r.createElement($.x,{phrase:"info"}))))}n(75896);var Se=n(81493),Ie=n(9680),Ae=n(10671);function Oe(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 ke=i.T.encloseNamespace("playlists.playlist");function Ne(e,t,n){re.k.logUserAction({id:t,playlistId:e},{location:s.LZ.VideoList,entity:s.py.Video,actionType:s.Vw.Move,workflowPhase:n})}var Le={notFound:Se.N,forbidden:{privacy:Ie.J}};function xe(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 Pe=i.T.encloseNamespace("playlists.playlist");function je(e){var t,n,i,c,u,_,H,Y,$,q,G,Q,W,X,z=(0,a.I0)(),Z=(0,w.Z)(),J=l.a.useBasicFetch(h.L.config()),K=l.a.useBasicFetch(E.N.currentUser()),ee=(0,S.R0)(),te=ee.isUserCurator,ne=ee.getOpenInCurationStudioLink,re=(0,O.T)().hasPermissions,ie=(0,T.G)().isPlugin,oe=l.a.useBasicFetch((null===(t=K.data)||void 0===t?void 0:t.isAuthenticated)&&g.h.yearGroups(K.data.customerId)),le=l.a.useBasicFetch(e.classificationId&&y.x.path(e.classificationId)),se=l.a.useBasicFetch(e.classificationId&&y.x.classification(e.classificationId,null===(n=K.data)||void 0===n?void 0:n.id)),ce=l.a.useBasicFetch(se.hasCompleted&&y.x.presentationById(null===(i=se.data)||void 0===i?void 0:i.presentationId)),de=l.a.useBasicFetch((!e.classificationId||ce.hasCompleted)&&v.O.presentationAudiences(null===(c=ce.data)||void 0===c?void 0:c.id)),me=(0,M.u)(s.LZ.VideoThumbnail),fe=me.setFavourite,pe=me.canFavourite,ve=e.shareId?b.C.getSharedPlaylist(e.playlistId,e.shareId):b.C.getPlaylist(e.playlistId),ye=e.shareId?b.C.getSharedPlaylistVideosCount(e.playlistId,e.shareId):b.C.getPlaylistVideosCount(e.playlistId),he=l.a.useBasicFetch(ve),be=l.a.useBasicFetch(ye),Ee=function(e,t,n){var r=(0,Ae._)({location:Ae.i.VideoItem,shareId:n});return d.isOwner(e,t)?Object.assign(Object.assign({},r),{getVideoActions:function(t,n){var a,i=P.M.getCanBeConsumed(t).canConsume,o={label:ke("removeFromPlaylist"),button:!1,svgName:ae.vn.Delete,appLink:{application:F.O.PLAYLISTS,action:j.e.Playlists.REMOVE_VIDEO_FROM_PLAYLIST,args:[t.id,e.id],params:{typeId:t.typeId}},className:"text-danger",analyticsOptions:{entity:s.py.Video,actionType:s.Vw.Dissociate,location:s.LZ.VideoListItem,workflowPhase:s.eu.Start,descriptor:s.iF.Playlist},analyticsData:{id:t.id,playlistId:e.id},group:"delete"};return i?[].concat(function(e){if(Array.isArray(e))return Oe(e)}(a=r.getVideoActions(t,n))||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(a)||function(e,t){if(e){if("string"==typeof e)return Oe(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)?Oe(e,t):void 0}}(a)||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]):[o]}}):r}(he.data,K.data,e.shareId);(0,I.v)(he,Le);var we=function(t){return e.shareId?b.C.getSharedPlaylistVideos(e.playlistId,e.shareId,t):b.C.getPlaylistVideos(e.playlistId,t)},Se=l.a.useBasicFetch((null===(u=K.data)||void 0===u?void 0:u.id)&&b.C.getIsFollowingPlaylist(e.playlistId,null===(_=K.data)||void 0===_?void 0:_.id)),Ie=function(e){l.a.getFetch(z)(we(e))},je=(0,A.K)(we,Ie),Fe=je.items,Te=je.hasMore,De=je.isFetching;(0,V.V)(Fe);var Me,Ve,Be,Ue,Re,_e,He=function(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,o,l=[],s=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=i.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return xe(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)?xe(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}((Me=Fe,Re=(0,r.useState)(),_e=2,Ve=function(e){if(Array.isArray(e))return e}(Re)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,o,l=[],s=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=i.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw a}}return l}}(Re,_e)||function(e,t){if(e){if("string"==typeof e)return k(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?k(e,t):void 0}}(Re,_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.")}(),Be=Ve[0],Ue=Ve[1],(0,r.useEffect)((function(){Be&&(Me.length!==Be.length||function(e,t){var n=!0;if(e.length!==t.length)return!1;for(var r=0;r<e.length;r++)if(e[r].id!==t[r].id){n=!1;break}return n}(Me,Be))&&Ue(null)}),[Me]),[Be,Ue]),2),Ye=He[0],$e=He[1];(0,D.P)({id:e.playlistId,app:"playlists",shareId:e.shareId}),(0,N.M)(L.CG.getPlaylistMetadata({content:he.data,phraseContext:{phraseHandler:Pe,titlePhrase:"pageTitle",descriptionPhrase:"pageDescription"},canonicalLink:U.f.getCanonicalLink({stripPresentationSlug:!0}),allowIndexing:!1}));var qe=!!Fe&&0===Fe.length,Ge=function(t,n){var r,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return R.W.getAppLink(t,Object.assign(Object.assign({},a),{contextId:e.playlistId,context:p.Q.Playlist,shareId:e.shareId,moviesAndTv:e.moviesAndTv,playNext:n,includeContext:null===(r=K.data)||void 0===r?void 0:r.isAuthenticated}))},Qe=!(null===(H=K.data)||void 0===H?void 0:H.isAuthenticated)||!!Se.hasCompleted,We=null==Fe?void 0:Fe.find((function(e){var t;return null===(t=P.M.getCanBeConsumed(e))||void 0===t?void 0:t.canConsume})),Xe=d.isOwner(he.data,K.data),ze=Fe&&K.data&&J.data,Ze=(0,C.h)({name:null===(Y=he.data)||void 0===Y?void 0:Y.name});return r.createElement(f.M.Provider,{value:(null===($=K.data)||void 0===$?void 0:$.isAuthenticated)&&Ee},r.createElement("div",{className:"bg-white px-3"},r.createElement(ue,{playlist:he.data,currentUser:K.data,isFollowing:null===(q=Se.data)||void 0===q?void 0:q.isFollowing,follow:function(t,n,r){var a,i=t?b.C.followPlaylist:b.C.unfollowPlaylist;l.a.fetch(z,i(e.playlistId,null===(a=K.data)||void 0===a?void 0:a.id,n,(function(){r(),Z.error(Pe(t?"followError":"unfollowError"))})))},playAllAppLink:We&&Ge(We,!0),showPartialLoading:!he.data||!ze||!Qe,imageCdnUrl:!!J.data&&J.data.imageCdnUrl,getBreadcrumbs:function(){return e.hideBreadCrumbs?null:Ze},topicPath:le.data,moviesAndTv:e.moviesAndTv,classificationId:e.classificationId,isUserCurator:te,openInCuratorLink:ne(null===(G=he.data)||void 0===G?void 0:G.typeId,null===(Q=he.data)||void 0===Q?void 0:Q.id),totalVideos:d.getVideoCount(be.data)}),r.createElement("div",{className:"mt-2"},qe?r.createElement(Ce,null):r.createElement(ge,{videos:Ye||Fe,yearGroups:oe.data,playlistId:!!he.data&&he.data.id,onSortStart:function(t){var n=Fe[t];n&&Ne(e.playlistId,n.id,s.eu.Start)},onSortComplete:function(t,n){if(t!==n){var r=Fe[t];if(r){var a=x.l.reorder(Fe,t,n),i=a.reorderedItems,o=a.reorderRequest;$e(i),Ne(e.playlistId,r.id,s.eu.Complete),l.a.fetch(z,b.C.reorderVideos(e.playlistId,o,null,(function(){$e(null)})))}}},canEdit:Xe,showPartialLoading:!ze,getVideoAppLink:function(e,t){return Ge(e,!1,t)},getSubTextAppLink:function(t){return e.getSeriesAppLink(t.series)},setFavourite:fe,canFavourite:pe,showSignIn:!(null===(W=K.data)||void 0===W?void 0:W.isAuthenticated),getSignInAppLink:function(e){var t=o.Q.C$.getHref(e),n="/"!==t?{redirectUrl:t}:{};return{application:F.O.DEFAULT,action:j.e.Default.CHALLENGE,params:n}},canRemovePrivateVideos:Xe,presentationAudiences:e.moviesAndTv?null:de.data,showIndexes:!0,hasPermissions:re,getPreviewQuestionsAppLink:function(e){return B.j.getPreviewQuestionsAppLink(e)},imageCdnUrl:null===(X=J.data)||void 0===X?void 0:X.imageCdnUrl,isPlugin:ie,getClassroomGuideAppLink:R.W.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:R.W.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:R.W.getResourceGuidanceAppLink})),(Te||De)&&r.createElement(m._,{isFetching:De,fetchNext:Ie})))}},97816:(e,t,n)=>{n.d(t,{V:()=>f});var r=n(32735),a=n(20354),i=n(75896),o=n(21750),l=n(31949),s=n(1575),c=n(31908);function u(e,t){if(e){if("string"==typeof e)return d(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)?d(e,t):void 0}}function d(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 m=50;function f(e){var t,n,f=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},p=a.a.useBasicFetch(l.N.currentUser()),v=r.useRef(new Set),y=function(e){return e?Array.isArray(e)?e.filter((function(e){return!!e&&(c.M.isVideo(e)||c.M.isClip(e))})):"data"in e?e.data.filter((function(e){return!!e&&(c.M.isVideo(e)||c.M.isClip(e))})):[]:[]}(e),h=y.map((function(e){return e.id})),g=(t=r.useState([]),n=2,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,a,i,o,l=[],s=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=i.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw a}}return l}}(t,n)||u(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.")}()),b=g[0],E=g[1];r.useEffect((function(){if((null==h?void 0:h.length)&&p.hasCompleted){var e=[];h.forEach((function(t){v.current.has(t)||(e.push(t),v.current.add(t))})),e.length&&E((function(t){var n=function(e){return function(e){if(Array.isArray(e))return d(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||u(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.")}()}(t);return i.m.chunk(e,m).forEach((function(e){var t;n.push(s.R.videoMixinAssocs(e,f.flightNamespace)),(null===(t=p.data)||void 0===t?void 0:t.isAuthenticated)&&n.push(o.x.hasCurriculumLinks(e,null,f.flightNamespace))})),n}))}}),[null==h?void 0:h.length,p.hasCompleted]),a.a.useBasicFetchAll(b)}},68050:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(95685),a=n.n(r),i=n(32735),o=n(46304),l=n(74512);const s=i.forwardRef((({bsPrefix:e,className:t,as:n="div",...r},i)=>{const s=(0,o.vE)(e,"row"),c=(0,o.pi)(),u=(0,o.zG)(),d=`${s}-cols`,m=[];return c.forEach((e=>{const t=r[e];let n;delete r[e],null!=t&&"object"==typeof t?({cols:n}=t):n=t;const a=e!==u?`-${e}`:"";null!=n&&m.push(`${d}${a}-${n}`)})),(0,l.jsx)(n,{ref:i,...r,className:a()(t,s,...m)})}));s.displayName="Row";const c=s}}]);
|
|
2
|
+
//# sourceMappingURL=1820-b572681b3a-lite.chunk.js.map
|