@clickview/lite 0.82.1 → 0.82.2-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/css/2074-lite-ac8da6c78b.chunk.css +4 -0
  3. package/dist/languages/en.json +1 -1
  4. package/dist/scripts/{1199-01cc084886-lite.chunk.js → 1199-da55d69853-lite.chunk.js} +1 -1
  5. package/dist/scripts/{1199-01cc084886-lite.chunk.js.map → 1199-da55d69853-lite.chunk.js.map} +1 -1
  6. package/dist/scripts/1202-d96ad80884-lite.chunk.js +2 -0
  7. package/dist/scripts/1202-d96ad80884-lite.chunk.js.map +1 -0
  8. package/dist/scripts/{4208-0706461da6-lite.chunk.js → 1336-1826f6e582-lite.chunk.js} +2 -2
  9. package/dist/scripts/1336-1826f6e582-lite.chunk.js.map +1 -0
  10. package/dist/scripts/2074-39b86b9a22-lite.chunk.js +2 -0
  11. package/dist/scripts/2074-39b86b9a22-lite.chunk.js.map +1 -0
  12. package/dist/scripts/{2664-907153c03b-lite.chunk.js → 2664-87c8cbfa7f-lite.chunk.js} +2 -2
  13. package/dist/scripts/2664-87c8cbfa7f-lite.chunk.js.map +1 -0
  14. package/dist/scripts/2888-2596e106a5-lite.chunk.js +2 -0
  15. package/dist/scripts/2888-2596e106a5-lite.chunk.js.map +1 -0
  16. package/dist/scripts/289-669c0c8222-lite.chunk.js +2 -0
  17. package/dist/scripts/289-669c0c8222-lite.chunk.js.map +1 -0
  18. package/dist/scripts/{9911-8892b6dbfe-lite.chunk.js → 3612-8c6423bd51-lite.chunk.js} +2 -2
  19. package/dist/scripts/{9911-8892b6dbfe-lite.chunk.js.map → 3612-8c6423bd51-lite.chunk.js.map} +1 -1
  20. package/dist/scripts/3840-98c79fc0d8-lite.chunk.js +2 -0
  21. package/dist/scripts/3840-98c79fc0d8-lite.chunk.js.map +1 -0
  22. package/dist/scripts/3893-2856933742-lite.chunk.js +2 -0
  23. package/dist/scripts/3893-2856933742-lite.chunk.js.map +1 -0
  24. package/dist/scripts/4006-9dfe9cec1b-lite.chunk.js +3 -0
  25. package/dist/scripts/4006-9dfe9cec1b-lite.chunk.js.map +1 -0
  26. package/dist/scripts/{4177-2d876c7b14-lite.chunk.js → 4177-285ddf9ae3-lite.chunk.js} +2 -2
  27. package/dist/scripts/4177-285ddf9ae3-lite.chunk.js.map +1 -0
  28. package/dist/scripts/{4578-27028d26eb-lite.chunk.js → 4578-7578bcf17a-lite.chunk.js} +2 -2
  29. package/dist/scripts/4578-7578bcf17a-lite.chunk.js.map +1 -0
  30. package/dist/scripts/{4621-7fb0a05bcb-lite.chunk.js → 4621-1f79d94416-lite.chunk.js} +2 -2
  31. package/dist/scripts/4621-1f79d94416-lite.chunk.js.map +1 -0
  32. package/dist/scripts/4806-f36469abb7-lite.chunk.js +2 -0
  33. package/dist/scripts/4806-f36469abb7-lite.chunk.js.map +1 -0
  34. package/dist/scripts/{4948-ba684e5f4f-lite.chunk.js → 4948-de1c75e7fb-lite.chunk.js} +1 -1
  35. package/dist/scripts/{4948-ba684e5f4f-lite.chunk.js.map → 4948-de1c75e7fb-lite.chunk.js.map} +1 -1
  36. package/dist/scripts/4985-bdfa839f8f-lite.chunk.js +2 -0
  37. package/dist/scripts/4985-bdfa839f8f-lite.chunk.js.map +1 -0
  38. package/dist/scripts/{5554-f1f3baf822-lite.chunk.js → 5554-17bb3b86fc-lite.chunk.js} +2 -2
  39. package/dist/scripts/5554-17bb3b86fc-lite.chunk.js.map +1 -0
  40. package/dist/scripts/5579-a9c152057f-lite.chunk.js +2 -0
  41. package/dist/scripts/5579-a9c152057f-lite.chunk.js.map +1 -0
  42. package/dist/scripts/5712-e784cfe89c-lite.chunk.js +2 -0
  43. package/dist/scripts/5712-e784cfe89c-lite.chunk.js.map +1 -0
  44. package/dist/scripts/6070-a390fdce21-lite.chunk.js +2 -0
  45. package/dist/scripts/6070-a390fdce21-lite.chunk.js.map +1 -0
  46. package/dist/scripts/{6909-ba75701156-lite.chunk.js → 6909-a9b8930e37-lite.chunk.js} +2 -2
  47. package/dist/scripts/6909-a9b8930e37-lite.chunk.js.map +1 -0
  48. package/dist/scripts/7401-98135f09e8-lite.chunk.js +2 -0
  49. package/dist/scripts/7401-98135f09e8-lite.chunk.js.map +1 -0
  50. package/dist/scripts/{7617-211f084b70-lite.chunk.js → 7617-9d34c841e6-lite.chunk.js} +2 -2
  51. package/dist/scripts/7617-9d34c841e6-lite.chunk.js.map +1 -0
  52. package/dist/scripts/7742-342db3ce4f-lite.chunk.js +2 -0
  53. package/dist/scripts/7742-342db3ce4f-lite.chunk.js.map +1 -0
  54. package/dist/scripts/7843-f6033528ce-lite.chunk.js +2 -0
  55. package/dist/scripts/7843-f6033528ce-lite.chunk.js.map +1 -0
  56. package/dist/scripts/787-dcb3a0a26c-lite.chunk.js +2 -0
  57. package/dist/scripts/787-dcb3a0a26c-lite.chunk.js.map +1 -0
  58. package/dist/scripts/8077-9fdb522d7e-lite.chunk.js +2 -0
  59. package/dist/scripts/8077-9fdb522d7e-lite.chunk.js.map +1 -0
  60. package/dist/scripts/{3392-f7f8cb65e5-lite.chunk.js → 8133-ffcff3b7fc-lite.chunk.js} +3 -3
  61. package/dist/scripts/8133-ffcff3b7fc-lite.chunk.js.map +1 -0
  62. package/dist/scripts/8364-ff63447d36-lite.chunk.js +3 -0
  63. package/dist/scripts/8364-ff63447d36-lite.chunk.js.map +1 -0
  64. package/dist/scripts/8672-6967ce8a23-lite.chunk.js +2 -0
  65. package/dist/scripts/8672-6967ce8a23-lite.chunk.js.map +1 -0
  66. package/dist/scripts/{9042-fd7e79b891-lite.chunk.js → 9042-fdc5ecb459-lite.chunk.js} +1 -1
  67. package/dist/scripts/{9042-fd7e79b891-lite.chunk.js.map → 9042-fdc5ecb459-lite.chunk.js.map} +1 -1
  68. package/dist/scripts/9295-4242401e60-lite.chunk.js +2 -0
  69. package/dist/scripts/9295-4242401e60-lite.chunk.js.map +1 -0
  70. package/dist/scripts/{9742-3f6b75484a-lite.chunk.js → 9742-5f99d74bb0-lite.chunk.js} +2 -2
  71. package/dist/scripts/9742-5f99d74bb0-lite.chunk.js.map +1 -0
  72. package/dist/scripts/979-4b893e5603-lite.chunk.js +2 -0
  73. package/dist/scripts/979-4b893e5603-lite.chunk.js.map +1 -0
  74. package/dist/scripts/9911-9272b96e46-lite.chunk.js +2 -0
  75. package/dist/scripts/9911-9272b96e46-lite.chunk.js.map +1 -0
  76. package/dist/scripts/bundle-9a3e49399a.min.js +3 -0
  77. package/dist/scripts/{bundle-1187cb1e9f.min.js.map → bundle-9a3e49399a.min.js.map} +1 -1
  78. package/package.json +1 -1
  79. package/dist/scripts/1074-fdce06d863-lite.chunk.js +0 -2
  80. package/dist/scripts/1074-fdce06d863-lite.chunk.js.map +0 -1
  81. package/dist/scripts/2664-907153c03b-lite.chunk.js.map +0 -1
  82. package/dist/scripts/2970-024b1dd55d-lite.chunk.js +0 -2
  83. package/dist/scripts/2970-024b1dd55d-lite.chunk.js.map +0 -1
  84. package/dist/scripts/3392-f7f8cb65e5-lite.chunk.js.map +0 -1
  85. package/dist/scripts/3840-59e5e53cda-lite.chunk.js +0 -2
  86. package/dist/scripts/3840-59e5e53cda-lite.chunk.js.map +0 -1
  87. package/dist/scripts/4177-2d876c7b14-lite.chunk.js.map +0 -1
  88. package/dist/scripts/4208-0706461da6-lite.chunk.js.map +0 -1
  89. package/dist/scripts/4578-27028d26eb-lite.chunk.js.map +0 -1
  90. package/dist/scripts/4598-8f5266e4c2-lite.chunk.js +0 -2
  91. package/dist/scripts/4598-8f5266e4c2-lite.chunk.js.map +0 -1
  92. package/dist/scripts/4621-7fb0a05bcb-lite.chunk.js.map +0 -1
  93. package/dist/scripts/4806-a6f31d703c-lite.chunk.js +0 -2
  94. package/dist/scripts/4806-a6f31d703c-lite.chunk.js.map +0 -1
  95. package/dist/scripts/4985-7e02d5df40-lite.chunk.js +0 -2
  96. package/dist/scripts/4985-7e02d5df40-lite.chunk.js.map +0 -1
  97. package/dist/scripts/5554-f1f3baf822-lite.chunk.js.map +0 -1
  98. package/dist/scripts/5712-7cee70c6b4-lite.chunk.js +0 -2
  99. package/dist/scripts/5712-7cee70c6b4-lite.chunk.js.map +0 -1
  100. package/dist/scripts/6550-d99e0ed75d-lite.chunk.js +0 -2
  101. package/dist/scripts/6550-d99e0ed75d-lite.chunk.js.map +0 -1
  102. package/dist/scripts/6909-ba75701156-lite.chunk.js.map +0 -1
  103. package/dist/scripts/7148-1ced1b5dce-lite.chunk.js +0 -2
  104. package/dist/scripts/7148-1ced1b5dce-lite.chunk.js.map +0 -1
  105. package/dist/scripts/7568-55e9b01367-lite.chunk.js +0 -3
  106. package/dist/scripts/7568-55e9b01367-lite.chunk.js.map +0 -1
  107. package/dist/scripts/7617-211f084b70-lite.chunk.js.map +0 -1
  108. package/dist/scripts/7742-514844bd1a-lite.chunk.js +0 -2
  109. package/dist/scripts/7742-514844bd1a-lite.chunk.js.map +0 -1
  110. package/dist/scripts/7843-cbebf1a786-lite.chunk.js +0 -2
  111. package/dist/scripts/7843-cbebf1a786-lite.chunk.js.map +0 -1
  112. package/dist/scripts/8077-dfd239131d-lite.chunk.js +0 -2
  113. package/dist/scripts/8077-dfd239131d-lite.chunk.js.map +0 -1
  114. package/dist/scripts/843-4dbc5df109-lite.chunk.js +0 -3
  115. package/dist/scripts/843-4dbc5df109-lite.chunk.js.map +0 -1
  116. package/dist/scripts/8735-e74a148502-lite.chunk.js +0 -2
  117. package/dist/scripts/8735-e74a148502-lite.chunk.js.map +0 -1
  118. package/dist/scripts/8856-2d332952ae-lite.chunk.js +0 -2
  119. package/dist/scripts/8856-2d332952ae-lite.chunk.js.map +0 -1
  120. package/dist/scripts/904-2784e45cfc-lite.chunk.js +0 -2
  121. package/dist/scripts/904-2784e45cfc-lite.chunk.js.map +0 -1
  122. package/dist/scripts/9295-eb130a0b17-lite.chunk.js +0 -2
  123. package/dist/scripts/9295-eb130a0b17-lite.chunk.js.map +0 -1
  124. package/dist/scripts/9528-4e954d9dff-lite.chunk.js +0 -2
  125. package/dist/scripts/9528-4e954d9dff-lite.chunk.js.map +0 -1
  126. package/dist/scripts/9742-3f6b75484a-lite.chunk.js.map +0 -1
  127. package/dist/scripts/979-6a70a0e616-lite.chunk.js +0 -2
  128. package/dist/scripts/979-6a70a0e616-lite.chunk.js.map +0 -1
  129. package/dist/scripts/bundle-1187cb1e9f.min.js +0 -3
  130. /package/dist/css/{9528-lite-4a892bdbf2.chunk.css → 1202-lite-4a892bdbf2.chunk.css} +0 -0
  131. /package/dist/css/{7148-lite-856c02f000.chunk.css → 2888-lite-856c02f000.chunk.css} +0 -0
  132. /package/dist/css/{904-lite-2435a34b13.chunk.css → 289-lite-2435a34b13.chunk.css} +0 -0
  133. /package/dist/css/{9911-lite-2b4142796a.chunk.css → 3612-lite-2b4142796a.chunk.css} +0 -0
  134. /package/dist/css/{8856-lite-f8e496136d.chunk.css → 5579-lite-f8e496136d.chunk.css} +0 -0
  135. /package/dist/css/{6550-lite-45dc286aab.chunk.css → 6070-lite-45dc286aab.chunk.css} +0 -0
  136. /package/dist/css/{2970-lite-5a317efacd.chunk.css → 787-lite-5a317efacd.chunk.css} +0 -0
  137. /package/dist/css/{843-lite-db31e36b79.chunk.css → 8364-lite-db31e36b79.chunk.css} +0 -0
  138. /package/dist/css/{8735-lite-856c02f000.chunk.css → 9911-lite-856c02f000.chunk.css} +0 -0
  139. /package/dist/scripts/{3392-f7f8cb65e5-lite.chunk.js.LICENSE.txt → 4006-9dfe9cec1b-lite.chunk.js.LICENSE.txt} +0 -0
  140. /package/dist/scripts/{7568-55e9b01367-lite.chunk.js.LICENSE.txt → 8133-ffcff3b7fc-lite.chunk.js.LICENSE.txt} +0 -0
  141. /package/dist/scripts/{843-4dbc5df109-lite.chunk.js.LICENSE.txt → 8364-ff63447d36-lite.chunk.js.LICENSE.txt} +0 -0
  142. /package/dist/scripts/{bundle-1187cb1e9f.min.js.LICENSE.txt → bundle-9a3e49399a.min.js.LICENSE.txt} +0 -0
@@ -1,2 +1,2 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4621],{60115:(e,t,a)=>{a.d(t,{K:()=>c});var r=a(32735),n=a(50242),o=a(91967),l=400,s=a(45719);function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=Array(t);a<t;a++)r[a]=e[a];return r}function c(e,t,a,c,u,m){var d,g,p,v,f=(d=(0,r.useState)(0),g=2,function(e){if(Array.isArray(e))return e}(d)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var r,n,o,l,s=[],i=!0,c=!1;try{if(o=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;i=!1}else for(;!(i=(r=o.call(a)).done)&&(s.push(r.value),s.length!==t);i=!0);}catch(e){c=!0,n=e}finally{try{if(!i&&null!=a.return&&(l=a.return(),Object(l)!==l))return}finally{if(c)throw n}}return s}}(d,g)||function(e,t){if(e){if("string"==typeof e)return i(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?i(e,t):void 0}}(d,g)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),h=f[0],E=f[1],C=t,N=(0,s.P)(function(t){if(!e)return null;var a=e(t);return a?a.key:null},c,u);return p={fetchNextPage:function(){if(t&&e&&N)return E(function(e){return e+1}),C(N.nextCursor)},hasMore:!!(null==N?void 0:N.nextCursor),isFetching:null==N?void 0:N.isFetching,scrollContainer:m},v=function(){if(!p.isFetching){if(p.scrollContainer){var e=p.scrollContainer;if(e.getBoundingClientRect().height+e.scrollTop<e.scrollHeight-l)return}else if(window.innerHeight+document.documentElement.scrollTop<document.documentElement.scrollHeight-l)return;p.fetchNextPage()}},(0,r.useEffect)(function(){var e=o.q.throttle(v,200),t=p.scrollContainer||window;return p.hasMore&&t.addEventListener("scroll",e),function(){return t.removeEventListener("scroll",e)}},[p.hasMore,p.fetchNextPage,p.scrollContainer]),(0,r.useEffect)(function(){N&&N.shouldInitialFetch&&t&&(C(),E(function(e){return e+1}))},[null==N?void 0:N.shouldInitialFetch,t]),(0,r.useEffect)(function(){var e,t;if((null==N?void 0:N.statusCode)&&o.q.isFunction(a)){var r=+(null===(t=null===(e=N.statusCode)||void 0===e?void 0:e.toString())||void 0===t?void 0:t.substr(0,1));r!==n.k.ClientError&&r!==n.k.ServerError||a(h,N.statusCode)}},[null==N?void 0:N.statusCode]),{items:null==N?void 0:N.items,hasMore:!!(null==N?void 0:N.nextCursor),nextCursor:null==N?void 0:N.nextCursor,isFetching:null==N?void 0:N.isFetching,totalItems:null==N?void 0:N.totalItems,hasFirstPageCompleted:null==N?void 0:N.hasFirstPageCompleted}}},36511:(e,t,a)=>{a.d(t,{I:()=>n});var r=a(56644);function n(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"}}},73477:(e,t,a)=>{a.r(t),a.d(t,{ClassroomGroupsView:()=>K});var r=a(32735),n=a(70680),o=a(23481),l=a(20354),s=a(87801),i=a(39151),c=a(31949),u=a(79612),m=a(37802),d=a(97958),g=a(83345),p=a(35223),v=a(99742),f=a(14070),h=a(97291),E="classrooms.manageClassroomGroupsEmptyState";function C(e){return r.createElement(g.D.Provider,{value:E},r.createElement(d.u,null,r.createElement(d.u.Image,{src:v.W.EmptyStates.Classrooms.GROUPS}),r.createElement(d.u.Heading,null,r.createElement(g.x,{phrase:"heading"})),r.createElement(d.u.Info,null,r.createElement(g.x,{phrase:"info"})),r.createElement(d.u.Cta,{text:o.T.getPhrase(E,"addGroups"),icon:p.vn.Plus,appLink:{application:h.O.CLASSROOMS,action:f.e.Classrooms.NEW_GROUP,args:[e.classroomId]}})))}var N=a(49985),k=a(65858),b=a(91693),y=a(86764),w=a(3747),S=a(81886),x=a(11607),F=a(12528),P=a(83914),I=a(36511);const G={colourColumn:"B2Gwz",groupContainer:"RXaVm"};var O=o.T.encloseNamespace("classrooms.manageClassroomGroupItem");function L(e){var t;return r.createElement(r.Fragment,null,r.createElement("div",{className:"d-flex align-items-center px-3 py-1"},r.createElement("div",{className:"".concat(G.colourColumn," flex-shrink-0 me-2")},r.createElement("div",{className:"".concat(G.groupContainer)},r.createElement(F.f,{svgName:p.vn.Group,variant:(0,I.I)(null===(t=e.group.metadata)||void 0===t?void 0:t.colour)}))),r.createElement("p",{className:"mb-0 me-auto clamp-2"},e.group.name),r.createElement(x.L,{className:"me-2",onClick:function(){N.k.logUserAction({id:e.group.id,name:e.group.name},{entity:k.py.ClassroomGroup,workflowPhase:k.eu.Start,actionType:k.Vw.Edit,location:k.LZ.ManageClassroomGroupListItem}),S.Q.C$.trigger({application:h.O.CLASSROOMS,action:f.e.Classrooms.EDIT_GROUP,args:[e.classroom.id,e.group.id]})}},r.createElement(P.x,{svgName:p.vn.Edit,title:O("editGroup"),tooltipPlacement:"top",tooltipSpanHack:!0})),r.createElement(x.L,{onClick:function(){N.k.logUserAction({id:e.group.id,name:e.group.name},{entity:k.py.ClassroomGroup,workflowPhase:k.eu.Start,actionType:k.Vw.Delete,location:k.LZ.ManageClassroomGroupListItem}),S.Q.C$.trigger({application:h.O.CLASSROOMS,action:f.e.Classrooms.DELETE_GROUP,args:[e.classroom.id,e.group.id]})}},r.createElement(P.x,{svgName:p.vn.Delete,title:O("deleteGroup"),tooltipPlacement:"top",tooltipSpanHack:!0}))))}const R={colourColumn:"TpyUA"};var T="classrooms.manageClassroomGroups",A=function(e){return{application:h.O.CLASSROOMS,action:f.e.Classrooms.NEW_GROUP,args:[e]}};function M(e){var t,a,n=(0,w.a)(y.r.XLDown);return(null===(t=e.groups)||void 0===t?void 0:t.length)?r.createElement(g.D.Provider,{value:T},r.createElement("div",{className:"py-2"},r.createElement("div",{className:"d-flex align-items-center mb-2 ".concat(n?"":"ps-3")},r.createElement("h2",{className:"h6 mb-0 me-2 ".concat(R.colourColumn)},r.createElement(g.x,{phrase:"colour"})),r.createElement("h2",{className:"h6 mb-0"},r.createElement(g.x,{phrase:"groupName"})),r.createElement(b.h,{appLink:A(e.classroom.id),onClick:function(){N.k.logUserAction({classroomId:e.classroom.id,classroomName:e.classroom.name},{workflowPhase:k.eu.Start,entity:k.py.ClassroomGroup,actionType:k.Vw.Create,location:k.LZ.ManageClassroomGroups})},className:"btn btn-outline-dark ms-auto",svgName:p.vn.Plus},r.createElement(g.x,{phrase:"createNew"}))),r.createElement("ul",{className:"striped-list list-unstyled"},!!(null===(a=e.groups)||void 0===a?void 0:a.length)&&e.groups.map(function(t){return r.createElement("li",{key:t.id},r.createElement(L,{classroom:e.classroom,group:t}))})))):r.createElement(C,{classroomId:e.classroom.id})}var U=a(49935),H=a(95278);const _={heading:"bhtoZ",nameHeading:"vytHM",colourHeading:"yLWgp",newGroup:"r5cCZ",group:"ED2Tj",colourPicker:"AYLSY",actionIcon:"BX3vN"};function B(){return r.createElement("div",{className:"px-3"},r.createElement("div",{className:"mb-1 partial-loading-background ".concat(_.heading)}),r.createElement("div",{className:"pb-3"},r.createElement(U.b2,{numItems:2})),r.createElement("div",{className:"pb-2"},r.createElement(H.Z,null)),r.createElement("div",{className:"py-2"},r.createElement("div",{className:"d-flex align-items-center"},r.createElement("div",{className:"w-25 mb-2"},r.createElement("div",{className:"partial-loading-background ".concat(_.nameHeading)})),r.createElement("div",{className:"w-25 mb-2"},r.createElement("div",{className:"partial-loading-background ".concat(_.colourHeading)})),r.createElement("div",{className:"partial-loading-background ms-auto ".concat(_.newGroup)})),r.createElement("ul",{className:"list-unstyled"},Array(8).fill(null).map(function(e,t){return r.createElement("li",{key:t,className:"mb-2"},r.createElement("div",{className:"d-flex align-items-center"},r.createElement("div",{className:"w-25"},r.createElement("div",{className:"partial-loading-background ".concat(_.group)})),r.createElement("div",{className:"d-inline-block me-4"},r.createElement("div",{className:"partial-loading-background ".concat(_.colourPicker)})),r.createElement("div",{className:"partial-loading-background me-2 ".concat(_.actionIcon)}),r.createElement("div",{className:"partial-loading-background ".concat(_.actionIcon)})))}))))}var V=a(88630),D=a(94644),j=a(69883),Z=a(60115),W=function(e){var t=l.a.useBasicFetch(c.N.currentUser()),a=(0,j.Z)(),r=(0,n.I0)(),s=function(t){return V.F.getClassroomGroups(e,t)},i=function(e){return l.a.getFetch(r)(s(e))},u=(0,Z.K)(!(!t.data||!e)&&s,i,function(e,t){if(1===e)return(0,D.r)(t);a.error(o.T.getPhrase("classrooms.hooks","error"))},function(e){return e.data});return Object.assign(Object.assign({},u),{fetchNext:i})},X=a(31491),$=a(22602),q=o.T.encloseNamespace("classrooms.classroomGroups");function K(e){var t,a,o,d,g,p=(0,m.r)(null).hasShareFlowV2,v=l.a.useBasicFetch(c.N.currentUser()),f=l.a.useBasicFetch(v.data&&V.F.getClassroom(e.id,v.data.id)),h=l.a.useBasicFetch(V.F.getClassroomStudents(e.id)),E=l.a.useBasicFetch(i.L.config()),N=W(null===(t=f.data)||void 0===t?void 0:t.id),k=(0,n.I0)();(0,u.M)({title:q("pageTitle",{classroomName:null===(a=f.data)||void 0===a?void 0:a.name})}),(0,X._)(f);var b=null===(d=null===(o=f.data)||void 0===o?void 0:o._integrations)||void 0===d?void 0:d.rostered;return f.data&&(null===(g=h.data)||void 0===g?void 0:g.data)&&N.items&&E.data?r.createElement($.R,{classroom:f.data,currentUser:v.data,onTogglePin:function(e,t,a){if(!b){var r=e?V.F.pinClassroom:V.F.unpinClassroom;l.a.fetch(k,r(f.data,t,a))}},activeTab:"groups",isRostered:b,hasShareFlowV2:p},(null==N?void 0:N.items.length)?r.createElement(r.Fragment,null,r.createElement(M,{classroom:f.data,groups:N.items}),(N.isFetching||N.nextCursor)&&r.createElement(s._,{isFetching:N.isFetching,fetchNext:N.fetchNext,nextCursor:N.nextCursor})):r.createElement(C,{classroomId:f.data.id})):r.createElement(B,null)}},99998:(e,t,a)=>{a.d(t,{R:()=>l});var r=a(16714),n=a(22902),o=a(37802);function l(){var e=(0,o.r)(null),t=e.hasShareFlowV2,a=e.hasClassrooms,l=e.isLoadingSettings,s=(0,n.T)(),i=s.hasPermissions,c=s.isLoaded;return{experience:a?i(r.C.ViewClassrooms)?"full":t?"minimal":void 0:"none",loading:l||!c}}}}]);
2
- //# sourceMappingURL=4621-7fb0a05bcb-lite.chunk.js.map
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4621],{60115:(e,t,a)=>{a.d(t,{K:()=>c});var r=a(32735),n=a(50242),o=a(91967),l=400,s=a(45719);function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=Array(t);a<t;a++)r[a]=e[a];return r}function c(e,t,a,c,u,m){var d,g,p,v,f=(d=(0,r.useState)(0),g=2,function(e){if(Array.isArray(e))return e}(d)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var r,n,o,l,s=[],i=!0,c=!1;try{if(o=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;i=!1}else for(;!(i=(r=o.call(a)).done)&&(s.push(r.value),s.length!==t);i=!0);}catch(e){c=!0,n=e}finally{try{if(!i&&null!=a.return&&(l=a.return(),Object(l)!==l))return}finally{if(c)throw n}}return s}}(d,g)||function(e,t){if(e){if("string"==typeof e)return i(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?i(e,t):void 0}}(d,g)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),h=f[0],E=f[1],C=t,N=(0,s.P)(function(t){if(!e)return null;var a=e(t);return a?a.key:null},c,u);return p={fetchNextPage:function(){if(t&&e&&N)return E(function(e){return e+1}),C(N.nextCursor)},hasMore:!!(null==N?void 0:N.nextCursor),isFetching:null==N?void 0:N.isFetching,scrollContainer:m},v=function(){if(!p.isFetching){if(p.scrollContainer){var e=p.scrollContainer;if(e.getBoundingClientRect().height+e.scrollTop<e.scrollHeight-l)return}else if(window.innerHeight+document.documentElement.scrollTop<document.documentElement.scrollHeight-l)return;p.fetchNextPage()}},(0,r.useEffect)(function(){var e=o.q.throttle(v,200),t=p.scrollContainer||window;return p.hasMore&&t.addEventListener("scroll",e),function(){return t.removeEventListener("scroll",e)}},[p.hasMore,p.fetchNextPage,p.scrollContainer]),(0,r.useEffect)(function(){N&&N.shouldInitialFetch&&t&&(C(),E(function(e){return e+1}))},[null==N?void 0:N.shouldInitialFetch,t]),(0,r.useEffect)(function(){var e,t;if((null==N?void 0:N.statusCode)&&o.q.isFunction(a)){var r=+(null===(t=null===(e=N.statusCode)||void 0===e?void 0:e.toString())||void 0===t?void 0:t.substr(0,1));r!==n.k.ClientError&&r!==n.k.ServerError||a(h,N.statusCode)}},[null==N?void 0:N.statusCode]),{items:null==N?void 0:N.items,hasMore:!!(null==N?void 0:N.nextCursor),nextCursor:null==N?void 0:N.nextCursor,isFetching:null==N?void 0:N.isFetching,totalItems:null==N?void 0:N.totalItems,hasFirstPageCompleted:null==N?void 0:N.hasFirstPageCompleted}}},36511:(e,t,a)=>{a.d(t,{I:()=>n});var r=a(56644);function n(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"}}},73477:(e,t,a)=>{a.r(t),a.d(t,{ClassroomGroupsView:()=>K});var r=a(32735),n=a(70680),o=a(23481),l=a(20354),s=a(87801),i=a(39151),c=a(31949),u=a(79612),m=a(37802),d=a(97958),g=a(83345),p=a(35223),v=a(99742),f=a(14070),h=a(97291),E="classrooms.manageClassroomGroupsEmptyState";function C(e){return r.createElement(g.D.Provider,{value:E},r.createElement(d.u,null,r.createElement(d.u.Image,{src:v.W.EmptyStates.Classrooms.GROUPS}),r.createElement(d.u.Heading,null,r.createElement(g.x,{phrase:"heading"})),r.createElement(d.u.Info,null,r.createElement(g.x,{phrase:"info"})),r.createElement(d.u.Cta,{text:o.T.getPhrase(E,"addGroups"),icon:p.vn.Plus,appLink:{application:h.O.CLASSROOMS,action:f.e.Classrooms.NEW_GROUP,args:[e.classroomId]}})))}var N=a(49985),k=a(65858),b=a(91693),y=a(86764),w=a(3747),S=a(81886),x=a(11607),F=a(12528),P=a(83914),G=a(36511);const I={colourColumn:"B2Gwz",groupContainer:"RXaVm"};var O=o.T.encloseNamespace("classrooms.manageClassroomGroupItem");function L(e){var t;return r.createElement(r.Fragment,null,r.createElement("div",{className:"d-flex align-items-center px-3 py-1"},r.createElement("div",{className:"".concat(I.colourColumn," flex-shrink-0 me-2")},r.createElement("div",{className:"".concat(I.groupContainer)},r.createElement(F.f,{svgName:p.vn.Group,variant:(0,G.I)(null===(t=e.group.metadata)||void 0===t?void 0:t.colour)}))),r.createElement("p",{className:"mb-0 me-auto clamp-2"},e.group.name),r.createElement(x.L,{className:"me-2",onClick:function(){N.k.logUserAction({id:e.group.id,name:e.group.name},{entity:k.py.ClassroomGroup,workflowPhase:k.eu.Start,actionType:k.Vw.Edit,location:k.LZ.ManageClassroomGroupListItem}),S.Q.C$.trigger({application:h.O.CLASSROOMS,action:f.e.Classrooms.EDIT_GROUP,args:[e.classroom.id,e.group.id]})}},r.createElement(P.x,{svgName:p.vn.Edit,title:O("editGroup"),tooltipPlacement:"top",tooltipSpanHack:!0})),r.createElement(x.L,{onClick:function(){N.k.logUserAction({id:e.group.id,name:e.group.name},{entity:k.py.ClassroomGroup,workflowPhase:k.eu.Start,actionType:k.Vw.Delete,location:k.LZ.ManageClassroomGroupListItem}),S.Q.C$.trigger({application:h.O.CLASSROOMS,action:f.e.Classrooms.DELETE_GROUP,args:[e.classroom.id,e.group.id]})}},r.createElement(P.x,{svgName:p.vn.Delete,title:O("deleteGroup"),tooltipPlacement:"top",tooltipSpanHack:!0}))))}const R={colourColumn:"TpyUA"};var T="classrooms.manageClassroomGroups",A=function(e){return{application:h.O.CLASSROOMS,action:f.e.Classrooms.NEW_GROUP,args:[e]}};function M(e){var t,a,n=(0,w.a)(y.r.XLDown);return(null===(t=e.groups)||void 0===t?void 0:t.length)?r.createElement(g.D.Provider,{value:T},r.createElement("div",{className:"py-2"},r.createElement("div",{className:"d-flex align-items-center mb-2 ".concat(n?"":"ps-3")},r.createElement("h2",{className:"h6 mb-0 me-2 ".concat(R.colourColumn)},r.createElement(g.x,{phrase:"colour"})),r.createElement("h2",{className:"h6 mb-0"},r.createElement(g.x,{phrase:"groupName"})),r.createElement(b.h,{appLink:A(e.classroom.id),onClick:function(){N.k.logUserAction({classroomId:e.classroom.id,classroomName:e.classroom.name},{workflowPhase:k.eu.Start,entity:k.py.ClassroomGroup,actionType:k.Vw.Create,location:k.LZ.ManageClassroomGroups})},className:"btn btn-outline-dark ms-auto",svgName:p.vn.Plus},r.createElement(g.x,{phrase:"createNew"}))),r.createElement("ul",{className:"striped-list list-unstyled"},!!(null===(a=e.groups)||void 0===a?void 0:a.length)&&e.groups.map(function(t){return r.createElement("li",{key:t.id},r.createElement(L,{classroom:e.classroom,group:t}))})))):r.createElement(C,{classroomId:e.classroom.id})}var U=a(49935),H=a(95278);const _={heading:"bhtoZ",nameHeading:"vytHM",colourHeading:"yLWgp",newGroup:"r5cCZ",group:"ED2Tj",colourPicker:"AYLSY",actionIcon:"BX3vN"};function V(){return r.createElement("div",{className:"px-3"},r.createElement("div",{className:"mb-1 partial-loading-background ".concat(_.heading)}),r.createElement("div",{className:"pb-3"},r.createElement(U.b2,{numItems:2})),r.createElement("div",{className:"pb-2"},r.createElement(H.Z,null)),r.createElement("div",{className:"py-2"},r.createElement("div",{className:"d-flex align-items-center"},r.createElement("div",{className:"w-25 mb-2"},r.createElement("div",{className:"partial-loading-background ".concat(_.nameHeading)})),r.createElement("div",{className:"w-25 mb-2"},r.createElement("div",{className:"partial-loading-background ".concat(_.colourHeading)})),r.createElement("div",{className:"partial-loading-background ms-auto ".concat(_.newGroup)})),r.createElement("ul",{className:"list-unstyled"},Array(8).fill(null).map(function(e,t){return r.createElement("li",{key:t,className:"mb-2"},r.createElement("div",{className:"d-flex align-items-center"},r.createElement("div",{className:"w-25"},r.createElement("div",{className:"partial-loading-background ".concat(_.group)})),r.createElement("div",{className:"d-inline-block me-4"},r.createElement("div",{className:"partial-loading-background ".concat(_.colourPicker)})),r.createElement("div",{className:"partial-loading-background me-2 ".concat(_.actionIcon)}),r.createElement("div",{className:"partial-loading-background ".concat(_.actionIcon)})))}))))}var B=a(88630),D=a(94644),j=a(69883),Z=a(60115),W=function(e){var t=l.a.useBasicFetch(c.N.currentUser()),a=(0,j.Z)(),r=(0,n.I0)(),s=function(t){return B.F.getClassroomGroups(e,t)},i=function(e){return l.a.getFetch(r)(s(e))},u=(0,Z.K)(!(!t.data||!e)&&s,i,function(e,t){if(1===e)return(0,D.r)(t);a.error(o.T.getPhrase("classrooms.hooks","error"))},function(e){return e.data});return Object.assign(Object.assign({},u),{fetchNext:i})},X=a(31491),$=a(22602),q=o.T.encloseNamespace("classrooms.classroomGroups");function K(e){var t,a,o,d,g,p=(0,m.r)(null).hasShareFlowV2,v=l.a.useBasicFetch(c.N.currentUser()),f=l.a.useBasicFetch(v.data&&B.F.getClassroom(e.id,v.data.id)),h=l.a.useBasicFetch(B.F.getClassroomStudents(e.id)),E=l.a.useBasicFetch(i.L.config()),N=W(null===(t=f.data)||void 0===t?void 0:t.id),k=(0,n.I0)();(0,u.M)({title:q("pageTitle",{classroomName:null===(a=f.data)||void 0===a?void 0:a.name})}),(0,X._)(f);var b=null===(d=null===(o=f.data)||void 0===o?void 0:o._integrations)||void 0===d?void 0:d.rostered;return f.data&&(null===(g=h.data)||void 0===g?void 0:g.data)&&N.items&&E.data?r.createElement($.R,{classroom:f.data,currentUser:v.data,onTogglePin:function(e,t,a){if(!b){var r=e?B.F.pinClassroom:B.F.unpinClassroom;l.a.fetch(k,r(f.data,t,a))}},activeTab:"groups",isRostered:b,hasShareFlowV2:p},(null==N?void 0:N.items.length)?r.createElement(r.Fragment,null,r.createElement(M,{classroom:f.data,groups:N.items}),(N.isFetching||N.nextCursor)&&r.createElement(s._,{isFetching:N.isFetching,fetchNext:N.fetchNext,nextCursor:N.nextCursor})):r.createElement(C,{classroomId:f.data.id})):r.createElement(V,null)}},99998:(e,t,a)=>{a.d(t,{R:()=>l});var r=a(16714),n=a(22902),o=a(37802);function l(){var e=(0,o.r)(null),t=e.hasShareFlowV2,a=e.hasClassrooms,l=e.isLoadingSettings,s=(0,n.T)(),i=s.hasPermissions,c=s.isLoaded,u=s.getGatedPermission;return{experience:a?"soft-gate"===u(r.C.ViewClassrooms)?"minimal":i(r.C.ViewClassrooms)?"full":t?"minimal":void 0:"none",loading:l||!c}}}}]);
2
+ //# sourceMappingURL=4621-1f79d94416-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/4621-1f79d94416-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/hooks/UseInfiniteScroll.ts","file:///app/packages/libs/shared/src/hooks/UseInfiniteList.ts","file:///app/packages/libs/shared/src/utils/GroupHelper.ts","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-groups/empty-state/ManageClassroomGroupsEmptyState.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-group-item/manage-classroom-group-item.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-group-item/ManageClassroomGroupItem.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-groups/manage-classroom-groups.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-groups/ManageClassroomGroups.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-groups/partial-loading/partial-manage-classrooms-groups.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-groups/partial-loading/PartialManageClassroomGroups.tsx","file:///app/packages/projects/lite/src/apps/classrooms/hooks/useFetchClassroomGroups.ts","file:///app/packages/projects/lite/src/apps/classrooms/views/classroom-groups/ClassroomGroupsView.tsx","file:///app/packages/projects/lite/src/shared/hooks/useClassroomExperience.ts"],"sourcesContent":["import { useEffect } from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nconst SCROLL_TOLERANCE = 400; // value in px\n\ninterface UseInfiniteScrollOptions {\n fetchNextPage: () => void;\n hasMore: boolean;\n isFetching: boolean;\n scrollContainer?: HTMLElement;\n}\n\nexport function useInfiniteScroll(options: UseInfiniteScrollOptions): void {\n const handleScroll = (): void => {\n if (options.isFetching)\n return;\n\n if (!options.scrollContainer) {\n const currentScrollHeight = window.innerHeight + document.documentElement.scrollTop;\n \n const totalHeight = document.documentElement.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n } else {\n const { scrollContainer } = options;\n const currentScrollHeight = scrollContainer.getBoundingClientRect().height + scrollContainer.scrollTop;\n \n const totalHeight = scrollContainer.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n }\n\n options.fetchNextPage();\n };\n\n useEffect(() => {\n const onScroll = FunctionHelper.throttle(handleScroll, 200);\n\n const scrollContainer = options.scrollContainer || window;\n\n if (options.hasMore)\n scrollContainer.addEventListener('scroll', onScroll);\n\n return () => scrollContainer.removeEventListener('scroll', onScroll);\n }, [ options.hasMore, options.fetchNextPage, options.scrollContainer ]);\n}","import { useEffect, useState } from 'react';\n\nimport { HttpStatus, HttpStatusClass } from 'libs/common/backbone/enums/HttpStatus';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { BaseObject, BasePaginatedCollection } from 'libs/shared/interfaces';\n\nimport { useInfiniteScroll } from './UseInfiniteScroll';\nimport { useSelectAllPages } from './UseSelectAllPages';\n\nexport interface UseInfiniteListResult<T extends BaseObject> {\n items: T[];\n hasMore: boolean;\n isFetching: boolean;\n nextCursor: string;\n totalItems?: number;\n hasFirstPageCompleted: boolean;\n}\n\n/**\n * Hook to extract an infinite list from the application state,\n * save it locally in state and only update when new data\n * is fetched.\n * \n * @param getRequest - callback function to get the request for each page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n * \n * @param fetchNext - callback function to fetch a page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n */\nexport function useInfiniteList<TObject = BaseObject, TResponse = BasePaginatedCollection<TObject>>(\n getRequest: ((cursor?: string) => Flight.Request) | false,\n fetchNext: ((cursor?: string) => void) | false,\n onError?: (pageNumber: number, statusCode: HttpStatus) => void,\n getItems?: (responseData: TResponse) => TObject[],\n getCursor?: (responseData: TResponse) => string,\n scrollContainer?: HTMLElement\n): UseInfiniteListResult<TObject> {\n const [ pagesFetched, setPagesFetched ] = useState(0);\n\n const fetchNextFn = fetchNext as (cursor?: string) => void;\n\n function getKey(cursor?: string): string {\n if (!getRequest)\n return null;\n\n const request = getRequest(cursor);\n\n if (!request)\n return null;\n\n return request.key;\n }\n\n const response = useSelectAllPages<TObject, TResponse>(\n getKey,\n getItems,\n getCursor\n );\n\n function fetchNextPage(): void {\n if (!fetchNext || !getRequest || !response)\n return;\n\n setPagesFetched(currentVal => currentVal + 1);\n return fetchNextFn(response.nextCursor);\n }\n\n useInfiniteScroll({\n fetchNextPage,\n hasMore: !!response?.nextCursor,\n isFetching: response?.isFetching,\n scrollContainer\n });\n\n useEffect(() => {\n if (!response)\n return;\n\n if (response.shouldInitialFetch && fetchNext) {\n fetchNextFn();\n setPagesFetched(currentVal => currentVal + 1);\n }\n }, [ response?.shouldInitialFetch, fetchNext ]);\n\n useEffect(() => {\n if (!response?.statusCode || !FunctionHelper.isFunction(onError))\n return;\n\n const httpStatusClass: HttpStatusClass = +(response.statusCode?.toString()?.substr(0, 1));\n\n if (httpStatusClass !== HttpStatusClass.ClientError && httpStatusClass !== HttpStatusClass.ServerError)\n return;\n\n onError(pagesFetched, response.statusCode);\n }, [response?.statusCode]);\n\n return {\n items: response?.items,\n hasMore: !!response?.nextCursor,\n nextCursor: response?.nextCursor,\n isFetching: response?.isFetching,\n totalItems: response?.totalItems,\n hasFirstPageCompleted: response?.hasFirstPageCompleted\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 { 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 { 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\nconst namespace = 'classrooms.manageClassroomGroupsEmptyState';\n\ninterface ManageClassroomGroupsEmptyStateProps {\n classroomId: string;\n}\n\nexport function RosteredClassroomGroupsEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.GROUPS} />\n\n <EmptyState.Heading><Text phrase='heading' /></EmptyState.Heading>\n\n <EmptyState.Info className='mb-2'><Text phrase='info' /></EmptyState.Info>\n\n {/* todo add kb link */}\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\nexport function ManageClassroomGroupsEmptyState(props: ManageClassroomGroupsEmptyStateProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.GROUPS} />\n\n <EmptyState.Heading><Text phrase='heading' /></EmptyState.Heading>\n\n <EmptyState.Info><Text phrase='info' /></EmptyState.Info>\n\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'addGroups')}\n icon={cvSvgLibrary.Plus}\n appLink={{\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.NEW_GROUP,\n args: [props.classroomId]\n }}\n />\n\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"colourColumn\":\"B2Gwz\",\"groupContainer\":\"RXaVm\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ClassroomGroup } from 'libs/shared/interfaces';\nimport { Classroom } from 'libs/shared/interfaces';\nimport { mapColourToBsVariant } from 'libs/shared/utils/GroupHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport styles from './manage-classroom-group-item.scss';\n\nconst getPhrase = LanguageService.encloseNamespace('classrooms.manageClassroomGroupItem');\n\ninterface ManageClassroomGroupItemProps {\n classroom: Classroom;\n group: ClassroomGroup;\n}\n\nexport function ManageClassroomGroupItem(props: ManageClassroomGroupItemProps): JSX.Element {\n function onClickEdit(): void {\n AnalyticsHelper.logUserAction({ id: props.group.id, name: props.group.name }, {\n entity: EntityType.ClassroomGroup,\n workflowPhase: WorkflowPhase.Start,\n actionType: UserAction.Edit,\n location: LocationContext.ManageClassroomGroupListItem\n });\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.EDIT_GROUP,\n args: [ props.classroom.id, props.group.id ]\n });\n }\n\n function onClickDelete(): void {\n AnalyticsHelper.logUserAction({ id: props.group.id, name: props.group.name }, {\n entity: EntityType.ClassroomGroup,\n workflowPhase: WorkflowPhase.Start,\n actionType: UserAction.Delete,\n location: LocationContext.ManageClassroomGroupListItem\n });\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.DELETE_GROUP,\n args: [ props.classroom.id, props.group.id ]\n });\n }\n\n return (\n <>\n <div className='d-flex align-items-center px-3 py-1'>\n <div className={`${styles.colourColumn} flex-shrink-0 me-2`}>\n <div className={`${styles.groupContainer}`}>\n <IconCircle svgName={cvSvgLibrary.Group} variant={mapColourToBsVariant(props.group.metadata?.colour)} />\n </div>\n </div>\n\n <p className='mb-0 me-auto clamp-2'>{props.group.name}</p>\n\n <DivButton className='me-2' onClick={onClickEdit}>\n <SvgContainer\n svgName={cvSvgLibrary.Edit}\n title={getPhrase('editGroup')}\n tooltipPlacement='top'\n tooltipSpanHack\n />\n </DivButton>\n\n <DivButton onClick={onClickDelete}>\n <SvgContainer\n svgName={cvSvgLibrary.Delete}\n title={getPhrase('deleteGroup')}\n tooltipPlacement='top'\n tooltipSpanHack\n />\n </DivButton>\n </div>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"colourColumn\":\"TpyUA\"};","import * as React from 'react';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\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 { ManageClassroomGroupItem } from 'apps/classrooms/components/manage-classroom-group-item/ManageClassroomGroupItem';\n\nimport { ManageClassroomGroupsEmptyState } from './empty-state/ManageClassroomGroupsEmptyState';\n\nimport styles from './manage-classroom-groups.scss';\n\nconst namespace = 'classrooms.manageClassroomGroups';\n\nconst getCreateGroupAppLink = (id: string) => ({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.NEW_GROUP,\n args: [id]\n});\n\ninterface ManageClassroomGroupsProps {\n classroom: Classroom;\n groups: ClassroomGroup[];\n}\n\nexport function ManageClassroomGroups(props: ManageClassroomGroupsProps): JSX.Element {\n function onClickCreateGroup(): void {\n AnalyticsHelper.logUserAction({\n classroomId: props.classroom.id,\n classroomName: props.classroom.name\n }, {\n workflowPhase: WorkflowPhase.Start,\n entity: EntityType.ClassroomGroup,\n actionType: UserAction.Create,\n location: LocationContext.ManageClassroomGroups\n });\n }\n\n const isSmallScreen = useMediaQuery(MediaQueryStrings.XLDown);\n\n if (!props.groups?.length)\n return <ManageClassroomGroupsEmptyState classroomId={props.classroom.id} />;\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <div className='py-2'>\n <div className={`d-flex align-items-center mb-2 ${!isSmallScreen ? 'ps-3' : ''}`}>\n <h2 className={`h6 mb-0 me-2 ${styles.colourColumn}`}><Text phrase='colour' /></h2>\n <h2 className='h6 mb-0'><Text phrase='groupName' /></h2>\n <IconButton\n appLink={getCreateGroupAppLink(props.classroom.id)}\n onClick={onClickCreateGroup}\n className='btn btn-outline-dark ms-auto'\n svgName={cvSvgLibrary.Plus}\n >\n <Text phrase='createNew' />\n </IconButton>\n </div>\n\n <ul className='striped-list list-unstyled'>\n {!!props.groups?.length && props.groups.map(group => (\n <li key={group.id}>\n <ManageClassroomGroupItem classroom={props.classroom} group={group} />\n </li>\n ))}\n </ul>\n </div>\n </LanguageNamespaceContext.Provider>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"heading\":\"bhtoZ\",\"nameHeading\":\"vytHM\",\"colourHeading\":\"yLWgp\",\"newGroup\":\"r5cCZ\",\"group\":\"ED2Tj\",\"colourPicker\":\"AYLSY\",\"actionIcon\":\"BX3vN\"};","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-classrooms-groups.scss';\n\nexport function PartialManageClassroomGroups(): 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='py-2'>\n <div className='d-flex align-items-center'>\n {/* Name heading */}\n <div className='w-25 mb-2'>\n <div className={`partial-loading-background ${styles.nameHeading}`} />\n </div>\n {/* Colour heading */}\n <div className='w-25 mb-2'>\n <div className={`partial-loading-background ${styles.colourHeading}`} />\n </div>\n\n {/* New group button */}\n <div className={`partial-loading-background ms-auto ${styles.newGroup}`} />\n </div>\n\n {/* List of partial group items */}\n <ul className='list-unstyled'>\n {Array(8).fill(null).map((group, i) => (\n <li key={i} className='mb-2'>\n <div className='d-flex align-items-center'>\n {/* Group name */}\n <div className='w-25'>\n <div className={`partial-loading-background ${styles.group}`} />\n </div>\n\n {/* Colour picker */}\n <div className='d-inline-block me-4'>\n <div className={`partial-loading-background ${styles.colourPicker}`} />\n </div>\n\n {/* Edit action */}\n <div className={`partial-loading-background me-2 ${styles.actionIcon}`} />\n {/* Delete action */}\n <div className={`partial-loading-background ${styles.actionIcon}`} />\n </div>\n </li>\n ))}\n </ul>\n </div>\n </div>\n );\n}","import { useDispatch } from 'react-redux';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useInfiniteList, UseInfiniteListResult } from 'libs/shared/hooks/UseInfiniteList';\nimport { ClassroomGroup, ClassroomGroupCollection, CurrentUser } from 'libs/shared/interfaces';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\n\nconst namespace = 'classrooms.hooks';\n\nexport type GetClassroomsResponse = UseInfiniteListResult<ClassroomGroup> & {\n fetchNext: (cursor?: string) => void;\n};\n\nexport const useFetchClassroomGroups = (classroomId: string): GetClassroomsResponse => {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const alerts = useAlerts();\n const dispatch = useDispatch();\n\n const getClassroomsRequest = (cursor?: string) => {\n return ClassroomRequests.getClassroomGroups(classroomId, cursor);\n };\n\n const fetchNextPage = (cursor?: string) => Flight.getFetch(dispatch)(getClassroomsRequest(cursor));\n\n function onError(pageNumber: number, httpStatus: HttpStatus): void {\n if (pageNumber === 1)\n return handleHttpError(httpStatus);\n\n alerts.error(LanguageService.getPhrase(namespace, 'error'));\n }\n\n const response = useInfiniteList<ClassroomGroup, ClassroomGroupCollection>(\n currentUser.data && classroomId ? getClassroomsRequest : false,\n fetchNextPage,\n onError,\n response => {\n return (response as ClassroomGroupCollection).data;\n }\n );\n\n return {\n ...response,\n fetchNext: fetchNextPage\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 { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Classroom, Config, CurrentUser, UserCollection } from 'libs/shared/interfaces';\n\nimport { ManageClassroomGroupsEmptyState } from 'apps/classrooms/components/manage-classroom-groups/empty-state/ManageClassroomGroupsEmptyState';\nimport { ManageClassroomGroups } from 'apps/classrooms/components/manage-classroom-groups/ManageClassroomGroups';\nimport { PartialManageClassroomGroups } from 'apps/classrooms/components/manage-classroom-groups/partial-loading/PartialManageClassroomGroups';\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { useFetchClassroomGroups } from 'apps/classrooms/hooks/useFetchClassroomGroups';\nimport { useHandleClassroomErrors } from 'apps/classrooms/hooks/useHandleClassroomErrors';\nimport { ClassroomLayout } from 'apps/classrooms/layouts/ClassroomLayout';\n\nconst namespace = 'classrooms.classroomGroups';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ClassroomGroupsViewProps {\n id: string;\n}\n\nexport function ClassroomGroupsView(props: ClassroomGroupsViewProps): JSX.Element {\n const { hasShareFlowV2 } = useSettings(null);\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 config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const classroomGroupsResponse = useFetchClassroomGroups(classroom.data?.id);\n\n const dispatch = useDispatch();\n\n useSetPageMetadata({\n title: getPhrase('pageTitle', { classroomName: classroom.data?.name })\n });\n useHandleClassroomErrors(classroom);\n\n const isRostered = classroom.data?._integrations?.rostered;\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 const isFetchingClassrooms =\n !classroom.data ||\n !students.data?.data ||\n !classroomGroupsResponse.items ||\n !config.data;\n\n if (isFetchingClassrooms)\n return <PartialManageClassroomGroups />;\n\n return (\n <ClassroomLayout\n classroom={classroom.data}\n currentUser={currentUser.data}\n onTogglePin={onTogglePin}\n activeTab='groups'\n isRostered={isRostered}\n hasShareFlowV2={hasShareFlowV2}\n >\n {classroomGroupsResponse?.items.length ? (\n <>\n <ManageClassroomGroups\n classroom={classroom.data}\n groups={classroomGroupsResponse.items}\n />\n {(classroomGroupsResponse.isFetching || classroomGroupsResponse.nextCursor) && (\n <InfiniteScrollFooter\n isFetching={classroomGroupsResponse.isFetching}\n fetchNext={classroomGroupsResponse.fetchNext}\n nextCursor={classroomGroupsResponse.nextCursor}\n />\n )}\n </>\n ) : <ManageClassroomGroupsEmptyState classroomId={classroom.data.id} />}\n </ClassroomLayout>\n );\n}\n","import { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\n\ntype ClassroomExperience = 'none' | 'minimal' | 'full';\n\nexport function useClassroomExperience() {\n const { hasShareFlowV2, hasClassrooms, isLoadingSettings } = useSettings(null);\n const { hasPermissions, isLoaded, getGatedPermission } = usePermissions();\n\n function getExperience(): ClassroomExperience {\n if (!hasClassrooms)\n return 'none';\n\n if (getGatedPermission(PermissionName.ViewClassrooms) === 'soft-gate')\n return 'minimal';\n\n if (hasPermissions(PermissionName.ViewClassrooms))\n return 'full';\n \n if (hasShareFlowV2)\n return 'minimal';\n }\n\n return {\n experience: getExperience(),\n loading: isLoadingSettings || !isLoaded\n };\n}"],"names":["SCROLL_TOLERANCE","useInfiniteList","getRequest","fetchNext","onError","getItems","getCursor","scrollContainer","options","handleScroll","useState","pagesFetched","setPagesFetched","fetchNextFn","response","cursor","request","key","fetchNextPage","currentVal","nextCursor","hasMore","isFetching","getBoundingClientRect","height","scrollTop","scrollHeight","window","innerHeight","document","documentElement","useEffect","onScroll","FunctionHelper","addEventListener","removeEventListener","shouldInitialFetch","statusCode","httpStatusClass","toString","substr","HttpStatus","items","totalItems","hasFirstPageCompleted","mapColourToBsVariant","groupColour","namespace","ManageClassroomGroupsEmptyState","props","value","src","phrase","text","icon","appLink","application","action","args","classroomId","getPhrase","ManageClassroomGroupItem","className","IconCircle","svgName","variant","group","metadata","colour","name","DivButton","onClick","AnalyticsHelper","id","entity","workflowPhase","actionType","location","classroom","SvgContainer","title","tooltipPlacement","tooltipSpanHack","getCreateGroupAppLink","ManageClassroomGroups","isSmallScreen","groups","length","IconButton","classroomName","map","PartialManageClassroomGroups","numItems","PartialPillTabSelector","Array","fill","i","useFetchClassroomGroups","currentUser","UserRequests","alerts","dispatch","getClassroomsRequest","ClassroomRequests","data","pageNumber","httpStatus","error","ClassroomGroupsView","hasShareFlowV2","useSettings","students","config","ConfigRequests","classroomGroupsResponse","useSetPageMetadata","useHandleClassroomErrors","isRostered","_integrations","rostered","ClassroomLayout","onTogglePin","shouldPin","onSuccess","activeTab","InfiniteScrollFooter","useClassroomExperience","hasClassrooms","isLoadingSettings","hasPermissions","isLoaded","getGatedPermission","experience","loading"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4806],{34079:(e,t,n)=>{n.d(t,{O:()=>o});var r=n(32735),a=n(23481),l=n(40782),i=n(36532),c=a.T.encloseNamespace("interactives.pendingIndicator");function s(e){var t="d-flex align-items-center h-100";return t+=e.showLabel?" justify-content-between":" justify-content-center",e.className&&(t+=" ".concat(e.className)),t}function o(e){var t=e.title,n=e.showLabel,a=e.tooltipClassName,o=e.showIndicator,u=void 0===o||o,m=function(){return r.createElement("div",{className:s(e)},!!n&&r.createElement("em",null,c("pending")),!!u&&r.createElement(l.O,null))};return t?r.createElement(i.u,{title:t,spanHack:!0,spanHackClassName:a||"h-100 w-100 d-flex align-items-center"},r.createElement(m,null)):r.createElement(m,null)}},84806:(e,t,n)=>{n.d(t,{Ju:()=>T,bB:()=>H,l8:()=>z,R7:()=>j,lE:()=>A,Fx:()=>D});var r=n(32735),a=n(23481),l=n(75896),i=n(34079),c=n(26136),s=n(39157),o=n(97364),u=n(77640),m=n(97408),d=n(40782),v=n(83914),f=n(80845),g=n(64818),p=n(26378),y=n(71151),h=n(93264),E=n(84120);function w(e){return e.duration?r.createElement(r.Fragment,null,e.interactive.timepoints.map(function(t,n){if(!t.interactions.length)return r.createElement(r.Fragment,null);var a,l,i=(a=t,l=e.selectedInteraction,a.interactions.find(function(e){return e.id===l.id})||a.interactions[0]),c=i.id===e.selectedInteraction.id,s=c?E.w.getTypeInfo(i.typeId).bgClassName:"bg-gray-500",o=t.visibleAt/1e3/e.duration*100;return r.createElement("div",{key:n,className:"".concat("Wf1bl"," text-center"),style:{left:"".concat(o,"%")}},r.createElement("div",{className:"".concat("Fpm49"," ").concat(s)}),!!c&&r.createElement("div",null,h.T.ToDisplayDuration(t.visibleAt)))})):r.createElement(r.Fragment,null)}var b=n(86572);var N=a.T.encloseNamespace("shared.interactionResultsSummary");function C(e){var t,n=r.useMemo(function(){return(0,s.nq)(e.interaction,e.results)},[e.interaction,e.results]);return r.createElement("div",{className:"px-1 pt-1"},r.createElement("div",{className:"d-flex"},r.createElement(b.y,{interaction:e.interaction,iconClassName:"flex-shrink-0"})),r.createElement("div",{className:"my-4 ".concat("FCXQd")},r.createElement(w,{interactive:e.interactive,duration:(t=e.interactiveMetadata,t._parentClip?t._parentClip.endTime-t._parentClip.startTime:t._parentVideo.duration?t._parentVideo.duration/1e3:0),selectedInteraction:e.interaction})),r.createElement("div",{className:"row pt-1 pb-2"},r.createElement("div",{className:"col-6 pe-1"},r.createElement("div",{className:"bg-light rounded p-2 h-100"},!n.awaitingMarking&&r.createElement("div",{className:"d-flex align-items-center justify-content-between"},r.createElement("strong",null,N("correctlyAnswered")),r.createElement(d.O,{percentage:n.percentCorrect,layout:d.I.LabelOnly})),!!n.awaitingMarking&&r.createElement("div",{className:"d-flex align-items-center justify-content-center"},r.createElement("strong",null,r.createElement("em",null,N("pending")))))),r.createElement("div",{className:"col-6 ps-1"},r.createElement("div",{className:"bg-light rounded h-100 p-2 d-flex align-items-center justify-content-between"},r.createElement("strong",null,N("unanswered")),r.createElement("span",null,n.unanswered)))))}var x=r.forwardRef(function(e,t){var n=e.interaction,a=e.interactive,l=e.interactiveMetadata,i=e.results,c=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n}(e,["interaction","interactive","interactiveMetadata","results"]);return r.createElement("div",{className:"popover-lg"},r.createElement(y.Z,Object.assign({id:"interaction-results-summary-".concat(n.id),ref:t},c),r.createElement(y.Z.Body,null,r.createElement(C,{interaction:n,interactive:a,interactiveMetadata:l,results:i}))))}),S=n(19912);function k(e){var t;return r.createElement(p.Z,{trigger:(null===(t=e.results.students)||void 0===t?void 0:t.length)?"click":null,placement:"bottom",overlay:r.createElement(x,{interaction:e.interaction,interactive:e.interactive,interactiveMetadata:e.interactiveMetadata,results:e.results}),rootClose:!0},r.createElement("div",{className:"text-center h-100\n d-flex align-items-center justify-content-center\n ".concat(S.Z.interactionHeaderCellInner),onMouseEnter:e.onMouseEnter,onMouseLeave:e.onMouseLeave},r.createElement("div",{className:"p-1 position-relative"},e.interactionNumber)))}var M=n(28972),I=n(83140),R=n(35223);function Z(e){var t="".concat(S.Z.resultsCellInner," h-100 position-relative");return e===M.w.Correct&&(t+=" ".concat(S.Z.correct)),e===M.w.Incorrect&&(t+=" ".concat(S.Z.incorrect," text-danger")),e===M.w.AwaitingMarking&&(t+=" ".concat(S.Z.awaitingMarking)),e===M.w.UnAnswered&&(t+=" ".concat(S.Z.unanswered," text-warning")),t}function L(e){var t=I.A.isInteractionCorrect(e.interaction,(0,f.j_)(e.studentResults)),n=function(e){return e===M.w.Correct?R.vn.Check:e===M.w.Incorrect?R.vn.Close:e===M.w.UnAnswered?R.vn.Minus:void 0}(t);return r.createElement("div",{className:Z(t)},!!n&&r.createElement(v.x,{svgName:n}),t===M.w.AwaitingMarking&&r.createElement(i.O,null))}var O=a.T.encloseNamespace("shared.studentResultsTable"),T=60;function B(e,t){var n;if(e.sessionId||e.deleted||t){var r=(0,c.B)(e,t).split(" ").filter(function(e){return!!e});return{name:r[0],surname:r.slice(1).join(" ")||"",avatarUrl:null}}return{name:e.displayName||e.name,surname:e.surname||"",avatarUrl:null===(n=e.avatar)||void 0===n?void 0:n.url}}function U(e){var t;return r.createElement("div",{className:"d-flex align-items-center p-2 h-100 ".concat(null!==(t=e.className)&&void 0!==t?t:"")},e.children)}function _(e){return r.createElement(U,{className:e.column.isSorted&&"fw-bold"},O(e.phraseKey))}function j(e,t,n,a){var l,s=!!(null===(l=e.students)||void 0===l?void 0:l.length);return r.useMemo(function(){var e=[];return a?e.push({id:"firstName",Header:function(e){var t=e.column;return r.createElement(_,{column:t,phraseKey:"firstName"})},accessor:function(e){return e},width:130,Cell:function(e){var a=e.value,l=B(a.user,t),i=l.name,c=l.surname,s=l.avatarUrl;return r.createElement(U,null,r.createElement("div",{className:"d-inline-block flex-shrink-0 p-1 ".concat(S.Z.avatar)},r.createElement(m.q,{imageUrl:s,imageCdnUrl:n,initials:g.l.getInitials(i,c),showAnonymousUser:!(t||!a.user.sessionId&&!a.user.deleted),anonymiseUsers:t,anonymousSvgSize:v.S.Small})),r.createElement("div",{className:"ms-2 overflow-hidden"},r.createElement("h4",{className:"font-size-normal fw-normal m-0 text-truncate"},i)))},disableSortBy:!s},{id:"surname",Header:function(e){var t=e.column;return r.createElement(_,{column:t,phraseKey:"surname"})},accessor:function(e){return e},width:130,Cell:function(e){var n=B(e.value.user,t).surname;return r.createElement(U,null,r.createElement("div",{className:"overflow-hidden"},r.createElement("h5",{className:"font-size-normal fw-normal m-0 text-truncate"},n||"")))},disableSortBy:!s}):e.push({id:"name",Header:function(e){var t=e.column;return r.createElement(_,{column:t,phraseKey:"name"})},accessor:function(e){return e},width:n?175:void 0,Cell:function(e){var a=e.value;return n?r.createElement(U,null,r.createElement(u.t,{user:a.user,imageCdnUrl:n,anonymiseUsers:t,detailsClassName:"ms-2 overflow-hidden",nameClassName:"text-truncate",showDisplayName:!0,avatarClassName:"p-1",showSubText:!1})):r.createElement(U,null,r.createElement("span",{className:"text-truncate"},(0,c.B)(a.user,t)))},disableSortBy:!s}),e.push({Header:function(e){var t=e.column;return r.createElement(_,{column:t,phraseKey:"unanswered"})},accessor:"summary.unanswered",sortType:"basic",sortDescFirst:!0,disableSortBy:!s,width:a?120:130,Cell:function(e){var t=e.value;return r.createElement(U,null,t)}},{Header:function(e){var t=e.column;return r.createElement(_,{column:t,phraseKey:"score"})},accessor:"summary",id:"score",Cell:function(e){var t=e.value;return t.awaitingMarking?r.createElement(U,null,r.createElement(i.O,{title:O("markingRequired"),className:"flex-grow-1",showLabel:!0,showIndicator:!a})):r.createElement(U,null,"".concat(t.correct,"/").concat(t.answered+t.unanswered))},width:a?80:125,sortDescFirst:!0,disableSortBy:!s},{Header:function(e){var t=e.column;return r.createElement(_,{column:t,phraseKey:"percentage"})},accessor:"summary",id:"percentage",Cell:function(e){var t=e.value;return t.awaitingMarking?r.createElement(U,null,r.createElement(i.O,{title:O("markingRequired"),className:"flex-grow-1",showLabel:!0})):r.createElement(U,null,r.createElement(d.O,{percentage:t.percentCorrect,layout:d.I.LabelBefore,className:"flex-grow-1"}))},width:125,sortDescFirst:!0,disableSortBy:!s}),e},[t,s])}function A(e,t,n,a,l){return r.useMemo(function(){return(0,f.Q)(e).map(function(l,i){return{Header:function(){return r.createElement(k,{interaction:l,results:n,interactive:e,interactiveMetadata:t,interactionNumber:i+1,onMouseEnter:function(){return a(i)},onMouseLeave:function(){return a(null)}})},accessor:"results",id:l.id,disableSortBy:!0,width:T,Cell:function(e){var t=e.row.original;return r.createElement(L,{interaction:l,studentResults:t})}}})},[l])}function D(e,t,n,a,i,u,m){return r.useMemo(function(){var n=[];if(null==t||t.students.forEach(function(t){var r=(0,s.Rt)(e,t);u&&(0,o.C)(u,r)||n.push(Object.assign(Object.assign({},t),{summary:r}))}),"name"===(null==i?void 0:i.id)){var r=l.m.sortBy(n,function(e){return(0,c.B)(e.user,a)});return i.desc?r.reverse():r}if("firstName"===(null==i?void 0:i.id)){var m=l.m.sortBy(n,function(e){return B(e.user,a).name||"￿"});return i.desc?m.reverse():m}if("surname"===(null==i?void 0:i.id)){var d=l.m.sortBy(n,function(e){return B(e.user,a).surname||"￿"});return i.desc?d.reverse():d}if("summary.unanswered"===(null==i?void 0:i.id)){var v=l.m.sortBy(n,function(e){return e.summary.unanswered});return i.desc?v.reverse():v}if("score"===(null==i?void 0:i.id)||"percentage"===(null==i?void 0:i.id)){var f=l.m.sortBy(n,function(e){return e.summary.awaitingMarking?-1:e.summary.percentCorrect});return i.desc?f.reverse():f}return n},[n,i,a,u,m])}function H(e,t){if(e){var n=e.querySelectorAll(".".concat(S.Z.resultsRow));null==n||n.forEach(function(e){e.childNodes.forEach(function(e,n){e.classList.remove(S.Z.highlightColumn),n===t&&e.classList.add(S.Z.highlightColumn)})})}}function z(e,t){if(e){var n=e.querySelectorAll(".".concat(S.Z.resultsRow));null==n||n.forEach(function(e,n){e.classList.remove(S.Z.highlightResultsRow),n===t&&e.classList.add(S.Z.highlightResultsRow)})}}},97364:(e,t,n)=>{n.d(t,{C:()=>l,P:()=>a});var r=n(94892);function a(e,t){switch(e){case"score_desc":return[{id:t,desc:!0}];case"score_asc":return[{id:t,desc:!1}];default:return[]}}function l(e,t){return"marking_required"===e&&!t.awaitingMarking||"helping_hand"===e&&t.percentCorrect>=r.T.HIGH||"not_completed"===e&&!t.unanswered}},77640:(e,t,n)=>{n.d(t,{t:()=>f});var r=n(32735),a=n(23481),l=n(31453),i=n(26136),c=n(97408),s=n(83914),o=n(76881),u=n(86613),m=n(64818),d=n(26521),v=a.T.encloseNamespace("shared.userRecipientItemMetadata");function f(e){var t=function(e){var t,n=e.user,r=e.anonymiseUsers,a=e.showDisplayName;if(n.sessionId||n.deleted){var l=(0,i.B)(n,r),c=l.split(" ").filter(function(e){return!!e});return{name:l,surname:c.slice(1).join(" "),avatarUrl:null}}return{name:r?(0,i.B)(n,!0):a?m.l.getDisplayName(n):m.l.getFullName(n),surname:n.surname,avatarUrl:null===(t=n.avatar)||void 0===t?void 0:t.url}}(e),n=t.name,a=t.surname,f=t.avatarUrl;return r.createElement(r.Fragment,null,r.createElement("div",{className:"".concat(d.Z.avatarContainer," ").concat(e.avatarClassName," d-inline-block flex-shrink-0")},r.createElement(c.q,{imageUrl:f,imageCdnUrl:e.imageCdnUrl,initials:m.l.getInitials(n,a),showAnonymousUser:!(e.anonymiseUsers||!e.user.sessionId&&!e.user.deleted),anonymiseUsers:e.anonymiseUsers,anonymousSvgSize:s.S.Small})),r.createElement("div",{className:e.detailsClassName},r.createElement("h4",{className:(0,l.A)("font-size-normal fw-normal m-0",e.nameClassName)},n),e.showSubText&&"id"in e.user&&r.createElement("p",{className:"text-secondary m-0"},e.getSubText?e.getSubText(e.user):function(e){var t=m.l.getUserType(e),n=m.l.getUserRole(e);if(t===o.Y.Staff)return n===u.i.Admin?v("admin"):v("staff");var r=m.l.getYearGroup(e);return(null==r?void 0:r.name)&&"Learners"!==r.name?r.name:v("student")}(e.user))))}f.defaults={showSubText:!0}},40782:(e,t,n)=>{n.d(t,{I:()=>r,O:()=>s});var r,a=n(32735),l=n(2606),i=n(362);function c(e){var t=a.useCallback(function(t){if(t){var n=t.r.baseVal.value,r=2*Math.PI*n,a=r-e.percentage*r;t.style.strokeDasharray="".concat(r," ").concat(r),t.style.strokeDashoffset=a.toString()}},[e.percentage]);return a.createElement("svg",null,a.createElement("circle",{r:(0,l.pu)(e.size),className:i.Z.backgroundCircle}),!(0,l.zR)(e.percentage)&&a.createElement("circle",{ref:t,r:(0,l.pu)(e.size),className:(0,l.V4)(e.percentage,e.scoreThresholds)}))}function s(e){var t,n=(0,l.Ki)(e.percentage),s=e.size||(e.layout===r.LabelInside?l.Mk.Large:l.Mk.Small),o=e.customLabel||(0,l.DV)(n);return e.layout===r.LabelOnly?a.createElement("span",{className:(0,l.IA)(n)},o):a.createElement("div",{className:"d-flex align-items-center justify-content-between ".concat(null!==(t=e.className)&&void 0!==t?t:"")},e.layout===r.LabelBefore&&a.createElement("span",{className:"me-2"},o),a.createElement("div",{className:(0,l.tw)(s,n)},a.createElement(c,{percentage:n,size:s,scoreThresholds:e.scoreThresholds}),e.layout===r.LabelInside&&a.createElement("span",{className:i.Z.centredPercentageText},o)))}!function(e){e.CircleOnly="circle_only",e.LabelOnly="label_only",e.LabelBefore="label_before",e.LabelInside="label_inside"}(r||(r={})),s.defaultProps={layout:r.CircleOnly}},2606:(e,t,n)=>{n.d(t,{DV:()=>p,IA:()=>v,Ki:()=>g,Mk:()=>c,V4:()=>d,pu:()=>m,tw:()=>f,zR:()=>y});var r=n(94892),a=n(362);function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function i(e,t,n){return(t=function(e){var t=function(e){if("object"!=l(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=l(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==l(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var c,s=.2,o=.36;!function(e){e.Small="small",e.Large="large",e.ExtraSmall="extraSmall"}(c||(c={}));var u=i(i(i({},c.ExtraSmall,{size:2}),c.Small,{size:2}),c.Large,{size:5.8});function m(e){var t=u[e].size,n=e===c.Large?o:s;return"".concat(t/2-2*n,"rem")}function d(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:r.i;return e>=t.HIGH?a.Z.circleSuccess:e>=t.MODERATE?a.Z.circleWarning:a.Z.circleDanger}function v(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:r.i;return e>=t.HIGH?"text-success":e>=t.MODERATE?"text-warning":"text-danger"}function f(e,t){var n="d-inline-block ".concat(a.Z.circleContainer);return e===c.Large&&(n+=" ".concat(a.Z.lgCircleContainer)),e===c.ExtraSmall&&(n+=" ".concat(a.Z.xsCircleContainer)),y(t)&&(n+=" ".concat(a.Z.pendingCircle)),n}function g(e){if(!y(e))return+e.toFixed(2)}function p(e){return y(e)?"--%":"".concat(Math.round(100*e),"%")}function y(e){return"number"!=typeof e}},19912:(e,t,n)=>{n.d(t,{Z:()=>r});const r={header:"hnMke",avatar:"b7JCz",row:"ILLa_",fixedTable:"_fdpt",interactionHeaderCellOuter:"kjXYB",hasResults:"M4qgr",interactionHeaderCellInner:"cnFvB",resultsCellOuter:"bdzRb",correct:"xANR6",incorrect:"_44sb",awaitingMarking:"eQ9sh",unanswered:"xRUK8",highlightColumn:"f9Zqr",resultsCellInner:"LAFwi",highlightResultsRow:"TwwLO",resultsRow:"xZ5iP"}},26521:(e,t,n)=>{n.d(t,{Z:()=>r});const r={removeRecipient:"mCbMC",recipientItem:"kdcb0",showSpinner:"xH6Mu",avatarContainer:"Zcpg3",recipientDetails:"v5EmV",recipientDetailsWithRemoveButton:"_V928"}},362:(e,t,n)=>{n.d(t,{Z:()=>r});const r={circleContainer:"p8Vgz",backgroundCircle:"asGGE",circleSuccess:"PXLNj",circleWarning:"ZckRN",circleDanger:"slBRg",lgCircleContainer:"N8KCI",xsCircleContainer:"RPqZ2",pendingCircle:"DKrcq",centredPercentageText:"tpmLR"}}}]);
2
+ //# sourceMappingURL=4806-f36469abb7-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/4806-f36469abb7-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/components/pending-indicator/PendingIndicator.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/interactions-bar/InteractionsBar.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/interactions-bar/interactions-bar.scss","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/interaction-results-summary/InteractionResultsSummary.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/interaction-results-summary/interaction-results-summary.scss","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/student-results-table/InteractionHeaderCell.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/student-results-table/StudentResultCell.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/student-results-table/StudentResultsTableUtils.tsx","file:///app/packages/libs/shared/src/apps/analytics/utils/StudentTableUtils.ts","file:///app/packages/libs/shared/src/apps/share/components/recipient-item/user-recipient-item-metadata/UserRecipientItemMetadata.tsx","file:///app/packages/libs/shared/src/components/percentage-indicator/PercentageIndicator.tsx","file:///app/packages/libs/shared/src/components/percentage-indicator/PercentageIndicatorUtils.ts","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/student-results-table/student-results-table.scss","file:///app/packages/libs/shared/src/apps/share/components/recipient-item/recipient-item.scss","file:///app/packages/libs/shared/src/components/percentage-indicator/percentage-indicator.scss"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { PercentageIndicator } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\n\nconst namespace = 'interactives.pendingIndicator';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getClassName(props: PendingIndicatorProps): string {\n let className = 'd-flex align-items-center h-100';\n\n className += props.showLabel ? ' justify-content-between' : ' justify-content-center';\n\n if (props.className)\n className += ` ${props.className}`;\n\n return className;\n}\n\ninterface PendingIndicatorProps {\n title?: string;\n className?: string;\n showLabel?: boolean;\n tooltipClassName?: string;\n showIndicator?: boolean;\n}\n\nexport function PendingIndicator(props: PendingIndicatorProps): JSX.Element {\n const { title, showLabel, tooltipClassName, showIndicator = true } = props;\n\n const Indicator = () => (\n <div className={getClassName(props)}>\n {!!showLabel &&\n <em>{getPhrase('pending')}</em>\n }\n {!!showIndicator &&\n <PercentageIndicator />\n }\n </div>\n );\n\n if (!title)\n return <Indicator />;\n\n return (\n <Tooltip title={title} spanHack spanHackClassName={tooltipClassName || 'h-100 w-100 d-flex align-items-center'}>\n <Indicator />\n </Tooltip>\n );\n}","import React from 'react';\n\nimport { Interaction, Interactive, Timepoint } from 'libs/shared/interfaces';\nimport { DurationHelper } from 'libs/shared/utils/DurationHelper';\nimport { InteractionTypeHelper } from 'libs/shared/utils/interaction-type-helper/InteractionTypeHelper';\n\nimport styles from './interactions-bar.scss';\n\nfunction getInteraction(timepoint: Timepoint, selectedInteraction: Interaction): Interaction {\n return timepoint.interactions.find(i => i.id === selectedInteraction.id) || timepoint.interactions[0];\n}\n\ninterface InteractionBarProps {\n interactive: Interactive;\n duration: number;\n selectedInteraction: Interaction;\n}\n\nexport function InteractionsBar(props: InteractionBarProps): React.ReactElement {\n if (!props.duration)\n return <></>;\n\n return (\n <>\n {props.interactive.timepoints.map((t, i) => {\n if (!t.interactions.length)\n return <></>;\n\n const interaction = getInteraction(t, props.selectedInteraction);\n const isSelected = interaction.id === props.selectedInteraction.id;\n\n const bgClassName = isSelected ? (InteractionTypeHelper.getTypeInfo(interaction.typeId)).bgClassName : 'bg-gray-500';\n\n const left = ((t.visibleAt / 1000) / props.duration) * 100;\n\n return (\n <div\n key={i}\n className={`${styles.container} text-center`}\n style={{ left: `${left}%` }}\n >\n <div className={`${styles.interaction} ${bgClassName}`} />\n {!!isSelected &&\n <div>\n {DurationHelper.ToDisplayDuration(t.visibleAt)}\n </div>\n }\n </div>\n );\n })}\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"Wf1bl\",\"interaction\":\"Fpm49\"};","import React from 'react';\nimport { Popover } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InteractionsBar } from 'libs/shared/apps/analytics/components/student-results/interactions-bar/InteractionsBar';\nimport { getInteractionResultsSummary } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { InteractionLabel } from 'libs/shared/components/interactive-questions/InteractionLabel';\nimport { PercentageIndicator, PercentageIndicatorLayout } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { Interaction, Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\n\nimport styles from './interaction-results-summary.scss';\n\nconst namespace = 'shared.interactionResultsSummary';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getDuration(interactiveMetadata: InteractiveMetadata): number {\n if (interactiveMetadata._parentClip)\n return interactiveMetadata._parentClip.endTime - interactiveMetadata._parentClip.startTime;\n\n if (!interactiveMetadata._parentVideo.duration)\n return 0;\n\n return interactiveMetadata._parentVideo.duration / 1000;\n}\n\ninterface InteractionResultsSummaryProps {\n interaction: Interaction;\n interactive: Interactive;\n interactiveMetadata: InteractiveMetadata;\n results: InteractiveResultSet;\n}\n\nfunction InteractionResultsSummary(props: InteractionResultsSummaryProps): JSX.Element {\n const summary = React.useMemo(\n () => getInteractionResultsSummary(props.interaction, props.results),\n [ props.interaction, props.results ]\n );\n\n return (\n <div className='px-1 pt-1'>\n <div className='d-flex'>\n <InteractionLabel\n interaction={props.interaction}\n iconClassName='flex-shrink-0'\n />\n </div>\n <div className={`my-4 ${styles.bar}`}>\n <InteractionsBar\n interactive={props.interactive}\n duration={getDuration(props.interactiveMetadata)}\n selectedInteraction={props.interaction}\n />\n </div>\n <div className='row pt-1 pb-2'>\n <div className='col-6 pe-1'>\n <div className='bg-light rounded p-2 h-100'>\n {!summary.awaitingMarking &&\n <div className='d-flex align-items-center justify-content-between'>\n <strong>{getPhrase('correctlyAnswered')}</strong>\n <PercentageIndicator\n percentage={summary.percentCorrect}\n layout={PercentageIndicatorLayout.LabelOnly}\n />\n </div>\n }\n {!!summary.awaitingMarking &&\n <div className='d-flex align-items-center justify-content-center'>\n <strong>\n <em>{getPhrase('pending')}</em>\n </strong>\n </div>\n }\n </div>\n </div>\n <div className='col-6 ps-1'>\n <div className='bg-light rounded h-100 p-2 d-flex align-items-center justify-content-between'>\n <strong>{getPhrase('unanswered')}</strong>\n <span>{summary.unanswered}</span>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nconst InteractionResultsSummaryPopover = React.forwardRef((\n { interaction, interactive, interactiveMetadata, results, ...popoverProps }: InteractionResultsSummaryProps,\n ref: React.MutableRefObject<HTMLElement>\n) => {\n return (\n <div className='popover-lg'>\n <Popover\n id={`interaction-results-summary-${interaction.id}`}\n ref={ref as any}\n {...popoverProps}\n >\n <Popover.Body>\n <InteractionResultsSummary\n interaction={interaction}\n interactive={interactive}\n interactiveMetadata={interactiveMetadata}\n results={results}\n />\n </Popover.Body>\n </Popover>\n </div>\n );\n});\n\nexport { InteractionResultsSummaryPopover as InteractionResultsSummary };","// extracted by mini-css-extract-plugin\nexport default {\"bar\":\"FCXQd\"};","import React from 'react';\nimport { OverlayTrigger } from 'react-bootstrap';\n\nimport { InteractionResultsSummary } from 'libs/shared/apps/analytics/components/student-results/interaction-results-summary/InteractionResultsSummary';\nimport { Interaction, Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\n\nimport styles from './student-results-table.scss';\n\ninterface InteractionHeaderCellProps {\n interaction: Interaction;\n results: InteractiveResultSet;\n interactionNumber: number;\n interactive: Interactive;\n interactiveMetadata: InteractiveMetadata;\n onMouseEnter?: () => void;\n onMouseLeave?: () => void;\n}\n\nexport function InteractionHeaderCell(props: InteractionHeaderCellProps): JSX.Element {\n return (\n <OverlayTrigger\n trigger={props.results.students?.length ? 'click' : null}\n placement='bottom'\n overlay={\n <InteractionResultsSummary\n interaction={props.interaction}\n interactive={props.interactive}\n interactiveMetadata={props.interactiveMetadata}\n results={props.results}\n />\n }\n rootClose\n >\n <div\n className={\n `text-center h-100\n d-flex align-items-center justify-content-center\n ${styles.interactionHeaderCellInner}`\n }\n onMouseEnter={props.onMouseEnter}\n onMouseLeave={props.onMouseLeave}\n >\n <div className='p-1 position-relative'>\n {props.interactionNumber}\n </div>\n </div>\n </OverlayTrigger>\n );\n}","import React from 'react';\n\nimport { PendingIndicator } from 'libs/shared/apps/analytics/components/pending-indicator/PendingIndicator';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { Interaction, StudentResults } from 'libs/shared/interfaces';\nimport { InteractiveCorrectnessHelper } from 'libs/shared/utils/InteractiveCorrectnessHelper';\nimport { getStudentResult } from 'libs/shared/utils/InteractiveHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './student-results-table.scss';\n\nfunction getSvgName(correctness: InteractionCorrectness): string {\n if (correctness === InteractionCorrectness.Correct)\n return cvSvgLibrary.Check;\n\n if (correctness === InteractionCorrectness.Incorrect)\n return cvSvgLibrary.Close;\n\n if (correctness === InteractionCorrectness.UnAnswered)\n return cvSvgLibrary.Minus;\n\n return;\n}\n\nfunction getClassName(correctness: InteractionCorrectness): string {\n let className = `${styles.resultsCellInner} h-100 position-relative`;\n\n if (correctness === InteractionCorrectness.Correct)\n className += ` ${styles.correct}`;\n\n if (correctness === InteractionCorrectness.Incorrect)\n className += ` ${styles.incorrect} text-danger`;\n\n if (correctness === InteractionCorrectness.AwaitingMarking)\n className += ` ${styles.awaitingMarking}`;\n\n if (correctness === InteractionCorrectness.UnAnswered)\n className += ` ${styles.unanswered} text-warning`;\n\n return className;\n}\n\ninterface StudentResultCellProps {\n interaction: Interaction;\n studentResults: StudentResults;\n}\n\nexport function StudentResultCell(props: StudentResultCellProps): JSX.Element {\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(\n props.interaction,\n getStudentResult(props.studentResults)\n );\n\n const svgName = getSvgName(correctness);\n\n return (\n <div className={getClassName(correctness)}>\n {!!svgName && <SvgContainer svgName={svgName} />}\n {correctness === InteractionCorrectness.AwaitingMarking &&\n <PendingIndicator />\n }\n </div>\n );\n}","import React from 'react';\nimport { CellProps, Column, ColumnInstance, SortingRule } from 'react-table';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { PendingIndicator } from 'libs/shared/apps/analytics/components/pending-indicator/PendingIndicator';\nimport { StudentResultsWithSummary } from 'libs/shared/apps/analytics/interfaces/StudentResultsWithSummary';\nimport { anonymiseUserName } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { getStudentResultsSummary } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { FilterStudentsBy, shouldFilterStudent } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { UserRecipientItemMetadata } from 'libs/shared/apps/share/components/recipient-item/user-recipient-item-metadata/UserRecipientItemMetadata';\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { PercentageIndicator, PercentageIndicatorLayout } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\nimport { getInteractions } from 'libs/shared/utils/InteractiveHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { InteractionHeaderCell } from './InteractionHeaderCell';\nimport { StudentResultCell } from './StudentResultCell';\n\nimport styles from './student-results-table.scss';\n\nconst namespace = 'shared.studentResultsTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport const RESULTS_COL_WIDTH = 60;\n\nfunction getUserProps(user: AnonUser, anonymiseUsers: boolean) {\n if (user.sessionId || user.deleted || anonymiseUsers) {\n const anonName = anonymiseUserName(user, anonymiseUsers);\n const nameParts = anonName.split(' ').filter(n => !!n);\n\n return {\n name: nameParts[0],\n surname: nameParts.slice(1).join(' ') || '',\n avatarUrl: null\n };\n }\n\n return {\n name: user.displayName || user.name,\n surname: user.surname || '',\n avatarUrl: user.avatar?.url\n };\n}\n\ninterface CellWrapperProps {\n className?: string;\n}\n\nfunction CellWrapper(props: React.PropsWithChildren<CellWrapperProps>): JSX.Element {\n return (\n <div className={`d-flex align-items-center p-2 h-100 ${props.className ?? ''}`}>\n {props.children}\n </div>\n );\n}\n\ninterface HeaderCellProps {\n column: ColumnInstance<StudentResultsWithSummary>;\n phraseKey: string;\n}\n\nfunction HeaderCell(props: HeaderCellProps): JSX.Element {\n return (\n <CellWrapper className={props.column.isSorted && 'fw-bold'}>\n {getPhrase(props.phraseKey)}\n </CellWrapper>\n );\n}\n\nexport function useGetFixedColumns(\n results: InteractiveResultSet,\n anonymiseUsers: boolean,\n imageCdnUrl?: string,\n showSeparateNameColumns?: boolean\n): Column<StudentResultsWithSummary>[] {\n const hasResults = !!results.students?.length;\n\n return React.useMemo(() => {\n const cols: Column<StudentResultsWithSummary>[] = [];\n\n if (showSeparateNameColumns) {\n // Add separate name and surname columns\n cols.push(\n {\n id: 'firstName',\n Header: ({ column }) => <HeaderCell column={column} phraseKey='firstName' />,\n accessor: (u: StudentResultsWithSummary) => u,\n width: 130,\n Cell: ({ value }: CellProps<StudentResultsWithSummary, StudentResultsWithSummary>) => {\n const { name, surname, avatarUrl } = getUserProps(value.user, anonymiseUsers);\n return (\n <CellWrapper>\n <div className={`d-inline-block flex-shrink-0 p-1 ${styles.avatar}`}>\n <Avatar\n imageUrl={avatarUrl}\n imageCdnUrl={imageCdnUrl}\n initials={UserHelper.getInitials(name, surname)}\n showAnonymousUser={!anonymiseUsers && (!!value.user.sessionId || !!value.user.deleted)}\n anonymiseUsers={anonymiseUsers}\n anonymousSvgSize={SvgContainerSize.Small}\n />\n </div>\n <div className='ms-2 overflow-hidden'>\n <h4 className='font-size-normal fw-normal m-0 text-truncate'>\n {name}\n </h4>\n </div>\n </CellWrapper>\n );\n },\n disableSortBy: !hasResults\n },\n {\n id: 'surname',\n Header: ({ column }) => <HeaderCell column={column} phraseKey='surname' />,\n accessor: (u: StudentResultsWithSummary) => u,\n width: 130,\n Cell: ({ value }: CellProps<StudentResultsWithSummary, StudentResultsWithSummary>) => {\n const { surname } = getUserProps(value.user, anonymiseUsers);\n return (\n <CellWrapper>\n <div className='overflow-hidden'>\n <h5 className='font-size-normal fw-normal m-0 text-truncate'>\n {surname || ''}\n </h5>\n </div>\n </CellWrapper>\n );\n },\n disableSortBy: !hasResults\n }\n );\n } else {\n // Add single name column (existing behavior)\n cols.push({\n id: 'name',\n Header: ({ column }) => <HeaderCell column={column} phraseKey='name' />,\n accessor: (u: StudentResultsWithSummary) => u,\n width: imageCdnUrl ? 175 : undefined,\n Cell: ({ value }: CellProps<StudentResultsWithSummary, StudentResultsWithSummary>) => {\n if (!imageCdnUrl) {\n return (\n <CellWrapper>\n <span className='text-truncate'>{anonymiseUserName(value.user, anonymiseUsers)}</span>\n </CellWrapper>\n );\n }\n\n return (\n <CellWrapper>\n <UserRecipientItemMetadata\n user={value.user}\n imageCdnUrl={imageCdnUrl}\n anonymiseUsers={anonymiseUsers}\n detailsClassName='ms-2 overflow-hidden'\n nameClassName='text-truncate'\n showDisplayName\n avatarClassName='p-1'\n showSubText={false}\n />\n </CellWrapper>\n );\n },\n disableSortBy: !hasResults\n });\n }\n\n cols.push(\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='unanswered' />,\n accessor: 'summary.unanswered' as keyof StudentResultsWithSummary,\n sortType: 'basic', // Default is 'alphanumeric' which would treat the numbers as strings\n sortDescFirst: true,\n disableSortBy: !hasResults,\n width: showSeparateNameColumns ? 120 : 130,\n Cell: ({ value }: CellProps<StudentResultsWithSummary, any>) => <CellWrapper>{value}</CellWrapper>\n },\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='score' />,\n accessor: 'summary',\n id: 'score',\n Cell: ({ value }) => {\n if (value.awaitingMarking) {\n return (\n <CellWrapper>\n <PendingIndicator\n title={getPhrase('markingRequired')}\n className='flex-grow-1'\n showLabel\n showIndicator={!showSeparateNameColumns}\n />\n </CellWrapper>\n );\n }\n\n return (\n <CellWrapper>\n {`${value.correct}/${value.answered + value.unanswered}`}\n </CellWrapper>\n );\n },\n width: showSeparateNameColumns ? 80 : 125,\n sortDescFirst: true,\n disableSortBy: !hasResults\n },\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='percentage' />,\n accessor: 'summary',\n id: 'percentage',\n Cell: ({ value }) => {\n if (value.awaitingMarking) {\n return (\n <CellWrapper>\n <PendingIndicator\n title={getPhrase('markingRequired')}\n className='flex-grow-1'\n showLabel\n />\n </CellWrapper>\n );\n }\n\n return (\n <CellWrapper>\n <PercentageIndicator\n percentage={value.percentCorrect}\n layout={PercentageIndicatorLayout.LabelBefore}\n className='flex-grow-1'\n />\n </CellWrapper>\n );\n },\n width: 125,\n sortDescFirst: true,\n disableSortBy: !hasResults\n }\n );\n\n return cols;\n }, [ anonymiseUsers, hasResults ]);\n}\n\n/**\n * Returns memoized table columns. To trigger a recalculation, toggle the value of `refreshData`.\n */\nexport function useGetResultColumns(\n interactive: Interactive,\n interactiveMetadata: InteractiveMetadata,\n results: InteractiveResultSet,\n onColumnHover: (index?: number) => void,\n refreshData: boolean\n): Column<StudentResultsWithSummary>[] {\n return React.useMemo(() => {\n const interactions = getInteractions(interactive);\n\n return interactions.map((interaction, index) => {\n const col: Column<StudentResultsWithSummary> = {\n Header: () => {\n return (\n <InteractionHeaderCell\n interaction={interaction}\n results={results}\n interactive={interactive}\n interactiveMetadata={interactiveMetadata}\n interactionNumber={index + 1}\n onMouseEnter={() => onColumnHover(index)}\n onMouseLeave={() => onColumnHover(null)}\n />\n );\n },\n accessor: 'results',\n /**\n * `onSelectStudentResponse` in `StudentResultsTable` expects the column id to the interaction id\n */\n id: interaction.id,\n disableSortBy: true,\n width: RESULTS_COL_WIDTH,\n Cell: ({ row: { original: studentResults } }) => (\n <StudentResultCell interaction={interaction} studentResults={studentResults} />\n )\n };\n return col;\n });\n }, [refreshData]);\n}\n\n/**\n * Returns memoized table data. To trigger a recalculation, toggle the value of `refreshData`.\n */\nexport function useGetResultsTableData(\n interactive: Interactive,\n results: InteractiveResultSet,\n refreshData: boolean,\n anonymiseUsers: boolean,\n sortBy?: SortingRule<StudentResultsWithSummary>,\n filterBy?: FilterStudentsBy,\n showSeparateNameColumns?: boolean\n): StudentResultsWithSummary[] {\n return React.useMemo(() => {\n const students: StudentResultsWithSummary[] = [];\n\n results?.students.forEach(s => {\n const summary = getStudentResultsSummary(interactive, s);\n\n if (filterBy && shouldFilterStudent(filterBy, summary)) return;\n\n students.push({ ...s, summary });\n });\n\n if (sortBy?.id === 'name') {\n const sorted = ArrayHelper.sortBy(students, student => anonymiseUserName(student.user, anonymiseUsers));\n\n return sortBy.desc ? sorted.reverse() : sorted;\n }\n\n if (sortBy?.id === 'firstName') {\n const sorted = ArrayHelper.sortBy(students, student => {\n const { name } = getUserProps(student.user, anonymiseUsers);\n return name || '\\uffff'; // Use high Unicode character to sort empty strings last\n });\n\n return sortBy.desc ? sorted.reverse() : sorted;\n }\n\n if (sortBy?.id === 'surname') {\n const sorted = ArrayHelper.sortBy(students, student => {\n const { surname } = getUserProps(student.user, anonymiseUsers);\n return surname || '\\uffff'; // Use high Unicode character to sort empty strings last\n });\n\n return sortBy.desc ? sorted.reverse() : sorted;\n }\n\n if (sortBy?.id === 'summary.unanswered') {\n const sorted = ArrayHelper.sortBy(students, student => student.summary.unanswered);\n\n return sortBy.desc ? sorted.reverse() : sorted;\n }\n\n if (sortBy?.id === 'score' || sortBy?.id === 'percentage') {\n const sorted = ArrayHelper.sortBy(students, student => {\n if (student.summary.awaitingMarking)\n return -1;\n\n return student.summary.percentCorrect;\n });\n\n return sortBy.desc ? sorted.reverse() : sorted;\n }\n\n return students;\n }, [ refreshData, sortBy, anonymiseUsers, filterBy, showSeparateNameColumns ]);\n}\n\nexport function highlightColumns(tableEl: HTMLElement, highlightIndex?: number): void {\n if (!tableEl)\n return;\n\n const rows = tableEl.querySelectorAll(`.${styles.resultsRow}`);\n\n rows?.forEach(row => {\n row.childNodes.forEach((col: HTMLElement, colIdx: number) => {\n col.classList.remove(styles.highlightColumn);\n\n if (colIdx === highlightIndex)\n col.classList.add(styles.highlightColumn);\n });\n });\n}\n\nexport function highlightRows(tableEl: HTMLElement, highlightIndex?: number): void {\n if (!tableEl)\n return;\n\n const rows = tableEl.querySelectorAll(`.${styles.resultsRow}`);\n\n rows?.forEach((row, rowIdx) => {\n row.classList.remove(styles.highlightResultsRow);\n\n if (rowIdx === highlightIndex)\n row.classList.add(styles.highlightResultsRow);\n });\n}","import { SortingRule } from 'react-table';\n\nimport { ResultsSummary } from 'libs/shared/apps/analytics/interfaces/ResultsSummary';\nimport { ScoreThresholdInsights } from 'libs/shared/constants/ScoreThresholds';\n\nexport type SortStudentsBy = 'score_desc' | 'score_asc';\n\nexport function getSortStudents(sortBy: SortStudentsBy, id: string): SortingRule<any>[] {\n switch (sortBy) {\n case 'score_desc': return [{ id, desc: true }];\n case 'score_asc': return [{ id, desc: false }];\n default: return [];\n }\n}\n\nexport type FilterStudentsBy = 'not_completed' | 'marking_required' | 'helping_hand';\n\nexport function shouldFilterStudent(filter: FilterStudentsBy, summary: ResultsSummary): boolean {\n if (filter === 'marking_required' && !summary.awaitingMarking)\n return true;\n\n if (filter === 'helping_hand' && summary.percentCorrect >= ScoreThresholdInsights.HIGH)\n return true;\n\n if (filter === 'not_completed' && !summary.unanswered)\n return true;\n \n return false;\n}\n\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { anonymiseUserName } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { UserRole } from 'libs/shared/enums/UserRole';\nimport { BaseObject, User } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from '../recipient-item.scss';\n\nconst namespace = 'shared.userRecipientItemMetadata';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getSubText(user: User): string {\n const userType = UserHelper.getUserType(user);\n const role = UserHelper.getUserRole(user);\n\n if (userType === UserGroup.Staff) {\n if (role === UserRole.Admin)\n return getPhrase('admin');\n\n return getPhrase('staff');\n }\n\n const yearGroup = UserHelper.getYearGroup(user);\n \n /**\n * Tertiary puts all students into a single group called 'Learners'.\n * When a student is in the 'Learners' group, we don't want to display the group name,\n * but instead we want to just show \"Student\". - Sha\n */\n if (yearGroup?.name && yearGroup.name !== 'Learners')\n return yearGroup.name;\n\n return getPhrase('student');\n}\n\nfunction getUserProps({\n user, anonymiseUsers, showDisplayName\n}: {\n user: AnonUser,\n showDisplayName: boolean;\n anonymiseUsers?: boolean;\n}) {\n if (user.sessionId || user.deleted) {\n const anonName = anonymiseUserName(user, anonymiseUsers);\n const nameParts = anonName.split(' ').filter(n => !!n);\n\n return {\n name: anonName,\n surname: nameParts.slice(1).join(' '),\n avatarUrl: null\n };\n }\n\n return {\n name: anonymiseUsers\n ? anonymiseUserName(user, true)\n : showDisplayName\n ? UserHelper.getDisplayName(user)\n : UserHelper.getFullName(user),\n surname: user.surname,\n avatarUrl: user.avatar?.url\n };\n}\n\nUserRecipientItemMetadata.defaults = {\n showSubText: true\n};\n\ninterface UserRecipientItemMetadataProps {\n user: AnonUser;\n imageCdnUrl: string;\n detailsClassName?: string;\n avatarClassName?: string;\n showDisplayName: boolean;\n nameClassName?: string;\n showSubText?: boolean;\n anonymiseUsers?: boolean;\n getSubText?: (user: BaseObject) => string;\n}\n\nexport function UserRecipientItemMetadata(props: UserRecipientItemMetadataProps): JSX.Element {\n const { name, surname, avatarUrl } = getUserProps(props);\n\n return (\n <>\n <div className={`${styles.avatarContainer} ${props.avatarClassName} d-inline-block flex-shrink-0`}>\n <Avatar\n imageUrl={avatarUrl}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(name, surname)}\n showAnonymousUser={!props.anonymiseUsers && (!!props.user.sessionId || !!props.user.deleted)}\n anonymiseUsers={props.anonymiseUsers}\n anonymousSvgSize={SvgContainerSize.Small}\n />\n </div>\n\n <div className={props.detailsClassName}>\n <h4 className={classNames('font-size-normal fw-normal m-0', props.nameClassName)}>\n {name}\n </h4>\n {props.showSubText && `id` in props.user && <p className='text-secondary m-0'>{props.getSubText ? props.getSubText(props.user) : getSubText(props.user)}</p>}\n </div>\n </>\n );\n}","import React from 'react';\n\nimport { ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\n\nimport {\n getCircleClassName,\n getCircleContainerClassName,\n getCircleRadius,\n getColouredLabelClassName,\n getFormattedPercentage,\n getPercentageToFixed,\n isPending,\n ProgressCircleSize\n} from './PercentageIndicatorUtils';\n\nimport styles from './percentage-indicator.scss';\n\ninterface ProgressCircleProps {\n size: ProgressCircleSize;\n scoreThresholds?: ScoreThresholds;\n percentage?: number;\n}\n\nfunction ProgressCircle(props: ProgressCircleProps): JSX.Element {\n const ref = React.useCallback((circle: SVGCircleElement) => {\n if (!circle)\n return;\n\n const radius = circle.r.baseVal.value;\n const circumference = 2 * Math.PI * radius;\n const offset = circumference - props.percentage * circumference;\n\n circle.style.strokeDasharray = `${circumference} ${circumference}`;\n circle.style.strokeDashoffset = offset.toString();\n }, [props.percentage]);\n\n return (\n <svg>\n <circle r={getCircleRadius(props.size)} className={styles.backgroundCircle} />\n {!isPending(props.percentage) &&\n <circle\n ref={ref}\n r={getCircleRadius(props.size)}\n className={getCircleClassName(props.percentage, props.scoreThresholds)}\n />\n }\n </svg>\n );\n}\n\nexport enum PercentageIndicatorLayout {\n CircleOnly = 'circle_only',\n LabelOnly = 'label_only',\n LabelBefore = 'label_before',\n LabelInside = 'label_inside'\n}\n\ninterface PercentageIndicatorProps {\n layout: PercentageIndicatorLayout;\n percentage?: number; // Between 0 and 1 or undefined for pending\n className?: string;\n customLabel?: string;\n scoreThresholds?: ScoreThresholds;\n size?: ProgressCircleSize;\n}\n\nPercentageIndicator.defaultProps = {\n layout: PercentageIndicatorLayout.CircleOnly\n};\n\nexport function PercentageIndicator(props: PercentageIndicatorProps): JSX.Element {\n const percentageToFixed = getPercentageToFixed(props.percentage);\n\n const size = props.size ||\n (props.layout === PercentageIndicatorLayout.LabelInside\n ? ProgressCircleSize.Large\n : ProgressCircleSize.Small\n );\n\n const label = props.customLabel || getFormattedPercentage(percentageToFixed);\n\n if (props.layout === PercentageIndicatorLayout.LabelOnly)\n return (\n <span className={getColouredLabelClassName(percentageToFixed)}>\n {label}\n </span>\n );\n\n return (\n <div className={`d-flex align-items-center justify-content-between ${props.className ?? ''}`}>\n {props.layout === PercentageIndicatorLayout.LabelBefore &&\n <span className='me-2'>\n {label}\n </span>\n }\n <div className={getCircleContainerClassName(size, percentageToFixed)}>\n <ProgressCircle percentage={percentageToFixed} size={size} scoreThresholds={props.scoreThresholds} />\n {props.layout === PercentageIndicatorLayout.LabelInside &&\n <span className={styles.centredPercentageText}>\n {label}\n </span>\n }\n </div>\n </div>\n );\n}","import { ScoreThresholdDefaults, ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\n\nimport styles from './percentage-indicator.scss';\n\n/**\n * Values for width and strokeWidth are taken from progress-circle.scss.\n * If either are changed, they must be updated in both places.\n */\nconst CIRCLE_WIDTH = 2; // rem\nconst CIRCLE_WIDTH_LG = 5.8; // rem\nconst CIRCLE_STROKE_WIDTH = 0.2; // rem\nconst CIRCLE_STROKE_WIDTH_LG = 0.36; // rem\n \nexport enum ProgressCircleSize {\n Small = 'small',\n Large = 'large',\n ExtraSmall = 'extraSmall'\n}\n\nconst ProgressCircleSizeMap = {\n [ProgressCircleSize.ExtraSmall]: {\n size: CIRCLE_WIDTH\n },\n [ProgressCircleSize.Small]: {\n size: CIRCLE_WIDTH\n },\n [ProgressCircleSize.Large]: {\n size: CIRCLE_WIDTH_LG\n }\n};\n\n/**\n * radius = width / 2 - strokeWidth * 2\n */\nexport function getCircleRadius(size: ProgressCircleSize): string {\n const width = ProgressCircleSizeMap[size].size;\n const strokeWidth = size === ProgressCircleSize.Large ? CIRCLE_STROKE_WIDTH_LG : CIRCLE_STROKE_WIDTH;\n return `${width / 2 - strokeWidth * 2}rem`;\n}\n \nexport function getCircleClassName(\n percentage: number,\n scoreThresholds: ScoreThresholds = ScoreThresholdDefaults\n): string {\n if (percentage >= scoreThresholds.HIGH)\n return styles.circleSuccess;\n \n if (percentage >= scoreThresholds.MODERATE)\n return styles.circleWarning;\n \n return styles.circleDanger;\n}\n \nexport function getColouredLabelClassName(\n percentage: number,\n scoreThresholds: ScoreThresholds = ScoreThresholdDefaults\n): string {\n if (percentage >= scoreThresholds.HIGH)\n return 'text-success';\n \n if (percentage >= scoreThresholds.MODERATE)\n return 'text-warning';\n \n return 'text-danger';\n}\n \nexport function getCircleContainerClassName(size: ProgressCircleSize, percentage?: number): string {\n let className = `d-inline-block ${styles.circleContainer}`;\n \n if (size === ProgressCircleSize.Large)\n className += ` ${styles.lgCircleContainer}`;\n\n if (size === ProgressCircleSize.ExtraSmall)\n className += ` ${styles.xsCircleContainer}`;\n\n if (isPending(percentage))\n className += ` ${styles.pendingCircle}`;\n \n return className;\n}\n\nexport function getPercentageToFixed(percentage?: number): number | undefined {\n if (isPending(percentage))\n return;\n \n return +percentage.toFixed(2);\n}\n \nexport function getFormattedPercentage(percentage?: number): string {\n if (isPending(percentage))\n return `--%`;\n\n return `${Math.round(percentage * 100)}%`;\n}\n\nexport function isPending(percentage?: number): boolean {\n return typeof percentage !== 'number';\n}","// extracted by mini-css-extract-plugin\nexport default {\"header\":\"hnMke\",\"avatar\":\"b7JCz\",\"row\":\"ILLa_\",\"fixedTable\":\"_fdpt\",\"interactionHeaderCellOuter\":\"kjXYB\",\"hasResults\":\"M4qgr\",\"interactionHeaderCellInner\":\"cnFvB\",\"resultsCellOuter\":\"bdzRb\",\"correct\":\"xANR6\",\"incorrect\":\"_44sb\",\"awaitingMarking\":\"eQ9sh\",\"unanswered\":\"xRUK8\",\"highlightColumn\":\"f9Zqr\",\"resultsCellInner\":\"LAFwi\",\"highlightResultsRow\":\"TwwLO\",\"resultsRow\":\"xZ5iP\"};","// extracted by mini-css-extract-plugin\nexport default {\"removeRecipient\":\"mCbMC\",\"recipientItem\":\"kdcb0\",\"showSpinner\":\"xH6Mu\",\"avatarContainer\":\"Zcpg3\",\"recipientDetails\":\"v5EmV\",\"recipientDetailsWithRemoveButton\":\"_V928\"};","// extracted by mini-css-extract-plugin\nexport default {\"circleContainer\":\"p8Vgz\",\"backgroundCircle\":\"asGGE\",\"circleSuccess\":\"PXLNj\",\"circleWarning\":\"ZckRN\",\"circleDanger\":\"slBRg\",\"lgCircleContainer\":\"N8KCI\",\"xsCircleContainer\":\"RPqZ2\",\"pendingCircle\":\"DKrcq\",\"centredPercentageText\":\"tpmLR\"};"],"names":["getPhrase","getClassName","props","className","showLabel","PendingIndicator","title","tooltipClassName","showIndicator","Indicator","spanHack","spanHackClassName","InteractionsBar","duration","interactive","timepoints","map","t","i","interactions","length","timepoint","selectedInteraction","interaction","find","id","isSelected","bgClassName","InteractionTypeHelper","typeId","left","visibleAt","key","style","DurationHelper","LanguageService","InteractionResultsSummary","interactiveMetadata","summary","results","InteractionLabel","iconClassName","_parentClip","endTime","startTime","_parentVideo","awaitingMarking","PercentageIndicator","percentage","percentCorrect","layout","unanswered","InteractionResultsSummaryPopover","ref","popoverProps","Popover","InteractionHeaderCell","OverlayTrigger","trigger","students","placement","overlay","rootClose","onMouseEnter","onMouseLeave","interactionNumber","correctness","InteractionCorrectness","StudentResultCell","InteractiveCorrectnessHelper","studentResults","svgName","getSvgName","SvgContainer","RESULTS_COL_WIDTH","getUserProps","user","anonymiseUsers","sessionId","deleted","nameParts","split","filter","n","name","surname","slice","join","avatarUrl","displayName","avatar","url","CellWrapper","children","HeaderCell","column","isSorted","phraseKey","useGetFixedColumns","imageCdnUrl","showSeparateNameColumns","hasResults","cols","push","Header","accessor","u","width","Cell","value","Avatar","imageUrl","initials","UserHelper","showAnonymousUser","anonymousSvgSize","S","disableSortBy","undefined","UserRecipientItemMetadata","detailsClassName","nameClassName","showDisplayName","avatarClassName","showSubText","sortType","sortDescFirst","correct","answered","useGetResultColumns","onColumnHover","refreshData","index","row","original","useGetResultsTableData","sortBy","filterBy","forEach","s","sorted","ArrayHelper","student","desc","reverse","highlightColumns","tableEl","highlightIndex","rows","querySelectorAll","childNodes","col","colIdx","classList","remove","add","highlightRows","rowIdx","getSortStudents","shouldFilterStudent","anonName","getSubText","userType","role","yearGroup","defaults","PercentageIndicatorLayout","ProgressCircle","circle","radius","r","baseVal","circumference","Math","PI","offset","strokeDasharray","strokeDashoffset","toString","size","scoreThresholds","percentageToFixed","LabelInside","label","customLabel","LabelOnly","LabelBefore","defaultProps","CircleOnly","ProgressCircleSize","CIRCLE_STROKE_WIDTH","CIRCLE_STROKE_WIDTH_LG","ProgressCircleSizeMap","ExtraSmall","Small","Large","getCircleRadius","strokeWidth","getCircleClassName","HIGH","MODERATE","getColouredLabelClassName","getCircleContainerClassName","isPending","getPercentageToFixed","toFixed","getFormattedPercentage","round"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
1
  "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4948],{21976:(e,t,a)=>{a.d(t,{x:()=>u});var n=a(32735),r=a(72306),s=a.n(r),i=a(70312),l=a.n(i),c=a(75896),o=a(70072),m=function(e){return{title:{text:null},credits:{enabled:!1},yAxis:{title:{text:null},labels:{enabled:!1},gridLineWidth:0,tickPixelInterval:1,startOnTick:!1,endOnTick:!1,min:-.2},xAxis:{title:{text:e,margin:8,style:o.d},labels:{style:o.d},lineWidth:0},legend:{enabled:!1},chart:{type:"column",backgroundColor:"transparent",height:"160px",spacingTop:20},plotOptions:{column:{dataLabels:{enabled:!1},enableMouseTracking:!1,minPointLength:8}}}};function u(e){var t,a,r,i,o=n.useRef(),u=n.useRef(null);return n.useEffect(function(){if(e.withObserver&&window.ResizeObserver){var t=new window.ResizeObserver(function(){var e;null===(e=o.current)||void 0===e||e.chart.reflow()});return o.current&&t.observe(u.current),function(){return t.disconnect()}}},[e.withObserver]),n.createElement("div",{ref:u},n.createElement(l(),{highcharts:s(),options:(a=e.chartData,r=m(e.label),i=null===(t=c.m.first(a.series))||void 0===t?void 0:t.data.some(function(e){return e.y>0}),Object.assign(Object.assign({},r),{yAxis:Object.assign(Object.assign({},r.yAxis),i?{min:-.2}:{min:0,max:1}),xAxis:Object.assign(Object.assign(Object.assign({},r.xAxis),e.xAxis),{categories:a.categories}),series:a.series})),ref:o}))}},98551:(e,t,a)=>{a.d(t,{y:()=>m});var n=a(32735),r=a(77640),s=a(15611),i=a(40782),l=a(2606);const c={avatar:"uMuZt",image:"WdKiU"};var o=3;function m(e){return n.createElement(n.Fragment,null,e.students.length?n.createElement("ul",{className:"list-unstyled mb-2"},e.students.slice(0,o).map(function(t,a){return n.createElement("li",{key:a,className:"d-flex align-items-center mb-2"},n.createElement(r.t,{user:t,imageCdnUrl:e.imageCdnUrl,avatarClassName:c.avatar,detailsClassName:"ms-2",showDisplayName:!0,showSubText:!1,anonymiseUsers:e.anonymiseUsers}),n.createElement("div",{className:"d-flex align-items-center ms-auto"},n.createElement("span",{className:"me-2"},void 0===t.percentage?"- ":Math.round(100*t.percentage),"%"),n.createElement(i.O,{percentage:t.percentage,size:l.Mk.ExtraSmall})))})):n.createElement("div",{className:"text-center"},n.createElement("img",{className:"".concat(c.image," mb-2"),src:e.imageUrl}),n.createElement("p",{className:"text-secondary mb-0",dangerouslySetInnerHTML:{__html:e.description}})),!!e.students.length&&e.appLink&&n.createElement(s.F,{appLink:e.appLink,className:"text-info mt-auto"},e.appLinkText))}},51870:(e,t,a)=>{a.d(t,{i:()=>g});var n=a(32735),r=a(23481),s=a(84621),i=a(21976),l=a(70072),c=a(83345),o=a(35223);const m={purpleChart:"OPcvi",grayChart:"HlWj7"};function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var d="shared.insightDevices",p=r.T.encloseNamespace(d);function g(e){var t,a,r=function(){var t,a={Phone:0,Computer:0};return(null===(t=e.osCount)||void 0===t?void 0:t.length)?e.osCount.reduce(function(e,t){if(!t.name)return e;var a=function(e){switch(e){case"Android":case"Windows Phone":case"iOS":case"BlackBerry":return"Phone";case"Linux":case"Unix":case"Macintosh":case"Windows":return"Computer"}}(t.name);return a?(e[a]=e[a]+t.count,e):e},a):a}(),g=Math.max.apply(Math,function(e){if(Array.isArray(e))return u(e)}(a=Object.keys(r).map(function(e){return r[e]}))||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(a)||function(e,t){if(e){if("string"==typeof e)return u(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?u(e,t):void 0}}(a)||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.")}()),h=Object.keys(r).filter(function(e){return r[e]===g}),v={categories:Object.keys(r),series:[{type:"column",borderRadius:4,dataLabels:{enabled:!0,style:l.d,inside:!1,overflow:"allow",crop:!1},data:Object.keys(r).map(function(e){var t=0!==g&&r[e]===g;return{className:"".concat(0===r[e]?m.grayChart:m.purpleChart," ").concat(t?"":"opacity-25"),borderWidth:t?2:0,borderColor:t?"black":"",y:r[e]}})}]};return n.createElement(s.L,{title:p("title"),svgClassName:"bg-light-ultramarine text-ultramarine",svgName:o.vn.Monitor},n.createElement("p",{className:"mb-0"},(null===(t=e.osCount)||void 0===t?void 0:t.filter(function(e){return e.name}).length)?n.createElement(c.x,{namespace:d,phrase:"description",options:{smartCount:h.length,device:1===h.length?h[0].toLowerCase():null}}):n.createElement(c.x,{namespace:d,phrase:"notViewed"})),n.createElement("div",{className:"position-relative mt-auto"},n.createElement(i.x,{label:p("device"),chartData:v,xAxis:{labels:{useHTML:!0,formatter:function(){return'\n <div class="d-flex flex-column align-items-center">\n <span class="'.concat(m.font,' font-size-sm text-dark mb-1">').concat(this.value,"</span>\n ").concat(function(e){var t="";switch(e){case"Computer":t=o.vn.Monitor;break;case"Phone":t=o.vn.Mobile;break;case"Tablet":t=o.vn.Tablet;break;default:return}return o.Nj.getSvg(t).replace(/<svg[^>]*>/g,'<svg class="svg-container">')}(this.value),"\n </div>\n ")}}},withObserver:!0})))}},50916:(e,t,a)=>{a.d(t,{b:()=>p});var n=a(32735),r=a(23481),s=a(38307),i=a(84621),l=a(15611),c=a(83345),o=a(35223);const m={heatMap:"Rfr9N",heatMapTimepointIndicator:"s6JbA",heatMapTimepointIndicatorVisible:"mgjWX"};var u="shared.insightHeatmap",d=r.T.encloseNamespace(u);function p(e){var t,a=e.engagementRate||(null===(t=e.engagement)||void 0===t?void 0:t.engagementRate),r=a>0?Math.round(100*a):null;return n.createElement(i.L,{title:d("title"),svgName:o.vn.Timer,svgClassName:"bg-light-green text-green"},n.createElement("div",{className:"mb-2"},n.createElement("p",{className:"mb-0"},r?n.createElement(c.x,{namespace:u,phrase:"everyoneWatched",options:{engagementRate:r}}):n.createElement(c.x,{namespace:u,phrase:"notWatched"})),!!r&&n.createElement(l.F,{appLink:e.heatmapAppLink,className:"text-info"},n.createElement(c.x,{namespace:u,phrase:"viewHeatmap"}))),n.createElement("div",{className:"mb-2"},n.createElement(s.c,{engagement:e.engagement,className:m.heatMap})),n.createElement("p",{className:"h3 text-center mb-2"},r||"--","%"),n.createElement("p",{className:"text-center mb-0 font-size-sm"},n.createElement(c.x,{namespace:u,phrase:"amountWatched"})))}},53214:(e,t,a)=>{a.d(t,{u:()=>v});var n=a(32735),r=a(23481),s=a(2510),i=a(97958),l=a(83345),c=a(99705),o=a(12778),m=a(35223),u=a(99742),d=a(86099),p=a(38279),g="lite.insightsMask",h=r.T.encloseNamespace(g);function v(e){var t=(0,d.Zm)(e.share);return n.createElement("div",{className:"".concat(!e.hasData&&p.Z.mask," position-relative")},n.createElement("div",{className:e.hasData?"":"position-absolute ps-1"},e.children),n.createElement("div",{className:e.hasData?"":"".concat(p.Z.backdrop," d-flex flex-column align-items-center justify-content-start py-5")},!e.hasData&&n.createElement(i.u,null,n.createElement(i.u.Image,{src:u.W.Insights.SEND_PAPER_PLANE}),n.createElement(i.u.Heading,null,n.createElement(l.x,{namespace:g,phrase:"shareHeading"})),n.createElement(i.u.Info,{className:"w-75"},n.createElement(l.x,{namespace:g,phrase:"shareDescription"})," "),n.createElement(i.u.Cta,{text:h(e.share.type===s.y.Link?"share":"shareOptions"),appLink:t,icon:m.vn.Share,className:"btn btn-dark mb-3"}),n.createElement(i.u.Cta,{text:h("shareInfo"),href:o.o.getLiteArticle(c.b.Sharing),openInNewTab:!0,className:"btn btn-link text-info py-0"}))))}},54948:(e,t,a)=>{a.d(t,{m:()=>le});var n=a(32735),r=a(23481),s=a(84621),i=a(21976),l=a(70072),c=a(83345),o=a(35223);const m={tealChart:"lZZf0",grayChart:"wJQc4"};function u(e){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u(e)}function d(e){return function(e){if(Array.isArray(e))return g(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||p(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function p(e,t){if(e){if("string"==typeof e)return g(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?g(e,t):void 0}}function g(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var h="shared.insightAverageAttempts",v=r.T.encloseNamespace(h);function b(e){var t,a,r=function(){var t=e.students.reduce(function(e,t){var a,n,r,s=t.summary.attempts.toString();return s in e||Object.assign(e,(a={},r=0,(n=function(e){var t=function(e){if("object"!=u(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var a=t.call(e,"string");if("object"!=u(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==u(t)?t:t+""}(n=s))in a?Object.defineProperty(a,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):a[n]=r,a)),e[s]++,e},{});return Object.keys(t).length?t:{0:0}}(),g=Math.max.apply(Math,d(Object.keys(r).map(function(e){return r[e]}))),b=Object.keys(r).reduce(function(e,t){return r[t]===g?[].concat(d(e),[t]):e},[]),f=(t=0===r[0],{categories:Object.keys(r),series:[{type:"column",color:r[0]?"#EAEAEA":"#40C2BB",borderRadius:4,dataLabels:{enabled:!t,style:l.d,inside:!1,overflow:"allow",crop:!1},data:Object.keys(r).map(function(e){var a=0!==g&&r[e]===g;return{className:"".concat(t?m.grayChart:m.tealChart," ").concat(r[e]!==g&&0!==r[e]?"opacity-25":""),borderWidth:a?2:0,borderColor:a?"black":"",y:r[e]}})}]});return n.createElement(s.L,{title:v("title"),svgName:o.vn.Refresh,svgClassName:"bg-light-purple text-purple"},n.createElement("p",null,b.length?n.createElement(c.x,{namespace:h,phrase:"averageAttempts",options:{smartCount:(a=Object.entries(r).reduce(function(e,t){var a,n,r=(n=2,function(e){if(Array.isArray(e))return e}(a=t)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,r,s,i,l=[],c=!0,o=!1;try{if(s=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;c=!1}else for(;!(c=(n=s.call(a)).done)&&(l.push(n.value),l.length!==t);c=!0);}catch(e){o=!0,r=e}finally{try{if(!c&&null!=a.return&&(i=a.return(),Object(i)!==i))return}finally{if(o)throw r}}return l}}(a,n)||p(a,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.")}()),s=r[0],i=r[1];return e.totalAttempts+=+s*i,e.totalUsers+=i,e},{totalAttempts:0,totalUsers:0}),0===a.totalUsers?0:Math.round(a.totalAttempts/a.totalUsers*100)/100)}}):n.createElement(c.x,{namespace:h,phrase:"noAttempts"})),n.createElement("div",{className:"mt-auto"},n.createElement(i.x,{label:v("attempts"),chartData:f})))}var f=a(75896);const y={redChart:"G7zOw",yellowChart:"k34mm",greenChart:"vBneA",blueChart:"RPTWm",grayChart:"k4JFZ",borderDark:"LWor3"};var E="shared.insightAverageScore",k=r.T.encloseNamespace(E);function N(e){return n.createElement(s.L,{title:k("title"),svgName:o.vn.Analytics,svgClassName:"bg-light-orange text-orange"},n.createElement("p",null,e.students.length?n.createElement(c.x,{namespace:E,phrase:"averageScore",options:(l=e.students.map(function(e){return e.summary.percentCorrect}),m=l.reduce(function(e,t){return e+t},0)/l.length,u=f.m.last(f.m.last(e.students).results).attempts.length,{averageScore:Math.round(u*m),totalQuestions:u,averagePercentage:(100*m).toFixed(1)})}):n.createElement(c.x,{namespace:E,phrase:"noAnswers"})),n.createElement(i.x,{label:"".concat(k("studentScores")," (%)"),chartData:(t=Array(11).fill(0),a=e.students.reduce(function(e,t){return e[Math.floor(10*t.summary.percentCorrect)]++,e},t),r=["0","10","20","30","40","50","60","70","80","90","100"],{categories:r,series:[{type:"column",color:"#4E9ACE",borderRadius:4,data:a.map(function(e,t){var a=Number(r[t]);return{className:"".concat(function(e,t){return 0===t?y.grayChart:e<50?y.redChart:e<70?y.yellowChart:e<90?y.greenChart:y.blueChart}(a,e)),y:e}})}]})}));var t,a,r,l,m,u}var A=a(98551),C=r.T.encloseNamespace("shared.insightCompletedStudents");function x(e){return n.createElement(s.L,{title:C("title"),svgName:o.vn.Flag,svgClassName:"bg-light-indigo text-indigo",count:e.students.length},n.createElement(A.y,{students:e.students.map(function(e){return Object.assign(Object.assign({},e.user),{percentage:e.summary.percentCorrect})}),imageCdnUrl:e.imageCdnUrl,imageUrl:e.imageUrl,description:C("completedStudents"),appLink:e.resultsAppLink,appLinkText:C("viewAll"),anonymiseUsers:e.anonymiseUsers}))}var L=a(51870),S=a(39157),O=a(15611),w=a(86572),U=a(40782),j=a(80845),I="shared.insightEasiestQuestion",M=r.T.encloseNamespace(I);function T(e){var t,a=n.useMemo(function(){return t=e.interactive,a=e.results,n=(0,j.Q)(t).map(function(e){return Object.assign(Object.assign({},e),{resultsSummary:(0,S.nq)(e,a)})}).filter(function(e){return!!e.resultsSummary.answered&&!e.resultsSummary.awaitingMarking}),r=f.m.sortBy(n,function(e){return e.resultsSummary.percentCorrect}),f.m.last(r);var t,a,n,r},[e.results.students.length]);return n.createElement(s.L,{title:M("title"),svgName:o.vn.StarOutline,svgClassName:"bg-light-blue text-blue"},n.createElement("div",{className:"d-flex align-items-center"},n.createElement(U.O,{percentage:null===(t=null==a?void 0:a.resultsSummary)||void 0===t?void 0:t.percentCorrect,layout:U.I.LabelInside}),a?n.createElement("div",{className:"d-flex ms-2"},n.createElement(w.y,{interaction:a,iconClassName:"flex-shrink-0"})):n.createElement("span",{className:"ms-2"},M("noAnswers"))),a&&n.createElement(O.F,{appLink:Object.assign(Object.assign({},e.questionsAppLink),{params:Object.assign(Object.assign({},e.questionsAppLink.params),{sortBy:"score_desc"})}),className:"text-info"},n.createElement(c.x,{namespace:I,phrase:"viewQuestions"})))}var R="shared.insightHardestQuestion",q=r.T.encloseNamespace(R);function W(e){var t,a=n.useMemo(function(){return t=e.interactive,a=e.results,n=(0,j.Q)(t).map(function(e){return Object.assign(Object.assign({},e),{resultsSummary:(0,S.nq)(e,a)})}).filter(function(e){return!!e.resultsSummary.answered&&!e.resultsSummary.awaitingMarking}),r=f.m.sortBy(n,function(e){return e.resultsSummary.percentCorrect}),f.m.first(r);var t,a,n,r},[e.results.students.length]);return n.createElement(s.L,{title:q("title"),svgName:o.vn.QuestionMark,svgClassName:"bg-light-orange text-orange"},n.createElement("div",{className:"d-flex align-items-center"},n.createElement(U.O,{percentage:null===(t=null==a?void 0:a.resultsSummary)||void 0===t?void 0:t.percentCorrect,layout:U.I.LabelInside}),a?n.createElement("div",{className:"d-flex ms-2"},n.createElement(w.y,{interaction:a,iconClassName:"flex-shrink-0"})):n.createElement("span",{className:"ms-2"},q("noAnswers"))),a&&n.createElement(O.F,{appLink:Object.assign(Object.assign({},e.questionsAppLink),{params:Object.assign(Object.assign({},e.questionsAppLink.params),{sortBy:"score_asc"})}),className:"text-info"},n.createElement(c.x,{namespace:R,phrase:"viewQuestions"})))}var B=a(50916),P=r.T.encloseNamespace("shared.insightHighScoringStudents");function _(e){return n.createElement(s.L,{title:P("title"),svgName:o.vn.Trophy,svgClassName:"bg-light-teal text-teal",count:e.students.length},n.createElement(A.y,{students:e.students.map(function(e){return Object.assign(Object.assign({},e.user),{percentage:e.summary.percentCorrect})}),imageCdnUrl:e.imageCdnUrl,imageUrl:e.greenChartImageUrl,description:P(e.completed.length?"noStudents":"highScore"),appLink:Object.assign(Object.assign({},e.resultsAppLink),{params:Object.assign(Object.assign({},e.resultsAppLink.params),{sortBy:"score_desc"})}),appLinkText:P("viewByHighest"),anonymiseUsers:e.anonymiseUsers}))}var D=r.T.encloseNamespace("shared.insightLowScoringStudents");function H(e){return n.createElement(s.L,{title:D("title"),svgName:o.vn.Hand,svgClassName:"bg-light-red text-red",count:e.students.length},n.createElement(A.y,{students:e.students.map(function(e){return Object.assign(Object.assign({},e.user),{percentage:e.summary.percentCorrect})}),imageCdnUrl:e.imageCdnUrl,imageUrl:e.completed.length?e.heartImageUrl:e.redChartImageUrl,description:D(e.completed.length?"doingWell":"lowScore"),appLink:Object.assign(Object.assign({},e.resultsAppLink),{params:Object.assign(Object.assign({},e.resultsAppLink.params),{sortBy:"score_asc"})}),appLinkText:D("viewByLowest"),anonymiseUsers:e.anonymiseUsers}))}var Q=r.T.encloseNamespace("shared.insightMarkingRequired");function Z(e){return n.createElement(s.L,{title:Q("title"),svgName:o.vn.Hand,svgClassName:"bg-light-blue text-blue",count:e.students.length},n.createElement(A.y,{students:e.students,imageCdnUrl:e.imageCdnUrl,imageUrl:e.imageUrl,description:Q("studentsRequireMarking"),appLink:Object.assign(Object.assign({},e.resultsAppLink),{params:{filterBy:"marking_required"}}),appLinkText:Q("viewAll"),anonymiseUsers:e.anonymiseUsers}))}function z(e){return function(e){if(Array.isArray(e))return F(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return F(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?F(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function F(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var G=r.T.encloseNamespace("shared.insightNotCompletedStudents");function J(e){var t,a,r,i=(t=e.markingRequiredStudents.map(function(e){return null==e?void 0:e.user.id}),a=e.completedStudents.map(function(e){return null==e?void 0:e.user.id}),r=e.classroomStudents.filter(function(e){return!t.includes(e.id)&&!a.includes(e.id)}),f.m.uniq([].concat(z(e.notCompletedStudents.map(function(e){return e.user})),z(r)),"id"));return n.createElement(s.L,{title:G("title"),svgName:o.vn.Puzzle,svgClassName:"bg-light-teal text-teal",count:i.length},n.createElement(A.y,{students:i,imageCdnUrl:e.imageCdnUrl,imageUrl:e.imageUrl,description:G("completed"),appLink:Object.assign(Object.assign({},e.resultsAppLink),{params:{filterBy:"not_completed"}}),appLinkText:G("viewAll"),anonymiseUsers:e.anonymiseUsers}))}var V=a(8604),$=a(94892),K=a(99742),X=a(91693),Y=a(38279),ee="lite.insightsMask";function te(e){return n.createElement("div",{className:"".concat(e.requiresMarking&&Y.Z.mask," position-relative")},n.createElement("div",{className:e.requiresMarking?"position-absolute top-0":""},e.children),n.createElement("div",{className:e.requiresMarking?"".concat(Y.Z.backdrop," d-flex flex-column align-items-center justify-content-start py-5"):""},!!e.requiresMarking&&n.createElement("div",{className:"text-center w-50"},n.createElement("img",{src:K.W.Insights.MARKING_RESPONSES,className:"mb-3",width:288}),n.createElement("h2",{className:"h3 mb-3"},n.createElement(c.x,{namespace:ee,phrase:"markHeading"})),n.createElement("p",{className:"mb-3"},n.createElement(c.x,{namespace:ee,phrase:"markDescription"})),n.createElement(X.h,{svgName:o.vn.Check,className:"btn btn-dark mb-3",appLink:Object.assign(Object.assign({},e.appLink),{params:Object.assign(Object.assign({},e.appLink.params),{filterBy:"marking_required"})})},n.createElement(c.x,{namespace:ee,phrase:"markResponses",options:{smartCount:e.requiresMarking}})),n.createElement("button",{className:"btn btn-link d-block p-0 mx-auto",onClick:e.hideMarkingRequiredMask},n.createElement(c.x,{namespace:ee,phrase:"seeIncomplete"})))))}var ae=a(53214);const ne={partialInsights:"pG0Jh"};function re(){return n.createElement("div",null,n.createElement("h2",{className:"h4 w-25 partial-loading-background"}," "),n.createElement("div",{className:"row g-3 mb-5"},n.createElement("div",{className:"col-6"},n.createElement("div",{className:"".concat(ne.partialInsights," rounded partial-loading-background")})),n.createElement("div",{className:"col-6"},n.createElement("div",{className:"".concat(ne.partialInsights," rounded partial-loading-background")}))),n.createElement("h2",{className:"h4 w-25 partial-loading-background"}," "),n.createElement("div",{className:"row g-3 mb-5"},n.createElement("div",{className:"col-6"},n.createElement("div",{className:"".concat(ne.partialInsights," rounded partial-loading-background")})),n.createElement("div",{className:"col-6"},n.createElement("div",{className:"".concat(ne.partialInsights," rounded partial-loading-background")})),n.createElement("div",{className:"col-6"},n.createElement("div",{className:"".concat(ne.partialInsights," rounded partial-loading-background")})),n.createElement("div",{className:"col-6"},n.createElement("div",{className:"".concat(ne.partialInsights," rounded partial-loading-background")}))),n.createElement("h2",{className:"h4 w-25 partial-loading-background"}," "),n.createElement("div",{className:"row g-3 mb-5"},n.createElement("div",{className:"col-6"},n.createElement("div",{className:"".concat(ne.partialInsights," rounded partial-loading-background")})),n.createElement("div",{className:"col-6"},n.createElement("div",{className:"".concat(ne.partialInsights," rounded partial-loading-background")})),n.createElement("div",{className:"col-6"},n.createElement("div",{className:"".concat(ne.partialInsights," rounded partial-loading-background")})),n.createElement("div",{className:"col-6"},n.createElement("div",{className:"".concat(ne.partialInsights," rounded partial-loading-background")}))))}function se(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var ie="insights.interactiveInsightsOverview";function le(e){var t,a,r,s,i,l,o,m=(i=n.useState(!1),l=2,function(e){if(Array.isArray(e))return e}(i)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,r,s,i,l=[],c=!0,o=!1;try{if(s=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;c=!1}else for(;!(c=(n=s.call(a)).done)&&(l.push(n.value),l.length!==t);c=!0);}catch(e){o=!0,r=e}finally{try{if(!c&&null!=a.return&&(i=a.return(),Object(i)!==i))return}finally{if(o)throw r}}return l}}(i,l)||function(e,t){if(e){if("string"==typeof e)return se(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?se(e,t):void 0}}(i,l)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),u=m[0],d=m[1],p=e.hasDataLoaded&&(0,S.R6)(e.interactive,e.results,$.T),g=e.hasDataLoaded&&!!e.results.students.length,h=(null===(r=null===(a=null===(t=e.results)||void 0===t?void 0:t.students)||void 0===a?void 0:a.filter(function(e){return!e.isPlaceholder}))||void 0===r?void 0:r.length)||0;return n.createElement(n.Fragment,null,!e.hasDataLoaded&&n.createElement(re,null),e.hasDataLoaded&&n.createElement(ae.u,{video:e.interactiveMetadata,hasData:g,share:e.share},n.createElement("section",{className:"mb-5"},n.createElement("h2",{className:"h4"},n.createElement(c.x,{namespace:ie,phrase:"studentResponses"}),n.createElement("span",null,": ",h,e.classroomStudents?"/".concat(e.classroomStudents.length):"")),n.createElement("div",{className:"row g-3"},n.createElement("div",{className:"col"},n.createElement(Z,{imageUrl:K.W.Insights.SPEECH_BUBBLE_ASTERISK,resultsAppLink:e.interactiveInsightsAppLinks.resultsAppLink,imageCdnUrl:e.config.imageCdnUrl,students:(o=p.markingRequired,o.map(function(e){return e.user})),anonymiseUsers:e.anonymiseUsers})),!!(null===(s=e.classroomStudents)||void 0===s?void 0:s.length)&&n.createElement("div",{className:"col"},n.createElement(J,{markingRequiredStudents:p.markingRequired,completedStudents:p.completed,notCompletedStudents:p.notCompleted,classroomStudents:e.classroomStudents,imageCdnUrl:e.config.imageCdnUrl,imageUrl:K.W.Insights.JIGSAW,resultsAppLink:e.interactiveInsightsAppLinks.resultsAppLink,anonymiseUsers:e.anonymiseUsers})),n.createElement("div",{className:"col"},n.createElement(x,{students:p.completed,imageCdnUrl:e.config.imageCdnUrl,imageUrl:K.W.Insights.AVATAR,resultsAppLink:e.interactiveInsightsAppLinks.resultsAppLink,anonymiseUsers:e.anonymiseUsers})))),n.createElement(te,{requiresMarking:!u&&p.markingRequired.length,appLink:e.interactiveInsightsAppLinks.resultsAppLink,hideMarkingRequiredMask:function(){return d(!0)}},n.createElement("section",{className:"mb-5"},n.createElement("h2",{className:"h4"},n.createElement(c.x,{namespace:ie,phrase:"studentsPerformance"})),n.createElement("div",{className:"row g-3"},n.createElement("div",{className:"col-6"},n.createElement(H,{redChartImageUrl:K.W.Insights.RED_CHART,heartImageUrl:K.W.Insights.SPEECH_BUBBLE_HEART,resultsAppLink:e.interactiveInsightsAppLinks.resultsAppLink,imageCdnUrl:e.config.imageCdnUrl,students:p.lowScore,completed:p.completed,anonymiseUsers:e.anonymiseUsers})),n.createElement("div",{className:"col-6"},n.createElement(_,{greenChartImageUrl:K.W.Insights.GREEN_CHART,resultsAppLink:e.interactiveInsightsAppLinks.resultsAppLink,imageCdnUrl:e.config.imageCdnUrl,students:p.highScore,completed:p.completed,anonymiseUsers:e.anonymiseUsers})),n.createElement("div",{className:"col-6"},n.createElement(W,{interactive:e.interactive,interactiveMetadata:e.interactiveMetadata,results:e.results,questionsAppLink:e.interactiveInsightsAppLinks.questionsAppLink})),n.createElement("div",{className:"col-6"},n.createElement(T,{interactive:e.interactive,interactiveMetadata:e.interactiveMetadata,results:e.results,questionsAppLink:e.interactiveInsightsAppLinks.questionsAppLink})))),n.createElement("section",{className:"mb-5"},n.createElement("h2",{className:"h4"},n.createElement(c.x,{namespace:ie,phrase:"classPerformance"})),n.createElement("div",{className:"row g-3"},n.createElement("div",{className:"col-6"},n.createElement(N,{students:p.completed})),n.createElement("div",{className:"col-6"},n.createElement(b,{students:p.completed})),n.createElement("div",{className:"col-6"},n.createElement(L.i,{osCount:e.osCount})),n.createElement("div",{className:"col-6"},n.createElement(B.b,{engagement:e.aggregateEngagement,heatmapAppLink:e.interactiveInsightsAppLinks.heatmapAppLink,engagementRate:(0,V.Q)(e.individualEngagement)})))))))}},38279:(e,t,a)=>{a.d(t,{Z:()=>n});const n={mask:"VRTes",backdrop:"XzVXl"}}}]);
2
- //# sourceMappingURL=4948-ba684e5f4f-lite.chunk.js.map
2
+ //# sourceMappingURL=4948-de1c75e7fb-lite.chunk.js.map