@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
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[2154],{71553:(e,t,r)=>{r.d(t,{I:()=>o});var n=r(99940),a=r(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,r,o,c,s,l,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(r,o),type:n.k.POST,normalize:!1,success:s,error:l,always:u}},mark:function(e,t,r,a,i,o,c){return{url:"/api/domain/v1/analytics/answers/".concat(r),key:"mark:answer:".concat(r,":").concat(a.resultId),type:n.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:n.k.POST,data:e}},interactiveResultsReport:function(e){return{url:"{gateway}/v2/analytics/interactives/report",key:"interactive:results:report",data:e,type:n.k.POST,normalize:!1}}}},26025:(e,t,r)=>{r.d(t,{B:()=>i});var n=r(1048),a=r(75795),i={getAudienceAppLinkParams:function(){var e=a.O.getCurrentRoute().appLink,t=n.t.isObject(e.params)?e.params:{},r=t.users,i=t.classrooms,o=t.classroomGroups,c=function(e){var r=t[e];if(r)return Array.isArray(r)?r:[r]},s={};return r&&(s.users=c("users")),i&&(s.classrooms=c("classrooms")),o&&(s.classroomGroups=c("classroomGroups")),s},getDateRangeAppLinkParams:function(){var e=a.O.getCurrentRoute().appLink,t=n.t.isObject(e.params)?e.params:{},r=t.from,i=t.to,o=t.rangeName,c={};return r&&(c.from=r),i&&(c.to=i),o&&(c.rangeName=o),c}}},39902:(e,t,r)=>{r.d(t,{F:()=>p,f:()=>m});var n=r(32735),a=r(20354),i=r(75896);function o(e){return function(e){if(Array.isArray(e))return s(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 s(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?s(e,t):void 0}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function l(e){return l="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},l(e)}function u(e,t,r){return(t=function(e){var t=function(e){if("object"!=l(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=l(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==l(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var d=50;function m(e,t){var r=i.m.chunk(e,d).map((function(e){return t(i.m.uniq(e))})),n=a.a.useBasicFetchAll(r),o=i.m.flatten(n.data),c=n.data.length?o.reduce((function(e,t){return Object.assign(Object.assign({},e),u({},t.id,t))}),{}):null;return{itemsArr:o,items:c,isFetching:n.isFetching}}function p(e,t,r){var s,m,p,v,f=r||function(e){return"object"===l(e)?e.id:e},y=n.useRef(new Set),g=(p=n.useState([]),v=2,function(e){if(Array.isArray(e))return e}(p)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,c=[],s=!0,l=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;s=!1}else for(;!(s=(n=i.call(r)).done)&&(c.push(n.value),c.length!==t);s=!0);}catch(e){l=!0,a=e}finally{try{if(!s&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(l)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];n.useEffect((function(){if(null==e?void 0:e.length){var r=[];e.forEach((function(e){var t=f(e);y.current.has(t)||(r.push(e),y.current.add(t))})),r.length&&b((function(e){return[].concat(o(e),o(i.m.chunk(r,d).map(t)))}))}}),[null==e?void 0:e.length]);var S=a.a.useBasicFetchAll(h),E=i.m.flatten(S.data),k=S.data.length?E.reduce((function(e,t){return Object.assign(Object.assign({},e),u({},f(t),t))}),{}):null;return{hasFirstRequestCompleted:!!(null===(m=null===(s=S.responses)||void 0===s?void 0:s[0])||void 0===m?void 0:m.hasCompleted),itemsArr:E,items:k,isFetching:S.isFetching}}},62875:(e,t,r)=>{function n(e,t,r){var n="".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&&(n+=":".concat(a)),i&&(n+=":".concat(i)),r&&(n+=":".concat(r)),n}r.d(t,{H:()=>n})},60666:(e,t,r)=>{r.d(t,{R:()=>N});var n=r(32735),a=r(75896),i=r(23481),o=r(110),c=r(31754),s=r(4594),l=r(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,r){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 r=t.call(e,"string");if("object"!=u(r))return r;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:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var m=i.T.encloseNamespace("myShares.mySharesTable");function p(e){var t;if(e.type===l.y.Link||!(null===(t=null==e?void 0:e.recipients)||void 0===t?void 0:t.length))return e.dateCreated;var r=e.recipients.map((function(e){return e.dateCreated}));return r.sort((function(e,t){return o.O.isSame(e,t)?0:o.O.isAfter(e,t)?1:-2})),r.length?a.m.last(r):""}var v=r(82602),f=r(39202),y=r(65858),g=r(9806),h=r(42735),b=r(76306),S=r(83914),E=r(83345),k=r(54610),w=r(35223),I=r(4315),x=r(81969);const O={mySharesTable:"niOMm",mySharesHeader:"yu8ib",tableBorder:"Xh7bL"};function j(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var A="myShares.tableRow-v2";function C(e){var t,r=e.shareData,a=r.sharedObject,i=e.breakpoints.xs||e.breakpoints.sm;function o(){var t,n,i=(t=e.getObjectActions(a,r.share.shareId),n=1,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,c=[],s=!0,l=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;s=!1}else for(;!(s=(n=i.call(r)).done)&&(c.push(n.value),c.length!==t);s=!0);}catch(e){l=!0,a=e}finally{try{if(!s&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(l)throw a}}return c}}(t,n)||function(e,t){if(e){if("string"==typeof e)return j(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?j(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];f.C$.trigger(i.appLink)}return n.createElement("div",{key:r.share.shareId,onClick:o,className:"".concat(O.mySharesTable," d-flex flex-row p-3 gap-3")},n.createElement("div",{style:{minWidth:160},className:"d-flex flex-column"},n.createElement(g.k,{object:a,showVideoMetadata:!1,locationContext:y.LZ.MyShares,imageOptions:{size:k.h2.Medium},requireMarking:i&&r.pendingReview,showCollectionMask:!1,showVideoCount:!1})),n.createElement("div",{className:"d-flex flex-column justify-content-between flex-grow-1"},n.createElement("h5",{className:"mb-0"},null===(t=r.sharedObject)||void 0===t?void 0:t.name),n.createElement(I.e,{shareLink:r.share,classroomName:function(){var t,n,a=x.R.getClassroomId(null==r?void 0:r.share),i=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()===a}));return null==i?void 0:i.name}(),hideSubtitle:!0,svgWrapperClassName:"p-1",svgSize:S.S.Small}),n.createElement("div",{className:"d-flex gap-3"},n.createElement("div",{className:"d-flex gap-1 align-items-center"},n.createElement(S.x,{svgName:w.vn.VisibleOn,size:S.S.Medium}),n.createElement("p",{className:"mb-0"},n.createElement(E.x,{namespace:A,phrase:"views",options:{smartCount:r.viewCount}}))),n.createElement("div",{className:"d-flex gap-1 align-items-center"},n.createElement(S.x,{svgName:w.vn.Calendar,size:S.S.Medium}),n.createElement("p",{className:"mb-0"},(0,v.WU)(r.dateShared))))),n.createElement("div",{className:"d-flex gap-2"},n.createElement("div",null,n.createElement(h.K,{onClick:o,className:"btn btn-outline-dark ms-auto"},"View report")),n.createElement("div",{onClick:function(e){return e.stopPropagation()}},n.createElement(b.m,{dropdownToggleClassName:"btn btn-outline-dark",actions:[{label:"View video"},{label:"Delete"}]}))))}const P={bgGrey:"bx6ma"};function N(e){var t,r,i,o,u,v,f,y=(t=e.sentShares,r=e.sharedObjects,i=e.shareRecipients,o=!!e.groupByDateShared,u=e.interactivesPendingReview,v=[],f=null==u?void 0:u.reduce((function(e,t){return Object.assign(d({},t.interactiveId,t),e)}),{}),t.forEach((function(e){var t,n,a=null==r?void 0:r[e.objectId],o=null;if(e.type===l.y.Classroom&&(o=[],null===(t=e.recipients)||void 0===t||t.forEach((function(e){var t=null==i?void 0:i[e.recipientId];t&&o.push(t)}))),a){var c=a.typeId===s.E.Interactive&&(null==f?void 0:f[a.interactiveId]);v.push({share:e,sharedObject:a,shareRecipients:o,dateShared:p(e),viewCount:null!==(n=e.viewCount)&&void 0!==n?n:0,pendingReview:null==c?void 0:c.pendingReviewCount,privacy:e.privacy})}})),o?c.x.groupByDateShared(v):d({},m("title"),v)),g=a.m.flatten(Object.values(y));return n.createElement("div",{style:{overflow:"hidden"},className:"rounded-3"},g.map((function(t,r){return n.createElement("div",{key:t.share.shareId,className:"d-flex flex-column ".concat(r%2==0?"".concat(P.bgGrey):"")},n.createElement(C,{shareData:t,getObjectActions:e.getObjectActions,getObjectAppLink:e.getObjectAppLink,breakpoints:e.breakpoints,imageCdnUrl:e.imageCdnUrl,yearGroups:e.yearGroups}))})))}},63153:(e,t,r)=>{r.d(t,{L:()=>o});var n=r(32735);const a={table:"JF9yg",tableHeader:"La8mF",heading:"PfR5S",image:"LFBei",avatar:"bTpoB",date:"fhHfW",views:"f9REM",actions:"qn91D"};function i(){return n.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")},n.createElement("div",{className:"col-12 col-md-3 col-xl-auto"},n.createElement("div",{className:"partial-loading-background rounded ratio ratio-16x9 "})),n.createElement("div",{className:"d-flex flex-column align-items-xl-center flex-xl-row gap-1 gap-xl-3"},n.createElement("div",{className:"partial-loading-background col-8 col-xl-4"}," "),n.createElement("div",{className:"d-flex align-items-center gap-2 gap-xl-0 pe-4 pe-md-0 col-xl-8"},n.createElement("div",{className:"col-xl-5"},n.createElement("div",{className:"".concat(a.avatar," partial-loading-background rounded-pill col-xl-8")})),n.createElement("div",{className:"col-xl-4"},n.createElement("div",{className:"".concat(a.date," partial-loading-background")}," ")),n.createElement("div",{className:"col-xl-3"},n.createElement("div",{className:"".concat(a.views," partial-loading-background")}," ")))),n.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"},n.createElement("div",{className:"".concat(a.actions," partial-loading-background rounded d-none d-md-block px-3 p-lg-0 col-lg-6")}),n.createElement("div",{className:"".concat(a.actions," partial-loading-background rounded px-3 p-lg-0 col-lg-4")})))}function o(){return n.createElement(n.Fragment,null,n.createElement("div",{className:"mb-3"},n.createElement("div",{className:"no-full-width"},n.createElement("div",{className:"d-flex flex-column rounded-3 mb-4 gap-4 gap-md-0 border-md border"},n.createElement(i,null),n.createElement(i,null),n.createElement(i,null),n.createElement(i,null),n.createElement(i,null),n.createElement(i,null),n.createElement(i,null),n.createElement(i,null),n.createElement(i,null),n.createElement(i,null)))))}},67467:(e,t,r)=>{r.d(t,{o:()=>u});var n=r(32735),a=r(23481),i=r(97958),o=r(99742),c=r(14070),s=r(97291),l=a.T.encloseNamespace("myShares.mySharesTableEmptyState");function u(){return n.createElement(i.u,null,n.createElement(i.u.Image,{src:o.W.EmptyStates.Share.SHARED_BY_ME,size:"small"}),n.createElement(i.u.Heading,null,l("heading")),n.createElement(i.u.Info,null,l("info")),n.createElement(i.u.Cta,{appLink:{application:s.O.DASHBOARD,action:c.e.Dashboard.HOME},text:l("cta")}))}},45231:(e,t,r)=>{r.d(t,{a:()=>y});var n=r(20354),a=r(1048),i=r(71553),o=r(30439),c=r(39151),s=r(1666),l=r(31949),u=r(39902),d=r(60115),m=r(31908),p=r(88630),v=r(91574),f=r(72951);function y(e,t){var r,y,g=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],h=n.a.useGetFetch(),b=n.a.useBasicFetch(l.N.currentUser()),S=n.a.useBasicFetch(c.L.config()),E=n.a.useBasicFetch((null===(r=b.data)||void 0===r?void 0:r.isAuthenticated)&&s.h.yearGroups(b.data.customerId)),k=function(t){return g&&v.o.getSentShares(Object.assign({cursor:t},e))},w=function(e){return h(k(e))},I=(0,d.K)(k,w),x=I.items,O=I.hasMore,j=I.isFetching,A=I.nextCursor,C=I.hasFirstPageCompleted,P=(0,u.F)(null==x?void 0:x.map((function(e){return e.objectId.toString()})),o.o.sharedObjectsById),N=(0,u.F)(f.x.getFlattenedRecipients(null!=x?x:[]).map((function(e){return e.recipientId.toString()})),(function(e){return o.o.getRecipientsById(e,b.data.customerId)})),L=(0,u.F)(t?a.t.values(P.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!=x?x:[]),(function(e){return p.F.getClassroomsByIds(e)})),T=j||P.isFetching||N.isFetching||L.isFetching||E.isFetching,M=!C||!P.hasFirstRequestCompleted;return{sentShares:x,sharedObjects:P,shareRecipients:N,shareClassrooms:R,yearGroups:E.data,interactivesPendingReview:L,isFetching:T,showPartialLoading:M,nextCursor:A,hasMore:O,fetchNext:w,imageCdnUrl:null===(y=S.data)||void 0===y?void 0:y.imageCdnUrl}}},69003:(e,t,r)=>{r.d(t,{cl:()=>f,sD:()=>v});var n=r(23481),a=r(65858),i=r(26025),o=r(35223),c=r(31908),s=r(14070),l=r(97291),u=r(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 r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?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 r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var p=n.T.encloseNamespace("myShares.myShares");function v(e,t,r,n,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:l.O.DEFAULT,action:s.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 n&&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({},r),{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),r=i.B.getAudienceAppLinkParams();return{typeIdAppLinkParams:t,audienceAppLinkParams:r,currentAppLink:{application:l.O.MY_SHARES,action:s.e.MyShares.HOME,params:Object.assign(Object.assign({},r),{typeId:t})},sentSharesParams:{recipientUserId:null==r?void 0:r.users,recipientGroupId:[].concat(d((null==r?void 0:r.classroomGroups)||[]),d((null==r?void 0:r.classrooms)||[])),objectTypeId:t.length?t:void 0}}}},4315:(e,t,r)=>{r.d(t,{e:()=>m});var n=r(32735),a=r(12528),i=r(83914),o=r(4594),c=r(35223),s=r(42272),l=r(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,r){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 r=t.call(e,"string");if("object"!=u(r))return r;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:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function m(e){var t,r,c,u,d;return n.createElement("div",{className:"d-flex align-items-center"},n.createElement("div",{className:"d-flex align-items-center justify-content-center"},n.createElement("div",null,n.createElement(a.f,{svgName:p[e.shareLink.type],variant:v[e.shareLink.type],textVariant:"white",svgWrapperClassName:null!==(t=e.svgWrapperClassName)&&void 0!==t?t:"p-1",svgSize:null!==(r=e.svgSize)&&void 0!==r?r:i.S.Standard})),n.createElement("div",{className:"d-flex flex-column ms-2"},n.createElement("label",{className:"m-0"},(u=(c=e).shareLink,d=c.classroomName,u.type===l.y.Classroom&&d?d:f[u.type])),!e.hideSubtitle&&n.createElement("span",{className:"text-secondary"},function(e){var t,r,n,a,i=e.shareLink;if(i.type===l.y.Classroom){var c=null!==(r=null===(t=i.recipients)||void 0===t?void 0:t.filter((function(e){return e.recipientTypeId===o.E.ClassroomGroup})).length)&&void 0!==r?r:0,u=null!==(a=null===(n=i.recipients)||void 0===n?void 0:n.filter((function(e){return e.recipientTypeId===o.E.User})).length)&&void 0!==a?a:0;return c&&u?"".concat(c," ").concat(y(c,"group","groups"),", ").concat(u," ").concat(y(u,"student","students")," can view"):c?"".concat(c," ").concat(y(c,"group","groups")," can view"):u?"".concat(u," ").concat(y(u,"student","students")," can view"):"All students in classroom can view"}if(i.type===l.y.Open)return"Students watch using a PIN code";if(i.type===l.y.Link){if([s.e.JustMySchool,s.e.Protected].includes(i.privacy))return"Respect ratings and restrictions";if(i.privacy===s.e.JustMySchoolOverrideRestriction)return"Anyone in your school can view";if(i.privacy===s.e.ProtectedOverrideRestriction)return"Anyone signed into ClickView can view";if(i.privacy===s.e.Public)return"Anyone with a link can view";if(i.privacy===s.e.PinCode)return"Anyone with a PIN code can view"}return i.type===l.y.Live?"Live now":"Anyone signed into ClickView can view"}(e)))))}var p=d(d(d(d({},l.y.Open,c.vn.School),l.y.Link,c.vn.Link),l.y.Classroom,c.vn.Classrooms),l.y.Live,c.vn.Play),v=d(d(d(d({},l.y.Open,"blue"),l.y.Link,"black"),l.y.Classroom,"teal"),l.y.Live,"purple"),f=d(d(d(d({},l.y.Open,"Open classroom"),l.y.Link,"Link"),l.y.Classroom,"Classroom"),l.y.Live,"Live");function y(e,t,r){return 1===e?t:r}},42272:(e,t,r)=>{var n;r.d(t,{e:()=>n}),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"}(n||(n={}))},93975:(e,t,r)=>{var n;r.d(t,{y:()=>n}),function(e){e.Link="Link",e.Classroom="Classroom",e.Open="Open",e.Live="Live"}(n||(n={}))},91574:(e,t,r)=>{r.d(t,{o:()=>o});var n=r(99940),a=r(97395),i={namespace:"share-v2"},o={createShareLink:function(e,t,r,a){return{url:"/api/share/v2/shares",key:"create:share-v2:link",type:n.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:r,always:a}},getShareLink:function(e,t,r,a){return{url:"/api/share/v2/shares/".concat(e),key:"get:share-v2:link:".concat(e),type:n.k.GET,normalizeOptions:i,success:t,error:r,always:a}},getSharesByObjectId:function(e,t,r,a){return{url:"/api/share/v2/shares/objects/".concat(e),key:"get:share-v2:shares:object:".concat(e),type:n.k.GET,normalizeOptions:i,success:t,error:r,always:a}},getSentShares:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,r=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:n.k.GET,normalize:!1,success:t,error:r,always:i}},createPincode:function(e){return{url:"/api/share/v2/shares/".concat(e,"/pincode"),key:"create:share-v2:pincode",type:n.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,r)=>{r.d(t,{x:()=>i});var n=r(75896),a=r(4594),i={getFlattenedRecipients:function(e){return n.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 n.m.uniq(t.filter((function(e){return!!e})))},getClassroomIdFromShare:function(e){var t,r=null===(t=e.recipients)||void 0===t?void 0:t[0];if(r)return r.scopeId?r.scopeId.toString():r.recipientId&&r.recipientTypeId===a.E.Classroom?r.recipientId.toString():void 0},getClassroomForShare:function(e,t){var r=i.getClassroomIdFromShare(e);if(r)return t.find((function(e){return e.id.toString()===r.toString()}))}}},81969:(e,t,r)=>{r.d(t,{R:()=>v});var n=r(23481),a=r(110),i=r(4594),o=r(49080),c=r(26361),s=r(35223),l=r(31908),u=r(42272),d=r(93975);function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var p=n.T.encloseNamespace("share.shareLinkInfo"),v={getPrivateIconAndText:function(e){var t=e.entityTypeId,r=e.privacy,n=e.hasStudentExp,a=e.entity,o=e.yearGroups;if(t===i.E.Topic||t===i.E.Series)return{icon:s.vn.VisibleOn,text:p(n?"justMySchoolTeachers":"justMySchoolDescription")};if(!Array.isArray(r))switch(r){case u.e.Public:return{icon:s.vn.VisibleOn,text:p("publicDescription")};case u.e.ProtectedOverrideRestriction:return{icon:s.vn.VisibleOn,text:p("clickViewOnly")};case u.e.Protected:return{icon:s.vn.Lock,text:v.getRespectRatingText(a,o,n)};case u.e.JustMySchoolOverrideRestriction:return{icon:s.vn.Lock,text:p(n?"justMySchoolTeachers":"justMySchoolDescription")};case u.e.JustMySchool:return{icon:s.vn.Lock,text:v.getRespectRatingText(a,o,n)};case u.e.PinCode:case u.e.PasswordProtected:return{icon:s.vn.Lock,text:p("privateDescription")};default:return{}}},getIconAndText:function(e){var t=e.linkExpireDate,r=e.isPasswordProtected,n=e.status;if(!t&&!r)return v.getPrivateIconAndText(e);if(!t)return{icon:s.vn.Lock,text:p("password")};var i=a.O.isToday(t),c=a.O.diffBetween(t,new Date,"day");if(!r){var l=i?p("expiryToday"):p("expiry",{days:c});return n===o.F.Expired&&(l=p("expired")),{icon:s.vn.Timer,text:l}}var u=i?p("passwordExpiryToday"):p("passwordExpiry",{days:c});return n===o.F.Expired&&(u=p("passwordExpired")),{icon:s.vn.Lock,text:u}},getRespectRatingText:function(e,t,r){var n;if(!e||!t)return null;if(r)return p("justMySchoolTeachers");if(!l.M.isVideoType(e))return p("collectionRating");var a=c.l.getWeightedRestriction(null===(n=e._restrictions)||void 0===n?void 0:n.value);if(a&&!a.yearGroup)return p("onlyAdmins");var i,o,s,u=l.M.getRating(e),d=function(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return m(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?m(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},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(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){c=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(c)throw i}}}}(t);try{for(d.s();!(s=d.n()).done;){var v=s.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,r;if(!e)return"";if(e.type!==d.y.Classroom)return"";var n=null===(t=e.recipients)||void 0===t?void 0:t.find((function(e){return e.recipientTypeId===i.E.Classroom}));if(n)return n.recipientId.toString();var a=null===(r=e.recipients)||void 0===r?void 0:r.find((function(e){return e.scopeId}));return(null==a?void 0:a.scopeId.toString())||""}}}}]);
|
|
2
|
+
//# sourceMappingURL=2154-6da16cef10-lite.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/2154-6da16cef10-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-v2/MySharesTableUtils.ts","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table-v2-row/my-shares-table-row.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table-v2-row/MySharesTableRow.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table-v2/my-shares-table.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table-v2/MySharesTable.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table-v2/partial-loading/partial-my-shares-table.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table-v2/partial-loading/PartialMySharesTable.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/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}","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}","// extracted by mini-css-extract-plugin\nexport default {\"mySharesTable\":\"niOMm\",\"mySharesHeader\":\"yu8ib\",\"tableBorder\":\"Xh7bL\"};","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';\n// import { SharableEntity } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ActionButton } from 'libs/shared/components/actions/ActionButton';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { ActionsDropdown } from 'libs/shared/components/actions/ActionsDropdown';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\n// import { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\n// import { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { ImageSize } from 'libs/shared/enums/Images';\n// import { MasterType } from 'libs/shared/enums/MasterType';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject, YearGroup } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\n// import { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { MySharesTableData } from 'apps/my-shares/components/my-shares-table-v2/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-v2';\n\n// interface MySharesTableHeadingProps {\n// heading: string;\n// isFirst: boolean;\n// }\n\n// export 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\n// interface ShareObjectTitleProps {\n// sharedObject: SharableEntity;\n// requireMarking?: number;\n// appLink?: Core.AppLink;\n// }\n\n// function 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} d-flex flex-row p-3 gap-3`}>\n <div style={{ minWidth: 160 }} className='d-flex flex-column'>\n <SharedObjectImage\n object={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 flex-column justify-content-between flex-grow-1'>\n <h5 className='mb-0'>{shareData.sharedObject?.name}</h5>\n\n <ShareAvatar\n shareLink={shareData.share}\n classroomName={findClassroomName()}\n hideSubtitle\n svgWrapperClassName='p-1'\n svgSize={SvgContainerSize.Small}\n />\n\n <div className='d-flex gap-3'>\n <div className='d-flex gap-1 align-items-center'>\n <SvgContainer svgName={cvSvgLibrary.VisibleOn} size={SvgContainerSize.Medium} />\n <p className='mb-0'><Text namespace={namespace} phrase='views' options={{ smartCount: shareData.viewCount }} /></p>\n </div>\n <div className='d-flex gap-1 align-items-center'>\n <SvgContainer svgName={cvSvgLibrary.Calendar} size={SvgContainerSize.Medium} />\n <p className='mb-0'>{formatDate(shareData.dateShared)}</p>\n </div>\n </div>\n </div>\n\n <div className='d-flex gap-2'>\n <div>\n <ActionButton onClick={onRowClick} className='btn btn-outline-dark ms-auto'>View report</ActionButton>\n </div>\n <div onClick={e => e.stopPropagation()}>\n <ActionsDropdown\n dropdownToggleClassName='btn btn-outline-dark'\n actions={[{\n label: 'View video'\n },\n {\n label: 'Delete'\n }]}\n />\n </div>\n </div>\n </div>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"bgGrey\":\"bx6ma\"};","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\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-v2/MySharesTableUtils';\nimport { MySharesTableRow } from 'apps/my-shares/components/my-shares-table-v2-row/MySharesTableRow';\nimport { ShareLink } from 'apps/share-v2/interfaces/ShareLink';\n\nimport styles from './my-shares-table.scss';\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 const flattenedData = ArrayHelper.flatten(Object.values(data));\n\n return (\n <div style={{ overflow: 'hidden' }} className='rounded-3'>\n {flattenedData.map((shareData, i) => {\n return (\n <div key={shareData.share.shareId} className={`d-flex flex-column ${i % 2 === 0 ? `${styles.bgGrey}` : ''}`}>\n <MySharesTableRow\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 </div>\n );\n })}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"table\":\"JF9yg\",\"tableHeader\":\"La8mF\",\"heading\":\"PfR5S\",\"image\":\"LFBei\",\"avatar\":\"bTpoB\",\"date\":\"fhHfW\",\"views\":\"f9REM\",\"actions\":\"qn91D\"};","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='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 </div>\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}","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 { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\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 hideSubtitle?: boolean;\n svgSize?: SvgContainerSize;\n svgWrapperClassName?: 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={props.svgWrapperClassName ?? 'p-1'}\n svgSize={props.svgSize ?? SvgContainerSize.Standard}\n />\n </div>\n <div className='d-flex flex-column ms-2'>\n <label className='m-0'>{getTitle(props)}</label>\n {!props.hideSubtitle && <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","getPhrase","LanguageService","getDateShared","share","ShareType","recipients","dateCreated","datesShared","date1","date2","DateHelper","ArrayHelper","MySharesTableRow","props","shareData","sharedObject","isMobile","breakpoints","xs","sm","onRowClick","goToReport","getObjectActions","shareId","onClick","className","style","minWidth","SharedObjectImage","object","showVideoMetadata","locationContext","imageOptions","size","requireMarking","pendingReview","showCollectionMask","showVideoCount","name","ShareAvatar","shareLink","classroomName","classroomId","ShareLinkHelper","classroom","shareRecipients","find","recipient","toString","findClassroomName","hideSubtitle","svgWrapperClassName","svgSize","SvgContainer","S","svgName","Text","namespace","phrase","options","smartCount","viewCount","dateShared","ActionButton","e","stopPropagation","ActionsDropdown","dropdownToggleClassName","actions","label","MySharesTable","sentShares","sharedObjects","groupByDate","interactivesPendingReviews","tableData","interactivesPendingReviewsMap","groupByDateShared","interactivesPendingReview","s","objectId","recipientId","typeId","MasterType","pendingReviewCount","privacy","ShareHelper","flattenedData","Object","values","overflow","i","getObjectAppLink","imageCdnUrl","yearGroups","PartialRow","PartialMySharesTable","MySharesTableEmptyState","src","application","action","text","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","args","entityType","analyticsOptions","actionType","descriptor","workflowPhase","eventVersion","md","tooltip","group","getSharesParams","typeIdAppLinkParams","getTypeIdParams","audienceAppLinkParams","currentAppLink","sentSharesParams","recipientUserId","recipientGroupId","objectTypeId","undefined","icons","variant","iconColours","textVariant","titles","groupCount","recipientTypeId","studentCount","pluralize","includes","getSubtitle","count","singular","plural","SharePrivacy","normalizeOptions","ShareRequests","createShareLink","getShareLink","getSharesByObjectId","getSentShares","adaptedParams","scopeId","limit","offset","parseInt","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","video","restriction","_restrictions","value","yearGroup","maxYearGroup","minAllowedYearGroup","rating","getClassroomId","recipientWithScope"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[2952],{38502:(e,t,n)=>{n.d(t,{r:()=>p});var r=n(32735),o=n(49985),a=n(15611),i=n(18559),s=n(11607),c=n(83914),l=n(22771);function u(e){return r.createElement(r.Fragment,null,!!e.tab.svgName&&r.createElement("div",{className:e.tab.name?"pe-1":""},r.createElement(c.x,{svgName:e.tab.svgName})),e.tab.name,"number"==typeof e.tab.count&&r.createElement("div",{className:"ps-2"},r.createElement(i.C,{type:i.g.Count,data:e.tab.count})))}function p(e){var t;return r.createElement("nav",{className:null!==(t=e.className)&&void 0!==t?t:"",ref:e.containerRef},r.createElement("ul",{className:"\n list-unstyled d-inline-block m-0 ".concat(l.Z.pillTabSelector,"\n ").concat(e.borderRadius?l.Z.radiusSmall:"","\n ").concat(e.listClassName,"\n ")},e.tabs.map((function(e,t){return r.createElement("li",{className:"\n p-0 ".concat(l.Z.tab," ").concat(e.active?"btn btn-dark":"btn btn-outline-dark","\n ").concat(e.name?l.Z.minWidth:""," ").concat(e.className,"\n "),key:t},e.appLink?r.createElement(a.F,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(l.Z.tabLink,"\n ")},r.createElement(u,{tab:e})):r.createElement(s.L,{className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(l.Z.tabLink,"\n "),onClick:function(){return function(e){!e.active&&e.onSelect&&(e.onSelect(),e.analyticsData&&e.analyticsOptions&&o.k.logUserAction(e.analyticsData,e.analyticsOptions))}(e)}},r.createElement(u,{tab:e})))}))))}p.defaultProps={borderRadius:"lg"}},95278:(e,t,n)=>{n.d(t,{Z:()=>i});var r=n(32735),o=n(22771);const a={partialSize:"ntGsj"};function i(){return r.createElement("div",{className:"partial-loading-background ".concat(o.Z.pillTabSelector," ").concat(a.partialSize)})}},94644:(e,t,n)=>{n.d(t,{r:()=>u});var r=n(50242),o=n(81886),a=n(67058),i=n(14553),s=n(49267),c=n(49075),l={notFound:a.d,forbidden:{rating:i.q,yearLevel:i.q,region:s.a,privacy:i.q},badRequest:c._,internalServerError:c._};function u(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var a;a="number"==typeof e?e:e.status;var i=Object.assign(Object.assign({},l),t);a&&o.Q.Ry.isStatusCodeError(a)&&(a!==r.o.InternalServer?a!==r.o.NotFound?a!==r.o.Forbidden?n.badRequest||o.Q.Ry.throw(new i.badRequest):n.forbidden||o.Q.Ry.throw(new i.forbidden.privacy):n.notFound||o.Q.Ry.throw(new i.notFound):n.internalServerError||o.Q.Ry.throw(new c._))}}},91286:(e,t,n)=>{n.d(t,{v:()=>i});var r=n(32735),o=n(94644);function a(e){return e.map((function(e){return e.statusCode})).join(":")}function i(e,t,n){var i=Array.isArray(e)?e:[e];(0,r.useEffect)((function(){i.forEach((function(e){(0,o.r)(e.statusCode,t,n)}))}),[a(i),t,n])}},53036:(e,t,n)=>{n.d(t,{h:()=>o});var r=n(32045),o={getStatusAsString:function(e){if("string"==typeof e)return e;if("number"==typeof e){if(0===e)return r.w.Disabled;if(1===e)return r.w.Active;if(2===e)return r.w.Inactive}return null},getStatusAsNumber:function(e){if("number"==typeof e)return e;if("string"==typeof e){if(e===r.w.Disabled)return 0;if(e===r.w.Active)return 1;if(e===r.w.Inactive)return 2}return null}}},62691:(e,t,n)=>{n.d(t,{m:()=>b});var r=n(32735),o=n(23481),a=n(49985),i=n(65858),s=n(11607),c=n(83914),l=n(69883),u=n(1643),p=n(35223);function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var m=o.T.encloseNamespace("classrooms.classroomStar"),d=function(e){return u.h.isFavouritedByCurrentUser(e)};function b(e){var t,n,o=(t=r.useState(d(e.classroom)),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,o,a,i,s=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,o=e}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(l)throw o}}return s}}(t,n)||function(e,t){if(e){if("string"==typeof e)return f(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)?f(e,t):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),u=o[0],b=o[1],y=(0,l.Z)();return r.useEffect((function(){d(e.classroom)!==u&&b(!u)}),[d(e.classroom)]),r.createElement(s.L,{onClick:function(){b(!u),e.onToggle(!u,(function(){return function(t){if(t)return a.k.logUserAction({id:e.classroom.id},{location:e.locationContext,actionType:i.Vw.Favourite,descriptor:i.DL.On,entity:i.py.Classroom,workflowPhase:i.eu.Complete}),void y.success(m("pinSuccess",{classroomName:e.classroom.name,escapeText:!0}));a.k.logUserAction({id:e.classroom.id},{location:e.locationContext,actionType:i.Vw.Favourite,descriptor:i.DL.Off,entity:i.py.Classroom,workflowPhase:i.eu.Complete}),y.success(m("unpinSuccess",{classroomName:e.classroom.name,escapeText:!0}))}(!u)}),(function(){return b(t=u),void(t?y.error(m("unpinError",{classroomName:e.classroom.name,escapeText:!0})):y.error(m("pinError",{classroomName:e.classroom.name,escapeText:!0})));var t}))},className:u?"text-yellow":""},r.createElement(c.x,{svgName:u?p.vn.Star:p.vn.StarOutline,size:c.S.Medium}))}},46009:(e,t,n)=>{n.d(t,{p:()=>c});var r=n(20354),o=n(16714),a=n(31949),i=n(22902),s=n(88630),c=function(e){var t,n=(0,(0,i.T)().hasPermissions)(o.C.ManageAllClassrooms),c=r.a.useBasicFetch(a.N.currentUser()),l=r.a.useBasicFetch(!n&&(null===(t=c.data)||void 0===t?void 0:t.customerId)&&s.F.getClassroomStaff(e,c.data.customerId)),u=r.a.useBasicFetch(!n&&s.F.getClassroomOwners(e));if(n)return{isLoading:!1,isOwner:!0,isTeacher:!0};if(!l.hasCompleted||!u.hasCompleted||!c.hasCompleted)return{isLoading:!0};var p=c.data.id.toString(),f=!!u.data.find((function(e){return e.id.toString()===p})),m=!!l.data.find((function(e){return e.id.toString()===p}));return{isLoading:!1,isTeacher:f||m,isOwner:f}}},31491:(e,t,n)=>{n.d(t,{_:()=>k});var r=n(16714),o=n(67058),a=n(91286),i=n(22902),s=n(23481),c=n(64364),l=n(14070),u=n(97291);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 f(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,m(r.key),r)}}function m(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+""}function d(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(d=function(){return!!e})()}function b(e){return b=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},b(e)}function y(e,t){return y=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},y(e,t)}var v="classrooms.cannotAccessClassroomError",g=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t,n){return t=b(t),function(e,t){if(t&&("object"==p(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,d()?Reflect.construct(t,n||[],b(e).constructor):t.apply(e,n))}(this,t,["Cannot access classroom"])}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&y(e,t)}(t,e),n=t,(r=[{key:"name",get:function(){return"CannotAccessClassroomError"}},{key:"heading",get:function(){return s.T.getPhrase(v,"heading")}},{key:"description",get:function(){return s.T.getPhrase(v,"description")}},{key:"cta",get:function(){return{text:s.T.getPhrase(v,"cta"),appLink:{application:u.O.CLASSROOMS,action:l.e.Classrooms.HOME}}}}])&&f(n.prototype,r),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r}(c.H);function O(e){return O="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},O(e)}function S(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,h(r.key),r)}}function h(e){var t=function(e){if("object"!=O(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=O(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==O(t)?t:t+""}function w(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(w=function(){return!!e})()}function C(e){return C=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},C(e)}function E(e,t){return E=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},E(e,t)}var T="classrooms.classroomNotFoundError",R=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t,n){return t=C(t),function(e,t){if(t&&("object"==O(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,w()?Reflect.construct(t,n||[],C(e).constructor):t.apply(e,n))}(this,t,["Classroom doesn't exist"])}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&E(e,t)}(t,e),n=t,(r=[{key:"name",get:function(){return"ClassroomNotFoundError"}},{key:"heading",get:function(){return s.T.getPhrase(T,"heading")}},{key:"description",get:function(){return s.T.getPhrase(T,"description")}},{key:"cta",get:function(){return{text:s.T.getPhrase(T,"cta"),appLink:{application:u.O.CLASSROOMS,action:l.e.Classrooms.HOME}}}}])&&S(n.prototype,r),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r}(c.H),k=function(e){var t=(0,i.T)().hasPermissions;(0,a.v)(e,{notFound:R,forbidden:{privacy:t(r.C.ViewClassrooms)?g:o.d}})}},22602:(e,t,n)=>{n.d(t,{R:()=>C});var r=n(32735),o=n(23481),a=n(81886),i=n(65858),s=n(83657),c=n(49935),l=n(38502),u=n(32045),p=n(53036),f=n(14070),m=n(97291),d=n(62691),b=n(86764),y=n(86613),v=n(3747),g=n(35223),O=n(46009),S="classrooms.hooks",h=function(e,t,n){var r=(0,v.a)(b.r.SMDown),a=(0,O.p)(e),s={id:e},c={entity:i.py.Classroom,workflowPhase:i.eu.Start,location:i.LZ.Classroom},l="btn btn-outline-dark me-2",u=[];return a.isOwner&&u.push({order:0,label:o.T.getPhrase(S,"editClassroom"),appLink:{application:m.O.CLASSROOMS,action:f.e.Classrooms.EDIT_CLASSROOM,args:[e]},disabled:n,tooltip:n?o.T.getPhrase(S,"disabledByRostering"):"",analyticsData:s,analyticsOptions:Object.assign(Object.assign({},c),{actionType:i.Vw.Edit}),svgName:g.vn.Edit,button:!r,className:n?"disabled ".concat(l):r?"":l}),u.push({order:10,label:o.T.getPhrase(S,"generateJoinLink"),appLink:{application:m.O.CLASSROOMS,action:f.e.Classrooms.GENERATE_JOIN_LINK,args:[e]},disabled:n,tooltip:n?o.T.getPhrase(S,"disabledByRostering"):"",button:!r&&!a.isOwner,className:n?"disabled":r||a.isOwner?"":l}),a.isOwner&&u.push({order:20,label:o.T.getPhrase(S,"archive"),analyticsData:s,disabled:n,tooltip:n?o.T.getPhrase(S,"disabledByRostering"):"",analyticsOptions:Object.assign(Object.assign({},c),{actionType:i.Vw.Archive,descriptor:i.DL.On}),appLink:{application:m.O.CLASSROOMS,action:f.e.Classrooms.ARCHIVE_CLASSROOM,args:[e]},className:n?"disabled":""}),(a.isOwner||a.isTeacher)&&t.role!==y.i.Admin&&u.push({order:30,label:o.T.getPhrase(S,"leaveClassroom"),disabled:n,tooltip:n?o.T.getPhrase(S,"disabledByRostering"):"",className:n?"disabled":"text-danger",analyticsData:Object.assign(Object.assign({},s),{teacherId:t.id}),analyticsOptions:Object.assign(Object.assign({},c),{actionType:i.Vw.Dissociate,descriptor:i.iF.User}),appLink:{application:m.O.CLASSROOMS,action:f.e.Classrooms.REMOVE_TEACHERS,args:[e],params:{teacherIds:[t.id]}}}),u},w=o.T.encloseNamespace("classrooms.classroomLayout");function C(e){var t=(0,O.p)(e.classroom.id),n=h(e.classroom.id,e.currentUser,e.isRostered),o=p.h.getStatusAsString(e.classroom.status),b=[{name:"Reports",appLink:{application:m.O.CLASSROOMS,action:f.e.Classrooms.CLASSROOM_REPORTS,args:[e.classroom.id]},active:"reports"===e.activeTab},{name:w("students"),appLink:{application:m.O.CLASSROOMS,action:f.e.Classrooms.CLASSROOM_STUDENTS,args:[e.classroom.id]},active:"students"===e.activeTab},{name:w("groups"),appLink:{application:m.O.CLASSROOMS,action:f.e.Classrooms.CLASSROOM_GROUPS,args:[e.classroom.id]},active:"groups"===e.activeTab},{name:w("teachers"),appLink:{application:m.O.CLASSROOMS,action:f.e.Classrooms.CLASSROOM_TEACHERS,args:[e.classroom.id]},active:"teachers"===e.activeTab}].filter((function(t){return!e.isRostered||t.name!==w("groups")}));return r.useEffect((function(){o!==u.w.Active&&a.Q.C$.trigger({application:m.O.CLASSROOMS,action:f.e.Classrooms.HOME},{replace:!0})}),[e.classroom.status]),!t.isLoading&&!t.isTeacher||o!==u.w.Active?r.createElement(r.Fragment,null):r.createElement("div",{className:"px-3 position-relative"},r.createElement("div",null,!!n.length&&r.createElement("div",{className:"float-end"},r.createElement(s.e,{actions:n,actionsDropdownClassName:"btn btn-outline-dark"})),r.createElement("div",{className:"d-inline-block align-text-bottom me-1"},r.createElement(d.m,{classroom:e.classroom,onToggle:e.onTogglePin,locationContext:i.LZ.Classroom})),r.createElement("h1",{className:"d-inline mb-0"},e.classroom.name)),r.createElement("div",{className:"pb-3 pt-1"},r.createElement(c.Oo,{breadcrumbs:[{name:w("classroomsBreadcrumb"),appLink:{application:m.O.CLASSROOMS,action:f.e.Classrooms.HOME}},{name:e.classroom.name,active:!0}]})),r.createElement("div",{className:"pb-2"},r.createElement(l.r,{tabs:b})),e.children)}},22771:(e,t,n)=>{n.d(t,{Z:()=>r});const r={pillTabSelector:"Hdi6o",tab:"RvNxr",minWidth:"GHSz9",radiusSmall:"VhJJa",tabLink:"WFyvo"}}}]);
|
|
2
|
-
//# sourceMappingURL=2952-
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[2952],{38502:(e,t,n)=>{n.d(t,{r:()=>p});var r=n(32735),o=n(49985),a=n(15611),i=n(18559),s=n(11607),c=n(83914),l=n(22771);function u(e){return r.createElement(r.Fragment,null,!!e.tab.svgName&&r.createElement("div",{className:e.tab.name?"pe-1":""},r.createElement(c.x,{svgName:e.tab.svgName})),e.tab.name,"number"==typeof e.tab.count&&r.createElement("div",{className:"ps-2"},r.createElement(i.C,{type:i.g.Count,data:e.tab.count})))}function p(e){var t;return r.createElement("nav",{className:null!==(t=e.className)&&void 0!==t?t:"",ref:e.containerRef},r.createElement("ul",{className:"\n list-unstyled d-inline-block m-0 ".concat(l.Z.pillTabSelector,"\n ").concat(e.borderRadius?l.Z.radiusSmall:"","\n ").concat(e.listClassName,"\n ")},e.tabs.map((function(e,t){return r.createElement("li",{className:"\n p-0 ".concat(l.Z.tab," ").concat(e.active?"btn btn-dark":"btn btn-outline-dark","\n ").concat(e.name?l.Z.minWidth:""," ").concat(e.className,"\n "),key:t},e.appLink?r.createElement(a.F,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(l.Z.tabLink,"\n ")},r.createElement(u,{tab:e})):r.createElement(s.L,{className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(l.Z.tabLink,"\n "),onClick:function(){return function(e){!e.active&&e.onSelect&&(e.onSelect(),e.analyticsData&&e.analyticsOptions&&o.k.logUserAction(e.analyticsData,e.analyticsOptions))}(e)}},r.createElement(u,{tab:e})))}))))}p.defaultProps={borderRadius:"lg"}},95278:(e,t,n)=>{n.d(t,{Z:()=>i});var r=n(32735),o=n(22771);const a={partialSize:"ntGsj"};function i(){return r.createElement("div",{className:"partial-loading-background ".concat(o.Z.pillTabSelector," ").concat(a.partialSize)})}},94644:(e,t,n)=>{n.d(t,{r:()=>u});var r=n(50242),o=n(81886),a=n(67058),i=n(14553),s=n(49267),c=n(49075),l={notFound:a.d,forbidden:{rating:i.q,yearLevel:i.q,region:s.a,privacy:i.q},badRequest:c._,internalServerError:c._};function u(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var a;a="number"==typeof e?e:e.status;var i=Object.assign(Object.assign({},l),t);a&&o.Q.Ry.isStatusCodeError(a)&&(a!==r.o.InternalServer?a!==r.o.NotFound?a!==r.o.Forbidden?n.badRequest||o.Q.Ry.throw(new i.badRequest):n.forbidden||o.Q.Ry.throw(new i.forbidden.privacy):n.notFound||o.Q.Ry.throw(new i.notFound):n.internalServerError||o.Q.Ry.throw(new c._))}}},91286:(e,t,n)=>{n.d(t,{v:()=>i});var r=n(32735),o=n(94644);function a(e){return e.map((function(e){return e.statusCode})).join(":")}function i(e,t,n){var i=Array.isArray(e)?e:[e];(0,r.useEffect)((function(){i.forEach((function(e){(0,o.r)(e.statusCode,t,n)}))}),[a(i),t,n])}},53036:(e,t,n)=>{n.d(t,{h:()=>o});var r=n(32045),o={getStatusAsString:function(e){if("string"==typeof e)return e;if("number"==typeof e){if(0===e)return r.w.Disabled;if(1===e)return r.w.Active;if(2===e)return r.w.Inactive}return null},getStatusAsNumber:function(e){if("number"==typeof e)return e;if("string"==typeof e){if(e===r.w.Disabled)return 0;if(e===r.w.Active)return 1;if(e===r.w.Inactive)return 2}return null}}},62691:(e,t,n)=>{n.d(t,{m:()=>b});var r=n(32735),o=n(23481),a=n(49985),i=n(65858),s=n(11607),c=n(83914),l=n(69883),u=n(1643),p=n(35223);function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var m=o.T.encloseNamespace("classrooms.classroomStar"),d=function(e){return u.h.isFavouritedByCurrentUser(e)};function b(e){var t,n,o=(t=r.useState(d(e.classroom)),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,o,a,i,s=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,o=e}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(l)throw o}}return s}}(t,n)||function(e,t){if(e){if("string"==typeof e)return f(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)?f(e,t):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),u=o[0],b=o[1],y=(0,l.Z)();return r.useEffect((function(){d(e.classroom)!==u&&b(!u)}),[d(e.classroom)]),r.createElement(s.L,{onClick:function(){b(!u),e.onToggle(!u,(function(){return function(t){if(t)return a.k.logUserAction({id:e.classroom.id},{location:e.locationContext,actionType:i.Vw.Favourite,descriptor:i.DL.On,entity:i.py.Classroom,workflowPhase:i.eu.Complete}),void y.success(m("pinSuccess",{classroomName:e.classroom.name,escapeText:!0}));a.k.logUserAction({id:e.classroom.id},{location:e.locationContext,actionType:i.Vw.Favourite,descriptor:i.DL.Off,entity:i.py.Classroom,workflowPhase:i.eu.Complete}),y.success(m("unpinSuccess",{classroomName:e.classroom.name,escapeText:!0}))}(!u)}),(function(){return b(t=u),void(t?y.error(m("unpinError",{classroomName:e.classroom.name,escapeText:!0})):y.error(m("pinError",{classroomName:e.classroom.name,escapeText:!0})));var t}))},className:u?"text-yellow":""},r.createElement(c.x,{svgName:u?p.vn.Star:p.vn.StarOutline,size:c.S.Medium}))}},46009:(e,t,n)=>{n.d(t,{p:()=>c});var r=n(20354),o=n(16714),a=n(31949),i=n(22902),s=n(88630),c=function(e){var t,n=(0,(0,i.T)().hasPermissions)(o.C.ManageAllClassrooms),c=r.a.useBasicFetch(a.N.currentUser()),l=r.a.useBasicFetch(!n&&(null===(t=c.data)||void 0===t?void 0:t.customerId)&&s.F.getClassroomStaff(e,c.data.customerId)),u=r.a.useBasicFetch(!n&&s.F.getClassroomOwners(e));if(n)return{isLoading:!1,isOwner:!0,isTeacher:!0};if(!l.hasCompleted||!u.hasCompleted||!c.hasCompleted)return{isLoading:!0};var p=c.data.id.toString(),f=!!u.data.find((function(e){return e.id.toString()===p})),m=!!l.data.find((function(e){return e.id.toString()===p}));return{isLoading:!1,isTeacher:f||m,isOwner:f}}},31491:(e,t,n)=>{n.d(t,{_:()=>R});var r=n(16714),o=n(67058),a=n(91286),i=n(22902),s=n(23481),c=n(64364),l=n(14070),u=n(97291);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 f(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,m(r.key),r)}}function m(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+""}function d(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(d=function(){return!!e})()}function b(e){return b=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},b(e)}function y(e,t){return y=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},y(e,t)}var v="classrooms.cannotAccessClassroomError",g=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t,n){return t=b(t),function(e,t){if(t&&("object"==p(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,d()?Reflect.construct(t,n||[],b(e).constructor):t.apply(e,n))}(this,t,["Cannot access classroom"])}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&y(e,t)}(t,e),n=t,(r=[{key:"name",get:function(){return"CannotAccessClassroomError"}},{key:"heading",get:function(){return s.T.getPhrase(v,"heading")}},{key:"description",get:function(){return s.T.getPhrase(v,"description")}},{key:"cta",get:function(){return{text:s.T.getPhrase(v,"cta"),appLink:{application:u.O.CLASSROOMS,action:l.e.Classrooms.HOME}}}}])&&f(n.prototype,r),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r}(c.H);function O(e){return O="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},O(e)}function S(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,h(r.key),r)}}function h(e){var t=function(e){if("object"!=O(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=O(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==O(t)?t:t+""}function C(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(C=function(){return!!e})()}function w(e){return w=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},w(e)}function E(e,t){return E=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},E(e,t)}var T="classrooms.classroomNotFoundError",k=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t,n){return t=w(t),function(e,t){if(t&&("object"==O(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,C()?Reflect.construct(t,n||[],w(e).constructor):t.apply(e,n))}(this,t,["Classroom doesn't exist"])}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&E(e,t)}(t,e),n=t,(r=[{key:"name",get:function(){return"ClassroomNotFoundError"}},{key:"heading",get:function(){return s.T.getPhrase(T,"heading")}},{key:"description",get:function(){return s.T.getPhrase(T,"description")}},{key:"cta",get:function(){return{text:s.T.getPhrase(T,"cta"),appLink:{application:u.O.CLASSROOMS,action:l.e.Classrooms.HOME}}}}])&&S(n.prototype,r),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r}(c.H),R=function(e){var t=(0,i.T)().hasPermissions;(0,a.v)(e,{notFound:k,forbidden:{privacy:t(r.C.ViewClassrooms)?g:o.d}})}},22602:(e,t,n)=>{n.d(t,{R:()=>w});var r=n(32735),o=n(23481),a=n(81886),i=n(65858),s=n(83657),c=n(49935),l=n(38502),u=n(32045),p=n(53036),f=n(14070),m=n(97291),d=n(62691),b=n(86764),y=n(86613),v=n(3747),g=n(35223),O=n(46009),S="classrooms.hooks",h=function(e,t,n){var r=(0,v.a)(b.r.SMDown),a=(0,O.p)(e),s={id:e},c={entity:i.py.Classroom,workflowPhase:i.eu.Start,location:i.LZ.Classroom},l="btn btn-outline-dark me-2",u=[];return a.isOwner&&u.push({order:0,label:o.T.getPhrase(S,"editClassroom"),appLink:{application:m.O.CLASSROOMS,action:f.e.Classrooms.EDIT_CLASSROOM,args:[e]},disabled:n,tooltip:n?o.T.getPhrase(S,"disabledByRostering"):"",analyticsData:s,analyticsOptions:Object.assign(Object.assign({},c),{actionType:i.Vw.Edit}),svgName:g.vn.Edit,button:!r,className:n?"disabled ".concat(l):r?"":l}),u.push({order:10,label:o.T.getPhrase(S,"generateJoinLink"),appLink:{application:m.O.CLASSROOMS,action:f.e.Classrooms.GENERATE_JOIN_LINK,args:[e]},disabled:n,tooltip:n?o.T.getPhrase(S,"disabledByRostering"):"",button:!r&&!a.isOwner,className:n?"disabled":r||a.isOwner?"":l}),a.isOwner&&u.push({order:20,label:o.T.getPhrase(S,"archive"),analyticsData:s,disabled:n,tooltip:n?o.T.getPhrase(S,"disabledByRostering"):"",analyticsOptions:Object.assign(Object.assign({},c),{actionType:i.Vw.Archive,descriptor:i.DL.On}),appLink:{application:m.O.CLASSROOMS,action:f.e.Classrooms.ARCHIVE_CLASSROOM,args:[e]},className:n?"disabled":""}),(a.isOwner||a.isTeacher)&&t.role!==y.i.Admin&&u.push({order:30,label:o.T.getPhrase(S,"leaveClassroom"),disabled:n,tooltip:n?o.T.getPhrase(S,"disabledByRostering"):"",className:n?"disabled":"text-danger",analyticsData:Object.assign(Object.assign({},s),{teacherId:t.id}),analyticsOptions:Object.assign(Object.assign({},c),{actionType:i.Vw.Dissociate,descriptor:i.iF.User}),appLink:{application:m.O.CLASSROOMS,action:f.e.Classrooms.REMOVE_TEACHERS,args:[e],params:{teacherIds:[t.id]}}}),u},C=o.T.encloseNamespace("classrooms.classroomLayout");function w(e){var t=(0,O.p)(e.classroom.id),n=h(e.classroom.id,e.currentUser,e.isRostered),o=p.h.getStatusAsString(e.classroom.status),b=[{name:"Classroom feed",appLink:{application:m.O.CLASSROOMS,action:f.e.Classrooms.CLASSROOM_REPORTS,args:[e.classroom.id]},active:"reports"===e.activeTab},{name:C("students"),appLink:{application:m.O.CLASSROOMS,action:f.e.Classrooms.CLASSROOM_STUDENTS,args:[e.classroom.id]},active:"students"===e.activeTab},{name:C("groups"),appLink:{application:m.O.CLASSROOMS,action:f.e.Classrooms.CLASSROOM_GROUPS,args:[e.classroom.id]},active:"groups"===e.activeTab},{name:C("teachers"),appLink:{application:m.O.CLASSROOMS,action:f.e.Classrooms.CLASSROOM_TEACHERS,args:[e.classroom.id]},active:"teachers"===e.activeTab}].filter((function(t){return!e.isRostered||t.name!==C("groups")}));return r.useEffect((function(){o!==u.w.Active&&a.Q.C$.trigger({application:m.O.CLASSROOMS,action:f.e.Classrooms.HOME},{replace:!0})}),[e.classroom.status]),!t.isLoading&&!t.isTeacher||o!==u.w.Active?r.createElement(r.Fragment,null):r.createElement("div",{className:"px-3 position-relative"},r.createElement("div",null,!!n.length&&r.createElement("div",{className:"float-end"},r.createElement(s.e,{actions:n,actionsDropdownClassName:"btn btn-outline-dark"})),r.createElement("div",{className:"d-inline-block align-text-bottom me-1"},r.createElement(d.m,{classroom:e.classroom,onToggle:e.onTogglePin,locationContext:i.LZ.Classroom})),r.createElement("h1",{className:"d-inline mb-0"},e.classroom.name)),r.createElement("div",{className:"pb-3 pt-1"},r.createElement(c.Oo,{breadcrumbs:[{name:C("classroomsBreadcrumb"),appLink:{application:m.O.CLASSROOMS,action:f.e.Classrooms.HOME}},{name:e.classroom.name,active:!0}]})),r.createElement("div",{className:"pb-2"},r.createElement(l.r,{tabs:b})),e.children)}},22771:(e,t,n)=>{n.d(t,{Z:()=>r});const r={pillTabSelector:"Hdi6o",tab:"RvNxr",minWidth:"GHSz9",radiusSmall:"VhJJa",tabLink:"WFyvo"}}}]);
|
|
2
|
+
//# sourceMappingURL=2952-c5ec8f135e-lite.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/2952-c5ec8f135e-lite.chunk.js","mappings":"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","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: 'Classroom feed',\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":""}
|