@clickview/lite 0.82.2 → 0.83.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/languages/en.json +1 -1
- package/dist/scripts/1074-fdce06d863-lite.chunk.js +2 -0
- package/dist/scripts/1074-fdce06d863-lite.chunk.js.map +1 -0
- package/dist/scripts/{1199-da55d69853-lite.chunk.js → 1199-01cc084886-lite.chunk.js} +1 -1
- package/dist/scripts/{1199-da55d69853-lite.chunk.js.map → 1199-01cc084886-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2664-87c8cbfa7f-lite.chunk.js → 2664-907153c03b-lite.chunk.js} +2 -2
- package/dist/scripts/2664-907153c03b-lite.chunk.js.map +1 -0
- package/dist/scripts/2970-024b1dd55d-lite.chunk.js +2 -0
- package/dist/scripts/2970-024b1dd55d-lite.chunk.js.map +1 -0
- package/dist/scripts/{8133-ffcff3b7fc-lite.chunk.js → 3392-f7f8cb65e5-lite.chunk.js} +3 -3
- package/dist/scripts/3392-f7f8cb65e5-lite.chunk.js.map +1 -0
- package/dist/scripts/3840-59e5e53cda-lite.chunk.js +2 -0
- package/dist/scripts/3840-59e5e53cda-lite.chunk.js.map +1 -0
- package/dist/scripts/{4177-285ddf9ae3-lite.chunk.js → 4177-2d876c7b14-lite.chunk.js} +2 -2
- package/dist/scripts/4177-2d876c7b14-lite.chunk.js.map +1 -0
- package/dist/scripts/{1336-1826f6e582-lite.chunk.js → 4208-0706461da6-lite.chunk.js} +2 -2
- package/dist/scripts/4208-0706461da6-lite.chunk.js.map +1 -0
- package/dist/scripts/{4578-7578bcf17a-lite.chunk.js → 4578-27028d26eb-lite.chunk.js} +2 -2
- package/dist/scripts/4578-27028d26eb-lite.chunk.js.map +1 -0
- package/dist/scripts/4598-8f5266e4c2-lite.chunk.js +2 -0
- package/dist/scripts/4598-8f5266e4c2-lite.chunk.js.map +1 -0
- package/dist/scripts/{4621-1f79d94416-lite.chunk.js → 4621-7fb0a05bcb-lite.chunk.js} +2 -2
- package/dist/scripts/4621-7fb0a05bcb-lite.chunk.js.map +1 -0
- package/dist/scripts/4806-a6f31d703c-lite.chunk.js +2 -0
- package/dist/scripts/4806-a6f31d703c-lite.chunk.js.map +1 -0
- package/dist/scripts/{4948-de1c75e7fb-lite.chunk.js → 4948-ba684e5f4f-lite.chunk.js} +1 -1
- package/dist/scripts/{4948-de1c75e7fb-lite.chunk.js.map → 4948-ba684e5f4f-lite.chunk.js.map} +1 -1
- package/dist/scripts/4985-7e02d5df40-lite.chunk.js +2 -0
- package/dist/scripts/4985-7e02d5df40-lite.chunk.js.map +1 -0
- package/dist/scripts/{5554-17bb3b86fc-lite.chunk.js → 5554-f1f3baf822-lite.chunk.js} +2 -2
- package/dist/scripts/5554-f1f3baf822-lite.chunk.js.map +1 -0
- package/dist/scripts/5712-7cee70c6b4-lite.chunk.js +2 -0
- package/dist/scripts/5712-7cee70c6b4-lite.chunk.js.map +1 -0
- package/dist/scripts/6550-d99e0ed75d-lite.chunk.js +2 -0
- package/dist/scripts/6550-d99e0ed75d-lite.chunk.js.map +1 -0
- package/dist/scripts/{6909-a9b8930e37-lite.chunk.js → 6909-ba75701156-lite.chunk.js} +2 -2
- package/dist/scripts/6909-ba75701156-lite.chunk.js.map +1 -0
- package/dist/scripts/7148-1ced1b5dce-lite.chunk.js +2 -0
- package/dist/scripts/7148-1ced1b5dce-lite.chunk.js.map +1 -0
- package/dist/scripts/7568-55e9b01367-lite.chunk.js +3 -0
- package/dist/scripts/7568-55e9b01367-lite.chunk.js.map +1 -0
- package/dist/scripts/{7617-9d34c841e6-lite.chunk.js → 7617-211f084b70-lite.chunk.js} +2 -2
- package/dist/scripts/7617-211f084b70-lite.chunk.js.map +1 -0
- package/dist/scripts/7742-514844bd1a-lite.chunk.js +2 -0
- package/dist/scripts/7742-514844bd1a-lite.chunk.js.map +1 -0
- package/dist/scripts/7843-cbebf1a786-lite.chunk.js +2 -0
- package/dist/scripts/7843-cbebf1a786-lite.chunk.js.map +1 -0
- package/dist/scripts/8077-870bd8e245-lite.chunk.js +3 -0
- package/dist/scripts/8077-870bd8e245-lite.chunk.js.map +1 -0
- package/dist/scripts/843-4dbc5df109-lite.chunk.js +3 -0
- package/dist/scripts/843-4dbc5df109-lite.chunk.js.LICENSE.txt +1 -0
- package/dist/scripts/843-4dbc5df109-lite.chunk.js.map +1 -0
- package/dist/scripts/8735-e74a148502-lite.chunk.js +2 -0
- package/dist/scripts/8735-e74a148502-lite.chunk.js.map +1 -0
- package/dist/scripts/8856-2d332952ae-lite.chunk.js +2 -0
- package/dist/scripts/8856-2d332952ae-lite.chunk.js.map +1 -0
- package/dist/scripts/904-2784e45cfc-lite.chunk.js +2 -0
- package/dist/scripts/904-2784e45cfc-lite.chunk.js.map +1 -0
- package/dist/scripts/{9042-fdc5ecb459-lite.chunk.js → 9042-fd7e79b891-lite.chunk.js} +1 -1
- package/dist/scripts/{9042-fdc5ecb459-lite.chunk.js.map → 9042-fd7e79b891-lite.chunk.js.map} +1 -1
- package/dist/scripts/9295-eb130a0b17-lite.chunk.js +2 -0
- package/dist/scripts/9295-eb130a0b17-lite.chunk.js.map +1 -0
- package/dist/scripts/9528-4e954d9dff-lite.chunk.js +2 -0
- package/dist/scripts/9528-4e954d9dff-lite.chunk.js.map +1 -0
- package/dist/scripts/{9742-5f99d74bb0-lite.chunk.js → 9742-3f6b75484a-lite.chunk.js} +2 -2
- package/dist/scripts/9742-3f6b75484a-lite.chunk.js.map +1 -0
- package/dist/scripts/979-6a70a0e616-lite.chunk.js +2 -0
- package/dist/scripts/979-6a70a0e616-lite.chunk.js.map +1 -0
- package/dist/scripts/{3612-8c6423bd51-lite.chunk.js → 9911-8892b6dbfe-lite.chunk.js} +2 -2
- package/dist/scripts/{3612-8c6423bd51-lite.chunk.js.map → 9911-8892b6dbfe-lite.chunk.js.map} +1 -1
- package/dist/scripts/bundle-f926852f33.min.js +3 -0
- package/dist/scripts/{bundle-9a3e49399a.min.js.map → bundle-f926852f33.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/css/2074-lite-ac8da6c78b.chunk.css +0 -4
- package/dist/scripts/1202-d96ad80884-lite.chunk.js +0 -2
- package/dist/scripts/1202-d96ad80884-lite.chunk.js.map +0 -1
- package/dist/scripts/1336-1826f6e582-lite.chunk.js.map +0 -1
- package/dist/scripts/2074-39b86b9a22-lite.chunk.js +0 -2
- package/dist/scripts/2074-39b86b9a22-lite.chunk.js.map +0 -1
- package/dist/scripts/2664-87c8cbfa7f-lite.chunk.js.map +0 -1
- package/dist/scripts/2888-2596e106a5-lite.chunk.js +0 -2
- package/dist/scripts/2888-2596e106a5-lite.chunk.js.map +0 -1
- package/dist/scripts/289-669c0c8222-lite.chunk.js +0 -2
- package/dist/scripts/289-669c0c8222-lite.chunk.js.map +0 -1
- package/dist/scripts/3840-98c79fc0d8-lite.chunk.js +0 -2
- package/dist/scripts/3840-98c79fc0d8-lite.chunk.js.map +0 -1
- package/dist/scripts/3893-2856933742-lite.chunk.js +0 -2
- package/dist/scripts/3893-2856933742-lite.chunk.js.map +0 -1
- package/dist/scripts/4006-9dfe9cec1b-lite.chunk.js +0 -3
- package/dist/scripts/4006-9dfe9cec1b-lite.chunk.js.map +0 -1
- package/dist/scripts/4177-285ddf9ae3-lite.chunk.js.map +0 -1
- package/dist/scripts/4578-7578bcf17a-lite.chunk.js.map +0 -1
- package/dist/scripts/4621-1f79d94416-lite.chunk.js.map +0 -1
- package/dist/scripts/4806-f36469abb7-lite.chunk.js +0 -2
- package/dist/scripts/4806-f36469abb7-lite.chunk.js.map +0 -1
- package/dist/scripts/4985-bdfa839f8f-lite.chunk.js +0 -2
- package/dist/scripts/4985-bdfa839f8f-lite.chunk.js.map +0 -1
- package/dist/scripts/5554-17bb3b86fc-lite.chunk.js.map +0 -1
- package/dist/scripts/5579-a9c152057f-lite.chunk.js +0 -2
- package/dist/scripts/5579-a9c152057f-lite.chunk.js.map +0 -1
- package/dist/scripts/5712-e784cfe89c-lite.chunk.js +0 -2
- package/dist/scripts/5712-e784cfe89c-lite.chunk.js.map +0 -1
- package/dist/scripts/6070-a390fdce21-lite.chunk.js +0 -2
- package/dist/scripts/6070-a390fdce21-lite.chunk.js.map +0 -1
- package/dist/scripts/6909-a9b8930e37-lite.chunk.js.map +0 -1
- package/dist/scripts/7401-98135f09e8-lite.chunk.js +0 -2
- package/dist/scripts/7401-98135f09e8-lite.chunk.js.map +0 -1
- package/dist/scripts/7617-9d34c841e6-lite.chunk.js.map +0 -1
- package/dist/scripts/7742-342db3ce4f-lite.chunk.js +0 -2
- package/dist/scripts/7742-342db3ce4f-lite.chunk.js.map +0 -1
- package/dist/scripts/7843-f6033528ce-lite.chunk.js +0 -2
- package/dist/scripts/7843-f6033528ce-lite.chunk.js.map +0 -1
- package/dist/scripts/787-dcb3a0a26c-lite.chunk.js +0 -2
- package/dist/scripts/787-dcb3a0a26c-lite.chunk.js.map +0 -1
- package/dist/scripts/8077-9fdb522d7e-lite.chunk.js +0 -2
- package/dist/scripts/8077-9fdb522d7e-lite.chunk.js.map +0 -1
- package/dist/scripts/8133-ffcff3b7fc-lite.chunk.js.map +0 -1
- package/dist/scripts/8364-ff63447d36-lite.chunk.js +0 -3
- package/dist/scripts/8364-ff63447d36-lite.chunk.js.map +0 -1
- package/dist/scripts/8672-6967ce8a23-lite.chunk.js +0 -2
- package/dist/scripts/8672-6967ce8a23-lite.chunk.js.map +0 -1
- package/dist/scripts/9295-4242401e60-lite.chunk.js +0 -2
- package/dist/scripts/9295-4242401e60-lite.chunk.js.map +0 -1
- package/dist/scripts/9742-5f99d74bb0-lite.chunk.js.map +0 -1
- package/dist/scripts/979-4b893e5603-lite.chunk.js +0 -2
- package/dist/scripts/979-4b893e5603-lite.chunk.js.map +0 -1
- package/dist/scripts/9911-9272b96e46-lite.chunk.js +0 -2
- package/dist/scripts/9911-9272b96e46-lite.chunk.js.map +0 -1
- package/dist/scripts/bundle-9a3e49399a.min.js +0 -3
- /package/dist/css/{787-lite-5a317efacd.chunk.css → 2970-lite-5a317efacd.chunk.css} +0 -0
- /package/dist/css/{6070-lite-45dc286aab.chunk.css → 6550-lite-45dc286aab.chunk.css} +0 -0
- /package/dist/css/{2888-lite-856c02f000.chunk.css → 7148-lite-856c02f000.chunk.css} +0 -0
- /package/dist/css/{8364-lite-db31e36b79.chunk.css → 843-lite-db31e36b79.chunk.css} +0 -0
- /package/dist/css/{9911-lite-856c02f000.chunk.css → 8735-lite-856c02f000.chunk.css} +0 -0
- /package/dist/css/{5579-lite-f8e496136d.chunk.css → 8856-lite-f8e496136d.chunk.css} +0 -0
- /package/dist/css/{289-lite-2435a34b13.chunk.css → 904-lite-2435a34b13.chunk.css} +0 -0
- /package/dist/css/{1202-lite-4a892bdbf2.chunk.css → 9528-lite-4a892bdbf2.chunk.css} +0 -0
- /package/dist/css/{3612-lite-2b4142796a.chunk.css → 9911-lite-2b4142796a.chunk.css} +0 -0
- /package/dist/scripts/{4006-9dfe9cec1b-lite.chunk.js.LICENSE.txt → 3392-f7f8cb65e5-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{8133-ffcff3b7fc-lite.chunk.js.LICENSE.txt → 7568-55e9b01367-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{8364-ff63447d36-lite.chunk.js.LICENSE.txt → 8077-870bd8e245-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-9a3e49399a.min.js.LICENSE.txt → bundle-f926852f33.min.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1074],{26136:(e,t,n)=>{n.d(t,{B:()=>c});var a=n(76198),r=n(23481),i=n(64818),o=r.T.encloseNamespace("shared.analyticsUtils");function c(e,t){return e?t?(0,a._8)((n=e.id,r=e.sessionId,c=+"".concat(n||function(e){if(!e)return 0;for(var t=0,n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n),t|=0;return Math.abs(t)}(r)).concat(Math.floor((new Date).getMinutes()/5)),{dictionaries:[a.O9,a.yd],separator:" ",length:2,style:"capital",seed:c})):e.deleted?o("deleted"):i.l.getFullName(e)||o("anonUser"):o("anonUser");var n,r,c}},1619:(e,t,n)=>{n.d(t,{e:()=>h});var a=n(32735),r=n(23481),i=n(31453),o=n(12528),c=n(83914),s=n(35223),l=n(33518),u=n(2510);function m(e){return m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},m(e)}function p(e,t,n){return(t=function(e){var t=function(e){if("object"!=m(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=m(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==m(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var d=r.T.encloseNamespace("sharev2.shareAvatar"),v=p(p(p(p(p({},u.y.Open,s.vn.Classrooms),u.y.Link,s.vn.Link),u.y.Classroom,s.vn.Classrooms),u.y.Live,s.vn.Play),u.y.LegacyDirect,s.vn.Share),y=p(p(p(p(p({},u.y.Open,"blue"),u.y.Link,"black"),u.y.Classroom,"purple"),u.y.Live,"purple"),u.y.LegacyDirect,"indigo"),f=p(p(p(p(p({},u.y.Open,"openShareType"),u.y.Link,"linkShareType"),u.y.Classroom,"classroomShareType"),u.y.Live,"liveShareType"),u.y.LegacyDirect,"legacyDirectShareType");function h(e){var t,n,r=function(e){var t=e.type,n=e.classroomName,a=e.additionalTitleText,r=e.openClassroomName;if(t===u.y.Open&&r)return r;if(t===u.y.Classroom&&n)return n;var i=d(f[t]);return a&&(i+=" "+a),i}(e);return a.createElement("div",{className:(0,i.A)("d-flex align-items-center gap-2",e.className)},a.createElement("div",null,a.createElement(o.f,{svgName:v[e.type],variant:y[e.type],textVariant:"white",svgWrapperClassName:"p-1",svgSize:null!==(t=e.svgSize)&&void 0!==t?t:c.S.Standard})),a.createElement("div",{className:"d-flex flex-column"},a.createElement("p",{className:(0,i.A)("m-0",e.titleClassName),title:r},r),!e.hideSubtitle&&a.createElement("span",{className:"text-secondary"},null!==(n=e.subtitleText)&&void 0!==n?n:function(e){var t=e.type,n=e.privacy,a=e.studentCount,r=void 0===a?0:a,i=e.classroomGroupCount,o=void 0===i?0:i;switch(t){case u.y.Classroom:return function(e,t){return e&&t?"".concat(d("classroomGroupCount",{smartCount:e}),", ").concat(d("studentSubTitle",{smartCount:t})):e?d("groupSubTitle",{smartCount:e}):t?d("studentSubTitle",{smartCount:t}):d("allStudentsSubTitle")}(o,r);case u.y.Open:return d("openShareTypeSubTitle");case u.y.Link:return function(e){return[l.e.JustMySchool,l.e.Protected].includes(e)?d("respectRatingsSubTitle"):e===l.e.JustMySchoolOverrideRestriction?d("anyoneInSchoolSubTitle"):e===l.e.ProtectedOverrideRestriction?d("anyoneSignedInSubTitle"):e===l.e.Public?d("anyoneWithLinkSubTitle"):e===l.e.PinCode?d("anyoneWithPinSubTitle"):void 0}(n);case u.y.Live:return d("liveShareTypeSubTitle");case u.y.LegacyDirect:return d("legacyDirectTypeSubTitle");default:return d("publicShareTypeSubTitle")}}(e))))}},33518:(e,t,n)=>{var a;n.d(t,{e:()=>a}),function(e){e.Public="Public",e.PinCode="PinCode",e.PasswordProtected="PasswordProtected",e.ProtectedOverrideRestriction="ProtectedOverrideRestriction",e.JustMySchoolOverrideRestriction="JustMySchoolOverrideRestriction",e.Protected="Protected",e.JustMySchool="JustMySchool",e.Direct="Direct"}(a||(a={}))},8233:(e,t,n)=>{n.d(t,{R:()=>d});var a=n(23481),r=n(110),i=n(33518),o=n(4594),c=n(49080),s=n(26361),l=n(35223),u=n(31908);function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var p=a.T.encloseNamespace("sharev2.utils"),d={getPrivateIconAndText:function(e){var t=e.entityTypeId,n=e.privacy,a=e.hasStudentExp,r=e.entity,c=e.yearGroups;if(t===o.E.Topic||t===o.E.Series)return{icon:l.vn.VisibleOn,text:p(a?"justMySchoolTeachers":"justMySchoolDescription")};if(!Array.isArray(n))switch(n){case i.e.Public:return{icon:l.vn.VisibleOn,text:p("publicDescription")};case i.e.ProtectedOverrideRestriction:return{icon:l.vn.VisibleOn,text:p("clickViewOnly")};case i.e.Protected:return{icon:l.vn.Lock,text:d.getRespectRatingText(r,c,a)};case i.e.JustMySchoolOverrideRestriction:return{icon:l.vn.Lock,text:p(a?"justMySchoolTeachers":"justMySchoolDescription")};case i.e.JustMySchool:return{icon:l.vn.Lock,text:d.getRespectRatingText(r,c,a)};case i.e.PinCode:return{icon:l.vn.Lock,text:p("pinDescription")};case i.e.PasswordProtected:return{icon:l.vn.Lock,text:p("password")};default:return{}}},getIconAndText:function(e){var t=e.linkExpireDate,n=e.isPasswordProtected,a=e.status;if(!t&&!n)return d.getPrivateIconAndText(e);if(!t)return{icon:l.vn.Lock,text:p("password")};var i=r.O.isToday(t),o=r.O.diffBetween(t,new Date,"day");if(!n){var s=i?p("expiryToday"):p("expiry",{days:o});return a===c.F.Expired&&(s=p("expired")),{icon:l.vn.Timer,text:s}}var u=i?p("passwordExpiryToday"):p("passwordExpiry",{days:o});return a===c.F.Expired&&(u=p("passwordExpired")),{icon:l.vn.Lock,text:u}},getRespectRatingText:function(e,t,n){var a;if(!e||!t)return null;if(n)return p("justMySchoolTeachers");if(!u.M.isVideoType(e))return p("collectionRating");var r=s.l.getWeightedRestriction(null===(a=e._restrictions)||void 0===a?void 0:a.value);if(r&&!r.yearGroup)return p("onlyAdmins");var i,o,c,l=u.M.getRating(e),d=function(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=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&&e&&"number"==typeof e.length){n&&(e=n);var a=0,r=function(){};return{s:r,n:function(){return a>=e.length?{done:!0}:{done:!1,value:e[a++]}},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 i,o=!0,c=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){c=!0,i=e},f:function(){try{o||null==n.return||n.return()}finally{if(c)throw i}}}}(t);try{for(d.s();!(c=d.n()).done;){var v=c.value;(!i||v.value>i.value)&&(i=v),r&&v.value<=r.yearGroup||l&&v.rating.value<l.value||(!o||v.value<o.value)&&(o=v)}}catch(e){d.e(e)}finally{d.f()}return o?1===t.length?p("clickViewOnly"):o.value===i.value?p("maxYearGroup",{yearGroup:i.name}):p("yearGroupRange",{yearGroup:o.name}):p("onlyStaff")},getShareLinkAccessType:function(e){return e.isTvContent||e.isClickViewContent?"protected":e.canManageAccess?"owner":"private"}}},40782:(e,t,n)=>{n.d(t,{I:()=>a,O:()=>s});var a,r=n(32735),i=n(2606),o=n(362);function c(e){var t=r.useCallback(function(t){if(t){var n=t.r.baseVal.value,a=2*Math.PI*n,r=a-e.percentage*a;t.style.strokeDasharray="".concat(a," ").concat(a),t.style.strokeDashoffset=r.toString()}},[e.percentage]);return r.createElement("svg",null,r.createElement("circle",{r:(0,i.pu)(e.size),className:o.Z.backgroundCircle}),!(0,i.zR)(e.percentage)&&r.createElement("circle",{ref:t,r:(0,i.pu)(e.size),className:(0,i.V4)(e.percentage,e.scoreThresholds)}))}function s(e){var t,n=(0,i.Ki)(e.percentage),s=e.size||(e.layout===a.LabelInside?i.Mk.Large:i.Mk.Small),l=e.customLabel||(0,i.DV)(n);return e.layout===a.LabelOnly?r.createElement("span",{className:(0,i.IA)(n)},l):r.createElement("div",{className:"d-flex align-items-center justify-content-between ".concat(null!==(t=e.className)&&void 0!==t?t:"")},e.layout===a.LabelBefore&&r.createElement("span",{className:"me-2"},l),r.createElement("div",{className:(0,i.tw)(s,n)},r.createElement(c,{percentage:n,size:s,scoreThresholds:e.scoreThresholds}),e.layout===a.LabelInside&&r.createElement("span",{className:o.Z.centredPercentageText},l)))}!function(e){e.CircleOnly="circle_only",e.LabelOnly="label_only",e.LabelBefore="label_before",e.LabelInside="label_inside"}(a||(a={})),s.defaultProps={layout:a.CircleOnly}},2606:(e,t,n)=>{n.d(t,{DV:()=>f,IA:()=>d,Ki:()=>y,Mk:()=>c,V4:()=>p,pu:()=>m,tw:()=>v,zR:()=>h});var a=n(94892),r=n(362);function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function o(e,t,n){return(t=function(e){var t=function(e){if("object"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=i(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==i(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var c,s=.2,l=.36;!function(e){e.Small="small",e.Large="large",e.ExtraSmall="extraSmall"}(c||(c={}));var u=o(o(o({},c.ExtraSmall,{size:2}),c.Small,{size:2}),c.Large,{size:5.8});function m(e){var t=u[e].size,n=e===c.Large?l:s;return"".concat(t/2-2*n,"rem")}function p(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a.i;return e>=t.HIGH?r.Z.circleSuccess:e>=t.MODERATE?r.Z.circleWarning:r.Z.circleDanger}function d(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a.i;return e>=t.HIGH?"text-success":e>=t.MODERATE?"text-warning":"text-danger"}function v(e,t){var n="d-inline-block ".concat(r.Z.circleContainer);return e===c.Large&&(n+=" ".concat(r.Z.lgCircleContainer)),e===c.ExtraSmall&&(n+=" ".concat(r.Z.xsCircleContainer)),h(t)&&(n+=" ".concat(r.Z.pendingCircle)),n}function y(e){if(!h(e))return+e.toFixed(2)}function f(e){return h(e)?"--%":"".concat(Math.round(100*e),"%")}function h(e){return"number"!=typeof e}},38502:(e,t,n)=>{n.d(t,{r:()=>m});var a=n(32735),r=n(49985),i=n(15611),o=n(18559),c=n(11607),s=n(83914),l=n(22771);function u(e){return a.createElement(a.Fragment,null,!!e.tab.svgName&&a.createElement("div",{className:e.tab.name?"pe-1":""},a.createElement(s.x,{svgName:e.tab.svgName})),e.tab.name,"number"==typeof e.tab.count&&a.createElement("div",{className:"ps-2"},a.createElement(o.C,{type:o.g.Count,data:e.tab.count})))}function m(e){var t;return a.createElement("nav",{className:null!==(t=e.className)&&void 0!==t?t:"",ref:e.containerRef},a.createElement("ul",{className:"\n list-unstyled d-inline-block m-0 ".concat(l.Z.pillTabSelector,"\n ").concat(e.borderRadius?l.Z.radiusSmall:"","\n ").concat(e.listClassName,"\n ")},e.tabs.map(function(e,t){return a.createElement("li",{className:"\n p-0 ".concat(l.Z.tab," ").concat(e.active?"btn btn-dark":"btn btn-outline-dark","\n ").concat(e.name?l.Z.minWidth:""," ").concat(e.className,"\n "),key:t},e.appLink?a.createElement(i.F,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(l.Z.tabLink,"\n ")},a.createElement(u,{tab:e})):a.createElement(c.L,{className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(l.Z.tabLink,"\n "),onClick:function(){return function(e){!e.active&&e.onSelect&&(e.onSelect(),e.analyticsData&&e.analyticsOptions&&r.k.logUserAction(e.analyticsData,e.analyticsOptions))}(e)}},a.createElement(u,{tab:e})))})))}m.defaultProps={borderRadius:"lg"}},94892:(e,t,n)=>{n.d(t,{T:()=>r,i:()=>a});var a={HIGH:.75,MODERATE:.5},r={HIGH:.7,MODERATE:.7}},93322:(e,t,n)=>{n.d(t,{F:()=>i});var a=n(32735),r=n(13126);function i(){a.useEffect(function(){return r.e.lockContentWidth(),function(){return r.e.unlockContentWidth()}},[])}},99746:(e,t,n)=>{n.d(t,{p:()=>v});var a=n(32735),r=n(57900),i=n(97395),o=n(2948),c=n(91693),s=n(83345),l=n(4594),u=n(35223),m=n(86702);function p(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var d="lite.insightsAdminAlert";function v(e){var t,n,v=(t=(0,o.D)(m.y.INSIGHTS_ADMIN_ALERT,!0,{storage:r.Z1.LocalStorage}),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 a,r,i,o,c=[],s=!0,l=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=i.call(n)).done)&&(c.push(a.value),c.length!==t);s=!0);}catch(e){l=!0,r=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw r}}return c}}(t,n)||function(e,t){if(e){if("string"==typeof e)return p(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)?p(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.")}()),y=v[0],f=v[1];return e.hasAnalytics&&y?a.createElement("div",{role:"alert",className:"d-flex justify-content-between align-items-center bg-light-blue rounded p-2 mb-4"},a.createElement("div",null,a.createElement(s.x,{namespace:d,phrase:"adminAlert"}),a.createElement("a",{className:"text-info",href:function(){if(!e.video)return e.analyticsUrl;var t="";return e.video.typeId===l.E.Interactive&&(t="/interactives/".concat(e.video.id,"/views")),e.video.typeId===l.E.Video&&(t="/videos/".concat(e.video.id,"/views")),e.video.typeId===l.E.Clip&&(t="/clips/".concat(e.video.id,"/views")),i._.safeUrlConcat(e.analyticsUrl,t)}(),target:"_blank"},a.createElement(s.x,{namespace:d,phrase:"analytics"})),"."),a.createElement(c.h,{svgName:u.vn.Close,className:"text-blue",onClick:function(){f(!1)}})):a.createElement(a.Fragment,null)}},9540:(e,t,n)=>{n.d(t,{j:()=>q});var a=n(32735),r=n(23481),i=n(57900),o=n(2948),c=n(31453),s=n(2510),l=n(76306),u=n(49935),m=n(91693),p=n(38502),d=n(83914),v=n(83345),y=n(83523),f=n(36532),h=n(38143),b=n(4594),S=n(16714),g=n(22902),E=n(70227),O=n(35223),N=n(14070),T=n(97291),A=n(86702),k=n(46390),C=n(99998),x=n(86099),L=n(22490),R=n(99746),M=n(1619),I=n(41889),w=n(21789),D=n(8233);const P={shareAvatar:"dW1Zw",shareAvatarTitle:"WfiUS"};function _(e){var t;if(!e.sharedObject)return a.createElement(a.Fragment,null);var n=w.x.hasShareExpired(e.share),r=D.R.getPrivateIconAndText({privacy:e.share.privacy,entityTypeId:e.sharedObject.typeId,hasStudentExp:!1,entity:e.entity,yearGroups:e.yearGroups}).text;return a.createElement("div",{className:(0,c.A)("d-flex flex-row align-items-center gap-1",e.className)},a.createElement(I.B,{share:e.share,markingRequired:e.markingRequired,className:"cursor-default",hasData:e.hasData}),a.createElement(M.e,{className:(0,c.A)("ps-2 me-1",P.shareAvatar),titleClassName:(0,c.A)("text-truncate",P.shareAvatarTitle),privacy:e.share.privacy,type:e.share.type,classroomName:e.classroomName,openClassroomName:null===(t=e.share.options)||void 0===t?void 0:t.openClassroomName,hideSubtitle:!0,svgSize:d.S.Small}),!n&&!!r&&a.createElement("div",{className:"d-flex align-items-center gap-2"},a.createElement("span",{className:"d-inline-block"},"•"),a.createElement("p",{className:"mb-0"},r)))}var j=n(69003);const V={withDivider:"ZSzT3"};function H(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 a,r,i,o,c=[],s=!0,l=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=i.call(n)).done)&&(c.push(a.value),c.length!==t);s=!0);}catch(e){l=!0,r=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw r}}return c}}(e,t)||U(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 U(e,t){if(e){if("string"==typeof e)return Z(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)?Z(e,t):void 0}}function Z(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var G="insights.header",W=r.T.encloseNamespace(G);function z(e){return a.createElement("div",null,a.createElement("label",{htmlFor:"anonymiseNames",className:"mb-0 pe-3"},a.createElement(v.x,{namespace:G,phrase:"anonymiseNames"})),a.createElement(y.Z,{id:"anonymiseNames",on:e.anonymiseUsers,onClick:e.toggleAnonymiseUsers}))}function F(){var e=H((0,o.D)(A.y.HIDE_STAFF_RESULTS,!1),2),t=e[0],n=e[1];return a.createElement("span",{onClick:function(e){e.stopPropagation(),n(!t)}},a.createElement(d.x,{svgName:O.vn.Staff,className:"d-inline-block svg-container me-2 align-middle"}),a.createElement("span",{className:"d-inline-block align-middle"},a.createElement("span",{className:"me-3"},W("hideStaff")),a.createElement(y.Z,{on:t,onClick:function(){}})))}function Y(e){return a.createElement(f.u,{id:"audienceFilter",title:W("demoOnly"),spanHack:e.isDemo},a.createElement("div",{className:e.isDemo?"pointer-events-none":""},e.children))}function q(e){var t,n,r=H((0,o.D)(h.g.ANONYMISE_USERS,!1,{storage:i.Z1.LocalStorage}),2),y=r[0],A=r[1],M=(0,k.G)().isPlugin,I=(0,g.T)().hasPermissions,w=(0,C.R)().experience,D=I(S.C.ViewAnalyticsProduct)&&I(S.C.ViewCustomerAnalytics),P=(0,x.Zm)(e.share),q=(0,x.wY)(e.share,"insights");return a.createElement("div",null,a.createElement(R.p,{analyticsUrl:e.analyticsWebUrl,hasAnalytics:e.hasAnalytics,video:e.video}),a.createElement("section",{className:"mb-4"},a.createElement("div",{className:"d-flex justify-content-between mb-3"},a.createElement("div",{className:"me-2"},e.video&&a.createElement(a.Fragment,null,a.createElement("h1",{className:"mb-0 d-inline me-2"},e.video.name),!e.isDemo&&a.createElement(f.u,{title:W(e.video.typeId===b.E.Interactive?"viewInteractive":e.video.typeId===b.E.Clip?"viewClip":"viewVideo"),type:"text",spanHack:!0,spanHackClassName:"d-inline-block align-text-bottom"},a.createElement(m.h,{svgName:O.vn.NewWindow,appLink:L.W.getAppLink(e.video),svgSize:d.S.Large,className:"d-inline-block",customSize:!0}))),!e.video&&a.createElement("h1",{className:"partial-loading-background",style:{width:"20rem"}}," ")),a.createElement("div",{className:"d-flex gap-2"},!M&&P&&a.createElement(Y,{isDemo:e.isDemo},a.createElement(m.h,{svgName:O.vn.Share,className:"btn btn-outline-dark",appLink:P},a.createElement(v.x,{namespace:G,phrase:e.share.type===s.y.Link?"share":"shareOptions"}))),!M&&q&&(null===(t=e.video)||void 0===t?void 0:t.typeId)===b.E.Interactive&&a.createElement(Y,{isDemo:e.isDemo},a.createElement(m.h,{svgName:O.vn.Edit,className:"btn btn-outline-dark",appLink:q},a.createElement(v.x,{namespace:G,phrase:"editSettings"}))),a.createElement(Y,{isDemo:e.isDemo},a.createElement(l.m,{dropdownToggleClassName:"btn btn-outline-dark",actions:function(){var t,n,r=[];return(null===(t=e.video)||void 0===t?void 0:t.typeId)===b.E.Interactive&&(r.push({label:function(){return a.createElement(F,null)}}),r.push({label:W("generateReport"),svgName:O.vn.Print,appLink:{application:T.O.MY_SHARES,action:N.e.MyShares.INTERACTIVE_GENERATE_REPORT,args:[e.video.id]}})),D&&r.push({label:W("viewInAnalytics"),svgName:O.vn.Analytics,href:E.c.getObjectUrl(e.analyticsWebUrl,e.video,!0),openInNewTab:!0}),[].concat(r,function(e){if(Array.isArray(e))return Z(e)}(n=(0,j.sD)({share:e.share,sharedObject:e.video,isPlugin:M,hideShareOptionsActions:!0}))||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(n)||U(n)||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.")}())}()})))),a.createElement("div",{className:"d-flex justify-content-between mb-3"},e.video?a.createElement(u.Oo,{breadcrumbs:function(){if(!e.video||!e.share)return[];var t,n=[(t=e.share.type===s.y.Classroom?{name:W("classrooms"),appLink:{application:T.O.CLASSROOMS,action:N.e.Classrooms.HOME}}:e.share.type===s.y.Open?{name:W("openClassrooms"),appLink:{application:T.O.CLASSROOMS,action:N.e.Classrooms.OPEN_CLASSROOMS}}:{name:W("shares"),appLink:{application:T.O.MY_SHARES,action:N.e.MyShares.HOME}},"minimal"===w&&(t=Object.assign(Object.assign({},t),{appLink:{application:T.O.CLASSROOMS,action:N.e.Classrooms.HOME}})),t)];return e.share.type===s.y.Classroom&&e.classroom&&n.push({name:e.classroom.name,appLink:{application:T.O.CLASSROOMS,action:N.e.Classrooms.CLASSROOM_HOME,args:[e.classroom.id]}}),n.push({name:e.video.name,active:!0}),n}()}):a.createElement(u.b2,null)),a.createElement("div",{className:(0,c.A)("d-flex flex-row align-items-center mb-3",V.withDivider)},a.createElement(_,{sharedObject:e.video,share:e.share,entity:e.video,yearGroups:e.yearGroups,classroomName:null===(n=e.classroom)||void 0===n?void 0:n.name,markingRequired:e.markingRequired,hasData:e.hasData})),a.createElement("div",{className:"d-flex align-items-center justify-content-between mb-4"},a.createElement(p.r,{tabs:e.tabs}),a.createElement("div",null,e.hasData&&a.createElement(z,{anonymiseUsers:y,toggleAnonymiseUsers:function(){return A(!y)}})))))}},10447:(e,t,n)=>{n.d(t,{$6:()=>l,aq:()=>m,kj:()=>u});var a=n(23481),r=n(2510),i=n(14070),o=n(97291),c=n(86099),s=a.T.encloseNamespace("shared.insightsUtils");function l(e,t,n){return[{name:s("insights"),active:"insights"===t,appLink:(0,c.pY)(e,n)},{name:s("heatmap"),active:"heatmap"===t,appLink:(0,c.Rv)(e,n)}]}function u(e,t){return[{name:s("insights"),active:"insights"===t,appLink:(0,c.pY)(e)},{name:s("results"),active:"results"===t,appLink:(0,c.rq)(e)},{name:s("questions"),active:"questions"===t,appLink:(0,c.Sj)(e)},{name:s("heatmap"),active:"heatmap"===t,appLink:(0,c.Rv)(e)}]}function m(e,t,n,a){return a===r.y.Open?[{name:s("insights"),active:"insights"===t,appLink:{application:o.O.MY_SHARES,action:i.e.MyShares.INTERACTIVE_OVERVIEW_OPEN_CLASSROOM_DEMO,args:[e],params:n}},{name:s("results"),active:"results"===t,appLink:{application:o.O.MY_SHARES,action:i.e.MyShares.INTERACTIVE_STUDENTS_OPEN_CLASSROOM_DEMO,args:[e],params:n}},{name:s("questions"),active:"questions"===t,appLink:{application:o.O.MY_SHARES,action:i.e.MyShares.INTERACTIVE_QUESTIONS_OPEN_CLASSROOM_DEMO,args:[e],params:n}},{name:s("heatmap"),active:"heatmap"===t,appLink:{application:o.O.MY_SHARES,action:i.e.MyShares.INTERACTIVE_HEATMAP_OPEN_CLASSROOM_DEMO,args:[e],params:n}}]:[{name:s("insights"),active:"insights"===t,appLink:{application:o.O.MY_SHARES,action:i.e.MyShares.INTERACTIVE_OVERVIEW_DEMO,args:[e],params:n}},{name:s("results"),active:"results"===t,appLink:{application:o.O.MY_SHARES,action:i.e.MyShares.INTERACTIVE_STUDENTS_DEMO,args:[e],params:n}},{name:s("questions"),active:"questions"===t,appLink:{application:o.O.MY_SHARES,action:i.e.MyShares.INTERACTIVE_QUESTIONS_DEMO,args:[e],params:n}},{name:s("heatmap"),active:"heatmap"===t,appLink:{application:o.O.MY_SHARES,action:i.e.MyShares.INTERACTIVE_HEATMAP_DEMO,args:[e],params:n}}]}},362:(e,t,n)=>{n.d(t,{Z:()=>a});const a={circleContainer:"p8Vgz",backgroundCircle:"asGGE",circleSuccess:"PXLNj",circleWarning:"ZckRN",circleDanger:"slBRg",lgCircleContainer:"N8KCI",xsCircleContainer:"RPqZ2",pendingCircle:"DKrcq",centredPercentageText:"tpmLR"}},22771:(e,t,n)=>{n.d(t,{Z:()=>a});const a={pillTabSelector:"Hdi6o",tab:"RvNxr",minWidth:"GHSz9",radiusSmall:"VhJJa",tabLink:"WFyvo"}}}]);
|
|
2
|
+
//# sourceMappingURL=1074-fdce06d863-lite.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/1074-fdce06d863-lite.chunk.js","mappings":"yKAQMA,EAAY,qBADA,yBAqCZ,SAAUC,EAAkBC,EAAgBC,GAChD,OAAKD,EAIAC,GAOE,SAhCqBC,EAgCqBF,EAAKG,GAhCVC,EAgCcJ,EAAKI,UAvBzDC,GAAQ,GAAD,OAAIH,GAvBnB,SAAoBI,GAClB,IAAKA,EACH,OAAO,EAIT,IADA,IAAIC,EAAO,EACFC,EAAI,EAAGA,EAAIF,EAAKG,OAAQD,IAE/BD,GAASA,GAAQ,GAAKA,EADTD,EAAKI,WAAWF,GAE7BD,GAAQ,EAEV,OAAOI,KAAKC,IAAIL,EAClB,CAW6BM,CAAWT,IAAU,OAAGO,KAAKG,OAAO,IAAIC,MAAQC,aAAe,IAEnF,CACLC,aAAc,CAAE,KAAQ,MACxBC,UAAW,IACXT,OAAQ,EACRU,MAAO,UACPd,KAAAA,KAUIL,EAAKoB,QACAtB,EAAU,WAEZ,gBAAuBE,IAASF,EAAU,YAP1CA,EAAU,YAtBrB,IAA8BI,EAAgBE,EAStCC,CAwBR,C,gvBC7CA,IACMP,EAAY,qBADA,uBAGZuB,EAAQ,EAAH,WACR,SAAiB,iBACjB,SAAiB,WACjB,cAAsB,iBACtB,SAAiB,WACjB,iBAAyB,YAGtBC,EAAc,EAAH,WACd,SAAiB,QACjB,SAAiB,SACjB,cAAsB,UACtB,SAAiB,UACjB,iBAAyB,UAGtBC,EAA0B,EAAH,WAC1B,SAAiB,iBACjB,SAAiB,iBACjB,cAAsB,sBACtB,SAAiB,iBACjB,iBAAyB,yBAsFtB,SAAUC,EAAYC,G,QACpBC,EApFR,SAAkB,GAAiF,IAA/EC,EAAI,EAAJA,KAAMC,EAAa,EAAbA,cAAeC,EAAmB,EAAnBA,oBAAqBC,EAAiB,EAAjBA,kBAC5D,GAAIH,IAAS,UAAkBG,EAC7B,OAAOA,EAET,GAAIH,IAAS,eAAuBC,EAClC,OAAOA,EAET,IAAIF,EAAQ5B,EAAUyB,EAAwBI,IAK9C,OAHIE,IACFH,GAAS,IAAMG,GAEVH,CACT,CAuEgBK,CAASN,GACvB,OACE,uBAAKO,WAAW,OAAW,kCAAmCP,EAAMO,YAClE,2BACE,gBAAC,IAAU,CACTC,QAASZ,EAAMI,EAAME,MACrBO,QAASZ,EAAYG,EAAME,MAC3BQ,YAAa,QACbC,oBAAoB,MACpBC,QAAsB,QAAb,EAAAZ,EAAMY,eAAO,QAAI,EAAAC,EAAA,YAG9B,uBAAKN,UAAU,sBACb,qBAAGA,WAAW,OAAW,MAAOP,EAAMc,gBAAiBb,MAAOA,GAAQA,IACpED,EAAMe,cAAgB,wBAAMR,UAAU,kBAAoC,QAAlB,EAAAP,EAAMgB,oBAAY,QArDpF,SAAqB,GAA8E,IAA5Ed,EAAI,EAAJA,KAAMe,EAAO,EAAPA,QAAO,IAAEC,aAAAA,OAAY,IAAG,IAAC,MAAEC,oBAAAA,OAAmB,IAAG,IAAC,EAC7E,OAAQjB,GACN,KAAK,cACH,OAjCN,SAA8BiB,EAA6BD,GACzD,OAAIC,GAAuBD,EAClB,GAAP,OAAU7C,EAAU,sBAAuB,CAAE+C,WAAYD,IAAsB,aAAK9C,EAAU,kBAAmB,CAAE+C,WAAYF,KAE7HC,EACK9C,EAAU,gBAAiB,CAAE+C,WAAYD,IAE9CD,EACK7C,EAAU,kBAAmB,CAAE+C,WAAYF,IAE7C7C,EAAU,sBACnB,CAsBagD,CAAqBF,EAAqBD,GAEnD,KAAK,SACH,OAAO7C,EAAU,yBAEnB,KAAK,SACH,OA1BN,SAAyB4C,GACvB,MAAI,CAAE,iBAA2B,eAAyBK,SAASL,GAC1D5C,EAAU,0BAEf4C,IAAY,oCACP5C,EAAU,0BAEf4C,IAAY,iCACP5C,EAAU,0BAEf4C,IAAY,WACP5C,EAAU,0BAEf4C,IAAY,YACP5C,EAAU,8BADnB,CAEF,CAWakD,CAAgBN,GAEzB,KAAK,SACH,OAAO5C,EAAU,yBAEnB,KAAK,iBACH,OAAOA,EAAU,4BAEnB,QACE,OAAOA,EAAU,2BAEvB,CAiCwFmD,CAAYxB,KAIpG,C,kBC7IA,IAAYyB,E,iBAAZ,SAAYA,GACV,kBACA,oBACA,wCACA,8DACA,oEACA,wBACA,8BACA,iBACD,CATD,CAAYA,IAAAA,EAAY,I,iOCYxB,IACMpD,EAAY,qBADA,iBAsBLqD,EAAkB,CAC7BC,sBAAuB,SAACC,GACtB,IAAQC,EAA6DD,EAA7DC,aAAcZ,EAA+CW,EAA/CX,QAASa,EAAsCF,EAAtCE,cAAeC,EAAuBH,EAAvBG,OAAQC,EAAeJ,EAAfI,WAEtD,GAAIH,IAAiB,WAAoBA,IAAiB,WACxD,MAAO,CAAEI,KAAM,eAAwBC,KAAM7D,EAAUyD,EAAgB,uBAAyB,4BAMlG,IAAIK,MAAMC,QAAQnB,GAGlB,OAAQA,GACN,KAAK,WACH,MAAO,CAAEgB,KAAM,eAAwBC,KAAM7D,EAAU,sBACzD,KAAK,iCACH,MAAO,CAAE4D,KAAM,eAAwBC,KAAM7D,EAAU,kBACzD,KAAK,cACH,MAAO,CACL4D,KAAM,UACNC,KAAMR,EAAgBW,qBAAqBN,EAAQC,EAAYF,IAEnE,KAAK,oCACH,MAAO,CAAEG,KAAM,UAAmBC,KAAM7D,EAAUyD,EAAgB,uBAAyB,4BAC7F,KAAK,iBACH,MAAO,CACLG,KAAM,UACNC,KAAMR,EAAgBW,qBAAqBN,EAAQC,EAAYF,IAEnE,KAAK,YACH,MAAO,CAAEG,KAAM,UAAmBC,KAAM7D,EAAU,mBACpD,KAAK,sBACH,MAAO,CAAE4D,KAAM,UAAmBC,KAAM7D,EAAU,aACpD,QACE,MAAO,CAAC,EAEd,EAEAiE,eAAgB,SAACV,GACf,IAAQW,EAAgDX,EAAhDW,eAAgBC,EAAgCZ,EAAhCY,oBAAqBC,EAAWb,EAAXa,OAC7C,IAAKF,IAAmBC,EACtB,OAAOd,EAAgBC,sBAAsBC,GAE/C,IAAKW,EACH,MAAO,CAAEN,KAAM,UAAmBC,KAAM7D,EAAU,aAEpD,IAAMqE,EAAU,YAAmBH,GAC7BI,EAAgB,gBAAuBJ,EAAgB,IAAIjD,KAAQ,OAEzE,IAAKkD,EAAqB,CACxB,IAAI,EAAOE,EACPrE,EAAU,eACVA,EAAU,SAAU,CAAEuE,KAAMD,IAKhC,OAHIF,IAAW,cACb,EAAOpE,EAAU,YAEZ,CAAE4D,KAAM,WAAoBC,KAAA,EACpC,CAED,IAAIA,EAAOQ,EACPrE,EAAU,uBACVA,EAAU,iBAAkB,CAAEuE,KAAMD,IAKxC,OAHIF,IAAW,cACbP,EAAO7D,EAAU,oBAEZ,CAAE4D,KAAM,UAAmBC,KAAAA,EACpC,EAEAG,qBAAoB,SAACQ,EAAmBb,EAAyBF,G,MAC/D,IAAKe,IAAUb,EACb,OAAO,KAET,GAAIF,EACF,OAAOzD,EAAU,wBAEnB,IAAK,gBAAwBwE,GAC3B,OAAOxE,EAAU,oBAEnB,IAAMyE,EAAc,2BAA4D,QAAnB,EAAAD,EAAME,qBAAa,eAAEC,OAKlF,GAAIF,IAAgBA,EAAYG,UAC9B,OAAO5E,EAAU,cAEnB,IAEI6E,EACAC,EAE8B,EAL5BC,EAAS,cAAsBP,GAGF,E,64BAAA,CAEXb,GAAU,IAAlC,IAAK,EAAL,qBAAoC,KAAzBiB,EAAS,UAIbC,GAAgBD,EAAUD,MAAQE,EAAaF,SAClDE,EAAeD,GAKbH,GAAeG,EAAUD,OAASF,EAAYG,WAM9CG,GAAUH,EAAUG,OAAOJ,MAAQI,EAAOJ,SAMzCG,GAAuBF,EAAUD,MAAQG,EAAoBH,SAChEG,EAAsBF,EACzB,CAED,+BAGA,OAAKE,EAQqB,IAAtBnB,EAAWhD,OACNX,EAAU,iBAMf8E,EAAoBH,QAAUE,EAAaF,MACtC3E,EAAU,eAAgB,CAAE4E,UAAWC,EAAaG,OAEtDhF,EAAU,iBAAkB,CAAE4E,UAAWE,EAAoBE,OAjB3DhF,EAAU,YAkBrB,EAEAiF,uBAAsB,SAACrC,GAMrB,OAAIA,EAAQsC,aAAetC,EAAQuC,mBAC1B,YAELvC,EAAQwC,gBACH,QAEF,SACT,E,+CC9IUC,E,8BA3BZ,SAASC,EAAe3D,GACtB,IAAM4D,EAAM,cAAkB,SAACC,GAC7B,GAAKA,EAAL,CAGA,IAAMC,EAASD,EAAOE,EAAEC,QAAQhB,MAC1BiB,EAAgB,EAAI/E,KAAKgF,GAAKJ,EAC9BK,EAASF,EAAgBjE,EAAMoE,WAAaH,EAElDJ,EAAOnE,MAAM2E,gBAAkB,GAAH,OAAMJ,EAAa,YAAIA,GACnDJ,EAAOnE,MAAM4E,iBAAmBH,EAAOI,UAP/B,CAQV,EAAG,CAACvE,EAAMoE,aAEV,OACE,2BACE,0BAAQL,GAAG,QAAgB/D,EAAMwE,MAAOjE,UAAW,yBACjD,QAAUP,EAAMoE,aAChB,0BACER,IAAKA,EACLG,GAAG,QAAgB/D,EAAMwE,MACzBjE,WAAW,QAAmBP,EAAMoE,WAAYpE,EAAMyE,mBAKhE,CAsBM,SAAUC,EAAoB1E,G,MAC5B2E,GAAoB,QAAqB3E,EAAMoE,YAE/CI,EAAOxE,EAAMwE,OAChBxE,EAAM4E,SAAWlB,EAA0BmB,YACxC,WACA,YAGAC,EAAQ9E,EAAM+E,cAAe,QAAuBJ,GAE1D,OAAI3E,EAAM4E,SAAWlB,EAA0BsB,UAE3C,wBAAMzE,WAAW,QAA0BoE,IACxCG,GAKL,uBAAKvE,UAAS,4DAAsE,QAAf,EAAAP,EAAMO,iBAAS,QAAI,KACrFP,EAAM4E,SAAWlB,EAA0BuB,aAC1C,wBAAM1E,UAAU,QACbuE,GAGL,uBAAKvE,WAAW,QAA4BiE,EAAMG,IAChD,gBAAChB,EAAc,CAACS,WAAYO,EAAmBH,KAAMA,EAAMC,gBAAiBzE,EAAMyE,kBACjFzE,EAAM4E,SAAWlB,EAA0BmB,aAC1C,wBAAMtE,UAAW,2BACduE,IAMb,EAvDA,SAAYpB,GACV,2BACA,yBACA,6BACA,4BACD,CALD,CAAYA,IAAAA,EAAyB,KAgBrCgB,EAAoBQ,aAAe,CACjCN,OAAQlB,EAA0ByB,W,6uBC3DpC,IAKYC,EAHNC,EAAsB,GACtBC,EAAyB,KAE/B,SAAYF,GACV,gBACA,gBACA,yBACD,CAJD,CAAYA,IAAAA,EAAkB,KAM9B,IAAMG,EAAwB,EAAH,OACxBH,EAAmBI,WAAa,CAC/BhB,KAbiB,IAelBY,EAAmBK,MAAQ,CAC1BjB,KAhBiB,IAkBlBY,EAAmBM,MAAQ,CAC1BlB,KAlBoB,MAyBlB,SAAUmB,EAAgBnB,GAC9B,IAAMoB,EAAQL,EAAsBf,GAAMA,KACpCqB,EAAcrB,IAASY,EAAmBM,MAAQJ,EAAyBD,EACjF,MAAO,GAAP,OAAUO,EAAQ,EAAkB,EAAdC,EAAe,MACvC,CAEM,SAAUC,EACd1B,GACyD,IAAzDK,EAAA,uDAAmC,IAEnC,OAAIL,GAAcK,EAAgBsB,KACzB,kBAEL3B,GAAcK,EAAgBuB,SACzB,kBAEF,gBACT,CAEM,SAAUC,EACd7B,GACyD,IAAzDK,EAAA,uDAAmC,IAEnC,OAAIL,GAAcK,EAAgBsB,KACzB,eAEL3B,GAAcK,EAAgBuB,SACzB,eAEF,aACT,CAEM,SAAUE,EAA4B1B,EAA0BJ,GACpE,IAAI7D,EAAY,kBAAH,OAAqB,qBAWlC,OATIiE,IAASY,EAAmBM,QAC9BnF,GAAa,IAAJ,OAAQ,wBAEfiE,IAASY,EAAmBI,aAC9BjF,GAAa,IAAJ,OAAQ,wBAEf4F,EAAU/B,KACZ7D,GAAa,IAAJ,OAAQ,oBAEZA,CACT,CAEM,SAAU6F,EAAqBhC,GACnC,IAAI+B,EAAU/B,GAGd,OAAQA,EAAWiC,QAAQ,EAC7B,CAEM,SAAUC,EAAuBlC,GACrC,OAAI+B,EAAU/B,GACL,MAEF,GAAP,OAAUlF,KAAKqH,MAAmB,IAAbnC,GAAiB,IACxC,CAEM,SAAU+B,EAAU/B,GACxB,MAA6B,iBAAfA,CAChB,C,oHC7EA,SAASoC,EAAYxG,GACnB,OACE,kCACKA,EAAMyG,IAAIjG,SACX,uBAAKD,UAAWP,EAAMyG,IAAIpD,KAAO,OAAS,IACxC,gBAAC,IAAY,CAAC7C,QAASR,EAAMyG,IAAIjG,WAIpCR,EAAMyG,IAAIpD,KAEmB,iBAArBrD,EAAMyG,IAAIC,OACjB,uBAAKnG,UAAU,QACb,gBAAC,IAAK,CAACL,KAAM,UAAiByG,KAAM3G,EAAMyG,IAAIC,SAKxD,CA8BM,SAAUE,EAAgB5G,G,MAW9B,OACE,uBAAKO,UAA0B,QAAf,EAAAP,EAAMO,iBAAS,QAAI,GAAIqD,IAAK5D,EAAM6G,cAChD,sBAAItG,UAAS,qDACwB,oBAAsB,qBACvDP,EAAM8G,aAAe,gBAAqB,GAAE,qBAC5C9G,EAAM+G,cAAa,aAEpB/G,EAAMgH,KAAKC,IAAI,SAACR,EAAKS,GACpB,OACE,sBACE3G,UAAS,gCACD,QAAU,YAAIkG,EAAIU,OAAS,eAAiB,uBAAsB,6BACtEV,EAAIpD,KAAO,aAAkB,GAAE,YAAIoD,EAAIlG,UAAS,oBAEpD6G,IAAKF,GAEJT,EAAIY,QACH,gBAAC,IAAO,CACNA,QAASZ,EAAIY,QACbC,cAAeb,EAAIa,cACnBC,iBAAkBd,EAAIc,iBACtBhH,UAAS,sKAE4C,YAAc,yBAGnE,gBAACiG,EAAW,CAACC,IAAKA,KAGpB,gBAAC,IAAS,CACRlG,UAAS,sKAE4C,YAAc,wBAEnEiH,QAAS,WAAF,OA5CvB,SAAqBf,IACfA,EAAIU,QAAWV,EAAIgB,WAGvBhB,EAAIgB,WAEAhB,EAAIa,eAAiBb,EAAIc,kBAC3B,kBAA8Bd,EAAIa,cAAeb,EAAIc,kBACzD,CAoC+BG,CAAYjB,EAAI,GAE/B,gBAACD,EAAW,CAACC,IAAKA,KAK5B,IAIR,CA5DAG,EAAgB1B,aAAe,CAC7B4B,aAAc,K,2CC5DT,IAAMa,EAA0C,CACrD5B,KAAM,IACNC,SAAU,IAGC4B,EAA0C,CACrD7B,KAAM,GACNC,SAAU,G,6DCRN,SAAU6B,IACd,YAAgB,WAEd,OADA,uBACO,kBAAM,wBAAiC,CAChD,EAAG,GACL,C,8OCKA,IAAMC,EAAY,0BASZ,SAAUC,EAAmB/H,GACjC,I,IAIC,G,GAJyB,OACxB,0BACA,EACA,CAAEgI,QAAS,oB,EACZ,E,o4BAJOC,EAAI,KAAEC,EAAO,KA2BrB,OAAKlI,EAAMmI,cAAiBF,EAI1B,uBAAKG,KAAK,QAAQ7H,UAAU,oFAC1B,2BACE,gBAAC,IAAI,CAACuH,UAAWA,EAAWO,OAAO,eACnC,qBAAG9H,UAAU,YAAY+H,KAxB/B,WACE,IAAKtI,EAAM6C,MAAO,OAAO7C,EAAMuI,aAE/B,IAAIC,EAAa,GAWjB,OATIxI,EAAM6C,MAAM4F,SAAW,kBACzBD,EAAa,iBAAH,OAAoBxI,EAAM6C,MAAMnE,GAAE,WAE1CsB,EAAM6C,MAAM4F,SAAW,YACzBD,EAAa,WAAH,OAAcxI,EAAM6C,MAAMnE,GAAE,WAEpCsB,EAAM6C,MAAM4F,SAAW,WACzBD,EAAa,UAAH,OAAaxI,EAAM6C,MAAMnE,GAAE,WAEhC,kBAAwBsB,EAAMuI,aAAcC,EACrD,CASqCE,GAAmBC,OAAO,UACvD,gBAAC,IAAI,CAACb,UAAWA,EAAWO,OAAO,eACjC,KAEN,gBAAC,IAAU,CAAC7H,QAAS,WAAoBD,UAAU,YAAYiH,QAhCnE,WACEU,GAAQ,EACV,KAoBS,gCAaX,C,iYChEA,SAAgB,YAAc,QAAQ,iBAAmB,SCyBnD,SAAUU,EAAU5I,G,MACxB,IAAKA,EAAM6I,aACT,OAAO,iCAET,IAAMC,EAAaC,EAAA,kBAA4B/I,EAAMgJ,OACvCC,EAAgBvH,EAAA,wBAAsC,CAClET,QAASjB,EAAMgJ,MAAM/H,QACrBY,aAAc7B,EAAM6I,aAAaJ,OACjC3G,eAAe,EACfC,OAAQ/B,EAAM+B,OACdC,WAAYhC,EAAMgC,aALZE,KAQR,OACE,uBAAK3B,WAAW,OAAW,2CAA4CP,EAAMO,YAC3E,gBAAC2I,EAAA,EAAoB,CACnBF,MAAOhJ,EAAMgJ,MACbG,gBAAiBnJ,EAAMmJ,gBACvB5I,UAAU,iBACV6I,QAASpJ,EAAMoJ,UAEjB,gBAACrJ,EAAA,EAAW,CACVQ,WAAW,OAAW,YAAa,eACnCO,gBAAgB,OAAW,gBAAiB,oBAC5CG,QAASjB,EAAMgJ,MAAM/H,QACrBf,KAAMF,EAAMgJ,MAAM9I,KAClBC,cAAeH,EAAMG,cACrBE,kBAAsC,QAAnB,EAAAL,EAAMgJ,MAAMpH,eAAO,eAAEvB,kBACxCU,cAAY,EACZH,QAASyI,EAAAxI,EAAA,SAETiI,KAAgBG,GAChB,uBAAK1I,UAAU,mCACb,wBAAMA,UAAU,kBAAgB,KAChC,qBAAGA,UAAU,QAAQ0I,IAK/B,C,eChEA,SAAgB,YAAc,S,mgCCwC9B,IAAMnB,EAAY,kBACZzJ,EAAYiL,EAAA,mBAAiCxB,GAOnD,SAASyB,EAAqBvJ,GAC5B,OACE,2BACE,yBAAOwJ,QAAQ,iBAAiBjJ,UAAU,aAAY,gBAACkJ,EAAA,EAAI,CAAC3B,UAAWA,EAAWO,OAAO,oBACzF,gBAACqB,EAAA,EAAY,CAAChL,GAAG,iBAAiBiL,GAAI3J,EAAM4J,eAAgBpC,QAASxH,EAAM6J,uBAGjF,CAEA,SAASC,IACP,IAAgH,KAA9D,OAAsB,wBAAkC,GAAM,GAAxGC,EAAgB,KAAEC,EAAmB,KAE7C,OACE,wBACExC,QAAS,SAAAyC,GACPA,EAAMC,kBACNF,GAAqBD,EACvB,GAEA,gBAACV,EAAA,EAAY,CAAC7I,QAAS,WAAoBD,UAAU,mDACrD,wBAAMA,UAAU,+BACd,wBAAMA,UAAU,QACblC,EAAU,cAEb,gBAACqL,EAAA,EAAY,CAACC,GAAII,EAAkBvC,QAAS,WAAO,KAI5D,CAMA,SAAS2C,EAAYnK,GACnB,OACE,gBAACoK,EAAA,EAAO,CACN1L,GAAG,iBACHuB,MAAO5B,EAAU,YACjBgM,SAAUrK,EAAMsK,QAEhB,uBAAK/J,UAAWP,EAAMsK,OAAS,sBAAwB,IACpDtK,EAAMuK,UAIf,CAiBM,SAAUC,EAAexK,G,QAK5B,KAJ6C,OAC5CyK,EAAA,mBACA,EACA,CAAEzC,QAAS,oBACZ,GAJO4B,EAAc,KAAEc,EAAiB,KAMjCC,GAAa,EAAAC,EAAA,KAAbD,SACAE,GAAmB,EAAAC,EAAA,KAAnBD,eACAE,GAAe,EAAAC,EAAA,KAAfD,WAEFE,EACJJ,EAAeK,EAAA,yBACfL,EAAeK,EAAA,yBAEXC,GAAsB,QAAuBnL,EAAMgJ,OACnDoC,GAAmB,QAAoBpL,EAAMgJ,MAAO,YAmH1D,OACE,2BACE,gBAACjB,EAAA,EAAkB,CACjBQ,aAAcvI,EAAMqL,gBACpBlD,aAAcnI,EAAMmI,aACpBtF,MAAO7C,EAAM6C,QAEf,2BAAStC,UAAU,QACjB,uBAAKA,UAAU,uCACb,uBAAKA,UAAU,QACZP,EAAM6C,OACL,gCACE,sBAAItC,UAAU,sBAAsBP,EAAM6C,MAAMQ,OAC9CrD,EAAMsK,QACN,gBAACF,EAAA,EAAO,CAACnK,MAAO5B,EApB1B2B,EAAM6C,MAAM4F,SAAW6C,EAAA,cAA+B,kBACtDtL,EAAM6C,MAAM4F,SAAW6C,EAAA,OAAwB,WAE5C,aAiB0DpL,KAAK,OAAOmK,UAAQ,EAACkB,kBAAkB,oCACxF,gBAACC,EAAA,EAAU,CACThL,QAAS,eACT6G,QAASoE,EAAA,aAA8BzL,EAAM6C,OAC7CjC,QAASyI,EAAAxI,EAAA,MACTN,UAAU,iBACVmL,YAAU,OAMlB1L,EAAM6C,OAAS,sBAAItC,UAAU,6BAA6Bb,MAAO,CAAEkG,MAAO,UAAS,MAGvF,uBAAKrF,UAAU,iBACXoK,GAAYQ,GACZ,gBAAChB,EAAW,CAACG,OAAQtK,EAAMsK,QACzB,gBAACkB,EAAA,EAAU,CAAChL,QAAS,WAAoBD,UAAU,uBAAuB8G,QAAS8D,GACjF,gBAAC1B,EAAA,EAAI,CAAC3B,UAAWA,EAAWO,OAAQrI,EAAMgJ,MAAM9I,OAASyL,EAAA,OAAiB,QAAU,oBAIxFhB,GAAYS,IAA+B,QAAX,EAAApL,EAAM6C,aAAK,eAAE4F,UAAW6C,EAAA,eACxD,gBAACnB,EAAW,CAACG,OAAQtK,EAAMsK,QACzB,gBAACkB,EAAA,EAAU,CAAChL,QAAS,UAAmBD,UAAU,uBAAuB8G,QAAS+D,GAChF,gBAAC3B,EAAA,EAAI,CAAC3B,UAAWA,EAAWO,OAAO,mBAIzC,gBAAC8B,EAAW,CAACG,OAAQtK,EAAMsK,QACzB,gBAACsB,EAAA,EAAe,CACdC,wBAAwB,uBACxBC,QA3Fd,W,QACQA,EAA2B,GA4BjC,OA1Be,QAAX,EAAA9L,EAAM6C,aAAK,eAAE4F,UAAW6C,EAAA,gBAC1BQ,EAAQC,KAAK,CACXjH,MAAO,WAAF,OAAQ,gBAACgF,EAAe,KAAG,IAGlCgC,EAAQC,KAAK,CACXjH,MAAOzG,EAAU,kBACjBmC,QAAS,WACT6G,QAAS,CACP2E,YAAa,cACbC,OAAQ,yCACRC,KAAM,CAAClM,EAAM6C,MAAMnE,QAKrBuM,GACFa,EAAQC,KAAK,CACXjH,MAAOzG,EAAU,mBACjBmC,QAAS,eACT8H,KAAM6D,EAAA,eAAkCnM,EAAMqL,gBAAiBrL,EAAM6C,OAAO,GAC5EuJ,cAAc,IAKX,GAAP,OAAYN,E,gDAAY,QAAsB,CAC5C9C,MAAOhJ,EAAMgJ,MACbH,aAAc7I,EAAM6C,MACpB8H,SAAAA,EACA0B,yBAAyB,M,qSAE7B,CAwDuBC,QAMjB,uBAAK/L,UAAU,uCACZP,EAAM6C,MACH,gBAAC0J,EAAA,GAAW,CAACC,YA9HzB,WACE,IAAKxM,EAAM6C,QAAU7C,EAAMgJ,MAAO,MAAO,GAEzC,IA5CIyD,EA4CED,EAA4B,EAzChCC,EADEzM,EAAMgJ,MAAM9I,OAASyL,EAAA,YACV,CACXtI,KAAMhF,EAAU,cAChBgJ,QAAS,CACP2E,YAAa,eACbC,OAAQ,sBAGHjM,EAAMgJ,MAAM9I,OAASyL,EAAA,OACjB,CACXtI,KAAMhF,EAAU,kBAChBgJ,QAAS,CACP2E,YAAa,eACbC,OAAQ,iCAIC,CACX5I,KAAMhF,EAAU,UAChBgJ,QAAS,CACP2E,YAAa,cACbC,OAAQ,oBAKK,YAAflB,IACF0B,EAAa,OAAH,wBACLA,GAAU,CACbpF,QAAS,CACP2E,YAAa,eACbC,OAAQ,wBAKPQ,IA2BP,OAlBEzM,EAAMgJ,MAAM9I,OAASyL,EAAA,aACrB3L,EAAM0M,WAENF,EAAYT,KAAK,CACf1I,KAAMrD,EAAM0M,UAAUrJ,KACtBgE,QAAS,CACP2E,YAAa,eACbC,OAAQ,8BACRC,KAAM,CAAClM,EAAM0M,UAAUhO,OAK7B8N,EAAYT,KAAK,CACf1I,KAAMrD,EAAM6C,MAAMQ,KAClB8D,QAAQ,IAGHqF,CACT,CAqGsCG,KAC1B,gBAAC,KAAkB,OAGzB,uBAAKpM,WAAW,OAAW,0CAA2C,gBACpE,gBAACqI,EAAS,CACRC,aAAc7I,EAAM6C,MACpBmG,MAAOhJ,EAAMgJ,MACbjH,OAAQ/B,EAAM6C,MACdb,WAAYhC,EAAMgC,WAClB7B,cAA8B,QAAf,EAAAH,EAAM0M,iBAAS,eAAErJ,KAChC8F,gBAAiBnJ,EAAMmJ,gBACvBC,QAASpJ,EAAMoJ,WAGnB,uBAAK7I,UAAU,0DACb,gBAACqG,EAAA,EAAe,CAACI,KAAMhH,EAAMgH,OAC7B,2BACGhH,EAAMoJ,SACL,gBAACG,EAAoB,CACnBK,eAAgBA,EAChBC,qBAAsB,WAAF,OAAQa,GAAmBd,EAAe,OAQ9E,C,gHC5TMvL,EAAY,qBADA,wBAKZ,SAAUuO,EAAqB5D,EAAc7B,EAAsB0F,GACvE,MAAO,CACL,CACExJ,KAAMhF,EAAU,YAChB8I,OAAmB,aAAXA,EACRE,SAAS,QAA2B2B,EAAO6D,IAE7C,CACExJ,KAAMhF,EAAU,WAChB8I,OAAmB,YAAXA,EACRE,SAAS,QAA0B2B,EAAO6D,IAGhD,CAEM,SAAUC,EAA2B9D,EAAc7B,GACvD,MAAO,CACL,CACE9D,KAAMhF,EAAU,YAChB8I,OAAmB,aAAXA,EACRE,SAAS,QAA2B2B,IAEtC,CACE3F,KAAMhF,EAAU,WAChB8I,OAAmB,YAAXA,EACRE,SAAS,QAA2B2B,IAEtC,CACE3F,KAAMhF,EAAU,aAChB8I,OAAmB,cAAXA,EACRE,SAAS,QAA4B2B,IAEvC,CACE3F,KAAMhF,EAAU,WAChB8I,OAAmB,YAAXA,EACRE,SAAS,QAA0B2B,IAGzC,CAEM,SAAU+D,EAA+BrO,EAAYyI,EAAsB0F,EAAoB3M,GACnG,OAAIA,IAAS,SACJ,CACL,CACEmD,KAAMhF,EAAU,YAChB8I,OAAmB,aAAXA,EACRE,QAAS,CACP2E,YAAa,cACbC,OAAQ,sDACRC,KAAM,CAACxN,GACPmO,OAAAA,IAGJ,CACExJ,KAAMhF,EAAU,WAChB8I,OAAmB,YAAXA,EACRE,QAAS,CACP2E,YAAa,cACbC,OAAQ,sDACRC,KAAM,CAACxN,GACPmO,OAAAA,IAGJ,CACExJ,KAAMhF,EAAU,aAChB8I,OAAmB,cAAXA,EACRE,QAAS,CACP2E,YAAa,cACbC,OAAQ,uDACRC,KAAM,CAACxN,GACPmO,OAAAA,IAGJ,CACExJ,KAAMhF,EAAU,WAChB8I,OAAmB,YAAXA,EACRE,QAAS,CACP2E,YAAa,cACbC,OAAQ,qDACRC,KAAM,CAACxN,GACPmO,OAAAA,KAMD,CACL,CACExJ,KAAMhF,EAAU,YAChB8I,OAAmB,aAAXA,EACRE,QAAS,CACP2E,YAAa,cACbC,OAAQ,uCACRC,KAAM,CAACxN,GACPmO,OAAAA,IAGJ,CACExJ,KAAMhF,EAAU,WAChB8I,OAAmB,YAAXA,EACRE,QAAS,CACP2E,YAAa,cACbC,OAAQ,uCACRC,KAAM,CAACxN,GACPmO,OAAAA,IAGJ,CACExJ,KAAMhF,EAAU,aAChB8I,OAAmB,cAAXA,EACRE,QAAS,CACP2E,YAAa,cACbC,OAAQ,wCACRC,KAAM,CAACxN,GACPmO,OAAAA,IAGJ,CACExJ,KAAMhF,EAAU,WAChB8I,OAAmB,YAAXA,EACRE,QAAS,CACP2E,YAAa,cACbC,OAAQ,sCACRC,KAAM,CAACxN,GACPmO,OAAAA,IAIR,C,iCC9IA,SAAgB,gBAAkB,QAAQ,iBAAmB,QAAQ,cAAgB,QAAQ,cAAgB,QAAQ,aAAe,QAAQ,kBAAoB,QAAQ,kBAAoB,QAAQ,cAAgB,QAAQ,sBAAwB,Q,mCCApP,SAAgB,gBAAkB,QAAQ,IAAM,QAAQ,SAAW,QAAQ,YAAc,QAAQ,QAAU,Q","sources":["file:///app/packages/libs/shared/src/apps/analytics/utils/AnonymiseUserUtils.ts","file:///app/packages/libs/shared/src/apps/share-v2/components/share-avatar/ShareAvatar.tsx","file:///app/packages/libs/shared/src/apps/share-v2/enums/SharePrivacy.ts","file:///app/packages/libs/shared/src/apps/share-v2/utils/ShareLinkHelper.ts","file:///app/packages/libs/shared/src/components/percentage-indicator/PercentageIndicator.tsx","file:///app/packages/libs/shared/src/components/percentage-indicator/PercentageIndicatorUtils.ts","file:///app/packages/libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx","file:///app/packages/libs/shared/src/constants/ScoreThresholds.ts","file:///app/packages/libs/shared/src/hooks/useLockContentWidth.ts","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-admin-alert/InsightsAdminAlert.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/share-info/share-info.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/share-info/ShareInfo.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-header/insights-header.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-header/InsightsHeader.tsx","file:///app/packages/projects/lite/src/apps/my-shares/utils/InsightsAppLinkUtils.ts","file:///app/packages/libs/shared/src/components/percentage-indicator/percentage-indicator.scss","file:///app/packages/libs/shared/src/components/pill-tab-selector/pill-tab-selector.scss"],"sourcesContent":["import { animals, colors, Config as UniqueNamesConfig, uniqueNamesGenerator } from 'unique-names-generator';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nconst namespace = 'shared.analyticsUtils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction guidToSeed(guid: string): number {\n if (!guid)\n return 0;\n\n // Simple hash function (DJB2-like) for browsers\n let hash = 0;\n for (let i = 0; i < guid.length; i++) {\n const char = guid.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash |= 0; // Convert to 32bit integer\n }\n return Math.abs(hash);\n}\n\nfunction getUniqueNamesConfig(userId: string, sessionId: string): UniqueNamesConfig {\n /**\n * Generate a seed that is unique to each user but changes every 5 minutes.\n * \n * We use a seed so that if the same user's name is anonymised multiple times\n * in quick succession (e.g. multiple renders), the same name will be returned each time.\n * \n * We change the seed every 5 minutes so that students don't always have the same name.\n */\n const seed = +`${userId || guidToSeed(sessionId)}${Math.floor((new Date()).getMinutes() / 5)}`;\n\n return {\n dictionaries: [ colors, animals ],\n separator: ' ',\n length: 2,\n style: 'capital',\n seed\n };\n}\n\nexport function anonymiseUserName(user: AnonUser, shouldAnonymise: boolean): string {\n if (!user) {\n return getPhrase('anonUser');\n }\n\n if (!shouldAnonymise) {\n if (user.deleted)\n return getPhrase('deleted');\n\n return UserHelper.getFullName(user) || getPhrase('anonUser');\n }\n\n return uniqueNamesGenerator(getUniqueNamesConfig(user.id, user.sessionId));\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { SharePrivacy } from '../../enums/SharePrivacy';\nimport { ShareType } from '../../enums/ShareType';\n\nconst namespace = 'sharev2.shareAvatar';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst icons = {\n [ShareType.Open]: cvSvgLibrary.Classrooms,\n [ShareType.Link]: cvSvgLibrary.Link,\n [ShareType.Classroom]: cvSvgLibrary.Classrooms,\n [ShareType.Live]: cvSvgLibrary.Play,\n [ShareType.LegacyDirect]: cvSvgLibrary.Share\n};\n\nconst iconColours = {\n [ShareType.Open]: 'blue',\n [ShareType.Link]: 'black',\n [ShareType.Classroom]: 'purple',\n [ShareType.Live]: 'purple',\n [ShareType.LegacyDirect]: 'indigo'\n};\n\nconst shareTypeTitlePhraseMap = {\n [ShareType.Open]: 'openShareType',\n [ShareType.Link]: 'linkShareType',\n [ShareType.Classroom]: 'classroomShareType',\n [ShareType.Live]: 'liveShareType',\n [ShareType.LegacyDirect]: 'legacyDirectShareType'\n};\n\nfunction getTitle({ type, classroomName, additionalTitleText, openClassroomName }: ShareAvatarProps) {\n if (type === ShareType.Open && openClassroomName)\n return openClassroomName;\n \n if (type === ShareType.Classroom && classroomName)\n return classroomName;\n\n let title = getPhrase(shareTypeTitlePhraseMap[type]);\n\n if (additionalTitleText)\n title += ' ' + additionalTitleText;\n\n return title;\n}\n\nfunction getClassroomSubtitle(classroomGroupCount: number, studentCount: number): string {\n if (classroomGroupCount && studentCount)\n return `${getPhrase('classroomGroupCount', { smartCount: classroomGroupCount })}, ${getPhrase('studentSubTitle', { smartCount: studentCount })}`;\n\n if (classroomGroupCount)\n return getPhrase('groupSubTitle', { smartCount: classroomGroupCount });\n\n if (studentCount)\n return getPhrase('studentSubTitle', { smartCount: studentCount });\n\n return getPhrase('allStudentsSubTitle');\n}\n\nfunction getLinkSubtitle(privacy: SharePrivacy) {\n if ([ SharePrivacy.JustMySchool, SharePrivacy.Protected ].includes(privacy))\n return getPhrase('respectRatingsSubTitle');\n\n if (privacy === SharePrivacy.JustMySchoolOverrideRestriction)\n return getPhrase('anyoneInSchoolSubTitle');\n\n if (privacy === SharePrivacy.ProtectedOverrideRestriction)\n return getPhrase('anyoneSignedInSubTitle');\n\n if (privacy === SharePrivacy.Public)\n return getPhrase('anyoneWithLinkSubTitle');\n\n if (privacy === SharePrivacy.PinCode)\n return getPhrase('anyoneWithPinSubTitle');\n}\n\nfunction getSubtitle({ type, privacy, studentCount = 0, classroomGroupCount = 0 }: ShareAvatarProps) {\n switch (type) {\n case ShareType.Classroom:\n return getClassroomSubtitle(classroomGroupCount, studentCount);\n\n case ShareType.Open:\n return getPhrase('openShareTypeSubTitle');\n\n case ShareType.Link:\n return getLinkSubtitle(privacy);\n \n case ShareType.Live:\n return getPhrase('liveShareTypeSubTitle');\n\n case ShareType.LegacyDirect:\n return getPhrase('legacyDirectTypeSubTitle');\n\n default:\n return getPhrase('publicShareTypeSubTitle');\n }\n}\n\ninterface ShareAvatarProps {\n type: ShareType;\n privacy: SharePrivacy;\n studentCount?: number;\n classroomGroupCount?: number;\n classroomName?: string;\n openClassroomName?: string;\n hideSubtitle?: boolean;\n subtitleText?: string;\n svgSize?: SvgContainerSize;\n additionalTitleText?: string;\n className?: string;\n titleClassName?: string;\n showIconCircle?: boolean;\n}\n\nexport function ShareAvatar(props: ShareAvatarProps): JSX.Element {\n const title = getTitle(props);\n return (\n <div className={classNames('d-flex align-items-center gap-2', props.className)}>\n <div>\n <IconCircle\n svgName={icons[props.type]}\n variant={iconColours[props.type]}\n textVariant={'white'}\n svgWrapperClassName='p-1'\n svgSize={props.svgSize ?? SvgContainerSize.Standard}\n />\n </div>\n <div className='d-flex flex-column'>\n <p className={classNames('m-0', props.titleClassName)} title={title}>{title}</p>\n {!props.hideSubtitle && <span className='text-secondary'>{props.subtitleText ?? getSubtitle(props)}</span>}\n </div>\n </div>\n );\n}","export enum SharePrivacy {\n Public = 'Public',\n PinCode = 'PinCode',\n PasswordProtected = 'PasswordProtected',\n ProtectedOverrideRestriction = 'ProtectedOverrideRestriction',\n JustMySchoolOverrideRestriction = 'JustMySchoolOverrideRestriction',\n Protected = 'Protected',\n JustMySchool = 'JustMySchool',\n Direct = 'Direct'\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SharePrivacy } from 'libs/shared/apps/share-v2/enums/SharePrivacy';\nimport type { SharePrivacyResponse } from 'libs/shared/apps/share-v2/interfaces/SharePrivacyResponse';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ShareLinkStatus } from 'libs/shared/enums/ShareLinkStatus';\nimport type { 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 = 'sharev2.utils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface GetIconAndTextOptions {\n linkExpireDate: string;\n isPasswordProtected: boolean;\n privacy: SharePrivacy;\n status: ShareLinkStatus;\n entityTypeId: MasterType;\n hasStudentExp: boolean;\n entity: BaseObject;\n yearGroups: YearGroup[];\n}\n\ninterface GetPrivateIconAndTextOptions {\n privacy: SharePrivacy;\n entityTypeId: MasterType;\n hasStudentExp: boolean;\n entity: BaseObject;\n yearGroups: YearGroup[];\n}\n\nexport const ShareLinkHelper = {\n getPrivateIconAndText: (options: GetPrivateIconAndTextOptions) => {\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) {\n case SharePrivacy.Public:\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase('publicDescription') };\n case SharePrivacy.ProtectedOverrideRestriction:\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase('clickViewOnly') };\n case SharePrivacy.Protected:\n return {\n icon: cvSvgLibrary.Lock,\n text: ShareLinkHelper.getRespectRatingText(entity, yearGroups, hasStudentExp)\n };\n case SharePrivacy.JustMySchoolOverrideRestriction:\n return { icon: cvSvgLibrary.Lock, text: getPhrase(hasStudentExp ? 'justMySchoolTeachers' : 'justMySchoolDescription') };\n case SharePrivacy.JustMySchool:\n return {\n icon: cvSvgLibrary.Lock,\n text: ShareLinkHelper.getRespectRatingText(entity, yearGroups, hasStudentExp)\n };\n case SharePrivacy.PinCode:\n return { icon: cvSvgLibrary.Lock, text: getPhrase('pinDescription') };\n case SharePrivacy.PasswordProtected:\n return { icon: cvSvgLibrary.Lock, text: getPhrase('password') };\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\n getShareLinkAccessType(privacy: SharePrivacyResponse): 'private' | 'owner' | 'protected' {\n /**\n * If an entity is not a ClickView content and they cannot manage access\n * settings of the entity (which they can if its their private entity)\n * it means that its a TV content\n */\n if (privacy.isTvContent || privacy.isClickViewContent)\n return 'protected';\n\n if (privacy.canManageAccess)\n return 'owner';\n\n return 'private';\n }\n};","import React from 'react';\n\nimport { ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\n\nimport {\n getCircleClassName,\n getCircleContainerClassName,\n getCircleRadius,\n getColouredLabelClassName,\n getFormattedPercentage,\n getPercentageToFixed,\n isPending,\n ProgressCircleSize\n} from './PercentageIndicatorUtils';\n\nimport styles from './percentage-indicator.scss';\n\ninterface ProgressCircleProps {\n size: ProgressCircleSize;\n scoreThresholds?: ScoreThresholds;\n percentage?: number;\n}\n\nfunction ProgressCircle(props: ProgressCircleProps): JSX.Element {\n const ref = React.useCallback((circle: SVGCircleElement) => {\n if (!circle)\n return;\n\n const radius = circle.r.baseVal.value;\n const circumference = 2 * Math.PI * radius;\n const offset = circumference - props.percentage * circumference;\n\n circle.style.strokeDasharray = `${circumference} ${circumference}`;\n circle.style.strokeDashoffset = offset.toString();\n }, [props.percentage]);\n\n return (\n <svg>\n <circle r={getCircleRadius(props.size)} className={styles.backgroundCircle} />\n {!isPending(props.percentage) &&\n <circle\n ref={ref}\n r={getCircleRadius(props.size)}\n className={getCircleClassName(props.percentage, props.scoreThresholds)}\n />\n }\n </svg>\n );\n}\n\nexport enum PercentageIndicatorLayout {\n CircleOnly = 'circle_only',\n LabelOnly = 'label_only',\n LabelBefore = 'label_before',\n LabelInside = 'label_inside'\n}\n\ninterface PercentageIndicatorProps {\n layout: PercentageIndicatorLayout;\n percentage?: number; // Between 0 and 1 or undefined for pending\n className?: string;\n customLabel?: string;\n scoreThresholds?: ScoreThresholds;\n size?: ProgressCircleSize;\n}\n\nPercentageIndicator.defaultProps = {\n layout: PercentageIndicatorLayout.CircleOnly\n};\n\nexport function PercentageIndicator(props: PercentageIndicatorProps): JSX.Element {\n const percentageToFixed = getPercentageToFixed(props.percentage);\n\n const size = props.size ||\n (props.layout === PercentageIndicatorLayout.LabelInside\n ? ProgressCircleSize.Large\n : ProgressCircleSize.Small\n );\n\n const label = props.customLabel || getFormattedPercentage(percentageToFixed);\n\n if (props.layout === PercentageIndicatorLayout.LabelOnly)\n return (\n <span className={getColouredLabelClassName(percentageToFixed)}>\n {label}\n </span>\n );\n\n return (\n <div className={`d-flex align-items-center justify-content-between ${props.className ?? ''}`}>\n {props.layout === PercentageIndicatorLayout.LabelBefore &&\n <span className='me-2'>\n {label}\n </span>\n }\n <div className={getCircleContainerClassName(size, percentageToFixed)}>\n <ProgressCircle percentage={percentageToFixed} size={size} scoreThresholds={props.scoreThresholds} />\n {props.layout === PercentageIndicatorLayout.LabelInside &&\n <span className={styles.centredPercentageText}>\n {label}\n </span>\n }\n </div>\n </div>\n );\n}","import { ScoreThresholdDefaults, ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\n\nimport styles from './percentage-indicator.scss';\n\n/**\n * Values for width and strokeWidth are taken from progress-circle.scss.\n * If either are changed, they must be updated in both places.\n */\nconst CIRCLE_WIDTH = 2; // rem\nconst CIRCLE_WIDTH_LG = 5.8; // rem\nconst CIRCLE_STROKE_WIDTH = 0.2; // rem\nconst CIRCLE_STROKE_WIDTH_LG = 0.36; // rem\n \nexport enum ProgressCircleSize {\n Small = 'small',\n Large = 'large',\n ExtraSmall = 'extraSmall'\n}\n\nconst ProgressCircleSizeMap = {\n [ProgressCircleSize.ExtraSmall]: {\n size: CIRCLE_WIDTH\n },\n [ProgressCircleSize.Small]: {\n size: CIRCLE_WIDTH\n },\n [ProgressCircleSize.Large]: {\n size: CIRCLE_WIDTH_LG\n }\n};\n\n/**\n * radius = width / 2 - strokeWidth * 2\n */\nexport function getCircleRadius(size: ProgressCircleSize): string {\n const width = ProgressCircleSizeMap[size].size;\n const strokeWidth = size === ProgressCircleSize.Large ? CIRCLE_STROKE_WIDTH_LG : CIRCLE_STROKE_WIDTH;\n return `${width / 2 - strokeWidth * 2}rem`;\n}\n \nexport function getCircleClassName(\n percentage: number,\n scoreThresholds: ScoreThresholds = ScoreThresholdDefaults\n): string {\n if (percentage >= scoreThresholds.HIGH)\n return styles.circleSuccess;\n \n if (percentage >= scoreThresholds.MODERATE)\n return styles.circleWarning;\n \n return styles.circleDanger;\n}\n \nexport function getColouredLabelClassName(\n percentage: number,\n scoreThresholds: ScoreThresholds = ScoreThresholdDefaults\n): string {\n if (percentage >= scoreThresholds.HIGH)\n return 'text-success';\n \n if (percentage >= scoreThresholds.MODERATE)\n return 'text-warning';\n \n return 'text-danger';\n}\n \nexport function getCircleContainerClassName(size: ProgressCircleSize, percentage?: number): string {\n let className = `d-inline-block ${styles.circleContainer}`;\n \n if (size === ProgressCircleSize.Large)\n className += ` ${styles.lgCircleContainer}`;\n\n if (size === ProgressCircleSize.ExtraSmall)\n className += ` ${styles.xsCircleContainer}`;\n\n if (isPending(percentage))\n className += ` ${styles.pendingCircle}`;\n \n return className;\n}\n\nexport function getPercentageToFixed(percentage?: number): number | undefined {\n if (isPending(percentage))\n return;\n \n return +percentage.toFixed(2);\n}\n \nexport function getFormattedPercentage(percentage?: number): string {\n if (isPending(percentage))\n return `--%`;\n\n return `${Math.round(percentage * 100)}%`;\n}\n\nexport function isPending(percentage?: number): boolean {\n return typeof percentage !== 'number';\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport { SvgContainer } from '../svg-container/SvgContainer';\n\nimport styles from './pill-tab-selector.scss';\n\ninterface TabContentsProps {\n tab: PillTab;\n}\n\nfunction TabContents(props: TabContentsProps): JSX.Element {\n return (\n <>\n {!!props.tab.svgName && (\n <div className={props.tab.name ? 'pe-1' : ''}>\n <SvgContainer svgName={props.tab.svgName} />\n </div>\n )}\n\n {props.tab.name}\n\n {typeof (props.tab.count) === 'number' && (\n <div className='ps-2'>\n <Badge type={BadgeType.Count} data={props.tab.count} />\n </div>\n )}\n </>\n );\n}\n\nexport interface PillTab {\n name: string;\n active: boolean;\n svgName?: string;\n\n className?: string;\n\n appLink?: Core.AppLink;\n onSelect?: () => void;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n count?: number;\n}\n\ninterface PillTabSelectorProps {\n tabs: PillTab[];\n containerRef?: (el: HTMLElement) => void;\n listClassName?: string;\n className?: string;\n borderRadius?: 'sm' | 'lg'\n}\n\nPillTabSelector.defaultProps = {\n borderRadius: 'lg'\n};\n\nexport function PillTabSelector(props: PillTabSelectorProps): JSX.Element {\n function onSelectTab(tab: PillTab): void {\n if (tab.active || !tab.onSelect)\n return;\n\n tab.onSelect();\n\n if (tab.analyticsData && tab.analyticsOptions)\n AnalyticsHelper.logUserAction(tab.analyticsData, tab.analyticsOptions);\n }\n\n return (\n <nav className={props.className ?? ''} ref={props.containerRef}>\n <ul className={`\n list-unstyled d-inline-block m-0 ${styles.pillTabSelector}\n ${props.borderRadius ? styles.radiusSmall : ''}\n ${props.listClassName}\n `}>\n {props.tabs.map((tab, index) => {\n return (\n <li\n className={`\n p-0 ${styles.tab} ${tab.active ? 'btn btn-dark' : 'btn btn-outline-dark'}\n ${tab.name ? styles.minWidth : ''} ${tab.className}\n `}\n key={index}\n >\n {tab.appLink ? (\n <AppLink\n appLink={tab.appLink}\n analyticsData={tab.analyticsData}\n analyticsOptions={tab.analyticsOptions}\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n >\n <TabContents tab={tab} />\n </AppLink>\n ) : (\n <DivButton\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n onClick={() => onSelectTab(tab)}\n >\n <TabContents tab={tab} />\n </DivButton>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n );\n}\n","export interface ScoreThresholds {\n HIGH: number;\n MODERATE: number;\n}\n\nexport const ScoreThresholdDefaults: ScoreThresholds = {\n HIGH: 0.75,\n MODERATE: 0.5\n};\n\nexport const ScoreThresholdInsights: ScoreThresholds = {\n HIGH: 0.7,\n MODERATE: 0.7\n};","import 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 { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\n\nconst namespace = 'lite.insightsAdminAlert';\n\ninterface InsightsAdminAlertProps {\n hasAnalytics: boolean;\n analyticsUrl: string;\n video?: VideoTypes;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function InsightsAdminAlert(props: InsightsAdminAlertProps) {\n const [ show, setShow ] = useViewModel(\n ViewModelKeys.INSIGHTS_ADMIN_ALERT,\n true,\n { storage: StorageType.LocalStorage }\n );\n\n function onDismiss() {\n setShow(false);\n }\n\n function getAnalyticsUrl() {\n if (!props.video) return props.analyticsUrl;\n\n let videoRoute = '';\n\n if (props.video.typeId === MasterType.Interactive)\n videoRoute = `/interactives/${props.video.id}/views`;\n\n if (props.video.typeId === MasterType.Video)\n videoRoute = `/videos/${props.video.id}/views`;\n\n if (props.video.typeId === MasterType.Clip)\n videoRoute = `/clips/${props.video.id}/views`;\n\n return UrlHelper.safeUrlConcat(props.analyticsUrl, videoRoute);\n }\n\n if (!props.hasAnalytics || !show)\n return <></>;\n\n return (\n <div role='alert' className='d-flex justify-content-between align-items-center bg-light-blue rounded p-2 mb-4'>\n <div>\n <Text namespace={namespace} phrase='adminAlert' />\n <a className='text-info' href={getAnalyticsUrl()} target='_blank'>\n <Text namespace={namespace} phrase='analytics' />\n </a>.\n </div>\n <IconButton svgName={cvSvgLibrary.Close} className='text-blue' onClick={onDismiss} />\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"shareAvatar\":\"dW1Zw\",\"shareAvatarTitle\":\"WfiUS\"};","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { ShareAvatar } from 'libs/shared/apps/share-v2/components/share-avatar/ShareAvatar';\nimport { ShareStatusIndicator } from 'libs/shared/apps/share-v2/components/share-status-indicator/ShareStatusIndicator';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { ShareLinkHelper } from 'libs/shared/apps/share-v2/utils/ShareLinkHelper';\nimport { SharableEntity } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { BaseObject, YearGroup } from 'libs/shared/interfaces';\n\nimport styles from './share-info.scss';\n\ninterface ShareInfoProps {\n sharedObject: SharableEntity;\n share: Share;\n entity: BaseObject;\n yearGroups: YearGroup[];\n className?: string;\n classroomName?: string;\n markingRequired?: boolean;\n hasData: boolean;\n}\n\nexport function ShareInfo(props: ShareInfoProps): JSX.Element {\n if (!props.sharedObject)\n return <></>;\n\n const hasExpired = ShareHelper.hasShareExpired(props.share);\n const { text: privacyText } = ShareLinkHelper.getPrivateIconAndText({\n privacy: props.share.privacy,\n entityTypeId: props.sharedObject.typeId,\n hasStudentExp: false,\n entity: props.entity,\n yearGroups: props.yearGroups\n });\n\n return (\n <div className={classNames('d-flex flex-row align-items-center gap-1', props.className)}>\n <ShareStatusIndicator\n share={props.share}\n markingRequired={props.markingRequired}\n className='cursor-default'\n hasData={props.hasData}\n />\n <ShareAvatar\n className={classNames('ps-2 me-1', styles.shareAvatar)}\n titleClassName={classNames('text-truncate', styles.shareAvatarTitle)}\n privacy={props.share.privacy}\n type={props.share.type}\n classroomName={props.classroomName}\n openClassroomName={props.share.options?.openClassroomName}\n hideSubtitle\n svgSize={SvgContainerSize.Small}\n />\n {!hasExpired && !!privacyText &&\n <div className='d-flex align-items-center gap-2'>\n <span className='d-inline-block'>•</span>\n <p className='mb-0'>{privacyText}</p>\n </div>\n }\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"withDivider\":\"ZSzT3\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { DateRangeQueryParams } from 'libs/shared/apps/analytics/interfaces/DateRangeQueryParams';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { ActionsDropdown } from 'libs/shared/components/actions/ActionsDropdown';\nimport { Breadcrumb, Breadcrumbs, PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { PillTab, PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ToggleSwitch } from 'libs/shared/components/toggle-switch/ToggleSwitch';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { Classroom, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { AnalyticsRouteHelper } from 'libs/shared/utils/AnalyticsRouteHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useClassroomExperience } from 'shared/hooks/useClassroomExperience';\nimport { getEditShareAppLink, getShareOptionsAppLink } from 'shared/utils/ObjectAppLinkHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { InsightsAdminAlert } from 'apps/my-shares/components/insights-admin-alert/InsightsAdminAlert';\nimport { ShareInfo } from 'apps/my-shares/components/share-info/ShareInfo';\nimport { getShareObjectActions } from 'apps/my-shares/views/my-shares/MySharesViewUtils';\n\nimport styles from './insights-header.scss';\n\nconst namespace = 'insights.header';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface AnonymiseNamesToggleProps {\n anonymiseUsers: boolean;\n toggleAnonymiseUsers: () => void;\n}\n\nfunction AnonymiseNamesToggle(props: AnonymiseNamesToggleProps) {\n return (\n <div>\n <label htmlFor='anonymiseNames' className='mb-0 pe-3'><Text namespace={namespace} phrase='anonymiseNames' /></label>\n <ToggleSwitch id='anonymiseNames' on={props.anonymiseUsers} onClick={props.toggleAnonymiseUsers} />\n </div>\n );\n}\n\nfunction HideStaffToggle(): JSX.Element {\n const [ hideStaffResults, setHideStaffResults ] = useViewModel<boolean>(ViewModelKeys.HIDE_STAFF_RESULTS, false);\n\n return (\n <span\n onClick={event => {\n event.stopPropagation();\n setHideStaffResults(!hideStaffResults);\n }}\n >\n <SvgContainer svgName={cvSvgLibrary.Staff} className='d-inline-block svg-container me-2 align-middle' />\n <span className='d-inline-block align-middle'>\n <span className='me-3'>\n {getPhrase('hideStaff')}\n </span>\n <ToggleSwitch on={hideStaffResults} onClick={() => {}} />\n </span>\n </span>\n );\n}\n\ninterface DemoTooltipProps extends React.PropsWithChildren {\n isDemo: boolean;\n}\n\nfunction DemoTooltip(props: DemoTooltipProps) {\n return (\n <Tooltip\n id='audienceFilter'\n title={getPhrase('demoOnly')}\n spanHack={props.isDemo}\n >\n <div className={props.isDemo ? 'pointer-events-none' : ''}>\n {props.children}\n </div>\n </Tooltip>\n );\n}\n\ninterface InsightsHeaderProps {\n video: VideoTypes;\n hasClassrooms?: boolean;\n dateRangeAppLinkParams?: DateRangeQueryParams;\n tabs: PillTab[]\n isDemo?: boolean;\n analyticsWebUrl?: string;\n hasAnalytics?: boolean;\n share: Share;\n yearGroups: YearGroup[];\n classroom?: Classroom;\n markingRequired?: boolean;\n hasData: boolean;\n}\n\nexport function InsightsHeader(props: InsightsHeaderProps) {\n const [ anonymiseUsers, setAnonymiseUsers ] = useViewModel<boolean>(\n SharedViewModelKeys.ANONYMISE_USERS,\n false,\n { storage: StorageType.LocalStorage }\n );\n\n const { isPlugin } = usePluginHelper();\n const { hasPermissions } = usePermissions();\n const { experience } = useClassroomExperience();\n\n const canViewSchoolAnalytics =\n hasPermissions(PermissionName.ViewAnalyticsProduct) &&\n hasPermissions(PermissionName.ViewCustomerAnalytics);\n\n const shareOptionsAppLink = getShareOptionsAppLink(props.share);\n const editShareAppLink = getEditShareAppLink(props.share, 'insights');\n\n function getRootBreadcrumb(): Breadcrumb {\n let breadcrumb: Breadcrumb;\n\n if (props.share.type === ShareType.Classroom) {\n breadcrumb = {\n name: getPhrase('classrooms'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.HOME\n }\n };\n } else if (props.share.type === ShareType.Open) {\n breadcrumb = {\n name: getPhrase('openClassrooms'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.OPEN_CLASSROOMS\n }\n };\n } else {\n breadcrumb = {\n name: getPhrase('shares'),\n appLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.HOME\n }\n };\n }\n\n if (experience === 'minimal') {\n breadcrumb = {\n ...breadcrumb,\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.HOME\n }\n };\n }\n\n return breadcrumb;\n }\n\n function getBreadcrumbs(): Breadcrumb[] {\n if (!props.video || !props.share) return [];\n\n const breadcrumbs: Breadcrumb[] = [getRootBreadcrumb()];\n\n if (\n props.share.type === ShareType.Classroom &&\n props.classroom\n ) {\n breadcrumbs.push({\n name: props.classroom.name,\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.CLASSROOM_HOME,\n args: [props.classroom.id]\n }\n });\n }\n\n breadcrumbs.push({\n name: props.video.name,\n active: true\n });\n\n return breadcrumbs;\n }\n\n function getActions() {\n const actions: ActionOptions[] = [];\n\n if (props.video?.typeId === MasterType.Interactive) {\n actions.push({\n label: () => <HideStaffToggle />\n });\n\n actions.push({\n label: getPhrase('generateReport'),\n svgName: cvSvgLibrary.Print,\n appLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_GENERATE_REPORT,\n args: [props.video.id]\n }\n });\n }\n\n if (canViewSchoolAnalytics) {\n actions.push({\n label: getPhrase('viewInAnalytics'),\n svgName: cvSvgLibrary.Analytics,\n href: AnalyticsRouteHelper.getObjectUrl(props.analyticsWebUrl, props.video, true),\n openInNewTab: true\n });\n }\n\n\n return [ ...actions, ...getShareObjectActions({\n share: props.share,\n sharedObject: props.video,\n isPlugin,\n hideShareOptionsActions: true\n }) ];\n }\n\n function getVideoEntityPhrase() {\n if (props.video.typeId === MasterType.Interactive) return 'viewInteractive';\n if (props.video.typeId === MasterType.Clip) return 'viewClip';\n\n return 'viewVideo';\n }\n\n return (\n <div>\n <InsightsAdminAlert\n analyticsUrl={props.analyticsWebUrl}\n hasAnalytics={props.hasAnalytics}\n video={props.video}\n />\n <section className='mb-4'>\n <div className='d-flex justify-content-between mb-3'>\n <div className='me-2'>\n {props.video && (\n <>\n <h1 className='mb-0 d-inline me-2'>{props.video.name}</h1>\n {!props.isDemo &&\n <Tooltip title={getPhrase(getVideoEntityPhrase())} type='text' spanHack spanHackClassName='d-inline-block align-text-bottom'>\n <IconButton\n svgName={cvSvgLibrary.NewWindow}\n appLink={VideoAppLinkHelper.getAppLink(props.video)}\n svgSize={SvgContainerSize.Large}\n className='d-inline-block'\n customSize\n />\n </Tooltip>\n }\n </>\n )}\n {!props.video && <h1 className='partial-loading-background' style={{ width: '20rem' }}> </h1>}\n </div>\n \n <div className='d-flex gap-2'>\n {!isPlugin && shareOptionsAppLink &&\n <DemoTooltip isDemo={props.isDemo}>\n <IconButton svgName={cvSvgLibrary.Share} className='btn btn-outline-dark' appLink={shareOptionsAppLink}>\n <Text namespace={namespace} phrase={props.share.type === ShareType.Link ? 'share' : 'shareOptions'} />\n </IconButton>\n </DemoTooltip>\n }\n {!isPlugin && editShareAppLink && props.video?.typeId === MasterType.Interactive &&\n <DemoTooltip isDemo={props.isDemo}>\n <IconButton svgName={cvSvgLibrary.Edit} className='btn btn-outline-dark' appLink={editShareAppLink}>\n <Text namespace={namespace} phrase='editSettings' />\n </IconButton>\n </DemoTooltip>\n }\n <DemoTooltip isDemo={props.isDemo}>\n <ActionsDropdown\n dropdownToggleClassName='btn btn-outline-dark'\n actions={getActions()}\n />\n </DemoTooltip>\n </div>\n </div>\n \n <div className='d-flex justify-content-between mb-3'>\n {props.video\n ? <Breadcrumbs breadcrumbs={getBreadcrumbs()} />\n : <PartialBreadcrumbs />\n }\n </div>\n <div className={classNames('d-flex flex-row align-items-center mb-3', styles.withDivider)}>\n <ShareInfo\n sharedObject={props.video}\n share={props.share}\n entity={props.video}\n yearGroups={props.yearGroups}\n classroomName={props.classroom?.name}\n markingRequired={props.markingRequired}\n hasData={props.hasData}\n />\n </div>\n <div className='d-flex align-items-center justify-content-between mb-4'>\n <PillTabSelector tabs={props.tabs} />\n <div>\n {props.hasData && (\n <AnonymiseNamesToggle\n anonymiseUsers={anonymiseUsers}\n toggleAnonymiseUsers={() => setAnonymiseUsers(!anonymiseUsers)}\n />\n )}\n </div>\n </div>\n </section>\n </div>\n );\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { getInsightsHeatmapAppLink, getInsightsOverviewAppLink, getInsightsQuestionsAppLink, getInsightsStudentsAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nconst namespace = 'shared.insightsUtils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport type InsightsTabs = 'insights' | 'heatmap' | 'results' | 'questions';\n\nexport function getInsightsVideoTabs(share: Share, active: InsightsTabs, params?: HashObject) {\n return [\n {\n name: getPhrase('insights'),\n active: active === 'insights',\n appLink: getInsightsOverviewAppLink(share, params)\n },\n {\n name: getPhrase('heatmap'),\n active: active === 'heatmap',\n appLink: getInsightsHeatmapAppLink(share, params)\n }\n ];\n}\n\nexport function getInsightsInteractiveTabs(share: Share, active: InsightsTabs) {\n return [\n {\n name: getPhrase('insights'),\n active: active === 'insights',\n appLink: getInsightsOverviewAppLink(share)\n },\n {\n name: getPhrase('results'),\n active: active === 'results',\n appLink: getInsightsStudentsAppLink(share)\n },\n {\n name: getPhrase('questions'),\n active: active === 'questions',\n appLink: getInsightsQuestionsAppLink(share)\n },\n {\n name: getPhrase('heatmap'),\n active: active === 'heatmap',\n appLink: getInsightsHeatmapAppLink(share)\n }\n ];\n}\n\nexport function getInsightsDemoInteractiveTabs(id: string, active: InsightsTabs, params: HashObject, type?: ShareType) {\n if (type === ShareType.Open) {\n return [\n {\n name: getPhrase('insights'),\n active: active === 'insights',\n appLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_OPEN_CLASSROOM_DEMO,\n args: [id],\n params\n }\n },\n {\n name: getPhrase('results'),\n active: active === 'results',\n appLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_STUDENTS_OPEN_CLASSROOM_DEMO,\n args: [id],\n params\n }\n },\n {\n name: getPhrase('questions'),\n active: active === 'questions',\n appLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_QUESTIONS_OPEN_CLASSROOM_DEMO,\n args: [id],\n params\n }\n },\n {\n name: getPhrase('heatmap'),\n active: active === 'heatmap',\n appLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_HEATMAP_OPEN_CLASSROOM_DEMO,\n args: [id],\n params\n }\n }\n ];\n }\n\n return [\n {\n name: getPhrase('insights'),\n active: active === 'insights',\n appLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_DEMO,\n args: [id],\n params\n }\n },\n {\n name: getPhrase('results'),\n active: active === 'results',\n appLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_STUDENTS_DEMO,\n args: [id],\n params\n }\n },\n {\n name: getPhrase('questions'),\n active: active === 'questions',\n appLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_QUESTIONS_DEMO,\n args: [id],\n params\n }\n },\n {\n name: getPhrase('heatmap'),\n active: active === 'heatmap',\n appLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_HEATMAP_DEMO,\n args: [id],\n params\n }\n }\n ];\n}","// extracted by mini-css-extract-plugin\nexport default {\"circleContainer\":\"p8Vgz\",\"backgroundCircle\":\"asGGE\",\"circleSuccess\":\"PXLNj\",\"circleWarning\":\"ZckRN\",\"circleDanger\":\"slBRg\",\"lgCircleContainer\":\"N8KCI\",\"xsCircleContainer\":\"RPqZ2\",\"pendingCircle\":\"DKrcq\",\"centredPercentageText\":\"tpmLR\"};","// extracted by mini-css-extract-plugin\nexport default {\"pillTabSelector\":\"Hdi6o\",\"tab\":\"RvNxr\",\"minWidth\":\"GHSz9\",\"radiusSmall\":\"VhJJa\",\"tabLink\":\"WFyvo\"};"],"names":["getPhrase","anonymiseUserName","user","shouldAnonymise","userId","id","sessionId","seed","guid","hash","i","length","charCodeAt","Math","abs","guidToSeed","floor","Date","getMinutes","dictionaries","separator","style","deleted","icons","iconColours","shareTypeTitlePhraseMap","ShareAvatar","props","title","type","classroomName","additionalTitleText","openClassroomName","getTitle","className","svgName","variant","textVariant","svgWrapperClassName","svgSize","S","titleClassName","hideSubtitle","subtitleText","privacy","studentCount","classroomGroupCount","smartCount","getClassroomSubtitle","includes","getLinkSubtitle","getSubtitle","SharePrivacy","ShareLinkHelper","getPrivateIconAndText","options","entityTypeId","hasStudentExp","entity","yearGroups","icon","text","Array","isArray","getRespectRatingText","getIconAndText","linkExpireDate","isPasswordProtected","status","isToday","dayDifference","days","video","restriction","_restrictions","value","yearGroup","maxYearGroup","minAllowedYearGroup","rating","name","getShareLinkAccessType","isTvContent","isClickViewContent","canManageAccess","PercentageIndicatorLayout","ProgressCircle","ref","circle","radius","r","baseVal","circumference","PI","offset","percentage","strokeDasharray","strokeDashoffset","toString","size","scoreThresholds","PercentageIndicator","percentageToFixed","layout","LabelInside","label","customLabel","LabelOnly","LabelBefore","defaultProps","CircleOnly","ProgressCircleSize","CIRCLE_STROKE_WIDTH","CIRCLE_STROKE_WIDTH_LG","ProgressCircleSizeMap","ExtraSmall","Small","Large","getCircleRadius","width","strokeWidth","getCircleClassName","HIGH","MODERATE","getColouredLabelClassName","getCircleContainerClassName","isPending","getPercentageToFixed","toFixed","getFormattedPercentage","round","TabContents","tab","count","data","PillTabSelector","containerRef","borderRadius","listClassName","tabs","map","index","active","key","appLink","analyticsData","analyticsOptions","onClick","onSelect","onSelectTab","ScoreThresholdDefaults","ScoreThresholdInsights","useLockContentWidth","namespace","InsightsAdminAlert","storage","show","setShow","hasAnalytics","role","phrase","href","analyticsUrl","videoRoute","typeId","getAnalyticsUrl","target","ShareInfo","sharedObject","hasExpired","ShareHelper","share","privacyText","ShareStatusIndicator","markingRequired","hasData","SvgContainer","LanguageService","AnonymiseNamesToggle","htmlFor","Text","ToggleSwitch","on","anonymiseUsers","toggleAnonymiseUsers","HideStaffToggle","hideStaffResults","setHideStaffResults","event","stopPropagation","DemoTooltip","Tooltip","spanHack","isDemo","children","InsightsHeader","SharedViewModelKeys","setAnonymiseUsers","isPlugin","usePluginHelper","hasPermissions","usePermissions","experience","useClassroomExperience","canViewSchoolAnalytics","PermissionName","shareOptionsAppLink","editShareAppLink","analyticsWebUrl","MasterType","spanHackClassName","IconButton","VideoAppLinkHelper","customSize","ShareType","ActionsDropdown","dropdownToggleClassName","actions","push","application","action","args","AnalyticsRouteHelper","openInNewTab","hideShareOptionsActions","getActions","Breadcrumbs","breadcrumbs","breadcrumb","classroom","getBreadcrumbs","getInsightsVideoTabs","params","getInsightsInteractiveTabs","getInsightsDemoInteractiveTabs"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1199],{93479:(e,t,n)=>{n.d(t,{I:()=>i});var a=n(99940);function r(e,t,n){if(!t)return e;var a="".concat(e,":").concat(t.start,":").concat(t.end),r=Array.isArray(t.userId)?t.userId.sort().join(":"):t.userId,l=Array.isArray(t.groupId)?t.groupId.sort().join(":"):t.groupId,i=Array.isArray(t.customerId)?t.customerId.sort().join(":"):t.customerId;return r&&(a+=":".concat(r)),l&&(a+=":".concat(l)),i&&(a+=":".concat(i)),n&&(a+=":".concat(n)),a}function l(e,t,n){return{currentUserId:e.id,currentCustomerId:e.customerId,dateRange:t?{start:t.start,end:t.end}:void 0,userIds:null==t?void 0:t.userId,classroomsAndGroups:null==t?void 0:t.groupId,shareId:n}}var i={interactiveResultSet:function(e,t,n,i,c,o,s,m){return{url:c?"/api/domain/v3/analytics/interactives/".concat(e,"/metadata/").concat(t):"/api/domain/v2/analytics/interactives/".concat(e,"/metadata/").concat(t),key:r("interactive:result:set:".concat(e,":").concat(t,":").concat(c),i),data:l(n,i,c),type:a.k.POST,normalize:!1,success:o,error:s,always:m}},mark:function(e,t,n,r,l,i,c){return{url:"/api/domain/v1/analytics/answers/".concat(n),key:"mark:answer:".concat(n,":").concat(r.resultId),type:a.k.PUT,data:r,normalize:!1,invalidationKeys:"interactive:result:set:".concat(e,":").concat(t),success:l,error:i,always:c}},pendingReviews:function(e){var t=e.interactives.map(function(e){return"".concat(e.interactiveId,":").concat(e.metadataId,":").concat(e.shareId)}).join(",");return{url:"/api/domain/v1/analytics/interactives/pending-reviews/summary",key:"interactives:pending:reviews:".concat(t),type:a.k.POST,data:e,normalize:!1}},interactiveResultsReport:function(e){return{url:"/api/domain/v3/analytics/interactives/report",key:"interactive:results:report",data:e,type:a.k.POST,normalize:!1}}}},39902:(e,t,n)=>{n.d(t,{FN:()=>p,SW:()=>f,fh:()=>v});var a=n(32735),r=n(20354),l=n(75896);function i(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)||c(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(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,a=Array(t);n<t;n++)a[n]=e[n];return a}function s(e){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s(e)}function m(e,t,n){return(t=function(e){var t=function(e){if("object"!=s(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=s(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==s(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var u=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]])}return n},d=50;function v(e,t){var n=l.m.chunk(e,d).map(function(e){return t(l.m.uniq(e))}),a=r.a.useBasicFetchAll(n),i=l.m.flatten(a.data),c=a.data.length?i.reduce(function(e,t){return Object.assign(Object.assign({},e),m({},t.id,t))},{}):null;return{itemsArr:i,items:c,isFetching:a.isFetching,hasCompleted:a.hasCompleted}}function p(e,t,n){var r=null!=n?n:function(e){return"object"===s(e)?e.id:e},l=f({getRequest:t,_getKey:n}),i=l.fetchItems,c=u(l,["fetchItems"]);return a.useEffect(function(){(null==e?void 0:e.length)&&i(e)},[null==e?void 0:e.map(r).join(",")]),c}function f(e){var t,n,o,u,v,p=null!==(t=e._getKey)&&void 0!==t?t:function(e){return"object"===s(e)?e.id:e},f=a.useRef(new Set),y=(u=a.useState([]),v=2,function(e){if(Array.isArray(e))return e}(u)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,l,i,c=[],o=!0,s=!1;try{if(l=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;o=!1}else for(;!(o=(a=l.call(n)).done)&&(c.push(a.value),c.length!==t);o=!0);}catch(e){s=!0,r=e}finally{try{if(!o&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw r}}return c}}(u,v)||c(u,v)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),b=y[0],h=y[1],g=r.a.useBasicFetchAll(b),E=l.m.flatten(g.data),N=g.data.length?E.reduce(function(e,t){return Object.assign(Object.assign({},e),m({},p(t),t))},{}):null;return{hasFirstRequestCompleted:!!(null===(o=null===(n=g.responses)||void 0===n?void 0:n[0])||void 0===o?void 0:o.hasCompleted),itemsArr:E,items:N,isFetching:g.isFetching,fetchItems:function(t){if(null==t?void 0:t.length){var n=[];t.forEach(function(e){var t=p(e);f.current.has(t)||(n.push(e),f.current.add(t))}),n.length&&h(function(t){return[].concat(i(t),i(l.m.chunk(n,d).map(e.getRequest)))})}}}}},55219:(e,t,n)=>{n.d(t,{g:()=>j,F:()=>x});var a=n(32735),r=n(65858),l=n(9806),i=n(31453),c=n(64249),o=n(2510),s=n(15611),m=n(83345),u=n(62335),d=n(26339),v=n(4594),p=n(31908),f="shared.sharedObjectTitle";function y(e){var t,n,l,y=e.sharedObject,b=e.titleClassName,h=e.subTextClassName,g=e.share,E=function(){switch(y.typeId){case v.E.Series:return"series";case v.E.Playlist:return"playlist"}}(),N=null===(t=e.getObjectAppLink)||void 0===t?void 0:t.call(e,y);return g.type===o.y.Open&&g.options.openClassroomName?a.createElement("span",{className:(0,i.A)("clamp-2",b)},g.options.openClassroomName):y.name?p.M.isVideoType(y)&&!(null===(n=p.M.getCanBeConsumed(y))||void 0===n?void 0:n.canNavigate)?a.createElement("span",{className:(0,i.A)("clamp-2",b)},y.name):a.createElement("div",null,p.M.isVideoType(y)&&a.createElement(d.$,{type:"series",video:y,appLink:"series"in y&&y.series?null===(l=e.getObjectAppLink)||void 0===l?void 0:l.call(e,y.series):null,analyticsOptions:{location:r.LZ.Insights},className:"d-inline clamp-1 ".concat(null!=h?h:"")}),E&&a.createElement(u.m,null,a.createElement(m.x,{namespace:f,phrase:E})),N?a.createElement(s.F,{appLink:N,className:"clamp-1",analyticsData:{id:y.id,name:y.name},analyticsOptions:{entity:c.I.getAnalyticsEntity(y.type),actionType:r.Vw.Click,location:r.LZ.MyShares}},a.createElement("span",{className:"clamp-2 ".concat(null!=b?b:"")},y.name)):a.createElement("span",{className:"clamp-2 ".concat(null!=b?b:"")},y.name)):a.createElement(m.x,{namespace:f,phrase:"videoUnavailable"})}var b=n(41889),h=n(76306),g=n(83914),E=n(54610),N=n(35223),S=n(86099);const I={thumbnailContainer:"XNQc8",tableRow:"R3dYa",viewCta:"ssCq6"};var w="myShares.tableRow";function j(e){return a.createElement("div",{className:"d-flex"},a.createElement("div",{className:"col-auto ".concat(I.thumbnailContainer)},a.createElement("p",{className:"fw-semibold mb-2"},e.heading)),a.createElement("div",{className:"".concat(e.isFirst?"d-flex":"d-none"," col align-items-center")},a.createElement("div",{className:"col-10 col-md-4"}),a.createElement("div",{className:"d-none d-md-flex col-6"},a.createElement("div",{className:"col-4"},a.createElement("p",{className:"fw-semibold mb-2"},a.createElement(m.x,{namespace:w,phrase:"viewsHeading"}))),a.createElement("div",{className:"col-3"},a.createElement("p",{className:"fw-semibold mb-2"},a.createElement(m.x,{namespace:w,phrase:"viewedByHeading"}))),a.createElement("div",{className:"col-5"},a.createElement("p",{className:"fw-semibold mb-2"},a.createElement(m.x,{namespace:w,phrase:"statusHeading"})))),a.createElement("div",{className:"col-2"})))}function x(e){var t,n,i,c=e.shareData,o=c.sharedObject,u=o.typeId===v.E.Playlist||o.typeId===v.E.Series,d=null!==(n=null===(t=e.appLink)||void 0===t?void 0:t.call(e,c.share))&&void 0!==n?n:(0,S.pY)(c.share);return a.createElement("div",{className:"position-relative hover-bg-light-blue ".concat(I.tableRow," ").concat(null!==(i=e.className)&&void 0!==i?i:"")},a.createElement(s.F,{appLink:d,className:"p-2 cursor-pointer d-flex text-decoration-none"},a.createElement("div",{className:"col-auto ".concat(I.thumbnailContainer)},a.createElement(l.k,{object:o,showVideoMetadata:!0,locationContext:r.LZ.MyShares,imageOptions:{size:E.h2.Medium},showCollectionMask:!1,showVideoCount:!0,onlyCount:!0})),a.createElement("div",{className:"col d-flex align-items-center"},a.createElement("div",{className:"px-3 col-10 col-md-4"},a.createElement(y,{share:c.share,sharedObject:c.sharedObject})),a.createElement("div",{className:"d-none d-md-flex col-6"},a.createElement("div",{className:"d-flex align-items-center col-4"},u?a.createElement("p",{className:"mb-0"},"-"):a.createElement("p",{className:"mb-0"},a.createElement(m.x,{namespace:w,phrase:"views",options:{smartCount:c.share.viewCount}}))),a.createElement("div",{className:"d-flex align-items-center col-3"},u?a.createElement("p",{className:"mb-0"},"-"):a.createElement("div",{className:"d-flex align-items-center"},a.createElement(g.x,{svgName:N.vn.User,size:g.S.Standard,className:"me-2 svg-container"}),a.createElement("p",{className:"mb-0"},c.share.accessCount))),a.createElement("div",{className:"d-flex align-items-center col-5"},a.createElement(b.B,{className:"py-2",share:c.share,markingRequired:c.pendingReview>0,hasData:c.share.accessCount>0}))))),a.createElement("div",{className:"position-absolute end-0 top-0 bottom-0 d-flex align-items-center pe-2"},a.createElement(s.F,{appLink:d,className:"me-4 text-info d-none ".concat(I.viewCta)},a.createElement(m.x,{namespace:w,phrase:"viewCta"})),a.createElement(h.m,{dropdownToggleSvgSize:g.S.Standard,actions:e.getObjectActions(c),dropdownToggleClassName:"btn btn-link"})))}},5056:(e,t,n)=>{n.d(t,{R:()=>f});var a=n(32735),r=n(23481),l=n(75896),i=n(110),c=n(31754),o=n(2510),s=n(4594);function m(e){return m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},m(e)}function u(e,t,n){return(t=function(e){var t=function(e){if("object"!=m(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=m(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==m(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var d=r.T.encloseNamespace("myShares.mySharesTable");function v(e){var t;if(e.type===o.y.Link||!(null===(t=null==e?void 0:e.recipients)||void 0===t?void 0:t.length))return e.dateShared||e.dateCreated;var n=e.recipients.map(function(e){return e.dateCreated});return n.length?(n.sort(function(e,t){return i.O.isSame(e,t)?0:i.O.isAfter(e,t)?1:-2}),l.m.last(n)):""}var p=n(55219);function f(e){var t,n,r,l,i,m,f,y=(t=e.sentShares,n=e.sharedObjects,r=e.shareRecipients,l=!!e.groupByDateShared,i=e.interactivesPendingReview,m=[],f=null==i?void 0:i.reduce(function(e,t){return Object.assign(u({},t.interactiveId,t),e)},{}),t.forEach(function(e){var t,a=null==n?void 0:n[e.objectId],l=null;if(e.type===o.y.Classroom&&(l=[],null===(t=e.recipients)||void 0===t||t.forEach(function(e){var t=null==r?void 0:r[e.recipientId];t&&l.push(t)})),a){var i=a.typeId===s.E.Interactive&&(null==f?void 0:f[a.interactiveId]);m.push({share:e,sharedObject:a,shareRecipients:l,dateShared:v(e),pendingReview:null==i?void 0:i.pendingReviewCount,privacy:e.privacy})}}),l?c.x.groupByDateShared(m):u({},d("title"),m));return a.createElement(a.Fragment,null,Object.keys(y).map(function(t,n){return a.createElement("div",{key:n},a.createElement(p.g,{heading:t,isFirst:!e.hasDemoInsights&&0===n}),a.createElement("div",{className:"d-flex flex-column mb-4"},y[t].map(function(t,n){return a.createElement(p.F,{key:n,shareData:t,getObjectActions:e.getObjectActions,breakpoints:e.breakpoints,imageCdnUrl:e.imageCdnUrl,yearGroups:e.yearGroups})})))}))}},67467:(e,t,n)=>{n.d(t,{o:()=>m});var a=n(32735),r=n(23481),l=n(97958),i=n(99742),c=n(14070),o=n(97291),s=r.T.encloseNamespace("myShares.mySharesTableEmptyState");function m(){return a.createElement(l.u,null,a.createElement(l.u.Image,{src:i.W.EmptyStates.Share.SHARED_BY_ME,size:"small"}),a.createElement(l.u.Heading,null,s("heading")),a.createElement(l.u.Info,null,s("info")),a.createElement(l.u.Cta,{appLink:{application:o.O.DASHBOARD,action:c.e.Dashboard.HOME},text:s("cta")}))}},28001:(e,t,n)=>{n.d(t,{L:()=>c});var a=n(32735);const r={heading:"iWHol",thumbnailContainer:"zrcDh"};function l(e){return a.createElement("div",{className:"d-flex"},a.createElement("div",{className:"col-auto ".concat(r.thumbnailContainer)},a.createElement("div",{className:"partial-loading-background mb-2"}," ")),a.createElement("div",{className:"".concat(e.isFirst?"d-flex":"d-none"," col align-items-center")},a.createElement("div",{className:"col-10 col-md-4"}),a.createElement("div",{className:"d-none d-md-flex col-6"},a.createElement("div",{className:"col-4"},a.createElement("div",{className:"partial-loading-background mb-2 ".concat(r.heading)}," ")),a.createElement("div",{className:"col-3"},a.createElement("div",{className:"partial-loading-background mb-2 ".concat(r.heading)}," ")),a.createElement("div",{className:"col-5"},a.createElement("div",{className:"partial-loading-background mb-2 ".concat(r.heading)}," "))),a.createElement("div",{className:"col-2"})))}function i(){return a.createElement("div",{className:"p-2 d-flex"},a.createElement("div",{className:"col-auto ".concat(r.thumbnailContainer)},a.createElement("div",{className:"partial-loading-background rounded ratio ratio-16x9"})),a.createElement("div",{className:"col d-flex align-items-center"},a.createElement("div",{className:"px-3 col-10 col-md-4"},a.createElement("div",{className:"partial-loading-background w-75"}," ")),a.createElement("div",{className:"d-none d-md-flex col-6"},a.createElement("div",{className:"col-4"},a.createElement("div",{className:"partial-loading-background w-50"}," ")),a.createElement("div",{className:"col-3"},a.createElement("div",{className:"partial-loading-background w-50"}," ")),a.createElement("div",{className:"col-5"},a.createElement("div",{className:"partial-loading-background w-75"}," "))),a.createElement("div",{className:"col-2 d-flex justify-content-end align-items-center"},a.createElement("div",{className:"partial-loading-background w-25"}," "))))}function c(){return a.createElement(a.Fragment,null,a.createElement("div",null,a.createElement(l,{isFirst:!0}),a.createElement("div",{className:"d-flex flex-column rounded-3 mb-4 border"},a.createElement(i,null),a.createElement(i,null),a.createElement(i,null),a.createElement(i,null))),a.createElement("div",null,a.createElement(l,null),a.createElement("div",{className:"d-flex flex-column rounded-3 mb-4 border"},a.createElement(i,null),a.createElement(i,null),a.createElement(i,null),a.createElement(i,null))),a.createElement("div",null,a.createElement(l,null),a.createElement("div",{className:"d-flex flex-column rounded-3 mb-4 border"},a.createElement(i,null),a.createElement(i,null),a.createElement(i,null),a.createElement(i,null),a.createElement(i,null),a.createElement(i,null),a.createElement(i,null),a.createElement(i,null),a.createElement(i,null),a.createElement(i,null))))}},98623:(e,t,n)=>{n.d(t,{a:()=>y});var a=n(20354),r=n(1048),l=n(93479),i=n(30439),c=n(18488),o=n(21789),s=n(39151),m=n(1666),u=n(31949),d=n(39902),v=n(60115),p=n(31908);function f(e){return f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},f(e)}function y(e){var t,n,y=e.params,b=e.interactiveInsights,h=e.shouldFetch,g=a.a.useGetFetch(),E=a.a.useBasicFetch(u.N.currentUser()),N=a.a.useBasicFetch(s.L.config()),S=a.a.useBasicFetch((null===(t=E.data)||void 0===t?void 0:t.isAuthenticated)&&m.h.yearGroups(E.data.customerId)),I=function(e){return h&&c.o.getSentShares(Object.assign({cursor:e},y))},w=function(e){return g(I(e))},j=(0,v.K)(I,w),x=j.items,O=j.hasMore,C=j.isFetching,k=j.nextCursor,F=j.hasFirstPageCompleted,A=(0,d.FN)(null==x?void 0:x.map(function(e){return e.objectId.toString()}),i.o.sharedObjectsById),R=(0,d.FN)(o.x.getFlattenedRecipients(null!=x?x:[]).map(function(e){return e.recipientId.toString()}),function(e){return i.o.getRecipientsById(e,E.data.customerId)}),P=null==x?void 0:x.reduce(function(e,t){return Object.assign(Object.assign({},e),(n={},a=t.objectId,r=t,(a=function(e){var t=function(e){if("object"!=f(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=f(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==f(t)?t:t+""}(a))in n?Object.defineProperty(n,a,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[a]=r,n));var n,a,r},{}),T=(0,d.FN)(b?r.t.values(A.items||[]):[],function(e){return l.I.pendingReviews({interactives:e.filter(p.M.isInteractive).map(function(e){var t;return{interactiveId:e.interactiveId,metadataId:e.id,shareId:null===(t=P[e.id])||void 0===t?void 0:t.shareId}}),filters:{currentCustomerId:E.data.customerId,currentUserId:E.data.id}})},function(e){return"".concat(e.id,":").concat("interactiveId"in e?e.interactiveId:"")}),L=C||A.isFetching||R.isFetching||T.isFetching||S.isFetching,B=!F||(null==x?void 0:x.length)&&!A.hasFirstRequestCompleted;return{sentShares:x,sharedObjects:A,shareRecipients:R,yearGroups:S.data,interactivesPendingReview:T,isFetching:L,showPartialLoading:B,nextCursor:k,hasMore:O,fetchNext:w,imageCdnUrl:null===(n=N.data)||void 0===n?void 0:n.imageCdnUrl}}}}]);
|
|
2
|
-
//# sourceMappingURL=1199-
|
|
2
|
+
//# sourceMappingURL=1199-01cc084886-lite.chunk.js.map
|
package/dist/scripts/{1199-da55d69853-lite.chunk.js.map → 1199-01cc084886-lite.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/1199-da55d69853-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/utils/AnalyticsRequestUtils.ts","file:///app/packages/libs/shared/src/apps/analytics/flight-requests/InteractiveResultsRequests.ts","file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/libs/shared/src/apps/share/components/shared-object-title/SharedObjectTitle.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table-row/my-shares-table-row.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table-row/MySharesTableRow.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/MySharesTableUtils.ts","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/MySharesTable.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/empty-state/MySharesTableEmptyState.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/partial-loading/partial-my-shares-table.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/partial-loading/PartialMySharesTable.tsx","file:///app/packages/projects/lite/src/shared/hooks/useSharesTable.ts"],"sourcesContent":["import { AnalyticsRequestFilter } from 'libs/shared/interfaces';\n\nexport function getAnalyticsRequestKey(baseKey: string, filter: AnalyticsRequestFilter, extra?: string): string {\n if (!filter)\n return baseKey;\n\n let key = `${baseKey}:${filter.start}:${filter.end}`;\n\n const userIdKey = Array.isArray(filter.userId) ? filter.userId.sort().join(':') : filter.userId;\n const groupIdKey = Array.isArray(filter.groupId) ? filter.groupId.sort().join(':') : filter.groupId;\n const customerIdKey = Array.isArray(filter.customerId) ? filter.customerId.sort().join(':') : filter.customerId;\n\n if (userIdKey)\n key += `:${userIdKey}`;\n\n if (groupIdKey)\n key += `:${groupIdKey}`;\n\n if (customerIdKey)\n key += `:${customerIdKey}`;\n\n if (extra)\n key += `:${extra}`;\n\n return key;\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/react/index';\n\nimport { MarkInteractiveAnswer } from 'libs/shared/apps/analytics/interfaces/MarkInteractiveAnswer';\nimport { InteractiveResultsReport } from 'libs/shared/apps/analytics/interfaces/requests/InteractiveResultsReport';\nimport { InteractivesPendingReviewsRequest } from 'libs/shared/apps/analytics/interfaces/requests/InteractivesPendingReviewsRequest';\nimport { AnalyticsRequestFilter, CurrentUser, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\ninterface InteractiveResultFilters {\n currentUserId: string;\n currentCustomerId: string;\n dateRange?: { start: string, end: string }\n userIds?: string | string[];\n classroomsAndGroups?: string | string[];\n shareId?: string;\n}\n\nfunction getInteractiveResultFilters(\n currentUser: CurrentUser,\n filter: AnalyticsRequestFilter,\n shareId?: string\n): InteractiveResultFilters {\n return {\n currentUserId: currentUser.id,\n currentCustomerId: currentUser.customerId,\n dateRange: filter ? { start: filter.start, end: filter.end } : undefined,\n userIds: filter?.userId,\n classroomsAndGroups: filter?.groupId,\n shareId: shareId\n };\n}\n\nexport const InteractiveResultsRequests = {\n /** \n * This endpoint returns data with a lot of duplicated ids,\n * e.g. student answers to the same question will have the same id.\n * Because of that, we don't normalize.\n */\n interactiveResultSet(\n interactiveId: string,\n interactiveMetadataId: string,\n currentUser: CurrentUser,\n filter?: AnalyticsRequestFilter,\n shareId?: string,\n success?: (data: InteractiveResultSet) => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: shareId ?\n `/api/domain/v3/analytics/interactives/${interactiveId}/metadata/${interactiveMetadataId}` :\n `/api/domain/v2/analytics/interactives/${interactiveId}/metadata/${interactiveMetadataId}`,\n key: getAnalyticsRequestKey(`interactive:result:set:${interactiveId}:${interactiveMetadataId}:${shareId}`, filter),\n data: getInteractiveResultFilters(currentUser, filter, shareId),\n type: HttpVerbs.POST,\n normalize: false,\n success,\n error,\n always\n };\n },\n \n /**\n * As the response from `interactiveResultSet` isn't normalised, we need to invalidate the cache\n * to update the results data.\n */\n mark(\n interactiveId: string,\n interactiveMetadataId: string,\n answerId: string,\n data: MarkInteractiveAnswer,\n success?: () => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `/api/domain/v1/analytics/answers/${answerId}`,\n key: `mark:answer:${answerId}:${data.resultId}`,\n type: HttpVerbs.PUT,\n data,\n normalize: false,\n invalidationKeys: `interactive:result:set:${interactiveId}:${interactiveMetadataId}`,\n success,\n error,\n always\n };\n },\n\n pendingReviews(data: InteractivesPendingReviewsRequest): Flight.Request {\n const key = data.interactives.map(interactive => `${interactive.interactiveId}:${interactive.metadataId}:${interactive.shareId}`).join(',');\n return {\n url: `/api/domain/v1/analytics/interactives/pending-reviews/summary`,\n key: `interactives:pending:reviews:${key}`,\n type: HttpVerbs.POST,\n data,\n normalize: false\n };\n },\n\n interactiveResultsReport(data: InteractiveResultsReport): Flight.Request {\n return {\n url: '/api/domain/v3/analytics/interactives/report',\n key: 'interactive:results:report',\n data,\n type: HttpVerbs.POST,\n normalize: false\n };\n }\n};","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst CHUNK_SIZE = 50;\n\nexport interface UseBatchFetchResult<T extends BaseObject> {\n itemsArr: T[];\n items: { [key: string]: T} | null;\n isFetching: boolean;\n hasCompleted: boolean;\n}\n\n/**\n * Used to fetch multiple items by id with Flight. Will fetch 25 items at a time firing off multiple\n * requests if there are more than 25 items.\n * This will return items as null until we have all our items. Items will be returned as an object with\n * their ids as they key for easy mapping\n * \n * @param itemIds \n * @param getRequest \n */\nexport function useBatchFetch<T extends BaseObject>(\n itemIds: string[],\n getRequest: (ids: string[]) => Flight.Request\n): UseBatchFetchResult<T> {\n const chunks = ArrayHelper.chunk<string>(itemIds, CHUNK_SIZE);\n\n const requests = chunks.map(chunk => getRequest(ArrayHelper.uniq(chunk)));\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\n\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce((acc, item) => ({ ...acc, [item.id]: item }), {})\n : null;\n\n return {\n itemsArr,\n items,\n isFetching: responses.isFetching,\n hasCompleted: responses.hasCompleted\n };\n}\n\n/**\n * When you need the useBatchFetch() behavior, but your list of objects to hydrate\n * will grow, such as on a scrolling page. useGrowingBatchFetch() will use local state\n * to determine what we've already built a request for and what items are new\n * as to not re-fetch items - Sha\n */\nexport function useGrowingBatchFetch<TResponse, TObjects = string>(\n objs: TObjects[],\n getRequest: (items: TObjects[]) => Flight.Request,\n _getKey?: (obj: TObjects) => string\n) {\n const getKey = _getKey ?? ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const { fetchItems, ...data } = useGrowingBatchFetchFunc<TResponse, TObjects>({ getRequest, _getKey });\n\n React.useEffect(() => {\n if (!objs?.length)\n return;\n\n fetchItems(objs);\n }, [objs?.map(getKey).join(',')]);\n\n return data;\n}\n\ninterface UseGrowingBatchFetchFuncOptions<TObjects> {\n getRequest: (items: TObjects[]) => Flight.Request;\n _getKey?: (obj: TObjects) => string;\n}\n\n/**\n * When you need the useGrowingBatchFetch() behaviour, but need to trigger the\n * fetch manually and update the objects - Nish \n */\nexport function useGrowingBatchFetchFunc<TResponse, TObjects = string>(\n options: UseGrowingBatchFetchFuncOptions<TObjects>\n) {\n const getKey = options._getKey ?? ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const fetchedItems = React.useRef<Set<string>>(new Set<string>());\n const [ requests, setRequests ] = React.useState<Flight.Request[]>([]);\n\n function fetchItems(objs: TObjects[]) {\n if (!objs?.length)\n return;\n\n const unfetchedItems: TObjects[] = [];\n \n objs.forEach(obj => {\n const key = getKey(obj);\n\n if (fetchedItems.current.has(key))\n return;\n\n unfetchedItems.push(obj);\n fetchedItems.current.add(key);\n });\n \n if (!unfetchedItems.length)\n return;\n \n setRequests(r => ([ ...r, ...ArrayHelper.chunk<TObjects>(unfetchedItems, CHUNK_SIZE).map(options.getRequest) ]));\n }\n\n const responses = Flight.useBasicFetchAll<TResponse[]>(requests);\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce<Record<string, TResponse>>((acc, item) => ({ ...acc, [getKey(item)]: item }), {})\n : null;\n\n return {\n hasFirstRequestCompleted: !!responses.responses?.[0]?.hasCompleted,\n itemsArr,\n items,\n isFetching: responses.isFetching,\n fetchItems\n };\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { SharableEntity, ShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BaseObject } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nconst namespace = 'shared.sharedObjectTitle';\n\ninterface SharedObjectTitleProps {\n share: Share;\n sharedObject: SharableEntity;\n getObjectAppLink?: (object: BaseObject) => Core.AppLink;\n titleClassName?: string;\n subTextClassName?: string;\n}\n\nexport function SharedObjectTitle(props: SharedObjectTitleProps) {\n const { sharedObject, titleClassName, subTextClassName, share } = props;\n const subTextPhrase = getSubTextPhrase();\n const titleAppLink = props.getObjectAppLink?.(sharedObject);\n\n if (share.type === ShareType.Open && share.options.openClassroomName) {\n return (\n <span className={classNames('clamp-2', titleClassName)}>\n {share.options.openClassroomName}\n </span>\n );\n }\n\n if (!sharedObject.name) {\n return <Text namespace={namespace} phrase='videoUnavailable' />;\n }\n\n if (VideoHelper.isVideoType(sharedObject) && !VideoHelper.getCanBeConsumed(sharedObject)?.canNavigate) {\n return (\n <span className={classNames('clamp-2', titleClassName)}>\n {sharedObject.name}\n </span>\n );\n }\n\n function getSubTextPhrase(): string {\n switch (sharedObject.typeId) {\n case MasterType.Series: return 'series';\n case MasterType.Playlist: return 'playlist';\n }\n }\n\n return (\n <div>\n {VideoHelper.isVideoType(sharedObject) && (\n <VideoSubText\n type='series'\n video={sharedObject}\n appLink={'series' in sharedObject && sharedObject.series ? props.getObjectAppLink?.(sharedObject.series) : null}\n analyticsOptions={{ location: LocationContext.Insights }}\n className={`d-inline clamp-1 ${subTextClassName ?? ''}`}\n />\n )}\n\n {subTextPhrase &&\n <TitleSubText>\n <Text namespace={namespace} phrase={subTextPhrase} />\n </TitleSubText>\n }\n\n {titleAppLink ? (\n <AppLink\n appLink={titleAppLink}\n className='clamp-1'\n analyticsData={{ id: sharedObject.id, name: sharedObject.name }}\n analyticsOptions={{\n entity: ShareViewHelper.getAnalyticsEntity(sharedObject.type),\n actionType: UserAction.Click,\n location: LocationContext.MyShares\n }}\n >\n <span className={`clamp-2 ${titleClassName ?? ''}`}>\n {sharedObject.name}\n </span>\n </AppLink>\n ) : (\n <span className={`clamp-2 ${titleClassName ?? ''}`}>\n {sharedObject.name}\n </span>\n )}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"thumbnailContainer\":\"XNQc8\",\"tableRow\":\"R3dYa\",\"viewCta\":\"ssCq6\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { SharedObjectImage } from 'libs/shared/apps/share/components/shared-object-image/SharedObjectImage';\nimport { SharedObjectTitle } from 'libs/shared/apps/share/components/shared-object-title/SharedObjectTitle';\nimport { ShareStatusIndicator } from 'libs/shared/apps/share-v2/components/share-status-indicator/ShareStatusIndicator';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { ActionsDropdown } from 'libs/shared/components/actions/ActionsDropdown';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { YearGroup } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { getInsightsOverviewAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport { MySharesTableData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\n\nimport styles from './my-shares-table-row.scss';\n\nconst namespace = 'myShares.tableRow';\n\ninterface MySharesTableHeadingProps {\n heading: string;\n isFirst: boolean;\n}\n\nexport function MySharesTableHeading(props: MySharesTableHeadingProps) {\n return (\n <div className='d-flex'>\n <div className={`col-auto ${styles.thumbnailContainer}`}>\n <p className='fw-semibold mb-2'>{props.heading}</p>\n </div>\n \n <div className={`${props.isFirst ? 'd-flex' : 'd-none'} col align-items-center`}>\n <div className='col-10 col-md-4' />\n\n <div className='d-none d-md-flex col-6'>\n <div className='col-4'>\n <p className='fw-semibold mb-2'><Text namespace={namespace} phrase='viewsHeading' /></p>\n </div>\n\n <div className='col-3'>\n <p className='fw-semibold mb-2'><Text namespace={namespace} phrase='viewedByHeading' /></p>\n </div>\n\n <div className='col-5'>\n <p className='fw-semibold mb-2'><Text namespace={namespace} phrase='statusHeading' /></p>\n </div>\n </div>\n\n <div className='col-2' />\n </div>\n </div>\n );\n}\n\ninterface MySharesTableRowProps extends React.PropsWithChildren {\n shareData: MySharesTableData;\n breakpoints?: Breakpoints;\n getObjectActions: (row: MySharesTableData) => ActionOptions[];\n yearGroups: YearGroup[];\n imageCdnUrl: string;\n className?: string;\n appLink?: (share: Share) => Core.AppLink;\n}\n\nexport function MySharesTableRow(props: MySharesTableRowProps) {\n const { shareData } = props;\n const sharedObject = shareData.sharedObject;\n const isCollection = sharedObject.typeId === MasterType.Playlist || sharedObject.typeId === MasterType.Series;\n const appLink = props.appLink?.(shareData.share) ?? getInsightsOverviewAppLink(shareData.share);\n\n function renderViewCount() {\n if (isCollection)\n return <p className='mb-0'>-</p>;\n\n return (\n <p className='mb-0'>\n <Text namespace={namespace} phrase='views' options={{ smartCount: shareData.share.viewCount }} />\n </p>\n );\n }\n\n function renderViewedBy() {\n if (isCollection)\n return <p className='mb-0'>-</p>;\n\n return (\n <div className='d-flex align-items-center'>\n <SvgContainer svgName={cvSvgLibrary.User} size={SvgContainerSize.Standard} className='me-2 svg-container' />\n <p className='mb-0'>{shareData.share.accessCount}</p>\n </div>\n );\n }\n\n return (\n <div className={`position-relative hover-bg-light-blue ${styles.tableRow} ${props.className ?? ''}`}>\n <AppLink appLink={appLink} className={`p-2 cursor-pointer d-flex text-decoration-none`}>\n <div className={`col-auto ${styles.thumbnailContainer}`}>\n <SharedObjectImage\n object={sharedObject}\n showVideoMetadata\n locationContext={LocationContext.MyShares}\n imageOptions={{ size: ImageSize.Medium }}\n showCollectionMask={false}\n showVideoCount\n onlyCount\n />\n </div>\n \n <div className='col d-flex align-items-center'>\n <div className='px-3 col-10 col-md-4'>\n <SharedObjectTitle share={shareData.share} sharedObject={shareData.sharedObject} />\n </div>\n\n <div className='d-none d-md-flex col-6'>\n <div className='d-flex align-items-center col-4'>\n {renderViewCount()}\n </div>\n\n <div className='d-flex align-items-center col-3'>\n {renderViewedBy()}\n </div>\n\n <div className='d-flex align-items-center col-5'>\n <ShareStatusIndicator\n className='py-2'\n share={shareData.share}\n markingRequired={shareData.pendingReview > 0}\n hasData={shareData.share.accessCount > 0}\n />\n </div>\n </div>\n </div>\n </AppLink>\n <div className='position-absolute end-0 top-0 bottom-0 d-flex align-items-center pe-2'>\n <AppLink appLink={appLink} className={`me-4 text-info d-none ${styles.viewCta}`}>\n <Text namespace={namespace} phrase='viewCta' />\n </AppLink>\n <ActionsDropdown\n dropdownToggleSvgSize={SvgContainerSize.Standard}\n actions={props.getObjectActions(shareData)}\n dropdownToggleClassName='btn btn-link'\n />\n </div>\n </div>\n );\n}\n","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { InteractivesPendingReviews } from 'libs/shared/apps/analytics/interfaces/response/InteractivesPendingReviewsResponse';\nimport { ShareHelper } from 'libs/shared/apps/share/utils/ShareHelper';\nimport { SharableEntity, SharableRecipient } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { SharePrivacy } from 'libs/shared/apps/share-v2/enums/SharePrivacy';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { InteractiveMetadata } from 'libs/shared/interfaces';\n\nconst namespace = 'myShares.mySharesTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getDateShared(share: Share): string {\n if (share.type === ShareType.Link || !share?.recipients?.length)\n return share.dateShared || share.dateCreated;\n\n const datesCreated = share.recipients.map(r => r.dateCreated);\n\n if (!datesCreated.length)\n return '';\n\n datesCreated.sort((date1, date2) => {\n if (DateHelper.isSame(date1, date2))\n return 0;\n\n return DateHelper.isAfter(date1, date2) ? 1 : -2;\n });\n\n return ArrayHelper.last(datesCreated);\n}\n\nexport interface MySharesTableData {\n share: Share;\n sharedObject: SharableEntity;\n dateShared: string;\n shareRecipients?: SharableRecipient[];\n pendingReview?: number;\n privacy?: SharePrivacy;\n}\n\ntype TableDataGroupings = { [date: string]: MySharesTableData[] };\n\nexport function useGetMySharesData(\n sentShares: Share[],\n sharedObjects: Record<string, SharableEntity>,\n shareRecipients: Record<string, SharableRecipient>,\n groupByDate: boolean,\n interactivesPendingReviews: InteractivesPendingReviews[]\n): TableDataGroupings {\n const tableData: MySharesTableData[] = [];\n\n const interactivesPendingReviewsMap = interactivesPendingReviews\n ?.reduce<Record<string, InteractivesPendingReviews>>(\n (map, obj) => ({ [obj.interactiveId]: obj, ...map }),\n {}\n );\n\n sentShares.forEach(s => {\n const sharedObject = sharedObjects?.[s.objectId];\n\n let recipients: SharableRecipient[] | null = null;\n\n if (s.type === ShareType.Classroom) {\n recipients = [];\n\n s.recipients?.forEach(r => {\n const recipient = shareRecipients?.[r.recipientId];\n\n if (recipient)\n recipients.push(recipient);\n });\n }\n\n // Skip if we don't have access to the shared object (e.g. if it's been deleted)\n if (sharedObject) {\n const pendingReview = sharedObject.typeId === MasterType.Interactive &&\n interactivesPendingReviewsMap?.[(sharedObject as InteractiveMetadata).interactiveId];\n\n tableData.push({\n share: s,\n sharedObject,\n shareRecipients: recipients,\n dateShared: getDateShared(s),\n pendingReview: pendingReview?.pendingReviewCount,\n privacy: s.privacy\n });\n }\n });\n\n if (!groupByDate)\n return { [getPhrase('title')]: tableData };\n\n return ShareHelper.groupByDateShared(tableData);\n}","import React from 'react';\n\nimport { InteractivesPendingReviews } from 'libs/shared/apps/analytics/interfaces/response/InteractivesPendingReviewsResponse';\nimport { SharableEntity, SharableRecipient } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { YearGroup } from 'libs/shared/interfaces';\n\nimport { MySharesTableData, useGetMySharesData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\nimport { MySharesTableHeading, MySharesTableRow } from 'apps/my-shares/components/my-shares-table-row/MySharesTableRow';\n\ninterface MySharesTableProps {\n sentShares: Share[];\n sharedObjects: Record<string, SharableEntity>;\n shareRecipients: Record<string, SharableRecipient>;\n interactivesPendingReview: InteractivesPendingReviews[];\n getObjectActions: (row: MySharesTableData) => ActionOptions[];\n groupByDateShared?: boolean;\n showStatus?: boolean;\n showViewCount?: boolean;\n dependencies?: any[];\n breakpoints?: Breakpoints;\n hasDemoInsights?: boolean;\n imageCdnUrl: string;\n yearGroups: YearGroup[];\n}\n\nexport function MySharesTable(props: MySharesTableProps): JSX.Element {\n const data = useGetMySharesData(\n props.sentShares,\n props.sharedObjects,\n props.shareRecipients,\n !!props.groupByDateShared,\n props.interactivesPendingReview\n );\n\n return (\n <>\n {Object.keys(data).map((heading, headingIdx) => (\n <div key={headingIdx}>\n <MySharesTableHeading heading={heading} isFirst={!props.hasDemoInsights && headingIdx === 0} />\n\n <div className='d-flex flex-column mb-4'>\n {data[heading].map((shareData, index) => (\n <MySharesTableRow\n key={index}\n shareData={shareData}\n getObjectActions={props.getObjectActions}\n breakpoints={props.breakpoints}\n imageCdnUrl={props.imageCdnUrl}\n yearGroups={props.yearGroups}\n />\n ))}\n </div>\n </div>\n ))}\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'myShares.mySharesTableEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function MySharesTableEmptyState(): JSX.Element {\n return (\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Share.SHARED_BY_ME} size='small' />\n <EmptyState.Heading>\n {getPhrase('heading')}\n </EmptyState.Heading>\n <EmptyState.Info>{getPhrase('info')}</EmptyState.Info>\n <EmptyState.Cta appLink={{ application: AppChannels.DASHBOARD, action: Actions.Dashboard.HOME }} text={getPhrase('cta')} />\n </EmptyState>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"heading\":\"iWHol\",\"thumbnailContainer\":\"zrcDh\"};","import React from 'react';\n\nimport styles from './partial-my-shares-table.scss';\n\ninterface PartialHeadingProps {\n isFirst?: boolean;\n}\n\nexport function PartialHeading(props: PartialHeadingProps) {\n return (\n <div className='d-flex'>\n <div className={`col-auto ${styles.thumbnailContainer}`}>\n <div className={`partial-loading-background mb-2`}> </div>\n </div>\n \n <div className={`${props.isFirst ? 'd-flex' : 'd-none'} col align-items-center`}>\n <div className='col-10 col-md-4' />\n\n <div className='d-none d-md-flex col-6'>\n <div className='col-4'>\n <div className={`partial-loading-background mb-2 ${styles.heading}`}> </div>\n </div>\n\n <div className='col-3'>\n <div className={`partial-loading-background mb-2 ${styles.heading}`}> </div>\n </div>\n\n <div className='col-5'>\n <div className={`partial-loading-background mb-2 ${styles.heading}`}> </div>\n </div>\n </div>\n\n <div className='col-2' />\n </div>\n </div>\n );\n}\n\nfunction PartialRow(): JSX.Element {\n return (\n <div className={`p-2 d-flex`}>\n <div className={`col-auto ${styles.thumbnailContainer}`}>\n <div className={`partial-loading-background rounded ratio ratio-16x9`} />\n </div>\n \n <div className='col d-flex align-items-center'>\n <div className='px-3 col-10 col-md-4'>\n <div className={`partial-loading-background w-75`}> </div>\n </div>\n\n <div className='d-none d-md-flex col-6'>\n <div className='col-4'>\n <div className={`partial-loading-background w-50`}> </div>\n </div>\n\n <div className='col-3'>\n <div className={`partial-loading-background w-50`}> </div>\n </div>\n\n <div className='col-5'>\n <div className={`partial-loading-background w-75`}> </div>\n </div>\n </div>\n\n <div className='col-2 d-flex justify-content-end align-items-center'>\n <div className={`partial-loading-background w-25`}> </div>\n </div>\n </div>\n </div>\n );\n}\n\nexport function PartialMySharesTable(): JSX.Element {\n return (\n <>\n <div>\n <PartialHeading isFirst={true} />\n\n <div className='d-flex flex-column rounded-3 mb-4 border'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n\n <div>\n <PartialHeading />\n\n <div className='d-flex flex-column rounded-3 mb-4 border'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n\n <div>\n <PartialHeading />\n\n <div className='d-flex flex-column rounded-3 mb-4 border'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n </>\n );\n}","import { Flight } from 'libs/common/react/index';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { InteractiveResultsRequests } from 'libs/shared/apps/analytics/flight-requests/InteractiveResultsRequests';\nimport { InteractivesPendingReviews } from 'libs/shared/apps/analytics/interfaces/response/InteractivesPendingReviewsResponse';\nimport { ShareRequests as ShareRequestsV1 } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { SharableRecipient } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { GetSentSharesParams, ShareRequests as ShareRequestsV2 } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { SharableEntity } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\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 { UseBatchFetchResult, useGrowingBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { BaseObject, Config, CurrentUser, YearGroup } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nexport function getBatchFetchResultAsArray(result: UseBatchFetchResult<BaseObject>): BaseObject[] {\n return result.items ? Object.values(result.items) : [];\n}\n\ninterface UseSharesTableOptions {\n params?: GetSentSharesParams;\n interactiveInsights?: boolean;\n shouldFetch: boolean;\n}\n\nexport function useSharesTable({ params, interactiveInsights, shouldFetch }: UseSharesTableOptions) {\n const fetch = Flight.useGetFetch();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n /**\n * Fetch sent shares\n */\n const getRequest = (cursor?: string) => shouldFetch && ShareRequestsV2.getSentShares({\n cursor,\n ...params\n });\n const fetchNext = (cursor?: string) => fetch(getRequest(cursor));\n const {\n items: sentShares,\n hasMore,\n isFetching: isFetchingSentShares,\n nextCursor,\n hasFirstPageCompleted\n } = useInfiniteList<Share>(getRequest, fetchNext);\n\n /**\n * Fetch shared objects\n */\n const sharedObjects = useGrowingBatchFetch<SharableEntity>(\n sentShares?.map(obj => obj.objectId.toString()),\n ShareRequestsV1.sharedObjectsById\n );\n\n /**\n * Fetch recipients\n */\n const shareRecipients = useGrowingBatchFetch<SharableRecipient>(\n ShareHelper.getFlattenedRecipients(sentShares ?? []).map(obj => obj.recipientId.toString()),\n objs => (ShareRequestsV1.getRecipientsById(objs, currentUser.data.customerId))\n );\n\n /**\n * Fetch which interactives required marking\n */\n const shareLookup = sentShares\n ?.reduce<Record<string, Share>>((prev, next: Share) => ({ ...prev, [next.objectId]: next }), {});\n const interactivesPendingReview = useGrowingBatchFetch<InteractivesPendingReviews, SharableEntity>(\n interactiveInsights ? ObjectHelper.values(sharedObjects.items || []) : [],\n objs => InteractiveResultsRequests.pendingReviews({\n interactives: objs\n .filter(VideoHelper.isInteractive)\n .map(obj => ({\n interactiveId: obj.interactiveId,\n metadataId: obj.id,\n shareId: shareLookup[obj.id]?.shareId\n })),\n filters: {\n currentCustomerId: currentUser.data.customerId,\n currentUserId: currentUser.data.id\n }\n }),\n obj => `${obj.id}:${'interactiveId' in obj ? obj.interactiveId : ''}`\n );\n \n const isFetching = isFetchingSentShares\n || sharedObjects.isFetching\n || shareRecipients.isFetching\n || interactivesPendingReview.isFetching\n || yearGroups.isFetching;\n\n const showPartialLoading = !hasFirstPageCompleted || (sentShares?.length && !sharedObjects.hasFirstRequestCompleted);\n\n return {\n sentShares,\n sharedObjects,\n shareRecipients,\n yearGroups: yearGroups.data,\n interactivesPendingReview,\n isFetching,\n showPartialLoading,\n nextCursor,\n hasMore,\n fetchNext,\n imageCdnUrl: config.data?.imageCdnUrl\n };\n}"],"names":["getAnalyticsRequestKey","baseKey","filter","extra","key","start","end","userIdKey","Array","isArray","userId","sort","join","groupIdKey","groupId","customerIdKey","customerId","getInteractiveResultFilters","currentUser","shareId","currentUserId","id","currentCustomerId","dateRange","undefined","userIds","classroomsAndGroups","InteractiveResultsRequests","interactiveResultSet","interactiveId","interactiveMetadataId","success","error","always","url","data","type","HttpVerbs","normalize","mark","answerId","resultId","invalidationKeys","pendingReviews","interactives","map","interactive","metadataId","interactiveResultsReport","CHUNK_SIZE","useBatchFetch","itemIds","getRequest","requests","chunk","responses","itemsArr","items","length","reduce","acc","item","isFetching","hasCompleted","useGrowingBatchFetch","objs","_getKey","getKey","obj","useGrowingBatchFetchFunc","fetchItems","options","fetchedItems","Set","setRequests","hasFirstRequestCompleted","unfetchedItems","forEach","current","has","push","add","r","namespace","SharedObjectTitle","props","sharedObject","titleClassName","subTextClassName","share","subTextPhrase","typeId","MasterType","getSubTextPhrase","titleAppLink","getObjectAppLink","ShareType","openClassroomName","className","name","VideoHelper","canNavigate","VideoSubText","video","appLink","series","analyticsOptions","location","TitleSubText","Text","phrase","AppLink","analyticsData","entity","ShareViewHelper","actionType","MySharesTableHeading","heading","isFirst","MySharesTableRow","shareData","isCollection","SharedObjectImage","object","showVideoMetadata","locationContext","imageOptions","size","showCollectionMask","showVideoCount","onlyCount","smartCount","viewCount","SvgContainer","svgName","S","accessCount","ShareStatusIndicator","markingRequired","pendingReview","hasData","ActionsDropdown","dropdownToggleSvgSize","actions","getObjectActions","dropdownToggleClassName","getPhrase","LanguageService","getDateShared","recipients","dateShared","dateCreated","datesCreated","date1","date2","DateHelper","ArrayHelper","MySharesTable","sentShares","sharedObjects","shareRecipients","groupByDate","interactivesPendingReviews","tableData","interactivesPendingReviewsMap","groupByDateShared","interactivesPendingReview","s","objectId","recipient","recipientId","pendingReviewCount","privacy","ShareHelper","Object","keys","headingIdx","hasDemoInsights","index","breakpoints","imageCdnUrl","yearGroups","MySharesTableEmptyState","src","application","action","text","PartialHeading","PartialRow","PartialMySharesTable","useSharesTable","params","interactiveInsights","shouldFetch","fetch","config","isAuthenticated","cursor","fetchNext","hasMore","isFetchingSentShares","nextCursor","hasFirstPageCompleted","toString","shareLookup","prev","next","I","filters","showPartialLoading"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"scripts/1199-01cc084886-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/utils/AnalyticsRequestUtils.ts","file:///app/packages/libs/shared/src/apps/analytics/flight-requests/InteractiveResultsRequests.ts","file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/libs/shared/src/apps/share/components/shared-object-title/SharedObjectTitle.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table-row/my-shares-table-row.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table-row/MySharesTableRow.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/MySharesTableUtils.ts","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/MySharesTable.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/empty-state/MySharesTableEmptyState.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/partial-loading/partial-my-shares-table.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/partial-loading/PartialMySharesTable.tsx","file:///app/packages/projects/lite/src/shared/hooks/useSharesTable.ts"],"sourcesContent":["import { AnalyticsRequestFilter } from 'libs/shared/interfaces';\n\nexport function getAnalyticsRequestKey(baseKey: string, filter: AnalyticsRequestFilter, extra?: string): string {\n if (!filter)\n return baseKey;\n\n let key = `${baseKey}:${filter.start}:${filter.end}`;\n\n const userIdKey = Array.isArray(filter.userId) ? filter.userId.sort().join(':') : filter.userId;\n const groupIdKey = Array.isArray(filter.groupId) ? filter.groupId.sort().join(':') : filter.groupId;\n const customerIdKey = Array.isArray(filter.customerId) ? filter.customerId.sort().join(':') : filter.customerId;\n\n if (userIdKey)\n key += `:${userIdKey}`;\n\n if (groupIdKey)\n key += `:${groupIdKey}`;\n\n if (customerIdKey)\n key += `:${customerIdKey}`;\n\n if (extra)\n key += `:${extra}`;\n\n return key;\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/react/index';\n\nimport { MarkInteractiveAnswer } from 'libs/shared/apps/analytics/interfaces/MarkInteractiveAnswer';\nimport { InteractiveResultsReport } from 'libs/shared/apps/analytics/interfaces/requests/InteractiveResultsReport';\nimport { InteractivesPendingReviewsRequest } from 'libs/shared/apps/analytics/interfaces/requests/InteractivesPendingReviewsRequest';\nimport { AnalyticsRequestFilter, CurrentUser, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\ninterface InteractiveResultFilters {\n currentUserId: string;\n currentCustomerId: string;\n dateRange?: { start: string, end: string }\n userIds?: string | string[];\n classroomsAndGroups?: string | string[];\n shareId?: string;\n}\n\nfunction getInteractiveResultFilters(\n currentUser: CurrentUser,\n filter: AnalyticsRequestFilter,\n shareId?: string\n): InteractiveResultFilters {\n return {\n currentUserId: currentUser.id,\n currentCustomerId: currentUser.customerId,\n dateRange: filter ? { start: filter.start, end: filter.end } : undefined,\n userIds: filter?.userId,\n classroomsAndGroups: filter?.groupId,\n shareId: shareId\n };\n}\n\nexport const InteractiveResultsRequests = {\n /** \n * This endpoint returns data with a lot of duplicated ids,\n * e.g. student answers to the same question will have the same id.\n * Because of that, we don't normalize.\n */\n interactiveResultSet(\n interactiveId: string,\n interactiveMetadataId: string,\n currentUser: CurrentUser,\n filter?: AnalyticsRequestFilter,\n shareId?: string,\n success?: (data: InteractiveResultSet) => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: shareId ?\n `/api/domain/v3/analytics/interactives/${interactiveId}/metadata/${interactiveMetadataId}` :\n `/api/domain/v2/analytics/interactives/${interactiveId}/metadata/${interactiveMetadataId}`,\n key: getAnalyticsRequestKey(`interactive:result:set:${interactiveId}:${interactiveMetadataId}:${shareId}`, filter),\n data: getInteractiveResultFilters(currentUser, filter, shareId),\n type: HttpVerbs.POST,\n normalize: false,\n success,\n error,\n always\n };\n },\n \n /**\n * As the response from `interactiveResultSet` isn't normalised, we need to invalidate the cache\n * to update the results data.\n */\n mark(\n interactiveId: string,\n interactiveMetadataId: string,\n answerId: string,\n data: MarkInteractiveAnswer,\n success?: () => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `/api/domain/v1/analytics/answers/${answerId}`,\n key: `mark:answer:${answerId}:${data.resultId}`,\n type: HttpVerbs.PUT,\n data,\n normalize: false,\n invalidationKeys: `interactive:result:set:${interactiveId}:${interactiveMetadataId}`,\n success,\n error,\n always\n };\n },\n\n pendingReviews(data: InteractivesPendingReviewsRequest): Flight.Request {\n const key = data.interactives.map(interactive => `${interactive.interactiveId}:${interactive.metadataId}:${interactive.shareId}`).join(',');\n return {\n url: `/api/domain/v1/analytics/interactives/pending-reviews/summary`,\n key: `interactives:pending:reviews:${key}`,\n type: HttpVerbs.POST,\n data,\n normalize: false\n };\n },\n\n interactiveResultsReport(data: InteractiveResultsReport): Flight.Request {\n return {\n url: '/api/domain/v3/analytics/interactives/report',\n key: 'interactive:results:report',\n data,\n type: HttpVerbs.POST,\n normalize: false\n };\n }\n};","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst CHUNK_SIZE = 50;\n\nexport interface UseBatchFetchResult<T extends BaseObject> {\n itemsArr: T[];\n items: { [key: string]: T} | null;\n isFetching: boolean;\n hasCompleted: boolean;\n}\n\n/**\n * Used to fetch multiple items by id with Flight. Will fetch 25 items at a time firing off multiple\n * requests if there are more than 25 items.\n * This will return items as null until we have all our items. Items will be returned as an object with\n * their ids as they key for easy mapping\n * \n * @param itemIds \n * @param getRequest \n */\nexport function useBatchFetch<T extends BaseObject>(\n itemIds: string[],\n getRequest: (ids: string[]) => Flight.Request\n): UseBatchFetchResult<T> {\n const chunks = ArrayHelper.chunk<string>(itemIds, CHUNK_SIZE);\n\n const requests = chunks.map(chunk => getRequest(ArrayHelper.uniq(chunk)));\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\n\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce((acc, item) => ({ ...acc, [item.id]: item }), {})\n : null;\n\n return {\n itemsArr,\n items,\n isFetching: responses.isFetching,\n hasCompleted: responses.hasCompleted\n };\n}\n\n/**\n * When you need the useBatchFetch() behavior, but your list of objects to hydrate\n * will grow, such as on a scrolling page. useGrowingBatchFetch() will use local state\n * to determine what we've already built a request for and what items are new\n * as to not re-fetch items - Sha\n */\nexport function useGrowingBatchFetch<TResponse, TObjects = string>(\n objs: TObjects[],\n getRequest: (items: TObjects[]) => Flight.Request,\n _getKey?: (obj: TObjects) => string\n) {\n const getKey = _getKey ?? ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const { fetchItems, ...data } = useGrowingBatchFetchFunc<TResponse, TObjects>({ getRequest, _getKey });\n\n React.useEffect(() => {\n if (!objs?.length)\n return;\n\n fetchItems(objs);\n }, [objs?.map(getKey).join(',')]);\n\n return data;\n}\n\ninterface UseGrowingBatchFetchFuncOptions<TObjects> {\n getRequest: (items: TObjects[]) => Flight.Request;\n _getKey?: (obj: TObjects) => string;\n}\n\n/**\n * When you need the useGrowingBatchFetch() behaviour, but need to trigger the\n * fetch manually and update the objects - Nish \n */\nexport function useGrowingBatchFetchFunc<TResponse, TObjects = string>(\n options: UseGrowingBatchFetchFuncOptions<TObjects>\n) {\n const getKey = options._getKey ?? ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const fetchedItems = React.useRef<Set<string>>(new Set<string>());\n const [ requests, setRequests ] = React.useState<Flight.Request[]>([]);\n\n function fetchItems(objs: TObjects[]) {\n if (!objs?.length)\n return;\n\n const unfetchedItems: TObjects[] = [];\n \n objs.forEach(obj => {\n const key = getKey(obj);\n\n if (fetchedItems.current.has(key))\n return;\n\n unfetchedItems.push(obj);\n fetchedItems.current.add(key);\n });\n \n if (!unfetchedItems.length)\n return;\n \n setRequests(r => ([ ...r, ...ArrayHelper.chunk<TObjects>(unfetchedItems, CHUNK_SIZE).map(options.getRequest) ]));\n }\n\n const responses = Flight.useBasicFetchAll<TResponse[]>(requests);\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce<Record<string, TResponse>>((acc, item) => ({ ...acc, [getKey(item)]: item }), {})\n : null;\n\n return {\n hasFirstRequestCompleted: !!responses.responses?.[0]?.hasCompleted,\n itemsArr,\n items,\n isFetching: responses.isFetching,\n fetchItems\n };\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { SharableEntity, ShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BaseObject } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nconst namespace = 'shared.sharedObjectTitle';\n\ninterface SharedObjectTitleProps {\n share: Share;\n sharedObject: SharableEntity;\n getObjectAppLink?: (object: BaseObject) => Core.AppLink;\n titleClassName?: string;\n subTextClassName?: string;\n}\n\nexport function SharedObjectTitle(props: SharedObjectTitleProps) {\n const { sharedObject, titleClassName, subTextClassName, share } = props;\n const subTextPhrase = getSubTextPhrase();\n const titleAppLink = props.getObjectAppLink?.(sharedObject);\n\n if (share.type === ShareType.Open && share.options.openClassroomName) {\n return (\n <span className={classNames('clamp-2', titleClassName)}>\n {share.options.openClassroomName}\n </span>\n );\n }\n\n if (!sharedObject.name) {\n return <Text namespace={namespace} phrase='videoUnavailable' />;\n }\n\n if (VideoHelper.isVideoType(sharedObject) && !VideoHelper.getCanBeConsumed(sharedObject)?.canNavigate) {\n return (\n <span className={classNames('clamp-2', titleClassName)}>\n {sharedObject.name}\n </span>\n );\n }\n\n function getSubTextPhrase(): string {\n switch (sharedObject.typeId) {\n case MasterType.Series: return 'series';\n case MasterType.Playlist: return 'playlist';\n }\n }\n\n return (\n <div>\n {VideoHelper.isVideoType(sharedObject) && (\n <VideoSubText\n type='series'\n video={sharedObject}\n appLink={'series' in sharedObject && sharedObject.series ? props.getObjectAppLink?.(sharedObject.series) : null}\n analyticsOptions={{ location: LocationContext.Insights }}\n className={`d-inline clamp-1 ${subTextClassName ?? ''}`}\n />\n )}\n\n {subTextPhrase &&\n <TitleSubText>\n <Text namespace={namespace} phrase={subTextPhrase} />\n </TitleSubText>\n }\n\n {titleAppLink ? (\n <AppLink\n appLink={titleAppLink}\n className='clamp-1'\n analyticsData={{ id: sharedObject.id, name: sharedObject.name }}\n analyticsOptions={{\n entity: ShareViewHelper.getAnalyticsEntity(sharedObject.type),\n actionType: UserAction.Click,\n location: LocationContext.MyShares\n }}\n >\n <span className={`clamp-2 ${titleClassName ?? ''}`}>\n {sharedObject.name}\n </span>\n </AppLink>\n ) : (\n <span className={`clamp-2 ${titleClassName ?? ''}`}>\n {sharedObject.name}\n </span>\n )}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"thumbnailContainer\":\"XNQc8\",\"tableRow\":\"R3dYa\",\"viewCta\":\"ssCq6\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { SharedObjectImage } from 'libs/shared/apps/share/components/shared-object-image/SharedObjectImage';\nimport { SharedObjectTitle } from 'libs/shared/apps/share/components/shared-object-title/SharedObjectTitle';\nimport { ShareStatusIndicator } from 'libs/shared/apps/share-v2/components/share-status-indicator/ShareStatusIndicator';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { ActionsDropdown } from 'libs/shared/components/actions/ActionsDropdown';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { YearGroup } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { getInsightsOverviewAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport { MySharesTableData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\n\nimport styles from './my-shares-table-row.scss';\n\nconst namespace = 'myShares.tableRow';\n\ninterface MySharesTableHeadingProps {\n heading: string;\n isFirst: boolean;\n}\n\nexport function MySharesTableHeading(props: MySharesTableHeadingProps) {\n return (\n <div className='d-flex'>\n <div className={`col-auto ${styles.thumbnailContainer}`}>\n <p className='fw-semibold mb-2'>{props.heading}</p>\n </div>\n \n <div className={`${props.isFirst ? 'd-flex' : 'd-none'} col align-items-center`}>\n <div className='col-10 col-md-4' />\n\n <div className='d-none d-md-flex col-6'>\n <div className='col-4'>\n <p className='fw-semibold mb-2'><Text namespace={namespace} phrase='viewsHeading' /></p>\n </div>\n\n <div className='col-3'>\n <p className='fw-semibold mb-2'><Text namespace={namespace} phrase='viewedByHeading' /></p>\n </div>\n\n <div className='col-5'>\n <p className='fw-semibold mb-2'><Text namespace={namespace} phrase='statusHeading' /></p>\n </div>\n </div>\n\n <div className='col-2' />\n </div>\n </div>\n );\n}\n\ninterface MySharesTableRowProps extends React.PropsWithChildren {\n shareData: MySharesTableData;\n breakpoints?: Breakpoints;\n getObjectActions: (row: MySharesTableData) => ActionOptions[];\n yearGroups: YearGroup[];\n imageCdnUrl: string;\n className?: string;\n appLink?: (share: Share) => Core.AppLink;\n}\n\nexport function MySharesTableRow(props: MySharesTableRowProps) {\n const { shareData } = props;\n const sharedObject = shareData.sharedObject;\n const isCollection = sharedObject.typeId === MasterType.Playlist || sharedObject.typeId === MasterType.Series;\n const appLink = props.appLink?.(shareData.share) ?? getInsightsOverviewAppLink(shareData.share);\n\n function renderViewCount() {\n if (isCollection)\n return <p className='mb-0'>-</p>;\n\n return (\n <p className='mb-0'>\n <Text namespace={namespace} phrase='views' options={{ smartCount: shareData.share.viewCount }} />\n </p>\n );\n }\n\n function renderViewedBy() {\n if (isCollection)\n return <p className='mb-0'>-</p>;\n\n return (\n <div className='d-flex align-items-center'>\n <SvgContainer svgName={cvSvgLibrary.User} size={SvgContainerSize.Standard} className='me-2 svg-container' />\n <p className='mb-0'>{shareData.share.accessCount}</p>\n </div>\n );\n }\n\n return (\n <div className={`position-relative hover-bg-light-blue ${styles.tableRow} ${props.className ?? ''}`}>\n <AppLink appLink={appLink} className={`p-2 cursor-pointer d-flex text-decoration-none`}>\n <div className={`col-auto ${styles.thumbnailContainer}`}>\n <SharedObjectImage\n object={sharedObject}\n showVideoMetadata\n locationContext={LocationContext.MyShares}\n imageOptions={{ size: ImageSize.Medium }}\n showCollectionMask={false}\n showVideoCount\n onlyCount\n />\n </div>\n \n <div className='col d-flex align-items-center'>\n <div className='px-3 col-10 col-md-4'>\n <SharedObjectTitle share={shareData.share} sharedObject={shareData.sharedObject} />\n </div>\n\n <div className='d-none d-md-flex col-6'>\n <div className='d-flex align-items-center col-4'>\n {renderViewCount()}\n </div>\n\n <div className='d-flex align-items-center col-3'>\n {renderViewedBy()}\n </div>\n\n <div className='d-flex align-items-center col-5'>\n <ShareStatusIndicator\n className='py-2'\n share={shareData.share}\n markingRequired={shareData.pendingReview > 0}\n hasData={shareData.share.accessCount > 0}\n />\n </div>\n </div>\n </div>\n </AppLink>\n <div className='position-absolute end-0 top-0 bottom-0 d-flex align-items-center pe-2'>\n <AppLink appLink={appLink} className={`me-4 text-info d-none ${styles.viewCta}`}>\n <Text namespace={namespace} phrase='viewCta' />\n </AppLink>\n <ActionsDropdown\n dropdownToggleSvgSize={SvgContainerSize.Standard}\n actions={props.getObjectActions(shareData)}\n dropdownToggleClassName='btn btn-link'\n />\n </div>\n </div>\n );\n}\n","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { InteractivesPendingReviews } from 'libs/shared/apps/analytics/interfaces/response/InteractivesPendingReviewsResponse';\nimport { ShareHelper } from 'libs/shared/apps/share/utils/ShareHelper';\nimport { SharableEntity, SharableRecipient } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { SharePrivacy } from 'libs/shared/apps/share-v2/enums/SharePrivacy';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { InteractiveMetadata } from 'libs/shared/interfaces';\n\nconst namespace = 'myShares.mySharesTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getDateShared(share: Share): string {\n if (share.type === ShareType.Link || !share?.recipients?.length)\n return share.dateShared || share.dateCreated;\n\n const datesCreated = share.recipients.map(r => r.dateCreated);\n\n if (!datesCreated.length)\n return '';\n\n datesCreated.sort((date1, date2) => {\n if (DateHelper.isSame(date1, date2))\n return 0;\n\n return DateHelper.isAfter(date1, date2) ? 1 : -2;\n });\n\n return ArrayHelper.last(datesCreated);\n}\n\nexport interface MySharesTableData {\n share: Share;\n sharedObject: SharableEntity;\n dateShared: string;\n shareRecipients?: SharableRecipient[];\n pendingReview?: number;\n privacy?: SharePrivacy;\n}\n\ntype TableDataGroupings = { [date: string]: MySharesTableData[] };\n\nexport function useGetMySharesData(\n sentShares: Share[],\n sharedObjects: Record<string, SharableEntity>,\n shareRecipients: Record<string, SharableRecipient>,\n groupByDate: boolean,\n interactivesPendingReviews: InteractivesPendingReviews[]\n): TableDataGroupings {\n const tableData: MySharesTableData[] = [];\n\n const interactivesPendingReviewsMap = interactivesPendingReviews\n ?.reduce<Record<string, InteractivesPendingReviews>>(\n (map, obj) => ({ [obj.interactiveId]: obj, ...map }),\n {}\n );\n\n sentShares.forEach(s => {\n const sharedObject = sharedObjects?.[s.objectId];\n\n let recipients: SharableRecipient[] | null = null;\n\n if (s.type === ShareType.Classroom) {\n recipients = [];\n\n s.recipients?.forEach(r => {\n const recipient = shareRecipients?.[r.recipientId];\n\n if (recipient)\n recipients.push(recipient);\n });\n }\n\n // Skip if we don't have access to the shared object (e.g. if it's been deleted)\n if (sharedObject) {\n const pendingReview = sharedObject.typeId === MasterType.Interactive &&\n interactivesPendingReviewsMap?.[(sharedObject as InteractiveMetadata).interactiveId];\n\n tableData.push({\n share: s,\n sharedObject,\n shareRecipients: recipients,\n dateShared: getDateShared(s),\n pendingReview: pendingReview?.pendingReviewCount,\n privacy: s.privacy\n });\n }\n });\n\n if (!groupByDate)\n return { [getPhrase('title')]: tableData };\n\n return ShareHelper.groupByDateShared(tableData);\n}","import React from 'react';\n\nimport { InteractivesPendingReviews } from 'libs/shared/apps/analytics/interfaces/response/InteractivesPendingReviewsResponse';\nimport { SharableEntity, SharableRecipient } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { YearGroup } from 'libs/shared/interfaces';\n\nimport { MySharesTableData, useGetMySharesData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\nimport { MySharesTableHeading, MySharesTableRow } from 'apps/my-shares/components/my-shares-table-row/MySharesTableRow';\n\ninterface MySharesTableProps {\n sentShares: Share[];\n sharedObjects: Record<string, SharableEntity>;\n shareRecipients: Record<string, SharableRecipient>;\n interactivesPendingReview: InteractivesPendingReviews[];\n getObjectActions: (row: MySharesTableData) => ActionOptions[];\n groupByDateShared?: boolean;\n showStatus?: boolean;\n showViewCount?: boolean;\n dependencies?: any[];\n breakpoints?: Breakpoints;\n hasDemoInsights?: boolean;\n imageCdnUrl: string;\n yearGroups: YearGroup[];\n}\n\nexport function MySharesTable(props: MySharesTableProps): JSX.Element {\n const data = useGetMySharesData(\n props.sentShares,\n props.sharedObjects,\n props.shareRecipients,\n !!props.groupByDateShared,\n props.interactivesPendingReview\n );\n\n return (\n <>\n {Object.keys(data).map((heading, headingIdx) => (\n <div key={headingIdx}>\n <MySharesTableHeading heading={heading} isFirst={!props.hasDemoInsights && headingIdx === 0} />\n\n <div className='d-flex flex-column mb-4'>\n {data[heading].map((shareData, index) => (\n <MySharesTableRow\n key={index}\n shareData={shareData}\n getObjectActions={props.getObjectActions}\n breakpoints={props.breakpoints}\n imageCdnUrl={props.imageCdnUrl}\n yearGroups={props.yearGroups}\n />\n ))}\n </div>\n </div>\n ))}\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'myShares.mySharesTableEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function MySharesTableEmptyState(): JSX.Element {\n return (\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Share.SHARED_BY_ME} size='small' />\n <EmptyState.Heading>\n {getPhrase('heading')}\n </EmptyState.Heading>\n <EmptyState.Info>{getPhrase('info')}</EmptyState.Info>\n <EmptyState.Cta appLink={{ application: AppChannels.DASHBOARD, action: Actions.Dashboard.HOME }} text={getPhrase('cta')} />\n </EmptyState>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"heading\":\"iWHol\",\"thumbnailContainer\":\"zrcDh\"};","import React from 'react';\n\nimport styles from './partial-my-shares-table.scss';\n\ninterface PartialHeadingProps {\n isFirst?: boolean;\n}\n\nexport function PartialHeading(props: PartialHeadingProps) {\n return (\n <div className='d-flex'>\n <div className={`col-auto ${styles.thumbnailContainer}`}>\n <div className={`partial-loading-background mb-2`}> </div>\n </div>\n \n <div className={`${props.isFirst ? 'd-flex' : 'd-none'} col align-items-center`}>\n <div className='col-10 col-md-4' />\n\n <div className='d-none d-md-flex col-6'>\n <div className='col-4'>\n <div className={`partial-loading-background mb-2 ${styles.heading}`}> </div>\n </div>\n\n <div className='col-3'>\n <div className={`partial-loading-background mb-2 ${styles.heading}`}> </div>\n </div>\n\n <div className='col-5'>\n <div className={`partial-loading-background mb-2 ${styles.heading}`}> </div>\n </div>\n </div>\n\n <div className='col-2' />\n </div>\n </div>\n );\n}\n\nfunction PartialRow(): JSX.Element {\n return (\n <div className={`p-2 d-flex`}>\n <div className={`col-auto ${styles.thumbnailContainer}`}>\n <div className={`partial-loading-background rounded ratio ratio-16x9`} />\n </div>\n \n <div className='col d-flex align-items-center'>\n <div className='px-3 col-10 col-md-4'>\n <div className={`partial-loading-background w-75`}> </div>\n </div>\n\n <div className='d-none d-md-flex col-6'>\n <div className='col-4'>\n <div className={`partial-loading-background w-50`}> </div>\n </div>\n\n <div className='col-3'>\n <div className={`partial-loading-background w-50`}> </div>\n </div>\n\n <div className='col-5'>\n <div className={`partial-loading-background w-75`}> </div>\n </div>\n </div>\n\n <div className='col-2 d-flex justify-content-end align-items-center'>\n <div className={`partial-loading-background w-25`}> </div>\n </div>\n </div>\n </div>\n );\n}\n\nexport function PartialMySharesTable(): JSX.Element {\n return (\n <>\n <div>\n <PartialHeading isFirst={true} />\n\n <div className='d-flex flex-column rounded-3 mb-4 border'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n\n <div>\n <PartialHeading />\n\n <div className='d-flex flex-column rounded-3 mb-4 border'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n\n <div>\n <PartialHeading />\n\n <div className='d-flex flex-column rounded-3 mb-4 border'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n </>\n );\n}","import { Flight } from 'libs/common/react/index';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { InteractiveResultsRequests } from 'libs/shared/apps/analytics/flight-requests/InteractiveResultsRequests';\nimport { InteractivesPendingReviews } from 'libs/shared/apps/analytics/interfaces/response/InteractivesPendingReviewsResponse';\nimport { ShareRequests as ShareRequestsV1 } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { SharableRecipient } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { GetSentSharesParams, ShareRequests as ShareRequestsV2 } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { SharableEntity } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\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 { UseBatchFetchResult, useGrowingBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { BaseObject, Config, CurrentUser, YearGroup } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nexport function getBatchFetchResultAsArray(result: UseBatchFetchResult<BaseObject>): BaseObject[] {\n return result.items ? Object.values(result.items) : [];\n}\n\ninterface UseSharesTableOptions {\n params?: GetSentSharesParams;\n interactiveInsights?: boolean;\n shouldFetch: boolean;\n}\n\nexport function useSharesTable({ params, interactiveInsights, shouldFetch }: UseSharesTableOptions) {\n const fetch = Flight.useGetFetch();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n /**\n * Fetch sent shares\n */\n const getRequest = (cursor?: string) => shouldFetch && ShareRequestsV2.getSentShares({\n cursor,\n ...params\n });\n const fetchNext = (cursor?: string) => fetch(getRequest(cursor));\n const {\n items: sentShares,\n hasMore,\n isFetching: isFetchingSentShares,\n nextCursor,\n hasFirstPageCompleted\n } = useInfiniteList<Share>(getRequest, fetchNext);\n\n /**\n * Fetch shared objects\n */\n const sharedObjects = useGrowingBatchFetch<SharableEntity>(\n sentShares?.map(obj => obj.objectId.toString()),\n ShareRequestsV1.sharedObjectsById\n );\n\n /**\n * Fetch recipients\n */\n const shareRecipients = useGrowingBatchFetch<SharableRecipient>(\n ShareHelper.getFlattenedRecipients(sentShares ?? []).map(obj => obj.recipientId.toString()),\n objs => (ShareRequestsV1.getRecipientsById(objs, currentUser.data.customerId))\n );\n\n /**\n * Fetch which interactives required marking\n */\n const shareLookup = sentShares\n ?.reduce<Record<string, Share>>((prev, next: Share) => ({ ...prev, [next.objectId]: next }), {});\n const interactivesPendingReview = useGrowingBatchFetch<InteractivesPendingReviews, SharableEntity>(\n interactiveInsights ? ObjectHelper.values(sharedObjects.items || []) : [],\n objs => InteractiveResultsRequests.pendingReviews({\n interactives: objs\n .filter(VideoHelper.isInteractive)\n .map(obj => ({\n interactiveId: obj.interactiveId,\n metadataId: obj.id,\n shareId: shareLookup[obj.id]?.shareId\n })),\n filters: {\n currentCustomerId: currentUser.data.customerId,\n currentUserId: currentUser.data.id\n }\n }),\n obj => `${obj.id}:${'interactiveId' in obj ? obj.interactiveId : ''}`\n );\n \n const isFetching = isFetchingSentShares\n || sharedObjects.isFetching\n || shareRecipients.isFetching\n || interactivesPendingReview.isFetching\n || yearGroups.isFetching;\n\n const showPartialLoading = !hasFirstPageCompleted || (sentShares?.length && !sharedObjects.hasFirstRequestCompleted);\n\n return {\n sentShares,\n sharedObjects,\n shareRecipients,\n yearGroups: yearGroups.data,\n interactivesPendingReview,\n isFetching,\n showPartialLoading,\n nextCursor,\n hasMore,\n fetchNext,\n imageCdnUrl: config.data?.imageCdnUrl\n };\n}"],"names":["getAnalyticsRequestKey","baseKey","filter","extra","key","start","end","userIdKey","Array","isArray","userId","sort","join","groupIdKey","groupId","customerIdKey","customerId","getInteractiveResultFilters","currentUser","shareId","currentUserId","id","currentCustomerId","dateRange","undefined","userIds","classroomsAndGroups","InteractiveResultsRequests","interactiveResultSet","interactiveId","interactiveMetadataId","success","error","always","url","data","type","HttpVerbs","normalize","mark","answerId","resultId","invalidationKeys","pendingReviews","interactives","map","interactive","metadataId","interactiveResultsReport","CHUNK_SIZE","useBatchFetch","itemIds","getRequest","requests","chunk","responses","itemsArr","items","length","reduce","acc","item","isFetching","hasCompleted","useGrowingBatchFetch","objs","_getKey","getKey","obj","useGrowingBatchFetchFunc","fetchItems","options","fetchedItems","Set","setRequests","hasFirstRequestCompleted","unfetchedItems","forEach","current","has","push","add","r","namespace","SharedObjectTitle","props","sharedObject","titleClassName","subTextClassName","share","subTextPhrase","typeId","MasterType","getSubTextPhrase","titleAppLink","getObjectAppLink","ShareType","openClassroomName","className","name","VideoHelper","canNavigate","VideoSubText","video","appLink","series","analyticsOptions","location","TitleSubText","Text","phrase","AppLink","analyticsData","entity","ShareViewHelper","actionType","MySharesTableHeading","heading","isFirst","MySharesTableRow","shareData","isCollection","SharedObjectImage","object","showVideoMetadata","locationContext","imageOptions","size","showCollectionMask","showVideoCount","onlyCount","smartCount","viewCount","SvgContainer","svgName","S","accessCount","ShareStatusIndicator","markingRequired","pendingReview","hasData","ActionsDropdown","dropdownToggleSvgSize","actions","getObjectActions","dropdownToggleClassName","getPhrase","LanguageService","getDateShared","recipients","dateShared","dateCreated","datesCreated","date1","date2","DateHelper","ArrayHelper","MySharesTable","sentShares","sharedObjects","shareRecipients","groupByDate","interactivesPendingReviews","tableData","interactivesPendingReviewsMap","groupByDateShared","interactivesPendingReview","s","objectId","recipient","recipientId","pendingReviewCount","privacy","ShareHelper","Object","keys","headingIdx","hasDemoInsights","index","breakpoints","imageCdnUrl","yearGroups","MySharesTableEmptyState","src","application","action","text","PartialHeading","PartialRow","PartialMySharesTable","useSharesTable","params","interactiveInsights","shouldFetch","fetch","config","isAuthenticated","cursor","fetchNext","hasMore","isFetchingSentShares","nextCursor","hasFirstPageCompleted","toString","shareLookup","prev","next","I","filters","showPartialLoading"],"sourceRoot":""}
|