@clickview/lite 0.49.6 → 0.49.8

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 (32) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/scripts/1285-db42ee1c76-lite.chunk.js +2 -0
  3. package/dist/scripts/1285-db42ee1c76-lite.chunk.js.map +1 -0
  4. package/dist/scripts/1863-bb98f2e617-lite.chunk.js +2 -0
  5. package/dist/scripts/1863-bb98f2e617-lite.chunk.js.map +1 -0
  6. package/dist/scripts/{2355-78b307e130-lite.chunk.js → 2355-b2345e9449-lite.chunk.js} +2 -2
  7. package/dist/scripts/{2355-78b307e130-lite.chunk.js.map → 2355-b2345e9449-lite.chunk.js.map} +1 -1
  8. package/dist/scripts/6741-dadd4903a8-lite.chunk.js +3 -0
  9. package/dist/scripts/6741-dadd4903a8-lite.chunk.js.map +1 -0
  10. package/dist/scripts/7301-49c2341e97-lite.chunk.js +2 -0
  11. package/dist/scripts/7301-49c2341e97-lite.chunk.js.map +1 -0
  12. package/dist/scripts/{7855-cbf70d4453-lite.chunk.js → 7855-76f000d339-lite.chunk.js} +2 -2
  13. package/dist/scripts/7855-76f000d339-lite.chunk.js.map +1 -0
  14. package/dist/scripts/8243-e9d7716ffe-lite.chunk.js +2 -0
  15. package/dist/scripts/8243-e9d7716ffe-lite.chunk.js.map +1 -0
  16. package/dist/scripts/{bundle-bcc136a91c.min.js → bundle-d3e8783756.min.js} +3 -3
  17. package/dist/scripts/bundle-d3e8783756.min.js.map +1 -0
  18. package/package.json +1 -1
  19. package/dist/scripts/1285-93d485e012-lite.chunk.js +0 -2
  20. package/dist/scripts/1285-93d485e012-lite.chunk.js.map +0 -1
  21. package/dist/scripts/1863-5502813c32-lite.chunk.js +0 -2
  22. package/dist/scripts/1863-5502813c32-lite.chunk.js.map +0 -1
  23. package/dist/scripts/6741-b54fd85e06-lite.chunk.js +0 -3
  24. package/dist/scripts/6741-b54fd85e06-lite.chunk.js.map +0 -1
  25. package/dist/scripts/7301-98679776b7-lite.chunk.js +0 -2
  26. package/dist/scripts/7301-98679776b7-lite.chunk.js.map +0 -1
  27. package/dist/scripts/7855-cbf70d4453-lite.chunk.js.map +0 -1
  28. package/dist/scripts/8243-ddaa0ed22d-lite.chunk.js +0 -2
  29. package/dist/scripts/8243-ddaa0ed22d-lite.chunk.js.map +0 -1
  30. package/dist/scripts/bundle-bcc136a91c.min.js.map +0 -1
  31. /package/dist/scripts/{6741-b54fd85e06-lite.chunk.js.LICENSE.txt → 6741-dadd4903a8-lite.chunk.js.LICENSE.txt} +0 -0
  32. /package/dist/scripts/{bundle-bcc136a91c.min.js.LICENSE.txt → bundle-d3e8783756.min.js.LICENSE.txt} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clickview/lite",
3
- "version": "0.49.6",
3
+ "version": "0.49.8",
4
4
  "description": "ClickView Lite",
5
5
  "main": "dist/scripts/bundle.js",
6
6
  "types": "dist/projects/lite/src/index.d.ts",
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1285],{28469:(e,t,n)=>{n.d(t,{P:()=>o});var a=n(32735),r=n(23481).T.encloseNamespace("rostering.alert");function o(e){var t="classroom"===e.type?r("classroom"):r("hasRostering");return a.createElement("div",{className:"alert text-info bg-light-blue px-2 rounded-3 fw-semibold py-2 d-flex flex-wrap"},t," ")}},299:(e,t,n)=>{n.d(t,{X:()=>s});var a=n(32735),r=n(69217),o=n(94631),s=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.idField,s=void 0===n?"id":n,l=t.persistNamespace,i=t.initialState?t.initialState:new Map,c=a.useRef(i),d=(0,r.N)(),u=(0,o.D)(e),m=(0,o.D)(l);function g(){c.current.clear(),d()}function p(e){return"number"==typeof e?e=e.toString():"string"!=typeof e&&(e=e[s].toString()),c.current.get(e)}function f(){return!!(null==e?void 0:e.length)&&e.every(p)}function v(e){e.forEach((function(e){c.current.set(e,!0)})),d()}return a.useEffect((function(){t.initialState||l&&m===l||(null==u?void 0:u.map((function(e){return e[s]})).join())!==(null==e?void 0:e.map((function(e){return e[s]})).join())&&g()}),[u,m,e,t.initialState]),a.useEffect((function(){var e;(null===(e=t.preselectedIds)||void 0===e?void 0:e.length)&&v(t.preselectedIds)}),[]),{onToggleBulk:function(){var t=!f();e.forEach((function(e){t?c.current.set(e[s].toString(),!0):c.current.delete(e[s].toString())})),d()},onToggleItem:function(e){var t=!c.current.get(e.toString());t?c.current.set(e.toString(),t):c.current.delete(e.toString()),d()},getSelected:function(){return Array.from(c.current.keys())},isChecked:p,bulkChecked:f(),deselectAll:function(){(null==e?void 0:e.length)&&(e.forEach((function(e){c.current.delete(e[s].toString())})),d())},hasSomeSelections:function(){return!!(null==e?void 0:e.length)&&!!e.find((function(e){return p(e)}))},setSelected:v,getSelectedCount:function(){return c.current.size},reset:g,getMap:function(){return c.current}}}},94631:(e,t,n)=>{n.d(t,{D:()=>r});var a=n(32735);function r(e){var t=a.useRef();return a.useEffect((function(){t.current=e})),t.current}},36511:(e,t,n)=>{n.d(t,{I:()=>r});var a=n(96787);function r(e){switch(e){case a.R.Pink:return"pink";case a.R.Orange:return"orange";case a.R.Green:return"green";case a.R.Blue:return"blue";case a.R.Purple:return"purple";case a.R.Indigo:return"indigo";default:return"pink"}}},6925:(e,t,n)=>{n.r(t),n.d(t,{ClassroomStudentsView:()=>Ne});var a=n(32735),r=n(70680),o=n(23481),s=n(20354),l=n(49985),i=n(65858),c=n(28469),d=n(16714),u=n(76881),m=n(39151),g=n(31949),p=n(22902),f=n(79612),v=n(23232),E=n(83345),S=n(35223),h=n(99742),y=n(14070),b=n(97291),k="classrooms.classroomsEmptyState";function C(e){return a.createElement(E.D.Provider,{value:k},a.createElement(v.u,null,a.createElement(v.u.Image,{src:h.W.EmptyStates.Classrooms.STUDENTS}),a.createElement(v.u.Heading,null,a.createElement(E.x,{phrase:"noStudentsHeading"})),a.createElement(v.u.Info,{className:"w-33 ".concat(e.canManageUsers?"":"mb-0")},a.createElement(E.x,{phrase:"noStudentsInfo"})),e.canManageUsers&&!e.isRostering&&a.createElement(v.u.Cta,{text:o.T.getPhrase(k,"noStudentsCta"),appLink:{application:b.O.USER_MANAGER,action:y.e.UserManager.STUDENTS}}),!e.canManageUsers&&!e.isRostering&&a.createElement(v.u.Info,null,a.createElement(E.x,{phrase:"askAdmin"})),e.isRostering&&a.createElement("a",{className:"btn btn-link info-link font-semibold",href:"",target:"_blank"},o.T.getPhrase(k,"rosteringCta"))))}var N="classrooms.manageClassroomStudentsEmptyState",T=o.T.encloseNamespace(N),O="https://static.clickview.com.au/Primary/Documents/Student-engagement-ideas.pdf",w="";function x(){return a.createElement(E.D.Provider,{value:N},a.createElement(v.u,null,a.createElement(v.u.Image,{src:h.W.EmptyStates.Classrooms.STUDENTS}),a.createElement(v.u.Heading,null,a.createElement(E.x,{phrase:"emptyStateHeading"})),a.createElement(v.u.Info,{className:"mb-2"},a.createElement(E.x,{phrase:"emptyStateInfo"})),a.createElement("a",{className:"btn btn-link info-link font-semibold",href:w,target:"_blank"},T("rosteringCta"))))}function U(e){return e.schoolHasNoStudents?a.createElement(C,{canManageUsers:e.canManageUsers}):a.createElement(E.D.Provider,{value:N},a.createElement(v.u,null,a.createElement(v.u.Image,{src:h.W.EmptyStates.Classrooms.STUDENTS}),a.createElement(v.u.Heading,null,a.createElement(E.x,{phrase:"emptyStateHeading"})),a.createElement(v.u.Info,null,a.createElement(E.x,{phrase:"emptyStateInfo"})),a.createElement(v.u.Cta,{text:o.T.getPhrase(N,"addStudents"),icon:S.vn.Plus,appLink:{application:b.O.CLASSROOMS,action:y.e.Classrooms.ADD_STUDENTS_CHOICES,args:[e.classroom.id]}}),a.createElement("a",{className:"btn btn-link info-link font-semibold",href:O,target:"_blank"},e.classroomIdeasText)))}var I=n(81886),M=n(11607),R=n(89965),A=n(10874),P=n(83914),G=n(76177),F=n(86764),L=n(69883),D=n(299),H=n(3747),_=n(34509),B=n(36848),j=n(36511);function Z(e){var t;return e.group?a.createElement("div",{className:"classroom-pill text-white bg-".concat((0,j.I)(null===(t=e.group.metadata)||void 0===t?void 0:t.colour))},e.group.name):a.createElement(a.Fragment,null)}function V(e){return e.count?a.createElement(M.L,{onClick:e.onClick,className:"classroom-pill bg-white border border-dark"},"+",e.count):a.createElement(a.Fragment,null)}var X="classrooms.classroomGroupDropdown",W=function(e,t){return{application:b.O.CLASSROOMS,action:y.e.Classrooms.NEW_GROUP,args:[e],params:{addStudents:t.map((function(e){return e.id}))}}},Y=function(e,t){return e.filter((function(e){return t.users.data.find((function(t){return t.id.toString()===e.id.toString()}))})).length};function q(e){var t,n=(0,D.X)(e.groups,{preselectedIds:e.preselections.map((function(e){return e.id}))}),r=n.onToggleItem,s=n.isChecked;a.useEffect((function(){e.groups.forEach((function(t){var n=Y(e.selectedStudents,t);(!n||n!==e.selectedStudents.length||s(t.id))&&(n||!s(t.id))||r(t.id)}))}));var c={align:e.alignRight?"end":"start"};return e.disabled&&(c.show=!1),a.createElement(_.Z,Object.assign({},c),a.createElement(_.Z.Toggle,{as:"div",id:e.id,className:"".concat(e.disabled?"text-light":"cursor-pointer"," ").concat("me-2 d-inline-block svg-container sm"," no-caret")},a.createElement(P.x,{svgName:S.vn.Group,title:e.disabled?e.disabledTooltips:o.T.getPhrase(X,"addToGroupTooltip"),tooltipPlacement:"top",tooltipSpanHack:!0,tooltipSpanHackClassName:""})),a.createElement(_.Z.Menu,null,!!(null===(t=e.groups)||void 0===t?void 0:t.length)&&a.createElement("div",{className:"px-2 border-bottom mb-1"},a.createElement("p",{className:"mb-0"},a.createElement(E.x,{namespace:X,phrase:"addToGroup"})),a.createElement("ul",{className:"list-unstyled pe-3"},e.groups.map((function(t){return a.createElement("li",{key:t.id,className:"d-flex align-items-center bg-white my-1"},a.createElement(R.X,{id:"".concat(e.id,":").concat(t.id),checked:s(t.id),onChange:function(){return function(t){var n=!s(t.id);e.onSelectGroup(t,n),r(t.id)}(t)},indeterminate:!!Y(e.selectedStudents,t)}),a.createElement(Z,{group:t}))})))),a.createElement(B.F,{onClick:function(){e.disabled||l.k.logUserAction({},l.k.mergeOptions(e.analyticsOptions,{actionType:i.Vw.Create,workflowPhase:i.eu.Start,entity:i.py.ClassroomGroup}))},appLink:W(e.classroom.id,e.selectedStudents),className:e.disabled?"disabled":"text-nowrap d-flex align-items-center px-2"},a.createElement(P.x,{svgName:S.vn.Plus}),a.createElement(E.x,{namespace:X,phrase:"createNew"}))))}q.defaultProps={preselections:[]};var Q=n(91967),$=n(83657),z=n(20789),J=n(10038),K=n(64818);const ee={avatarContainer:"rfVnC",name:"RYLWZ"};function te(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,o,s,l=[],i=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(a=o.call(n)).done)&&(l.push(a.value),l.length!==t);i=!0);}catch(e){c=!0,r=e}finally{try{if(!i&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(c)throw r}}return l}}(e,t)||ne(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ne(e,t){if(e){if("string"==typeof e)return ae(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ae(e,t):void 0}}function ae(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var re=o.T.encloseNamespace("classrooms.manageClassroomStudentItem"),oe=function(e){return{application:b.O.USER_MANAGER,action:y.e.UserManager.EDIT_USER,args:[e],params:{userType:u.Y.Learner}}},se=function(e,t){return{application:b.O.CLASSROOMS,action:y.e.Classrooms.REMOVE_STUDENTS,args:[t],params:{studentIds:[e]}}};function le(e){var t,n=te(a.useState(!1),2),r=n[0],o=n[1],s=te(a.useState(!1),2),c=s[0],u=s[1],m=te(a.useState({}),2),g=m[0],f=m[1],v=a.useRef(null),E=a.useRef(null),S=(0,p.T)().hasPermissions;a.useEffect((function(){b(),c||o(!0)}),[e.selectedGroups.length]);var h,y=Q.q.throttle((function(){b(),o(!0)}),300);function b(){f(e.selectedGroups.reduce((function(e,t){return e[t.id]=!0,e}),{}))}return(0,J.H)((function(){c||y()})),a.useEffect((function(){if(v.current&&E.current&&r){var e=v.current.firstElementChild;if(e){var t,n,a=e.getBoundingClientRect().y,s={},l=function(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=ne(e))){n&&(e=n);var a=0,r=function(){};return{s:r,n:function(){return a>=e.length?{done:!0}:{done:!1,value:e[a++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,l=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){l=!0,o=e},f:function(){try{s||null==n.return||n.return()}finally{if(l)throw o}}}}(v.current.children);try{for(l.s();!(n=l.n()).done;){var i=n.value;i.id&&(s[i.id]=i.getBoundingClientRect().y===a,t=s[i.id]?i.id:t)}}catch(e){l.e(e)}finally{l.f()}E.current.getBoundingClientRect().y!==a&&(s[t]=!1),f(s),o(!1)}}}),[r]),a.createElement("div",{className:"d-flex align-items-center py-1 px-4"},a.createElement(R.X,{id:e.student.id,checked:e.checked,onChange:e.onToggleCheckbox,className:"me-2",disabled:e.readOnly}),a.createElement("div",{className:"".concat(ee.avatarContainer," me-2")},a.createElement(z.q,{imageCdnUrl:e.config.imageCdnUrl,initials:K.l.getInitials(e.student.name,e.student.surname),imageUrl:null===(t=e.student.avatar)||void 0===t?void 0:t.url})),a.createElement("p",{className:"me-2 ".concat(ee.name," text-truncate mb-0 text-nowrap")},e.student.name," ",e.student.surname),a.createElement("div",{className:"".concat(r?"invisible":""," me-auto d-flex flex-wrap mt-n1"),ref:v},e.selectedGroups.map((function(e){return g[e.id]?a.createElement("div",{key:e.id,className:"me-1 mt-1",id:e.id},a.createElement(Z,{group:e})):a.createElement(a.Fragment,{key:e.id})})),a.createElement("div",{ref:E,className:"me-1 mt-1"},a.createElement(V,{count:Object.keys(g).reduce((function(e,t){return g[t]||e++,e}),0),onClick:function(){u(!0),b()}}))),a.createElement(q,{id:"add-group-".concat(e.student.id),classroom:e.classroom,groups:e.classroomGroups,selectedStudents:[e.student],preselections:e.selectedGroups,onSelectGroup:function(t,n){return e.onToggleGroup(e.student,t,n)},analyticsOptions:{location:i.LZ.ManageClassroomStudentListItem},alignRight:!0,disabled:e.readOnly,disabledTooltips:e.readOnlyTooltip}),a.createElement($.e,{actions:(h=[],S(d.C.ManageUsers)&&h.push({label:re("editStudent"),appLink:oe(e.student.id),disabled:e.readOnly,className:e.readOnly?"disabled":"",tooltip:e.readOnly?e.readOnlyTooltip:"",onClick:function(){l.k.logUserAction({id:e.student.id},{actionType:i.Vw.Edit,entity:i.py.User,workflowPhase:i.eu.Start,location:i.LZ.ManageClassroomStudentListItem})}}),h.push({label:re("removeStudent"),appLink:se(e.student.id,e.classroom.id),disabled:e.readOnly,className:e.readOnly?"disabled":"text-danger",tooltip:e.readOnly?e.readOnlyTooltip:"",onClick:function(){l.k.logUserAction({id:e.classroom.id,userId:e.student.id},{actionType:i.Vw.Dissociate,entity:i.py.Classroom,descriptor:i.iF.User,workflowPhase:i.eu.Start,location:i.LZ.ManageClassroomStudentListItem})}}),h),actionsDropdownClassName:"btn"}))}var ie=n(88630),ce="classrooms.manageClassroomStudents",de=o.T.encloseNamespace(ce);function ue(e){var t,n=e.classroom,c=e.students,d=e.groups,u=(0,r.I0)(),m=(0,L.Z)(),g=(0,D.X)(c.data),p=g.getSelected().length,f=d.filter((function(e){var t,n;if(!(null===(n=null===(t=e.users)||void 0===t?void 0:t.data)||void 0===n?void 0:n.length))return!1;var a=!0,r=0,o=g.getSelected();if(o.length){var s=function(){var t=o[r];e.users.data.find((function(e){return e.id.toString()===t.toString()}))||(a=!1),r++};do{s()}while(r<o.length);return a}})),v=(0,H.a)(F.r.XLDown);return(null===(t=c.data)||void 0===t?void 0:t.length)?a.createElement(a.Fragment,null,a.createElement("div",{className:"d-flex align-items-center py-2 ".concat(v?"ps-2":"ps-4")},a.createElement(R.X,{id:"manage-classroom-students-bulk",onChange:g.onToggleBulk,checked:g.bulkChecked,className:"me-2",indeterminate:g.hasSomeSelections(),disabled:e.readOnly}),a.createElement(q,{id:"bulk-add-group",classroom:n,selectedStudents:g.getSelected().map((function(t){return e.students.data.find((function(e){return e.id.toString()===t.toString()}))})),groups:d,onSelectGroup:function(e,t){var a=g.getSelected(),r=t?ie.F.addStudentsToGroup:ie.F.removeStudentsFromGroup;s.a.fetch(u,r(a,e.id,n.id,(function(){l.k.logUserAction({id:e.id,studentCount:a.length},{actionType:i.Vw.Associate,entity:i.py.ClassroomGroup,descriptor:i.iF.User,workflowPhase:i.eu.Complete,location:i.LZ.ManageClassroomStudents}),m.success(de("addSuccess",{groupName:e.name,escapeText:!0}))}),(function(){m.error(de("addError",{groupName:e.name,escapeText:!0}))})))},disabled:!p||e.readOnly,preselections:f,analyticsOptions:{location:i.LZ.ManageClassroomStudents},disabledTooltips:e.readOnly&&o.T.getPhrase(ce,"disabledByRostering")}),a.createElement(M.L,{className:"me-auto ".concat(!p||e.readOnly?"text-light cursor-default":""),onClick:function(){if(p&&!e.readOnly){var t=g.getSelected();l.k.logUserAction({id:n.id,studentCount:t.length},{entity:i.py.Classroom,descriptor:i.iF.User,workflowPhase:i.eu.Start,actionType:i.Vw.Dissociate,location:i.LZ.ManageClassroomStudents}),I.Q.C$.trigger({application:b.O.CLASSROOMS,action:y.e.Classrooms.REMOVE_STUDENTS,args:[n.id],params:{studentIds:t}})}}},a.createElement(G.u,{spanHack:!0,title:e.readOnly?o.T.getPhrase(ce,"disabledByRostering"):""},a.createElement(P.x,{svgName:S.vn.Delete,title:o.T.getPhrase(ce,"delete"),tooltipPlacement:"top",tooltipSpanHack:!0}))),a.createElement(G.u,{spanHack:!0,title:e.readOnly?o.T.getPhrase(ce,"disabledByRostering"):""},a.createElement(A.h,{onClick:function(){l.k.logUserAction({id:n.id},{entity:i.py.Classroom,descriptor:i.iF.User,workflowPhase:i.eu.Start,actionType:i.Vw.Associate,location:i.LZ.ManageClassroomStudents}),I.Q.C$.trigger({application:b.O.CLASSROOMS,action:y.e.Classrooms.ADD_STUDENTS_CHOICES,args:[n.id]})},svgName:S.vn.Plus,className:"btn btn-outline-dark",disabled:e.readOnly},a.createElement(E.x,{namespace:ce,phrase:"addStudent"})))),a.createElement("ul",{className:"striped-list list-unstyled"},c.data.map((function(t){return a.createElement("li",{key:t.id},a.createElement(le,{classroom:n,student:t,classroomGroups:e.groups,config:e.config,selectedGroups:e.groups.filter((function(e){return e.users.data.find((function(e){return e.id===t.id}))})),checked:g.isChecked(t.id),onToggleCheckbox:function(){return g.onToggleItem(t.id)},onToggleGroup:e.onToggleGroup,readOnly:e.readOnly,readOnlyTooltip:e.readOnly?de("disabledByRostering"):""}))})))):a.createElement(U,{classroom:e.classroom,classroomIdeasText:de("classroomIdeasText"),schoolHasNoStudents:e.schoolHasNoStudents,canManageUsers:e.canManageUsers})}var me=n(49935),ge=n(5062);const pe="pJf6R",fe="MSvzY",ve="IFmvc",Ee="pOcvk";var Se=a.memo((function(){return a.createElement("div",{className:"px-3"},a.createElement("div",{className:"mb-1 partial-loading-background ".concat("YrP_G")}),a.createElement("div",{className:"pb-3"},a.createElement(me.b2,{numItems:2})),a.createElement("div",{className:"pb-2"},a.createElement(ge.Z,null)),a.createElement("div",{className:"d-flex align-items-center py-2"},a.createElement("div",{className:"mx-4 partial-loading-background ".concat(pe)}),a.createElement("div",{className:"me-2 partial-loading-background ".concat(fe)}),a.createElement("div",{className:"me-auto partial-loading-background ".concat(fe)}),a.createElement("div",{className:"partial-loading-background ".concat("j62jt")})),a.createElement("ul",{className:"striped-list list-unstyled"},Array(20).fill(null).map((function(e,t){return a.createElement("li",{key:t},a.createElement("div",{className:"d-flex align-items-center py-1 px-4"},a.createElement("div",{className:"me-2 partial-loading-background ".concat(pe)}),a.createElement("div",{className:"me-2 partial-loading-background ".concat("droqZ")}),a.createElement("div",{className:"w-25"},a.createElement("div",{className:"partial-loading-background ".concat("gorcb")})),a.createElement("div",{className:"me-auto d-flex"},Math.random()>.5?a.createElement(a.Fragment,null,a.createElement("div",{className:"partial-loading-background rounded-pill me-1 ".concat(ve," ").concat("SdQ90")}),a.createElement("div",{className:"partial-loading-background rounded-pill ".concat(ve," ").concat(Ee)})):a.createElement("div",{className:"partial-loading-background rounded-pill ".concat(ve," ").concat(Ee)})),a.createElement("div",{className:"me-2 partial-loading-background ".concat(fe)}),a.createElement("div",{className:"partial-loading-background ".concat("S7p4K")})))}))))})),he=n(31491),ye=n(5289),be=n(47288),ke=o.T.encloseNamespace("classrooms.classroomStudents"),Ce={entity:i.py.ClassroomGroup,descriptor:i.iF.User,workflowPhase:i.eu.Complete,location:i.LZ.ManageClassroomStudentListItem};function Ne(e){var t,n,o,v,E,S=s.a.useBasicFetch(g.N.currentUser()),h=s.a.useBasicFetch(S.data&&ie.F.getClassroom(e.id,S.data.id)),y=s.a.useBasicFetch(ie.F.getClassroomStudents(e.id)),b=s.a.useBasicFetch(S.data&&be.N.getUsers(S.data.customerId,u.Y.Learner)),k=s.a.useBasicFetch(ie.F.getClassroomGroups(e.id)),C=s.a.useBasicFetch(m.L.config()),N=null===(n=null===(t=h.data)||void 0===t?void 0:t._integrations)||void 0===n?void 0:n.rostered,T=(0,r.I0)(),O=(0,p.T)().hasPermissions;function w(t,n,a){var r={id:n.id,studentCount:1},o=a?ie.F.addStudentsToGroup([t.id],n.id,e.id,(function(){l.k.logUserAction(r,Object.assign(Object.assign({},Ce),{actionType:i.Vw.Associate}))})):ie.F.removeStudentsFromGroup([t.id],n.id,e.id,(function(){l.k.logUserAction(r,Object.assign(Object.assign({},Ce),{actionType:i.Vw.Dissociate}))}));s.a.fetch(T,o)}return(0,f.M)({title:ke("pageTitle",{classroomName:null===(o=h.data)||void 0===o?void 0:o.name})}),(0,he._)(h),h.data&&(null===(v=y.data)||void 0===v?void 0:v.data)&&(null===(E=k.data)||void 0===E?void 0:E.data)&&C.data&&b.data?a.createElement(ye.R,{classroom:h.data,currentUser:S.data,onTogglePin:function(e,t,n){if(!N){var a=e?ie.F.pinClassroom:ie.F.unpinClassroom;s.a.fetch(T,a(h.data,t,n))}},activeTab:"students",isRostered:N},function(){var e,t,n,r,o,s,l,i,u,m;return N?a.createElement(a.Fragment,null,a.createElement(c.P,{type:"classroom"}),(null===(t=null===(e=y.data)||void 0===e?void 0:e.data)||void 0===t?void 0:t.length)?a.createElement(ue,{classroom:h.data,students:y.data,groups:k.data.data,onToggleGroup:w,config:C.data,schoolHasNoStudents:!(null===(r=null===(n=b.data)||void 0===n?void 0:n.data)||void 0===r?void 0:r.length),canManageUsers:O(d.C.ManageUsers),readOnly:!0}):a.createElement(x,null)):(null===(s=null===(o=y.data)||void 0===o?void 0:o.data)||void 0===s?void 0:s.length)?a.createElement(ue,{classroom:h.data,students:y.data,groups:k.data.data,onToggleGroup:w,config:C.data,schoolHasNoStudents:!(null===(i=null===(l=b.data)||void 0===l?void 0:l.data)||void 0===i?void 0:i.length),canManageUsers:O(d.C.ManageUsers)}):a.createElement(U,{classroom:h.data,classroomIdeasText:ke("classroomIdeasText"),schoolHasNoStudents:!(null===(m=null===(u=b.data)||void 0===u?void 0:u.data)||void 0===m?void 0:m.length),canManageUsers:O(d.C.ManageUsers)})}()):a.createElement(Se,null)}}}]);
2
- //# sourceMappingURL=1285-93d485e012-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/1285-93d485e012-lite.chunk.js","mappings":"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","sources":["file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/rostering/rostering-alert/RosteringAlert.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/hooks/useBulkCheckboxManager.ts","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/hooks/usePrevious.ts","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/utils/GroupHelper.ts","file:///Users/joshua.taylor/Projects/clickview/packages/projects/lite/src/apps/classrooms/views/classrooms/empty-state/ClassroomsNoStudentsState.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/projects/lite/src/apps/classrooms/components/manage-classroom-students/empty-state/ManageClassroomStudentsEmptyState.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/projects/lite/src/apps/classrooms/components/classroom-group-pill/ClassroomGroupPill.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/projects/lite/src/apps/classrooms/components/classroom-group-dropdown/ClassroomGroupDropdown.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/projects/lite/src/apps/classrooms/components/manage-classroom-student-item/manage-classroom-student-item.scss","file:///Users/joshua.taylor/Projects/clickview/packages/projects/lite/src/apps/classrooms/components/manage-classroom-student-item/ManageClassroomStudentItem.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/projects/lite/src/apps/classrooms/components/manage-classroom-students/ManageClassroomStudents.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/projects/lite/src/apps/classrooms/components/manage-classroom-students/partial-loading/partial-manage-classroom-students.scss","file:///Users/joshua.taylor/Projects/clickview/packages/projects/lite/src/apps/classrooms/components/manage-classroom-students/partial-loading/PartialManageClassroomStudents.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/projects/lite/src/apps/classrooms/views/classroom-students/ClassroomStudentsView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'rostering.alert';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface RosteringAlertProps {\n type?: 'classroom' | 'general';\n}\n\nexport function RosteringAlert(props: RosteringAlertProps) {\n const text = props.type === 'classroom' ? getPhrase('classroom') : getPhrase('hasRostering');\n\n return (\n <div className='alert text-info bg-light-blue px-2 rounded-3 fw-semibold py-2 d-flex flex-wrap'>\n {text}&nbsp;\n {/* todo add it back when KB article link is ready */}\n {/* <ExternalLink\n className='text-info text-underline'\n href={''}\n newTab\n >\n {LanguageService.getPhrase(namespace, 'learnMore')}\n </ExternalLink> */}\n </div>\n );\n}","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { useForceUpdate } from 'libs/shared/hooks/useForceUpdate';\nimport { usePrevious } from 'libs/shared/hooks/usePrevious';\n\ntype CheckboxItemsState = Map<string, boolean>;\n\nexport interface BulkCheckboxManager {\n onToggleBulk: () => void;\n onToggleItem: (id: string) => void;\n getSelected: () => string[];\n isChecked: (item: string | number | HashObject<string>) => boolean;\n bulkChecked: boolean;\n deselectAll: () => void;\n hasSomeSelections: () => boolean;\n setSelected: (ids: string[]) => void;\n getSelectedCount: () => number;\n reset: () => void;\n getMap: () => Map<string, boolean>;\n}\n\nexport interface BulkCheckboxManagerOptions {\n idField?: string; // For objects like `PresentationAudiences` that don't use `id` as their identifier field\n persistNamespace?: string;\n preselectedIds?: string[];\n initialState?: CheckboxItemsState;\n}\n\n/**\n * @param collection - The collection you are keeping track of with checkboxes\n * @param options - See interface above\n */\nexport const useBulkCheckboxManager = (collection: HashObject[], options: BulkCheckboxManagerOptions = {}) => {\n const { idField = 'id', persistNamespace } = options;\n\n const initial = options.initialState ? options.initialState : new Map<string, boolean>();\n\n const items = React.useRef<CheckboxItemsState>(initial);\n \n const forceUpdate = useForceUpdate();\n\n const prevCollection = usePrevious(collection);\n const prevNamespace = usePrevious(persistNamespace);\n\n /**\n * This hook will clear the state of this hook when a user navigates between pages\n * if a persistNamespace was not provided\n */\n React.useEffect(() => {\n /**\n * If we're being passed initial state, we don't want to clear the state\n */\n if (options.initialState)\n return;\n\n /**\n * If we've been given a persist namespace, we don't want to clear our\n * selections while the namespace stays the same\n */\n if (persistNamespace && prevNamespace === persistNamespace)\n return;\n\n /**\n * Don't reinitialize if the ids of the new and old collection\n * are identical\n */\n const prevIds = prevCollection?.map(i => i[idField]).join();\n const ids = collection?.map(i => i[idField]).join();\n\n if (prevIds === ids)\n return;\n\n reset();\n }, [ prevCollection, prevNamespace, collection, options.initialState ]);\n\n React.useEffect(() => {\n if (!options.preselectedIds?.length)\n return;\n\n setSelected(options.preselectedIds);\n }, []);\n\n function reset(): void {\n items.current.clear();\n forceUpdate();\n }\n\n // When toggled on, all checkbox items will be enabled. Vice versa if toggled off\n function onToggleBulk(): void {\n const setValue = !isBulkChecked();\n\n collection.forEach(item => {\n if (setValue)\n items.current.set(item[idField].toString(), true);\n else\n items.current.delete(item[idField].toString());\n });\n\n forceUpdate();\n }\n\n // Toggles a single item\n function onToggleItem(id: string): void {\n const nextItemState = !items.current.get(id.toString());\n\n if (nextItemState)\n items.current.set(id.toString(), nextItemState);\n else\n items.current.delete(id.toString());\n \n forceUpdate();\n }\n\n // Returns the state of the item passed in\n function isChecked(item: string | number | HashObject<string>): boolean {\n if (typeof item === 'number')\n item = item.toString();\n else if (typeof item !== 'string')\n item = item[idField].toString();\n\n return items.current.get(item);\n }\n\n function getSelected(): string[] {\n return Array.from(items.current.keys());\n }\n\n function deselectAll(): void {\n if (!collection?.length) return;\n\n collection.forEach(item => {\n items.current.delete(item[idField].toString());\n });\n forceUpdate();\n }\n\n // Returns true if at least 1 item is checked\n function hasSomeSelections(): boolean {\n if (!collection?.length)\n return false;\n\n return !!collection.find(item => isChecked(item));\n }\n\n function isBulkChecked(): boolean {\n if (!collection?.length)\n return false;\n\n return collection.every(isChecked);\n }\n\n function setSelected(ids: string[]): void {\n ids.forEach(id => {\n items.current.set(id, true);\n });\n forceUpdate();\n }\n\n function getSelectedCount(): number {\n return items.current.size;\n }\n\n function getMap(): Map<string, boolean> {\n return items.current;\n }\n\n return {\n onToggleBulk,\n onToggleItem,\n getSelected,\n isChecked,\n bulkChecked: isBulkChecked(),\n deselectAll,\n hasSomeSelections,\n setSelected,\n getSelectedCount,\n reset,\n getMap\n };\n};","import React from 'react';\n\n// https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state\nexport function usePrevious<T>(value: T): T {\n const ref = React.useRef<T>();\n React.useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n}","import { ButtonProps } from 'react-bootstrap';\n\nimport { ClassroomGroupColour } from 'libs/shared/interfaces';\n\nexport function mapColourToBsVariant(groupColour: ClassroomGroupColour): ButtonProps['variant'] {\n switch (groupColour) {\n case ClassroomGroupColour.Pink:\n return 'pink';\n case ClassroomGroupColour.Orange:\n return 'orange';\n case ClassroomGroupColour.Green:\n return 'green';\n case ClassroomGroupColour.Blue:\n return 'blue';\n case ClassroomGroupColour.Purple:\n return 'purple';\n case ClassroomGroupColour.Indigo:\n return 'indigo';\n default:\n return 'pink';\n }\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'classrooms.classroomsEmptyState';\n\ninterface ClassroomsNoStudentsStateProps {\n canManageUsers: boolean;\n isRostering?: boolean;\n}\n\nexport function ClassroomsNoStudentsState(props: ClassroomsNoStudentsStateProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.STUDENTS} />\n\n <EmptyState.Heading><Text phrase='noStudentsHeading' /></EmptyState.Heading>\n <EmptyState.Info className={`w-33 ${!props.canManageUsers ? 'mb-0' : ''}`}>\n <Text phrase='noStudentsInfo' />\n </EmptyState.Info>\n\n {props.canManageUsers && !props.isRostering && (\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'noStudentsCta')}\n appLink={{\n application: AppChannels.USER_MANAGER,\n action: Actions.UserManager.STUDENTS\n }}\n />\n )}\n {!props.canManageUsers && !props.isRostering && (\n <EmptyState.Info><Text phrase='askAdmin' /></EmptyState.Info>\n )}\n {props.isRostering && (\n <a className='btn btn-link info-link font-semibold' href={''} target='_blank'>\n {LanguageService.getPhrase(namespace, 'rosteringCta')}\n </a>\n )}\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { Classroom } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ClassroomsNoStudentsState } from 'apps/classrooms/views/classrooms/empty-state/ClassroomsNoStudentsState';\n\nconst namespace = 'classrooms.manageClassroomStudentsEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst STUDENT_ENGAGEMENT_IDEAS_LINK = 'https://static.clickview.com.au/Primary/Documents/Student-engagement-ideas.pdf';\nconst ROSTERING_KB_ARTICLE_URL = '';\n\ninterface ManageClassroomStudentsEmptyStateProps {\n classroom: Classroom;\n classroomIdeasText: string;\n schoolHasNoStudents: boolean;\n canManageUsers: boolean;\n}\n\nexport function RosteredClassroomStudentsEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.STUDENTS} />\n\n <EmptyState.Heading><Text phrase='emptyStateHeading' /></EmptyState.Heading>\n\n <EmptyState.Info className='mb-2' ><Text phrase='emptyStateInfo' /></EmptyState.Info>\n\n <a className='btn btn-link info-link font-semibold' href={ROSTERING_KB_ARTICLE_URL} target='_blank'>\n {getPhrase('rosteringCta')}\n </a>\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n\nexport function ManageClassroomStudentsEmptyState(props: ManageClassroomStudentsEmptyStateProps): JSX.Element {\n if (props.schoolHasNoStudents)\n return <ClassroomsNoStudentsState canManageUsers={props.canManageUsers} />;\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.STUDENTS} />\n\n <EmptyState.Heading><Text phrase='emptyStateHeading' /></EmptyState.Heading>\n\n <EmptyState.Info><Text phrase='emptyStateInfo' /></EmptyState.Info>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'addStudents')}\n icon={cvSvgLibrary.Plus}\n appLink={{\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.ADD_STUDENTS_CHOICES,\n args: [props.classroom.id]\n }}\n />\n\n <a className='btn btn-link info-link font-semibold' href={STUDENT_ENGAGEMENT_IDEAS_LINK} target='_blank'>\n {props.classroomIdeasText}\n </a>\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n","import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { ClassroomGroup } from 'libs/shared/interfaces';\nimport { mapColourToBsVariant } from 'libs/shared/utils/GroupHelper';\n\ninterface ClassroomGroupProps {\n group: ClassroomGroup;\n}\n\nexport function ClassroomGroupPill(props: ClassroomGroupProps): JSX.Element {\n if (!props.group)\n return <></>;\n\n return (\n <div className={`classroom-pill text-white bg-${mapColourToBsVariant(props.group.metadata?.colour)}`}>\n {props.group.name}\n </div>\n );\n}\n\ninterface ClassroomGroupExpanderProps {\n count: number;\n onClick: () => void;\n}\n\nexport function ClassroomGroupExpander(props: ClassroomGroupExpanderProps): JSX.Element {\n if (!props.count)\n return <></>;\n\n return (\n <DivButton onClick={props.onClick} className={`classroom-pill bg-white border border-dark`}>\n +{props.count}\n </DivButton>\n );\n}","import React from 'react';\nimport { Dropdown } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useBulkCheckboxManager } from 'libs/shared/hooks/useBulkCheckboxManager';\nimport { PropsWithAnalyticsOptions, User } from 'libs/shared/interfaces';\nimport { Classroom, ClassroomGroup } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ClassroomGroupPill } from 'apps/classrooms/components/classroom-group-pill/ClassroomGroupPill';\n\nconst namespace = 'classrooms.classroomGroupDropdown';\n\nconst getNewGroupAppLink = (id: string, students: User[]) => ({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.NEW_GROUP,\n args: [id],\n params: {\n addStudents: students.map(s => s.id)\n }\n});\n\nconst getCheckedStudentsForGroup = (students: User[], group: ClassroomGroup) => {\n const studentsInGroup = students.filter(student => {\n return group.users.data.find(u => u.id.toString() === student.id.toString());\n });\n\n return studentsInGroup.length;\n};\n\ntype ClassroomGroupDropdownProps = PropsWithAnalyticsOptions<{\n id: string;\n classroom: Classroom;\n selectedStudents: User[];\n groups: ClassroomGroup[];\n onSelectGroup: (group: ClassroomGroup, toggleOn?: boolean) => void;\n preselections?: ClassroomGroup[];\n\n alignRight?: boolean;\n disabled?: boolean;\n disabledTooltips?: string;\n}>;\n\nClassroomGroupDropdown.defaultProps = {\n preselections: []\n};\n\nexport function ClassroomGroupDropdown(props: ClassroomGroupDropdownProps): JSX.Element {\n const { onToggleItem, isChecked } = useBulkCheckboxManager(props.groups, {\n preselectedIds: props.preselections.map(s => s.id)\n });\n\n function onChange(group: ClassroomGroup): void {\n const shouldAdd = !isChecked(group.id);\n props.onSelectGroup(group, shouldAdd);\n\n onToggleItem(group.id);\n }\n\n function onClickCreateNewGroup(): void {\n if (props.disabled)\n return;\n\n AnalyticsHelper.logUserAction({}, AnalyticsHelper.mergeOptions(props.analyticsOptions, {\n actionType: UserAction.Create,\n workflowPhase: WorkflowPhase.Start,\n entity: EntityType.ClassroomGroup\n }));\n }\n\n React.useEffect(() => {\n // On each passthrough, validate that the checkbox states are valid\n // This is needed because the group/student state is managed in 2 separate places on the same page\n props.groups.forEach(g => {\n const totalCheckedForGroup = getCheckedStudentsForGroup(props.selectedStudents, g);\n\n // Validate if unchecked checkbox should be checked\n if (!!totalCheckedForGroup && totalCheckedForGroup === props.selectedStudents.length && !isChecked(g.id)) {\n onToggleItem(g.id);\n return;\n }\n\n // Validate if checked checkbox should be unchecked\n if (!totalCheckedForGroup && isChecked(g.id)) {\n onToggleItem(g.id);\n return;\n }\n });\n });\n\n const buttonClasses = 'me-2 d-inline-block svg-container sm';\n\n const dropdownProps: HashObject = {\n align: props.alignRight ? 'end' : 'start'\n };\n\n /**\n * This prop is applied like this so that when `props.disabled` it false, the prop is omitted altogether.\n * This is because we want `react-bootstrap` to control the open state, and if we used the `show` prop\n * at all times we'd be preventing that.\n */\n if (props.disabled)\n dropdownProps.show = false;\n\n return (\n <Dropdown {...dropdownProps}>\n <Dropdown.Toggle\n as='div'\n id={props.id}\n className={`${props.disabled ? 'text-light' : 'cursor-pointer'} ${buttonClasses} no-caret`}\n >\n <SvgContainer\n svgName={cvSvgLibrary.Group}\n title={props.disabled ? props.disabledTooltips : LanguageService.getPhrase(namespace, 'addToGroupTooltip')}\n tooltipPlacement='top'\n tooltipSpanHack\n tooltipSpanHackClassName=''\n />\n </Dropdown.Toggle>\n <Dropdown.Menu>\n {!!props.groups?.length && (\n <div className='px-2 border-bottom mb-1'>\n <p className='mb-0'><Text namespace={namespace} phrase='addToGroup' /></p>\n <ul className='list-unstyled pe-3'>\n {props.groups.map(group => (\n <li key={group.id} className='d-flex align-items-center bg-white my-1'>\n <Checkbox\n id={`${props.id}:${group.id}`}\n checked={isChecked(group.id)}\n onChange={() => onChange(group)}\n indeterminate={!!getCheckedStudentsForGroup(props.selectedStudents, group)}\n />\n <ClassroomGroupPill group={group} />\n </li>\n ))}\n </ul>\n </div>\n )}\n <AppLink\n onClick={onClickCreateNewGroup}\n appLink={getNewGroupAppLink(props.classroom.id, props.selectedStudents)}\n className={props.disabled ? 'disabled' : 'text-nowrap d-flex align-items-center px-2'}\n >\n <SvgContainer svgName={cvSvgLibrary.Plus} />\n <Text namespace={namespace} phrase='createNew' />\n </AppLink>\n </Dropdown.Menu>\n </Dropdown>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"avatarContainer\":\"rfVnC\",\"name\":\"RYLWZ\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AssocDescriptor, EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ActionOptions, Actions as MoreActions } from 'libs/shared/components/actions/Actions';\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\nimport { ClassroomGroup, Config } from 'libs/shared/interfaces';\nimport { Classroom } from 'libs/shared/interfaces';\nimport { User } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ClassroomGroupDropdown } from 'apps/classrooms/components/classroom-group-dropdown/ClassroomGroupDropdown';\nimport { ClassroomGroupExpander, ClassroomGroupPill } from 'apps/classrooms/components/classroom-group-pill/ClassroomGroupPill';\n\nimport styles from './manage-classroom-student-item.scss';\n\ntype GroupVisibilityMapping = { [id: string]: boolean };\n\nconst namespace = 'classrooms.manageClassroomStudentItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst getEditStudentAppLink = (id: string) => ({\n application: AppChannels.USER_MANAGER,\n action: Actions.UserManager.EDIT_USER,\n args: [id],\n params: { userType: UserGroup.Learner }\n});\n\nconst getRemoveStudentsAppLink = (studentId: string, classroomId: string) => ({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.REMOVE_STUDENTS,\n args: [classroomId],\n params: {\n studentIds: [studentId]\n }\n});\n\ninterface ManageClassroomStudentItemProps {\n classroom: Classroom;\n student: User;\n classroomGroups: ClassroomGroup[];\n selectedGroups: ClassroomGroup[];\n config: Config;\n onToggleGroup: (student: User, group: ClassroomGroup, toggleOn: boolean) => void;\n onToggleCheckbox: () => void;\n checked: boolean;\n readOnly?: boolean;\n readOnlyTooltip?: string;\n}\n\nexport function ManageClassroomStudentItem(props: ManageClassroomStudentItemProps): JSX.Element {\n const [ isComputingTruncation, setIsComputingTruncation ] = React.useState(false);\n const [ hasExpandedGroups, setHasExpandedGroups ] = React.useState(false);\n\n // Maps a group to it's visibility state.\n const [ groupVisibilityMapping, setGroupVisibilityMapping ] = React.useState<GroupVisibilityMapping>({});\n\n const groupListRef = React.useRef<HTMLDivElement>(null);\n const expanderRef = React.useRef<HTMLDivElement>(null);\n\n const { hasPermissions } = usePermissions();\n\n // Every time the selected groups array changes, we want to re-compute which groups should be truncated\n React.useEffect(() => {\n renderAllGroups();\n\n if (hasExpandedGroups) // Don't re-compute if the user has expanded all groups\n return;\n\n setIsComputingTruncation(true);\n }, [props.selectedGroups.length]);\n\n function onResize(): void {\n renderAllGroups();\n setIsComputingTruncation(true);\n }\n\n const throttledResizeListener = FunctionHelper.throttle(onResize, 300);\n\n useResizeListener(() => {\n if (hasExpandedGroups) // Don't re-compute if the user has expanded all groups\n return;\n\n throttledResizeListener();\n });\n\n /**\n * This iterates through each group element, and detects if any of them don't\n * fit on the first row of items. The elements that don't will be hidden.\n */\n React.useEffect(() => {\n if (!groupListRef.current || !expanderRef.current || !isComputingTruncation)\n return;\n\n const firstGroupPill = groupListRef.current.firstElementChild as HTMLDivElement;\n if (!firstGroupPill) return;\n\n const topRowHeight = firstGroupPill.getBoundingClientRect().y;\n\n const nextGroupVisibilityMapping: { [id: string]: boolean } = {};\n\n /**\n * Here we're checking if the y-coordinate of any groups\n * don't match the y-coordinate of the first group (which should\n * always be on the first row). This way we know if they should be\n * hidden or not.\n */\n let lastVisibleId: string;\n for (const child of groupListRef.current.children) {\n if (child.id) {\n nextGroupVisibilityMapping[child.id] = child.getBoundingClientRect().y === topRowHeight;\n lastVisibleId = nextGroupVisibilityMapping[child.id] ? child.id : lastVisibleId;\n }\n }\n\n // If the expander button has also wrapped, we hide the last element that we were going to make visible.\n if (expanderRef.current.getBoundingClientRect().y !== topRowHeight)\n nextGroupVisibilityMapping[lastVisibleId] = false;\n\n setGroupVisibilityMapping(nextGroupVisibilityMapping);\n setIsComputingTruncation(false);\n }, [isComputingTruncation]);\n\n function onClickShowAllGroups(): void {\n setHasExpandedGroups(true);\n renderAllGroups();\n }\n\n // Updates the group visibility mapping to display all groups\n function renderAllGroups(): void {\n setGroupVisibilityMapping(props.selectedGroups.reduce((acc, group) => {\n acc[group.id] = true;\n return acc;\n }, {} as GroupVisibilityMapping));\n }\n\n // Returns the number of groups that are invisible\n function getInvisibleGroupCount(): number {\n return Object.keys(groupVisibilityMapping).reduce((count, groupId) => {\n if (!groupVisibilityMapping[groupId])\n count++;\n \n return count;\n }, 0);\n }\n\n function getActions(): ActionOptions[] {\n const actions: ActionOptions[] = [];\n\n if (hasPermissions(PermissionName.ManageUsers))\n actions.push({\n label: getPhrase('editStudent'),\n appLink: getEditStudentAppLink(props.student.id),\n disabled: props.readOnly,\n className: props.readOnly ? 'disabled' : '',\n tooltip: props.readOnly ? props.readOnlyTooltip : '',\n onClick: () => {\n AnalyticsHelper.logUserAction({ id: props.student.id }, {\n actionType: UserAction.Edit,\n entity: EntityType.User,\n workflowPhase: WorkflowPhase.Start,\n location: LocationContext.ManageClassroomStudentListItem\n });\n }\n });\n\n actions.push({\n label: getPhrase('removeStudent'),\n appLink: getRemoveStudentsAppLink(props.student.id, props.classroom.id),\n disabled: props.readOnly,\n className: props.readOnly ? 'disabled' : 'text-danger',\n tooltip: props.readOnly ? props.readOnlyTooltip : '',\n onClick: () => {\n AnalyticsHelper.logUserAction({ id: props.classroom.id, userId: props.student.id }, {\n actionType: UserAction.Dissociate,\n entity: EntityType.Classroom,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Start,\n location: LocationContext.ManageClassroomStudentListItem\n });\n }\n });\n\n return actions;\n }\n\n return (\n <div className='d-flex align-items-center py-1 px-4'>\n <Checkbox\n id={props.student.id}\n checked={props.checked}\n onChange={props.onToggleCheckbox}\n className='me-2'\n disabled={props.readOnly}\n />\n\n <div className={`${styles.avatarContainer} me-2`}>\n <Avatar\n imageCdnUrl={props.config.imageCdnUrl}\n initials={UserHelper.getInitials(props.student.name, props.student.surname)}\n imageUrl={props.student.avatar?.url}\n />\n </div>\n\n <p className={`me-2 ${styles.name} text-truncate mb-0 text-nowrap`}>{props.student.name} {props.student.surname}</p>\n\n <div\n // When we are computing the truncation, we want all group elements to be rendered but invisible.\n className={`${isComputingTruncation ? 'invisible' : ''} me-auto d-flex flex-wrap mt-n1`}\n ref={groupListRef}\n >\n {props.selectedGroups.map(group => {\n if (!groupVisibilityMapping[group.id]) // Don't render any groups that are marked as hidden\n return <React.Fragment key={group.id}></React.Fragment>;\n\n return (\n <div key={group.id} className='me-1 mt-1' id={group.id}>\n <ClassroomGroupPill group={group} />\n </div>\n );\n })}\n <div ref={expanderRef} className='me-1 mt-1'>\n <ClassroomGroupExpander count={getInvisibleGroupCount()} onClick={onClickShowAllGroups} />\n </div>\n </div>\n\n <ClassroomGroupDropdown\n id={`add-group-${props.student.id}`}\n classroom={props.classroom}\n groups={props.classroomGroups}\n selectedStudents={[props.student]}\n preselections={props.selectedGroups}\n onSelectGroup={(group, toggleOn) => props.onToggleGroup(props.student, group, toggleOn)}\n analyticsOptions={{ location: LocationContext.ManageClassroomStudentListItem }}\n alignRight\n disabled={props.readOnly}\n disabledTooltips={props.readOnlyTooltip}\n />\n\n <MoreActions\n actions={getActions()}\n actionsDropdownClassName='btn'\n />\n </div>\n );\n}","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AssocDescriptor, EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\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 { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useBulkCheckboxManager } from 'libs/shared/hooks/useBulkCheckboxManager';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { Classroom, Config } from 'libs/shared/interfaces';\nimport { ClassroomGroup, User, UserCollection } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ClassroomGroupDropdown } from 'apps/classrooms/components/classroom-group-dropdown/ClassroomGroupDropdown';\nimport { ManageClassroomStudentItem } from 'apps/classrooms/components/manage-classroom-student-item/ManageClassroomStudentItem';\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\n\nimport { ManageClassroomStudentsEmptyState } from './empty-state/ManageClassroomStudentsEmptyState';\n\nconst namespace = 'classrooms.manageClassroomStudents';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ManageClassroomStudentsProps {\n classroom: Classroom;\n students: UserCollection;\n schoolHasNoStudents: boolean;\n canManageUsers: boolean;\n groups: ClassroomGroup[];\n config: Config;\n onToggleGroup: (student: User, group: ClassroomGroup, toggleOn: boolean) => void;\n readOnly?: boolean;\n}\n\nexport function ManageClassroomStudents(props: ManageClassroomStudentsProps): JSX.Element {\n const { classroom, students, groups } = props;\n\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const CheckboxHelper = useBulkCheckboxManager(students.data);\n const selectionCount = CheckboxHelper.getSelected().length;\n\n const bulkPreselections = groups.filter(group => {\n if (!group.users?.data?.length)\n return false;\n\n let allStudentsFound = true;\n let index = 0;\n\n const studentIds = CheckboxHelper.getSelected();\n\n if (!studentIds.length)\n return;\n\n do {\n const id = studentIds[index];\n if (!group.users.data.find((stu: any) => stu.id.toString() === id.toString()))\n allStudentsFound = false;\n\n index++;\n } while (index < studentIds.length);\n\n return allStudentsFound;\n });\n\n function onClickAddStudents(): void {\n AnalyticsHelper.logUserAction({ id: classroom.id }, {\n entity: EntityType.Classroom,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Start,\n actionType: UserAction.Associate,\n location: LocationContext.ManageClassroomStudents\n });\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.ADD_STUDENTS_CHOICES,\n args: [classroom.id]\n });\n }\n\n function onClickBulkRemoveStudents(): void {\n if (!selectionCount || props.readOnly)\n return;\n\n const studentIds = CheckboxHelper.getSelected();\n\n AnalyticsHelper.logUserAction({\n id: classroom.id,\n studentCount: studentIds.length\n }, {\n entity: EntityType.Classroom,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Start,\n actionType: UserAction.Dissociate,\n location: LocationContext.ManageClassroomStudents\n });\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.REMOVE_STUDENTS,\n args: [classroom.id],\n params: {\n studentIds\n }\n });\n }\n\n function onSelectGroup(group: ClassroomGroup, shouldAdd: boolean): void {\n const selectedStudentIds = CheckboxHelper.getSelected();\n\n const request = shouldAdd ? ClassroomRequests.addStudentsToGroup : ClassroomRequests.removeStudentsFromGroup;\n\n Flight.fetch(\n dispatch,\n request(selectedStudentIds, group.id, classroom.id, () => {\n AnalyticsHelper.logUserAction({\n id: group.id,\n studentCount: selectedStudentIds.length\n }, {\n actionType: UserAction.Associate,\n entity: EntityType.ClassroomGroup,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Complete,\n location: LocationContext.ManageClassroomStudents\n });\n\n alerts.success(getPhrase('addSuccess', { groupName: group.name, escapeText: true }));\n }, () => {\n alerts.error(getPhrase('addError', { groupName: group.name, escapeText: true }));\n })\n );\n }\n\n const edgeToEdge = useMediaQuery(MediaQueryStrings.XLDown);\n\n if (!students.data?.length) {\n return (\n <ManageClassroomStudentsEmptyState\n classroom={props.classroom}\n classroomIdeasText={getPhrase('classroomIdeasText')}\n schoolHasNoStudents={props.schoolHasNoStudents}\n canManageUsers={props.canManageUsers}\n />\n );\n }\n\n return (\n <>\n <div className={`d-flex align-items-center py-2 ${edgeToEdge ? 'ps-2' : 'ps-4'}`}>\n <Checkbox\n id='manage-classroom-students-bulk'\n onChange={CheckboxHelper.onToggleBulk}\n checked={CheckboxHelper.bulkChecked}\n className='me-2'\n indeterminate={CheckboxHelper.hasSomeSelections()}\n disabled={props.readOnly}\n />\n\n <ClassroomGroupDropdown\n id='bulk-add-group'\n classroom={classroom}\n selectedStudents={CheckboxHelper.getSelected().map(id => {\n return props.students.data.find(s => s.id.toString() === id.toString());\n })}\n groups={groups}\n onSelectGroup={onSelectGroup}\n disabled={!selectionCount || props.readOnly}\n preselections={bulkPreselections}\n analyticsOptions={{ location: LocationContext.ManageClassroomStudents }}\n disabledTooltips={props.readOnly && LanguageService.getPhrase(namespace, 'disabledByRostering')}\n />\n <DivButton\n className={`me-auto ${!selectionCount || props.readOnly ? 'text-light cursor-default' : ''}`}\n onClick={onClickBulkRemoveStudents}\n >\n <Tooltip\n spanHack\n title={props.readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : ''}\n >\n <SvgContainer\n svgName={cvSvgLibrary.Delete}\n title={LanguageService.getPhrase(namespace, 'delete')}\n tooltipPlacement='top'\n tooltipSpanHack\n />\n </Tooltip>\n </DivButton>\n <Tooltip\n spanHack\n title={props.readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : ''}\n >\n <IconButton\n onClick={onClickAddStudents}\n svgName={cvSvgLibrary.Plus}\n className='btn btn-outline-dark'\n disabled={props.readOnly}\n >\n <Text namespace={namespace} phrase='addStudent' />\n </IconButton>\n </Tooltip>\n </div>\n\n <ul className='striped-list list-unstyled'>\n {students.data.map(student => (\n <li key={student.id}>\n <ManageClassroomStudentItem\n classroom={classroom}\n student={student}\n classroomGroups={props.groups}\n config={props.config}\n selectedGroups={props.groups.filter(g => g.users.data.find(u => u.id === student.id))}\n checked={CheckboxHelper.isChecked(student.id)}\n onToggleCheckbox={() => CheckboxHelper.onToggleItem(student.id)}\n onToggleGroup={props.onToggleGroup}\n readOnly={props.readOnly}\n readOnlyTooltip={props.readOnly ? getPhrase('disabledByRostering') : ''}\n />\n </li>\n ))}\n </ul>\n </>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"heading\":\"YrP_G\",\"avatar\":\"droqZ\",\"checkbox\":\"pJf6R\",\"actionIcon\":\"MSvzY\",\"addStudents\":\"j62jt\",\"studentName\":\"gorcb\",\"group\":\"IFmvc\",\"sm\":\"pOcvk\",\"lg\":\"SdQ90\",\"moreActions\":\"S7p4K\"};","import React from 'react';\n\nimport { PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PartialPillTabSelector } from 'libs/shared/components/pill-tab-selector/partial-loading/PartialPillTabSelector';\n\nimport styles from './partial-manage-classroom-students.scss';\n\nexport const PartialManageClassroomStudents = React.memo(function(): JSX.Element {\n return (\n <div className='px-3'>\n {/* Heading */}\n <div className={`mb-1 partial-loading-background ${styles.heading}`} />\n\n {/* Breadcrumbs */}\n <div className='pb-3'>\n <PartialBreadcrumbs numItems={2} />\n </div>\n\n {/* Pill tab selector */}\n <div className='pb-2'>\n <PartialPillTabSelector />\n </div>\n\n <div className='d-flex align-items-center py-2'>\n {/* Checkbox */}\n <div className={`mx-4 partial-loading-background ${styles.checkbox}`} />\n {/* Group selector */}\n <div className={`me-2 partial-loading-background ${styles.actionIcon}`} />\n {/* Delete action */}\n <div className={`me-auto partial-loading-background ${styles.actionIcon}`} />\n\n {/* Add new students button */}\n <div className={`partial-loading-background ${styles.addStudents}`} />\n </div>\n\n {/* Students list */}\n <ul className='striped-list list-unstyled'>\n {Array(20).fill(null).map((student, i) => (\n <li key={i}>\n <div className='d-flex align-items-center py-1 px-4'>\n {/* Checkbox */}\n <div className={`me-2 partial-loading-background ${styles.checkbox}`} />\n\n {/* Avatar */}\n <div className={`me-2 partial-loading-background ${styles.avatar}`} />\n\n {/* Student name */}\n <div className='w-25'>\n <div className={`partial-loading-background ${styles.studentName}`} />\n </div>\n\n {/* Groups list. Randomly renders either 1 or 2 groups. Group widths are randomly generated */}\n <div className='me-auto d-flex'>\n {Math.random() > 0.5\n ? (\n <>\n <div className={`partial-loading-background rounded-pill me-1 ${styles.group} ${styles.lg}`} />\n <div className={`partial-loading-background rounded-pill ${styles.group} ${styles.sm}`} />\n </>\n ) : <div className={`partial-loading-background rounded-pill ${styles.group} ${styles.sm}`} />\n }\n </div>\n\n {/* Group selector */}\n <div className={`me-2 partial-loading-background ${styles.actionIcon}`} />\n {/* More actions */}\n <div className={`partial-loading-background ${styles.moreActions}`} />\n </div>\n </li>\n ))}\n </ul>\n </div>\n );\n});","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AssocDescriptor, EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { RosteringAlert } from 'libs/shared/components/rostering/rostering-alert/RosteringAlert';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Classroom, ClassroomGroup, ClassroomGroupCollection, Config, CurrentUser, User, UserCollection } from 'libs/shared/interfaces';\n\nimport { ManageClassroomStudentsEmptyState, RosteredClassroomStudentsEmptyState } from 'apps/classrooms/components/manage-classroom-students/empty-state/ManageClassroomStudentsEmptyState';\nimport { ManageClassroomStudents } from 'apps/classrooms/components/manage-classroom-students/ManageClassroomStudents';\nimport { PartialManageClassroomStudents } from 'apps/classrooms/components/manage-classroom-students/partial-loading/PartialManageClassroomStudents';\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { useHandleClassroomErrors } from 'apps/classrooms/hooks/useHandleClassroomErrors';\nimport { ClassroomLayout } from 'apps/classrooms/layouts/ClassroomLayout';\nimport { UserManagerRequests } from 'apps/user-manager/flight-requests/UserManagerRequests';\n\nconst namespace = 'classrooms.classroomStudents';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst baseAnalyticsOptions = {\n entity: EntityType.ClassroomGroup,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Complete,\n location: LocationContext.ManageClassroomStudentListItem\n};\n\ninterface ClassroomStudentsViewProps {\n id: string;\n}\n\nexport function ClassroomStudentsView(props: ClassroomStudentsViewProps): JSX.Element {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const classroom = Flight.useBasicFetch<Classroom>(currentUser.data &&\n ClassroomRequests.getClassroom(props.id, currentUser.data.id));\n const students = Flight.useBasicFetch<UserCollection>(ClassroomRequests.getClassroomStudents(props.id));\n const allStudents = Flight.useBasicFetch<UserCollection>(currentUser.data &&\n UserManagerRequests.getUsers(currentUser.data.customerId, UserGroup.Learner));\n const groups = Flight.useBasicFetch<ClassroomGroupCollection>(ClassroomRequests.getClassroomGroups(props.id));\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const isRostered = classroom.data?._integrations?.rostered;\n\n const dispatch = useDispatch();\n const { hasPermissions } = usePermissions();\n\n useSetPageMetadata({\n title: getPhrase('pageTitle', { classroomName: classroom.data?.name })\n });\n useHandleClassroomErrors(classroom);\n\n function onToggleGroup(student: User, group: ClassroomGroup, toggleOn: boolean): void {\n const analyticsData = {\n id: group.id,\n studentCount: 1\n };\n\n const request = toggleOn\n ? ClassroomRequests.addStudentsToGroup([student.id], group.id, props.id, () => {\n AnalyticsHelper.logUserAction(analyticsData, {\n ...baseAnalyticsOptions,\n actionType: UserAction.Associate\n });\n })\n : ClassroomRequests.removeStudentsFromGroup([student.id], group.id, props.id, () => {\n AnalyticsHelper.logUserAction(analyticsData, {\n ...baseAnalyticsOptions,\n actionType: UserAction.Dissociate\n });\n });\n\n Flight.fetch(dispatch, request);\n }\n\n function onTogglePin(shouldPin: boolean, onSuccess: () => void, onError: () => void): void {\n if (isRostered)\n return;\n const request = shouldPin\n ? ClassroomRequests.pinClassroom\n : ClassroomRequests.unpinClassroom;\n\n Flight.fetch(dispatch, request(classroom.data, onSuccess, onError));\n }\n\n if (\n !classroom.data\n || !students.data?.data\n || !groups.data?.data\n || !config.data\n || !allStudents.data\n )\n return <PartialManageClassroomStudents />;\n\n return (\n <ClassroomLayout\n classroom={classroom.data}\n currentUser={currentUser.data}\n onTogglePin={onTogglePin}\n activeTab='students'\n isRostered={isRostered}\n >\n {(() => {\n if (isRostered)\n return (\n <>\n <RosteringAlert type='classroom'/>\n {!students.data?.data?.length ? (\n <RosteredClassroomStudentsEmptyState />\n ) : (\n <ManageClassroomStudents\n classroom={classroom.data}\n students={students.data}\n groups={groups.data.data}\n onToggleGroup={onToggleGroup}\n config={config.data}\n schoolHasNoStudents={!allStudents.data?.data?.length}\n canManageUsers={hasPermissions(PermissionName.ManageUsers)}\n readOnly\n />\n )}\n </>\n );\n\n if (students.data?.data?.length) {\n return (\n <ManageClassroomStudents\n classroom={classroom.data}\n students={students.data}\n groups={groups.data.data}\n onToggleGroup={onToggleGroup}\n config={config.data}\n schoolHasNoStudents={!allStudents.data?.data?.length}\n canManageUsers={hasPermissions(PermissionName.ManageUsers)}\n />\n );\n }\n\n return (\n <ManageClassroomStudentsEmptyState\n classroom={classroom.data}\n classroomIdeasText={getPhrase('classroomIdeasText')}\n schoolHasNoStudents={!allStudents.data?.data?.length}\n canManageUsers={hasPermissions(PermissionName.ManageUsers)}\n />\n );\n })()}\n </ClassroomLayout>\n );\n}\n"],"names":["getPhrase","RosteringAlert","props","text","type","className","useBulkCheckboxManager","collection","options","idField","persistNamespace","initial","initialState","Map","items","forceUpdate","prevCollection","prevNamespace","reset","current","clear","isChecked","item","toString","get","isBulkChecked","length","every","setSelected","ids","forEach","id","set","map","i","join","preselectedIds","onToggleBulk","setValue","onToggleItem","nextItemState","getSelected","Array","from","keys","bulkChecked","deselectAll","hasSomeSelections","find","getSelectedCount","size","getMap","usePrevious","value","ref","mapColourToBsVariant","groupColour","namespace","ClassroomsNoStudentsState","EmptyState","src","ImageUrls","Text","phrase","canManageUsers","isRostering","LanguageService","appLink","application","action","href","target","STUDENT_ENGAGEMENT_IDEAS_LINK","ROSTERING_KB_ARTICLE_URL","RosteredClassroomStudentsEmptyState","ManageClassroomStudentsEmptyState","schoolHasNoStudents","icon","args","classroom","classroomIdeasText","ClassroomGroupPill","group","metadata","colour","name","ClassroomGroupExpander","count","DivButton","onClick","getNewGroupAppLink","students","params","addStudents","s","getCheckedStudentsForGroup","filter","student","users","data","u","ClassroomGroupDropdown","groups","preselections","g","totalCheckedForGroup","selectedStudents","dropdownProps","align","alignRight","disabled","show","Dropdown","as","SvgContainer","svgName","title","disabledTooltips","tooltipPlacement","tooltipSpanHack","tooltipSpanHackClassName","key","Checkbox","checked","onChange","shouldAdd","onSelectGroup","indeterminate","AppLink","AnalyticsHelper","analyticsOptions","actionType","workflowPhase","entity","defaultProps","getEditStudentAppLink","userType","UserGroup","getRemoveStudentsAppLink","studentId","classroomId","studentIds","ManageClassroomStudentItem","isComputingTruncation","setIsComputingTruncation","hasExpandedGroups","setHasExpandedGroups","groupVisibilityMapping","setGroupVisibilityMapping","groupListRef","expanderRef","hasPermissions","usePermissions","renderAllGroups","selectedGroups","actions","throttledResizeListener","FunctionHelper","reduce","acc","firstGroupPill","firstElementChild","lastVisibleId","topRowHeight","getBoundingClientRect","y","nextGroupVisibilityMapping","children","child","onToggleCheckbox","readOnly","Avatar","imageCdnUrl","config","initials","UserHelper","surname","imageUrl","avatar","url","Object","groupId","classroomGroups","toggleOn","onToggleGroup","location","readOnlyTooltip","PermissionName","push","label","tooltip","userId","descriptor","actionsDropdownClassName","ManageClassroomStudents","dispatch","alerts","CheckboxHelper","selectionCount","bulkPreselections","allStudentsFound","index","stu","edgeToEdge","selectedStudentIds","request","ClassroomRequests","studentCount","success","groupName","escapeText","error","Tooltip","spanHack","IconButton","PartialManageClassroomStudents","numItems","PartialPillTabSelector","fill","Math","random","baseAnalyticsOptions","ClassroomStudentsView","currentUser","UserRequests","allStudents","UserManagerRequests","customerId","ConfigRequests","isRostered","_integrations","rostered","analyticsData","useSetPageMetadata","classroomName","useHandleClassroomErrors","ClassroomLayout","onTogglePin","shouldPin","onSuccess","onError","activeTab"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1863],{82872:(e,t,n)=>{n.d(t,{t:()=>S});var r=n(32735),a=n(91967),o=n(11607),i=n(83914),l=n(4594),c=n(76881),s=n(36511),u=n(45778),m=n(35223),d=n(64818),f=n(80247),p=n(23481);const v={avatar:"srrS3"};function g(e){var t=e.imageUrl,n=e.initials,a={};return t&&(a.backgroundImage="url('".concat(t,"')")),r.createElement("div",{className:v.avatar,style:a},t?r.createElement(r.Fragment,null," "):n)}var y=n(76177);const h={svgContainer:"laVU4",selection:"vEOCt",expander:"d1NHd",iconContainer:"rFH4W",icon:"BarYz",bubble:"HF0E8",spinnerContainer:"iKeXW",remove:"pyzCM",removeBubble:"mgt6Y"};var b=p.T.encloseNamespace("shared.inputSelection");function E(e){var t,n="".concat(h.svgContainer," ").concat(h.icon);return e.typeId===l.E.Classroom?n+=" text-teal":n+=" text-".concat((0,s.I)(null===(t=e.metadata)||void 0===t?void 0:t.colour)),n}function C(e){var t,n=function(e){var t;switch(e.typeId){case l.E.Classroom:return"text-teal-hover";case l.E.ClassroomGroup:return"text-".concat((0,s.I)(null===(t=e.metadata)||void 0===t?void 0:t.colour),"-hover")}}(e.selection),a=e.selection.typeId===l.E.Classroom;if(!e.canExpand){if(!e.selection.typeId||e.selection.typeId===l.E.User){var c=e.selection;return r.createElement("div",{className:h.svgContainer},r.createElement(g,{imageUrl:null===(t=c.avatar)||void 0===t?void 0:t.url,initials:d.l.getInitials(e.selection.name,e.selection.surname)}))}return r.createElement(y.u,{title:b(a?"emptyClassroom":"emptyGroup")},r.createElement("div",{className:"align-items-center border border-white bg-white ".concat(h.iconContainer)},r.createElement(i.x,{className:E(e.selection),svgName:a?m.vn.Classrooms:m.vn.Group})))}return e.hasExpanded?r.createElement("div",{className:"d-flex align-items-center text-white ".concat(h.spinnerContainer," ").concat(h.svgContainer)},r.createElement(f.Z,{as:"div",size:"sm",animation:"border",role:"status"})):r.createElement(r.Fragment,null,r.createElement(o.L,{className:"align-items-center cursor-pointer text-white border border-white rounded-circle ".concat(h.expander," ").concat(n),onClick:e.onClickExpand},r.createElement(i.x,{svgName:m.vn.Plus,className:"d-flex align-items-center ".concat(h.svgContainer)})),r.createElement("div",{className:"align-items-center border border-white bg-white ".concat(h.iconContainer)},r.createElement(i.x,{className:E(e.selection),svgName:a?m.vn.Classrooms:m.vn.Group})))}function x(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],c=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return k(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?k(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function N(e){var t;if(!e.typeId)return"dark-blue";switch(e.typeId){case l.E.User:return"number"==typeof e.userType?2===e.userType?"dark-blue":"indigo":e.userType===c.Y.Learner?"dark-blue":"indigo";case l.E.Classroom:return"teal";case l.E.ClassroomGroup:return(0,s.I)(null===(t=e.metadata)||void 0===t?void 0:t.colour)}}function S(e){var t,n,a,c=u.G.isType(e.selection,l.E.Classroom),s=u.G.isType(e.selection,l.E.ClassroomGroup),d=e.onClickExpand&&(c||s),f=!!(null===(t=e.selection.users)||void 0===t?void 0:t.count),p=!!(null===(a=null===(n=e.selection.users)||void 0===n?void 0:n.data)||void 0===a?void 0:a.length),v=x(r.useState(!1),2),g=v[0],y=v[1],b=x(r.useState(d&&f),2),E=b[0],C=b[1];if(r.useEffect((function(){C(d&&f)}),[d,f]),p){var k=e.selection,S=N(e.selection);return r.createElement("div",{className:"d-flex align-items-center flex-wrap me-1 mt-1 pb-1 ps-1 pe-4 position-relative border-".concat(S," text-").concat(S," ").concat(h.bubble)},k.users.data.map((function(t){return r.createElement(w,{key:"".concat(t.id,":").concat(e.selection.id),selection:t,colourVariant:S,hasStudentExperience:e.hasStudentExperience})})),r.createElement(o.L,{className:"cursor-pointer position-absolute text-".concat(S," ").concat(h.removeBubble),onClick:function(){return e.onClickRemove(e.selection)}},r.createElement(i.x,{svgName:m.vn.Close,className:"d-flex align-items-center ".concat(h.svgContainer)})))}return r.createElement(w,{selection:e.selection,canExpand:E,hasExpanded:g,onClickExpand:function(){y(!0),e.onClickExpand(e.selection.id)},onClickRemove:e.onClickRemove,colourVariant:N(e.selection),hasStudentExperience:e.hasStudentExperience})}function w(e){var t=e.colourVariant||N(e.selection),n=e.selection.name;return e.selection.typeId===l.E.User&&(n=e.hasStudentExperience?d.l.getDisplayName(e.selection):d.l.getFullName(e.selection)),r.createElement("div",{className:"".concat(h.selection," bg-").concat(t," rounded-pill text-").concat(t," d-flex align-items-center me-1 mt-1 overflow-hidden")},!e.hideExpander&&r.createElement(C,{canExpand:e.canExpand,hasExpanded:e.hasExpanded,onClickExpand:e.onClickExpand,selection:e.selection}),r.createElement("span",{className:"mx-1 text-white text-truncate"},n),a.q.isFunction(e.onClickRemove)&&r.createElement(o.L,{className:"d-flex align-items-center cursor-pointer align-self-stretch text-white ".concat(h.remove),onClick:function(){return e.onClickRemove(e.selection)}},r.createElement(i.x,{svgName:m.vn.Close,className:"d-flex align-items-center ".concat(h.svgContainer)})))}},36511:(e,t,n)=>{n.d(t,{I:()=>a});var r=n(96787);function a(e){switch(e){case r.R.Pink:return"pink";case r.R.Orange:return"orange";case r.R.Green:return"green";case r.R.Blue:return"blue";case r.R.Purple:return"purple";case r.R.Indigo:return"indigo";default:return"pink"}}},45398:(e,t,n)=>{n.r(t),n.d(t,{BulkUserActionsAddToClassroomConfirmationView:()=>N});var r=n(32735),a=n(70680),o=n(81886),i=n(20354),l=n(2948),c=n(82872),s=n(149),u=n(83345),m=n(36033),d=n(38143),f=n(3044);function p(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var v="userManager.bulkUserActionsAddToClassroomConfirmation";function g(e){var t,n,a=(t=(0,l.D)(d.g.BULK_USER_ACTIONS),n=1,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],c=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw a}}return l}}(t,n)||function(e,t){if(e){if("string"==typeof e)return p(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?p(e,t):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0];return s.b.useSetWizardConfirmationCallback(e.onClickConfirm),r.createElement(u.D.Provider,{value:v},r.createElement(m.s,null,r.createElement("p",{className:"fw-semibold"},r.createElement(u.x,{namespace:v,phrase:"heading",options:{smartCount:e.userCount}})),a.classroom&&r.createElement("div",{className:"rounded rounded-3 pb-2"},r.createElement("div",{className:"d-flex"},r.createElement(c.t,{selection:a.classroom})))),r.createElement(f.Q,{users:e.users,imageCdnUrl:e.imageCdnUrl,hasMore:e.hasMoreUsers,isFetching:e.isFetchingUsers,fetchNext:e.fetchNextUserPage,userType:e.userType,userCount:e.userCount}))}var y=n(58703),h=n(39151),b=n(31949),E=n(29613),C=n(88323),x=n(18087);function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function N(e){var t,n,c,u=(0,C.h)(e.userType),m=u.users,f=u.count,p=u.isFetching,v=u.hasMore,N=u.fetchNext,S=(n=(0,l.D)(d.g.BULK_USER_ACTIONS),c=1,function(e){if(Array.isArray(e))return e}(n)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],c=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw a}}return l}}(n,c)||function(e,t){if(e){if("string"==typeof e)return k(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?k(e,t):void 0}}(n,c)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0],w=i.a.useBasicFetch(b.N.currentUser()),I=i.a.useBasicFetch(h.L.config()),A=(0,a.I0)(),U=(0,x.Y)(e.userType),T=s.b.useCreateJobErrorAlert();function j(t){o.Q.C$.trigger(Object.assign(Object.assign({},U.bulkActionsStatus.polling),{params:{userType:e.userType,jobId:t.id}}))}return r.createElement(y.d,{appLinks:U,userType:e.userType,users:m,currentStep:"confirmation",userCount:f,loaded:!0},r.createElement(g,{users:m,imageCdnUrl:null===(t=I.data)||void 0===t?void 0:t.imageCdnUrl,hasMoreUsers:v,isFetchingUsers:p,fetchNextUserPage:N,userType:e.userType,onClickConfirm:function(){if(S){var t=s.b.getCreateJobRequestData(S,w.data.customerId,e.userType);i.a.fetch(A,E.q.createJob(t,j,T))}},userCount:f}))}}}]);
2
- //# sourceMappingURL=1863-5502813c32-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/1863-5502813c32-lite.chunk.js","mappings":"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","sources":["file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/apps/share/components/white-avatar/white-avatar.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/apps/share/components/white-avatar/WhiteAvatar.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/apps/share/components/tokenized-typeahead/input-selection.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/apps/share/components/tokenized-typeahead/InputSelectionExpander.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/apps/share/components/tokenized-typeahead/InputSelection.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/utils/GroupHelper.ts","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/apps/user-manager/components/bulk-actions-wizard/confirmation/add-to-classroom/BulkUserActionsAddToClassroomConfirmation.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/projects/lite/src/apps/user-manager/views/wizard/confirmation/add-to-classroom/BulkUserActionsAddToClassroomConfirmationView.tsx"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"avatar\":\"srrS3\"};","import React from 'react';\n\nimport styles from './white-avatar.scss';\n\ninterface WhiteAvatarProps {\n initials: string;\n imageUrl?: string;\n}\n\nexport function WhiteAvatar(props: WhiteAvatarProps): React.ReactElement {\n const { imageUrl, initials } = props;\n\n const style: React.CSSProperties = {};\n\n if (imageUrl)\n style.backgroundImage = `url('${imageUrl}')`;\n\n return (\n <div className={styles.avatar} style={style}>\n {imageUrl ? <>&nbsp;</> : initials}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"svgContainer\":\"laVU4\",\"selection\":\"vEOCt\",\"expander\":\"d1NHd\",\"iconContainer\":\"rFH4W\",\"icon\":\"BarYz\",\"bubble\":\"HF0E8\",\"spinnerContainer\":\"iKeXW\",\"remove\":\"pyzCM\",\"removeBubble\":\"mgt6Y\"};","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { WhiteAvatar } from 'libs/shared/apps/share/components/white-avatar/WhiteAvatar';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BaseObject, Classroom, ClassroomGroup, User } from 'libs/shared/interfaces';\nimport { mapColourToBsVariant } from 'libs/shared/utils/GroupHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './input-selection.scss';\n\nconst getPhrase = LanguageService.encloseNamespace('shared.inputSelection');\n\nfunction mapEntityTypeToForegroundColor(entity: BaseObject): string {\n switch (entity.typeId) {\n case MasterType.Classroom: {\n return 'text-teal-hover';\n }\n\n case MasterType.ClassroomGroup: {\n return `text-${mapColourToBsVariant((entity as ClassroomGroup).metadata?.colour)}-hover`;\n }\n }\n}\n\nfunction getColouredIconClass(selection: Classroom | ClassroomGroup): string {\n let iconClass = `${styles.svgContainer} ${styles.icon}`;\n\n if (selection.typeId === MasterType.Classroom)\n iconClass += ' text-teal';\n else\n iconClass += ` text-${mapColourToBsVariant((selection as ClassroomGroup).metadata?.colour)}`;\n\n return iconClass;\n}\n\ninterface InputSelectionExpanderProps {\n canExpand: boolean;\n hasExpanded: boolean;\n selection: BaseObject;\n onClickExpand?: () => void;\n}\n\nexport function InputSelectionExpander(props: InputSelectionExpanderProps): JSX.Element {\n const colourClass = mapEntityTypeToForegroundColor(props.selection);\n\n const isClassroom = props.selection.typeId === MasterType.Classroom;\n\n if (!props.canExpand) {\n if (!props.selection.typeId || props.selection.typeId === MasterType.User) {\n const user = props.selection as User;\n\n return (\n <div className={styles.svgContainer}>\n <WhiteAvatar\n imageUrl={user.avatar?.url}\n initials={UserHelper.getInitials(props.selection.name, (props.selection as User).surname)}\n />\n </div>\n );\n }\n\n return (\n <Tooltip title={getPhrase(isClassroom ? 'emptyClassroom' : 'emptyGroup')}>\n <div className={`align-items-center border border-white bg-white ${styles.iconContainer}`}>\n <SvgContainer\n className={getColouredIconClass(props.selection)}\n svgName={isClassroom ? cvSvgLibrary.Classrooms : cvSvgLibrary.Group}\n />\n </div>\n </Tooltip>\n );\n }\n\n if (!props.hasExpanded) {\n return (\n <>\n {/* Visible on hover */}\n <DivButton\n className={`align-items-center cursor-pointer text-white border border-white rounded-circle ${styles.expander} ${colourClass}`}\n onClick={props.onClickExpand}\n >\n <SvgContainer svgName={cvSvgLibrary.Plus} className={`d-flex align-items-center ${styles.svgContainer}`} />\n </DivButton>\n\n {/* Visible when not hovering */}\n <div className={`align-items-center border border-white bg-white ${styles.iconContainer}`}>\n <SvgContainer\n className={getColouredIconClass(props.selection)}\n svgName={isClassroom ? cvSvgLibrary.Classrooms : cvSvgLibrary.Group}\n />\n </div>\n </>\n );\n }\n\n return (\n <div className={`d-flex align-items-center text-white ${styles.spinnerContainer} ${styles.svgContainer}`}>\n <Spinner as='div' size='sm' animation='border' role='status' />\n </div>\n );\n}","import React from 'react';\nimport { ButtonProps } from 'react-bootstrap';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { Classroom, ClassroomGroup, User } from 'libs/shared/interfaces';\nimport { mapColourToBsVariant } from 'libs/shared/utils/GroupHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { InputSelectionExpander } from './InputSelectionExpander';\n\nimport styles from './input-selection.scss';\n\n/**\n * TODO: This entire file needs to be refactored to work\n * better with non standard entities. ATM it's also being used\n * in the invite a colleague UI for trials. - Sha\n */\ninterface OtherEntity {\n id: never;\n typeId: never;\n name: string;\n}\n\ntype Entity = Classroom | ClassroomGroup | User | OtherEntity;\n\nfunction mapEntityTypeToBsVariant(entity: Entity): ButtonProps['variant'] {\n if (!entity.typeId)\n return 'dark-blue';\n\n switch (entity.typeId) {\n case MasterType.User: {\n // TODO: Delete this once https://clickview.atlassian.net/browse/INBOX-2151 is addressed\n if (typeof(entity as User).userType === 'number')\n return ((entity as User).userType as any) === 2 ? 'dark-blue' : 'indigo';\n\n if ((entity as User).userType === UserGroup.Learner)\n return 'dark-blue';\n\n return 'indigo';\n }\n\n case MasterType.Classroom: {\n return 'teal';\n }\n\n case MasterType.ClassroomGroup: {\n return mapColourToBsVariant((entity as ClassroomGroup).metadata?.colour);\n }\n }\n}\n\ninterface InputSelectionProps {\n selection: Entity;\n onClickRemove?: (selection: Entity) => void;\n onClickExpand?: (id: string) => void;\n hasStudentExperience?: boolean;\n}\n\nexport function InputSelection(props: InputSelectionProps): JSX.Element {\n const isClassroom = MasterTypeHelper.isType(props.selection, MasterType.Classroom);\n const isClassroomGroup = MasterTypeHelper.isType(props.selection, MasterType.ClassroomGroup);\n const isExpandable = props.onClickExpand && (isClassroom || isClassroomGroup);\n\n /**\n * We only know that there are no members if props.selections.users.count exists\n * and is 0 as it is set to 0 in <MainShare /> after fetching the users.\n */\n const hasMembers = !!(props.selection as Classroom | ClassroomGroup).users?.count;\n const hasFetchedMembers = !!(props.selection as Classroom | ClassroomGroup).users?.data?.length;\n\n const [ hasExpanded, setHasExpanded ] = React.useState(false);\n const [ canExpand, setCanExpand ] = React.useState(isExpandable && hasMembers);\n\n React.useEffect(() => {\n setCanExpand(isExpandable && hasMembers);\n }, [ isExpandable, hasMembers ]);\n\n function onClickExpand(): void {\n setHasExpanded(true);\n props.onClickExpand(props.selection.id);\n }\n\n if (hasFetchedMembers) {\n const selection: Classroom | ClassroomGroup = props.selection as Classroom | ClassroomGroup;\n\n const colourVariant = mapEntityTypeToBsVariant(props.selection);\n\n return (\n <div className={`d-flex align-items-center flex-wrap me-1 mt-1 pb-1 ps-1 pe-4 position-relative border-${colourVariant} text-${colourVariant} ${styles.bubble}`}>\n {selection.users.data.map(user => (\n <InputToken\n key={`${user.id}:${props.selection.id}`}\n selection={user}\n colourVariant={colourVariant}\n hasStudentExperience={props.hasStudentExperience}\n />\n ))}\n\n <DivButton\n className={`cursor-pointer position-absolute text-${colourVariant} ${styles.removeBubble}`}\n onClick={() => props.onClickRemove(props.selection)}\n >\n <SvgContainer svgName={cvSvgLibrary.Close} className={`d-flex align-items-center ${styles.svgContainer}`} />\n </DivButton>\n </div>\n );\n }\n\n return (\n <InputToken\n selection={props.selection}\n canExpand={canExpand}\n hasExpanded={hasExpanded}\n onClickExpand={onClickExpand}\n onClickRemove={props.onClickRemove}\n colourVariant={mapEntityTypeToBsVariant(props.selection)}\n hasStudentExperience={props.hasStudentExperience}\n />\n );\n}\n\ninterface InputTokenProps<T extends HashObject> {\n selection: T | Entity;\n colourVariant: string;\n canExpand?: boolean;\n hasExpanded?: boolean;\n onClickExpand?: () => void;\n onClickRemove?: (selection: Entity) => void;\n hasStudentExperience?: boolean;\n hideExpander?: boolean;\n}\n\nexport function InputToken<T extends HashObject = Entity>(props: InputTokenProps<T>): JSX.Element {\n const colourVariant = props.colourVariant || mapEntityTypeToBsVariant(props.selection);\n\n let selectionName = props.selection.name;\n\n if (props.selection.typeId === MasterType.User) {\n selectionName = props.hasStudentExperience\n ? UserHelper.getDisplayName(props.selection as User)\n : UserHelper.getFullName(props.selection as User);\n }\n\n return (\n <div className={`${styles.selection} bg-${colourVariant} rounded-pill text-${colourVariant} d-flex align-items-center me-1 mt-1 overflow-hidden`}>\n {!props.hideExpander && (\n <InputSelectionExpander\n canExpand={props.canExpand}\n hasExpanded={props.hasExpanded}\n onClickExpand={props.onClickExpand}\n selection={props.selection}\n />\n )}\n\n <span className='mx-1 text-white text-truncate'>{selectionName}</span>\n\n {FunctionHelper.isFunction(props.onClickRemove) && (\n <DivButton\n className={`d-flex align-items-center cursor-pointer align-self-stretch text-white ${styles.remove}`}\n onClick={() => props.onClickRemove(props.selection)}\n >\n <SvgContainer svgName={cvSvgLibrary.Close} className={`d-flex align-items-center ${styles.svgContainer}`} />\n </DivButton>\n )}\n </div>\n );\n}","import { ButtonProps } from 'react-bootstrap';\n\nimport { ClassroomGroupColour } from 'libs/shared/interfaces';\n\nexport function mapColourToBsVariant(groupColour: ClassroomGroupColour): ButtonProps['variant'] {\n switch (groupColour) {\n case ClassroomGroupColour.Pink:\n return 'pink';\n case ClassroomGroupColour.Orange:\n return 'orange';\n case ClassroomGroupColour.Green:\n return 'green';\n case ClassroomGroupColour.Blue:\n return 'blue';\n case ClassroomGroupColour.Purple:\n return 'purple';\n case ClassroomGroupColour.Indigo:\n return 'indigo';\n default:\n return 'pink';\n }\n}\n","import React from 'react';\n\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { UserGroup } from 'libs/analytics/interfaces';\n\nimport { InputSelection } from 'libs/shared/apps/share/components/tokenized-typeahead/InputSelection';\nimport { BulkUserActionsAddToClassroomViewModel } from 'libs/shared/apps/user-manager/interfaces/viewmodels/BulkUserActionsViewModel';\nimport { BulkUserActionsHelper } from 'libs/shared/apps/user-manager/utils/BulkUserActionsHelper';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { WizardConfirmationHeader } from 'libs/shared/components/wizard/confirmation-header/WizardConfirmationHeader';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { User } from 'libs/shared/interfaces';\n\nimport { BulkUserActionsConfirmationUserList } from '../user-list/BulkUserActionsConfirmationUserList';\n\nconst namespace = 'userManager.bulkUserActionsAddToClassroomConfirmation';\n\ninterface BulkUserActionsAddToClassroomConfirmationProps {\n users: User[];\n imageCdnUrl: string;\n userType: UserGroup;\n hasMoreUsers: boolean;\n isFetchingUsers: boolean;\n userCount: number;\n fetchNextUserPage: () => void;\n onClickConfirm: () => void;\n}\n\nexport function BulkUserActionsAddToClassroomConfirmation(\n props: BulkUserActionsAddToClassroomConfirmationProps\n): JSX.Element {\n const [viewModel] = useViewModel<BulkUserActionsAddToClassroomViewModel>(\n SharedViewModelKeys.BULK_USER_ACTIONS\n );\n\n BulkUserActionsHelper.useSetWizardConfirmationCallback(props.onClickConfirm);\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <WizardConfirmationHeader>\n <p className='fw-semibold'>\n <Text\n namespace={namespace}\n phrase='heading'\n options={{\n smartCount: props.userCount\n }}\n />\n </p>\n\n {/*\n * The viewModel gets cleared out when exiting the wizard, however this component requires a selection.\n * So we don't render our input selection if classroom is not set\n */}\n {viewModel.classroom &&\n <div className={`rounded rounded-3 pb-2`}>\n <div className='d-flex'>\n <InputSelection selection={viewModel.classroom} />\n </div>\n </div>\n }\n </WizardConfirmationHeader>\n\n <BulkUserActionsConfirmationUserList\n users={props.users}\n imageCdnUrl={props.imageCdnUrl}\n hasMore={props.hasMoreUsers}\n isFetching={props.isFetchingUsers}\n fetchNext={props.fetchNextUserPage}\n userType={props.userType}\n userCount={props.userCount}\n />\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { BulkUserActionsAddToClassroomConfirmation } from 'libs/shared/apps/user-manager/components/bulk-actions-wizard/confirmation/add-to-classroom/BulkUserActionsAddToClassroomConfirmation';\nimport { BulkUserActionsWizardLayout } from 'libs/shared/apps/user-manager/components/bulk-actions-wizard/layout/BulkUserActionsWizardLayout';\nimport { UserWizardParams } from 'libs/shared/apps/user-manager/interfaces/query-params/UserWizardParams';\nimport { BulkUserActionsViewModel } from 'libs/shared/apps/user-manager/interfaces/viewmodels/BulkUserActionsViewModel';\nimport { BulkUserActionsHelper } from 'libs/shared/apps/user-manager/utils/BulkUserActionsHelper';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { BatchJob, Config, CurrentUser } from 'libs/shared/interfaces';\n\nimport { JobRequests } from 'shared/flight-requests/JobRequests';\n\nimport { useBulkActionsUsersWrapper } from 'apps/user-manager/hooks/useBulkActionsUsersWrapper';\nimport { getUserManagerAppLinks } from 'apps/user-manager/utils/LiteUserManagerAppLinks';\n\nexport function BulkUserActionsAddToClassroomConfirmationView(props: UserWizardParams): JSX.Element {\n const {\n users,\n count,\n isFetching,\n hasMore,\n fetchNext\n } = useBulkActionsUsersWrapper(props.userType);\n\n const [viewModel] = useViewModel<BulkUserActionsViewModel>(\n SharedViewModelKeys.BULK_USER_ACTIONS\n );\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const dispatch = useDispatch();\n\n const appLinks = getUserManagerAppLinks(props.userType);\n\n const onCreateJobError = BulkUserActionsHelper.useCreateJobErrorAlert();\n function startBulkAction(): void {\n if (!viewModel)\n return;\n\n const data = BulkUserActionsHelper.getCreateJobRequestData(\n viewModel,\n currentUser.data.customerId,\n props.userType\n );\n\n Flight.fetch(dispatch, JobRequests.createJob(data, onCreateJob, onCreateJobError));\n }\n\n function onCreateJob(job: BatchJob): void {\n Core.AppLinkHelper.trigger({\n ...appLinks.bulkActionsStatus.polling,\n params: {\n userType: props.userType,\n jobId: job.id\n }\n });\n }\n\n return (\n <BulkUserActionsWizardLayout\n appLinks={appLinks}\n userType={props.userType}\n users={users}\n currentStep='confirmation'\n userCount={count}\n loaded\n >\n <BulkUserActionsAddToClassroomConfirmation\n users={users}\n imageCdnUrl={config.data?.imageCdnUrl}\n hasMoreUsers={hasMore}\n isFetchingUsers={isFetching}\n fetchNextUserPage={fetchNext}\n userType={props.userType}\n onClickConfirm={startBulkAction}\n userCount={count}\n />\n </BulkUserActionsWizardLayout>\n );\n}"],"names":["WhiteAvatar","props","imageUrl","initials","style","backgroundImage","className","getPhrase","LanguageService","getColouredIconClass","selection","iconClass","typeId","MasterType","metadata","colour","InputSelectionExpander","colourClass","entity","mapEntityTypeToForegroundColor","isClassroom","canExpand","user","avatar","url","UserHelper","name","surname","Tooltip","title","SvgContainer","svgName","hasExpanded","Spinner","as","size","animation","role","DivButton","onClick","onClickExpand","mapEntityTypeToBsVariant","userType","UserGroup","InputSelection","MasterTypeHelper","isClassroomGroup","isExpandable","hasMembers","users","count","hasFetchedMembers","data","length","setHasExpanded","setCanExpand","colourVariant","map","InputToken","key","id","hasStudentExperience","onClickRemove","selectionName","hideExpander","FunctionHelper","mapColourToBsVariant","groupColour","namespace","BulkUserActionsAddToClassroomConfirmation","viewModel","SharedViewModelKeys","BulkUserActionsHelper","onClickConfirm","value","WizardConfirmationHeader","Text","phrase","options","smartCount","userCount","classroom","BulkUserActionsConfirmationUserList","imageCdnUrl","hasMore","hasMoreUsers","isFetching","isFetchingUsers","fetchNext","fetchNextUserPage","BulkUserActionsAddToClassroomConfirmationView","useBulkActionsUsersWrapper","currentUser","UserRequests","config","ConfigRequests","dispatch","appLinks","onCreateJobError","onCreateJob","job","bulkActionsStatus","polling","params","jobId","BulkUserActionsWizardLayout","currentStep","loaded","customerId","JobRequests"],"sourceRoot":""}
@@ -1,3 +0,0 @@
1
- /*! For license information please see 6741-b54fd85e06-lite.chunk.js.LICENSE.txt */
2
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[6741],{3278:(e,t,n)=>{n.d(t,{z:()=>p});var r=n(32735),a=n(39202),i=n(23481),o=n(65858),c=n(38502),l=n(83345),s=n(96787);const u={pillTab:"bMJM0"};var d="discover.header";function p(e){var t,n,p,f,h,m;if(!e.type)return r.createElement(r.Fragment,null);if(e.type===s.Yv.Learner||e.hasStudentExperience)return r.createElement("div",{className:"py-3"},r.createElement("h1",{className:"h2 mb-0"},r.createElement(l.x,{namespace:d,phrase:"heading"})));var v=[{name:i.T.getPhrase(d,"forYou"),appLink:null===(t=e.appLinks)||void 0===t?void 0:t.forYou,active:"forYou"===e.active,analyticsData:{name:i.T.getPhrase(d,"forYou"),url:a.C$.getHref(null===(n=e.appLinks)||void 0===n?void 0:n.forYou)},analyticsOptions:{actionType:o.Vw.Click,entity:o.py.Url,location:o.LZ.MagicTabs}},{name:i.T.getPhrase(d,"whatsNew"),appLink:null===(p=e.appLinks)||void 0===p?void 0:p.whatsNew,active:"whatsNew"===e.active,analyticsData:{name:i.T.getPhrase(d,"whatsNew"),url:a.C$.getHref(null===(f=e.appLinks)||void 0===f?void 0:f.whatsNew)},analyticsOptions:{actionType:o.Vw.Click,entity:o.py.Url,location:o.LZ.MagicTabs}}];return e.showCalendar&&v.push({name:i.T.getPhrase(d,"calendar"),appLink:null===(h=e.appLinks)||void 0===h?void 0:h.calendar,active:"calendar"===e.active,analyticsData:{name:i.T.getPhrase(d,"calendar"),url:a.C$.getHref(null===(m=e.appLinks)||void 0===m?void 0:m.calendar)},analyticsOptions:{actionType:o.Vw.Click,entity:o.py.Url,location:o.LZ.MagicTabs}}),r.createElement("div",{className:"py-3 text-center"},r.createElement(c.r,{tabs:v,className:u.pillTab}))}},38502:(e,t,n)=>{n.d(t,{r:()=>s});var r=n(32735),a=n(49985),i=n(36848),o=n(18559),c=n(11607),l=n(87432);function s(e){var t;return r.createElement("nav",{className:null!==(t=e.className)&&void 0!==t?t:""},r.createElement("ul",{className:"list-unstyled d-inline-block m-0 ".concat(l.Z.pillTabSelector)},e.tabs.map((function(e){return r.createElement("li",{className:"p-0 ".concat(e.active?"btn btn-dark":"btn btn-outline-dark"),key:e.name},e.appLink?r.createElement(i.F,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,className:"cursor-pointer d-flex justify-content-center text-decoration-none text-reset px-2 ".concat(l.Z.pillItem)},e.name,"number"==typeof e.count&&r.createElement("div",{className:"ps-2"},r.createElement(o.C,{type:o.g.Count,data:e.count}))):r.createElement(c.L,{className:"".concat(l.Z.pillItem," d-flex justify-content-center p-2"),onClick:function(){return function(e){!e.active&&e.onSelect&&(e.onSelect(),e.analyticsData&&e.analyticsOptions&&a.k.logUserAction(e.analyticsData,e.analyticsOptions))}(e)}},e.name,"number"==typeof e.count&&r.createElement("div",{className:"ps-2"},r.createElement(o.C,{type:o.g.Count,data:e.count}))))}))))}},16741:(e,t,n)=>{n.r(t),n.d(t,{CuratedDiscoverView:()=>K});var r=n(32735),a=n(23481),i=n(57900),o=n(20354),c=n(2948),l=n(49985),s=n(65858),u=n(75896),d=n(3278),p=n(61032),f=n(16714),h=n(96787),m=n(21366),v=n(23232),y=n(83345),g=n(76177),b=n(35223),w="subjects.discoverDashboardEmptyState",L=a.T.encloseNamespace(w);function E(e){var t,n,i=(null===(t=e.dashboard)||void 0===t?void 0:t.status)===h.GL.Archived;return r.createElement(v.u,null,r.createElement(v.u.Image,{src:e.imageUrl,altText:L("info")}),r.createElement(v.u.Heading,null,r.createElement(y.x,{namespace:w,phrase:"heading"})),r.createElement(v.u.Info,null,r.createElement(y.x,{namespace:w,phrase:"info"})),r.createElement(g.u,{title:i?a.T.getPhrase(w,"archivedCtaTooltip"):"",spanHack:!0},r.createElement(v.u.Cta,{text:a.T.getPhrase(w,"add"),appLink:null===(n=e.addWidgetApplink)||void 0===n?void 0:n.call(e),className:"btn btn-dark",icon:b.vn.Plus,disabled:i})))}function T(e){var t,n,a=u.m.sortBy(null===(t=e.dashboard)||void 0===t?void 0:t.widgets,"index");function i(t,n,r){var a=m.S.getWidgetParams(n,r,m.S.getDashboardTargetType(e.dashboard));return e.getWidgetContentRequest(t,a,r,e.presentation)}var o=e.isReadonly&&!(null==a?void 0:a.length);return r.createElement(r.Fragment,null,r.createElement(d.z,{type:null===(n=e.dashboard)||void 0===n?void 0:n.userType,appLinks:e.headerAppLinks,hasStudentExperience:e.hasPermissions(f.C.StudentExperience),showCalendar:e.showCalendar,active:"forYou"}),a.map((function(t,n){return r.createElement(p.L,{key:t.id,id:t.id,imageCdnUrl:e.imageCdnUrl,getContentRequest:i,audiences:e.audiences,name:t.name,description:t.description,templateId:t.templateId,metadata:t.metadata,presentation:e.presentation,setFavourite:e.setFavourite,canFavourite:e.canFavourite,resourceThumbnailFallbackImageUrl:e.resourceThumbnailFallbackImageUrl,preferences:t.preferences,appLinks:e.widgetAppLinks,isScrollToTargetWidget:(null==e?void 0:e.scrollToWidgetId)===t.id,widgetTypeId:t.widgetId,hasPermissions:e.hasPermissions,hasLocalPermissions:e.hasLocalPermissions,onSubmitFeedback:e.onSubmitFeedback,updatePreferences:e.updatePreferences,yearGroups:e.yearGroups,lazyLoad:e.lazyLoad,dashboardTarget:h.ku.Discover,widgetIndex:n,jobTitle:e.jobTitle,isPreviewing:e.isReadonly,imageUrls:e.imageUrls,settings:e.settings})})),o&&r.createElement(E,{dashboard:e.dashboard,isReadonly:e.isReadonly,imageUrl:e.emptyImageUrl,addWidgetApplink:e.widgetAppLinks.widgetWizard}))}var S=n(38143),A=n(72639),C=n(39151),k=n(1666),O=n(80889),N=n(98064),D=n(61699),I=n(31949),x=n(22902),P=n(79612),F=n(37802),U=n(69454),_=n(76753),j=n(73417),R=n(99742),B=n(52333),H=n(27638),M=n(85369),W=n(23737),G=n(33192),V=n(48688),Y=n(27051);function Z(e){return Z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Z(e)}function z(){z=function(){return t};var e,t={},n=Object.prototype,r=n.hasOwnProperty,a=Object.defineProperty||function(e,t,n){e[t]=n.value},i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",c=i.asyncIterator||"@@asyncIterator",l=i.toStringTag||"@@toStringTag";function s(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{s({},"")}catch(e){s=function(e,t,n){return e[t]=n}}function u(e,t,n,r){var i=t&&t.prototype instanceof y?t:y,o=Object.create(i.prototype),c=new D(r||[]);return a(o,"_invoke",{value:C(e,n,c)}),o}function d(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}t.wrap=u;var p="suspendedStart",f="suspendedYield",h="executing",m="completed",v={};function y(){}function g(){}function b(){}var w={};s(w,o,(function(){return this}));var L=Object.getPrototypeOf,E=L&&L(L(I([])));E&&E!==n&&r.call(E,o)&&(w=E);var T=b.prototype=y.prototype=Object.create(w);function S(e){["next","throw","return"].forEach((function(t){s(e,t,(function(e){return this._invoke(t,e)}))}))}function A(e,t){function n(a,i,o,c){var l=d(e[a],e,i);if("throw"!==l.type){var s=l.arg,u=s.value;return u&&"object"==Z(u)&&r.call(u,"__await")?t.resolve(u.__await).then((function(e){n("next",e,o,c)}),(function(e){n("throw",e,o,c)})):t.resolve(u).then((function(e){s.value=e,o(s)}),(function(e){return n("throw",e,o,c)}))}c(l.arg)}var i;a(this,"_invoke",{value:function(e,r){function a(){return new t((function(t,a){n(e,r,t,a)}))}return i=i?i.then(a,a):a()}})}function C(t,n,r){var a=p;return function(i,o){if(a===h)throw Error("Generator is already running");if(a===m){if("throw"===i)throw o;return{value:e,done:!0}}for(r.method=i,r.arg=o;;){var c=r.delegate;if(c){var l=k(c,r);if(l){if(l===v)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(a===p)throw a=m,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);a=h;var s=d(t,n,r);if("normal"===s.type){if(a=r.done?m:f,s.arg===v)continue;return{value:s.arg,done:r.done}}"throw"===s.type&&(a=m,r.method="throw",r.arg=s.arg)}}}function k(t,n){var r=n.method,a=t.iterator[r];if(a===e)return n.delegate=null,"throw"===r&&t.iterator.return&&(n.method="return",n.arg=e,k(t,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),v;var i=d(a,t.iterator,n.arg);if("throw"===i.type)return n.method="throw",n.arg=i.arg,n.delegate=null,v;var o=i.arg;return o?o.done?(n[t.resultName]=o.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,v):o:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,v)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function N(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function D(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function I(t){if(t||""===t){var n=t[o];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var a=-1,i=function n(){for(;++a<t.length;)if(r.call(t,a))return n.value=t[a],n.done=!1,n;return n.value=e,n.done=!0,n};return i.next=i}}throw new TypeError(Z(t)+" is not iterable")}return g.prototype=b,a(T,"constructor",{value:b,configurable:!0}),a(b,"constructor",{value:g,configurable:!0}),g.displayName=s(b,l,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===g||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,b):(e.__proto__=b,s(e,l,"GeneratorFunction")),e.prototype=Object.create(T),e},t.awrap=function(e){return{__await:e}},S(A.prototype),s(A.prototype,c,(function(){return this})),t.AsyncIterator=A,t.async=function(e,n,r,a,i){void 0===i&&(i=Promise);var o=new A(u(e,n,r,a),i);return t.isGeneratorFunction(n)?o:o.next().then((function(e){return e.done?e.value:o.next()}))},S(T),s(T,l,"Generator"),s(T,o,(function(){return this})),s(T,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),n=[];for(var r in t)n.push(r);return n.reverse(),function e(){for(;n.length;){var r=n.pop();if(r in t)return e.value=r,e.done=!1,e}return e.done=!0,e}},t.values=I,D.prototype={constructor:D,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(N),!t)for(var n in this)"t"===n.charAt(0)&&r.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var n=this;function a(r,a){return c.type="throw",c.arg=t,n.next=r,a&&(n.method="next",n.arg=e),!!a}for(var i=this.tryEntries.length-1;i>=0;--i){var o=this.tryEntries[i],c=o.completion;if("root"===o.tryLoc)return a("end");if(o.tryLoc<=this.prev){var l=r.call(o,"catchLoc"),s=r.call(o,"finallyLoc");if(l&&s){if(this.prev<o.catchLoc)return a(o.catchLoc,!0);if(this.prev<o.finallyLoc)return a(o.finallyLoc)}else if(l){if(this.prev<o.catchLoc)return a(o.catchLoc,!0)}else{if(!s)throw Error("try statement without catch or finally");if(this.prev<o.finallyLoc)return a(o.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev<a.finallyLoc){var i=a;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var o=i?i.completion:{};return o.type=e,o.arg=t,i?(this.method="next",this.next=i.finallyLoc,v):this.complete(o)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),v},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),N(n),v}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;N(n)}return a}}throw Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:I(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=e),v}},t}function $(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var q=function(e,t,n,r){return new(n||(n=Promise))((function(a,i){function o(e){try{l(r.next(e))}catch(e){i(e)}}function c(e){try{l(r.throw(e))}catch(e){i(e)}}function l(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(o,c)}l((r=r.apply(e,t||[])).next())}))},J=a.T.encloseNamespace("dashboard.dashboard");function K(e){var t,n,a,u,d,p,m,v=o.a.useBasicFetch(C.L.config()),y=o.a.useBasicFetch(I.N.currentUser()),g=o.a.useBasicFetch((null===(t=y.data)||void 0===t?void 0:t.isAuthenticated)&&I.N.user(y.data.id)),b=(0,x.T)(),w=b.hasLocalPermissions,L=b.hasPermissions,E=o.a.useBasicFetch(w(f.E.ManageDiscoverPreferences)&&y.data&&k.h.customer(y.data.customerId)),Z=o.a.useBasicFetch((null===(n=y.data)||void 0===n?void 0:n.isAuthenticated)&&k.h.yearGroups(y.data.customerId)),K=o.a.useBasicFetch(N.D.libraries()),Q=(0,W.y)({targetType:h.ku.Discover,queryParams:e.queryParams,presentationSlug:e.presentationSlug}),X=Q.dashboard,ee=Q.presentation,te=Q.audiences,ne=o.a.useGetFetchAsync(),re=(0,F.r)(null),ae=(0,H.u)(s.LZ.Dashboard),ie=ae.setFavourite,oe=ae.canFavourite,ce=(p=(0,c.D)(S.g.AUDIENCE_FILTER,void 0,{storage:i.Z1.SessionStorage}),m=1,function(e){if(Array.isArray(e))return e}(p)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,o,c=[],l=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){s=!0,a=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw a}}return c}}(p,m)||function(e,t){if(e){if("string"==typeof e)return $(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?$(e,t):void 0}}(p,m)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0],le=(0,Y.E)(U.T.getAudienceParams(ce)),se=function(e){return+A.p[null==e?void 0:e.learningLevel]===A.p.Level_1?"VariantOne":"VariantTwo"}(ee);(0,P.M)(_.CG.getDiscoverMetadata({content:ee,phraseContext:{phraseHandler:J,titlePhrase:"pageTitle".concat(se),descriptionPhrase:"pageDescription".concat(se)},canonicalLink:G.f.getCanonicalLink(),allowIndexing:G.f.allowIndexing(),hrefLang:G.f.getStaticRouteHrefLang(null==ee?void 0:ee.learningLevel,le.discover)}));var ue=(0,M.N)().showCalendar;return r.createElement("div",{className:"bg-white px-4"},r.createElement(j.T,null),r.createElement(T,{currentUser:y.data,dashboard:X.data,widgetAppLinks:le,headerAppLinks:(0,Y.u)(),presentation:ee,imageCdnUrl:v.data.imageCdnUrl,resourceThumbnailFallbackImageUrl:R.W.Fallbacks.RESOURCE_THUMBNAIL,getWidgetContentRequest:function(){for(var e=V.g.hasTwig(K.data),t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return O._.discoverWidgetContent.apply(O._,[e].concat(n))},setFavourite:ie,audiences:te.data,canFavourite:oe,updatePreferences:function(e,t,n,r){return q(this,void 0,void 0,z().mark((function t(){var a,i;return z().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(a=r.filter((function(e){return!e.hidden&&n.find((function(t){return t.id===e.id})).hidden})),i=r.filter((function(e){return!!e.hidden&&!n.find((function(t){return t.id===e.id})).hidden})),!(null==a?void 0:a.length)){t.next=5;break}return t.next=5,ne(D.o.followSubjects(a.map((function(e){return e.id}))));case 5:if(!(null==i?void 0:i.length)){t.next=8;break}return t.next=8,ne(D.o.unfollowSubjects(i.map((function(e){return e.id}))));case 8:return t.abrupt("return",ne(O._.updateWidgetPreferences(e,r.map((function(e){return{id:e.id,index:e.index}})),y.data)));case 9:case"end":return t.stop()}}),t)})))},hasPermissions:L,hasLocalPermissions:w,onSubmitFeedback:L(f.C.CanSubmitFeedback)&&function(e){var t=ne(B.n.sendDiscoverFooterFeedback(e,y.data,E.data,ee,X.data,L(f.C.StudentExperience)));return l.k.logUserAction({feedbackType:e.type,content:e.content,presentationId:ee.id,dashboardId:X.data.id},{actionType:s.Vw.Submit,location:s.LZ.DiscoverFooter,entity:s.py.Feedback,workflowPhase:s.eu.Complete}),t},yearGroups:Z.data,lazyLoad:!G.f.isBot(),showCalendar:ue,jobTitle:null===(d=null===(u=null===(a=g.data)||void 0===a?void 0:a.userProfile)||void 0===u?void 0:u.metadata)||void 0===d?void 0:d.jobTitle,imageUrls:{onboardingAdminBackgroundFull:R.W.OnboardingV2.Widget.ADMIN_BACKGROUND_FULL,onboardingAdminBackground:R.W.OnboardingV2.Widget.ADMIN_BACKGROUND,onboardingTeacherBackground:R.W.OnboardingV2.Widget.TEACHER_BACKGROUND},settings:re}))}},27051:(e,t,n)=>{n.d(t,{E:()=>f,u:()=>h});var r=n(75896),a=n(28400),i=n(17475),o=n(183),c=n(14070),l=n(97291),s=n(22490),u=n(67963),d=n(82431),p="classification-latest-releases";function f(e){return{classification:function(t){return{application:l.O.SUBJECT,action:c.e.Subjects.CLASSIFICATION,args:[null==t?void 0:t.id,a.m.slugify(null==t?void 0:t.name)],params:e||{}}},classificationTopics:function(){return{application:l.O.SUBJECT,action:c.e.Subjects.CLASSIFICATION_TOPICS,params:e||{}}},videoType:function(e,t){return s.W.getAppLink(e,Object.assign(Object.assign({},t),{context:o.Q.Widget}))},series:d.j.getSeriesAppLink,subText:function(e){return d.j.getSeriesAppLink(e.series)},playlist:function(e){return{application:l.O.PLAYLISTS,action:c.e.Playlists.PLAYLIST,args:[e.id,a.m.slugify(e.name)]}},latestReleases:function(){return{application:l.O.CONTENT_UPDATES,action:c.e.ContentUpdates.CONTENT_UPDATES}},allTopics:function(){return{application:l.O.SUBJECT,action:c.e.Subjects.CLASSIFICATION_ALL}},classificationLatestReleases:function(e){return e.id===p?{application:l.O.CONTENT_UPDATES,action:c.e.ContentUpdates.CONTENT_UPDATES}:{application:l.O.CONTENT_UPDATES,action:c.e.ContentUpdates.CLASSIFICATION_UPDATE,args:[e.id,a.m.slugify(e.name)]}},widgetVideoList:function(e,t){return{application:l.O.DASHBOARD,action:c.e.Dashboard.DASHBOARD,args:[e,a.m.slugify(t)]}},watchHistory:function(){return{application:l.O.WATCH_HISTORY,action:c.e.WatchHistory.HOME}},rating:function(e,t){return{application:l.O.SEARCH,action:c.e.Search.HOME,params:{moviesAndTv:!0,rating:i.S.getFrontendParamValue([r.m.first(t),e])}}},company:function(e){return{application:l.O.MOVIES_AND_TV,action:c.e.MoviesAndTv.COMPANY_DASHBOARD,args:[e.id,a.m.slugify(e.name)]}},discover:function(){return{application:l.O.DASHBOARD,action:c.e.Dashboard.HOME}},calendar:function(){return{application:l.O.CALENDAR,action:c.e.Calendar.CALENDAR}},calendarMonth:function(e,t){var n={application:l.O.CALENDAR,action:c.e.Calendar.CALENDAR_MONTH,args:[e.toLowerCase()]};return t&&(n.params={year:t}),n},onboardingStep:function(e){return(0,u.u)()[e]},onboardingAppLinks:function(){return(0,u.u)()}}}function h(){return{forYou:{application:l.O.DASHBOARD,action:c.e.Dashboard.HOME},whatsNew:{application:l.O.CONTENT_UPDATES,action:c.e.ContentUpdates.CONTENT_UPDATES},calendar:{application:l.O.CALENDAR,action:c.e.Calendar.CALENDAR}}}},73417:(e,t,n)=>{n.d(t,{T:()=>u});var r=n(32735),a=n(11607),i=n(83914),o=n(83345),c=n(87348),l=n(35223),s="shared.upgradeFeedbackBanner";function u(){var e=(0,c.Q)(),t=e.showFeedbackBanner,n=e.dismissFeedbackBanner;return t?r.createElement("div",{className:"alert bg-light-blue p-2 rounded text-info fw-semibold d-flex justify-content-between align-items-center"},r.createElement(o.x,{namespace:s,phrase:"message",options:{url:"https://www.clickvieweducation.com/en-au/blog/product/exchange-tv-new-look"}}),r.createElement(a.L,{onClick:n},r.createElement(i.x,{svgName:l.vn.Close,className:"ms-2 svg-container"}))):r.createElement(r.Fragment,null)}},52333:(e,t,n)=>{n.d(t,{n:()=>c});var r=n(99940),a=n(19808),i=n(86613);function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var c={sendDiscoverFooterFeedback:function(e,t,n,r,a,i){var o=e.content.split("\n").join("<br />");return l("Discover Footer Feedback","\n <b>Type:</b> ".concat("positive"===e.type?"Positive":"Negative","\n <br />\n <b>Location:</b> Discover Footer\n <br />\n <b>Presentation:</b> ").concat(r.description," (ID: ").concat(r.id,")\n <br />\n <b>Dashboard:</b> ").concat(a.name," (ID: ").concat(a.id,")\n <br />\n ").concat(s(t,n,i),"\n <br />\n <b>Feedback:</b>\n <br />\n ").concat(o,"\n "),t,["discover",i?"student":"staff"])},sendTopicFooterFeedback:function(e,t,n,r,a,i,o){var c=e.content.split("\n").join("<br />");return l("Topic Footer Feedback","\n <b>Type:</b> ".concat("positive"===e.type?"Positive":"Negative","\n <br />\n <b>Location:</b> Topic Footer\n <br />\n <b>Presentation:</b> ").concat(r.description," (ID: ").concat(r.id,")\n <br />\n <b>Classification:</b> ").concat(a.name," (ID: ").concat(a.id,")\n <br />\n <b>Dashboard:</b> ").concat(i.name," (ID: ").concat(i.id,")\n <br />\n ").concat(s(t,n,o),"\n <br />\n <b>Feedback:</b>\n <br />\n ").concat(c,"\n "),t,["topics",o?"student":"staff"])}};function l(e,t,n,c){var l,s=["new product","in product feedback"].concat(function(e){if(Array.isArray(e))return o(e)}(l=c)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(l)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(e,t):void 0}}(l)||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.")}());n.role===i.i.Admin&&s.push("administrator");var u=function(e){switch(e){case a.b.AU:return"au";case a.b.NZ:return"nz";case a.b.UK:return"uk";case a.b.US:return"us"}}(n.instanceRegion);return u&&s.push(u),{url:"/api/productboard/notes",key:"productboard:feedback",data:{title:e,content:t,user:{email:n.emailVerified?n.email:""},tags:s},type:r.k.POST}}function s(e,t,n){return"\n <b>User:</b>\n <br />\n <li>ID: ".concat(e.id,"</li>\n <li>Username: ").concat(e.username,"</li>\n <li>Email: ").concat(e.email,"</li>\n <li>User Type / Role: ").concat(function(e,t){return t?"Learner":e.role===i.i.Admin?"Admin":"Staff"}(e,n),"</li>\n <li>Customer ID: ").concat(e.customerId,"</li>\n <li>CVC ID: ").concat(t.crmId,"</li>\n <li>Customer Name: ").concat(t.name,"</li>\n <li>Instance Region: ").concat(e.instanceRegion,"</li>\n <li>Content Region: ").concat(e.contentRegion,"</li>\n ")}},85369:(e,t,n)=>{n.d(t,{N:()=>y});var r=n(32735),a=n(35242),i=n(20354),o=n(27022),c=n(72639),l=n(31949),s=n(37802),u=n(10144),d=n(86698);function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}function f(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,o,c=[],l=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){s=!0,a=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw a}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return h(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?h(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function m(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=p(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=p(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==p(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var v=m(m(m(m(m(m({},o.t.AU,[c.p.Level_1]),o.t.US,[c.p.Level_1]),o.t.UK,[c.p.Level_1]),o.t.SCOT,[c.p.Level_1]),o.t.NZ,[]),o.t.GLOBAL,[]);function y(){var e,t=(0,s.r)(null),n=t.hasSpecialEventCalendar,o=t.isLoadingSettings,c=(0,d.y)({redirectOnError:!0}).activePresentation,p=i.a.useBasicFetch(l.N.currentUser()),h=v[null===(e=p.data)||void 0===e?void 0:e.contentRegion],m=u.i.getMappedPresentationLevel(null==c?void 0:c.learningLevel),y=!(null==h?void 0:h.find((function(e){return e.toString()===(null==m?void 0:m.toString())}))),g=!o&&!n,b=f(r.useState(!g&&!y),2),w=b[0],L=b[1],E=f(r.useState(o||!(null==c?void 0:c.id)),2),T=E[0],S=E[1];return r.useEffect((function(){g||y?L(!1):T||L(!0),S(o||!(null==c?void 0:c.id))}),[n,null==c?void 0:c.id,T]),a.h.isDevelopment?{showCalendar:!0,isLoading:!1}:{showCalendar:w,isLoading:T}}},87432:(e,t,n)=>{n.d(t,{Z:()=>r});const r={pillTabSelector:"Hdi6o",pillItem:"hUJx1"}}}]);
3
- //# sourceMappingURL=6741-b54fd85e06-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/6741-b54fd85e06-lite.chunk.js","mappings":"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","sources":["file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/apps/discover/components/header/discover-header.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/apps/discover/components/header/DiscoverHeader.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/apps/discover/components/discover-dashboard/empty-state/DiscoverDashboardEmptyState.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/apps/discover/components/discover-dashboard/DiscoverDashboard.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/projects/lite/src/apps/dashboard/views/dashboard/CuratedDiscoverView.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/projects/lite/src/apps/dashboard/views/dashboard/DiscoverViewUtils.ts","file:///Users/joshua.taylor/Projects/clickview/packages/projects/lite/src/shared/components/upgrade-feedback-banner/UpgradeFeedbackBanner.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/projects/lite/src/shared/flight-requests/ProductboardRequests.ts","file:///Users/joshua.taylor/Projects/clickview/packages/projects/lite/src/shared/hooks/useShowCalendar.ts","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/pill-tab-selector/pill-tab-selector.scss"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"pillTab\":\"bMJM0\"};","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { DashboardUserType } from 'libs/shared/interfaces';\n\nimport styles from './discover-header.scss';\n\nconst namespace = 'discover.header';\n\nexport interface DiscoverHeaderAppLinks {\n forYou: Core.AppLink;\n whatsNew: Core.AppLink;\n calendar: Core.AppLink;\n}\n\ninterface DiscoverHeaderProps {\n type: DashboardUserType;\n hasStudentExperience?: boolean;\n appLinks?: DiscoverHeaderAppLinks;\n showCalendar: boolean;\n active: keyof DiscoverHeaderAppLinks;\n}\n\nexport function DiscoverHeader(props: DiscoverHeaderProps): JSX.Element {\n if (!props.type)\n return <></>;\n\n if (props.type === DashboardUserType.Learner || props.hasStudentExperience) {\n return (\n <div className='py-3'>\n <h1 className='h2 mb-0'>\n <Text namespace={namespace} phrase='heading' />\n </h1>\n </div>\n );\n }\n\n const tabs = [{\n name: LanguageService.getPhrase(namespace, 'forYou'),\n appLink: props.appLinks?.forYou,\n active: props.active === 'forYou',\n analyticsData: {\n name: LanguageService.getPhrase(namespace, 'forYou'),\n url: AppLinkHelper.getHref(props.appLinks?.forYou)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n }, {\n name: LanguageService.getPhrase(namespace, 'whatsNew'),\n appLink: props.appLinks?.whatsNew,\n active: props.active === 'whatsNew',\n analyticsData: {\n name: LanguageService.getPhrase(namespace, 'whatsNew'),\n url: AppLinkHelper.getHref(props.appLinks?.whatsNew)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n }];\n\n if (props.showCalendar) {\n tabs.push({\n name: LanguageService.getPhrase(namespace, 'calendar'),\n appLink: props.appLinks?.calendar,\n active: props.active === 'calendar',\n analyticsData: {\n name: LanguageService.getPhrase(namespace, 'calendar'),\n url: AppLinkHelper.getHref(props.appLinks?.calendar)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n });\n }\n\n return (\n <div className='py-3 text-center'>\n <PillTabSelector\n tabs={tabs}\n className={styles.pillTab}\n />\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport styles from './pill-tab-selector.scss';\n\nexport interface PillTab {\n name: string;\n active: boolean;\n\n appLink?: Core.AppLink;\n onSelect?: () => void;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n count?: number;\n}\n\ninterface PillTabSelectorProps {\n tabs: PillTab[];\n className?: string;\n}\n\nexport function PillTabSelector(props: PillTabSelectorProps): JSX.Element {\n function onSelectTab(tab: PillTab): void {\n if (tab.active || !tab.onSelect)\n return;\n\n tab.onSelect();\n\n if (tab.analyticsData && tab.analyticsOptions)\n AnalyticsHelper.logUserAction(tab.analyticsData, tab.analyticsOptions);\n }\n\n return (\n <nav className={props.className ?? ''}>\n <ul className={`list-unstyled d-inline-block m-0 ${styles.pillTabSelector}`}>\n {props.tabs.map(tab => {\n return (\n <li className={`p-0 ${tab.active ? 'btn btn-dark' : 'btn btn-outline-dark'}`} key={tab.name}>\n {tab.appLink ? (\n <AppLink\n appLink={tab.appLink}\n analyticsData={tab.analyticsData}\n analyticsOptions={tab.analyticsOptions}\n className={`cursor-pointer d-flex justify-content-center text-decoration-none text-reset px-2 ${styles.pillItem}`}\n >\n {tab.name}\n\n {typeof (tab.count) === 'number' && (\n <div className='ps-2'>\n <Badge type={BadgeType.Count} data={tab.count} />\n </div>\n )}\n </AppLink>\n ) : (\n <DivButton className={`${styles.pillItem} d-flex justify-content-center p-2`} onClick={() => onSelectTab(tab)}>\n {tab.name}\n\n {typeof (tab.count) === 'number' && (\n <div className='ps-2'>\n <Badge type={BadgeType.Count} data={tab.count} />\n </div>\n )}\n </DivButton>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { CuratedDashboard, DashboardStatus } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'subjects.discoverDashboardEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\n\ninterface DiscoverDashboardEmptyStateProps {\n dashboard: CuratedDashboard;\n imageUrl: string;\n isReadonly: boolean;\n addWidgetApplink?: () => Core.AppLink;\n}\n\nexport function DiscoverDashboardEmptyState(props: DiscoverDashboardEmptyStateProps): JSX.Element {\n const isArchived = props.dashboard?.status === DashboardStatus.Archived;\n\n return (\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} altText={getPhrase('info')} />\n <EmptyState.Heading>\n <Text namespace={namespace} phrase='heading' />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='info' />\n </EmptyState.Info>\n <Tooltip title={isArchived ? LanguageService.getPhrase(namespace, 'archivedCtaTooltip') : ''} spanHack>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'add')}\n appLink={props.addWidgetApplink?.()}\n className='btn btn-dark'\n icon={cvSvgLibrary.Plus}\n disabled={isArchived}\n />\n </Tooltip>\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { DiscoverHeader, DiscoverHeaderAppLinks } from 'libs/shared/apps/discover/components/header/DiscoverHeader';\nimport { JobTitles } from 'libs/shared/apps/sign-up/interfaces/JobTitles';\nimport { DashboardFeedbackData } from 'libs/shared/components/feedback-form/FeedbackForm';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { WidgetAppLinks, WidgetImageUrls } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { SettingsHash } from 'libs/shared/hooks/useSettings';\nimport { CanFavouriteFunc, CuratedDashboard, CuratedWidgetQueryParams, CurrentUser, DashboardTargetType, FavouriteFunc, Presentation, PresentationAudience, WidgetPreference, YearGroup } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { DiscoverDashboardEmptyState } from './empty-state/DiscoverDashboardEmptyState';\n\ninterface DiscoverDashboardProps {\n dashboard: CuratedDashboard;\n getWidgetContentRequest: (\n id: string,\n params: CuratedWidgetQueryParams,\n widgetTemplate: WidgetTemplate,\n presentation: Presentation\n ) => Flight.Request;\n imageCdnUrl: string;\n currentUser: CurrentUser;\n audiences: PresentationAudience[];\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n resourceThumbnailFallbackImageUrl: string;\n emptyImageUrl?: string;\n presentation: Presentation;\n setFavourite?: FavouriteFunc;\n canFavourite?: CanFavouriteFunc;\n widgetAppLinks?: WidgetAppLinks;\n headerAppLinks?: DiscoverHeaderAppLinks;\n scrollToWidgetId?: string;\n updatePreferences?: (\n widgetId: string,\n widgetTypeId: WidgetTypeId,\n oldPreferences: WidgetPreference[],\n newPreferences: WidgetPreference[]\n ) => Promise<void>;\n onSubmitFeedback?: (feedback: DashboardFeedbackData) => Promise<void>;\n isReadonly?: boolean;\n yearGroups?: YearGroup[];\n lazyLoad?: boolean;\n showCalendar: boolean;\n jobTitle: JobTitles;\n imageUrls: WidgetImageUrls\n settings: SettingsHash;\n}\n\nexport function DiscoverDashboard(props: DiscoverDashboardProps): JSX.Element {\n const widgets = ArrayHelper.sortBy(props.dashboard?.widgets, 'index');\n\n function getWidgetContentRequest(id: string, widgetTypeId: WidgetTypeId, template: WidgetTemplate): Flight.Request {\n const params = CuratedDashboardHelper.getWidgetParams(\n widgetTypeId,\n template,\n CuratedDashboardHelper.getDashboardTargetType(props.dashboard)\n );\n\n return props.getWidgetContentRequest(id, params, template, props.presentation);\n }\n\n const showEmptyState = props.isReadonly && !widgets?.length;\n\n return (\n <>\n <DiscoverHeader\n type={props.dashboard?.userType}\n appLinks={props.headerAppLinks}\n hasStudentExperience={props.hasPermissions(PermissionName.StudentExperience)}\n showCalendar={props.showCalendar}\n active='forYou'\n />\n {widgets.map((widget, idx) => {\n return (\n <WidgetContainerView\n key={widget.id}\n id={widget.id}\n imageCdnUrl={props.imageCdnUrl}\n getContentRequest={getWidgetContentRequest}\n audiences={props.audiences}\n name={widget.name}\n description={widget.description}\n templateId={widget.templateId}\n metadata={widget.metadata}\n presentation={props.presentation}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n resourceThumbnailFallbackImageUrl={props.resourceThumbnailFallbackImageUrl}\n preferences={widget.preferences}\n appLinks={props.widgetAppLinks}\n isScrollToTargetWidget={props?.scrollToWidgetId === widget.id}\n widgetTypeId={widget.widgetId}\n hasPermissions={props.hasPermissions}\n hasLocalPermissions={props.hasLocalPermissions}\n onSubmitFeedback={props.onSubmitFeedback}\n updatePreferences={props.updatePreferences}\n yearGroups={props.yearGroups}\n lazyLoad={props.lazyLoad}\n dashboardTarget={DashboardTargetType.Discover}\n widgetIndex={idx}\n jobTitle={props.jobTitle}\n isPreviewing={props.isReadonly}\n imageUrls={props.imageUrls}\n settings={props.settings}\n />\n );\n })}\n\n {showEmptyState && (\n <DiscoverDashboardEmptyState\n dashboard={props.dashboard}\n isReadonly={props.isReadonly}\n imageUrl={props.emptyImageUrl}\n addWidgetApplink={props.widgetAppLinks.widgetWizard}\n />\n )}\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Flight } from 'libs/common/flight';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { DiscoverDashboard } from 'libs/shared/apps/discover/components/discover-dashboard/DiscoverDashboard';\nimport { DashboardFeedbackData } from 'libs/shared/components/feedback-form/FeedbackForm';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { PresentationLearningLevel } from 'libs/shared/enums/PresentationLearningLevel';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { DashboardRequests } from 'libs/shared/flight-requests/DashboardRequests';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { PreferenceRequests } from 'libs/shared/flight-requests/PreferenceRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { CurrentUser, Customer, DashboardTargetType, Library, Presentation, PresentationAudience, User, WidgetPreference, YearGroup } from 'libs/shared/interfaces';\nimport { Config } from 'libs/shared/interfaces';\nimport { AudienceHelper } from 'libs/shared/utils/audience-helper/AudienceHelper';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { UpgradeFeedbackBanner } from 'shared/components/upgrade-feedback-banner/UpgradeFeedbackBanner';\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { ProductboardRequests } from 'shared/flight-requests/ProductboardRequests';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { useShowCalendar } from 'shared/hooks/useShowCalendar';\nimport { DashboardViewQueryParams } from 'shared/interfaces/query-params/DashboardViewQueryParams';\nimport { useFetchCuratedDashboard } from 'shared/utils/DashboardHelper';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\n\nimport { LibraryHelper } from 'apps/libraries/utils/LibraryHelper';\n\nimport { getDiscoverHeaderAppLinks, getDiscoverWidgetAppLinks } from './DiscoverViewUtils';\n\nconst namespace = 'dashboard.dashboard';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getPhraseVariant(presentation: Presentation): string {\n const learningLevel = PresentationLearningLevel[presentation?.learningLevel];\n\n return +learningLevel === PresentationLearningLevel.Level_1\n ? 'VariantOne'\n : 'VariantTwo';\n}\n\ninterface CuratedDiscoverViewProps {\n presentationSlug?: string;\n queryParams?: DashboardViewQueryParams;\n}\n\nexport function CuratedDiscoverView(props: CuratedDiscoverViewProps): JSX.Element {\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const user = Flight.useBasicFetch<User>(currentUser.data?.isAuthenticated && UserRequests.user(currentUser.data.id));\n const { hasLocalPermissions, hasPermissions } = usePermissions();\n\n const customer = Flight.useBasicFetch<Customer>(\n hasLocalPermissions(LocalPermissionName.ManageDiscoverPreferences) &&\n currentUser.data &&\n CustomerRequests.customer(currentUser.data.customerId)\n );\n\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated\n && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const libraries = Flight.useBasicFetch<Library[]>(LibraryRequests.libraries());\n\n const {\n dashboard,\n presentation,\n audiences\n } = useFetchCuratedDashboard({\n targetType: DashboardTargetType.Discover,\n queryParams: props.queryParams,\n presentationSlug: props.presentationSlug\n });\n\n const fetchAsync = Flight.useGetFetchAsync();\n const settings = useSettings(null);\n\n const { setFavourite, canFavourite } = useLiteFavourites(LocationContext.Dashboard);\n\n const [activeAudiences] = useViewModel<PresentationAudience[]>(\n SharedViewModelKeys.AUDIENCE_FILTER,\n undefined,\n { storage: StorageType.SessionStorage }\n );\n\n const widgetAppLinks = getDiscoverWidgetAppLinks(AudienceHelper.getAudienceParams(activeAudiences));\n\n const phraseVariant = getPhraseVariant(presentation);\n\n useSetPageMetadata(PageMetadataHelper.getDiscoverMetadata({\n content: presentation,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: `pageTitle${phraseVariant}`,\n descriptionPhrase: `pageDescription${phraseVariant}`\n },\n canonicalLink: SeoHelper.getCanonicalLink(),\n allowIndexing: SeoHelper.allowIndexing(),\n hrefLang: SeoHelper.getStaticRouteHrefLang(\n presentation?.learningLevel,\n widgetAppLinks.discover\n )\n }));\n\n function onSubmitFeedback(feedback: DashboardFeedbackData): Promise<void> {\n const promise = fetchAsync<void>(ProductboardRequests.sendDiscoverFooterFeedback(\n feedback,\n currentUser.data,\n customer.data,\n presentation,\n dashboard.data,\n hasPermissions(PermissionName.StudentExperience)\n ));\n\n AnalyticsHelper.logUserAction({\n feedbackType: feedback.type,\n content: feedback.content,\n presentationId: presentation.id,\n dashboardId: dashboard.data.id\n }, {\n actionType: UserAction.Submit,\n location: LocationContext.DiscoverFooter,\n entity: EntityType.Feedback,\n workflowPhase: WorkflowPhase.Complete\n });\n\n return promise;\n }\n\n async function updateWidgetPreferences(\n widgetId: string,\n widgetTypeId: WidgetTypeId,\n oldPreferences: WidgetPreference[],\n newPreferences: WidgetPreference[]\n ): Promise<void> {\n const addedSubjects = newPreferences.filter(p => {\n if (p.hidden)\n return false;\n\n const oldPreference = oldPreferences.find(o => o.id === p.id);\n\n return oldPreference.hidden;\n });\n const removedSubjects = newPreferences.filter(p => {\n if (!p.hidden)\n return false;\n \n const oldPreference = oldPreferences.find(o => o.id === p.id);\n\n return !oldPreference.hidden;\n });\n\n if (addedSubjects?.length)\n await fetchAsync<void>(PreferenceRequests.followSubjects(addedSubjects.map(s => s.id)));\n\n if (removedSubjects?.length)\n await fetchAsync<void>(PreferenceRequests.unfollowSubjects(removedSubjects.map(s => s.id)));\n\n return fetchAsync<void>(DashboardRequests.updateWidgetPreferences(\n widgetId,\n newPreferences.map(p => ({\n id: p.id,\n index: p.index\n })),\n currentUser.data\n ));\n }\n const { showCalendar } = useShowCalendar();\n\n return (\n <div className='bg-white px-4'>\n <UpgradeFeedbackBanner />\n <DiscoverDashboard\n currentUser={currentUser.data}\n dashboard={dashboard.data}\n widgetAppLinks={widgetAppLinks}\n headerAppLinks={getDiscoverHeaderAppLinks()}\n presentation={presentation}\n imageCdnUrl={config.data.imageCdnUrl}\n resourceThumbnailFallbackImageUrl={ImageUrls.Fallbacks.RESOURCE_THUMBNAIL}\n getWidgetContentRequest={(\n ...args: Parameters<typeof DashboardRequests.dashboardWidgetContent>\n ) => {\n const hasTwig = LibraryHelper.hasTwig(libraries.data);\n\n return DashboardRequests.discoverWidgetContent(hasTwig, ...args);\n }}\n setFavourite={setFavourite}\n audiences={audiences.data}\n canFavourite={canFavourite}\n updatePreferences={updateWidgetPreferences}\n hasPermissions={hasPermissions}\n hasLocalPermissions={hasLocalPermissions}\n onSubmitFeedback={\n hasPermissions(PermissionName.CanSubmitFeedback) &&\n onSubmitFeedback\n }\n yearGroups={yearGroups.data}\n lazyLoad={!SeoHelper.isBot()}\n showCalendar={showCalendar}\n jobTitle={user.data?.userProfile?.metadata?.jobTitle}\n imageUrls={{\n onboardingAdminBackgroundFull: ImageUrls.OnboardingV2.Widget.ADMIN_BACKGROUND_FULL,\n onboardingAdminBackground: ImageUrls.OnboardingV2.Widget.ADMIN_BACKGROUND,\n onboardingTeacherBackground: ImageUrls.OnboardingV2.Widget.TEACHER_BACKGROUND\n }}\n settings={settings}\n />\n </div>\n );\n}","import { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { DiscoverHeaderAppLinks } from 'libs/shared/apps/discover/components/header/DiscoverHeader';\nimport { OnboardingScreenId } from 'libs/shared/apps/onboarding/interfaces/OnboardingScreenId';\nimport { RatingFilterHelper } from 'libs/shared/apps/search/utils/RatingFilterHelper';\nimport { WidgetAppLinks } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { RelatedVideosContext } from 'libs/shared/enums/RelatedVideosContext';\nimport { Classification, Company, Playlist, Rating, Video, VideoTypes } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { getOnboardingAppLinks } from 'apps/onboarding/utils/OnboardingAppLinkHelper';\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nconst CLASSIFICATION_LATEST_RELEASES = 'classification-latest-releases';\n\nexport function getDiscoverWidgetAppLinks(\n params: HashObject\n): WidgetAppLinks {\n return {\n classification: (classification?: Classification) => {\n return {\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.CLASSIFICATION,\n args: [ classification?.id, TextHelper.slugify(classification?.name) ],\n params: params || {}\n };\n },\n\n classificationTopics: () => ({\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.CLASSIFICATION_TOPICS,\n params: params || {}\n }),\n\n videoType: (video: VideoTypes, opts: GetVideoAppLinkOptions) => (\n VideoAppLinkHelper.getAppLink(video, {\n ...opts,\n context: RelatedVideosContext.Widget\n })\n ),\n\n series: SeriesAppLinkHelper.getSeriesAppLink,\n\n subText: (video: Video) => SeriesAppLinkHelper.getSeriesAppLink(video.series),\n\n playlist: (playlist: Playlist) => ({\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.PLAYLIST,\n args: [ playlist.id, TextHelper.slugify(playlist.name) ]\n }),\n \n latestReleases: () => ({\n application: AppChannels.CONTENT_UPDATES,\n action: Actions.ContentUpdates.CONTENT_UPDATES\n }),\n\n allTopics: () => ({\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.CLASSIFICATION_ALL\n }),\n\n classificationLatestReleases: (classification: Classification) => {\n if (classification.id === CLASSIFICATION_LATEST_RELEASES)\n return {\n application: AppChannels.CONTENT_UPDATES,\n action: Actions.ContentUpdates.CONTENT_UPDATES\n };\n\n return {\n application: AppChannels.CONTENT_UPDATES,\n action: Actions.ContentUpdates.CLASSIFICATION_UPDATE,\n args: [ classification.id, TextHelper.slugify(classification.name) ]\n };\n },\n\n widgetVideoList: (widgetId: string, widgetName: string) => ({\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.DASHBOARD,\n args: [ widgetId, TextHelper.slugify(widgetName) ]\n }),\n\n watchHistory: () => ({\n application: AppChannels.WATCH_HISTORY,\n action: Actions.WatchHistory.HOME\n }),\n\n rating: (rating: Rating, ratings: Rating[]) => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: {\n moviesAndTv: true,\n rating: RatingFilterHelper.getFrontendParamValue([ ArrayHelper.first(ratings), rating ])\n }\n }),\n\n company: (company: Company) => ({\n application: AppChannels.MOVIES_AND_TV,\n action: Actions.MoviesAndTv.COMPANY_DASHBOARD,\n args: [ company.id, TextHelper.slugify(company.name) ]\n }),\n\n discover: () => ({\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.HOME\n }),\n\n calendar: () => ({\n application: AppChannels.CALENDAR,\n action: Actions.Calendar.CALENDAR\n }),\n\n calendarMonth: (month: string, year?: string) => {\n const appLink: Core.AppLink = {\n application: AppChannels.CALENDAR,\n action: Actions.Calendar.CALENDAR_MONTH,\n args: [month.toLowerCase()]\n };\n\n if (year)\n appLink.params = { year };\n\n return appLink;\n },\n\n onboardingStep: (step: OnboardingScreenId) => {\n const appLinks = getOnboardingAppLinks();\n return appLinks[step];\n },\n\n onboardingAppLinks: () => {\n return getOnboardingAppLinks();\n }\n };\n}\n\nexport function getDiscoverHeaderAppLinks(): DiscoverHeaderAppLinks {\n return {\n forYou: {\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.HOME\n },\n whatsNew: {\n application: AppChannels.CONTENT_UPDATES,\n action: Actions.ContentUpdates.CONTENT_UPDATES\n },\n calendar: {\n application: AppChannels.CALENDAR,\n action: Actions.Calendar.CALENDAR\n }\n };\n}","import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useLiteUpgrade } from 'libs/shared/hooks/UseLiteUpgrade';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.upgradeFeedbackBanner';\n\nexport function UpgradeFeedbackBanner(): JSX.Element {\n const { showFeedbackBanner, dismissFeedbackBanner } = useLiteUpgrade();\n\n if (!showFeedbackBanner)\n return <></>;\n\n return (\n <div className='alert bg-light-blue p-2 rounded text-info fw-semibold d-flex justify-content-between align-items-center'>\n <Text\n namespace={namespace}\n phrase='message'\n options={{ url: 'https://www.clickvieweducation.com/en-au/blog/product/exchange-tv-new-look' }}\n />\n <DivButton\n onClick={dismissFeedbackBanner}\n >\n <SvgContainer\n svgName={cvSvgLibrary.Close}\n className='ms-2 svg-container'\n />\n </DivButton>\n </div>\n );\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/react/index';\n\nimport { DashboardFeedbackData } from 'libs/shared/components/feedback-form/FeedbackForm';\nimport { InstanceRegion } from 'libs/shared/enums/InstanceRegion';\nimport { UserRole } from 'libs/shared/enums/UserRole';\nimport { Classification, CuratedDashboard, CurrentUser, Customer, Presentation } from 'libs/shared/interfaces';\n\nexport const ProductboardRequests = {\n sendDiscoverFooterFeedback(\n feedback: DashboardFeedbackData,\n currentUser: CurrentUser,\n customer: Customer,\n presentation: Presentation,\n dashboard: CuratedDashboard,\n hasStudentExperience: boolean\n ): Flight.Request {\n const userContent = feedback.content.split('\\n').join('<br />');\n\n const content = `\n <b>Type:</b> ${feedback.type === 'positive' ? 'Positive' : 'Negative'}\n <br />\n <b>Location:</b> Discover Footer\n <br />\n <b>Presentation:</b> ${presentation.description} (ID: ${presentation.id})\n <br />\n <b>Dashboard:</b> ${dashboard.name} (ID: ${dashboard.id})\n <br />\n ${getUserInfo(currentUser, customer, hasStudentExperience)}\n <br />\n <b>Feedback:</b>\n <br />\n ${userContent}\n `;\n\n const extraTags = [ 'discover', hasStudentExperience ? 'student' : 'staff' ];\n\n return getRequest('Discover Footer Feedback', content, currentUser, extraTags);\n },\n\n sendTopicFooterFeedback(\n feedback: DashboardFeedbackData,\n currentUser: CurrentUser,\n customer: Customer,\n presentation: Presentation,\n classification: Classification,\n dashboard: CuratedDashboard,\n hasStudentExperience: boolean\n ): Flight.Request {\n const userContent = feedback.content.split('\\n').join('<br />');\n\n const content = `\n <b>Type:</b> ${feedback.type === 'positive' ? 'Positive' : 'Negative'}\n <br />\n <b>Location:</b> Topic Footer\n <br />\n <b>Presentation:</b> ${presentation.description} (ID: ${presentation.id})\n <br />\n <b>Classification:</b> ${classification.name} (ID: ${classification.id})\n <br />\n <b>Dashboard:</b> ${dashboard.name} (ID: ${dashboard.id})\n <br />\n ${getUserInfo(currentUser, customer, hasStudentExperience)}\n <br />\n <b>Feedback:</b>\n <br />\n ${userContent}\n `;\n\n const extraTags = [ 'topics', hasStudentExperience ? 'student' : 'staff' ];\n\n return getRequest('Topic Footer Feedback', content, currentUser, extraTags);\n }\n};\n\nfunction getRequest(\n title: string,\n content: string,\n currentUser: CurrentUser,\n extraTags: string[]\n): Flight.Request {\n const tags = [\n 'new product',\n 'in product feedback',\n ...extraTags\n ];\n\n if (currentUser.role === UserRole.Admin)\n tags.push('administrator');\n\n const regionTag = mapInstanceRegionToTag(currentUser.instanceRegion);\n\n if (regionTag)\n tags.push(regionTag);\n\n return {\n url: '/api/productboard/notes',\n key: 'productboard:feedback',\n data: {\n title,\n content,\n user: {\n email: currentUser.emailVerified ? currentUser.email : ''\n },\n tags\n },\n type: HttpVerbs.POST\n };\n}\n\nfunction mapInstanceRegionToTag(instanceRegion: InstanceRegion): string {\n switch (instanceRegion) {\n case InstanceRegion.AU:\n return 'au';\n case InstanceRegion.NZ:\n return 'nz';\n case InstanceRegion.UK:\n return 'uk';\n case InstanceRegion.US:\n return 'us';\n }\n}\n\nfunction getUserInfo(currentUser: CurrentUser, customer: Customer, hasStudentExperience: boolean): string {\n return `\n <b>User:</b>\n <br />\n <li>ID: ${currentUser.id}</li>\n <li>Username: ${currentUser.username}</li>\n <li>Email: ${currentUser.email}</li>\n <li>User Type / Role: ${getRole(currentUser, hasStudentExperience)}</li>\n <li>Customer ID: ${currentUser.customerId}</li>\n <li>CVC ID: ${customer.crmId}</li>\n <li>Customer Name: ${customer.name}</li>\n <li>Instance Region: ${currentUser.instanceRegion}</li>\n <li>Content Region: ${currentUser.contentRegion}</li>\n `;\n}\n\nfunction getRole(currentUser: CurrentUser, hasStudentExperience: boolean): string {\n if (hasStudentExperience)\n return 'Learner';\n\n return currentUser.role === UserRole.Admin ? 'Admin' : 'Staff';\n}","import React from 'react';\n\nimport { EnvironmentVariables } from 'libs/common/backbone/services/EnvironmentVariables';\nimport { Flight } from 'libs/common/react/index';\n\nimport { ContentRegion } from 'libs/shared/enums/ContentRegion';\nimport { PresentationLearningLevel } from 'libs/shared/enums/PresentationLearningLevel';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { CurrentUser } from 'libs/shared/interfaces';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { usePresentation } from 'shared/hooks/usePresentation';\n\nconst ALLOWED_LEARNING_LEVELS_BY_REGION: Record<ContentRegion, PresentationLearningLevel[]> = {\n [ContentRegion.AU]: [\n // AU Primary Calendar\n PresentationLearningLevel.Level_1\n ],\n [ContentRegion.US]: [\n // US Elementary Calendar\n PresentationLearningLevel.Level_1\n ],\n [ContentRegion.UK]: [\n // UK Primary Calendar\n PresentationLearningLevel.Level_1\n ],\n [ContentRegion.SCOT]: [\n // Scotland Primary Calendar\n PresentationLearningLevel.Level_1\n ],\n [ContentRegion.NZ]: [],\n [ContentRegion.GLOBAL]: []\n};\n\nexport function useShowCalendar() {\n const { hasSpecialEventCalendar, isLoadingSettings } = useSettings(null);\n\n const {\n activePresentation\n } = usePresentation({ redirectOnError: true });\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const allowedLearningLevels = ALLOWED_LEARNING_LEVELS_BY_REGION[currentUser.data?.contentRegion];\n const learningLevel = TopicsHelper.getMappedPresentationLevel(activePresentation?.learningLevel);\n const learningLevelCantAccess = !allowedLearningLevels?.find(l => {\n return l.toString() === (learningLevel as PresentationLearningLevel)?.toString();\n });\n\n const noSetting = !isLoadingSettings && !hasSpecialEventCalendar;\n\n const [ showCalendar, setShowCalendar ] = React.useState<boolean>(!noSetting && !learningLevelCantAccess);\n\n const [ isLoading, setIsLoading ] = React.useState(isLoadingSettings || !activePresentation?.id);\n\n React.useEffect(() => {\n if (noSetting || learningLevelCantAccess) {\n setShowCalendar(false);\n } else if (!isLoading) {\n setShowCalendar(true);\n }\n setIsLoading(isLoadingSettings || !activePresentation?.id);\n }, [ hasSpecialEventCalendar, activePresentation?.id, isLoading ]);\n\n if (EnvironmentVariables.isDevelopment)\n return { showCalendar: true, isLoading: false };\n\n return { showCalendar, isLoading };\n}","// extracted by mini-css-extract-plugin\nexport default {\"pillTabSelector\":\"Hdi6o\",\"pillItem\":\"hUJx1\"};"],"names":["namespace","DiscoverHeader","props","type","hasStudentExperience","className","Text","phrase","tabs","name","LanguageService","appLink","appLinks","forYou","active","analyticsData","url","analyticsOptions","actionType","entity","location","whatsNew","showCalendar","push","calendar","PillTabSelector","map","tab","key","count","data","onClick","onSelect","onSelectTab","getPhrase","DiscoverDashboardEmptyState","isArchived","dashboard","status","EmptyState","src","imageUrl","altText","Tooltip","title","spanHack","text","addWidgetApplink","icon","disabled","DiscoverDashboard","widgets","ArrayHelper","getWidgetContentRequest","id","widgetTypeId","template","params","presentation","showEmptyState","isReadonly","length","userType","headerAppLinks","hasPermissions","PermissionName","widget","idx","WidgetContainerView","imageCdnUrl","getContentRequest","audiences","description","templateId","metadata","setFavourite","canFavourite","resourceThumbnailFallbackImageUrl","preferences","widgetAppLinks","isScrollToTargetWidget","scrollToWidgetId","widgetId","hasLocalPermissions","onSubmitFeedback","updatePreferences","yearGroups","lazyLoad","dashboardTarget","widgetIndex","jobTitle","isPreviewing","imageUrls","settings","emptyImageUrl","widgetWizard","CuratedDiscoverView","config","ConfigRequests","currentUser","UserRequests","user","isAuthenticated","usePermissions","customer","CustomerRequests","customerId","libraries","LibraryRequests","targetType","queryParams","presentationSlug","fetchAsync","useSettings","useLiteFavourites","u","activeAudiences","SharedViewModelKeys","undefined","storage","AudienceHelper","phraseVariant","PresentationLearningLevel","learningLevel","getPhraseVariant","useSetPageMetadata","PageMetadataHelper","content","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","canonicalLink","SeoHelper","allowIndexing","hrefLang","discover","useShowCalendar","UpgradeFeedbackBanner","ImageUrls","hasTwig","LibraryHelper","args","DashboardRequests","oldPreferences","newPreferences","addedSubjects","filter","p","hidden","find","o","removedSubjects","PreferenceRequests","s","index","feedback","promise","ProductboardRequests","AnalyticsHelper","feedbackType","presentationId","dashboardId","workflowPhase","userProfile","onboardingAdminBackgroundFull","onboardingAdminBackground","onboardingTeacherBackground","CLASSIFICATION_LATEST_RELEASES","getDiscoverWidgetAppLinks","classification","application","action","classificationTopics","videoType","video","opts","context","series","subText","playlist","latestReleases","allTopics","classificationLatestReleases","widgetVideoList","widgetName","watchHistory","rating","ratings","moviesAndTv","company","calendarMonth","month","year","toLowerCase","onboardingStep","step","onboardingAppLinks","getDiscoverHeaderAppLinks","showFeedbackBanner","dismissFeedbackBanner","options","svgName","sendDiscoverFooterFeedback","userContent","split","join","getRequest","getUserInfo","sendTopicFooterFeedback","extraTags","tags","role","regionTag","instanceRegion","mapInstanceRegionToTag","email","emailVerified","username","getRole","crmId","contentRegion","ALLOWED_LEARNING_LEVELS_BY_REGION","hasSpecialEventCalendar","isLoadingSettings","activePresentation","redirectOnError","allowedLearningLevels","learningLevelCantAccess","l","toString","noSetting","setShowCalendar","isLoading","setIsLoading"],"sourceRoot":""}