@clickview/lite 0.69.1-dev.0 → 0.69.1-dev.1

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 (72) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/css/{2636-lite-f995954232.chunk.css → 6078-lite-4d1b877b3f.chunk.css} +4 -0
  3. package/dist/css/{1239-lite-8152f713c8.chunk.css → 7210-lite-a568e8ec1e.chunk.css} +1 -0
  4. package/dist/scripts/1210-7afb28caac-lite.chunk.js +2 -0
  5. package/dist/scripts/1210-7afb28caac-lite.chunk.js.map +1 -0
  6. package/dist/scripts/232-1522c00252-lite.chunk.js +3 -0
  7. package/dist/scripts/232-1522c00252-lite.chunk.js.map +1 -0
  8. package/dist/scripts/300-3d9f3cd4e3-lite.chunk.js +2 -0
  9. package/dist/scripts/300-3d9f3cd4e3-lite.chunk.js.map +1 -0
  10. package/dist/scripts/3079-0a333d6805-lite.chunk.js +2 -0
  11. package/dist/scripts/3079-0a333d6805-lite.chunk.js.map +1 -0
  12. package/dist/scripts/3110-eee18143c6-lite.chunk.js +2 -0
  13. package/dist/scripts/3110-eee18143c6-lite.chunk.js.map +1 -0
  14. package/dist/scripts/312-693aa30814-lite.chunk.js +2 -0
  15. package/dist/scripts/312-693aa30814-lite.chunk.js.map +1 -0
  16. package/dist/scripts/4229-477b1858dc-lite.chunk.js +2 -0
  17. package/dist/scripts/4229-477b1858dc-lite.chunk.js.map +1 -0
  18. package/dist/scripts/{4845-f3646fb657-lite.chunk.js → 4845-9b4657e696-lite.chunk.js} +2 -2
  19. package/dist/scripts/4845-9b4657e696-lite.chunk.js.map +1 -0
  20. package/dist/scripts/5679-b40a221c78-lite.chunk.js +2 -0
  21. package/dist/scripts/5679-b40a221c78-lite.chunk.js.map +1 -0
  22. package/dist/scripts/6046-104677f08c-lite.chunk.js +2 -0
  23. package/dist/scripts/6046-104677f08c-lite.chunk.js.map +1 -0
  24. package/dist/scripts/6078-0bc71f8768-lite.chunk.js +2 -0
  25. package/dist/scripts/6078-0bc71f8768-lite.chunk.js.map +1 -0
  26. package/dist/scripts/{6188-e108abca25-lite.chunk.js → 6188-77fc2f3ec5-lite.chunk.js} +2 -2
  27. package/dist/scripts/6188-77fc2f3ec5-lite.chunk.js.map +1 -0
  28. package/dist/scripts/6351-dff9edbb16-lite.chunk.js +3 -0
  29. package/dist/scripts/6351-dff9edbb16-lite.chunk.js.map +1 -0
  30. package/dist/scripts/6973-c4cb114bd7-lite.chunk.js +2 -0
  31. package/dist/scripts/6973-c4cb114bd7-lite.chunk.js.map +1 -0
  32. package/dist/scripts/7210-d8fa7ca624-lite.chunk.js +3 -0
  33. package/dist/scripts/7210-d8fa7ca624-lite.chunk.js.map +1 -0
  34. package/dist/scripts/7482-13e6f78c32-lite.chunk.js +2 -0
  35. package/dist/scripts/7482-13e6f78c32-lite.chunk.js.map +1 -0
  36. package/dist/scripts/9040-be65e4eb1e-lite.chunk.js +2 -0
  37. package/dist/scripts/9040-be65e4eb1e-lite.chunk.js.map +1 -0
  38. package/dist/scripts/{bundle-90d3c7fd15.min.js → bundle-bad2e20859.min.js} +3 -3
  39. package/dist/scripts/{bundle-90d3c7fd15.min.js.map → bundle-bad2e20859.min.js.map} +1 -1
  40. package/package.json +1 -1
  41. package/dist/scripts/1210-3cbdc62b0a-lite.chunk.js +0 -2
  42. package/dist/scripts/1210-3cbdc62b0a-lite.chunk.js.map +0 -1
  43. package/dist/scripts/1239-ed9b8aadb4-lite.chunk.js +0 -3
  44. package/dist/scripts/1239-ed9b8aadb4-lite.chunk.js.map +0 -1
  45. package/dist/scripts/2636-63e5f2c9e6-lite.chunk.js +0 -2
  46. package/dist/scripts/2636-63e5f2c9e6-lite.chunk.js.map +0 -1
  47. package/dist/scripts/3036-d18c598435-lite.chunk.js +0 -2
  48. package/dist/scripts/3036-d18c598435-lite.chunk.js.map +0 -1
  49. package/dist/scripts/4229-75ba28a266-lite.chunk.js +0 -2
  50. package/dist/scripts/4229-75ba28a266-lite.chunk.js.map +0 -1
  51. package/dist/scripts/4266-e856b96643-lite.chunk.js +0 -3
  52. package/dist/scripts/4266-e856b96643-lite.chunk.js.map +0 -1
  53. package/dist/scripts/4598-f326dc1aec-lite.chunk.js +0 -2
  54. package/dist/scripts/4598-f326dc1aec-lite.chunk.js.map +0 -1
  55. package/dist/scripts/4845-f3646fb657-lite.chunk.js.map +0 -1
  56. package/dist/scripts/6046-44c115a89c-lite.chunk.js +0 -2
  57. package/dist/scripts/6046-44c115a89c-lite.chunk.js.map +0 -1
  58. package/dist/scripts/6188-e108abca25-lite.chunk.js.map +0 -1
  59. package/dist/scripts/6317-49be898c73-lite.chunk.js +0 -2
  60. package/dist/scripts/6317-49be898c73-lite.chunk.js.map +0 -1
  61. package/dist/scripts/6973-ede6601614-lite.chunk.js +0 -2
  62. package/dist/scripts/6973-ede6601614-lite.chunk.js.map +0 -1
  63. package/dist/scripts/7075-9a76ce47c9-lite.chunk.js +0 -3
  64. package/dist/scripts/7075-9a76ce47c9-lite.chunk.js.map +0 -1
  65. package/dist/scripts/9040-9393c59004-lite.chunk.js +0 -2
  66. package/dist/scripts/9040-9393c59004-lite.chunk.js.map +0 -1
  67. /package/dist/css/{3036-lite-1b3e9aa905.chunk.css → 3079-lite-1b3e9aa905.chunk.css} +0 -0
  68. /package/dist/css/{7075-lite-a377febbb0.chunk.css → 6351-lite-a377febbb0.chunk.css} +0 -0
  69. /package/dist/scripts/{4266-e856b96643-lite.chunk.js.LICENSE.txt → 232-1522c00252-lite.chunk.js.LICENSE.txt} +0 -0
  70. /package/dist/scripts/{1239-ed9b8aadb4-lite.chunk.js.LICENSE.txt → 6351-dff9edbb16-lite.chunk.js.LICENSE.txt} +0 -0
  71. /package/dist/scripts/{7075-9a76ce47c9-lite.chunk.js.LICENSE.txt → 7210-d8fa7ca624-lite.chunk.js.LICENSE.txt} +0 -0
  72. /package/dist/scripts/{bundle-90d3c7fd15.min.js.LICENSE.txt → bundle-bad2e20859.min.js.LICENSE.txt} +0 -0
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[9040],{5255:(e,t,a)=>{a.d(t,{Y:()=>o});var n=a(20354),r=a(30439);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){var t,a=n.a.useBasicFetch(e&&r.o.getAnonSessions(e));return(null===(t=a.data)||void 0===t?void 0:t.length)?a.data.reduce((function(e,t){return Object.assign(Object.assign({},e),(a={},n=t.sessionId,r=t,(n=function(e){var t=function(e){if("object"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var a=t.call(e,"string");if("object"!=i(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==i(t)?t:t+""}(n))in a?Object.defineProperty(a,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):a[n]=r,a));var a,n,r}),{}):{}}},74901:(e,t,a)=>{function n(e){return function(e){if(Array.isArray(e))return r(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return r(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?r(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}a.d(t,{K:()=>i});var i=function(e){var t=[],a=[];return e.users&&t.push.apply(t,n(e.users)),e.classrooms&&a.push.apply(a,n(e.classrooms)),e.classroomGroups&&a.push.apply(a,n(e.classroomGroups)),{userId:t,groupId:a}}},94644:(e,t,a)=>{a.d(t,{r:()=>d});var n=a(50242),r=a(81886),i=a(67058),o=a(14553),s=a(49267),l=a(49075),c={notFound:i.d,forbidden:{rating:o.q,yearLevel:o.q,region:s.a,privacy:o.q},badRequest:l._,internalServerError:l._};function d(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var i;i="number"==typeof e?e:e.status;var o=Object.assign(Object.assign({},c),t);i&&r.Q.Ry.isStatusCodeError(i)&&(i!==n.o.InternalServer?i!==n.o.NotFound?i!==n.o.Forbidden?a.badRequest||r.Q.Ry.throw(new o.badRequest):a.forbidden||r.Q.Ry.throw(new o.forbidden.privacy):a.notFound||r.Q.Ry.throw(new o.notFound):a.internalServerError||r.Q.Ry.throw(new l._))}}},17913:(e,t,a)=>{a.d(t,{u:()=>o});var n=a(97395),r=a(110),i=a(62875),o={individualEngagement:function(e,t,a,r){var o=Object.assign({objectId:e},t);return a&&(o.sharerId=a),r&&(o.includeAnonViews=!0),{url:n._.urlBuilder("{gateway}/v1/analytics/heat-map",o),key:(0,i.H)("engagement:".concat(e,":").concat(r),t,a),formatData:function(e){var t;return Object.assign(Object.assign({},e),{data:null===(t=e.data)||void 0===t?void 0:t.map((function(e){var t;return Object.assign(Object.assign({},e),{heatMap:null!==(t=e.heatMap)&&void 0!==t?t:[]})}))})},normalize:!1}},aggregateEngagement:function(e,t,a,r){var o=Object.assign({objectId:e},t);return a&&(o.sharerId=a),r&&(o.includeAnonViews=!0),{url:n._.urlBuilder("{gateway}/v1/analytics/heat-map/aggregations",o),key:(0,i.H)("aggregate:engagement:".concat(e,":").concat(r),t,a),formatData:function(e){var t;return Object.assign(Object.assign({},e),{heatMap:null!==(t=e.heatMap)&&void 0!==t?t:[]})},normalize:!1}},views:function(e,t,a,o){var s=Object.assign(Object.assign({},e),{timeOffset:r.O.getTimezoneOffset()});return t&&(s.objectId=t),a&&(s.sharerId=a),o&&(s.includeAnonViews=!0),{url:n._.urlBuilder("{gateway}/v1/analytics/video-views",s),key:(0,i.H)("video:views:".concat(t,":").concat(o),e,a),normalize:!1}}}},39902:(e,t,a)=>{a.d(t,{F:()=>v,f:()=>m});var n=a(32735),r=a(20354),i=a(75896);function o(e){return function(e){if(Array.isArray(e))return l(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||s(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 s(e,t){if(e){if("string"==typeof e)return l(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?l(e,t):void 0}}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}function c(e){return c="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},c(e)}function d(e,t,a){return(t=function(e){var t=function(e){if("object"!=c(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var a=t.call(e,"string");if("object"!=c(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==c(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}var u=50;function m(e,t){var a=i.m.chunk(e,u).map((function(e){return t(i.m.uniq(e))})),n=r.a.useBasicFetchAll(a),o=i.m.flatten(n.data),s=n.data.length?o.reduce((function(e,t){return Object.assign(Object.assign({},e),d({},t.id,t))}),{}):null;return{itemsArr:o,items:s,isFetching:n.isFetching}}function v(e,t,a){var l,m,v,p,g=a||function(e){return"object"===c(e)?e.id:e},f=n.useRef(new Set),h=(v=n.useState([]),p=2,function(e){if(Array.isArray(e))return e}(v)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,r,i,o,s=[],l=!0,c=!1;try{if(i=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;l=!1}else for(;!(l=(n=i.call(a)).done)&&(s.push(n.value),s.length!==t);l=!0);}catch(e){c=!0,r=e}finally{try{if(!l&&null!=a.return&&(o=a.return(),Object(o)!==o))return}finally{if(c)throw r}}return s}}(v,p)||s(v,p)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),y=h[0],b=h[1];n.useEffect((function(){if(null==e?void 0:e.length){var a=[];e.forEach((function(e){var t=g(e);f.current.has(t)||(a.push(e),f.current.add(t))})),a.length&&b((function(e){return[].concat(o(e),o(i.m.chunk(a,u).map(t)))}))}}),[null==e?void 0:e.length]);var E=r.a.useBasicFetchAll(y),I=i.m.flatten(E.data),A=E.data.length?I.reduce((function(e,t){return Object.assign(Object.assign({},e),d({},g(t),t))}),{}):null;return{hasFirstRequestCompleted:!!(null===(m=null===(l=E.responses)||void 0===l?void 0:l[0])||void 0===m?void 0:m.hasCompleted),itemsArr:I,items:A,isFetching:E.isFetching}}},91286:(e,t,a)=>{a.d(t,{v:()=>o});var n=a(32735),r=a(94644);function i(e){return e.map((function(e){return e.statusCode})).join(":")}function o(e,t,a){var o=Array.isArray(e)?e:[e];(0,n.useEffect)((function(){o.forEach((function(e){(0,r.r)(e.statusCode,t,a)}))}),[i(o),t,a])}},62875:(e,t,a)=>{function n(e,t,a){var n="".concat(e,":").concat(t.start,":").concat(t.end),r=Array.isArray(t.userId)?t.userId.sort().join(":"):t.userId,i=Array.isArray(t.groupId)?t.groupId.sort().join(":"):t.groupId;return r&&(n+=":".concat(r)),i&&(n+=":".concat(i)),a&&(n+=":".concat(a)),n}a.d(t,{H:()=>n})},50782:(e,t,a)=>{a.d(t,{R:()=>A});var n=a(32735),r=a(82602),i=a(20354),o=a(74901),s=a(40003),l=a(30439),c=a(65853),d=a(64249),u=a(91693),m=a(83345),v=a(39151),p=a(1666),g=a(31949),f=a(17913),h=a(37802),y=a(35223),b=a(86099),E=a(24758),I="insights.shareInfo";function A(e){var t,a,A,w,S,j=i.a.useBasicFetch(v.L.config()),O=(0,h.r)(null).publicInteractiveAttempts,N=Object.assign(Object.assign({},(0,s.wO)((0,s.Hb)(),e.dateRangeAppLinkParams)),(0,o.K)(e.audienceAppLinkParams)),k=i.a.useBasicFetch(g.N.currentUser()),F=i.a.useBasicFetch(e.video&&l.o.getShareLinkByObjectId(e.video.id)),C=i.a.useBasicFetch(e.video&&l.o.getSentDirectShareByObjectId(e.video.id)),U=i.a.useBasicFetch((null===(t=k.data)||void 0===t?void 0:t.customerId)&&d.I.getDirectShareRecipientsRequest(k.data.customerId,C.data)),B=i.a.useBasicFetch(k.data&&e.video&&f.u.views(N,e.video.id,k.data.id,O)),L=i.a.useBasicFetch(e.video&&l.o.getPrivacy(e.video.id)),R=i.a.useBasicFetch((null===(a=k.data)||void 0===a?void 0:a.isAuthenticated)&&p.h.yearGroups(k.data.customerId)),P=F.hasCompleted&&!F.data&&C.hasCompleted&&!C.data,T=F.hasCompleted&&F.data||C.hasCompleted&&C.data&&(!F.data||L.data)&&(!F.data||R.data)&&U.data&&B.data,x=F.data&&L.data&&R.data&&c.R.getIconAndText({entity:e.video,entityTypeId:e.video.typeId,hasStudentExp:!1,isPasswordProtected:F.data.isPasswordProtected,linkExpireDate:F.data.linkExpireDate,privacy:L.data,status:F.data.status,yearGroups:R.data}),V=n.useMemo((function(){var e;return null===(e=B.data)||void 0===e?void 0:e.data.reduce((function(e,t){return t.count+e}),0)}),[B.data]),M=(null===(A=C.data)||void 0===A?void 0:A.dateCreated)||(null===(w=F.data)||void 0===w?void 0:w.dateCreated);return n.createElement("div",{className:"mb-4"},T&&n.createElement(n.Fragment,null,n.createElement("h2",{className:"h4"},n.createElement(m.x,{namespace:I,phrase:"shareInfo"})),n.createElement("div",{className:"d-flex border p-3 rounded-3 align-items-center justify-content-between"},n.createElement("div",{className:"d-flex align-items-center gap-2"},n.createElement(E.A,{shareRecipients:U.data,imageCdnUrl:null===(S=j.data)||void 0===S?void 0:S.imageCdnUrl,hasShareLink:!!F.data,maxAvatars:4,shareLinkText:null==x?void 0:x.text}),"·",n.createElement("p",{className:"mb-0"},(0,r.WU)(M)),!!V&&n.createElement(n.Fragment,null,"·",n.createElement("p",{className:"mb-0"},n.createElement(m.x,{namespace:I,phrase:"views",options:{smartCount:V}})))),n.createElement(u.h,{appLink:(0,b.YK)(e.video),svgName:y.vn.Share,className:"btn btn-outline-dark"},n.createElement(m.x,{namespace:I,phrase:"share"})))),!P&&!T&&n.createElement(n.Fragment,null,n.createElement("div",{className:"h4 partial-loading-background w-25"}," "),n.createElement("div",{className:"p-3 rounded partial-loading-background"},n.createElement("p",{className:"mb-1"}," "))))}},96049:(e,t,a)=>{a.r(t),a.d(t,{VideoInsightsOverviewView:()=>X});var n=a(32735),r=a(23481),i=a(2948),o=a(20354),s=a(75896),l=a(51870),c=a(50916),d=a(84621),u=a(98551),m=a(35223),v=r.T.encloseNamespace("shared.insightStudentsNotWatched");function p(e){var t,a=(null===(t=e.students)||void 0===t?void 0:t.filter((function(t){var a;return!(null===(a=e.watchedIds)||void 0===a?void 0:a.includes(t.id))})))||[];return n.createElement(d.L,{title:v("title"),svgName:m.vn.Puzzle,svgClassName:"bg-light-teal text-teal"},n.createElement(u.y,{students:a,imageCdnUrl:e.imageCdnUrl,imageUrl:e.imageUrl,description:v("studentsDisplay"),anonymiseUsers:e.anonymiseUsers}))}var g=r.T.encloseNamespace("shared.insightStudentsWatched");function f(e){return n.createElement(d.L,{title:g("title"),svgName:m.vn.Flag,svgClassName:"bg-light-indigo text-indigo",count:e.students.length},n.createElement(u.y,{students:e.students,imageCdnUrl:e.imageCdnUrl,imageUrl:e.imageUrl,description:g("studentsDisplay"),appLink:e.heatmapAppLink,appLinkText:g("viewAll"),anonymiseUsers:e.anonymiseUsers}))}var h=a(5255),y=a(26025),b=a(26136),E=a(74901),I=a(40003),A=a(30439),w=a(83345),S=a(38143),j=a(4594),O=a(16714),N=a(39151),k=a(31949),F=a(17913),C=a(39902),U=a(91286),B=a(93322),L=a(22902),R=a(79612),P=a(37802),T=a(31908),x=a(99742),V=a(88630),M=a(26203),_=a(53214),D=a(10447),q=a(50782);const H={partialInsights:"qm6HY"};function W(){return n.createElement("div",null,n.createElement("h2",{className:"h4 w-25 partial-loading-background"}," "),n.createElement("div",{className:"row g-3 mb-5"},n.createElement("div",{className:"col-12"},n.createElement("div",{className:"".concat(H.partialInsights," rounded partial-loading-background")}))),n.createElement("h2",{className:"h4 w-25 partial-loading-background"}," "),n.createElement("div",{className:"row g-3 mb-5"},n.createElement("div",{className:"col-6"},n.createElement("div",{className:"".concat(H.partialInsights," rounded partial-loading-background")})),n.createElement("div",{className:"col-6"},n.createElement("div",{className:"".concat(H.partialInsights," rounded partial-loading-background")}))))}var z=a(14070),G=a(97291);function Q(e){return function(e){if(Array.isArray(e))return $(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||Y(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 Y(e,t){if(e){if("string"==typeof e)return $(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?$(e,t):void 0}}function $(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var K="insights.videoInsightsOverview",J=r.T.encloseNamespace(K);function X(e){var t,a,r,d,u,m,v,g,H,$=(g=(0,i.D)(S.g.ANONYMISE_USERS),H=1,function(e){if(Array.isArray(e))return e}(g)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,r,i,o,s=[],l=!0,c=!1;try{if(i=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;l=!1}else for(;!(l=(n=i.call(a)).done)&&(s.push(n.value),s.length!==t);l=!0);}catch(e){c=!0,r=e}finally{try{if(!l&&null!=a.return&&(o=a.return(),Object(o)!==o))return}finally{if(c)throw r}}return s}}(g,H)||Y(g,H)||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,B.F)();var X=(0,P.r)(null),Z=X.hasClassrooms,ee=X.hasShareFlowV2,te=(0,L.T)().hasPermissions,ae=(0,P.r)(null).publicInteractiveAttempts,ne=o.a.useBasicFetch(k.N.currentUser()),re=o.a.useBasicFetch(N.L.config()),ie=T.M.getVideoRequest(e.videoId,e.typeId),oe=o.a.useBasicFetch(ie),se=y.B.getAudienceAppLinkParams(),le=y.B.getDateRangeAppLinkParams(),ce=Object.assign(Object.assign({},(0,I.wO)((0,I.Hb)(),le)),(0,E.K)(se));(0,R.M)({title:oe.data?J("pageTitle",{video:null===(t=oe.data)||void 0===t?void 0:t.name}):null}),(0,U.v)(oe);var de=o.a.useBasicFetch(ne.data&&F.u.aggregateEngagement(e.videoId,ce,ne.data.id,ae)),ue=1===(null===(a=se.classrooms)||void 0===a?void 0:a.length)&&!(null===(r=se.classroomGroups)||void 0===r?void 0:r.length),me=o.a.useBasicFetch(ue&&V.F.getClassroomStudents(s.m.first(se.classrooms))),ve=(0,C.f)((null===(d=de.data)||void 0===d?void 0:d.userIds)||[],(function(e){return A.o.getRecipientsById(e,ne.data.customerId)})),pe=o.a.useBasicFetch(ne.data&&F.u.views(ce,e.videoId,ne.data.id,ae)),ge=o.a.useBasicFetch(A.o.getShareLinkByObjectId(e.videoId)),fe=o.a.useBasicFetch(A.o.getSentDirectShareByObjectId(e.videoId)),he=(0,h.Y)(null===(u=ge.data)||void 0===u?void 0:u.id),ye=!(!ge.data&&!fe.data);function be(){var e,t,a,n,r;if(!(null===(e=de.data)||void 0===e?void 0:e.userIds)&&!(null===(t=de.data)||void 0===t?void 0:t.sessionIds))return[];var i=null!==(a=ve.itemsArr)&&void 0!==a?a:[],o=(null===(r=null===(n=de.data)||void 0===n?void 0:n.sessionIds)||void 0===r?void 0:r.map((function(e){return(0,b.jP)(e,he)})))||[];return[].concat(Q(i),Q(o))}var Ee=ne.data&&re.data&&oe.data&&de.data&&(!ue||me.data),Ie=Object.assign(Object.assign({},se),le),Ae=function(e,t,a){return{heatmapAppLink:{application:G.O.INSIGHTS,action:t===j.E.Clip?z.e.Insights.CLIP_HEATMAP:z.e.Insights.VIDEO_HEATMAP,args:[e],params:a}}}(e.videoId,e.typeId,Ie);return n.createElement("div",{className:"px-3"},n.createElement(M.j,{video:oe.data,dateRangeAppLinkParams:le,tabs:function(){var e,t,a;return(null===(e=oe.data)||void 0===e?void 0:e.typeId)===j.E.Clip?(0,D.$o)(null===(t=oe.data)||void 0===t?void 0:t.id,"insights",Ie):(0,D.$6)(null===(a=oe.data)||void 0===a?void 0:a.id,"insights",Ie)}(),hasAnalytics:te(O.C.ViewCustomerAnalytics),analyticsWebUrl:null===(m=re.data)||void 0===m?void 0:m.analyticsWebUrl,hasShareFlowV2:ee,shareId:e.shareId}),n.createElement(q.R,{audienceAppLinkParams:se,dateRangeAppLinkParams:le,video:oe.data}),!Ee&&n.createElement(W,null),Ee&&n.createElement(_.u,{video:oe.data,hasShared:ye,hasShareFlowV2:ee,shareId:e.shareId},n.createElement("section",{className:"mb-5"},n.createElement("h2",{className:"h4"},n.createElement(w.x,{namespace:K,phrase:"studentViewing"}),n.createElement("span",null,": ",be().length,me.data?"/".concat(me.data.data.length):"")),n.createElement("div",{className:"row g-3"},ue&&n.createElement("div",{className:"col-12 col-md"},n.createElement(p,{students:me.data.data,watchedIds:de.data.userIds,imageCdnUrl:re.data.imageCdnUrl,heatmapAppLink:Ae.heatmapAppLink,imageUrl:x.W.Insights.AVATAR,anonymiseUsers:$})),n.createElement("div",{className:"col-12 col-md"},n.createElement(f,{students:be(),imageCdnUrl:re.data.imageCdnUrl,heatmapAppLink:Ae.heatmapAppLink,imageUrl:x.W.Insights.AVATAR,anonymiseUsers:$})))),n.createElement("section",{className:"mb-5"},n.createElement("h2",{className:"h4"},n.createElement(w.x,{namespace:K,phrase:Z?"classEngagement":"engagement"})),n.createElement("div",{className:"row g-3"},n.createElement("div",{className:"col-12 col-md-6"},n.createElement(l.i,{osCount:null===(v=pe.data)||void 0===v?void 0:v.osCount})),n.createElement("div",{className:"col-12 col-md-6"},n.createElement(c.b,{engagement:de.data,heatmapAppLink:Ae.heatmapAppLink}))))))}}}]);
2
- //# sourceMappingURL=9040-9393c59004-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/9040-9393c59004-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/hooks/UseAnonSessions.ts","file:///app/packages/libs/shared/src/apps/analytics/utils/AudienceUtils.ts","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/flight-requests/VideoViewRequests.ts","file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/utils/AnalyticsRequestUtils.ts","file:///app/packages/projects/lite/src/apps/my-shares/views/share-info/ShareInfoView.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/students-not-watched/InsightStudentsNotWatched.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/students-watched/InsightStudentsWatched.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/video/overview/partial-loading/partial-video-insights-overview.scss","file:///app/packages/projects/lite/src/apps/my-shares/views/video/overview/partial-loading/PartialVideoInsightsOverview.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/video/overview/VideoInsightsOverviewView.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/video/overview/VideoInsightsOverviewUtils.ts"],"sourcesContent":["import { Flight } from 'libs/common/react/index';\n\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\n\nexport interface AnonSession {\n sessionId: string;\n sessionName: string;\n}\n\nexport interface AnonSessions extends Record<string, AnonSession> {}\n\nexport function useAnonSessions(shareId: string): AnonSessions {\n const anonSessions = Flight.useBasicFetch<AnonSession[]>(shareId && ShareRequests.getAnonSessions(shareId));\n\n if (!anonSessions.data?.length)\n return {};\n\n return anonSessions.data.reduce((prev, current) => ({ ...prev, [current.sessionId]: current }), {});\n}","import { AudienceQueryParams } from 'libs/shared/apps/analytics/interfaces/AudienceQueryParams';\n\nexport const getAudienceParams = (queryParams: AudienceQueryParams) => {\n const userId: string[] = [];\n const groupId: string[] = [];\n\n if (queryParams.users)\n userId.push(...queryParams.users);\n\n if (queryParams.classrooms)\n groupId.push(...queryParams.classrooms);\n\n if (queryParams.classroomGroups)\n groupId.push(...queryParams.classroomGroups);\n return {\n userId,\n groupId\n };\n};","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n internalServerError?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError,\n internalServerError: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.InternalServer) {\n if (!ignoreMap.internalServerError)\n Core.ErrorHelper.throw(new UnspecifiedError());\n return;\n }\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AnalyticsRequestFilter, Engagement } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\nexport const VideoViewRequests = {\n individualEngagement(\n objectId: string,\n filter: AnalyticsRequestFilter,\n sharerId?: string,\n includeAnonViews?: boolean\n ): Flight.Request {\n const queryParams: HashObject = {\n objectId,\n ...filter\n };\n\n if (sharerId)\n queryParams.sharerId = sharerId;\n\n if (includeAnonViews)\n queryParams.includeAnonViews = true;\n\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/analytics/heat-map', queryParams),\n key: getAnalyticsRequestKey(`engagement:${objectId}:${includeAnonViews}`, filter, sharerId),\n formatData: (data: any) => {\n return {\n ...data,\n data: data.data?.map((d: any) => ({\n ...d,\n heatMap: d.heatMap ?? []\n }))\n };\n },\n normalize: false\n };\n },\n \n aggregateEngagement(\n objectId: string,\n filter: AnalyticsRequestFilter,\n sharerId?: string,\n includeAnonViews?: boolean\n ): Flight.Request {\n const queryParams: HashObject = {\n objectId,\n ...filter\n };\n\n if (sharerId)\n queryParams.sharerId = sharerId;\n \n if (includeAnonViews)\n queryParams.includeAnonViews = true;\n\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/analytics/heat-map/aggregations', queryParams),\n key: getAnalyticsRequestKey(`aggregate:engagement:${objectId}:${includeAnonViews}`, filter, sharerId),\n formatData: (data: Engagement) => {\n return {\n ...data,\n heatMap: data.heatMap ?? []\n };\n },\n normalize: false\n };\n },\n \n views(\n filter: AnalyticsRequestFilter,\n objectId?: string,\n sharerId?: string,\n includeAnonViews?: boolean\n ): Flight.Request {\n const queryParams: HashObject = {\n ...filter,\n timeOffset: DateHelper.getTimezoneOffset()\n };\n\n if (objectId)\n queryParams.objectId = objectId;\n\n if (sharerId)\n queryParams.sharerId = sharerId;\n \n if (includeAnonViews)\n queryParams.includeAnonViews = true;\n\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/analytics/video-views', queryParams),\n key: getAnalyticsRequestKey(`video:views:${objectId}:${includeAnonViews}`, filter, sharerId),\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}\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 };\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<T>(\n objs: T[],\n getRequest: (items: T[]) => Flight.Request,\n _getKey?: (obj: T) => 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 fetchedItems = React.useRef<Set<string>>(new Set<string>());\n\n const [ requests, setRequests ] = React.useState<Flight.Request[]>([]);\n\n React.useEffect(() => {\n if (!objs?.length)\n return;\n\n const unfetchedItems: T[] = [];\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<T>(unfetchedItems, CHUNK_SIZE).map(getRequest) ]));\n }, [objs?.length]);\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, [getKey(item)]: item }), {})\n : null;\n\n return {\n hasFirstRequestCompleted: !!responses.responses?.[0]?.hasCompleted,\n itemsArr,\n items,\n isFetching: responses.isFetching\n };\n}","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import { AnalyticsRequestFilter } from 'libs/shared/interfaces';\n\nexport function getAnalyticsRequestKey(baseKey: string, filter: AnalyticsRequestFilter, sharerId?: string): string {\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\n if (userIdKey)\n key += `:${userIdKey}`;\n\n if (groupIdKey)\n key += `:${groupIdKey}`;\n\n if (sharerId)\n key += `:${sharerId}`;\n\n return key;\n}","import React from 'react';\nimport { format as formatDate } from 'timeago.js';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { AudienceQueryParams } from 'libs/shared/apps/analytics/interfaces/AudienceQueryParams';\nimport { BaseAnalyticsEventResponse } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { DateRangeQueryParams } from 'libs/shared/apps/analytics/interfaces/DateRangeQueryParams';\nimport { getAudienceParams } from 'libs/shared/apps/analytics/utils/AudienceUtils';\nimport { getInsightsDateRangePresets, getStartEndParams } from 'libs/shared/apps/analytics/utils/DateRangeUtils';\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { SharePrivacyResponse } from 'libs/shared/apps/share/interfaces/responses/SharePrivacyResponse';\nimport { ShareLinkHelper } from 'libs/shared/apps/share/utils/ShareLinkHelper';\nimport { SharableRecipient, ShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\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 { VideoViewRequests } from 'libs/shared/flight-requests/VideoViewRequests';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config, CurrentUser, DirectShare, ShareLink, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { getShareAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport { SharedToPill } from 'apps/my-shares/components/shared-to-pill/SharedToPill';\n\nconst namespace = 'insights.shareInfo';\n\ninterface ShareInfoViewProps {\n video: VideoTypes;\n audienceAppLinkParams: AudienceQueryParams;\n dateRangeAppLinkParams: DateRangeQueryParams;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function ShareInfoView(props: ShareInfoViewProps) {\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const { publicInteractiveAttempts } = useSettings(null);\n\n const requestFilter = {\n ...getStartEndParams(getInsightsDateRangePresets(), props.dateRangeAppLinkParams),\n ...getAudienceParams(props.audienceAppLinkParams)\n };\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const shareLink = Flight.useBasicFetch<ShareLink>(props.video &&\n ShareRequests.getShareLinkByObjectId(props.video.id));\n const sentDirectShare = Flight.useBasicFetch<DirectShare>(props.video &&\n ShareRequests.getSentDirectShareByObjectId(props.video.id));\n const recipients = Flight.useBasicFetch<SharableRecipient[]>(currentUser.data?.customerId &&\n ShareViewHelper.getDirectShareRecipientsRequest(currentUser.data.customerId, sentDirectShare.data));\n const videoViews = Flight.useBasicFetch<BaseAnalyticsEventResponse>(currentUser.data && props.video &&\n VideoViewRequests.views(requestFilter, props.video.id, currentUser.data.id, publicInteractiveAttempts));\n const privacy = Flight.useBasicFetch<SharePrivacyResponse>(props.video && ShareRequests.getPrivacy(props.video.id));\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const notShared =\n (shareLink.hasCompleted && !shareLink.data) &&\n (sentDirectShare.hasCompleted && !sentDirectShare.data);\n\n const hasShareData =\n (shareLink.hasCompleted && shareLink.data) ||\n (sentDirectShare.hasCompleted && sentDirectShare.data) &&\n (!shareLink.data || privacy.data) &&\n (!shareLink.data || yearGroups.data) &&\n recipients.data &&\n videoViews.data;\n\n const shareLinkText = shareLink.data && privacy.data && yearGroups.data &&\n ShareLinkHelper.getIconAndText({\n entity: props.video,\n entityTypeId: props.video.typeId,\n hasStudentExp: false,\n isPasswordProtected: shareLink.data.isPasswordProtected,\n linkExpireDate: shareLink.data.linkExpireDate,\n privacy: privacy.data,\n status: shareLink.data.status,\n yearGroups: yearGroups.data\n });\n\n const viewCount = React.useMemo(() => {\n return videoViews.data?.data.reduce((acc, view) => view.count + acc, 0);\n }, [videoViews.data]);\n const dateShared = sentDirectShare.data?.dateCreated || shareLink.data?.dateCreated;\n\n return (\n <div className='mb-4'>\n {hasShareData &&\n <>\n <h2 className='h4'><Text namespace={namespace} phrase='shareInfo' /></h2>\n\n <div className='d-flex border p-3 rounded-3 align-items-center justify-content-between'>\n <div className='d-flex align-items-center gap-2'>\n <SharedToPill\n shareRecipients={recipients.data}\n imageCdnUrl={config.data?.imageCdnUrl}\n hasShareLink={!!shareLink.data}\n maxAvatars={4}\n shareLinkText={shareLinkText?.text}\n />\n ·\n <p className='mb-0'>{formatDate(dateShared)}</p>\n {!!viewCount && (\n <>\n ·\n <p className='mb-0'><Text namespace={namespace} phrase='views' options={{ smartCount: viewCount }} /></p>\n </>\n )}\n </div>\n <IconButton\n appLink={getShareAppLink(props.video)}\n svgName={cvSvgLibrary.Share}\n className='btn btn-outline-dark'\n >\n <Text namespace={namespace} phrase='share' />\n </IconButton>\n </div>\n </>\n }\n\n {!notShared && !hasShareData &&\n <>\n <div className='h4 partial-loading-background w-25'>&nbsp;</div>\n <div className='p-3 rounded partial-loading-background'>\n <p className='mb-1'>&nbsp;</p>\n </div>\n </>\n }\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { InsightStudentList } from 'libs/shared/apps/analytics/components/insight-student-list/InsightStudentList';\nimport { User } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.insightStudentsNotWatched';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightStudentsNotWatchedProps {\n students: User[];\n imageCdnUrl: string;\n imageUrl: string;\n heatmapAppLink: Core.AppLink;\n watchedIds: string[];\n anonymiseUsers: boolean;\n}\n\nexport function InsightStudentsNotWatched(props: InsightStudentsNotWatchedProps) {\n const studentsNotWatched = props.students?.filter(student => !props.watchedIds?.includes(student.id)) || [];\n\n return (\n <InsightCard\n title={getPhrase('title')}\n svgName={cvSvgLibrary.Puzzle}\n svgClassName='bg-light-teal text-teal'\n >\n <InsightStudentList\n students={studentsNotWatched}\n imageCdnUrl={props.imageCdnUrl}\n imageUrl={props.imageUrl}\n description={getPhrase('studentsDisplay')}\n anonymiseUsers={props.anonymiseUsers}\n />\n </InsightCard>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { InsightStudentList } from 'libs/shared/apps/analytics/components/insight-student-list/InsightStudentList';\nimport { UserOrAnonSession } from 'libs/shared/apps/analytics/interfaces/UserOrAnonSession';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.insightStudentsWatched';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightWatchedProps {\n students: UserOrAnonSession[];\n imageCdnUrl: string;\n heatmapAppLink: Core.AppLink;\n imageUrl: string;\n anonymiseUsers: boolean;\n}\n\nexport function InsightStudentsWatched(props: InsightWatchedProps) {\n return (\n <InsightCard\n title={getPhrase('title')}\n svgName={cvSvgLibrary.Flag}\n svgClassName='bg-light-indigo text-indigo'\n count={props.students.length}\n >\n <InsightStudentList\n students={props.students}\n imageCdnUrl={props.imageCdnUrl}\n imageUrl={props.imageUrl}\n description={getPhrase('studentsDisplay')}\n appLink={props.heatmapAppLink}\n appLinkText={getPhrase('viewAll')}\n anonymiseUsers={props.anonymiseUsers}\n />\n </InsightCard>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialInsights\":\"qm6HY\"};","import React from 'react';\n\nimport styles from './partial-video-insights-overview.scss';\n\nexport function PartialVideoInsightsOverview() {\n return (\n <div>\n <h2 className='h4 w-25 partial-loading-background'>&nbsp;</h2>\n <div className='row g-3 mb-5'>\n <div className='col-12'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n </div>\n\n <h2 className='h4 w-25 partial-loading-background'>&nbsp;</h2>\n <div className='row g-3 mb-5'>\n <div className='col-6'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n <div className='col-6'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n </div>\n </div>\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';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { InsightDevices } from 'libs/shared/apps/analytics/components/insights/devices/InsightDevices';\nimport { InsightHeatmap } from 'libs/shared/apps/analytics/components/insights/heatmap/InsightHeatmap';\nimport { InsightStudentsNotWatched } from 'libs/shared/apps/analytics/components/insights/students-not-watched/InsightStudentsNotWatched';\nimport { InsightStudentsWatched } from 'libs/shared/apps/analytics/components/insights/students-watched/InsightStudentsWatched';\nimport { useAnonSessions } from 'libs/shared/apps/analytics/hooks/UseAnonSessions';\nimport { BaseAnalyticsEventResponse } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { UserOrAnonSession } from 'libs/shared/apps/analytics/interfaces/UserOrAnonSession';\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { getAnonSession } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { getAudienceParams } from 'libs/shared/apps/analytics/utils/AudienceUtils';\nimport { getInsightsDateRangePresets, getStartEndParams } from 'libs/shared/apps/analytics/utils/DateRangeUtils';\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoViewRequests } from 'libs/shared/flight-requests/VideoViewRequests';\nimport { useBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { BasePaginatedCollection, Config, CurrentUser, DirectShare, Engagement, ShareLink, User, VideoTypes } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InsightsShareMask } from 'apps/my-shares/components/insights-mask/InsightsShareMask';\nimport { getInsightsClipTabs, getInsightsVideoTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\nimport { ShareInfoView } from 'apps/my-shares/views/share-info/ShareInfoView';\nimport { PartialVideoInsightsOverview } from 'apps/my-shares/views/video/overview/partial-loading/PartialVideoInsightsOverview';\nimport { getVideoInsightsAppLinks } from 'apps/my-shares/views/video/overview/VideoInsightsOverviewUtils';\n\nconst namespace = 'insights.videoInsightsOverview';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface VideoInsightsViewProps {\n videoId: string;\n typeId: MasterType;\n shareId?: string;\n}\n\nexport function VideoInsightsOverviewView(props: VideoInsightsViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const { hasClassrooms, hasShareFlowV2 } = useSettings(null);\n\n const { hasPermissions } = usePermissions();\n\n const { publicInteractiveAttempts } = useSettings(null);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const videoRequest = VideoHelper.getVideoRequest(props.videoId, props.typeId);\n const video = Flight.useBasicFetch<VideoTypes>(videoRequest);\n\n const audienceAppLinkParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n const dateRangeAppLinkParams = AnalyticsFilterHelper.getDateRangeAppLinkParams();\n const requestFilter = {\n ...getStartEndParams(getInsightsDateRangePresets(), dateRangeAppLinkParams),\n ...getAudienceParams(audienceAppLinkParams)\n };\n\n useSetPageMetadata({ title: video.data ? getPhrase('pageTitle', { video: video.data?.name }) : null });\n useHandleObjectError(video);\n\n const aggregateEngagement = Flight.useBasicFetch<Engagement>(\n currentUser.data &&\n VideoViewRequests.aggregateEngagement(\n props.videoId,\n requestFilter,\n currentUser.data.id,\n publicInteractiveAttempts\n )\n );\n\n const classroomFilterOnly =\n audienceAppLinkParams.classrooms?.length === 1 && !audienceAppLinkParams.classroomGroups?.length;\n const classroomStudents = Flight.useBasicFetch<BasePaginatedCollection<User>>(classroomFilterOnly &&\n ClassroomRequests.getClassroomStudents(ArrayHelper.first(audienceAppLinkParams.classrooms)));\n\n const shareRecipients = useBatchFetch<User>(\n aggregateEngagement.data?.userIds || [],\n (ids: string[]) => ShareRequests.getRecipientsById(ids, currentUser.data.customerId)\n );\n\n const videoViews = Flight.useBasicFetch<BaseAnalyticsEventResponse>(currentUser.data &&\n VideoViewRequests.views(requestFilter, props.videoId, currentUser.data.id, publicInteractiveAttempts));\n\n const shareLink = Flight.useBasicFetch<ShareLink>(ShareRequests.getShareLinkByObjectId(props.videoId));\n const sentDirectShare = Flight.useBasicFetch<DirectShare>(\n ShareRequests.getSentDirectShareByObjectId(props.videoId)\n );\n\n const anonSessions = useAnonSessions(shareLink.data?.id);\n\n const hasShared = !!(shareLink.data || sentDirectShare.data);\n\n function getStudentsList(): UserOrAnonSession[] {\n if (!aggregateEngagement.data?.userIds && !aggregateEngagement.data?.sessionIds)\n return [];\n\n const students = shareRecipients.itemsArr ?? [];\n\n const sessions = aggregateEngagement.data?.sessionIds\n ?.map(sessionId => getAnonSession(sessionId, anonSessions)) || [];\n\n return [ ...students, ...sessions ];\n }\n\n const hasDataLoaded =\n currentUser.data &&\n config.data &&\n video.data &&\n aggregateEngagement.data &&\n (!classroomFilterOnly || classroomStudents.data);\n\n const params = {\n ...audienceAppLinkParams,\n ...dateRangeAppLinkParams\n };\n\n const videoInsightsAppLinks = getVideoInsightsAppLinks(props.videoId, props.typeId, params);\n\n function getInsightsOverviewTabs() {\n if (video.data?.typeId === MasterType.Clip) {\n return getInsightsClipTabs(video.data?.id, 'insights', params);\n }\n\n return getInsightsVideoTabs(video.data?.id, 'insights', params);\n }\n\n return (\n <div className='px-3'>\n <InsightsHeader\n video={video.data}\n dateRangeAppLinkParams={dateRangeAppLinkParams}\n tabs={getInsightsOverviewTabs()}\n hasAnalytics={hasPermissions(PermissionName.ViewCustomerAnalytics)}\n analyticsWebUrl={config.data?.analyticsWebUrl}\n hasShareFlowV2={hasShareFlowV2}\n shareId={props.shareId}\n />\n\n <ShareInfoView\n audienceAppLinkParams={audienceAppLinkParams}\n dateRangeAppLinkParams={dateRangeAppLinkParams}\n video={video.data}\n />\n\n {!hasDataLoaded && <PartialVideoInsightsOverview />}\n\n {hasDataLoaded &&\n <InsightsShareMask\n video={video.data}\n hasShared={hasShared}\n hasShareFlowV2={hasShareFlowV2}\n shareId={props.shareId}\n >\n <section className='mb-5'>\n <h2 className='h4'>\n <Text namespace={namespace} phrase='studentViewing' />\n <span>: {getStudentsList().length}{classroomStudents.data ? `/${classroomStudents.data.data.length}` : ''}</span>\n </h2>\n <div className='row g-3'>\n {classroomFilterOnly && (\n <div className='col-12 col-md'>\n <InsightStudentsNotWatched\n students={classroomStudents.data.data}\n watchedIds={aggregateEngagement.data.userIds}\n imageCdnUrl={config.data.imageCdnUrl}\n heatmapAppLink={videoInsightsAppLinks.heatmapAppLink}\n imageUrl={ImageUrls.Insights.AVATAR}\n anonymiseUsers={anonymiseUsers}\n />\n </div>\n )}\n <div className='col-12 col-md'>\n <InsightStudentsWatched\n students={getStudentsList()}\n imageCdnUrl={config.data.imageCdnUrl}\n heatmapAppLink={videoInsightsAppLinks.heatmapAppLink}\n imageUrl={ImageUrls.Insights.AVATAR}\n anonymiseUsers={anonymiseUsers}\n />\n </div>\n </div>\n </section>\n <section className='mb-5'>\n <h2 className='h4'>\n <Text\n namespace={namespace}\n phrase={hasClassrooms ? 'classEngagement' : 'engagement'}\n />\n </h2>\n <div className='row g-3'>\n <div className='col-12 col-md-6'>\n <InsightDevices\n osCount={videoViews.data?.osCount}\n />\n </div>\n <div className='col-12 col-md-6'>\n <InsightHeatmap\n engagement={aggregateEngagement.data}\n heatmapAppLink={videoInsightsAppLinks.heatmapAppLink}\n />\n </div>\n </div>\n </section>\n </InsightsShareMask>\n }\n </div>\n );\n}","import { HashObject } from 'libs/common/react/interfaces';\n\nimport { MasterType } from 'libs/shared/enums/MasterType';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nexport function getVideoInsightsAppLinks(id: string, typeId: MasterType, params?: HashObject) {\n return {\n heatmapAppLink: {\n application: AppChannels.INSIGHTS,\n action: typeId === MasterType.Clip ? Actions.Insights.CLIP_HEATMAP : Actions.Insights.VIDEO_HEATMAP,\n args: [id],\n params\n }\n };\n}"],"names":["useAnonSessions","shareId","anonSessions","data","length","reduce","prev","current","sessionId","getAudienceParams","queryParams","userId","groupId","users","push","classrooms","classroomGroups","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","internalServerError","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","VideoViewRequests","individualEngagement","objectId","filter","sharerId","includeAnonViews","url","key","formatData","map","d","heatMap","normalize","aggregateEngagement","views","timeOffset","CHUNK_SIZE","useBatchFetch","itemIds","getRequest","requests","chunk","responses","itemsArr","items","acc","item","id","isFetching","useGrowingBatchFetch","objs","_getKey","getKey","obj","fetchedItems","Set","setRequests","unfetchedItems","forEach","has","add","r","hasFirstRequestCompleted","hasCompleted","generateCacheKey","flightObjs","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","getAnalyticsRequestKey","baseKey","start","end","userIdKey","sort","groupIdKey","namespace","ShareInfoView","props","config","publicInteractiveAttempts","requestFilter","dateRangeAppLinkParams","audienceAppLinkParams","currentUser","shareLink","video","sentDirectShare","recipients","customerId","videoViews","yearGroups","isAuthenticated","notShared","hasShareData","shareLinkText","entity","entityTypeId","typeId","hasStudentExp","isPasswordProtected","linkExpireDate","viewCount","view","count","dateShared","dateCreated","className","phrase","shareRecipients","imageCdnUrl","hasShareLink","maxAvatars","text","options","smartCount","appLink","svgName","getPhrase","LanguageService","InsightStudentsNotWatched","studentsNotWatched","students","student","watchedIds","includes","InsightCard","title","svgClassName","InsightStudentList","imageUrl","description","anonymiseUsers","InsightStudentsWatched","heatmapAppLink","appLinkText","PartialVideoInsightsOverview","VideoInsightsOverviewView","SharedViewModelKeys","useLockContentWidth","useSettings","hasClassrooms","hasShareFlowV2","hasPermissions","usePermissions","UserRequests","ConfigRequests","videoRequest","VideoHelper","videoId","useSetPageMetadata","name","classroomFilterOnly","classroomStudents","ClassroomRequests","ArrayHelper","userIds","ids","ShareRequests","hasShared","getStudentsList","sessionIds","sessions","hasDataLoaded","params","videoInsightsAppLinks","application","action","MasterType","args","getVideoInsightsAppLinks","InsightsHeader","tabs","getInsightsOverviewTabs","hasAnalytics","PermissionName","analyticsWebUrl","InsightsShareMask","Text","ImageUrls","InsightDevices","osCount","InsightHeatmap","engagement"],"sourceRoot":""}