@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([[4208],{69087:(e,t,r)=>{r.d(t,{d:()=>C});var n=r(32735),a=r(56644),s=r(23481),i=r(75896),o=r(83914),c=r(8246),u=r(35223);function l(e){var t=e.answer;return n.createElement("div",{key:t.id,className:"".concat(function(e){switch(e){case c.N.Correct:return"bg-light-green";case c.N.Incorrect:return"bg-light-red";case c.N.PendingReview:return"bg-light-blue"}}(t.status)," rounded p-2 mb-2")},n.createElement("div",{className:"d-flex align-items-center gap-2"},t.status===c.N.Correct&&n.createElement(o.x,{svgName:u.vn.Check,className:"svg-container flex-shrink-0 text-success"}),t.status===c.N.Incorrect&&n.createElement(o.x,{svgName:u.vn.Close,className:"svg-container flex-shrink-0 text-danger"}),!e.customAnswer&&n.createElement("span",{className:e.textClassName},t.text)),e.children)}var m=s.T.encloseNamespace("shared.interactionResponses");function d(e){return d="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},d(e)}function v(e,t,r){return(t=function(e){var t=function(e){if("object"!=d(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=d(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==d(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var f=function(){return n.createElement(n.Fragment,null)},y=v(v(v(v(v(v(v({},a.Z9.Annotation,f),a.Z9.Image,f),a.Z9.MissingWord,function(e){return e.answers.length?n.createElement("ul",{className:"list-unstyled"},e.answers.map(function(e){return n.createElement("li",{key:e.id},n.createElement(l,{answer:e,textClassName:"bg-white p-1 border border-gray-300 rounded"}))})):n.createElement(n.Fragment,null)}),a.Z9.MultipleChoice,function(e){return e.answers.length?n.createElement("ul",{className:"list-unstyled"},e.answers.map(function(e){return n.createElement("li",{key:e.id},n.createElement(l,{answer:e}))})):n.createElement(n.Fragment,null)}),a.Z9.TrueOrFalse,function(e){var t=i.m.first(e.answers);return t?n.createElement(l,{answer:t}):n.createElement(n.Fragment,null)}),a.Z9.ShortAnswer,function(e){var t=i.m.first(e.answers);return t?n.createElement(l,{answer:t},e.children):n.createElement(n.Fragment,null)}),a.Z9.Illustration,function(e){var t=i.m.first(e.answers);return t?n.createElement(l,{answer:t,customAnswer:!0},n.createElement("div",{className:"ratio ratio-16x9"},n.createElement("img",{className:"img-fluid bg-white border rounded h-100 w-100",src:t.text,alt:"".concat(m("illustrationAlt"),": ").concat(e.interaction.name)})),e.children):n.createElement(n.Fragment,null)}),g=r(97408),p=r(44526),w=r(56151),h=r(3894),b=r(69737),I=r(83140),E=r(80845),S=r(64818);const k={avatarContainer:"O7oaA"};function C(e){var t,r,a,s,i,o,c,u=y[e.interaction.typeId];if(!u)return n.createElement(n.Fragment,null);var l=(0,E.j_)(e.studentResults),m=(0,E.f6)(e.interaction.id,l),d=I.A.isInteractionCorrect(e.interaction,l);return n.createElement("div",{className:"position-relative"},n.createElement("div",{className:"rounded ".concat(null!==(t=e.className)&&void 0!==t?t:"")},n.createElement("div",{className:"d-flex"},!!e.showStudentDetails&&n.createElement("div",{className:"me-2"},n.createElement("div",{className:k.avatarContainer},n.createElement(g.q,{imageCdnUrl:e.imageCdnUrl,initials:e.anonymisedUserName?S.l.getInitialsFromFullName(e.anonymisedUserName):S.l.getInitials(null===(r=e.studentResults.user)||void 0===r?void 0:r.name,null===(a=e.studentResults.user)||void 0===a?void 0:a.surname),imageUrl:e.anonymisedUserName?null:null===(i=null===(s=e.studentResults.user)||void 0===s?void 0:s.avatar)||void 0===i?void 0:i.url,showAnonymousUser:!!(null===(c=null===(o=e.studentResults)||void 0===o?void 0:o.user)||void 0===c?void 0:c.sessionId)}))),n.createElement("div",{className:"flex-grow-1"},!!e.showStudentDetails&&n.createElement(w.U,{studentResults:e.studentResults,correctness:d,anonymisedUserName:e.anonymisedUserName}),n.createElement("div",{className:"d-flex justify-content-between"},n.createElement("div",{className:"flex-grow-1 mb-2 ".concat(e.responseComponentClass?e.responseComponentClass:"")},m?n.createElement(u,{interaction:e.interaction,answers:m.answers,imageCdnUrl:e.imageCdnUrl,user:e.studentResults.user,showFeedback:e.showFeedback,showAvatar:e.showAvatar},n.createElement(h.Z,{studentAttempt:m,correctness:d,markInteraction:e.markInteraction,markedStatus:e.markedStatus})):n.createElement(b.R,null)),!e.showStudentDetails&&n.createElement(p.Y,{correctness:d}))))))}},93479:(e,t,r)=>{r.d(t,{I:()=>i});var n=r(99940);function a(e,t,r){if(!t)return e;var n="".concat(e,":").concat(t.start,":").concat(t.end),a=Array.isArray(t.userId)?t.userId.sort().join(":"):t.userId,s=Array.isArray(t.groupId)?t.groupId.sort().join(":"):t.groupId,i=Array.isArray(t.customerId)?t.customerId.sort().join(":"):t.customerId;return a&&(n+=":".concat(a)),s&&(n+=":".concat(s)),i&&(n+=":".concat(i)),r&&(n+=":".concat(r)),n}function s(e,t,r){return{currentUserId:e.id,currentCustomerId:e.customerId,dateRange:t?{start:t.start,end:t.end}:void 0,userIds:null==t?void 0:t.userId,classroomsAndGroups:null==t?void 0:t.groupId,shareId:r}}var i={interactiveResultSet:function(e,t,r,i,o,c,u,l){return{url:o?"/api/domain/v3/analytics/interactives/".concat(e,"/metadata/").concat(t):"/api/domain/v2/analytics/interactives/".concat(e,"/metadata/").concat(t),key:a("interactive:result:set:".concat(e,":").concat(t,":").concat(o),i),data:s(r,i,o),type:n.k.POST,normalize:!1,success:c,error:u,always:l}},mark:function(e,t,r,a,s,i,o){return{url:"/api/domain/v1/analytics/answers/".concat(r),key:"mark:answer:".concat(r,":").concat(a.resultId),type:n.k.PUT,data:a,normalize:!1,invalidationKeys:"interactive:result:set:".concat(e,":").concat(t),success:s,error:i,always:o}},pendingReviews:function(e){var t=e.interactives.map(function(e){return"".concat(e.interactiveId,":").concat(e.metadataId,":").concat(e.shareId)}).join(",");return{url:"/api/domain/v1/analytics/interactives/pending-reviews/summary",key:"interactives:pending:reviews:".concat(t),type:n.k.POST,data:e,normalize:!1}},interactiveResultsReport:function(e){return{url:"/api/domain/v3/analytics/interactives/report",key:"interactive:results:report",data:e,type:n.k.POST,normalize:!1}}}},9193:(e,t,r)=>{r.d(t,{D:()=>v});var n=r(32735),a=r(70680),s=r(23481),i=r(20354),o=r(93479),c=r(39157),u=r(69883);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 m(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var d=s.T.encloseNamespace("reportsShared.dataHooks"),v=function(e,t,r){var s,v,f=(s=(0,n.useState)({}),v=2,function(e){if(Array.isArray(e))return e}(s)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,s,i,o=[],c=!0,u=!1;try{if(s=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=s.call(r)).done)&&(o.push(n.value),o.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(u)throw a}}return o}}(s,v)||function(e,t){if(e){if("string"==typeof e)return m(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?m(e,t):void 0}}(s,v)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),y=f[0],g=f[1],p=(0,a.I0)(),w=(0,u.Z)();return{markedAnswers:y,addMarkedAnswers:function(e,t){e.forEach(function(e){g(function(r){return Object.assign(Object.assign({},r),function(e,t,r){return(t=function(e){var t=function(e){if("object"!=l(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=l(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==l(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},(0,c.UU)(e),Object.assign(Object.assign({},e),{status:t})))})})},submitMarkedAnswers:function(){var n=Object.keys(y).map(function(e){return y[e]});if(n.length){var a=0,s=0;n.forEach(function(r){var n=r.id,a=r.resultId,s=r.questionId,l=r.status;i.a.fetch(p,o.I.mark(e,t,n,{id:n,resultId:a,questionId:s,status:l},c,null,u))})}function c(){s++}function u(){var e,t;++a===n.length&&(e="",t=!1,0===s&&(e=d("error",{smartCount:n.length}),t=!0),s<a&&(e=d("success",{smartCount:s})+" ".concat(d("partialError",{smartCount:a-s}))),s===a&&(e=d("success",{smartCount:s})),t?w.error(e):w.success(e),g({}),r&&r())}}}}},39157:(e,t,r)=>{r.d(t,{HI:()=>d,R6:()=>u,Rt:()=>f,UU:()=>m,Zs:()=>l,nq:()=>v});var n=r(75896),a=r(94892),s=r(28972),i=r(8246),o=r(83140),c=r(80845);function u(e,t,r){var s={markingRequired:[],lowScore:[],highScore:[],completed:[],notCompleted:[]},i=(0,c.Q)(e),o=new Set(i.map(function(e){return e.id}));t.students.forEach(function(t){var i=Object.assign(Object.assign({},t),{summary:f(e,t)});i.summary.awaitingMarking?s.markingRequired.push(i):n.m.last(t.results).attempts.filter(function(e){var t;return!!o.has(null===(t=null==e?void 0:e.answers[0])||void 0===t?void 0:t.questionId)}).length===o.size?(s.completed.push(i),i.summary.percentCorrect>=((null==r?void 0:r.HIGH)||a.i.HIGH)&&s.highScore.push(i),i.summary.percentCorrect<((null==r?void 0:r.MODERATE)||a.i.MODERATE)&&s.lowScore.push(i)):s.notCompleted.push(i)});var u=n.m.sortBy(s.lowScore,function(e){return e.summary.percentCorrect}),l=n.m.sortBy(s.highScore,function(e){return-e.summary.percentCorrect});return Object.assign(Object.assign({},s),{lowScore:u,highScore:l})}function l(e,t){return(0,c.Wn)(e).find(function(e){return e.id.toString()===t.toString()})}function m(e){return"".concat(e.questionId,":").concat(e.resultId)}function d(e,t,r){var n=(0,c.j_)(t),a=(0,c.f6)(e,n);return(null==a?void 0:a.answers.every(function(e){var t;return(null===(t=r[m(e)])||void 0===t?void 0:t.status)===i.N.Correct}))?i.N.Correct:(null==a?void 0:a.answers.every(function(e){var t;return(null===(t=r[m(e)])||void 0===t?void 0:t.status)===i.N.Incorrect}))?i.N.Incorrect:void 0}function v(e,t){var r=t.students.length,n=0,a=0,i=0,u=0,l=0;return t.students.forEach(function(t){var r=(0,c.j_)(t);if(r){l+=t.results.length;var m=o.A.isInteractionCorrect(e,r);m===s.w.Correct&&n++,m===s.w.UnAnswered&&i++,m===s.w.AwaitingMarking&&u++,m!==s.w.UnAnswered&&a++}}),{percentCorrect:r>0?n/r:0,correct:n,answered:a,unanswered:i,awaitingMarking:u,attempts:l}}function f(e,t){var r=(0,c.j_)(t),n=(0,c.Q)(e),a=n.length,i=0,u=0;n.forEach(function(e){var t=o.A.isInteractionCorrect(e,r);t===s.w.Correct&&i++,t===s.w.AwaitingMarking&&u++});var l=a>0?i/a:0,m=new Set(n.map(function(e){return e.id})),d=r.attempts.filter(function(e){var t;return!!m.has(null===(t=null==e?void 0:e.answers[0])||void 0===t?void 0:t.questionId)}).length;return{answered:d,attempts:t.results.length,unanswered:a-d,percentCorrect:l,correct:i,awaitingMarking:u}}}}]);
2
- //# sourceMappingURL=4208-0706461da6-lite.chunk.js.map
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1336],{69087:(e,t,r)=>{r.d(t,{d:()=>C});var n=r(32735),a=r(56644),s=r(23481),i=r(75896),o=r(83914),c=r(8246),u=r(35223);function l(e){var t=e.answer;return n.createElement("div",{key:t.id,className:"".concat(function(e){switch(e){case c.N.Correct:return"bg-light-green";case c.N.Incorrect:return"bg-light-red";case c.N.PendingReview:return"bg-light-blue"}}(t.status)," rounded p-2 mb-2")},n.createElement("div",{className:"d-flex align-items-center gap-2"},t.status===c.N.Correct&&n.createElement(o.x,{svgName:u.vn.Check,className:"svg-container flex-shrink-0 text-success"}),t.status===c.N.Incorrect&&n.createElement(o.x,{svgName:u.vn.Close,className:"svg-container flex-shrink-0 text-danger"}),!e.customAnswer&&n.createElement("span",{className:e.textClassName},t.text)),e.children)}var m=s.T.encloseNamespace("shared.interactionResponses");function d(e){return d="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},d(e)}function v(e,t,r){return(t=function(e){var t=function(e){if("object"!=d(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=d(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==d(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var f=function(){return n.createElement(n.Fragment,null)},y=v(v(v(v(v(v(v({},a.Z9.Annotation,f),a.Z9.Image,f),a.Z9.MissingWord,function(e){return e.answers.length?n.createElement("ul",{className:"list-unstyled"},e.answers.map(function(e){return n.createElement("li",{key:e.id},n.createElement(l,{answer:e,textClassName:"bg-white p-1 border border-gray-300 rounded"}))})):n.createElement(n.Fragment,null)}),a.Z9.MultipleChoice,function(e){return e.answers.length?n.createElement("ul",{className:"list-unstyled"},e.answers.map(function(e){return n.createElement("li",{key:e.id},n.createElement(l,{answer:e}))})):n.createElement(n.Fragment,null)}),a.Z9.TrueOrFalse,function(e){var t=i.m.first(e.answers);return t?n.createElement(l,{answer:t}):n.createElement(n.Fragment,null)}),a.Z9.ShortAnswer,function(e){var t=i.m.first(e.answers);return t?n.createElement(l,{answer:t},e.children):n.createElement(n.Fragment,null)}),a.Z9.Illustration,function(e){var t=i.m.first(e.answers);return t?n.createElement(l,{answer:t,customAnswer:!0},n.createElement("div",{className:"ratio ratio-16x9"},n.createElement("img",{className:"img-fluid bg-white border rounded h-100 w-100",src:t.text,alt:"".concat(m("illustrationAlt"),": ").concat(e.interaction.name)})),e.children):n.createElement(n.Fragment,null)}),g=r(97408),p=r(44526),w=r(56151),h=r(3894),b=r(69737),I=r(83140),E=r(80845),S=r(64818);const k={avatarContainer:"O7oaA"};function C(e){var t,r,a,s,i,o,c,u=y[e.interaction.typeId];if(!u)return n.createElement(n.Fragment,null);var l=(0,E.j_)(e.studentResults),m=(0,E.f6)(e.interaction.id,l),d=I.A.isInteractionCorrect(e.interaction,l);return n.createElement("div",{className:"position-relative"},n.createElement("div",{className:"rounded ".concat(null!==(t=e.className)&&void 0!==t?t:"")},n.createElement("div",{className:"d-flex"},!!e.showStudentDetails&&n.createElement("div",{className:"me-2"},n.createElement("div",{className:k.avatarContainer},n.createElement(g.q,{imageCdnUrl:e.imageCdnUrl,initials:e.anonymisedUserName?S.l.getInitialsFromFullName(e.anonymisedUserName):S.l.getInitials(null===(r=e.studentResults.user)||void 0===r?void 0:r.name,null===(a=e.studentResults.user)||void 0===a?void 0:a.surname),imageUrl:e.anonymisedUserName?null:null===(i=null===(s=e.studentResults.user)||void 0===s?void 0:s.avatar)||void 0===i?void 0:i.url,showAnonymousUser:!!(null===(c=null===(o=e.studentResults)||void 0===o?void 0:o.user)||void 0===c?void 0:c.sessionId)}))),n.createElement("div",{className:"flex-grow-1"},!!e.showStudentDetails&&n.createElement(w.U,{studentResults:e.studentResults,correctness:d,anonymisedUserName:e.anonymisedUserName}),n.createElement("div",{className:"d-flex justify-content-between"},n.createElement("div",{className:"flex-grow-1 mb-2 ".concat(e.responseComponentClass?e.responseComponentClass:"")},m?n.createElement(u,{interaction:e.interaction,answers:m.answers,imageCdnUrl:e.imageCdnUrl,user:e.studentResults.user,showFeedback:e.showFeedback,showAvatar:e.showAvatar},n.createElement(h.Z,{studentAttempt:m,correctness:d,markInteraction:e.markInteraction,markedStatus:e.markedStatus})):n.createElement(b.R,null)),!e.showStudentDetails&&n.createElement(p.Y,{correctness:d}))))))}},93479:(e,t,r)=>{r.d(t,{I:()=>i});var n=r(99940);function a(e,t,r){if(!t)return e;var n="".concat(e,":").concat(t.start,":").concat(t.end),a=Array.isArray(t.userId)?t.userId.sort().join(":"):t.userId,s=Array.isArray(t.groupId)?t.groupId.sort().join(":"):t.groupId,i=Array.isArray(t.customerId)?t.customerId.sort().join(":"):t.customerId;return a&&(n+=":".concat(a)),s&&(n+=":".concat(s)),i&&(n+=":".concat(i)),r&&(n+=":".concat(r)),n}function s(e,t,r){return{currentUserId:e.id,currentCustomerId:e.customerId,dateRange:t?{start:t.start,end:t.end}:void 0,userIds:null==t?void 0:t.userId,classroomsAndGroups:null==t?void 0:t.groupId,shareId:r}}var i={interactiveResultSet:function(e,t,r,i,o,c,u,l){return{url:o?"/api/domain/v3/analytics/interactives/".concat(e,"/metadata/").concat(t):"/api/domain/v2/analytics/interactives/".concat(e,"/metadata/").concat(t),key:a("interactive:result:set:".concat(e,":").concat(t,":").concat(o),i),data:s(r,i,o),type:n.k.POST,normalize:!1,success:c,error:u,always:l}},mark:function(e,t,r,a,s,i,o){return{url:"/api/domain/v1/analytics/answers/".concat(r),key:"mark:answer:".concat(r,":").concat(a.resultId),type:n.k.PUT,data:a,normalize:!1,invalidationKeys:"interactive:result:set:".concat(e,":").concat(t),success:s,error:i,always:o}},pendingReviews:function(e){var t=e.interactives.map(function(e){return"".concat(e.interactiveId,":").concat(e.metadataId,":").concat(e.shareId)}).join(",");return{url:"/api/domain/v1/analytics/interactives/pending-reviews/summary",key:"interactives:pending:reviews:".concat(t),type:n.k.POST,data:e,normalize:!1}},interactiveResultsReport:function(e){return{url:"/api/domain/v3/analytics/interactives/report",key:"interactive:results:report",data:e,type:n.k.POST,normalize:!1}}}},9193:(e,t,r)=>{r.d(t,{D:()=>v});var n=r(32735),a=r(70680),s=r(23481),i=r(20354),o=r(93479),c=r(39157),u=r(69883);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 m(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var d=s.T.encloseNamespace("reportsShared.dataHooks"),v=function(e,t,r){var s,v,f=(s=(0,n.useState)({}),v=2,function(e){if(Array.isArray(e))return e}(s)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,s,i,o=[],c=!0,u=!1;try{if(s=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=s.call(r)).done)&&(o.push(n.value),o.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(u)throw a}}return o}}(s,v)||function(e,t){if(e){if("string"==typeof e)return m(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?m(e,t):void 0}}(s,v)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),y=f[0],g=f[1],p=(0,a.I0)(),w=(0,u.Z)();return{markedAnswers:y,addMarkedAnswers:function(e,t){e.forEach(function(e){g(function(r){return Object.assign(Object.assign({},r),function(e,t,r){return(t=function(e){var t=function(e){if("object"!=l(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=l(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==l(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},(0,c.UU)(e),Object.assign(Object.assign({},e),{status:t})))})})},submitMarkedAnswers:function(){var n=Object.keys(y).map(function(e){return y[e]});if(n.length){var a=0,s=0;n.forEach(function(r){var n=r.id,a=r.resultId,s=r.questionId,l=r.status;i.a.fetch(p,o.I.mark(e,t,n,{id:n,resultId:a,questionId:s,status:l},c,null,u))})}function c(){s++}function u(){var e,t;++a===n.length&&(e="",t=!1,0===s&&(e=d("error",{smartCount:n.length}),t=!0),s<a&&(e=d("success",{smartCount:s})+" ".concat(d("partialError",{smartCount:a-s}))),s===a&&(e=d("success",{smartCount:s})),t?w.error(e):w.success(e),g({}),r&&r())}}}}},26136:(e,t,r)=>{r.d(t,{B:()=>o});var n=r(76198),a=r(23481),s=r(64818),i=a.T.encloseNamespace("shared.analyticsUtils");function o(e,t){return e?t?(0,n._8)((r=e.id,a=e.sessionId,o=+"".concat(r||function(e){if(!e)return 0;for(var t=0,r=0;r<e.length;r++)t=(t<<5)-t+e.charCodeAt(r),t|=0;return Math.abs(t)}(a)).concat(Math.floor((new Date).getMinutes()/5)),{dictionaries:[n.O9,n.yd],separator:" ",length:2,style:"capital",seed:o})):e.deleted?i("deleted"):s.l.getFullName(e)||i("anonUser"):i("anonUser");var r,a,o}},39157:(e,t,r)=>{r.d(t,{HI:()=>d,R6:()=>u,Rt:()=>f,UU:()=>m,Zs:()=>l,nq:()=>v});var n=r(75896),a=r(94892),s=r(28972),i=r(8246),o=r(83140),c=r(80845);function u(e,t,r){var s={markingRequired:[],lowScore:[],highScore:[],completed:[],notCompleted:[]},i=(0,c.Q)(e),o=new Set(i.map(function(e){return e.id}));t.students.forEach(function(t){var i=Object.assign(Object.assign({},t),{summary:f(e,t)});i.summary.awaitingMarking?s.markingRequired.push(i):n.m.last(t.results).attempts.filter(function(e){var t;return!!o.has(null===(t=null==e?void 0:e.answers[0])||void 0===t?void 0:t.questionId)}).length===o.size?(s.completed.push(i),i.summary.percentCorrect>=((null==r?void 0:r.HIGH)||a.i.HIGH)&&s.highScore.push(i),i.summary.percentCorrect<((null==r?void 0:r.MODERATE)||a.i.MODERATE)&&s.lowScore.push(i)):s.notCompleted.push(i)});var u=n.m.sortBy(s.lowScore,function(e){return e.summary.percentCorrect}),l=n.m.sortBy(s.highScore,function(e){return-e.summary.percentCorrect});return Object.assign(Object.assign({},s),{lowScore:u,highScore:l})}function l(e,t){return(0,c.Wn)(e).find(function(e){return e.id.toString()===t.toString()})}function m(e){return"".concat(e.questionId,":").concat(e.resultId)}function d(e,t,r){var n=(0,c.j_)(t),a=(0,c.f6)(e,n);return(null==a?void 0:a.answers.every(function(e){var t;return(null===(t=r[m(e)])||void 0===t?void 0:t.status)===i.N.Correct}))?i.N.Correct:(null==a?void 0:a.answers.every(function(e){var t;return(null===(t=r[m(e)])||void 0===t?void 0:t.status)===i.N.Incorrect}))?i.N.Incorrect:void 0}function v(e,t){var r=t.students.length,n=0,a=0,i=0,u=0,l=0;return t.students.forEach(function(t){var r=(0,c.j_)(t);if(r){l+=t.results.length;var m=o.A.isInteractionCorrect(e,r);m===s.w.Correct&&n++,m===s.w.UnAnswered&&i++,m===s.w.AwaitingMarking&&u++,m!==s.w.UnAnswered&&a++}}),{percentCorrect:r>0?n/r:0,correct:n,answered:a,unanswered:i,awaitingMarking:u,attempts:l}}function f(e,t){var r=(0,c.j_)(t),n=(0,c.Q)(e),a=n.length,i=0,u=0;n.forEach(function(e){var t=o.A.isInteractionCorrect(e,r);t===s.w.Correct&&i++,t===s.w.AwaitingMarking&&u++});var l=a>0?i/a:0,m=new Set(n.map(function(e){return e.id})),d=r.attempts.filter(function(e){var t;return!!m.has(null===(t=null==e?void 0:e.answers[0])||void 0===t?void 0:t.questionId)}).length;return{answered:d,attempts:t.results.length,unanswered:a-d,percentCorrect:l,correct:i,awaitingMarking:u}}},94892:(e,t,r)=>{r.d(t,{T:()=>a,i:()=>n});var n={HIGH:.75,MODERATE:.5},a={HIGH:.7,MODERATE:.7}}}]);
2
+ //# sourceMappingURL=1336-1826f6e582-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/1336-1826f6e582-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/components/AnswerContainer.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/components/IllustrationResponse.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/ResponseItemComponentLookup.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/components/MissingWordResponse.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/components/MultipleChoiceResponse.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/components/TrueOrFalseResponse.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/components/ShortAnswerResponse.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/interaction-response-item.scss","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/InteractionResponseItem.tsx","file:///app/packages/libs/shared/src/utils/AnalyticsRequestUtils.ts","file:///app/packages/libs/shared/src/apps/analytics/flight-requests/InteractiveResultsRequests.ts","file:///app/packages/libs/shared/src/apps/analytics/hooks/UseMarkAnswers.ts","file:///app/packages/libs/shared/src/apps/analytics/utils/AnonymiseUserUtils.ts","file:///app/packages/libs/shared/src/apps/analytics/utils/InteractiveUtils.ts","file:///app/packages/libs/shared/src/constants/ScoreThresholds.ts"],"sourcesContent":["import React from 'react';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { StudentAnswer } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\ninterface AnswerContainerProps extends React.PropsWithChildren {\n answer: StudentAnswer;\n textClassName?: string;\n customAnswer?: boolean;\n}\n\nexport function AnswerContainer(props: AnswerContainerProps) {\n const { answer } = props;\n\n function getBgColour(status: InteractiveAnswerStatus) {\n switch (status) {\n case InteractiveAnswerStatus.Correct: return 'bg-light-green';\n case InteractiveAnswerStatus.Incorrect: return 'bg-light-red';\n case InteractiveAnswerStatus.PendingReview: return 'bg-light-blue';\n }\n }\n\n return (\n <div key={answer.id} className={`${getBgColour(answer.status)} rounded p-2 mb-2`}>\n <div className='d-flex align-items-center gap-2'>\n {answer.status === InteractiveAnswerStatus.Correct && <SvgContainer svgName={cvSvgLibrary.Check} className='svg-container flex-shrink-0 text-success' />}\n {answer.status === InteractiveAnswerStatus.Incorrect && <SvgContainer svgName={cvSvgLibrary.Close} className='svg-container flex-shrink-0 text-danger' />}\n {!props.customAnswer && <span className={props.textClassName}>{answer.text}</span>}\n </div>\n {props.children}\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnswerContainer } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/components/AnswerContainer';\nimport { ResponseItemComponentProps } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/ResponseItemComponentLookup';\n\nconst namespace = 'shared.interactionResponses';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function IllustrationResponse(props: ResponseItemComponentProps): JSX.Element {\n const answer = ArrayHelper.first(props.answers);\n\n if (!answer)\n return <></>;\n\n return (\n <AnswerContainer answer={answer} customAnswer>\n <div className='ratio ratio-16x9'>\n <img\n className='img-fluid bg-white border rounded h-100 w-100'\n src={answer.text}\n alt={`${getPhrase('illustrationAlt')}: ${props.interaction.name}`}\n />\n </div>\n {props.children}\n </AnswerContainer>\n );\n}","import React from 'react';\n\nimport { Interaction, InteractionTypeId, StudentAnswer, User } from 'libs/shared/interfaces';\n\nimport { IllustrationResponse } from './components/IllustrationResponse';\nimport { MissingWordResponse } from './components/MissingWordResponse';\nimport { MultipleChoiceResponse } from './components/MultipleChoiceResponse';\nimport { ShortAnswerResponse } from './components/ShortAnswerResponse';\nimport { TrueOrFalseResponse } from './components/TrueOrFalseResponse';\n\nexport interface ResponseItemComponentProps extends React.PropsWithChildren {\n interaction: Interaction;\n answers: StudentAnswer[];\n imageCdnUrl: string;\n user: User;\n showFeedback?: boolean;\n showAvatar?: boolean;\n anonymisedUserName?: string;\n}\nconst NoResponseRequired = () => <></>;\n\nexport const ResponseItemComponentLookup: {\n [typeId: number]: (props: ResponseItemComponentProps) => JSX.Element\n} = {\n [InteractionTypeId.Annotation]: NoResponseRequired,\n [InteractionTypeId.Image]: NoResponseRequired,\n [InteractionTypeId.MissingWord]: MissingWordResponse,\n [InteractionTypeId.MultipleChoice]: MultipleChoiceResponse,\n [InteractionTypeId.TrueOrFalse]: TrueOrFalseResponse,\n [InteractionTypeId.ShortAnswer]: ShortAnswerResponse,\n [InteractionTypeId.Illustration]: IllustrationResponse\n};","import React from 'react';\n\nimport { AnswerContainer } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/components/AnswerContainer';\nimport { ResponseItemComponentProps } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/ResponseItemComponentLookup';\n\n\nexport function MissingWordResponse(props: ResponseItemComponentProps) {\n if (!props.answers.length) return <></>;\n\n return (\n <ul className='list-unstyled'>\n {props.answers.map(answer => (\n <li key={answer.id}>\n <AnswerContainer\n answer={answer}\n textClassName='bg-white p-1 border border-gray-300 rounded'\n />\n </li>\n ))}\n </ul>\n );\n}","import React from 'react';\n\nimport { AnswerContainer } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/components/AnswerContainer';\nimport { ResponseItemComponentProps } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/ResponseItemComponentLookup';\n\nexport function MultipleChoiceResponse(props: ResponseItemComponentProps) {\n if (!props.answers.length) return <></>;\n\n return (\n <ul className='list-unstyled'>\n {props.answers.map(answer => (\n <li key={answer.id}>\n <AnswerContainer answer={answer} />\n </li>\n ))}\n </ul>\n );\n}","import React from 'react';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnswerContainer } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/components/AnswerContainer';\nimport { ResponseItemComponentProps } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/ResponseItemComponentLookup';\n\nexport function TrueOrFalseResponse(props: ResponseItemComponentProps) {\n const answer = ArrayHelper.first(props.answers);\n\n if (!answer)\n return <></>;\n\n return (\n <AnswerContainer answer={answer} />\n );\n}","import React from 'react';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnswerContainer } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/components/AnswerContainer';\nimport { ResponseItemComponentProps } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/ResponseItemComponentLookup';\n\nexport function ShortAnswerResponse(props: ResponseItemComponentProps): JSX.Element {\n const answer = ArrayHelper.first(props.answers);\n\n if (!answer)\n return <></>;\n\n return (\n <AnswerContainer answer={answer}>\n {props.children}\n </AnswerContainer>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"avatarContainer\":\"O7oaA\"};","import React from 'react';\n\nimport { ResponseItemComponentLookup } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/ResponseItemComponentLookup';\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { InteractionResponseCorrectness } from 'libs/shared/components/interaction-response/InteractionResponseCorrectness';\nimport { InteractionStudentDetailsHeader } from 'libs/shared/components/interaction-response/InteractionStudentDetailsHeader';\nimport { MarkResponse } from 'libs/shared/components/interaction-response/MarkResponse';\nimport { NoResponse } from 'libs/shared/components/interaction-response/response-types/NoResponse';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, StudentAnswer, StudentResults } from 'libs/shared/interfaces';\nimport { InteractiveCorrectnessHelper } from 'libs/shared/utils/InteractiveCorrectnessHelper';\nimport { getStudentAttempt, getStudentResult } from 'libs/shared/utils/InteractiveHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './interaction-response-item.scss';\n\ninterface InteractionResponseProps {\n interaction: Interaction;\n studentResults: StudentResults;\n imageCdnUrl: string;\n markInteraction: (answers: StudentAnswer[], status: InteractiveAnswerStatus) => void;\n markedStatus?: InteractiveAnswerStatus;\n showStudentDetails?: boolean;\n className?: string;\n showFeedback?: boolean;\n showAvatar?: boolean;\n anonymisedUserName?: string;\n responseComponentClass?: string;\n}\n\nexport function InteractionResponseItem(props: InteractionResponseProps): JSX.Element {\n const ResponseItemComponent = ResponseItemComponentLookup[props.interaction.typeId];\n\n if (!ResponseItemComponent)\n return <></>;\n\n const result = getStudentResult(props.studentResults);\n\n const studentAttempt = getStudentAttempt(props.interaction.id, result);\n\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(props.interaction, result);\n\n return (\n <div className='position-relative'>\n <div className={`rounded ${props.className ?? ''}`}>\n <div className='d-flex'>\n {!!props.showStudentDetails &&\n <div className='me-2'>\n <div className={styles.avatarContainer}>\n <Avatar\n imageCdnUrl={props.imageCdnUrl}\n initials={props.anonymisedUserName\n ? UserHelper.getInitialsFromFullName(props.anonymisedUserName)\n : UserHelper.getInitials(props.studentResults.user?.name, props.studentResults.user?.surname)\n }\n imageUrl={props.anonymisedUserName ? null : props.studentResults.user?.avatar?.url}\n showAnonymousUser={!!props.studentResults?.user?.sessionId}\n />\n </div>\n \n </div>\n }\n <div className='flex-grow-1'>\n {!!props.showStudentDetails &&\n <InteractionStudentDetailsHeader\n studentResults={props.studentResults}\n correctness={correctness}\n anonymisedUserName={props.anonymisedUserName}\n />\n }\n <div className='d-flex justify-content-between'>\n <div className={`flex-grow-1 mb-2 ${props.responseComponentClass ? props.responseComponentClass : ''}`}>\n {studentAttempt\n ? <ResponseItemComponent\n interaction={props.interaction}\n answers={studentAttempt.answers}\n imageCdnUrl={props.imageCdnUrl}\n user={props.studentResults.user}\n showFeedback={props.showFeedback}\n showAvatar={props.showAvatar}\n >\n <MarkResponse\n studentAttempt={studentAttempt}\n correctness={correctness}\n markInteraction={props.markInteraction}\n markedStatus={props.markedStatus}\n />\n </ResponseItemComponent>\n : <NoResponse />\n }\n </div>\n {!props.showStudentDetails &&\n <InteractionResponseCorrectness correctness={correctness} />\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n}","import { AnalyticsRequestFilter } from 'libs/shared/interfaces';\n\nexport function getAnalyticsRequestKey(baseKey: string, filter: AnalyticsRequestFilter, extra?: string): string {\n if (!filter)\n return baseKey;\n\n let key = `${baseKey}:${filter.start}:${filter.end}`;\n\n const userIdKey = Array.isArray(filter.userId) ? filter.userId.sort().join(':') : filter.userId;\n const groupIdKey = Array.isArray(filter.groupId) ? filter.groupId.sort().join(':') : filter.groupId;\n const customerIdKey = Array.isArray(filter.customerId) ? filter.customerId.sort().join(':') : filter.customerId;\n\n if (userIdKey)\n key += `:${userIdKey}`;\n\n if (groupIdKey)\n key += `:${groupIdKey}`;\n\n if (customerIdKey)\n key += `:${customerIdKey}`;\n\n if (extra)\n key += `:${extra}`;\n\n return key;\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/react/index';\n\nimport { MarkInteractiveAnswer } from 'libs/shared/apps/analytics/interfaces/MarkInteractiveAnswer';\nimport { InteractiveResultsReport } from 'libs/shared/apps/analytics/interfaces/requests/InteractiveResultsReport';\nimport { InteractivesPendingReviewsRequest } from 'libs/shared/apps/analytics/interfaces/requests/InteractivesPendingReviewsRequest';\nimport { AnalyticsRequestFilter, CurrentUser, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\ninterface InteractiveResultFilters {\n currentUserId: string;\n currentCustomerId: string;\n dateRange?: { start: string, end: string }\n userIds?: string | string[];\n classroomsAndGroups?: string | string[];\n shareId?: string;\n}\n\nfunction getInteractiveResultFilters(\n currentUser: CurrentUser,\n filter: AnalyticsRequestFilter,\n shareId?: string\n): InteractiveResultFilters {\n return {\n currentUserId: currentUser.id,\n currentCustomerId: currentUser.customerId,\n dateRange: filter ? { start: filter.start, end: filter.end } : undefined,\n userIds: filter?.userId,\n classroomsAndGroups: filter?.groupId,\n shareId: shareId\n };\n}\n\nexport const InteractiveResultsRequests = {\n /** \n * This endpoint returns data with a lot of duplicated ids,\n * e.g. student answers to the same question will have the same id.\n * Because of that, we don't normalize.\n */\n interactiveResultSet(\n interactiveId: string,\n interactiveMetadataId: string,\n currentUser: CurrentUser,\n filter?: AnalyticsRequestFilter,\n shareId?: string,\n success?: (data: InteractiveResultSet) => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: shareId ?\n `/api/domain/v3/analytics/interactives/${interactiveId}/metadata/${interactiveMetadataId}` :\n `/api/domain/v2/analytics/interactives/${interactiveId}/metadata/${interactiveMetadataId}`,\n key: getAnalyticsRequestKey(`interactive:result:set:${interactiveId}:${interactiveMetadataId}:${shareId}`, filter),\n data: getInteractiveResultFilters(currentUser, filter, shareId),\n type: HttpVerbs.POST,\n normalize: false,\n success,\n error,\n always\n };\n },\n \n /**\n * As the response from `interactiveResultSet` isn't normalised, we need to invalidate the cache\n * to update the results data.\n */\n mark(\n interactiveId: string,\n interactiveMetadataId: string,\n answerId: string,\n data: MarkInteractiveAnswer,\n success?: () => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `/api/domain/v1/analytics/answers/${answerId}`,\n key: `mark:answer:${answerId}:${data.resultId}`,\n type: HttpVerbs.PUT,\n data,\n normalize: false,\n invalidationKeys: `interactive:result:set:${interactiveId}:${interactiveMetadataId}`,\n success,\n error,\n always\n };\n },\n\n pendingReviews(data: InteractivesPendingReviewsRequest): Flight.Request {\n const key = data.interactives.map(interactive => `${interactive.interactiveId}:${interactive.metadataId}:${interactive.shareId}`).join(',');\n return {\n url: `/api/domain/v1/analytics/interactives/pending-reviews/summary`,\n key: `interactives:pending:reviews:${key}`,\n type: HttpVerbs.POST,\n data,\n normalize: false\n };\n },\n\n interactiveResultsReport(data: InteractiveResultsReport): Flight.Request {\n return {\n url: '/api/domain/v3/analytics/interactives/report',\n key: 'interactive:results:report',\n data,\n type: HttpVerbs.POST,\n normalize: false\n };\n }\n};","import { useState } from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { InteractiveResultsRequests } from 'libs/shared/apps/analytics/flight-requests/InteractiveResultsRequests';\nimport { getMarkedAnswerId } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { StudentAnswer } from 'libs/shared/interfaces';\n\nconst getPhrase = LanguageService.encloseNamespace('reportsShared.dataHooks');\n\nexport type MarkedAnswerHash = { [id: string]: StudentAnswer };\n\n/**\n * This hook manages the storing of a marked answer hash in state and then the submitting\n * of those answers via an api call.\n */\nexport const useMarkAnswers = (interactiveId: string, interactiveMetadataId: string, onDone?: () => void) => {\n const [ markedAnswers, setMarkedAnswers ] = useState<MarkedAnswerHash>({});\n\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n function addMarkedAnswers(answers: StudentAnswer[], status: InteractiveAnswerStatus): void {\n answers.forEach(a => {\n setMarkedAnswers(m => ({ ...m, [getMarkedAnswerId(a)]: { ...a, status } }));\n });\n }\n\n function submitMarkedAnswers(): void {\n const answers = Object.keys(markedAnswers).map(key => markedAnswers[key]);\n\n if (!answers.length)\n return;\n\n let completeCount = 0;\n let successCount = 0;\n\n function onSuccess(): void {\n successCount++;\n }\n\n function onAlways(): void {\n completeCount++;\n\n if (completeCount === answers.length)\n onComplete();\n }\n\n function onComplete(): void {\n let alertMessage = '';\n let useErrorAlert = false;\n\n if (successCount === 0) {\n alertMessage = getPhrase('error', { smartCount: answers.length });\n useErrorAlert = true;\n }\n\n if (successCount < completeCount) {\n alertMessage = getPhrase('success', { smartCount: successCount })\n + ` ${getPhrase('partialError', { smartCount: completeCount - successCount })}`;\n }\n\n if (successCount === completeCount) {\n alertMessage = getPhrase('success', { smartCount: successCount });\n }\n\n useErrorAlert\n ? alerts.error(alertMessage)\n : alerts.success(alertMessage);\n\n setMarkedAnswers({});\n\n onDone && onDone();\n }\n\n answers.forEach(({ id, resultId, questionId, status }) => {\n Flight.fetch(dispatch, InteractiveResultsRequests.mark(\n interactiveId,\n interactiveMetadataId,\n id,\n { id, resultId, questionId, status },\n onSuccess,\n null,\n onAlways\n ));\n });\n }\n\n return {\n markedAnswers,\n addMarkedAnswers,\n submitMarkedAnswers\n };\n};","import { animals, colors, Config as UniqueNamesConfig, uniqueNamesGenerator } from 'unique-names-generator';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nconst namespace = 'shared.analyticsUtils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction guidToSeed(guid: string): number {\n if (!guid)\n return 0;\n\n // Simple hash function (DJB2-like) for browsers\n let hash = 0;\n for (let i = 0; i < guid.length; i++) {\n const char = guid.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash |= 0; // Convert to 32bit integer\n }\n return Math.abs(hash);\n}\n\nfunction getUniqueNamesConfig(userId: string, sessionId: string): UniqueNamesConfig {\n /**\n * Generate a seed that is unique to each user but changes every 5 minutes.\n * \n * We use a seed so that if the same user's name is anonymised multiple times\n * in quick succession (e.g. multiple renders), the same name will be returned each time.\n * \n * We change the seed every 5 minutes so that students don't always have the same name.\n */\n const seed = +`${userId || guidToSeed(sessionId)}${Math.floor((new Date()).getMinutes() / 5)}`;\n\n return {\n dictionaries: [ colors, animals ],\n separator: ' ',\n length: 2,\n style: 'capital',\n seed\n };\n}\n\nexport function anonymiseUserName(user: AnonUser, shouldAnonymise: boolean): string {\n if (!user) {\n return getPhrase('anonUser');\n }\n\n if (!shouldAnonymise) {\n if (user.deleted)\n return getPhrase('deleted');\n\n return UserHelper.getFullName(user) || getPhrase('anonUser');\n }\n\n return uniqueNamesGenerator(getUniqueNamesConfig(user.id, user.sessionId));\n}\n","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { MarkedAnswerHash } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { ResultsSummary } from 'libs/shared/apps/analytics/interfaces/ResultsSummary';\nimport { StudentResultsWithSummary } from 'libs/shared/apps/analytics/interfaces/StudentResultsWithSummary';\nimport { ScoreThresholdDefaults, ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, StudentAnswer, StudentResults } from 'libs/shared/interfaces';\nimport { Interactive, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { InteractiveCorrectnessHelper } from 'libs/shared/utils/InteractiveCorrectnessHelper';\nimport { flattenInteractions, getInteractions, getStudentAttempt, getStudentResult } from 'libs/shared/utils/InteractiveHelper';\n\ninterface StudentGroups {\n markingRequired: StudentResultsWithSummary[];\n lowScore: StudentResultsWithSummary[];\n highScore: StudentResultsWithSummary[];\n completed: StudentResultsWithSummary[];\n notCompleted: StudentResultsWithSummary[];\n}\n\nexport function groupStudents(\n interactive: Interactive,\n results: InteractiveResultSet,\n scoreThreshold?: ScoreThresholds\n): StudentGroups {\n const groups: StudentGroups = {\n markingRequired: [],\n lowScore: [],\n highScore: [],\n completed: [],\n notCompleted: []\n };\n\n const interactions = getInteractions(interactive);\n const interactionIds = new Set(interactions.map(i => i.id));\n \n results.students.forEach(s => {\n const withSummary = {\n ...s,\n summary: getStudentResultsSummary(interactive, s)\n };\n \n if (withSummary.summary.awaitingMarking) {\n groups.markingRequired.push(withSummary);\n return;\n }\n\n const result = ArrayHelper.last(s.results);\n const answeredInteractions = result.attempts.filter(a => !!interactionIds.has(a?.answers[0]?.questionId)).length;\n\n if (answeredInteractions === interactionIds.size) {\n groups.completed.push(withSummary);\n } else {\n groups.notCompleted.push(withSummary);\n return;\n }\n \n if (withSummary.summary.percentCorrect >= (scoreThreshold?.HIGH || ScoreThresholdDefaults.HIGH))\n groups.highScore.push(withSummary);\n \n if (withSummary.summary.percentCorrect < (scoreThreshold?.MODERATE || ScoreThresholdDefaults.MODERATE))\n groups.lowScore.push(withSummary);\n });\n \n const sortedLowScore = ArrayHelper.sortBy(groups.lowScore, s => s.summary.percentCorrect);\n const sortedHighScore = ArrayHelper.sortBy(groups.highScore, s => -s.summary.percentCorrect);\n \n return {\n ...groups,\n lowScore: sortedLowScore,\n highScore: sortedHighScore\n };\n}\n\nexport function getInteractionById(interactive: Interactive, interactionId: string): Interaction {\n const flattenedInteractions = flattenInteractions(interactive);\n return flattenedInteractions.find(i => i.id.toString() === interactionId.toString());\n}\n\n/**\n * We need to use the question and result ids as a list of one student's responses\n * to multiple questions will all have the same result id and a list of multiple\n * students responses to one question will all have the same questionId.\n */\nexport function getMarkedAnswerId(answer: StudentAnswer): string {\n return `${answer.questionId}:${answer.resultId}`;\n}\n\nexport function getMarkedStatus(\n interactionId: string,\n studentResults: StudentResults,\n markedAnswers: MarkedAnswerHash\n): InteractiveAnswerStatus {\n const result = getStudentResult(studentResults);\n const studentResponse = getStudentAttempt(interactionId, result);\n\n const isMarkedCorrect = studentResponse?.answers.every(a => {\n return markedAnswers[getMarkedAnswerId(a)]?.status === InteractiveAnswerStatus.Correct;\n });\n\n if (isMarkedCorrect)\n return InteractiveAnswerStatus.Correct;\n\n const isMarkedIncorrect = studentResponse?.answers.every(a => {\n return markedAnswers[getMarkedAnswerId(a)]?.status === InteractiveAnswerStatus.Incorrect;\n });\n\n if (isMarkedIncorrect)\n return InteractiveAnswerStatus.Incorrect;\n}\n\nexport function getInteractionResultsSummary(\n interaction: Interaction,\n results: InteractiveResultSet\n): ResultsSummary {\n const numStudents = results.students.length;\n let numCorrect = 0;\n let answered = 0;\n let unanswered = 0;\n let awaitingMarking = 0;\n let attempts = 0;\n\n results.students.forEach(s => {\n const result = getStudentResult(s);\n\n if (!result)\n return;\n\n attempts = attempts + s.results.length;\n\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(interaction, result);\n\n if (correctness === InteractionCorrectness.Correct)\n numCorrect++;\n\n if (correctness === InteractionCorrectness.UnAnswered)\n unanswered++;\n\n if (correctness === InteractionCorrectness.AwaitingMarking)\n awaitingMarking++;\n\n if (correctness !== InteractionCorrectness.UnAnswered)\n answered++;\n });\n\n\n const percentCorrect = numStudents > 0\n ? numCorrect / numStudents\n : 0;\n\n return {\n percentCorrect,\n correct: numCorrect,\n answered,\n unanswered,\n awaitingMarking,\n attempts\n };\n}\n\nexport function getStudentResultsSummary(interactive: Interactive, studentResults: StudentResults): ResultsSummary {\n const result = getStudentResult(studentResults);\n\n const interactions = getInteractions(interactive);\n\n const numInteractions = interactions.length;\n\n let numCorrect = 0;\n let awaitingMarking = 0;\n\n interactions.forEach(i => {\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(i, result);\n\n if (correctness === InteractionCorrectness.Correct)\n numCorrect++;\n\n if (correctness === InteractionCorrectness.AwaitingMarking)\n awaitingMarking++;\n });\n\n const percentCorrect = numInteractions > 0 ? numCorrect / numInteractions : 0;\n\n /**\n * Our interactions list has images and annotations filtered out.\n * We built a map of valid questions, so that we can calculate the unswered accurately.\n * We're doing this because of a bug that caused annotations and images to record answers in the player.\n * - Sha\n */\n const interactionIds = new Set(interactions.map(i => i.id));\n const answeredInteractions = result.attempts.filter(a => !!interactionIds.has(a?.answers[0]?.questionId)).length;\n\n return {\n answered: answeredInteractions,\n attempts: studentResults.results.length,\n unanswered: numInteractions - answeredInteractions,\n percentCorrect,\n correct: numCorrect,\n awaitingMarking\n };\n}","export interface ScoreThresholds {\n HIGH: number;\n MODERATE: number;\n}\n\nexport const ScoreThresholdDefaults: ScoreThresholds = {\n HIGH: 0.75,\n MODERATE: 0.5\n};\n\nexport const ScoreThresholdInsights: ScoreThresholds = {\n HIGH: 0.7,\n MODERATE: 0.7\n};"],"names":["AnswerContainer","props","answer","key","id","className","status","InteractiveAnswerStatus","getBgColour","SvgContainer","svgName","customAnswer","textClassName","text","children","getPhrase","LanguageService","NoResponseRequired","ResponseItemComponentLookup","answers","length","map","ArrayHelper","src","alt","interaction","name","InteractionResponseItem","ResponseItemComponent","typeId","result","studentResults","studentAttempt","correctness","InteractiveCorrectnessHelper","showStudentDetails","Avatar","imageCdnUrl","initials","anonymisedUserName","UserHelper","user","surname","imageUrl","avatar","url","showAnonymousUser","sessionId","InteractionStudentDetailsHeader","responseComponentClass","showFeedback","showAvatar","MarkResponse","markInteraction","markedStatus","NoResponse","InteractionResponseCorrectness","getAnalyticsRequestKey","baseKey","filter","extra","start","end","userIdKey","Array","isArray","userId","sort","join","groupIdKey","groupId","customerIdKey","customerId","getInteractiveResultFilters","currentUser","shareId","currentUserId","currentCustomerId","dateRange","undefined","userIds","classroomsAndGroups","InteractiveResultsRequests","interactiveResultSet","interactiveId","interactiveMetadataId","success","error","always","data","type","HttpVerbs","normalize","mark","answerId","resultId","invalidationKeys","pendingReviews","interactives","interactive","metadataId","interactiveResultsReport","useMarkAnswers","onDone","useState","markedAnswers","setMarkedAnswers","dispatch","alerts","addMarkedAnswers","forEach","a","m","submitMarkedAnswers","Object","keys","completeCount","successCount","questionId","I","onSuccess","onAlways","alertMessage","useErrorAlert","smartCount","anonymiseUserName","shouldAnonymise","seed","guid","hash","i","charCodeAt","Math","abs","guidToSeed","floor","Date","getMinutes","dictionaries","separator","style","deleted","groupStudents","results","scoreThreshold","groups","markingRequired","lowScore","highScore","completed","notCompleted","interactions","interactionIds","Set","students","s","withSummary","summary","getStudentResultsSummary","awaitingMarking","push","attempts","has","size","percentCorrect","HIGH","MODERATE","sortedLowScore","sortedHighScore","getInteractionById","interactionId","find","toString","getMarkedAnswerId","getMarkedStatus","studentResponse","every","getInteractionResultsSummary","numStudents","numCorrect","answered","unanswered","correct","numInteractions","answeredInteractions","ScoreThresholdDefaults","ScoreThresholdInsights"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[2074],{44746:(e,a,t)=>{t.r(a),t.d(a,{HardGateInsightsView:()=>F});var s=t(32735),i=t(23481),n=t(20354),c=t(18488),r=t(21789),l=t(97958),d=t(83345),o=t(16714),h=t(39151),m=t(1666),u=t(31949),p=t(93322),E=t(22902),g=t(79612),I=t(35223),v=t(31908),b=t(99742),w=t(14070),C=t(97291),N=t(88630),_=t(74049),k=t(10447),V="insights.hardGateInsightsView",y=i.T.encloseNamespace(V);function F(e){var a,t;(0,p.F)();var i=(0,E.T)(),F=i.hasPermissions,S=i.getGatedPermission,G=n.a.useBasicFetch(h.L.config()),x=n.a.useBasicFetch(u.N.currentUser()),A=n.a.useBasicFetch(x.data&&m.h.yearGroups(x.data.customerId)),P=n.a.useBasicFetch(c.o.getShare(e.shareId)),T=r.x.getClassroomIdFromShare(P.data),f=n.a.useBasicFetch(T&&N.F.getClassroom(T)),B=P.data&&v.M.getVideoRequest(P.data.objectId,P.data.objectTypeId),L=n.a.useBasicFetch(B);return(0,g.M)({title:L.data?y("pageTitle",{video:null===(a=L.data)||void 0===a?void 0:a.name}):null}),s.createElement("div",{className:"px-3"},s.createElement(_.j,{video:L.data,classroom:f.data,tabs:(0,k.$6)(P.data,"insights"),hasAnalytics:F(o.C.ViewCustomerAnalytics),analyticsWebUrl:null===(t=G.data)||void 0===t?void 0:t.analyticsWebUrl,share:P.data,yearGroups:A.data,hasData:!1,viewInsightsGatedPermission:S(o.C.ViewInsights)}),s.createElement(l.u,null,s.createElement(l.u.Image,{src:b.W.Insights.SEND_PAPER_PLANE}),s.createElement(l.u.Heading,null,s.createElement(d.x,{namespace:V,phrase:"heading"})),s.createElement(l.u.Info,{className:"w-75"},s.createElement(d.x,{namespace:V,phrase:"description"})," "),s.createElement(l.u.Cta,{text:y("cta"),appLink:{application:C.O.SIGN_UP,action:w.e.SignUp.INVITE_COLLEAGUE},icon:I.vn.Share,className:"btn btn-dark mb-3"}),s.createElement(l.u.Cta,{text:"View demo data",appLink:{application:C.O.MY_SHARES,action:w.e.MyShares.INTERACTIVE_OVERVIEW_DEMO},className:"btn btn-link text-info py-0"})))}}}]);
2
+ //# sourceMappingURL=2074-39b86b9a22-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/2074-39b86b9a22-lite.chunk.js","mappings":"mZA6BMA,EAAY,gCACZC,EAAY,qBAAiCD,GAM7C,SAAUE,EAAqBC,G,SACnC,SAEA,OAA+C,SAAvCC,EAAc,EAAdA,eAAgBC,EAAkB,EAAlBA,mBAElBC,EAAS,kBAA6B,cACtCC,EAAc,kBAAkC,mBAChDC,EAAa,kBACjBD,EAAYE,MAAQ,eAA4BF,EAAYE,KAAKC,aAG7DC,EAAQ,kBAA4B,aAAuBR,EAAMS,UAEjEC,EAAc,4BAAoCF,EAAMF,MACxDK,EAAY,kBAAgCD,GAAe,iBAA+BA,IAE1FE,EAAeJ,EAAMF,MAAQ,oBAA4BE,EAAMF,KAAKO,SAAUL,EAAMF,KAAKQ,cACzFC,EAAQ,kBAAiCH,GAI/C,OAFA,OAAmB,CAAEI,MAAOD,EAAMT,KAAOR,EAAU,YAAa,CAAEiB,MAAiB,QAAV,EAAAA,EAAMT,YAAI,eAAEW,OAAU,OAG7F,uBAAKC,UAAU,QACb,gBAAC,IAAc,CACbH,MAAOA,EAAMT,KACbK,UAAWA,EAAUL,KACrBa,MAAM,QAAqBX,EAAMF,KAAM,YACvCc,aAAcnB,EAAe,2BAC7BoB,gBAA4B,QAAX,EAAAlB,EAAOG,YAAI,eAAEe,gBAC9Bb,MAAOA,EAAMF,KACbD,WAAYA,EAAWC,KACvBgB,SAAS,EACTC,4BAA6BrB,EAAmB,oBAElD,gBAAC,IAAU,KACT,gBAAC,UAAgB,CAACsB,IAAK,gCACvB,gBAAC,YAAkB,KACjB,gBAAC,IAAI,CAAC3B,UAAWA,EAAW4B,OAAO,aAErC,gBAAC,SAAe,CAACP,UAAU,QACzB,gBAAC,IAAI,CAACrB,UAAWA,EAAW4B,OAAO,gBAAgB,KAErD,gBAAC,QAAc,CACbC,KAAM5B,EAAU,OAChB6B,QAAS,CACPC,YAAa,YACbC,OAAQ,6BAEVC,KAAM,WACNZ,UAAU,sBAEZ,gBAAC,QAAc,CACbQ,KAAM,iBACNC,QAAS,CACPC,YAAa,cACbC,OAAQ,wCAEVX,UAAU,iCAKpB,C","sources":["file:///app/packages/projects/lite/src/apps/my-shares/views/hard-gate-insights-view/HardGateInsightsView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Classroom, Config, CurrentUser, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { getInsightsVideoTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\n\nconst namespace = 'insights.hardGateInsightsView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface HardGateInsightsViewProps {\n shareId: string;\n}\n\nexport function HardGateInsightsView(props: HardGateInsightsViewProps) {\n useLockContentWidth();\n\n const { hasPermissions, getGatedPermission } = usePermissions();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(props.shareId));\n\n const classroomId = ShareHelper.getClassroomIdFromShare(share.data);\n const classroom = Flight.useBasicFetch<Classroom>(classroomId && ClassroomRequests.getClassroom(classroomId));\n\n const videoRequest = share.data && VideoHelper.getVideoRequest(share.data.objectId, share.data.objectTypeId);\n const video = Flight.useBasicFetch<VideoTypes>(videoRequest);\n\n useSetPageMetadata({ title: video.data ? getPhrase('pageTitle', { video: video.data?.name }) : null });\n\n return (\n <div className='px-3'>\n <InsightsHeader\n video={video.data}\n classroom={classroom.data}\n tabs={getInsightsVideoTabs(share.data, 'insights')}\n hasAnalytics={hasPermissions(PermissionName.ViewCustomerAnalytics)}\n analyticsWebUrl={config.data?.analyticsWebUrl}\n share={share.data}\n yearGroups={yearGroups.data}\n hasData={false}\n viewInsightsGatedPermission={getGatedPermission(PermissionName.ViewInsights)}\n />\n <EmptyState>\n <EmptyState.Image src={ImageUrls.Insights.SEND_PAPER_PLANE} />\n <EmptyState.Heading>\n <Text namespace={namespace} phrase='heading' />\n </EmptyState.Heading>\n <EmptyState.Info className='w-75'>\n <Text namespace={namespace} phrase='description' />&nbsp;\n </EmptyState.Info>\n <EmptyState.Cta\n text={getPhrase('cta')}\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.INVITE_COLLEAGUE\n }}\n icon={cvSvgLibrary.Share}\n className='btn btn-dark mb-3'\n />\n <EmptyState.Cta\n text={'View demo data'}\n appLink={{\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_DEMO\n }}\n className='btn btn-link text-info py-0'\n />\n </EmptyState>\n </div>\n );\n}"],"names":["namespace","getPhrase","HardGateInsightsView","props","hasPermissions","getGatedPermission","config","currentUser","yearGroups","data","customerId","share","shareId","classroomId","classroom","videoRequest","objectId","objectTypeId","video","title","name","className","tabs","hasAnalytics","analyticsWebUrl","hasData","viewInsightsGatedPermission","src","phrase","text","appLink","application","action","icon"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[2664],{28469:(e,a,t)=>{t.d(a,{P:()=>s});var r=t(32735),n=t(23481).T.encloseNamespace("rostering.alert");function s(e){var a="classroom"===e.type?n("classroom"):n("hasRostering");return r.createElement("div",{className:"alert text-info bg-light-blue px-2 rounded-3 fw-semibold py-2 d-flex flex-wrap"},a," ")}},299:(e,a,t)=>{t.d(a,{X:()=>l});var r=t(32735),n=t(69217),s=t(94631),l=function(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=a.idField,l=void 0===t?"id":t,o=a.persistNamespace,i=a.initialState?a.initialState:new Map,c=r.useRef(i),d=(0,n.N)(),m=(0,s.D)(e),u=(0,s.D)(o);function g(){c.current.clear(),d()}function p(e){return"number"==typeof e?e=e.toString():"string"!=typeof e&&(e=e[l].toString()),c.current.get(e)}function h(){return!!(null==e?void 0:e.length)&&e.every(p)}function E(e){e.forEach(function(e){c.current.set(e,!0)}),d()}return r.useEffect(function(){a.initialState||o&&u===o||(null==m?void 0:m.map(function(e){return e[l]}).join())!==(null==e?void 0:e.map(function(e){return e[l]}).join())&&g()},[m,u,e,a.initialState]),r.useEffect(function(){var e;(null===(e=a.preselectedIds)||void 0===e?void 0:e.length)&&E(a.preselectedIds)},[]),{onToggleBulk:function(){var a=!h();e.forEach(function(e){a?c.current.set(e[l].toString(),!0):c.current.delete(e[l].toString())}),d()},onToggleItem:function(e){var a=!c.current.get(e.toString());a?c.current.set(e.toString(),a):c.current.delete(e.toString()),d()},getSelected:function(){return Array.from(c.current.keys())},isChecked:p,bulkChecked:h(),deselectAll:function(){(null==e?void 0:e.length)&&(e.forEach(function(e){c.current.delete(e[l].toString())}),d())},hasSomeSelections:function(){return!!(null==e?void 0:e.length)&&!!e.find(function(e){return p(e)})},setSelected:E,getSelectedCount:function(){return c.current.size},reset:g,getMap:function(){return c.current}}}},83924:(e,a,t)=>{t.r(a),t.d(a,{ClassroomTeachersView:()=>te});var r=t(32735),n=t(70680),s=t(23481),l=t(20354),o=t(28469),i=t(39151),c=t(31949),d=t(79612),m=t(37802),u=t(97958),g=t(83345),p=t(35223),h=t(99742),E=t(14070),f=t(97291),v="classrooms.manageClassroomTeachersEmptyState";function y(){return r.createElement(g.D.Provider,{value:v},r.createElement(u.u,null,r.createElement(u.u.Image,{src:h.W.EmptyStates.Classrooms.TEACHERS}),r.createElement(u.u.Heading,null,r.createElement(g.x,{phrase:"emptyStateHeading"})),r.createElement(u.u.Info,{className:"mb-2"},r.createElement(g.x,{phrase:"emptyStateInfo"})),r.createElement("a",{className:"btn btn-link info-link font-semibold",href:"",target:"_blank"},s.T.getPhrase(v,"rosteringCta"))))}function S(e){return r.createElement(g.D.Provider,{value:v},r.createElement(u.u,null,r.createElement(u.u.Image,{src:h.W.EmptyStates.Classrooms.TEACHERS}),r.createElement(u.u.Heading,null,r.createElement(g.x,{phrase:"emptyStateHeading"})),r.createElement(u.u.Info,null,r.createElement(g.x,{phrase:"emptyStateInfo"})),r.createElement(u.u.Cta,{text:s.T.getPhrase(v,"addTeachers"),icon:p.vn.Plus,appLink:{application:f.O.CLASSROOMS,action:E.e.Classrooms.ADD_TEACHERS,args:[e.classroom.id]}})))}var C=t(81886),O=t(49985),k=t(65858),w=t(11607),b=t(89965),T=t(91693),N=t(83914),x=t(36532),A=t(86764),R=t(299),I=t(3747),F=t(83657),U=t(97408),L=t(16714),P=t(86613),D=t(22902),M=t(64818);const _={avatarContainer:"kTynd",name:"UWi4G"};var V="classrooms.manageClassroomTeacherItem",H=s.T.encloseNamespace(V),B=function(e,a){return{application:f.O.CLASSROOMS,action:E.e.Classrooms.REMOVE_TEACHERS,args:[a],params:{teacherIds:[e]}}},W=function(e,a){return{application:f.O.CLASSROOMS,action:E.e.Classrooms.ASSIGN_AS_OWNER,args:[a,e]}},Z=function(e,a){return{application:f.O.CLASSROOMS,action:E.e.Classrooms.REVOKE_OWNERSHIP,args:[a,e]}};function X(e){var a,t=(0,D.T)().hasPermissions,n=M.l.getUserRole(e.teacher)===P.i.Admin,s=e.currentUser.id===e.teacher.id||!!t(L.C.ManageAllClassrooms)||!n&&e.isOwner(e.currentUser.id),l=!s||e.readOnly;return r.createElement("div",{className:"d-flex align-items-center py-1 px-4"},e.isOwner(e.currentUser.id)&&r.createElement(b.X,{id:e.teacher.id,checked:e.checked,onChange:e.onToggleCheckbox,className:"me-2",disabled:e.readOnly}),r.createElement("div",{className:"".concat(_.avatarContainer," me-2")},r.createElement(U.q,{imageCdnUrl:e.config.imageCdnUrl,initials:M.l.getInitials(e.teacher.name,e.teacher.surname),imageUrl:null===(a=e.teacher.avatar)||void 0===a?void 0:a.url})),r.createElement("p",{className:"".concat(_.name," me-2 text-truncate mb-0 text-nowrap")},M.l.getFullName(e.teacher)),!!n&&r.createElement("div",{className:"classroom-pill text-white bg-navy"},r.createElement(g.x,{namespace:V,phrase:"admin"})),!n&&e.isOwner(e.teacher.id)&&r.createElement("div",{className:"classroom-pill text-white bg-indigo"},r.createElement(g.x,{namespace:V,phrase:"owner"})),r.createElement(F.e,{actions:function(){if(!e.isOwner(e.currentUser.id))return[];var a=[],t="text-secondary disabled cursor-default",r=e.currentUser.id===e.teacher.id;return r||(e.isOwner(e.teacher.id)?a.push({order:0,label:H("revokeOwnership"),appLink:Z(e.teacher.id,e.classroom.id),analyticsData:{id:e.teacher.id,classroomId:e.classroom.id},analyticsOptions:{actionType:k.Vw.Demote,entity:k.py.User,descriptor:k.iF.Classroom,workflowPhase:k.eu.Start,location:k.LZ.ManageClassroomTeacherListItem},className:l?t:"",disabled:l,tooltip:e.readOnly?e.readonlyTooltip:s?"":H("cannotRevokeOwnershipFromAdmin")}):a.push({order:0,label:H("assignAsOwner"),appLink:W(e.teacher.id,e.classroom.id),analyticsData:{id:e.teacher.id,classroomId:e.classroom.id},analyticsOptions:{actionType:k.Vw.Promote,entity:k.py.User,descriptor:k.iF.Classroom,workflowPhase:k.eu.Start,location:k.LZ.ManageClassroomTeacherListItem},className:l?t:"",disabled:l,tooltip:e.readOnly?e.readonlyTooltip:s?"":H("cannotAssignAdminAsOwner")})),a.push({order:10,label:H(r?"leaveClassroom":"removeTeacher"),appLink:B(e.teacher.id,e.classroom.id),analyticsData:{id:e.classroom.id,userId:e.teacher.id},analyticsOptions:{actionType:k.Vw.Dissociate,entity:k.py.Classroom,descriptor:k.iF.User,workflowPhase:k.eu.Start,location:k.LZ.ManageClassroomTeacherListItem},className:l?t:"text-danger",disabled:l,tooltip:e.readOnly?e.readonlyTooltip:s?"":H("cannotRemoveAdmin")}),a}(),className:"ms-auto",actionsDropdownClassName:"btn btn-link"}))}var j="classrooms.manageClassroomTeachers";function G(e){var a,t=(0,R.X)(e.teachers),n=t.getSelected().length,l=(0,I.a)(A.r.XLDown);return(null===(a=e.teachers)||void 0===a?void 0:a.length)?r.createElement(r.Fragment,null,r.createElement("div",{className:"d-flex align-items-center py-2 ".concat(l?"ps-2":"ps-4")},e.isOwner(e.currentUser.id)&&r.createElement(r.Fragment,null,r.createElement(b.X,{id:"manage-classroom-teachers-bulk",onChange:t.onToggleBulk,checked:t.bulkChecked,className:"me-2",indeterminate:t.hasSomeSelections(),disabled:e.readOnly}),r.createElement(w.L,{className:!n||e.readOnly?"me-auto text-light cursor-default":"me-auto",onClick:function(){if(n&&e.isOwner(e.currentUser.id)&&!e.readOnly){var a=t.getSelected();O.k.logUserAction({id:e.classroom.id,teacherCount:a.length},{entity:k.py.Classroom,descriptor:k.iF.User,workflowPhase:k.eu.Start,actionType:k.Vw.Dissociate,location:k.LZ.ManageClassroomTeachers}),C.Q.C$.trigger({application:f.O.CLASSROOMS,action:E.e.Classrooms.REMOVE_TEACHERS,args:[e.classroom.id],params:{teacherIds:a}})}}},r.createElement(N.x,{svgName:p.vn.Delete,title:e.readOnly?s.T.getPhrase(j,"disabledByRostering"):s.T.getPhrase(j,"delete"),tooltipPlacement:"top",tooltipSpanHack:!0})),r.createElement(x.u,{spanHack:!0,title:e.readOnly?s.T.getPhrase(j,"disabledByRostering"):""},r.createElement(T.h,{disabled:e.readOnly,svgName:p.vn.Plus,className:"btn btn-outline-dark ms-auto",appLink:e.readOnly?null:{application:f.O.CLASSROOMS,action:E.e.Classrooms.ADD_TEACHERS,args:[e.classroom.id]},analyticsData:{id:e.classroom.id},analyticsOptions:{entity:k.py.Classroom,descriptor:k.iF.User,workflowPhase:k.eu.Start,actionType:k.Vw.Associate,location:k.LZ.ManageClassroomTeachers}},r.createElement(g.x,{namespace:j,phrase:"addTeacher"}))))),r.createElement("ul",{className:"striped-list list-unstyled"},e.teachers.map(function(a){return r.createElement("li",{key:a.id},r.createElement(X,{classroom:e.classroom,teacher:a,config:e.config,checked:t.isChecked(a.id),onToggleCheckbox:function(){return t.onToggleItem(a.id)},currentUser:e.currentUser,isOwner:e.isOwner,readOnly:e.readOnly,readonlyTooltip:e.readOnly?s.T.getPhrase(j,"disabledByRostering"):""}))}))):r.createElement(S,{classroom:e.classroom})}var Q=t(49935),q=t(95278);const K="svGp0";var Y=r.memo(function(){return r.createElement("div",{className:"px-3"},r.createElement("div",{className:"mb-1 partial-loading-background ".concat("FQwVf")}),r.createElement("div",{className:"pb-3"},r.createElement(Q.b2,{numItems:2})),r.createElement("div",{className:"pb-2"},r.createElement(q.Z,null)),r.createElement("div",{className:"d-flex align-items-center py-2"},r.createElement("div",{className:"ms-2 me-4 partial-loading-background ".concat(K)}),r.createElement("div",{className:"me-auto partial-loading-background ".concat("rKbj_")}),r.createElement("div",{className:"partial-loading-background ".concat("qigWD")})),r.createElement("ul",{className:"striped-list list-unstyled"},Array(3).fill(null).map(function(e,a){return r.createElement("li",{key:a},r.createElement("div",{className:"d-flex align-items-center py-1 px-4"},r.createElement("div",{className:"me-2 partial-loading-background ".concat(K)}),r.createElement("div",{className:"me-2 partial-loading-background ".concat("mYQWy")}),r.createElement("div",{className:"w-25"},r.createElement("div",{className:"partial-loading-background ".concat("SiD8n")})),r.createElement("div",{className:"ms-auto partial-loading-background ".concat("sAUZY")})))})))}),z=t(88630),$=t(46009),J=t(31491),ee=t(22602),ae=s.T.encloseNamespace("classrooms.classroomTeachers");function te(e){var a,t,s,u,g=(0,m.r)(null).hasShareFlowV2,p=l.a.useBasicFetch(c.N.currentUser()),h=l.a.useBasicFetch(p.data&&z.F.getClassroom(e.id,p.data.id)),E=l.a.useBasicFetch(z.F.getClassroomOwners(e.id)),f=l.a.useBasicFetch((null===(a=p.data)||void 0===a?void 0:a.customerId)&&z.F.getClassroomStaff(e.id,p.data.customerId)),v=l.a.useBasicFetch(i.L.config()),C=(0,n.I0)(),O=(0,$.p)(e.id).isOwner,k=null===(s=null===(t=h.data)||void 0===t?void 0:t._integrations)||void 0===s?void 0:s.rostered;function w(e){return e===p.data.id?O:E.data.some(function(a){return a.id.toString()===e.toString()})}return(0,d.M)({title:ae("pageTitle",{classroomName:null===(u=h.data)||void 0===u?void 0:u.name})}),(0,J._)(h),h.data&&f.hasCompleted&&E.hasCompleted&&v.data?r.createElement(ee.R,{classroom:h.data,currentUser:p.data,onTogglePin:function(e,a,t){if(!k){var r=e?z.F.pinClassroom:z.F.unpinClassroom;l.a.fetch(C,r(h.data,a,t))}},activeTab:"teachers",isRostered:k,hasShareFlowV2:g},function(){var e,a;return k?r.createElement(r.Fragment,null,r.createElement(o.P,{type:"classroom"}),(null===(e=f.data)||void 0===e?void 0:e.length)?r.createElement(G,{classroom:h.data,teachers:f.data,config:v.data,currentUser:p.data,isOwner:w,readOnly:!0}):r.createElement(y,null)):(null===(a=f.data)||void 0===a?void 0:a.length)?r.createElement(G,{config:v.data,classroom:h.data,teachers:f.data,currentUser:p.data,isOwner:w,readOnly:k}):r.createElement(S,{classroom:h.data})}()):r.createElement(Y,null)}},99998:(e,a,t)=>{t.d(a,{R:()=>l});var r=t(16714),n=t(22902),s=t(37802);function l(){var e=(0,s.r)(null),a=e.hasShareFlowV2,t=e.hasClassrooms,l=e.isLoadingSettings,o=(0,n.T)(),i=o.hasPermissions,c=o.isLoaded;return{experience:t?i(r.C.ViewClassrooms)?"full":a?"minimal":void 0:"none",loading:l||!c}}}}]);
2
- //# sourceMappingURL=2664-907153c03b-lite.chunk.js.map
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[2664],{28469:(e,a,t)=>{t.d(a,{P:()=>s});var r=t(32735),n=t(23481).T.encloseNamespace("rostering.alert");function s(e){var a="classroom"===e.type?n("classroom"):n("hasRostering");return r.createElement("div",{className:"alert text-info bg-light-blue px-2 rounded-3 fw-semibold py-2 d-flex flex-wrap"},a," ")}},299:(e,a,t)=>{t.d(a,{X:()=>l});var r=t(32735),n=t(69217),s=t(94631),l=function(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=a.idField,l=void 0===t?"id":t,o=a.persistNamespace,i=a.initialState?a.initialState:new Map,c=r.useRef(i),m=(0,n.N)(),d=(0,s.D)(e),u=(0,s.D)(o);function g(){c.current.clear(),m()}function p(e){return"number"==typeof e?e=e.toString():"string"!=typeof e&&(e=e[l].toString()),c.current.get(e)}function h(){return!!(null==e?void 0:e.length)&&e.every(p)}function E(e){e.forEach(function(e){c.current.set(e,!0)}),m()}return r.useEffect(function(){a.initialState||o&&u===o||(null==d?void 0:d.map(function(e){return e[l]}).join())!==(null==e?void 0:e.map(function(e){return e[l]}).join())&&g()},[d,u,e,a.initialState]),r.useEffect(function(){var e;(null===(e=a.preselectedIds)||void 0===e?void 0:e.length)&&E(a.preselectedIds)},[]),{onToggleBulk:function(){var a=!h();e.forEach(function(e){a?c.current.set(e[l].toString(),!0):c.current.delete(e[l].toString())}),m()},onToggleItem:function(e){var a=!c.current.get(e.toString());a?c.current.set(e.toString(),a):c.current.delete(e.toString()),m()},getSelected:function(){return Array.from(c.current.keys())},isChecked:p,bulkChecked:h(),deselectAll:function(){(null==e?void 0:e.length)&&(e.forEach(function(e){c.current.delete(e[l].toString())}),m())},hasSomeSelections:function(){return!!(null==e?void 0:e.length)&&!!e.find(function(e){return p(e)})},setSelected:E,getSelectedCount:function(){return c.current.size},reset:g,getMap:function(){return c.current}}}},83924:(e,a,t)=>{t.r(a),t.d(a,{ClassroomTeachersView:()=>te});var r=t(32735),n=t(70680),s=t(23481),l=t(20354),o=t(28469),i=t(39151),c=t(31949),m=t(79612),d=t(37802),u=t(97958),g=t(83345),p=t(35223),h=t(99742),E=t(14070),f=t(97291),v="classrooms.manageClassroomTeachersEmptyState";function y(){return r.createElement(g.D.Provider,{value:v},r.createElement(u.u,null,r.createElement(u.u.Image,{src:h.W.EmptyStates.Classrooms.TEACHERS}),r.createElement(u.u.Heading,null,r.createElement(g.x,{phrase:"emptyStateHeading"})),r.createElement(u.u.Info,{className:"mb-2"},r.createElement(g.x,{phrase:"emptyStateInfo"})),r.createElement("a",{className:"btn btn-link info-link font-semibold",href:"",target:"_blank"},s.T.getPhrase(v,"rosteringCta"))))}function C(e){return r.createElement(g.D.Provider,{value:v},r.createElement(u.u,null,r.createElement(u.u.Image,{src:h.W.EmptyStates.Classrooms.TEACHERS}),r.createElement(u.u.Heading,null,r.createElement(g.x,{phrase:"emptyStateHeading"})),r.createElement(u.u.Info,null,r.createElement(g.x,{phrase:"emptyStateInfo"})),r.createElement(u.u.Cta,{text:s.T.getPhrase(v,"addTeachers"),icon:p.vn.Plus,appLink:{application:f.O.CLASSROOMS,action:E.e.Classrooms.ADD_TEACHERS,args:[e.classroom.id]}})))}var S=t(81886),O=t(49985),k=t(65858),w=t(11607),b=t(89965),T=t(91693),N=t(83914),x=t(36532),A=t(86764),R=t(299),I=t(3747),F=t(83657),U=t(97408),L=t(16714),P=t(86613),D=t(22902),M=t(64818);const V={avatarContainer:"kTynd",name:"UWi4G"};var _="classrooms.manageClassroomTeacherItem",H=s.T.encloseNamespace(_),B=function(e,a){return{application:f.O.CLASSROOMS,action:E.e.Classrooms.REMOVE_TEACHERS,args:[a],params:{teacherIds:[e]}}},W=function(e,a){return{application:f.O.CLASSROOMS,action:E.e.Classrooms.ASSIGN_AS_OWNER,args:[a,e]}},Z=function(e,a){return{application:f.O.CLASSROOMS,action:E.e.Classrooms.REVOKE_OWNERSHIP,args:[a,e]}};function X(e){var a,t=(0,D.T)().hasPermissions,n=M.l.getUserRole(e.teacher)===P.i.Admin,s=e.currentUser.id===e.teacher.id||!!t(L.C.ManageAllClassrooms)||!n&&e.isOwner(e.currentUser.id),l=!s||e.readOnly;return r.createElement("div",{className:"d-flex align-items-center py-1 px-4"},e.isOwner(e.currentUser.id)&&r.createElement(b.X,{id:e.teacher.id,checked:e.checked,onChange:e.onToggleCheckbox,className:"me-2",disabled:e.readOnly}),r.createElement("div",{className:"".concat(V.avatarContainer," me-2")},r.createElement(U.q,{imageCdnUrl:e.config.imageCdnUrl,initials:M.l.getInitials(e.teacher.name,e.teacher.surname),imageUrl:null===(a=e.teacher.avatar)||void 0===a?void 0:a.url})),r.createElement("p",{className:"".concat(V.name," me-2 text-truncate mb-0 text-nowrap")},M.l.getFullName(e.teacher)),!!n&&r.createElement("div",{className:"classroom-pill text-white bg-navy"},r.createElement(g.x,{namespace:_,phrase:"admin"})),!n&&e.isOwner(e.teacher.id)&&r.createElement("div",{className:"classroom-pill text-white bg-indigo"},r.createElement(g.x,{namespace:_,phrase:"owner"})),r.createElement(F.e,{actions:function(){if(!e.isOwner(e.currentUser.id))return[];var a=[],t="text-secondary disabled cursor-default",r=e.currentUser.id===e.teacher.id;return r||(e.isOwner(e.teacher.id)?a.push({order:0,label:H("revokeOwnership"),appLink:Z(e.teacher.id,e.classroom.id),analyticsData:{id:e.teacher.id,classroomId:e.classroom.id},analyticsOptions:{actionType:k.Vw.Demote,entity:k.py.User,descriptor:k.iF.Classroom,workflowPhase:k.eu.Start,location:k.LZ.ManageClassroomTeacherListItem},className:l?t:"",disabled:l,tooltip:e.readOnly?e.readonlyTooltip:s?"":H("cannotRevokeOwnershipFromAdmin")}):a.push({order:0,label:H("assignAsOwner"),appLink:W(e.teacher.id,e.classroom.id),analyticsData:{id:e.teacher.id,classroomId:e.classroom.id},analyticsOptions:{actionType:k.Vw.Promote,entity:k.py.User,descriptor:k.iF.Classroom,workflowPhase:k.eu.Start,location:k.LZ.ManageClassroomTeacherListItem},className:l?t:"",disabled:l,tooltip:e.readOnly?e.readonlyTooltip:s?"":H("cannotAssignAdminAsOwner")})),a.push({order:10,label:H(r?"leaveClassroom":"removeTeacher"),appLink:B(e.teacher.id,e.classroom.id),analyticsData:{id:e.classroom.id,userId:e.teacher.id},analyticsOptions:{actionType:k.Vw.Dissociate,entity:k.py.Classroom,descriptor:k.iF.User,workflowPhase:k.eu.Start,location:k.LZ.ManageClassroomTeacherListItem},className:l?t:"text-danger",disabled:l,tooltip:e.readOnly?e.readonlyTooltip:s?"":H("cannotRemoveAdmin")}),a}(),className:"ms-auto",actionsDropdownClassName:"btn btn-link"}))}var G="classrooms.manageClassroomTeachers";function j(e){var a,t=(0,R.X)(e.teachers),n=t.getSelected().length,l=(0,I.a)(A.r.XLDown);return(null===(a=e.teachers)||void 0===a?void 0:a.length)?r.createElement(r.Fragment,null,r.createElement("div",{className:"d-flex align-items-center py-2 ".concat(l?"ps-2":"ps-4")},e.isOwner(e.currentUser.id)&&r.createElement(r.Fragment,null,r.createElement(b.X,{id:"manage-classroom-teachers-bulk",onChange:t.onToggleBulk,checked:t.bulkChecked,className:"me-2",indeterminate:t.hasSomeSelections(),disabled:e.readOnly}),r.createElement(w.L,{className:!n||e.readOnly?"me-auto text-light cursor-default":"me-auto",onClick:function(){if(n&&e.isOwner(e.currentUser.id)&&!e.readOnly){var a=t.getSelected();O.k.logUserAction({id:e.classroom.id,teacherCount:a.length},{entity:k.py.Classroom,descriptor:k.iF.User,workflowPhase:k.eu.Start,actionType:k.Vw.Dissociate,location:k.LZ.ManageClassroomTeachers}),S.Q.C$.trigger({application:f.O.CLASSROOMS,action:E.e.Classrooms.REMOVE_TEACHERS,args:[e.classroom.id],params:{teacherIds:a}})}}},r.createElement(N.x,{svgName:p.vn.Delete,title:e.readOnly?s.T.getPhrase(G,"disabledByRostering"):s.T.getPhrase(G,"delete"),tooltipPlacement:"top",tooltipSpanHack:!0})),r.createElement(x.u,{spanHack:!0,title:e.readOnly?s.T.getPhrase(G,"disabledByRostering"):""},r.createElement(T.h,{disabled:e.readOnly,svgName:p.vn.Plus,className:"btn btn-outline-dark ms-auto",appLink:e.readOnly?null:{application:f.O.CLASSROOMS,action:E.e.Classrooms.ADD_TEACHERS,args:[e.classroom.id]},analyticsData:{id:e.classroom.id},analyticsOptions:{entity:k.py.Classroom,descriptor:k.iF.User,workflowPhase:k.eu.Start,actionType:k.Vw.Associate,location:k.LZ.ManageClassroomTeachers}},r.createElement(g.x,{namespace:G,phrase:"addTeacher"}))))),r.createElement("ul",{className:"striped-list list-unstyled"},e.teachers.map(function(a){return r.createElement("li",{key:a.id},r.createElement(X,{classroom:e.classroom,teacher:a,config:e.config,checked:t.isChecked(a.id),onToggleCheckbox:function(){return t.onToggleItem(a.id)},currentUser:e.currentUser,isOwner:e.isOwner,readOnly:e.readOnly,readonlyTooltip:e.readOnly?s.T.getPhrase(G,"disabledByRostering"):""}))}))):r.createElement(C,{classroom:e.classroom})}var Q=t(49935),q=t(95278);const K="svGp0";var Y=r.memo(function(){return r.createElement("div",{className:"px-3"},r.createElement("div",{className:"mb-1 partial-loading-background ".concat("FQwVf")}),r.createElement("div",{className:"pb-3"},r.createElement(Q.b2,{numItems:2})),r.createElement("div",{className:"pb-2"},r.createElement(q.Z,null)),r.createElement("div",{className:"d-flex align-items-center py-2"},r.createElement("div",{className:"ms-2 me-4 partial-loading-background ".concat(K)}),r.createElement("div",{className:"me-auto partial-loading-background ".concat("rKbj_")}),r.createElement("div",{className:"partial-loading-background ".concat("qigWD")})),r.createElement("ul",{className:"striped-list list-unstyled"},Array(3).fill(null).map(function(e,a){return r.createElement("li",{key:a},r.createElement("div",{className:"d-flex align-items-center py-1 px-4"},r.createElement("div",{className:"me-2 partial-loading-background ".concat(K)}),r.createElement("div",{className:"me-2 partial-loading-background ".concat("mYQWy")}),r.createElement("div",{className:"w-25"},r.createElement("div",{className:"partial-loading-background ".concat("SiD8n")})),r.createElement("div",{className:"ms-auto partial-loading-background ".concat("sAUZY")})))})))}),z=t(88630),$=t(46009),J=t(31491),ee=t(22602),ae=s.T.encloseNamespace("classrooms.classroomTeachers");function te(e){var a,t,s,u,g=(0,d.r)(null).hasShareFlowV2,p=l.a.useBasicFetch(c.N.currentUser()),h=l.a.useBasicFetch(p.data&&z.F.getClassroom(e.id,p.data.id)),E=l.a.useBasicFetch(z.F.getClassroomOwners(e.id)),f=l.a.useBasicFetch((null===(a=p.data)||void 0===a?void 0:a.customerId)&&z.F.getClassroomStaff(e.id,p.data.customerId)),v=l.a.useBasicFetch(i.L.config()),S=(0,n.I0)(),O=(0,$.p)(e.id).isOwner,k=null===(s=null===(t=h.data)||void 0===t?void 0:t._integrations)||void 0===s?void 0:s.rostered;function w(e){return e===p.data.id?O:E.data.some(function(a){return a.id.toString()===e.toString()})}return(0,m.M)({title:ae("pageTitle",{classroomName:null===(u=h.data)||void 0===u?void 0:u.name})}),(0,J._)(h),h.data&&f.hasCompleted&&E.hasCompleted&&v.data?r.createElement(ee.R,{classroom:h.data,currentUser:p.data,onTogglePin:function(e,a,t){if(!k){var r=e?z.F.pinClassroom:z.F.unpinClassroom;l.a.fetch(S,r(h.data,a,t))}},activeTab:"teachers",isRostered:k,hasShareFlowV2:g},function(){var e,a;return k?r.createElement(r.Fragment,null,r.createElement(o.P,{type:"classroom"}),(null===(e=f.data)||void 0===e?void 0:e.length)?r.createElement(j,{classroom:h.data,teachers:f.data,config:v.data,currentUser:p.data,isOwner:w,readOnly:!0}):r.createElement(y,null)):(null===(a=f.data)||void 0===a?void 0:a.length)?r.createElement(j,{config:v.data,classroom:h.data,teachers:f.data,currentUser:p.data,isOwner:w,readOnly:k}):r.createElement(C,{classroom:h.data})}()):r.createElement(Y,null)}},99998:(e,a,t)=>{t.d(a,{R:()=>l});var r=t(16714),n=t(22902),s=t(37802);function l(){var e=(0,s.r)(null),a=e.hasShareFlowV2,t=e.hasClassrooms,l=e.isLoadingSettings,o=(0,n.T)(),i=o.hasPermissions,c=o.isLoaded,m=o.getGatedPermission;return{experience:t?"soft-gate"===m(r.C.ViewClassrooms)?"minimal":i(r.C.ViewClassrooms)?"full":a?"minimal":void 0:"none",loading:l||!c}}}}]);
2
+ //# sourceMappingURL=2664-87c8cbfa7f-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/2664-87c8cbfa7f-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/rostering/rostering-alert/RosteringAlert.tsx","file:///app/packages/libs/shared/src/hooks/useBulkCheckboxManager.ts","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-teachers/empty-state/ManageClassroomTeachersEmptyState.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-teacher-item/manage-classroom-teacher-item.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-teacher-item/ManageClassroomTeacherItem.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-teachers/ManageClassroomTeachers.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-teachers/partial-loading/partial-manage-classroom-teachers.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-teachers/partial-loading/PartialManageClassroomTeachers.tsx","file:///app/packages/projects/lite/src/apps/classrooms/views/classroom-teachers/ClassroomTeachersView.tsx","file:///app/packages/projects/lite/src/shared/hooks/useClassroomExperience.ts"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'rostering.alert';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface RosteringAlertProps {\n type?: 'classroom' | 'general';\n}\n\nexport function RosteringAlert(props: RosteringAlertProps) {\n const text = props.type === 'classroom' ? getPhrase('classroom') : getPhrase('hasRostering');\n\n return (\n <div className='alert text-info bg-light-blue px-2 rounded-3 fw-semibold py-2 d-flex flex-wrap'>\n {text}&nbsp;\n {/* todo add it back when KB article link is ready */}\n {/* <ExternalLink\n className='text-info text-underline'\n href={''}\n newTab\n >\n {LanguageService.getPhrase(namespace, 'learnMore')}\n </ExternalLink> */}\n </div>\n );\n}","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { useForceUpdate } from 'libs/shared/hooks/useForceUpdate';\nimport { usePrevious } from 'libs/shared/hooks/usePrevious';\n\ntype CheckboxItemsState = Map<string, boolean>;\n\nexport interface BulkCheckboxManager {\n onToggleBulk: () => void;\n onToggleItem: (id: string) => void;\n getSelected: () => string[];\n isChecked: (item: string | number | HashObject<string>) => boolean;\n bulkChecked: boolean;\n deselectAll: () => void;\n hasSomeSelections: () => boolean;\n setSelected: (ids: string[]) => void;\n getSelectedCount: () => number;\n reset: () => void;\n getMap: () => Map<string, boolean>;\n}\n\nexport interface BulkCheckboxManagerOptions {\n idField?: string; // For objects like `PresentationAudiences` that don't use `id` as their identifier field\n persistNamespace?: string;\n preselectedIds?: string[];\n initialState?: CheckboxItemsState;\n}\n\n/**\n * @param collection - The collection you are keeping track of with checkboxes\n * @param options - See interface above\n */\nexport const useBulkCheckboxManager = (collection: HashObject[], options: BulkCheckboxManagerOptions = {}) => {\n const { idField = 'id', persistNamespace } = options;\n\n const initial = options.initialState ? options.initialState : new Map<string, boolean>();\n\n const items = React.useRef<CheckboxItemsState>(initial);\n \n const forceUpdate = useForceUpdate();\n\n const prevCollection = usePrevious(collection);\n const prevNamespace = usePrevious(persistNamespace);\n\n /**\n * This hook will clear the state of this hook when a user navigates between pages\n * if a persistNamespace was not provided\n */\n React.useEffect(() => {\n /**\n * If we're being passed initial state, we don't want to clear the state\n */\n if (options.initialState)\n return;\n\n /**\n * If we've been given a persist namespace, we don't want to clear our\n * selections while the namespace stays the same\n */\n if (persistNamespace && prevNamespace === persistNamespace)\n return;\n\n /**\n * Don't reinitialize if the ids of the new and old collection\n * are identical\n */\n const prevIds = prevCollection?.map(i => i[idField]).join();\n const ids = collection?.map(i => i[idField]).join();\n\n if (prevIds === ids)\n return;\n\n reset();\n }, [ prevCollection, prevNamespace, collection, options.initialState ]);\n\n React.useEffect(() => {\n if (!options.preselectedIds?.length)\n return;\n\n setSelected(options.preselectedIds);\n }, []);\n\n function reset(): void {\n items.current.clear();\n forceUpdate();\n }\n\n // When toggled on, all checkbox items will be enabled. Vice versa if toggled off\n function onToggleBulk(): void {\n const setValue = !isBulkChecked();\n\n collection.forEach(item => {\n if (setValue)\n items.current.set(item[idField].toString(), true);\n else\n items.current.delete(item[idField].toString());\n });\n\n forceUpdate();\n }\n\n // Toggles a single item\n function onToggleItem(id: string): void {\n const nextItemState = !items.current.get(id.toString());\n\n if (nextItemState)\n items.current.set(id.toString(), nextItemState);\n else\n items.current.delete(id.toString());\n \n forceUpdate();\n }\n\n // Returns the state of the item passed in\n function isChecked(item: string | number | HashObject<string>): boolean {\n if (typeof item === 'number')\n item = item.toString();\n else if (typeof item !== 'string')\n item = item[idField].toString();\n\n return items.current.get(item);\n }\n\n function getSelected(): string[] {\n return Array.from(items.current.keys());\n }\n\n function deselectAll(): void {\n if (!collection?.length) return;\n\n collection.forEach(item => {\n items.current.delete(item[idField].toString());\n });\n forceUpdate();\n }\n\n // Returns true if at least 1 item is checked\n function hasSomeSelections(): boolean {\n if (!collection?.length)\n return false;\n\n return !!collection.find(item => isChecked(item));\n }\n\n function isBulkChecked(): boolean {\n if (!collection?.length)\n return false;\n\n return collection.every(isChecked);\n }\n\n function setSelected(ids: string[]): void {\n ids.forEach(id => {\n items.current.set(id, true);\n });\n forceUpdate();\n }\n\n function getSelectedCount(): number {\n return items.current.size;\n }\n\n function getMap(): Map<string, boolean> {\n return items.current;\n }\n\n return {\n onToggleBulk,\n onToggleItem,\n getSelected,\n isChecked,\n bulkChecked: isBulkChecked(),\n deselectAll,\n hasSomeSelections,\n setSelected,\n getSelectedCount,\n reset,\n getMap\n };\n};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { Classroom } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'classrooms.manageClassroomTeachersEmptyState';\n\ninterface ManageClassroomTeachersEmptyStateProps {\n classroom: Classroom;\n}\n\nexport function RosteredClassroomTeachersEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.TEACHERS} />\n\n <EmptyState.Heading><Text phrase='emptyStateHeading' /></EmptyState.Heading>\n\n <EmptyState.Info className='mb-2'><Text phrase='emptyStateInfo' /></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 ManageClassroomTeachersEmptyState(props: ManageClassroomTeachersEmptyStateProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.TEACHERS} />\n\n <EmptyState.Heading><Text phrase='emptyStateHeading' /></EmptyState.Heading>\n\n <EmptyState.Info ><Text phrase='emptyStateInfo' /></EmptyState.Info>\n \n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'addTeachers')}\n icon={cvSvgLibrary.Plus}\n appLink={{\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.ADD_TEACHERS,\n args: [props.classroom.id]\n }}\n />\n\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"avatarContainer\":\"kTynd\",\"name\":\"UWi4G\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AssocDescriptor, EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ActionOptions, Actions as MoreActions } from 'libs/shared/components/actions/Actions';\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { UserRole } from 'libs/shared/enums/UserRole';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { Config, CurrentUser } from 'libs/shared/interfaces';\nimport { Classroom } from 'libs/shared/interfaces';\nimport { User } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport styles from './manage-classroom-teacher-item.scss';\n\nconst namespace = 'classrooms.manageClassroomTeacherItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst getRemoveTeachersAppLink = (teacherId: string, classroomId: string) => ({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.REMOVE_TEACHERS,\n args: [classroomId],\n params: {\n teacherIds: [teacherId]\n }\n});\n\nconst getAssignAsOwnerAppLink = (teacherId: string, classroomId: string) => ({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.ASSIGN_AS_OWNER,\n args: [ classroomId, teacherId ]\n});\n\nconst getRevokeOwnershipAppLink = (teacherId: string, classroomId: string) => ({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.REVOKE_OWNERSHIP,\n args: [ classroomId, teacherId ]\n});\n\ninterface ManageClassroomTeacherItemProps {\n classroom: Classroom;\n teacher: User;\n config: Config;\n onToggleCheckbox: () => void;\n checked: boolean;\n isOwner: (userId: string) => boolean;\n currentUser: CurrentUser;\n readOnly?: boolean;\n readonlyTooltip?: string;\n}\n\nexport function ManageClassroomTeacherItem(props: ManageClassroomTeacherItemProps): JSX.Element {\n const { hasPermissions } = usePermissions();\n\n const teacherIsAdmin = UserHelper.getUserRole(props.teacher) === UserRole.Admin;\n\n function getCanManageTeacher(): boolean {\n // Current user can perform any action on themselves\n if (props.currentUser.id === props.teacher.id)\n return true;\n\n // This permission allows total control over a classroom\n if (hasPermissions(PermissionName.ManageAllClassrooms))\n return true;\n\n // Regular teachers or owners cannot perform actions on admins in the classroom\n if (teacherIsAdmin)\n return false;\n\n return props.isOwner(props.currentUser.id);\n }\n\n const canManageTeacher = getCanManageTeacher();\n\n const actionDisabled = !canManageTeacher || props.readOnly;\n\n function getActions(): ActionOptions[] {\n // Non-owners cannot perform any actions on other classroom teachers\n if (!props.isOwner(props.currentUser.id))\n return [];\n\n const actions: ActionOptions[] = [];\n\n const disabledClassName = 'text-secondary disabled cursor-default';\n\n // Actions are different if the user item is for the current user\n const isManagingCurrentUser = props.currentUser.id === props.teacher.id;\n\n if (!isManagingCurrentUser) {\n if (props.isOwner(props.teacher.id)) {\n actions.push({\n order: 0,\n label: getPhrase('revokeOwnership'),\n appLink: getRevokeOwnershipAppLink(props.teacher.id, props.classroom.id),\n analyticsData: {\n id: props.teacher.id,\n classroomId: props.classroom.id\n },\n analyticsOptions: {\n actionType: UserAction.Demote,\n entity: EntityType.User,\n descriptor: AssocDescriptor.Classroom,\n workflowPhase: WorkflowPhase.Start,\n location: LocationContext.ManageClassroomTeacherListItem\n },\n className: actionDisabled ? disabledClassName : '',\n disabled: actionDisabled,\n tooltip: props.readOnly ? props.readonlyTooltip : !canManageTeacher ? getPhrase('cannotRevokeOwnershipFromAdmin') : ''\n });\n } else {\n actions.push({\n order: 0,\n label: getPhrase('assignAsOwner'),\n appLink: getAssignAsOwnerAppLink(props.teacher.id, props.classroom.id),\n analyticsData: {\n id: props.teacher.id,\n classroomId: props.classroom.id\n },\n analyticsOptions: {\n actionType: UserAction.Promote,\n entity: EntityType.User,\n descriptor: AssocDescriptor.Classroom,\n workflowPhase: WorkflowPhase.Start,\n location: LocationContext.ManageClassroomTeacherListItem\n },\n className: actionDisabled ? disabledClassName : '',\n disabled: actionDisabled,\n tooltip: props.readOnly ? props.readonlyTooltip : !canManageTeacher ? getPhrase('cannotAssignAdminAsOwner') : ''\n });\n }\n }\n\n actions.push({\n order: 10,\n label: isManagingCurrentUser ? getPhrase('leaveClassroom') : getPhrase('removeTeacher'),\n appLink: getRemoveTeachersAppLink(props.teacher.id, props.classroom.id),\n analyticsData: {\n id: props.classroom.id,\n userId: props.teacher.id\n },\n analyticsOptions: {\n actionType: UserAction.Dissociate,\n entity: EntityType.Classroom,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Start,\n location: LocationContext.ManageClassroomTeacherListItem\n },\n className: actionDisabled ? disabledClassName : 'text-danger',\n disabled: actionDisabled,\n tooltip: props.readOnly ? props.readonlyTooltip : !canManageTeacher ? getPhrase('cannotRemoveAdmin') : ''\n });\n\n return actions;\n }\n\n return (\n <div className='d-flex align-items-center py-1 px-4'>\n {props.isOwner(props.currentUser.id) && (\n <Checkbox\n id={props.teacher.id}\n checked={props.checked}\n onChange={props.onToggleCheckbox}\n className='me-2'\n disabled={props.readOnly}\n />\n )}\n\n <div className={`${styles.avatarContainer} me-2`}>\n <Avatar\n imageCdnUrl={props.config.imageCdnUrl}\n initials={UserHelper.getInitials(props.teacher.name, props.teacher.surname)}\n imageUrl={props.teacher.avatar?.url}\n />\n </div>\n\n <p className={`${styles.name} me-2 text-truncate mb-0 text-nowrap`}>{UserHelper.getFullName(props.teacher)}</p>\n\n {!!teacherIsAdmin && (\n <div className={`classroom-pill text-white bg-navy`}>\n <Text namespace={namespace} phrase='admin' />\n </div>\n )}\n\n {(!teacherIsAdmin && props.isOwner(props.teacher.id)) && (\n <div className={`classroom-pill text-white bg-indigo`}>\n <Text namespace={namespace} phrase='owner' />\n </div>\n )}\n\n <MoreActions\n actions={getActions()}\n className='ms-auto'\n actionsDropdownClassName='btn btn-link'\n />\n </div>\n );\n}","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 { AssocDescriptor, EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useBulkCheckboxManager } from 'libs/shared/hooks/useBulkCheckboxManager';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { Classroom, Config, CurrentUser, User } 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 { ManageClassroomTeacherItem } from 'apps/classrooms/components/manage-classroom-teacher-item/ManageClassroomTeacherItem';\n\nimport { ManageClassroomTeachersEmptyState } from './empty-state/ManageClassroomTeachersEmptyState';\n\nconst namespace = 'classrooms.manageClassroomTeachers';\n\ninterface ManageClassroomTeachersProps {\n classroom: Classroom;\n isOwner: (teacherId: string) => boolean;\n currentUser: CurrentUser;\n teachers: User[];\n config: Config;\n readOnly?: boolean;\n}\n\nexport function ManageClassroomTeachers(props: ManageClassroomTeachersProps): JSX.Element {\n const CheckboxHelper = useBulkCheckboxManager(props.teachers);\n const selectionCount = CheckboxHelper.getSelected().length;\n\n function onClickBulkRemoveTeachers(): void {\n if (!selectionCount || !props.isOwner(props.currentUser.id) || props.readOnly)\n return;\n\n const teacherIds = CheckboxHelper.getSelected();\n\n AnalyticsHelper.logUserAction({\n id: props.classroom.id,\n teacherCount: teacherIds.length\n }, {\n entity: EntityType.Classroom,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Start,\n actionType: UserAction.Dissociate,\n location: LocationContext.ManageClassroomTeachers\n });\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.REMOVE_TEACHERS,\n args: [props.classroom.id],\n params: {\n teacherIds\n }\n });\n }\n\n const edgeToEdge = useMediaQuery(MediaQueryStrings.XLDown);\n\n if (!props.teachers?.length)\n return <ManageClassroomTeachersEmptyState classroom={props.classroom} />;\n\n return (\n <>\n <div className={`d-flex align-items-center py-2 ${edgeToEdge ? 'ps-2' : 'ps-4'}`}>\n {props.isOwner(props.currentUser.id) && (\n <>\n <Checkbox\n id='manage-classroom-teachers-bulk'\n onChange={CheckboxHelper.onToggleBulk}\n checked={CheckboxHelper.bulkChecked}\n className='me-2'\n indeterminate={CheckboxHelper.hasSomeSelections()}\n disabled={props.readOnly}\n />\n\n <DivButton\n className={!selectionCount || props.readOnly ? 'me-auto text-light cursor-default' : 'me-auto'}\n onClick={onClickBulkRemoveTeachers}\n >\n <SvgContainer\n svgName={cvSvgLibrary.Delete}\n title={props.readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : LanguageService.getPhrase(namespace, 'delete')}\n tooltipPlacement='top'\n tooltipSpanHack\n />\n </DivButton>\n <Tooltip\n spanHack\n title={props.readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : ''}\n >\n <IconButton\n disabled={props.readOnly}\n svgName={cvSvgLibrary.Plus}\n className='btn btn-outline-dark ms-auto'\n appLink={props.readOnly\n ? null\n : {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.ADD_TEACHERS,\n args: [props.classroom.id]\n }}\n analyticsData={{ id: props.classroom.id }}\n analyticsOptions={{\n entity: EntityType.Classroom,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Start,\n actionType: UserAction.Associate,\n location: LocationContext.ManageClassroomTeachers\n }}\n >\n <Text namespace={namespace} phrase='addTeacher' />\n </IconButton>\n </Tooltip>\n </>\n )}\n </div>\n\n <ul className='striped-list list-unstyled'>\n {props.teachers.map(teacher => (\n <li key={teacher.id}>\n <ManageClassroomTeacherItem\n classroom={props.classroom}\n teacher={teacher}\n config={props.config}\n checked={CheckboxHelper.isChecked(teacher.id)}\n onToggleCheckbox={() => CheckboxHelper.onToggleItem(teacher.id)}\n currentUser={props.currentUser}\n isOwner={props.isOwner}\n readOnly={props.readOnly}\n readonlyTooltip={props.readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : ''}\n />\n </li>\n ))}\n </ul>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"heading\":\"FQwVf\",\"avatar\":\"mYQWy\",\"checkbox\":\"svGp0\",\"actionIcon\":\"rKbj_\",\"addTeachers\":\"qigWD\",\"teacherName\":\"SiD8n\",\"moreActions\":\"sAUZY\"};","import React from 'react';\n\nimport { PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PartialPillTabSelector } from 'libs/shared/components/pill-tab-selector/partial-loading/PartialPillTabSelector';\n\nimport styles from './partial-manage-classroom-teachers.scss';\n\nexport const PartialManageClassroomTeachers = React.memo(function(): JSX.Element {\n return (\n <div className='px-3'>\n {/* Heading */}\n <div className={`mb-1 partial-loading-background ${styles.heading}`} />\n\n {/* Breadcrumbs */}\n <div className='pb-3'>\n <PartialBreadcrumbs numItems={2} />\n </div>\n\n {/* Pill tab selector */}\n <div className='pb-2'>\n <PartialPillTabSelector />\n </div>\n\n <div className='d-flex align-items-center py-2'>\n {/* Checkbox */}\n <div className={`ms-2 me-4 partial-loading-background ${styles.checkbox}`} />\n {/* Delete action */}\n <div className={`me-auto partial-loading-background ${styles.actionIcon}`} />\n\n {/* Add new teachers button */}\n <div className={`partial-loading-background ${styles.addTeachers}`} />\n </div>\n\n {/* Teachers list */}\n <ul className='striped-list list-unstyled'>\n {Array(3).fill(null).map((teacher, i) => (\n <li key={i}>\n <div className='d-flex align-items-center py-1 px-4'>\n {/* Checkbox */}\n <div className={`me-2 partial-loading-background ${styles.checkbox}`} />\n\n {/* Avatar */}\n <div className={`me-2 partial-loading-background ${styles.avatar}`} />\n\n {/* Teacher name */}\n <div className='w-25'>\n <div className={`partial-loading-background ${styles.teacherName}`} />\n </div>\n\n {/* More actions */}\n <div className={`ms-auto partial-loading-background ${styles.moreActions}`} />\n </div>\n </li>\n ))}\n </ul>\n </div>\n );\n});","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { RosteringAlert } from 'libs/shared/components/rostering/rostering-alert/RosteringAlert';\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, User } from 'libs/shared/interfaces';\n\nimport { ManageClassroomTeachersEmptyState, RosteredClassroomTeachersEmptyState } from 'apps/classrooms/components/manage-classroom-teachers/empty-state/ManageClassroomTeachersEmptyState';\nimport { ManageClassroomTeachers } from 'apps/classrooms/components/manage-classroom-teachers/ManageClassroomTeachers';\nimport { PartialManageClassroomTeachers } from 'apps/classrooms/components/manage-classroom-teachers/partial-loading/PartialManageClassroomTeachers';\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { useCheckClassroomPermissions } from 'apps/classrooms/hooks/useClassroomPermissions';\nimport { useHandleClassroomErrors } from 'apps/classrooms/hooks/useHandleClassroomErrors';\nimport { ClassroomLayout } from 'apps/classrooms/layouts/ClassroomLayout';\n\nconst namespace = 'classrooms.classroomTeachers';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ClassroomTeachersViewProps {\n id: string;\n}\n\nexport function ClassroomTeachersView(props: ClassroomTeachersViewProps): 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 owners = Flight.useBasicFetch<User[]>(ClassroomRequests.getClassroomOwners(props.id));\n const staff = Flight.useBasicFetch<User[]>(\n currentUser.data?.customerId && ClassroomRequests.getClassroomStaff(props.id, currentUser.data.customerId)\n );\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const dispatch = useDispatch();\n const { isOwner: currentUserIsOwner } = useCheckClassroomPermissions(props.id);\n\n const isRostered = classroom.data?._integrations?.rostered;\n\n useSetPageMetadata({\n title: getPhrase('pageTitle', { classroomName: classroom.data?.name })\n });\n useHandleClassroomErrors(classroom);\n \n function isOwner(teacherId: string): boolean {\n if (teacherId === currentUser.data.id)\n return currentUserIsOwner;\n\n return owners.data.some(owner => owner.id.toString() === teacherId.toString());\n }\n\n function onTogglePin(shouldPin: boolean, onSuccess: () => void, onError: () => void): void {\n if (isRostered)\n return;\n const request = shouldPin\n ? ClassroomRequests.pinClassroom\n : ClassroomRequests.unpinClassroom;\n\n Flight.fetch(dispatch, request(classroom.data, onSuccess, onError));\n }\n\n if (!classroom.data || !staff.hasCompleted || !owners.hasCompleted || !config.data)\n return <PartialManageClassroomTeachers />;\n\n return (\n <ClassroomLayout\n classroom={classroom.data}\n currentUser={currentUser.data}\n onTogglePin={onTogglePin}\n activeTab='teachers'\n isRostered={isRostered}\n hasShareFlowV2={hasShareFlowV2}\n >\n {(() => {\n if (isRostered) {\n return (\n <>\n <RosteringAlert type='classroom'/>\n {!staff.data?.length ? (\n <RosteredClassroomTeachersEmptyState />\n ) : (\n <ManageClassroomTeachers\n classroom={classroom.data}\n teachers={staff.data}\n config={config.data}\n currentUser={currentUser.data}\n isOwner={isOwner}\n readOnly\n />\n )}\n </>\n );\n }\n\n if (staff.data?.length) {\n return (\n <ManageClassroomTeachers\n config={config.data}\n classroom={classroom.data}\n teachers={staff.data}\n currentUser={currentUser.data}\n isOwner={isOwner}\n readOnly={isRostered}\n />\n );\n }\n\n return <ManageClassroomTeachersEmptyState classroom={classroom.data}/>;\n })()}\n\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":["getPhrase","RosteringAlert","props","text","type","className","useBulkCheckboxManager","collection","options","idField","persistNamespace","initial","initialState","Map","items","forceUpdate","prevCollection","prevNamespace","reset","current","clear","isChecked","item","toString","get","isBulkChecked","length","every","setSelected","ids","forEach","id","set","map","i","join","preselectedIds","onToggleBulk","setValue","onToggleItem","nextItemState","getSelected","Array","from","keys","bulkChecked","deselectAll","hasSomeSelections","find","getSelectedCount","size","getMap","namespace","RosteredClassroomTeachersEmptyState","value","EmptyState","src","ImageUrls","Text","phrase","href","target","LanguageService","ManageClassroomTeachersEmptyState","icon","appLink","application","action","args","classroom","getRemoveTeachersAppLink","teacherId","classroomId","params","teacherIds","getAssignAsOwnerAppLink","getRevokeOwnershipAppLink","ManageClassroomTeacherItem","hasPermissions","usePermissions","teacherIsAdmin","UserHelper","teacher","UserRole","canManageTeacher","currentUser","PermissionName","isOwner","actionDisabled","readOnly","Checkbox","checked","onChange","onToggleCheckbox","disabled","Avatar","imageCdnUrl","config","initials","name","surname","imageUrl","avatar","url","actions","disabledClassName","isManagingCurrentUser","push","order","label","analyticsData","analyticsOptions","actionType","entity","descriptor","workflowPhase","location","tooltip","readonlyTooltip","userId","getActions","actionsDropdownClassName","ManageClassroomTeachers","CheckboxHelper","teachers","selectionCount","edgeToEdge","indeterminate","DivButton","onClick","AnalyticsHelper","teacherCount","SvgContainer","svgName","title","tooltipPlacement","tooltipSpanHack","Tooltip","spanHack","IconButton","key","PartialManageClassroomTeachers","numItems","PartialPillTabSelector","fill","ClassroomTeachersView","hasShareFlowV2","useSettings","UserRequests","data","ClassroomRequests","owners","staff","customerId","ConfigRequests","dispatch","currentUserIsOwner","isRostered","_integrations","rostered","some","owner","useSetPageMetadata","classroomName","useHandleClassroomErrors","hasCompleted","ClassroomLayout","onTogglePin","shouldPin","onSuccess","onError","request","activeTab","useClassroomExperience","hasClassrooms","isLoadingSettings","isLoaded","getGatedPermission","experience","loading"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[2888],{3218:(e,t,n)=>{n.d(t,{R:()=>S});var r=n(32735),i=n(69087),a=n(26136),s=n(39157),o=n(69186),l=n(86572),u=n(28972),c=n(83140),d=n(80845),m=n(23481),v=n(2102),f=n(36532),b=m.T.encloseNamespace("interactives.studentResponseList");function g(e){var t=Object.keys(e.markedAnswers).length;return r.createElement("div",{className:"d-flex justify-content-end pt-3"},r.createElement("div",null,!e.showSubmitButtonSpinner&&r.createElement("button",{className:"btn btn-link",onClick:e.onClickClose},b("close")),!!e.interactionsToMark.length&&r.createElement(r.Fragment,null,e.isDemo?r.createElement(f.u,{id:"submitAnswers",title:b("demoOnly"),spanHack:!0,spanHackClassName:"d-inline-flex"},r.createElement("button",{className:"btn btn-outline-dark pointer-events-none",disabled:!t},b("submitAnswers"))):r.createElement(v.m,{variant:"outline-dark",onClick:e.onClickSubmit,disabled:!t,showSpinner:e.showSubmitButtonSpinner},b("submitAnswers")))))}var k=m.T.encloseNamespace("interactives.studentResponseList");function y(e){var t=Object.keys(e.markedAnswers).length;return r.createElement("div",{className:"d-flex justify-content-between pb-3"},r.createElement("div",{className:"d-flex"},!!e.summary.unanswered&&r.createElement("div",{className:"bg-light rounded p-2 me-2"},r.createElement("strong",{className:"me-2"},k("unanswered")),e.summary.unanswered),r.createElement("div",{className:"bg-light rounded p-2 me-2"},r.createElement("strong",{className:"me-2"},k("score")),e.summary.awaitingMarking?r.createElement("em",null,k("pending")):"".concat(Math.round(100*e.summary.percentCorrect),"%"))),!!e.interactionsToMark.length&&r.createElement(r.Fragment,null,e.isDemo?r.createElement(f.u,{id:"submitAnswers",title:k("demoOnly"),spanHack:!0},r.createElement("button",{className:"btn btn-outline-dark pointer-events-none",disabled:!t},k("submitAnswers"))):r.createElement(v.m,{variant:"outline-dark",onClick:e.onClickSubmit,disabled:!t,showSpinner:e.showSubmitButtonSpinner},k("submitAnswers"))))}const h={awaitingMarking:"MvGb5"};function p(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,a,s,o=[],l=!0,u=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=a.call(n)).done)&&(o.push(r.value),o.length!==t);l=!0);}catch(e){u=!0,i=e}finally{try{if(!l&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(u)throw i}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return w(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?w(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function w(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function S(e){var t,n,m,v,f=p(r.useState(!1),2),b=f[0],k=f[1],w=(t=r.useRef(null),n=p(r.useState(!1),2),m=n[0],v=n[1],r.useEffect(function(){t.current&&!m&&(v(!0),requestAnimationFrame(function(){return t.current.scrollIntoView({behavior:"smooth",block:"center"})}))},[t.current,m]),t),S=(0,s.Rt)(e.interactive,e.studentResults),A=(0,d.Q)(e.interactive),E=function(e,t){return e.filter(function(e){return c.A.isInteractionCorrect(e,(0,d.j_)(t))===u.w.AwaitingMarking})}(A,e.studentResults);function C(){k(!0),e.submitMarkedAnswers()}return r.createElement(r.Fragment,null,r.createElement(y,{summary:S,interactionsToMark:E,markedAnswers:e.markedAnswers,onClickSubmit:C,showSubmitButtonSpinner:b,isDemo:e.isDemo}),r.createElement("ul",{className:"list-unstyled"},A.map(function(t,n){var u,c=t.id.toString()===(null===(u=e.selectedInteractionId)||void 0===u?void 0:u.toString()),d=E.some(function(e){return e.id===t.id}),m=(0,a.B)(e.studentResults.user,e.anonymiseUsers),v="p-2 mb-3 rounded";return c&&(v+=" border-2 border-info shadow"),v+=d?" ".concat(h.awaitingMarking):" border",r.createElement("li",{key:n,className:v,ref:c?w:null},r.createElement("div",{className:"d-flex mb-2"},r.createElement(l.y,{interaction:t,iconClassName:"flex-shrink-0"})),e.reportsStyling?r.createElement(o.O,{interaction:t,studentResults:e.studentResults,markedStatus:(0,s.HI)(t.id,e.studentResults,e.markedAnswers),markInteraction:e.addMarkedAnswers,imageCdnUrl:e.imageCdnUrl,anonymisedUserName:m,className:"bg-light ps-2",showFeedback:!0,reportsStyling:!0,responseComponentClass:"mx-n2"}):r.createElement(i.d,{interaction:t,studentResults:e.studentResults,markedStatus:(0,s.HI)(t.id,e.studentResults,e.markedAnswers),markInteraction:e.addMarkedAnswers,imageCdnUrl:e.imageCdnUrl,anonymisedUserName:m,showFeedback:!0}))})),r.createElement(g,{interactionsToMark:E,markedAnswers:e.markedAnswers,onClickSubmit:C,onClickClose:e.onClickClose,showSubmitButtonSpinner:b,isDemo:e.isDemo}))}},94644:(e,t,n)=>{n.d(t,{r:()=>c});var r=n(50242),i=n(81886),a=n(67058),s=n(14553),o=n(49267),l=n(49075),u={notFound:a.d,forbidden:{rating:s.q,yearLevel:s.q,region:o.a,privacy:s.q},badRequest:l._,internalServerError:l._};function c(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var a;a="number"==typeof e?e:e.status;var s=Object.assign(Object.assign({},u),t);a&&i.Q.Ry.isStatusCodeError(a)&&(a!==r.o.InternalServer?a!==r.o.NotFound?a!==r.o.Forbidden?n.badRequest||i.Q.Ry.throw(new s.badRequest):n.forbidden||i.Q.Ry.throw(new s.forbidden.privacy):n.notFound||i.Q.Ry.throw(new s.notFound):n.internalServerError||i.Q.Ry.throw(new l._))}}},54405:(e,t,n)=>{n.d(t,{X:()=>r});var r={interactive:function(){return{url:"/mocks/insights/interactive.json",key:"demo:interactive",normalize:!1}},interactiveMetadata:function(){return{url:"/mocks/insights/interactive-metadata.json",key:"demo:interactive:metadata",normalize:!1}},interactiveResults:function(){return{url:"/mocks/insights/interactive-results.json",key:"demo:interactive:results",normalize:!1}},videoViews:function(){return{url:"/mocks/insights/video-views.json",key:"demo:video:views",normalize:!1}},users:function(){return{url:"/mocks/insights/users.json",key:"demo:users",normalize:!1}},individualHeatmap:function(){return{url:"/mocks/insights/individual-heatmap.json",key:"demo:individual:heatmap",normalize:!1}},aggregateHeatmap:function(){return{url:"/mocks/insights/aggregate-heatmap.json",key:"demo:aggregate:heatmap",normalize:!1}}}},91286:(e,t,n)=>{n.d(t,{v:()=>s});var r=n(32735),i=n(94644);function a(e){return e.map(function(e){return e.statusCode}).join(":")}function s(e,t,n){var s=Array.isArray(e)?e:[e];(0,r.useEffect)(function(){s.forEach(function(e){(0,i.r)(e.statusCode,t,n)})},[a(s),t,n])}},93322:(e,t,n)=>{n.d(t,{F:()=>a});var r=n(32735),i=n(13126);function a(){r.useEffect(function(){return i.e.lockContentWidth(),function(){return i.e.unlockContentWidth()}},[])}},55588:(e,t,n)=>{n.r(t),n.d(t,{InteractiveStudentResultsDemoView:()=>h});var r=n(32735),i=n(23481),a=n(20354),s=n(2948),o=n(9193),l=n(26136),u=n(3218),c=n(9111),d=n(38143),m=n(39151),v=n(54405),f=n(82541),b=n(91286),g=n(93322);function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var y=i.T.encloseNamespace("shared.interactiveStudentResults");function h(e){var t,n,i,h,p,w=(h=(0,s.D)(d.g.ANONYMISE_USERS),p=1,function(e){if(Array.isArray(e))return e}(h)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,a,s,o=[],l=!0,u=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=a.call(n)).done)&&(o.push(r.value),o.length!==t);l=!0);}catch(e){u=!0,i=e}finally{try{if(!l&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(u)throw i}}return o}}(h,p)||function(e,t){if(e){if("string"==typeof e)return k(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?k(e,t):void 0}}(h,p)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0];(0,g.F)();var S=a.a.useBasicFetch(v.X.interactiveMetadata()),A=a.a.useBasicFetch(v.X.interactive()),E=a.a.useBasicFetch(v.X.interactiveResults()),C=a.a.useBasicFetch(m.L.config());(0,b.v)([S,E]),(0,f.b)(S);var R=(0,o.D)(null===(t=A.data)||void 0===t?void 0:t.id,null===(n=S.data)||void 0===n?void 0:n.id,e.closePopup),I=R.markedAnswers,N=R.addMarkedAnswers,j=R.submitMarkedAnswers,M=null===(i=E.data)||void 0===i?void 0:i.students.find(function(t){var n,r,i,a,s,o;return e.userId?(null===(r=null===(n=t.user)||void 0===n?void 0:n.id)||void 0===r?void 0:r.toString())===(null===(i=e.userId)||void 0===i?void 0:i.toString()):!!e.sessionId&&(null===(s=null===(a=t.user)||void 0===a?void 0:a.sessionId)||void 0===s?void 0:s.toString())===(null===(o=e.sessionId)||void 0===o?void 0:o.toString())}),F=M?y("heading",{studentName:(0,l.B)(M.user,w)}):"",O=!!A.data&&!!E.data&&!!C.data;return r.createElement(c.G,{title:F,showLoadingSpinner:!O,closePopup:e.closePopup,size:"lg"},O&&r.createElement(u.R,{interactive:A.data,studentResults:M,markedAnswers:I,addMarkedAnswers:N,submitMarkedAnswers:j,imageCdnUrl:C.data.imageCdnUrl,selectedInteractionId:e.interactionId,onClickClose:e.closePopup,anonymiseUsers:w,reportsStyling:e.reportsStyling,isDemo:!0}))}}}]);
2
+ //# sourceMappingURL=2888-2596e106a5-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/2888-2596e106a5-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/student-response-list/StudentResponseListFooter.tsx","file:///app/packages/libs/shared/src/apps/student-response-list/StudentResponseListHeader.tsx","file:///app/packages/libs/shared/src/apps/student-response-list/student-response-list.scss","file:///app/packages/libs/shared/src/apps/student-response-list/StudentResponseList.tsx","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/flight-requests/InsightsDemoRequests.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/hooks/useLockContentWidth.ts","file:///app/packages/projects/lite/src/apps/my-shares/views/demo/interactive-student-results/InteractiveStudentResultsDemoView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { MarkedAnswerHash } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { Interaction } from 'libs/shared/interfaces';\n\nconst namespace = 'interactives.studentResponseList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface StudentResponseListFooterProps {\n interactionsToMark: Interaction[];\n markedAnswers: MarkedAnswerHash;\n onClickSubmit: () => void;\n onClickClose: () => void;\n showSubmitButtonSpinner: boolean;\n isDemo?: boolean;\n}\n\nexport function StudentResponseListFooter(props: StudentResponseListFooterProps): JSX.Element {\n const numMarkedAnswers = Object.keys(props.markedAnswers).length;\n\n return (\n <div className='d-flex justify-content-end pt-3'>\n <div>\n {!props.showSubmitButtonSpinner &&\n <button className='btn btn-link' onClick={props.onClickClose}>\n {getPhrase('close')}\n </button>\n }\n {!!props.interactionsToMark.length && (\n <>\n {props.isDemo ? (\n <Tooltip\n id='submitAnswers'\n title={getPhrase('demoOnly')}\n spanHack\n spanHackClassName='d-inline-flex'\n >\n <button\n className='btn btn-outline-dark pointer-events-none'\n disabled={!numMarkedAnswers}\n >\n {getPhrase('submitAnswers')}\n </button>\n </Tooltip>\n ) : (\n <SpinnerButton\n variant='outline-dark'\n onClick={props.onClickSubmit}\n disabled={!numMarkedAnswers}\n showSpinner={props.showSubmitButtonSpinner}\n >\n {getPhrase('submitAnswers')}\n </SpinnerButton>\n )}\n </>\n )}\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { MarkedAnswerHash } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { ResultsSummary } from 'libs/shared/apps/analytics/interfaces/ResultsSummary';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { Interaction } from 'libs/shared/interfaces';\n\nconst namespace = 'interactives.studentResponseList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface StudentResponseListHeaderProps {\n summary: ResultsSummary;\n interactionsToMark: Interaction[];\n markedAnswers: MarkedAnswerHash;\n onClickSubmit: () => void;\n showSubmitButtonSpinner: boolean;\n isDemo?: boolean;\n}\n\nexport function StudentResponseListHeader(props: StudentResponseListHeaderProps): JSX.Element {\n const numMarkedAnswers = Object.keys(props.markedAnswers).length;\n\n return (\n <div className='d-flex justify-content-between pb-3'>\n <div className='d-flex'>\n {!!props.summary.unanswered &&\n <div className='bg-light rounded p-2 me-2'>\n <strong className='me-2'>{getPhrase('unanswered')}</strong>\n {props.summary.unanswered}\n </div>\n }\n <div className='bg-light rounded p-2 me-2'>\n <strong className='me-2'>{getPhrase('score')}</strong>\n {props.summary.awaitingMarking\n ? <em>{getPhrase('pending')}</em>\n : `${Math.round(props.summary.percentCorrect * 100)}%`\n }\n </div>\n </div>\n {!!props.interactionsToMark.length && (\n <>\n {props.isDemo ? (\n <Tooltip id='submitAnswers' title={getPhrase('demoOnly')} spanHack>\n <button\n className='btn btn-outline-dark pointer-events-none'\n disabled={!numMarkedAnswers}\n >\n {getPhrase('submitAnswers')}\n </button>\n </Tooltip>\n ) : (\n <SpinnerButton\n variant='outline-dark'\n onClick={props.onClickSubmit}\n disabled={!numMarkedAnswers}\n showSpinner={props.showSubmitButtonSpinner}\n >\n {getPhrase('submitAnswers')}\n </SpinnerButton>\n )}\n </>\n )}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"awaitingMarking\":\"MvGb5\"};","import React from 'react';\n\nimport { InteractionResponseItem } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/InteractionResponseItem';\nimport { MarkedAnswerHash } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { anonymiseUserName } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { getMarkedStatus, getStudentResultsSummary } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { InteractionResponse } from 'libs/shared/components/interaction-response/InteractionResponse';\nimport { InteractionLabel } from 'libs/shared/components/interactive-questions/InteractionLabel';\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, Interactive, StudentAnswer, StudentResults } from 'libs/shared/interfaces';\nimport { InteractiveCorrectnessHelper } from 'libs/shared/utils/InteractiveCorrectnessHelper';\nimport { getInteractions, getStudentResult } from 'libs/shared/utils/InteractiveHelper';\n\nimport { StudentResponseListFooter } from './StudentResponseListFooter';\nimport { StudentResponseListHeader } from './StudentResponseListHeader';\n\nimport styles from './student-response-list.scss';\n\nfunction getInteractionsToMark(\n interactions: Interaction[],\n studentResults: StudentResults\n): Interaction[] {\n return interactions.filter(i => {\n return InteractiveCorrectnessHelper.isInteractionCorrect(\n i,\n getStudentResult(studentResults)\n ) === InteractionCorrectness.AwaitingMarking;\n });\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nfunction useScrollSelectedInteractionIntoView(): React.MutableRefObject<HTMLLIElement> {\n const ref = React.useRef<HTMLLIElement>(null);\n const [ scrolled, setScrolled ] = React.useState(false);\n\n // Only scroll once\n React.useEffect(() => {\n if (!ref.current || scrolled)\n return;\n\n setScrolled(true);\n requestAnimationFrame(() => ref.current.scrollIntoView({ behavior: 'smooth', block: 'center' }));\n }, [ ref.current, scrolled ]);\n\n return ref;\n}\n\ninterface StudentResponseListProps {\n interactive: Interactive;\n markedAnswers: MarkedAnswerHash;\n studentResults: StudentResults;\n addMarkedAnswers: (answer: StudentAnswer[], status: InteractiveAnswerStatus) => void;\n submitMarkedAnswers: () => void;\n onClickClose: () => void;\n imageCdnUrl: string;\n selectedInteractionId?: string;\n anonymiseUsers: boolean;\n reportsStyling?: boolean;\n isDemo?: boolean;\n}\n\nexport function StudentResponseList(props: StudentResponseListProps): JSX.Element {\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n const selectedInteractionRef = useScrollSelectedInteractionIntoView();\n\n const summary = getStudentResultsSummary(props.interactive, props.studentResults);\n const interactions = getInteractions(props.interactive);\n const questionsToMark = getInteractionsToMark(interactions, props.studentResults);\n\n function onClickSubmit(): void {\n setShowSpinner(true);\n props.submitMarkedAnswers();\n }\n\n return (\n <>\n <StudentResponseListHeader\n summary={summary}\n interactionsToMark={questionsToMark}\n markedAnswers={props.markedAnswers}\n onClickSubmit={onClickSubmit}\n showSubmitButtonSpinner={showSpinner}\n isDemo={props.isDemo}\n />\n <ul className='list-unstyled'>\n {interactions.map((interaction, idx) => {\n const isSelected = interaction.id.toString() === props.selectedInteractionId?.toString();\n const markingRequired = questionsToMark.some(q => q.id === interaction.id);\n const anonymisedUserName = anonymiseUserName(\n props.studentResults.user,\n props.anonymiseUsers\n );\n\n let className = 'p-2 mb-3 rounded';\n\n if (isSelected)\n className += ' border-2 border-info shadow';\n\n if (markingRequired)\n className += ` ${styles.awaitingMarking}`;\n else\n className += ' border';\n\n return (\n <li key={idx} className={className} ref={isSelected ? selectedInteractionRef : null}>\n <div className='d-flex mb-2'>\n <InteractionLabel\n interaction={interaction}\n iconClassName='flex-shrink-0'\n />\n </div>\n {props.reportsStyling ? (\n <InteractionResponse\n interaction={interaction}\n studentResults={props.studentResults}\n markedStatus={getMarkedStatus(interaction.id, props.studentResults, props.markedAnswers)}\n markInteraction={props.addMarkedAnswers}\n imageCdnUrl={props.imageCdnUrl}\n anonymisedUserName={anonymisedUserName}\n className='bg-light ps-2'\n showFeedback\n reportsStyling\n responseComponentClass='mx-n2'\n />\n ) : (\n <InteractionResponseItem\n interaction={interaction}\n studentResults={props.studentResults}\n markedStatus={getMarkedStatus(interaction.id, props.studentResults, props.markedAnswers)}\n markInteraction={props.addMarkedAnswers}\n imageCdnUrl={props.imageCdnUrl}\n anonymisedUserName={anonymisedUserName}\n showFeedback\n />\n )}\n </li>\n );\n })}\n </ul>\n <StudentResponseListFooter\n interactionsToMark={questionsToMark}\n markedAnswers={props.markedAnswers}\n onClickSubmit={onClickSubmit}\n onClickClose={props.onClickClose}\n showSubmitButtonSpinner={showSpinner}\n isDemo={props.isDemo}\n />\n </>\n );\n}","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n internalServerError?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError,\n internalServerError: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.InternalServer) {\n if (!ignoreMap.internalServerError)\n Core.ErrorHelper.throw(new UnspecifiedError());\n return;\n }\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { Flight } from 'libs/common/react/index';\n\nexport const InsightsDemoRequests = {\n interactive(): Flight.Request {\n return {\n url: `/mocks/insights/interactive.json`,\n key: `demo:interactive`,\n normalize: false\n };\n },\n\n interactiveMetadata(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-metadata.json`,\n key: `demo:interactive:metadata`,\n normalize: false\n };\n },\n\n interactiveResults(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-results.json`,\n key: `demo:interactive:results`,\n normalize: false\n };\n },\n\n videoViews(): Flight.Request {\n return {\n url: `/mocks/insights/video-views.json`,\n key: `demo:video:views`,\n normalize: false\n };\n },\n\n users(): Flight.Request {\n return {\n url: `/mocks/insights/users.json`,\n key: `demo:users`,\n normalize: false\n };\n },\n\n individualHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/individual-heatmap.json`,\n key: `demo:individual:heatmap`,\n normalize: false\n };\n },\n\n aggregateHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/aggregate-heatmap.json`,\n key: `demo:aggregate:heatmap`,\n normalize: false\n };\n }\n};","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import React from 'react';\n\nimport { LayoutHelper } from 'libs/shared/utils/LayoutHelper';\n\nexport function useLockContentWidth(): void {\n React.useEffect(() => {\n LayoutHelper.lockContentWidth();\n return () => LayoutHelper.unlockContentWidth();\n }, []);\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { useMarkAnswers } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { anonymiseUserName } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { StudentResponseList } from 'libs/shared/apps/student-response-list/StudentResponseList';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InsightsDemoRequests } from 'libs/shared/flight-requests/InsightsDemoRequests';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { Config, Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.interactiveStudentResults';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractiveStudentResultsViewProps extends PopupViewProps {\n userId: string;\n interactiveId: string;\n interactionId?: string;\n reportsStyling?: boolean;\n sessionId?: string;\n}\n\nexport function InteractiveStudentResultsDemoView(props: InteractiveStudentResultsViewProps): JSX.Element {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InsightsDemoRequests.interactiveMetadata()\n );\n const interactive = Flight.useBasicFetch<Interactive>(InsightsDemoRequests.interactive());\n\n const results = Flight.useBasicFetch<InteractiveResultSet>(InsightsDemoRequests.interactiveResults());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n useHandleObjectError([ interactiveMetadata, results ]);\n useCannotConsumeError(interactiveMetadata);\n\n const { markedAnswers, addMarkedAnswers, submitMarkedAnswers } = useMarkAnswers(\n interactive.data?.id,\n interactiveMetadata.data?.id,\n props.closePopup\n );\n\n const studentResults = results.data?.students.find(s => {\n if (props.userId)\n return s.user?.id?.toString() === props.userId?.toString();\n\n if (props.sessionId)\n return s.user?.sessionId?.toString() === props.sessionId?.toString();\n\n return false;\n });\n\n const popupTitle = studentResults\n ? getPhrase('heading', { studentName: anonymiseUserName(studentResults.user, anonymiseUsers) })\n : '';\n const dataLoaded = !!interactive.data && !!results.data && !!config.data;\n\n return (\n <Popup\n title={popupTitle}\n showLoadingSpinner={!dataLoaded}\n closePopup={props.closePopup}\n size='lg'\n >\n {dataLoaded &&\n <StudentResponseList\n interactive={interactive.data}\n studentResults={studentResults}\n markedAnswers={markedAnswers}\n addMarkedAnswers={addMarkedAnswers}\n submitMarkedAnswers={submitMarkedAnswers}\n imageCdnUrl={config.data.imageCdnUrl}\n selectedInteractionId={props.interactionId}\n onClickClose={props.closePopup}\n anonymiseUsers={anonymiseUsers}\n reportsStyling={props.reportsStyling}\n isDemo\n />\n }\n </Popup>\n );\n}"],"names":["getPhrase","LanguageService","StudentResponseListFooter","props","numMarkedAnswers","Object","keys","markedAnswers","length","className","showSubmitButtonSpinner","onClick","onClickClose","interactionsToMark","isDemo","Tooltip","id","title","spanHack","spanHackClassName","disabled","SpinnerButton","variant","onClickSubmit","showSpinner","StudentResponseListHeader","summary","unanswered","awaitingMarking","Math","round","percentCorrect","StudentResponseList","ref","scrolled","setScrolled","setShowSpinner","selectedInteractionRef","current","requestAnimationFrame","scrollIntoView","behavior","block","interactive","studentResults","interactions","questionsToMark","filter","i","InteractiveCorrectnessHelper","InteractionCorrectness","getInteractionsToMark","submitMarkedAnswers","map","interaction","idx","isSelected","toString","selectedInteractionId","markingRequired","some","q","anonymisedUserName","user","anonymiseUsers","key","InteractionLabel","iconClassName","reportsStyling","InteractionResponse","markedStatus","markInteraction","addMarkedAnswers","imageCdnUrl","showFeedback","responseComponentClass","InteractionResponseItem","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","internalServerError","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","InsightsDemoRequests","url","normalize","interactiveMetadata","interactiveResults","videoViews","users","individualHeatmap","aggregateHeatmap","generateCacheKey","flightObjs","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","forEach","useLockContentWidth","InteractiveStudentResultsDemoView","results","config","data","closePopup","students","find","s","userId","sessionId","popupTitle","studentName","dataLoaded","showLoadingSpinner","size","interactionId"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[289],{34079:(e,t,n)=>{n.d(t,{O:()=>s});var r=n(32735),a=n(23481),i=n(40782),o=n(36532),l=a.T.encloseNamespace("interactives.pendingIndicator");function c(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 s(e){var t=e.title,n=e.showLabel,a=e.tooltipClassName,s=e.showIndicator,u=void 0===s||s,d=function(){return r.createElement("div",{className:c(e)},!!n&&r.createElement("em",null,l("pending")),!!u&&r.createElement(i.O,null))};return t?r.createElement(o.u,{title:t,spanHack:!0,spanHackClassName:a||"h-100 w-100 d-flex align-items-center"},r.createElement(d,null)):r.createElement(d,null)}},97364:(e,t,n)=>{n.d(t,{C:()=>i,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 i(e,t){return"marking_required"===e&&!t.awaitingMarking||"helping_hand"===e&&t.percentCorrect>=r.T.HIGH||"not_completed"===e&&!t.unanswered}},40782:(e,t,n)=>{n.d(t,{I:()=>r,O:()=>c});var r,a=n(32735),i=n(2606),o=n(362);function l(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,i.pu)(e.size),className:o.Z.backgroundCircle}),!(0,i.zR)(e.percentage)&&a.createElement("circle",{ref:t,r:(0,i.pu)(e.size),className:(0,i.V4)(e.percentage,e.scoreThresholds)}))}function c(e){var t,n=(0,i.Ki)(e.percentage),c=e.size||(e.layout===r.LabelInside?i.Mk.Large:i.Mk.Small),s=e.customLabel||(0,i.DV)(n);return e.layout===r.LabelOnly?a.createElement("span",{className:(0,i.IA)(n)},s):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"},s),a.createElement("div",{className:(0,i.tw)(c,n)},a.createElement(l,{percentage:n,size:c,scoreThresholds:e.scoreThresholds}),e.layout===r.LabelInside&&a.createElement("span",{className:o.Z.centredPercentageText},s)))}!function(e){e.CircleOnly="circle_only",e.LabelOnly="label_only",e.LabelBefore="label_before",e.LabelInside="label_inside"}(r||(r={})),c.defaultProps={layout:r.CircleOnly}},2606:(e,t,n)=>{n.d(t,{DV:()=>p,IA:()=>f,Ki:()=>g,Mk:()=>l,V4:()=>m,pu:()=>d,tw:()=>v,zR:()=>y});var r=n(94892),a=n(362);function i(e){return i="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},i(e)}function o(e,t,n){return(t=function(e){var t=function(e){if("object"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=i(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==i(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var l,c=.2,s=.36;!function(e){e.Small="small",e.Large="large",e.ExtraSmall="extraSmall"}(l||(l={}));var u=o(o(o({},l.ExtraSmall,{size:2}),l.Small,{size:2}),l.Large,{size:5.8});function d(e){var t=u[e].size,n=e===l.Large?s:c;return"".concat(t/2-2*n,"rem")}function m(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 f(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 v(e,t){var n="d-inline-block ".concat(a.Z.circleContainer);return e===l.Large&&(n+=" ".concat(a.Z.lgCircleContainer)),e===l.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}},6748:(e,t,n)=>{n.d(t,{i:()=>O});var r=n(32735),a=n(42648),i=n(35509),o=n(91967),l=n(15611),c=n(17808),s=n(1287),u=n(83914),d=n(90281),m={opacity:"0.8",cursor:"grabbing"},f=n(35223);function v(e){return function(e){if(Array.isArray(e))return p(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||g(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 g(e,t){if(e){if("string"==typeof e)return p(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?p(e,t):void 0}}function p(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function y(e){var t,n,r,a;return{canScrollLeft:(null===(t=e.current)||void 0===t?void 0:t.scrollLeft)>0,canScrollRight:(null===(n=e.current)||void 0===n?void 0:n.scrollLeft)+1<(null===(r=e.current)||void 0===r?void 0:r.scrollWidth)-(null===(a=e.current)||void 0===a?void 0:a.clientWidth)}}const b={sortIndicator:"gFhu0",scrollContainer:"sWUp9",scrollbarTrack:"Vn2qM"};function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var S=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};function E(e){var t,n;return e.column.canSort?r.createElement("span",{className:"".concat(b.sortIndicator,"\n ").concat(e.column.isSorted?"":"text-secondary","\n ").concat(null!==(n=null===(t=e.theme)||void 0===t?void 0:t.sortIndicator)&&void 0!==n?n:"")},r.createElement(u.x,{svgName:e.column.isSortedDesc||!e.column.isSorted?f.vn.ArrowRight:f.vn.ArrowLeft,size:u.S.Small})):r.createElement(r.Fragment,null)}function w(e){var t,n,a,u,d,f,g,p,y={columns:e.columns,data:e.data,disableSortBy:!e.enableSort,manualSortBy:e.manualSort,autoResetHiddenColumns:e.autoResetHiddenColumns,autoResetSortBy:e.autoResetSortBy,initialState:{sortBy:e.initialSortBy||[]}};e.initialSelectedRowIds&&(y.initialState={selectedRowIds:(g=e.initialSelectedRowIds,p={},g.forEach(function(e){return p[e]=!0}),p)}),e.getRowId&&(y.getRowId=e.getRowId);var b,S=i.useTable.apply(void 0,[y].concat((b=function(e){var t=[i.useSortBy,i.useRowSelect,"flex"===e.layout?i.useFlexLayout:i.useBlockLayout];return e.allowFiltering&&(t=[].concat(v(t),[i.useFilters])),e.allowGlobalFiltering&&(t=[].concat(v(t),[i.useGlobalFilter])),t}(Object.assign({},e)),function(e){if(Array.isArray(e))return h(e)}(b)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(b)||function(e,t){if(e){if("string"==typeof e)return h(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?h(e,t):void 0}}(b)||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.")}()))),w=S.getTableProps,O=S.getTableBodyProps,I=S.headerGroups,k=S.rows,C=S.prepareRow,j=S.toggleAllRowsSelected,R=S.setGlobalFilter,A=S.setHiddenColumns,N=S.state.sortBy;function L(){return!k.length&&e.emptyState?e.emptyState:k.map(function(t){C(t);var n=function(t){var n,r,a,i,l,c=o.q.isFunction(null===(n=e.theme)||void 0===n?void 0:n.row)?e.theme.row(t):null!==(a=null===(r=e.theme)||void 0===r?void 0:r.row)&&void 0!==a?a:"";return t.isSelected&&(null===(i=e.theme)||void 0===i?void 0:i.selectedRow)&&(c+=" ".concat(null===(l=e.theme)||void 0===l?void 0:l.selectedRow)),e.onSelectRow&&(c+=" cursor-pointer"),e.enableSortableRows&&(c+=" cursor-grab"),c}(t),a=!!e.getRowAppLink&&e.getRowAppLink(t);function i(){e.onSelectRow&&(e.allowSelectMultipleRows||j(!1),e.onSelectRow(t),t.toggleRowSelected(!0))}function c(e,o){var c=function(e,t){return"dragAttributes"in e&&"dragListeners"in e?Object.assign(Object.assign(Object.assign({},e.dragAttributes),e.dragListeners),{"aria-roledescription":"Sortable row",ref:t}):{}}(e,o);return a?r.createElement("div",{role:"row",key:t.id},r.createElement(l.F,Object.assign({},e,c,{className:n,appLink:a}),x(t))):r.createElement("div",Object.assign({},e,c,{key:t.id,role:"row",className:n,onClick:i}),x(t))}var u=t.getRowProps();return e.enableSortableRows?r.createElement(s.W,{id:t.original.id,key:t.id,childProps:u,childComponent:r.forwardRef(function(e,t){return c(e,t)})}):c(u)})}function x(t){return t.cells.map(function(n){var a=function(t,n){var r,a,i="";return"function"==typeof(null===(r=e.theme)||void 0===r?void 0:r.cell)&&(i=e.theme.cell(t,n)),"string"==typeof(null===(a=e.theme)||void 0===a?void 0:a.cell)&&(i=e.theme.cell),e.onSelectCell&&(i+=" cursor-pointer"),i}(t,n);return r.createElement("div",Object.assign({key:n.column.id},n.getCellProps(),{className:a,onClick:function(){e.onSelectCell&&e.onSelectCell(n)}}),n.render("Cell"))})}return r.useEffect(function(){e.onSort&&e.onSort(N)},[N]),r.useEffect(function(){e.globalFilter&&R(e.globalFilter)},[e.globalFilter]),r.useEffect(function(){e.hiddenColumns&&A(e.hiddenColumns)},[e.hiddenColumns&&e.hiddenColumns.length]),r.createElement("div",Object.assign({},w(),{className:null!==(n=null===(t=e.theme)||void 0===t?void 0:t.table)&&void 0!==n?n:""}),r.createElement("div",{className:null!==(u=null===(a=e.theme)||void 0===a?void 0:a.header)&&void 0!==u?u:""},I.map(function(t){var n,a;return r.createElement("div",Object.assign({},t.getHeaderGroupProps(),{className:null!==(a=null===(n=e.theme)||void 0===n?void 0:n.headerRow)&&void 0!==a?a:""}),t.headers.map(function(t){var n,a;return r.createElement("div",Object.assign({},t.getHeaderProps(t.getSortByToggleProps()),{className:null!==(a=null===(n=e.theme)||void 0===n?void 0:n.headerCell)&&void 0!==a?a:""}),t.render("Header",{renderSortIndicator:function(){return r.createElement(E,{column:t,theme:e.theme})}}),!t.hideSortIndicator&&r.createElement(E,{column:t,theme:e.theme}))}))})),r.createElement("div",Object.assign({},O(),{className:null!==(f=null===(d=e.theme)||void 0===d?void 0:d.body)&&void 0!==f?f:""}),e.enableSortableRows?r.createElement(c.Q,{ids:k.map(function(e){return e.original.id}),getDragOverlay:function(t){var n,a,i=k.findIndex(function(e){return e.original.id===t}),o=k[i];return r.createElement("div",Object.assign({},e,{className:(n=e.theme,a="g-0 ",n&&(a+=n.row),a),style:m}),x(o))},onSortEnd:e.onSortingRowsEnd},L()):L()))}function O(e){var t=e.enableSlider,n=e.scrollIncrement,i=e.scrollable,l=S(e,["enableSlider","scrollIncrement","scrollable"]),c=function(){var e,t,n=r.useRef(null),a=(e=r.useState(y(n)),t=2,function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,o,l=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=i.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw a}}return l}}(e,t)||g(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),i=a[0],l=a[1],c=o.q.throttle(function(){l(y(n))},200),s=r.useCallback(function(e){var t;n.current&&(null===(t=n.current)||void 0===t||t.removeEventListener("scroll",c)),e&&(l(y(n)),e.addEventListener("scroll",c)),n.current=e},[]);return r.useEffect(function(){(null==n?void 0:n.current)&&l(y(n))},[n]),{ref:s,scrollState:i,scroll:function(e){var t;null===(t=n.current)||void 0===t||t.scrollBy({left:e,top:0,behavior:"smooth"})}}}(),s=c.ref,u=c.scrollState,m=c.scroll;if(i)return r.createElement(a.$B,{renderTrackHorizontal:function(){return r.createElement("div",{className:b.scrollbarTrack})},autoHeightMax:1e4,autoHeight:!0},r.createElement(w,Object.assign({},l)));if(!t)return r.createElement(w,Object.assign({},l));function f(e){m(n*("right"===e?1:-1))}return r.createElement("div",{className:"mx-n4 overflow-x-hidden overflow-y-hidden"},r.createElement("div",{className:"px-4"},r.createElement("div",{className:"position-relative"},r.createElement(d.W,{direction:d.f.Left,onClick:function(){return f("left")},hide:!u.canScrollLeft}),r.createElement("div",{className:"".concat(b.scrollContainer," ").concat(e.scrollContainerClassName),ref:s},r.createElement(w,Object.assign({},l))),r.createElement(d.W,{direction:d.f.Right,onClick:function(){return f("right")},hide:!u.canScrollRight}))))}O.defaultProps={scrollIncrement:250,scrollable:!1,layout:"flex"}},54405:(e,t,n)=>{n.d(t,{X:()=>r});var r={interactive:function(){return{url:"/mocks/insights/interactive.json",key:"demo:interactive",normalize:!1}},interactiveMetadata:function(){return{url:"/mocks/insights/interactive-metadata.json",key:"demo:interactive:metadata",normalize:!1}},interactiveResults:function(){return{url:"/mocks/insights/interactive-results.json",key:"demo:interactive:results",normalize:!1}},videoViews:function(){return{url:"/mocks/insights/video-views.json",key:"demo:video:views",normalize:!1}},users:function(){return{url:"/mocks/insights/users.json",key:"demo:users",normalize:!1}},individualHeatmap:function(){return{url:"/mocks/insights/individual-heatmap.json",key:"demo:individual:heatmap",normalize:!1}},aggregateHeatmap:function(){return{url:"/mocks/insights/aggregate-heatmap.json",key:"demo:aggregate:heatmap",normalize:!1}}}},9566:(e,t,n)=>{n.d(t,{$Z:()=>g,G6:()=>m,GJ:()=>v,VE:()=>b,_w:()=>f,po:()=>y,vJ:()=>p});var r=n(23481),a=n(110),i=n(33518),o=n(2510),l=n(4594),c=n(35223),s=n(14070),u=n(97291),d=r.T.encloseNamespace("myShares.demoInsights"),m={type:o.y.Link,privacy:i.e.JustMySchool,objectId:"0",objectTypeId:l.E.Interactive,viewCount:28,accessCount:15,dateCreated:(new Date).toISOString(),dateShared:(new Date).toISOString(),expireDate:null,link:{shortenedEmbedUrl:"",shortenedUrl:""},shareId:"0",ownerCustomerId:0,ownerId:0,recipients:[],options:{preventScrubbing:!1,immediateFeedback:!1}},f=Object.assign(Object.assign({},m),{type:o.y.Open,expireDate:a.O.add(new Date(m.dateCreated),30,"days").toISOString(),privacy:i.e.PinCode}),v={share:m,sharedObject:null,shareRecipients:null,dateShared:a.O.subtract(new Date,7,"days").toISOString()},g=Object.assign(Object.assign({},v),{share:f}),p={application:u.O.MY_SHARES,action:s.e.MyShares.INTERACTIVE_OVERVIEW_DEMO},y={application:u.O.MY_SHARES,action:s.e.MyShares.INTERACTIVE_OVERVIEW_OPEN_CLASSROOM_DEMO},b={svgName:c.vn.Analytics,label:d("demoInsights"),appLink:p,group:"insights",className:"btn btn-outline-dark"}},71519:(e,t,n)=>{n.r(t),n.d(t,{InteractiveInsightsQuestionsDemoView:()=>S});var r=n(32735),a=n(23481),i=n(2948),o=n(20354),l=n(26025),c=n(2510),s=n(38143),u=n(39151),d=n(54405),m=n(93322),f=n(79612),v=n(74049),g=n(48705),p=n(9566),y=n(10447);function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var h=a.T.encloseNamespace("shared.interactiveInsightsQuestionsView");function S(e){var t,n,a,S,E,w=(S=(0,i.D)(s.g.ANONYMISE_USERS),E=1,function(e){if(Array.isArray(e))return e}(S)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,o,l=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=i.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw a}}return l}}(S,E)||function(e,t){if(e){if("string"==typeof e)return b(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?b(e,t):void 0}}(S,E)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0];(0,m.F)();var O=o.a.useBasicFetch(u.L.config()),I=o.a.useBasicFetch(d.X.interactiveMetadata()),k=o.a.useBasicFetch(d.X.interactive()),C=l.B.getAudienceAppLinkParams(),j=l.B.getDateRangeAppLinkParams(),R=o.a.useBasicFetch(d.X.interactiveResults());(0,f.M)({title:I.data?h("pageTitle",{video:null===(t=I.data)||void 0===t?void 0:t.name}):null});var A=k.data&&I.data&&!!R.data,N=Object.assign(Object.assign({},C),j),L=e.type===c.y.Open?p._w:p.G6;return r.createElement("div",{className:"px-3"},r.createElement(v.j,{tabs:(0,y.aq)(null===(n=I.data)||void 0===n?void 0:n.id,"questions",N,e.type),video:I.data,dateRangeAppLinkParams:j,share:Object.assign(Object.assign({},L),{objectId:null===(a=I.data)||void 0===a?void 0:a.id}),yearGroups:[],markingRequired:e.type!==c.y.Open,isDemo:!0,hasData:!0}),r.createElement(g.x,{interactive:k.data,interactiveMetadata:I.data,interactionId:e.interactionId,config:O.data,sortBy:e.sortBy,isFetching:R.isFetching||k.isFetching,anonymiseUsers:w,results:R.data,hasDataLoaded:A,isDemo:!0}))}},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=289-669c0c8222-lite.chunk.js.map