@clickview/lite 0.57.2-rc.0 → 0.57.2-rc.2

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 (100) hide show
  1. package/dist/bundles.json +2 -2
  2. package/dist/css/{3918-lite-9bd35b2c4c.chunk.css → 3918-lite-88ef54ffc6.chunk.css} +3 -1
  3. package/dist/css/{1057-lite-04173a371f.chunk.css → 8849-lite-1ad0b22428.chunk.css} +2 -1
  4. package/dist/css/{lite-app-5335e8e07a.css → lite-app-560655620c.css} +1 -1
  5. package/dist/languages/en.json +1 -1
  6. package/dist/scripts/1734-f5ffd39591-lite.chunk.js +2 -0
  7. package/dist/scripts/1734-f5ffd39591-lite.chunk.js.map +1 -0
  8. package/dist/scripts/2506-aee0b1f275-lite.chunk.js +2 -0
  9. package/dist/scripts/2506-aee0b1f275-lite.chunk.js.map +1 -0
  10. package/dist/scripts/{2564-cd82320188-lite.chunk.js → 2564-98ba0d782a-lite.chunk.js} +3 -3
  11. package/dist/scripts/{2564-cd82320188-lite.chunk.js.map → 2564-98ba0d782a-lite.chunk.js.map} +1 -1
  12. package/dist/scripts/2615-e9b2938c18-lite.chunk.js +3 -0
  13. package/dist/scripts/2615-e9b2938c18-lite.chunk.js.map +1 -0
  14. package/dist/scripts/2788-86687fd69d-lite.chunk.js +2 -0
  15. package/dist/scripts/2788-86687fd69d-lite.chunk.js.map +1 -0
  16. package/dist/scripts/2820-b3d1688da0-lite.chunk.js +2 -0
  17. package/dist/scripts/2820-b3d1688da0-lite.chunk.js.map +1 -0
  18. package/dist/scripts/2978-b7bcc3eac4-lite.chunk.js +2 -0
  19. package/dist/scripts/2978-b7bcc3eac4-lite.chunk.js.map +1 -0
  20. package/dist/scripts/3391-5e26ca5ece-lite.chunk.js +2 -0
  21. package/dist/scripts/3391-5e26ca5ece-lite.chunk.js.map +1 -0
  22. package/dist/scripts/{3667-f9f546136c-lite.chunk.js → 3667-149e98454c-lite.chunk.js} +3 -3
  23. package/dist/scripts/{3667-f9f546136c-lite.chunk.js.map → 3667-149e98454c-lite.chunk.js.map} +1 -1
  24. package/dist/scripts/3918-43b95cb315-lite.chunk.js +2 -0
  25. package/dist/scripts/3918-43b95cb315-lite.chunk.js.map +1 -0
  26. package/dist/scripts/4113-d6411052c4-lite.chunk.js +2 -0
  27. package/dist/scripts/4113-d6411052c4-lite.chunk.js.map +1 -0
  28. package/dist/scripts/4137-bef0be4a57-lite.chunk.js +3 -0
  29. package/dist/scripts/4137-bef0be4a57-lite.chunk.js.map +1 -0
  30. package/dist/scripts/4266-42463e0c33-lite.chunk.js +3 -0
  31. package/dist/scripts/4266-42463e0c33-lite.chunk.js.map +1 -0
  32. package/dist/scripts/5817-84b8e83c19-lite.chunk.js +3 -0
  33. package/dist/scripts/5817-84b8e83c19-lite.chunk.js.map +1 -0
  34. package/dist/scripts/{6433-ff27a3c867-lite.chunk.js → 6433-ad3992c23a-lite.chunk.js} +2 -2
  35. package/dist/scripts/{6433-ff27a3c867-lite.chunk.js.map → 6433-ad3992c23a-lite.chunk.js.map} +1 -1
  36. package/dist/scripts/7434-34137ad94a-lite.chunk.js +2 -0
  37. package/dist/scripts/7434-34137ad94a-lite.chunk.js.map +1 -0
  38. package/dist/scripts/{7556-79099a07fc-lite.chunk.js → 7556-69f8cb3b20-lite.chunk.js} +3 -3
  39. package/dist/scripts/7556-69f8cb3b20-lite.chunk.js.map +1 -0
  40. package/dist/scripts/{8095-777a5c5ddf-lite.chunk.js → 8095-afb976fac0-lite.chunk.js} +2 -2
  41. package/dist/scripts/8095-afb976fac0-lite.chunk.js.map +1 -0
  42. package/dist/scripts/839-f8478d27f8-lite.chunk.js +2 -0
  43. package/dist/scripts/839-f8478d27f8-lite.chunk.js.map +1 -0
  44. package/dist/scripts/8489-7779fd40b3-lite.chunk.js +3 -0
  45. package/dist/scripts/8489-7779fd40b3-lite.chunk.js.map +1 -0
  46. package/dist/scripts/8849-020bfd8cdd-lite.chunk.js +2 -0
  47. package/dist/scripts/8849-020bfd8cdd-lite.chunk.js.map +1 -0
  48. package/dist/scripts/bundle-fb8200eefd.min.js +3 -0
  49. package/dist/scripts/bundle-fb8200eefd.min.js.map +1 -0
  50. package/package.json +1 -1
  51. package/dist/scripts/1057-3c48d4553a-lite.chunk.js +0 -2
  52. package/dist/scripts/1057-3c48d4553a-lite.chunk.js.map +0 -1
  53. package/dist/scripts/1683-57c0175d4e-lite.chunk.js +0 -2
  54. package/dist/scripts/1683-57c0175d4e-lite.chunk.js.map +0 -1
  55. package/dist/scripts/1734-bbca52585c-lite.chunk.js +0 -2
  56. package/dist/scripts/1734-bbca52585c-lite.chunk.js.map +0 -1
  57. package/dist/scripts/232-278263e5f8-lite.chunk.js +0 -3
  58. package/dist/scripts/232-278263e5f8-lite.chunk.js.map +0 -1
  59. package/dist/scripts/2615-90d4cdd835-lite.chunk.js +0 -3
  60. package/dist/scripts/2615-90d4cdd835-lite.chunk.js.map +0 -1
  61. package/dist/scripts/2788-013bbba554-lite.chunk.js +0 -2
  62. package/dist/scripts/2788-013bbba554-lite.chunk.js.map +0 -1
  63. package/dist/scripts/312-2458059ebb-lite.chunk.js +0 -2
  64. package/dist/scripts/312-2458059ebb-lite.chunk.js.map +0 -1
  65. package/dist/scripts/3918-2855f0da2a-lite.chunk.js +0 -2
  66. package/dist/scripts/3918-2855f0da2a-lite.chunk.js.map +0 -1
  67. package/dist/scripts/4137-f0ac17da1f-lite.chunk.js +0 -3
  68. package/dist/scripts/4137-f0ac17da1f-lite.chunk.js.map +0 -1
  69. package/dist/scripts/4654-6fedfb863f-lite.chunk.js +0 -2
  70. package/dist/scripts/4654-6fedfb863f-lite.chunk.js.map +0 -1
  71. package/dist/scripts/5817-900efca702-lite.chunk.js +0 -3
  72. package/dist/scripts/5817-900efca702-lite.chunk.js.map +0 -1
  73. package/dist/scripts/7237-86c18f2701-lite.chunk.js +0 -2
  74. package/dist/scripts/7237-86c18f2701-lite.chunk.js.map +0 -1
  75. package/dist/scripts/7434-366d4ae5e0-lite.chunk.js +0 -2
  76. package/dist/scripts/7434-366d4ae5e0-lite.chunk.js.map +0 -1
  77. package/dist/scripts/7556-79099a07fc-lite.chunk.js.map +0 -1
  78. package/dist/scripts/8095-777a5c5ddf-lite.chunk.js.map +0 -1
  79. package/dist/scripts/839-889090dc50-lite.chunk.js +0 -2
  80. package/dist/scripts/839-889090dc50-lite.chunk.js.map +0 -1
  81. package/dist/scripts/8489-6e8c4dd60f-lite.chunk.js +0 -3
  82. package/dist/scripts/8489-6e8c4dd60f-lite.chunk.js.map +0 -1
  83. package/dist/scripts/897-399a877281-lite.chunk.js +0 -2
  84. package/dist/scripts/897-399a877281-lite.chunk.js.map +0 -1
  85. package/dist/scripts/9201-899c885914-lite.chunk.js +0 -2
  86. package/dist/scripts/9201-899c885914-lite.chunk.js.map +0 -1
  87. package/dist/scripts/bundle-4b58e56927.min.js +0 -3
  88. package/dist/scripts/bundle-4b58e56927.min.js.map +0 -1
  89. /package/dist/css/{1683-lite-bdd5b6edf8.chunk.css → 2506-lite-bdd5b6edf8.chunk.css} +0 -0
  90. /package/dist/css/{7237-lite-a8e87f096f.chunk.css → 2820-lite-a8e87f096f.chunk.css} +0 -0
  91. /package/dist/scripts/{2564-cd82320188-lite.chunk.js.LICENSE.txt → 2564-98ba0d782a-lite.chunk.js.LICENSE.txt} +0 -0
  92. /package/dist/scripts/{2615-90d4cdd835-lite.chunk.js.LICENSE.txt → 2615-e9b2938c18-lite.chunk.js.LICENSE.txt} +0 -0
  93. /package/dist/scripts/{3667-f9f546136c-lite.chunk.js.LICENSE.txt → 3667-149e98454c-lite.chunk.js.LICENSE.txt} +0 -0
  94. /package/dist/scripts/{4137-f0ac17da1f-lite.chunk.js.LICENSE.txt → 4137-bef0be4a57-lite.chunk.js.LICENSE.txt} +0 -0
  95. /package/dist/scripts/{232-278263e5f8-lite.chunk.js.LICENSE.txt → 4266-42463e0c33-lite.chunk.js.LICENSE.txt} +0 -0
  96. /package/dist/scripts/{5817-900efca702-lite.chunk.js.LICENSE.txt → 5817-84b8e83c19-lite.chunk.js.LICENSE.txt} +0 -0
  97. /package/dist/scripts/{6433-ff27a3c867-lite.chunk.js.LICENSE.txt → 6433-ad3992c23a-lite.chunk.js.LICENSE.txt} +0 -0
  98. /package/dist/scripts/{7556-79099a07fc-lite.chunk.js.LICENSE.txt → 7556-69f8cb3b20-lite.chunk.js.LICENSE.txt} +0 -0
  99. /package/dist/scripts/{8489-6e8c4dd60f-lite.chunk.js.LICENSE.txt → 8489-7779fd40b3-lite.chunk.js.LICENSE.txt} +0 -0
  100. /package/dist/scripts/{bundle-4b58e56927.min.js.LICENSE.txt → bundle-fb8200eefd.min.js.LICENSE.txt} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clickview/lite",
3
- "version": "0.57.2-rc.0",
3
+ "version": "0.57.2-rc.2",
4
4
  "description": "ClickView Lite",
5
5
  "main": "dist/scripts/bundle.js",
6
6
  "types": "dist/projects/lite/src/index.d.ts",
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1057],{53353:(e,t,n)=>{n.d(t,{c:()=>h,l:()=>f});var a=n(32735),r=n(232),s=n.n(r),i=n(8604),c=n(83345);const l={heatMap:"epapa",legend:"uhH4p"};function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var u="shared.engagementHeatMap",m="#f1f1f1",d=s().scale(["#daf07d","#08bd1a"]),g=[0,.01,.25,.5,.75,1];function p(e,t){return e?d(e/t).hex():m}function v(e,t){for(var n=[],a=0;a<e.length;a++){var r=a>0&&e[a-1],s=e[a],i=a<e.length-1&&e[a+1];s===r&&s===i||n.push("".concat(p(s,t)," ").concat(100/e.length*a,"%"))}return"linear-gradient(to right, ".concat(n.join(","),")")}function f(){var e=Math.max.apply(Math,g),t=100/g.length;return a.createElement("div",{className:"d-flex justify-content-between w-100"},a.createElement(c.x,{namespace:u,phrase:"less"}),a.createElement("div",{className:"d-flex mx-1 flex-grow-1 ".concat(l.legend)},g.map((function(n,r){return a.createElement("div",{key:r,style:{width:"".concat(t,"%"),backgroundColor:p(n,e)}})}))),a.createElement(c.x,{namespace:u,phrase:"more"}))}function h(e){var t,n,r,s=(0,i.O)(e.engagement),c=null!==(t=e.max)&&void 0!==t?t:Math.max.apply(Math,function(e){if(Array.isArray(e))return o(e)}(r=s)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(r)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(e,t):void 0}}(r)||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.")}());return a.createElement("div",{className:"border rounded ".concat(l.heatMap," ").concat(null!==(n=e.className)&&void 0!==n?n:""),style:{background:v(s,c)}})}},25216:(e,t,n)=>{n.d(t,{L:()=>i});var a=n(32735),r=n(83914);const s={icon:"sAmpy",count:"faDs4"};function i(e){return a.createElement("section",{className:"d-flex flex-column border border-light rounded p-3 h-100"},a.createElement("div",{className:"d-flex align-items-center mb-2"},a.createElement("div",{className:"".concat(s.icon," ").concat(e.svgClassName," rounded-circle d-flex align-items-center justify-content-center")},a.createElement(r.x,{svgName:e.svgName})),a.createElement("div",{className:"d-flex flex-column ms-2"},a.createElement("h2",{className:"h6 mb-0"},e.title),e.subtitle&&a.createElement("p",{className:"text-secondary font-size-sm mb-0"},e.subtitle)),"number"==typeof e.count&&a.createElement("div",{className:"".concat(s.count," d-flex justify-content-center align-items-center bg-light rounded-circle ms-auto")},e.count)),e.children)}},461:(e,t,n)=>{n.d(t,{y:()=>o});var a=n(32735),r=n(77640),s=n(36848),i=n(40782);const c={avatar:"uMuZt",image:"WdKiU"};var l=3;function o(e){return a.createElement(a.Fragment,null,e.students.length?a.createElement("ul",{className:"list-unstyled mb-2"},e.students.slice(0,l).map((function(t){return a.createElement("li",{key:t.id,className:"d-flex align-items-center mb-2"},a.createElement(r.t,{user:t,imageCdnUrl:e.imageCdnUrl,avatarClassName:c.avatar,detailsClassName:"ms-2",showDisplayName:!0,showSubText:!1,anonymiseUsers:e.anonymiseUsers}),a.createElement("div",{className:"d-flex align-items-center ms-auto"},a.createElement("span",{className:"me-1"},void 0===t.percentage?"- ":Math.round(100*t.percentage),"%"),a.createElement(i.O,{percentage:t.percentage})))}))):a.createElement("div",{className:"text-center"},a.createElement("img",{className:"".concat(c.image," mb-2"),src:e.imageUrl}),a.createElement("p",{className:"text-secondary mb-0"},e.description)),!!e.students.length&&a.createElement(s.F,{appLink:e.appLink,className:"text-info mt-auto"},e.appLinkText))}},94652:(e,t,n)=>{n.d(t,{b:()=>g});var a=n(32735),r=n(23481),s=n(53353),i=n(25216),c=n(36848),l=n(83345),o=n(35223);const u={heatMap:"Rfr9N",heatMapTimepointIndicator:"s6JbA",heatMapTimepointIndicatorVisible:"mgjWX"};var m="shared.insightHeatmap",d=r.T.encloseNamespace(m);function g(e){var t=e.engagement.engagementRate>0?Math.round(100*e.engagement.engagementRate):null;return a.createElement(i.L,{title:d("title"),svgName:o.vn.Timer,svgClassName:"bg-light-green text-green"},a.createElement("div",{className:"mb-2"},a.createElement("p",{className:"mb-0"},t?a.createElement(l.x,{namespace:m,phrase:"everyoneWatched",options:{engagementRate:t}}):a.createElement(l.x,{namespace:m,phrase:"notWatched"})),t&&a.createElement(c.F,{appLink:e.heatmapAppLink,className:"text-info"},a.createElement(l.x,{namespace:m,phrase:"viewHeatmap"}))),a.createElement("div",{className:"mb-2"},a.createElement(s.c,{engagement:e.engagement,className:u.heatMap})),a.createElement("p",{className:"h3 text-center mb-2"},t||"--","%"),a.createElement("p",{className:"text-center mb-0 font-size-sm"},a.createElement(l.x,{namespace:m,phrase:"amountWatched"})))}},71553:(e,t,n)=>{n.d(t,{I:()=>i});var a=n(99940),r=n(62875);function s(e,t){return{currentUserId:e.id,currentCustomerId:e.customerId,dateRange:{start:t.start,end:t.end},userIds:t.userId,classroomsAndGroups:t.groupId}}var i={interactiveResultSet:function(e,t,n,i,c,l,o){return{url:"/api/domain/v2/analytics/interactives/".concat(e,"/metadata/").concat(t),key:(0,r.H)("interactive:result:set:".concat(e,":").concat(t),i),data:s(n,i),type:a.k.POST,normalize:!1,success:c,error:l,always:o}},mark:function(e,t,n,r,s,i,c){return{url:"/api/domain/v1/analytics/answers/".concat(n),key:"mark:answer:".concat(n,":").concat(r.resultId),type:a.k.PUT,data:r,normalize:!1,invalidationKeys:"interactive:result:set:".concat(e,":").concat(t),success:s,error:i,always:c}},pendingReviews:function(e){return{url:"/api/domain/v1/analytics/interactives/pending-reviews/summary",key:"interactives:pending:reviews",type:a.k.POST,data:e}},interactiveResultsReport:function(e){return{url:"{gateway}/v2/analytics/interactives/report",key:"interactive:results:report",data:e,type:a.k.POST,normalize:!1}}}},41196:(e,t,n)=>{n.d(t,{W:()=>c});var a=n(20354),r=n(71553),s=n(20768),i=n(31949);function c(e,t){var n,c=a.a.useBasicFetch(i.N.currentUser()),l=a.a.useBasicFetch(!!e&&s.b.interactiveMetadata(e)),o=a.a.useBasicFetch(!!(null===(n=l.data)||void 0===n?void 0:n.interactiveId)&&s.b.interactive(l.data.interactiveId)),u=!!c.data&&!!o.data&&!!t;return a.a.useBasicFetch(u&&r.I.interactiveResultSet(l.data.interactiveId,l.data.id,c.data,t))}},8604:(e,t,n)=>{function a(e){return new Array(Math.ceil(e.videoDuration)).fill(null).map((function(t,n){return e.heatMap[n]||0}))}n.d(t,{O:()=>a})},39157:(e,t,n)=>{n.d(t,{HI:()=>d,R6:()=>o,Rt:()=>p,UU:()=>m,Zs:()=>u,nq:()=>g});var a=n(75896),r=n(94892),s=n(28972),i=n(8246),c=n(83140),l=n(80845);function o(e,t){var n={markingRequired:[],lowScore:[],highScore:[],completed:[],notCompleted:[]},s=(0,l.Q)(e).length;t.students.forEach((function(t){var i=Object.assign(Object.assign({},t),{summary:p(e,t)});i.summary.awaitingMarking?n.markingRequired.push(i):a.m.last(t.results).attempts.length===s?(n.completed.push(i),i.summary.percentCorrect>=r.i.HIGH&&n.highScore.push(i),i.summary.percentCorrect<r.i.MODERATE&&n.lowScore.push(i)):n.notCompleted.push(i)}));var i=a.m.sortBy(n.lowScore,(function(e){return e.summary.percentCorrect})),c=a.m.sortBy(n.highScore,(function(e){return e.summary.percentCorrect})).reverse();return Object.assign(Object.assign({},n),{lowScore:i,highScore:c})}function u(e,t){return(0,l.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,n){var a=(0,l.j_)(t),r=(0,l.f6)(e,a);return(null==r?void 0:r.answers.every((function(e){var t;return(null===(t=n[m(e)])||void 0===t?void 0:t.status)===i.N.Correct})))?i.N.Correct:(null==r?void 0:r.answers.every((function(e){var t;return(null===(t=n[m(e)])||void 0===t?void 0:t.status)===i.N.Incorrect})))?i.N.Incorrect:void 0}function g(e,t){var n=t.students.length,a=0,r=0,i=0,o=0,u=0;return t.students.forEach((function(t){var n=(0,l.j_)(t);if(n){u+=t.results.length;var m=c.A.isInteractionCorrect(e,n);m===s.w.Correct&&a++,m===s.w.UnAnswered&&i++,m===s.w.AwaitingMarking&&o++,m!==s.w.UnAnswered&&r++}})),{percentCorrect:n>0?a/n:0,correct:a,answered:r,unanswered:i,awaitingMarking:o,attempts:u}}function p(e,t){var n=(0,l.j_)(t),a=(0,l.Q)(e),r=a.length,i=0,o=0;a.forEach((function(e){var t=c.A.isInteractionCorrect(e,n);t===s.w.Correct&&i++,t===s.w.AwaitingMarking&&o++}));var u=r>0?i/r:0,m=new Set(a.map((function(e){return e.id}))),d=n.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:n.attempts.length,attempts:t.results.length,unanswered:r-d,percentCorrect:u,correct:i,awaitingMarking:o}}},77640:(e,t,n)=>{n.d(t,{t:()=>d});var a=n(32735),r=n(23481),s=n(26136),i=n(20789),c=n(76881),l=n(86613),o=n(64818),u=n(94831),m=r.T.encloseNamespace("shared.userRecipientItemMetadata");function d(e){var t;return a.createElement(a.Fragment,null,a.createElement("div",{className:"".concat(u.Z.avatarContainer," ").concat(e.avatarClassName," d-inline-block")},a.createElement(i.q,{imageUrl:null===(t=e.user.avatar)||void 0===t?void 0:t.url,imageCdnUrl:e.imageCdnUrl,initials:o.l.getInitials(e.user.name,e.user.surname)})),a.createElement("div",{className:e.detailsClassName},a.createElement("h4",{className:"font-size-normal fw-normal m-0"},e.anonymiseUsers?(0,s.B)(e.user,!0):e.showDisplayName?o.l.getDisplayName(e.user):o.l.getFullName(e.user)),e.showSubText&&a.createElement("p",{className:"text-secondary m-0"},e.getSubText?e.getSubText(e.user):function(e){var t=o.l.getUserType(e),n=o.l.getUserRole(e);if(t===c.Y.Staff)return n===l.i.Admin?m("admin"):m("staff");var a=o.l.getYearGroup(e);return(null==a?void 0:a.name)?a.name:m("student")}(e.user))))}d.defaults={showSubText:!0}},28972:(e,t,n)=>{var a;n.d(t,{w:()=>a}),function(e){e[e.Correct=0]="Correct",e[e.Incorrect=1]="Incorrect",e[e.AwaitingMarking=2]="AwaitingMarking",e[e.Answered=3]="Answered",e[e.UnAnswered=4]="UnAnswered",e[e.NotApplicable=5]="NotApplicable"}(a||(a={}))},8246:(e,t,n)=>{var a;n.d(t,{N:()=>a}),function(e){e[e.Incorrect=0]="Incorrect",e[e.Correct=1]="Correct",e[e.PendingReview=2]="PendingReview"}(a||(a={}))},17913:(e,t,n)=>{n.d(t,{u:()=>i});var a=n(97395),r=n(110),s=n(62875),i={individualEngagement:function(e,t,n,r,i,c){var l=Object.assign({objectId:e},t);return n&&(l.sharerId=n),{url:a._.urlBuilder("{gateway}/v1/analytics/heat-map",l),key:(0,s.H)("engagement:".concat(e),t,n),formatData:function(e){var t;return Object.assign(Object.assign({},e),{data:null===(t=e.data)||void 0===t?void 0:t.map((function(e){var t;return Object.assign(Object.assign({},e),{heatMap:null!==(t=e.heatMap)&&void 0!==t?t:[]})}))})},normalize:!1,success:r,error:i,always:c}},aggregateEngagement:function(e,t,n,r,i,c){var l=Object.assign({objectId:e},t);return n&&(l.sharerId=n),{url:a._.urlBuilder("{gateway}/v1/analytics/heat-map/aggregations",l),key:(0,s.H)("aggregate:engagement:".concat(e),t,n),formatData:function(e){var t;return Object.assign(Object.assign({},e),{heatMap:null!==(t=e.heatMap)&&void 0!==t?t:[]})},normalize:!1,success:r,error:i,always:c}},views:function(e,t,n,i,c,l){var o="video:views";t&&(o+=":".concat(t));var u=Object.assign(Object.assign({objectId:t},e),{timeOffset:r.O.getTimezoneOffset()});return n&&(u.sharerId=n),{url:a._.urlBuilder("{gateway}/v1/analytics/video-views",u),key:(0,s.H)(o,e,n),normalize:!1,success:i,error:c,always:l}}}},83140:(e,t,n)=>{n.d(t,{A:()=>v});var a=n(28972),r=n(8246),s=n(40424);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 c(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=i(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,"string");if("object"!=i(a))return a;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}function l(){return a.w.NotApplicable}function o(e,t){var n=e.actionableItems.filter((function(e){return e.isCorrect}));return n.every((function(e){return!t(e.id)}))?a.w.UnAnswered:n.every((function(e){var n;return e.name.trim().toLowerCase()===(null===(n=t(e.id))||void 0===n?void 0:n.trim().toLowerCase())}))?a.w.Correct:a.w.Incorrect}function u(e,t){return e.actionableItems.every((function(e){return!t(e.id)}))?a.w.UnAnswered:e.actionableItems.filter((function(e){return e.isCorrect})).every((function(e){var n,a=t(e.id);return(null==a?void 0:a.toString())===(null===(n=e.id)||void 0===n?void 0:n.toString())||a===e.name}))?a.w.Correct:a.w.Incorrect}function m(e,t){return function(n){var a=t.attempts.find((function(t){return t.id===e.id}));return null==a?void 0:a.answers.find((function(e){return e.id===n}))}}function d(e,t){var n=m(e,t);return u(e,(function(e){var t=n(e);return null==t?void 0:t.text}))}function g(e,t){return function(e,t){var n;return e.actionableItems.forEach((function(e){var s=t(e.id);n=s?s.status!==r.N.Correct?s.status!==r.N.Incorrect?a.w.AwaitingMarking:a.w.Incorrect:a.w.Correct:a.w.UnAnswered})),n}(e,m(e,t))}var p=c(c(c(c(c(c(c({},s.Z9.Annotation,l),s.Z9.Image,l),s.Z9.MissingWord,(function(e,t){var n=m(e,t);return o(e,(function(e){var t=n(e);return null==t?void 0:t.text}))})),s.Z9.MultipleChoice,d),s.Z9.ShortAnswer,g),s.Z9.TrueOrFalse,d),s.Z9.Illustration,g),v={notApplicable:l,awaitingMarking:function(){return a.w.AwaitingMarking},isMissingWordCorrect:o,isMultipleChoiceCorrect:u,isInteractionCorrect:function(e,t){return(0,p[e.typeId])(e,t)}}},80845:(e,t,n)=>{n.d(t,{Q:()=>o,Wn:()=>i,f6:()=>l,j_:()=>c});var a=n(75896),r=n(40424);function s(e){return e.typeId!==r.Z9.Annotation&&e.typeId!==r.Z9.Image}function i(e){return a.m.flatten(e.timepoints.map((function(e){return e.interactions})))}function c(e){return a.m.last(e.results)}function l(e,t){return a.m.findWhere(null==t?void 0:t.attempts,{id:e})}function o(e){return i(e).filter(s)}},62174:(e,t,n)=>{n.r(t),n.d(t,{InteractiveInsightsOverviewView:()=>ve});var a=n(32735),r=n(2948),s=n(20354),i=n(75896),c=n(23481),l=n(25216),o=n(72306),u=n.n(o),m=n(70312),d=n.n(m);const g={font:"nSTtI",chartContainer:"Otcfo"};var p=function(e){return{title:{text:null},credits:{enabled:!1},yAxis:{title:{text:null},labels:{enabled:!1},gridLineWidth:0,min:0,max:1},xAxis:{title:{text:e,style:{color:"#313543",fontSize:"12px"}},labels:{style:{color:"#313543",fontSize:"12px"}},className:g.font,lineWidth:0},legend:{enabled:!1},chart:{type:"column",backgroundColor:"transparent",height:"160px",spacingTop:20},plotOptions:{column:{dataLabels:{enabled:!1},enableMouseTracking:!1,minPointLength:8}}}};function v(e){return a.createElement("div",{className:g.chartContainer},a.createElement(d(),{highcharts:u(),options:(t=e.chartData,n=p(e.label),Object.assign(Object.assign({},n),{xAxis:Object.assign(Object.assign({},n.xAxis),{categories:t.categories}),series:t.series}))}));var t,n}var f=n(83345),h=n(35223);const y={tealChart:"lZZf0",grayChart:"wJQc4",font:"o1Xbr"};function b(e){return b="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},b(e)}var E="shared.insightAverageAttempts",w=c.T.encloseNamespace(E);function N(e){var t,n,r=e.students.reduce((function(e,t){return t.summary.attempts>e?t.summary.attempts:e}),0),s=(t=function(){var t={};return e.students.forEach((function(e){var n,a,r,s=e.summary.attempts.toString();s in t||Object.assign(t,(n={},r=0,(a=function(e){var t=function(e,t){if("object"!=b(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,"string");if("object"!=b(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==b(t)?t:t+""}(a=s))in n?Object.defineProperty(n,a,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[a]=r,n)),t[s]++})),Object.keys(t).length?t:{0:0}}(),n=0===t[0],{categories:Object.keys(t),series:[{type:"column",color:t[0]?"#EAEAEA":"#40C2BB",borderRadius:4,dataLabels:{enabled:!n,style:{fontSize:"12px",fontWeight:"normal"},inside:!1,overflow:"allow",crop:!1,className:y.font},data:Object.keys(t).map((function(e){return{className:"".concat(n?y.grayChart:y.tealChart," ").concat(r.toString()!==e?"opacity-25":""),y:t[e]}}))}]});return a.createElement(l.L,{title:w("title"),svgName:h.vn.Refresh,svgClassName:"bg-light-indigo text-indigo"},a.createElement("p",null,r?a.createElement(f.x,{namespace:E,phrase:"averageAttempts",options:{attempts:r}}):a.createElement(f.x,{namespace:E,phrase:"noAttempts"})),a.createElement("div",{className:"mt-auto"},a.createElement(v,{label:w("attempts"),chartData:s})))}const C={redChart:"G7zOw",yellowChart:"k34mm",greenChart:"vBneA",blueChart:"RPTWm",grayChart:"k4JFZ",borderDark:"LWor3"};var A="shared.insightAverageScore",S=c.T.encloseNamespace(A);function k(e){return a.createElement(l.L,{title:S("title"),svgName:h.vn.Chart,svgClassName:"bg-light-orange text-orange"},a.createElement("p",null,e.students.length?a.createElement(f.x,{namespace:A,phrase:"averageScore",options:(r=e.students.map((function(e){return e.summary.percentCorrect})),s=r.reduce((function(e,t){return e+t}),0)/r.length,c=i.m.last(i.m.last(e.students).results).attempts.length,{averageScore:Math.round(c*s),totalQuestions:c,averagePercentage:Math.round(100*s*10)/10})}):a.createElement(f.x,{namespace:A,phrase:"noAnswers"})),a.createElement(v,{label:"".concat(S("studentScores")," (%)"),chartData:(t=e.students.reduce((function(e,t){return e[Math.floor(10*t.summary.percentCorrect)]++,e}),[0,0,0,0,0,0,0,0,0,0,0]),n=["0","10","20","30","40","50","60","70","80","90","100"],{categories:n,series:[{type:"column",color:"#4E9ACE",borderRadius:4,data:t.map((function(e,t){var a=Number(n[t]);return{className:"".concat(function(e,t){return 0===t?C.grayChart:e<50?C.redChart:e<70?C.yellowChart:e<90?C.greenChart:C.blueChart}(a,e)," rounded"),y:e}}))}]})}));var t,n,r,s,c}var I=n(461),x=c.T.encloseNamespace("shared.insightCompletedStudents");function O(e){return a.createElement(l.L,{title:x("title"),svgName:h.vn.Flag,svgClassName:"bg-light-indigo text-indigo",count:e.students.length},a.createElement(I.y,{students:e.students.map((function(e){return Object.assign(Object.assign({},e.user),{percentage:e.summary.percentCorrect})})),imageCdnUrl:e.imageCdnUrl,imageUrl:e.imageUrl,description:x("completedStudents"),appLink:e.resultsAppLink,appLinkText:x("viewAll"),anonymiseUsers:e.anonymiseUsers}))}var U=n(39157),j=n(36848),L=n(86572),T=n(40782),M=n(80845),R="shared.insightEasiestQuestion",B=c.T.encloseNamespace(R);function H(e){var t,n,r,s,c,o=(n=e.interactive,r=e.results,s=(0,M.Q)(n).map((function(e){return Object.assign(Object.assign({},e),{resultsSummary:(0,U.nq)(e,r)})})).filter((function(e){return!!e.resultsSummary.answered&&!e.resultsSummary.awaitingMarking})),c=i.m.sortBy(s,(function(e){return e.resultsSummary.percentCorrect})),i.m.last(c));return a.createElement(l.L,{title:B("title"),subtitle:B("subtitle"),svgName:h.vn.StarOutline,svgClassName:"bg-light-blue text-blue"},a.createElement("div",{className:"d-flex align-items-center"},a.createElement(T.O,{percentage:null===(t=null==o?void 0:o.resultsSummary)||void 0===t?void 0:t.percentCorrect,layout:T.I.LabelInside}),o?a.createElement("div",{className:"d-flex ms-2"},a.createElement(L.y,{interaction:o,iconClassName:"flex-shrink-0"})):a.createElement("span",{className:"ms-2"},B("noAnswers"))),o&&a.createElement(j.F,{appLink:Object.assign(Object.assign({},e.questionsAppLink),{params:Object.assign(Object.assign({},e.questionsAppLink.params),{sortBy:"score_desc"})}),className:"text-info"},a.createElement(f.x,{namespace:R,phrase:"viewQuestions"})))}var W="shared.insightHardestQuestion",_=c.T.encloseNamespace(W);function P(e){var t,n,r,s,c,o=(n=e.interactive,r=e.results,s=(0,M.Q)(n).map((function(e){return Object.assign(Object.assign({},e),{resultsSummary:(0,U.nq)(e,r)})})).filter((function(e){return!!e.resultsSummary.answered&&!e.resultsSummary.awaitingMarking})),c=i.m.sortBy(s,(function(e){return e.resultsSummary.percentCorrect})),i.m.first(c));return a.createElement(l.L,{title:_("title"),subtitle:_("subtitle"),svgName:h.vn.QuestionMark,svgClassName:"bg-light-orange text-orange"},a.createElement("div",{className:"d-flex align-items-center"},a.createElement(T.O,{percentage:null===(t=null==o?void 0:o.resultsSummary)||void 0===t?void 0:t.percentCorrect,layout:T.I.LabelInside}),o?a.createElement("div",{className:"d-flex ms-2"},a.createElement(L.y,{interaction:o,iconClassName:"flex-shrink-0"})):a.createElement("span",{className:"ms-2"},_("noAnswers"))),o&&a.createElement(j.F,{appLink:Object.assign(Object.assign({},e.questionsAppLink),{params:Object.assign(Object.assign({},e.questionsAppLink.params),{sortBy:"score_asc"})}),className:"text-info"},a.createElement(f.x,{namespace:W,phrase:"viewQuestions"})))}var q=n(94652),F=c.T.encloseNamespace("shared.insightHighScoringStudents");function D(e){return a.createElement(l.L,{title:F("title"),subtitle:F("subtitle"),svgName:h.vn.Trophy,svgClassName:"bg-light-teal text-teal",count:e.students.length},a.createElement(I.y,{students:e.students.map((function(e){return Object.assign(Object.assign({},e.user),{percentage:e.summary.percentCorrect})})),imageCdnUrl:e.imageCdnUrl,imageUrl:e.greenChartImageUrl,description:F(e.completed.length?"noStudents":"highScore"),appLink:Object.assign(Object.assign({},e.resultsAppLink),{params:Object.assign(Object.assign({},e.resultsAppLink.params),{sortBy:"score_desc"})}),appLinkText:F("viewByHighest"),anonymiseUsers:e.anonymiseUsers}))}var Z=c.T.encloseNamespace("shared.insightLowScoringStudents");function z(e){return a.createElement(l.L,{title:Z("title"),subtitle:Z("subtitle"),svgName:h.vn.Hand,svgClassName:"bg-light-red text-red",count:e.students.length},a.createElement(I.y,{students:e.students.map((function(e){return Object.assign(Object.assign({},e.user),{percentage:e.summary.percentCorrect})})),imageCdnUrl:e.imageCdnUrl,imageUrl:e.completed.length?e.heartImageUrl:e.redChartImageUrl,description:Z(e.completed.length?"doingWell":"lowScore"),appLink:Object.assign(Object.assign({},e.resultsAppLink),{params:Object.assign(Object.assign({},e.resultsAppLink.params),{sortBy:"score_asc"})}),appLinkText:Z("viewByLowest"),anonymiseUsers:e.anonymiseUsers}))}var Q=c.T.encloseNamespace("shared.insightMarkingRequired");function G(e){return a.createElement(l.L,{title:Q("title"),svgName:h.vn.Hand,svgClassName:"bg-light-blue text-blue",count:e.students.length},a.createElement(I.y,{students:e.students,imageCdnUrl:e.imageCdnUrl,imageUrl:e.imageUrl,description:Q("studentsRequireMarking"),appLink:e.resultsAppLink,appLinkText:Q("viewAll"),anonymiseUsers:e.anonymiseUsers}))}function V(e){return function(e){if(Array.isArray(e))return K(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return K(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?K(e,t):void 0}}(e)||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 K(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var J=c.T.encloseNamespace("shared.insightNotCompletedStudents");function Y(e){var t,n,r,s=(t=e.markingRequiredStudents.map((function(e){return null==e?void 0:e.user.id})),n=e.completedStudents.map((function(e){return null==e?void 0:e.user.id})),r=e.classroomStudents.filter((function(e){return!t.includes(e.id)&&!n.includes(e.id)})),i.m.uniq([].concat(V(e.notCompletedStudents.map((function(e){return e.user}))),V(r)),"id"));return a.createElement(l.L,{title:J("title"),svgName:h.vn.Puzzle,svgClassName:"bg-light-teal text-teal",count:s.length},a.createElement(I.y,{students:s,imageCdnUrl:e.imageCdnUrl,imageUrl:e.imageUrl,description:J("completed"),appLink:e.resultsAppLink,appLinkText:J("viewAll"),anonymiseUsers:e.anonymiseUsers}))}var $=n(41196),X=n(26025),ee=n(74901),te=n(40003),ne=n(38143),ae=n(39151),re=n(20768),se=n(31949),ie=n(17913),ce=n(99742),le=n(88630),oe=n(5672),ue=n(83590),me=n(14070),de=n(97291);function ge(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var pe="insights.interactiveInsightsOverview";function ve(e){var t,n,c,l,o,u=(l=(0,r.D)(ne.g.ANONYMISE_USERS),o=1,function(e){if(Array.isArray(e))return e}(l)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,s,i,c=[],l=!0,o=!1;try{if(s=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=s.call(n)).done)&&(c.push(a.value),c.length!==t);l=!0);}catch(e){o=!0,r=e}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(o)throw r}}return c}}(l,o)||function(e,t){if(e){if("string"==typeof e)return ge(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)?ge(e,t):void 0}}(l,o)||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],m=s.a.useBasicFetch(se.N.currentUser()),d=s.a.useBasicFetch(ae.L.config()),g=s.a.useBasicFetch(m.data&&e.classroomId&&le.F.getClassroom(e.classroomId,m.data.id)),p=s.a.useBasicFetch(re.b.interactiveMetadata(e.interactiveId)),v=s.a.useBasicFetch((null===(t=p.data)||void 0===t?void 0:t.interactiveId)&&re.b.interactive(p.data.interactiveId)),h=X.B.getAudienceAppLinkParams(),y=X.B.getDateRangeAppLinkParams(),b=(0,$.W)(e.interactiveId,Object.assign(Object.assign({},(0,te.wO)((0,te.Hb)(),y)),(0,ee.K)(h))),E=1===(null===(n=h.classrooms)||void 0===n?void 0:n.length)&&!(null===(c=h.classroomGroups)||void 0===c?void 0:c.length),w=s.a.useBasicFetch(E&&le.F.getClassroomStudents(i.m.first(h.classrooms))),C=s.a.useBasicFetch(ie.u.aggregateEngagement(e.interactiveId,Object.assign(Object.assign({},(0,te.wO)((0,te.Hb)(),y)),(0,ee.K)(h)),m.data.id)),A=m.data&&d.data&&(!e.classroomId||g.data)&&p.data&&v.data&&b.data&&(!E||w.data)&&C.data,S=A&&(0,U.R6)(v.data,b.data);if(!A)return a.createElement(a.Fragment,null);var I,x=Object.assign(Object.assign({},h),y),j=function(e,t){return{resultsAppLink:{application:de.O.INSIGHTS,action:me.e.Insights.INTERACTIVE_RESULTS,args:[e],params:t},questionsAppLink:{application:de.O.INSIGHTS,action:me.e.Insights.INTERACTIVE_QUESTIONS,args:[e],params:t},heatmapAppLink:{application:de.O.INSIGHTS,action:me.e.Insights.VIDEO_HEATMAP,args:[e],params:t}}}(e.interactiveId);return a.createElement("div",{className:"px-3"},a.createElement(ue.m,{video:p.data,audienceAppLinkParams:h,dateRangeAppLinkParams:y,tabs:(0,oe.kj)(p.data.id,"overview",x)}),a.createElement("section",{className:"mb-5"},a.createElement("h2",{className:"h4"},a.createElement(f.x,{namespace:pe,phrase:"studentResponses"}),a.createElement("span",null,": ",S.completed.length,w.data?"/".concat(w.data.data.length):"")),a.createElement("div",{className:"row g-3"},a.createElement("div",{className:"col-12 col-md"},a.createElement(G,{imageUrl:ce.W.Insights.SPEECH_BUBBLE_ASTERISK,resultsAppLink:j.resultsAppLink,imageCdnUrl:d.data.imageCdnUrl,students:(I=S.markingRequired,I.map((function(e){return e.user}))),anonymiseUsers:u})),E&&a.createElement("div",{className:"col-12 col-md"},a.createElement(Y,{markingRequiredStudents:S.markingRequired,completedStudents:S.completed,notCompletedStudents:S.notCompleted,classroomStudents:w.data.data,imageCdnUrl:d.data.imageCdnUrl,imageUrl:ce.W.Insights.JIGSAW,resultsAppLink:j.resultsAppLink,anonymiseUsers:u})),a.createElement("div",{className:"col-12 col-md"},a.createElement(O,{students:S.completed,imageCdnUrl:d.data.imageCdnUrl,imageUrl:ce.W.Insights.AVATAR,resultsAppLink:j.resultsAppLink,anonymiseUsers:u})))),a.createElement("section",{className:"mb-5"},a.createElement("h2",{className:"h4"},a.createElement(f.x,{namespace:pe,phrase:"studentsPerformance"})),a.createElement("div",{className:"row g-3"},a.createElement("div",{className:"col-12 col-md-6"},a.createElement(z,{redChartImageUrl:ce.W.Insights.RED_CHART,heartImageUrl:ce.W.Insights.SPEECH_BUBBLE_HEART,resultsAppLink:j.resultsAppLink,imageCdnUrl:d.data.imageCdnUrl,students:S.lowScore,completed:S.completed,anonymiseUsers:u})),a.createElement("div",{className:"col-12 col-md-6"},a.createElement(D,{greenChartImageUrl:ce.W.Insights.GREEN_CHART,resultsAppLink:j.resultsAppLink,imageCdnUrl:d.data.imageCdnUrl,students:S.highScore,completed:S.completed,anonymiseUsers:u})),a.createElement("div",{className:"col-12 col-md-6"},a.createElement(P,{interactive:v.data,interactiveMetadata:p.data,results:b.data,questionsAppLink:j.questionsAppLink})),a.createElement("div",{className:"col-12 col-md-6"},a.createElement(H,{interactive:v.data,interactiveMetadata:p.data,results:b.data,questionsAppLink:j.questionsAppLink})))),a.createElement("section",{className:"mb-5"},a.createElement("h2",{className:"h4"},a.createElement(f.x,{namespace:pe,phrase:"classPerformance"})),a.createElement("div",{className:"row g-3"},a.createElement("div",{className:"col-12 col-md-6"},a.createElement(k,{students:S.completed})),a.createElement("div",{className:"col-12 col-md-6"},a.createElement(N,{students:S.completed})),a.createElement("div",{className:"col-12 col-md-6"},a.createElement(q.b,{engagement:C.data,heatmapAppLink:j.heatmapAppLink})))))}},94831:(e,t,n)=>{n.d(t,{Z:()=>a});const a={removeRecipient:"mCbMC",recipientItem:"kdcb0",showSpinner:"xH6Mu",avatarContainer:"Zcpg3",recipientDetails:"v5EmV",recipientDetailsWithRemoveButton:"_V928"}}}]);
2
- //# sourceMappingURL=1057-3c48d4553a-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/1057-3c48d4553a-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/components/engagement-heat-map/engagement-heat-map.scss","file:///app/packages/libs/shared/src/apps/analytics/components/engagement-heat-map/EngagementHeatMap.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insight-card/insight-card.scss","file:///app/packages/libs/shared/src/apps/analytics/components/insight-card/InsightCard.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insight-student-list/insight-student-list.scss","file:///app/packages/libs/shared/src/apps/analytics/components/insight-student-list/InsightStudentList.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/heatmap/insight-heatmap.scss","file:///app/packages/libs/shared/src/apps/analytics/components/insights/heatmap/InsightHeatmap.tsx","file:///app/packages/libs/shared/src/apps/analytics/flight-requests/InteractiveResultsRequests.ts","file:///app/packages/libs/shared/src/apps/analytics/hooks/UseFetchInteractiveResults.ts","file:///app/packages/libs/shared/src/apps/analytics/utils/EngagementUtils.ts","file:///app/packages/libs/shared/src/apps/analytics/utils/InteractiveUtils.ts","file:///app/packages/libs/shared/src/apps/share/components/recipient-item/user-recipient-item-metadata/UserRecipientItemMetadata.tsx","file:///app/packages/libs/shared/src/enums/InteractionCorrectness.ts","file:///app/packages/libs/shared/src/enums/InteractiveAnswerStatus.ts","file:///app/packages/libs/shared/src/flight-requests/VideoViewRequests.ts","file:///app/packages/libs/shared/src/utils/InteractiveCorrectnessHelper.ts","file:///app/packages/libs/shared/src/utils/InteractiveHelper.ts","file:///app/packages/libs/shared/src/apps/analytics/components/insight-chart/insight-chart.scss","file:///app/packages/libs/shared/src/apps/analytics/components/insight-chart/InsightChart.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/average-attempts/insight-average-attempts.scss","file:///app/packages/libs/shared/src/apps/analytics/components/insights/average-attempts/InsightAverageAttempts.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/average-score/insight-average-score.scss","file:///app/packages/libs/shared/src/apps/analytics/components/insights/average-score/InsightAverageScore.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/completed-students/InsightCompletedStudents.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/easiest-question/InsightEasiestQuestion.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/hardest-question/InsightHardestQuestion.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/high-scoring-students/InsightHighScoringStudents.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/low-scoring-students/InsightLowScoringStudents.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/marking-required/InsightMarkingRequired.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/not-completed-students/InsightNotCompletedStudents.tsx","file:///app/packages/projects/lite/src/apps/insights/views/interactive/overview/InteractiveInsightsOverviewView.tsx","file:///app/packages/projects/lite/src/apps/insights/views/interactive/overview/InteractiveInsightsOverviewUtils.ts","file:///app/packages/libs/shared/src/apps/share/components/recipient-item/recipient-item.scss"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"heatMap\":\"epapa\",\"legend\":\"uhH4p\"};","import React from 'react';\nimport chroma from 'chroma-js';\n\nimport { getFullHeatMap } from 'libs/shared/apps/analytics/utils/EngagementUtils';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Engagement } from 'libs/shared/interfaces';\n\nimport styles from './engagement-heat-map.scss';\n\nconst namespace = 'shared.engagementHeatMap';\n\nconst ZERO_COLOUR = '#f1f1f1';\nconst MIN_COLOUR = '#daf07d';\nconst MAX_COLOUR = '#08bd1a';\n\nconst COLOUR_SCALE = chroma.scale([ MIN_COLOUR, MAX_COLOUR ]);\n\nconst LEGEND_VALUES = [ 0, 0.01, 0.25, 0.5, 0.75, 1 ];\n\nfunction getBackgroundColor(value: number, max: number): string {\n if (!value)\n return ZERO_COLOUR;\n\n return COLOUR_SCALE(value / max).hex();\n}\n\nfunction getGradient(data: number[], max: number): string {\n const gradient: string[] = [];\n\n for (let i = 0; i < data.length; i++) {\n const previousValue = i > 0 && data[i - 1];\n const currentValue = data[i];\n const nextValue = i < data.length - 1 && data[i + 1];\n\n /**\n * We want to capture colour changes but if a value has the same value\n * of both of its neighbours, we can skip it.\n */\n if (currentValue === previousValue && currentValue === nextValue)\n continue;\n\n gradient.push(`${getBackgroundColor(currentValue, max)} ${100 / data.length * i}%`);\n }\n\n return `linear-gradient(to right, ${gradient.join(',')})`;\n}\n\nexport function EngagementHeatMapLegend(): JSX.Element {\n const max = Math.max(...LEGEND_VALUES);\n const legendSquareWidthPercentage = 100 / LEGEND_VALUES.length;\n\n return (\n <div className='d-flex justify-content-between w-100'>\n <Text namespace={namespace} phrase='less' />\n <div className={`d-flex mx-1 flex-grow-1 ${styles.legend}`}>\n {LEGEND_VALUES.map((val, idx) => (\n <div\n key={idx}\n style={{\n width: `${legendSquareWidthPercentage}%`,\n backgroundColor: getBackgroundColor(val, max)\n }}\n />\n ))}\n </div>\n <Text namespace={namespace} phrase='more' />\n </div>\n );\n}\n\ninterface EngagementHeatMapProps {\n engagement: Engagement;\n max?: number;\n className?: string;\n}\n\nexport function EngagementHeatMap(props: EngagementHeatMapProps): JSX.Element {\n const heatMap = getFullHeatMap(props.engagement);\n const max = props.max ?? Math.max(...heatMap);\n\n return (\n <div\n className={`border rounded ${styles.heatMap} ${props.className ?? ''}`}\n style={{\n background: getGradient(heatMap, max)\n }}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"icon\":\"sAmpy\",\"count\":\"faDs4\"};","import React from 'react';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\n\nimport styles from './insight-card.scss';\n\ninterface InsightCardProps extends React.PropsWithChildren {\n svgName: string;\n svgClassName: string;\n title: string;\n subtitle?: string;\n count?: number;\n}\n\nexport function InsightCard(props: InsightCardProps) {\n return (\n <section className='d-flex flex-column border border-light rounded p-3 h-100'>\n <div className='d-flex align-items-center mb-2'>\n <div className={`${styles.icon} ${props.svgClassName} rounded-circle d-flex align-items-center justify-content-center`}>\n <SvgContainer svgName={props.svgName} />\n </div>\n <div className='d-flex flex-column ms-2'>\n <h2 className='h6 mb-0'>{props.title}</h2>\n {props.subtitle && <p className='text-secondary font-size-sm mb-0'>{props.subtitle}</p>}\n </div>\n {typeof props.count === 'number' && (\n <div className={`${styles.count} d-flex justify-content-center align-items-center bg-light rounded-circle ms-auto`}>\n {props.count}\n </div>\n )}\n </div>\n {props.children}\n </section>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"avatar\":\"uMuZt\",\"image\":\"WdKiU\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { UserRecipientItemMetadata } from 'libs/shared/apps/share/components/recipient-item/user-recipient-item-metadata/UserRecipientItemMetadata';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { PercentageIndicator } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { User } from 'libs/shared/interfaces';\n\nimport styles from './insight-student-list.scss';\n\nconst MAX_ITEMS = 3;\n\ninterface UserPercentage extends User {\n percentage?: number;\n}\n\ninterface InsightStudentListProps {\n students: UserPercentage[];\n imageUrl: string;\n imageCdnUrl: string;\n appLink: Core.AppLink;\n description: string;\n appLinkText: string;\n percentages?: number[];\n anonymiseUsers: boolean;\n}\n\nexport function InsightStudentList(props: InsightStudentListProps) {\n return (\n <>\n {props.students.length ? (\n <ul className='list-unstyled mb-2'>\n {props.students.slice(0, MAX_ITEMS).map(student => (\n <li key={student.id} className='d-flex align-items-center mb-2'>\n <UserRecipientItemMetadata\n user={student}\n imageCdnUrl={props.imageCdnUrl}\n avatarClassName={styles.avatar}\n detailsClassName='ms-2'\n showDisplayName\n showSubText={false}\n anonymiseUsers={props.anonymiseUsers}\n />\n\n <div className='d-flex align-items-center ms-auto'>\n <span className='me-1'>{student.percentage === undefined ? '- ' : Math.round(student.percentage * 100)}%</span>\n <PercentageIndicator percentage={student.percentage} />\n </div>\n </li>\n ))}\n </ul>\n ) : (\n <div className='text-center'>\n <img className={`${styles.image} mb-2`} src={props.imageUrl} />\n <p className='text-secondary mb-0'>{props.description}</p>\n </div>\n )}\n\n {!!props.students.length && (\n <AppLink appLink={props.appLink} className='text-info mt-auto'>\n {props.appLinkText}\n </AppLink>\n )}\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"heatMap\":\"Rfr9N\",\"heatMapTimepointIndicator\":\"s6JbA\",\"heatMapTimepointIndicatorVisible\":\"mgjWX\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EngagementHeatMap } from 'libs/shared/apps/analytics/components/engagement-heat-map/EngagementHeatMap';\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Engagement } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './insight-heatmap.scss';\n\nconst namespace = 'shared.insightHeatmap';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightHeatmapProps {\n engagement: Engagement;\n heatmapAppLink: Core.AppLink;\n}\n\nexport function InsightHeatmap(props: InsightHeatmapProps) {\n const engagementRate = props.engagement.engagementRate > 0 ? Math.round(props.engagement.engagementRate * 100) : null;\n\n return (\n <InsightCard\n title={getPhrase('title')}\n svgName={cvSvgLibrary.Timer}\n svgClassName='bg-light-green text-green'\n >\n <div className='mb-2'>\n <p className='mb-0'>\n {engagementRate\n ? (\n <Text namespace={namespace} phrase='everyoneWatched' options={{ engagementRate }} />\n )\n : <Text namespace={namespace} phrase='notWatched' />\n }\n </p>\n {engagementRate &&\n <AppLink appLink={props.heatmapAppLink} className='text-info'>\n <Text namespace={namespace} phrase='viewHeatmap' />\n </AppLink>\n }\n </div>\n\n <div className='mb-2'>\n <EngagementHeatMap\n engagement={props.engagement}\n className={styles.heatMap}\n />\n </div>\n\n <p className='h3 text-center mb-2'>{engagementRate || '--'}%</p>\n <p className='text-center mb-0 font-size-sm'><Text namespace={namespace} phrase='amountWatched' /></p>\n </InsightCard>\n );\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}\n\nfunction getInteractiveResultFilters(\n currentUser: CurrentUser,\n filter: AnalyticsRequestFilter\n): InteractiveResultFilters {\n return {\n currentUserId: currentUser.id,\n currentCustomerId: currentUser.customerId,\n dateRange: { start: filter.start, end: filter.end },\n userIds: filter.userId,\n classroomsAndGroups: filter.groupId\n };\n}\n\nexport const InteractiveResultsRequests = {\n /** \n * This endpoint returns data with a lot of duplicated ids,\n * e.g. student answers to the same question will have the same id.\n * Because of that, we don't normalize.\n */\n interactiveResultSet(\n interactiveId: string,\n interactiveMetadataId: string,\n currentUser: CurrentUser,\n filter: AnalyticsRequestFilter,\n success?: (data: InteractiveResultSet) => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `/api/domain/v2/analytics/interactives/${interactiveId}/metadata/${interactiveMetadataId}`,\n key: getAnalyticsRequestKey(`interactive:result:set:${interactiveId}:${interactiveMetadataId}`, filter),\n data: getInteractiveResultFilters(currentUser, filter),\n type: HttpVerbs.POST,\n normalize: false,\n success,\n error,\n always\n };\n },\n \n /**\n * As the response from `interactiveResultSet` isn't normalised, we need to invalidate the cache\n * to update the results data.\n */\n mark(\n interactiveId: string,\n interactiveMetadataId: string,\n answerId: string,\n data: MarkInteractiveAnswer,\n success?: () => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `/api/domain/v1/analytics/answers/${answerId}`,\n key: `mark:answer:${answerId}:${data.resultId}`,\n type: HttpVerbs.PUT,\n data,\n normalize: false,\n invalidationKeys: `interactive:result:set:${interactiveId}:${interactiveMetadataId}`,\n success,\n error,\n always\n };\n },\n\n pendingReviews(data: InteractivesPendingReviewsRequest): Flight.Request {\n return {\n url: `/api/domain/v1/analytics/interactives/pending-reviews/summary`,\n key: `interactives:pending:reviews`,\n type: HttpVerbs.POST,\n data\n };\n },\n\n interactiveResultsReport(data: InteractiveResultsReport): Flight.Request {\n return {\n url: '{gateway}/v2/analytics/interactives/report',\n key: 'interactive:results:report',\n data,\n type: HttpVerbs.POST,\n normalize: false\n };\n }\n};","import { Flight } from 'libs/common/flight';\n\nimport { InteractiveResultsRequests } from 'libs/shared/apps/analytics/flight-requests/InteractiveResultsRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { AnalyticsRequestFilter, CurrentUser, Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\n\nexport function useFetchInteractiveResults(\n interactiveMetadataId: string,\n requestFilter: AnalyticsRequestFilter\n): Flight.Response<InteractiveResultSet> {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(!!interactiveMetadataId &&\n InteractiveRequests.interactiveMetadata(interactiveMetadataId));\n\n const interactive = Flight.useBasicFetch<Interactive>(!!interactiveMetadata.data?.interactiveId &&\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId));\n\n const shouldFetchResults = !!currentUser.data && !!interactive.data && (!!requestFilter);\n\n return Flight.useBasicFetch<InteractiveResultSet>(shouldFetchResults &&\n InteractiveResultsRequests.interactiveResultSet(\n interactiveMetadata.data.interactiveId,\n interactiveMetadata.data.id,\n currentUser.data,\n requestFilter\n ));\n}","import { Engagement } from 'libs/shared/interfaces';\n\n/**\n * The heat map in the API response won't contain trailing zeros so we need to add those\n * in manually.\n */\nexport function getFullHeatMap(engagement: Engagement): number[] {\n return (new Array(Math.ceil(engagement.videoDuration))).fill(null).map((t, idx) => engagement.heatMap[idx] || 0);\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 } 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(interactive: Interactive, results: InteractiveResultSet): StudentGroups {\n const groups: StudentGroups = {\n markingRequired: [],\n lowScore: [],\n highScore: [],\n completed: [],\n notCompleted: []\n };\n\n const interactions = getInteractions(interactive);\n\n const numInteractions = interactions.length;\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 if (ArrayHelper.last(s.results).attempts.length === numInteractions) {\n groups.completed.push(withSummary);\n } else {\n groups.notCompleted.push(withSummary);\n return;\n }\n \n if (withSummary.summary.percentCorrect >= ScoreThresholdDefaults.HIGH)\n groups.highScore.push(withSummary);\n \n if (withSummary.summary.percentCorrect < 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).reverse();\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: result.attempts.length,\n attempts: studentResults.results.length,\n unanswered: numInteractions - answeredInteractions,\n percentCorrect,\n correct: numCorrect,\n awaitingMarking\n };\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { anonymiseUserName } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { UserRole } from 'libs/shared/enums/UserRole';\nimport { BaseObject, User } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from '../recipient-item.scss';\n\nconst namespace = 'shared.userRecipientItemMetadata';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getSubText(user: User): string {\n const userType = UserHelper.getUserType(user);\n const role = UserHelper.getUserRole(user);\n\n if (userType === UserGroup.Staff) {\n if (role === UserRole.Admin)\n return getPhrase('admin');\n\n return getPhrase('staff');\n }\n\n const yearGroup = UserHelper.getYearGroup(user);\n\n if (yearGroup?.name)\n return yearGroup.name;\n\n return getPhrase('student');\n}\n\nUserRecipientItemMetadata.defaults = {\n showSubText: true\n};\n\ninterface UserRecipientItemMetadataProps {\n user: User;\n imageCdnUrl: string;\n detailsClassName?: string;\n avatarClassName?: string;\n showDisplayName: boolean;\n showSubText?: boolean;\n anonymiseUsers?: boolean;\n getSubText?: (user: BaseObject) => string;\n}\n\nexport function UserRecipientItemMetadata(props: UserRecipientItemMetadataProps): JSX.Element {\n return (\n <>\n <div className={`${styles.avatarContainer} ${props.avatarClassName} d-inline-block`}>\n <Avatar\n imageUrl={props.user.avatar?.url}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(props.user.name, props.user.surname)}\n />\n </div>\n\n <div className={props.detailsClassName}>\n <h4 className='font-size-normal fw-normal m-0'>\n {props.anonymiseUsers\n ? anonymiseUserName(props.user, true)\n : props.showDisplayName\n ? UserHelper.getDisplayName(props.user)\n : UserHelper.getFullName(props.user)\n }\n </h4>\n {props.showSubText && <p className='text-secondary m-0'>{props.getSubText ? props.getSubText(props.user) : getSubText(props.user)}</p>}\n </div>\n </>\n );\n}","export enum InteractionCorrectness {\n Correct,\n Incorrect,\n AwaitingMarking,\n \n Answered,\n UnAnswered,\n NotApplicable\n}","export enum InteractiveAnswerStatus {\n Incorrect = 0,\n Correct = 1,\n PendingReview = 2\n}","import { Xhr } from 'libs/common/backbone/interfaces/Xhr';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { VideoViewEventResponse } from 'libs/shared/apps/analytics/interfaces/VideoViewEvent';\nimport { AnalyticsRequestFilter, Engagement, IndividualEngagementResponse } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\nexport const VideoViewRequests = {\n individualEngagement(\n objectId: string,\n filter: AnalyticsRequestFilter,\n sharerId?: string,\n success?: (data: IndividualEngagementResponse) => void,\n error?: (xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n const queryParams: HashObject = {\n objectId,\n ...filter\n };\n\n if (sharerId)\n queryParams.sharerId = sharerId;\n\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/analytics/heat-map', queryParams),\n key: getAnalyticsRequestKey(`engagement:${objectId}`, filter, sharerId),\n formatData: (data: any) => {\n return {\n ...data,\n data: data.data?.map((d: any) => ({\n ...d,\n heatMap: d.heatMap ?? []\n }))\n };\n },\n normalize: false,\n success,\n error,\n always\n };\n },\n \n aggregateEngagement(\n objectId: string,\n filter: AnalyticsRequestFilter,\n sharerId?: string,\n success?: (data: Engagement) => void,\n error?: (xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n const queryParams: HashObject = {\n objectId,\n ...filter\n };\n\n if (sharerId)\n queryParams.sharerId = sharerId;\n\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/analytics/heat-map/aggregations', queryParams),\n key: getAnalyticsRequestKey(`aggregate:engagement:${objectId}`, filter, sharerId),\n formatData: (data: Engagement) => {\n return {\n ...data,\n heatMap: data.heatMap ?? []\n };\n },\n normalize: false,\n success,\n error,\n always\n };\n },\n \n views(\n filter: AnalyticsRequestFilter,\n objectId?: string,\n sharerId?: string,\n success?: (data: VideoViewEventResponse) => void,\n error?: (xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n let baseKey = 'video:views';\n\n if (objectId)\n baseKey += `:${objectId}`;\n\n const queryParams: HashObject = {\n objectId,\n ...filter,\n timeOffset: DateHelper.getTimezoneOffset()\n };\n\n if (sharerId)\n queryParams.sharerId = sharerId;\n\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/analytics/video-views', queryParams),\n key: getAnalyticsRequestKey(baseKey, filter, sharerId),\n normalize: false,\n success,\n error,\n always\n };\n }\n};","import { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, InteractionTypeId, InteractiveResult, StudentAnswer } from 'libs/shared/interfaces';\n\ntype GetStudentAnswerByActionableItemId = (id: string) => string;\n\nfunction notApplicable(): InteractionCorrectness {\n return InteractionCorrectness.NotApplicable;\n}\n\nfunction awaitingMarking(): InteractionCorrectness {\n return InteractionCorrectness.AwaitingMarking;\n}\n\nfunction isMissingWordCorrect(\n interaction: Interaction,\n getStudentAnswer: GetStudentAnswerByActionableItemId\n): InteractionCorrectness {\n const items = interaction.actionableItems.filter(a => a\n .isCorrect);\n\n if (items.every(a => !getStudentAnswer(a.id)))\n return InteractionCorrectness.UnAnswered;\n\n const correct = items.every(a => a.name.trim().toLowerCase() === getStudentAnswer(a.id)?.trim().toLowerCase());\n return correct ? InteractionCorrectness.Correct : InteractionCorrectness.Incorrect;\n}\n\nfunction isMultipleChoiceCorrect(\n interaction: Interaction,\n getStudentAnswer: GetStudentAnswerByActionableItemId\n): InteractionCorrectness {\n if (interaction.actionableItems.every(a => !getStudentAnswer(a.id)))\n return InteractionCorrectness.UnAnswered;\n \n const correctItems = interaction.actionableItems.filter(a => a.isCorrect);\n\n const correct = correctItems.every(a => {\n const studentAnswer = getStudentAnswer(a.id);\n\n /**\n * In the past we've only ever checked the answer name. But since we introduced the ability to have image interactions\n * with no question text, we've need to swap to saving the id. But past submissions still have the name\n * - Sha\n */\n return studentAnswer?.toString() === a.id?.toString() || studentAnswer === a.name;\n });\n return correct ? InteractionCorrectness.Correct : InteractionCorrectness.Incorrect;\n}\n\nfunction isMarkableAnswerMarkedCorrect(\n interaction: Interaction,\n getStudentAnswer: (id: string) => StudentAnswer\n): InteractionCorrectness {\n let correctness: InteractionCorrectness;\n\n // There should only be one actionableItem\n interaction.actionableItems.forEach(item => {\n const studentAnswer = getStudentAnswer(item.id);\n\n if (!studentAnswer) {\n correctness = InteractionCorrectness.UnAnswered;\n return;\n }\n\n if (studentAnswer.status === InteractiveAnswerStatus.Correct) {\n correctness = InteractionCorrectness.Correct;\n return;\n }\n\n if (studentAnswer.status === InteractiveAnswerStatus.Incorrect) {\n correctness = InteractionCorrectness.Incorrect;\n return;\n }\n\n correctness = InteractionCorrectness.AwaitingMarking;\n });\n\n return correctness;\n}\n\ntype IsCorrectFunction = (interaction: Interaction, result: InteractiveResult) => InteractionCorrectness;\n\nfunction getGetStudentAnswer(interaction: Interaction, result: InteractiveResult): (id: string) => StudentAnswer {\n return (id: string) => {\n const attempt = result.attempts.find(a => a.id === interaction.id);\n return attempt?.answers.find(s => s.id === id);\n };\n}\n\nfunction wrapIsMissingWordCorrect(interaction: Interaction, result: InteractiveResult): InteractionCorrectness {\n const getStudentAnswer = getGetStudentAnswer(interaction, result);\n\n return isMissingWordCorrect(interaction, (id: string) => {\n const answer = getStudentAnswer(id);\n return answer?.text;\n });\n}\n\nfunction wrapIsMultipleChoiceCorrect(interaction: Interaction, result: InteractiveResult): InteractionCorrectness {\n const getStudentAnswer = getGetStudentAnswer(interaction, result);\n\n return isMultipleChoiceCorrect(interaction, (id: string) => {\n const answer = getStudentAnswer(id);\n return answer?.text;\n });\n}\n\nfunction wrapIsMarkableAnswerMarkedCorrect(\n interaction: Interaction,\n result: InteractiveResult\n): InteractionCorrectness {\n const getStudentAnswer = getGetStudentAnswer(interaction, result);\n return isMarkableAnswerMarkedCorrect(interaction, getStudentAnswer);\n}\n\nconst IsCorrectLookup: {[typeId: number]: IsCorrectFunction} = {\n [InteractionTypeId.Annotation]: notApplicable,\n [InteractionTypeId.Image]: notApplicable,\n [InteractionTypeId.MissingWord]: wrapIsMissingWordCorrect,\n [InteractionTypeId.MultipleChoice]: wrapIsMultipleChoiceCorrect,\n [InteractionTypeId.ShortAnswer]: wrapIsMarkableAnswerMarkedCorrect,\n [InteractionTypeId.TrueOrFalse]: wrapIsMultipleChoiceCorrect,\n [InteractionTypeId.Illustration]: wrapIsMarkableAnswerMarkedCorrect\n};\n\nfunction isInteractionCorrect(interaction: Interaction, result: InteractiveResult): InteractionCorrectness {\n const isCorrectFn = IsCorrectLookup[interaction.typeId];\n\n return isCorrectFn(interaction, result);\n}\n\nexport const InteractiveCorrectnessHelper = {\n notApplicable,\n awaitingMarking,\n isMissingWordCorrect,\n isMultipleChoiceCorrect,\n isInteractionCorrect\n};\n","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport {\n Interaction,\n InteractionTypeId,\n Interactive,\n InteractiveResult,\n StudentAttempt,\n StudentResults\n} from 'libs/shared/interfaces';\n\nfunction interactionRequiresAnswer(interaction: Interaction): boolean {\n return interaction.typeId !== InteractionTypeId.Annotation && interaction.typeId !== InteractionTypeId.Image;\n}\n\nexport function flattenInteractions(interactive: Interactive): Interaction[] {\n return ArrayHelper.flatten(interactive.timepoints.map(i => i.interactions));\n}\n\n/**\n * Centralised logic for using the most recent student result.\n */\nexport function getStudentResult(studentResults: StudentResults): InteractiveResult {\n return ArrayHelper.last(studentResults.results);\n}\n\nexport function getStudentAttempt(interactionId: string, result: InteractiveResult): StudentAttempt {\n return ArrayHelper.findWhere(result?.attempts, { id: interactionId });\n}\n\n/**\n * Returns a flat list of interactions on an interactive and filters out\n * those that don't require an answer (annotations and images).\n */\nexport function getInteractions(interactive: Interactive): Interaction [] {\n return flattenInteractions(interactive).filter(interactionRequiresAnswer);\n}","// extracted by mini-css-extract-plugin\nexport default {\"font\":\"nSTtI\",\"chartContainer\":\"Otcfo\"};","import React from 'react';\nimport Highcharts from 'highcharts';\nimport HighchartsReact from 'highcharts-react-official';\n\nimport { ChartData } from 'libs/shared/apps/analytics/interfaces/ChartData';\n\nimport styles from './insight-chart.scss';\n\nconst getStaticChartOptions = (label: string): Highcharts.Options => {\n return {\n title: {\n text: null\n },\n credits: {\n enabled: false\n },\n yAxis: {\n title: {\n text: null\n },\n labels: {\n enabled: false\n },\n gridLineWidth: 0,\n min: 0,\n max: 1\n },\n xAxis: {\n title: {\n text: label,\n style: {\n color: '#313543',\n fontSize: '12px'\n }\n },\n labels: {\n style: {\n color: '#313543',\n fontSize: '12px'\n }\n },\n className: styles.font,\n lineWidth: 0\n },\n legend: {\n enabled: false\n },\n chart: {\n type: 'column',\n backgroundColor: 'transparent',\n height: '160px',\n spacingTop: 20\n },\n plotOptions: {\n column: {\n dataLabels: {\n enabled: false\n },\n enableMouseTracking: false,\n minPointLength: 8\n }\n }\n };\n};\n\ninterface InsightChartProps {\n label: string;\n chartData: ChartData;\n}\n\nexport function InsightChart(props: InsightChartProps) {\n function getChartOptions(): Highcharts.Options {\n const data = props.chartData;\n const staticChartOptions = getStaticChartOptions(props.label);\n\n return {\n ...staticChartOptions,\n xAxis: {\n ...staticChartOptions.xAxis,\n categories: data.categories\n },\n series: data.series\n };\n }\n\n return (\n <div className={styles.chartContainer}>\n <HighchartsReact\n highcharts={Highcharts}\n options={getChartOptions()}\n />\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"tealChart\":\"lZZf0\",\"grayChart\":\"wJQc4\",\"font\":\"o1Xbr\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { InsightChart } from 'libs/shared/apps/analytics/components/insight-chart/InsightChart';\nimport { ChartData } from 'libs/shared/apps/analytics/interfaces/ChartData';\nimport { StudentResultsWithSummary } from 'libs/shared/apps/analytics/interfaces/StudentResultsWithSummary';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './insight-average-attempts.scss';\n\nconst namespace = 'shared.insightAverageAttempts';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightAverageAttemptsProps {\n students: StudentResultsWithSummary[];\n}\n\nexport function InsightAverageAttempts(props: InsightAverageAttemptsProps) {\n const averageAttempts = getAverageAttempts();\n const chartData = getChartData();\n\n function getCategoriesData() {\n const categoriesData: HashObject = {};\n props.students.forEach(student => {\n const attemptsCategory = student.summary.attempts.toString();\n\n if (!(attemptsCategory in categoriesData)) {\n Object.assign(categoriesData, { [attemptsCategory]: 0 });\n }\n\n categoriesData[attemptsCategory]++;\n });\n return Object.keys(categoriesData).length ? categoriesData : { 0: 0 };\n }\n\n function getAverageAttempts() {\n return props.students.reduce((acc, student) => student.summary.attempts > acc ? student.summary.attempts : acc, 0);\n }\n\n function getChartData(): ChartData {\n const categoriesData = getCategoriesData();\n const noAttempts = categoriesData[0] === 0;\n\n return {\n categories: Object.keys(categoriesData),\n series: [{\n type: 'column',\n color: categoriesData[0] ? '#EAEAEA' : '#40C2BB',\n borderRadius: 4,\n dataLabels: {\n enabled: !noAttempts,\n style: {\n fontSize: '12px',\n fontWeight: 'normal'\n },\n inside: false,\n overflow: 'allow',\n crop: false,\n className: styles.font\n },\n data: Object.keys(categoriesData).map(category => ({\n className: `${noAttempts ? styles.grayChart : styles.tealChart} ${averageAttempts.toString() !== category ? 'opacity-25' : ''}`,\n y: categoriesData[category]\n }))\n }]\n };\n }\n\n return (\n <InsightCard\n title={getPhrase('title')}\n svgName={cvSvgLibrary.Refresh}\n svgClassName='bg-light-indigo text-indigo'\n >\n <p>\n {averageAttempts\n ? <Text namespace={namespace} phrase='averageAttempts' options={{ attempts: averageAttempts }} />\n : <Text namespace={namespace} phrase='noAttempts'/>\n }\n </p>\n\n <div className='mt-auto'>\n <InsightChart label={getPhrase('attempts')} chartData={chartData} />\n </div>\n </InsightCard>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"redChart\":\"G7zOw\",\"yellowChart\":\"k34mm\",\"greenChart\":\"vBneA\",\"blueChart\":\"RPTWm\",\"grayChart\":\"k4JFZ\",\"borderDark\":\"LWor3\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { InsightChart } from 'libs/shared/apps/analytics/components/insight-chart/InsightChart';\nimport { ChartData } from 'libs/shared/apps/analytics/interfaces/ChartData';\nimport { StudentResultsWithSummary } from 'libs/shared/apps/analytics/interfaces/StudentResultsWithSummary';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './insight-average-score.scss';\n\nconst namespace = 'shared.insightAverageScore';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\n\ninterface InsightAverageScoreProps {\n students: StudentResultsWithSummary[];\n}\n\nexport function InsightAverageScore(props: InsightAverageScoreProps) {\n function getChartData(): ChartData {\n const scoreCount = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n const scorePercentageData = props.students.reduce((acc, value) => {\n const scoreIndex = Math.floor(value.summary.percentCorrect * 10);\n acc[scoreIndex]++;\n\n return acc;\n }, scoreCount);\n\n const PERCENTAGES = [ '0', '10', '20', '30', '40', '50', '60', '70', '80', '90', '100' ];\n // TODO Outline \n // const averageScore = scorePercentageData.reduce((acc, value) => {\n // return value > acc ? value : acc;\n // }, 0);\n // ${averageScore === score ? styles.borderDark : ''}\n\n return {\n categories: PERCENTAGES,\n series: [{\n type: 'column',\n color: '#4E9ACE',\n borderRadius: 4,\n data: scorePercentageData.map((score, index) => {\n const percentageCategory = Number(PERCENTAGES[index]);\n\n const getChartColour = (percentage: number, score: number) => {\n if (score === 0)\n return styles.grayChart;\n if (percentage < 50)\n return styles.redChart;\n if (percentage < 70)\n return styles.yellowChart;\n if (percentage < 90)\n return styles.greenChart;\n\n return styles.blueChart;\n };\n\n return {\n className: `${getChartColour(percentageCategory, score)} rounded`,\n y: score\n };\n })\n }]\n };\n }\n\n function getAverageNumbers() {\n const averageScores = props.students.map(student => student.summary.percentCorrect);\n const averagePercentage = averageScores.reduce((a, b) => a + b, 0) / averageScores.length;\n const totalQuestions = ArrayHelper.last(\n ArrayHelper.last(props.students).results\n ).attempts.length;\n\n return {\n averageScore: Math.round(totalQuestions * averagePercentage),\n totalQuestions,\n averagePercentage: Math.round((averagePercentage * 100) * 10) / 10\n };\n }\n\n return (\n <InsightCard\n title={getPhrase('title')}\n svgName={cvSvgLibrary.Chart}\n svgClassName='bg-light-orange text-orange'\n >\n <p>\n {props.students.length\n ? <Text namespace={namespace} phrase='averageScore' options={getAverageNumbers()} />\n : <Text namespace={namespace} phrase='noAnswers' />\n }\n </p>\n\n <InsightChart label={`${getPhrase('studentScores')} (%)`} chartData={getChartData()} />\n </InsightCard>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { InsightStudentList } from 'libs/shared/apps/analytics/components/insight-student-list/InsightStudentList';\nimport { StudentResultsWithSummary } from 'libs/shared/apps/analytics/interfaces/StudentResultsWithSummary';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.insightCompletedStudents';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightCompletedStudentsProps {\n students: StudentResultsWithSummary[];\n imageCdnUrl: string;\n imageUrl: string;\n resultsAppLink: Core.AppLink;\n anonymiseUsers: boolean;\n}\n\nexport function InsightCompletedStudents(props: InsightCompletedStudentsProps) {\n return (\n <InsightCard\n title={getPhrase('title')}\n svgName={cvSvgLibrary.Flag}\n svgClassName='bg-light-indigo text-indigo'\n count={props.students.length}\n >\n <InsightStudentList\n students={props.students.map(student => ({ ...student.user, percentage: student.summary.percentCorrect }))}\n imageCdnUrl={props.imageCdnUrl}\n imageUrl={props.imageUrl}\n description={getPhrase('completedStudents')}\n appLink={props.resultsAppLink}\n appLinkText={getPhrase('viewAll')}\n anonymiseUsers={props.anonymiseUsers}\n />\n </InsightCard>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { InteractionWithResultsSummary } from 'libs/shared/apps/analytics/interfaces/InteractionWithResultsSummary';\nimport { getInteractionResultsSummary } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { InteractionLabel } from 'libs/shared/components/interactive-questions/InteractionLabel';\nimport { PercentageIndicator, PercentageIndicatorLayout } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { getInteractions } from 'libs/shared/utils/InteractiveHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.insightEasiestQuestion';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightEasiestQuestionProps {\n interactive: Interactive;\n interactiveMetadata: InteractiveMetadata;\n results: InteractiveResultSet;\n questionsAppLink: Core.AppLink;\n}\n\nexport function InsightEasiestQuestion(props: InsightEasiestQuestionProps) {\n const easiestQuestion = getEasiestQuestion(props.interactive, props.results);\n\n function getEasiestQuestion(interactive: Interactive, results: InteractiveResultSet): InteractionWithResultsSummary {\n const interactions: InteractionWithResultsSummary[] = getInteractions(interactive).map(i => ({\n ...i,\n resultsSummary: getInteractionResultsSummary(i, results)\n }));\n\n const answeredInteractions = interactions.filter(i =>\n !!i.resultsSummary.answered && !i.resultsSummary.awaitingMarking);\n\n const sortedInteractions = ArrayHelper.sortBy(\n answeredInteractions,\n i => i.resultsSummary.percentCorrect\n );\n\n return ArrayHelper.last(sortedInteractions);\n }\n\n return (\n <InsightCard\n title={getPhrase('title')}\n subtitle={getPhrase('subtitle')}\n svgName={cvSvgLibrary.StarOutline}\n svgClassName='bg-light-blue text-blue'\n >\n <div className='d-flex align-items-center'>\n <PercentageIndicator\n percentage={easiestQuestion?.resultsSummary?.percentCorrect}\n layout={PercentageIndicatorLayout.LabelInside}\n />\n {easiestQuestion\n ? <div className='d-flex ms-2'>\n <InteractionLabel interaction={easiestQuestion} iconClassName='flex-shrink-0' />\n </div>\n : <span className='ms-2'>{getPhrase('noAnswers')}</span>\n }\n </div>\n\n {easiestQuestion && (\n <AppLink\n appLink={{\n ...props.questionsAppLink,\n params: {\n ...props.questionsAppLink.params as HashObject,\n sortBy: 'score_desc'\n }\n }}\n className='text-info'>\n <Text namespace={namespace} phrase='viewQuestions' />\n </AppLink>\n )}\n </InsightCard>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { InteractionWithResultsSummary } from 'libs/shared/apps/analytics/interfaces/InteractionWithResultsSummary';\nimport { getInteractionResultsSummary } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { InteractionLabel } from 'libs/shared/components/interactive-questions/InteractionLabel';\nimport { PercentageIndicator, PercentageIndicatorLayout } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { getInteractions } from 'libs/shared/utils/InteractiveHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.insightHardestQuestion';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightHardestQuestionProps {\n interactive: Interactive;\n interactiveMetadata: InteractiveMetadata;\n results: InteractiveResultSet;\n questionsAppLink: Core.AppLink;\n}\n\nexport function InsightHardestQuestion(props: InsightHardestQuestionProps) {\n const hardestQuestion = getHardestQuestion(props.interactive, props.results);\n\n function getHardestQuestion(interactive: Interactive, results: InteractiveResultSet): InteractionWithResultsSummary {\n const interactions: InteractionWithResultsSummary[] = getInteractions(interactive).map(i => ({\n ...i,\n resultsSummary: getInteractionResultsSummary(i, results)\n }));\n\n const answeredInteractions = interactions.filter(i =>\n !!i.resultsSummary.answered && !i.resultsSummary.awaitingMarking);\n\n const sortedInteractions = ArrayHelper.sortBy(\n answeredInteractions,\n i => i.resultsSummary.percentCorrect\n );\n\n return ArrayHelper.first(sortedInteractions);\n }\n\n return (\n <InsightCard\n title={getPhrase('title')}\n subtitle={getPhrase('subtitle')}\n svgName={cvSvgLibrary.QuestionMark}\n svgClassName='bg-light-orange text-orange'\n >\n <div className='d-flex align-items-center'>\n <PercentageIndicator\n percentage={hardestQuestion?.resultsSummary?.percentCorrect}\n layout={PercentageIndicatorLayout.LabelInside}\n />\n {hardestQuestion\n ? <div className='d-flex ms-2'>\n <InteractionLabel interaction={hardestQuestion} iconClassName='flex-shrink-0' />\n </div>\n : <span className='ms-2'>{getPhrase('noAnswers')}</span>\n }\n </div>\n\n {hardestQuestion && (\n <AppLink\n appLink={{\n ...props.questionsAppLink,\n params: {\n ...props.questionsAppLink.params as HashObject,\n sortBy: 'score_asc'\n }\n }}\n className='text-info'\n >\n <Text namespace={namespace} phrase='viewQuestions' />\n </AppLink>\n )}\n </InsightCard>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { InsightStudentList } from 'libs/shared/apps/analytics/components/insight-student-list/InsightStudentList';\nimport { StudentResultsWithSummary } from 'libs/shared/apps/analytics/interfaces/StudentResultsWithSummary';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.insightHighScoringStudents';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightHighScoringStudentsProps {\n students: StudentResultsWithSummary[];\n imageCdnUrl: string;\n greenChartImageUrl: string;\n resultsAppLink: Core.AppLink;\n completed: StudentResultsWithSummary[];\n anonymiseUsers?: boolean;\n}\n\nexport function InsightHighScoringStudents(props: InsightHighScoringStudentsProps) {\n return (\n <InsightCard\n title={getPhrase('title')}\n subtitle={getPhrase('subtitle')}\n svgName={cvSvgLibrary.Trophy}\n svgClassName='bg-light-teal text-teal'\n count={props.students.length}\n >\n <InsightStudentList\n students={props.students.map(student => ({ ...student.user, percentage: student.summary.percentCorrect }))}\n imageCdnUrl={props.imageCdnUrl}\n imageUrl={props.greenChartImageUrl}\n description={getPhrase(props.completed.length ? 'noStudents' : 'highScore')}\n appLink={{\n ...props.resultsAppLink,\n params: {\n ...props.resultsAppLink.params as HashObject,\n sortBy: 'score_desc'\n }\n }}\n appLinkText={getPhrase('viewByHighest')}\n anonymiseUsers={props.anonymiseUsers}\n />\n </InsightCard>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { InsightStudentList } from 'libs/shared/apps/analytics/components/insight-student-list/InsightStudentList';\nimport { StudentResultsWithSummary } from 'libs/shared/apps/analytics/interfaces/StudentResultsWithSummary';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.insightLowScoringStudents';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightLowScoringStudentsProps {\n students: StudentResultsWithSummary[];\n imageCdnUrl: string;\n redChartImageUrl: string;\n heartImageUrl: string;\n resultsAppLink: Core.AppLink;\n completed: StudentResultsWithSummary[];\n anonymiseUsers: boolean;\n}\n\nexport function InsightLowScoringStudents(props: InsightLowScoringStudentsProps) {\n return (\n <InsightCard\n title={getPhrase('title')}\n subtitle={getPhrase('subtitle')}\n svgName={cvSvgLibrary.Hand}\n // TODO add light red\n svgClassName='bg-light-red text-red'\n count={props.students.length}\n >\n <InsightStudentList\n students={props.students.map(student => ({ ...student.user, percentage: student.summary.percentCorrect }))}\n imageCdnUrl={props.imageCdnUrl}\n imageUrl={props.completed.length ? props.heartImageUrl : props.redChartImageUrl}\n description={getPhrase(props.completed.length ? 'doingWell' : 'lowScore')}\n appLink={{\n ...props.resultsAppLink,\n params: {\n ...props.resultsAppLink.params as HashObject,\n sortBy: 'score_asc'\n }\n }}\n appLinkText={getPhrase('viewByLowest')}\n anonymiseUsers={props.anonymiseUsers}\n />\n </InsightCard>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { InsightStudentList } from 'libs/shared/apps/analytics/components/insight-student-list/InsightStudentList';\nimport { User } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\n\nconst namespace = 'shared.insightMarkingRequired';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\n\ninterface InsightMarkingRequiredProps {\n students: User[];\n imageCdnUrl: string;\n imageUrl: string;\n resultsAppLink: Core.AppLink;\n anonymiseUsers: boolean;\n}\n\nexport function InsightMarkingRequired(props: InsightMarkingRequiredProps) {\n return (\n <InsightCard\n title={getPhrase('title')}\n svgName={cvSvgLibrary.Hand}\n svgClassName='bg-light-blue text-blue'\n count={props.students.length}\n >\n <InsightStudentList\n students={props.students}\n imageCdnUrl={props.imageCdnUrl}\n imageUrl={props.imageUrl}\n description={getPhrase('studentsRequireMarking')}\n appLink={props.resultsAppLink}\n appLinkText={getPhrase('viewAll')}\n anonymiseUsers={props.anonymiseUsers}\n />\n </InsightCard>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { InsightStudentList } from 'libs/shared/apps/analytics/components/insight-student-list/InsightStudentList';\nimport { StudentResultsWithSummary } from 'libs/shared/apps/analytics/interfaces/StudentResultsWithSummary';\nimport { User } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.insightNotCompletedStudents';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightNotCompletedStudentsProps {\n markingRequiredStudents: StudentResultsWithSummary[];\n completedStudents: StudentResultsWithSummary[];\n notCompletedStudents: StudentResultsWithSummary[];\n classroomStudents: User[];\n imageCdnUrl: string;\n imageUrl: string;\n resultsAppLink: Core.AppLink;\n anonymiseUsers: boolean;\n}\n\nexport function InsightNotCompletedStudents(props: InsightNotCompletedStudentsProps) {\n const notCompletedStudents = getNotCompletedStudents();\n\n function getNotCompletedStudents() {\n const markingRequiredStudentIds = props.markingRequiredStudents.map(student => student?.user.id);\n const completedStudentIds = props.completedStudents.map(student => student?.user.id);\n\n const notStartedStudents = props.classroomStudents.filter(student => {\n return !markingRequiredStudentIds.includes(student.id) &&\n !completedStudentIds.includes(student.id);\n });\n\n return ArrayHelper.uniq([\n ...props.notCompletedStudents.map(student => student.user),\n ...notStartedStudents\n ], 'id');\n }\n\n return (\n <InsightCard\n title={getPhrase('title')}\n svgName={cvSvgLibrary.Puzzle}\n svgClassName='bg-light-teal text-teal'\n count={notCompletedStudents.length}\n >\n <InsightStudentList\n students={notCompletedStudents}\n imageCdnUrl={props.imageCdnUrl}\n imageUrl={props.imageUrl}\n description={getPhrase('completed')}\n appLink={props.resultsAppLink}\n appLinkText={getPhrase('viewAll')}\n anonymiseUsers={props.anonymiseUsers}\n />\n </InsightCard>\n );\n}","import React from 'react';\n\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { InsightAverageAttempts } from 'libs/shared/apps/analytics/components/insights/average-attempts/InsightAverageAttempts';\nimport { InsightAverageScore } from 'libs/shared/apps/analytics/components/insights/average-score/InsightAverageScore';\nimport { InsightCompletedStudents } from 'libs/shared/apps/analytics/components/insights/completed-students/InsightCompletedStudents';\nimport { InsightEasiestQuestion } from 'libs/shared/apps/analytics/components/insights/easiest-question/InsightEasiestQuestion';\nimport { InsightHardestQuestion } from 'libs/shared/apps/analytics/components/insights/hardest-question/InsightHardestQuestion';\nimport { InsightHeatmap } from 'libs/shared/apps/analytics/components/insights/heatmap/InsightHeatmap';\nimport { InsightHighScoringStudents } from 'libs/shared/apps/analytics/components/insights/high-scoring-students/InsightHighScoringStudents';\nimport { InsightLowScoringStudents } from 'libs/shared/apps/analytics/components/insights/low-scoring-students/InsightLowScoringStudents';\nimport { InsightMarkingRequired } from 'libs/shared/apps/analytics/components/insights/marking-required/InsightMarkingRequired';\nimport { InsightNotCompletedStudents } from 'libs/shared/apps/analytics/components/insights/not-completed-students/InsightNotCompletedStudents';\nimport { useFetchInteractiveResults } from 'libs/shared/apps/analytics/hooks/UseFetchInteractiveResults';\nimport { StudentResultsWithSummary } from 'libs/shared/apps/analytics/interfaces/StudentResultsWithSummary';\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { getAudienceParams } from 'libs/shared/apps/analytics/utils/AudienceUtils';\nimport { getInsightsDateRangePresets, getStartEndParams } from 'libs/shared/apps/analytics/utils/DateRangeUtils';\nimport { groupStudents } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoViewRequests } from 'libs/shared/flight-requests/VideoViewRequests';\nimport { BasePaginatedCollection, Classroom, Config, CurrentUser, Engagement, Interactive, InteractiveMetadata, User } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { getInsightsInteractiveTabs } from 'apps/insights/utils/InsightsAppLinkUtils';\nimport { InsightsHeaderView } from 'apps/insights/views/header/InsightsHeaderView';\nimport { getInteractiveInsightsAppLinks } from 'apps/insights/views/interactive/overview/InteractiveInsightsOverviewUtils';\n\nconst namespace = 'insights.interactiveInsightsOverview';\n\ninterface InteractiveInsightsViewProps {\n interactiveId: string;\n classroomId?: string;\n}\n\nexport function InteractiveInsightsOverviewView(props: InteractiveInsightsViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const classroom = Flight.useBasicFetch<Classroom>(currentUser.data && props.classroomId &&\n ClassroomRequests.getClassroom(props.classroomId, currentUser.data.id));\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InteractiveRequests.interactiveMetadata(props.interactiveId)\n );\n\n const interactive = Flight.useBasicFetch<Interactive>(interactiveMetadata.data?.interactiveId &&\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId));\n\n const audienceAppLinkParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n const dateRangeAppLinkParams = AnalyticsFilterHelper.getDateRangeAppLinkParams();\n\n const results = useFetchInteractiveResults(props.interactiveId, {\n ...getStartEndParams(getInsightsDateRangePresets(), dateRangeAppLinkParams),\n ...getAudienceParams(audienceAppLinkParams)\n });\n\n const classroomFilterOnly =\n audienceAppLinkParams.classrooms?.length === 1 && !audienceAppLinkParams.classroomGroups?.length;\n const classroomStudents = Flight.useBasicFetch<BasePaginatedCollection<User>>(classroomFilterOnly &&\n ClassroomRequests.getClassroomStudents(ArrayHelper.first(audienceAppLinkParams.classrooms)));\n\n const aggregateEngagement = Flight.useBasicFetch<Engagement>(\n VideoViewRequests.aggregateEngagement(\n props.interactiveId,\n {\n ...getStartEndParams(getInsightsDateRangePresets(), dateRangeAppLinkParams),\n ...getAudienceParams(audienceAppLinkParams)\n },\n currentUser.data.id\n )\n );\n\n const hasDataLoaded =\n currentUser.data &&\n config.data &&\n (!props.classroomId || classroom.data) &&\n interactiveMetadata.data &&\n interactive.data &&\n results.data &&\n (!classroomFilterOnly || classroomStudents.data) &&\n aggregateEngagement.data;\n\n const studentGroups = hasDataLoaded && groupStudents(interactive.data, results.data);\n\n function getUsers(studentResult: StudentResultsWithSummary[]): User[] {\n return studentResult.map(student => student.user);\n }\n\n if (!hasDataLoaded) return <></>;\n const params = {\n ...audienceAppLinkParams,\n ...dateRangeAppLinkParams\n };\n const interactiveInsightsAppLinks = getInteractiveInsightsAppLinks(\n props.interactiveId\n );\n\n return (\n <div className='px-3'>\n <InsightsHeaderView\n video={interactiveMetadata.data}\n audienceAppLinkParams={audienceAppLinkParams}\n dateRangeAppLinkParams={dateRangeAppLinkParams}\n tabs={getInsightsInteractiveTabs(interactiveMetadata.data.id, 'overview', params)}\n />\n\n <section className='mb-5'>\n <h2 className='h4'>\n <Text namespace={namespace} phrase='studentResponses' />\n <span>: {studentGroups.completed.length}{classroomStudents.data ? `/${classroomStudents.data.data.length}` : ''}</span>\n </h2>\n\n <div className='row g-3'>\n <div className='col-12 col-md'>\n <InsightMarkingRequired\n imageUrl={ImageUrls.Insights.SPEECH_BUBBLE_ASTERISK}\n resultsAppLink={interactiveInsightsAppLinks.resultsAppLink}\n imageCdnUrl={config.data.imageCdnUrl}\n students={getUsers(studentGroups.markingRequired)}\n anonymiseUsers={anonymiseUsers}\n />\n </div>\n\n {classroomFilterOnly && (\n <div className='col-12 col-md'>\n <InsightNotCompletedStudents\n markingRequiredStudents={studentGroups.markingRequired}\n completedStudents={studentGroups.completed}\n notCompletedStudents={studentGroups.notCompleted}\n classroomStudents={classroomStudents.data.data}\n imageCdnUrl={config.data.imageCdnUrl}\n imageUrl={ImageUrls.Insights.JIGSAW}\n resultsAppLink={interactiveInsightsAppLinks.resultsAppLink}\n anonymiseUsers={anonymiseUsers}\n />\n </div>\n )}\n\n <div className='col-12 col-md'>\n <InsightCompletedStudents\n students={studentGroups.completed}\n imageCdnUrl={config.data.imageCdnUrl}\n imageUrl={ImageUrls.Insights.AVATAR}\n resultsAppLink={interactiveInsightsAppLinks.resultsAppLink}\n anonymiseUsers={anonymiseUsers}\n />\n </div>\n </div>\n </section>\n\n <section className='mb-5'>\n <h2 className='h4'>\n <Text namespace={namespace} phrase='studentsPerformance' />\n </h2>\n\n <div className='row g-3'>\n <div className='col-12 col-md-6'>\n <InsightLowScoringStudents\n redChartImageUrl={ImageUrls.Insights.RED_CHART}\n heartImageUrl={ImageUrls.Insights.SPEECH_BUBBLE_HEART}\n resultsAppLink={interactiveInsightsAppLinks.resultsAppLink}\n imageCdnUrl={config.data.imageCdnUrl}\n students={studentGroups.lowScore}\n completed={studentGroups.completed}\n anonymiseUsers={anonymiseUsers}\n />\n </div>\n <div className='col-12 col-md-6'>\n <InsightHighScoringStudents\n greenChartImageUrl={ImageUrls.Insights.GREEN_CHART}\n resultsAppLink={interactiveInsightsAppLinks.resultsAppLink}\n imageCdnUrl={config.data.imageCdnUrl}\n students={studentGroups.highScore}\n completed={studentGroups.completed}\n anonymiseUsers={anonymiseUsers}\n />\n </div>\n <div className='col-12 col-md-6'>\n <InsightHardestQuestion\n interactive={interactive.data}\n interactiveMetadata={interactiveMetadata.data}\n results={results.data}\n questionsAppLink={interactiveInsightsAppLinks.questionsAppLink}\n />\n </div>\n <div className='col-12 col-md-6'>\n <InsightEasiestQuestion\n interactive={interactive.data}\n interactiveMetadata={interactiveMetadata.data}\n results={results.data}\n questionsAppLink={interactiveInsightsAppLinks.questionsAppLink}\n />\n </div>\n </div>\n </section>\n\n <section className='mb-5'>\n <h2 className='h4'>\n <Text namespace={namespace} phrase='classPerformance' />\n </h2>\n\n <div className='row g-3'>\n <div className='col-12 col-md-6'>\n <InsightAverageScore\n students={studentGroups.completed}\n />\n </div>\n <div className='col-12 col-md-6'>\n <InsightAverageAttempts\n students={studentGroups.completed}\n />\n </div>\n <div className='col-12 col-md-6'>\n <InsightHeatmap\n engagement={aggregateEngagement.data}\n heatmapAppLink={interactiveInsightsAppLinks.heatmapAppLink}\n />\n </div>\n </div>\n </section>\n </div>\n );\n}","import { HashObject } from 'libs/common/react/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nexport function getInteractiveInsightsAppLinks(id: string, params?: HashObject) {\n return {\n resultsAppLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.INTERACTIVE_RESULTS,\n args: [id],\n params\n },\n questionsAppLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.INTERACTIVE_QUESTIONS,\n args: [id],\n params\n },\n heatmapAppLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.VIDEO_HEATMAP,\n args: [id],\n params\n }\n };\n}","// extracted by mini-css-extract-plugin\nexport default {\"removeRecipient\":\"mCbMC\",\"recipientItem\":\"kdcb0\",\"showSpinner\":\"xH6Mu\",\"avatarContainer\":\"Zcpg3\",\"recipientDetails\":\"v5EmV\",\"recipientDetailsWithRemoveButton\":\"_V928\"};"],"names":["namespace","ZERO_COLOUR","COLOUR_SCALE","LEGEND_VALUES","getBackgroundColor","value","max","hex","getGradient","data","gradient","i","length","previousValue","currentValue","nextValue","push","join","EngagementHeatMapLegend","Math","legendSquareWidthPercentage","className","Text","phrase","map","val","idx","key","style","width","backgroundColor","EngagementHeatMap","props","heatMap","engagement","background","InsightCard","svgClassName","SvgContainer","svgName","title","subtitle","count","children","MAX_ITEMS","InsightStudentList","students","slice","student","id","UserRecipientItemMetadata","user","imageCdnUrl","avatarClassName","detailsClassName","showDisplayName","showSubText","anonymiseUsers","undefined","percentage","round","PercentageIndicator","src","imageUrl","description","AppLink","appLink","appLinkText","getPhrase","LanguageService","InsightHeatmap","engagementRate","options","heatmapAppLink","getInteractiveResultFilters","currentUser","filter","currentUserId","currentCustomerId","customerId","dateRange","start","end","userIds","userId","classroomsAndGroups","groupId","InteractiveResultsRequests","interactiveResultSet","interactiveId","interactiveMetadataId","success","error","always","url","type","normalize","mark","answerId","resultId","invalidationKeys","pendingReviews","interactiveResultsReport","useFetchInteractiveResults","requestFilter","interactiveMetadata","interactive","shouldFetchResults","I","getFullHeatMap","Array","ceil","videoDuration","fill","t","groupStudents","results","groups","markingRequired","lowScore","highScore","completed","notCompleted","numInteractions","forEach","s","withSummary","summary","getStudentResultsSummary","awaitingMarking","attempts","percentCorrect","sortedLowScore","sortedHighScore","reverse","getInteractionById","interactionId","find","toString","getMarkedAnswerId","answer","questionId","getMarkedStatus","studentResults","markedAnswers","result","studentResponse","answers","every","a","status","getInteractionResultsSummary","interaction","numStudents","numCorrect","answered","unanswered","correctness","correct","interactions","interactionIds","Set","answeredInteractions","has","avatar","initials","name","surname","getSubText","userType","role","yearGroup","defaults","InteractionCorrectness","InteractiveAnswerStatus","VideoViewRequests","individualEngagement","objectId","sharerId","queryParams","formatData","d","aggregateEngagement","views","baseKey","timeOffset","notApplicable","isMissingWordCorrect","getStudentAnswer","items","actionableItems","isCorrect","trim","toLowerCase","isMultipleChoiceCorrect","studentAnswer","getGetStudentAnswer","attempt","wrapIsMultipleChoiceCorrect","text","wrapIsMarkableAnswerMarkedCorrect","item","isMarkableAnswerMarkedCorrect","IsCorrectLookup","InteractiveCorrectnessHelper","isInteractionCorrect","isCorrectFn","typeId","interactionRequiresAnswer","flattenInteractions","timepoints","getStudentResult","getStudentAttempt","getInteractions","getStaticChartOptions","label","credits","enabled","yAxis","labels","gridLineWidth","min","xAxis","color","fontSize","lineWidth","legend","chart","height","spacingTop","plotOptions","column","dataLabels","enableMouseTracking","minPointLength","InsightChart","highcharts","chartData","staticChartOptions","categories","series","InsightAverageAttempts","categoriesData","noAttempts","averageAttempts","reduce","acc","attemptsCategory","Object","assign","keys","getCategoriesData","borderRadius","fontWeight","inside","overflow","crop","category","y","InsightAverageScore","averageScores","averagePercentage","b","totalQuestions","ArrayHelper","averageScore","scorePercentageData","floor","PERCENTAGES","score","index","percentageCategory","Number","getChartColour","InsightCompletedStudents","resultsAppLink","InsightEasiestQuestion","sortedInteractions","easiestQuestion","resultsSummary","layout","InteractionLabel","iconClassName","questionsAppLink","params","sortBy","InsightHardestQuestion","hardestQuestion","InsightHighScoringStudents","greenChartImageUrl","InsightLowScoringStudents","heartImageUrl","redChartImageUrl","InsightMarkingRequired","InsightNotCompletedStudents","markingRequiredStudentIds","completedStudentIds","notStartedStudents","notCompletedStudents","markingRequiredStudents","completedStudents","classroomStudents","includes","InteractiveInsightsOverviewView","SharedViewModelKeys","UserRequests","config","ConfigRequests","classroom","classroomId","ClassroomRequests","InteractiveRequests","audienceAppLinkParams","dateRangeAppLinkParams","classroomFilterOnly","classrooms","classroomGroups","hasDataLoaded","studentGroups","studentResult","interactiveInsightsAppLinks","application","action","args","getInteractiveInsightsAppLinks","InsightsHeaderView","video","tabs","ImageUrls"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1683],{31754:(e,t,a)=>{a.d(t,{x:()=>o});var n=a(82602),r=a(75896),i=a(89682),c=a(11576),o={groupByDateShared:function(e){var t=r.m.groupBy(e,"dateShared");return Object.keys(t).sort().reverse().reduce((function(e,a){var r=(0,n.WU)(a);return e[r]||(e[r]=[]),e[r]=e[r].concat(t[a]),e}),{})},mapActivityStatusToCheckMarkStatus:function(e){switch(e){case c.T.Complete:return i.h.Complete;case c.T.Incomplete:return i.h.Incomplete;case c.T.None:return i.h.None}},mapCheckMarkStatusToActivityStatus:function(e){switch(e){case i.h.Complete:return c.T.Complete;case i.h.Incomplete:return c.T.Incomplete;case i.h.None:return c.T.None}}}},83657:(e,t,a)=>{a.d(t,{e:()=>s});var n=a(32735),r=a(91967),i=a(10874),c=a(36532),o=a(42735),l=a(86509);function s(e){var t=n.useMemo((function(){return e.actions.sort((function(e,t){return e.order-t.order}))}),[e.actions]),a=[],s=[];t.forEach((function(e){e.button?a.push(e):s.push(e)}));var m="d-flex";return e.className&&(m+=" ".concat(e.className)),a.length||s.length?n.createElement("div",{className:m},a.length?a.map((function(t,a){return n.createElement(n.Fragment,{key:a},function(){if(t.label){var a=r.q.isFunction(t.label)?t.label:function(){return n.createElement(n.Fragment,null,t.label)};return n.createElement(o.K,{appLink:t.appLink,href:t.href,onClick:t.onClick,svgName:t.svgName,svgSize:e.dropdownToggleSvgSize,className:t.className,tooltip:t.tooltip,showSpinner:t.showSpinner,analyticsData:t.analyticsData,analyticsOptions:t.analyticsOptions,openInNewTab:t.openInNewTab,disabled:t.disabled},a())}var l=n.createElement(i.h,{appLink:t.appLink,href:t.href,onClick:t.onClick,svgName:t.svgName,className:t.className,analyticsData:t.analyticsData,analyticsOptions:t.analyticsOptions,openInNewTab:t.openInNewTab,disabled:t.disabled,showBorder:t.showBorder,customSize:e.customSize,ariaLabel:t.tooltip});return t.tooltip?n.createElement(c.u,{title:t.tooltip,spanHack:!0},l):l}())})):n.createElement(n.Fragment,null),e.sortComponent&&e.sortComponent,s.length?n.createElement(l.m,{actions:s,dropdownToggleClassName:e.actionsDropdownClassName,dropdownToggleSvgSize:e.dropdownToggleSvgSize,fetchMore:e.fetchMore}):n.createElement(n.Fragment,null)):n.createElement(n.Fragment,null)}},86509:(e,t,a)=>{a.d(t,{m:()=>v});var n=a(32735),r=a(91967),i=a(81886),c=a(45157),o=a(49985),l=a(36848),s=a(83914),m=a(36532),u=a(35223);const d={dropdownToggle:"UCAnJ"};function p(){return n.createElement(n.Fragment,null,n.createElement("div",{style:{padding:"0.53125rem 1rem"}},n.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"8rem"}})),n.createElement("div",{style:{padding:"0.53125rem 1rem"}},n.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"12rem"}})),n.createElement("div",{style:{padding:"0.53125rem 1rem"}},n.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"11rem"}})),n.createElement("div",{style:{padding:"0.53125rem 1rem"}},n.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"9rem"}})))}function h(e){var t="dropdown-item";return e&&(t+=" ".concat(e)),t}function g(e){var t=r.q.isFunction(e.action.label)?e.action.label:function(){return n.createElement(n.Fragment,null,e.action.label)};if(e.action.appLink)return n.createElement(l.F,{appLink:e.action.appLink,onClick:e.action.onClick,className:h(e.action.className),analyticsData:e.action.analyticsData,analyticsOptions:e.action.analyticsOptions,openInNewTab:e.action.openInNewTab,disabled:e.action.disabled},e.action.svgName&&n.createElement(s.x,{svgName:e.action.svgName,className:"d-inline-block svg-container me-2 align-middle"}),n.createElement("span",{className:"align-middle"},t()));function a(t){t.preventDefault(),e.action.analyticsData&&e.action.analyticsOptions&&o.k.logUserAction(e.action.analyticsData,e.action.analyticsOptions),r.q.isFunction(e.action.onClick)&&e.action.onClick(),e.action.href&&i.Q.Ab.PageLoad(e.action.href,e.action.openInNewTab)}return e.action.href?n.createElement("a",{className:h(e.action.className),onClick:a,href:e.action.href},e.action.svgName&&n.createElement(s.x,{svgName:e.action.svgName,className:"d-inline-block svg-container me-2 align-middle"}),n.createElement("span",{className:"align-middle"},t())):n.createElement("span",{className:"cursor-pointer ".concat(h(e.action.className)),onClick:a,role:"button",tabIndex:0,onKeyDown:function(e){return"Enter"===e.key&&a(e)}},e.action.svgName&&n.createElement(s.x,{svgName:e.action.svgName,className:"d-inline-block svg-container me-2"}),t())}function v(e){if(!e.actions||!e.actions.length)return n.createElement(n.Fragment,null);var t=e.actions.some((function(e){return e.lazyPlaceholder})),a="dropdown";e.className&&(a+=" ".concat(e.className));var r,i="actions-dropdown-".concat(c.Y.getRandomInt()),o="dropdown-toggle px-0 ".concat(d.dropdownToggle);return e.dropdownToggleClassName&&(o+=" ".concat(e.dropdownToggleClassName)),n.createElement("div",{className:a},n.createElement("button",{className:o,type:"button",id:i,"data-bs-toggle":"dropdown","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-label":"More actions dropdown",onClick:t?e.fetchMore:null},n.createElement(s.x,{svgName:u.vn.More,size:e.dropdownToggleSvgSize})),n.createElement("ul",{className:"dropdown-menu dropdown-menu-end dropdown-menu-right font-size-normal","aria-labelledby":i},t?n.createElement(p,null):e.actions.map((function(e,t){var a=void 0!==r&&r!==e.group;return r=e.group,e.tooltip?n.createElement("li",{key:t},a&&n.createElement("hr",{className:"dropdown-divider",role:"separator"}),n.createElement(m.u,{title:e.tooltip,spanHack:!0},n.createElement(g,{action:e}))):n.createElement("li",{key:t},a&&n.createElement("hr",{className:"dropdown-divider",role:"separator"}),n.createElement(g,{action:e}))}))))}v.defaultProps={dropdownToggleClassName:"btn btn-light",dropdownToggleSvgSize:s.S.Small}},38502:(e,t,a)=>{a.d(t,{r:()=>u});var n=a(32735),r=a(49985),i=a(36848),c=a(18559),o=a(11607),l=a(83914),s=a(87432);function m(e){return n.createElement(n.Fragment,null,!!e.tab.svgName&&n.createElement("div",{className:e.tab.name?"pe-1":""},n.createElement(l.x,{svgName:e.tab.svgName})),e.tab.name,"number"==typeof e.tab.count&&n.createElement("div",{className:"ps-2"},n.createElement(c.C,{type:c.g.Count,data:e.tab.count})))}function u(e){var t;return n.createElement("nav",{className:null!==(t=e.className)&&void 0!==t?t:"",ref:e.containerRef},n.createElement("ul",{className:"\n list-unstyled d-inline-block m-0 ".concat(s.Z.pillTabSelector,"\n ").concat(e.borderRadius?s.Z.radiusSmall:"","\n ").concat(e.listClassName,"\n ")},e.tabs.map((function(e,t){return n.createElement("li",{className:"\n p-0 ".concat(s.Z.tab," ").concat(e.active?"btn btn-dark":"btn btn-outline-dark","\n ").concat(e.name?s.Z.minWidth:""," ").concat(e.className,"\n "),key:t},e.appLink?n.createElement(i.F,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(s.Z.tabLink,"\n ")},n.createElement(m,{tab:e})):n.createElement(o.L,{className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(s.Z.tabLink,"\n "),onClick:function(){return function(e){!e.active&&e.onSelect&&(e.onSelect(),e.analyticsData&&e.analyticsOptions&&r.k.logUserAction(e.analyticsData,e.analyticsOptions))}(e)}},n.createElement(m,{tab:e})))}))))}u.defaultProps={borderRadius:"lg"}},36511:(e,t,a)=>{a.d(t,{I:()=>r});var n=a(40424);function r(e){switch(e){case n.R.Pink:return"pink";case n.R.Orange:return"orange";case n.R.Green:return"green";case n.R.Blue:return"blue";case n.R.Purple:return"purple";case n.R.Indigo:return"indigo";default:return"pink"}}},2523:(e,t,a)=>{a.d(t,{w:()=>p});var n=a(32735),r=a(23481),i=a(81886),c=a(38502),o=a(75795),l=a(14070),s=a(97291),m=r.T.encloseNamespace("share.sharesHeader"),u={application:s.O.MY_SHARES,action:l.e.MyShares.SHARED_BY_ME},d={application:s.O.MY_SHARES,action:l.e.MyShares.SHARED_WITH_ME};function p(){return n.createElement("div",{className:"pb-3"},n.createElement("h1",{className:"h2 mb-3"},m("shares")),n.createElement(c.r,{tabs:(t=null===(e=o.O.getCurrentRoute())||void 0===e?void 0:e.appLink,[{name:m("sharedByMe"),onSelect:function(){return i.Q.C$.trigger(u)},active:(null==t?void 0:t.action)===u.action},{name:m("sharedWithMe"),onSelect:function(){return i.Q.C$.trigger(d)},active:(null==t?void 0:t.action)===d.action}])}));var e,t}},47047:(e,t,a)=>{a.r(t),a.d(t,{SharedByMeView:()=>ae});var n=a(32735),r=a(70680),i=a(23481),c=a(20354),o=a(75896),l=a(23232),s=i.T.encloseNamespace("share.sharedByMeEmptyState");function m(e){return n.createElement(l.u,null,n.createElement(l.u.Image,{src:e.imageUrl,size:"small"}),n.createElement(l.u.Heading,null,s(e.useInteractiveCopy?"interactivesHeading":"genericHeading")),n.createElement(l.u.Info,null,s(e.useInteractiveCopy?"interactivesInfo":"genericInfo")),!!e.appLink&&n.createElement(l.u.Cta,{appLink:e.appLink,text:s("cta")}))}var u=a(95834),d=a(69674),p=a(82602),h=a(110),g=a(65858),v=a(83914),f=a(36532),b=a(49080),y=a(85063),E=a(35223);const N={indicatorContainer:"T6YAv",indicator:"_MRHG"};var k=i.T.encloseNamespace("share.shareStatusIndicator");function S(e){if(e.type===y.y.DirectShare)return k("active");switch(e.status){case b.F.Active:return k("active");case b.F.Expired:return k("expired")}}function w(e){if(e.type===y.y.DirectShare)return"bg-success";switch(e.status){case b.F.Active:return"bg-success";case b.F.Expired:return"bg-gray-500"}}function C(e){var t;return e.share.type!==y.y.DirectShare||(null===(t=e.share.recipients)||void 0===t?void 0:t.length)?e.share.type===y.y.ShareLink&&e.share.isPasswordProtected?n.createElement(f.u,{title:k("passwordProtected"),spanHack:!0},n.createElement(v.x,{svgName:E.vn.Lock,size:v.S.Small})):n.createElement(f.u,{title:S(e.share),spanHack:!0,spanHackClassName:N.indicatorContainer},n.createElement("div",{className:"".concat(N.indicator," ").concat(w(e.share))})):n.createElement(n.Fragment,null)}var T=a(29024),x=a(40391),O=a(31754),M=a(64249),I=a(83657),L=a(36848),D=a(83345),F=a(31908);function H(e){return H="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},H(e)}var R="share.sharedByMeTable",A=i.T.encloseNamespace(R);function B(e){var t;if(e.type===y.y.ShareLink||!(null===(t=null==e?void 0:e.recipients)||void 0===t?void 0:t.length))return e.dateCreated;var a=e.recipients.map((function(e){return e.dateShared}));return a.sort((function(e,t){return h.O.isSame(e,t)?0:h.O.isAfter(e,t)?1:-2})),a.length?o.m.last(a):""}function j(e,t,a,r,i,c,o,l){var s=l&&(l.xs||l.sm),m=[{Header:c?"":t,accessor:"sharedObject",id:"image",Cell:function(e){var t=e.value;return n.createElement("div",{className:"w-100"},n.createElement(T.k,{object:t,appLink:a(t),showVideoMetadata:!0,locationContext:g.LZ.SharedByMe}))},minWidth:140,maxWidth:30},{accessor:"sharedObject",id:"name",Cell:function(e){var t,r=e.value;return r.name?F.M.isVideoType(r)&&!(null===(t=F.M.getCanBeConsumed(r))||void 0===t?void 0:t.canNavigate)?n.createElement("span",{className:"clamp-2"},r.name):n.createElement(L.F,{appLink:a(r),className:"clamp-2",analyticsData:{id:r.id,name:r.name},analyticsOptions:{entity:M.I.getAnalyticsEntity(r.type),actionType:g.Vw.Click,location:g.LZ.SharedByMe}},r.name):n.createElement("span",null,n.createElement(D.x,{namespace:R,phrase:"videoUnavailable"}))},width:60},{Header:0===e?A("sharedTo"):"",accessor:"shareRecipients",Cell:function(e){var t=e.value;return t?t.length?n.createElement(x.Kh,{recipients:t,imageCdnUrl:i,maxAvatars:s?1:2}):n.createElement(x.m9,null):n.createElement(x.Ad,null)},width:40},!s&&{Header:0===e?A("shared"):"",id:"dateShared",accessor:function(e){return(0,p.WU)(e.dateShared)},width:40},{accessor:"sharedObject",id:"actions",Cell:function(e){var t=e.value;return n.createElement(I.e,{actions:r(t),className:"w-100 justify-content-end pe-2"})},width:20}],u={Header:t,accessor:"share",id:"status",Cell:function(e){var t=e.value;return n.createElement(C,{share:t})},width:5},d={Header:A("views"),accessor:"viewCount",width:30};return c&&m.splice(0,0,u),o&&m.splice(m.length-1,0,d),m.filter(Boolean)}var z=n.memo((function(e){var t,a,r,i,c,o=(t=e.sentShares,a=e.sharedObjects,r=e.shareRecipients,i=!!e.groupByDateShared,c=!!e.refreshTable,n.useMemo((function(){var e,n,c,o=[];return t.forEach((function(e){var t,n,i=a.find((function(t){return t.id===e.objectId})),c=null;e.type===y.y.DirectShare&&(c=[],null===(t=e.recipients)||void 0===t||t.forEach((function(e){var t=r.find((function(t){return t.id===e.id}));t&&c.push(t)}))),i&&o.push({share:e,sharedObject:i,shareRecipients:c,dateShared:B(e),viewCount:null!==(n=e.viewCount)&&void 0!==n?n:0})})),i?O.x.groupByDateShared(o):(e={},n=A("title"),c=o,(n=function(e){var t=function(e,t){if("object"!=H(e)||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var n=a.call(e,"string");if("object"!=H(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==H(t)?t:t+""}(n))in e?Object.defineProperty(e,n,{value:c,enumerable:!0,configurable:!0,writable:!0}):e[n]=c,e)}),[c]));return n.createElement(n.Fragment,null,Object.keys(o).map((function(t,a){return n.createElement(d.i,{key:a,columns:j(a,t,e.getObjectAppLink,e.getObjectActions,e.imageCdnUrl,e.showStatus,e.showViewCount,e.breakpoints),data:o[t],theme:u.J})})))})),U=a(30439),_=a(71020),P=a(39151),W=a(31949),Z=a(39902),V=a(79967),Y=a(60115),q=a(79612),G=a(66607),J=a(99742),K=a(14070),Q=a(97291),$=a(2523),X=a(82202),ee=a(63153),te=i.T.encloseNamespace("liteShare.sharedByMe");function ae(){var e,t=(0,r.I0)(),a=(0,V.k)(),i=c.a.useBasicFetch(W.N.currentUser()),l=function(e){return U.o.sentShare({cursor:e})},s=function(e){return c.a.getFetch(t)(l(e))},u=(0,Y.K)(l,s),d=u.items,p=u.hasMore,h=u.isFetching,g=u.nextCursor,v=o.m.uniq(null!==(e=null==d?void 0:d.map((function(e){return e.objectId})))&&void 0!==e?e:[]),f=(0,Z.f)(v,(function(e){return U.o.sharedObjectsById(e)})),b=G.x.getRecipientIds(d),y=(0,Z.f)(b,(function(e){return U.o.getRecipientsById(e,i.data.customerId)})),E=c.a.useBasicFetch(P.L.config());(0,q.M)({title:te("sharedByMe")});var N=(0,ee.UG)(a),k=(0,ee.o0)(d,!!f.items,b,!!y.items,E),S=h||f.isFetching||y.isFetching,w=n.useMemo((function(){return d}),[!!d,S]),C=n.useMemo((function(){return(0,ee.bT)(f)}),[!!f.items,S]),T=n.useMemo((function(){return(0,ee.bT)(y)}),[!!y.items,S]);return n.createElement("div",{className:"px-3"},n.createElement($.w,null),k?n.createElement(X.N,null):d.length?n.createElement(n.Fragment,null,n.createElement(z,{sentShares:w,sharedObjects:C,shareRecipients:T,getObjectAppLink:ee.Qh,getObjectActions:N,imageCdnUrl:E.data.imageCdnUrl,groupByDateShared:!0,refreshTable:S,breakpoints:a}),(p||S)&&n.createElement(_._,{isFetching:S,fetchNext:s,nextCursor:g})):n.createElement(m,{appLink:{application:Q.O.DASHBOARD,action:K.e.Dashboard.HOME},imageUrl:J.W.EmptyStates.Share.SHARED_WITH_ME}))}},87432:(e,t,a)=>{a.d(t,{Z:()=>n});const n={pillTabSelector:"Hdi6o",tab:"RvNxr",minWidth:"GHSz9",radiusSmall:"VhJJa",tabLink:"WFyvo"}}}]);
2
- //# sourceMappingURL=1683-57c0175d4e-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/1683-57c0175d4e-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/share/utils/ShareHelper.ts","file:///app/packages/libs/shared/src/components/actions/Actions.tsx","file:///app/packages/libs/shared/src/components/actions/actions.scss","file:///app/packages/libs/shared/src/components/actions/ActionsDropdown.tsx","file:///app/packages/libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx","file:///app/packages/libs/shared/src/utils/GroupHelper.ts","file:///app/packages/projects/lite/src/apps/share/components/shares-header/SharesHeader.tsx","file:///app/packages/libs/shared/src/apps/share/components/shared-by-me/empty-state/SharedByMeEmptyState.tsx","file:///app/packages/libs/shared/src/apps/share/components/shared-by-me/share-status-indicator/share-status-indicator.scss","file:///app/packages/libs/shared/src/apps/share/components/shared-by-me/share-status-indicator/ShareStatusIndicator.tsx","file:///app/packages/libs/shared/src/apps/share/components/shared-by-me/table/SharedByMeTableUtils.tsx","file:///app/packages/libs/shared/src/apps/share/components/shared-by-me/table/SharedByMeTable.tsx","file:///app/packages/projects/lite/src/apps/share/views/shared-by-me/SharedByMeView.tsx","file:///app/packages/libs/shared/src/components/pill-tab-selector/pill-tab-selector.scss"],"sourcesContent":["import { format } from 'timeago.js';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { CheckMarkStatus } from 'libs/shared/components/check-mark-button/CheckMarkButton';\nimport { ShareActivityStatus } from 'libs/shared/enums/ShareActivityStatus';\n\ninterface ObjectWithDateShared {\n dateShared: string;\n}\n\ntype GroupedByDate<T extends ObjectWithDateShared> = { [date: string]: T[] };\n\nexport const ShareHelper = {\n groupByDateShared<T extends ObjectWithDateShared>(data: T[]): GroupedByDate<T> {\n const dateToObjectMapping: GroupedByDate<T> = ArrayHelper.groupBy(data, 'dateShared');\n\n const sortedDates = Object.keys(dateToObjectMapping).sort().reverse();\n\n // Create a sorted mapping between dates and the \"ObjectWithDateShared\" objects\n return sortedDates.reduce((acc: GroupedByDate<T>, date) => {\n const heading = format(date);\n\n if (!acc[heading])\n acc[heading] = [];\n\n acc[heading] = acc[heading].concat(dateToObjectMapping[date]);\n return acc;\n }, {});\n },\n\n mapActivityStatusToCheckMarkStatus(activityStatus: ShareActivityStatus): CheckMarkStatus {\n switch (activityStatus) {\n case ShareActivityStatus.Complete:\n return CheckMarkStatus.Complete;\n case ShareActivityStatus.Incomplete:\n return CheckMarkStatus.Incomplete;\n case ShareActivityStatus.None:\n return CheckMarkStatus.None;\n }\n },\n\n mapCheckMarkStatusToActivityStatus(checkMarkStatus: CheckMarkStatus): ShareActivityStatus {\n switch (checkMarkStatus) {\n case CheckMarkStatus.Complete:\n return ShareActivityStatus.Complete;\n case CheckMarkStatus.Incomplete:\n return ShareActivityStatus.Incomplete;\n case CheckMarkStatus.None:\n return ShareActivityStatus.None;\n }\n }\n};","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nimport { ActionButton } from './ActionButton';\nimport { ActionsDropdown } from './ActionsDropdown';\n\nexport interface ActionOptions {\n order?: number;\n label?: string | (() => JSX.Element);\n appLink?: Core.AppLink;\n href?: string;\n onClick?: () => void;\n svgName?: string;\n className?: string;\n button?: boolean; // If true, a button will be rendered. Otherwise the action will be rendered in the dropdown.\n tooltip?: string;\n showSpinner?: boolean;\n showBorder?: boolean; // only works for button without text label\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n disabled?: boolean;\n openInNewTab?: boolean; // Only used if appLink or href is provided\n group?: string;\n lazyPlaceholder?: boolean;\n}\n\nexport type ActionGenerator = (obj: BaseObject) => ActionOptions[];\n\ninterface ActionsProps {\n actions: ActionOptions[];\n className?: string;\n actionsDropdownClassName?: string;\n dropdownToggleSvgSize?: SvgContainerSize;\n sortComponent?: JSX.Element;\n customSize?: boolean;\n fetchMore?: () => void;\n}\n\nexport function Actions(props: ActionsProps): JSX.Element {\n const orderedActions = React.useMemo(() => props.actions.sort((a, b) => a.order - b.order), [props.actions]);\n\n const buttonActions: ActionOptions[] = [];\n const moreActions: ActionOptions[] = [];\n\n orderedActions.forEach(a => {\n if (a.button)\n buttonActions.push(a);\n else\n moreActions.push(a);\n });\n\n let className = 'd-flex';\n\n if (props.className)\n className += ` ${props.className}`;\n\n if (!buttonActions.length && !moreActions.length)\n return <></>;\n\n return (\n <div className={className}>\n {buttonActions.length ? buttonActions.map((a, idx) => (\n <React.Fragment key={idx}>\n {(() => {\n if (a.label) {\n const label = FunctionHelper.isFunction(a.label)\n ? a.label\n : () => <>{a.label}</>;\n\n return (\n <ActionButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svgName={a.svgName}\n svgSize={props.dropdownToggleSvgSize}\n className={a.className}\n tooltip={a.tooltip}\n showSpinner={a.showSpinner}\n analyticsData={a.analyticsData}\n analyticsOptions={a.analyticsOptions}\n openInNewTab={a.openInNewTab}\n disabled={a.disabled}\n >\n {label()}\n </ActionButton>\n );\n }\n\n const iconButton = (\n <IconButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svgName={a.svgName}\n className={a.className}\n analyticsData={a.analyticsData}\n analyticsOptions={a.analyticsOptions}\n openInNewTab={a.openInNewTab}\n disabled={a.disabled}\n showBorder={a.showBorder}\n customSize={props.customSize}\n ariaLabel={a.tooltip}\n />\n );\n\n return a.tooltip\n ? <Tooltip title={a.tooltip} spanHack>{iconButton}</Tooltip>\n : iconButton;\n })()}\n </React.Fragment>\n )) : <></>}\n {props.sortComponent && props.sortComponent}\n {moreActions.length ? (\n <ActionsDropdown\n actions={moreActions}\n dropdownToggleClassName={props.actionsDropdownClassName}\n dropdownToggleSvgSize={props.dropdownToggleSvgSize}\n fetchMore={props.fetchMore}\n />\n ) : <></>}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"dropdownToggle\":\"UCAnJ\"};","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { RandomHelper } from 'libs/common/react/utils/RandomHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ActionOptions } from './Actions';\n\nimport styles from './actions.scss';\n\nfunction LazyDropdownItems(): JSX.Element {\n return (\n <>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '8rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '12rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '11rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '9rem' }}></div>\n </div>\n </>\n );\n}\n\nfunction getDropdownItemClassName(actionClassName?: string): string {\n let className = 'dropdown-item';\n\n if (actionClassName)\n className += ` ${actionClassName}`;\n\n return className;\n}\n\nexport type DropdownActionOptions = Omit<ActionOptions, 'button'>;\n\ninterface ActionsDropdownItemProps {\n action: DropdownActionOptions;\n}\n\nfunction ActionsDropdownItem(props: ActionsDropdownItemProps): React.ReactElement {\n const label = FunctionHelper.isFunction(props.action.label)\n ? props.action.label\n : () => <>{props.action.label}</>;\n\n if (props.action.appLink)\n return (\n <AppLink\n appLink={props.action.appLink}\n onClick={props.action.onClick}\n className={getDropdownItemClassName(props.action.className)}\n analyticsData={props.action.analyticsData}\n analyticsOptions={props.action.analyticsOptions}\n openInNewTab={props.action.openInNewTab}\n disabled={props.action.disabled}\n >\n {props.action.svgName && <SvgContainer svgName={props.action.svgName} className='d-inline-block svg-container me-2 align-middle' />}\n <span className='align-middle'>{label()}</span>\n </AppLink>\n );\n\n function onClick(e: React.MouseEvent | React.KeyboardEvent): void {\n e.preventDefault();\n\n if (props.action.analyticsData && props.action.analyticsOptions)\n AnalyticsHelper.logUserAction(props.action.analyticsData, props.action.analyticsOptions);\n\n if (FunctionHelper.isFunction(props.action.onClick))\n props.action.onClick();\n\n if (props.action.href)\n Core.LocationUtils.PageLoad(props.action.href, props.action.openInNewTab);\n }\n\n if (props.action.href) {\n return (\n <a\n className={getDropdownItemClassName(props.action.className)}\n onClick={onClick}\n href={props.action.href}\n >\n {props.action.svgName && <SvgContainer svgName={props.action.svgName} className='d-inline-block svg-container me-2 align-middle' />}\n <span className='align-middle'>{label()}</span>\n </a>\n );\n }\n\n return (\n <span\n className={`cursor-pointer ${getDropdownItemClassName(props.action.className)}`}\n onClick={onClick}\n role='button'\n tabIndex={0}\n onKeyDown={(e: React.KeyboardEvent) => e.key === 'Enter' && onClick(e)}\n >\n {props.action.svgName && <SvgContainer svgName={props.action.svgName} className='d-inline-block svg-container me-2' />}\n {label()}\n </span>\n );\n}\n\ninterface ActionsDropdownProps {\n actions: DropdownActionOptions[];\n className?: string;\n dropdownToggleClassName?: string;\n dropdownToggleSvgSize?: SvgContainerSize;\n fetchMore?: () => void;\n}\n\nActionsDropdown.defaultProps = {\n dropdownToggleClassName: 'btn btn-light',\n dropdownToggleSvgSize: SvgContainerSize.Small\n};\n\nexport function ActionsDropdown(props: ActionsDropdownProps): React.ReactElement {\n if (!props.actions || !props.actions.length)\n return <></>;\n\n const isLazy = props.actions.some(a => a.lazyPlaceholder);\n\n let className = 'dropdown';\n\n if (props.className)\n className += ` ${props.className}`;\n\n // Generate unique id to avoid collisions.\n const dropdownToggleId = `actions-dropdown-${RandomHelper.getRandomInt()}`;\n\n let dropdownToggleClassName = `dropdown-toggle px-0 ${styles.dropdownToggle}`;\n\n if (props.dropdownToggleClassName)\n dropdownToggleClassName += ` ${props.dropdownToggleClassName}`;\n\n let currentGroup: string;\n\n return (\n <div className={className}>\n <button\n className={dropdownToggleClassName}\n type='button'\n id={dropdownToggleId}\n data-bs-toggle='dropdown'\n data-toggle='dropdown'\n aria-haspopup='true'\n aria-expanded='false'\n aria-label={'More actions dropdown'}\n onClick={isLazy ? props.fetchMore : null}\n >\n <SvgContainer svgName={cvSvgLibrary.More} size={props.dropdownToggleSvgSize} />\n </button>\n <ul className='dropdown-menu dropdown-menu-end dropdown-menu-right font-size-normal' aria-labelledby={dropdownToggleId}>\n {isLazy ?\n <LazyDropdownItems /> :\n props.actions.map((a, idx) => {\n const showDivider = currentGroup !== undefined && currentGroup !== a.group;\n currentGroup = a.group;\n \n if (a.tooltip) {\n return (\n <li key={idx}>\n {showDivider && <hr className='dropdown-divider' role='separator'></hr>}\n <Tooltip title={a.tooltip} spanHack>\n <ActionsDropdownItem action={a} />\n </Tooltip>\n \n </li>\n );\n }\n \n return (\n <li key={idx}>\n {showDivider && <hr className='dropdown-divider' role='separator'></hr>}\n <ActionsDropdownItem action={a} />\n </li>\n );\n })\n }\n </ul>\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport { SvgContainer } from '../svg-container/SvgContainer';\n\nimport styles from './pill-tab-selector.scss';\n\ninterface TabContentsProps {\n tab: PillTab;\n}\n\nfunction TabContents(props: TabContentsProps): JSX.Element {\n return (\n <>\n {!!props.tab.svgName && (\n <div className={props.tab.name ? 'pe-1' : ''}>\n <SvgContainer svgName={props.tab.svgName} />\n </div>\n )}\n\n {props.tab.name}\n\n {typeof (props.tab.count) === 'number' && (\n <div className='ps-2'>\n <Badge type={BadgeType.Count} data={props.tab.count} />\n </div>\n )}\n </>\n );\n}\n\nexport interface PillTab {\n name: string;\n active: boolean;\n svgName?: string;\n\n className?: string;\n\n appLink?: Core.AppLink;\n onSelect?: () => void;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n count?: number;\n}\n\ninterface PillTabSelectorProps {\n tabs: PillTab[];\n containerRef?: (el: HTMLElement) => void;\n listClassName?: string;\n className?: string;\n borderRadius?: 'sm' | 'lg'\n}\n\nPillTabSelector.defaultProps = {\n borderRadius: 'lg'\n};\n\nexport function PillTabSelector(props: PillTabSelectorProps): JSX.Element {\n function onSelectTab(tab: PillTab): void {\n if (tab.active || !tab.onSelect)\n return;\n\n tab.onSelect();\n\n if (tab.analyticsData && tab.analyticsOptions)\n AnalyticsHelper.logUserAction(tab.analyticsData, tab.analyticsOptions);\n }\n\n return (\n <nav className={props.className ?? ''} ref={props.containerRef}>\n <ul className={`\n list-unstyled d-inline-block m-0 ${styles.pillTabSelector}\n ${props.borderRadius ? styles.radiusSmall : ''}\n ${props.listClassName}\n `}>\n {props.tabs.map((tab, index) => {\n return (\n <li\n className={`\n p-0 ${styles.tab} ${tab.active ? 'btn btn-dark' : 'btn btn-outline-dark'}\n ${tab.name ? styles.minWidth : ''} ${tab.className}\n `}\n key={index}\n >\n {tab.appLink ? (\n <AppLink\n appLink={tab.appLink}\n analyticsData={tab.analyticsData}\n analyticsOptions={tab.analyticsOptions}\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n >\n <TabContents tab={tab} />\n </AppLink>\n ) : (\n <DivButton\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n onClick={() => onSelectTab(tab)}\n >\n <TabContents tab={tab} />\n </DivButton>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n );\n}\n","import { ButtonProps } from 'react-bootstrap';\n\nimport { ClassroomGroupColour } from 'libs/shared/interfaces';\n\nexport function mapColourToBsVariant(groupColour: ClassroomGroupColour): ButtonProps['variant'] {\n switch (groupColour) {\n case ClassroomGroupColour.Pink:\n return 'pink';\n case ClassroomGroupColour.Orange:\n return 'orange';\n case ClassroomGroupColour.Green:\n return 'green';\n case ClassroomGroupColour.Blue:\n return 'blue';\n case ClassroomGroupColour.Purple:\n return 'purple';\n case ClassroomGroupColour.Indigo:\n return 'indigo';\n default:\n return 'pink';\n }\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { PillTab, PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { ContextService } from 'libs/shared/services/ContextService';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'share.sharesHeader';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst SHARED_BY_ME_APP_LINK = { application: AppChannels.MY_SHARES, action: Actions.MyShares.SHARED_BY_ME };\nconst SHARED_WITH_ME_APP_LINK = { application: AppChannels.MY_SHARES, action: Actions.MyShares.SHARED_WITH_ME };\n\nfunction getPillTabs(): PillTab[] {\n const currentAppLink = ContextService.getCurrentRoute()?.appLink;\n\n return [\n {\n name: getPhrase('sharedByMe'),\n onSelect: () => Core.AppLinkHelper.trigger(SHARED_BY_ME_APP_LINK),\n active: currentAppLink?.action === SHARED_BY_ME_APP_LINK.action\n },\n {\n name: getPhrase('sharedWithMe'),\n onSelect: () => Core.AppLinkHelper.trigger(SHARED_WITH_ME_APP_LINK),\n active: currentAppLink?.action === SHARED_WITH_ME_APP_LINK.action\n }\n ];\n}\n\nexport function SharesHeader(): JSX.Element {\n return (\n <div className='pb-3'>\n <h1 className='h2 mb-3'>{getPhrase('shares')}</h1>\n <PillTabSelector tabs={getPillTabs()} />\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 { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nconst namespace = 'share.sharedByMeEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SharedByMeEmptyStateProps {\n imageUrl: string;\n appLink?: Core.AppLink;\n useInteractiveCopy?: boolean;\n}\n\nexport function SharedByMeEmptyState(props: SharedByMeEmptyStateProps): JSX.Element {\n return (\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} size='small'/>\n <EmptyState.Heading>\n {getPhrase(props.useInteractiveCopy ? 'interactivesHeading' : 'genericHeading')}\n </EmptyState.Heading>\n <EmptyState.Info>{getPhrase(props.useInteractiveCopy ? 'interactivesInfo' : 'genericInfo')}</EmptyState.Info>\n {!!props.appLink &&\n <EmptyState.Cta appLink={props.appLink} text={getPhrase('cta')} />\n }\n </EmptyState>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"indicatorContainer\":\"T6YAv\",\"indicator\":\"_MRHG\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { ShareLinkStatus } from 'libs/shared/enums/ShareLinkStatus';\nimport { ShareType } from 'libs/shared/enums/ShareType';\nimport { UnionShareObject } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './share-status-indicator.scss';\n\nconst namespace = 'share.shareStatusIndicator';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getStatusPhrase(share: UnionShareObject): string {\n if (share.type === ShareType.DirectShare)\n return getPhrase('active');\n\n switch (share.status) {\n case ShareLinkStatus.Active:\n return getPhrase('active');\n\n case ShareLinkStatus.Expired:\n return getPhrase('expired');\n }\n}\n\nfunction getBgColourClassName(share: UnionShareObject): string {\n if (share.type === ShareType.DirectShare)\n return 'bg-success';\n \n switch (share.status) {\n case ShareLinkStatus.Active:\n return 'bg-success';\n\n case ShareLinkStatus.Expired:\n return 'bg-gray-500';\n }\n}\n\ninterface ShareStatusIndicatorProps {\n share: UnionShareObject;\n}\n\n/**\n * TODO: add support for deleted share links (currently the api doesn't return these.)\n */\nexport function ShareStatusIndicator(props: ShareStatusIndicatorProps): JSX.Element {\n if (props.share.type === ShareType.DirectShare && !props.share.recipients?.length)\n return <></>;\n\n if (props.share.type === ShareType.ShareLink && props.share.isPasswordProtected) {\n return (\n <Tooltip title={getPhrase('passwordProtected')} spanHack>\n <SvgContainer svgName={cvSvgLibrary.Lock} size={SvgContainerSize.Small} />\n </Tooltip>\n );\n }\n\n return (\n <Tooltip\n title={getStatusPhrase(props.share)}\n spanHack\n spanHackClassName={styles.indicatorContainer}\n >\n <div className={`${styles.indicator} ${getBgColourClassName(props.share)}`} />\n </Tooltip>\n );\n}","import React from 'react';\nimport { Column } from 'react-table';\nimport { format as formatDate } from 'timeago.js';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport {\n ShareStatusIndicator\n} from 'libs/shared/apps/share/components/shared-by-me/share-status-indicator/ShareStatusIndicator';\nimport { SharedObjectImage } from 'libs/shared/apps/share/components/shared-object-image/SharedObjectImage';\nimport {\n AnonymousSharedToAvatar,\n SharedLinkAvatar,\n SharedToAvatarList\n} from 'libs/shared/apps/share/components/shared-to-avatar-list/SharedToAvatarList';\nimport { ShareHelper } from 'libs/shared/apps/share/utils/ShareHelper';\nimport { SharableEntity, ShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ShareType } from 'libs/shared/enums/ShareType';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject, UnionShareObject } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nconst namespace = 'share.sharedByMeTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getDateShared(share: UnionShareObject): string {\n if (share.type === ShareType.ShareLink || !share?.recipients?.length)\n return share.dateCreated;\n\n const datesShared = share.recipients.map(r => r.dateShared);\n\n datesShared.sort((date1, date2) => {\n if (DateHelper.isSame(date1, date2))\n return 0;\n\n return DateHelper.isAfter(date1, date2) ? 1 : -2;\n });\n\n\n if (!datesShared.length)\n return '';\n\n return ArrayHelper.last(datesShared);\n}\n\ninterface SharedByMeTableData {\n share: UnionShareObject;\n sharedObject: SharableEntity;\n dateShared: string;\n shareRecipients?: BaseObject[];\n viewCount: number;\n}\n\ntype TableDataGroupings = { [date: string]: SharedByMeTableData[] };\n\nexport function getColumns(\n index: number,\n dateHeading: string,\n getObjectAppLink: (object: BaseObject) => Core.AppLink,\n getObjectActions: (object: BaseObject) => ActionOptions[],\n imageCdnUrl: string,\n showStatus?: boolean,\n showViewCount?: boolean,\n breakpoints?: Breakpoints\n): Column<SharedByMeTableData>[] {\n const isMobile = breakpoints && (breakpoints.xs || breakpoints.sm);\n\n const columns: Column<SharedByMeTableData>[] = [\n {\n Header: showStatus ? '' : dateHeading,\n accessor: 'sharedObject',\n id: 'image',\n Cell: ({ value }) => (\n <div className='w-100'>\n <SharedObjectImage\n object={value}\n appLink={getObjectAppLink(value)}\n showVideoMetadata\n locationContext={LocationContext.SharedByMe}\n />\n </div>\n ),\n minWidth: 140,\n maxWidth: 30\n },\n {\n accessor: 'sharedObject',\n id: 'name',\n Cell: ({ value }) => {\n if (value.name) {\n if (VideoHelper.isVideoType(value) && !VideoHelper.getCanBeConsumed(value)?.canNavigate) {\n return (\n <span className='clamp-2'>\n {value.name}\n </span>\n );\n }\n\n return (\n <AppLink\n appLink={getObjectAppLink(value)}\n className='clamp-2'\n analyticsData={{ id: value.id, name: value.name }}\n analyticsOptions={{\n entity: ShareViewHelper.getAnalyticsEntity(value.type),\n actionType: UserAction.Click,\n location: LocationContext.SharedByMe\n }}\n >\n {value.name}\n </AppLink>\n );\n }\n\n return <span><Text namespace={namespace} phrase='videoUnavailable' /></span>;\n },\n width: 60\n },\n {\n Header: index === 0 ? getPhrase('sharedTo') : '',\n accessor: 'shareRecipients',\n Cell: ({ value }) => {\n if (!value)\n return <SharedLinkAvatar />;\n\n if (!value.length)\n return <AnonymousSharedToAvatar />;\n\n return <SharedToAvatarList recipients={value} imageCdnUrl={imageCdnUrl} maxAvatars={isMobile ? 1 : 2} />;\n },\n width: 40\n },\n !isMobile && {\n Header: index === 0 ? getPhrase('shared') : '',\n id: 'dateShared',\n accessor: s => formatDate(s.dateShared),\n width: 40\n },\n {\n accessor: 'sharedObject',\n id: 'actions',\n Cell: ({ value }) => (\n <Actions\n actions={getObjectActions(value)}\n className='w-100 justify-content-end pe-2'\n />\n ),\n width: 20\n }\n ];\n\n const statusColumn: Column<SharedByMeTableData> = {\n Header: dateHeading,\n accessor: 'share',\n id: 'status',\n Cell: ({ value }) => (\n <ShareStatusIndicator share={value} />\n ),\n width: 5\n };\n\n const viewCountColumn: Column<SharedByMeTableData> = {\n Header: getPhrase('views'),\n accessor: 'viewCount',\n width: 30\n };\n\n if (showStatus)\n columns.splice(0, 0, statusColumn);\n\n if (showViewCount)\n columns.splice(columns.length - 1, 0, viewCountColumn);\n \n return columns.filter((Boolean));\n}\n\nexport function useGetData(\n sentShares: UnionShareObject[],\n sharedObjects: BaseObject[],\n shareRecipients: BaseObject[],\n groupByDate: boolean,\n refreshTable: boolean\n): TableDataGroupings {\n return React.useMemo(() => {\n const tableData: SharedByMeTableData[] = [];\n\n sentShares.forEach(s => {\n const sharedObject = sharedObjects.find(o => o.id === s.objectId);\n\n let recipients: BaseObject[] | null = null;\n\n if (s.type === ShareType.DirectShare) {\n recipients = [];\n\n s.recipients?.forEach(r => {\n const recipient = shareRecipients.find(s => s.id === r.id);\n\n if (recipient)\n recipients.push(recipient);\n });\n }\n\n // Skip if we don't have access to the shared object (e.g. if it's been deleted)\n if (sharedObject)\n tableData.push({\n share: s,\n sharedObject,\n shareRecipients: recipients,\n dateShared: getDateShared(s),\n viewCount: s.viewCount ?? 0\n });\n });\n\n if (!groupByDate)\n return { [getPhrase('title')]: tableData };\n\n return ShareHelper.groupByDateShared(tableData);\n }, [refreshTable]);\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { SHARES_TABLE_THEME } from 'libs/shared/apps/share/constants/TableTheme';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Table } from 'libs/shared/components/table/Table';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject, UnionShareObject } from 'libs/shared/interfaces';\n\nimport { getColumns, useGetData } from './SharedByMeTableUtils';\n\ninterface SharedByMeTableProps {\n sentShares: UnionShareObject[];\n sharedObjects: BaseObject[];\n shareRecipients: BaseObject[];\n getObjectAppLink: (object: BaseObject) => Core.AppLink;\n getObjectActions: (object: BaseObject) => ActionOptions[];\n imageCdnUrl: string;\n groupByDateShared?: boolean;\n showStatus?: boolean;\n showViewCount?: boolean;\n refreshTable?: boolean;\n breakpoints?: Breakpoints;\n}\n\nfunction SharedByMeTableMemo(props: SharedByMeTableProps): JSX.Element {\n const data = useGetData(\n props.sentShares,\n props.sharedObjects,\n props.shareRecipients,\n !!props.groupByDateShared,\n !!props.refreshTable\n );\n\n return (\n <>\n {Object.keys(data).map((heading, index) => (\n <Table\n key={index}\n columns={getColumns(\n index,\n heading,\n props.getObjectAppLink,\n props.getObjectActions,\n props.imageCdnUrl,\n props.showStatus,\n props.showViewCount,\n props.breakpoints\n )}\n data={data[heading]}\n theme={SHARES_TABLE_THEME}\n />\n ))}\n </>\n );\n}\n\nexport const SharedByMeTable = React.memo(SharedByMeTableMemo);","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { SharedByMeEmptyState } from 'libs/shared/apps/share/components/shared-by-me/empty-state/SharedByMeEmptyState';\nimport { SharedByMeTable } from 'libs/shared/apps/share/components/shared-by-me/table/SharedByMeTable';\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, CurrentUser, UnionShareObject } from 'libs/shared/interfaces';\nimport { ShareHelper } from 'libs/shared/utils/ShareHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { SharesHeader } from 'apps/share/components/shares-header/SharesHeader';\n\nimport { PartialSharedByMeTable } from './partial-loading/PartialSharedByMeTable';\nimport {\n getBatchFetchResultAsArray,\n getObjectAppLink,\n useGetSharedObjectActions,\n usePartialLoading\n} from './SharedByMeViewUtils';\n\nconst namespace = 'liteShare.sharedByMe';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function SharedByMeView(): JSX.Element {\n const dispatch = useDispatch();\n const breakpoints = useBreakpoints();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const getRequest = (cursor?: string) => ShareRequests.sentShare({ cursor });\n const fetchNext = (cursor?: string) => Flight.getFetch(dispatch)(getRequest(cursor));\n\n const {\n items: sentShares,\n hasMore,\n isFetching: isFetchingSentShares,\n nextCursor\n } = useInfiniteList<UnionShareObject>(getRequest, fetchNext);\n\n const sharedObjectIds = ArrayHelper.uniq(sentShares?.map(s => s.objectId) ?? []);\n\n const sharedObjectsFetchResult = useBatchFetch(sharedObjectIds, (ids: string[]) => {\n return ShareRequests.sharedObjectsById(ids);\n });\n\n const recipientIds = ShareHelper.getRecipientIds(sentShares);\n\n const shareRecipientsFetchResult = useBatchFetch(recipientIds, (ids: string[]) => {\n return ShareRequests.getRecipientsById(ids, currentUser.data.customerId);\n });\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n \n useSetPageMetadata({ title: getPhrase('sharedByMe') });\n\n const getSharedObjectActions = useGetSharedObjectActions(breakpoints);\n\n const showPartialLoading = usePartialLoading(\n sentShares,\n !!sharedObjectsFetchResult.items,\n recipientIds,\n !!shareRecipientsFetchResult.items,\n config\n );\n\n // Wait until all data is fetched before telling the table to re-render\n const isFetching = isFetchingSentShares\n || sharedObjectsFetchResult.isFetching\n || shareRecipientsFetchResult.isFetching;\n\n const sentSharesMemo = React.useMemo(() => sentShares, [ !!sentShares, isFetching ]);\n const sharedObjects = React.useMemo(() =>\n getBatchFetchResultAsArray(sharedObjectsFetchResult), [ !!sharedObjectsFetchResult.items, isFetching ]);\n const shareRecipients = React.useMemo(() =>\n getBatchFetchResultAsArray(shareRecipientsFetchResult), [ !!shareRecipientsFetchResult.items, isFetching ]);\n\n return (\n <div className='px-3'>\n <SharesHeader />\n\n {(() => {\n if (showPartialLoading)\n return <PartialSharedByMeTable />;\n\n if (!sentShares.length)\n return (\n <SharedByMeEmptyState\n appLink={{ application: AppChannels.DASHBOARD, action: Actions.Dashboard.HOME }}\n imageUrl={ImageUrls.EmptyStates.Share.SHARED_WITH_ME}\n />\n );\n\n return (\n <>\n <SharedByMeTable\n sentShares={sentSharesMemo}\n sharedObjects={sharedObjects}\n shareRecipients={shareRecipients}\n getObjectAppLink={getObjectAppLink}\n getObjectActions={getSharedObjectActions}\n imageCdnUrl={config.data.imageCdnUrl}\n groupByDateShared\n refreshTable={isFetching}\n breakpoints={breakpoints}\n />\n {(hasMore || isFetching) &&\n <InfiniteScrollFooter isFetching={isFetching} fetchNext={fetchNext} nextCursor={nextCursor} />\n }\n </>\n );\n })()}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"pillTabSelector\":\"Hdi6o\",\"tab\":\"RvNxr\",\"minWidth\":\"GHSz9\",\"radiusSmall\":\"VhJJa\",\"tabLink\":\"WFyvo\"};"],"names":["ShareHelper","groupByDateShared","data","dateToObjectMapping","Object","keys","sort","reverse","reduce","acc","date","heading","concat","mapActivityStatusToCheckMarkStatus","activityStatus","mapCheckMarkStatusToActivityStatus","checkMarkStatus","Actions","props","orderedActions","actions","a","b","order","buttonActions","moreActions","forEach","button","push","className","length","map","idx","key","label","appLink","href","onClick","svgName","svgSize","dropdownToggleSvgSize","tooltip","showSpinner","analyticsData","analyticsOptions","openInNewTab","disabled","iconButton","showBorder","customSize","ariaLabel","title","spanHack","sortComponent","dropdownToggleClassName","actionsDropdownClassName","fetchMore","LazyDropdownItems","style","padding","height","width","getDropdownItemClassName","actionClassName","ActionsDropdownItem","FunctionHelper","action","AppLink","SvgContainer","e","preventDefault","AnalyticsHelper","role","tabIndex","onKeyDown","ActionsDropdown","isLazy","some","lazyPlaceholder","currentGroup","dropdownToggleId","RandomHelper","type","id","size","showDivider","undefined","group","Tooltip","defaultProps","S","TabContents","tab","name","count","PillTabSelector","ref","containerRef","borderRadius","listClassName","tabs","index","active","onSelect","onSelectTab","mapColourToBsVariant","groupColour","getPhrase","SHARED_BY_ME_APP_LINK","application","SHARED_WITH_ME_APP_LINK","SharesHeader","currentAppLink","LanguageService","SharedByMeEmptyState","EmptyState","src","imageUrl","useInteractiveCopy","text","getStatusPhrase","share","ShareType","status","ShareLinkStatus","getBgColourClassName","ShareStatusIndicator","recipients","isPasswordProtected","spanHackClassName","getDateShared","dateCreated","datesShared","r","dateShared","date1","date2","DateHelper","ArrayHelper","getColumns","dateHeading","getObjectAppLink","getObjectActions","imageCdnUrl","showStatus","showViewCount","breakpoints","isMobile","xs","sm","columns","Header","accessor","Cell","value","SharedObjectImage","object","showVideoMetadata","locationContext","minWidth","maxWidth","VideoHelper","canNavigate","entity","ShareViewHelper","actionType","location","Text","namespace","phrase","SharedToAvatarList","maxAvatars","s","statusColumn","viewCountColumn","splice","filter","Boolean","SharedByMeTable","sentShares","sharedObjects","shareRecipients","groupByDate","refreshTable","tableData","sharedObject","find","o","objectId","recipient","viewCount","Table","theme","SharedByMeView","dispatch","useBreakpoints","currentUser","UserRequests","getRequest","cursor","ShareRequests","fetchNext","items","hasMore","isFetchingSentShares","isFetching","nextCursor","sharedObjectIds","sharedObjectsFetchResult","ids","recipientIds","shareRecipientsFetchResult","customerId","config","ConfigRequests","useSetPageMetadata","getSharedObjectActions","showPartialLoading","sentSharesMemo","PartialSharedByMeTable","InfiniteScrollFooter","ImageUrls"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1734],{71553:(e,t,n)=>{n.d(t,{I:()=>s});var a=n(99940),r=n(62875);function i(e,t){return{currentUserId:e.id,currentCustomerId:e.customerId,dateRange:{start:t.start,end:t.end},userIds:t.userId,classroomsAndGroups:t.groupId}}var s={interactiveResultSet:function(e,t,n,s,c,l,o){return{url:"/api/domain/v2/analytics/interactives/".concat(e,"/metadata/").concat(t),key:(0,r.H)("interactive:result:set:".concat(e,":").concat(t),s),data:i(n,s),type:a.k.POST,normalize:!1,success:c,error:l,always:o}},mark:function(e,t,n,r,i,s,c){return{url:"/api/domain/v1/analytics/answers/".concat(n),key:"mark:answer:".concat(n,":").concat(r.resultId),type:a.k.PUT,data:r,normalize:!1,invalidationKeys:"interactive:result:set:".concat(e,":").concat(t),success:i,error:s,always:c}},pendingReviews:function(e){return{url:"/api/domain/v1/analytics/interactives/pending-reviews/summary",key:"interactives:pending:reviews",type:a.k.POST,data:e}},interactiveResultsReport:function(e){return{url:"{gateway}/v2/analytics/interactives/report",key:"interactive:results:report",data:e,type:a.k.POST,normalize:!1}}}},83657:(e,t,n)=>{n.d(t,{e:()=>o});var a=n(32735),r=n(91967),i=n(10874),s=n(36532),c=n(42735),l=n(86509);function o(e){var t=a.useMemo((function(){return e.actions.sort((function(e,t){return e.order-t.order}))}),[e.actions]),n=[],o=[];t.forEach((function(e){e.button?n.push(e):o.push(e)}));var u="d-flex";return e.className&&(u+=" ".concat(e.className)),n.length||o.length?a.createElement("div",{className:u},n.length?n.map((function(t,n){return a.createElement(a.Fragment,{key:n},function(){if(t.label){var n=r.q.isFunction(t.label)?t.label:function(){return a.createElement(a.Fragment,null,t.label)};return a.createElement(c.K,{appLink:t.appLink,href:t.href,onClick:t.onClick,svgName:t.svgName,svgSize:e.dropdownToggleSvgSize,className:t.className,tooltip:t.tooltip,showSpinner:t.showSpinner,analyticsData:t.analyticsData,analyticsOptions:t.analyticsOptions,openInNewTab:t.openInNewTab,disabled:t.disabled},n())}var l=a.createElement(i.h,{appLink:t.appLink,href:t.href,onClick:t.onClick,svgName:t.svgName,className:t.className,analyticsData:t.analyticsData,analyticsOptions:t.analyticsOptions,openInNewTab:t.openInNewTab,disabled:t.disabled,showBorder:t.showBorder,customSize:e.customSize,ariaLabel:t.tooltip});return t.tooltip?a.createElement(s.u,{title:t.tooltip,spanHack:!0},l):l}())})):a.createElement(a.Fragment,null),e.sortComponent&&e.sortComponent,o.length?a.createElement(l.m,{actions:o,dropdownToggleClassName:e.actionsDropdownClassName,dropdownToggleSvgSize:e.dropdownToggleSvgSize,fetchMore:e.fetchMore}):a.createElement(a.Fragment,null)):a.createElement(a.Fragment,null)}},64071:(e,t,n)=>{n.d(t,{i:()=>c});var a=n(32735),r=n(23481),i=n(23232),s=r.T.encloseNamespace("insights.insightsListEmptyState");function c(e){return a.createElement(i.u,null,a.createElement(i.u.Image,{src:e.imageUrl,size:"small"}),a.createElement(i.u.Heading,null,s(e.useInteractiveCopy?"interactivesHeading":"genericHeading")),a.createElement(i.u.Info,null,s(e.useInteractiveCopy?"interactivesInfo":"genericInfo")),!!e.appLink&&a.createElement(i.u.Cta,{appLink:e.appLink,text:s("cta")}))}},70835:(e,t,n)=>{n.d(t,{G:()=>C});var a=n(32735),r=n(95834),i=n(69674),s=n(82602),c=n(23481),l=n(75896),o=n(110),u=n(65858),d=n(29024),p=n(40391),m=n(64249),v=n(83657),g=n(36848),f=n(83914),h=n(83345),y=n(4594),E=n(85063),I=n(35223),b=n(31908),k="insights.insightsListTable",S=c.T.encloseNamespace(k);function w(e){var t;if(e.type===E.y.ShareLink||!(null===(t=null==e?void 0:e.recipients)||void 0===t?void 0:t.length))return e.dateCreated;var n=e.recipients.map((function(e){return e.dateShared}));return n.sort((function(e,t){return o.O.isSame(e,t)?0:o.O.isAfter(e,t)?1:-2})),n.length?l.m.last(n):""}var C=a.memo((function(e){var t,n,c,l,o,C,N,O,L,T,A,j=(t=e.sentShares,n=e.sharedObjects,c=e.shareRecipients,l=e.interactivesPendingReviews,o=e.dependencies,a.useMemo((function(){var e=[];return t.forEach((function(t){var a,r,i=n.find((function(e){return e.id===t.objectId})),s=null;if(t.type===E.y.DirectShare&&(s=[],null===(a=t.recipients)||void 0===a||a.forEach((function(e){var t=c.find((function(t){return t.id===e.id}));t&&s.push(t)}))),i){var o=i.typeId===y.E.Interactive&&(null==l?void 0:l.find((function(e){return e.interactiveId===i.interactiveId})));e.push({share:t,sharedObject:i,shareRecipients:s,dateShared:w(t),viewCount:null!==(r=t.viewCount)&&void 0!==r?r:0,pendingReview:null==o?void 0:o.pendingReviewCount})}})),e}),o));return a.createElement(a.Fragment,null,a.createElement(i.i,{columns:(C=e.getObjectAppLink,N=e.getObjectActions,O=e.imageCdnUrl,L=e.breakpoints,T=e.hideViews,A=L&&(L.xs||L.sm||L.md),[{Header:S("title"),accessor:"sharedObject",id:"image",Cell:function(e){var t=e.value;return a.createElement("div",{className:"w-100"},a.createElement(d.k,{object:t,appLink:C(t),showVideoMetadata:!0,locationContext:u.LZ.SharedByMe}))},minWidth:140,maxWidth:30},{accessor:"sharedObject",id:"name",Cell:function(e){var t,n,r=e.value,i=e.row,s=e.data;if(r.name){if(b.M.isVideoType(r)&&!(null===(t=b.M.getCanBeConsumed(r))||void 0===t?void 0:t.canNavigate))return a.createElement("span",{className:"clamp-2"},r.name);var c=null===(n=s[i.index])||void 0===n?void 0:n.pendingReview;return a.createElement("div",null,a.createElement(g.F,{appLink:C(r),className:"clamp-2",analyticsData:{id:r.id,name:r.name},analyticsOptions:{entity:m.I.getAnalyticsEntity(r.type),actionType:u.Vw.Click,location:u.LZ.SharedByMe}},r.name),!!c&&a.createElement("div",{className:"bg-light-indigo text-dark-blue fw-semibold font-size-sm rounded-pill w-fit mt-1 px-2"},a.createElement(h.x,{namespace:k,phrase:"requireMarking",options:{count:c}})))}return a.createElement("span",null,a.createElement(h.x,{namespace:k,phrase:"videoUnavailable"}))},width:100},{Header:S("sharedTo"),accessor:"shareRecipients",Cell:function(e){var t=e.value;return t?t.length?a.createElement(p.Kh,{recipients:t,imageCdnUrl:O,maxAvatars:A?1:2}):a.createElement(p.m9,null):a.createElement(p.Ad,null)},width:30},!T&&{Header:S("views"),accessor:"share",Cell:function(e){var t=e.value;return a.createElement("div",{className:"d-flex align-items-center"},a.createElement(f.x,{svgName:I.vn.User}),a.createElement("span",null,t.accessedCount,t.totalAccessible?"/".concat(t.totalAccessible):""))},width:30},!A&&{Header:S("shared"),id:"dateShared",accessor:function(e){return(0,s.WU)(e.dateShared)},width:40},{accessor:"sharedObject",id:"actions",Cell:function(e){var t=e.value;return a.createElement(v.e,{actions:N(t),className:"w-100 justify-content-end align-items-center gap-2",actionsDropdownClassName:"bg-transparent",dropdownToggleSvgSize:f.S.Standard})},width:40}].filter(Boolean)),data:j,theme:r.J}))}))},64734:(e,t,n)=>{n.r(t),n.d(t,{InsightsListView:()=>P});var a=n(32735),r=n(70680),i=n(39202),s=n(23481),c=n(20354),l=n(75896),o=n(71553),u=n(26025),d=n(65961),p=n(30439),m=n(71020),v=n(83345),g=n(4594),f=n(39151),h=n(31949),y=n(39902),E=n(79967),I=n(60115),b=n(79612),k=n(66607),S=n(99742),w=n(14070),C=n(97291),N=n(64071),O=n(70835),L=n(36848);function T(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var A="insights.insightsTypeFilters",j=s.T.encloseNamespace(A);function F(e){return a.createElement("div",{className:"d-flex align-items-center"},a.createElement("p",{className:"h6 mb-0"},a.createElement(v.x,{namespace:A,phrase:"filters"})),a.createElement("div",{className:"d-flex border-start border-light ps-3 ms-3 gap-2"},a.createElement(x,{typeId:g.E.Video,typeFilters:e.typeIdParams,appLink:e.appLink}),a.createElement(x,{typeId:g.E.Clip,typeFilters:e.typeIdParams,appLink:e.appLink}),a.createElement(x,{typeId:g.E.Interactive,typeFilters:e.typeIdParams,appLink:e.appLink})))}function x(e){var t,n,r=e.typeFilters.includes(e.typeId),i=e.appLink,s=i.params;t=r?e.typeFilters.filter((function(t){return t!==e.typeId})):[].concat(function(e){if(Array.isArray(e))return T(e)}(n=e.typeFilters)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(n)||function(e,t){if(e){if("string"==typeof e)return T(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)?T(e,t):void 0}}(n)||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.")}(),[e.typeId]);var c=Object.assign(Object.assign({},i),{params:Object.assign(Object.assign({},s),{typeId:t})});function l(){return e.typeId===g.E.Video?"videos":e.typeId===g.E.Clip?"clips":e.typeId===g.E.Interactive?"interactives":void 0}return a.createElement(L.F,{className:"btn ".concat(r?"btn-dark":"btn-outline-dark"),appLink:c,ariaLabel:"".concat(j("ariaFilterBy"),": ").concat(j(l()))},a.createElement(v.x,{namespace:A,phrase:l()}))}var M=n(23120),R=n(82202),V=n(63153);function B(e){return function(e){if(Array.isArray(e))return H(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return H(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?H(e,t):void 0}}(e)||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 H(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var U="lite.insightsList",D=s.T.encloseNamespace(U);function P(){var e,t=(0,r.I0)(),n=(0,E.k)(),s=c.a.useBasicFetch(h.N.currentUser()),L=i.C$.getCurrentAppLink(),T=(0,M.w)(L),A=u.B.getAudienceAppLinkParams(),j=function(e){return p.o.sentShare(Object.assign({cursor:e},(t=[g.E.Video,g.E.Interactive,g.E.Clip],{recipientUserId:null==A?void 0:A.users,recipientGroupId:[].concat(B((null==A?void 0:A.classroomGroups)||[]),B((null==A?void 0:A.classrooms)||[])),objectTypeId:T.length?T:t})));var t},x=function(e){return c.a.getFetch(t)(j(e))},H=(0,I.K)(j,x),P=H.items,z=H.hasMore,_=H.isFetching,G=H.nextCursor,W=l.m.uniq(null!==(e=null==P?void 0:P.map((function(e){return e.objectId})))&&void 0!==e?e:[]),K=(0,y.f)(W,(function(e){return p.o.sharedObjectsById(e)})),q=(null==K?void 0:K.items)&&Object.keys(K.items).reduce((function(e,t){if(K.items[t].typeId!==g.E.Interactive)return e;var n=K.items[t];return[].concat(B(e),[{metadataId:n.id,interactiveId:n.interactiveId}])}),[]),J=c.a.useBasicFetch((null==K?void 0:K.items)&&s.data&&o.I.pendingReviews({interactives:q,filters:{currentCustomerId:s.data.customerId,currentUserId:s.data.id}})),$=k.x.getRecipientIds(P),Z=(0,y.f)($,(function(e){return p.o.getRecipientsById(e,s.data.customerId)})),Q=c.a.useBasicFetch(f.L.config());(0,b.M)({title:D("insights")});var X=(0,M.j)(n,A),Y=(0,V.o0)(P,!!K.items,$,!!Z.items,Q),ee=_||K.isFetching||Z.isFetching||J.isFetching,te=JSON.stringify(L.params),ne=a.useMemo((function(){return P}),[!!P,ee,te]),ae=a.useMemo((function(){return(0,V.bT)(K)}),[!!K.items,ee,te]),re=a.useMemo((function(){return(0,V.bT)(Z)}),[!!Z.items,ee,te]),ie=[ee,te];return a.createElement("div",{className:"px-3"},a.createElement("div",{className:"d-flex justify-content-between mb-2"},a.createElement("h1",null,a.createElement(v.x,{namespace:U,phrase:"insights"})),a.createElement(d.B,null)),a.createElement("div",{className:"mb-2"},a.createElement(F,{appLink:L,typeIdParams:T})),Y?a.createElement(R.N,null):P.length?a.createElement(a.Fragment,null,a.createElement(O.G,{sentShares:ne,sharedObjects:ae,shareRecipients:re,interactivesPendingReviews:J.data,getObjectAppLink:V.Qh,getObjectActions:X,imageCdnUrl:Q.data.imageCdnUrl,groupByDateShared:!0,dependencies:ie,breakpoints:n}),(z||ee)&&a.createElement(m._,{isFetching:ee,fetchNext:x,nextCursor:G})):a.createElement(N.i,{appLink:{application:C.O.DASHBOARD,action:w.e.Dashboard.HOME},imageUrl:S.W.EmptyStates.Share.SHARED_WITH_ME}))}},23120:(e,t,n)=>{n.d(t,{j:()=>d,w:()=>p});var a=n(32735),r=n(23481),i=n(4594),s=n(35223),c=n(31908),l=n(14070),o=n(97291),u=r.T.encloseNamespace("lite.insightsList");function d(e,t){var n=e.xs||e.sm||e.md,r=JSON.stringify(t);return a.useCallback((function(e){return function(e,t,n){var a,r;c.M.isVideo(e)&&(a="video",r={application:o.O.INSIGHTS,action:l.e.Insights.VIDEO_OVERVIEW,args:[e.id]}),c.M.isInteractive(e)&&(a="interactive",r={application:o.O.INSIGHTS,action:l.e.Insights.INTERACTIVE_OVERVIEW,args:[e.id]}),c.M.isClip(e)&&(a="clip",r={application:o.O.INSIGHTS,action:l.e.Insights.CLIP_OVERVIEW,args:[e.id]}),e.typeId===i.E.Series&&(a="series"),e.typeId===i.E.Playlist&&(a="playlist");var d=[{label:u("editShareSettings"),appLink:{application:o.O.DEFAULT,action:l.e.Default.SHARE,args:[e.id],params:{entityType:a}}}];if(c.M.isVideoType(e)){if(!c.M.getCanBeConsumed(e).canConsume)return[];d.unshift({label:u("viewInsights"),className:"btn btn-outline-dark",button:!n,svgName:s.vn.Chart,appLink:Object.assign(Object.assign({},r),{params:t})})}return d}(e,t,n)}),[n,r])}function p(e){var t,n,a=null===(t=e.params)||void 0===t?void 0:t.typeId;return a?"string"==typeof a?[+a]:(null===(n=e.params)||void 0===n?void 0:n.typeId.map((function(e){return+e})))||[]:[]}}}]);
2
- //# sourceMappingURL=1734-bbca52585c-lite.chunk.js.map