@clickview/lite 0.70.1-dev.0 → 0.70.1-dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/css/{2018-lite-4aa02cdb17.chunk.css → 581-lite-a1cdc302ab.chunk.css} +3 -1
- package/dist/css/{2614-lite-0503112afe.chunk.css → 6156-lite-1b21a4e130.chunk.css} +3 -2
- package/dist/languages/en.json +1 -1
- package/dist/scripts/2154-6da16cef10-lite.chunk.js +2 -0
- package/dist/scripts/2154-6da16cef10-lite.chunk.js.map +1 -0
- package/dist/scripts/{2952-4f5abfce6d-lite.chunk.js → 2952-c5ec8f135e-lite.chunk.js} +2 -2
- package/dist/scripts/2952-c5ec8f135e-lite.chunk.js.map +1 -0
- package/dist/scripts/{52-9d13c36f9b-lite.chunk.js → 52-d91751eafb-lite.chunk.js} +2 -2
- package/dist/scripts/52-d91751eafb-lite.chunk.js.map +1 -0
- package/dist/scripts/581-6e9a9afba8-lite.chunk.js +2 -0
- package/dist/scripts/{2018-693740d206-lite.chunk.js.map → 581-6e9a9afba8-lite.chunk.js.map} +1 -1
- package/dist/scripts/5829-1c696c8446-lite.chunk.js +3 -0
- package/dist/scripts/5829-1c696c8446-lite.chunk.js.map +1 -0
- package/dist/scripts/6156-d9a351e53f-lite.chunk.js +2 -0
- package/dist/scripts/{2614-bc2fef6ae0-lite.chunk.js.map → 6156-d9a351e53f-lite.chunk.js.map} +1 -1
- package/dist/scripts/6629-3ea157aef8-lite.chunk.js +3 -0
- package/dist/scripts/6629-3ea157aef8-lite.chunk.js.map +1 -0
- package/dist/scripts/{bundle-f9b9be2d02.min.js → bundle-4735d8d159.min.js} +3 -3
- package/dist/scripts/{bundle-f9b9be2d02.min.js.map → bundle-4735d8d159.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/1386-3be201d425-lite.chunk.js +0 -2
- package/dist/scripts/1386-3be201d425-lite.chunk.js.map +0 -1
- package/dist/scripts/2018-693740d206-lite.chunk.js +0 -2
- package/dist/scripts/2614-bc2fef6ae0-lite.chunk.js +0 -2
- package/dist/scripts/2952-4f5abfce6d-lite.chunk.js.map +0 -1
- package/dist/scripts/52-9d13c36f9b-lite.chunk.js.map +0 -1
- package/dist/scripts/5829-82562ea6c2-lite.chunk.js +0 -3
- package/dist/scripts/5829-82562ea6c2-lite.chunk.js.map +0 -1
- package/dist/scripts/6629-55dc1fdb80-lite.chunk.js +0 -3
- package/dist/scripts/6629-55dc1fdb80-lite.chunk.js.map +0 -1
- /package/dist/scripts/{5829-82562ea6c2-lite.chunk.js.LICENSE.txt → 5829-1c696c8446-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6629-55dc1fdb80-lite.chunk.js.LICENSE.txt → 6629-3ea157aef8-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-f9b9be2d02.min.js.LICENSE.txt → bundle-4735d8d159.min.js.LICENSE.txt} +0 -0
package/package.json
CHANGED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1386],{71553:(e,t,n)=>{n.d(t,{I:()=>o});var r=n(99940),a=n(62875);function i(e,t){return{currentUserId:e.id,currentCustomerId:e.customerId,dateRange:{start:t.start,end:t.end},userIds:t.userId,classroomsAndGroups:t.groupId}}var o={interactiveResultSet:function(e,t,n,o,c,l,s,u){return{url:c?"/api/domain/v3/analytics/interactives/".concat(e,"/metadata/").concat(t):"/api/domain/v2/analytics/interactives/".concat(e,"/metadata/").concat(t),key:(0,a.H)("interactive:result:set:".concat(e,":").concat(t),o),data:i(n,o),type:r.k.POST,normalize:!1,success:l,error:s,always:u}},mark:function(e,t,n,a,i,o,c){return{url:"/api/domain/v1/analytics/answers/".concat(n),key:"mark:answer:".concat(n,":").concat(a.resultId),type:r.k.PUT,data:a,normalize:!1,invalidationKeys:"interactive:result:set:".concat(e,":").concat(t),success:i,error:o,always:c}},pendingReviews:function(e){return{url:"/api/domain/v1/analytics/interactives/pending-reviews/summary",key:"interactives:pending:reviews",type:r.k.POST,data:e}},interactiveResultsReport:function(e){return{url:"{gateway}/v2/analytics/interactives/report",key:"interactive:results:report",data:e,type:r.k.POST,normalize:!1}}}},26025:(e,t,n)=>{n.d(t,{B:()=>i});var r=n(1048),a=n(75795),i={getAudienceAppLinkParams:function(){var e=a.O.getCurrentRoute().appLink,t=r.t.isObject(e.params)?e.params:{},n=t.users,i=t.classrooms,o=t.classroomGroups,c=function(e){var n=t[e];if(n)return Array.isArray(n)?n:[n]},l={};return n&&(l.users=c("users")),i&&(l.classrooms=c("classrooms")),o&&(l.classroomGroups=c("classroomGroups")),l},getDateRangeAppLinkParams:function(){var e=a.O.getCurrentRoute().appLink,t=r.t.isObject(e.params)?e.params:{},n=t.from,i=t.to,o=t.rangeName,c={};return n&&(c.from=n),i&&(c.to=i),o&&(c.rangeName=o),c}}},39902:(e,t,n)=>{n.d(t,{F:()=>p,f:()=>m});var r=n(32735),a=n(20354),i=n(75896);function o(e){return function(e){if(Array.isArray(e))return l(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||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 l(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)?l(e,t):void 0}}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function s(e){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 u(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 d=50;function m(e,t){var n=i.m.chunk(e,d).map((function(e){return t(i.m.uniq(e))})),r=a.a.useBasicFetchAll(n),o=i.m.flatten(r.data),c=r.data.length?o.reduce((function(e,t){return Object.assign(Object.assign({},e),u({},t.id,t))}),{}):null;return{itemsArr:o,items:c,isFetching:r.isFetching}}function p(e,t,n){var l,m,p,v,f=n||function(e){return"object"===s(e)?e.id:e},y=r.useRef(new Set),g=(p=r.useState([]),v=2,function(e){if(Array.isArray(e))return e}(p)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,o,c=[],l=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){s=!0,a=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw a}}return c}}(p,v)||c(p,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.")}()),h=g[0],b=g[1];r.useEffect((function(){if(null==e?void 0:e.length){var n=[];e.forEach((function(e){var t=f(e);y.current.has(t)||(n.push(e),y.current.add(t))})),n.length&&b((function(e){return[].concat(o(e),o(i.m.chunk(n,d).map(t)))}))}}),[null==e?void 0:e.length]);var E=a.a.useBasicFetchAll(h),x=i.m.flatten(E.data),S=E.data.length?x.reduce((function(e,t){return Object.assign(Object.assign({},e),u({},f(t),t))}),{}):null;return{hasFirstRequestCompleted:!!(null===(m=null===(l=E.responses)||void 0===l?void 0:l[0])||void 0===m?void 0:m.hasCompleted),itemsArr:x,items:S,isFetching:E.isFetching}}},62875:(e,t,n)=>{function r(e,t,n){var r="".concat(e,":").concat(t.start,":").concat(t.end),a=Array.isArray(t.userId)?t.userId.sort().join(":"):t.userId,i=Array.isArray(t.groupId)?t.groupId.sort().join(":"):t.groupId;return a&&(r+=":".concat(a)),i&&(r+=":".concat(i)),n&&(r+=":".concat(n)),r}n.d(t,{H:()=>r})},51401:(e,t,n)=>{n.d(t,{g:()=>b,F:()=>x});var r=n(32735),a=n(82602),i=n(39202),o=n(65858),c=n(9806),l=n(83345),s=n(62335),u=n(26339),d=n(54610),m=n(4594),p=n(31908),v=n(4315),f=n(81969);const y={mySharesTable:"hyaYe",mySharesHeader:"WjfsD",tableBorder:"tHBWr"};function g(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var h="myShares.tableRow";function b(e){return r.createElement("div",{className:"".concat(y.mySharesHeader," d-block d-lg-grid gap-3 px-3")},r.createElement("p",{className:"fw-semibold mb-2 ms-n3"},e.heading),e.isFirst&&r.createElement(r.Fragment,null,r.createElement("div",{className:"d-none d-xl-inline"}),r.createElement("p",{className:"d-none d-xl-inline fw-semibold mb-2"},r.createElement(l.x,{namespace:h,phrase:"sharedToHeading"})),r.createElement("p",{className:"d-none d-xl-inline fw-semibold mb-2"},r.createElement(l.x,{namespace:h,phrase:"dateSharedHeading"})),r.createElement("p",{className:"d-none d-xl-inline fw-semibold mb-2"},r.createElement(l.x,{namespace:h,phrase:"viewsHeading"}))))}function E(e){var t,n=e.sharedObject;if(!n.name)return r.createElement(l.x,{namespace:h,phrase:"videoUnavailable"});if(p.M.isVideoType(n)&&!(null===(t=p.M.getCanBeConsumed(n))||void 0===t?void 0:t.canNavigate))return r.createElement("span",{className:"clamp-2"},n.name);var a=function(){switch(n.typeId){case m.E.Series:return"series";case m.E.Playlist:return"playlist"}}();return r.createElement("div",null,p.M.isVideoType(n)&&r.createElement(u.$,{type:"series",video:n,analyticsOptions:{location:o.LZ.Insights},className:"d-inline clamp-1"}),a&&r.createElement(s.m,null,r.createElement(l.x,{namespace:h,phrase:a})),n.name,!!e.requireMarking&&r.createElement("div",{className:"font-size-sm d-flex align-items-center bg-light-ultramarine text-ultramarine rounded-pill w-fit mt-1 px-2"},r.createElement(l.x,{namespace:h,phrase:"requireMarking",options:{smartCount:e.requireMarking}})))}function x(e){var t,n,s,u,p=e.shareData,b=p.sharedObject,x=e.breakpoints.xs||e.breakpoints.sm,S=e.breakpoints.xl||e.breakpoints.xxl,k=b.typeId===m.E.Playlist||b.typeId===m.E.Series;function w(){var t,n,r=(t=e.getObjectActions(b,p.share.shareId),n=1,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,o,c=[],l=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){s=!0,a=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw a}}return c}}(t,n)||function(e,t){if(e){if("string"==typeof e)return g(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)?g(e,t):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0];i.C$.trigger(r.appLink)}return r.createElement("div",{key:p.share.shareId,onClick:w,className:"".concat(y.mySharesTable," ").concat(y.tableBorder," position-relative d-flex flex-md-row align-items-md-center p-0 p-md-3 gap-3")},r.createElement("div",{className:"col-xl-1"},r.createElement(c.k,{object:b,showVideoMetadata:!1,locationContext:o.LZ.MyShares,imageOptions:{size:d.h2.Medium},requireMarking:x&&p.pendingReview,showCollectionMask:!1,showVideoCount:!1})),r.createElement("div",{className:"d-flex align-items-xl-center flex-xl-row gap-xl-3 col-xl-11"},r.createElement("div",{className:"col-xl-3"},r.createElement(E,{sharedObject:p.sharedObject,requireMarking:S&&p.pendingReview}),e.children),r.createElement("div",{className:"d-flex align-items-center gap-xl-0 pe-4 pe-md-0 col-xl-9"},r.createElement("div",{className:"col-xl-5"},r.createElement(v.e,{shareLink:p.share,classroomName:(s=f.R.getClassroomId(null==p?void 0:p.share),u=null===(n=null===(t=e.shareData)||void 0===t?void 0:t.shareRecipients)||void 0===n?void 0:n.find((function(e){return e.id.toString()===s})),null==u?void 0:u.name)})),r.createElement("span",{className:"d-inline d-xl-none"},"·"),r.createElement("p",{className:"mb-0 ms-2 col-xl-3"},(0,a.WU)(p.dateShared)),k?r.createElement("p",{className:"mb-0 d-none d-xl-block col-xl-2"},"-"):r.createElement(r.Fragment,null,r.createElement("span",{className:"d-inline d-xl-none"},"·"),r.createElement("p",{className:"mb-0 col-xl-2"},r.createElement(l.x,{namespace:h,phrase:"views",options:{smartCount:p.viewCount}}))),r.createElement("p",{onClick:w,className:"cursor-pointer p-0 m-0 text-info col-xl-2"},"View report"))))}},5056:(e,t,n)=>{n.d(t,{R:()=>f});var r=n(32735),a=n(23481),i=n(75896),o=n(110),c=n(31754),l=n(4594),s=n(93975);function u(e){return u="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},u(e)}function d(e,t,n){return(t=function(e){var t=function(e){if("object"!=u(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=u(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==u(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var m=a.T.encloseNamespace("myShares.mySharesTable");function p(e){var t;if(e.type===s.y.Link||!(null===(t=null==e?void 0:e.recipients)||void 0===t?void 0:t.length))return e.dateCreated;var n=e.recipients.map((function(e){return e.dateCreated}));return n.sort((function(e,t){return o.O.isSame(e,t)?0:o.O.isAfter(e,t)?1:-2})),n.length?i.m.last(n):""}var v=n(51401);function f(e){var t,n,a,i,o,u,f,y=(t=e.sentShares,n=e.sharedObjects,a=e.shareRecipients,i=!!e.groupByDateShared,o=e.interactivesPendingReview,u=[],f=null==o?void 0:o.reduce((function(e,t){return Object.assign(d({},t.interactiveId,t),e)}),{}),t.forEach((function(e){var t,r,i=null==n?void 0:n[e.objectId],o=null;if(e.type===s.y.Classroom&&(o=[],null===(t=e.recipients)||void 0===t||t.forEach((function(e){var t=null==a?void 0:a[e.recipientId];t&&o.push(t)}))),i){var c=i.typeId===l.E.Interactive&&(null==f?void 0:f[i.interactiveId]);u.push({share:e,sharedObject:i,shareRecipients:o,dateShared:p(e),viewCount:null!==(r=e.viewCount)&&void 0!==r?r:0,pendingReview:null==c?void 0:c.pendingReviewCount,privacy:e.privacy})}})),i?c.x.groupByDateShared(u):d({},m("title"),u));return r.createElement(r.Fragment,null,Object.keys(y).map((function(t,n){return r.createElement("div",{key:t},r.createElement(v.g,{heading:t,isFirst:!e.hasDemoInsights&&0===n}),r.createElement("div",{className:"d-flex flex-column rounded-3 mb-4 gap-4 gap-md-0 border-md"},y[t].map((function(t){return r.createElement(v.F,{key:t.share.shareId,shareData:t,getObjectActions:e.getObjectActions,getObjectAppLink:e.getObjectAppLink,breakpoints:e.breakpoints,imageCdnUrl:e.imageCdnUrl,yearGroups:e.yearGroups})}))))})))}},67467:(e,t,n)=>{n.d(t,{o:()=>u});var r=n(32735),a=n(23481),i=n(97958),o=n(99742),c=n(14070),l=n(97291),s=a.T.encloseNamespace("myShares.mySharesTableEmptyState");function u(){return r.createElement(i.u,null,r.createElement(i.u.Image,{src:o.W.EmptyStates.Share.SHARED_BY_ME,size:"small"}),r.createElement(i.u.Heading,null,s("heading")),r.createElement(i.u.Info,null,s("info")),r.createElement(i.u.Cta,{appLink:{application:l.O.DASHBOARD,action:c.e.Dashboard.HOME},text:s("cta")}))}},28001:(e,t,n)=>{n.d(t,{L:()=>o});var r=n(32735);const a={table:"elIjR",tableHeader:"xJKgP",heading:"iWHol",image:"TMQxq",avatar:"_3GY1C",date:"nz3va",views:"FpDfX",actions:"pOtyK"};function i(){return r.createElement("div",{className:"".concat(a.table," position-relative d-flex d-xl-grid flex-column flex-md-row align-items-md-center p-0 p-md-3 gap-3")},r.createElement("div",{className:"col-12 col-md-3 col-xl-auto"},r.createElement("div",{className:"partial-loading-background rounded ratio ratio-16x9 "})),r.createElement("div",{className:"d-flex flex-column align-items-xl-center flex-xl-row gap-1 gap-xl-3"},r.createElement("div",{className:"partial-loading-background col-8 col-xl-4"}," "),r.createElement("div",{className:"d-flex align-items-center gap-2 gap-xl-0 pe-4 pe-md-0 col-xl-8"},r.createElement("div",{className:"col-xl-5"},r.createElement("div",{className:"".concat(a.avatar," partial-loading-background rounded-pill col-xl-8")})),r.createElement("div",{className:"col-xl-4"},r.createElement("div",{className:"".concat(a.date," partial-loading-background")}," ")),r.createElement("div",{className:"col-xl-3"},r.createElement("div",{className:"".concat(a.views," partial-loading-background")}," ")))),r.createElement("div",{className:"position-absolute bottom-0 end-0 position-md-static d-flex justify-content-end gap-2 ms-auto col col-xl-12"},r.createElement("div",{className:"".concat(a.actions," partial-loading-background rounded d-none d-md-block px-3 p-lg-0 col-lg-6")}),r.createElement("div",{className:"".concat(a.actions," partial-loading-background rounded px-3 p-lg-0 col-lg-4")})))}function o(){return r.createElement(r.Fragment,null,r.createElement("div",{className:"mb-3"},r.createElement("div",{className:"no-full-width"},r.createElement("div",{className:"".concat(a.table," d-block d-xl-grid gap-3 px-3")},r.createElement("div",{className:"partial-loading-background mb-2 ms-n3 ".concat(a.date)}," "),r.createElement("div",{className:"d-flex flex-column align-items-xl-center flex-xl-row gap-1 gap-xl-3"},r.createElement("div",{className:"col-xl-4"}),r.createElement("div",{className:"d-flex align-items-center gap-2 gap-xl-0 pe-4 pe-md-0 col-xl-8"},r.createElement("div",{className:"col-xl-5"},r.createElement("div",{className:"d-none d-xl-inline-block partial-loading-background mb-2 ".concat(a.date)}," ")),r.createElement("div",{className:"col-xl-4"},r.createElement("div",{className:"d-none d-xl-inline-block partial-loading-background mb-2 ".concat(a.date)}," ")),r.createElement("div",{className:"col-xl-3"},r.createElement("div",{className:"d-none d-xl-inline-block partial-loading-background mb-2 ".concat(a.date)}," "))))),r.createElement("div",{className:"d-flex flex-column rounded-3 mb-4 gap-4 gap-md-0 border-md border"},r.createElement(i,null),r.createElement(i,null),r.createElement(i,null)))),r.createElement("div",{className:"mb-3"},r.createElement("div",{className:"partial-loading-background mb-2 ".concat(a.date)}," "),r.createElement("div",{className:"d-flex flex-column rounded-3 mb-4 gap-4 gap-md-0 border-md border"},r.createElement(i,null),r.createElement(i,null),r.createElement(i,null),r.createElement(i,null))),r.createElement("div",{className:"mb-3"},r.createElement("div",{className:"partial-loading-background mb-2 ".concat(a.date)}," "),r.createElement("div",{className:"d-flex flex-column rounded-3 mb-4 gap-4 gap-md-0 border-md border"},r.createElement(i,null),r.createElement(i,null),r.createElement(i,null),r.createElement(i,null),r.createElement(i,null),r.createElement(i,null),r.createElement(i,null),r.createElement(i,null),r.createElement(i,null),r.createElement(i,null))))}},45231:(e,t,n)=>{n.d(t,{a:()=>y});var r=n(20354),a=n(1048),i=n(71553),o=n(30439),c=n(39151),l=n(1666),s=n(31949),u=n(39902),d=n(60115),m=n(31908),p=n(88630),v=n(91574),f=n(72951);function y(e,t){var n,y,g=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],h=r.a.useGetFetch(),b=r.a.useBasicFetch(s.N.currentUser()),E=r.a.useBasicFetch(c.L.config()),x=r.a.useBasicFetch((null===(n=b.data)||void 0===n?void 0:n.isAuthenticated)&&l.h.yearGroups(b.data.customerId)),S=function(t){return g&&v.o.getSentShares(Object.assign({cursor:t},e))},k=function(e){return h(S(e))},w=(0,d.K)(S,k),I=w.items,O=w.hasMore,N=w.isFetching,j=w.nextCursor,A=w.hasFirstPageCompleted,C=(0,u.F)(null==I?void 0:I.map((function(e){return e.objectId.toString()})),o.o.sharedObjectsById),P=(0,u.F)(f.x.getFlattenedRecipients(null!=I?I:[]).map((function(e){return e.recipientId.toString()})),(function(e){return o.o.getRecipientsById(e,b.data.customerId)})),T=(0,u.F)(t?a.t.values(C.items||[]):[],(function(e){return i.I.pendingReviews({interactives:e.filter(m.M.isInteractive).map((function(e){return{interactiveId:e.interactiveId,metadataId:e.id}})),filters:{currentCustomerId:b.data.customerId,currentUserId:b.data.id}})}),(function(e){return"".concat(e.id,":").concat(e.interactiveId)})),R=(0,u.F)(f.x.getClassoomIds(null!=I?I:[]),(function(e){return p.F.getClassroomsByIds(e)})),L=N||C.isFetching||P.isFetching||T.isFetching||x.isFetching,F=!A||!C.hasFirstRequestCompleted;return{sentShares:I,sharedObjects:C,shareRecipients:P,shareClassrooms:R,yearGroups:x.data,interactivesPendingReview:T,isFetching:L,showPartialLoading:F,nextCursor:j,hasMore:O,fetchNext:k,imageCdnUrl:null===(y=E.data)||void 0===y?void 0:y.imageCdnUrl}}},69003:(e,t,n)=>{n.d(t,{cl:()=>f,sD:()=>v});var r=n(23481),a=n(65858),i=n(26025),o=n(35223),c=n(31908),l=n(14070),s=n(97291),u=n(86099);function d(e){return function(e){if(Array.isArray(e))return m(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return m(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?m(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var p=r.T.encloseNamespace("myShares.myShares");function v(e,t,n,r,i,d){var m=[],v={button:!(d.xs||d.sm),className:"btn btn-outline-dark"};if(c.M.isVideoType(e)){if(!c.M.getCanBeConsumed(e).canConsume)return[];if(i)return[Object.assign(Object.assign({label:p("embedVideo"),appLink:{application:s.O.DEFAULT,action:l.e.Default.PLUGIN_SHARE,args:[e.id],params:{entityType:e.type}}},v),{analyticsOptions:{actionType:a.Vw.Share,descriptor:a.YM.PluginEmbed,workflowPhase:a.eu.Start,eventVersion:a.eq.V5}})]}return r&&m.push(Object.assign({svgName:o.vn.Analytics,label:!d.md&&p("viewInsights"),tooltip:d.md&&p("viewInsights"),appLink:Object.assign(Object.assign({},(0,u.Dw)(e)),{params:Object.assign(Object.assign({},n),{shareId:t})}),group:"insights"},v)),m.push(Object.assign({label:!d.md&&p("share"),tooltip:d.md&&p("share"),svgName:o.vn.Share,appLink:(0,u.YK)(e),group:"share"},v)),m}function f(e){var t=function(e){return e?"string"==typeof e?[+e]:e.map((function(e){return+e}))||[]:[]}(e),n=i.B.getAudienceAppLinkParams();return{typeIdAppLinkParams:t,audienceAppLinkParams:n,currentAppLink:{application:s.O.MY_SHARES,action:l.e.MyShares.HOME,params:Object.assign(Object.assign({},n),{typeId:t})},sentSharesParams:{recipientUserId:null==n?void 0:n.users,recipientGroupId:[].concat(d((null==n?void 0:n.classroomGroups)||[]),d((null==n?void 0:n.classrooms)||[])),objectTypeId:t.length?t:void 0}}}},4315:(e,t,n)=>{n.d(t,{e:()=>d});var r=n(32735),a=n(12528),i=n(4594),o=n(35223),c=n(42272),l=n(93975);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 u(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}function d(e){return r.createElement("div",{className:"d-flex align-items-center"},r.createElement("div",{className:"d-flex align-items-center justify-content-center"},r.createElement("div",null,r.createElement(a.f,{svgName:m[e.shareLink.type],variant:p[e.shareLink.type],textVariant:"white",svgWrapperClassName:"p-1"})),r.createElement("div",{className:"d-flex flex-column ms-2"},r.createElement("label",{className:"m-0"},(n=(t=e).shareLink,o=t.classroomName,n.type===l.y.Classroom&&o?o:v[n.type])),r.createElement("span",{className:"text-secondary"},function(e){var t,n,r,a,o=e.shareLink;if(o.type===l.y.Classroom){var s=null!==(n=null===(t=o.recipients)||void 0===t?void 0:t.filter((function(e){return e.recipientTypeId===i.E.ClassroomGroup})).length)&&void 0!==n?n:0,u=null!==(a=null===(r=o.recipients)||void 0===r?void 0:r.filter((function(e){return e.recipientTypeId===i.E.User})).length)&&void 0!==a?a:0;return s&&u?"".concat(s," ").concat(f(s,"group","groups"),", ").concat(u," ").concat(f(u,"student","students")," can view"):s?"".concat(s," ").concat(f(s,"group","groups")," can view"):u?"".concat(u," ").concat(f(u,"student","students")," can view"):"All students in classroom can view"}if(o.type===l.y.Open)return"Students watch using a PIN code";if(o.type===l.y.Link){if([c.e.JustMySchool,c.e.Protected].includes(o.privacy))return"Respect ratings and restrictions";if(o.privacy===c.e.JustMySchoolOverrideRestriction)return"Anyone in your school can view";if(o.privacy===c.e.ProtectedOverrideRestriction)return"Anyone signed into ClickView can view";if(o.privacy===c.e.Public)return"Anyone with a link can view";if(o.privacy===c.e.PinCode)return"Anyone with a PIN code can view"}return o.type===l.y.Live?"Live now":"Anyone signed into ClickView can view"}(e)))));var t,n,o}var m=u(u(u(u({},l.y.Open,o.vn.School),l.y.Link,o.vn.Link),l.y.Classroom,o.vn.Classrooms),l.y.Live,o.vn.Play),p=u(u(u(u({},l.y.Open,"blue"),l.y.Link,"black"),l.y.Classroom,"teal"),l.y.Live,"purple"),v=u(u(u(u({},l.y.Open,"Open classroom"),l.y.Link,"Link"),l.y.Classroom,"Classroom"),l.y.Live,"Live");function f(e,t,n){return 1===e?t:n}},42272:(e,t,n)=>{var r;n.d(t,{e:()=>r}),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"}(r||(r={}))},93975:(e,t,n)=>{var r;n.d(t,{y:()=>r}),function(e){e.Link="Link",e.Classroom="Classroom",e.Open="Open",e.Live="Live"}(r||(r={}))},91574:(e,t,n)=>{n.d(t,{o:()=>o});var r=n(99940),a=n(97395),i={namespace:"share-v2"},o={createShareLink:function(e,t,n,a){return{url:"/api/share/v2/shares",key:"create:share-v2:link",type:r.k.POST,data:e,normalizeOptions:i,invalidationKeys:["share:link:object:".concat(e.objectId),"privacy:".concat(e.objectId),"sent:shares","get:share-v2:shares:object"],success:t,error:n,always:a}},getShareLink:function(e,t,n,a){return{url:"/api/share/v2/shares/".concat(e),key:"get:share-v2:link:".concat(e),type:r.k.GET,normalizeOptions:i,success:t,error:n,always:a}},getSharesByObjectId:function(e,t,n,a){return{url:"/api/share/v2/shares/objects/".concat(e),key:"get:share-v2:shares:object:".concat(e),type:r.k.GET,normalizeOptions:i,success:t,error:n,always:a}},getSentShares:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0,i=arguments.length>3?arguments[3]:void 0,o={scopeId:e.scopeId,limit:e.limit||25,offset:parseInt(e.cursor)||0},c=Object.values(o).join(":");return{url:a._.urlBuilder("/api/share/v2/shares/sent",o),key:"sent:shares-v2:".concat(c),formatData:function(e){return{data:e,count:e.length,pagination:{cursors:{next:o.offset+e.length}}}},type:r.k.GET,normalize:!1,success:t,error:n,always:i}},createPincode:function(e){return{url:"/api/share/v2/shares/".concat(e,"/pincode"),key:"create:share-v2:pincode",type:r.k.POST}},getPincode:function(e){return{url:"/api/share/v2/shares/pincode?code=".concat(e),key:"get:share-v2:pincode:".concat(e)}},getPincodeByShareId:function(e){return{url:"/api/share/v2/shares/".concat(e,"/pincode"),key:"get:share-v2:".concat(e,":pincode")}}}},72951:(e,t,n)=>{n.d(t,{x:()=>i});var r=n(75896),a=n(4594),i={getFlattenedRecipients:function(e){return r.m.flatten(e.map((function(e){var t;return null!==(t=e.recipients)&&void 0!==t?t:[]})))},getClassoomIds:function(e){var t=i.getFlattenedRecipients(e).map((function(e){return e.scopeId?e.scopeId.toString():e.recipientId&&e.recipientTypeId===a.E.Classroom?e.recipientId.toString():void 0}));return r.m.uniq(t.filter((function(e){return!!e})))},getClassroomIdFromShare:function(e){var t,n=null===(t=e.recipients)||void 0===t?void 0:t[0];if(n)return n.scopeId?n.scopeId.toString():n.recipientId&&n.recipientTypeId===a.E.Classroom?n.recipientId.toString():void 0},getClassroomForShare:function(e,t){var n=i.getClassroomIdFromShare(e);if(n)return t.find((function(e){return e.id.toString()===n.toString()}))}}},81969:(e,t,n)=>{n.d(t,{R:()=>v});var r=n(23481),a=n(110),i=n(4594),o=n(49080),c=n(26361),l=n(35223),s=n(31908),u=n(42272),d=n(93975);function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var p=r.T.encloseNamespace("share.shareLinkInfo"),v={getPrivateIconAndText:function(e){var t=e.entityTypeId,n=e.privacy,r=e.hasStudentExp,a=e.entity,o=e.yearGroups;if(t===i.E.Topic||t===i.E.Series)return{icon:l.vn.VisibleOn,text:p(r?"justMySchoolTeachers":"justMySchoolDescription")};if(!Array.isArray(n))switch(n){case u.e.Public:return{icon:l.vn.VisibleOn,text:p("publicDescription")};case u.e.ProtectedOverrideRestriction:return{icon:l.vn.VisibleOn,text:p("clickViewOnly")};case u.e.Protected:return{icon:l.vn.Lock,text:v.getRespectRatingText(a,o,r)};case u.e.JustMySchoolOverrideRestriction:return{icon:l.vn.Lock,text:p(r?"justMySchoolTeachers":"justMySchoolDescription")};case u.e.JustMySchool:return{icon:l.vn.Lock,text:v.getRespectRatingText(a,o,r)};case u.e.PinCode:case u.e.PasswordProtected:return{icon:l.vn.Lock,text:p("privateDescription")};default:return{}}},getIconAndText:function(e){var t=e.linkExpireDate,n=e.isPasswordProtected,r=e.status;if(!t&&!n)return v.getPrivateIconAndText(e);if(!t)return{icon:l.vn.Lock,text:p("password")};var i=a.O.isToday(t),c=a.O.diffBetween(t,new Date,"day");if(!n){var s=i?p("expiryToday"):p("expiry",{days:c});return r===o.F.Expired&&(s=p("expired")),{icon:l.vn.Timer,text:s}}var u=i?p("passwordExpiryToday"):p("passwordExpiry",{days:c});return r===o.F.Expired&&(u=p("passwordExpired")),{icon:l.vn.Lock,text:u}},getRespectRatingText:function(e,t,n){var r;if(!e||!t)return null;if(n)return p("justMySchoolTeachers");if(!s.M.isVideoType(e))return p("collectionRating");var a=c.l.getWeightedRestriction(null===(r=e._restrictions)||void 0===r?void 0:r.value);if(a&&!a.yearGroup)return p("onlyAdmins");var i,o,l,u=s.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 r=0,a=function(){};return{s:a,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:a}}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();!(l=d.n()).done;){var v=l.value;(!i||v.value>i.value)&&(i=v),a&&v.value<=a.yearGroup||u&&v.rating.value<u.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")},getClassroomId:function(e){var t,n;if(!e)return"";if(e.type!==d.y.Classroom)return"";var r=null===(t=e.recipients)||void 0===t?void 0:t.find((function(e){return e.recipientTypeId===i.E.Classroom}));if(r)return r.recipientId.toString();var a=null===(n=e.recipients)||void 0===n?void 0:n.find((function(e){return e.scopeId}));return(null==a?void 0:a.scopeId.toString())||""}}}}]);
|
|
2
|
-
//# sourceMappingURL=1386-3be201d425-lite.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/1386-3be201d425-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/flight-requests/InteractiveResultsRequests.ts","file:///app/packages/libs/shared/src/apps/analytics/utils/AnalyticsFilterUtils.ts","file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/libs/shared/src/utils/AnalyticsRequestUtils.ts","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/apps/my-shares/hooks/useMySharesTable.ts","file:///app/packages/projects/lite/src/apps/my-shares/views/my-shares/MySharesViewUtils.ts","file:///app/packages/projects/lite/src/apps/share-v2/components/ShareAvatar.tsx","file:///app/packages/projects/lite/src/apps/share-v2/enums/SharePrivacy.ts","file:///app/packages/projects/lite/src/apps/share-v2/enums/ShareType.ts","file:///app/packages/projects/lite/src/apps/share-v2/flight-requests/ShareRequests.ts","file:///app/packages/projects/lite/src/apps/share-v2/utils/ShareHelper.ts","file:///app/packages/projects/lite/src/apps/share-v2/utils/ShareLinkHelper.ts"],"sourcesContent":["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}\n\nfunction getInteractiveResultFilters(\n currentUser: CurrentUser,\n filter: AnalyticsRequestFilter\n): InteractiveResultFilters {\n return {\n currentUserId: currentUser.id,\n currentCustomerId: currentUser.customerId,\n dateRange: { start: filter.start, end: filter.end },\n userIds: filter.userId,\n classroomsAndGroups: filter.groupId\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 includePublicResults: boolean,\n success?: (data: InteractiveResultSet) => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: includePublicResults ?\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}`, filter),\n data: getInteractiveResultFilters(currentUser, filter),\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 return {\n url: `/api/domain/v1/analytics/interactives/pending-reviews/summary`,\n key: `interactives:pending:reviews`,\n type: HttpVerbs.POST,\n data\n };\n },\n\n interactiveResultsReport(data: InteractiveResultsReport): Flight.Request {\n return {\n url: '{gateway}/v2/analytics/interactives/report',\n key: 'interactive:results:report',\n data,\n type: HttpVerbs.POST,\n normalize: false\n };\n }\n};","import { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AudienceQueryParams } from 'libs/shared/apps/analytics/interfaces/AudienceQueryParams';\nimport { DateRangeQueryParams } from 'libs/shared/apps/analytics/interfaces/DateRangeQueryParams';\nimport { ContextService } from 'libs/shared/services/ContextService';\n\nexport const AnalyticsFilterHelper = {\n getAudienceAppLinkParams: () => {\n const { appLink } = ContextService.getCurrentRoute();\n const params = ObjectHelper.isObject(appLink.params) ? appLink.params as HashObject : {};\n const { users, classrooms, classroomGroups } = params;\n\n const getParam = (key: keyof AudienceQueryParams) => {\n const param = params[key];\n\n if (!param)\n return;\n\n return Array.isArray(param) ? param : [param];\n };\n\n const audienceFilters: AudienceQueryParams = {};\n\n if (users)\n audienceFilters.users = getParam('users');\n\n if (classrooms)\n audienceFilters.classrooms = getParam('classrooms');\n\n if (classroomGroups)\n audienceFilters.classroomGroups = getParam('classroomGroups');\n\n return audienceFilters;\n },\n getDateRangeAppLinkParams: () => {\n const { appLink } = ContextService.getCurrentRoute();\n const params = ObjectHelper.isObject(appLink.params) ? appLink.params as HashObject : {};\n const { from, to, rangeName } = params;\n\n const dateRangeFilters: DateRangeQueryParams = {};\n\n if (from)\n dateRangeFilters.from = from;\n\n if (to)\n dateRangeFilters.to = to;\n\n if (rangeName)\n dateRangeFilters.rangeName = rangeName;\n\n return dateRangeFilters;\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}\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 };\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<T>(\n objs: T[],\n getRequest: (items: T[]) => Flight.Request,\n _getKey?: (obj: T) => 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 fetchedItems = React.useRef<Set<string>>(new Set<string>());\n\n const [ requests, setRequests ] = React.useState<Flight.Request[]>([]);\n\n React.useEffect(() => {\n if (!objs?.length)\n return;\n\n const unfetchedItems: T[] = [];\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<T>(unfetchedItems, CHUNK_SIZE).map(getRequest) ]));\n }, [objs?.length]);\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, [getKey(item)]: item }), {})\n : null;\n\n return {\n hasFirstRequestCompleted: !!responses.responses?.[0]?.hasCompleted,\n itemsArr,\n items,\n isFetching: responses.isFetching\n };\n}","import { AnalyticsRequestFilter } from 'libs/shared/interfaces';\n\nexport function getAnalyticsRequestKey(baseKey: string, filter: AnalyticsRequestFilter, sharerId?: string): string {\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\n if (userIdKey)\n key += `:${userIdKey}`;\n\n if (groupIdKey)\n key += `:${groupIdKey}`;\n\n if (sharerId)\n key += `:${sharerId}`;\n\n return key;\n}","// extracted by mini-css-extract-plugin\nexport default {\"mySharesTable\":\"hyaYe\",\"mySharesHeader\":\"WjfsD\",\"tableBorder\":\"tHBWr\"};","import React from 'react';\nimport { format as formatDate } from 'timeago.js';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\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 { SharableEntity } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\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 { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject, YearGroup } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { MySharesTableData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\nimport { ShareAvatar } from 'apps/share-v2/components/ShareAvatar';\nimport { ShareLinkHelper } from 'apps/share-v2/utils/ShareLinkHelper';\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={`${styles.mySharesHeader} d-block d-lg-grid gap-3 px-3`}>\n <p className='fw-semibold mb-2 ms-n3'>{props.heading}</p>\n\n {props.isFirst &&\n <>\n <div className='d-none d-xl-inline' />\n <p className='d-none d-xl-inline fw-semibold mb-2'><Text namespace={namespace} phrase='sharedToHeading' /></p>\n <p className='d-none d-xl-inline fw-semibold mb-2'><Text namespace={namespace} phrase='dateSharedHeading' /></p>\n <p className='d-none d-xl-inline fw-semibold mb-2'><Text namespace={namespace} phrase='viewsHeading' /></p>\n </>\n }\n </div>\n );\n}\n\ninterface ShareObjectTitleProps {\n sharedObject: SharableEntity;\n requireMarking?: number;\n appLink?: Core.AppLink;\n}\n\nfunction ShareObjectTitle(props: ShareObjectTitleProps) {\n const { sharedObject } = props;\n\n if (!sharedObject.name) {\n return <Text namespace={namespace} phrase='videoUnavailable' />;\n }\n\n if (VideoHelper.isVideoType(sharedObject) &&\n !VideoHelper.getCanBeConsumed(sharedObject)?.canNavigate) {\n return (\n <span className='clamp-2'>\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 const subTextPhrase = getSubTextPhrase();\n\n return (\n <div>\n {VideoHelper.isVideoType(sharedObject) && (\n <VideoSubText\n type='series'\n video={sharedObject}\n // appLink={'series' in sharedObject && sharedObject.series ? getObjectAppLink(sharedObject.series) : null}\n analyticsOptions={{ location: LocationContext.Insights }}\n className='d-inline clamp-1'\n />\n )}\n\n {subTextPhrase &&\n <TitleSubText>\n <Text namespace={namespace} phrase={subTextPhrase} />\n </TitleSubText>\n }\n\n {sharedObject.name}\n\n {!!props.requireMarking && (\n <div className={`font-size-sm d-flex align-items-center bg-light-ultramarine text-ultramarine rounded-pill w-fit mt-1 px-2`}>\n <Text namespace={namespace} phrase='requireMarking' options={{ smartCount: props.requireMarking }} />\n </div>\n )}\n </div>\n );\n}\n\ninterface MyShareRowProps extends React.PropsWithChildren {\n shareData: MySharesTableData;\n breakpoints?: Breakpoints;\n getObjectAppLink: (object: BaseObject) => Core.AppLink;\n getObjectActions: (object: BaseObject, shareId: string) => ActionOptions[];\n yearGroups: YearGroup[];\n imageCdnUrl: string;\n}\n\nexport function MySharesTableRow(props: MyShareRowProps) {\n const { shareData } = props;\n const sharedObject = shareData.sharedObject;\n const isMobile = props.breakpoints.xs || props.breakpoints.sm;\n const isDesktop = props.breakpoints.xl || props.breakpoints.xxl;\n const isCollection = sharedObject.typeId === MasterType.Playlist || sharedObject.typeId === MasterType.Series;\n\n function onRowClick() {\n const [goToReport] = props.getObjectActions(sharedObject, shareData.share.shareId);\n\n AppLinkHelper.trigger(goToReport.appLink);\n }\n\n function findClassroomName() {\n const classroomId = ShareLinkHelper.getClassroomId(shareData?.share);\n const classroom = props.shareData?.shareRecipients?.find(recipient => recipient.id.toString() === classroomId);\n \n return classroom?.name;\n }\n\n return (\n <div key={shareData.share.shareId} onClick={onRowClick} className={`${styles.mySharesTable} ${styles.tableBorder} position-relative d-flex flex-md-row align-items-md-center p-0 p-md-3 gap-3`}>\n \n <div className='col-xl-1'>\n <SharedObjectImage\n object={sharedObject}\n // appLink={props.getObjectAppLink(sharedObject)}\n showVideoMetadata={false}\n locationContext={LocationContext.MyShares}\n imageOptions={{ size: ImageSize.Medium }}\n requireMarking={isMobile && shareData.pendingReview}\n showCollectionMask={false}\n showVideoCount={false}\n />\n </div>\n\n <div className='d-flex align-items-xl-center flex-xl-row gap-xl-3 col-xl-11'>\n <div className='col-xl-3'>\n <ShareObjectTitle\n sharedObject={shareData.sharedObject}\n // appLink={props.getObjectAppLink(sharedObject)}\n requireMarking={isDesktop && shareData.pendingReview}\n />\n {props.children}\n </div>\n\n <div className='d-flex align-items-center gap-xl-0 pe-4 pe-md-0 col-xl-9'>\n <div className='col-xl-5'>\n <ShareAvatar shareLink={shareData.share} classroomName={findClassroomName()} />\n </div>\n <span className='d-inline d-xl-none'>·</span>\n <p className='mb-0 ms-2 col-xl-3'>{formatDate(shareData.dateShared)}</p>\n {!isCollection ? (\n <>\n <span className='d-inline d-xl-none'>·</span>\n <p className='mb-0 col-xl-2'><Text namespace={namespace} phrase='views' options={{ smartCount: shareData.viewCount }} /></p>\n </>\n ) : (\n <p className='mb-0 d-none d-xl-block col-xl-2'>-</p>\n )}\n\n <p onClick={onRowClick} className='cursor-pointer p-0 m-0 text-info col-xl-2'>View report</p>\n </div>\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 { MasterType } from 'libs/shared/enums/MasterType';\nimport { InteractiveMetadata } from 'libs/shared/interfaces';\n\nimport { SharePrivacy } from 'apps/share-v2/enums/SharePrivacy';\nimport { ShareType } from 'apps/share-v2/enums/ShareType';\nimport { ShareLink } from 'apps/share-v2/interfaces/ShareLink';\n\nconst namespace = 'myShares.mySharesTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getDateShared(share: ShareLink): string {\n if (share.type === ShareType.Link || !share?.recipients?.length)\n return share.dateCreated;\n\n const datesShared = share.recipients.map(r => r.dateCreated);\n\n datesShared.sort((date1, date2) => {\n if (DateHelper.isSame(date1, date2))\n return 0;\n\n return DateHelper.isAfter(date1, date2) ? 1 : -2;\n });\n\n\n if (!datesShared.length)\n return '';\n\n return ArrayHelper.last(datesShared);\n}\n\nexport interface MySharesTableData {\n share: ShareLink;\n sharedObject: SharableEntity;\n dateShared: string;\n shareRecipients?: SharableRecipient[];\n viewCount: number;\n pendingReview?: number;\n privacy?: SharePrivacy;\n}\n\ntype TableDataGroupings = { [date: string]: MySharesTableData[] };\n\nexport function useGetMySharesData(\n sentShares: ShareLink[],\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 viewCount: s.viewCount ?? 0,\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 { Core } from 'libs/common/core';\n\nimport { InteractivesPendingReviews } from 'libs/shared/apps/analytics/interfaces/response/InteractivesPendingReviewsResponse';\nimport { SharableEntity, SharableRecipient } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject, YearGroup } from 'libs/shared/interfaces';\n\nimport { useGetMySharesData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\nimport { MySharesTableHeading, MySharesTableRow } from 'apps/my-shares/components/my-shares-table-row/MySharesTableRow';\nimport { ShareLink } from 'apps/share-v2/interfaces/ShareLink';\n\ninterface MySharesTableProps {\n sentShares: ShareLink[];\n sharedObjects: Record<string, SharableEntity>;\n shareRecipients: Record<string, SharableRecipient>;\n interactivesPendingReview: InteractivesPendingReviews[];\n getObjectAppLink: (object: BaseObject) => Core.AppLink;\n getObjectActions: (object: BaseObject, shareId: string) => 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, i) => (\n <div key={heading}>\n <MySharesTableHeading heading={heading} isFirst={!props.hasDemoInsights && i === 0} />\n\n <div className='d-flex flex-column rounded-3 mb-4 gap-4 gap-md-0 border-md'>\n {data[heading].map(shareData => (\n <MySharesTableRow\n key={shareData.share.shareId}\n shareData={shareData}\n getObjectActions={props.getObjectActions}\n getObjectAppLink={props.getObjectAppLink}\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 {\"table\":\"elIjR\",\"tableHeader\":\"xJKgP\",\"heading\":\"iWHol\",\"image\":\"TMQxq\",\"avatar\":\"_3GY1C\",\"date\":\"nz3va\",\"views\":\"FpDfX\",\"actions\":\"pOtyK\"};","import React from 'react';\n\nimport styles from './partial-my-shares-table.scss';\n\nfunction PartialRow(): JSX.Element {\n return (\n <div className={`${styles.table} position-relative d-flex d-xl-grid flex-column flex-md-row align-items-md-center p-0 p-md-3 gap-3`}>\n <div className='col-12 col-md-3 col-xl-auto'>\n <div className={`partial-loading-background rounded ratio ratio-16x9 `} />\n </div>\n <div className='d-flex flex-column align-items-xl-center flex-xl-row gap-1 gap-xl-3'>\n <div className={`partial-loading-background col-8 col-xl-4`}> </div>\n <div className='d-flex align-items-center gap-2 gap-xl-0 pe-4 pe-md-0 col-xl-8'>\n <div className='col-xl-5'>\n <div className={`${styles.avatar} partial-loading-background rounded-pill col-xl-8`} />\n </div>\n <div className='col-xl-4'>\n <div className={`${styles.date} partial-loading-background`}> </div>\n </div>\n <div className='col-xl-3'>\n <div className={`${styles.views} partial-loading-background`}> </div>\n </div>\n </div>\n </div>\n <div className={`position-absolute bottom-0 end-0 position-md-static d-flex justify-content-end gap-2 ms-auto col col-xl-12`}>\n <div className={`${styles.actions} partial-loading-background rounded d-none d-md-block px-3 p-lg-0 col-lg-6`} />\n <div className={`${styles.actions} partial-loading-background rounded px-3 p-lg-0 col-lg-4`} />\n </div>\n </div>\n );\n}\n\nexport function PartialMySharesTable(): JSX.Element {\n return (\n <>\n <div className='mb-3'>\n <div className='no-full-width'>\n <div className={`${styles.table} d-block d-xl-grid gap-3 px-3`}>\n <div className={`partial-loading-background mb-2 ms-n3 ${styles.date}`}> </div>\n <div className='d-flex flex-column align-items-xl-center flex-xl-row gap-1 gap-xl-3'>\n <div className='col-xl-4' />\n <div className='d-flex align-items-center gap-2 gap-xl-0 pe-4 pe-md-0 col-xl-8'>\n <div className='col-xl-5'>\n <div className={`d-none d-xl-inline-block partial-loading-background mb-2 ${styles.date}`}> </div>\n </div>\n <div className='col-xl-4'>\n <div className={`d-none d-xl-inline-block partial-loading-background mb-2 ${styles.date}`}> </div>\n </div>\n <div className='col-xl-3'>\n <div className={`d-none d-xl-inline-block partial-loading-background mb-2 ${styles.date}`}> </div>\n </div>\n </div>\n </div>\n </div>\n\n <div className='d-flex flex-column rounded-3 mb-4 gap-4 gap-md-0 border-md border'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n </div>\n\n <div className='mb-3'>\n <div className={`partial-loading-background mb-2 ${styles.date}`}> </div>\n\n <div className='d-flex flex-column rounded-3 mb-4 gap-4 gap-md-0 border-md border'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n\n <div className='mb-3'>\n <div className={`partial-loading-background mb-2 ${styles.date}`}> </div>\n\n <div className='d-flex flex-column rounded-3 mb-4 gap-4 gap-md-0 border-md 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 { ShareRequests as ShareRequestsV1 } from 'libs/shared/apps/share/flight-requests/ShareRequests';\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\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { GetSentSharesParams, ShareRequests as ShareRequestsV2 } from 'apps/share-v2/flight-requests/ShareRequests';\nimport { ShareLink } from 'apps/share-v2/interfaces/ShareLink';\nimport { ShareHelper } from 'apps/share-v2/utils/ShareHelper';\n\nexport function getBatchFetchResultAsArray(result: UseBatchFetchResult<BaseObject>): BaseObject[] {\n return result.items ? Object.values(result.items) : [];\n}\n\nexport function useMySharesTable(\n params?: GetSentSharesParams,\n interactiveInsights?: boolean,\n shouldFetch: boolean = true\n) {\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<ShareLink>(getRequest, fetchNext);\n\n /**\n * Fetch shared objects\n */\n const sharedObjects = useGrowingBatchFetch(\n sentShares?.map(obj => obj.objectId.toString()),\n ShareRequestsV1.sharedObjectsById\n );\n\n /**\n * Fetch recipients\n */\n const shareRecipients = useGrowingBatchFetch(\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 interactivesPendingReview = useGrowingBatchFetch(\n interactiveInsights ? ObjectHelper.values(sharedObjects.items || []) : [],\n objs => InteractiveResultsRequests.pendingReviews({\n interactives: objs\n .filter(VideoHelper.isInteractive)\n .map(obj => ({ interactiveId: obj.interactiveId, metadataId: obj.id })),\n filters: {\n currentCustomerId: currentUser.data.customerId,\n currentUserId: currentUser.data.id\n }\n }),\n obj => `${obj.id}:${obj.interactiveId}`\n );\n\n /**\n * Fetch classrooms\n */\n const shareClassrooms = useGrowingBatchFetch(\n ShareHelper.getClassoomIds(sentShares ?? []),\n objs => (ClassroomRequests.getClassroomsByIds(objs))\n );\n \n const isFetching = isFetchingSentShares\n || sharedObjects.isFetching\n || shareRecipients.isFetching\n || interactivesPendingReview.isFetching\n || yearGroups.isFetching;\n\n const showPartialLoading = !hasFirstPageCompleted || !sharedObjects.hasFirstRequestCompleted;\n\n return {\n sentShares,\n sharedObjects,\n shareRecipients,\n shareClassrooms,\n yearGroups: yearGroups.data,\n interactivesPendingReview,\n isFetching,\n showPartialLoading,\n nextCursor,\n hasMore,\n fetchNext,\n imageCdnUrl: config.data?.imageCdnUrl\n };\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EventVersion, ShareDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { AudienceQueryParams } from 'libs/shared/apps/analytics/interfaces/AudienceQueryParams';\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { getInsightsAppLink, getShareAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nconst namespace = 'myShares.myShares';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function getShareObjectActions(\n sharedObject: BaseObject,\n shareId: string,\n audienceParams?: AudienceQueryParams,\n hasInsights?: boolean,\n isPlugin?: boolean,\n breakpoints?: Breakpoints\n): ActionOptions[] {\n const insightObjectActions: ActionOptions[] = [];\n\n const isMobile = breakpoints.xs || breakpoints.sm;\n\n const buttonProps = {\n button: !isMobile,\n className: 'btn btn-outline-dark'\n };\n\n if (VideoHelper.isVideoType(sharedObject)) {\n const { canConsume } = VideoHelper.getCanBeConsumed(sharedObject);\n\n if (!canConsume)\n return [];\n\n if (isPlugin) {\n return [{\n label: getPhrase('embedVideo'),\n appLink: {\n application: AppChannels.DEFAULT,\n action: Actions.Default.PLUGIN_SHARE,\n args: [sharedObject.id],\n params: { entityType: sharedObject.type }\n },\n ...buttonProps,\n analyticsOptions: {\n actionType: UserAction.Share,\n descriptor: ShareDescriptors.PluginEmbed,\n workflowPhase: WorkflowPhase.Start,\n eventVersion: EventVersion.V5\n }\n }];\n }\n }\n\n if (hasInsights) {\n insightObjectActions.push({\n svgName: cvSvgLibrary.Analytics,\n label: !breakpoints.md && getPhrase('viewInsights'),\n tooltip: breakpoints.md && getPhrase('viewInsights'),\n appLink: { ...getInsightsAppLink(sharedObject), params: { ...audienceParams, shareId } },\n group: 'insights',\n ...buttonProps\n });\n }\n\n insightObjectActions.push({\n label: !breakpoints.md && getPhrase('share'),\n tooltip: breakpoints.md && getPhrase('share'),\n svgName: cvSvgLibrary.Share,\n appLink: getShareAppLink(sharedObject),\n group: 'share',\n ...buttonProps\n });\n\n return insightObjectActions;\n}\n\nexport function getTypeIdParams(typeId: string | string[]): MasterType[] {\n if (!typeId) return [];\n\n if (typeof typeId === 'string')\n return [+typeId];\n\n return typeId.map(typeId => +typeId) || [];\n}\n\nexport function getSharesParams(typeId: string | string[]) {\n const typeIdAppLinkParams = getTypeIdParams(typeId);\n const audienceAppLinkParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n const currentAppLink = {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.HOME,\n params: {\n ...audienceAppLinkParams,\n typeId: typeIdAppLinkParams\n }\n };\n const sentSharesParams = {\n recipientUserId: audienceAppLinkParams?.users,\n recipientGroupId: [ ...audienceAppLinkParams?.classroomGroups || [], ...audienceAppLinkParams?.classrooms || [] ],\n objectTypeId: typeIdAppLinkParams.length ? typeIdAppLinkParams : undefined\n };\n\n return {\n typeIdAppLinkParams,\n audienceAppLinkParams,\n currentAppLink,\n sentSharesParams\n };\n}","import React from 'react';\n\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { SharePrivacy } from '../enums/SharePrivacy';\nimport { ShareType } from '../enums/ShareType';\nimport { ShareLink } from '../interfaces/ShareLink';\n\ninterface ShareAvatarProps {\n shareLink: Partial<ShareLink>;\n classroomName?: string;\n}\n\nexport function ShareAvatar(props: ShareAvatarProps): JSX.Element {\n return (\n <div className='d-flex align-items-center'>\n <div className='d-flex align-items-center justify-content-center'>\n <div>\n <IconCircle\n svgName={icons[props.shareLink.type]}\n variant={iconColours[props.shareLink.type]}\n textVariant='white'\n svgWrapperClassName='p-1'\n />\n </div>\n <div className='d-flex flex-column ms-2'>\n <label className='m-0'>{getTitle(props)}</label>\n <span className='text-secondary'>{getSubtitle(props)}</span>\n </div>\n </div>\n </div>\n );\n}\n\nconst icons = {\n [ShareType.Open]: cvSvgLibrary.School,\n [ShareType.Link]: cvSvgLibrary.Link,\n [ShareType.Classroom]: cvSvgLibrary.Classrooms,\n [ShareType.Live]: cvSvgLibrary.Play\n};\n\nconst iconColours = {\n [ShareType.Open]: 'blue',\n [ShareType.Link]: 'black',\n [ShareType.Classroom]: 'teal',\n [ShareType.Live]: 'purple'\n};\n\nconst titles = {\n [ShareType.Open]: 'Open classroom',\n [ShareType.Link]: 'Link',\n [ShareType.Classroom]: 'Classroom',\n [ShareType.Live]: 'Live'\n};\n\nfunction pluralize(count: number, singular: string, plural: string) {\n return count === 1 ? singular : plural;\n}\n\nfunction getTitle({ shareLink, classroomName }: ShareAvatarProps) {\n if (shareLink.type === ShareType.Classroom && classroomName)\n return classroomName;\n\n return titles[shareLink.type];\n}\n\nfunction getSubtitle({ shareLink }: ShareAvatarProps) {\n if (shareLink.type === ShareType.Classroom) {\n const groupCount = shareLink.recipients?.filter(r => r.recipientTypeId === MasterType.ClassroomGroup).length ?? 0;\n const studentCount = shareLink.recipients?.filter(r => r.recipientTypeId === MasterType.User).length ?? 0;\n\n if (groupCount && studentCount)\n return `${groupCount} ${pluralize(groupCount, 'group', 'groups')}, ${studentCount} ${pluralize(studentCount, 'student', 'students')} can view`;\n\n if (groupCount)\n return `${groupCount} ${pluralize(groupCount, 'group', 'groups')} can view`;\n\n if (studentCount)\n return `${studentCount} ${pluralize(studentCount, 'student', 'students')} can view`;\n\n return `All students in classroom can view`;\n }\n\n if (shareLink.type === ShareType.Open)\n return 'Students watch using a PIN code';\n\n if (shareLink.type === ShareType.Link) {\n if ([ SharePrivacy.JustMySchool, SharePrivacy.Protected ].includes(shareLink.privacy))\n return 'Respect ratings and restrictions';\n\n if (shareLink.privacy === SharePrivacy.JustMySchoolOverrideRestriction)\n return 'Anyone in your school can view';\n\n if (shareLink.privacy === SharePrivacy.ProtectedOverrideRestriction)\n return 'Anyone signed into ClickView can view';\n\n if (shareLink.privacy === SharePrivacy.Public)\n return 'Anyone with a link can view';\n\n if (shareLink.privacy === SharePrivacy.PinCode)\n return 'Anyone with a PIN code can view';\n }\n\n if (shareLink.type === ShareType.Live)\n return 'Live now';\n\n return 'Anyone signed into ClickView can view';\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}","export enum ShareType {\n Link = 'Link',\n Classroom = 'Classroom',\n Open = 'Open',\n Live = 'Live'\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BasePaginatedCollection } from 'libs/shared/interfaces';\n\nimport { CreateShareLinkRequest } from 'apps/share-v2/interfaces/CreateShareLinkRequest';\nimport { ShareLink } from 'apps/share-v2/interfaces/ShareLink';\n\nconst normalizeOptions: Flight.NormalizeOptions = {\n namespace: 'share-v2'\n};\n\nexport interface GetSentSharesParams {\n cursor?: string;\n limit?: number;\n objectTypeId?: MasterType | MasterType[];\n recipientUserId?: string | string[];\n recipientGroupId?: string | string[];\n start?: string;\n end?: string;\n scopeId?: string;\n}\n\nexport const ShareRequests = {\n createShareLink(\n data: CreateShareLinkRequest,\n success?: (shareLink: ShareLink) => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: '/api/share/v2/shares',\n key: 'create:share-v2:link',\n type: HttpVerbs.POST,\n data,\n normalizeOptions,\n invalidationKeys: [\n `share:link:object:${data.objectId}`,\n `privacy:${data.objectId}`,\n 'sent:shares',\n 'get:share-v2:shares:object'\n ],\n success,\n error,\n always\n };\n },\n\n getShareLink(\n shareId: string,\n success?: (shareLink: ShareLink) => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `/api/share/v2/shares/${shareId}`,\n key: `get:share-v2:link:${shareId}`,\n type: HttpVerbs.GET,\n normalizeOptions,\n success,\n error,\n always\n };\n },\n\n getSharesByObjectId(\n objectId: string | number,\n success?: (shares: ShareLink[]) => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `/api/share/v2/shares/objects/${objectId}`,\n key: `get:share-v2:shares:object:${objectId}`,\n type: HttpVerbs.GET,\n normalizeOptions,\n success,\n error,\n always\n };\n },\n\n getSentShares(\n params: GetSentSharesParams = {},\n success?: (response: BasePaginatedCollection<ShareLink>[]) => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n const adaptedParams = {\n scopeId: params.scopeId,\n limit: params.limit || 25,\n offset: parseInt(params.cursor) || 0\n };\n\n const key = Object.values(adaptedParams).join(':');\n\n return {\n url: UrlHelper.urlBuilder('/api/share/v2/shares/sent', adaptedParams),\n key: `sent:shares-v2:${key}`,\n formatData: (response: ShareLink[]) => {\n return {\n data: response,\n count: response.length,\n pagination: {\n cursors: {\n next: adaptedParams.offset + response.length\n }\n }\n };\n },\n type: HttpVerbs.GET,\n normalize: false,\n success,\n error,\n always\n };\n },\n\n createPincode(shareId: string): Flight.Request {\n return {\n url: `/api/share/v2/shares/${shareId}/pincode`,\n key: 'create:share-v2:pincode',\n type: HttpVerbs.POST\n };\n },\n\n getPincode(code: string): Flight.Request {\n return {\n url: `/api/share/v2/shares/pincode?code=${code}`,\n key: `get:share-v2:pincode:${code}`\n };\n },\n\n getPincodeByShareId(shareId: string): Flight.Request {\n return {\n url: `/api/share/v2/shares/${shareId}/pincode`,\n key: `get:share-v2:${shareId}:pincode`\n };\n }\n};","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { Classroom } from 'libs/shared/interfaces';\n\nimport { ShareLink, ShareRecipient } from '../interfaces/ShareLink';\n\nexport const ShareHelper = {\n getFlattenedRecipients(shares: ShareLink[]): ShareRecipient[] {\n return ArrayHelper.flatten(shares.map(s => s.recipients ?? []));\n },\n\n getClassoomIds(shares: ShareLink[]): string[] {\n const recipients = ShareHelper.getFlattenedRecipients(shares);\n\n const classroomIds = recipients.map(r => {\n if (r.scopeId)\n return r.scopeId.toString();\n\n if (r.recipientId && r.recipientTypeId === MasterType.Classroom)\n return r.recipientId.toString();\n });\n\n return ArrayHelper.uniq(classroomIds.filter(x => !!x));\n },\n\n getClassroomIdFromShare(share: ShareLink): string | undefined {\n const firstRecipient = share.recipients?.[0];\n \n if (!firstRecipient) return;\n \n if (firstRecipient.scopeId)\n return firstRecipient.scopeId.toString();\n \n if (firstRecipient.recipientId && firstRecipient.recipientTypeId === MasterType.Classroom)\n return firstRecipient.recipientId.toString();\n },\n \n getClassroomForShare(share: ShareLink, classrooms: Classroom[]): Classroom | undefined {\n const classroomId = ShareHelper.getClassroomIdFromShare(share);\n \n if (!classroomId) return;\n \n return classrooms.find(classroom => classroom.id.toString() === classroomId.toString());\n }\n};","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ShareLinkStatus } from 'libs/shared/enums/ShareLinkStatus';\nimport { BaseObject, YearGroup } from 'libs/shared/interfaces';\nimport { RestrictionHelper } from 'libs/shared/utils/RestrictionHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { SharePrivacy } from '../enums/SharePrivacy';\nimport { ShareType } from '../enums/ShareType';\nimport { ShareLink } from '../interfaces/ShareLink';\n\nconst namespace = 'share.shareLinkInfo';\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\n\nexport const ShareLinkHelper = {\n getPrivateIconAndText: (options: GetIconAndTextOptions) => {\n const { entityTypeId, privacy, hasStudentExp, entity, yearGroups } = options;\n \n if (entityTypeId === MasterType.Topic || entityTypeId === MasterType.Series)\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase(hasStudentExp ? 'justMySchoolTeachers' : 'justMySchoolDescription') };\n \n /**\n * This is mainly for typescript, privacy will be an array for playlists\n * but that is handled above\n */\n if (Array.isArray(privacy))\n return;\n \n switch (privacy) {\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 case SharePrivacy.PasswordProtected:\n return { icon: cvSvgLibrary.Lock, text: getPhrase('privateDescription') };\n default:\n return {};\n }\n },\n\n getIconAndText: (options: GetIconAndTextOptions) => {\n const { linkExpireDate, isPasswordProtected, status } = options;\n if (!linkExpireDate && !isPasswordProtected)\n return ShareLinkHelper.getPrivateIconAndText(options);\n \n if (!linkExpireDate)\n return { icon: cvSvgLibrary.Lock, text: getPhrase('password') };\n \n const isToday = DateHelper.isToday(linkExpireDate);\n const dayDifference = DateHelper.diffBetween(linkExpireDate, new Date(), 'day');\n \n if (!isPasswordProtected) {\n let text = isToday\n ? getPhrase('expiryToday')\n : getPhrase('expiry', { days: dayDifference });\n \n if (status === ShareLinkStatus.Expired)\n text = getPhrase('expired');\n \n return { icon: cvSvgLibrary.Timer, text };\n }\n \n let text = isToday\n ? getPhrase('passwordExpiryToday')\n : getPhrase('passwordExpiry', { days: dayDifference });\n \n if (status === ShareLinkStatus.Expired)\n text = getPhrase('passwordExpired');\n \n return { icon: cvSvgLibrary.Lock, text };\n },\n\n getRespectRatingText(video: BaseObject, yearGroups: YearGroup[], hasStudentExp: boolean) {\n if (!video || !yearGroups)\n return null;\n \n if (hasStudentExp)\n return getPhrase('justMySchoolTeachers');\n \n if (!VideoHelper.isVideoType(video))\n return getPhrase('collectionRating');\n \n const restriction = RestrictionHelper.getWeightedRestriction(video._restrictions?.value);\n \n /**\n * Restrictions without a year level are teacher restricitons, which means only admins can see it.\n */\n if (restriction && !restriction.yearGroup)\n return getPhrase('onlyAdmins');\n \n const rating = VideoHelper.getRating(video);\n \n let maxYearGroup: YearGroup;\n let minAllowedYearGroup: YearGroup;\n \n for (const yearGroup of yearGroups) {\n /**\n * If our year level is our new highest so far, save it\n */\n if (!maxYearGroup || yearGroup.value > maxYearGroup.value)\n maxYearGroup = yearGroup;\n \n /**\n * If the restriction is higher than this year level, skip it.\n */\n if (restriction && yearGroup.value <= restriction.yearGroup)\n continue;\n \n /**\n * If therating is higher than this year level's rating value, skip it.\n */\n if (rating && yearGroup.rating.value < rating.value)\n continue;\n \n /**\n * If our year level is the new lowest so far, save it\n */\n if (!minAllowedYearGroup || yearGroup.value < minAllowedYearGroup.value)\n minAllowedYearGroup = yearGroup;\n }\n \n /**\n * If no year levels are allowed, then it's staff only.\n */\n if (!minAllowedYearGroup)\n return getPhrase('onlyStaff');\n \n \n /**\n * If there's only one year level, and it's allowed, then we can just\n * say that everyone in your school can access it.\n */\n if (yearGroups.length === 1)\n return getPhrase('clickViewOnly');\n \n /**\n * We differentiate the copy if it's the highest year level or not. \n * Basically if we need to say \"X and above\" or not.\n */\n if (minAllowedYearGroup.value === maxYearGroup.value)\n return getPhrase('maxYearGroup', { yearGroup: maxYearGroup.name });\n \n return getPhrase('yearGroupRange', { yearGroup: minAllowedYearGroup.name });\n },\n\n getClassroomId(shareLink: ShareLink | undefined): string {\n if (!shareLink)\n return '';\n\n if (shareLink.type !== ShareType.Classroom)\n return '';\n\n const classroom = shareLink.recipients?.find(r => r.recipientTypeId === MasterType.Classroom);\n\n if (classroom)\n return classroom.recipientId.toString();\n\n const recipientWithScope = shareLink.recipients?.find(r => r.scopeId);\n\n return recipientWithScope?.scopeId.toString() || '';\n }\n};"],"names":["getInteractiveResultFilters","currentUser","filter","currentUserId","id","currentCustomerId","customerId","dateRange","start","end","userIds","userId","classroomsAndGroups","groupId","InteractiveResultsRequests","interactiveResultSet","interactiveId","interactiveMetadataId","includePublicResults","success","error","always","url","key","data","type","normalize","mark","answerId","resultId","invalidationKeys","pendingReviews","interactiveResultsReport","AnalyticsFilterHelper","getAudienceAppLinkParams","appLink","params","users","classrooms","classroomGroups","getParam","param","Array","isArray","audienceFilters","getDateRangeAppLinkParams","from","to","rangeName","dateRangeFilters","CHUNK_SIZE","useBatchFetch","itemIds","getRequest","requests","map","chunk","responses","itemsArr","items","length","reduce","acc","item","isFetching","useGrowingBatchFetch","objs","_getKey","getKey","obj","fetchedItems","Set","setRequests","unfetchedItems","forEach","current","has","push","add","r","hasFirstRequestCompleted","hasCompleted","getAnalyticsRequestKey","baseKey","sharerId","userIdKey","sort","join","groupIdKey","namespace","MySharesTableHeading","props","className","heading","isFirst","Text","phrase","ShareObjectTitle","sharedObject","name","VideoHelper","canNavigate","subTextPhrase","typeId","MasterType","getSubTextPhrase","VideoSubText","video","analyticsOptions","location","TitleSubText","requireMarking","options","smartCount","MySharesTableRow","classroomId","classroom","shareData","isMobile","breakpoints","xs","sm","isDesktop","xl","xxl","isCollection","onRowClick","goToReport","getObjectActions","share","shareId","onClick","SharedObjectImage","object","showVideoMetadata","locationContext","imageOptions","size","pendingReview","showCollectionMask","showVideoCount","children","ShareAvatar","shareLink","classroomName","ShareLinkHelper","shareRecipients","find","recipient","toString","dateShared","viewCount","getPhrase","LanguageService","getDateShared","ShareType","recipients","dateCreated","datesShared","date1","date2","DateHelper","ArrayHelper","MySharesTable","sentShares","sharedObjects","groupByDate","interactivesPendingReviews","tableData","interactivesPendingReviewsMap","groupByDateShared","interactivesPendingReview","s","objectId","recipientId","pendingReviewCount","privacy","ShareHelper","Object","keys","i","hasDemoInsights","getObjectAppLink","imageCdnUrl","yearGroups","MySharesTableEmptyState","src","application","action","text","PartialRow","PartialMySharesTable","useMySharesTable","interactiveInsights","shouldFetch","fetch","config","isAuthenticated","cursor","fetchNext","hasMore","isFetchingSentShares","nextCursor","hasFirstPageCompleted","I","interactives","metadataId","filters","shareClassrooms","showPartialLoading","getShareObjectActions","audienceParams","hasInsights","isPlugin","insightObjectActions","buttonProps","button","canConsume","label","args","entityType","actionType","descriptor","workflowPhase","eventVersion","svgName","md","tooltip","group","getSharesParams","typeIdAppLinkParams","getTypeIdParams","audienceAppLinkParams","currentAppLink","sentSharesParams","recipientUserId","recipientGroupId","objectTypeId","undefined","icons","variant","iconColours","textVariant","svgWrapperClassName","titles","groupCount","recipientTypeId","studentCount","pluralize","includes","getSubtitle","count","singular","plural","SharePrivacy","normalizeOptions","ShareRequests","createShareLink","getShareLink","getSharesByObjectId","getSentShares","adaptedParams","scopeId","limit","offset","parseInt","values","formatData","response","pagination","cursors","next","createPincode","getPincode","code","getPincodeByShareId","getFlattenedRecipients","shares","getClassoomIds","classroomIds","x","getClassroomIdFromShare","firstRecipient","getClassroomForShare","getPrivateIconAndText","entityTypeId","hasStudentExp","entity","icon","getRespectRatingText","getIconAndText","linkExpireDate","isPasswordProtected","status","isToday","dayDifference","Date","days","restriction","_restrictions","value","yearGroup","maxYearGroup","minAllowedYearGroup","rating","getClassroomId","recipientWithScope"],"sourceRoot":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[2018],{4606:(e,t,n)=>{n.d(t,{U:()=>i});var r=n(20354),a=n(75896),o=n(31949);function i(e){var t=a.m.chunk(null!=e?e:[],25),n=r.a.useBasicFetchAll(t.map((function(e){return o.N.getById(e)})));return{users:a.m.flatten(n.data),isLoading:!n.hasCompleted,usersResponse:n}}},99705:(e,t,n)=>{var r,a;n.d(t,{b:()=>a}),function(e){e.AddToPlaylist="115005679748",e.EditSsoAccounts="8202508040345",e.LibraryEditor="360001974533",e.VideoAccess="360000153947",e.AddFromOnline="360011718234",e.UploadToLibraryEditor="360012069334",e.PBTErrorCodes="360012421153",e.ManuelReview="360020004534",e.LibraryReview="360000163788"}(r||(r={})),function(e){e.Integrations="4407268725529",e.Classrooms="4405362551833",e.MakeInteractive="4405370510873",e.EditSsoAccounts="8202605666073",e.UploadToLibraryEditor="10672936659865",e.AddFromLite="10671345281561",e.ManageSsoYearGroups="14691130889241",e.ContentReview="18525199576601",e.ContentPermissions="14692125209497",e.AccessSettings="27927466562201",e.ContentGuidelines="24133696186009",e.FoxtelFaq="24133519542169",e.ViviIntegration="23826297956377",e.AppleTvIntegration="25832373739929",e.RssFeed="32567445635097",e.ManageGroupPermissions="35407217335705"}(a||(a={}))},54405:(e,t,n)=>{n.d(t,{X:()=>r});var r={interactive:function(){return{url:"/mocks/insights/interactive.json",key:"demo:interactive",normalize:!1}},interactiveMetadata:function(){return{url:"/mocks/insights/interactive-metadata.json",key:"demo:interactive:metadata",normalize:!1}},interactiveResults:function(){return{url:"/mocks/insights/interactive-results.json",key:"demo:interactive:results",normalize:!1}},videoViews:function(){return{url:"/mocks/insights/video-views.json",key:"demo:video:views",normalize:!1}},users:function(){return{url:"/mocks/insights/users.json",key:"demo:users",normalize:!1}},individualHeatmap:function(){return{url:"/mocks/insights/individual-heatmap.json",key:"demo:individual:heatmap",normalize:!1}},aggregateHeatmap:function(){return{url:"/mocks/insights/aggregate-heatmap.json",key:"demo:aggregate:heatmap",normalize:!1}}}},57266:(e,t,n)=>{n.d(t,{e:()=>i});var r=n(81886),a=n(1048),o=n(75795),i={updateParams:function(e,t){var n=o.O.getCurrentRoute().appLink,i="string"==typeof n.params?r.Q.Ab.DeserializeQueryParams(n.params):n.params;t.keysToRemove&&(i=a.t.omit(i,t.keysToRemove));var l=(null==t?void 0:t.merge)?Object.assign(Object.assign({},i),e):e,s=Object.assign(Object.assign({},n),{params:l});a.t.isEqual(n,s)||r.Q.C$.trigger(s,a.t.omit(t,["merge","keysToRemove"]))}}},36511:(e,t,n)=>{n.d(t,{I:()=>a});var r=n(40424);function a(e){switch(e){case r.R.Pink:return"pink";case r.R.Orange:return"orange";case r.R.Green:return"green";case r.R.Blue:return"blue";case r.R.Purple:return"purple";case r.R.Indigo:return"indigo";default:return"pink"}}},99746:(e,t,n)=>{n.d(t,{p:()=>p});var r=n(32735),a=n(57900),o=n(97395),i=n(2948),l=n(91693),s=n(83345),c=n(4594),u=n(35223),m=n(86702);function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var f="lite.insightsAdminAlert";function p(e){var t,n,p=(t=(0,i.D)(m.y.INSIGHTS_ADMIN_ALERT,!0,{storage:a.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 r,a,o,i,l=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return l}}(t,n)||function(e,t){if(e){if("string"==typeof e)return d(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(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.")}()),g=p[0],v=p[1];return e.hasAnalytics&&g?r.createElement("div",{role:"alert",className:"d-flex justify-content-between align-items-center bg-light-blue rounded p-2 mb-4"},r.createElement("div",null,r.createElement(s.x,{namespace:f,phrase:"adminAlert"}),r.createElement("a",{className:"text-info",href:function(){if(!e.video)return e.analyticsUrl;var t="";return e.video.typeId===c.E.Interactive&&(t="/interactives/".concat(e.video.id,"/views")),e.video.typeId===c.E.Video&&(t="/videos/".concat(e.video.id,"/views")),e.video.typeId===c.E.Clip&&(t="/clips/".concat(e.video.id,"/views")),o._.safeUrlConcat(e.analyticsUrl,t)}(),target:"_blank"},r.createElement(s.x,{namespace:f,phrase:"analytics"})),"."),r.createElement(l.h,{svgName:u.vn.Close,className:"text-blue",onClick:function(){v(!1)}})):r.createElement(r.Fragment,null)}},18006:(e,t,n)=>{n.d(t,{c:()=>r,q:()=>a});var r="D8qRe7",a="GRWx6w"},9566:(e,t,n)=>{n.d(t,{G:()=>u,V:()=>d});var r=n(23481),a=n(110),o=n(35223),i=n(14070),l=n(97291),s=n(93975),c=r.T.encloseNamespace("myShares.demoInsights"),u={share:{shareId:"demo-insights",type:s.y.Link},sharedObject:null,shareRecipients:null,dateShared:a.O.subtract(new Date,7,"days").toISOString(),viewCount:23},m={application:l.O.MY_SHARES,action:i.e.MyShares.INTERACTIVE_OVERVIEW_DEMO},d={svgName:o.vn.Analytics,label:c("demoInsights"),appLink:m,group:"insights",className:"btn btn-outline-dark"}},61631:(e,t,n)=>{n.r(t),n.d(t,{MySharesView:()=>tt});var r=n(32735),a=n(81886),o=n(23481),i=n(20354),l=n(8935),s=n(1048),c=n(49985),u=n(65858),m=n(97395),d=n(32045),f={classroom:function(e){return{url:"{gateway}/v1/objects/".concat(e),key:"classroom:".concat(e)}},classroomGroup:function(e){return{url:"{gateway}/v1/objects/".concat(e,"?query=classroom"),key:"classroom:group:".concat(e,":classroom")}},getClassroomsById:function(e){e.sort();var t="users[count()]{limit:0}&".concat(e.map((function(e){return"id=".concat(e)})).join("&"));return{url:"{gateway}/v1/objects?query=".concat(t),key:"classrooms:".concat(e.join(","))}},getClassroomGroupsById:function(e){e.sort();var t="users[count()]{limit:0}&".concat(e.map((function(e){return"id=".concat(e)})).join("&"));return{url:"{gateway}/v1/objects?query=".concat(t),key:"classroom:groups:".concat(e.join(","))}},userClassrooms:function(e,t,n,r){return{url:m._.urlBuilder("{gateway}/v1/classrooms",{cursor:e}),key:"user:classrooms".concat(e?":".concat(e):""),success:t,error:n,always:r}},getPinnedClassrooms:function(e,t){return{url:m._.urlBuilder("{gateway}/v1/objects/".concat(e,"/members"),{query:"favouriteClassrooms[favouritedBy{id:".concat(e,"},_integrations,enrolments[user]{role:'owner'}]{status:").concat(d.w.Active,",customer.id:").concat(t,",limit:100,orderby:name}")}),key:"pinned:classrooms",normalize:!1}},getPublished:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n={query:"{orderby:name,status:".concat(d.w.Active,"}favouritedBy{id:").concat(e,"},_integrations,enrolments[user]{role:'owner'}")};return t&&(n.cursor=t),{url:m._.urlBuilder("{gateway}/v1/classrooms",n),key:"published:classrooms".concat(t?":".concat(t):"")}}},p=n(26025),g=n(42648),v=n(75896),y=n(97408),h=n(89965),b=n(12528),E=n(83914),S=n(4594),C=n(36511),k=n(35223),I=n(64818);const j={avatarContainer:"oCnQi",cta:"w39NR"};var w=o.T.encloseNamespace("shared.audienceFilterItem"),A=2;function N(e){var t,n,a=e.object.typeId===S.E.User&&e.object,o=e.object.typeId===S.E.Classroom&&e.object,i=e.object.typeId===S.E.ClassroomGroup&&e.object,l=e.object.name;a&&(l+=" ".concat(a.surname));var s=function(e){var t,n;return e.typeId===S.E.User&&(null===(n=null===(t=e.classrooms)||void 0===t?void 0:t.data)||void 0===n?void 0:n.length)?function(e){var t,n=null===(t=e.classrooms)||void 0===t?void 0:t.data;if(null==n?void 0:n.length)return n.length<=A?e.classrooms.data.map((function(e){return e.name})).join(" • "):w("severalClassrooms",{classroom:n[0].name,smartCount:n.length-1})}(e):""}(e.object),c="d-flex align-items-center justify-content-center text-white rounded-circle h-100 w-100",u=function(){return e.onToggleSelected(!e.selected)};return r.createElement("button",{className:"w-100",onClick:u},r.createElement("div",{className:"d-flex align-items-center py-1 ".concat(e.hideCheckbox?"bg-light-hover mx-n3 px-3":"")},!e.hideCheckbox&&r.createElement(h.X,{id:e.object.id,checked:e.selected,onChange:u}),r.createElement("div",{className:"".concat(j.avatarContainer," cursor-pointer me-2")},!!a&&r.createElement(y.q,{imageUrl:null===(t=a.avatar)||void 0===t?void 0:t.url,imageCdnUrl:e.imageCdnUrl,initials:I.l.getInitials(e.object.name,a.surname)}),!!o&&r.createElement("div",{className:c},e.isPinned?r.createElement(b.f,{svgName:k.vn.StarOutline,variant:"yellow",svgSize:E.S.Large}):r.createElement(b.f,{svgName:k.vn.Classrooms,variant:"teal",svgSize:E.S.Large})),!!i&&r.createElement("div",{className:c},r.createElement(b.f,{svgName:k.vn.Group,variant:(0,C.I)(null===(n=i.metadata)||void 0===n?void 0:n.colour)}))),r.createElement("div",null,r.createElement("h4",{className:"text-start font-size-normal fw-normal m-0"},l),!!s&&r.createElement("p",{className:"text-secondary m-0"},s)),e.hideCheckbox&&r.createElement("div",{className:"".concat(j.cta," ms-auto text-secondary")},e.selected&&r.createElement(E.x,{svgName:k.vn.Close}),!e.selected&&r.createElement(E.x,{svgName:k.vn.Plus}))))}var x=n(2997),O=n(2136),F=n(99705),U=n(12778);function P(e){return P="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},P(e)}function T(e,t,n){return(t=function(e){var t=function(e){if("object"!=P(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=P(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==P(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var L=o.T.encloseNamespace("shared.audienceFilterSearch");function R(e){return r.createElement("div",{className:"pt-2 text-center"},r.createElement("p",{className:"m-0"},r.createElement("strong",null,L("noResults",{query:e.query}))),!!e.hasClassroomsFeature&&r.createElement(r.Fragment,null,r.createElement("span",null,L("noResultsSuggestion")," "),r.createElement("a",{href:U.o.getLiteArticle(F.b.Classrooms),target:"_blank",className:"text-info"},L("learnMore"))))}function B(e){return r.createElement(O.E,{onQueryChange:e.setQuery,getRemoteUrl:function(t){var n=m._.safeUrlConcat(e.gatewayApiUrl,"v1/search/users");return m._.urlBuilder(n,T(T({query:t,index:["user","classroom","classroom_group"]},"".concat(x.w.FILTER_PARAM_PREFIX,"customerId"),e.currentUser.customerId),"limit",5))},requestHeaders:{authorization:"Bearer ".concat(e.userToken.value)},formatRemoteSuggestions:function(e){return null==e?void 0:e.results},placeholder:L(e.limitedFeatureSet||!e.hasClassroomsFeature?"placeholderLimited":"placeholder"),suggestionsHeading:L("searchResults"),alwaysRenderSuggestions:!0,resetSuggestionsOnNoActivation:!0,onSuggestionSelected:function(){},shouldUpdateQueryOnSelection:!1,getSuggestionComponent:function(t){var n,a=e.isSelected(t);return r.createElement(N,{object:t,selected:a,onToggleSelected:function(){return e.onSelect({object:t,selected:!a})},imageCdnUrl:e.imageCdnUrl,hideCheckbox:e.hideCheckbox,isPinned:null===(n=e.isPinned)||void 0===n?void 0:n.call(e,t)})},getEmptyStateComponent:function(t){return r.createElement(R,{query:t,hasClassroomsFeature:e.hasClassroomsFeature})},theme:{container:"",suggestionsContainerOpen:"pt-2",suggestion:"",suggestionHighlighted:"",sectionContainer:""},loadingComponentClassName:"pt-2",searchIconPlacement:"left",autoFocusInput:!0,allowableSuggestionFetchRequestedReasons:["input-changed"],debounceTime:200,showClearInputIcon:!0,resetSuggestionsOnClear:!0,onClickClearInput:function(){return e.setQuery("")}})}const G={menu:"H4ti6"};function M(e){return function(e){if(Array.isArray(e))return V(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||q(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 _(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return l}}(e,t)||q(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 q(e,t){if(e){if("string"==typeof e)return V(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)?V(e,t):void 0}}function V(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var H=o.T.encloseNamespace("shared.insightsAudienceFilterMenu"),z=300;function D(e,t){return e?t?e.filter((function(e){return t.some((function(t){return t.toString()===e.id.toString()}))})):e:[]}function Q(e){return r.createElement(r.Fragment,null,r.createElement("p",{className:"mb-2 pt-2 px-3"},r.createElement("strong",null,H("filteredBy"))),r.createElement("ul",{className:"list-unstyled px-3 mb-2"},e.selections.map((function(t,n){return r.createElement("li",{key:n},r.createElement(N,{object:t,selected:!0,onToggleSelected:function(){return e.onSelect({object:t,selected:!1})},imageCdnUrl:e.imageCdnUrl,hideCheckbox:!0,isPinned:e.isPinned(t)}))}))))}function Z(e){var t;return r.createElement(r.Fragment,null,r.createElement("p",{className:"mt-2 mb-2"},r.createElement("strong",null,H("suggested"))),r.createElement("ul",{className:"list-unstyled m-0"},null===(t=e.pinned)||void 0===t?void 0:t.map((function(t,n){return r.createElement("li",{key:"pinned-".concat(n)},r.createElement(N,{object:t,selected:e.isSelected(t),onToggleSelected:function(n){return e.onSelect({object:t,selected:n})},imageCdnUrl:e.imageCdnUrl,hideCheckbox:!0,isPinned:!0}))})),e.selections.map((function(t,n){return r.createElement("li",{key:"suggestion-".concat(n)},r.createElement(N,{object:t,selected:e.isSelected(t),onToggleSelected:function(n){return e.onSelect({object:t,selected:n})},imageCdnUrl:e.imageCdnUrl,hideCheckbox:!0}))}))))}function $(e){var t,n=function(e){var t=_(r.useState([]),2),n=t[0],a=t[1];return r.useEffect((function(){a(D(n,e))}),[e]),[n,a]}(e.selectedIds),a=_(n,2),o=a[0],i=a[1],l=v.m.uniq([].concat(M(null!==(t=e.audienceObjects)&&void 0!==t?t:[]),M(o)),"id"),s=D(l,e.selectedIds),c=D(l,e.suggestedIds),u=e.pinnedIds?D(l,e.pinnedIds):[],m=_(r.useState(""),2),d=m[0],f=m[1];function p(t){var n;return!!(null===(n=e.selectedIds)||void 0===n?void 0:n.length)&&e.selectedIds.some((function(e){return e.toString()===t.id.toString()}))}function y(t){var n;return!!(null===(n=e.pinnedIds)||void 0===n?void 0:n.length)&&e.pinnedIds.some((function(e){return e.toString()===t.id.toString()}))}function h(){e.onSelect()}var b=c.filter((function(e){return!p(e)})),E=u.filter((function(e){return!p(e)}));return r.createElement("div",{className:G.menu},r.createElement(g.$B,{autoHeight:!0,autoHeightMax:z},r.createElement("div",{className:"p-3"},r.createElement(B,{onSelect:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];var a=n.filter((function(e){return e.selected})).map((function(e){return e.object})),o=n.filter((function(e){return!e.selected})).map((function(e){return e.object.id}));i((function(e){return[].concat(M(e.filter((function(e){return!o.includes(e.id)}))),M(a))})),e.onSelect.apply(e,n)},isSelected:p,isPinned:y,gatewayApiUrl:e.gatewayApiUrl,userToken:e.userToken,imageCdnUrl:e.imageCdnUrl,currentUser:e.currentUser,limitedFeatureSet:e.limitedFeatureSet,hasClassroomsFeature:e.hasClassroomsFeature,setQuery:f,hideCheckbox:!0}),d.length<3&&(!!b.length||!!E.length)&&r.createElement(Z,{selections:b,pinned:E,onSelect:e.onSelect,imageCdnUrl:e.imageCdnUrl,isSelected:p}))),!!s.length&&r.createElement("div",{className:"".concat(c.length?"border-top":""," pb-2")},r.createElement(g.$B,{autoHeight:!0,autoHeightMax:z},r.createElement(Q,{selections:s,onSelect:e.onSelect,imageCdnUrl:e.imageCdnUrl,deselectAll:h,isPinned:y})),r.createElement("div",{className:"d-flex justify-content-between pb-1"},r.createElement("button",{className:"btn btn-link p-0 text-secondary px-3",onClick:h},H("reset")),r.createElement("button",{className:"btn btn-link p-0 text-info px-3",onClick:e.onClickApply},H("apply")))))}var X=n(39151),W=n(31949),Y=n(57266),J=n(70680),K=n(4606),ee=n(3010),te=n(37802);function ne(e){return ne="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ne(e)}function re(e){return function(e){if(Array.isArray(e))return oe(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||ae(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 ae(e,t){if(e){if("string"==typeof e)return oe(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?oe(e,t):void 0}}function oe(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var ie=o.T.encloseNamespace("shared.audienceFilter");function le(e){var t=[];return Object.keys(e).forEach((function(n){e[n]&&t.push.apply(t,re(e[n]))})),t}function se(e){var t,n,a=(t=r.useState(s.t.deepClone(e)),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return l}}(t,n)||ae(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.")}()),o=a[0],i=a[1];return[o,function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];i(function(e,t){if(!e.length)return{users:null,classrooms:null,classroomGroups:null};var n=Object.assign({},t);return e.forEach((function(e){var t,r;switch(e.object.typeId){case S.E.User:r="users";break;case S.E.Classroom:r="classrooms";break;case S.E.ClassroomGroup:r="classroomGroups"}var a=e.object.id.toString(),o=null!==(t=n[r])&&void 0!==t?t:[];e.selected?o.push(a):o=o.filter((function(e){return e.toString()!==a})),n=Object.assign(Object.assign({},n),function(e,t,n){return(t=function(e){var t=function(e){if("object"!=ne(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=ne(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==ne(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},r,v.m.uniq(o)))})),n}(t,o))}]}const ce={toggle:"A0vBV"};function ue(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return me(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)?me(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function me(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function de(e){var t,n,a,o,m,d=p.B.getAudienceAppLinkParams(),g=i.a.useBasicFetch(W.N.token()),y=i.a.useBasicFetch(W.N.currentUser()),h=i.a.useBasicFetch(X.L.config()),b=i.a.useBasicFetch(f.getPinnedClassrooms(null===(t=y.data)||void 0===t?void 0:t.id,null===(n=y.data)||void 0===n?void 0:n.customerId)),E=function(e){var t=(0,J.I0)();function n(t){return f.getPublished(e,t)}return(0,ee.i)(n,(function(e){i.a.getFetch(t)(n(e))}))}(null===(a=y.data)||void 0===a?void 0:a.id),C=function(e,t){var n,r,a,o=(0,K.U)(e.users).users,l=(0,te.r)(null).hasClassrooms,s=i.a.useBasicFetch((null===(n=e.classrooms)||void 0===n?void 0:n.length)&&l&&f.getClassroomsById(e.classrooms)),c=i.a.useBasicFetch((null===(r=e.classroomGroups)||void 0===r?void 0:r.length)&&l&&f.getClassroomGroupsById(e.classroomGroups));if(!l)return o||[];var u=o||[],m=v.m.uniq([].concat(re(s.data||[]),re(t||[])),"id"),d=null!==(a=c.data)&&void 0!==a?a:[];return[].concat(re(u),re(m),re(d))}(d,E.items),k=function(e){var t,n,r,a=v.m.uniq(null!==(t=e.classrooms)&&void 0!==t?t:[]),o=v.m.uniq(null!==(n=e.classroomGroups)&&void 0!==n?n:[]),l=v.m.uniq(null!==(r=e.users)&&void 0!==r?r:[]),s=!!a.length&&0===o.length&&0===l.length,c=!!o.length&&0===a.length&&0===l.length,u=!!l.length&&0===a.length&&0===o.length,m=!a.length&&!o.length&&!l.length,d=s&&1===a.length,p=c&&1===o.length,g=i.a.useBasicFetch(d&&f.classroom(a[0])),y=i.a.useBasicFetch(p&&f.classroomGroup(o[0]));if(m)return ie("noFilter");if(d){if(!g.data)return;if(g.data.typeId===S.E.Classroom)return g.data.name}if(p){if(!y.data)return;if(y.data.typeId===S.E.ClassroomGroup)return y.data.name}if(s)return ie("classrooms",{smartCount:a.length});if(c)return ie("groups",{smartCount:o.length});if(u)return ie("users",{smartCount:l.length});var h=[];a.length&&h.push(ie("classrooms",{smartCount:a.length})),o.length&&h.push(ie("groups",{smartCount:o.length})),l.length&&h.push(ie("users",{smartCount:l.length}));var b=h.pop();return"".concat(h.join(", ")," ").concat(ie("and")," ").concat(b)}(d),I=ue(se(d),2),j=I[0],w=I[1],A=null===(o=b.data)||void 0===o?void 0:o.data.map((function(e){return e.id.toString()})),N={classrooms:function(){var e;return(null===(e=E.items)||void 0===e?void 0:e.length)?E.items.filter((function(e){return!(null==A?void 0:A.includes(e.id.toString()))})).map((function(e){return e.id})):[]}()},x=ue(r.useState(!1),2),O=x[0],F=x[1];function U(){var e,t,n,r,a,o;Y.e.updateParams(s.t.deepClone(j),{merge:!0}),c.k.logUserAction({users:null!==(t=null===(e=null==j?void 0:j.users)||void 0===e?void 0:e.length)&&void 0!==t?t:0,classrooms:null!==(r=null===(n=null==j?void 0:j.classrooms)||void 0===n?void 0:n.length)&&void 0!==r?r:0,classroomGroups:null!==(o=null===(a=null==j?void 0:j.classroomGroups)||void 0===a?void 0:a.length)&&void 0!==o?o:0},{actionType:u.Vw.Filter,descriptor:u.OR.Audience,location:u.LZ.AudienceFilter,entity:u.py.Filter})}var P=!!h.data&&E.hasCompleted&&b.hasCompleted;if(function(){var e;return!(null===(e=E.items)||void 0===e?void 0:e.length)}())return r.createElement(r.Fragment,null);var T=Object.values(d).some((function(e){return Array.isArray(e)&&e.length>0}));return r.createElement(l.Z,{className:null!==(m=e.className)&&void 0!==m?m:"",onToggle:function(e){F(e),e||U()},show:O},r.createElement(l.Z.Toggle,{id:"audience-filter-toggle",variant:"outline-dark",className:"no-caret ".concat(ce.toggle," ").concat(T?"bg-dark text-white":"")},k),r.createElement(l.Z.Menu,{className:"py-0",align:"end"},P&&r.createElement($,{gatewayApiUrl:h.data.gatewayApiUrl,userToken:g.data,audienceObjects:C,selectedIds:le(j),suggestedIds:le(N),pinnedIds:A,onSelect:w,imageCdnUrl:h.data.imageCdnUrl,currentUser:y.data,hasClassroomsFeature:e.hasClassroomsFeature,onClickApply:function(){U(),F(!1)}})))}var fe=n(87801),pe=n(16714),ge=n(1666),ve=n(54405),ye=n(25882),he=n(79967),be=n(22902),Ee=n(79612),Se=n(46390),Ce=n(86099),ke=n(99746),Ie=n(15611),je=n(83345);const we={noCaret:"_F6P_",filterContainer:"ZBgdA"};function Ae(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return l}}(e,t)||xe(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ne(e){return function(e){if(Array.isArray(e))return Oe(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||xe(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 xe(e,t){if(e){if("string"==typeof e)return Oe(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Oe(e,t):void 0}}function Oe(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var Fe="insights.insightsTypeFilters",Ue=o.T.encloseNamespace(Fe);function Pe(e){var t=e.breakpoints.xs||e.breakpoints.sm,n=[].concat(Ne(t?[{label:Ue("interactives"),filter:S.E.Interactive},{label:Ue("videos"),filter:S.E.Video},{label:Ue("clips"),filter:S.E.Clip}]:[]),[{label:Ue("playlists"),filter:S.E.Playlist},{label:Ue("series"),filter:S.E.Series}]),o=e.typeIdParams.filter((function(e){return n.some((function(t){return e===t.filter}))})),i=Ae(r.useState(!1),2),s=i[0],c=i[1],u=Ae(r.useState(o),2),m=u[0],d=u[1];function f(){var t=e.appLink.params;a.Q.C$.trigger(Object.assign(Object.assign({},e.appLink),{params:Object.assign(Object.assign({},t),{typeId:v.m.uniq([].concat(Ne(e.typeIdParams),Ne(m)))})}))}function p(){d([]);var t=e.appLink.params;a.Q.C$.trigger(Object.assign(Object.assign({},e.appLink),{params:Object.assign(Object.assign({},t),{typeId:[]})}))}return r.createElement("div",{className:"d-flex align-items-center fw-semibold"},r.createElement("p",{className:"d-none d-md-inline h6 mb-0"},r.createElement(je.x,{namespace:Fe,phrase:"filters"})),r.createElement("div",{className:"".concat(we.filterContainer," d-flex flex-grow-1 flex-md-grow-0 border-start ps-0 ps-md-3 ms-0 ms-md-3 gap-2")},r.createElement("div",{className:"d-none d-md-flex gap-2"},r.createElement(Te,{typeId:S.E.Interactive,typeFilters:e.typeIdParams,appLink:e.appLink}),r.createElement(Te,{typeId:S.E.Video,typeFilters:e.typeIdParams,appLink:e.appLink}),r.createElement(Te,{typeId:S.E.Clip,typeFilters:e.typeIdParams,appLink:e.appLink})),r.createElement(l.Z,{onToggle:function(e){c(e),e||f()},show:s,className:"col"},r.createElement(l.Z.Toggle,{className:"".concat(we.noCaret," col-12 col-md-auto"),variant:o.length?"dark":"outline-dark"},r.createElement("div",{className:"d-flex align-items-center justify-content-center gap-2 fw-semibold mb-0"},r.createElement(E.x,{svgName:k.vn.Filter,className:"svg-container d-inline-block d-md-none"}),r.createElement(je.x,{namespace:Fe,phrase:t?"filters":"moreFilters"}),o.length?" - ".concat(o.length):"")),r.createElement(l.Z.Menu,null,r.createElement("div",{className:"mx-1 px-2 py-1 mb-0"},r.createElement("h2",{className:"h6 mb-3"},r.createElement(je.x,{namespace:Fe,phrase:"types"})),r.createElement("ul",{className:"list-unstyled me-5"},n.map((function(n){return r.createElement("li",{key:"".concat(n.label,"-filter"),className:"my-1"},r.createElement(h.X,{id:"".concat(n.label,"-filter"),label:n.label,onChange:function(){return e=n.filter,void d(v.m.addOrRemoveImmutable(m,e));var e},checked:(a=n.filter,t?!!m.find((function(e){return e===a}))||!!e.typeIdParams.find((function(e){return e===a})):!!m.find((function(e){return e===a})))}));var a}))),r.createElement("div",{className:"d-flex justify-content-between"},r.createElement("button",{onClick:function(){p(),c(!1)},className:"btn btn-link text-secondary p-0 mb-0"},r.createElement(je.x,{namespace:Fe,phrase:"resetAll"})),r.createElement("button",{onClick:function(){f(),c(!1)},className:"btn btn-link text-info p-0 mb-0"},r.createElement(je.x,{namespace:Fe,phrase:"apply"}))))))),!!e.typeIdParams.length&&r.createElement("button",{onClick:p,className:"d-none d-md-block btn btn-link ms-1"},r.createElement(je.x,{namespace:Fe,phrase:"resetAll"})))}function Te(e){var t=e.typeFilters.includes(e.typeId),n=e.appLink,a=n.params,o=v.m.addOrRemoveImmutable(e.typeFilters,e.typeId),i=Object.assign(Object.assign({},n),{params:Object.assign(Object.assign({},a),{typeId:o})});function l(){return e.typeId===S.E.Video?"videos":e.typeId===S.E.Clip?"clips":e.typeId===S.E.Interactive?"interactives":void 0}return r.createElement(Ie.F,{className:"btn ".concat(t?"btn-dark":"btn-outline-dark"," fw-semibold"),appLink:i,ariaLabel:"".concat(Ue("ariaFilterBy"),": ").concat(Ue(l()))},r.createElement(je.x,{namespace:Fe,phrase:l()}))}var Le=n(51401),Re=n(18006),Be=n(9566);const Ge={background:"HAuP3"};var Me="myShares.demoInsights",_e=o.T.encloseNamespace(Me);function qe(e){var t=e.liteUrl.includes("staging"),n=e.breakpoints.xs||e.breakpoints.sm;return r.createElement("div",null,r.createElement(Le.g,{heading:_e("demoHeading"),isFirst:!0}),r.createElement("div",{className:"".concat(Ge.background," rounded-3 border-md bg-light-orange mb-4")},r.createElement(Le.F,{shareData:Object.assign(Object.assign({},Be.G),{sharedObject:Object.assign(Object.assign({},e.demoInteractive),{id:t?Re.c:Re.q})}),getObjectActions:function(){return[Object.assign(Object.assign({},Be.V),{button:!n})]},getObjectAppLink:function(){return null},imageCdnUrl:e.imageCdnUrl,yearGroups:e.yearGroups,breakpoints:e.breakpoints},r.createElement("div",{className:"d-inline-block rounded-pill bg-light-blue text-info font-size-sm mt-1 px-2"},r.createElement(je.x,{namespace:Me,phrase:"demoInsightPill"})))))}var Ve=n(67467),He=n(5056),ze=n(28001),De=n(45231),Qe=n(97958),Ze=n(99742),$e=n(14070),Xe=n(97291),We="myShares.mySharesEmptyState",Ye=o.T.encloseNamespace(We);function Je(){return r.createElement(Qe.u,null,r.createElement(Qe.u.Image,{src:Ze.W.EmptyStates.MY_VIDEOS_PUBLIC,altText:Ye("heading")}),r.createElement(Qe.u.Heading,null,r.createElement(je.x,{namespace:We,phrase:"heading"})),r.createElement(Qe.u.Info,null,r.createElement(je.x,{namespace:We,phrase:"info"})),r.createElement(Qe.u.Cta,{text:o.T.getPhrase(We,"cta"),appLink:{application:Xe.O.SIGN_UP,action:$e.e.SignUp.SIGN_UP},analyticsData:{},analyticsOptions:{actionType:u.Vw.Click,location:u.LZ.MySharesLanding,entity:u.py.AppLink,workflowPhase:u.eu.Start,descriptor:u.Yu.SignUp}}))}var Ke=n(69003),et=o.T.encloseNamespace("myShares.myShares");function tt(e){var t,n,o,l;(0,Ee.M)({title:et("myShares")});var s=(0,be.T)(),c=s.hasPermissions,u=s.hasLocalPermissions,m=(0,te.r)(null),d=m.hasShareFlowV2,f=m.hasClassrooms,p=(0,Se.G)().isPlugin,g=(0,he.k)(),v=(0,ye.v)().accessPolicy,y=(0,Ke.cl)(e.typeId),h=!u(pe.E.ViewMySharesLanding)||c(pe.C.ViewMyShares)&&d,b=d&&c(pe.C.ViewInsights),E=null===(t=null==v?void 0:v.metadata)||void 0===t?void 0:t.hasDemoInsights,S=i.a.useBasicFetch(X.L.config()),C=i.a.useBasicFetch(W.N.currentUser()),k=i.a.useBasicFetch((null===(n=C.data)||void 0===n?void 0:n.isAuthenticated)&&ge.h.yearGroups(C.data.customerId)),I=i.a.useBasicFetch(E&&ve.X.interactiveMetadata()),j=(0,De.a)(y.sentSharesParams,!0,h);return r.useEffect((function(){c(pe.C.ViewMyShares)&&d||a.Q.Ab.PageLoad("/")}),[h]),h?r.createElement("div",{className:"px-3"},r.createElement(ke.p,{analyticsUrl:null===(o=S.data)||void 0===o?void 0:o.analyticsWebUrl,hasAnalytics:c(pe.C.ViewCustomerAnalytics)}),r.createElement("div",{className:"d-flex justify-content-between border-bottom pb-3 mb-3"},r.createElement("h1",{className:"mb-1"},"Reports"),r.createElement(de,{hasClassroomsFeature:f})),r.createElement("div",{className:"mb-3"},r.createElement(Pe,{appLink:y.currentAppLink,typeIdParams:y.typeIdAppLinkParams,breakpoints:g})),E&&I.data&&r.createElement(qe,{demoInteractive:I.data,liteUrl:null===(l=S.data)||void 0===l?void 0:l.liteUrl,breakpoints:g,imageCdnUrl:j.imageCdnUrl,yearGroups:k.data}),function(){var e;return j.showPartialLoading?r.createElement(ze.L,null):j.sentShares.length?r.createElement(r.Fragment,null,r.createElement(He.R,{sentShares:j.sentShares,sharedObjects:j.sharedObjects.items,shareRecipients:j.shareRecipients.items,interactivesPendingReview:j.interactivesPendingReview.itemsArr,getObjectAppLink:Ce.Qh,getObjectActions:function(e,t){return(0,Ke.sD)(e,t,y.audienceAppLinkParams,b,p,g)},groupByDateShared:!0,breakpoints:g,hasDemoInsights:E,imageCdnUrl:null===(e=S.data)||void 0===e?void 0:e.imageCdnUrl,yearGroups:k.data}),(j.hasMore||j.isFetching)&&r.createElement(fe._,{isFetching:j.isFetching,fetchNext:j.fetchNext,nextCursor:j.nextCursor})):r.createElement(Ve.o,null)}()):r.createElement(Je,null)}}}]);
|
|
2
|
-
//# sourceMappingURL=2018-693740d206-lite.chunk.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[2614],{35115:(e,a,t)=>{t.d(a,{p:()=>d});var n=t(32735),r=t(49935),l=t(95278);const c="pJf6R",i="MSvzY",s="IFmvc",o="pOcvk";var d=n.memo((function(){return n.createElement("div",{className:"px-3"},n.createElement("div",{className:"mb-1 partial-loading-background ".concat("YrP_G")}),n.createElement("div",{className:"pb-3"},n.createElement(r.b2,{numItems:2})),n.createElement("div",{className:"pb-2"},n.createElement(l.Z,null)),n.createElement("div",{className:"d-flex align-items-center py-2"},n.createElement("div",{className:"mx-4 partial-loading-background ".concat(c)}),n.createElement("div",{className:"me-2 partial-loading-background ".concat(i)}),n.createElement("div",{className:"me-auto partial-loading-background ".concat(i)}),n.createElement("div",{className:"partial-loading-background ".concat("j62jt")})),n.createElement("ul",{className:"striped-list list-unstyled"},Array(20).fill(null).map((function(e,a){return n.createElement("li",{key:a},n.createElement("div",{className:"d-flex align-items-center py-1 px-4"},n.createElement("div",{className:"me-2 partial-loading-background ".concat(c)}),n.createElement("div",{className:"me-2 partial-loading-background ".concat("droqZ")}),n.createElement("div",{className:"w-25"},n.createElement("div",{className:"partial-loading-background ".concat("gorcb")})),n.createElement("div",{className:"me-auto d-flex"},Math.random()>.5?n.createElement(n.Fragment,null,n.createElement("div",{className:"partial-loading-background rounded-pill me-1 ".concat(s," ").concat("SdQ90")}),n.createElement("div",{className:"partial-loading-background rounded-pill ".concat(s," ").concat(o)})):n.createElement("div",{className:"partial-loading-background rounded-pill ".concat(s," ").concat(o)})),n.createElement("div",{className:"me-2 partial-loading-background ".concat(i)}),n.createElement("div",{className:"partial-loading-background ".concat("S7p4K")})))}))))}))},69583:(e,a,t)=>{t.r(a),t.d(a,{ClassroomReportsView:()=>A});var n=t(32735),r=t(23481),l=t(20354),c=t(87801),i=t(83523),s=t(1666),o=t(31949),d=t(79967),m=t(79612),u=t(99742),g=t(86099),p=t(35115),v=t(88630),E=t(31491),b=t(22602),f=t(67467),h=t(5056),N=t(28001),k=t(45231),y=t(69003);function S(e,a){(null==a||a>e.length)&&(a=e.length);for(var t=0,n=Array(a);t<a;t++)n[t]=e[t];return n}var w=r.T.encloseNamespace("classrooms.classroomStudents");function A(e){var a,t,r,A,x,j,C=(x=n.useState(!1),j=2,function(e){if(Array.isArray(e))return e}(x)||function(e,a){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var n,r,l,c,i=[],s=!0,o=!1;try{if(l=(t=t.call(e)).next,0===a){if(Object(t)!==t)return;s=!1}else for(;!(s=(n=l.call(t)).done)&&(i.push(n.value),i.length!==a);s=!0);}catch(e){o=!0,r=e}finally{try{if(!s&&null!=t.return&&(c=t.return(),Object(c)!==c))return}finally{if(o)throw r}}return i}}(x,j)||function(e,a){if(e){if("string"==typeof e)return S(e,a);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?S(e,a):void 0}}(x,j)||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.")}()),F=C[0],R=C[1],O=l.a.useBasicFetch(o.N.currentUser()),_=l.a.useBasicFetch(O.data&&v.F.getClassroom(e.id,O.data.id)),I=(0,d.k)(),M=l.a.useBasicFetch((null===(a=O.data)||void 0===a?void 0:a.isAuthenticated)&&s.h.yearGroups(O.data.customerId)),P=(0,y.cl)([]),L=(0,k.a)({scopeId:e.id},!0,!0),T=null===(r=null===(t=_.data)||void 0===t?void 0:t._integrations)||void 0===r?void 0:r.rostered;return(0,m.M)({title:w("pageTitle",{classroomName:null===(A=_.data)||void 0===A?void 0:A.name})}),(0,E._)(_),_.data?n.createElement(b.R,{classroom:_.data,currentUser:O.data,onTogglePin:console.log,activeTab:"reports",isRostered:T},n.createElement("div",{className:"d-flex gap-3 m-3 justify-content-end"},n.createElement("label",{className:"mb-0"},"View as student feed"),n.createElement(i.Z,{on:F,onClick:function(){return R(!F)}})),F&&n.createElement("img",{src:u.W.CLASSROM_FEED}),!F&&(L.showPartialLoading?n.createElement(N.L,null):L.sentShares.length?n.createElement(n.Fragment,null,n.createElement(h.R,{sentShares:L.sentShares,sharedObjects:L.sharedObjects.items,shareRecipients:L.shareRecipients.items,interactivesPendingReview:L.interactivesPendingReview.itemsArr,getObjectAppLink:g.Qh,getObjectActions:function(e,a){return(0,y.sD)(e,a,P.audienceAppLinkParams,!0,!1,I)},imageCdnUrl:L.imageCdnUrl,groupByDateShared:!0,breakpoints:I,yearGroups:M.data,hasDemoInsights:!1}),(L.hasMore||L.isFetching)&&n.createElement(c._,{isFetching:L.isFetching,fetchNext:L.fetchNext,nextCursor:L.nextCursor})):n.createElement(f.o,null))):n.createElement(p.p,null)}}}]);
|
|
2
|
-
//# sourceMappingURL=2614-bc2fef6ae0-lite.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/2952-4f5abfce6d-lite.chunk.js","mappings":"qNAoBA,SAASA,EAAYC,GACnB,OACE,kCACKA,EAAMC,IAAIC,SACX,uBAAKC,UAAWH,EAAMC,IAAIG,KAAO,OAAS,IACxC,gBAAC,IAAY,CAACF,QAASF,EAAMC,IAAIC,WAIpCF,EAAMC,IAAIG,KAEmB,iBAArBJ,EAAMC,IAAII,OACjB,uBAAKF,UAAU,QACb,gBAAC,IAAK,CAACG,KAAM,UAAiBC,KAAMP,EAAMC,IAAII,SAKxD,CA8BM,SAAUG,EAAgBR,G,MAW9B,OACE,uBAAKG,UAA0B,QAAf,EAAAH,EAAMG,iBAAS,QAAI,GAAIM,IAAKT,EAAMU,cAChD,sBAAIP,UAAS,qDACwB,oBAAsB,qBACvDH,EAAMW,aAAe,gBAAqB,GAAE,qBAC5CX,EAAMY,cAAa,aAEpBZ,EAAMa,KAAKC,KAAI,SAACb,EAAKc,GACpB,OACE,sBACEZ,UAAS,gCACD,QAAU,YAAIF,EAAIe,OAAS,eAAiB,uBAAsB,6BACtEf,EAAIG,KAAO,aAAkB,GAAE,YAAIH,EAAIE,UAAS,oBAEpDc,IAAKF,GAEJd,EAAIiB,QACH,gBAAC,IAAO,CACNA,QAASjB,EAAIiB,QACbC,cAAelB,EAAIkB,cACnBC,iBAAkBnB,EAAImB,iBACtBjB,UAAS,sKAE4C,YAAc,yBAGnE,gBAACJ,EAAW,CAACE,IAAKA,KAGpB,gBAAC,IAAS,CACRE,UAAS,sKAE4C,YAAc,wBAEnEkB,QAAS,WAAF,OA5CvB,SAAqBpB,IACfA,EAAIe,QAAWf,EAAIqB,WAGvBrB,EAAIqB,WAEArB,EAAIkB,eAAiBlB,EAAImB,kBAC3B,kBAA8BnB,EAAIkB,cAAelB,EAAImB,kBACzD,CAoC+BG,CAAYtB,EAAI,GAE/B,gBAACF,EAAW,CAACE,IAAKA,KAK5B,KAIR,CA5DAO,EAAgBgB,aAAe,CAC7Bb,aAAc,K,6DChEhB,SAAgB,YAAc,SCIxB,SAAUc,IACd,OACE,uBAAKtB,UAAS,qCAAgC,oBAAsB,YAAI,gBAE5E,C,yGCkBMuB,EAA8B,CAClCC,SAAU,IACVC,UAAW,CACTC,OAAQ,IACRC,UAAW,IACXC,OAAQ,IACRC,QAAS,KAEXC,WAAY,IACZC,oBAAqB,KAGjB,SAAUC,EACdC,GAMkC,IALlCC,EAAA,uDAA+B,CAAC,EAKhCC,EAAA,uDAAgC,CAAC,EAEjC,GAAKF,EAAL,CAGA,IAAIG,EAGFA,EADmB,iBAAVH,EACIA,EAEAA,EAAKI,OAGpB,IAAMC,EAAW,OAAH,wBACTf,GACAW,GAGAE,GAGA,yBAAmCA,KAGpCA,IAAe,mBAMfA,IAAe,aAMfA,IAAe,cAUdD,EAAUL,YACb,aAAuB,IAAIQ,EAASR,YAN/BK,EAAUV,WACb,aAAuB,IAAIa,EAASb,UAAUI,SAX3CM,EAAUX,UACb,aAAuB,IAAIc,EAASd,UAPjCW,EAAUJ,qBACb,aAAuB,IAAI,KAvBvB,CA6CV,C,6DCxFA,SAASQ,EAAiBC,GACxB,OAAOA,EAAW7B,KAAI,SAAA8B,GAAG,OAAIA,EAAIL,UAAU,IAAEM,KAAK,IACpD,CAGM,SAAUC,EACdC,EACAC,EACAC,GAEA,IAAMN,EAAaO,MAAMC,QAAQJ,GAAeA,EAAc,CAACA,IAE/D,IAAAK,YAAU,WACRT,EAAWU,SAAQ,SAAAT,IACjB,OAAgBA,EAAIL,WAAYS,EAAcC,EAChD,GACF,GAAG,CAAEP,EAAiBC,GAAaK,EAAcC,GACnD,C,kDCDaK,EAAqB,CAChCC,kBAAiB,SAACf,GAChB,GAAwB,iBAAZA,EACV,OAAOA,EAET,GAAwB,iBAAZA,EAAsB,CAChC,GAAe,IAAXA,EACF,OAAO,aAET,GAAe,IAAXA,EACF,OAAO,WAET,GAAe,IAAXA,EACF,OAAO,YACV,CAED,OAAO,IACT,EAEAgB,kBAAiB,SAAChB,GAChB,GAAwB,iBAAZA,EACV,OAAOA,EAET,GAAwB,iBAAZA,EAAsB,CAChC,GAAIA,IAAW,aACb,OAAO,EAET,GAAIA,IAAW,WACb,OAAO,EAET,GAAIA,IAAW,aACb,OAAO,CACV,CAED,OAAO,IACT,E,+OC3CF,IACMiB,EAAY,qBADA,4BAGZC,EAAc,SAACC,GACnB,OAAO,8BAA0CA,EACnD,EAQM,SAAUC,EAAc5D,GAE5B,I,IAA8E,G,EAA5C,WAAe0D,EAAY1D,EAAM2D,Y,EAAW,E,o4BAAtEE,EAAQ,KAAEC,EAAW,KAEvBC,GAAS,SAiEf,OA/DA,aAAgB,WACVL,EAAY1D,EAAM2D,aAAeE,GAGrCC,GAAaD,EACf,GAAG,CAACH,EAAY1D,EAAM2D,aA2DpB,gBAAC,IAAS,CAACtC,QAzDb,WACEyC,GAAaD,GAEb7D,EAAMgE,UAAUH,GAAU,kBAG5B,SAAmBA,GACjB,GAAIA,EAcF,OAbA,kBAA8B,CAAEI,GAAIjE,EAAM2D,UAAUM,IAAM,CACxDC,SAAUlE,EAAMmE,gBAChBC,WAAY,eACZC,WAAY,QACZC,OAAQ,eACRC,cAAe,qBAGjBR,EAAOS,QAAQf,EAAU,aAAc,CACrCgB,cAAezE,EAAM2D,UAAUvD,KAC/BsE,YAAY,KAMhB,kBAA8B,CAAET,GAAIjE,EAAM2D,UAAUM,IAAM,CACxDC,SAAUlE,EAAMmE,gBAChBC,WAAY,eACZC,WAAY,SACZC,OAAQ,eACRC,cAAe,gBAGjBR,EAAOS,QAAQf,EAAU,eAAgB,CACvCgB,cAAezE,EAAM2D,UAAUvD,KAC/BsE,YAAY,IAEhB,CAjCkCC,EAAWd,EAAS,IAAE,kBAoCtDC,EADec,EAnCqDf,QAsChEe,EACFb,EAAOc,MAAMpB,EAAU,aAAc,CACnCgB,cAAezE,EAAM2D,UAAUvD,KAC/BsE,YAAY,KAMhBX,EAAOc,MAAMpB,EAAU,WAAY,CACjCgB,cAAezE,EAAM2D,UAAUvD,KAC/BsE,YAAY,MAdhB,IAAiBE,CAnC8D,GAC/E,EAqDgCzE,UAAW0D,EAAW,cAAgB,IAClE,gBAAC,IAAY,CACX3D,QAAS2D,EAAW,UAAoB,iBACxCiB,KAAM,EAAAC,EAAA,SAId,C,8FC/FaC,EAA+B,SAACC,G,MAMrCC,GAAyBC,GALJ,SAAnBA,gBAKsC,yBAExCC,EAAc,kBAAkC,mBAMhDC,EAAQ,mBAA8BH,IAA0C,QAAhB,EAAAE,EAAY7E,YAAI,eAAE+E,aACtF,sBAAoCL,EAAaG,EAAY7E,KAAK+E,aAC9DC,EAAS,mBAA8BL,GAC3C,uBAAqCD,IAGvC,GAAIC,EACF,MAAO,CACLM,WAAW,EACXC,SAAS,EACTC,WAAW,GAIf,IAAKL,EAAMM,eAAiBJ,EAAOI,eAAiBP,EAAYO,aAC9D,MAAO,CAAEH,WAAW,GAEtB,IAAMI,EAAgBR,EAAY7E,KAAK0D,GAAG4B,WAEpCC,IAAqBP,EAAOhF,KAAKwF,MAAK,SAAAC,GAAK,OAAIA,EAAM/B,GAAG4B,aAAeD,CAAa,IACpFK,IAAuBZ,EAAM9E,KAAKwF,MAAK,SAAAV,GAAK,OAAIA,EAAMpB,GAAG4B,aAAeD,CAAa,IAE3F,MAAO,CACLJ,WAAW,EACXE,UAAWI,GAAoBG,EAC/BR,QAASK,EAEb,C,orCC3CA,IAAMI,EAAY,wCAELC,EAA2B,YACtC,oB,4FAAA,S,qYAAA,SACQ,2BACR,CAEA,O,qRAAA,M,EAAA,G,EAAA,iBACA,WACE,MAAO,4BACT,GAEA,mBACA,WACE,OAAOC,EAAA,YAA0BF,EAAW,UAC9C,GAEA,uBACA,WACE,OAAOE,EAAA,YAA0BF,EAAW,cAC9C,GAEA,eACA,WACE,MAAO,CACLG,KAAMD,EAAA,YAA0BF,EAAW,OAC3ChF,QAAS,CACPoF,YAAa,eACbC,OAAQ,qBAGd,M,6EAAC,CA7BqC,CAAQC,EAAA,G,qjCCFhD,IAAM,EAAY,oCAELC,EAAuB,YAClC,oB,4FAAA,S,qYAAA,SACQ,2BACR,CAEA,O,qRAAA,M,EAAA,G,EAAA,iBACA,WACE,MAAO,wBACT,GAEA,mBACA,WACE,OAAOL,EAAA,YAA0B,EAAW,UAC9C,GAEA,uBACA,WACE,OAAOA,EAAA,YAA0B,EAAW,cAC9C,GAEA,eACA,WACE,MAAO,CACLC,KAAMD,EAAA,YAA0B,EAAW,OAC3ClF,QAAS,CACPoF,YAAa,eACbC,OAAQ,qBAGd,M,6EAAC,CA7BiC,CAAQC,EAAA,GCE/BE,EAA2B,SAAC/C,GACvC,IAAQwB,GAAmB,EAAAwB,EAAA,KAAnBxB,gBAER,OAAqBxB,EAAW,CAC9BhC,SAAU8E,EACV7E,UAAW,CACTI,QAASmD,EAAeyB,EAAA,kBAAiCT,EAA6BU,EAAA,IAG5F,C,iOCJMX,EAAY,mBAELY,EAAsB,SAAC7B,EAAqBG,EAA0B2B,GACjF,IAAMC,GAAW,OAAc,YACzBC,GAAc,OAA6BhC,GAE3C9D,EAAgB,CAAE8C,GAAIgB,GAEtBiC,EAAyC,CAC7C5C,OAAQ,eACRC,cAAe,WACfL,SAAU,gBAGNiD,EAAc,4BAEdC,EAA2B,GAsFjC,OApFIH,EAAYxB,SACd2B,EAAQC,KAAK,CACXC,MAAO,EACPC,MAAOnB,EAAA,YAA0BF,EAAW,iBAC5ChF,QAAS,CACPoF,YAAa,eACbC,OAAQ,8BACRiB,KAAM,CAACvC,IAETwC,SAAUV,EACVW,QAASX,EAAWX,EAAA,YAA0BF,EAAW,uBAAyB,GAClF/E,cAAAA,EACAC,iBAAkB,OAAF,wBACX8F,GAAoB,CACvB9C,WAAY,YAEdlE,QAAS,UACTyH,QAASX,EACT7G,UAAW4G,EAAW,YAAH,OAAeI,GAAiBH,EAAyB,GAAdG,IAIlEC,EAAQC,KAAK,CACXC,MAAO,GACPC,MAAOnB,EAAA,YAA0BF,EAAW,oBAC5ChF,QAAS,CACPoF,YAAa,eACbC,OAAQ,kCACRiB,KAAM,CAACvC,IAETwC,SAAUV,EACVW,QAASX,EAAWX,EAAA,YAA0BF,EAAW,uBAAyB,GAClFyB,QAAUX,IAAaC,EAAYxB,QACnCtF,UAAW4G,EAAW,WAAeC,GAAaC,EAAYxB,QAAyB,GAAd0B,IAGvEF,EAAYxB,SACd2B,EAAQC,KAAK,CACXC,MAAO,GACPC,MAAOnB,EAAA,YAA0BF,EAAW,WAC5C/E,cAAAA,EACAsG,SAAUV,EACVW,QAASX,EAAWX,EAAA,YAA0BF,EAAW,uBAAyB,GAClF9E,iBAAkB,OAAF,wBACX8F,GAAoB,CACvB9C,WAAY,aACZC,WAAY,UAEdnD,QAAS,CACPoF,YAAa,eACbC,OAAQ,iCACRiB,KAAM,CAACvC,IAET9E,UAAW4G,EAAW,WAAa,MAIlCE,EAAYxB,SAAWwB,EAAYvB,YAAcN,EAAYwC,OAASC,EAAA,SACzET,EAAQC,KAAK,CACXC,MAAO,GACPC,MAAOnB,EAAA,YAA0BF,EAAW,kBAC5CuB,SAAUV,EACVW,QAASX,EAAWX,EAAA,YAA0BF,EAAW,uBAAyB,GAClF/F,UAAW4G,EAAW,WAAa,cACnC5F,cAAe,OAAF,wBACRA,GAAa,CAChB2G,UAAW1C,EAAYnB,KAEzB7C,iBAAkB,OAAF,wBACX8F,GAAoB,CACvB9C,WAAY,gBACZC,WAAY,YAEdnD,QAAS,CACPoF,YAAa,eACbC,OAAQ,+BACRiB,KAAM,CAACvC,GACP8C,OAAQ,CACNC,WAAY,CAAC5C,EAAYnB,QAM1BmD,CACT,ECjGM3D,EAAY2C,EAAA,mBADA,8BAWZ,SAAU6B,EAAgBjI,GAC9B,IAAMiH,GAAc,OAA6BjH,EAAM2D,UAAUM,IAE3DmD,EAAUN,EAAoB9G,EAAM2D,UAAUM,GAAIjE,EAAMoF,YAAapF,EAAMkI,YAE3EC,EAAkB7E,EAAA,oBAAqCtD,EAAM2D,UAAUnB,QAEvE3B,EAAkB,CAAC,CACvBT,KAAM,UACNc,QAAS,CACPoF,YAAa,eACbC,OAAQ,iCACRiB,KAAM,CAACxH,EAAM2D,UAAUM,KAEzBjD,OAA4B,YAApBhB,EAAMoI,WACb,CACDhI,KAAMqD,EAAU,YAChBvC,QAAS,CACPoF,YAAa,eACbC,OAAQ,kCACRiB,KAAM,CAACxH,EAAM2D,UAAUM,KAEzBjD,OAA4B,aAApBhB,EAAMoI,WACb,CACDhI,KAAMqD,EAAU,UAChBvC,QAAS,CACPoF,YAAa,eACbC,OAAQ,gCACRiB,KAAM,CAACxH,EAAM2D,UAAUM,KAEzBjD,OAA4B,WAApBhB,EAAMoI,WACb,CACDhI,KAAMqD,EAAU,YAChBvC,QAAS,CACPoF,YAAa,eACbC,OAAQ,kCACRiB,KAAM,CAACxH,EAAM2D,UAAUM,KAEzBjD,OAA4B,aAApBhB,EAAMoI,YAGbC,QAAO,SAAApI,GAAG,OAAKD,EAAMkI,YAAcjI,EAAIG,OAASqD,EAAU,SAAS,IAatE,OAVA,aAAgB,WACV0E,IAAoBG,EAAA,UAGxB,eAA2B,CACzBhC,YAAa,eACbC,OAAQ,qBACP,CAAEgC,SAAS,GAChB,GAAG,CAACvI,EAAM2D,UAAUnB,UAEdyE,EAAYzB,YAAcyB,EAAYvB,WAAcyC,IAAoBG,EAAA,SACrE,iCAGP,uBAAKnI,UAAU,0BACb,6BACKiH,EAAQoB,QACT,uBAAKrI,UAAU,aACb,gBAACsI,EAAA,EAAgB,CACfrB,QAASA,EACTsB,yBAAyB,0BAK/B,uBAAKvI,UAAU,yCACb,gBAACyD,EAAA,EAAa,CACZD,UAAW3D,EAAM2D,UACjBK,SAAUhE,EAAM2I,YAChBxE,gBAAiB,kBAGrB,sBAAIhE,UAAU,iBAAiBH,EAAM2D,UAAUvD,OAGjD,uBAAKD,UAAU,aACb,gBAACyI,EAAA,GAAW,CACVC,YAAa,CACX,CACEzI,KAAMqD,EAAU,wBAChBvC,QAAS,CACPoF,YAAa,eACbC,OAAQ,sBAGZ,CAAEnG,KAAMJ,EAAM2D,UAAUvD,KAAMY,QAAQ,OAK5C,uBAAKb,UAAU,QACb,gBAACK,EAAA,EAAe,CAACK,KAAMA,KAGxBb,EAAM8I,SAGb,C,mCCpIA,SAAgB,gBAAkB,QAAQ,IAAM,QAAQ,SAAW,QAAQ,YAAc,QAAQ,QAAU,Q","sources":["file:///app/packages/libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx","file:///app/packages/libs/shared/src/components/pill-tab-selector/partial-loading/partial-pill-tab-selector.scss","file:///app/packages/libs/shared/src/components/pill-tab-selector/partial-loading/PartialPillTabSelector.tsx","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/utils/ObjectStatusHelper.ts","file:///app/packages/projects/lite/src/apps/classrooms/components/classroom-star/ClassroomStar.tsx","file:///app/packages/projects/lite/src/apps/classrooms/hooks/useClassroomPermissions.ts","file:///app/packages/projects/lite/src/apps/classrooms/errors/cannot-access-classroom/CannotAccessClassroomError.ts","file:///app/packages/projects/lite/src/apps/classrooms/errors/classroom-not-found/ClassroomNotFoundError.ts","file:///app/packages/projects/lite/src/apps/classrooms/hooks/useHandleClassroomErrors.ts","file:///app/packages/projects/lite/src/apps/classrooms/hooks/useClassroomActions.ts","file:///app/packages/projects/lite/src/apps/classrooms/layouts/ClassroomLayout.tsx","file:///app/packages/libs/shared/src/components/pill-tab-selector/pill-tab-selector.scss"],"sourcesContent":["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","// extracted by mini-css-extract-plugin\nexport default {\"partialSize\":\"ntGsj\"};","import React from 'react';\n\nimport styles from '../pill-tab-selector.scss';\nimport partialStyles from './partial-pill-tab-selector.scss';\n\nexport function PartialPillTabSelector(): JSX.Element {\n return (\n <div className={`partial-loading-background ${styles.pillTabSelector} ${partialStyles.partialSize}`} />\n );\n}","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n internalServerError?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError,\n internalServerError: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.InternalServer) {\n if (!ignoreMap.internalServerError)\n Core.ErrorHelper.throw(new UnspecifiedError());\n return;\n }\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import { ObjectStatus } from 'libs/shared/enums/ObjectStatus';\n\n/**\n * Some of our APIs return enum values as a string, and others return enum values as a number.\n * \n * This means if a HTTP request to one API returns an object with it's enum values in string\n * form, and another HTTP request returns that same object with it's enum values in number form,\n * Flight will cache the object with it's enum values in number form.\n * \n * This can cause bugs in our frontend code where we're doing checks like `(obj.status === ObjectStatus.Active)`\n * because TypeScript enums only handle one data type (number or string). Even if the object is active, if the\n * it's cached as a data type that doesn't match what our TypeScript `ObjectStatus` enum's data type is, then\n * that check would return false, introducing bugs.\n * \n * A prime example of this is Classroom objects being returned from User API with string enums, but being returned\n * from Classroom API with number enums.\n * \n * For that reason, we sadly need to check object status with this helper. Hopefully one day this can be deleted\n * when all of our APIs return enum values consistently as 1 data type.\n * \n * Example of a bug introduced by this inconsistency: https://clickview.atlassian.net/browse/INBOX-3024\n */\nexport const ObjectStatusHelper = {\n getStatusAsString(status: ObjectStatus): ObjectStatus {\n if (typeof (status) === 'string')\n return status;\n\n if (typeof (status) === 'number') {\n if (status === 0)\n return ObjectStatus.Disabled;\n\n if (status === 1)\n return ObjectStatus.Active;\n\n if (status === 2)\n return ObjectStatus.Inactive;\n }\n\n return null;\n },\n\n getStatusAsNumber(status: ObjectStatus): 0 | 1 | 2 {\n if (typeof (status) === 'number')\n return status;\n\n if (typeof (status) === 'string') {\n if (status === ObjectStatus.Disabled)\n return 0;\n\n if (status === ObjectStatus.Active)\n return 1;\n\n if (status === ObjectStatus.Inactive)\n return 2;\n }\n\n return null;\n }\n};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, ToggleDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Classroom } from 'libs/shared/interfaces';\nimport { FavouriteHelper } from 'libs/shared/utils/FavouriteHelpers';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'classrooms.classroomStar';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst getIsPinned = (classroom: Classroom) => {\n return FavouriteHelper.isFavouritedByCurrentUser(classroom);\n};\n\ninterface ClassroomStarProps {\n classroom: Classroom;\n onToggle: (shouldPin: boolean, onSuccess: () => void, onError: () => void) => void;\n locationContext: LocationContext;\n}\n\nexport function ClassroomStar(props: ClassroomStarProps): JSX.Element {\n // Local state is used to provide instant feedback when the user clicks on the star.\n const [ isPinned, setIsPinned ] = React.useState(getIsPinned(props.classroom));\n\n const alerts = useAlerts();\n\n React.useEffect(() => {\n if (getIsPinned(props.classroom) === isPinned)\n return;\n\n setIsPinned(!isPinned);\n }, [getIsPinned(props.classroom)]);\n\n function onToggle(): void {\n setIsPinned(!isPinned);\n\n props.onToggle(!isPinned, () => onSuccess(!isPinned), () => onError(isPinned));\n }\n\n function onSuccess(isPinned: boolean): void {\n if (isPinned) {\n AnalyticsHelper.logUserAction({ id: props.classroom.id }, {\n location: props.locationContext,\n actionType: UserAction.Favourite,\n descriptor: ToggleDescriptor.On,\n entity: EntityType.Classroom,\n workflowPhase: WorkflowPhase.Complete\n });\n \n alerts.success(getPhrase('pinSuccess', {\n classroomName: props.classroom.name,\n escapeText: true\n }));\n \n return;\n }\n\n AnalyticsHelper.logUserAction({ id: props.classroom.id }, {\n location: props.locationContext,\n actionType: UserAction.Favourite,\n descriptor: ToggleDescriptor.Off,\n entity: EntityType.Classroom,\n workflowPhase: WorkflowPhase.Complete\n });\n\n alerts.success(getPhrase('unpinSuccess', {\n classroomName: props.classroom.name,\n escapeText: true\n }));\n }\n\n function onError(prevState: boolean): void {\n setIsPinned(prevState);\n\n if (prevState) {\n alerts.error(getPhrase('unpinError', {\n classroomName: props.classroom.name,\n escapeText: true\n }));\n\n return;\n }\n\n alerts.error(getPhrase('pinError', {\n classroomName: props.classroom.name,\n escapeText: true\n }));\n }\n\n return (\n <DivButton onClick={onToggle} className={isPinned ? 'text-yellow' : ''}>\n <SvgContainer\n svgName={isPinned ? cvSvgLibrary.Star : cvSvgLibrary.StarOutline}\n size={SvgContainerSize.Medium}\n />\n </DivButton>\n );\n}","import { Flight } from 'libs/common/flight';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { CurrentUser, User } from 'libs/shared/interfaces';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\n\nexport const useCheckClassroomPermissions = (classroomId: string) => {\n const { hasPermissions } = usePermissions();\n\n /**\n * This is the highest-level permission that overrides all other permissions\n */\n const canManageAllClassrooms = hasPermissions(PermissionName.ManageAllClassrooms);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n /**\n * If the user has permission to manage all classrooms, there's no need to check if they're owner/invitee\n * as these permissions no longer matter.\n */\n const staff = Flight.useBasicFetch<User[]>(!canManageAllClassrooms && currentUser.data?.customerId &&\n ClassroomRequests.getClassroomStaff(classroomId, currentUser.data.customerId));\n const owners = Flight.useBasicFetch<User[]>(!canManageAllClassrooms &&\n ClassroomRequests.getClassroomOwners(classroomId));\n\n // Has full classroom management power.\n if (canManageAllClassrooms) {\n return {\n isLoading: false,\n isOwner: true,\n isTeacher: true\n };\n }\n\n if (!staff.hasCompleted || !owners.hasCompleted || !currentUser.hasCompleted)\n return { isLoading: true };\n\n const currentUserId = currentUser.data.id.toString();\n\n const isClassroomOwner = !!owners.data.find(owner => owner.id.toString() === currentUserId);\n const isClassroomTeacher = !!staff.data.find(staff => staff.id.toString() === currentUserId);\n\n return {\n isLoading: false,\n isTeacher: isClassroomOwner || isClassroomTeacher, // All owners are also teachers\n isOwner: isClassroomOwner\n };\n};","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ErrorCta, ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'classrooms.cannotAccessClassroomError';\n\nexport class CannotAccessClassroomError extends ErrorPageError {\n constructor() {\n super('Cannot access classroom');\n }\n\n // @ts-ignore\n public get name(): string {\n return 'CannotAccessClassroomError';\n }\n\n // @ts-ignore\n public get heading(): string {\n return LanguageService.getPhrase(namespace, 'heading');\n }\n\n // @ts-ignore\n public get description(): string {\n return LanguageService.getPhrase(namespace, 'description');\n }\n\n // @ts-ignore\n public get cta(): ErrorCta {\n return {\n text: LanguageService.getPhrase(namespace, 'cta'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.HOME\n }\n };\n }\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ErrorCta, ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'classrooms.classroomNotFoundError';\n\nexport class ClassroomNotFoundError extends ErrorPageError {\n constructor() {\n super('Classroom doesn\\'t exist');\n }\n\n // @ts-ignore\n public get name(): string {\n return 'ClassroomNotFoundError';\n }\n\n // @ts-ignore\n public get heading(): string {\n return LanguageService.getPhrase(namespace, 'heading');\n }\n\n // @ts-ignore\n public get description(): string {\n return LanguageService.getPhrase(namespace, 'description');\n }\n\n // @ts-ignore\n public get cta(): ErrorCta {\n return {\n text: LanguageService.getPhrase(namespace, 'cta'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.HOME\n }\n };\n }\n}","import { Flight } from 'libs/common/flight';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { Classroom } from 'libs/shared/interfaces';\n\nimport { CannotAccessClassroomError } from 'apps/classrooms/errors/cannot-access-classroom/CannotAccessClassroomError';\nimport { ClassroomNotFoundError } from 'apps/classrooms/errors/classroom-not-found/ClassroomNotFoundError';\n\nexport const useHandleClassroomErrors = (classroom: Flight.Response<Classroom>) => {\n const { hasPermissions } = usePermissions();\n\n useHandleObjectError(classroom, {\n notFound: ClassroomNotFoundError,\n forbidden: {\n privacy: hasPermissions(PermissionName.ViewClassrooms) ? CannotAccessClassroomError : NotFoundError\n }\n });\n};","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnalyticsOptions, AssocDescriptor, EntityType, LocationContext, ToggleDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { UserRole } from 'libs/shared/enums/UserRole';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { CurrentUser } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { useCheckClassroomPermissions } from 'apps/classrooms/hooks/useClassroomPermissions';\n\nconst namespace = 'classrooms.hooks';\n\nexport const useClassroomActions = (classroomId: string, currentUser: CurrentUser, readOnly?: boolean) => {\n const isMobile = useMediaQuery(MediaQueryStrings.SMDown);\n const accessCheck = useCheckClassroomPermissions(classroomId);\n\n const analyticsData = { id: classroomId };\n\n const baseAnalyticsOptions: AnalyticsOptions = {\n entity: EntityType.Classroom,\n workflowPhase: WorkflowPhase.Start,\n location: LocationContext.Classroom\n };\n\n const buttonClass = 'btn btn-outline-dark me-2';\n\n const actions: ActionOptions[] = [];\n\n if (accessCheck.isOwner) {\n actions.push({\n order: 0,\n label: LanguageService.getPhrase(namespace, 'editClassroom'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.EDIT_CLASSROOM,\n args: [classroomId]\n },\n disabled: readOnly,\n tooltip: readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : '',\n analyticsData,\n analyticsOptions: {\n ...baseAnalyticsOptions,\n actionType: UserAction.Edit\n },\n svgName: cvSvgLibrary.Edit,\n button: !isMobile,\n className: readOnly ? `disabled ${buttonClass}` : !isMobile ? buttonClass : ''\n });\n }\n\n actions.push({\n order: 10,\n label: LanguageService.getPhrase(namespace, 'generateJoinLink'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.GENERATE_JOIN_LINK,\n args: [classroomId]\n },\n disabled: readOnly,\n tooltip: readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : '',\n button: (!isMobile && !accessCheck.isOwner),\n className: readOnly ? 'disabled' : (!isMobile && !accessCheck.isOwner) ? buttonClass : ''\n });\n\n if (accessCheck.isOwner) {\n actions.push({\n order: 20,\n label: LanguageService.getPhrase(namespace, 'archive'),\n analyticsData,\n disabled: readOnly,\n tooltip: readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : '',\n analyticsOptions: {\n ...baseAnalyticsOptions,\n actionType: UserAction.Archive,\n descriptor: ToggleDescriptor.On\n },\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.ARCHIVE_CLASSROOM,\n args: [classroomId]\n },\n className: readOnly ? 'disabled' : ''\n });\n }\n\n if ((accessCheck.isOwner || accessCheck.isTeacher) && currentUser.role !== UserRole.Admin) {\n actions.push({\n order: 30,\n label: LanguageService.getPhrase(namespace, 'leaveClassroom'),\n disabled: readOnly,\n tooltip: readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : '',\n className: readOnly ? 'disabled' : 'text-danger',\n analyticsData: {\n ...analyticsData,\n teacherId: currentUser.id\n },\n analyticsOptions: {\n ...baseAnalyticsOptions,\n actionType: UserAction.Dissociate,\n descriptor: AssocDescriptor.User\n },\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.REMOVE_TEACHERS,\n args: [classroomId],\n params: {\n teacherIds: [currentUser.id]\n }\n }\n });\n }\n\n return actions;\n};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { Actions as ActionsComponent } from 'libs/shared/components/actions/Actions';\nimport { Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PillTab, PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { ObjectStatus } from 'libs/shared/enums/ObjectStatus';\nimport { Classroom, CurrentUser } from 'libs/shared/interfaces';\nimport { ObjectStatusHelper } from 'libs/shared/utils/ObjectStatusHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ClassroomStar } from 'apps/classrooms/components/classroom-star/ClassroomStar';\nimport { useClassroomActions } from 'apps/classrooms/hooks/useClassroomActions';\nimport { useCheckClassroomPermissions } from 'apps/classrooms/hooks/useClassroomPermissions';\n\nconst namespace = 'classrooms.classroomLayout';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ClassroomLayoutProps {\n classroom: Classroom;\n currentUser: CurrentUser;\n onTogglePin: (shouldPin: boolean, onSuccess: () => void, onError: () => void) => void;\n activeTab: 'overview' | 'students' | 'groups' | 'teachers' | 'reports';\n isRostered?: boolean;\n}\n\nexport function ClassroomLayout(props: React.PropsWithChildren<ClassroomLayoutProps>): JSX.Element {\n const accessCheck = useCheckClassroomPermissions(props.classroom.id);\n\n const actions = useClassroomActions(props.classroom.id, props.currentUser, props.isRostered);\n\n const classroomStatus = ObjectStatusHelper.getStatusAsString(props.classroom.status);\n\n const tabs: PillTab[] = [{\n name: 'Reports',\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.CLASSROOM_REPORTS,\n args: [props.classroom.id]\n },\n active: props.activeTab === 'reports'\n }, {\n name: getPhrase('students'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.CLASSROOM_STUDENTS,\n args: [props.classroom.id]\n },\n active: props.activeTab === 'students'\n }, {\n name: getPhrase('groups'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.CLASSROOM_GROUPS,\n args: [props.classroom.id]\n },\n active: props.activeTab === 'groups'\n }, {\n name: getPhrase('teachers'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.CLASSROOM_TEACHERS,\n args: [props.classroom.id]\n },\n active: props.activeTab === 'teachers'\n }]\n // todo we hide groups for rostered classroom for v1\n .filter(tab => !props.isRostered || tab.name !== getPhrase('groups'));\n\n // Redirect away if classroom isn't published\n React.useEffect(() => {\n if (classroomStatus === ObjectStatus.Active)\n return;\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.HOME\n }, { replace: true });\n }, [props.classroom.status]);\n\n if ((!accessCheck.isLoading && !accessCheck.isTeacher) || classroomStatus !== ObjectStatus.Active)\n return <></>;\n\n return (\n <div className='px-3 position-relative'>\n <div>\n {!!actions.length && (\n <div className='float-end'>\n <ActionsComponent\n actions={actions}\n actionsDropdownClassName='btn btn-outline-dark'\n />\n </div>\n )}\n\n <div className='d-inline-block align-text-bottom me-1'>\n <ClassroomStar\n classroom={props.classroom}\n onToggle={props.onTogglePin}\n locationContext={LocationContext.Classroom}\n />\n </div>\n <h1 className='d-inline mb-0'>{props.classroom.name}</h1>\n </div>\n\n <div className='pb-3 pt-1'>\n <Breadcrumbs\n breadcrumbs={[\n {\n name: getPhrase('classroomsBreadcrumb'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.HOME\n }\n },\n { name: props.classroom.name, active: true }\n ]}\n />\n </div>\n\n <div className='pb-2'>\n <PillTabSelector tabs={tabs} />\n </div>\n\n {props.children}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"pillTabSelector\":\"Hdi6o\",\"tab\":\"RvNxr\",\"minWidth\":\"GHSz9\",\"radiusSmall\":\"VhJJa\",\"tabLink\":\"WFyvo\"};"],"names":["TabContents","props","tab","svgName","className","name","count","type","data","PillTabSelector","ref","containerRef","borderRadius","listClassName","tabs","map","index","active","key","appLink","analyticsData","analyticsOptions","onClick","onSelect","onSelectTab","defaultProps","PartialPillTabSelector","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","internalServerError","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","generateCacheKey","flightObjs","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","forEach","ObjectStatusHelper","getStatusAsString","getStatusAsNumber","getPhrase","getIsPinned","classroom","ClassroomStar","isPinned","setIsPinned","alerts","onToggle","id","location","locationContext","actionType","descriptor","entity","workflowPhase","success","classroomName","escapeText","onSuccess","prevState","error","size","S","useCheckClassroomPermissions","classroomId","canManageAllClassrooms","hasPermissions","currentUser","staff","customerId","owners","isLoading","isOwner","isTeacher","hasCompleted","currentUserId","toString","isClassroomOwner","find","owner","isClassroomTeacher","namespace","CannotAccessClassroomError","LanguageService","text","application","action","ErrorPageError","ClassroomNotFoundError","useHandleClassroomErrors","usePermissions","PermissionName","NotFoundError","useClassroomActions","readOnly","isMobile","accessCheck","baseAnalyticsOptions","buttonClass","actions","push","order","label","args","disabled","tooltip","button","role","UserRole","teacherId","params","teacherIds","ClassroomLayout","isRostered","classroomStatus","activeTab","filter","ObjectStatus","replace","length","Actions","actionsDropdownClassName","onTogglePin","Breadcrumbs","breadcrumbs","children"],"sourceRoot":""}
|