@clickview/lite 0.82.1 → 0.82.2-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/css/2074-lite-ac8da6c78b.chunk.css +4 -0
  3. package/dist/languages/en.json +1 -1
  4. package/dist/scripts/{1199-01cc084886-lite.chunk.js → 1199-da55d69853-lite.chunk.js} +1 -1
  5. package/dist/scripts/{1199-01cc084886-lite.chunk.js.map → 1199-da55d69853-lite.chunk.js.map} +1 -1
  6. package/dist/scripts/1202-d96ad80884-lite.chunk.js +2 -0
  7. package/dist/scripts/1202-d96ad80884-lite.chunk.js.map +1 -0
  8. package/dist/scripts/{4208-0706461da6-lite.chunk.js → 1336-1826f6e582-lite.chunk.js} +2 -2
  9. package/dist/scripts/1336-1826f6e582-lite.chunk.js.map +1 -0
  10. package/dist/scripts/2074-39b86b9a22-lite.chunk.js +2 -0
  11. package/dist/scripts/2074-39b86b9a22-lite.chunk.js.map +1 -0
  12. package/dist/scripts/{2664-907153c03b-lite.chunk.js → 2664-87c8cbfa7f-lite.chunk.js} +2 -2
  13. package/dist/scripts/2664-87c8cbfa7f-lite.chunk.js.map +1 -0
  14. package/dist/scripts/2888-2596e106a5-lite.chunk.js +2 -0
  15. package/dist/scripts/2888-2596e106a5-lite.chunk.js.map +1 -0
  16. package/dist/scripts/289-669c0c8222-lite.chunk.js +2 -0
  17. package/dist/scripts/289-669c0c8222-lite.chunk.js.map +1 -0
  18. package/dist/scripts/{9911-8892b6dbfe-lite.chunk.js → 3612-8c6423bd51-lite.chunk.js} +2 -2
  19. package/dist/scripts/{9911-8892b6dbfe-lite.chunk.js.map → 3612-8c6423bd51-lite.chunk.js.map} +1 -1
  20. package/dist/scripts/3840-98c79fc0d8-lite.chunk.js +2 -0
  21. package/dist/scripts/3840-98c79fc0d8-lite.chunk.js.map +1 -0
  22. package/dist/scripts/3893-2856933742-lite.chunk.js +2 -0
  23. package/dist/scripts/3893-2856933742-lite.chunk.js.map +1 -0
  24. package/dist/scripts/4006-9dfe9cec1b-lite.chunk.js +3 -0
  25. package/dist/scripts/4006-9dfe9cec1b-lite.chunk.js.map +1 -0
  26. package/dist/scripts/{4177-2d876c7b14-lite.chunk.js → 4177-285ddf9ae3-lite.chunk.js} +2 -2
  27. package/dist/scripts/4177-285ddf9ae3-lite.chunk.js.map +1 -0
  28. package/dist/scripts/{4578-27028d26eb-lite.chunk.js → 4578-7578bcf17a-lite.chunk.js} +2 -2
  29. package/dist/scripts/4578-7578bcf17a-lite.chunk.js.map +1 -0
  30. package/dist/scripts/{4621-7fb0a05bcb-lite.chunk.js → 4621-1f79d94416-lite.chunk.js} +2 -2
  31. package/dist/scripts/4621-1f79d94416-lite.chunk.js.map +1 -0
  32. package/dist/scripts/4806-f36469abb7-lite.chunk.js +2 -0
  33. package/dist/scripts/4806-f36469abb7-lite.chunk.js.map +1 -0
  34. package/dist/scripts/{4948-ba684e5f4f-lite.chunk.js → 4948-de1c75e7fb-lite.chunk.js} +1 -1
  35. package/dist/scripts/{4948-ba684e5f4f-lite.chunk.js.map → 4948-de1c75e7fb-lite.chunk.js.map} +1 -1
  36. package/dist/scripts/4985-bdfa839f8f-lite.chunk.js +2 -0
  37. package/dist/scripts/4985-bdfa839f8f-lite.chunk.js.map +1 -0
  38. package/dist/scripts/{5554-f1f3baf822-lite.chunk.js → 5554-17bb3b86fc-lite.chunk.js} +2 -2
  39. package/dist/scripts/5554-17bb3b86fc-lite.chunk.js.map +1 -0
  40. package/dist/scripts/5579-a9c152057f-lite.chunk.js +2 -0
  41. package/dist/scripts/5579-a9c152057f-lite.chunk.js.map +1 -0
  42. package/dist/scripts/5712-e784cfe89c-lite.chunk.js +2 -0
  43. package/dist/scripts/5712-e784cfe89c-lite.chunk.js.map +1 -0
  44. package/dist/scripts/6070-a390fdce21-lite.chunk.js +2 -0
  45. package/dist/scripts/6070-a390fdce21-lite.chunk.js.map +1 -0
  46. package/dist/scripts/{6909-ba75701156-lite.chunk.js → 6909-a9b8930e37-lite.chunk.js} +2 -2
  47. package/dist/scripts/6909-a9b8930e37-lite.chunk.js.map +1 -0
  48. package/dist/scripts/7401-98135f09e8-lite.chunk.js +2 -0
  49. package/dist/scripts/7401-98135f09e8-lite.chunk.js.map +1 -0
  50. package/dist/scripts/{7617-211f084b70-lite.chunk.js → 7617-9d34c841e6-lite.chunk.js} +2 -2
  51. package/dist/scripts/7617-9d34c841e6-lite.chunk.js.map +1 -0
  52. package/dist/scripts/7742-342db3ce4f-lite.chunk.js +2 -0
  53. package/dist/scripts/7742-342db3ce4f-lite.chunk.js.map +1 -0
  54. package/dist/scripts/7843-f6033528ce-lite.chunk.js +2 -0
  55. package/dist/scripts/7843-f6033528ce-lite.chunk.js.map +1 -0
  56. package/dist/scripts/787-dcb3a0a26c-lite.chunk.js +2 -0
  57. package/dist/scripts/787-dcb3a0a26c-lite.chunk.js.map +1 -0
  58. package/dist/scripts/8077-9fdb522d7e-lite.chunk.js +2 -0
  59. package/dist/scripts/8077-9fdb522d7e-lite.chunk.js.map +1 -0
  60. package/dist/scripts/{3392-f7f8cb65e5-lite.chunk.js → 8133-ffcff3b7fc-lite.chunk.js} +3 -3
  61. package/dist/scripts/8133-ffcff3b7fc-lite.chunk.js.map +1 -0
  62. package/dist/scripts/8364-ff63447d36-lite.chunk.js +3 -0
  63. package/dist/scripts/8364-ff63447d36-lite.chunk.js.map +1 -0
  64. package/dist/scripts/8672-6967ce8a23-lite.chunk.js +2 -0
  65. package/dist/scripts/8672-6967ce8a23-lite.chunk.js.map +1 -0
  66. package/dist/scripts/{9042-fd7e79b891-lite.chunk.js → 9042-fdc5ecb459-lite.chunk.js} +1 -1
  67. package/dist/scripts/{9042-fd7e79b891-lite.chunk.js.map → 9042-fdc5ecb459-lite.chunk.js.map} +1 -1
  68. package/dist/scripts/9295-4242401e60-lite.chunk.js +2 -0
  69. package/dist/scripts/9295-4242401e60-lite.chunk.js.map +1 -0
  70. package/dist/scripts/{9742-3f6b75484a-lite.chunk.js → 9742-5f99d74bb0-lite.chunk.js} +2 -2
  71. package/dist/scripts/9742-5f99d74bb0-lite.chunk.js.map +1 -0
  72. package/dist/scripts/979-4b893e5603-lite.chunk.js +2 -0
  73. package/dist/scripts/979-4b893e5603-lite.chunk.js.map +1 -0
  74. package/dist/scripts/9911-9272b96e46-lite.chunk.js +2 -0
  75. package/dist/scripts/9911-9272b96e46-lite.chunk.js.map +1 -0
  76. package/dist/scripts/bundle-9a3e49399a.min.js +3 -0
  77. package/dist/scripts/{bundle-1187cb1e9f.min.js.map → bundle-9a3e49399a.min.js.map} +1 -1
  78. package/package.json +1 -1
  79. package/dist/scripts/1074-fdce06d863-lite.chunk.js +0 -2
  80. package/dist/scripts/1074-fdce06d863-lite.chunk.js.map +0 -1
  81. package/dist/scripts/2664-907153c03b-lite.chunk.js.map +0 -1
  82. package/dist/scripts/2970-024b1dd55d-lite.chunk.js +0 -2
  83. package/dist/scripts/2970-024b1dd55d-lite.chunk.js.map +0 -1
  84. package/dist/scripts/3392-f7f8cb65e5-lite.chunk.js.map +0 -1
  85. package/dist/scripts/3840-59e5e53cda-lite.chunk.js +0 -2
  86. package/dist/scripts/3840-59e5e53cda-lite.chunk.js.map +0 -1
  87. package/dist/scripts/4177-2d876c7b14-lite.chunk.js.map +0 -1
  88. package/dist/scripts/4208-0706461da6-lite.chunk.js.map +0 -1
  89. package/dist/scripts/4578-27028d26eb-lite.chunk.js.map +0 -1
  90. package/dist/scripts/4598-8f5266e4c2-lite.chunk.js +0 -2
  91. package/dist/scripts/4598-8f5266e4c2-lite.chunk.js.map +0 -1
  92. package/dist/scripts/4621-7fb0a05bcb-lite.chunk.js.map +0 -1
  93. package/dist/scripts/4806-a6f31d703c-lite.chunk.js +0 -2
  94. package/dist/scripts/4806-a6f31d703c-lite.chunk.js.map +0 -1
  95. package/dist/scripts/4985-7e02d5df40-lite.chunk.js +0 -2
  96. package/dist/scripts/4985-7e02d5df40-lite.chunk.js.map +0 -1
  97. package/dist/scripts/5554-f1f3baf822-lite.chunk.js.map +0 -1
  98. package/dist/scripts/5712-7cee70c6b4-lite.chunk.js +0 -2
  99. package/dist/scripts/5712-7cee70c6b4-lite.chunk.js.map +0 -1
  100. package/dist/scripts/6550-d99e0ed75d-lite.chunk.js +0 -2
  101. package/dist/scripts/6550-d99e0ed75d-lite.chunk.js.map +0 -1
  102. package/dist/scripts/6909-ba75701156-lite.chunk.js.map +0 -1
  103. package/dist/scripts/7148-1ced1b5dce-lite.chunk.js +0 -2
  104. package/dist/scripts/7148-1ced1b5dce-lite.chunk.js.map +0 -1
  105. package/dist/scripts/7568-55e9b01367-lite.chunk.js +0 -3
  106. package/dist/scripts/7568-55e9b01367-lite.chunk.js.map +0 -1
  107. package/dist/scripts/7617-211f084b70-lite.chunk.js.map +0 -1
  108. package/dist/scripts/7742-514844bd1a-lite.chunk.js +0 -2
  109. package/dist/scripts/7742-514844bd1a-lite.chunk.js.map +0 -1
  110. package/dist/scripts/7843-cbebf1a786-lite.chunk.js +0 -2
  111. package/dist/scripts/7843-cbebf1a786-lite.chunk.js.map +0 -1
  112. package/dist/scripts/8077-dfd239131d-lite.chunk.js +0 -2
  113. package/dist/scripts/8077-dfd239131d-lite.chunk.js.map +0 -1
  114. package/dist/scripts/843-4dbc5df109-lite.chunk.js +0 -3
  115. package/dist/scripts/843-4dbc5df109-lite.chunk.js.map +0 -1
  116. package/dist/scripts/8735-e74a148502-lite.chunk.js +0 -2
  117. package/dist/scripts/8735-e74a148502-lite.chunk.js.map +0 -1
  118. package/dist/scripts/8856-2d332952ae-lite.chunk.js +0 -2
  119. package/dist/scripts/8856-2d332952ae-lite.chunk.js.map +0 -1
  120. package/dist/scripts/904-2784e45cfc-lite.chunk.js +0 -2
  121. package/dist/scripts/904-2784e45cfc-lite.chunk.js.map +0 -1
  122. package/dist/scripts/9295-eb130a0b17-lite.chunk.js +0 -2
  123. package/dist/scripts/9295-eb130a0b17-lite.chunk.js.map +0 -1
  124. package/dist/scripts/9528-4e954d9dff-lite.chunk.js +0 -2
  125. package/dist/scripts/9528-4e954d9dff-lite.chunk.js.map +0 -1
  126. package/dist/scripts/9742-3f6b75484a-lite.chunk.js.map +0 -1
  127. package/dist/scripts/979-6a70a0e616-lite.chunk.js +0 -2
  128. package/dist/scripts/979-6a70a0e616-lite.chunk.js.map +0 -1
  129. package/dist/scripts/bundle-1187cb1e9f.min.js +0 -3
  130. /package/dist/css/{9528-lite-4a892bdbf2.chunk.css → 1202-lite-4a892bdbf2.chunk.css} +0 -0
  131. /package/dist/css/{7148-lite-856c02f000.chunk.css → 2888-lite-856c02f000.chunk.css} +0 -0
  132. /package/dist/css/{904-lite-2435a34b13.chunk.css → 289-lite-2435a34b13.chunk.css} +0 -0
  133. /package/dist/css/{9911-lite-2b4142796a.chunk.css → 3612-lite-2b4142796a.chunk.css} +0 -0
  134. /package/dist/css/{8856-lite-f8e496136d.chunk.css → 5579-lite-f8e496136d.chunk.css} +0 -0
  135. /package/dist/css/{6550-lite-45dc286aab.chunk.css → 6070-lite-45dc286aab.chunk.css} +0 -0
  136. /package/dist/css/{2970-lite-5a317efacd.chunk.css → 787-lite-5a317efacd.chunk.css} +0 -0
  137. /package/dist/css/{843-lite-db31e36b79.chunk.css → 8364-lite-db31e36b79.chunk.css} +0 -0
  138. /package/dist/css/{8735-lite-856c02f000.chunk.css → 9911-lite-856c02f000.chunk.css} +0 -0
  139. /package/dist/scripts/{3392-f7f8cb65e5-lite.chunk.js.LICENSE.txt → 4006-9dfe9cec1b-lite.chunk.js.LICENSE.txt} +0 -0
  140. /package/dist/scripts/{7568-55e9b01367-lite.chunk.js.LICENSE.txt → 8133-ffcff3b7fc-lite.chunk.js.LICENSE.txt} +0 -0
  141. /package/dist/scripts/{843-4dbc5df109-lite.chunk.js.LICENSE.txt → 8364-ff63447d36-lite.chunk.js.LICENSE.txt} +0 -0
  142. /package/dist/scripts/{bundle-1187cb1e9f.min.js.LICENSE.txt → bundle-9a3e49399a.min.js.LICENSE.txt} +0 -0
@@ -1,2 +1,2 @@
1
1
  "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1199],{93479:(e,t,n)=>{n.d(t,{I:()=>i});var a=n(99940);function r(e,t,n){if(!t)return e;var a="".concat(e,":").concat(t.start,":").concat(t.end),r=Array.isArray(t.userId)?t.userId.sort().join(":"):t.userId,l=Array.isArray(t.groupId)?t.groupId.sort().join(":"):t.groupId,i=Array.isArray(t.customerId)?t.customerId.sort().join(":"):t.customerId;return r&&(a+=":".concat(r)),l&&(a+=":".concat(l)),i&&(a+=":".concat(i)),n&&(a+=":".concat(n)),a}function l(e,t,n){return{currentUserId:e.id,currentCustomerId:e.customerId,dateRange:t?{start:t.start,end:t.end}:void 0,userIds:null==t?void 0:t.userId,classroomsAndGroups:null==t?void 0:t.groupId,shareId:n}}var i={interactiveResultSet:function(e,t,n,i,c,o,s,m){return{url:c?"/api/domain/v3/analytics/interactives/".concat(e,"/metadata/").concat(t):"/api/domain/v2/analytics/interactives/".concat(e,"/metadata/").concat(t),key:r("interactive:result:set:".concat(e,":").concat(t,":").concat(c),i),data:l(n,i,c),type:a.k.POST,normalize:!1,success:o,error:s,always:m}},mark:function(e,t,n,r,l,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:l,error:i,always:c}},pendingReviews:function(e){var t=e.interactives.map(function(e){return"".concat(e.interactiveId,":").concat(e.metadataId,":").concat(e.shareId)}).join(",");return{url:"/api/domain/v1/analytics/interactives/pending-reviews/summary",key:"interactives:pending:reviews:".concat(t),type:a.k.POST,data:e,normalize:!1}},interactiveResultsReport:function(e){return{url:"/api/domain/v3/analytics/interactives/report",key:"interactive:results:report",data:e,type:a.k.POST,normalize:!1}}}},39902:(e,t,n)=>{n.d(t,{FN:()=>p,SW:()=>f,fh:()=>v});var a=n(32735),r=n(20354),l=n(75896);function i(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||c(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 c(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}}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}function s(e){return s="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},s(e)}function m(e,t,n){return(t=function(e){var t=function(e){if("object"!=s(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=s(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==s(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var u=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]])}return n},d=50;function v(e,t){var n=l.m.chunk(e,d).map(function(e){return t(l.m.uniq(e))}),a=r.a.useBasicFetchAll(n),i=l.m.flatten(a.data),c=a.data.length?i.reduce(function(e,t){return Object.assign(Object.assign({},e),m({},t.id,t))},{}):null;return{itemsArr:i,items:c,isFetching:a.isFetching,hasCompleted:a.hasCompleted}}function p(e,t,n){var r=null!=n?n:function(e){return"object"===s(e)?e.id:e},l=f({getRequest:t,_getKey:n}),i=l.fetchItems,c=u(l,["fetchItems"]);return a.useEffect(function(){(null==e?void 0:e.length)&&i(e)},[null==e?void 0:e.map(r).join(",")]),c}function f(e){var t,n,o,u,v,p=null!==(t=e._getKey)&&void 0!==t?t:function(e){return"object"===s(e)?e.id:e},f=a.useRef(new Set),y=(u=a.useState([]),v=2,function(e){if(Array.isArray(e))return e}(u)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,l,i,c=[],o=!0,s=!1;try{if(l=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;o=!1}else for(;!(o=(a=l.call(n)).done)&&(c.push(a.value),c.length!==t);o=!0);}catch(e){s=!0,r=e}finally{try{if(!o&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw r}}return c}}(u,v)||c(u,v)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),b=y[0],h=y[1],g=r.a.useBasicFetchAll(b),E=l.m.flatten(g.data),N=g.data.length?E.reduce(function(e,t){return Object.assign(Object.assign({},e),m({},p(t),t))},{}):null;return{hasFirstRequestCompleted:!!(null===(o=null===(n=g.responses)||void 0===n?void 0:n[0])||void 0===o?void 0:o.hasCompleted),itemsArr:E,items:N,isFetching:g.isFetching,fetchItems:function(t){if(null==t?void 0:t.length){var n=[];t.forEach(function(e){var t=p(e);f.current.has(t)||(n.push(e),f.current.add(t))}),n.length&&h(function(t){return[].concat(i(t),i(l.m.chunk(n,d).map(e.getRequest)))})}}}}},55219:(e,t,n)=>{n.d(t,{g:()=>j,F:()=>x});var a=n(32735),r=n(65858),l=n(9806),i=n(31453),c=n(64249),o=n(2510),s=n(15611),m=n(83345),u=n(62335),d=n(26339),v=n(4594),p=n(31908),f="shared.sharedObjectTitle";function y(e){var t,n,l,y=e.sharedObject,b=e.titleClassName,h=e.subTextClassName,g=e.share,E=function(){switch(y.typeId){case v.E.Series:return"series";case v.E.Playlist:return"playlist"}}(),N=null===(t=e.getObjectAppLink)||void 0===t?void 0:t.call(e,y);return g.type===o.y.Open&&g.options.openClassroomName?a.createElement("span",{className:(0,i.A)("clamp-2",b)},g.options.openClassroomName):y.name?p.M.isVideoType(y)&&!(null===(n=p.M.getCanBeConsumed(y))||void 0===n?void 0:n.canNavigate)?a.createElement("span",{className:(0,i.A)("clamp-2",b)},y.name):a.createElement("div",null,p.M.isVideoType(y)&&a.createElement(d.$,{type:"series",video:y,appLink:"series"in y&&y.series?null===(l=e.getObjectAppLink)||void 0===l?void 0:l.call(e,y.series):null,analyticsOptions:{location:r.LZ.Insights},className:"d-inline clamp-1 ".concat(null!=h?h:"")}),E&&a.createElement(u.m,null,a.createElement(m.x,{namespace:f,phrase:E})),N?a.createElement(s.F,{appLink:N,className:"clamp-1",analyticsData:{id:y.id,name:y.name},analyticsOptions:{entity:c.I.getAnalyticsEntity(y.type),actionType:r.Vw.Click,location:r.LZ.MyShares}},a.createElement("span",{className:"clamp-2 ".concat(null!=b?b:"")},y.name)):a.createElement("span",{className:"clamp-2 ".concat(null!=b?b:"")},y.name)):a.createElement(m.x,{namespace:f,phrase:"videoUnavailable"})}var b=n(41889),h=n(76306),g=n(83914),E=n(54610),N=n(35223),S=n(86099);const I={thumbnailContainer:"XNQc8",tableRow:"R3dYa",viewCta:"ssCq6"};var w="myShares.tableRow";function j(e){return a.createElement("div",{className:"d-flex"},a.createElement("div",{className:"col-auto ".concat(I.thumbnailContainer)},a.createElement("p",{className:"fw-semibold mb-2"},e.heading)),a.createElement("div",{className:"".concat(e.isFirst?"d-flex":"d-none"," col align-items-center")},a.createElement("div",{className:"col-10 col-md-4"}),a.createElement("div",{className:"d-none d-md-flex col-6"},a.createElement("div",{className:"col-4"},a.createElement("p",{className:"fw-semibold mb-2"},a.createElement(m.x,{namespace:w,phrase:"viewsHeading"}))),a.createElement("div",{className:"col-3"},a.createElement("p",{className:"fw-semibold mb-2"},a.createElement(m.x,{namespace:w,phrase:"viewedByHeading"}))),a.createElement("div",{className:"col-5"},a.createElement("p",{className:"fw-semibold mb-2"},a.createElement(m.x,{namespace:w,phrase:"statusHeading"})))),a.createElement("div",{className:"col-2"})))}function x(e){var t,n,i,c=e.shareData,o=c.sharedObject,u=o.typeId===v.E.Playlist||o.typeId===v.E.Series,d=null!==(n=null===(t=e.appLink)||void 0===t?void 0:t.call(e,c.share))&&void 0!==n?n:(0,S.pY)(c.share);return a.createElement("div",{className:"position-relative hover-bg-light-blue ".concat(I.tableRow," ").concat(null!==(i=e.className)&&void 0!==i?i:"")},a.createElement(s.F,{appLink:d,className:"p-2 cursor-pointer d-flex text-decoration-none"},a.createElement("div",{className:"col-auto ".concat(I.thumbnailContainer)},a.createElement(l.k,{object:o,showVideoMetadata:!0,locationContext:r.LZ.MyShares,imageOptions:{size:E.h2.Medium},showCollectionMask:!1,showVideoCount:!0,onlyCount:!0})),a.createElement("div",{className:"col d-flex align-items-center"},a.createElement("div",{className:"px-3 col-10 col-md-4"},a.createElement(y,{share:c.share,sharedObject:c.sharedObject})),a.createElement("div",{className:"d-none d-md-flex col-6"},a.createElement("div",{className:"d-flex align-items-center col-4"},u?a.createElement("p",{className:"mb-0"},"-"):a.createElement("p",{className:"mb-0"},a.createElement(m.x,{namespace:w,phrase:"views",options:{smartCount:c.share.viewCount}}))),a.createElement("div",{className:"d-flex align-items-center col-3"},u?a.createElement("p",{className:"mb-0"},"-"):a.createElement("div",{className:"d-flex align-items-center"},a.createElement(g.x,{svgName:N.vn.User,size:g.S.Standard,className:"me-2 svg-container"}),a.createElement("p",{className:"mb-0"},c.share.accessCount))),a.createElement("div",{className:"d-flex align-items-center col-5"},a.createElement(b.B,{className:"py-2",share:c.share,markingRequired:c.pendingReview>0,hasData:c.share.accessCount>0}))))),a.createElement("div",{className:"position-absolute end-0 top-0 bottom-0 d-flex align-items-center pe-2"},a.createElement(s.F,{appLink:d,className:"me-4 text-info d-none ".concat(I.viewCta)},a.createElement(m.x,{namespace:w,phrase:"viewCta"})),a.createElement(h.m,{dropdownToggleSvgSize:g.S.Standard,actions:e.getObjectActions(c),dropdownToggleClassName:"btn btn-link"})))}},5056:(e,t,n)=>{n.d(t,{R:()=>f});var a=n(32735),r=n(23481),l=n(75896),i=n(110),c=n(31754),o=n(2510),s=n(4594);function m(e){return m="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},m(e)}function u(e,t,n){return(t=function(e){var t=function(e){if("object"!=m(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=m(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==m(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var d=r.T.encloseNamespace("myShares.mySharesTable");function v(e){var t;if(e.type===o.y.Link||!(null===(t=null==e?void 0:e.recipients)||void 0===t?void 0:t.length))return e.dateShared||e.dateCreated;var n=e.recipients.map(function(e){return e.dateCreated});return n.length?(n.sort(function(e,t){return i.O.isSame(e,t)?0:i.O.isAfter(e,t)?1:-2}),l.m.last(n)):""}var p=n(55219);function f(e){var t,n,r,l,i,m,f,y=(t=e.sentShares,n=e.sharedObjects,r=e.shareRecipients,l=!!e.groupByDateShared,i=e.interactivesPendingReview,m=[],f=null==i?void 0:i.reduce(function(e,t){return Object.assign(u({},t.interactiveId,t),e)},{}),t.forEach(function(e){var t,a=null==n?void 0:n[e.objectId],l=null;if(e.type===o.y.Classroom&&(l=[],null===(t=e.recipients)||void 0===t||t.forEach(function(e){var t=null==r?void 0:r[e.recipientId];t&&l.push(t)})),a){var i=a.typeId===s.E.Interactive&&(null==f?void 0:f[a.interactiveId]);m.push({share:e,sharedObject:a,shareRecipients:l,dateShared:v(e),pendingReview:null==i?void 0:i.pendingReviewCount,privacy:e.privacy})}}),l?c.x.groupByDateShared(m):u({},d("title"),m));return a.createElement(a.Fragment,null,Object.keys(y).map(function(t,n){return a.createElement("div",{key:n},a.createElement(p.g,{heading:t,isFirst:!e.hasDemoInsights&&0===n}),a.createElement("div",{className:"d-flex flex-column mb-4"},y[t].map(function(t,n){return a.createElement(p.F,{key:n,shareData:t,getObjectActions:e.getObjectActions,breakpoints:e.breakpoints,imageCdnUrl:e.imageCdnUrl,yearGroups:e.yearGroups})})))}))}},67467:(e,t,n)=>{n.d(t,{o:()=>m});var a=n(32735),r=n(23481),l=n(97958),i=n(99742),c=n(14070),o=n(97291),s=r.T.encloseNamespace("myShares.mySharesTableEmptyState");function m(){return a.createElement(l.u,null,a.createElement(l.u.Image,{src:i.W.EmptyStates.Share.SHARED_BY_ME,size:"small"}),a.createElement(l.u.Heading,null,s("heading")),a.createElement(l.u.Info,null,s("info")),a.createElement(l.u.Cta,{appLink:{application:o.O.DASHBOARD,action:c.e.Dashboard.HOME},text:s("cta")}))}},28001:(e,t,n)=>{n.d(t,{L:()=>c});var a=n(32735);const r={heading:"iWHol",thumbnailContainer:"zrcDh"};function l(e){return a.createElement("div",{className:"d-flex"},a.createElement("div",{className:"col-auto ".concat(r.thumbnailContainer)},a.createElement("div",{className:"partial-loading-background mb-2"}," ")),a.createElement("div",{className:"".concat(e.isFirst?"d-flex":"d-none"," col align-items-center")},a.createElement("div",{className:"col-10 col-md-4"}),a.createElement("div",{className:"d-none d-md-flex col-6"},a.createElement("div",{className:"col-4"},a.createElement("div",{className:"partial-loading-background mb-2 ".concat(r.heading)}," ")),a.createElement("div",{className:"col-3"},a.createElement("div",{className:"partial-loading-background mb-2 ".concat(r.heading)}," ")),a.createElement("div",{className:"col-5"},a.createElement("div",{className:"partial-loading-background mb-2 ".concat(r.heading)}," "))),a.createElement("div",{className:"col-2"})))}function i(){return a.createElement("div",{className:"p-2 d-flex"},a.createElement("div",{className:"col-auto ".concat(r.thumbnailContainer)},a.createElement("div",{className:"partial-loading-background rounded ratio ratio-16x9"})),a.createElement("div",{className:"col d-flex align-items-center"},a.createElement("div",{className:"px-3 col-10 col-md-4"},a.createElement("div",{className:"partial-loading-background w-75"}," ")),a.createElement("div",{className:"d-none d-md-flex col-6"},a.createElement("div",{className:"col-4"},a.createElement("div",{className:"partial-loading-background w-50"}," ")),a.createElement("div",{className:"col-3"},a.createElement("div",{className:"partial-loading-background w-50"}," ")),a.createElement("div",{className:"col-5"},a.createElement("div",{className:"partial-loading-background w-75"}," "))),a.createElement("div",{className:"col-2 d-flex justify-content-end align-items-center"},a.createElement("div",{className:"partial-loading-background w-25"}," "))))}function c(){return a.createElement(a.Fragment,null,a.createElement("div",null,a.createElement(l,{isFirst:!0}),a.createElement("div",{className:"d-flex flex-column rounded-3 mb-4 border"},a.createElement(i,null),a.createElement(i,null),a.createElement(i,null),a.createElement(i,null))),a.createElement("div",null,a.createElement(l,null),a.createElement("div",{className:"d-flex flex-column rounded-3 mb-4 border"},a.createElement(i,null),a.createElement(i,null),a.createElement(i,null),a.createElement(i,null))),a.createElement("div",null,a.createElement(l,null),a.createElement("div",{className:"d-flex flex-column rounded-3 mb-4 border"},a.createElement(i,null),a.createElement(i,null),a.createElement(i,null),a.createElement(i,null),a.createElement(i,null),a.createElement(i,null),a.createElement(i,null),a.createElement(i,null),a.createElement(i,null),a.createElement(i,null))))}},98623:(e,t,n)=>{n.d(t,{a:()=>y});var a=n(20354),r=n(1048),l=n(93479),i=n(30439),c=n(18488),o=n(21789),s=n(39151),m=n(1666),u=n(31949),d=n(39902),v=n(60115),p=n(31908);function f(e){return f="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},f(e)}function y(e){var t,n,y=e.params,b=e.interactiveInsights,h=e.shouldFetch,g=a.a.useGetFetch(),E=a.a.useBasicFetch(u.N.currentUser()),N=a.a.useBasicFetch(s.L.config()),S=a.a.useBasicFetch((null===(t=E.data)||void 0===t?void 0:t.isAuthenticated)&&m.h.yearGroups(E.data.customerId)),I=function(e){return h&&c.o.getSentShares(Object.assign({cursor:e},y))},w=function(e){return g(I(e))},j=(0,v.K)(I,w),x=j.items,O=j.hasMore,C=j.isFetching,k=j.nextCursor,F=j.hasFirstPageCompleted,A=(0,d.FN)(null==x?void 0:x.map(function(e){return e.objectId.toString()}),i.o.sharedObjectsById),R=(0,d.FN)(o.x.getFlattenedRecipients(null!=x?x:[]).map(function(e){return e.recipientId.toString()}),function(e){return i.o.getRecipientsById(e,E.data.customerId)}),P=null==x?void 0:x.reduce(function(e,t){return Object.assign(Object.assign({},e),(n={},a=t.objectId,r=t,(a=function(e){var t=function(e){if("object"!=f(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=f(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==f(t)?t:t+""}(a))in n?Object.defineProperty(n,a,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[a]=r,n));var n,a,r},{}),T=(0,d.FN)(b?r.t.values(A.items||[]):[],function(e){return l.I.pendingReviews({interactives:e.filter(p.M.isInteractive).map(function(e){var t;return{interactiveId:e.interactiveId,metadataId:e.id,shareId:null===(t=P[e.id])||void 0===t?void 0:t.shareId}}),filters:{currentCustomerId:E.data.customerId,currentUserId:E.data.id}})},function(e){return"".concat(e.id,":").concat("interactiveId"in e?e.interactiveId:"")}),L=C||A.isFetching||R.isFetching||T.isFetching||S.isFetching,B=!F||(null==x?void 0:x.length)&&!A.hasFirstRequestCompleted;return{sentShares:x,sharedObjects:A,shareRecipients:R,yearGroups:S.data,interactivesPendingReview:T,isFetching:L,showPartialLoading:B,nextCursor:k,hasMore:O,fetchNext:w,imageCdnUrl:null===(n=N.data)||void 0===n?void 0:n.imageCdnUrl}}}}]);
2
- //# sourceMappingURL=1199-01cc084886-lite.chunk.js.map
2
+ //# sourceMappingURL=1199-da55d69853-lite.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scripts/1199-01cc084886-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/utils/AnalyticsRequestUtils.ts","file:///app/packages/libs/shared/src/apps/analytics/flight-requests/InteractiveResultsRequests.ts","file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/libs/shared/src/apps/share/components/shared-object-title/SharedObjectTitle.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table-row/my-shares-table-row.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table-row/MySharesTableRow.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/MySharesTableUtils.ts","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/MySharesTable.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/empty-state/MySharesTableEmptyState.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/partial-loading/partial-my-shares-table.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/partial-loading/PartialMySharesTable.tsx","file:///app/packages/projects/lite/src/shared/hooks/useSharesTable.ts"],"sourcesContent":["import { AnalyticsRequestFilter } from 'libs/shared/interfaces';\n\nexport function getAnalyticsRequestKey(baseKey: string, filter: AnalyticsRequestFilter, extra?: string): string {\n if (!filter)\n return baseKey;\n\n let key = `${baseKey}:${filter.start}:${filter.end}`;\n\n const userIdKey = Array.isArray(filter.userId) ? filter.userId.sort().join(':') : filter.userId;\n const groupIdKey = Array.isArray(filter.groupId) ? filter.groupId.sort().join(':') : filter.groupId;\n const customerIdKey = Array.isArray(filter.customerId) ? filter.customerId.sort().join(':') : filter.customerId;\n\n if (userIdKey)\n key += `:${userIdKey}`;\n\n if (groupIdKey)\n key += `:${groupIdKey}`;\n\n if (customerIdKey)\n key += `:${customerIdKey}`;\n\n if (extra)\n key += `:${extra}`;\n\n return key;\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/react/index';\n\nimport { MarkInteractiveAnswer } from 'libs/shared/apps/analytics/interfaces/MarkInteractiveAnswer';\nimport { InteractiveResultsReport } from 'libs/shared/apps/analytics/interfaces/requests/InteractiveResultsReport';\nimport { InteractivesPendingReviewsRequest } from 'libs/shared/apps/analytics/interfaces/requests/InteractivesPendingReviewsRequest';\nimport { AnalyticsRequestFilter, CurrentUser, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\ninterface InteractiveResultFilters {\n currentUserId: string;\n currentCustomerId: string;\n dateRange?: { start: string, end: string }\n userIds?: string | string[];\n classroomsAndGroups?: string | string[];\n shareId?: string;\n}\n\nfunction getInteractiveResultFilters(\n currentUser: CurrentUser,\n filter: AnalyticsRequestFilter,\n shareId?: string\n): InteractiveResultFilters {\n return {\n currentUserId: currentUser.id,\n currentCustomerId: currentUser.customerId,\n dateRange: filter ? { start: filter.start, end: filter.end } : undefined,\n userIds: filter?.userId,\n classroomsAndGroups: filter?.groupId,\n shareId: shareId\n };\n}\n\nexport const InteractiveResultsRequests = {\n /** \n * This endpoint returns data with a lot of duplicated ids,\n * e.g. student answers to the same question will have the same id.\n * Because of that, we don't normalize.\n */\n interactiveResultSet(\n interactiveId: string,\n interactiveMetadataId: string,\n currentUser: CurrentUser,\n filter?: AnalyticsRequestFilter,\n shareId?: string,\n success?: (data: InteractiveResultSet) => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: shareId ?\n `/api/domain/v3/analytics/interactives/${interactiveId}/metadata/${interactiveMetadataId}` :\n `/api/domain/v2/analytics/interactives/${interactiveId}/metadata/${interactiveMetadataId}`,\n key: getAnalyticsRequestKey(`interactive:result:set:${interactiveId}:${interactiveMetadataId}:${shareId}`, filter),\n data: getInteractiveResultFilters(currentUser, filter, shareId),\n type: HttpVerbs.POST,\n normalize: false,\n success,\n error,\n always\n };\n },\n \n /**\n * As the response from `interactiveResultSet` isn't normalised, we need to invalidate the cache\n * to update the results data.\n */\n mark(\n interactiveId: string,\n interactiveMetadataId: string,\n answerId: string,\n data: MarkInteractiveAnswer,\n success?: () => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `/api/domain/v1/analytics/answers/${answerId}`,\n key: `mark:answer:${answerId}:${data.resultId}`,\n type: HttpVerbs.PUT,\n data,\n normalize: false,\n invalidationKeys: `interactive:result:set:${interactiveId}:${interactiveMetadataId}`,\n success,\n error,\n always\n };\n },\n\n pendingReviews(data: InteractivesPendingReviewsRequest): Flight.Request {\n const key = data.interactives.map(interactive => `${interactive.interactiveId}:${interactive.metadataId}:${interactive.shareId}`).join(',');\n return {\n url: `/api/domain/v1/analytics/interactives/pending-reviews/summary`,\n key: `interactives:pending:reviews:${key}`,\n type: HttpVerbs.POST,\n data,\n normalize: false\n };\n },\n\n interactiveResultsReport(data: InteractiveResultsReport): Flight.Request {\n return {\n url: '/api/domain/v3/analytics/interactives/report',\n key: 'interactive:results:report',\n data,\n type: HttpVerbs.POST,\n normalize: false\n };\n }\n};","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst CHUNK_SIZE = 50;\n\nexport interface UseBatchFetchResult<T extends BaseObject> {\n itemsArr: T[];\n items: { [key: string]: T} | null;\n isFetching: boolean;\n hasCompleted: boolean;\n}\n\n/**\n * Used to fetch multiple items by id with Flight. Will fetch 25 items at a time firing off multiple\n * requests if there are more than 25 items.\n * This will return items as null until we have all our items. Items will be returned as an object with\n * their ids as they key for easy mapping\n * \n * @param itemIds \n * @param getRequest \n */\nexport function useBatchFetch<T extends BaseObject>(\n itemIds: string[],\n getRequest: (ids: string[]) => Flight.Request\n): UseBatchFetchResult<T> {\n const chunks = ArrayHelper.chunk<string>(itemIds, CHUNK_SIZE);\n\n const requests = chunks.map(chunk => getRequest(ArrayHelper.uniq(chunk)));\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\n\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce((acc, item) => ({ ...acc, [item.id]: item }), {})\n : null;\n\n return {\n itemsArr,\n items,\n isFetching: responses.isFetching,\n hasCompleted: responses.hasCompleted\n };\n}\n\n/**\n * When you need the useBatchFetch() behavior, but your list of objects to hydrate\n * will grow, such as on a scrolling page. useGrowingBatchFetch() will use local state\n * to determine what we've already built a request for and what items are new\n * as to not re-fetch items - Sha\n */\nexport function useGrowingBatchFetch<TResponse, TObjects = string>(\n objs: TObjects[],\n getRequest: (items: TObjects[]) => Flight.Request,\n _getKey?: (obj: TObjects) => string\n) {\n const getKey = _getKey ?? ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const { fetchItems, ...data } = useGrowingBatchFetchFunc<TResponse, TObjects>({ getRequest, _getKey });\n\n React.useEffect(() => {\n if (!objs?.length)\n return;\n\n fetchItems(objs);\n }, [objs?.map(getKey).join(',')]);\n\n return data;\n}\n\ninterface UseGrowingBatchFetchFuncOptions<TObjects> {\n getRequest: (items: TObjects[]) => Flight.Request;\n _getKey?: (obj: TObjects) => string;\n}\n\n/**\n * When you need the useGrowingBatchFetch() behaviour, but need to trigger the\n * fetch manually and update the objects - Nish \n */\nexport function useGrowingBatchFetchFunc<TResponse, TObjects = string>(\n options: UseGrowingBatchFetchFuncOptions<TObjects>\n) {\n const getKey = options._getKey ?? ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const fetchedItems = React.useRef<Set<string>>(new Set<string>());\n const [ requests, setRequests ] = React.useState<Flight.Request[]>([]);\n\n function fetchItems(objs: TObjects[]) {\n if (!objs?.length)\n return;\n\n const unfetchedItems: TObjects[] = [];\n \n objs.forEach(obj => {\n const key = getKey(obj);\n\n if (fetchedItems.current.has(key))\n return;\n\n unfetchedItems.push(obj);\n fetchedItems.current.add(key);\n });\n \n if (!unfetchedItems.length)\n return;\n \n setRequests(r => ([ ...r, ...ArrayHelper.chunk<TObjects>(unfetchedItems, CHUNK_SIZE).map(options.getRequest) ]));\n }\n\n const responses = Flight.useBasicFetchAll<TResponse[]>(requests);\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce<Record<string, TResponse>>((acc, item) => ({ ...acc, [getKey(item)]: item }), {})\n : null;\n\n return {\n hasFirstRequestCompleted: !!responses.responses?.[0]?.hasCompleted,\n itemsArr,\n items,\n isFetching: responses.isFetching,\n fetchItems\n };\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { SharableEntity, ShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BaseObject } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nconst namespace = 'shared.sharedObjectTitle';\n\ninterface SharedObjectTitleProps {\n share: Share;\n sharedObject: SharableEntity;\n getObjectAppLink?: (object: BaseObject) => Core.AppLink;\n titleClassName?: string;\n subTextClassName?: string;\n}\n\nexport function SharedObjectTitle(props: SharedObjectTitleProps) {\n const { sharedObject, titleClassName, subTextClassName, share } = props;\n const subTextPhrase = getSubTextPhrase();\n const titleAppLink = props.getObjectAppLink?.(sharedObject);\n\n if (share.type === ShareType.Open && share.options.openClassroomName) {\n return (\n <span className={classNames('clamp-2', titleClassName)}>\n {share.options.openClassroomName}\n </span>\n );\n }\n\n if (!sharedObject.name) {\n return <Text namespace={namespace} phrase='videoUnavailable' />;\n }\n\n if (VideoHelper.isVideoType(sharedObject) && !VideoHelper.getCanBeConsumed(sharedObject)?.canNavigate) {\n return (\n <span className={classNames('clamp-2', titleClassName)}>\n {sharedObject.name}\n </span>\n );\n }\n\n function getSubTextPhrase(): string {\n switch (sharedObject.typeId) {\n case MasterType.Series: return 'series';\n case MasterType.Playlist: return 'playlist';\n }\n }\n\n return (\n <div>\n {VideoHelper.isVideoType(sharedObject) && (\n <VideoSubText\n type='series'\n video={sharedObject}\n appLink={'series' in sharedObject && sharedObject.series ? props.getObjectAppLink?.(sharedObject.series) : null}\n analyticsOptions={{ location: LocationContext.Insights }}\n className={`d-inline clamp-1 ${subTextClassName ?? ''}`}\n />\n )}\n\n {subTextPhrase &&\n <TitleSubText>\n <Text namespace={namespace} phrase={subTextPhrase} />\n </TitleSubText>\n }\n\n {titleAppLink ? (\n <AppLink\n appLink={titleAppLink}\n className='clamp-1'\n analyticsData={{ id: sharedObject.id, name: sharedObject.name }}\n analyticsOptions={{\n entity: ShareViewHelper.getAnalyticsEntity(sharedObject.type),\n actionType: UserAction.Click,\n location: LocationContext.MyShares\n }}\n >\n <span className={`clamp-2 ${titleClassName ?? ''}`}>\n {sharedObject.name}\n </span>\n </AppLink>\n ) : (\n <span className={`clamp-2 ${titleClassName ?? ''}`}>\n {sharedObject.name}\n </span>\n )}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"thumbnailContainer\":\"XNQc8\",\"tableRow\":\"R3dYa\",\"viewCta\":\"ssCq6\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { SharedObjectImage } from 'libs/shared/apps/share/components/shared-object-image/SharedObjectImage';\nimport { SharedObjectTitle } from 'libs/shared/apps/share/components/shared-object-title/SharedObjectTitle';\nimport { ShareStatusIndicator } from 'libs/shared/apps/share-v2/components/share-status-indicator/ShareStatusIndicator';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { ActionsDropdown } from 'libs/shared/components/actions/ActionsDropdown';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { YearGroup } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { getInsightsOverviewAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport { MySharesTableData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\n\nimport styles from './my-shares-table-row.scss';\n\nconst namespace = 'myShares.tableRow';\n\ninterface MySharesTableHeadingProps {\n heading: string;\n isFirst: boolean;\n}\n\nexport function MySharesTableHeading(props: MySharesTableHeadingProps) {\n return (\n <div className='d-flex'>\n <div className={`col-auto ${styles.thumbnailContainer}`}>\n <p className='fw-semibold mb-2'>{props.heading}</p>\n </div>\n \n <div className={`${props.isFirst ? 'd-flex' : 'd-none'} col align-items-center`}>\n <div className='col-10 col-md-4' />\n\n <div className='d-none d-md-flex col-6'>\n <div className='col-4'>\n <p className='fw-semibold mb-2'><Text namespace={namespace} phrase='viewsHeading' /></p>\n </div>\n\n <div className='col-3'>\n <p className='fw-semibold mb-2'><Text namespace={namespace} phrase='viewedByHeading' /></p>\n </div>\n\n <div className='col-5'>\n <p className='fw-semibold mb-2'><Text namespace={namespace} phrase='statusHeading' /></p>\n </div>\n </div>\n\n <div className='col-2' />\n </div>\n </div>\n );\n}\n\ninterface MySharesTableRowProps extends React.PropsWithChildren {\n shareData: MySharesTableData;\n breakpoints?: Breakpoints;\n getObjectActions: (row: MySharesTableData) => ActionOptions[];\n yearGroups: YearGroup[];\n imageCdnUrl: string;\n className?: string;\n appLink?: (share: Share) => Core.AppLink;\n}\n\nexport function MySharesTableRow(props: MySharesTableRowProps) {\n const { shareData } = props;\n const sharedObject = shareData.sharedObject;\n const isCollection = sharedObject.typeId === MasterType.Playlist || sharedObject.typeId === MasterType.Series;\n const appLink = props.appLink?.(shareData.share) ?? getInsightsOverviewAppLink(shareData.share);\n\n function renderViewCount() {\n if (isCollection)\n return <p className='mb-0'>-</p>;\n\n return (\n <p className='mb-0'>\n <Text namespace={namespace} phrase='views' options={{ smartCount: shareData.share.viewCount }} />\n </p>\n );\n }\n\n function renderViewedBy() {\n if (isCollection)\n return <p className='mb-0'>-</p>;\n\n return (\n <div className='d-flex align-items-center'>\n <SvgContainer svgName={cvSvgLibrary.User} size={SvgContainerSize.Standard} className='me-2 svg-container' />\n <p className='mb-0'>{shareData.share.accessCount}</p>\n </div>\n );\n }\n\n return (\n <div className={`position-relative hover-bg-light-blue ${styles.tableRow} ${props.className ?? ''}`}>\n <AppLink appLink={appLink} className={`p-2 cursor-pointer d-flex text-decoration-none`}>\n <div className={`col-auto ${styles.thumbnailContainer}`}>\n <SharedObjectImage\n object={sharedObject}\n showVideoMetadata\n locationContext={LocationContext.MyShares}\n imageOptions={{ size: ImageSize.Medium }}\n showCollectionMask={false}\n showVideoCount\n onlyCount\n />\n </div>\n \n <div className='col d-flex align-items-center'>\n <div className='px-3 col-10 col-md-4'>\n <SharedObjectTitle share={shareData.share} sharedObject={shareData.sharedObject} />\n </div>\n\n <div className='d-none d-md-flex col-6'>\n <div className='d-flex align-items-center col-4'>\n {renderViewCount()}\n </div>\n\n <div className='d-flex align-items-center col-3'>\n {renderViewedBy()}\n </div>\n\n <div className='d-flex align-items-center col-5'>\n <ShareStatusIndicator\n className='py-2'\n share={shareData.share}\n markingRequired={shareData.pendingReview > 0}\n hasData={shareData.share.accessCount > 0}\n />\n </div>\n </div>\n </div>\n </AppLink>\n <div className='position-absolute end-0 top-0 bottom-0 d-flex align-items-center pe-2'>\n <AppLink appLink={appLink} className={`me-4 text-info d-none ${styles.viewCta}`}>\n <Text namespace={namespace} phrase='viewCta' />\n </AppLink>\n <ActionsDropdown\n dropdownToggleSvgSize={SvgContainerSize.Standard}\n actions={props.getObjectActions(shareData)}\n dropdownToggleClassName='btn btn-link'\n />\n </div>\n </div>\n );\n}\n","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { InteractivesPendingReviews } from 'libs/shared/apps/analytics/interfaces/response/InteractivesPendingReviewsResponse';\nimport { ShareHelper } from 'libs/shared/apps/share/utils/ShareHelper';\nimport { SharableEntity, SharableRecipient } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { SharePrivacy } from 'libs/shared/apps/share-v2/enums/SharePrivacy';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { InteractiveMetadata } from 'libs/shared/interfaces';\n\nconst namespace = 'myShares.mySharesTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getDateShared(share: Share): string {\n if (share.type === ShareType.Link || !share?.recipients?.length)\n return share.dateShared || share.dateCreated;\n\n const datesCreated = share.recipients.map(r => r.dateCreated);\n\n if (!datesCreated.length)\n return '';\n\n datesCreated.sort((date1, date2) => {\n if (DateHelper.isSame(date1, date2))\n return 0;\n\n return DateHelper.isAfter(date1, date2) ? 1 : -2;\n });\n\n return ArrayHelper.last(datesCreated);\n}\n\nexport interface MySharesTableData {\n share: Share;\n sharedObject: SharableEntity;\n dateShared: string;\n shareRecipients?: SharableRecipient[];\n pendingReview?: number;\n privacy?: SharePrivacy;\n}\n\ntype TableDataGroupings = { [date: string]: MySharesTableData[] };\n\nexport function useGetMySharesData(\n sentShares: Share[],\n sharedObjects: Record<string, SharableEntity>,\n shareRecipients: Record<string, SharableRecipient>,\n groupByDate: boolean,\n interactivesPendingReviews: InteractivesPendingReviews[]\n): TableDataGroupings {\n const tableData: MySharesTableData[] = [];\n\n const interactivesPendingReviewsMap = interactivesPendingReviews\n ?.reduce<Record<string, InteractivesPendingReviews>>(\n (map, obj) => ({ [obj.interactiveId]: obj, ...map }),\n {}\n );\n\n sentShares.forEach(s => {\n const sharedObject = sharedObjects?.[s.objectId];\n\n let recipients: SharableRecipient[] | null = null;\n\n if (s.type === ShareType.Classroom) {\n recipients = [];\n\n s.recipients?.forEach(r => {\n const recipient = shareRecipients?.[r.recipientId];\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 const pendingReview = sharedObject.typeId === MasterType.Interactive &&\n interactivesPendingReviewsMap?.[(sharedObject as InteractiveMetadata).interactiveId];\n\n tableData.push({\n share: s,\n sharedObject,\n shareRecipients: recipients,\n dateShared: getDateShared(s),\n pendingReview: pendingReview?.pendingReviewCount,\n privacy: s.privacy\n });\n }\n });\n\n if (!groupByDate)\n return { [getPhrase('title')]: tableData };\n\n return ShareHelper.groupByDateShared(tableData);\n}","import React from 'react';\n\nimport { InteractivesPendingReviews } from 'libs/shared/apps/analytics/interfaces/response/InteractivesPendingReviewsResponse';\nimport { SharableEntity, SharableRecipient } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { YearGroup } from 'libs/shared/interfaces';\n\nimport { MySharesTableData, useGetMySharesData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\nimport { MySharesTableHeading, MySharesTableRow } from 'apps/my-shares/components/my-shares-table-row/MySharesTableRow';\n\ninterface MySharesTableProps {\n sentShares: Share[];\n sharedObjects: Record<string, SharableEntity>;\n shareRecipients: Record<string, SharableRecipient>;\n interactivesPendingReview: InteractivesPendingReviews[];\n getObjectActions: (row: MySharesTableData) => ActionOptions[];\n groupByDateShared?: boolean;\n showStatus?: boolean;\n showViewCount?: boolean;\n dependencies?: any[];\n breakpoints?: Breakpoints;\n hasDemoInsights?: boolean;\n imageCdnUrl: string;\n yearGroups: YearGroup[];\n}\n\nexport function MySharesTable(props: MySharesTableProps): JSX.Element {\n const data = useGetMySharesData(\n props.sentShares,\n props.sharedObjects,\n props.shareRecipients,\n !!props.groupByDateShared,\n props.interactivesPendingReview\n );\n\n return (\n <>\n {Object.keys(data).map((heading, headingIdx) => (\n <div key={headingIdx}>\n <MySharesTableHeading heading={heading} isFirst={!props.hasDemoInsights && headingIdx === 0} />\n\n <div className='d-flex flex-column mb-4'>\n {data[heading].map((shareData, index) => (\n <MySharesTableRow\n key={index}\n shareData={shareData}\n getObjectActions={props.getObjectActions}\n breakpoints={props.breakpoints}\n imageCdnUrl={props.imageCdnUrl}\n yearGroups={props.yearGroups}\n />\n ))}\n </div>\n </div>\n ))}\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'myShares.mySharesTableEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function MySharesTableEmptyState(): JSX.Element {\n return (\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Share.SHARED_BY_ME} size='small' />\n <EmptyState.Heading>\n {getPhrase('heading')}\n </EmptyState.Heading>\n <EmptyState.Info>{getPhrase('info')}</EmptyState.Info>\n <EmptyState.Cta appLink={{ application: AppChannels.DASHBOARD, action: Actions.Dashboard.HOME }} text={getPhrase('cta')} />\n </EmptyState>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"heading\":\"iWHol\",\"thumbnailContainer\":\"zrcDh\"};","import React from 'react';\n\nimport styles from './partial-my-shares-table.scss';\n\ninterface PartialHeadingProps {\n isFirst?: boolean;\n}\n\nexport function PartialHeading(props: PartialHeadingProps) {\n return (\n <div className='d-flex'>\n <div className={`col-auto ${styles.thumbnailContainer}`}>\n <div className={`partial-loading-background mb-2`}>&nbsp;</div>\n </div>\n \n <div className={`${props.isFirst ? 'd-flex' : 'd-none'} col align-items-center`}>\n <div className='col-10 col-md-4' />\n\n <div className='d-none d-md-flex col-6'>\n <div className='col-4'>\n <div className={`partial-loading-background mb-2 ${styles.heading}`}>&nbsp;</div>\n </div>\n\n <div className='col-3'>\n <div className={`partial-loading-background mb-2 ${styles.heading}`}>&nbsp;</div>\n </div>\n\n <div className='col-5'>\n <div className={`partial-loading-background mb-2 ${styles.heading}`}>&nbsp;</div>\n </div>\n </div>\n\n <div className='col-2' />\n </div>\n </div>\n );\n}\n\nfunction PartialRow(): JSX.Element {\n return (\n <div className={`p-2 d-flex`}>\n <div className={`col-auto ${styles.thumbnailContainer}`}>\n <div className={`partial-loading-background rounded ratio ratio-16x9`} />\n </div>\n \n <div className='col d-flex align-items-center'>\n <div className='px-3 col-10 col-md-4'>\n <div className={`partial-loading-background w-75`}>&nbsp;</div>\n </div>\n\n <div className='d-none d-md-flex col-6'>\n <div className='col-4'>\n <div className={`partial-loading-background w-50`}>&nbsp;</div>\n </div>\n\n <div className='col-3'>\n <div className={`partial-loading-background w-50`}>&nbsp;</div>\n </div>\n\n <div className='col-5'>\n <div className={`partial-loading-background w-75`}>&nbsp;</div>\n </div>\n </div>\n\n <div className='col-2 d-flex justify-content-end align-items-center'>\n <div className={`partial-loading-background w-25`}>&nbsp;</div>\n </div>\n </div>\n </div>\n );\n}\n\nexport function PartialMySharesTable(): JSX.Element {\n return (\n <>\n <div>\n <PartialHeading isFirst={true} />\n\n <div className='d-flex flex-column rounded-3 mb-4 border'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n\n <div>\n <PartialHeading />\n\n <div className='d-flex flex-column rounded-3 mb-4 border'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n\n <div>\n <PartialHeading />\n\n <div className='d-flex flex-column rounded-3 mb-4 border'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n </>\n );\n}","import { Flight } from 'libs/common/react/index';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { InteractiveResultsRequests } from 'libs/shared/apps/analytics/flight-requests/InteractiveResultsRequests';\nimport { InteractivesPendingReviews } from 'libs/shared/apps/analytics/interfaces/response/InteractivesPendingReviewsResponse';\nimport { ShareRequests as ShareRequestsV1 } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { SharableRecipient } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { GetSentSharesParams, ShareRequests as ShareRequestsV2 } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { SharableEntity } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { UseBatchFetchResult, useGrowingBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { BaseObject, Config, CurrentUser, YearGroup } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nexport function getBatchFetchResultAsArray(result: UseBatchFetchResult<BaseObject>): BaseObject[] {\n return result.items ? Object.values(result.items) : [];\n}\n\ninterface UseSharesTableOptions {\n params?: GetSentSharesParams;\n interactiveInsights?: boolean;\n shouldFetch: boolean;\n}\n\nexport function useSharesTable({ params, interactiveInsights, shouldFetch }: UseSharesTableOptions) {\n const fetch = Flight.useGetFetch();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n /**\n * Fetch sent shares\n */\n const getRequest = (cursor?: string) => shouldFetch && ShareRequestsV2.getSentShares({\n cursor,\n ...params\n });\n const fetchNext = (cursor?: string) => fetch(getRequest(cursor));\n const {\n items: sentShares,\n hasMore,\n isFetching: isFetchingSentShares,\n nextCursor,\n hasFirstPageCompleted\n } = useInfiniteList<Share>(getRequest, fetchNext);\n\n /**\n * Fetch shared objects\n */\n const sharedObjects = useGrowingBatchFetch<SharableEntity>(\n sentShares?.map(obj => obj.objectId.toString()),\n ShareRequestsV1.sharedObjectsById\n );\n\n /**\n * Fetch recipients\n */\n const shareRecipients = useGrowingBatchFetch<SharableRecipient>(\n ShareHelper.getFlattenedRecipients(sentShares ?? []).map(obj => obj.recipientId.toString()),\n objs => (ShareRequestsV1.getRecipientsById(objs, currentUser.data.customerId))\n );\n\n /**\n * Fetch which interactives required marking\n */\n const shareLookup = sentShares\n ?.reduce<Record<string, Share>>((prev, next: Share) => ({ ...prev, [next.objectId]: next }), {});\n const interactivesPendingReview = useGrowingBatchFetch<InteractivesPendingReviews, SharableEntity>(\n interactiveInsights ? ObjectHelper.values(sharedObjects.items || []) : [],\n objs => InteractiveResultsRequests.pendingReviews({\n interactives: objs\n .filter(VideoHelper.isInteractive)\n .map(obj => ({\n interactiveId: obj.interactiveId,\n metadataId: obj.id,\n shareId: shareLookup[obj.id]?.shareId\n })),\n filters: {\n currentCustomerId: currentUser.data.customerId,\n currentUserId: currentUser.data.id\n }\n }),\n obj => `${obj.id}:${'interactiveId' in obj ? obj.interactiveId : ''}`\n );\n \n const isFetching = isFetchingSentShares\n || sharedObjects.isFetching\n || shareRecipients.isFetching\n || interactivesPendingReview.isFetching\n || yearGroups.isFetching;\n\n const showPartialLoading = !hasFirstPageCompleted || (sentShares?.length && !sharedObjects.hasFirstRequestCompleted);\n\n return {\n sentShares,\n sharedObjects,\n shareRecipients,\n yearGroups: yearGroups.data,\n interactivesPendingReview,\n isFetching,\n showPartialLoading,\n nextCursor,\n hasMore,\n fetchNext,\n imageCdnUrl: config.data?.imageCdnUrl\n };\n}"],"names":["getAnalyticsRequestKey","baseKey","filter","extra","key","start","end","userIdKey","Array","isArray","userId","sort","join","groupIdKey","groupId","customerIdKey","customerId","getInteractiveResultFilters","currentUser","shareId","currentUserId","id","currentCustomerId","dateRange","undefined","userIds","classroomsAndGroups","InteractiveResultsRequests","interactiveResultSet","interactiveId","interactiveMetadataId","success","error","always","url","data","type","HttpVerbs","normalize","mark","answerId","resultId","invalidationKeys","pendingReviews","interactives","map","interactive","metadataId","interactiveResultsReport","CHUNK_SIZE","useBatchFetch","itemIds","getRequest","requests","chunk","responses","itemsArr","items","length","reduce","acc","item","isFetching","hasCompleted","useGrowingBatchFetch","objs","_getKey","getKey","obj","useGrowingBatchFetchFunc","fetchItems","options","fetchedItems","Set","setRequests","hasFirstRequestCompleted","unfetchedItems","forEach","current","has","push","add","r","namespace","SharedObjectTitle","props","sharedObject","titleClassName","subTextClassName","share","subTextPhrase","typeId","MasterType","getSubTextPhrase","titleAppLink","getObjectAppLink","ShareType","openClassroomName","className","name","VideoHelper","canNavigate","VideoSubText","video","appLink","series","analyticsOptions","location","TitleSubText","Text","phrase","AppLink","analyticsData","entity","ShareViewHelper","actionType","MySharesTableHeading","heading","isFirst","MySharesTableRow","shareData","isCollection","SharedObjectImage","object","showVideoMetadata","locationContext","imageOptions","size","showCollectionMask","showVideoCount","onlyCount","smartCount","viewCount","SvgContainer","svgName","S","accessCount","ShareStatusIndicator","markingRequired","pendingReview","hasData","ActionsDropdown","dropdownToggleSvgSize","actions","getObjectActions","dropdownToggleClassName","getPhrase","LanguageService","getDateShared","recipients","dateShared","dateCreated","datesCreated","date1","date2","DateHelper","ArrayHelper","MySharesTable","sentShares","sharedObjects","shareRecipients","groupByDate","interactivesPendingReviews","tableData","interactivesPendingReviewsMap","groupByDateShared","interactivesPendingReview","s","objectId","recipient","recipientId","pendingReviewCount","privacy","ShareHelper","Object","keys","headingIdx","hasDemoInsights","index","breakpoints","imageCdnUrl","yearGroups","MySharesTableEmptyState","src","application","action","text","PartialHeading","PartialRow","PartialMySharesTable","useSharesTable","params","interactiveInsights","shouldFetch","fetch","config","isAuthenticated","cursor","fetchNext","hasMore","isFetchingSentShares","nextCursor","hasFirstPageCompleted","toString","shareLookup","prev","next","I","filters","showPartialLoading"],"sourceRoot":""}
1
+ {"version":3,"file":"scripts/1199-da55d69853-lite.chunk.js","mappings":"mJAEM,SAAUA,EAAuBC,EAAiBC,EAAgCC,GACtF,IAAKD,EACH,OAAOD,EAET,IAAIG,EAAM,GAAH,OAAMH,EAAO,YAAIC,EAAOG,MAAK,YAAIH,EAAOI,KAEzCC,EAAYC,MAAMC,QAAQP,EAAOQ,QAAUR,EAAOQ,OAAOC,OAAOC,KAAK,KAAOV,EAAOQ,OACnFG,EAAaL,MAAMC,QAAQP,EAAOY,SAAWZ,EAAOY,QAAQH,OAAOC,KAAK,KAAOV,EAAOY,QACtFC,EAAgBP,MAAMC,QAAQP,EAAOc,YAAcd,EAAOc,WAAWL,OAAOC,KAAK,KAAOV,EAAOc,WAcrG,OAZIT,IACFH,GAAO,IAAJ,OAAQG,IAETM,IACFT,GAAO,IAAJ,OAAQS,IAETE,IACFX,GAAO,IAAJ,OAAQW,IAETZ,IACFC,GAAO,IAAJ,OAAQD,IAENC,CACT,CCPA,SAASa,EACPC,EACAhB,EACAiB,GAEA,MAAO,CACLC,cAAeF,EAAYG,GAC3BC,kBAAmBJ,EAAYF,WAC/BO,UAAWrB,EAAS,CAAEG,MAAOH,EAAOG,MAAOC,IAAKJ,EAAOI,UAAQkB,EAC/DC,QAASvB,aAAM,EAANA,EAAQQ,OACjBgB,oBAAqBxB,aAAM,EAANA,EAAQY,QAC7BK,QAASA,EAEb,CAEO,IAAMQ,EAA6B,CAMxCC,qBAAoB,SAClBC,EACAC,EACAZ,EACAhB,EACAiB,EACAY,EACAC,EACAC,GAEA,MAAO,CACLC,IAAKf,EAAO,gDAC+BU,EAAa,qBAAaC,GAAqB,gDAC/CD,EAAa,qBAAaC,GACrE1B,IAAKJ,EAAuB,0BAAD,OAA2B6B,EAAa,YAAIC,EAAqB,YAAIX,GAAWjB,GAC3GiC,KAAMlB,EAA4BC,EAAahB,EAAQiB,GACvDiB,KAAMC,EAAA,OACNC,WAAW,EACXP,QAAAA,EACAC,MAAAA,EACAC,OAAAA,EAEJ,EAMAM,KAAI,SACFV,EACAC,EACAU,EACAL,EACAJ,EACAC,EACAC,GAEA,MAAO,CACLC,IAAK,oCAAF,OAAsCM,GACzCpC,IAAK,eAAF,OAAiBoC,EAAQ,YAAIL,EAAKM,UACrCL,KAAMC,EAAA,MACNF,KAAAA,EACAG,WAAW,EACXI,iBAAkB,0BAAF,OAA4Bb,EAAa,YAAIC,GAC7DC,QAAAA,EACAC,MAAAA,EACAC,OAAAA,EAEJ,EAEAU,eAAc,SAACR,GACb,IAAM/B,EAAM+B,EAAKS,aAAaC,IAAI,SAAAC,GAAW,gBAAOA,EAAYjB,cAAa,YAAIiB,EAAYC,WAAU,YAAID,EAAY3B,QAAO,GAAIP,KAAK,KACvI,MAAO,CACLsB,IAAK,gEACL9B,IAAK,gCAAF,OAAkCA,GACrCgC,KAAMC,EAAA,OACNF,KAAAA,EACAG,WAAW,EAEf,EAEAU,yBAAwB,SAACb,GACvB,MAAO,CACLD,IAAK,+CACL9B,IAAK,6BACL+B,KAAAA,EACAC,KAAMC,EAAA,OACNC,WAAW,EAEf,E,+vDCrGIW,EAAa,GAkBb,SAAUC,EACdC,EACAC,GAEA,IAEMC,EAFS,UAA0BF,EAASF,GAE1BJ,IAAI,SAAAS,GAAK,OAAIF,EAAW,SAAiBE,GAAO,GAElEC,EAAY,qBAA6BF,GAEzCG,EAAW,YAAoBD,EAAUpB,MACzCsB,EAAQF,EAAUpB,KAAKuB,OACzBF,EAASG,OAAO,SAACC,EAAKC,GAAI,OAAK,+BAAMD,GAAG,KAAGC,EAAKxC,GAAKwC,GAAI,EAAK,CAAC,GAC/D,KAEJ,MAAO,CACLL,SAAAA,EACAC,MAAAA,EACAK,WAAYP,EAAUO,WACtBC,aAAcR,EAAUQ,aAE5B,CAQM,SAAUC,EACdC,EACAb,EACAc,GAEA,IAAMC,EAASD,QAAAA,EAAY,SAACE,GAC1B,MAAmB,WAAf,EAAOA,GACFA,EAAI/C,GAEN+C,CACT,EAEM,EAA0BC,EAA8C,CAAEjB,WAAAA,EAAYc,QAAAA,IAApFI,EAAU,EAAVA,WAAenC,EAAI,IAArB,gBASN,OAPA,YAAgB,YACT8B,aAAI,EAAJA,EAAMP,SAGXY,EAAWL,EACb,EAAG,CAACA,aAAI,EAAJA,EAAMpB,IAAIsB,GAAQvD,KAAK,OAEpBuB,CACT,CAWM,SAAUkC,EACdE,G,cAEMJ,EAAwB,QAAf,EAAAI,EAAQL,eAAO,QAAK,SAACE,GAClC,MAAmB,WAAf,EAAOA,GACFA,EAAI/C,GAEN+C,CACT,EAEMI,EAAe,SAA0B,IAAIC,KACmB,G,EAApC,WAAiC,I,EAAG,E,unBAA9DpB,EAAQ,KAAEqB,EAAW,KAwBvBnB,EAAY,qBAAqCF,GACjDG,EAAW,YAAoBD,EAAUpB,MACzCsB,EAAQF,EAAUpB,KAAKuB,OACzBF,EAASG,OAAkC,SAACC,EAAKC,GAAI,OAAK,+BAAMD,GAAG,KAAGO,EAAON,GAAQA,GAAI,EAAK,CAAC,GAC/F,KAEJ,MAAO,CACLc,4BAAoD,QAAxB,EAAmB,QAAnB,EAAApB,EAAUA,iBAAS,eAAG,UAAE,eAAEQ,cACtDP,SAAAA,EACAC,MAAAA,EACAK,WAAYP,EAAUO,WACtBQ,WAjCF,SAAoBL,GAClB,GAAKA,aAAI,EAAJA,EAAMP,OAAX,CAGA,IAAMkB,EAA6B,GAEnCX,EAAKY,QAAQ,SAAAT,GACX,IAAMhE,EAAM+D,EAAOC,GAEfI,EAAaM,QAAQC,IAAI3E,KAG7BwE,EAAeI,KAAKZ,GACpBI,EAAaM,QAAQG,IAAI7E,GAC3B,GAEKwE,EAAelB,QAGpBgB,EAAY,SAAAQ,GAAC,kBAAUA,GAAC,EAAK,UAA4BN,EAAgB3B,GAAYJ,IAAI0B,EAAQnB,aAAW,EAjBpG,CAkBV,EAeF,C,gLCrHM+B,EAAY,2BAUZ,SAAUC,EAAkBC,G,UACxBC,EAA0DD,EAA1DC,aAAcC,EAA4CF,EAA5CE,eAAgBC,EAA4BH,EAA5BG,iBAAkBC,EAAUJ,EAAVI,MAClDC,EAuBN,WACE,OAAQJ,EAAaK,QACnB,KAAKC,EAAA,SAAmB,MAAO,SAC/B,KAAKA,EAAA,WAAqB,MAAO,WAErC,CA5BsBC,GAChBC,EAAqC,QAAtB,EAAAT,EAAMU,wBAAgB,sBAAGT,GAE9C,OAAIG,EAAMrD,OAAS4D,EAAA,QAAkBP,EAAMlB,QAAQ0B,kBAE/C,wBAAMC,WAAW,OAAW,UAAWX,IACpCE,EAAMlB,QAAQ0B,mBAKhBX,EAAaa,KAIdC,EAAA,cAAwBd,MAA4D,QAA1C,EAAAc,EAAA,mBAA6Bd,UAAa,eAAEe,aAEtF,wBAAMH,WAAW,OAAW,UAAWX,IACpCD,EAAaa,MAalB,2BACGC,EAAA,cAAwBd,IACvB,gBAACgB,EAAA,EAAY,CACXlE,KAAK,SACLmE,MAAOjB,EACPkB,QAAS,WAAYlB,GAAgBA,EAAamB,OAA+B,QAAtB,EAAApB,EAAMU,wBAAgB,sBAAGT,EAAamB,QAAU,KAC3GC,iBAAkB,CAAEC,SAAU,eAC9BT,UAAS,2BAAsBV,QAAAA,EAAoB,MAItDE,GACC,gBAACkB,EAAA,EAAY,KACX,gBAACC,EAAA,EAAI,CAAC1B,UAAWA,EAAW2B,OAAQpB,KAIvCI,EACC,gBAACiB,EAAA,EAAO,CACNP,QAASV,EACTI,UAAU,UACVc,cAAe,CAAE3F,GAAIiE,EAAajE,GAAI8E,KAAMb,EAAaa,MACzDO,iBAAkB,CAChBO,OAAQC,EAAA,qBAAmC5B,EAAalD,MACxD+E,WAAY,WACZR,SAAU,gBAGZ,wBAAMT,UAAS,kBAAaX,QAAAA,EAAkB,KAC3CD,EAAaa,OAIlB,wBAAMD,UAAS,kBAAaX,QAAAA,EAAkB,KAC3CD,EAAaa,OArDb,gBAACU,EAAA,EAAI,CAAC1B,UAAWA,EAAW2B,OAAO,oBA0D9C,C,sECnGA,SAAgB,mBAAqB,QAAQ,SAAW,QAAQ,QAAU,SC0B1E,IAAM,EAAY,oBAOZ,SAAUM,EAAqB/B,GACnC,OACE,uBAAKa,UAAU,UACb,uBAAKA,UAAS,mBAAc,uBAC1B,qBAAGA,UAAU,oBAAoBb,EAAMgC,UAGzC,uBAAKnB,UAAS,UAAKb,EAAMiC,QAAU,SAAW,SAAQ,4BACpD,uBAAKpB,UAAU,oBAEf,uBAAKA,UAAU,0BACb,uBAAKA,UAAU,SACb,qBAAGA,UAAU,oBAAmB,gBAACW,EAAA,EAAI,CAAC1B,UAAW,EAAW2B,OAAO,mBAGrE,uBAAKZ,UAAU,SACb,qBAAGA,UAAU,oBAAmB,gBAACW,EAAA,EAAI,CAAC1B,UAAW,EAAW2B,OAAO,sBAGrE,uBAAKZ,UAAU,SACb,qBAAGA,UAAU,oBAAmB,gBAACW,EAAA,EAAI,CAAC1B,UAAW,EAAW2B,OAAO,qBAIvE,uBAAKZ,UAAU,WAIvB,CAYM,SAAUqB,EAAiBlC,G,UACvBmC,EAAcnC,EAAdmC,UACFlC,EAAekC,EAAUlC,aACzBmC,EAAenC,EAAaK,SAAWC,EAAA,YAAuBN,EAAaK,SAAWC,EAAA,SACtFY,EAA0C,QAAhC,EAAa,QAAb,EAAAnB,EAAMmB,eAAO,sBAAGgB,EAAU/B,cAAM,SAAI,QAA2B+B,EAAU/B,OAyBzF,OACE,uBAAKS,UAAS,gDAA2C,WAAe,YAAmB,QAAf,EAAAb,EAAMa,iBAAS,QAAI,KAC7F,gBAACa,EAAA,EAAO,CAACP,QAASA,EAASN,UAAS,kDAClC,uBAAKA,UAAS,mBAAc,uBAC1B,gBAACwB,EAAA,EAAiB,CAChBC,OAAQrC,EACRsC,mBAAiB,EACjBC,gBAAiB,cACjBC,aAAc,CAAEC,KAAM,aACtBC,oBAAoB,EACpBC,gBAAc,EACdC,WAAS,KAIb,uBAAKhC,UAAU,iCACb,uBAAKA,UAAU,wBACb,gBAACd,EAAiB,CAACK,MAAO+B,EAAU/B,MAAOH,aAAckC,EAAUlC,gBAGrE,uBAAKY,UAAU,0BACb,uBAAKA,UAAU,mCA3CnBuB,EACK,qBAAGvB,UAAU,QAAM,KAG1B,qBAAGA,UAAU,QACX,gBAACW,EAAA,EAAI,CAAC1B,UAAW,EAAW2B,OAAO,QAAQvC,QAAS,CAAE4D,WAAYX,EAAU/B,MAAM2C,eA0C9E,uBAAKlC,UAAU,mCApCnBuB,EACK,qBAAGvB,UAAU,QAAM,KAG1B,uBAAKA,UAAU,6BACb,gBAACmC,EAAA,EAAY,CAACC,QAAS,UAAmBP,KAAMM,EAAAE,EAAA,SAA2BrC,UAAU,uBACrF,qBAAGA,UAAU,QAAQsB,EAAU/B,MAAM+C,eAkCjC,uBAAKtC,UAAU,mCACb,gBAACuC,EAAA,EAAoB,CACnBvC,UAAU,OACVT,MAAO+B,EAAU/B,MACjBiD,gBAAiBlB,EAAUmB,cAAgB,EAC3CC,QAASpB,EAAU/B,MAAM+C,YAAc,QAMjD,uBAAKtC,UAAU,yEACb,gBAACa,EAAA,EAAO,CAACP,QAASA,EAASN,UAAS,gCAA2B,YAC7D,gBAACW,EAAA,EAAI,CAAC1B,UAAW,EAAW2B,OAAO,aAErC,gBAAC+B,EAAA,EAAe,CACdC,sBAAuBT,EAAAE,EAAA,SACvBQ,QAAS1D,EAAM2D,iBAAiBxB,GAChCyB,wBAAwB,kBAKlC,C,kuBC9IA,IACMC,EAAYC,EAAA,mBADA,0BAGlB,SAASC,EAAc3D,G,MACrB,GAAIA,EAAMrD,OAAS4D,EAAA,UAAoC,QAAjB,EAAAP,aAAK,EAALA,EAAO4D,kBAAU,eAAE3F,QACvD,OAAO+B,EAAM6D,YAAc7D,EAAM8D,YAEnC,IAAMC,EAAe/D,EAAM4D,WAAWxG,IAAI,SAAAqC,GAAC,OAAIA,EAAEqE,WAAW,GAE5D,OAAKC,EAAa9F,QAGlB8F,EAAa7I,KAAK,SAAC8I,EAAOC,GACxB,OAAIC,EAAA,SAAkBF,EAAOC,GACpB,EAEFC,EAAA,UAAmBF,EAAOC,GAAS,GAAK,CACjD,GAEOE,EAAA,OAAiBJ,IATf,EAUX,C,eCLM,SAAUK,EAAcxE,GAC5B,IDkBAyE,EACAC,EACAC,EACAC,EACAC,EAEMC,EAEAC,EC1BAjI,GDkBN2H,ECjBEzE,EAAMyE,WDkBRC,ECjBE1E,EAAM0E,cDkBRC,ECjBE3E,EAAM2E,gBDkBRC,ICjBI5E,EAAMgF,kBDkBVH,ECjBE7E,EAAMiF,0BDmBFH,EAAiC,GAEjCC,EAAgCF,aAA0B,EAA1BA,EAClCvG,OACA,SAACd,EAAKuB,GAAG,OAAK,mBAAIA,EAAIvC,cAAgBuC,GAAQvB,EAAG,EACjD,CAAC,GAGLiH,EAAWjF,QAAQ,SAAA0F,G,MACXjF,EAAeyE,aAAa,EAAbA,EAAgBQ,EAAEC,UAEnCnB,EAAyC,KAc7C,GAZIkB,EAAEnI,OAAS4D,EAAA,cACbqD,EAAa,GAED,QAAZ,EAAAkB,EAAElB,kBAAU,SAAExE,QAAQ,SAAAK,GACpB,IAAMuF,EAAYT,aAAe,EAAfA,EAAkB9E,EAAEwF,aAElCD,GACFpB,EAAWrE,KAAKyF,EACpB,IAIEnF,EAAc,CAChB,IAAMqD,EAAgBrD,EAAaK,SAAWC,EAAA,gBAC5CwE,aAA6B,EAA7BA,EAAiC9E,EAAqCzD,gBAExEsI,EAAUnF,KAAK,CACbS,MAAO8E,EACPjF,aAAAA,EACA0E,gBAAiBX,EACjBC,WAAYF,EAAcmB,GAC1B5B,cAAeA,aAAa,EAAbA,EAAegC,mBAC9BC,QAASL,EAAEK,SAEd,CACH,GAEKX,EAGEY,EAAA,oBAA8BV,GAF5B,EAAP,GAAUjB,EAAU,SAAWiB,ICzDjC,OACE,gCACGW,OAAOC,KAAK5I,GAAMU,IAAI,SAACwE,EAAS2D,GAAU,OACzC,uBAAK5K,IAAK4K,GACR,gBAAC,IAAoB,CAAC3D,QAASA,EAASC,SAAUjC,EAAM4F,iBAAkC,IAAfD,IAE3E,uBAAK9E,UAAU,2BACZ/D,EAAKkF,GAASxE,IAAI,SAAC2E,EAAW0D,GAAK,OAClC,gBAAC3D,EAAA,EAAgB,CACfnH,IAAK8K,EACL1D,UAAWA,EACXwB,iBAAkB3D,EAAM2D,iBACxBmC,YAAa9F,EAAM8F,YACnBC,YAAa/F,EAAM+F,YACnBC,WAAYhG,EAAMgG,YAClB,IAGF,GAId,C,yGChDMnC,EAAY,qBADA,oCAGZ,SAAUoC,IACd,OACE,gBAAC,IAAU,KACT,gBAAC,UAAgB,CAACC,IAAK,mCAA0CxD,KAAK,UACtE,gBAAC,YAAkB,KAChBmB,EAAU,YAEb,gBAAC,SAAe,KAAEA,EAAU,SAC5B,gBAAC,QAAc,CAAC1C,QAAS,CAAEgF,YAAa,cAAuBC,OAAQ,oBAA0BC,KAAMxC,EAAU,SAGvH,C,kDCvBA,SAAgB,QAAU,QAAQ,mBAAqB,SCOjD,SAAUyC,EAAetG,GAC7B,OACE,uBAAKa,UAAU,UACb,uBAAKA,UAAS,mBAAc,uBAC1B,uBAAKA,UAAS,mCAAmC,MAGnD,uBAAKA,UAAS,UAAKb,EAAMiC,QAAU,SAAW,SAAQ,4BACpD,uBAAKpB,UAAU,oBAEf,uBAAKA,UAAU,0BACb,uBAAKA,UAAU,SACb,uBAAKA,UAAS,0CAAqC,YAAgB,MAGrE,uBAAKA,UAAU,SACb,uBAAKA,UAAS,0CAAqC,YAAgB,MAGrE,uBAAKA,UAAU,SACb,uBAAKA,UAAS,0CAAqC,YAAgB,OAIvE,uBAAKA,UAAU,WAIvB,CAEA,SAAS0F,IACP,OACE,uBAAK1F,UAAS,cACZ,uBAAKA,UAAS,mBAAc,uBAC1B,uBAAKA,UAAS,yDAGhB,uBAAKA,UAAU,iCACb,uBAAKA,UAAU,wBACb,uBAAKA,UAAS,mCAAmC,MAGnD,uBAAKA,UAAU,0BACb,uBAAKA,UAAU,SACb,uBAAKA,UAAS,mCAAmC,MAGnD,uBAAKA,UAAU,SACb,uBAAKA,UAAS,mCAAmC,MAGnD,uBAAKA,UAAU,SACb,uBAAKA,UAAS,mCAAmC,OAIrD,uBAAKA,UAAU,uDACb,uBAAKA,UAAS,mCAAmC,OAK3D,CAEM,SAAU2F,IACd,OACE,gCACE,2BACE,gBAACF,EAAc,CAACrE,SAAS,IAEzB,uBAAKpB,UAAU,4CACb,gBAAC0F,EAAU,MACX,gBAACA,EAAU,MACX,gBAACA,EAAU,MACX,gBAACA,EAAU,QAIf,2BACE,gBAACD,EAAc,MAEf,uBAAKzF,UAAU,4CACb,gBAAC0F,EAAU,MACX,gBAACA,EAAU,MACX,gBAACA,EAAU,MACX,gBAACA,EAAU,QAIf,2BACE,gBAACD,EAAc,MAEf,uBAAKzF,UAAU,4CACb,gBAAC0F,EAAU,MACX,gBAACA,EAAU,MACX,gBAACA,EAAU,MACX,gBAACA,EAAU,MACX,gBAACA,EAAU,MACX,gBAACA,EAAU,MACX,gBAACA,EAAU,MACX,gBAACA,EAAU,MACX,gBAACA,EAAU,MACX,gBAACA,EAAU,QAKrB,C,+YCtFM,SAAUE,EAAe,GAAmE,I,IAAjEC,EAAM,EAANA,OAAQC,EAAmB,EAAnBA,oBAAqBC,EAAW,EAAXA,YACtDC,EAAQ,kBAERhL,EAAc,kBAAkC,mBAChDiL,EAAS,kBAA6B,cACtCd,EAAa,mBACD,QAAhB,EAAAnK,EAAYiB,YAAI,eAAEiK,kBAAmB,eAA4BlL,EAAYiB,KAAKnB,aAM9EoC,EAAa,SAACiJ,GAAe,OAAKJ,GAAe,kBAA8B,OAAD,QAClFI,OAAAA,GACGN,GACH,EACIO,EAAY,SAACD,GAAe,OAAKH,EAAM9I,EAAWiJ,GAAQ,EAChE,GAMI,OAAuBjJ,EAAYkJ,GAL9BxC,EAAU,EAAjBrG,MACA8I,EAAO,EAAPA,QACYC,EAAoB,EAAhC1I,WACA2I,EAAU,EAAVA,WACAC,EAAqB,EAArBA,sBAMI3C,GAAgB,QACpBD,aAAU,EAAVA,EAAYjH,IAAI,SAAAuB,GAAG,OAAIA,EAAIoG,SAASmC,UAAU,GAC9C,uBAMI3C,GAAkB,QACtB,2BAAmCF,QAAAA,EAAc,IAAIjH,IAAI,SAAAuB,GAAG,OAAIA,EAAIsG,YAAYiC,UAAU,GAC1F,SAAA1I,GAAI,OAAK,sBAAkCA,EAAM/C,EAAYiB,KAAKnB,WAAW,GAMzE4L,EAAc9C,aAAU,EAAVA,EAChBnG,OAA8B,SAACkJ,EAAMC,GAAW,OAAK,+BAAMD,I,EAAI,G,EAAGC,EAAKtC,S,EAAWsC,G,+XAAI,EAAK,CAAC,GAC1FxC,GAA4B,QAChC0B,EAAsB,WAAoBjC,EAActG,OAAS,IAAM,GACvE,SAAAQ,GAAI,OAAI,EAAA8I,EAAA,eAA0C,CAChDnK,aAAcqB,EACX/D,OAAO,mBACP2C,IAAI,SAAAuB,G,MAAO,MAAC,CACXvC,cAAeuC,EAAIvC,cACnBkB,WAAYqB,EAAI/C,GAChBF,QAA4B,QAAnB,EAAAyL,EAAYxI,EAAI/C,WAAG,eAAEF,Q,GAElC6L,QAAS,CACP1L,kBAAmBJ,EAAYiB,KAAKnB,WACpCI,cAAeF,EAAYiB,KAAKd,KAElC,EACF,SAAA+C,GAAG,gBAAOA,EAAI/C,GAAE,YAAI,kBAAmB+C,EAAMA,EAAIvC,cAAgB,GAAE,GAG/DiC,EAAa0I,GACdzC,EAAcjG,YACdkG,EAAgBlG,YAChBwG,EAA0BxG,YAC1BuH,EAAWvH,WAEVmJ,GAAsBP,IAA0B5C,aAAU,EAAVA,EAAYpG,UAAWqG,EAAcpF,yBAE3F,MAAO,CACLmF,WAAAA,EACAC,cAAAA,EACAC,gBAAAA,EACAqB,WAAYA,EAAWlJ,KACvBmI,0BAAAA,EACAxG,WAAAA,EACAmJ,mBAAAA,EACAR,WAAAA,EACAF,QAAAA,EACAD,UAAAA,EACAlB,YAAwB,QAAX,EAAAe,EAAOhK,YAAI,eAAEiJ,YAE9B,C","sources":["file:///app/packages/libs/shared/src/utils/AnalyticsRequestUtils.ts","file:///app/packages/libs/shared/src/apps/analytics/flight-requests/InteractiveResultsRequests.ts","file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/libs/shared/src/apps/share/components/shared-object-title/SharedObjectTitle.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table-row/my-shares-table-row.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table-row/MySharesTableRow.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/MySharesTableUtils.ts","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/MySharesTable.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/empty-state/MySharesTableEmptyState.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/partial-loading/partial-my-shares-table.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/partial-loading/PartialMySharesTable.tsx","file:///app/packages/projects/lite/src/shared/hooks/useSharesTable.ts"],"sourcesContent":["import { AnalyticsRequestFilter } from 'libs/shared/interfaces';\n\nexport function getAnalyticsRequestKey(baseKey: string, filter: AnalyticsRequestFilter, extra?: string): string {\n if (!filter)\n return baseKey;\n\n let key = `${baseKey}:${filter.start}:${filter.end}`;\n\n const userIdKey = Array.isArray(filter.userId) ? filter.userId.sort().join(':') : filter.userId;\n const groupIdKey = Array.isArray(filter.groupId) ? filter.groupId.sort().join(':') : filter.groupId;\n const customerIdKey = Array.isArray(filter.customerId) ? filter.customerId.sort().join(':') : filter.customerId;\n\n if (userIdKey)\n key += `:${userIdKey}`;\n\n if (groupIdKey)\n key += `:${groupIdKey}`;\n\n if (customerIdKey)\n key += `:${customerIdKey}`;\n\n if (extra)\n key += `:${extra}`;\n\n return key;\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/react/index';\n\nimport { MarkInteractiveAnswer } from 'libs/shared/apps/analytics/interfaces/MarkInteractiveAnswer';\nimport { InteractiveResultsReport } from 'libs/shared/apps/analytics/interfaces/requests/InteractiveResultsReport';\nimport { InteractivesPendingReviewsRequest } from 'libs/shared/apps/analytics/interfaces/requests/InteractivesPendingReviewsRequest';\nimport { AnalyticsRequestFilter, CurrentUser, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\ninterface InteractiveResultFilters {\n currentUserId: string;\n currentCustomerId: string;\n dateRange?: { start: string, end: string }\n userIds?: string | string[];\n classroomsAndGroups?: string | string[];\n shareId?: string;\n}\n\nfunction getInteractiveResultFilters(\n currentUser: CurrentUser,\n filter: AnalyticsRequestFilter,\n shareId?: string\n): InteractiveResultFilters {\n return {\n currentUserId: currentUser.id,\n currentCustomerId: currentUser.customerId,\n dateRange: filter ? { start: filter.start, end: filter.end } : undefined,\n userIds: filter?.userId,\n classroomsAndGroups: filter?.groupId,\n shareId: shareId\n };\n}\n\nexport const InteractiveResultsRequests = {\n /** \n * This endpoint returns data with a lot of duplicated ids,\n * e.g. student answers to the same question will have the same id.\n * Because of that, we don't normalize.\n */\n interactiveResultSet(\n interactiveId: string,\n interactiveMetadataId: string,\n currentUser: CurrentUser,\n filter?: AnalyticsRequestFilter,\n shareId?: string,\n success?: (data: InteractiveResultSet) => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: shareId ?\n `/api/domain/v3/analytics/interactives/${interactiveId}/metadata/${interactiveMetadataId}` :\n `/api/domain/v2/analytics/interactives/${interactiveId}/metadata/${interactiveMetadataId}`,\n key: getAnalyticsRequestKey(`interactive:result:set:${interactiveId}:${interactiveMetadataId}:${shareId}`, filter),\n data: getInteractiveResultFilters(currentUser, filter, shareId),\n type: HttpVerbs.POST,\n normalize: false,\n success,\n error,\n always\n };\n },\n \n /**\n * As the response from `interactiveResultSet` isn't normalised, we need to invalidate the cache\n * to update the results data.\n */\n mark(\n interactiveId: string,\n interactiveMetadataId: string,\n answerId: string,\n data: MarkInteractiveAnswer,\n success?: () => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `/api/domain/v1/analytics/answers/${answerId}`,\n key: `mark:answer:${answerId}:${data.resultId}`,\n type: HttpVerbs.PUT,\n data,\n normalize: false,\n invalidationKeys: `interactive:result:set:${interactiveId}:${interactiveMetadataId}`,\n success,\n error,\n always\n };\n },\n\n pendingReviews(data: InteractivesPendingReviewsRequest): Flight.Request {\n const key = data.interactives.map(interactive => `${interactive.interactiveId}:${interactive.metadataId}:${interactive.shareId}`).join(',');\n return {\n url: `/api/domain/v1/analytics/interactives/pending-reviews/summary`,\n key: `interactives:pending:reviews:${key}`,\n type: HttpVerbs.POST,\n data,\n normalize: false\n };\n },\n\n interactiveResultsReport(data: InteractiveResultsReport): Flight.Request {\n return {\n url: '/api/domain/v3/analytics/interactives/report',\n key: 'interactive:results:report',\n data,\n type: HttpVerbs.POST,\n normalize: false\n };\n }\n};","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst CHUNK_SIZE = 50;\n\nexport interface UseBatchFetchResult<T extends BaseObject> {\n itemsArr: T[];\n items: { [key: string]: T} | null;\n isFetching: boolean;\n hasCompleted: boolean;\n}\n\n/**\n * Used to fetch multiple items by id with Flight. Will fetch 25 items at a time firing off multiple\n * requests if there are more than 25 items.\n * This will return items as null until we have all our items. Items will be returned as an object with\n * their ids as they key for easy mapping\n * \n * @param itemIds \n * @param getRequest \n */\nexport function useBatchFetch<T extends BaseObject>(\n itemIds: string[],\n getRequest: (ids: string[]) => Flight.Request\n): UseBatchFetchResult<T> {\n const chunks = ArrayHelper.chunk<string>(itemIds, CHUNK_SIZE);\n\n const requests = chunks.map(chunk => getRequest(ArrayHelper.uniq(chunk)));\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\n\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce((acc, item) => ({ ...acc, [item.id]: item }), {})\n : null;\n\n return {\n itemsArr,\n items,\n isFetching: responses.isFetching,\n hasCompleted: responses.hasCompleted\n };\n}\n\n/**\n * When you need the useBatchFetch() behavior, but your list of objects to hydrate\n * will grow, such as on a scrolling page. useGrowingBatchFetch() will use local state\n * to determine what we've already built a request for and what items are new\n * as to not re-fetch items - Sha\n */\nexport function useGrowingBatchFetch<TResponse, TObjects = string>(\n objs: TObjects[],\n getRequest: (items: TObjects[]) => Flight.Request,\n _getKey?: (obj: TObjects) => string\n) {\n const getKey = _getKey ?? ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const { fetchItems, ...data } = useGrowingBatchFetchFunc<TResponse, TObjects>({ getRequest, _getKey });\n\n React.useEffect(() => {\n if (!objs?.length)\n return;\n\n fetchItems(objs);\n }, [objs?.map(getKey).join(',')]);\n\n return data;\n}\n\ninterface UseGrowingBatchFetchFuncOptions<TObjects> {\n getRequest: (items: TObjects[]) => Flight.Request;\n _getKey?: (obj: TObjects) => string;\n}\n\n/**\n * When you need the useGrowingBatchFetch() behaviour, but need to trigger the\n * fetch manually and update the objects - Nish \n */\nexport function useGrowingBatchFetchFunc<TResponse, TObjects = string>(\n options: UseGrowingBatchFetchFuncOptions<TObjects>\n) {\n const getKey = options._getKey ?? ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const fetchedItems = React.useRef<Set<string>>(new Set<string>());\n const [ requests, setRequests ] = React.useState<Flight.Request[]>([]);\n\n function fetchItems(objs: TObjects[]) {\n if (!objs?.length)\n return;\n\n const unfetchedItems: TObjects[] = [];\n \n objs.forEach(obj => {\n const key = getKey(obj);\n\n if (fetchedItems.current.has(key))\n return;\n\n unfetchedItems.push(obj);\n fetchedItems.current.add(key);\n });\n \n if (!unfetchedItems.length)\n return;\n \n setRequests(r => ([ ...r, ...ArrayHelper.chunk<TObjects>(unfetchedItems, CHUNK_SIZE).map(options.getRequest) ]));\n }\n\n const responses = Flight.useBasicFetchAll<TResponse[]>(requests);\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce<Record<string, TResponse>>((acc, item) => ({ ...acc, [getKey(item)]: item }), {})\n : null;\n\n return {\n hasFirstRequestCompleted: !!responses.responses?.[0]?.hasCompleted,\n itemsArr,\n items,\n isFetching: responses.isFetching,\n fetchItems\n };\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { SharableEntity, ShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BaseObject } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nconst namespace = 'shared.sharedObjectTitle';\n\ninterface SharedObjectTitleProps {\n share: Share;\n sharedObject: SharableEntity;\n getObjectAppLink?: (object: BaseObject) => Core.AppLink;\n titleClassName?: string;\n subTextClassName?: string;\n}\n\nexport function SharedObjectTitle(props: SharedObjectTitleProps) {\n const { sharedObject, titleClassName, subTextClassName, share } = props;\n const subTextPhrase = getSubTextPhrase();\n const titleAppLink = props.getObjectAppLink?.(sharedObject);\n\n if (share.type === ShareType.Open && share.options.openClassroomName) {\n return (\n <span className={classNames('clamp-2', titleClassName)}>\n {share.options.openClassroomName}\n </span>\n );\n }\n\n if (!sharedObject.name) {\n return <Text namespace={namespace} phrase='videoUnavailable' />;\n }\n\n if (VideoHelper.isVideoType(sharedObject) && !VideoHelper.getCanBeConsumed(sharedObject)?.canNavigate) {\n return (\n <span className={classNames('clamp-2', titleClassName)}>\n {sharedObject.name}\n </span>\n );\n }\n\n function getSubTextPhrase(): string {\n switch (sharedObject.typeId) {\n case MasterType.Series: return 'series';\n case MasterType.Playlist: return 'playlist';\n }\n }\n\n return (\n <div>\n {VideoHelper.isVideoType(sharedObject) && (\n <VideoSubText\n type='series'\n video={sharedObject}\n appLink={'series' in sharedObject && sharedObject.series ? props.getObjectAppLink?.(sharedObject.series) : null}\n analyticsOptions={{ location: LocationContext.Insights }}\n className={`d-inline clamp-1 ${subTextClassName ?? ''}`}\n />\n )}\n\n {subTextPhrase &&\n <TitleSubText>\n <Text namespace={namespace} phrase={subTextPhrase} />\n </TitleSubText>\n }\n\n {titleAppLink ? (\n <AppLink\n appLink={titleAppLink}\n className='clamp-1'\n analyticsData={{ id: sharedObject.id, name: sharedObject.name }}\n analyticsOptions={{\n entity: ShareViewHelper.getAnalyticsEntity(sharedObject.type),\n actionType: UserAction.Click,\n location: LocationContext.MyShares\n }}\n >\n <span className={`clamp-2 ${titleClassName ?? ''}`}>\n {sharedObject.name}\n </span>\n </AppLink>\n ) : (\n <span className={`clamp-2 ${titleClassName ?? ''}`}>\n {sharedObject.name}\n </span>\n )}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"thumbnailContainer\":\"XNQc8\",\"tableRow\":\"R3dYa\",\"viewCta\":\"ssCq6\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { SharedObjectImage } from 'libs/shared/apps/share/components/shared-object-image/SharedObjectImage';\nimport { SharedObjectTitle } from 'libs/shared/apps/share/components/shared-object-title/SharedObjectTitle';\nimport { ShareStatusIndicator } from 'libs/shared/apps/share-v2/components/share-status-indicator/ShareStatusIndicator';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { ActionsDropdown } from 'libs/shared/components/actions/ActionsDropdown';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { YearGroup } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { getInsightsOverviewAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport { MySharesTableData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\n\nimport styles from './my-shares-table-row.scss';\n\nconst namespace = 'myShares.tableRow';\n\ninterface MySharesTableHeadingProps {\n heading: string;\n isFirst: boolean;\n}\n\nexport function MySharesTableHeading(props: MySharesTableHeadingProps) {\n return (\n <div className='d-flex'>\n <div className={`col-auto ${styles.thumbnailContainer}`}>\n <p className='fw-semibold mb-2'>{props.heading}</p>\n </div>\n \n <div className={`${props.isFirst ? 'd-flex' : 'd-none'} col align-items-center`}>\n <div className='col-10 col-md-4' />\n\n <div className='d-none d-md-flex col-6'>\n <div className='col-4'>\n <p className='fw-semibold mb-2'><Text namespace={namespace} phrase='viewsHeading' /></p>\n </div>\n\n <div className='col-3'>\n <p className='fw-semibold mb-2'><Text namespace={namespace} phrase='viewedByHeading' /></p>\n </div>\n\n <div className='col-5'>\n <p className='fw-semibold mb-2'><Text namespace={namespace} phrase='statusHeading' /></p>\n </div>\n </div>\n\n <div className='col-2' />\n </div>\n </div>\n );\n}\n\ninterface MySharesTableRowProps extends React.PropsWithChildren {\n shareData: MySharesTableData;\n breakpoints?: Breakpoints;\n getObjectActions: (row: MySharesTableData) => ActionOptions[];\n yearGroups: YearGroup[];\n imageCdnUrl: string;\n className?: string;\n appLink?: (share: Share) => Core.AppLink;\n}\n\nexport function MySharesTableRow(props: MySharesTableRowProps) {\n const { shareData } = props;\n const sharedObject = shareData.sharedObject;\n const isCollection = sharedObject.typeId === MasterType.Playlist || sharedObject.typeId === MasterType.Series;\n const appLink = props.appLink?.(shareData.share) ?? getInsightsOverviewAppLink(shareData.share);\n\n function renderViewCount() {\n if (isCollection)\n return <p className='mb-0'>-</p>;\n\n return (\n <p className='mb-0'>\n <Text namespace={namespace} phrase='views' options={{ smartCount: shareData.share.viewCount }} />\n </p>\n );\n }\n\n function renderViewedBy() {\n if (isCollection)\n return <p className='mb-0'>-</p>;\n\n return (\n <div className='d-flex align-items-center'>\n <SvgContainer svgName={cvSvgLibrary.User} size={SvgContainerSize.Standard} className='me-2 svg-container' />\n <p className='mb-0'>{shareData.share.accessCount}</p>\n </div>\n );\n }\n\n return (\n <div className={`position-relative hover-bg-light-blue ${styles.tableRow} ${props.className ?? ''}`}>\n <AppLink appLink={appLink} className={`p-2 cursor-pointer d-flex text-decoration-none`}>\n <div className={`col-auto ${styles.thumbnailContainer}`}>\n <SharedObjectImage\n object={sharedObject}\n showVideoMetadata\n locationContext={LocationContext.MyShares}\n imageOptions={{ size: ImageSize.Medium }}\n showCollectionMask={false}\n showVideoCount\n onlyCount\n />\n </div>\n \n <div className='col d-flex align-items-center'>\n <div className='px-3 col-10 col-md-4'>\n <SharedObjectTitle share={shareData.share} sharedObject={shareData.sharedObject} />\n </div>\n\n <div className='d-none d-md-flex col-6'>\n <div className='d-flex align-items-center col-4'>\n {renderViewCount()}\n </div>\n\n <div className='d-flex align-items-center col-3'>\n {renderViewedBy()}\n </div>\n\n <div className='d-flex align-items-center col-5'>\n <ShareStatusIndicator\n className='py-2'\n share={shareData.share}\n markingRequired={shareData.pendingReview > 0}\n hasData={shareData.share.accessCount > 0}\n />\n </div>\n </div>\n </div>\n </AppLink>\n <div className='position-absolute end-0 top-0 bottom-0 d-flex align-items-center pe-2'>\n <AppLink appLink={appLink} className={`me-4 text-info d-none ${styles.viewCta}`}>\n <Text namespace={namespace} phrase='viewCta' />\n </AppLink>\n <ActionsDropdown\n dropdownToggleSvgSize={SvgContainerSize.Standard}\n actions={props.getObjectActions(shareData)}\n dropdownToggleClassName='btn btn-link'\n />\n </div>\n </div>\n );\n}\n","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { InteractivesPendingReviews } from 'libs/shared/apps/analytics/interfaces/response/InteractivesPendingReviewsResponse';\nimport { ShareHelper } from 'libs/shared/apps/share/utils/ShareHelper';\nimport { SharableEntity, SharableRecipient } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { SharePrivacy } from 'libs/shared/apps/share-v2/enums/SharePrivacy';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { InteractiveMetadata } from 'libs/shared/interfaces';\n\nconst namespace = 'myShares.mySharesTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getDateShared(share: Share): string {\n if (share.type === ShareType.Link || !share?.recipients?.length)\n return share.dateShared || share.dateCreated;\n\n const datesCreated = share.recipients.map(r => r.dateCreated);\n\n if (!datesCreated.length)\n return '';\n\n datesCreated.sort((date1, date2) => {\n if (DateHelper.isSame(date1, date2))\n return 0;\n\n return DateHelper.isAfter(date1, date2) ? 1 : -2;\n });\n\n return ArrayHelper.last(datesCreated);\n}\n\nexport interface MySharesTableData {\n share: Share;\n sharedObject: SharableEntity;\n dateShared: string;\n shareRecipients?: SharableRecipient[];\n pendingReview?: number;\n privacy?: SharePrivacy;\n}\n\ntype TableDataGroupings = { [date: string]: MySharesTableData[] };\n\nexport function useGetMySharesData(\n sentShares: Share[],\n sharedObjects: Record<string, SharableEntity>,\n shareRecipients: Record<string, SharableRecipient>,\n groupByDate: boolean,\n interactivesPendingReviews: InteractivesPendingReviews[]\n): TableDataGroupings {\n const tableData: MySharesTableData[] = [];\n\n const interactivesPendingReviewsMap = interactivesPendingReviews\n ?.reduce<Record<string, InteractivesPendingReviews>>(\n (map, obj) => ({ [obj.interactiveId]: obj, ...map }),\n {}\n );\n\n sentShares.forEach(s => {\n const sharedObject = sharedObjects?.[s.objectId];\n\n let recipients: SharableRecipient[] | null = null;\n\n if (s.type === ShareType.Classroom) {\n recipients = [];\n\n s.recipients?.forEach(r => {\n const recipient = shareRecipients?.[r.recipientId];\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 const pendingReview = sharedObject.typeId === MasterType.Interactive &&\n interactivesPendingReviewsMap?.[(sharedObject as InteractiveMetadata).interactiveId];\n\n tableData.push({\n share: s,\n sharedObject,\n shareRecipients: recipients,\n dateShared: getDateShared(s),\n pendingReview: pendingReview?.pendingReviewCount,\n privacy: s.privacy\n });\n }\n });\n\n if (!groupByDate)\n return { [getPhrase('title')]: tableData };\n\n return ShareHelper.groupByDateShared(tableData);\n}","import React from 'react';\n\nimport { InteractivesPendingReviews } from 'libs/shared/apps/analytics/interfaces/response/InteractivesPendingReviewsResponse';\nimport { SharableEntity, SharableRecipient } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { YearGroup } from 'libs/shared/interfaces';\n\nimport { MySharesTableData, useGetMySharesData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\nimport { MySharesTableHeading, MySharesTableRow } from 'apps/my-shares/components/my-shares-table-row/MySharesTableRow';\n\ninterface MySharesTableProps {\n sentShares: Share[];\n sharedObjects: Record<string, SharableEntity>;\n shareRecipients: Record<string, SharableRecipient>;\n interactivesPendingReview: InteractivesPendingReviews[];\n getObjectActions: (row: MySharesTableData) => ActionOptions[];\n groupByDateShared?: boolean;\n showStatus?: boolean;\n showViewCount?: boolean;\n dependencies?: any[];\n breakpoints?: Breakpoints;\n hasDemoInsights?: boolean;\n imageCdnUrl: string;\n yearGroups: YearGroup[];\n}\n\nexport function MySharesTable(props: MySharesTableProps): JSX.Element {\n const data = useGetMySharesData(\n props.sentShares,\n props.sharedObjects,\n props.shareRecipients,\n !!props.groupByDateShared,\n props.interactivesPendingReview\n );\n\n return (\n <>\n {Object.keys(data).map((heading, headingIdx) => (\n <div key={headingIdx}>\n <MySharesTableHeading heading={heading} isFirst={!props.hasDemoInsights && headingIdx === 0} />\n\n <div className='d-flex flex-column mb-4'>\n {data[heading].map((shareData, index) => (\n <MySharesTableRow\n key={index}\n shareData={shareData}\n getObjectActions={props.getObjectActions}\n breakpoints={props.breakpoints}\n imageCdnUrl={props.imageCdnUrl}\n yearGroups={props.yearGroups}\n />\n ))}\n </div>\n </div>\n ))}\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'myShares.mySharesTableEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function MySharesTableEmptyState(): JSX.Element {\n return (\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Share.SHARED_BY_ME} size='small' />\n <EmptyState.Heading>\n {getPhrase('heading')}\n </EmptyState.Heading>\n <EmptyState.Info>{getPhrase('info')}</EmptyState.Info>\n <EmptyState.Cta appLink={{ application: AppChannels.DASHBOARD, action: Actions.Dashboard.HOME }} text={getPhrase('cta')} />\n </EmptyState>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"heading\":\"iWHol\",\"thumbnailContainer\":\"zrcDh\"};","import React from 'react';\n\nimport styles from './partial-my-shares-table.scss';\n\ninterface PartialHeadingProps {\n isFirst?: boolean;\n}\n\nexport function PartialHeading(props: PartialHeadingProps) {\n return (\n <div className='d-flex'>\n <div className={`col-auto ${styles.thumbnailContainer}`}>\n <div className={`partial-loading-background mb-2`}>&nbsp;</div>\n </div>\n \n <div className={`${props.isFirst ? 'd-flex' : 'd-none'} col align-items-center`}>\n <div className='col-10 col-md-4' />\n\n <div className='d-none d-md-flex col-6'>\n <div className='col-4'>\n <div className={`partial-loading-background mb-2 ${styles.heading}`}>&nbsp;</div>\n </div>\n\n <div className='col-3'>\n <div className={`partial-loading-background mb-2 ${styles.heading}`}>&nbsp;</div>\n </div>\n\n <div className='col-5'>\n <div className={`partial-loading-background mb-2 ${styles.heading}`}>&nbsp;</div>\n </div>\n </div>\n\n <div className='col-2' />\n </div>\n </div>\n );\n}\n\nfunction PartialRow(): JSX.Element {\n return (\n <div className={`p-2 d-flex`}>\n <div className={`col-auto ${styles.thumbnailContainer}`}>\n <div className={`partial-loading-background rounded ratio ratio-16x9`} />\n </div>\n \n <div className='col d-flex align-items-center'>\n <div className='px-3 col-10 col-md-4'>\n <div className={`partial-loading-background w-75`}>&nbsp;</div>\n </div>\n\n <div className='d-none d-md-flex col-6'>\n <div className='col-4'>\n <div className={`partial-loading-background w-50`}>&nbsp;</div>\n </div>\n\n <div className='col-3'>\n <div className={`partial-loading-background w-50`}>&nbsp;</div>\n </div>\n\n <div className='col-5'>\n <div className={`partial-loading-background w-75`}>&nbsp;</div>\n </div>\n </div>\n\n <div className='col-2 d-flex justify-content-end align-items-center'>\n <div className={`partial-loading-background w-25`}>&nbsp;</div>\n </div>\n </div>\n </div>\n );\n}\n\nexport function PartialMySharesTable(): JSX.Element {\n return (\n <>\n <div>\n <PartialHeading isFirst={true} />\n\n <div className='d-flex flex-column rounded-3 mb-4 border'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n\n <div>\n <PartialHeading />\n\n <div className='d-flex flex-column rounded-3 mb-4 border'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n\n <div>\n <PartialHeading />\n\n <div className='d-flex flex-column rounded-3 mb-4 border'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n </>\n );\n}","import { Flight } from 'libs/common/react/index';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { InteractiveResultsRequests } from 'libs/shared/apps/analytics/flight-requests/InteractiveResultsRequests';\nimport { InteractivesPendingReviews } from 'libs/shared/apps/analytics/interfaces/response/InteractivesPendingReviewsResponse';\nimport { ShareRequests as ShareRequestsV1 } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { SharableRecipient } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { GetSentSharesParams, ShareRequests as ShareRequestsV2 } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { SharableEntity } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { UseBatchFetchResult, useGrowingBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { BaseObject, Config, CurrentUser, YearGroup } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nexport function getBatchFetchResultAsArray(result: UseBatchFetchResult<BaseObject>): BaseObject[] {\n return result.items ? Object.values(result.items) : [];\n}\n\ninterface UseSharesTableOptions {\n params?: GetSentSharesParams;\n interactiveInsights?: boolean;\n shouldFetch: boolean;\n}\n\nexport function useSharesTable({ params, interactiveInsights, shouldFetch }: UseSharesTableOptions) {\n const fetch = Flight.useGetFetch();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n /**\n * Fetch sent shares\n */\n const getRequest = (cursor?: string) => shouldFetch && ShareRequestsV2.getSentShares({\n cursor,\n ...params\n });\n const fetchNext = (cursor?: string) => fetch(getRequest(cursor));\n const {\n items: sentShares,\n hasMore,\n isFetching: isFetchingSentShares,\n nextCursor,\n hasFirstPageCompleted\n } = useInfiniteList<Share>(getRequest, fetchNext);\n\n /**\n * Fetch shared objects\n */\n const sharedObjects = useGrowingBatchFetch<SharableEntity>(\n sentShares?.map(obj => obj.objectId.toString()),\n ShareRequestsV1.sharedObjectsById\n );\n\n /**\n * Fetch recipients\n */\n const shareRecipients = useGrowingBatchFetch<SharableRecipient>(\n ShareHelper.getFlattenedRecipients(sentShares ?? []).map(obj => obj.recipientId.toString()),\n objs => (ShareRequestsV1.getRecipientsById(objs, currentUser.data.customerId))\n );\n\n /**\n * Fetch which interactives required marking\n */\n const shareLookup = sentShares\n ?.reduce<Record<string, Share>>((prev, next: Share) => ({ ...prev, [next.objectId]: next }), {});\n const interactivesPendingReview = useGrowingBatchFetch<InteractivesPendingReviews, SharableEntity>(\n interactiveInsights ? ObjectHelper.values(sharedObjects.items || []) : [],\n objs => InteractiveResultsRequests.pendingReviews({\n interactives: objs\n .filter(VideoHelper.isInteractive)\n .map(obj => ({\n interactiveId: obj.interactiveId,\n metadataId: obj.id,\n shareId: shareLookup[obj.id]?.shareId\n })),\n filters: {\n currentCustomerId: currentUser.data.customerId,\n currentUserId: currentUser.data.id\n }\n }),\n obj => `${obj.id}:${'interactiveId' in obj ? obj.interactiveId : ''}`\n );\n \n const isFetching = isFetchingSentShares\n || sharedObjects.isFetching\n || shareRecipients.isFetching\n || interactivesPendingReview.isFetching\n || yearGroups.isFetching;\n\n const showPartialLoading = !hasFirstPageCompleted || (sentShares?.length && !sharedObjects.hasFirstRequestCompleted);\n\n return {\n sentShares,\n sharedObjects,\n shareRecipients,\n yearGroups: yearGroups.data,\n interactivesPendingReview,\n isFetching,\n showPartialLoading,\n nextCursor,\n hasMore,\n fetchNext,\n imageCdnUrl: config.data?.imageCdnUrl\n };\n}"],"names":["getAnalyticsRequestKey","baseKey","filter","extra","key","start","end","userIdKey","Array","isArray","userId","sort","join","groupIdKey","groupId","customerIdKey","customerId","getInteractiveResultFilters","currentUser","shareId","currentUserId","id","currentCustomerId","dateRange","undefined","userIds","classroomsAndGroups","InteractiveResultsRequests","interactiveResultSet","interactiveId","interactiveMetadataId","success","error","always","url","data","type","HttpVerbs","normalize","mark","answerId","resultId","invalidationKeys","pendingReviews","interactives","map","interactive","metadataId","interactiveResultsReport","CHUNK_SIZE","useBatchFetch","itemIds","getRequest","requests","chunk","responses","itemsArr","items","length","reduce","acc","item","isFetching","hasCompleted","useGrowingBatchFetch","objs","_getKey","getKey","obj","useGrowingBatchFetchFunc","fetchItems","options","fetchedItems","Set","setRequests","hasFirstRequestCompleted","unfetchedItems","forEach","current","has","push","add","r","namespace","SharedObjectTitle","props","sharedObject","titleClassName","subTextClassName","share","subTextPhrase","typeId","MasterType","getSubTextPhrase","titleAppLink","getObjectAppLink","ShareType","openClassroomName","className","name","VideoHelper","canNavigate","VideoSubText","video","appLink","series","analyticsOptions","location","TitleSubText","Text","phrase","AppLink","analyticsData","entity","ShareViewHelper","actionType","MySharesTableHeading","heading","isFirst","MySharesTableRow","shareData","isCollection","SharedObjectImage","object","showVideoMetadata","locationContext","imageOptions","size","showCollectionMask","showVideoCount","onlyCount","smartCount","viewCount","SvgContainer","svgName","S","accessCount","ShareStatusIndicator","markingRequired","pendingReview","hasData","ActionsDropdown","dropdownToggleSvgSize","actions","getObjectActions","dropdownToggleClassName","getPhrase","LanguageService","getDateShared","recipients","dateShared","dateCreated","datesCreated","date1","date2","DateHelper","ArrayHelper","MySharesTable","sentShares","sharedObjects","shareRecipients","groupByDate","interactivesPendingReviews","tableData","interactivesPendingReviewsMap","groupByDateShared","interactivesPendingReview","s","objectId","recipient","recipientId","pendingReviewCount","privacy","ShareHelper","Object","keys","headingIdx","hasDemoInsights","index","breakpoints","imageCdnUrl","yearGroups","MySharesTableEmptyState","src","application","action","text","PartialHeading","PartialRow","PartialMySharesTable","useSharesTable","params","interactiveInsights","shouldFetch","fetch","config","isAuthenticated","cursor","fetchNext","hasMore","isFetchingSentShares","nextCursor","hasFirstPageCompleted","toString","shareLookup","prev","next","I","filters","showPartialLoading"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1202],{38307:(e,t,n)=>{n.d(t,{c:()=>y,l:()=>g});var r=n(32735),a=n(232),i=n.n(a),o=n(8604),c=n(83345);const s={heatMap:"epapa",legend:"uhH4p"};function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var u="shared.engagementHeatMap",d="#f1f1f1",m=i().scale(["#daf07d","#08bd1a"]),v=[0,.01,.25,.5,.75,1];function f(e,t){return e?m(e/t).hex():d}function p(e,t){for(var n=[],r=0;r<e.length;r++){var a=r>0&&e[r-1],i=e[r],o=r<e.length-1&&e[r+1];i===a&&i===o||n.push("".concat(f(i,t)," ").concat(100/e.length*r,"%"))}return"linear-gradient(to right, ".concat(n.join(","),")")}function g(){var e=Math.max.apply(Math,v),t=100/v.length;return r.createElement("div",{className:"d-flex justify-content-between w-100"},r.createElement(c.x,{namespace:u,phrase:"less"}),r.createElement("div",{className:"d-flex mx-1 flex-grow-1 ".concat(s.legend)},v.map(function(n,a){return r.createElement("div",{key:a,style:{width:"".concat(t,"%"),backgroundColor:f(n,e)}})})),r.createElement(c.x,{namespace:u,phrase:"more"}))}function y(e){var t,n,a,i=(0,o.O)(e.engagement),c=null!==(t=e.max)&&void 0!==t?t:Math.max.apply(Math,function(e){if(Array.isArray(e))return l(e)}(a=i)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(a)||function(e,t){if(e){if("string"==typeof e)return l(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)?l(e,t):void 0}}(a)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}());return r.createElement("div",{className:"border rounded ".concat(s.heatMap," ").concat(null!==(n=e.className)&&void 0!==n?n:""),style:{background:p(i,c)}})}},84621:(e,t,n)=>{n.d(t,{L:()=>o});var r=n(32735),a=n(83914);const i={icon:"sAmpy",count:"faDs4"};function o(e){return r.createElement("section",{className:"d-flex flex-column border rounded p-3 h-100"},r.createElement("div",{className:"d-flex ".concat(e.subtitle?"align-items-top":"align-items-center"," mb-2")},r.createElement("div",{className:"".concat(i.icon," ").concat(e.svgClassName," rounded-circle d-flex justify-content-center align-items-center")},r.createElement(a.x,{svgName:e.svgName,size:a.S.Small})),r.createElement("div",{className:"d-flex flex-column ms-2"},r.createElement("h2",{className:"h6 mb-0"},e.title)),"number"==typeof e.count&&r.createElement("div",{className:"".concat(i.count," d-flex justify-content-center align-items-center bg-light rounded-circle ms-auto")},e.count)),e.children)}},70072:(e,t,n)=>{n.d(t,{d:()=>r});var r={fontSize:"12px",fontFamily:'"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"',fontWeight:"400",color:"#313543"}},26136:(e,t,n)=>{n.d(t,{B:()=>c});var r=n(76198),a=n(23481),i=n(64818),o=a.T.encloseNamespace("shared.analyticsUtils");function c(e,t){return e?t?(0,r._8)((n=e.id,a=e.sessionId,c=+"".concat(n||function(e){if(!e)return 0;for(var t=0,n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n),t|=0;return Math.abs(t)}(a)).concat(Math.floor((new Date).getMinutes()/5)),{dictionaries:[r.O9,r.yd],separator:" ",length:2,style:"capital",seed:c})):e.deleted?o("deleted"):i.l.getFullName(e)||o("anonUser"):o("anonUser");var n,a,c}},8604:(e,t,n)=>{function r(e){var t=e.videoDuration||0;return new Array(Math.ceil(t)).fill(null).map(function(t,n){return(null==e?void 0:e.heatMap[n])||0})}function a(e){return null==e?void 0:e.reduce(function(t,n){return t+n.engagementRate/e.length},0)}n.d(t,{O:()=>r,Q:()=>a})},39157:(e,t,n)=>{n.d(t,{HI:()=>m,R6:()=>l,Rt:()=>f,UU:()=>d,Zs:()=>u,nq:()=>v});var r=n(75896),a=n(94892),i=n(28972),o=n(8246),c=n(83140),s=n(80845);function l(e,t,n){var i={markingRequired:[],lowScore:[],highScore:[],completed:[],notCompleted:[]},o=(0,s.Q)(e),c=new Set(o.map(function(e){return e.id}));t.students.forEach(function(t){var o=Object.assign(Object.assign({},t),{summary:f(e,t)});o.summary.awaitingMarking?i.markingRequired.push(o):r.m.last(t.results).attempts.filter(function(e){var t;return!!c.has(null===(t=null==e?void 0:e.answers[0])||void 0===t?void 0:t.questionId)}).length===c.size?(i.completed.push(o),o.summary.percentCorrect>=((null==n?void 0:n.HIGH)||a.i.HIGH)&&i.highScore.push(o),o.summary.percentCorrect<((null==n?void 0:n.MODERATE)||a.i.MODERATE)&&i.lowScore.push(o)):i.notCompleted.push(o)});var l=r.m.sortBy(i.lowScore,function(e){return e.summary.percentCorrect}),u=r.m.sortBy(i.highScore,function(e){return-e.summary.percentCorrect});return Object.assign(Object.assign({},i),{lowScore:l,highScore:u})}function u(e,t){return(0,s.Wn)(e).find(function(e){return e.id.toString()===t.toString()})}function d(e){return"".concat(e.questionId,":").concat(e.resultId)}function m(e,t,n){var r=(0,s.j_)(t),a=(0,s.f6)(e,r);return(null==a?void 0:a.answers.every(function(e){var t;return(null===(t=n[d(e)])||void 0===t?void 0:t.status)===o.N.Correct}))?o.N.Correct:(null==a?void 0:a.answers.every(function(e){var t;return(null===(t=n[d(e)])||void 0===t?void 0:t.status)===o.N.Incorrect}))?o.N.Incorrect:void 0}function v(e,t){var n=t.students.length,r=0,a=0,o=0,l=0,u=0;return t.students.forEach(function(t){var n=(0,s.j_)(t);if(n){u+=t.results.length;var d=c.A.isInteractionCorrect(e,n);d===i.w.Correct&&r++,d===i.w.UnAnswered&&o++,d===i.w.AwaitingMarking&&l++,d!==i.w.UnAnswered&&a++}}),{percentCorrect:n>0?r/n:0,correct:r,answered:a,unanswered:o,awaitingMarking:l,attempts:u}}function f(e,t){var n=(0,s.j_)(t),r=(0,s.Q)(e),a=r.length,o=0,l=0;r.forEach(function(e){var t=c.A.isInteractionCorrect(e,n);t===i.w.Correct&&o++,t===i.w.AwaitingMarking&&l++});var u=a>0?o/a:0,d=new Set(r.map(function(e){return e.id})),m=n.attempts.filter(function(e){var t;return!!d.has(null===(t=null==e?void 0:e.answers[0])||void 0===t?void 0:t.questionId)}).length;return{answered:m,attempts:t.results.length,unanswered:a-m,percentCorrect:u,correct:o,awaitingMarking:l}}},77640:(e,t,n)=>{n.d(t,{t:()=>f});var r=n(32735),a=n(23481),i=n(31453),o=n(26136),c=n(97408),s=n(83914),l=n(76881),u=n(86613),d=n(64818),m=n(26521),v=a.T.encloseNamespace("shared.userRecipientItemMetadata");function f(e){var t=function(e){var t,n=e.user,r=e.anonymiseUsers,a=e.showDisplayName;if(n.sessionId||n.deleted){var i=(0,o.B)(n,r),c=i.split(" ").filter(function(e){return!!e});return{name:i,surname:c.slice(1).join(" "),avatarUrl:null}}return{name:r?(0,o.B)(n,!0):a?d.l.getDisplayName(n):d.l.getFullName(n),surname:n.surname,avatarUrl:null===(t=n.avatar)||void 0===t?void 0:t.url}}(e),n=t.name,a=t.surname,f=t.avatarUrl;return r.createElement(r.Fragment,null,r.createElement("div",{className:"".concat(m.Z.avatarContainer," ").concat(e.avatarClassName," d-inline-block flex-shrink-0")},r.createElement(c.q,{imageUrl:f,imageCdnUrl:e.imageCdnUrl,initials:d.l.getInitials(n,a),showAnonymousUser:!(e.anonymiseUsers||!e.user.sessionId&&!e.user.deleted),anonymiseUsers:e.anonymiseUsers,anonymousSvgSize:s.S.Small})),r.createElement("div",{className:e.detailsClassName},r.createElement("h4",{className:(0,i.A)("font-size-normal fw-normal m-0",e.nameClassName)},n),e.showSubText&&"id"in e.user&&r.createElement("p",{className:"text-secondary m-0"},e.getSubText?e.getSubText(e.user):function(e){var t=d.l.getUserType(e),n=d.l.getUserRole(e);if(t===l.Y.Staff)return n===u.i.Admin?v("admin"):v("staff");var r=d.l.getYearGroup(e);return(null==r?void 0:r.name)&&"Learners"!==r.name?r.name:v("student")}(e.user))))}f.defaults={showSubText:!0}},40782:(e,t,n)=>{n.d(t,{I:()=>r,O:()=>s});var r,a=n(32735),i=n(2606),o=n(362);function c(e){var t=a.useCallback(function(t){if(t){var n=t.r.baseVal.value,r=2*Math.PI*n,a=r-e.percentage*r;t.style.strokeDasharray="".concat(r," ").concat(r),t.style.strokeDashoffset=a.toString()}},[e.percentage]);return a.createElement("svg",null,a.createElement("circle",{r:(0,i.pu)(e.size),className:o.Z.backgroundCircle}),!(0,i.zR)(e.percentage)&&a.createElement("circle",{ref:t,r:(0,i.pu)(e.size),className:(0,i.V4)(e.percentage,e.scoreThresholds)}))}function s(e){var t,n=(0,i.Ki)(e.percentage),s=e.size||(e.layout===r.LabelInside?i.Mk.Large:i.Mk.Small),l=e.customLabel||(0,i.DV)(n);return e.layout===r.LabelOnly?a.createElement("span",{className:(0,i.IA)(n)},l):a.createElement("div",{className:"d-flex align-items-center justify-content-between ".concat(null!==(t=e.className)&&void 0!==t?t:"")},e.layout===r.LabelBefore&&a.createElement("span",{className:"me-2"},l),a.createElement("div",{className:(0,i.tw)(s,n)},a.createElement(c,{percentage:n,size:s,scoreThresholds:e.scoreThresholds}),e.layout===r.LabelInside&&a.createElement("span",{className:o.Z.centredPercentageText},l)))}!function(e){e.CircleOnly="circle_only",e.LabelOnly="label_only",e.LabelBefore="label_before",e.LabelInside="label_inside"}(r||(r={})),s.defaultProps={layout:r.CircleOnly}},2606:(e,t,n)=>{n.d(t,{DV:()=>g,IA:()=>v,Ki:()=>p,Mk:()=>c,V4:()=>m,pu:()=>d,tw:()=>f,zR:()=>y});var r=n(94892),a=n(362);function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function o(e,t,n){return(t=function(e){var t=function(e){if("object"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=i(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==i(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var c,s=.2,l=.36;!function(e){e.Small="small",e.Large="large",e.ExtraSmall="extraSmall"}(c||(c={}));var u=o(o(o({},c.ExtraSmall,{size:2}),c.Small,{size:2}),c.Large,{size:5.8});function d(e){var t=u[e].size,n=e===c.Large?l:s;return"".concat(t/2-2*n,"rem")}function m(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:r.i;return e>=t.HIGH?a.Z.circleSuccess:e>=t.MODERATE?a.Z.circleWarning:a.Z.circleDanger}function v(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:r.i;return e>=t.HIGH?"text-success":e>=t.MODERATE?"text-warning":"text-danger"}function f(e,t){var n="d-inline-block ".concat(a.Z.circleContainer);return e===c.Large&&(n+=" ".concat(a.Z.lgCircleContainer)),e===c.ExtraSmall&&(n+=" ".concat(a.Z.xsCircleContainer)),y(t)&&(n+=" ".concat(a.Z.pendingCircle)),n}function p(e){if(!y(e))return+e.toFixed(2)}function g(e){return y(e)?"--%":"".concat(Math.round(100*e),"%")}function y(e){return"number"!=typeof e}},94892:(e,t,n)=>{n.d(t,{T:()=>a,i:()=>r});var r={HIGH:.75,MODERATE:.5},a={HIGH:.7,MODERATE:.7}},28972:(e,t,n)=>{var r;n.d(t,{w:()=>r}),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"}(r||(r={}))},8246:(e,t,n)=>{var r;n.d(t,{N:()=>r}),function(e){e[e.Incorrect=0]="Incorrect",e[e.Correct=1]="Correct",e[e.PendingReview=2]="PendingReview"}(r||(r={}))},54405:(e,t,n)=>{n.d(t,{X:()=>r});var r={interactive:function(){return{url:"/mocks/insights/interactive.json",key:"demo:interactive",normalize:!1}},interactiveMetadata:function(){return{url:"/mocks/insights/interactive-metadata.json",key:"demo:interactive:metadata",normalize:!1}},interactiveResults:function(){return{url:"/mocks/insights/interactive-results.json",key:"demo:interactive:results",normalize:!1}},videoViews:function(){return{url:"/mocks/insights/video-views.json",key:"demo:video:views",normalize:!1}},users:function(){return{url:"/mocks/insights/users.json",key:"demo:users",normalize:!1}},individualHeatmap:function(){return{url:"/mocks/insights/individual-heatmap.json",key:"demo:individual:heatmap",normalize:!1}},aggregateHeatmap:function(){return{url:"/mocks/insights/aggregate-heatmap.json",key:"demo:aggregate:heatmap",normalize:!1}}}},83140:(e,t,n)=>{n.d(t,{A:()=>p});var r=n(28972),a=n(8246),i=n(56644);function o(e){return o="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},o(e)}function c(e,t,n){return(t=function(e){var t=function(e){if("object"!=o(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=o(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==o(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(){return r.w.NotApplicable}function l(e,t){var n=e.actionableItems.filter(function(e){return e.isCorrect});return n.every(function(e){return!t(e.id)})?r.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())})?r.w.Correct:r.w.Incorrect}function u(e,t){return e.actionableItems.every(function(e){return!t(e.id)})?r.w.UnAnswered:e.actionableItems.filter(function(e){return e.isCorrect}).every(function(e){var n,r=t(e.id);return(null==r?void 0:r.toString())===(null===(n=e.id)||void 0===n?void 0:n.toString())||r===e.name})?r.w.Correct:r.w.Incorrect}function d(e,t){return function(n){var r=null==t?void 0:t.attempts.find(function(t){return t.id===e.id});return null==r?void 0:r.answers.find(function(e){return e.id===n})}}function m(e,t){var n=d(e,t);return u(e,function(e){var t=n(e);return null==t?void 0:t.text})}function v(e,t){return function(e,t){var n;return e.actionableItems.forEach(function(e){var i=t(e.id);n=i?i.status!==a.N.Correct?i.status!==a.N.Incorrect?r.w.AwaitingMarking:r.w.Incorrect:r.w.Correct:r.w.UnAnswered}),n}(e,d(e,t))}var f=c(c(c(c(c(c(c({},i.Z9.Annotation,s),i.Z9.Image,s),i.Z9.MissingWord,function(e,t){var n=d(e,t);return l(e,function(e){var t=n(e);return null==t?void 0:t.text})}),i.Z9.MultipleChoice,m),i.Z9.ShortAnswer,v),i.Z9.TrueOrFalse,m),i.Z9.Illustration,v),p={notApplicable:s,awaitingMarking:function(){return r.w.AwaitingMarking},isMissingWordCorrect:l,isMultipleChoiceCorrect:u,isInteractionCorrect:function(e,t){return(0,f[e.typeId])(e,t)}}},9566:(e,t,n)=>{n.d(t,{$Z:()=>p,G6:()=>m,GJ:()=>f,VE:()=>h,_w:()=>v,po:()=>y,vJ:()=>g});var r=n(23481),a=n(110),i=n(33518),o=n(2510),c=n(4594),s=n(35223),l=n(14070),u=n(97291),d=r.T.encloseNamespace("myShares.demoInsights"),m={type:o.y.Link,privacy:i.e.JustMySchool,objectId:"0",objectTypeId:c.E.Interactive,viewCount:28,accessCount:15,dateCreated:(new Date).toISOString(),dateShared:(new Date).toISOString(),expireDate:null,link:{shortenedEmbedUrl:"",shortenedUrl:""},shareId:"0",ownerCustomerId:0,ownerId:0,recipients:[],options:{preventScrubbing:!1,immediateFeedback:!1}},v=Object.assign(Object.assign({},m),{type:o.y.Open,expireDate:a.O.add(new Date(m.dateCreated),30,"days").toISOString(),privacy:i.e.PinCode}),f={share:m,sharedObject:null,shareRecipients:null,dateShared:a.O.subtract(new Date,7,"days").toISOString()},p=Object.assign(Object.assign({},f),{share:v}),g={application:u.O.MY_SHARES,action:l.e.MyShares.INTERACTIVE_OVERVIEW_DEMO},y={application:u.O.MY_SHARES,action:l.e.MyShares.INTERACTIVE_OVERVIEW_OPEN_CLASSROOM_DEMO},h={svgName:s.vn.Analytics,label:d("demoInsights"),appLink:g,group:"insights",className:"btn btn-outline-dark"}},38926:(e,t,n)=>{n.r(t),n.d(t,{InteractiveInsightsOverviewDemoView:()=>I});var r=n(32735),a=n(23481),i=n(2948),o=n(20354),c=n(26025),s=n(2510),l=n(38143),u=n(39151),d=n(54405),m=n(31949),v=n(93322),f=n(79612),p=n(74049),g=n(54948),y=n(9566),h=n(10447),S=n(14070),b=n(97291);function E(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var w=a.T.encloseNamespace("insights.interactiveInsightsOverviewView");function I(e){var t,n,a,I,A,C,M=(A=(0,i.D)(l.g.ANONYMISE_USERS),C=1,function(e){if(Array.isArray(e))return e}(A)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,o,c=[],s=!0,l=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);s=!0);}catch(e){l=!0,a=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw a}}return c}}(A,C)||function(e,t){if(e){if("string"==typeof e)return E(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?E(e,t):void 0}}(A,C)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0];(0,v.F)();var O=o.a.useBasicFetch(m.N.currentUser()),N=o.a.useBasicFetch(u.L.config()),k=o.a.useBasicFetch(d.X.interactiveMetadata()),R=o.a.useBasicFetch(d.X.interactive()),T=c.B.getAudienceAppLinkParams(),j=c.B.getDateRangeAppLinkParams(),_=o.a.useBasicFetch(d.X.interactiveResults()),x=o.a.useBasicFetch(d.X.aggregateHeatmap()),D=o.a.useBasicFetch(d.X.videoViews());(0,f.M)({title:k.data?w("pageTitle",{video:null===(t=k.data)||void 0===t?void 0:t.name}):null});var U=O.data&&N.data&&k.data&&R.data&&_.data&&x.data&&!!D.data,L=Object.assign(Object.assign({},T),j),H=function(e,t,n){return n===s.y.Open?{resultsAppLink:{application:b.O.MY_SHARES,action:S.e.MyShares.INTERACTIVE_STUDENTS_OPEN_CLASSROOM_DEMO,args:[e],params:t},questionsAppLink:{application:b.O.MY_SHARES,action:S.e.MyShares.INTERACTIVE_QUESTIONS_OPEN_CLASSROOM_DEMO,args:[e],params:t},heatmapAppLink:{application:b.O.MY_SHARES,action:S.e.MyShares.INTERACTIVE_HEATMAP_OPEN_CLASSROOM_DEMO,args:[e],params:t}}:{resultsAppLink:{application:b.O.MY_SHARES,action:S.e.MyShares.INTERACTIVE_STUDENTS_DEMO,args:[e],params:t},questionsAppLink:{application:b.O.MY_SHARES,action:S.e.MyShares.INTERACTIVE_QUESTIONS_DEMO,args:[e],params:t},heatmapAppLink:{application:b.O.MY_SHARES,action:S.e.MyShares.INTERACTIVE_HEATMAP_DEMO,args:[e],params:t}}}("",L,e.type),V=e.type===s.y.Open?y._w:y.G6;return U?r.createElement("div",{className:"px-3"},r.createElement(p.j,{video:k.data,tabs:(0,h.aq)(null===(n=k.data)||void 0===n?void 0:n.id,"insights",L,e.type),dateRangeAppLinkParams:j,share:Object.assign(Object.assign({},V),{objectId:null===(a=k.data)||void 0===a?void 0:a.id}),yearGroups:[],markingRequired:e.type!==s.y.Open,isDemo:!0,hasData:!0}),r.createElement(g.m,{aggregateEngagement:x.data,interactive:R.data,interactiveMetadata:k.data,classroomStudents:null,results:_.data,osCount:null===(I=D.data)||void 0===I?void 0:I.osCount,config:N.data,interactiveInsightsAppLinks:H,anonymiseUsers:M,hasDataLoaded:U,share:V})):r.createElement(r.Fragment,null)}},26521:(e,t,n)=>{n.d(t,{Z:()=>r});const r={removeRecipient:"mCbMC",recipientItem:"kdcb0",showSpinner:"xH6Mu",avatarContainer:"Zcpg3",recipientDetails:"v5EmV",recipientDetailsWithRemoveButton:"_V928"}},362:(e,t,n)=>{n.d(t,{Z:()=>r});const r={circleContainer:"p8Vgz",backgroundCircle:"asGGE",circleSuccess:"PXLNj",circleWarning:"ZckRN",circleDanger:"slBRg",lgCircleContainer:"N8KCI",xsCircleContainer:"RPqZ2",pendingCircle:"DKrcq",centredPercentageText:"tpmLR"}}}]);
2
+ //# sourceMappingURL=1202-d96ad80884-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/1202-d96ad80884-lite.chunk.js","mappings":"kMACA,SAAgB,QAAU,QAAQ,OAAS,S,sGCQ3C,IAAMA,EAAY,2BAEZC,EAAc,UAIdC,EAAe,UAAa,CAHf,UACA,YAIbC,EAAgB,CAAE,EAAG,IAAM,IAAM,GAAK,IAAM,GAElD,SAASC,EAAmBC,EAAeC,GACzC,OAAKD,EAGEH,EAAaG,EAAQC,GAAKC,MAFxBN,CAGX,CAEA,SAASO,EAAYC,EAAgBH,GAGnC,IAFA,IAAMI,EAAqB,GAElBC,EAAI,EAAGA,EAAIF,EAAKG,OAAQD,IAAK,CACpC,IAAME,EAAgBF,EAAI,GAAKF,EAAKE,EAAI,GAClCG,EAAeL,EAAKE,GACpBI,EAAYJ,EAAIF,EAAKG,OAAS,GAAKH,EAAKE,EAAI,GAM9CG,IAAiBD,GAAiBC,IAAiBC,GAGvDL,EAASM,KAAK,GAAD,OAAIZ,EAAmBU,EAAcR,GAAI,YAAI,IAAMG,EAAKG,OAASD,EAAC,KAChF,CAED,MAAO,6BAAP,OAAoCD,EAASO,KAAK,KAAI,IACxD,CAEM,SAAUC,IACd,IAAMZ,EAAMa,KAAKb,IAAG,MAARa,KAAYhB,GAClBiB,EAA8B,IAAMjB,EAAcS,OAExD,OACE,uBAAKS,UAAU,wCACb,gBAACC,EAAA,EAAI,CAACtB,UAAWA,EAAWuB,OAAO,SACnC,uBAAKF,UAAS,kCAA6B,WACxClB,EAAcqB,IAAI,SAACC,EAAKC,GAAG,OAC1B,uBACEC,IAAKD,EACLE,MAAO,CACLC,MAAO,GAAF,OAAKT,EAA2B,KACrCU,gBAAiB1B,EAAmBqB,EAAKnB,KAE3C,IAGN,gBAACgB,EAAA,EAAI,CAACtB,UAAWA,EAAWuB,OAAO,SAGzC,CAQM,SAAUQ,EAAkBC,G,UAC1BC,GAAU,OAAeD,EAAME,YAC/B5B,EAAe,QAAT,EAAA0B,EAAM1B,WAAG,QAAIa,KAAKb,IAAG,MAARa,K,+CAAYc,I,mjBAErC,OACE,uBACEZ,UAAS,yBAAoB,UAAc,YAAmB,QAAf,EAAAW,EAAMX,iBAAS,QAAI,IAClEO,MAAO,CACLO,WAAY3B,EAAYyB,EAAS3B,KAIzC,C,6DCvFA,SAAgB,KAAO,QAAQ,MAAQ,SCajC,SAAU8B,EAAYJ,GAC1B,OACE,2BAASX,UAAU,+CACjB,uBAAKA,UAAS,iBAAYW,EAAMK,SAAW,kBAAoB,qBAAoB,UACjF,uBAAKhB,UAAS,UAAK,OAAW,YAAIW,EAAMM,aAAY,qEAClD,gBAACC,EAAA,EAAY,CAACC,QAASR,EAAMQ,QAASC,KAAMF,EAAAG,EAAA,SAE9C,uBAAKrB,UAAU,2BACb,sBAAIA,UAAU,WAAWW,EAAMW,QAET,iBAAhBX,EAAMY,OACZ,uBAAKvB,UAAS,UAAK,QAAY,sFAC5BW,EAAMY,QAIZZ,EAAMa,SAGb,C,mCCjCO,IAAMC,EAAoB,CAC/BC,SAAU,OACVC,WAAY,uMACZC,WAAY,MACZC,MAAO,U,wECIHC,EAAY,qBADA,yBAqCZ,SAAUC,EAAkBC,EAAgBC,GAChD,OAAKD,EAIAC,GAOE,SAhCqBC,EAgCqBF,EAAKG,GAhCVC,EAgCcJ,EAAKI,UAvBzDC,GAAQ,GAAD,OAAIH,GAvBnB,SAAoBI,GAClB,IAAKA,EACH,OAAO,EAIT,IADA,IAAIC,EAAO,EACFjD,EAAI,EAAGA,EAAIgD,EAAK/C,OAAQD,IAE/BiD,GAASA,GAAQ,GAAKA,EADTD,EAAKE,WAAWlD,GAE7BiD,GAAQ,EAEV,OAAOzC,KAAK2C,IAAIF,EAClB,CAW6BG,CAAWN,IAAU,OAAGtC,KAAK6C,OAAO,IAAIC,MAAQC,aAAe,IAEnF,CACLC,aAAc,CAAE,KAAQ,MACxBC,UAAW,IACXxD,OAAQ,EACRgB,MAAO,UACP8B,KAAAA,KAUIL,EAAKgB,QACAlB,EAAU,WAEZ,gBAAuBE,IAASF,EAAU,YAP1CA,EAAU,YAtBrB,IAA8BI,EAAgBE,EAStCC,CAwBR,C,iBCnDM,SAAUY,EAAepC,GAC7B,IAAMqC,EAAgBrC,EAAWqC,eAAiB,EAElD,OAAQ,IAAIC,MAAMrD,KAAKsD,KAAKF,IAAiBG,KAAK,MAAMlD,IAAI,SAACmD,EAAGjD,GAAG,OAAKQ,aAAU,EAAVA,EAAYD,QAAQP,KAAQ,CAAC,EACvG,CAEM,SAAUkD,EAAkB1C,GAChC,OAAOA,aAAU,EAAVA,EAAY2C,OAAO,SAACC,EAAMC,GAAI,OAAKD,EAAOC,EAAKC,eAAiB9C,EAAWtB,MAAM,EAAE,EAC5F,C,8KCOM,SAAUqE,EACdC,EACAC,EACAC,GAEA,IAAMC,EAAwB,CAC5BC,gBAAiB,GACjBC,SAAU,GACVC,UAAW,GACXC,UAAW,GACXC,aAAc,IAGVC,GAAe,OAAgBT,GAC/BU,EAAiB,IAAIC,IAAIF,EAAanE,IAAI,SAAAb,GAAC,OAAIA,EAAE6C,EAAE,IAEzD2B,EAAQW,SAASC,QAAQ,SAAAC,GACvB,IAAMC,EAAc,OAAH,wBACZD,GAAC,CACJE,QAASC,EAAyBjB,EAAac,KAG7CC,EAAYC,QAAQE,gBACtBf,EAAOC,gBAAgBtE,KAAKiF,GAIf,SAAiBD,EAAEb,SACEkB,SAASC,OAAO,SAAAC,GAAI,MAAC,QAAEX,EAAeY,IAAiB,QAAb,EAAAD,aAAC,EAADA,EAAGE,QAAQ,UAAE,eAAEC,WAAW,GAAE9F,SAE7EgF,EAAenD,MAC1C4C,EAAOI,UAAUzE,KAAKiF,GAMpBA,EAAYC,QAAQS,kBAAmBvB,aAAc,EAAdA,EAAgBwB,OAAQ,WACjEvB,EAAOG,UAAUxE,KAAKiF,GAEpBA,EAAYC,QAAQS,iBAAkBvB,aAAc,EAAdA,EAAgByB,WAAY,eACpExB,EAAOE,SAASvE,KAAKiF,IARrBZ,EAAOK,aAAa1E,KAAKiF,EAS7B,GAEA,IAAMa,EAAiB,WAAmBzB,EAAOE,SAAU,SAAAS,GAAC,OAAIA,EAAEE,QAAQS,cAAc,GAClFI,EAAkB,WAAmB1B,EAAOG,UAAW,SAAAQ,GAAC,OAAKA,EAAEE,QAAQS,cAAc,GAE3F,OAAO,OAAP,wBACKtB,GAAM,CACTE,SAAUuB,EACVtB,UAAWuB,GAEf,CAEM,SAAUC,EAAmB9B,EAA0B+B,GAE3D,OAD8B,QAAoB/B,GACrBgC,KAAK,SAAAvG,GAAC,OAAIA,EAAE6C,GAAG2D,aAAeF,EAAcE,UAAU,EACrF,CAOM,SAAUC,EAAkBC,GAChC,MAAO,GAAP,OAAUA,EAAOX,WAAU,YAAIW,EAAOC,SACxC,CAEM,SAAUC,EACdN,EACAO,EACAC,GAEA,IAAMC,GAAS,QAAiBF,GAC1BG,GAAkB,QAAkBV,EAAeS,GAMzD,OAJwBC,aAAe,EAAfA,EAAiBlB,QAAQmB,MAAM,SAAArB,G,MACrD,OAA0C,QAAnC,EAAAkB,EAAcL,EAAkBb,WAAG,eAAEsB,UAAW,WACzD,IAGS,aAEiBF,aAAe,EAAfA,EAAiBlB,QAAQmB,MAAM,SAAArB,G,MACvD,OAA0C,QAAnC,EAAAkB,EAAcL,EAAkBb,WAAG,eAAEsB,UAAW,aACzD,IAGS,mBADT,CAEF,CAEM,SAAUC,EACdC,EACA5C,GAEA,IAAM6C,EAAc7C,EAAQW,SAASlF,OACjCqH,EAAa,EACbC,EAAW,EACXC,EAAa,EACb/B,EAAkB,EAClBC,EAAW,EA8Bf,OA5BAlB,EAAQW,SAASC,QAAQ,SAAAC,GACvB,IAAM0B,GAAS,QAAiB1B,GAEhC,GAAK0B,EAAL,CAGArB,GAAsBL,EAAEb,QAAQvE,OAEhC,IAAMwH,EAAc,yBAAkDL,EAAaL,GAE/EU,IAAgB,aAClBH,IAEEG,IAAgB,gBAClBD,IAEEC,IAAgB,qBAClBhC,IAEEgC,IAAgB,gBAClBF,GAhBM,CAiBV,GAOO,CACLvB,eALqBqB,EAAc,EACjCC,EAAaD,EACb,EAIFK,QAASJ,EACTC,SAAAA,EACAC,WAAAA,EACA/B,gBAAAA,EACAC,SAAAA,EAEJ,CAEM,SAAUF,EAAyBjB,EAA0BsC,GACjE,IAAME,GAAS,QAAiBF,GAE1B7B,GAAe,OAAgBT,GAE/BoD,EAAkB3C,EAAa/E,OAEjCqH,EAAa,EACb7B,EAAkB,EAEtBT,EAAaI,QAAQ,SAAApF,GACnB,IAAMyH,EAAc,yBAAkDzH,EAAG+G,GAErEU,IAAgB,aAClBH,IAEEG,IAAgB,qBAClBhC,GACJ,GAEA,IAAMO,EAAiB2B,EAAkB,EAAIL,EAAaK,EAAkB,EAQtE1C,EAAiB,IAAIC,IAAIF,EAAanE,IAAI,SAAAb,GAAC,OAAIA,EAAE6C,EAAE,IACnD+E,EAAuBb,EAAOrB,SAASC,OAAO,SAAAC,GAAI,MAAC,QAAEX,EAAeY,IAAiB,QAAb,EAAAD,aAAC,EAADA,EAAGE,QAAQ,UAAE,eAAEC,WAAW,GAAE9F,OAE1G,MAAO,CACLsH,SAAUK,EACVlC,SAAUmB,EAAerC,QAAQvE,OACjCuH,WAAYG,EAAkBC,EAC9B5B,eAAAA,EACA0B,QAASJ,EACT7B,gBAAAA,EAEJ,C,qJCvLMjD,EAAY,qBADA,oCAwEZ,SAAUqF,EAA0BxG,GACxC,MA9CF,SAAsB,GAMrB,I,EALCqB,EAAI,EAAJA,KAAMoF,EAAc,EAAdA,eAAgBC,EAAe,EAAfA,gBAMtB,GAAIrF,EAAKI,WAAaJ,EAAKgB,QAAS,CAClC,IAAMsE,GAAW,OAAkBtF,EAAMoF,GACnCG,EAAYD,EAASE,MAAM,KAAKvC,OAAO,SAAAwC,GAAC,QAAMA,CAAC,GAErD,MAAO,CACLC,KAAMJ,EACNK,QAASJ,EAAUK,MAAM,GAAGhI,KAAK,KACjCiI,UAAW,KAEd,CAED,MAAO,CACLH,KAAMN,GACF,OAAkBpF,GAAM,GACxBqF,EACE,mBAA0BrF,GAC1B,gBAAuBA,GAC7B2F,QAAS3F,EAAK2F,QACdE,UAAsB,QAAX,EAAA7F,EAAK8F,cAAM,eAAEC,IAE5B,CAmBuCC,CAAarH,GAA1C+G,EAAI,EAAJA,KAAMC,EAAO,EAAPA,QAASE,EAAS,EAATA,UAEvB,OACE,gCACE,uBAAK7H,UAAS,UAAK,oBAAsB,YAAIW,EAAMsH,gBAAe,kCAChE,gBAAC,IAAM,CACLC,SAAUL,EACVM,YAAaxH,EAAMwH,YACnBC,SAAU,gBAAuBV,EAAMC,GACvCU,oBAAoB1H,EAAMyG,iBAAqBzG,EAAMqB,KAAKI,YAAezB,EAAMqB,KAAKgB,SACpFoE,eAAgBzG,EAAMyG,eACtBkB,iBAAkB,EAAAjH,EAAA,SAItB,uBAAKrB,UAAWW,EAAM4H,kBACpB,sBAAIvI,WAAW,OAAW,iCAAkCW,EAAM6H,gBAC/Dd,GAEF/G,EAAM8H,aAAe,OAAQ9H,EAAMqB,MAAQ,qBAAGhC,UAAU,sBAAsBW,EAAM+H,WAAa/H,EAAM+H,WAAW/H,EAAMqB,MAzFjI,SAAoBA,GAClB,IAAM2G,EAAW,gBAAuB3G,GAClC4G,EAAO,gBAAuB5G,GAEpC,GAAI2G,IAAa,UACf,OAAIC,IAAS,UACJ9G,EAAU,SAEZA,EAAU,SAGnB,IAAM+G,EAAY,iBAAwB7G,GAO1C,OAAI6G,aAAS,EAATA,EAAWnB,OAA2B,aAAnBmB,EAAUnB,KACxBmB,EAAUnB,KAEZ5F,EAAU,UACnB,CAmEyI4G,CAAW/H,EAAMqB,QAI1J,CAxCAmF,EAA0B2B,SAAW,CACnCL,aAAa,E,+CCvBHM,E,8BA3BZ,SAASC,EAAerI,GACtB,IAAMsI,EAAM,cAAkB,SAACC,GAC7B,GAAKA,EAAL,CAGA,IAAMC,EAASD,EAAOE,EAAEC,QAAQrK,MAC1BsK,EAAgB,EAAIxJ,KAAKyJ,GAAKJ,EAC9BK,EAASF,EAAgB3I,EAAM8I,WAAaH,EAElDJ,EAAO3I,MAAMmJ,gBAAkB,GAAH,OAAMJ,EAAa,YAAIA,GACnDJ,EAAO3I,MAAMoJ,iBAAmBH,EAAO1D,UAP/B,CAQV,EAAG,CAACnF,EAAM8I,aAEV,OACE,2BACE,0BAAQL,GAAG,QAAgBzI,EAAMS,MAAOpB,UAAW,yBACjD,QAAUW,EAAM8I,aAChB,0BACER,IAAKA,EACLG,GAAG,QAAgBzI,EAAMS,MACzBpB,WAAW,QAAmBW,EAAM8I,WAAY9I,EAAMiJ,mBAKhE,CAsBM,SAAUC,EAAoBlJ,G,MAC5BmJ,GAAoB,QAAqBnJ,EAAM8I,YAE/CrI,EAAOT,EAAMS,OAChBT,EAAMoJ,SAAWhB,EAA0BiB,YACxC,WACA,YAGAC,EAAQtJ,EAAMuJ,cAAe,QAAuBJ,GAE1D,OAAInJ,EAAMoJ,SAAWhB,EAA0BoB,UAE3C,wBAAMnK,WAAW,QAA0B8J,IACxCG,GAKL,uBAAKjK,UAAS,4DAAsE,QAAf,EAAAW,EAAMX,iBAAS,QAAI,KACrFW,EAAMoJ,SAAWhB,EAA0BqB,aAC1C,wBAAMpK,UAAU,QACbiK,GAGL,uBAAKjK,WAAW,QAA4BoB,EAAM0I,IAChD,gBAACd,EAAc,CAACS,WAAYK,EAAmB1I,KAAMA,EAAMwI,gBAAiBjJ,EAAMiJ,kBACjFjJ,EAAMoJ,SAAWhB,EAA0BiB,aAC1C,wBAAMhK,UAAW,2BACdiK,IAMb,EAvDA,SAAYlB,GACV,2BACA,yBACA,6BACA,4BACD,CALD,CAAYA,IAAAA,EAAyB,KAgBrCc,EAAoBQ,aAAe,CACjCN,OAAQhB,EAA0BuB,W,6uBC3DpC,IAKYC,EAHNC,EAAsB,GACtBC,EAAyB,KAE/B,SAAYF,GACV,gBACA,gBACA,yBACD,CAJD,CAAYA,IAAAA,EAAkB,KAM9B,IAAMG,EAAwB,EAAH,OACxBH,EAAmBI,WAAa,CAC/BvJ,KAbiB,IAelBmJ,EAAmBK,MAAQ,CAC1BxJ,KAhBiB,IAkBlBmJ,EAAmBM,MAAQ,CAC1BzJ,KAlBoB,MAyBlB,SAAU0J,EAAgB1J,GAC9B,IAAMZ,EAAQkK,EAAsBtJ,GAAMA,KACpC2J,EAAc3J,IAASmJ,EAAmBM,MAAQJ,EAAyBD,EACjF,MAAO,GAAP,OAAUhK,EAAQ,EAAkB,EAAduK,EAAe,MACvC,CAEM,SAAUC,EACdvB,GACyD,IAAzDG,EAAA,uDAAmC,IAEnC,OAAIH,GAAcG,EAAgBrE,KACzB,kBAELkE,GAAcG,EAAgBpE,SACzB,kBAEF,gBACT,CAEM,SAAUyF,EACdxB,GACyD,IAAzDG,EAAA,uDAAmC,IAEnC,OAAIH,GAAcG,EAAgBrE,KACzB,eAELkE,GAAcG,EAAgBpE,SACzB,eAEF,aACT,CAEM,SAAU0F,EAA4B9J,EAA0BqI,GACpE,IAAIzJ,EAAY,kBAAH,OAAqB,qBAWlC,OATIoB,IAASmJ,EAAmBM,QAC9B7K,GAAa,IAAJ,OAAQ,wBAEfoB,IAASmJ,EAAmBI,aAC9B3K,GAAa,IAAJ,OAAQ,wBAEfmL,EAAU1B,KACZzJ,GAAa,IAAJ,OAAQ,oBAEZA,CACT,CAEM,SAAUoL,EAAqB3B,GACnC,IAAI0B,EAAU1B,GAGd,OAAQA,EAAW4B,QAAQ,EAC7B,CAEM,SAAUC,EAAuB7B,GACrC,OAAI0B,EAAU1B,GACL,MAEF,GAAP,OAAU3J,KAAKyL,MAAmB,IAAb9B,GAAiB,IACxC,CAEM,SAAU0B,EAAU1B,GACxB,MAA6B,iBAAfA,CAChB,C,2CC5FO,IAAM+B,EAA0C,CACrDjG,KAAM,IACNC,SAAU,IAGCiG,EAA0C,CACrDlG,KAAM,GACNC,SAAU,G,kBCZZ,IAAYkG,E,iBAAZ,SAAYA,GACV,yBACA,6BACA,yCAEA,2BACA,+BACA,oCACD,CARD,CAAYA,IAAAA,EAAsB,I,iBCAlC,IAAYC,E,iBAAZ,SAAYA,GACV,6BACA,yBACA,oCACD,CAJD,CAAYA,IAAAA,EAAuB,I,mCCE5B,IAAMC,EAAuB,CAClC/H,YAAW,WACT,MAAO,CACLkE,IAAK,mCACLzH,IAAK,mBACLuL,WAAW,EAEf,EAEAC,oBAAmB,WACjB,MAAO,CACL/D,IAAK,4CACLzH,IAAK,4BACLuL,WAAW,EAEf,EAEAE,mBAAkB,WAChB,MAAO,CACLhE,IAAK,2CACLzH,IAAK,2BACLuL,WAAW,EAEf,EAEAG,WAAU,WACR,MAAO,CACLjE,IAAK,mCACLzH,IAAK,mBACLuL,WAAW,EAEf,EAEAI,MAAK,WACH,MAAO,CACLlE,IAAK,6BACLzH,IAAK,aACLuL,WAAW,EAEf,EAEAK,kBAAiB,WACf,MAAO,CACLnE,IAAK,0CACLzH,IAAK,0BACLuL,WAAW,EAEf,EAEAM,iBAAgB,WACd,MAAO,CACLpE,IAAK,yCACLzH,IAAK,yBACLuL,WAAW,EAEf,E,0rBCnDF,SAASO,IACP,OAAO,iBACT,CAMA,SAASC,EACP3F,EACA4F,GAEA,IAAMC,EAAQ7F,EAAY8F,gBAAgBvH,OAAO,SAAAC,GAAC,OAAIA,EACnDuH,SAAS,GAEZ,OAAIF,EAAMhG,MAAM,SAAArB,GAAC,OAAKoH,EAAiBpH,EAAE/C,GAAG,GACnC,eAEOoK,EAAMhG,MAAM,SAAArB,GAAI,MAAC,OAAAA,EAAEwC,KAAKgF,OAAOC,iBAAwC,QAAtB,EAAAL,EAAiBpH,EAAE/C,WAAG,eAAEuK,OAAOC,cAAa,GAC5F,YAAiC,aACpD,CAEA,SAASC,EACPlG,EACA4F,GAEA,OAAI5F,EAAY8F,gBAAgBjG,MAAM,SAAArB,GAAC,OAAKoH,EAAiBpH,EAAE/C,GAAG,GACzD,eAEYuE,EAAY8F,gBAAgBvH,OAAO,SAAAC,GAAC,OAAIA,EAAEuH,SAAS,GAE3ClG,MAAM,SAAArB,G,MAC3B2H,EAAgBP,EAAiBpH,EAAE/C,IAOzC,OAAO0K,aAAa,EAAbA,EAAe/G,eAAmB,QAAJ,EAAAZ,EAAE/C,UAAE,eAAE2D,aAAc+G,IAAkB3H,EAAEwC,IAC/E,GACiB,YAAiC,aACpD,CAmCA,SAASoF,EAAoBpG,EAA0BL,GACrD,OAAO,SAAClE,GACN,IAAM4K,EAAU1G,aAAM,EAANA,EAAQrB,SAASa,KAAK,SAAAX,GAAC,OAAIA,EAAE/C,KAAOuE,EAAYvE,EAAE,GAClE,OAAO4K,aAAO,EAAPA,EAAS3H,QAAQS,KAAK,SAAAlB,GAAC,OAAIA,EAAExC,KAAOA,CAAE,EAC/C,CACF,CAWA,SAAS6K,EAA4BtG,EAA0BL,GAC7D,IAAMiG,EAAmBQ,EAAoBpG,EAAaL,GAE1D,OAAOuG,EAAwBlG,EAAa,SAACvE,GAC3C,IAAM6D,EAASsG,EAAiBnK,GAChC,OAAO6D,aAAM,EAANA,EAAQiH,IACjB,EACF,CAEA,SAASC,EACPxG,EACAL,GAGA,OA/DF,SACEK,EACA4F,GAEA,IAAIvF,EAwBJ,OArBAL,EAAY8F,gBAAgB9H,QAAQ,SAAAyI,GAClC,IAAMN,EAAgBP,EAAiBa,EAAKhL,IAiB5C4E,EAfK8F,EAKDA,EAAcrG,SAAW,YAKzBqG,EAAcrG,SAAW,cAKf,oBAJE,cALA,YALA,cAelB,GAEOO,CACT,CAkCSqG,CAA8B1G,EADZoG,EAAoBpG,EAAaL,GAE5D,CAEA,IAAMgH,EAAe,iBAClB,gBAA+BjB,GAC/B,WAA0BA,GAC1B,iBA7BH,SAAkC1F,EAA0BL,GAC1D,IAAMiG,EAAmBQ,EAAoBpG,EAAaL,GAE1D,OAAOgG,EAAqB3F,EAAa,SAACvE,GACxC,IAAM6D,EAASsG,EAAiBnK,GAChC,OAAO6D,aAAM,EAANA,EAAQiH,IACjB,EACF,GAuBG,oBAAmCD,GACnC,iBAAgCE,GAChC,iBAAgCF,GAChC,kBAAiCE,GASvBI,EAA+B,CAC1ClB,cAAAA,EACArH,gBA5HF,WACE,OAAO,mBACT,EA2HEsH,qBAAAA,EACAO,wBAAAA,EACAW,qBAXF,SAA8B7G,EAA0BL,GAGtD,OAAOmH,EAFaH,EAAgB3G,EAAY+G,SAE7B/G,EAAaL,EAClC,E,iLCjHMvE,EAAY,qBADA,yBAKL4L,EAA6B,CACxCC,KAAM,SACNC,QAAS,iBACTC,SAAU,IACVC,aAAc,gBACdC,UAAW,GACXC,YAAa,GACbC,aAAa,IAAIrL,MAAOsL,cACxBC,YAAY,IAAIvL,MAAOsL,cACvBE,WAAY,KACZC,KAAM,CACJC,kBAAmB,GACnBC,aAAc,IAEhBC,QAAS,IACTC,gBAAiB,EACjBC,QAAS,EACTC,WAAY,GACZC,QAAS,CACPC,kBAAkB,EAClBC,mBAAmB,IAIVC,EAAkC,+BAC1CrB,GAAmB,CACtBC,KAAM,SACNS,WAAY,QAAe,IAAIxL,KAAK8K,EAAoBO,aAAc,GAAI,QAAQC,cAClFN,QAAS,cAGEoB,EAAoD,CAC/DC,MAAOvB,EACPwB,aAAc,KACdC,gBAAiB,KACjBhB,WAAY,aAAoB,IAAIvL,KArCR,EAqCuC,QAAQsL,eAGhEkB,EAA6C,+BACrDJ,GAA8B,CACjCC,MAAOF,IAGIM,EAAsC,CACjDC,YAAa,cACbC,OAAQ,wCAGGC,EAAqD,CAChEF,YAAa,cACbC,OAAQ,uDAGGE,EAAsC,CACjDtO,QAAS,eACT8I,MAAOnI,EAAU,gBACjB4N,QAASL,EACTM,MAAO,WACP3P,UAAW,uB,yXCxDb,IACM8B,EAAY8N,EAAA,mBADA,4CAOZ,SAAUC,EAAoClP,G,gBAC3CyG,G,GAAkB,OAAsB0I,EAAA,mB,EAAoC,E,o4BAA9D,IAErB,EAAAC,EAAA,KAEA,IAAMC,EAAc,kBAAkCC,EAAA,iBAChDC,EAAS,kBAA6BC,EAAA,YAEtCrE,EAAsB,kBAC1BF,EAAA,yBAGI/H,EAAc,kBAAkC+H,EAAA,iBAEhDwE,EAAwB,+BACxBC,EAAyB,gCAEzBvM,EAAU,kBAA2C8H,EAAA,wBAErD0E,EAAsB,kBAC1B1E,EAAA,sBAGII,EAAa,kBACjBJ,EAAA,iBAGF,EAAA2E,EAAA,GAAmB,CAAEjP,MAAOwK,EAAoB1M,KAAO0C,EAAU,YAAa,CAAE0O,MAA+B,QAAxB,EAAA1E,EAAoB1M,YAAI,eAAEsI,OAAU,OAE3H,IAAM+I,EACJT,EAAY5Q,MACZ8Q,EAAO9Q,MACP0M,EAAoB1M,MACpByE,EAAYzE,MACZ0E,EAAQ1E,MACRkR,EAAoBlR,QAClB4M,EAAW5M,KAETsR,EAAS,OAAH,wBACPN,GACAC,GAECM,ECjEF,SAAyCxO,EAAYuO,EAAqB/C,GAC9E,OAAIA,IAASiD,EAAA,OACJ,CACLC,eAAgB,CACdvB,YAAa,cACbC,OAAQ,sDACRuB,KAAM,CAAC3O,GACPuO,OAAAA,GAEFK,iBAAkB,CAChBzB,YAAa,cACbC,OAAQ,uDACRuB,KAAM,CAAC3O,GACPuO,OAAAA,GAEFM,eAAgB,CACd1B,YAAa,cACbC,OAAQ,qDACRuB,KAAM,CAAC3O,GACPuO,OAAAA,IAKC,CACLG,eAAgB,CACdvB,YAAa,cACbC,OAAQ,uCACRuB,KAAM,CAAC3O,GACPuO,OAAAA,GAEFK,iBAAkB,CAChBzB,YAAa,cACbC,OAAQ,wCACRuB,KAAM,CAAC3O,GACPuO,OAAAA,GAEFM,eAAgB,CACd1B,YAAa,cACbC,OAAQ,sCACRuB,KAAM,CAAC3O,GACPuO,OAAAA,GAGN,CDqBsCO,CAClC,GACAP,EACA/P,EAAMgN,MAGFsB,EAAQtO,EAAMgN,OAASiD,EAAA,OAAiB,KAAqC,KAEnF,OAAKH,EAIH,uBAAKzQ,UAAU,QACb,gBAACkR,EAAA,EAAc,CACbV,MAAO1E,EAAoB1M,KAC3B+R,MAAM,QAAuD,QAAxB,EAAArF,EAAoB1M,YAAI,eAAE+C,GAAI,WAAYuO,EAAQ/P,EAAMgN,MAC7F0C,uBAAwBA,EACxBpB,MAAK,+BACAA,GAAK,CACRpB,SAAkC,QAAxB,EAAA/B,EAAoB1M,YAAI,eAAE+C,KAEtCiP,WAAY,GACZnN,gBAAiBtD,EAAMgN,OAASiD,EAAA,OAChCS,QAAM,EACNC,SAAO,IAGT,gBAACC,EAAA,EAA2B,CAC1BjB,oBAAqBA,EAAoBlR,KACzCyE,YAAaA,EAAYzE,KACzB0M,oBAAqBA,EAAoB1M,KACzCoS,kBAAmB,KACnB1N,QAASA,EAAQ1E,KACjBqS,QAAwB,QAAf,EAAAzF,EAAW5M,YAAI,eAAEqS,QAC1BvB,OAAQA,EAAO9Q,KACfuR,4BAA6BA,EAC7BvJ,eAAgBA,EAChBqJ,cAAeA,EACfxB,MAAOA,KA7BJ,gCAiCX,C,mCEjHA,SAAgB,gBAAkB,QAAQ,cAAgB,QAAQ,YAAc,QAAQ,gBAAkB,QAAQ,iBAAmB,QAAQ,iCAAmC,Q,iCCAhL,SAAgB,gBAAkB,QAAQ,iBAAmB,QAAQ,cAAgB,QAAQ,cAAgB,QAAQ,aAAe,QAAQ,kBAAoB,QAAQ,kBAAoB,QAAQ,cAAgB,QAAQ,sBAAwB,Q","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/constants/ChartStyles.ts","file:///app/packages/libs/shared/src/apps/analytics/utils/AnonymiseUserUtils.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/components/percentage-indicator/PercentageIndicator.tsx","file:///app/packages/libs/shared/src/components/percentage-indicator/PercentageIndicatorUtils.ts","file:///app/packages/libs/shared/src/constants/ScoreThresholds.ts","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/InsightsDemoRequests.ts","file:///app/packages/libs/shared/src/utils/InteractiveCorrectnessHelper.ts","file:///app/packages/projects/lite/src/apps/my-shares/constants/MySharesDemoInsights.ts","file:///app/packages/projects/lite/src/apps/my-shares/views/demo/overview/InteractiveInsightsOverviewDemoView.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/demo/overview/InteractiveInsightsOverviewDemoUtils.ts","file:///app/packages/libs/shared/src/apps/share/components/recipient-item/recipient-item.scss","file:///app/packages/libs/shared/src/components/percentage-indicator/percentage-indicator.scss"],"sourcesContent":["// 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, SvgContainerSize } 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 rounded p-3 h-100'>\n <div className={`d-flex ${props.subtitle ? 'align-items-top' : 'align-items-center'} mb-2`}>\n <div className={`${styles.icon} ${props.svgClassName} rounded-circle d-flex justify-content-center align-items-center`}>\n <SvgContainer svgName={props.svgName} size={SvgContainerSize.Small} />\n </div>\n <div className='d-flex flex-column ms-2'>\n <h2 className='h6 mb-0'>{props.title}</h2>\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}","export const CHART_FONT_STYLES = {\n fontSize: '12px',\n fontFamily: `\"Inter\",-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",\"Liberation Sans\",sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\"`,\n fontWeight: '400',\n color: '#313543'\n};","import { animals, colors, Config as UniqueNamesConfig, uniqueNamesGenerator } from 'unique-names-generator';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nconst namespace = 'shared.analyticsUtils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction guidToSeed(guid: string): number {\n if (!guid)\n return 0;\n\n // Simple hash function (DJB2-like) for browsers\n let hash = 0;\n for (let i = 0; i < guid.length; i++) {\n const char = guid.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash |= 0; // Convert to 32bit integer\n }\n return Math.abs(hash);\n}\n\nfunction getUniqueNamesConfig(userId: string, sessionId: string): UniqueNamesConfig {\n /**\n * Generate a seed that is unique to each user but changes every 5 minutes.\n * \n * We use a seed so that if the same user's name is anonymised multiple times\n * in quick succession (e.g. multiple renders), the same name will be returned each time.\n * \n * We change the seed every 5 minutes so that students don't always have the same name.\n */\n const seed = +`${userId || guidToSeed(sessionId)}${Math.floor((new Date()).getMinutes() / 5)}`;\n\n return {\n dictionaries: [ colors, animals ],\n separator: ' ',\n length: 2,\n style: 'capital',\n seed\n };\n}\n\nexport function anonymiseUserName(user: AnonUser, shouldAnonymise: boolean): string {\n if (!user) {\n return getPhrase('anonUser');\n }\n\n if (!shouldAnonymise) {\n if (user.deleted)\n return getPhrase('deleted');\n\n return UserHelper.getFullName(user) || getPhrase('anonUser');\n }\n\n return uniqueNamesGenerator(getUniqueNamesConfig(user.id, user.sessionId));\n}\n","import { 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 const videoDuration = engagement.videoDuration || 0;\n \n return (new Array(Math.ceil(videoDuration))).fill(null).map((t, idx) => engagement?.heatMap[idx] || 0);\n}\n\nexport function getEngagementRate(engagement: Engagement[]): number {\n return engagement?.reduce((prev, next) => prev + next.engagementRate / engagement.length, 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, ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, StudentAnswer, StudentResults } from 'libs/shared/interfaces';\nimport { Interactive, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { InteractiveCorrectnessHelper } from 'libs/shared/utils/InteractiveCorrectnessHelper';\nimport { flattenInteractions, getInteractions, getStudentAttempt, getStudentResult } from 'libs/shared/utils/InteractiveHelper';\n\ninterface StudentGroups {\n markingRequired: StudentResultsWithSummary[];\n lowScore: StudentResultsWithSummary[];\n highScore: StudentResultsWithSummary[];\n completed: StudentResultsWithSummary[];\n notCompleted: StudentResultsWithSummary[];\n}\n\nexport function groupStudents(\n interactive: Interactive,\n results: InteractiveResultSet,\n scoreThreshold?: ScoreThresholds\n): StudentGroups {\n const groups: StudentGroups = {\n markingRequired: [],\n lowScore: [],\n highScore: [],\n completed: [],\n notCompleted: []\n };\n\n const interactions = getInteractions(interactive);\n const interactionIds = new Set(interactions.map(i => i.id));\n \n results.students.forEach(s => {\n const withSummary = {\n ...s,\n summary: getStudentResultsSummary(interactive, s)\n };\n \n if (withSummary.summary.awaitingMarking) {\n groups.markingRequired.push(withSummary);\n return;\n }\n\n const result = ArrayHelper.last(s.results);\n const answeredInteractions = result.attempts.filter(a => !!interactionIds.has(a?.answers[0]?.questionId)).length;\n\n if (answeredInteractions === interactionIds.size) {\n groups.completed.push(withSummary);\n } else {\n groups.notCompleted.push(withSummary);\n return;\n }\n \n if (withSummary.summary.percentCorrect >= (scoreThreshold?.HIGH || ScoreThresholdDefaults.HIGH))\n groups.highScore.push(withSummary);\n \n if (withSummary.summary.percentCorrect < (scoreThreshold?.MODERATE || ScoreThresholdDefaults.MODERATE))\n groups.lowScore.push(withSummary);\n });\n \n const sortedLowScore = ArrayHelper.sortBy(groups.lowScore, s => s.summary.percentCorrect);\n const sortedHighScore = ArrayHelper.sortBy(groups.highScore, s => -s.summary.percentCorrect);\n \n return {\n ...groups,\n lowScore: sortedLowScore,\n highScore: sortedHighScore\n };\n}\n\nexport function getInteractionById(interactive: Interactive, interactionId: string): Interaction {\n const flattenedInteractions = flattenInteractions(interactive);\n return flattenedInteractions.find(i => i.id.toString() === interactionId.toString());\n}\n\n/**\n * We need to use the question and result ids as a list of one student's responses\n * to multiple questions will all have the same result id and a list of multiple\n * students responses to one question will all have the same questionId.\n */\nexport function getMarkedAnswerId(answer: StudentAnswer): string {\n return `${answer.questionId}:${answer.resultId}`;\n}\n\nexport function getMarkedStatus(\n interactionId: string,\n studentResults: StudentResults,\n markedAnswers: MarkedAnswerHash\n): InteractiveAnswerStatus {\n const result = getStudentResult(studentResults);\n const studentResponse = getStudentAttempt(interactionId, result);\n\n const isMarkedCorrect = studentResponse?.answers.every(a => {\n return markedAnswers[getMarkedAnswerId(a)]?.status === InteractiveAnswerStatus.Correct;\n });\n\n if (isMarkedCorrect)\n return InteractiveAnswerStatus.Correct;\n\n const isMarkedIncorrect = studentResponse?.answers.every(a => {\n return markedAnswers[getMarkedAnswerId(a)]?.status === InteractiveAnswerStatus.Incorrect;\n });\n\n if (isMarkedIncorrect)\n return InteractiveAnswerStatus.Incorrect;\n}\n\nexport function getInteractionResultsSummary(\n interaction: Interaction,\n results: InteractiveResultSet\n): ResultsSummary {\n const numStudents = results.students.length;\n let numCorrect = 0;\n let answered = 0;\n let unanswered = 0;\n let awaitingMarking = 0;\n let attempts = 0;\n\n results.students.forEach(s => {\n const result = getStudentResult(s);\n\n if (!result)\n return;\n\n attempts = attempts + s.results.length;\n\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(interaction, result);\n\n if (correctness === InteractionCorrectness.Correct)\n numCorrect++;\n\n if (correctness === InteractionCorrectness.UnAnswered)\n unanswered++;\n\n if (correctness === InteractionCorrectness.AwaitingMarking)\n awaitingMarking++;\n\n if (correctness !== InteractionCorrectness.UnAnswered)\n answered++;\n });\n\n\n const percentCorrect = numStudents > 0\n ? numCorrect / numStudents\n : 0;\n\n return {\n percentCorrect,\n correct: numCorrect,\n answered,\n unanswered,\n awaitingMarking,\n attempts\n };\n}\n\nexport function getStudentResultsSummary(interactive: Interactive, studentResults: StudentResults): ResultsSummary {\n const result = getStudentResult(studentResults);\n\n const interactions = getInteractions(interactive);\n\n const numInteractions = interactions.length;\n\n let numCorrect = 0;\n let awaitingMarking = 0;\n\n interactions.forEach(i => {\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(i, result);\n\n if (correctness === InteractionCorrectness.Correct)\n numCorrect++;\n\n if (correctness === InteractionCorrectness.AwaitingMarking)\n awaitingMarking++;\n });\n\n const percentCorrect = numInteractions > 0 ? numCorrect / numInteractions : 0;\n\n /**\n * Our interactions list has images and annotations filtered out.\n * We built a map of valid questions, so that we can calculate the unswered accurately.\n * We're doing this because of a bug that caused annotations and images to record answers in the player.\n * - Sha\n */\n const interactionIds = new Set(interactions.map(i => i.id));\n const answeredInteractions = result.attempts.filter(a => !!interactionIds.has(a?.answers[0]?.questionId)).length;\n\n return {\n answered: answeredInteractions,\n attempts: studentResults.results.length,\n unanswered: numInteractions - answeredInteractions,\n percentCorrect,\n correct: numCorrect,\n awaitingMarking\n };\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { anonymiseUserName } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { UserRole } from 'libs/shared/enums/UserRole';\nimport { BaseObject, User } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from '../recipient-item.scss';\n\nconst namespace = 'shared.userRecipientItemMetadata';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getSubText(user: User): string {\n const userType = UserHelper.getUserType(user);\n const role = UserHelper.getUserRole(user);\n\n if (userType === UserGroup.Staff) {\n if (role === UserRole.Admin)\n return getPhrase('admin');\n\n return getPhrase('staff');\n }\n\n const yearGroup = UserHelper.getYearGroup(user);\n \n /**\n * Tertiary puts all students into a single group called 'Learners'.\n * When a student is in the 'Learners' group, we don't want to display the group name,\n * but instead we want to just show \"Student\". - Sha\n */\n if (yearGroup?.name && yearGroup.name !== 'Learners')\n return yearGroup.name;\n\n return getPhrase('student');\n}\n\nfunction getUserProps({\n user, anonymiseUsers, showDisplayName\n}: {\n user: AnonUser,\n showDisplayName: boolean;\n anonymiseUsers?: boolean;\n}) {\n if (user.sessionId || user.deleted) {\n const anonName = anonymiseUserName(user, anonymiseUsers);\n const nameParts = anonName.split(' ').filter(n => !!n);\n\n return {\n name: anonName,\n surname: nameParts.slice(1).join(' '),\n avatarUrl: null\n };\n }\n\n return {\n name: anonymiseUsers\n ? anonymiseUserName(user, true)\n : showDisplayName\n ? UserHelper.getDisplayName(user)\n : UserHelper.getFullName(user),\n surname: user.surname,\n avatarUrl: user.avatar?.url\n };\n}\n\nUserRecipientItemMetadata.defaults = {\n showSubText: true\n};\n\ninterface UserRecipientItemMetadataProps {\n user: AnonUser;\n imageCdnUrl: string;\n detailsClassName?: string;\n avatarClassName?: string;\n showDisplayName: boolean;\n nameClassName?: string;\n showSubText?: boolean;\n anonymiseUsers?: boolean;\n getSubText?: (user: BaseObject) => string;\n}\n\nexport function UserRecipientItemMetadata(props: UserRecipientItemMetadataProps): JSX.Element {\n const { name, surname, avatarUrl } = getUserProps(props);\n\n return (\n <>\n <div className={`${styles.avatarContainer} ${props.avatarClassName} d-inline-block flex-shrink-0`}>\n <Avatar\n imageUrl={avatarUrl}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(name, surname)}\n showAnonymousUser={!props.anonymiseUsers && (!!props.user.sessionId || !!props.user.deleted)}\n anonymiseUsers={props.anonymiseUsers}\n anonymousSvgSize={SvgContainerSize.Small}\n />\n </div>\n\n <div className={props.detailsClassName}>\n <h4 className={classNames('font-size-normal fw-normal m-0', props.nameClassName)}>\n {name}\n </h4>\n {props.showSubText && `id` in props.user && <p className='text-secondary m-0'>{props.getSubText ? props.getSubText(props.user) : getSubText(props.user)}</p>}\n </div>\n </>\n );\n}","import React from 'react';\n\nimport { ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\n\nimport {\n getCircleClassName,\n getCircleContainerClassName,\n getCircleRadius,\n getColouredLabelClassName,\n getFormattedPercentage,\n getPercentageToFixed,\n isPending,\n ProgressCircleSize\n} from './PercentageIndicatorUtils';\n\nimport styles from './percentage-indicator.scss';\n\ninterface ProgressCircleProps {\n size: ProgressCircleSize;\n scoreThresholds?: ScoreThresholds;\n percentage?: number;\n}\n\nfunction ProgressCircle(props: ProgressCircleProps): JSX.Element {\n const ref = React.useCallback((circle: SVGCircleElement) => {\n if (!circle)\n return;\n\n const radius = circle.r.baseVal.value;\n const circumference = 2 * Math.PI * radius;\n const offset = circumference - props.percentage * circumference;\n\n circle.style.strokeDasharray = `${circumference} ${circumference}`;\n circle.style.strokeDashoffset = offset.toString();\n }, [props.percentage]);\n\n return (\n <svg>\n <circle r={getCircleRadius(props.size)} className={styles.backgroundCircle} />\n {!isPending(props.percentage) &&\n <circle\n ref={ref}\n r={getCircleRadius(props.size)}\n className={getCircleClassName(props.percentage, props.scoreThresholds)}\n />\n }\n </svg>\n );\n}\n\nexport enum PercentageIndicatorLayout {\n CircleOnly = 'circle_only',\n LabelOnly = 'label_only',\n LabelBefore = 'label_before',\n LabelInside = 'label_inside'\n}\n\ninterface PercentageIndicatorProps {\n layout: PercentageIndicatorLayout;\n percentage?: number; // Between 0 and 1 or undefined for pending\n className?: string;\n customLabel?: string;\n scoreThresholds?: ScoreThresholds;\n size?: ProgressCircleSize;\n}\n\nPercentageIndicator.defaultProps = {\n layout: PercentageIndicatorLayout.CircleOnly\n};\n\nexport function PercentageIndicator(props: PercentageIndicatorProps): JSX.Element {\n const percentageToFixed = getPercentageToFixed(props.percentage);\n\n const size = props.size ||\n (props.layout === PercentageIndicatorLayout.LabelInside\n ? ProgressCircleSize.Large\n : ProgressCircleSize.Small\n );\n\n const label = props.customLabel || getFormattedPercentage(percentageToFixed);\n\n if (props.layout === PercentageIndicatorLayout.LabelOnly)\n return (\n <span className={getColouredLabelClassName(percentageToFixed)}>\n {label}\n </span>\n );\n\n return (\n <div className={`d-flex align-items-center justify-content-between ${props.className ?? ''}`}>\n {props.layout === PercentageIndicatorLayout.LabelBefore &&\n <span className='me-2'>\n {label}\n </span>\n }\n <div className={getCircleContainerClassName(size, percentageToFixed)}>\n <ProgressCircle percentage={percentageToFixed} size={size} scoreThresholds={props.scoreThresholds} />\n {props.layout === PercentageIndicatorLayout.LabelInside &&\n <span className={styles.centredPercentageText}>\n {label}\n </span>\n }\n </div>\n </div>\n );\n}","import { ScoreThresholdDefaults, ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\n\nimport styles from './percentage-indicator.scss';\n\n/**\n * Values for width and strokeWidth are taken from progress-circle.scss.\n * If either are changed, they must be updated in both places.\n */\nconst CIRCLE_WIDTH = 2; // rem\nconst CIRCLE_WIDTH_LG = 5.8; // rem\nconst CIRCLE_STROKE_WIDTH = 0.2; // rem\nconst CIRCLE_STROKE_WIDTH_LG = 0.36; // rem\n \nexport enum ProgressCircleSize {\n Small = 'small',\n Large = 'large',\n ExtraSmall = 'extraSmall'\n}\n\nconst ProgressCircleSizeMap = {\n [ProgressCircleSize.ExtraSmall]: {\n size: CIRCLE_WIDTH\n },\n [ProgressCircleSize.Small]: {\n size: CIRCLE_WIDTH\n },\n [ProgressCircleSize.Large]: {\n size: CIRCLE_WIDTH_LG\n }\n};\n\n/**\n * radius = width / 2 - strokeWidth * 2\n */\nexport function getCircleRadius(size: ProgressCircleSize): string {\n const width = ProgressCircleSizeMap[size].size;\n const strokeWidth = size === ProgressCircleSize.Large ? CIRCLE_STROKE_WIDTH_LG : CIRCLE_STROKE_WIDTH;\n return `${width / 2 - strokeWidth * 2}rem`;\n}\n \nexport function getCircleClassName(\n percentage: number,\n scoreThresholds: ScoreThresholds = ScoreThresholdDefaults\n): string {\n if (percentage >= scoreThresholds.HIGH)\n return styles.circleSuccess;\n \n if (percentage >= scoreThresholds.MODERATE)\n return styles.circleWarning;\n \n return styles.circleDanger;\n}\n \nexport function getColouredLabelClassName(\n percentage: number,\n scoreThresholds: ScoreThresholds = ScoreThresholdDefaults\n): string {\n if (percentage >= scoreThresholds.HIGH)\n return 'text-success';\n \n if (percentage >= scoreThresholds.MODERATE)\n return 'text-warning';\n \n return 'text-danger';\n}\n \nexport function getCircleContainerClassName(size: ProgressCircleSize, percentage?: number): string {\n let className = `d-inline-block ${styles.circleContainer}`;\n \n if (size === ProgressCircleSize.Large)\n className += ` ${styles.lgCircleContainer}`;\n\n if (size === ProgressCircleSize.ExtraSmall)\n className += ` ${styles.xsCircleContainer}`;\n\n if (isPending(percentage))\n className += ` ${styles.pendingCircle}`;\n \n return className;\n}\n\nexport function getPercentageToFixed(percentage?: number): number | undefined {\n if (isPending(percentage))\n return;\n \n return +percentage.toFixed(2);\n}\n \nexport function getFormattedPercentage(percentage?: number): string {\n if (isPending(percentage))\n return `--%`;\n\n return `${Math.round(percentage * 100)}%`;\n}\n\nexport function isPending(percentage?: number): boolean {\n return typeof percentage !== 'number';\n}","export interface ScoreThresholds {\n HIGH: number;\n MODERATE: number;\n}\n\nexport const ScoreThresholdDefaults: ScoreThresholds = {\n HIGH: 0.75,\n MODERATE: 0.5\n};\n\nexport const ScoreThresholdInsights: ScoreThresholds = {\n HIGH: 0.7,\n MODERATE: 0.7\n};","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 { Flight } from 'libs/common/react/index';\n\nexport const InsightsDemoRequests = {\n interactive(): Flight.Request {\n return {\n url: `/mocks/insights/interactive.json`,\n key: `demo:interactive`,\n normalize: false\n };\n },\n\n interactiveMetadata(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-metadata.json`,\n key: `demo:interactive:metadata`,\n normalize: false\n };\n },\n\n interactiveResults(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-results.json`,\n key: `demo:interactive:results`,\n normalize: false\n };\n },\n\n videoViews(): Flight.Request {\n return {\n url: `/mocks/insights/video-views.json`,\n key: `demo:video:views`,\n normalize: false\n };\n },\n\n users(): Flight.Request {\n return {\n url: `/mocks/insights/users.json`,\n key: `demo:users`,\n normalize: false\n };\n },\n\n individualHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/individual-heatmap.json`,\n key: `demo:individual:heatmap`,\n normalize: false\n };\n },\n\n aggregateHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/aggregate-heatmap.json`,\n key: `demo:aggregate:heatmap`,\n normalize: false\n };\n }\n};","import { 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 { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SharePrivacy } from 'libs/shared/apps/share-v2/enums/SharePrivacy';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { MySharesTableData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\n\nconst namespace = 'myShares.demoInsights';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst DEMO_INSIGHT_DAYS_AGO = 7;\n\nexport const DEMO_INSIGHTS_SHARE: Share = {\n type: ShareType.Link,\n privacy: SharePrivacy.JustMySchool,\n objectId: '0',\n objectTypeId: MasterType.Interactive,\n viewCount: 28,\n accessCount: 15,\n dateCreated: new Date().toISOString(),\n dateShared: new Date().toISOString(),\n expireDate: null,\n link: {\n shortenedEmbedUrl: '',\n shortenedUrl: ''\n },\n shareId: '0',\n ownerCustomerId: 0,\n ownerId: 0,\n recipients: [],\n options: {\n preventScrubbing: false,\n immediateFeedback: false\n }\n};\n\nexport const DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE: Share = {\n ...DEMO_INSIGHTS_SHARE,\n type: ShareType.Open,\n expireDate: DateHelper.add(new Date(DEMO_INSIGHTS_SHARE.dateCreated), 30, 'days').toISOString(),\n privacy: SharePrivacy.PinCode\n};\n\nexport const DEMO_INSIGHTS_SHARE_TABLE_DATA: MySharesTableData = {\n share: DEMO_INSIGHTS_SHARE,\n sharedObject: null,\n shareRecipients: null,\n dateShared: DateHelper.subtract(new Date(), DEMO_INSIGHT_DAYS_AGO, 'days').toISOString()\n};\n\nexport const DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE_TABLE_DATA: MySharesTableData = {\n ...DEMO_INSIGHTS_SHARE_TABLE_DATA,\n share: DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE\n};\n\nexport const DEMO_INSIGHTS_APPLINK: Core.AppLink = {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_DEMO\n};\n\nexport const DEMO_INSIGHTS_OPEN_CLASSROOM_APPLINK: Core.AppLink = {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_OPEN_CLASSROOM_DEMO\n};\n\nexport const DEMO_INSIGHTS_ACTION: ActionOptions = {\n svgName: cvSvgLibrary.Analytics,\n label: getPhrase('demoInsights'),\n appLink: DEMO_INSIGHTS_APPLINK,\n group: 'insights',\n className: 'btn btn-outline-dark'\n};\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { BaseAnalyticsEventResponse } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InsightsDemoRequests } from 'libs/shared/flight-requests/InsightsDemoRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, CurrentUser, Engagement, Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\n\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InteractiveInsightsOverview } from 'apps/my-shares/components/interactive-insights-overview/InteractiveInsightsOverview';\nimport { DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE, DEMO_INSIGHTS_SHARE } from 'apps/my-shares/constants/MySharesDemoInsights';\nimport { getInsightsDemoInteractiveTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\nimport { getInteractiveInsightsAppLinks } from 'apps/my-shares/views/demo/overview/InteractiveInsightsOverviewDemoUtils';\n\nconst namespace = 'insights.interactiveInsightsOverviewView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractiveInsightsOverviewDemoViewProps {\n type?: ShareType;\n}\n\nexport function InteractiveInsightsOverviewDemoView(props: InteractiveInsightsOverviewDemoViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InsightsDemoRequests.interactiveMetadata()\n );\n\n const interactive = Flight.useBasicFetch<Interactive>(InsightsDemoRequests.interactive());\n\n const audienceAppLinkParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n const dateRangeAppLinkParams = AnalyticsFilterHelper.getDateRangeAppLinkParams();\n\n const results = Flight.useBasicFetch<InteractiveResultSet>(InsightsDemoRequests.interactiveResults());\n\n const aggregateEngagement = Flight.useBasicFetch<Engagement>(\n InsightsDemoRequests.aggregateHeatmap()\n );\n\n const videoViews = Flight.useBasicFetch<BaseAnalyticsEventResponse>(\n InsightsDemoRequests.videoViews()\n );\n\n useSetPageMetadata({ title: interactiveMetadata.data ? getPhrase('pageTitle', { video: interactiveMetadata.data?.name }) : null });\n\n const hasDataLoaded =\n currentUser.data &&\n config.data &&\n interactiveMetadata.data &&\n interactive.data &&\n results.data &&\n aggregateEngagement.data &&\n !!videoViews.data;\n\n const params = {\n ...audienceAppLinkParams,\n ...dateRangeAppLinkParams\n };\n const interactiveInsightsAppLinks = getInteractiveInsightsAppLinks(\n '',\n params,\n props.type\n );\n\n const share = props.type === ShareType.Open ? DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE : DEMO_INSIGHTS_SHARE;\n\n if (!hasDataLoaded)\n return <></>;\n \n return (\n <div className='px-3'>\n <InsightsHeader\n video={interactiveMetadata.data}\n tabs={getInsightsDemoInteractiveTabs(interactiveMetadata.data?.id, 'insights', params, props.type)}\n dateRangeAppLinkParams={dateRangeAppLinkParams}\n share={{\n ...share,\n objectId: interactiveMetadata.data?.id\n }}\n yearGroups={[]}\n markingRequired={props.type !== ShareType.Open}\n isDemo\n hasData\n />\n\n <InteractiveInsightsOverview\n aggregateEngagement={aggregateEngagement.data}\n interactive={interactive.data}\n interactiveMetadata={interactiveMetadata.data}\n classroomStudents={null}\n results={results.data}\n osCount={videoViews.data?.osCount}\n config={config.data}\n interactiveInsightsAppLinks={interactiveInsightsAppLinks}\n anonymiseUsers={anonymiseUsers}\n hasDataLoaded={hasDataLoaded}\n share={share}\n />\n </div>\n );\n}","import { HashObject } from 'libs/common/react/interfaces';\n\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nexport function getInteractiveInsightsAppLinks(id: string, params?: HashObject, type?: ShareType) {\n if (type === ShareType.Open) {\n return {\n resultsAppLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_STUDENTS_OPEN_CLASSROOM_DEMO,\n args: [id],\n params\n },\n questionsAppLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_QUESTIONS_OPEN_CLASSROOM_DEMO,\n args: [id],\n params\n },\n heatmapAppLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_HEATMAP_OPEN_CLASSROOM_DEMO,\n args: [id],\n params\n }\n };\n }\n \n return {\n resultsAppLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_STUDENTS_DEMO,\n args: [id],\n params\n },\n questionsAppLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_QUESTIONS_DEMO,\n args: [id],\n params\n },\n heatmapAppLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_HEATMAP_DEMO,\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\"};","// extracted by mini-css-extract-plugin\nexport default {\"circleContainer\":\"p8Vgz\",\"backgroundCircle\":\"asGGE\",\"circleSuccess\":\"PXLNj\",\"circleWarning\":\"ZckRN\",\"circleDanger\":\"slBRg\",\"lgCircleContainer\":\"N8KCI\",\"xsCircleContainer\":\"RPqZ2\",\"pendingCircle\":\"DKrcq\",\"centredPercentageText\":\"tpmLR\"};"],"names":["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","subtitle","svgClassName","SvgContainer","svgName","size","S","title","count","children","CHART_FONT_STYLES","fontSize","fontFamily","fontWeight","color","getPhrase","anonymiseUserName","user","shouldAnonymise","userId","id","sessionId","seed","guid","hash","charCodeAt","abs","guidToSeed","floor","Date","getMinutes","dictionaries","separator","deleted","getFullHeatMap","videoDuration","Array","ceil","fill","t","getEngagementRate","reduce","prev","next","engagementRate","groupStudents","interactive","results","scoreThreshold","groups","markingRequired","lowScore","highScore","completed","notCompleted","interactions","interactionIds","Set","students","forEach","s","withSummary","summary","getStudentResultsSummary","awaitingMarking","attempts","filter","a","has","answers","questionId","percentCorrect","HIGH","MODERATE","sortedLowScore","sortedHighScore","getInteractionById","interactionId","find","toString","getMarkedAnswerId","answer","resultId","getMarkedStatus","studentResults","markedAnswers","result","studentResponse","every","status","getInteractionResultsSummary","interaction","numStudents","numCorrect","answered","unanswered","correctness","correct","numInteractions","answeredInteractions","UserRecipientItemMetadata","anonymiseUsers","showDisplayName","anonName","nameParts","split","n","name","surname","slice","avatarUrl","avatar","url","getUserProps","avatarClassName","imageUrl","imageCdnUrl","initials","showAnonymousUser","anonymousSvgSize","detailsClassName","nameClassName","showSubText","getSubText","userType","role","yearGroup","defaults","PercentageIndicatorLayout","ProgressCircle","ref","circle","radius","r","baseVal","circumference","PI","offset","percentage","strokeDasharray","strokeDashoffset","scoreThresholds","PercentageIndicator","percentageToFixed","layout","LabelInside","label","customLabel","LabelOnly","LabelBefore","defaultProps","CircleOnly","ProgressCircleSize","CIRCLE_STROKE_WIDTH","CIRCLE_STROKE_WIDTH_LG","ProgressCircleSizeMap","ExtraSmall","Small","Large","getCircleRadius","strokeWidth","getCircleClassName","getColouredLabelClassName","getCircleContainerClassName","isPending","getPercentageToFixed","toFixed","getFormattedPercentage","round","ScoreThresholdDefaults","ScoreThresholdInsights","InteractionCorrectness","InteractiveAnswerStatus","InsightsDemoRequests","normalize","interactiveMetadata","interactiveResults","videoViews","users","individualHeatmap","aggregateHeatmap","notApplicable","isMissingWordCorrect","getStudentAnswer","items","actionableItems","isCorrect","trim","toLowerCase","isMultipleChoiceCorrect","studentAnswer","getGetStudentAnswer","attempt","wrapIsMultipleChoiceCorrect","text","wrapIsMarkableAnswerMarkedCorrect","item","isMarkableAnswerMarkedCorrect","IsCorrectLookup","InteractiveCorrectnessHelper","isInteractionCorrect","isCorrectFn","typeId","DEMO_INSIGHTS_SHARE","type","privacy","objectId","objectTypeId","viewCount","accessCount","dateCreated","toISOString","dateShared","expireDate","link","shortenedEmbedUrl","shortenedUrl","shareId","ownerCustomerId","ownerId","recipients","options","preventScrubbing","immediateFeedback","DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE","DEMO_INSIGHTS_SHARE_TABLE_DATA","share","sharedObject","shareRecipients","DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE_TABLE_DATA","DEMO_INSIGHTS_APPLINK","application","action","DEMO_INSIGHTS_OPEN_CLASSROOM_APPLINK","DEMO_INSIGHTS_ACTION","appLink","group","LanguageService","InteractiveInsightsOverviewDemoView","SharedViewModelKeys","useLockContentWidth","currentUser","UserRequests","config","ConfigRequests","audienceAppLinkParams","dateRangeAppLinkParams","aggregateEngagement","useSetPageMetadata","video","hasDataLoaded","params","interactiveInsightsAppLinks","ShareType","resultsAppLink","args","questionsAppLink","heatmapAppLink","getInteractiveInsightsAppLinks","InsightsHeader","tabs","yearGroups","isDemo","hasData","InteractiveInsightsOverview","classroomStudents","osCount"],"sourceRoot":""}