@clickview/lite 0.50.0-rc.8 → 0.50.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (21) hide show
  1. package/dist/bundles.json +2 -2
  2. package/dist/css/{lite-app-f2595ac365.css → lite-app-cf9b57ee91.css} +1 -1
  3. package/dist/scripts/{1617-d6c1d47afe-lite.chunk.js → 1617-3cf9199cb1-lite.chunk.js} +2 -2
  4. package/dist/scripts/{1617-d6c1d47afe-lite.chunk.js.map → 1617-3cf9199cb1-lite.chunk.js.map} +1 -1
  5. package/dist/scripts/{3012-1cde12ab3d-lite.chunk.js → 3012-08307aac0e-lite.chunk.js} +2 -2
  6. package/dist/scripts/{3012-1cde12ab3d-lite.chunk.js.map → 3012-08307aac0e-lite.chunk.js.map} +1 -1
  7. package/dist/scripts/{3020-97e3d647ab-lite.chunk.js → 3020-9f647705a0-lite.chunk.js} +2 -2
  8. package/dist/scripts/{3020-97e3d647ab-lite.chunk.js.map → 3020-9f647705a0-lite.chunk.js.map} +1 -1
  9. package/dist/scripts/5974-ec9007f42b-lite.chunk.js +2 -0
  10. package/dist/scripts/5974-ec9007f42b-lite.chunk.js.map +1 -0
  11. package/dist/scripts/7115-18b0e390de-lite.chunk.js +2 -0
  12. package/dist/scripts/7115-18b0e390de-lite.chunk.js.map +1 -0
  13. package/dist/scripts/{bundle-9111dc8132.min.js → bundle-48ad415564.min.js} +3 -3
  14. package/dist/scripts/bundle-48ad415564.min.js.map +1 -0
  15. package/package.json +1 -1
  16. package/dist/scripts/5974-215374f364-lite.chunk.js +0 -2
  17. package/dist/scripts/5974-215374f364-lite.chunk.js.map +0 -1
  18. package/dist/scripts/7115-8510dcd735-lite.chunk.js +0 -2
  19. package/dist/scripts/7115-8510dcd735-lite.chunk.js.map +0 -1
  20. package/dist/scripts/bundle-9111dc8132.min.js.map +0 -1
  21. /package/dist/scripts/{bundle-9111dc8132.min.js.LICENSE.txt → bundle-48ad415564.min.js.LICENSE.txt} +0 -0
package/dist/bundles.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "appBundle": "bundle-9111dc8132.min.js",
3
- "cssBundle": "lite-app-f2595ac365.css",
2
+ "appBundle": "bundle-48ad415564.min.js",
3
+ "cssBundle": "lite-app-cf9b57ee91.css",
4
4
  "polyfillBundle": "polyfills-365f92d668.min.js"
5
5
  }
@@ -42,7 +42,7 @@
42
42
  .DVOae{width:2rem;height:2rem}.JP5O_{flex-shrink:0}
43
43
  .WPAay{height:100%;width:100%;position:relative}.rs3gV{height:2.5rem}.XgvOz{position:absolute;top:100%;left:calc(-1*(1.5rem + (0.3125rem * 2)));right:0;z-index:100}.fE57B{right:calc(-1*(1.5rem + (0.3125rem * 2)))}
44
44
  .XFldg{width:2rem}.fwVCX{width:1.2rem;height:1.2rem}.qhrkD{position:absolute !important;right:0;bottom:-0.3125rem;top:initial !important;min-width:0;font-size:65%}
45
- .TIs68{position:fixed;position:sticky;background-color:#fff;border-bottom:1px solid #eaeaea;z-index:1031;padding-right:0 !important;top:0;height:4.1875rem}.BTSw6{width:10rem;height:2.4rem}@media(max-width: 575.98px){.BTSw6{width:2.1875rem;height:2.1875rem;padding-top:0;padding-bottom:0}}.ZjiVZ{z-index:1}.ZjiVZ .G9lTf{color:#84868d;height:2rem;width:2rem;cursor:pointer;display:inline-block}.ZjiVZ .G9lTf svg{width:100% !important;height:100% !important}.APoV1{position:absolute;top:50%;transform:translateY(-50%);left:0px;width:100%;padding-left:14.75rem}.u1G6e{padding-left:1.25rem;padding-right:20.5rem}@media(max-width: 991.98px){.u1G6e{padding-right:12rem}}.Gtnta{min-width:calc(1140px - 36.875rem);width:100%;max-width:50rem;padding:0;border-radius:.25rem}@media(max-width: 1199.98px){.Gtnta{min-width:calc(960px - 36.875rem);margin-left:0}}@media(max-width: 991.98px){.Gtnta{min-width:calc(720px - 36.875rem);margin-left:0;max-width:100%}}@media(max-width: 767.98px){.Gtnta{min-width:calc(540px - 36.875rem)}}
45
+ .TIs68{position:fixed;position:sticky;background-color:#fff;border-bottom:1px solid #eaeaea;z-index:1031;padding-right:0 !important;top:0;height:4.1875rem}.BTSw6{width:10rem;height:2.4rem}@media(max-width: 575.98px){.BTSw6{width:2.1875rem;height:2.1875rem;padding-top:0;padding-bottom:0}}.ZjiVZ{z-index:1}.ZjiVZ .G9lTf{color:#84868d;height:2rem;width:2rem;cursor:pointer;display:inline-block}.ZjiVZ .G9lTf svg{width:100% !important;height:100% !important}.APoV1{position:absolute;top:50%;transform:translateY(-50%);left:0px;width:100%;padding-left:14.75rem}.u1G6e{padding-left:1.25rem;padding-right:20.75rem}@media(max-width: 991.98px){.u1G6e{padding-right:12rem}}.Gtnta{min-width:calc(1140px - 36.875rem);width:100%;max-width:50rem;padding:0;border-radius:.25rem}@media(max-width: 1199.98px){.Gtnta{min-width:calc(960px - 36.875rem);margin-left:0}}@media(max-width: 991.98px){.Gtnta{min-width:calc(720px - 36.875rem);margin-left:0;max-width:100%}}@media(max-width: 767.98px){.Gtnta{min-width:calc(540px - 36.875rem)}}
46
46
  ._N1vT{position:relative;border-radius:50%;background-color:#fff;width:100%;height:100%;text-align:center}._N1vT svg{position:absolute;top:50%;left:54%;transform:translate(-50%, -50%);width:60%;height:60%}
47
47
  .dYoHc{bottom:0;z-index:5000;border-top-right-radius:1.5rem;border-top-left-radius:1.5rem;max-width:100vw}.J5faz{z-index:4999}.vlVCq{width:2.5rem;height:2.5rem}.h1ekZ{width:5.375rem}.qN1BD{position:fixed;overflow:hidden;width:100%;height:100%}
48
48
  .fk5o1{width:.5rem;height:.5rem;background-color:#d7d7d7}.fk5o1.LjGGx{width:.3125rem;height:.3125rem}.fk5o1.jA0tn{background-color:#38a2e8}.Lr30e{gap:.625rem}.J8mC3{cursor:initial !important}
@@ -1,2 +1,2 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1617],{94644:(e,a,t)=>{t.d(a,{r:()=>d});var n=t(50242),r=t(81886),o=t(67058),i=t(14553),s=t(49267),l=t(49075),c={notFound:o.d,forbidden:{rating:i.q,yearLevel:i.q,region:s.a,privacy:i.q},badRequest:l._};function d(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var o;o="number"==typeof e?e:e.status;var i=Object.assign(Object.assign({},c),a);o&&r.Q.Ry.isStatusCodeError(o)&&(o!==n.o.NotFound?o!==n.o.Forbidden?t.badRequest||r.Q.Ry.throw(new i.badRequest):t.forbidden||r.Q.Ry.throw(new i.forbidden.privacy):t.notFound||r.Q.Ry.throw(new i.notFound))}}},62691:(e,a,t)=>{t.d(a,{m:()=>f});var n=t(32735),r=t(23481),o=t(49985),i=t(65858),s=t(11607),l=t(83914),c=t(69883),d=t(1643),m=t(35223);function u(e,a){(null==a||a>e.length)&&(a=e.length);for(var t=0,n=Array(a);t<a;t++)n[t]=e[t];return n}var p=r.T.encloseNamespace("classrooms.classroomStar"),v=function(e){return d.h.isFavouritedByCurrentUser(e)};function f(e){var a,t,r=(a=n.useState(v(e.classroom)),t=2,function(e){if(Array.isArray(e))return e}(a)||function(e,a){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var n,r,o,i,s=[],l=!0,c=!1;try{if(o=(t=t.call(e)).next,0===a){if(Object(t)!==t)return;l=!1}else for(;!(l=(n=o.call(t)).done)&&(s.push(n.value),s.length!==a);l=!0);}catch(e){c=!0,r=e}finally{try{if(!l&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(c)throw r}}return s}}(a,t)||function(e,a){if(e){if("string"==typeof e)return u(e,a);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?u(e,a):void 0}}(a,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),d=r[0],f=r[1],g=(0,c.Z)();return n.useEffect((function(){v(e.classroom)!==d&&f(!d)}),[v(e.classroom)]),n.createElement(s.L,{onClick:function(){f(!d),e.onToggle(!d,(function(){return function(a){if(a)return o.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 g.success(p("pinSuccess",{classroomName:e.classroom.name,escapeText:!0}));o.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}),g.success(p("unpinSuccess",{classroomName:e.classroom.name,escapeText:!0}))}(!d)}),(function(){return f(a=d),void(a?g.error(p("unpinError",{classroomName:e.classroom.name,escapeText:!0})):g.error(p("pinError",{classroomName:e.classroom.name,escapeText:!0})));var a}))},className:d?"text-yellow":""},n.createElement(l.x,{svgName:d?m.vn.Star:m.vn.StarOutline,size:l.S.Medium}))}},46542:(e,a,t)=>{t.d(a,{D:()=>M,J:()=>D});var n=t(32735),r=t(69674),o=t(79967),i=t(23481),s=t(91967),l=t(65858),c=t(83657),d=t(36848),m=t(83914),u=t(83345),p=t(76177),v=t(40424),f=t(35223),g=t(16714),b=t(22902),C=t(14070),h=t(97291),y=t(46009),w=i.T.encloseNamespace("classrooms.classroomActions");function E(e){var a,t=n.useContext(D),r=e.value,o=!!(null===(a=r._integrations)||void 0===a?void 0:a.rostered),i=(0,y.p)(r.id),s=(0,b.T)().hasPermissions,d={id:r.id},m=[];return i.isOwner&&(m.push({order:0,label:w("edit"),appLink:{application:h.O.CLASSROOMS,action:C.e.Classrooms.EDIT_CLASSROOM,args:[r.id]},disabled:o,className:o?"disabled":"",tooltip:o?w("disabled"):"",analyticsData:d,analyticsOptions:{entity:l.py.Classroom,actionType:l.Vw.Edit,location:l.LZ.ClassroomsListItem,workflowPhase:l.eu.Start}}),m.push({order:10,label:w("archive"),appLink:{application:h.O.CLASSROOMS,action:C.e.Classrooms.ARCHIVE_CLASSROOM,args:[r.id]},disabled:o,className:o?"disabled":"",tooltip:o?w("disabled"):"",analyticsData:d,analyticsOptions:{entity:l.py.Classroom,actionType:l.Vw.Archive,descriptor:l.DL.On,location:l.LZ.ClassroomsListItem,workflowPhase:l.eu.Start}})),s(g.C.ManageAllClassrooms)||m.push({order:20,label:w("leaveClassroom"),className:"text-danger",analyticsData:Object.assign(Object.assign({},d),{teacherId:t.currentUser.id}),analyticsOptions:{entity:l.py.Classroom,location:l.LZ.ClassroomsListItem,workflowPhase:l.eu.Start,actionType:l.Vw.Dissociate,descriptor:l.iF.User},appLink:{application:h.O.CLASSROOMS,action:C.e.Classrooms.REMOVE_TEACHERS,args:[r.id],params:{teacherIds:[t.currentUser.id]}}}),n.createElement(c.e,{className:"w-100 justify-content-end pe-2",actionsDropdownClassName:"btn btn-link ms-1",actions:m})}var N=t(20789),k=t(18995),O=t(64818);const S={avatarContainer:"zMxWi"};function x(e){var a;return n.createElement(p.u,{title:"".concat(e.item.name," ").concat(e.item.surname),spanHack:!0,spanHackClassName:"h-100 w-100"},n.createElement(N.q,{imageUrl:null===(a=e.item.avatar)||void 0===a?void 0:a.url,imageCdnUrl:e.imageCdnUrl,initials:O.l.getInitials(e.item.name,e.item.surname)}))}function T(e){return n.createElement(k.e,Object.assign({},e,{items:e.owners,avatarItem:x,avatarContainerClassname:S.avatarContainer,roleToDisplay:"staff"}))}var A=t(62691);const L={avatar:"btxC4",table:"IUfRF",name:"BBqbX"};function j(e){return function(e){if(Array.isArray(e))return I(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,a){if(e){if("string"==typeof e)return I(e,a);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?I(e,a):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 I(e,a){(null==a||a>e.length)&&(a=e.length);for(var t=0,n=Array(a);t<a;t++)n[t]=e[t];return n}var F="classrooms.classroomsTable",R=i.T.encloseNamespace(F),U={table:"striped-list no-full-width pb-3 ".concat(L.table),header:"fw-semibold pb-1",headerCell:"py-2 ps-2 text-nowrap",row:"striped-row rounded",cell:"d-flex align-items-center py-2 ps-2"},D=n.createContext(null);function M(e){var a,t=e.imageCdnUrl,i=e.appLinks,g=e.onTogglePin,b=e.hasRostering,C=(0,o.k)();a=function(e){return"classroom"in e}(i)?function(e){var a=e.imageCdnUrl,t=e.appLinks,r=e.onTogglePin,o=e.breakpoints,i=e.hasRostering,c=o&&(o.xs||o.sm),g=o&&(o.md||c),b=[{accessor:function(e){return e},id:"pinned",Cell:function(e){var a=e.value;return n.createElement("div",{className:"w-100"},s.q.isFunction(r)&&n.createElement("div",{className:L.starContainer},n.createElement(A.m,{classroom:a,onToggle:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return r.apply(void 0,[a].concat(t))},locationContext:l.LZ.ClassroomsListItem})))},width:15},{Header:R("classroom"),accessor:function(e){return e},id:"name",Cell:function(e){var a=e.value;return n.createElement(d.F,{appLink:Object.assign(Object.assign({},t.classroom),{args:[a.id]}),className:"cursor-pointer ".concat(L.name)},a.name)},width:c?80:70},{accessor:"enrolments",Header:R("owner"),id:"owner",Cell:function(e){var t=e.value,r=t.data.filter((function(e){return e.role===v.tM.Owner})).map((function(e){return e.user})).filter(Boolean);return t.data&&t.data.length&&r.length?n.createElement(T,{imageCdnUrl:a,owners:r,maxAvatars:c?1:2}):n.createElement(n.Fragment,null)},width:g?30:40},i&&!c&&{Header:R("type"),accessor:function(e){return e},Cell:function(e){return e.value._integrations.rostered?n.createElement(u.x,{namespace:F,phrase:"roster"}):n.createElement(u.x,{namespace:F,phrase:"manual"})},width:40},{Header:R("link"),accessor:function(e){return e},id:"link",Cell:function(e){var a,r,o,i,s=e.value;return n.createElement(p.u,{title:(null===(a=s._integrations)||void 0===a?void 0:a.rostered)?R("disabled"):"",spanHack:!0},n.createElement(d.F,{disabled:null===(r=s._integrations)||void 0===r?void 0:r.rostered,className:(null===(o=s._integrations)||void 0===o?void 0:o.rostered)?"text-secondary cursor-default":"",appLink:(null===(i=s._integrations)||void 0===i?void 0:i.rostered)?null:Object.assign(Object.assign({},t.link),{args:[s.id],params:{source:"list"}})},n.createElement(m.x,{svgName:f.vn.Link,className:"svg-container me-1"}),n.createElement(u.x,{namespace:F,phrase:"generate"})))},width:g?40:50},{accessor:function(e){return e},id:"actions",Cell:E,width:g?30:50}];return b.filter(Boolean)}({imageCdnUrl:t,appLinks:i,onTogglePin:g,breakpoints:C,hasRostering:b}):function(e){return[{Header:n.createElement("div",{className:"ms-3"},R("classroom")),accessor:function(e){return e},id:"name",Cell:function(e){var a=e.value;return n.createElement("div",{className:"ms-3"},a.name)},width:80},{accessor:"id",id:"placeholder-column",Cell:function(){return n.createElement(n.Fragment,null)},width:120},{accessor:function(e){return e},id:"retrieve",Cell:function(a){var t=a.value;return n.createElement(c.e,{actions:[{appLink:Object.assign(Object.assign({},e.retrieve),{args:[t.id]}),disabled:false,tooltip:R("retrieve"),svgName:f.vn.Retrieve,button:!0}],className:"w-100 justify-content-end pe-2",actionsDropdownClassName:"btn btn-link ms-1"})},width:10},{accessor:function(e){return e},id:"delete",Cell:function(a){var t=a.value;return n.createElement(c.e,{actions:[{appLink:Object.assign(Object.assign({},e.delete),{args:[t.id]}),disabled:false,tooltip:R("delete"),svgName:f.vn.Delete,button:!0}],className:"w-100 justify-content-end pe-2",actionsDropdownClassName:"btn btn-link ms-1"})},width:10}].filter(Boolean)}(i);var h=function(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],t=arguments.length>2?arguments[2]:void 0,r=arguments.length>3?arguments[3]:void 0;return n.useMemo((function(){var n;if(!t){var r=null!==(n=null==e?void 0:e.filter((function(e){return!a.some((function(a){return a.id===e.id}))})))&&void 0!==n?n:[];return[].concat(j(a),j(r))}return e}),[r,t])}(e.allClassrooms,e.pinnedClassrooms,e.query,e.refreshTable);return n.createElement(D.Provider,{value:e},n.createElement(r.i,{columns:a,data:h,theme:U}))}},91899:(e,a,t)=>{t.d(a,{I:()=>s});var n=t(32735);const r={partialStar:"Xbiwa",partialText:"Txo6a",partialName:"WT6R3",partialAvatar:"T5kj5",partialAction:"VI06f",shortHeading:"Gvufi",heading:"dh0wz",starColumn:"GsT4V",nameColumn:"eAvib",ownerColumn:"T6yK9",actionsColumn:"LIRFn"};function o(){return n.createElement("li",{className:"d-flex justify-content-between align-items-center py-2"},n.createElement("div",{className:"d-flex align-items-center"},n.createElement("div",{className:"ms-4 partial-loading-background ".concat(r.partialStar)}),n.createElement("div",{className:"mx-3 partial-loading-background ".concat(r.partialName)}),n.createElement("div",{className:"ms-3 me-4 rounded-circle partial-loading-background ".concat(r.partialAvatar)}),n.createElement("div",{className:"ms-4 rounded-circle partial-loading-background ".concat(r.partialAvatar)}),n.createElement("div",{className:"mx-1 partial-loading-background ".concat(r.partialText)}),n.createElement("div",{className:"mx-4 partial-loading-background ".concat(r.partialText)})),n.createElement("div",{className:"ms-4 me-3 partial-loading-background ".concat(r.partialAction)}))}function i(){return n.createElement("div",{className:"d-flex mb-1"},n.createElement("div",{className:"".concat(r.starColumn)}," "),n.createElement("div",{className:"".concat(r.nameColumn," p-2")},n.createElement("div",{className:"partial-loading-background ".concat(r.heading)})),n.createElement("div",{className:"".concat(r.ownerColumn," p-2")},n.createElement("div",{className:"partial-loading-background ".concat(r.shortHeading)})),n.createElement("div",{className:"".concat(r.ownerColumn," p-2 d-none d-md-flex")},n.createElement("div",{className:"partial-loading-background ".concat(r.shortHeading)})),n.createElement("div",{className:"".concat(r.ownerColumn," p-2 d-none d-md-flex")},n.createElement("div",{className:"partial-loading-background ".concat(r.heading)})),n.createElement("div",{className:"".concat(r.actionsColumn," p-2")}," "))}function s(){return n.createElement(n.Fragment,null,n.createElement(i,null),n.createElement("ul",{className:"m-0 list-unstyled striped-list"},Array(15).fill(null).map((function(e,a){return n.createElement(o,{key:a})}))))}},46009:(e,a,t)=>{t.d(a,{p:()=>l});var n=t(20354),r=t(16714),o=t(31949),i=t(22902),s=t(88630),l=function(e){var a,t=(0,(0,i.T)().hasPermissions)(r.C.ManageAllClassrooms),l=n.a.useBasicFetch(o.N.currentUser()),c=n.a.useBasicFetch(!t&&(null===(a=l.data)||void 0===a?void 0:a.customerId)&&s.F.getClassroomInvitees(e,l.data.customerId)),d=n.a.useBasicFetch(!t&&s.F.getClassroomOwners(e));if(t)return{isLoading:!1,isOwner:!0,isTeacher:!0};if(!c.hasCompleted||!d.hasCompleted||!l.hasCompleted)return{isLoading:!0};var m=l.data.id.toString(),u=!!d.data.find((function(e){return e.id.toString()===m})),p=!!c.data.find((function(e){return e.id.toString()===m}));return{isLoading:!1,isTeacher:u||p,isOwner:u}}}}]);
2
- //# sourceMappingURL=1617-d6c1d47afe-lite.chunk.js.map
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1617],{94644:(e,a,t)=>{t.d(a,{r:()=>d});var n=t(50242),r=t(81886),o=t(67058),i=t(14553),s=t(49267),l=t(49075),c={notFound:o.d,forbidden:{rating:i.q,yearLevel:i.q,region:s.a,privacy:i.q},badRequest:l._};function d(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var o;o="number"==typeof e?e:e.status;var i=Object.assign(Object.assign({},c),a);o&&r.Q.Ry.isStatusCodeError(o)&&(o!==n.o.NotFound?o!==n.o.Forbidden?t.badRequest||r.Q.Ry.throw(new i.badRequest):t.forbidden||r.Q.Ry.throw(new i.forbidden.privacy):t.notFound||r.Q.Ry.throw(new i.notFound))}}},62691:(e,a,t)=>{t.d(a,{m:()=>f});var n=t(32735),r=t(23481),o=t(49985),i=t(65858),s=t(11607),l=t(83914),c=t(69883),d=t(1643),m=t(35223);function u(e,a){(null==a||a>e.length)&&(a=e.length);for(var t=0,n=Array(a);t<a;t++)n[t]=e[t];return n}var p=r.T.encloseNamespace("classrooms.classroomStar"),v=function(e){return d.h.isFavouritedByCurrentUser(e)};function f(e){var a,t,r=(a=n.useState(v(e.classroom)),t=2,function(e){if(Array.isArray(e))return e}(a)||function(e,a){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var n,r,o,i,s=[],l=!0,c=!1;try{if(o=(t=t.call(e)).next,0===a){if(Object(t)!==t)return;l=!1}else for(;!(l=(n=o.call(t)).done)&&(s.push(n.value),s.length!==a);l=!0);}catch(e){c=!0,r=e}finally{try{if(!l&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(c)throw r}}return s}}(a,t)||function(e,a){if(e){if("string"==typeof e)return u(e,a);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?u(e,a):void 0}}(a,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),d=r[0],f=r[1],g=(0,c.Z)();return n.useEffect((function(){v(e.classroom)!==d&&f(!d)}),[v(e.classroom)]),n.createElement(s.L,{onClick:function(){f(!d),e.onToggle(!d,(function(){return function(a){if(a)return o.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 g.success(p("pinSuccess",{classroomName:e.classroom.name,escapeText:!0}));o.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}),g.success(p("unpinSuccess",{classroomName:e.classroom.name,escapeText:!0}))}(!d)}),(function(){return f(a=d),void(a?g.error(p("unpinError",{classroomName:e.classroom.name,escapeText:!0})):g.error(p("pinError",{classroomName:e.classroom.name,escapeText:!0})));var a}))},className:d?"text-yellow":""},n.createElement(l.x,{svgName:d?m.vn.Star:m.vn.StarOutline,size:l.S.Medium}))}},46542:(e,a,t)=>{t.d(a,{D:()=>M,J:()=>D});var n=t(32735),r=t(69674),o=t(79967),i=t(23481),s=t(91967),l=t(65858),c=t(83657),d=t(36848),m=t(83914),u=t(83345),p=t(76177),v=t(40424),f=t(35223),g=t(16714),b=t(22902),C=t(14070),h=t(97291),y=t(46009),w=i.T.encloseNamespace("classrooms.classroomActions");function E(e){var a,t=n.useContext(D),r=e.value,o=!!(null===(a=r._integrations)||void 0===a?void 0:a.rostered),i=(0,y.p)(r.id),s=(0,b.T)().hasPermissions,d={id:r.id},m=[];return i.isOwner&&(m.push({order:0,label:w("edit"),appLink:{application:h.O.CLASSROOMS,action:C.e.Classrooms.EDIT_CLASSROOM,args:[r.id]},disabled:o,className:o?"disabled":"",tooltip:o?w("disabled"):"",analyticsData:d,analyticsOptions:{entity:l.py.Classroom,actionType:l.Vw.Edit,location:l.LZ.ClassroomsListItem,workflowPhase:l.eu.Start}}),m.push({order:10,label:w("archive"),appLink:{application:h.O.CLASSROOMS,action:C.e.Classrooms.ARCHIVE_CLASSROOM,args:[r.id]},disabled:o,className:o?"disabled":"",tooltip:o?w("disabled"):"",analyticsData:d,analyticsOptions:{entity:l.py.Classroom,actionType:l.Vw.Archive,descriptor:l.DL.On,location:l.LZ.ClassroomsListItem,workflowPhase:l.eu.Start}})),s(g.C.ManageAllClassrooms)||m.push({order:20,label:w("leaveClassroom"),className:"text-danger",analyticsData:Object.assign(Object.assign({},d),{teacherId:t.currentUser.id}),analyticsOptions:{entity:l.py.Classroom,location:l.LZ.ClassroomsListItem,workflowPhase:l.eu.Start,actionType:l.Vw.Dissociate,descriptor:l.iF.User},appLink:{application:h.O.CLASSROOMS,action:C.e.Classrooms.REMOVE_TEACHERS,args:[r.id],params:{teacherIds:[t.currentUser.id]}}}),n.createElement(c.e,{className:"w-100 justify-content-end pe-2",actionsDropdownClassName:"btn btn-link ms-1",actions:m})}var N=t(20789),k=t(18995),O=t(64818);const S={avatarContainer:"zMxWi"};function x(e){var a;return n.createElement(p.u,{title:"".concat(e.item.name," ").concat(e.item.surname),spanHack:!0,spanHackClassName:"h-100 w-100"},n.createElement(N.q,{imageUrl:null===(a=e.item.avatar)||void 0===a?void 0:a.url,imageCdnUrl:e.imageCdnUrl,initials:O.l.getInitials(e.item.name,e.item.surname)}))}function T(e){return n.createElement(k.e,Object.assign({},e,{items:e.owners,avatarItem:x,avatarContainerClassname:S.avatarContainer,roleToDisplay:"staff"}))}var A=t(62691);const L={avatar:"btxC4",table:"IUfRF",name:"BBqbX"};function j(e){return function(e){if(Array.isArray(e))return F(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,a){if(e){if("string"==typeof e)return F(e,a);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?F(e,a):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 F(e,a){(null==a||a>e.length)&&(a=e.length);for(var t=0,n=Array(a);t<a;t++)n[t]=e[t];return n}var I="classrooms.classroomsTable",R=i.T.encloseNamespace(I),U={table:"striped-list no-full-width pb-3 ".concat(L.table),header:"fw-semibold pb-1",headerCell:"py-2 ps-2 text-nowrap",row:"striped-row rounded",cell:"d-flex align-items-center py-2 ps-2"},D=n.createContext(null);function M(e){var a,t=e.imageCdnUrl,i=e.appLinks,g=e.onTogglePin,b=e.hasRostering,C=(0,o.k)();a=function(e){return"classroom"in e}(i)?function(e){var a=e.imageCdnUrl,t=e.appLinks,r=e.onTogglePin,o=e.breakpoints,i=e.hasRostering,c=o&&(o.xs||o.sm),g=o&&(o.md||c),b=[{accessor:function(e){return e},id:"pinned",Cell:function(e){var a=e.value;return n.createElement("div",{className:"w-100"},s.q.isFunction(r)&&n.createElement("div",{className:L.starContainer},n.createElement(A.m,{classroom:a,onToggle:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return r.apply(void 0,[a].concat(t))},locationContext:l.LZ.ClassroomsListItem})))},width:15},{Header:R("classroom"),accessor:function(e){return e},id:"name",Cell:function(e){var a=e.value;return n.createElement(d.F,{appLink:Object.assign(Object.assign({},t.classroom),{args:[a.id]}),className:"cursor-pointer ".concat(L.name)},a.name)},width:c?80:70},{accessor:"enrolments",Header:R("owner"),id:"owner",Cell:function(e){var t=e.value,r=t.data.filter((function(e){return e.role===v.tM.Owner})).map((function(e){return e.user})).filter(Boolean);return t.data&&t.data.length&&r.length?n.createElement(T,{imageCdnUrl:a,owners:r,maxAvatars:c?1:2}):n.createElement(n.Fragment,null)},width:g?30:40},i&&!c&&{Header:R("type"),accessor:function(e){return e},Cell:function(e){return e.value._integrations.rostered?n.createElement(u.x,{namespace:I,phrase:"roster"}):n.createElement(u.x,{namespace:I,phrase:"manual"})},width:40},{Header:R("link"),accessor:function(e){return e},id:"link",Cell:function(e){var a,r,o,i,s=e.value;return n.createElement(p.u,{title:(null===(a=s._integrations)||void 0===a?void 0:a.rostered)?R("disabled"):"",spanHack:!0},n.createElement(d.F,{disabled:null===(r=s._integrations)||void 0===r?void 0:r.rostered,className:(null===(o=s._integrations)||void 0===o?void 0:o.rostered)?"text-secondary cursor-default":"",appLink:(null===(i=s._integrations)||void 0===i?void 0:i.rostered)?null:Object.assign(Object.assign({},t.link),{args:[s.id],params:{source:"list"}})},n.createElement(m.x,{svgName:f.vn.Link,className:"svg-container me-1"}),n.createElement(u.x,{namespace:I,phrase:"generate"})))},width:g?40:50},{accessor:function(e){return e},id:"actions",Cell:E,width:g?30:50}];return b.filter(Boolean)}({imageCdnUrl:t,appLinks:i,onTogglePin:g,breakpoints:C,hasRostering:b}):function(e){return[{Header:n.createElement("div",{className:"ms-3"},R("classroom")),accessor:function(e){return e},id:"name",Cell:function(e){var a=e.value;return n.createElement("div",{className:"ms-3"},a.name)},width:80},{accessor:"id",id:"placeholder-column",Cell:function(){return n.createElement(n.Fragment,null)},width:120},{accessor:function(e){return e},id:"retrieve",Cell:function(a){var t=a.value;return n.createElement(c.e,{actions:[{appLink:Object.assign(Object.assign({},e.retrieve),{args:[t.id]}),disabled:false,tooltip:R("retrieve"),svgName:f.vn.Retrieve,button:!0}],className:"w-100 justify-content-end pe-2",actionsDropdownClassName:"btn btn-link ms-1"})},width:10},{accessor:function(e){return e},id:"delete",Cell:function(a){var t=a.value;return n.createElement(c.e,{actions:[{appLink:Object.assign(Object.assign({},e.delete),{args:[t.id]}),disabled:false,tooltip:R("delete"),svgName:f.vn.Delete,button:!0}],className:"w-100 justify-content-end pe-2",actionsDropdownClassName:"btn btn-link ms-1"})},width:10}].filter(Boolean)}(i);var h=function(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],t=arguments.length>2?arguments[2]:void 0,r=arguments.length>3?arguments[3]:void 0;return n.useMemo((function(){var n;if(!t){var r=null!==(n=null==e?void 0:e.filter((function(e){return!a.some((function(a){return a.id===e.id}))})))&&void 0!==n?n:[];return[].concat(j(a),j(r))}return e}),[r,t])}(e.allClassrooms,e.pinnedClassrooms,e.query,e.refreshTable);return n.createElement(D.Provider,{value:e},n.createElement(r.i,{columns:a,data:h,theme:U}))}},91899:(e,a,t)=>{t.d(a,{I:()=>s});var n=t(32735);const r={partialStar:"Xbiwa",partialText:"Txo6a",partialName:"WT6R3",partialAvatar:"T5kj5",partialAction:"VI06f",shortHeading:"Gvufi",heading:"dh0wz",starColumn:"GsT4V",nameColumn:"eAvib",ownerColumn:"T6yK9",actionsColumn:"LIRFn"};function o(){return n.createElement("li",{className:"d-flex justify-content-between align-items-center py-2"},n.createElement("div",{className:"d-flex align-items-center"},n.createElement("div",{className:"ms-4 partial-loading-background ".concat(r.partialStar)}),n.createElement("div",{className:"mx-3 partial-loading-background ".concat(r.partialName)}),n.createElement("div",{className:"ms-3 me-4 rounded-circle partial-loading-background ".concat(r.partialAvatar)}),n.createElement("div",{className:"ms-4 rounded-circle partial-loading-background ".concat(r.partialAvatar)}),n.createElement("div",{className:"mx-1 partial-loading-background ".concat(r.partialText)}),n.createElement("div",{className:"mx-4 partial-loading-background ".concat(r.partialText)})),n.createElement("div",{className:"ms-4 me-3 partial-loading-background ".concat(r.partialAction)}))}function i(){return n.createElement("div",{className:"d-flex mb-1"},n.createElement("div",{className:"".concat(r.starColumn)}," "),n.createElement("div",{className:"".concat(r.nameColumn," p-2")},n.createElement("div",{className:"partial-loading-background ".concat(r.heading)})),n.createElement("div",{className:"".concat(r.ownerColumn," p-2")},n.createElement("div",{className:"partial-loading-background ".concat(r.shortHeading)})),n.createElement("div",{className:"".concat(r.ownerColumn," p-2 d-none d-md-flex")},n.createElement("div",{className:"partial-loading-background ".concat(r.shortHeading)})),n.createElement("div",{className:"".concat(r.ownerColumn," p-2 d-none d-md-flex")},n.createElement("div",{className:"partial-loading-background ".concat(r.heading)})),n.createElement("div",{className:"".concat(r.actionsColumn," p-2")}," "))}function s(){return n.createElement(n.Fragment,null,n.createElement(i,null),n.createElement("ul",{className:"m-0 list-unstyled striped-list"},Array(15).fill(null).map((function(e,a){return n.createElement(o,{key:a})}))))}},46009:(e,a,t)=>{t.d(a,{p:()=>l});var n=t(20354),r=t(16714),o=t(31949),i=t(22902),s=t(88630),l=function(e){var a,t=(0,(0,i.T)().hasPermissions)(r.C.ManageAllClassrooms),l=n.a.useBasicFetch(o.N.currentUser()),c=n.a.useBasicFetch(!t&&(null===(a=l.data)||void 0===a?void 0:a.customerId)&&s.F.getClassroomStaff(e,l.data.customerId)),d=n.a.useBasicFetch(!t&&s.F.getClassroomOwners(e));if(t)return{isLoading:!1,isOwner:!0,isTeacher:!0};if(!c.hasCompleted||!d.hasCompleted||!l.hasCompleted)return{isLoading:!0};var m=l.data.id.toString(),u=!!d.data.find((function(e){return e.id.toString()===m})),p=!!c.data.find((function(e){return e.id.toString()===m}));return{isLoading:!1,isTeacher:u||p,isOwner:u}}}}]);
2
+ //# sourceMappingURL=1617-3cf9199cb1-lite.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scripts/1617-d6c1d47afe-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/projects/lite/src/apps/classrooms/components/classroom-star/ClassroomStar.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/classroom-actions/ClassroomActions.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/classroom-owners-avatar-list/classroom-owner-avatar-list.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/classroom-owners-avatar-list/ClassroomOwnersAvatarList.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/classrooms-table/classrooms-table.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/classrooms-table/ClassroomsTableUtils.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/classrooms-table/ClassroomsTable.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/classrooms-table/partial-classrooms-table/partial-classrooms-table.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/classrooms-table/partial-classrooms-table/PartialClassroomsTable.tsx","file:///app/packages/projects/lite/src/apps/classrooms/hooks/useClassroomPermissions.ts"],"sourcesContent":["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}\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};\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.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 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 React from 'react';\nimport { CellProps } from 'react-table';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AssocDescriptor, EntityType, LocationContext, ToggleDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { Actions as ActionsComponent } from 'libs/shared/components/actions/Actions';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ClassroomsTableContext } from 'apps/classrooms/components/classrooms-table/ClassroomsTable';\nimport { ClassroomsTableData } from 'apps/classrooms/components/classrooms-table/ClassroomsTableUtils';\nimport { useCheckClassroomPermissions } from 'apps/classrooms/hooks/useClassroomPermissions';\n\nconst namespace = 'classrooms.classroomActions';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function ClassroomActions(props: CellProps<ClassroomsTableData, ClassroomsTableData>): JSX.Element {\n const context = React.useContext(ClassroomsTableContext);\n\n const classroom = props.value;\n const isRostered = !!classroom._integrations?.rostered;\n\n const accessCheck = useCheckClassroomPermissions(classroom.id);\n const { hasPermissions } = usePermissions();\n\n const analyticsData = { id: classroom.id };\n const actions: ActionOptions[] = [];\n\n if (accessCheck.isOwner) {\n actions.push({\n order: 0,\n label: getPhrase('edit'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.EDIT_CLASSROOM,\n args: [classroom.id]\n },\n disabled: isRostered,\n className: isRostered ? 'disabled' : '',\n tooltip: isRostered ? getPhrase('disabled') : '',\n analyticsData,\n analyticsOptions: {\n entity: EntityType.Classroom,\n actionType: UserAction.Edit,\n location: LocationContext.ClassroomsListItem,\n workflowPhase: WorkflowPhase.Start\n }\n });\n\n actions.push({\n order: 10,\n label: getPhrase('archive'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.ARCHIVE_CLASSROOM,\n args: [classroom.id]\n },\n disabled: isRostered,\n className: isRostered ? 'disabled' : '',\n tooltip: isRostered ? getPhrase('disabled') : '',\n analyticsData,\n analyticsOptions: {\n entity: EntityType.Classroom,\n actionType: UserAction.Archive,\n descriptor: ToggleDescriptor.On,\n location: LocationContext.ClassroomsListItem,\n workflowPhase: WorkflowPhase.Start\n }\n });\n }\n\n if (!hasPermissions(PermissionName.ManageAllClassrooms)) {\n actions.push({\n order: 20,\n label: getPhrase('leaveClassroom'),\n className: 'text-danger',\n analyticsData: {\n ...analyticsData,\n teacherId: context.currentUser.id\n },\n analyticsOptions: {\n entity: EntityType.Classroom,\n location: LocationContext.ClassroomsListItem,\n workflowPhase: WorkflowPhase.Start,\n actionType: UserAction.Dissociate,\n descriptor: AssocDescriptor.User\n },\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.REMOVE_TEACHERS,\n args: [classroom.id],\n params: {\n teacherIds: [context.currentUser.id]\n }\n }\n });\n }\n return (\n <ActionsComponent\n className='w-100 justify-content-end pe-2'\n actionsDropdownClassName='btn btn-link ms-1'\n actions={actions}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"avatarContainer\":\"zMxWi\"};","import React from 'react';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { AvatarItemProps, AvatarList } from 'libs/shared/components/avatar-list/AvatarList';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { User } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './classroom-owner-avatar-list.scss';\n\ninterface OwnerAvatarProps extends AvatarItemProps {\n item: User;\n}\n\nfunction OwnerAvatar(props: OwnerAvatarProps): JSX.Element {\n return (\n <Tooltip title={`${props.item.name} ${props.item.surname}`} spanHack spanHackClassName='h-100 w-100'>\n <Avatar\n imageUrl={props.item.avatar?.url}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(props.item.name, props.item.surname)}\n />\n </Tooltip>\n );\n}\n\ninterface ClassroomOwnersListProps {\n owners: User[];\n imageCdnUrl: string;\n maxAvatars: number;\n}\n\nexport function ClassroomOwnersAvatarList(props: ClassroomOwnersListProps): JSX.Element {\n return (\n <AvatarList\n {...props}\n items={props.owners}\n avatarItem={OwnerAvatar}\n avatarContainerClassname={styles.avatarContainer}\n roleToDisplay='staff'\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"avatar\":\"btxC4\",\"table\":\"IUfRF\",\"name\":\"BBqbX\"};","import React from 'react';\nimport { Column } from 'react-table';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { Actions } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classroom, EnrolmentRole } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ClassroomActions } from 'apps/classrooms/components/classroom-actions/ClassroomActions';\nimport { ClassroomOwnersAvatarList } from 'apps/classrooms/components/classroom-owners-avatar-list/ClassroomOwnersAvatarList';\nimport { ClassroomStar } from 'apps/classrooms/components/classroom-star/ClassroomStar';\nimport { OnTogglePinFn } from 'apps/classrooms/components/classrooms-table/ClassroomsTable';\nimport { ActiveClassroomsTableApplinks, ArchivedClassroomsTableApplinks, ClassroomsTableApplinks } from 'apps/classrooms/interfaces/ClassroomsTableApplinks';\n\nimport styles from './classrooms-table.scss';\n\nconst namespace = 'classrooms.classroomsTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface ClassroomsTableData extends Classroom {\n // todo wait for backend to finalize\n creator?: any;\n}\n\n\nexport function isActiveClassrooms(\n appLinks: ClassroomsTableApplinks\n): appLinks is ActiveClassroomsTableApplinks {\n return 'classroom' in appLinks;\n}\n\nexport function getArchivedClassroomsColumns(\n appLinks: ArchivedClassroomsTableApplinks\n) {\n // todo get data from backend, support rostering in the future\n const isRostering = false;\n const columns: Column<ClassroomsTableData>[] = [\n {\n Header: <div className='ms-3'>{getPhrase('classroom')}</div>,\n accessor: (data: ClassroomsTableData) => data,\n id: 'name',\n Cell: ({ value: classroom }: { value: ClassroomsTableData }) => {\n return (\n <div className='ms-3'>\n {classroom.name}\n </div>\n );\n },\n width: 80\n },\n {\n // just add an empty column for styling\n accessor: 'id',\n id: 'placeholder-column',\n Cell: () => {\n return <></>;\n },\n width: 120\n },\n {\n accessor: (data: ClassroomsTableData) => data,\n id: 'retrieve',\n Cell: ({ value: classroom }: { value: ClassroomsTableData }) => {\n return (\n <Actions\n actions={[\n {\n appLink: { ...appLinks.retrieve, args: [classroom.id]},\n disabled: isRostering,\n tooltip: isRostering ? getPhrase('disabled') : getPhrase('retrieve'),\n svgName: cvSvgLibrary.Retrieve,\n button: true\n }\n ]}\n className='w-100 justify-content-end pe-2'\n actionsDropdownClassName='btn btn-link ms-1'\n />\n );\n },\n width: 10\n },\n {\n accessor: (data: ClassroomsTableData) => data,\n id: 'delete',\n Cell: ({ value: classroom }: { value: ClassroomsTableData }) => {\n return (\n <Actions\n actions={[\n {\n appLink: { ...appLinks.delete, args: [classroom.id]},\n disabled: isRostering,\n tooltip: isRostering ? getPhrase('disabled') : getPhrase('delete'),\n svgName: cvSvgLibrary.Delete,\n button: true\n }\n\n ]}\n className='w-100 justify-content-end pe-2'\n actionsDropdownClassName='btn btn-link ms-1'\n />\n );\n },\n width: 10\n }\n ];\n return columns.filter(Boolean);\n}\n\nexport function getActiveClassroomsColumns({\n imageCdnUrl,\n appLinks,\n onTogglePin,\n breakpoints,\n hasRostering\n}: {\n imageCdnUrl: string,\n appLinks: ActiveClassroomsTableApplinks,\n onTogglePin: OnTogglePinFn,\n breakpoints?: Breakpoints,\n hasRostering?: boolean\n}): Column<ClassroomsTableData>[] {\n const isMobile = breakpoints && (breakpoints.xs || breakpoints.sm);\n const isTablet = breakpoints && (breakpoints.md || isMobile);\n\n const columns: Column<ClassroomsTableData>[] = [\n {\n accessor: (data: ClassroomsTableData) => data,\n id: 'pinned',\n Cell: ({ value: classroom }: { value: ClassroomsTableData }) => (\n <div className='w-100'>\n {FunctionHelper.isFunction(onTogglePin) && (\n <div className={styles.starContainer}>\n <ClassroomStar\n classroom={classroom}\n onToggle={(...args) => onTogglePin(classroom, ...args)}\n locationContext={LocationContext.ClassroomsListItem}\n />\n </div>\n )}\n </div>\n ),\n width: 15\n },\n {\n Header: getPhrase('classroom'),\n accessor: (data: ClassroomsTableData) => data,\n id: 'name',\n Cell: ({ value: classroom }: { value: ClassroomsTableData }) => {\n return (\n <AppLink appLink={{ ...appLinks.classroom, args: [classroom.id]}} className={`cursor-pointer ${styles.name}`}>\n {classroom.name}\n </AppLink>\n );\n },\n width: isMobile ? 80 : 70\n },\n {\n accessor: 'enrolments',\n Header: getPhrase('owner'),\n id: 'owner',\n Cell: ({ value: enrolments }) => {\n const owners = enrolments.data.filter(enrolment => enrolment.role === EnrolmentRole.Owner)\n .map(o => o.user).filter(Boolean);\n\n if (!enrolments.data || !enrolments.data.length || !owners.length)\n return <></>;\n\n return (\n <ClassroomOwnersAvatarList\n imageCdnUrl={imageCdnUrl}\n owners={owners}\n maxAvatars={isMobile ? 1 : 2}\n />\n );\n },\n width: isTablet ? 30 : 40\n },\n // todo for v1 we display ‘Type’ for school has rostering, in the future we will use 'Creator' here\n hasRostering && !isMobile && {\n Header: getPhrase('type'),\n accessor: (data: ClassroomsTableData) => data,\n Cell: ({ value: classroom }: { value: ClassroomsTableData }) => {\n return !classroom._integrations.rostered ? (\n <Text namespace={namespace} phrase='manual'/>\n ) : (\n <Text namespace={namespace} phrase='roster'/>\n );\n },\n width: 40\n },\n {\n Header: getPhrase('link'),\n accessor: (data: ClassroomsTableData) => data,\n id: 'link',\n Cell: ({ value: classroom }: { value: ClassroomsTableData }) => {\n return (\n <Tooltip\n title={classroom._integrations?.rostered ? getPhrase('disabled') : ''}\n spanHack\n >\n <AppLink\n disabled={classroom._integrations?.rostered}\n className={classroom._integrations?.rostered ? 'text-secondary cursor-default' : ''}\n appLink={classroom._integrations?.rostered ? null : { ...appLinks.link, args: [classroom.id], params: { source: 'list' } }}\n >\n <SvgContainer svgName={cvSvgLibrary.Link} className='svg-container me-1'/>\n <Text namespace={namespace} phrase='generate'/>\n </AppLink>\n </Tooltip>\n );\n },\n width: isTablet ? 40 : 50\n },\n {\n accessor: (data: ClassroomsTableData) => data,\n id: 'actions',\n Cell: ClassroomActions,\n width: isTablet ? 30 : 50\n }\n ];\n \n return columns.filter((Boolean));\n}\n\nexport function useTableData(\n allClassrooms: Classroom[],\n pinnedClassrooms: Classroom[] = [],\n query?: string,\n refreshTable?: boolean\n): ClassroomsTableData[] {\n return React.useMemo(() => {\n if (!query) {\n const unpinnedClassrooms = allClassrooms?.filter(c => {\n return !pinnedClassrooms.some(pc => pc.id === c.id);\n }) ?? [];\n return [ ...pinnedClassrooms, ...unpinnedClassrooms ];\n }\n\n return allClassrooms;\n }, [ refreshTable, query ]);\n}","import React from 'react';\n\nimport { Table, TableTheme } from 'libs/shared/components/table/Table';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classroom, CurrentUser } from 'libs/shared/interfaces';\n\nimport { getActiveClassroomsColumns, getArchivedClassroomsColumns, isActiveClassrooms, useTableData } from 'apps/classrooms/components/classrooms-table/ClassroomsTableUtils';\nimport { ClassroomsTableApplinks } from 'apps/classrooms/interfaces/ClassroomsTableApplinks';\n\nimport styles from './classrooms-table.scss';\n\nconst CLASSROOMS_TABLE_THEME: TableTheme = {\n table: `striped-list no-full-width pb-3 ${styles.table}`,\n header: 'fw-semibold pb-1',\n headerCell: 'py-2 ps-2 text-nowrap',\n row: 'striped-row rounded',\n cell: 'd-flex align-items-center py-2 ps-2'\n};\n\nexport type OnTogglePinFn =\n (classroom: Classroom, shouldPin: boolean, onSuccess: () => void, onError: () => void) => void;\n\ninterface ClassroomsTableProps {\n allClassrooms: Classroom[];\n pinnedClassrooms?: Classroom[];\n appLinks: ClassroomsTableApplinks;\n imageCdnUrl: string;\n currentUser: CurrentUser;\n refreshTable?: boolean;\n query?: string;\n onTogglePin?: OnTogglePinFn;\n hasRostering?: boolean;\n}\n\nexport const ClassroomsTableContext = React.createContext<ClassroomsTableProps>(null);\n\nexport function ClassroomsTable(props: ClassroomsTableProps): JSX.Element {\n const { imageCdnUrl, appLinks, onTogglePin, hasRostering } = props;\n\n const breakpoints = useBreakpoints();\n\n let columns = [];\n if (isActiveClassrooms(appLinks)) {\n columns = getActiveClassroomsColumns({\n imageCdnUrl, appLinks, onTogglePin, breakpoints, hasRostering\n });\n } else {\n columns = getArchivedClassroomsColumns(appLinks);\n }\n const data = useTableData(props.allClassrooms, props.pinnedClassrooms, props.query, props.refreshTable);\n\n return (\n <ClassroomsTableContext.Provider value={props}>\n <Table\n columns={columns}\n data={data}\n theme={CLASSROOMS_TABLE_THEME}\n />\n </ClassroomsTableContext.Provider>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialStar\":\"Xbiwa\",\"partialText\":\"Txo6a\",\"partialName\":\"WT6R3\",\"partialAvatar\":\"T5kj5\",\"partialAction\":\"VI06f\",\"shortHeading\":\"Gvufi\",\"heading\":\"dh0wz\",\"starColumn\":\"GsT4V\",\"nameColumn\":\"eAvib\",\"ownerColumn\":\"T6yK9\",\"actionsColumn\":\"LIRFn\"};","import React from 'react';\n\nimport styles from './partial-classrooms-table.scss';\n\nfunction PartialClassroomItem(): JSX.Element {\n return (\n <li className='d-flex justify-content-between align-items-center py-2'>\n <div className='d-flex align-items-center'>\n <div className={`ms-4 partial-loading-background ${styles.partialStar}`} />\n\n <div className={`mx-3 partial-loading-background ${styles.partialName}`} />\n\n <div className={`ms-3 me-4 rounded-circle partial-loading-background ${styles.partialAvatar}`} />\n \n <div className={`ms-4 rounded-circle partial-loading-background ${styles.partialAvatar}`} />\n <div className={`mx-1 partial-loading-background ${styles.partialText}`} />\n\n <div className={`mx-4 partial-loading-background ${styles.partialText}`} />\n </div>\n\n <div className={`ms-4 me-3 partial-loading-background ${styles.partialAction}`} />\n </li>\n );\n}\n\nfunction PartialHeader(): JSX.Element {\n return (\n <div className='d-flex mb-1'>\n <div className={`${styles.starColumn}`}>\n &nbsp;\n </div>\n\n <div className={`${styles.nameColumn} p-2`}>\n <div className={`partial-loading-background ${styles.heading}`} />\n </div>\n\n <div className={`${styles.ownerColumn} p-2`}>\n <div className={`partial-loading-background ${styles.shortHeading}`} />\n </div>\n <div className={`${styles.ownerColumn} p-2 d-none d-md-flex`}>\n <div className={`partial-loading-background ${styles.shortHeading}`} />\n </div>\n <div className={`${styles.ownerColumn} p-2 d-none d-md-flex`}>\n <div className={`partial-loading-background ${styles.heading}`} />\n </div>\n\n <div className={`${styles.actionsColumn} p-2`}>\n &nbsp;\n </div>\n </div>\n );\n}\n\nexport function PartialClassroomsTable(): JSX.Element {\n return (\n <>\n <PartialHeader/>\n <ul className='m-0 list-unstyled striped-list'>\n {Array(15).fill(null).map((item, index) => <PartialClassroomItem key={index} />)}\n </ul>\n </>\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 invitees = Flight.useBasicFetch<User[]>(!canManageAllClassrooms && currentUser.data?.customerId &&\n ClassroomRequests.getClassroomInvitees(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 (!invitees.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 = !!invitees.data.find(invitee => invitee.id.toString() === currentUserId);\n\n return {\n isLoading: false,\n isTeacher: isClassroomOwner || isClassroomTeacher, // All owners are also teachers\n isOwner: isClassroomOwner\n };\n};"],"names":["defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","getPhrase","getIsPinned","classroom","ClassroomStar","props","isPinned","setIsPinned","alerts","onClick","onToggle","id","location","locationContext","actionType","descriptor","entity","workflowPhase","success","classroomName","name","escapeText","onSuccess","prevState","error","className","svgName","size","S","LanguageService","ClassroomActions","context","ClassroomsTableContext","value","isRostered","_integrations","rostered","accessCheck","hasPermissions","usePermissions","analyticsData","actions","isOwner","push","order","label","appLink","application","action","args","disabled","tooltip","analyticsOptions","PermissionName","teacherId","currentUser","params","teacherIds","Actions","actionsDropdownClassName","OwnerAvatar","Tooltip","title","item","surname","spanHack","spanHackClassName","Avatar","imageUrl","avatar","url","imageCdnUrl","initials","UserHelper","ClassroomOwnersAvatarList","AvatarList","items","owners","avatarItem","avatarContainerClassname","roleToDisplay","CLASSROOMS_TABLE_THEME","table","header","headerCell","row","cell","ClassroomsTable","columns","appLinks","onTogglePin","hasRostering","breakpoints","useBreakpoints","isActiveClassrooms","isMobile","xs","sm","isTablet","md","accessor","data","Cell","FunctionHelper","width","Header","AppLink","enrolments","filter","enrolment","role","map","o","user","Boolean","length","maxAvatars","Text","namespace","phrase","link","source","SvgContainer","getActiveClassroomsColumns","retrieve","button","getArchivedClassroomsColumns","allClassrooms","pinnedClassrooms","query","refreshTable","unpinnedClassrooms","c","some","pc","useTableData","Provider","Table","theme","PartialClassroomItem","PartialHeader","PartialClassroomsTable","Array","fill","index","key","useCheckClassroomPermissions","classroomId","canManageAllClassrooms","invitees","customerId","isLoading","isTeacher","hasCompleted","currentUserId","toString","isClassroomOwner","find","owner","isClassroomTeacher","invitee"],"sourceRoot":""}
1
+ {"version":3,"file":"scripts/1617-3cf9199cb1-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/projects/lite/src/apps/classrooms/components/classroom-star/ClassroomStar.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/classroom-actions/ClassroomActions.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/classroom-owners-avatar-list/classroom-owner-avatar-list.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/classroom-owners-avatar-list/ClassroomOwnersAvatarList.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/classrooms-table/classrooms-table.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/classrooms-table/ClassroomsTableUtils.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/classrooms-table/ClassroomsTable.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/classrooms-table/partial-classrooms-table/partial-classrooms-table.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/classrooms-table/partial-classrooms-table/PartialClassroomsTable.tsx","file:///app/packages/projects/lite/src/apps/classrooms/hooks/useClassroomPermissions.ts"],"sourcesContent":["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}\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};\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.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 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 React from 'react';\nimport { CellProps } from 'react-table';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AssocDescriptor, EntityType, LocationContext, ToggleDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { Actions as ActionsComponent } from 'libs/shared/components/actions/Actions';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ClassroomsTableContext } from 'apps/classrooms/components/classrooms-table/ClassroomsTable';\nimport { ClassroomsTableData } from 'apps/classrooms/components/classrooms-table/ClassroomsTableUtils';\nimport { useCheckClassroomPermissions } from 'apps/classrooms/hooks/useClassroomPermissions';\n\nconst namespace = 'classrooms.classroomActions';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function ClassroomActions(props: CellProps<ClassroomsTableData, ClassroomsTableData>): JSX.Element {\n const context = React.useContext(ClassroomsTableContext);\n\n const classroom = props.value;\n const isRostered = !!classroom._integrations?.rostered;\n\n const accessCheck = useCheckClassroomPermissions(classroom.id);\n const { hasPermissions } = usePermissions();\n\n const analyticsData = { id: classroom.id };\n const actions: ActionOptions[] = [];\n\n if (accessCheck.isOwner) {\n actions.push({\n order: 0,\n label: getPhrase('edit'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.EDIT_CLASSROOM,\n args: [classroom.id]\n },\n disabled: isRostered,\n className: isRostered ? 'disabled' : '',\n tooltip: isRostered ? getPhrase('disabled') : '',\n analyticsData,\n analyticsOptions: {\n entity: EntityType.Classroom,\n actionType: UserAction.Edit,\n location: LocationContext.ClassroomsListItem,\n workflowPhase: WorkflowPhase.Start\n }\n });\n\n actions.push({\n order: 10,\n label: getPhrase('archive'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.ARCHIVE_CLASSROOM,\n args: [classroom.id]\n },\n disabled: isRostered,\n className: isRostered ? 'disabled' : '',\n tooltip: isRostered ? getPhrase('disabled') : '',\n analyticsData,\n analyticsOptions: {\n entity: EntityType.Classroom,\n actionType: UserAction.Archive,\n descriptor: ToggleDescriptor.On,\n location: LocationContext.ClassroomsListItem,\n workflowPhase: WorkflowPhase.Start\n }\n });\n }\n\n if (!hasPermissions(PermissionName.ManageAllClassrooms)) {\n actions.push({\n order: 20,\n label: getPhrase('leaveClassroom'),\n className: 'text-danger',\n analyticsData: {\n ...analyticsData,\n teacherId: context.currentUser.id\n },\n analyticsOptions: {\n entity: EntityType.Classroom,\n location: LocationContext.ClassroomsListItem,\n workflowPhase: WorkflowPhase.Start,\n actionType: UserAction.Dissociate,\n descriptor: AssocDescriptor.User\n },\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.REMOVE_TEACHERS,\n args: [classroom.id],\n params: {\n teacherIds: [context.currentUser.id]\n }\n }\n });\n }\n return (\n <ActionsComponent\n className='w-100 justify-content-end pe-2'\n actionsDropdownClassName='btn btn-link ms-1'\n actions={actions}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"avatarContainer\":\"zMxWi\"};","import React from 'react';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { AvatarItemProps, AvatarList } from 'libs/shared/components/avatar-list/AvatarList';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { User } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './classroom-owner-avatar-list.scss';\n\ninterface OwnerAvatarProps extends AvatarItemProps {\n item: User;\n}\n\nfunction OwnerAvatar(props: OwnerAvatarProps): JSX.Element {\n return (\n <Tooltip title={`${props.item.name} ${props.item.surname}`} spanHack spanHackClassName='h-100 w-100'>\n <Avatar\n imageUrl={props.item.avatar?.url}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(props.item.name, props.item.surname)}\n />\n </Tooltip>\n );\n}\n\ninterface ClassroomOwnersListProps {\n owners: User[];\n imageCdnUrl: string;\n maxAvatars: number;\n}\n\nexport function ClassroomOwnersAvatarList(props: ClassroomOwnersListProps): JSX.Element {\n return (\n <AvatarList\n {...props}\n items={props.owners}\n avatarItem={OwnerAvatar}\n avatarContainerClassname={styles.avatarContainer}\n roleToDisplay='staff'\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"avatar\":\"btxC4\",\"table\":\"IUfRF\",\"name\":\"BBqbX\"};","import React from 'react';\nimport { Column } from 'react-table';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { Actions } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classroom, EnrolmentRole } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ClassroomActions } from 'apps/classrooms/components/classroom-actions/ClassroomActions';\nimport { ClassroomOwnersAvatarList } from 'apps/classrooms/components/classroom-owners-avatar-list/ClassroomOwnersAvatarList';\nimport { ClassroomStar } from 'apps/classrooms/components/classroom-star/ClassroomStar';\nimport { OnTogglePinFn } from 'apps/classrooms/components/classrooms-table/ClassroomsTable';\nimport { ActiveClassroomsTableApplinks, ArchivedClassroomsTableApplinks, ClassroomsTableApplinks } from 'apps/classrooms/interfaces/ClassroomsTableApplinks';\n\nimport styles from './classrooms-table.scss';\n\nconst namespace = 'classrooms.classroomsTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface ClassroomsTableData extends Classroom {\n // todo wait for backend to finalize\n creator?: any;\n}\n\n\nexport function isActiveClassrooms(\n appLinks: ClassroomsTableApplinks\n): appLinks is ActiveClassroomsTableApplinks {\n return 'classroom' in appLinks;\n}\n\nexport function getArchivedClassroomsColumns(\n appLinks: ArchivedClassroomsTableApplinks\n) {\n // todo get data from backend, support rostering in the future\n const isRostering = false;\n const columns: Column<ClassroomsTableData>[] = [\n {\n Header: <div className='ms-3'>{getPhrase('classroom')}</div>,\n accessor: (data: ClassroomsTableData) => data,\n id: 'name',\n Cell: ({ value: classroom }: { value: ClassroomsTableData }) => {\n return (\n <div className='ms-3'>\n {classroom.name}\n </div>\n );\n },\n width: 80\n },\n {\n // just add an empty column for styling\n accessor: 'id',\n id: 'placeholder-column',\n Cell: () => {\n return <></>;\n },\n width: 120\n },\n {\n accessor: (data: ClassroomsTableData) => data,\n id: 'retrieve',\n Cell: ({ value: classroom }: { value: ClassroomsTableData }) => {\n return (\n <Actions\n actions={[\n {\n appLink: { ...appLinks.retrieve, args: [classroom.id]},\n disabled: isRostering,\n tooltip: isRostering ? getPhrase('disabled') : getPhrase('retrieve'),\n svgName: cvSvgLibrary.Retrieve,\n button: true\n }\n ]}\n className='w-100 justify-content-end pe-2'\n actionsDropdownClassName='btn btn-link ms-1'\n />\n );\n },\n width: 10\n },\n {\n accessor: (data: ClassroomsTableData) => data,\n id: 'delete',\n Cell: ({ value: classroom }: { value: ClassroomsTableData }) => {\n return (\n <Actions\n actions={[\n {\n appLink: { ...appLinks.delete, args: [classroom.id]},\n disabled: isRostering,\n tooltip: isRostering ? getPhrase('disabled') : getPhrase('delete'),\n svgName: cvSvgLibrary.Delete,\n button: true\n }\n\n ]}\n className='w-100 justify-content-end pe-2'\n actionsDropdownClassName='btn btn-link ms-1'\n />\n );\n },\n width: 10\n }\n ];\n return columns.filter(Boolean);\n}\n\nexport function getActiveClassroomsColumns({\n imageCdnUrl,\n appLinks,\n onTogglePin,\n breakpoints,\n hasRostering\n}: {\n imageCdnUrl: string,\n appLinks: ActiveClassroomsTableApplinks,\n onTogglePin: OnTogglePinFn,\n breakpoints?: Breakpoints,\n hasRostering?: boolean\n}): Column<ClassroomsTableData>[] {\n const isMobile = breakpoints && (breakpoints.xs || breakpoints.sm);\n const isTablet = breakpoints && (breakpoints.md || isMobile);\n\n const columns: Column<ClassroomsTableData>[] = [\n {\n accessor: (data: ClassroomsTableData) => data,\n id: 'pinned',\n Cell: ({ value: classroom }: { value: ClassroomsTableData }) => (\n <div className='w-100'>\n {FunctionHelper.isFunction(onTogglePin) && (\n <div className={styles.starContainer}>\n <ClassroomStar\n classroom={classroom}\n onToggle={(...args) => onTogglePin(classroom, ...args)}\n locationContext={LocationContext.ClassroomsListItem}\n />\n </div>\n )}\n </div>\n ),\n width: 15\n },\n {\n Header: getPhrase('classroom'),\n accessor: (data: ClassroomsTableData) => data,\n id: 'name',\n Cell: ({ value: classroom }: { value: ClassroomsTableData }) => {\n return (\n <AppLink appLink={{ ...appLinks.classroom, args: [classroom.id]}} className={`cursor-pointer ${styles.name}`}>\n {classroom.name}\n </AppLink>\n );\n },\n width: isMobile ? 80 : 70\n },\n {\n accessor: 'enrolments',\n Header: getPhrase('owner'),\n id: 'owner',\n Cell: ({ value: enrolments }) => {\n const owners = enrolments.data.filter(enrolment => enrolment.role === EnrolmentRole.Owner)\n .map(o => o.user).filter(Boolean);\n\n if (!enrolments.data || !enrolments.data.length || !owners.length)\n return <></>;\n\n return (\n <ClassroomOwnersAvatarList\n imageCdnUrl={imageCdnUrl}\n owners={owners}\n maxAvatars={isMobile ? 1 : 2}\n />\n );\n },\n width: isTablet ? 30 : 40\n },\n // todo for v1 we display ‘Type’ for school has rostering, in the future we will use 'Creator' here\n hasRostering && !isMobile && {\n Header: getPhrase('type'),\n accessor: (data: ClassroomsTableData) => data,\n Cell: ({ value: classroom }: { value: ClassroomsTableData }) => {\n return !classroom._integrations.rostered ? (\n <Text namespace={namespace} phrase='manual'/>\n ) : (\n <Text namespace={namespace} phrase='roster'/>\n );\n },\n width: 40\n },\n {\n Header: getPhrase('link'),\n accessor: (data: ClassroomsTableData) => data,\n id: 'link',\n Cell: ({ value: classroom }: { value: ClassroomsTableData }) => {\n return (\n <Tooltip\n title={classroom._integrations?.rostered ? getPhrase('disabled') : ''}\n spanHack\n >\n <AppLink\n disabled={classroom._integrations?.rostered}\n className={classroom._integrations?.rostered ? 'text-secondary cursor-default' : ''}\n appLink={classroom._integrations?.rostered ? null : { ...appLinks.link, args: [classroom.id], params: { source: 'list' } }}\n >\n <SvgContainer svgName={cvSvgLibrary.Link} className='svg-container me-1'/>\n <Text namespace={namespace} phrase='generate'/>\n </AppLink>\n </Tooltip>\n );\n },\n width: isTablet ? 40 : 50\n },\n {\n accessor: (data: ClassroomsTableData) => data,\n id: 'actions',\n Cell: ClassroomActions,\n width: isTablet ? 30 : 50\n }\n ];\n \n return columns.filter((Boolean));\n}\n\nexport function useTableData(\n allClassrooms: Classroom[],\n pinnedClassrooms: Classroom[] = [],\n query?: string,\n refreshTable?: boolean\n): ClassroomsTableData[] {\n return React.useMemo(() => {\n if (!query) {\n const unpinnedClassrooms = allClassrooms?.filter(c => {\n return !pinnedClassrooms.some(pc => pc.id === c.id);\n }) ?? [];\n return [ ...pinnedClassrooms, ...unpinnedClassrooms ];\n }\n\n return allClassrooms;\n }, [ refreshTable, query ]);\n}","import React from 'react';\n\nimport { Table, TableTheme } from 'libs/shared/components/table/Table';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classroom, CurrentUser } from 'libs/shared/interfaces';\n\nimport { getActiveClassroomsColumns, getArchivedClassroomsColumns, isActiveClassrooms, useTableData } from 'apps/classrooms/components/classrooms-table/ClassroomsTableUtils';\nimport { ClassroomsTableApplinks } from 'apps/classrooms/interfaces/ClassroomsTableApplinks';\n\nimport styles from './classrooms-table.scss';\n\nconst CLASSROOMS_TABLE_THEME: TableTheme = {\n table: `striped-list no-full-width pb-3 ${styles.table}`,\n header: 'fw-semibold pb-1',\n headerCell: 'py-2 ps-2 text-nowrap',\n row: 'striped-row rounded',\n cell: 'd-flex align-items-center py-2 ps-2'\n};\n\nexport type OnTogglePinFn =\n (classroom: Classroom, shouldPin: boolean, onSuccess: () => void, onError: () => void) => void;\n\ninterface ClassroomsTableProps {\n allClassrooms: Classroom[];\n pinnedClassrooms?: Classroom[];\n appLinks: ClassroomsTableApplinks;\n imageCdnUrl: string;\n currentUser: CurrentUser;\n refreshTable?: boolean;\n query?: string;\n onTogglePin?: OnTogglePinFn;\n hasRostering?: boolean;\n}\n\nexport const ClassroomsTableContext = React.createContext<ClassroomsTableProps>(null);\n\nexport function ClassroomsTable(props: ClassroomsTableProps): JSX.Element {\n const { imageCdnUrl, appLinks, onTogglePin, hasRostering } = props;\n\n const breakpoints = useBreakpoints();\n\n let columns = [];\n if (isActiveClassrooms(appLinks)) {\n columns = getActiveClassroomsColumns({\n imageCdnUrl, appLinks, onTogglePin, breakpoints, hasRostering\n });\n } else {\n columns = getArchivedClassroomsColumns(appLinks);\n }\n const data = useTableData(props.allClassrooms, props.pinnedClassrooms, props.query, props.refreshTable);\n\n return (\n <ClassroomsTableContext.Provider value={props}>\n <Table\n columns={columns}\n data={data}\n theme={CLASSROOMS_TABLE_THEME}\n />\n </ClassroomsTableContext.Provider>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialStar\":\"Xbiwa\",\"partialText\":\"Txo6a\",\"partialName\":\"WT6R3\",\"partialAvatar\":\"T5kj5\",\"partialAction\":\"VI06f\",\"shortHeading\":\"Gvufi\",\"heading\":\"dh0wz\",\"starColumn\":\"GsT4V\",\"nameColumn\":\"eAvib\",\"ownerColumn\":\"T6yK9\",\"actionsColumn\":\"LIRFn\"};","import React from 'react';\n\nimport styles from './partial-classrooms-table.scss';\n\nfunction PartialClassroomItem(): JSX.Element {\n return (\n <li className='d-flex justify-content-between align-items-center py-2'>\n <div className='d-flex align-items-center'>\n <div className={`ms-4 partial-loading-background ${styles.partialStar}`} />\n\n <div className={`mx-3 partial-loading-background ${styles.partialName}`} />\n\n <div className={`ms-3 me-4 rounded-circle partial-loading-background ${styles.partialAvatar}`} />\n \n <div className={`ms-4 rounded-circle partial-loading-background ${styles.partialAvatar}`} />\n <div className={`mx-1 partial-loading-background ${styles.partialText}`} />\n\n <div className={`mx-4 partial-loading-background ${styles.partialText}`} />\n </div>\n\n <div className={`ms-4 me-3 partial-loading-background ${styles.partialAction}`} />\n </li>\n );\n}\n\nfunction PartialHeader(): JSX.Element {\n return (\n <div className='d-flex mb-1'>\n <div className={`${styles.starColumn}`}>\n &nbsp;\n </div>\n\n <div className={`${styles.nameColumn} p-2`}>\n <div className={`partial-loading-background ${styles.heading}`} />\n </div>\n\n <div className={`${styles.ownerColumn} p-2`}>\n <div className={`partial-loading-background ${styles.shortHeading}`} />\n </div>\n <div className={`${styles.ownerColumn} p-2 d-none d-md-flex`}>\n <div className={`partial-loading-background ${styles.shortHeading}`} />\n </div>\n <div className={`${styles.ownerColumn} p-2 d-none d-md-flex`}>\n <div className={`partial-loading-background ${styles.heading}`} />\n </div>\n\n <div className={`${styles.actionsColumn} p-2`}>\n &nbsp;\n </div>\n </div>\n );\n}\n\nexport function PartialClassroomsTable(): JSX.Element {\n return (\n <>\n <PartialHeader/>\n <ul className='m-0 list-unstyled striped-list'>\n {Array(15).fill(null).map((item, index) => <PartialClassroomItem key={index} />)}\n </ul>\n </>\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};"],"names":["defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","getPhrase","getIsPinned","classroom","ClassroomStar","props","isPinned","setIsPinned","alerts","onClick","onToggle","id","location","locationContext","actionType","descriptor","entity","workflowPhase","success","classroomName","name","escapeText","onSuccess","prevState","error","className","svgName","size","S","LanguageService","ClassroomActions","context","ClassroomsTableContext","value","isRostered","_integrations","rostered","accessCheck","hasPermissions","usePermissions","analyticsData","actions","isOwner","push","order","label","appLink","application","action","args","disabled","tooltip","analyticsOptions","PermissionName","teacherId","currentUser","params","teacherIds","Actions","actionsDropdownClassName","OwnerAvatar","Tooltip","title","item","surname","spanHack","spanHackClassName","Avatar","imageUrl","avatar","url","imageCdnUrl","initials","UserHelper","ClassroomOwnersAvatarList","AvatarList","items","owners","avatarItem","avatarContainerClassname","roleToDisplay","CLASSROOMS_TABLE_THEME","table","header","headerCell","row","cell","ClassroomsTable","columns","appLinks","onTogglePin","hasRostering","breakpoints","useBreakpoints","isActiveClassrooms","isMobile","xs","sm","isTablet","md","accessor","data","Cell","FunctionHelper","width","Header","AppLink","enrolments","filter","enrolment","role","map","o","user","Boolean","length","maxAvatars","Text","namespace","phrase","link","source","SvgContainer","getActiveClassroomsColumns","retrieve","button","getArchivedClassroomsColumns","allClassrooms","pinnedClassrooms","query","refreshTable","unpinnedClassrooms","c","some","pc","useTableData","Provider","Table","theme","PartialClassroomItem","PartialHeader","PartialClassroomsTable","Array","fill","index","key","useCheckClassroomPermissions","classroomId","canManageAllClassrooms","staff","customerId","isLoading","isTeacher","hasCompleted","currentUserId","toString","isClassroomOwner","find","owner","isClassroomTeacher"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3012],{28469:(e,a,t)=>{t.d(a,{P:()=>s});var r=t(32735),n=t(23481).T.encloseNamespace("rostering.alert");function s(e){var a="classroom"===e.type?n("classroom"):n("hasRostering");return r.createElement("div",{className:"alert text-info bg-light-blue px-2 rounded-3 fw-semibold py-2 d-flex flex-wrap"},a," ")}},299:(e,a,t)=>{t.d(a,{X:()=>l});var r=t(32735),n=t(69217),s=t(94631),l=function(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=a.idField,l=void 0===t?"id":t,o=a.persistNamespace,c=a.initialState?a.initialState:new Map,i=r.useRef(c),d=(0,n.N)(),m=(0,s.D)(e),u=(0,s.D)(o);function g(){i.current.clear(),d()}function p(e){return"number"==typeof e?e=e.toString():"string"!=typeof e&&(e=e[l].toString()),i.current.get(e)}function h(){return!!(null==e?void 0:e.length)&&e.every(p)}function E(e){e.forEach((function(e){i.current.set(e,!0)})),d()}return r.useEffect((function(){a.initialState||o&&u===o||(null==m?void 0:m.map((function(e){return e[l]})).join())!==(null==e?void 0:e.map((function(e){return e[l]})).join())&&g()}),[m,u,e,a.initialState]),r.useEffect((function(){var e;(null===(e=a.preselectedIds)||void 0===e?void 0:e.length)&&E(a.preselectedIds)}),[]),{onToggleBulk:function(){var a=!h();e.forEach((function(e){a?i.current.set(e[l].toString(),!0):i.current.delete(e[l].toString())})),d()},onToggleItem:function(e){var a=!i.current.get(e.toString());a?i.current.set(e.toString(),a):i.current.delete(e.toString()),d()},getSelected:function(){return Array.from(i.current.keys())},isChecked:p,bulkChecked:h(),deselectAll:function(){(null==e?void 0:e.length)&&(e.forEach((function(e){i.current.delete(e[l].toString())})),d())},hasSomeSelections:function(){return!!(null==e?void 0:e.length)&&!!e.find((function(e){return p(e)}))},setSelected:E,getSelectedCount:function(){return i.current.size},reset:g,getMap:function(){return i.current}}}},94631:(e,a,t)=>{t.d(a,{D:()=>n});var r=t(32735);function n(e){var a=r.useRef();return r.useEffect((function(){a.current=e})),a.current}},71056:(e,a,t)=>{t.r(a),t.d(a,{ClassroomTeachersView:()=>ae});var r=t(32735),n=t(70680),s=t(23481),l=t(20354),o=t(28469),c=t(39151),i=t(31949),d=t(79612),m=t(23232),u=t(83345),g=t(35223),p=t(99742),h=t(14070),E=t(97291),f="classrooms.manageClassroomTeachersEmptyState";function v(){return r.createElement(u.D.Provider,{value:f},r.createElement(m.u,null,r.createElement(m.u.Image,{src:p.W.EmptyStates.Classrooms.TEACHERS}),r.createElement(m.u.Heading,null,r.createElement(u.x,{phrase:"emptyStateHeading"})),r.createElement(m.u.Info,{className:"mb-2"},r.createElement(u.x,{phrase:"emptyStateInfo"})),r.createElement("a",{className:"btn btn-link info-link font-semibold",href:"",target:"_blank"},s.T.getPhrase(f,"rosteringCta"))))}function y(e){return r.createElement(u.D.Provider,{value:f},r.createElement(m.u,null,r.createElement(m.u.Image,{src:p.W.EmptyStates.Classrooms.TEACHERS}),r.createElement(m.u.Heading,null,r.createElement(u.x,{phrase:"emptyStateHeading"})),r.createElement(m.u.Info,null,r.createElement(u.x,{phrase:"emptyStateInfo"})),r.createElement(m.u.Cta,{text:s.T.getPhrase(f,"addTeachers"),icon:g.vn.Plus,appLink:{application:E.O.CLASSROOMS,action:h.e.Classrooms.ADD_TEACHERS,args:[e.classroom.id]}})))}var C=t(81886),S=t(49985),O=t(65858),k=t(11607),b=t(89965),w=t(10874),T=t(83914),N=t(76177),A=t(86764),x=t(299),R=t(3747),I=t(83657),U=t(20789),F=t(16714),L=t(86613),P=t(22902),D=t(64818);const M={avatarContainer:"kTynd",name:"UWi4G"};var _="classrooms.manageClassroomTeacherItem",H=s.T.encloseNamespace(_),B=function(e,a){return{application:E.O.CLASSROOMS,action:h.e.Classrooms.REMOVE_TEACHERS,args:[a],params:{teacherIds:[e]}}},V=function(e,a){return{application:E.O.CLASSROOMS,action:h.e.Classrooms.ASSIGN_AS_OWNER,args:[a,e]}},W=function(e,a){return{application:E.O.CLASSROOMS,action:h.e.Classrooms.REVOKE_OWNERSHIP,args:[a,e]}};function Z(e){var a,t=(0,P.T)().hasPermissions,n=D.l.getUserRole(e.teacher)===L.i.Admin,s=e.currentUser.id===e.teacher.id||!!t(F.C.ManageAllClassrooms)||!n&&e.isOwner(e.currentUser.id),l=!s||e.readOnly;return r.createElement("div",{className:"d-flex align-items-center py-1 px-4"},e.isOwner(e.currentUser.id)&&r.createElement(b.X,{id:e.teacher.id,checked:e.checked,onChange:e.onToggleCheckbox,className:"me-2",disabled:e.readOnly}),r.createElement("div",{className:"".concat(M.avatarContainer," me-2")},r.createElement(U.q,{imageCdnUrl:e.config.imageCdnUrl,initials:D.l.getInitials(e.teacher.name,e.teacher.surname),imageUrl:null===(a=e.teacher.avatar)||void 0===a?void 0:a.url})),r.createElement("p",{className:"".concat(M.name," me-2 text-truncate mb-0 text-nowrap")},D.l.getFullName(e.teacher)),!!n&&r.createElement("div",{className:"classroom-pill text-white bg-navy"},r.createElement(u.x,{namespace:_,phrase:"admin"})),!n&&e.isOwner(e.teacher.id)&&r.createElement("div",{className:"classroom-pill text-white bg-indigo"},r.createElement(u.x,{namespace:_,phrase:"owner"})),r.createElement(I.e,{actions:function(){if(!e.isOwner(e.currentUser.id))return[];var a=[],t="text-secondary disabled cursor-default",r=e.currentUser.id===e.teacher.id;return r||(e.isOwner(e.teacher.id)?a.push({order:0,label:H("revokeOwnership"),appLink:W(e.teacher.id,e.classroom.id),analyticsData:{id:e.teacher.id,classroomId:e.classroom.id},analyticsOptions:{actionType:O.Vw.Demote,entity:O.py.User,descriptor:O.iF.Classroom,workflowPhase:O.eu.Start,location:O.LZ.ManageClassroomTeacherListItem},className:l?t:"",disabled:l,tooltip:e.readOnly?e.readonlyTooltip:s?"":H("cannotRevokeOwnershipFromAdmin")}):a.push({order:0,label:H("assignAsOwner"),appLink:V(e.teacher.id,e.classroom.id),analyticsData:{id:e.teacher.id,classroomId:e.classroom.id},analyticsOptions:{actionType:O.Vw.Promote,entity:O.py.User,descriptor:O.iF.Classroom,workflowPhase:O.eu.Start,location:O.LZ.ManageClassroomTeacherListItem},className:l?t:"",disabled:l,tooltip:e.readOnly?e.readonlyTooltip:s?"":H("cannotAssignAdminAsOwner")})),a.push({order:10,label:H(r?"leaveClassroom":"removeTeacher"),appLink:B(e.teacher.id,e.classroom.id),analyticsData:{id:e.classroom.id,userId:e.teacher.id},analyticsOptions:{actionType:O.Vw.Dissociate,entity:O.py.Classroom,descriptor:O.iF.User,workflowPhase:O.eu.Start,location:O.LZ.ManageClassroomTeacherListItem},className:l?t:"text-danger",disabled:l,tooltip:e.readOnly?e.readonlyTooltip:s?"":H("cannotRemoveAdmin")}),a}(),className:"ms-auto",actionsDropdownClassName:"btn btn-link"}))}var X="classrooms.manageClassroomTeachers";function j(e){var a,t=(0,x.X)(e.teachers),n=t.getSelected().length,l=(0,R.a)(A.r.XLDown);return(null===(a=e.teachers)||void 0===a?void 0:a.length)?r.createElement(r.Fragment,null,r.createElement("div",{className:"d-flex align-items-center py-2 ".concat(l?"ps-2":"ps-4")},e.isOwner(e.currentUser.id)&&r.createElement(r.Fragment,null,r.createElement(b.X,{id:"manage-classroom-teachers-bulk",onChange:t.onToggleBulk,checked:t.bulkChecked,className:"me-2",indeterminate:t.hasSomeSelections(),disabled:e.readOnly}),r.createElement(k.L,{className:!n||e.readOnly?"me-auto text-light cursor-default":"me-auto",onClick:function(){if(n&&e.isOwner(e.currentUser.id)&&!e.readOnly){var a=t.getSelected();S.k.logUserAction({id:e.classroom.id,teacherCount:a.length},{entity:O.py.Classroom,descriptor:O.iF.User,workflowPhase:O.eu.Start,actionType:O.Vw.Dissociate,location:O.LZ.ManageClassroomTeachers}),C.Q.C$.trigger({application:E.O.CLASSROOMS,action:h.e.Classrooms.REMOVE_TEACHERS,args:[e.classroom.id],params:{teacherIds:a}})}}},r.createElement(T.x,{svgName:g.vn.Delete,title:e.readOnly?s.T.getPhrase(X,"disabledByRostering"):s.T.getPhrase(X,"delete"),tooltipPlacement:"top",tooltipSpanHack:!0})),r.createElement(N.u,{spanHack:!0,title:e.readOnly?s.T.getPhrase(X,"disabledByRostering"):""},r.createElement(w.h,{disabled:e.readOnly,svgName:g.vn.Plus,className:"btn btn-outline-dark ms-auto",appLink:e.readOnly?null:{application:E.O.CLASSROOMS,action:h.e.Classrooms.ADD_TEACHERS,args:[e.classroom.id]},analyticsData:{id:e.classroom.id},analyticsOptions:{entity:O.py.Classroom,descriptor:O.iF.User,workflowPhase:O.eu.Start,actionType:O.Vw.Associate,location:O.LZ.ManageClassroomTeachers}},r.createElement(u.x,{namespace:X,phrase:"addTeacher"}))))),r.createElement("ul",{className:"striped-list list-unstyled"},e.teachers.map((function(a){return r.createElement("li",{key:a.id},r.createElement(Z,{classroom:e.classroom,teacher:a,config:e.config,checked:t.isChecked(a.id),onToggleCheckbox:function(){return t.onToggleItem(a.id)},currentUser:e.currentUser,isOwner:e.isOwner,readOnly:e.readOnly,readonlyTooltip:e.readOnly?s.T.getPhrase(X,"disabledByRostering"):""}))})))):r.createElement(y,{classroom:e.classroom})}var G=t(49935),Q=t(5062);const q="svGp0";var K=r.memo((function(){return r.createElement("div",{className:"px-3"},r.createElement("div",{className:"mb-1 partial-loading-background ".concat("FQwVf")}),r.createElement("div",{className:"pb-3"},r.createElement(G.b2,{numItems:2})),r.createElement("div",{className:"pb-2"},r.createElement(Q.Z,null)),r.createElement("div",{className:"d-flex align-items-center py-2"},r.createElement("div",{className:"ms-2 me-4 partial-loading-background ".concat(q)}),r.createElement("div",{className:"me-auto partial-loading-background ".concat("rKbj_")}),r.createElement("div",{className:"partial-loading-background ".concat("qigWD")})),r.createElement("ul",{className:"striped-list list-unstyled"},Array(3).fill(null).map((function(e,a){return r.createElement("li",{key:a},r.createElement("div",{className:"d-flex align-items-center py-1 px-4"},r.createElement("div",{className:"me-2 partial-loading-background ".concat(q)}),r.createElement("div",{className:"me-2 partial-loading-background ".concat("mYQWy")}),r.createElement("div",{className:"w-25"},r.createElement("div",{className:"partial-loading-background ".concat("SiD8n")})),r.createElement("div",{className:"ms-auto partial-loading-background ".concat("sAUZY")})))}))))})),Y=t(88630),z=t(46009),$=t(31491),J=t(5289),ee=s.T.encloseNamespace("classrooms.classroomTeachers");function ae(e){var a,t,s,m,u=l.a.useBasicFetch(i.N.currentUser()),g=l.a.useBasicFetch(u.data&&Y.F.getClassroom(e.id,u.data.id)),p=l.a.useBasicFetch(Y.F.getClassroomOwners(e.id)),h=l.a.useBasicFetch((null===(a=u.data)||void 0===a?void 0:a.customerId)&&Y.F.getClassroomInvitees(e.id,u.data.customerId)),E=l.a.useBasicFetch(c.L.config()),f=(0,n.I0)(),C=(0,z.p)(e.id).isOwner,S=null===(s=null===(t=g.data)||void 0===t?void 0:t._integrations)||void 0===s?void 0:s.rostered;function O(e){return e===u.data.id?C:p.data.some((function(a){return a.id.toString()===e.toString()}))}return(0,d.M)({title:ee("pageTitle",{classroomName:null===(m=g.data)||void 0===m?void 0:m.name})}),(0,$._)(g),g.data&&h.hasCompleted&&p.hasCompleted&&E.data?r.createElement(J.R,{classroom:g.data,currentUser:u.data,onTogglePin:function(e,a,t){if(!S){var r=e?Y.F.pinClassroom:Y.F.unpinClassroom;l.a.fetch(f,r(g.data,a,t))}},activeTab:"teachers",isRostered:S},function(){var e,a;return S?r.createElement(r.Fragment,null,r.createElement(o.P,{type:"classroom"}),(null===(e=h.data)||void 0===e?void 0:e.length)?r.createElement(j,{classroom:g.data,teachers:h.data,config:E.data,currentUser:u.data,isOwner:O,readOnly:!0}):r.createElement(v,null)):(null===(a=h.data)||void 0===a?void 0:a.length)?r.createElement(j,{config:E.data,classroom:g.data,teachers:h.data,currentUser:u.data,isOwner:O,readOnly:S}):r.createElement(y,{classroom:g.data})}()):r.createElement(K,null)}}}]);
2
- //# sourceMappingURL=3012-1cde12ab3d-lite.chunk.js.map
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3012],{28469:(e,a,t)=>{t.d(a,{P:()=>s});var r=t(32735),n=t(23481).T.encloseNamespace("rostering.alert");function s(e){var a="classroom"===e.type?n("classroom"):n("hasRostering");return r.createElement("div",{className:"alert text-info bg-light-blue px-2 rounded-3 fw-semibold py-2 d-flex flex-wrap"},a," ")}},299:(e,a,t)=>{t.d(a,{X:()=>l});var r=t(32735),n=t(69217),s=t(94631),l=function(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=a.idField,l=void 0===t?"id":t,o=a.persistNamespace,c=a.initialState?a.initialState:new Map,i=r.useRef(c),d=(0,n.N)(),m=(0,s.D)(e),u=(0,s.D)(o);function g(){i.current.clear(),d()}function p(e){return"number"==typeof e?e=e.toString():"string"!=typeof e&&(e=e[l].toString()),i.current.get(e)}function h(){return!!(null==e?void 0:e.length)&&e.every(p)}function E(e){e.forEach((function(e){i.current.set(e,!0)})),d()}return r.useEffect((function(){a.initialState||o&&u===o||(null==m?void 0:m.map((function(e){return e[l]})).join())!==(null==e?void 0:e.map((function(e){return e[l]})).join())&&g()}),[m,u,e,a.initialState]),r.useEffect((function(){var e;(null===(e=a.preselectedIds)||void 0===e?void 0:e.length)&&E(a.preselectedIds)}),[]),{onToggleBulk:function(){var a=!h();e.forEach((function(e){a?i.current.set(e[l].toString(),!0):i.current.delete(e[l].toString())})),d()},onToggleItem:function(e){var a=!i.current.get(e.toString());a?i.current.set(e.toString(),a):i.current.delete(e.toString()),d()},getSelected:function(){return Array.from(i.current.keys())},isChecked:p,bulkChecked:h(),deselectAll:function(){(null==e?void 0:e.length)&&(e.forEach((function(e){i.current.delete(e[l].toString())})),d())},hasSomeSelections:function(){return!!(null==e?void 0:e.length)&&!!e.find((function(e){return p(e)}))},setSelected:E,getSelectedCount:function(){return i.current.size},reset:g,getMap:function(){return i.current}}}},94631:(e,a,t)=>{t.d(a,{D:()=>n});var r=t(32735);function n(e){var a=r.useRef();return r.useEffect((function(){a.current=e})),a.current}},71056:(e,a,t)=>{t.r(a),t.d(a,{ClassroomTeachersView:()=>ae});var r=t(32735),n=t(70680),s=t(23481),l=t(20354),o=t(28469),c=t(39151),i=t(31949),d=t(79612),m=t(23232),u=t(83345),g=t(35223),p=t(99742),h=t(14070),E=t(97291),f="classrooms.manageClassroomTeachersEmptyState";function v(){return r.createElement(u.D.Provider,{value:f},r.createElement(m.u,null,r.createElement(m.u.Image,{src:p.W.EmptyStates.Classrooms.TEACHERS}),r.createElement(m.u.Heading,null,r.createElement(u.x,{phrase:"emptyStateHeading"})),r.createElement(m.u.Info,{className:"mb-2"},r.createElement(u.x,{phrase:"emptyStateInfo"})),r.createElement("a",{className:"btn btn-link info-link font-semibold",href:"",target:"_blank"},s.T.getPhrase(f,"rosteringCta"))))}function y(e){return r.createElement(u.D.Provider,{value:f},r.createElement(m.u,null,r.createElement(m.u.Image,{src:p.W.EmptyStates.Classrooms.TEACHERS}),r.createElement(m.u.Heading,null,r.createElement(u.x,{phrase:"emptyStateHeading"})),r.createElement(m.u.Info,null,r.createElement(u.x,{phrase:"emptyStateInfo"})),r.createElement(m.u.Cta,{text:s.T.getPhrase(f,"addTeachers"),icon:g.vn.Plus,appLink:{application:E.O.CLASSROOMS,action:h.e.Classrooms.ADD_TEACHERS,args:[e.classroom.id]}})))}var S=t(81886),C=t(49985),O=t(65858),k=t(11607),b=t(89965),w=t(10874),T=t(83914),N=t(76177),A=t(86764),x=t(299),R=t(3747),I=t(83657),U=t(20789),F=t(16714),L=t(86613),P=t(22902),D=t(64818);const M={avatarContainer:"kTynd",name:"UWi4G"};var _="classrooms.manageClassroomTeacherItem",H=s.T.encloseNamespace(_),B=function(e,a){return{application:E.O.CLASSROOMS,action:h.e.Classrooms.REMOVE_TEACHERS,args:[a],params:{teacherIds:[e]}}},V=function(e,a){return{application:E.O.CLASSROOMS,action:h.e.Classrooms.ASSIGN_AS_OWNER,args:[a,e]}},W=function(e,a){return{application:E.O.CLASSROOMS,action:h.e.Classrooms.REVOKE_OWNERSHIP,args:[a,e]}};function Z(e){var a,t=(0,P.T)().hasPermissions,n=D.l.getUserRole(e.teacher)===L.i.Admin,s=e.currentUser.id===e.teacher.id||!!t(F.C.ManageAllClassrooms)||!n&&e.isOwner(e.currentUser.id),l=!s||e.readOnly;return r.createElement("div",{className:"d-flex align-items-center py-1 px-4"},e.isOwner(e.currentUser.id)&&r.createElement(b.X,{id:e.teacher.id,checked:e.checked,onChange:e.onToggleCheckbox,className:"me-2",disabled:e.readOnly}),r.createElement("div",{className:"".concat(M.avatarContainer," me-2")},r.createElement(U.q,{imageCdnUrl:e.config.imageCdnUrl,initials:D.l.getInitials(e.teacher.name,e.teacher.surname),imageUrl:null===(a=e.teacher.avatar)||void 0===a?void 0:a.url})),r.createElement("p",{className:"".concat(M.name," me-2 text-truncate mb-0 text-nowrap")},D.l.getFullName(e.teacher)),!!n&&r.createElement("div",{className:"classroom-pill text-white bg-navy"},r.createElement(u.x,{namespace:_,phrase:"admin"})),!n&&e.isOwner(e.teacher.id)&&r.createElement("div",{className:"classroom-pill text-white bg-indigo"},r.createElement(u.x,{namespace:_,phrase:"owner"})),r.createElement(I.e,{actions:function(){if(!e.isOwner(e.currentUser.id))return[];var a=[],t="text-secondary disabled cursor-default",r=e.currentUser.id===e.teacher.id;return r||(e.isOwner(e.teacher.id)?a.push({order:0,label:H("revokeOwnership"),appLink:W(e.teacher.id,e.classroom.id),analyticsData:{id:e.teacher.id,classroomId:e.classroom.id},analyticsOptions:{actionType:O.Vw.Demote,entity:O.py.User,descriptor:O.iF.Classroom,workflowPhase:O.eu.Start,location:O.LZ.ManageClassroomTeacherListItem},className:l?t:"",disabled:l,tooltip:e.readOnly?e.readonlyTooltip:s?"":H("cannotRevokeOwnershipFromAdmin")}):a.push({order:0,label:H("assignAsOwner"),appLink:V(e.teacher.id,e.classroom.id),analyticsData:{id:e.teacher.id,classroomId:e.classroom.id},analyticsOptions:{actionType:O.Vw.Promote,entity:O.py.User,descriptor:O.iF.Classroom,workflowPhase:O.eu.Start,location:O.LZ.ManageClassroomTeacherListItem},className:l?t:"",disabled:l,tooltip:e.readOnly?e.readonlyTooltip:s?"":H("cannotAssignAdminAsOwner")})),a.push({order:10,label:H(r?"leaveClassroom":"removeTeacher"),appLink:B(e.teacher.id,e.classroom.id),analyticsData:{id:e.classroom.id,userId:e.teacher.id},analyticsOptions:{actionType:O.Vw.Dissociate,entity:O.py.Classroom,descriptor:O.iF.User,workflowPhase:O.eu.Start,location:O.LZ.ManageClassroomTeacherListItem},className:l?t:"text-danger",disabled:l,tooltip:e.readOnly?e.readonlyTooltip:s?"":H("cannotRemoveAdmin")}),a}(),className:"ms-auto",actionsDropdownClassName:"btn btn-link"}))}var X="classrooms.manageClassroomTeachers";function j(e){var a,t=(0,x.X)(e.teachers),n=t.getSelected().length,l=(0,R.a)(A.r.XLDown);return(null===(a=e.teachers)||void 0===a?void 0:a.length)?r.createElement(r.Fragment,null,r.createElement("div",{className:"d-flex align-items-center py-2 ".concat(l?"ps-2":"ps-4")},e.isOwner(e.currentUser.id)&&r.createElement(r.Fragment,null,r.createElement(b.X,{id:"manage-classroom-teachers-bulk",onChange:t.onToggleBulk,checked:t.bulkChecked,className:"me-2",indeterminate:t.hasSomeSelections(),disabled:e.readOnly}),r.createElement(k.L,{className:!n||e.readOnly?"me-auto text-light cursor-default":"me-auto",onClick:function(){if(n&&e.isOwner(e.currentUser.id)&&!e.readOnly){var a=t.getSelected();C.k.logUserAction({id:e.classroom.id,teacherCount:a.length},{entity:O.py.Classroom,descriptor:O.iF.User,workflowPhase:O.eu.Start,actionType:O.Vw.Dissociate,location:O.LZ.ManageClassroomTeachers}),S.Q.C$.trigger({application:E.O.CLASSROOMS,action:h.e.Classrooms.REMOVE_TEACHERS,args:[e.classroom.id],params:{teacherIds:a}})}}},r.createElement(T.x,{svgName:g.vn.Delete,title:e.readOnly?s.T.getPhrase(X,"disabledByRostering"):s.T.getPhrase(X,"delete"),tooltipPlacement:"top",tooltipSpanHack:!0})),r.createElement(N.u,{spanHack:!0,title:e.readOnly?s.T.getPhrase(X,"disabledByRostering"):""},r.createElement(w.h,{disabled:e.readOnly,svgName:g.vn.Plus,className:"btn btn-outline-dark ms-auto",appLink:e.readOnly?null:{application:E.O.CLASSROOMS,action:h.e.Classrooms.ADD_TEACHERS,args:[e.classroom.id]},analyticsData:{id:e.classroom.id},analyticsOptions:{entity:O.py.Classroom,descriptor:O.iF.User,workflowPhase:O.eu.Start,actionType:O.Vw.Associate,location:O.LZ.ManageClassroomTeachers}},r.createElement(u.x,{namespace:X,phrase:"addTeacher"}))))),r.createElement("ul",{className:"striped-list list-unstyled"},e.teachers.map((function(a){return r.createElement("li",{key:a.id},r.createElement(Z,{classroom:e.classroom,teacher:a,config:e.config,checked:t.isChecked(a.id),onToggleCheckbox:function(){return t.onToggleItem(a.id)},currentUser:e.currentUser,isOwner:e.isOwner,readOnly:e.readOnly,readonlyTooltip:e.readOnly?s.T.getPhrase(X,"disabledByRostering"):""}))})))):r.createElement(y,{classroom:e.classroom})}var G=t(49935),Q=t(5062);const q="svGp0";var K=r.memo((function(){return r.createElement("div",{className:"px-3"},r.createElement("div",{className:"mb-1 partial-loading-background ".concat("FQwVf")}),r.createElement("div",{className:"pb-3"},r.createElement(G.b2,{numItems:2})),r.createElement("div",{className:"pb-2"},r.createElement(Q.Z,null)),r.createElement("div",{className:"d-flex align-items-center py-2"},r.createElement("div",{className:"ms-2 me-4 partial-loading-background ".concat(q)}),r.createElement("div",{className:"me-auto partial-loading-background ".concat("rKbj_")}),r.createElement("div",{className:"partial-loading-background ".concat("qigWD")})),r.createElement("ul",{className:"striped-list list-unstyled"},Array(3).fill(null).map((function(e,a){return r.createElement("li",{key:a},r.createElement("div",{className:"d-flex align-items-center py-1 px-4"},r.createElement("div",{className:"me-2 partial-loading-background ".concat(q)}),r.createElement("div",{className:"me-2 partial-loading-background ".concat("mYQWy")}),r.createElement("div",{className:"w-25"},r.createElement("div",{className:"partial-loading-background ".concat("SiD8n")})),r.createElement("div",{className:"ms-auto partial-loading-background ".concat("sAUZY")})))}))))})),Y=t(88630),z=t(46009),$=t(31491),J=t(5289),ee=s.T.encloseNamespace("classrooms.classroomTeachers");function ae(e){var a,t,s,m,u=l.a.useBasicFetch(i.N.currentUser()),g=l.a.useBasicFetch(u.data&&Y.F.getClassroom(e.id,u.data.id)),p=l.a.useBasicFetch(Y.F.getClassroomOwners(e.id)),h=l.a.useBasicFetch((null===(a=u.data)||void 0===a?void 0:a.customerId)&&Y.F.getClassroomStaff(e.id,u.data.customerId)),E=l.a.useBasicFetch(c.L.config()),f=(0,n.I0)(),S=(0,z.p)(e.id).isOwner,C=null===(s=null===(t=g.data)||void 0===t?void 0:t._integrations)||void 0===s?void 0:s.rostered;function O(e){return e===u.data.id?S:p.data.some((function(a){return a.id.toString()===e.toString()}))}return(0,d.M)({title:ee("pageTitle",{classroomName:null===(m=g.data)||void 0===m?void 0:m.name})}),(0,$._)(g),g.data&&h.hasCompleted&&p.hasCompleted&&E.data?r.createElement(J.R,{classroom:g.data,currentUser:u.data,onTogglePin:function(e,a,t){if(!C){var r=e?Y.F.pinClassroom:Y.F.unpinClassroom;l.a.fetch(f,r(g.data,a,t))}},activeTab:"teachers",isRostered:C},function(){var e,a;return C?r.createElement(r.Fragment,null,r.createElement(o.P,{type:"classroom"}),(null===(e=h.data)||void 0===e?void 0:e.length)?r.createElement(j,{classroom:g.data,teachers:h.data,config:E.data,currentUser:u.data,isOwner:O,readOnly:!0}):r.createElement(v,null)):(null===(a=h.data)||void 0===a?void 0:a.length)?r.createElement(j,{config:E.data,classroom:g.data,teachers:h.data,currentUser:u.data,isOwner:O,readOnly:C}):r.createElement(y,{classroom:g.data})}()):r.createElement(K,null)}}}]);
2
+ //# sourceMappingURL=3012-08307aac0e-lite.chunk.js.map