@clickview/lite 0.70.1-dev.1 → 0.70.1-dev.3

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 (71) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/languages/en.json +1 -1
  3. package/dist/scripts/3596-7f32e7d4c0-lite.chunk.js +3 -0
  4. package/dist/scripts/3596-7f32e7d4c0-lite.chunk.js.map +1 -0
  5. package/dist/scripts/4050-cd4d18058a-lite.chunk.js +3 -0
  6. package/dist/scripts/4050-cd4d18058a-lite.chunk.js.map +1 -0
  7. package/dist/scripts/4377-001a8ee263-lite.chunk.js +2 -0
  8. package/dist/scripts/4377-001a8ee263-lite.chunk.js.map +1 -0
  9. package/dist/scripts/549-2d591052e3-lite.chunk.js +2 -0
  10. package/dist/scripts/549-2d591052e3-lite.chunk.js.map +1 -0
  11. package/dist/scripts/5721-2141ed4fb6-lite.chunk.js +2 -0
  12. package/dist/scripts/5721-2141ed4fb6-lite.chunk.js.map +1 -0
  13. package/dist/scripts/5797-f84ce545b9-lite.chunk.js +2 -0
  14. package/dist/scripts/5797-f84ce545b9-lite.chunk.js.map +1 -0
  15. package/dist/scripts/5829-689f5be5d1-lite.chunk.js +3 -0
  16. package/dist/scripts/5829-689f5be5d1-lite.chunk.js.map +1 -0
  17. package/dist/scripts/6046-5652117548-lite.chunk.js +2 -0
  18. package/dist/scripts/6046-5652117548-lite.chunk.js.map +1 -0
  19. package/dist/scripts/{6629-3ea157aef8-lite.chunk.js → 6629-910e316a83-lite.chunk.js} +3 -3
  20. package/dist/scripts/6629-910e316a83-lite.chunk.js.map +1 -0
  21. package/dist/scripts/7042-65a932d16b-lite.chunk.js +2 -0
  22. package/dist/scripts/{7042-aaaf6e286f-lite.chunk.js.map → 7042-65a932d16b-lite.chunk.js.map} +1 -1
  23. package/dist/scripts/7428-6dd787bc07-lite.chunk.js +2 -0
  24. package/dist/scripts/7428-6dd787bc07-lite.chunk.js.map +1 -0
  25. package/dist/scripts/7757-9b72774917-lite.chunk.js +2 -0
  26. package/dist/scripts/{7757-e4d91d7fac-lite.chunk.js.map → 7757-9b72774917-lite.chunk.js.map} +1 -1
  27. package/dist/scripts/8191-ff27deee6c-lite.chunk.js +2 -0
  28. package/dist/scripts/8191-ff27deee6c-lite.chunk.js.map +1 -0
  29. package/dist/scripts/{8280-287760fb57-lite.chunk.js → 8280-8bb89d0a89-lite.chunk.js} +2 -2
  30. package/dist/scripts/8280-8bb89d0a89-lite.chunk.js.map +1 -0
  31. package/dist/scripts/8832-73ffd39e2a-lite.chunk.js +2 -0
  32. package/dist/scripts/{8832-aa3df17f66-lite.chunk.js.map → 8832-73ffd39e2a-lite.chunk.js.map} +1 -1
  33. package/dist/scripts/9973-648be9b72a-lite.chunk.js +2 -0
  34. package/dist/scripts/9973-648be9b72a-lite.chunk.js.map +1 -0
  35. package/dist/scripts/bundle-5276379bf8.min.js +3 -0
  36. package/dist/scripts/{bundle-4735d8d159.min.js.map → bundle-5276379bf8.min.js.map} +1 -1
  37. package/package.json +1 -1
  38. package/dist/scripts/3596-191624e307-lite.chunk.js +0 -3
  39. package/dist/scripts/3596-191624e307-lite.chunk.js.map +0 -1
  40. package/dist/scripts/4050-74aa5394f6-lite.chunk.js +0 -3
  41. package/dist/scripts/4050-74aa5394f6-lite.chunk.js.map +0 -1
  42. package/dist/scripts/4377-f6e641f39a-lite.chunk.js +0 -2
  43. package/dist/scripts/4377-f6e641f39a-lite.chunk.js.map +0 -1
  44. package/dist/scripts/52-d91751eafb-lite.chunk.js +0 -2
  45. package/dist/scripts/52-d91751eafb-lite.chunk.js.map +0 -1
  46. package/dist/scripts/549-f06f2dab2b-lite.chunk.js +0 -2
  47. package/dist/scripts/549-f06f2dab2b-lite.chunk.js.map +0 -1
  48. package/dist/scripts/5721-bfd734f968-lite.chunk.js +0 -2
  49. package/dist/scripts/5721-bfd734f968-lite.chunk.js.map +0 -1
  50. package/dist/scripts/5797-04d8a61b80-lite.chunk.js +0 -2
  51. package/dist/scripts/5797-04d8a61b80-lite.chunk.js.map +0 -1
  52. package/dist/scripts/5829-1c696c8446-lite.chunk.js +0 -3
  53. package/dist/scripts/5829-1c696c8446-lite.chunk.js.map +0 -1
  54. package/dist/scripts/6046-339bc1b2e1-lite.chunk.js +0 -2
  55. package/dist/scripts/6046-339bc1b2e1-lite.chunk.js.map +0 -1
  56. package/dist/scripts/6629-3ea157aef8-lite.chunk.js.map +0 -1
  57. package/dist/scripts/7042-aaaf6e286f-lite.chunk.js +0 -2
  58. package/dist/scripts/741-98a532e970-lite.chunk.js +0 -2
  59. package/dist/scripts/741-98a532e970-lite.chunk.js.map +0 -1
  60. package/dist/scripts/7757-e4d91d7fac-lite.chunk.js +0 -2
  61. package/dist/scripts/8191-d5f68d2463-lite.chunk.js +0 -2
  62. package/dist/scripts/8191-d5f68d2463-lite.chunk.js.map +0 -1
  63. package/dist/scripts/8280-287760fb57-lite.chunk.js.map +0 -1
  64. package/dist/scripts/8832-aa3df17f66-lite.chunk.js +0 -2
  65. package/dist/scripts/bundle-4735d8d159.min.js +0 -3
  66. /package/dist/css/{52-lite-e2d7497beb.chunk.css → 7428-lite-e2d7497beb.chunk.css} +0 -0
  67. /package/dist/scripts/{3596-191624e307-lite.chunk.js.LICENSE.txt → 3596-7f32e7d4c0-lite.chunk.js.LICENSE.txt} +0 -0
  68. /package/dist/scripts/{4050-74aa5394f6-lite.chunk.js.LICENSE.txt → 4050-cd4d18058a-lite.chunk.js.LICENSE.txt} +0 -0
  69. /package/dist/scripts/{5829-1c696c8446-lite.chunk.js.LICENSE.txt → 5829-689f5be5d1-lite.chunk.js.LICENSE.txt} +0 -0
  70. /package/dist/scripts/{6629-3ea157aef8-lite.chunk.js.LICENSE.txt → 6629-910e316a83-lite.chunk.js.LICENSE.txt} +0 -0
  71. /package/dist/scripts/{bundle-4735d8d159.min.js.LICENSE.txt → bundle-5276379bf8.min.js.LICENSE.txt} +0 -0
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4377],{5255:(e,t,n)=>{n.d(t,{Y:()=>s});var r=n(20354),i=n(30439);function a(e){return a="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},a(e)}function s(e){var t,n=r.a.useBasicFetch(e&&i.o.getAnonSessions(e));return(null===(t=n.data)||void 0===t?void 0:t.length)?n.data.reduce((function(e,t){return Object.assign(Object.assign({},e),(n={},r=t.sessionId,i=t,(r=function(e){var t=function(e){if("object"!=a(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=a(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==a(t)?t:t+""}(r))in n?Object.defineProperty(n,r,{value:i,enumerable:!0,configurable:!0,writable:!0}):n[r]=i,n));var n,r,i}),{}):{}}},26136:(e,t,n)=>{n.d(t,{B2:()=>o,DV:()=>l,jP:()=>u});var r=n(76198),i=n(23481),a=n(64818),s=i.T.encloseNamespace("shared.analyticsUtils");function o(e,t){return e?t?(0,r._8)((n="sessionId"in e?e.sessionName:e.id,i=+"".concat(n).concat(Math.floor((new Date).getMinutes()/5)),{dictionaries:[r.O9,r.yd],separator:" ",length:2,style:"capital",seed:i})):"sessionId"in e?e.sessionName:a.l.getFullName(e):"";var n,i}function u(e,t){var n={sessionId:e,sessionName:s("anonymousUser")};return e&&t&&t[e]||n}function l(e,t){return e.user?e.user:u(e.sessionId,t)}},3218:(e,t,n)=>{n.d(t,{R:()=>S});var r=n(32735),i=n(69087),a=n(26136),s=n(39157),o=n(69186),u=n(86572),l=n(28972),c=n(83140),d=n(80845),m=n(23481),v=n(2102),f=n(36532),b=m.T.encloseNamespace("interactives.studentResponseList");function y(e){var t=Object.keys(e.markedAnswers).length;return r.createElement("div",{className:"d-flex justify-content-end pt-3"},r.createElement("div",null,!e.showSubmitButtonSpinner&&r.createElement("button",{className:"btn btn-link",onClick:e.onClickClose},b("close")),!!e.interactionsToMark.length&&r.createElement(r.Fragment,null,e.isDemo?r.createElement(f.u,{id:"submitAnswers",title:b("demoOnly"),spanHack:!0,spanHackClassName:"d-inline-flex"},r.createElement("button",{className:"btn btn-outline-dark pointer-events-none",disabled:!t},b("submitAnswers"))):r.createElement(v.m,{variant:"outline-dark",onClick:e.onClickSubmit,disabled:!t,showSpinner:e.showSubmitButtonSpinner},b("submitAnswers")))))}var g=m.T.encloseNamespace("interactives.studentResponseList");function p(e){var t=Object.keys(e.markedAnswers).length;return r.createElement("div",{className:"d-flex justify-content-between pb-3"},r.createElement("div",{className:"d-flex"},!!e.summary.unanswered&&r.createElement("div",{className:"bg-light rounded p-2 me-2"},r.createElement("strong",{className:"me-2"},g("unanswered")),e.summary.unanswered),r.createElement("div",{className:"bg-light rounded p-2 me-2"},r.createElement("strong",{className:"me-2"},g("score")),e.summary.awaitingMarking?r.createElement("em",null,g("pending")):"".concat(Math.round(100*e.summary.percentCorrect),"%"))),!!e.interactionsToMark.length&&r.createElement(r.Fragment,null,e.isDemo?r.createElement(f.u,{id:"submitAnswers",title:g("demoOnly"),spanHack:!0},r.createElement("button",{className:"btn btn-outline-dark pointer-events-none",disabled:!t},g("submitAnswers"))):r.createElement(v.m,{variant:"outline-dark",onClick:e.onClickSubmit,disabled:!t,showSpinner:e.showSubmitButtonSpinner},g("submitAnswers"))))}const k={awaitingMarking:"MvGb5"};function h(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,a,s,o=[],u=!0,l=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;u=!1}else for(;!(u=(r=a.call(n)).done)&&(o.push(r.value),o.length!==t);u=!0);}catch(e){l=!0,i=e}finally{try{if(!u&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(l)throw i}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return w(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?w(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function w(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function S(e){var t,n,m,v,f=h(r.useState(!1),2),b=f[0],g=f[1],w=(t=r.useRef(null),n=h(r.useState(!1),2),m=n[0],v=n[1],r.useEffect((function(){t.current&&!m&&(v(!0),requestAnimationFrame((function(){return t.current.scrollIntoView({behavior:"smooth",block:"center"})})))}),[t.current,m]),t),S=(0,s.Rt)(e.interactive,e.studentResults),A=(0,d.Q)(e.interactive),E=function(e,t){return e.filter((function(e){return c.A.isInteractionCorrect(e,(0,d.j_)(t))===l.w.AwaitingMarking}))}(A,e.studentResults);function I(){g(!0),e.submitMarkedAnswers()}return r.createElement(r.Fragment,null,r.createElement(p,{summary:S,interactionsToMark:E,markedAnswers:e.markedAnswers,onClickSubmit:I,showSubmitButtonSpinner:b,isDemo:e.isDemo}),r.createElement("ul",{className:"list-unstyled"},A.map((function(t,n){var l,c=t.id.toString()===(null===(l=e.selectedInteractionId)||void 0===l?void 0:l.toString()),d=E.some((function(e){return e.id===t.id})),m=(0,a.B2)((0,a.DV)(e.studentResults,e.anonSessions),e.anonymiseUsers),v="p-2 mb-3 rounded";return c&&(v+=" border-2 border-info shadow"),v+=d?" ".concat(k.awaitingMarking):" border",r.createElement("li",{key:n,className:v,ref:c?w:null},r.createElement("div",{className:"d-flex mb-2"},r.createElement(u.y,{interaction:t,iconClassName:"flex-shrink-0"})),e.reportsStyling?r.createElement(o.O,{interaction:t,studentResults:e.studentResults,markedStatus:(0,s.HI)(t.id,e.studentResults,e.markedAnswers),markInteraction:e.addMarkedAnswers,imageCdnUrl:e.imageCdnUrl,anonymisedUserName:m,className:"bg-light ps-2",showFeedback:!0,reportsStyling:!0,responseComponentClass:"mx-n2"}):r.createElement(i.d,{interaction:t,studentResults:e.studentResults,markedStatus:(0,s.HI)(t.id,e.studentResults,e.markedAnswers),markInteraction:e.addMarkedAnswers,imageCdnUrl:e.imageCdnUrl,anonymisedUserName:m,showFeedback:!0}))}))),r.createElement(y,{interactionsToMark:E,markedAnswers:e.markedAnswers,onClickSubmit:I,onClickClose:e.onClickClose,showSubmitButtonSpinner:b,isDemo:e.isDemo}))}},94892:(e,t,n)=>{n.d(t,{T:()=>i,i:()=>r});var r={HIGH:.75,MODERATE:.5},i={HIGH:.7,MODERATE:.7}},94644:(e,t,n)=>{n.d(t,{r:()=>c});var r=n(50242),i=n(81886),a=n(67058),s=n(14553),o=n(49267),u=n(49075),l={notFound:a.d,forbidden:{rating:s.q,yearLevel:s.q,region:o.a,privacy:s.q},badRequest:u._,internalServerError:u._};function c(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var a;a="number"==typeof e?e:e.status;var s=Object.assign(Object.assign({},l),t);a&&i.Q.Ry.isStatusCodeError(a)&&(a!==r.o.InternalServer?a!==r.o.NotFound?a!==r.o.Forbidden?n.badRequest||i.Q.Ry.throw(new s.badRequest):n.forbidden||i.Q.Ry.throw(new s.forbidden.privacy):n.notFound||i.Q.Ry.throw(new s.notFound):n.internalServerError||i.Q.Ry.throw(new u._))}}},54405:(e,t,n)=>{n.d(t,{X:()=>r});var r={interactive:function(){return{url:"/mocks/insights/interactive.json",key:"demo:interactive",normalize:!1}},interactiveMetadata:function(){return{url:"/mocks/insights/interactive-metadata.json",key:"demo:interactive:metadata",normalize:!1}},interactiveResults:function(){return{url:"/mocks/insights/interactive-results.json",key:"demo:interactive:results",normalize:!1}},videoViews:function(){return{url:"/mocks/insights/video-views.json",key:"demo:video:views",normalize:!1}},users:function(){return{url:"/mocks/insights/users.json",key:"demo:users",normalize:!1}},individualHeatmap:function(){return{url:"/mocks/insights/individual-heatmap.json",key:"demo:individual:heatmap",normalize:!1}},aggregateHeatmap:function(){return{url:"/mocks/insights/aggregate-heatmap.json",key:"demo:aggregate:heatmap",normalize:!1}}}},91286:(e,t,n)=>{n.d(t,{v:()=>s});var r=n(32735),i=n(94644);function a(e){return e.map((function(e){return e.statusCode})).join(":")}function s(e,t,n){var s=Array.isArray(e)?e:[e];(0,r.useEffect)((function(){s.forEach((function(e){(0,i.r)(e.statusCode,t,n)}))}),[a(s),t,n])}},62875:(e,t,n)=>{function r(e,t,n){var r="".concat(e,":").concat(t.start,":").concat(t.end),i=Array.isArray(t.userId)?t.userId.sort().join(":"):t.userId,a=Array.isArray(t.groupId)?t.groupId.sort().join(":"):t.groupId;return i&&(r+=":".concat(i)),a&&(r+=":".concat(a)),n&&(r+=":".concat(n)),r}n.d(t,{H:()=>r})},55588:(e,t,n)=>{n.r(t),n.d(t,{InteractiveStudentResultsDemoView:()=>h});var r=n(32735),i=n(23481),a=n(20354),s=n(2948),o=n(5255),u=n(9193),l=n(26136),c=n(3218),d=n(9111),m=n(38143),v=n(39151),f=n(54405),b=n(26304),y=n(91286),g=n(93322);function p(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var k=i.T.encloseNamespace("shared.interactiveStudentResults");function h(e){var t,n,i,h,w,S=(h=(0,s.D)(m.g.ANONYMISE_USERS),w=1,function(e){if(Array.isArray(e))return e}(h)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,a,s,o=[],u=!0,l=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;u=!1}else for(;!(u=(r=a.call(n)).done)&&(o.push(r.value),o.length!==t);u=!0);}catch(e){l=!0,i=e}finally{try{if(!u&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(l)throw i}}return o}}(h,w)||function(e,t){if(e){if("string"==typeof e)return p(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?p(e,t):void 0}}(h,w)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0];(0,g.F)();var A=a.a.useBasicFetch(f.X.interactiveMetadata()),E=a.a.useBasicFetch(f.X.interactive()),I=a.a.useBasicFetch(f.X.interactiveResults()),C=a.a.useBasicFetch(v.L.config()),j=(0,o.Y)(e.shareId);(0,y.v)([A,I]),(0,b.b)(A);var R=(0,u.D)(null===(t=E.data)||void 0===t?void 0:t.id,null===(n=A.data)||void 0===n?void 0:n.id,e.closePopup),N=R.markedAnswers,M=R.addMarkedAnswers,O=R.submitMarkedAnswers,F=null===(i=I.data)||void 0===i?void 0:i.students.find((function(t){var n,r,i,a,s;return e.userId?(null===(r=null===(n=t.user)||void 0===n?void 0:n.id)||void 0===r?void 0:r.toString())===(null===(i=e.userId)||void 0===i?void 0:i.toString()):!!e.sessionId&&(null===(a=t.sessionId)||void 0===a?void 0:a.toString())===(null===(s=e.sessionId)||void 0===s?void 0:s.toString())})),D=F?k("heading",{studentName:(0,l.B2)((0,l.DV)(F,j),S)}):"",U=!!E.data&&!!I.data&&!!C.data;return r.createElement(d.G,{title:D,showLoadingSpinner:!U,closePopup:e.closePopup,size:"lg"},U&&r.createElement(c.R,{interactive:E.data,studentResults:F,markedAnswers:N,addMarkedAnswers:M,submitMarkedAnswers:O,imageCdnUrl:C.data.imageCdnUrl,selectedInteractionId:e.interactionId,onClickClose:e.closePopup,anonymiseUsers:S,reportsStyling:e.reportsStyling,isDemo:!0}))}}}]);
2
- //# sourceMappingURL=4377-f6e641f39a-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/4377-f6e641f39a-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/AnonymiseUserUtils.ts","file:///app/packages/libs/shared/src/apps/student-response-list/StudentResponseListFooter.tsx","file:///app/packages/libs/shared/src/apps/student-response-list/StudentResponseListHeader.tsx","file:///app/packages/libs/shared/src/apps/student-response-list/student-response-list.scss","file:///app/packages/libs/shared/src/apps/student-response-list/StudentResponseList.tsx","file:///app/packages/libs/shared/src/constants/ScoreThresholds.ts","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/flight-requests/InsightsDemoRequests.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/utils/AnalyticsRequestUtils.ts","file:///app/packages/projects/lite/src/apps/my-shares/views/demo/interactive-student-results/InteractiveStudentResultsDemoView.tsx"],"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 { animals, colors, Config as UniqueNamesConfig, uniqueNamesGenerator } from 'unique-names-generator';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnonSession, AnonSessions } from 'libs/shared/apps/analytics/hooks/UseAnonSessions';\nimport { UserOrAnonSession } from 'libs/shared/apps/analytics/interfaces/UserOrAnonSession';\nimport { StudentResults } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nconst namespace = 'shared.analyticsUtils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getUniqueNamesConfig(id: 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 = +`${id}${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: UserOrAnonSession, shouldAnonymise: boolean): string {\n if (!user)\n return '';\n\n if (!shouldAnonymise)\n return 'sessionId' in user ? user.sessionName : UserHelper.getFullName(user);\n\n return uniqueNamesGenerator(getUniqueNamesConfig('sessionId' in user ? user.sessionName : user.id));\n}\n\nexport function getAnonSession(sessionId: string, anonSessions: AnonSessions): AnonSession {\n const fallback = {\n sessionId: sessionId,\n sessionName: getPhrase('anonymousUser')\n };\n\n if (!sessionId || !anonSessions)\n return fallback;\n\n const anonSession = anonSessions[sessionId];\n\n if (anonSession)\n return anonSession;\n\n return fallback;\n}\n\nexport function getUserOrAnonSession(result: StudentResults, anonSessions: AnonSessions): UserOrAnonSession {\n if (result.user)\n return result.user;\n\n return getAnonSession(result.sessionId, anonSessions);\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { MarkedAnswerHash } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { Interaction } from 'libs/shared/interfaces';\n\nconst namespace = 'interactives.studentResponseList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface StudentResponseListFooterProps {\n interactionsToMark: Interaction[];\n markedAnswers: MarkedAnswerHash;\n onClickSubmit: () => void;\n onClickClose: () => void;\n showSubmitButtonSpinner: boolean;\n isDemo?: boolean;\n}\n\nexport function StudentResponseListFooter(props: StudentResponseListFooterProps): JSX.Element {\n const numMarkedAnswers = Object.keys(props.markedAnswers).length;\n\n return (\n <div className='d-flex justify-content-end pt-3'>\n <div>\n {!props.showSubmitButtonSpinner &&\n <button className='btn btn-link' onClick={props.onClickClose}>\n {getPhrase('close')}\n </button>\n }\n {!!props.interactionsToMark.length && (\n <>\n {props.isDemo ? (\n <Tooltip\n id='submitAnswers'\n title={getPhrase('demoOnly')}\n spanHack\n spanHackClassName='d-inline-flex'\n >\n <button\n className='btn btn-outline-dark pointer-events-none'\n disabled={!numMarkedAnswers}\n >\n {getPhrase('submitAnswers')}\n </button>\n </Tooltip>\n ) : (\n <SpinnerButton\n variant='outline-dark'\n onClick={props.onClickSubmit}\n disabled={!numMarkedAnswers}\n showSpinner={props.showSubmitButtonSpinner}\n >\n {getPhrase('submitAnswers')}\n </SpinnerButton>\n )}\n </>\n )}\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { MarkedAnswerHash } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { ResultsSummary } from 'libs/shared/apps/analytics/interfaces/ResultsSummary';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { Interaction } from 'libs/shared/interfaces';\n\nconst namespace = 'interactives.studentResponseList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface StudentResponseListHeaderProps {\n summary: ResultsSummary;\n interactionsToMark: Interaction[];\n markedAnswers: MarkedAnswerHash;\n onClickSubmit: () => void;\n showSubmitButtonSpinner: boolean;\n isDemo?: boolean;\n}\n\nexport function StudentResponseListHeader(props: StudentResponseListHeaderProps): JSX.Element {\n const numMarkedAnswers = Object.keys(props.markedAnswers).length;\n\n return (\n <div className='d-flex justify-content-between pb-3'>\n <div className='d-flex'>\n {!!props.summary.unanswered &&\n <div className='bg-light rounded p-2 me-2'>\n <strong className='me-2'>{getPhrase('unanswered')}</strong>\n {props.summary.unanswered}\n </div>\n }\n <div className='bg-light rounded p-2 me-2'>\n <strong className='me-2'>{getPhrase('score')}</strong>\n {props.summary.awaitingMarking\n ? <em>{getPhrase('pending')}</em>\n : `${Math.round(props.summary.percentCorrect * 100)}%`\n }\n </div>\n </div>\n {!!props.interactionsToMark.length && (\n <>\n {props.isDemo ? (\n <Tooltip id='submitAnswers' title={getPhrase('demoOnly')} spanHack>\n <button\n className='btn btn-outline-dark pointer-events-none'\n disabled={!numMarkedAnswers}\n >\n {getPhrase('submitAnswers')}\n </button>\n </Tooltip>\n ) : (\n <SpinnerButton\n variant='outline-dark'\n onClick={props.onClickSubmit}\n disabled={!numMarkedAnswers}\n showSpinner={props.showSubmitButtonSpinner}\n >\n {getPhrase('submitAnswers')}\n </SpinnerButton>\n )}\n </>\n )}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"awaitingMarking\":\"MvGb5\"};","import React from 'react';\n\nimport { InteractionResponseItem } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/InteractionResponseItem';\nimport { AnonSessions } from 'libs/shared/apps/analytics/hooks/UseAnonSessions';\nimport { MarkedAnswerHash } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { anonymiseUserName, getUserOrAnonSession } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { getMarkedStatus, getStudentResultsSummary } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { InteractionResponse } from 'libs/shared/components/interaction-response/InteractionResponse';\nimport { InteractionLabel } from 'libs/shared/components/interactive-questions/InteractionLabel';\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, Interactive, StudentAnswer, StudentResults } from 'libs/shared/interfaces';\nimport { InteractiveCorrectnessHelper } from 'libs/shared/utils/InteractiveCorrectnessHelper';\nimport { getInteractions, getStudentResult } from 'libs/shared/utils/InteractiveHelper';\n\nimport { StudentResponseListFooter } from './StudentResponseListFooter';\nimport { StudentResponseListHeader } from './StudentResponseListHeader';\n\nimport styles from './student-response-list.scss';\n\nfunction getInteractionsToMark(\n interactions: Interaction[],\n studentResults: StudentResults\n): Interaction[] {\n return interactions.filter(i => {\n return InteractiveCorrectnessHelper.isInteractionCorrect(\n i,\n getStudentResult(studentResults)\n ) === InteractionCorrectness.AwaitingMarking;\n });\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nfunction useScrollSelectedInteractionIntoView(): React.MutableRefObject<HTMLLIElement> {\n const ref = React.useRef<HTMLLIElement>(null);\n const [ scrolled, setScrolled ] = React.useState(false);\n\n // Only scroll once\n React.useEffect(() => {\n if (!ref.current || scrolled)\n return;\n\n setScrolled(true);\n requestAnimationFrame(() => ref.current.scrollIntoView({ behavior: 'smooth', block: 'center' }));\n }, [ ref.current, scrolled ]);\n\n return ref;\n}\n\ninterface StudentResponseListProps {\n interactive: Interactive;\n markedAnswers: MarkedAnswerHash;\n studentResults: StudentResults;\n addMarkedAnswers: (answer: StudentAnswer[], status: InteractiveAnswerStatus) => void;\n submitMarkedAnswers: () => void;\n onClickClose: () => void;\n imageCdnUrl: string;\n selectedInteractionId?: string;\n anonymiseUsers: boolean;\n reportsStyling?: boolean;\n isDemo?: boolean;\n anonSessions?: AnonSessions;\n}\n\nexport function StudentResponseList(props: StudentResponseListProps): JSX.Element {\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n const selectedInteractionRef = useScrollSelectedInteractionIntoView();\n\n const summary = getStudentResultsSummary(props.interactive, props.studentResults);\n const interactions = getInteractions(props.interactive);\n const questionsToMark = getInteractionsToMark(interactions, props.studentResults);\n\n function onClickSubmit(): void {\n setShowSpinner(true);\n props.submitMarkedAnswers();\n }\n\n return (\n <>\n <StudentResponseListHeader\n summary={summary}\n interactionsToMark={questionsToMark}\n markedAnswers={props.markedAnswers}\n onClickSubmit={onClickSubmit}\n showSubmitButtonSpinner={showSpinner}\n isDemo={props.isDemo}\n />\n <ul className='list-unstyled'>\n {interactions.map((interaction, idx) => {\n const isSelected = interaction.id.toString() === props.selectedInteractionId?.toString();\n const markingRequired = questionsToMark.some(q => q.id === interaction.id);\n const anonymisedUserName = anonymiseUserName(\n getUserOrAnonSession(props.studentResults, props.anonSessions),\n props.anonymiseUsers\n );\n\n let className = 'p-2 mb-3 rounded';\n\n if (isSelected)\n className += ' border-2 border-info shadow';\n\n if (markingRequired)\n className += ` ${styles.awaitingMarking}`;\n else\n className += ' border';\n\n return (\n <li key={idx} className={className} ref={isSelected ? selectedInteractionRef : null}>\n <div className='d-flex mb-2'>\n <InteractionLabel\n interaction={interaction}\n iconClassName='flex-shrink-0'\n />\n </div>\n {props.reportsStyling ? (\n <InteractionResponse\n interaction={interaction}\n studentResults={props.studentResults}\n markedStatus={getMarkedStatus(interaction.id, props.studentResults, props.markedAnswers)}\n markInteraction={props.addMarkedAnswers}\n imageCdnUrl={props.imageCdnUrl}\n anonymisedUserName={anonymisedUserName}\n className='bg-light ps-2'\n showFeedback\n reportsStyling\n responseComponentClass='mx-n2'\n />\n ) : (\n <InteractionResponseItem\n interaction={interaction}\n studentResults={props.studentResults}\n markedStatus={getMarkedStatus(interaction.id, props.studentResults, props.markedAnswers)}\n markInteraction={props.addMarkedAnswers}\n imageCdnUrl={props.imageCdnUrl}\n anonymisedUserName={anonymisedUserName}\n showFeedback\n />\n )}\n </li>\n );\n })}\n </ul>\n <StudentResponseListFooter\n interactionsToMark={questionsToMark}\n markedAnswers={props.markedAnswers}\n onClickSubmit={onClickSubmit}\n onClickClose={props.onClickClose}\n showSubmitButtonSpinner={showSpinner}\n isDemo={props.isDemo}\n />\n </>\n );\n}","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};","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n internalServerError?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError,\n internalServerError: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.InternalServer) {\n if (!ignoreMap.internalServerError)\n Core.ErrorHelper.throw(new UnspecifiedError());\n return;\n }\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { Flight } from 'libs/common/react/index';\n\nexport const InsightsDemoRequests = {\n interactive(): Flight.Request {\n return {\n url: `/mocks/insights/interactive.json`,\n key: `demo:interactive`,\n normalize: false\n };\n },\n\n interactiveMetadata(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-metadata.json`,\n key: `demo:interactive:metadata`,\n normalize: false\n };\n },\n\n interactiveResults(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-results.json`,\n key: `demo:interactive:results`,\n normalize: false\n };\n },\n\n videoViews(): Flight.Request {\n return {\n url: `/mocks/insights/video-views.json`,\n key: `demo:video:views`,\n normalize: false\n };\n },\n\n users(): Flight.Request {\n return {\n url: `/mocks/insights/users.json`,\n key: `demo:users`,\n normalize: false\n };\n },\n\n individualHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/individual-heatmap.json`,\n key: `demo:individual:heatmap`,\n normalize: false\n };\n },\n\n aggregateHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/aggregate-heatmap.json`,\n key: `demo:aggregate:heatmap`,\n normalize: false\n };\n }\n};","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import { 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';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { useAnonSessions } from 'libs/shared/apps/analytics/hooks/UseAnonSessions';\nimport { useMarkAnswers } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { anonymiseUserName, getUserOrAnonSession } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { StudentResponseList } from 'libs/shared/apps/student-response-list/StudentResponseList';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InsightsDemoRequests } from 'libs/shared/flight-requests/InsightsDemoRequests';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { Config, Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.interactiveStudentResults';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractiveStudentResultsViewProps extends PopupViewProps {\n userId: string;\n interactiveId: string;\n interactionId?: string;\n reportsStyling?: boolean;\n sessionId?: string;\n shareId?: string;\n}\n\nexport function InteractiveStudentResultsDemoView(props: InteractiveStudentResultsViewProps): JSX.Element {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InsightsDemoRequests.interactiveMetadata()\n );\n const interactive = Flight.useBasicFetch<Interactive>(InsightsDemoRequests.interactive());\n\n const results = Flight.useBasicFetch<InteractiveResultSet>(InsightsDemoRequests.interactiveResults());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const anonSessions = useAnonSessions(props.shareId);\n\n useHandleObjectError([ interactiveMetadata, results ]);\n useCannotConsumeError(interactiveMetadata);\n\n const { markedAnswers, addMarkedAnswers, submitMarkedAnswers } = useMarkAnswers(\n interactive.data?.id,\n interactiveMetadata.data?.id,\n props.closePopup\n );\n\n const studentResults = results.data?.students.find(s => {\n if (props.userId)\n return s.user?.id?.toString() === props.userId?.toString();\n\n if (props.sessionId)\n return s.sessionId?.toString() === props.sessionId?.toString();\n\n return false;\n });\n\n const popupTitle = studentResults\n ? getPhrase('heading', { studentName: anonymiseUserName(getUserOrAnonSession(studentResults, anonSessions), anonymiseUsers) })\n : '';\n const dataLoaded = !!interactive.data && !!results.data && !!config.data;\n\n return (\n <Popup\n title={popupTitle}\n showLoadingSpinner={!dataLoaded}\n closePopup={props.closePopup}\n size='lg'\n >\n {dataLoaded &&\n <StudentResponseList\n interactive={interactive.data}\n studentResults={studentResults}\n markedAnswers={markedAnswers}\n addMarkedAnswers={addMarkedAnswers}\n submitMarkedAnswers={submitMarkedAnswers}\n imageCdnUrl={config.data.imageCdnUrl}\n selectedInteractionId={props.interactionId}\n onClickClose={props.closePopup}\n anonymiseUsers={anonymiseUsers}\n reportsStyling={props.reportsStyling}\n isDemo\n />\n }\n </Popup>\n );\n}"],"names":["useAnonSessions","shareId","anonSessions","data","length","reduce","prev","current","sessionId","getPhrase","anonymiseUserName","user","shouldAnonymise","id","sessionName","seed","Math","floor","Date","getMinutes","dictionaries","separator","style","getAnonSession","fallback","getUserOrAnonSession","result","LanguageService","StudentResponseListFooter","props","numMarkedAnswers","Object","keys","markedAnswers","className","showSubmitButtonSpinner","onClick","onClickClose","interactionsToMark","isDemo","Tooltip","title","spanHack","spanHackClassName","disabled","SpinnerButton","variant","onClickSubmit","showSpinner","StudentResponseListHeader","summary","unanswered","awaitingMarking","round","percentCorrect","StudentResponseList","ref","scrolled","setScrolled","setShowSpinner","selectedInteractionRef","requestAnimationFrame","scrollIntoView","behavior","block","interactive","studentResults","interactions","questionsToMark","filter","i","InteractiveCorrectnessHelper","InteractionCorrectness","getInteractionsToMark","submitMarkedAnswers","map","interaction","idx","isSelected","toString","selectedInteractionId","markingRequired","some","q","anonymisedUserName","anonymiseUsers","key","InteractionLabel","iconClassName","reportsStyling","InteractionResponse","markedStatus","markInteraction","addMarkedAnswers","imageCdnUrl","showFeedback","responseComponentClass","InteractionResponseItem","ScoreThresholdDefaults","HIGH","MODERATE","ScoreThresholdInsights","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","internalServerError","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","InsightsDemoRequests","url","normalize","interactiveMetadata","interactiveResults","videoViews","users","individualHeatmap","aggregateHeatmap","generateCacheKey","flightObjs","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","forEach","getAnalyticsRequestKey","baseKey","sharerId","start","end","userIdKey","userId","sort","groupIdKey","groupId","InteractiveStudentResultsDemoView","results","config","closePopup","students","find","s","popupTitle","studentName","dataLoaded","showLoadingSpinner","size","interactionId"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- (self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[52],{5255:(e,t,n)=>{"use strict";n.d(t,{Y:()=>o});var r=n(20354),a=n(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,n=r.a.useBasicFetch(e&&a.o.getAnonSessions(e));return(null===(t=n.data)||void 0===t?void 0:t.length)?n.data.reduce((function(e,t){return Object.assign(Object.assign({},e),(n={},r=t.sessionId,a=t,(r=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+""}(r))in n?Object.defineProperty(n,r,{value:a,enumerable:!0,configurable:!0,writable:!0}):n[r]=a,n));var n,r,a}),{}):{}}},4606:(e,t,n)=>{"use strict";n.d(t,{U:()=>o});var r=n(20354),a=n(75896),i=n(31949);function o(e){var t=a.m.chunk(null!=e?e:[],25),n=r.a.useBasicFetchAll(t.map((function(e){return i.N.getById(e)})));return{users:a.m.flatten(n.data),isLoading:!n.hasCompleted,usersResponse:n}}},9806:(e,t,n)=>{"use strict";n.d(t,{k:()=>O});var r=n(32735),a=n(65858),i=n(64249),o=n(15611),c=n(7432),l=n(11834),s=n(83345),u=n(56754),d=n(86348),p=n(7733),m=n(54610),v=n(4594),f=n(68626),y=n(9085),b=n(67453),g=n(31908);const h={thumbnailFallbackSvg:"D4JFs",posterFallbackSvg:"bjUWl",coverFallbackSvg:"kdLpt",thumbnailContainer:"d3CKN",insightsMask:"KM76U",requireMarking:"peLH7",badge:"mVu0E",bar:"zO3MS",a:"K1jW5",expandBar:"YITJl",b:"tCpLF",c:"lC0cq"};var w="shared.sharedObjectImage",E="rounded overflow-hidden";function k(){return r.createElement("div",{className:"d-flex pointer-events-none position-absolute bottom-0 start-0 h-100 w-100 z-1 justify-content-center align-items-center"},r.createElement("div",{className:"position-absolute bg-dark bg-gradient opacity-50 w-100 h-100 z-0 rounded-3"}),r.createElement("div",{className:"d-flex align-items-end gap-2 h-50 z-1"},r.createElement("div",{className:"d-flex align-items-end h-50"},r.createElement("div",{className:"".concat(h.bar," ").concat(h.a," rounded shadow")})),r.createElement("div",{className:"d-flex align-items-end h-75"},r.createElement("div",{className:"".concat(h.bar," ").concat(h.b," rounded shadow")})),r.createElement("div",{className:"d-flex align-items-end h-100"},r.createElement("div",{className:"".concat(h.bar," ").concat(h.c," rounded shadow")}))))}function O(e){var t=r.useCallback((function(t){var n;t&&e.fixedHeight&&(t.style.width="".concat(t.offsetHeight*(n=e.object,g.M.isVideoType(n)?16/9:n.typeId===v.E.Playlist?1:n.typeId===v.E.Series?9/16:void 0),"px"))}),[]),n=g.M.isVideoType(e.object),O=function(e){var t=b.j.getDisplayImageFromObject(e);if(g.M.isVideoType(e))return{image:t,imageType:m.__.Thumbnails,imageClassName:E,imageFallbackComponent:r.createElement(l.oy,{type:l.mS.Video})};switch(e.typeId){case v.E.Series:return{image:t,imageType:m.__.TallPosters,imageClassName:E,imageFallbackComponent:r.createElement(l.oy,{type:l.mS.Series,svgContainerClassName:h.posterFallbackSvg})};case v.E.Playlist:return{image:t,imageType:m.__.Covers,imageClassName:(null==t?void 0:t.url)?E:"".concat(E," ").concat((0,y.x)(e.name,p.o)),imageFallbackComponent:r.createElement(l.oy,{type:l.mS.Playlist,svgContainerClassName:(null==t?void 0:t.url)?h.coverFallbackSvg:"d-none",extraClasses:!(null==t?void 0:t.url)&&"bg-transparent"})}}}(e.object),S=O.image,j=O.imageType,C=O.imageClassName,x=O.imageFallbackComponent,I=e.showVideoMetadata?{}:{hideDuration:!0,hideMask:!0,hideRating:!0,hideVideoTypeBadge:!0};return r.createElement("div",{className:"d-flex align-items-center justify-content-center w-100 h-100"},r.createElement("div",{ref:t,className:e.fixedHeight?"h-100":"w-100"},n&&r.createElement("div",{className:"".concat(h.thumbnailContainer," position-relative")},e.showInsightsMask&&r.createElement(k,null),r.createElement(o.F,{appLink:e.appLink},r.createElement(d.u,Object.assign({video:e.object,size:e.thumbnailSize,imageOptions:e.imageOptions,textPosition:f.z.Independent,type:"cosmetic"},I))),!!e.requireMarking&&r.createElement("div",{className:"".concat(e.showInsightsMask&&h.requireMarking," position-absolute bottom-0 end-0 z-1 m-2")},r.createElement("div",{className:"".concat(h.badge," d-flex align-items-center bg-light-ultramarine text-ultramarine fw-semibold rounded-pill w-fit mt-1 px-2")},r.createElement(s.x,{namespace:w,phrase:"requireMarking",options:{smartCount:e.requireMarking}})))),!n&&r.createElement(r.Fragment,null,"videos"in e.object?r.createElement(u.I,{collection:e.object,imageOptions:e.imageOptions,appLink:e.appLink,analyticsData:{id:e.object.id,name:e.object.name},analyticsOptions:{entity:i.I.getAnalyticsEntity(e.object.type),actionType:a.Vw.Click,location:e.locationContext},showMask:e.showCollectionMask,showVideoCount:e.showVideoCount}):r.createElement(c.Z,{data:null==S?void 0:S.url,imageType:j,imageOptions:e.imageOptions,appLink:e.appLink,className:C,analyticsData:{id:e.object.id,name:e.object.name},analyticsOptions:{entity:i.I.getAnalyticsEntity(e.object.type),actionType:a.Vw.Click,location:e.locationContext}},x))))}O.defaultProps={imageOptions:{size:m.h2.Small}}},56754:(e,t,n)=>{"use strict";n.d(t,{I:()=>w});var r=n(32735),a=n(75896),i=n(65858),o=n(15611),c=n(83914),l=n(83345);const s={thumbnailTitle:"OsWjL"};function u(e){return r.createElement("h3",{title:e.title,className:"h6"},e.title)}function d(e){return e.appLink?r.createElement(o.F,{appLink:e.appLink,className:"".concat(s.thumbnailTitle)},r.createElement(u,Object.assign({},e))):r.createElement(u,Object.assign({},e))}var p=n(86348),m=n(62335),v=n(4594),f=n(68626),y=n(45778),b=n(35223);const g={badge:"M4zat",mask:"r0Ztg",thumbnailContainer:"uD9dz"};var h="shared.collectionThumbnail";function w(e){var t,n,s,u,w=function(){var t,n=null===(t=e.collection)||void 0===t?void 0:t.videos;if(n){if(!n.count&&e.collection.typeId===v.E.Playlist){var r=e.collection;r.clips.count&&(n=r.clips),r.interactives.count&&(n=r.interactives)}return a.m.first(n.data)}}(),E=function(){var t,n,r=0;if(e.collection.videos&&e.collection.videos.count&&(r+=e.collection.videos.count),e.collection.typeId===v.E.Playlist){var a=e.collection;(null===(t=a.interactives)||void 0===t?void 0:t.count)&&(r+=a.interactives.count),(null===(n=a.clips)||void 0===n?void 0:n.count)&&(r+=a.clips.count)}return r}(),k=(null===(t=e.title)||void 0===t?void 0:t.length)||(null===(n=e.subText)||void 0===n?void 0:n.length),O=Object.assign({id:e.collection.id.toString(),name:e.collection.name},e.analyticsData),S=Object.assign({actionType:i.Vw.Click,entity:(u=e.collection,y.G.isType(u,v.E.Playlist)?i.py.Playlist:y.G.isType(u,v.E.Series)?i.py.Series:void 0)},e.analyticsOptions);return r.createElement("div",null,r.createElement("div",{className:"position-relative ".concat(g.thumbnailContainer," z-1")},r.createElement(o.F,{appLink:e.appLink,analyticsData:O,analyticsOptions:S,preventFocus:!0},e.showMask&&r.createElement("div",{className:"".concat(g.mask," position-absolute w-100 h-100 rounded-3 bg-dark bg-gradient z-1 bg-opacity-50 pointer-events-none")},r.createElement("div",{className:"".concat(g.badge," d-flex align-items-center w-fit flex-grow-0 bg-dark rounded-pill ps-1 m-2")},r.createElement(c.x,{svgName:b.vn.Play,className:"svg-container text-white"}),r.createElement("p",{className:"d-inline fw-medium text-white mb-0"},(null===(s=e.hoverText)||void 0===s?void 0:s.length)?r.createElement("span",null,e.hoverText):r.createElement(l.x,{namespace:h,phrase:"playAll"})))),w&&r.createElement(p.u,{video:w,imageOptions:e.imageOptions,textPosition:f.z.Independent,type:"cosmetic",hideMask:!0,hideRating:!0,hideDuration:!0,hideVideoTypeBadge:!0}),!w&&r.createElement("div",{className:"ratio ratio-16x9 bg-light rounded-3"},r.createElement("div",{className:"d-flex justify-content-center align-items-center"},r.createElement(c.x,{svgName:b.vn.Play,className:"w-33 opacity-25 text-gray-400"}))),e.showVideoCount&&r.createElement("div",{className:"".concat(g.badge," d-flex align-items-center w-fit bg-dark bg-opacity-75 rounded-pill position-absolute bottom-0 end-0 ps-1 m-2")},r.createElement(c.x,{svgName:b.vn.Series,className:"svg-container text-white me-1"}),r.createElement("p",{className:"d-inline fw-semibold text-white mb-0"},r.createElement(l.x,{namespace:h,phrase:"videos",options:{count:E,smartCount:E}}))))),k&&r.createElement("div",{className:"mt-2 d-flex flex-column"},e.subText&&r.createElement(m.m,{title:e.subText,appLink:e.subTextAppLink},e.subText),e.title&&r.createElement(d,{title:e.collection.name,appLink:e.titleAppLink})))}},94644:(e,t,n)=>{"use strict";n.d(t,{r:()=>u});var r=n(50242),a=n(81886),i=n(67058),o=n(14553),c=n(49267),l=n(49075),s={notFound:i.d,forbidden:{rating:o.q,yearLevel:o.q,region:c.a,privacy:o.q},badRequest:l._,internalServerError:l._};function u(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var i;i="number"==typeof e?e:e.status;var o=Object.assign(Object.assign({},s),t);i&&a.Q.Ry.isStatusCodeError(i)&&(i!==r.o.InternalServer?i!==r.o.NotFound?i!==r.o.Forbidden?n.badRequest||a.Q.Ry.throw(new o.badRequest):n.forbidden||a.Q.Ry.throw(new o.forbidden.privacy):n.notFound||a.Q.Ry.throw(new o.notFound):n.internalServerError||a.Q.Ry.throw(new l._))}}},17913:(e,t,n)=>{"use strict";n.d(t,{u:()=>o});var r=n(97395),a=n(110),i=n(62875),o={individualEngagement:function(e,t,n,a){var o=Object.assign({objectId:e},t);return n&&(o.sharerId=n),a&&(o.includeAnonViews=!0),{url:r._.urlBuilder("{gateway}/v1/analytics/heat-map",o),key:(0,i.H)("engagement:".concat(e,":").concat(a),t,n),formatData:function(e){var t;return Object.assign(Object.assign({},e),{data:null===(t=e.data)||void 0===t?void 0:t.map((function(e){var t;return Object.assign(Object.assign({},e),{heatMap:null!==(t=e.heatMap)&&void 0!==t?t:[]})}))})},normalize:!1}},aggregateEngagement:function(e,t,n,a){var o=Object.assign({objectId:e},t);return n&&(o.sharerId=n),a&&(o.includeAnonViews=!0),{url:r._.urlBuilder("{gateway}/v1/analytics/heat-map/aggregations",o),key:(0,i.H)("aggregate:engagement:".concat(e,":").concat(a),t,n),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,n,o){var c=Object.assign(Object.assign({},e),{timeOffset:a.O.getTimezoneOffset()});return t&&(c.objectId=t),n&&(c.sharerId=n),o&&(c.includeAnonViews=!0),{url:r._.urlBuilder("{gateway}/v1/analytics/video-views",c),key:(0,i.H)("video:views:".concat(t,":").concat(o),e,n),normalize:!1}}}},91286:(e,t,n)=>{"use strict";n.d(t,{v:()=>o});var r=n(32735),a=n(94644);function i(e){return e.map((function(e){return e.statusCode})).join(":")}function o(e,t,n){var o=Array.isArray(e)?e:[e];(0,r.useEffect)((function(){o.forEach((function(e){(0,a.r)(e.statusCode,t,n)}))}),[i(o),t,n])}},95627:(e,t,n)=>{"use strict";n.r(t),n.d(t,{ShareOptionsView:()=>ee});var r=n(32735),a=n(91967);function i(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 o=5e3,c=n(2948),l=n(20354),s=n(50938),u=n(5255),d=n(4606),p=n(26025),m=n(74901),v=n(40003),f=n(49475),y=n(91693),b=n(4594),g=n(16714),h=n(39151),w=n(5112),E=n(60011),k=n(31949),O=n(17913),S=n(3010),j=n(91286),C=n(93322),x=n(22902),I=n(79612),N=n(37802),P=n(35223),T=n(31908),L=n(86702),A=n(88630),R=n(59087),M=n(39202),D=n(65858),F=n(9806),V=n(83914),_=n(54610),z=n(14070),B=n(97291),U=n(22490),G=n(4315);function W(e){var t,n,a,i,o,c,l,s,u,d,p=null!==(a=null===(n=null===(t=e.shareLink)||void 0===t?void 0:t.link)||void 0===n?void 0:n.shortenedUrl)&&void 0!==a?a:"",m=U.W.getAppLink(e.sharedObject),v=M.C$.getHref(m);return r.createElement("div",null,r.createElement("h3",null,"Share information"),r.createElement("div",{className:"mb-4 bg-light-blue p-3 rounded-3"},r.createElement("div",{className:"d-flex gap-3"},e.sharedObject&&r.createElement("div",{style:{minWidth:220},className:"d-flex flex-column"},r.createElement(F.k,{object:e.sharedObject,showVideoMetadata:!0,locationContext:D.LZ.Insights,imageOptions:{size:_.h2.Medium},showCollectionMask:!0,showVideoCount:!0,appLink:m})),r.createElement("div",{className:"d-flex flex-column justify-content-between"},r.createElement("div",{className:"d-flex align-items-center"},r.createElement("a",{href:v,className:"cursor-pointer h6 mb-0 d-inline me-2"},null===(i=e.sharedObject)||void 0===i?void 0:i.name),r.createElement(y.h,{svgName:P.vn.NewWindow,appLink:m,svgSize:V.S.Small,className:"d-inline-block",customSize:!0})),e.shareLink&&r.createElement(G.e,{shareLink:e.shareLink,classroomName:null===(o=e.classroom)||void 0===o?void 0:o.name}),r.createElement("div",{className:"d-flex gap-2"},r.createElement(y.h,{svgName:P.vn.Share,className:"btn btn-outline-dark",appLink:{application:B.O.SHARE_V2,action:z.e.ShareV2.LINK,args:[null===(c=e.sharedObject)||void 0===c?void 0:c.id],params:{entityType:null===(l=e.sharedObject)||void 0===l?void 0:l.type,shareId:null===(s=e.shareLink)||void 0===s?void 0:s.shareId}}},"Share a link or embed"),r.createElement(y.h,{svgName:P.vn.Download,className:"btn btn-outline-dark",appLink:{application:B.O.INSIGHTS,action:z.e.Insights.QR_CODE,params:{value:p}}},"QR code"))),r.createElement("div",{className:"flex-grow-1"}),e.pinCode&&r.createElement("div",{className:"border p-3 rounded-3 d-flex flex-column align-items-center bg-white"},r.createElement("p",null,"Go to ",r.createElement("a",{href:"https://staging.clickview.net/pin",target:"_blank",className:"text-info"},"staging.clickview.net/pin")," and enter PIN:"),r.createElement("div",{className:"d-flex align-items-center"},r.createElement("h4",{className:"mb-0 pb-0 me-1"},null===(u=e.pinCode)||void 0===u?void 0:u.code),r.createElement(R.CopyToClipboard,{text:null===(d=e.pinCode)||void 0===d?void 0:d.code},r.createElement(y.h,{svgName:P.vn.Copy,className:"btn"})),r.createElement(y.h,{svgName:P.vn.NewWindow,onClick:function(){console.log("Expanding code..")},className:"btn"}))))))}var q=n(53936),H=n(10447),J=n(93975),Q=n(91574),K=n(81969);function $(e){return $="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},$(e)}function Y(e){return function(e){if(Array.isArray(e))return X(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||Z(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 Z(e,t){if(e){if("string"==typeof e)return X(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)?X(e,t):void 0}}function X(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function ee(e){var t,n,R,M,D,F,V,_,z,B,U,G,X,ee,te,ne,re,ae,ie=(re=(0,c.D)(L.y.ANONYMISE_USERS),ae=1,function(e){if(Array.isArray(e))return e}(re)||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=[],l=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){s=!0,a=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw a}}return c}}(re,ae)||Z(re,ae)||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],oe=l.a.useGetFetch(),ce=l.a.useBasicFetch(h.L.config()),le=l.a.useBasicFetch(e.shareId&&Q.o.getShareLink(e.shareId)),se=l.a.useBasicFetch(e.shareId&&Q.o.getPincodeByShareId(e.shareId)),ue=K.R.getClassroomId(le.data),de=l.a.useBasicFetch(ue&&A.F.getClassroom(ue)),pe=(0,N.r)(null),me=pe.hasShareFlowV2,ve=pe.publicInteractiveAttempts,fe=(0,x.T)().hasPermissions,ye=[b.E.Video,b.E.Clip,b.E.Interactive].includes(e.typeId)&&T.M.getVideoRequest(e.objectId,e.typeId),be=l.a.useBasicFetch(ye),ge=l.a.useBasicFetch(k.N.currentUser()),he=e.typeId===b.E.Series&&E.J.series(e.objectId),we=l.a.useBasicFetch(he),Ee=e.typeId===b.E.Playlist&&w.C.getPlaylist(e.objectId),ke=l.a.useBasicFetch(Ee),Oe=p.B.getAudienceAppLinkParams(),Se=p.B.getDateRangeAppLinkParams(),je=Object.assign(Object.assign(Object.assign({},Oe),Se),{shareId:e.shareId}),Ce=Object.assign(Object.assign({},(0,v.wO)((0,v.Hb)(),Se)),(0,m.K)(Oe)),xe=ge.data&&O.u.individualEngagement(e.objectId,Ce,null===(t=ge.data)||void 0===t?void 0:t.id,ve),Ie=l.a.useBasicFetch(xe);!function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o,n=function(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,o,c=[],l=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){s=!0,a=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw a}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return i(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)?i(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(r.useState(!1),2),c=n[0],l=n[1],s=r.useRef(null),u=function(){l((function(e){return!e})),s.current=window.setTimeout(u,t)};r.useEffect((function(){s.current=window.setTimeout(u,t)}),[]),r.useEffect((function(){a.q.isFunction(e)&&e()}),[c])}((function(){return oe(xe)}),5e3);var Ne=(null===(R=null===(n=Ie.data)||void 0===n?void 0:n.data)||void 0===R?void 0:R.map((function(e){return e.userId})).filter(Boolean))||[],Pe=(0,d.U)(Ne),Te=Pe.users,Le=Pe.isLoading,Ae=(0,u.Y)(e.shareId),Re=function(e,t,n){var r,a,i,o,c,s,u=l.a.useGetFetch(),d=(null===(a=null===(r=null==t?void 0:t.recipients)||void 0===r?void 0:r[0])||void 0===a?void 0:a.recipientTypeId)===b.E.Classroom&&t.recipients[0].recipientId,p=function(e){return d&&A.F.getClassroomStudents(d,e)},m=(0,S.i)(p,(function(e){return u(p(e))})),v=null!==(o=null===(i=null==n?void 0:n.data)||void 0===i?void 0:i.reduce((function(e,t){return Object.assign(Object.assign({},e),function(e,t,n){return(t=function(e){var t=function(e){if("object"!=$(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=$(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==$(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},t.userId,t))}),{}))&&void 0!==o?o:{},f=(null===(c=m.items)||void 0===c?void 0:c.length)?m.items.map((function(t){return v[t.id]?null:{customerId:null==e?void 0:e.customerId,engagementRate:0,heatMap:[],userId:t.id,videoDuration:500,viewCount:0,videoId:null,userIds:[],sessionId:null,sessionIds:[],user:t}})).filter((function(e){return!!e})):[];return[].concat(Y(null!==(s=null==n?void 0:n.data)&&void 0!==s?s:[]),Y(f))}(ge.data,le.data,Ie.data);(0,C.F)(),(0,I.M)({title:null!==(V=null!==(D=null===(M=be.data)||void 0===M?void 0:M.name)&&void 0!==D?D:null===(F=we.data)||void 0===F?void 0:F.name)&&void 0!==V?V:null===(_=ke.data)||void 0===_?void 0:_.name}),(0,j.v)([be,we,ke]);var Me=!(!Ie.data||Ne.length&&Le),De=!(null===(z=Ie.data)||void 0===z?void 0:z.data.length)||!Ne.length&&!Object.keys(Ae).length,Fe=!Me||De;return r.createElement("div",{className:"px-3"},r.createElement(q.j,{video:null!==(U=null!==(B=be.data)&&void 0!==B?B:we.data)&&void 0!==U?U:ke.data,dateRangeAppLinkParams:Se,tabs:e.typeId===b.E.Interactive?(0,H.kj)(e.objectId,"shareOptions",je,me):e.typeId===b.E.Clip?(0,H.$o)(e.objectId,"shareOptions",je,me):e.typeId===b.E.Video?(0,H.$6)(e.objectId,"shareOptions",je,me):e.typeId===b.E.Series?(0,H.lo)(e.objectId,"shareOptions",je):e.typeId===b.E.Playlist?(0,H.W_)(e.objectId,"shareOptions",je):void 0,hasAnalytics:fe(g.C.ViewCustomerAnalytics),analyticsWebUrl:null===(G=ce.data)||void 0===G?void 0:G.analyticsWebUrl,hasShareFlowV2:me,shareId:e.shareId}),r.createElement(W,{sharedObject:null!==(ee=null!==(X=be.data)&&void 0!==X?X:we.data)&&void 0!==ee?ee:ke.data,shareLink:le.data,pinCode:se.data,classroom:de.data}),r.createElement("div",{className:"d-flex align-items-center mt-5"},r.createElement("h3",{className:"p-0 m-0"},"Students who have viewed this video"),(null===(te=le.data)||void 0===te?void 0:te.type)===J.y.Classroom&&r.createElement(y.h,{svgName:P.vn.Plus,onClick:function(){return console.log("Add new student..")},className:"btn btn-outline-dark ms-auto"},"Add new student")),r.createElement("div",{className:"col-12 mt-2 mb-5"},r.createElement(s.z,{key:(0,f.u)(Object.assign(Object.assign({},Oe),Se)),engagement:Re,users:null!=Te?Te:[],imageCdnUrl:null===(ne=ce.data)||void 0===ne?void 0:ne.imageCdnUrl,anonymiseUsers:ie,border:!0,anonSessions:Ae,hideWhenEmpty:!1,theme:{header:Fe?"border-0":"border-bottom",table:Fe?"bg-white rounded px-0 rounded-bottom-0":"bg-white rounded px-0"}}),Fe&&r.createElement("div",{style:{minHeight:400},className:"border border-top-0 rounded-1 rounded-top-0 pt-5 pb-5 text-center"},r.createElement("h4",null,"Waiting for students to view..."))))}},4315:(e,t,n)=>{"use strict";n.d(t,{e:()=>p});var r=n(32735),a=n(12528),i=n(83914),o=n(4594),c=n(35223),l=n(42272),s=n(93975);function u(e){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u(e)}function d(e,t,n){return(t=function(e){var t=function(e){if("object"!=u(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=u(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==u(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function p(e){var t,n,c,u,d;return r.createElement("div",{className:"d-flex align-items-center"},r.createElement("div",{className:"d-flex align-items-center justify-content-center"},r.createElement("div",null,r.createElement(a.f,{svgName:m[e.shareLink.type],variant:v[e.shareLink.type],textVariant:"white",svgWrapperClassName:null!==(t=e.svgWrapperClassName)&&void 0!==t?t:"p-1",svgSize:null!==(n=e.svgSize)&&void 0!==n?n:i.S.Standard})),r.createElement("div",{className:"d-flex flex-column ms-2"},r.createElement("label",{className:"m-0"},(u=(c=e).shareLink,d=c.classroomName,u.type===s.y.Classroom&&d?d:f[u.type])),!e.hideSubtitle&&r.createElement("span",{className:"text-secondary"},function(e){var t,n,r,a,i=e.shareLink;if(i.type===s.y.Classroom){var c=null!==(n=null===(t=i.recipients)||void 0===t?void 0:t.filter((function(e){return e.recipientTypeId===o.E.ClassroomGroup})).length)&&void 0!==n?n:0,u=null!==(a=null===(r=i.recipients)||void 0===r?void 0:r.filter((function(e){return e.recipientTypeId===o.E.User})).length)&&void 0!==a?a:0;return c&&u?"".concat(c," ").concat(y(c,"group","groups"),", ").concat(u," ").concat(y(u,"student","students")," can view"):c?"".concat(c," ").concat(y(c,"group","groups")," can view"):u?"".concat(u," ").concat(y(u,"student","students")," can view"):"All students in classroom can view"}if(i.type===s.y.Open)return"Students watch using a PIN code";if(i.type===s.y.Link){if([l.e.JustMySchool,l.e.Protected].includes(i.privacy))return"Respect ratings and restrictions";if(i.privacy===l.e.JustMySchoolOverrideRestriction)return"Anyone in your school can view";if(i.privacy===l.e.ProtectedOverrideRestriction)return"Anyone signed into ClickView can view";if(i.privacy===l.e.Public)return"Anyone with a link can view";if(i.privacy===l.e.PinCode)return"Anyone with a PIN code can view"}return i.type===s.y.Live?"Live now":"Anyone signed into ClickView can view"}(e)))))}var m=d(d(d(d({},s.y.Open,c.vn.School),s.y.Link,c.vn.Link),s.y.Classroom,c.vn.Classrooms),s.y.Live,c.vn.Play),v=d(d(d(d({},s.y.Open,"blue"),s.y.Link,"black"),s.y.Classroom,"teal"),s.y.Live,"purple"),f=d(d(d(d({},s.y.Open,"Open classroom"),s.y.Link,"Link"),s.y.Classroom,"Classroom"),s.y.Live,"Live");function y(e,t,n){return 1===e?t:n}},42272:(e,t,n)=>{"use strict";var r;n.d(t,{e:()=>r}),function(e){e.Public="Public",e.PinCode="PinCode",e.PasswordProtected="PasswordProtected",e.ProtectedOverrideRestriction="ProtectedOverrideRestriction",e.JustMySchoolOverrideRestriction="JustMySchoolOverrideRestriction",e.Protected="Protected",e.JustMySchool="JustMySchool",e.Direct="Direct"}(r||(r={}))},93975:(e,t,n)=>{"use strict";var r;n.d(t,{y:()=>r}),function(e){e.Link="Link",e.Classroom="Classroom",e.Open="Open",e.Live="Live"}(r||(r={}))},91574:(e,t,n)=>{"use strict";n.d(t,{o:()=>o});var r=n(99940),a=n(97395),i={namespace:"share-v2"},o={createShareLink:function(e,t,n,a){return{url:"/api/share/v2/shares",key:"create:share-v2:link",type:r.k.POST,data:e,normalizeOptions:i,invalidationKeys:["share:link:object:".concat(e.objectId),"privacy:".concat(e.objectId),"sent:shares","get:share-v2:shares:object"],success:t,error:n,always:a}},getShareLink:function(e,t,n,a){return{url:"/api/share/v2/shares/".concat(e),key:"get:share-v2:link:".concat(e),type:r.k.GET,normalizeOptions:i,success:t,error:n,always:a}},getSharesByObjectId:function(e,t,n,a){return{url:"/api/share/v2/shares/objects/".concat(e),key:"get:share-v2:shares:object:".concat(e),type:r.k.GET,normalizeOptions:i,success:t,error:n,always:a}},getSentShares:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0,i=arguments.length>3?arguments[3]:void 0,o={scopeId:e.scopeId,limit:e.limit||25,offset:parseInt(e.cursor)||0},c=Object.values(o).join(":");return{url:a._.urlBuilder("/api/share/v2/shares/sent",o),key:"sent:shares-v2:".concat(c),formatData:function(e){return{data:e,count:e.length,pagination:{cursors:{next:o.offset+e.length}}}},type:r.k.GET,normalize:!1,success:t,error:n,always:i}},createPincode:function(e){return{url:"/api/share/v2/shares/".concat(e,"/pincode"),key:"create:share-v2:pincode",type:r.k.POST}},getPincode:function(e){return{url:"/api/share/v2/shares/pincode?code=".concat(e),key:"get:share-v2:pincode:".concat(e)}},getPincodeByShareId:function(e){return{url:"/api/share/v2/shares/".concat(e,"/pincode"),key:"get:share-v2:".concat(e,":pincode")}}}},81969:(e,t,n)=>{"use strict";n.d(t,{R:()=>v});var r=n(23481),a=n(110),i=n(4594),o=n(49080),c=n(26361),l=n(35223),s=n(31908),u=n(42272),d=n(93975);function p(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var m=r.T.encloseNamespace("share.shareLinkInfo"),v={getPrivateIconAndText:function(e){var t=e.entityTypeId,n=e.privacy,r=e.hasStudentExp,a=e.entity,o=e.yearGroups;if(t===i.E.Topic||t===i.E.Series)return{icon:l.vn.VisibleOn,text:m(r?"justMySchoolTeachers":"justMySchoolDescription")};if(!Array.isArray(n))switch(n){case u.e.Public:return{icon:l.vn.VisibleOn,text:m("publicDescription")};case u.e.ProtectedOverrideRestriction:return{icon:l.vn.VisibleOn,text:m("clickViewOnly")};case u.e.Protected:return{icon:l.vn.Lock,text:v.getRespectRatingText(a,o,r)};case u.e.JustMySchoolOverrideRestriction:return{icon:l.vn.Lock,text:m(r?"justMySchoolTeachers":"justMySchoolDescription")};case u.e.JustMySchool:return{icon:l.vn.Lock,text:v.getRespectRatingText(a,o,r)};case u.e.PinCode:case u.e.PasswordProtected:return{icon:l.vn.Lock,text:m("privateDescription")};default:return{}}},getIconAndText:function(e){var t=e.linkExpireDate,n=e.isPasswordProtected,r=e.status;if(!t&&!n)return v.getPrivateIconAndText(e);if(!t)return{icon:l.vn.Lock,text:m("password")};var i=a.O.isToday(t),c=a.O.diffBetween(t,new Date,"day");if(!n){var s=i?m("expiryToday"):m("expiry",{days:c});return r===o.F.Expired&&(s=m("expired")),{icon:l.vn.Timer,text:s}}var u=i?m("passwordExpiryToday"):m("passwordExpiry",{days:c});return r===o.F.Expired&&(u=m("passwordExpired")),{icon:l.vn.Lock,text:u}},getRespectRatingText:function(e,t,n){var r;if(!e||!t)return null;if(n)return m("justMySchoolTeachers");if(!s.M.isVideoType(e))return m("collectionRating");var a=c.l.getWeightedRestriction(null===(r=e._restrictions)||void 0===r?void 0:r.value);if(a&&!a.yearGroup)return m("onlyAdmins");var i,o,l,u=s.M.getRating(e),d=function(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return p(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?p(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,a=function(){};return{s:a,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,c=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){c=!0,i=e},f:function(){try{o||null==n.return||n.return()}finally{if(c)throw i}}}}(t);try{for(d.s();!(l=d.n()).done;){var v=l.value;(!i||v.value>i.value)&&(i=v),a&&v.value<=a.yearGroup||u&&v.rating.value<u.value||(!o||v.value<o.value)&&(o=v)}}catch(e){d.e(e)}finally{d.f()}return o?1===t.length?m("clickViewOnly"):o.value===i.value?m("maxYearGroup",{yearGroup:i.name}):m("yearGroupRange",{yearGroup:o.name}):m("onlyStaff")},getClassroomId:function(e){var t,n;if(!e)return"";if(e.type!==d.y.Classroom)return"";var r=null===(t=e.recipients)||void 0===t?void 0:t.find((function(e){return e.recipientTypeId===i.E.Classroom}));if(r)return r.recipientId.toString();var a=null===(n=e.recipients)||void 0===n?void 0:n.find((function(e){return e.scopeId}));return(null==a?void 0:a.scopeId.toString())||""}}},91969:(e,t,n)=>{"use strict";var r=n(47033),a={"text/plain":"Text","text/html":"Url",default:"Text"};e.exports=function(e,t){var n,i,o,c,l,s,u=!1;t||(t={}),n=t.debug||!1;try{if(o=r(),c=document.createRange(),l=document.getSelection(),(s=document.createElement("span")).textContent=e,s.ariaHidden="true",s.style.all="unset",s.style.position="fixed",s.style.top=0,s.style.clip="rect(0, 0, 0, 0)",s.style.whiteSpace="pre",s.style.webkitUserSelect="text",s.style.MozUserSelect="text",s.style.msUserSelect="text",s.style.userSelect="text",s.addEventListener("copy",(function(r){if(r.stopPropagation(),t.format)if(r.preventDefault(),void 0===r.clipboardData){n&&console.warn("unable to use e.clipboardData"),n&&console.warn("trying IE specific stuff"),window.clipboardData.clearData();var i=a[t.format]||a.default;window.clipboardData.setData(i,e)}else r.clipboardData.clearData(),r.clipboardData.setData(t.format,e);t.onCopy&&(r.preventDefault(),t.onCopy(r.clipboardData))})),document.body.appendChild(s),c.selectNodeContents(s),l.addRange(c),!document.execCommand("copy"))throw new Error("copy command was unsuccessful");u=!0}catch(r){n&&console.error("unable to copy using execCommand: ",r),n&&console.warn("trying IE specific stuff");try{window.clipboardData.setData(t.format||"text",e),t.onCopy&&t.onCopy(window.clipboardData),u=!0}catch(r){n&&console.error("unable to copy using clipboardData: ",r),n&&console.error("falling back to prompt"),i=function(e){var t=(/mac os x/i.test(navigator.userAgent)?"⌘":"Ctrl")+"+C";return e.replace(/#{\s*key\s*}/g,t)}("message"in t?t.message:"Copy to clipboard: #{key}, Enter"),window.prompt(i,e)}}finally{l&&("function"==typeof l.removeRange?l.removeRange(c):l.removeAllRanges()),s&&document.body.removeChild(s),o()}return u}},44818:(e,t,n)=>{"use strict";function r(e){return r="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},r(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.CopyToClipboard=void 0;var a=c(n(32735)),i=c(n(91969)),o=["text","onCopy","options","children"];function c(e){return e&&e.__esModule?e:{default:e}}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){v(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function u(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function d(e,t){return d=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},d(e,t)}function p(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function m(e){return m=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},m(e)}function v(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var f=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&d(e,t)}(y,e);var t,n,c,l,f=(c=y,l=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,t=m(c);if(l){var n=m(this).constructor;e=Reflect.construct(t,arguments,n)}else e=t.apply(this,arguments);return function(e,t){if(t&&("object"===r(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return p(e)}(this,e)});function y(){var e;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,y);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return v(p(e=f.call.apply(f,[this].concat(n))),"onClick",(function(t){var n=e.props,r=n.text,o=n.onCopy,c=n.children,l=n.options,s=a.default.Children.only(c),u=(0,i.default)(r,l);o&&o(r,u),s&&s.props&&"function"==typeof s.props.onClick&&s.props.onClick(t)})),e}return t=y,(n=[{key:"render",value:function(){var e=this.props,t=(e.text,e.onCopy,e.options,e.children),n=function(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}(e,o),r=a.default.Children.only(t);return a.default.cloneElement(r,s(s({},n),{},{onClick:this.onClick}))}}])&&u(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),y}(a.default.PureComponent);t.CopyToClipboard=f,v(f,"defaultProps",{onCopy:void 0,options:void 0})},59087:(e,t,n)=>{"use strict";var r=n(44818).CopyToClipboard;r.CopyToClipboard=r,e.exports=r},47033:e=>{e.exports=function(){var e=document.getSelection();if(!e.rangeCount)return function(){};for(var t=document.activeElement,n=[],r=0;r<e.rangeCount;r++)n.push(e.getRangeAt(r));switch(t.tagName.toUpperCase()){case"INPUT":case"TEXTAREA":t.blur();break;default:t=null}return e.removeAllRanges(),function(){"Caret"===e.type&&e.removeAllRanges(),e.rangeCount||n.forEach((function(t){e.addRange(t)})),t&&t.focus()}}}}]);
2
- //# sourceMappingURL=52-d91751eafb-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/52-d91751eafb-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/hooks/UseEngagementUsers.ts","file:///app/packages/libs/shared/src/apps/share/components/shared-object-image/shared-object-image.scss","file:///app/packages/libs/shared/src/apps/share/components/shared-object-image/SharedObjectImage.tsx","file:///app/packages/libs/shared/src/components/thumbnails/collection/title/collection-thumbnail-title.scss","file:///app/packages/libs/shared/src/components/thumbnails/collection/title/CollectionThumbnailTitle.tsx","file:///app/packages/libs/shared/src/components/thumbnails/collection/collection-thumbnail.scss","file:///app/packages/libs/shared/src/components/thumbnails/collection/CollectionThumbnail.tsx","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/UseHandleObjectError.ts","file:///app/packages/libs/common/src/react/hooks/UsePolling.ts","file:///app/packages/projects/lite/src/apps/insights/components/share-options/ShareOptions.tsx","file:///app/packages/projects/lite/src/apps/insights/views/share-options/ShareOptionsView.tsx","file:///app/packages/projects/lite/src/apps/share-v2/components/ShareAvatar.tsx","file:///app/packages/projects/lite/src/apps/share-v2/enums/SharePrivacy.ts","file:///app/packages/projects/lite/src/apps/share-v2/enums/ShareType.ts","file:///app/packages/projects/lite/src/apps/share-v2/flight-requests/ShareRequests.ts","file:///app/packages/projects/lite/src/apps/share-v2/utils/ShareLinkHelper.ts","file:///app/node_modules/copy-to-clipboard/index.js","file:///app/node_modules/react-copy-to-clipboard/lib/Component.js","file:///app/node_modules/react-copy-to-clipboard/lib/index.js","file:///app/node_modules/toggle-selection/index.js"],"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 { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { User } from 'libs/shared/interfaces';\n\nexport function useChunkedUsersResponse(usersIds: string[]) {\n const userIdChunks = ArrayHelper.chunk<string>(usersIds ?? [], 25);\n const usersResponse = Flight.useBasicFetchAll<User[]>(userIdChunks.map(chunk => UserRequests.getById(chunk)));\n const users = ArrayHelper.flatten<User>(usersResponse.data);\n return { users, isLoading: !usersResponse.hasCompleted, usersResponse };\n}","// extracted by mini-css-extract-plugin\nexport default {\"thumbnailFallbackSvg\":\"D4JFs\",\"posterFallbackSvg\":\"bjUWl\",\"coverFallbackSvg\":\"kdLpt\",\"thumbnailContainer\":\"d3CKN\",\"insightsMask\":\"KM76U\",\"requireMarking\":\"peLH7\",\"badge\":\"mVu0E\",\"bar\":\"zO3MS\",\"a\":\"K1jW5\",\"expandBar\":\"YITJl\",\"b\":\"tCpLF\",\"c\":\"lC0cq\"};","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CollectionThumbnail } from 'libs/shared/components/thumbnails/collection/CollectionThumbnail';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { BaseObject, Image, Playlist, Series } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper, ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './shared-object-image.scss';\n\nconst namespace = 'shared.sharedObjectImage';\n\nconst BASE_IMAGE_CLASS_NAME = 'rounded overflow-hidden';\n\ninterface ImageProps {\n image: Image;\n imageType: ImageType;\n imageClassName?: string;\n imageFallbackComponent: JSX.Element;\n}\n\nfunction getImageProps(object: BaseObject): ImageProps {\n const image = ImageHelper.getDisplayImageFromObject(object);\n\n if (VideoHelper.isVideoType(object))\n return {\n image,\n imageType: ImageType.Thumbnails,\n imageClassName: BASE_IMAGE_CLASS_NAME,\n imageFallbackComponent: <ImageFallback type={ImageFallbackType.Video} />\n };\n\n switch (object.typeId) {\n case MasterType.Series:\n return {\n image,\n imageType: ImageType.TallPosters,\n imageClassName: BASE_IMAGE_CLASS_NAME,\n imageFallbackComponent:\n <ImageFallback type={ImageFallbackType.Series} svgContainerClassName={styles.posterFallbackSvg} />\n };\n\n case MasterType.Playlist:\n return {\n image,\n imageType: ImageType.Covers,\n imageClassName: !image?.url\n ? `${BASE_IMAGE_CLASS_NAME} ${getBgColorClass(object.name, BG_COLOUR_CLASS_NAMES)}`\n : BASE_IMAGE_CLASS_NAME,\n imageFallbackComponent: (\n <ImageFallback\n type={ImageFallbackType.Playlist}\n svgContainerClassName={image?.url ? styles.coverFallbackSvg : 'd-none'}\n extraClasses={!image?.url && 'bg-transparent'}\n />\n )\n };\n }\n}\n\nfunction InsightsMask() {\n return (\n <div className={`d-flex pointer-events-none position-absolute bottom-0 start-0 h-100 w-100 z-1 justify-content-center align-items-center`}>\n <div className='position-absolute bg-dark bg-gradient opacity-50 w-100 h-100 z-0 rounded-3'></div>\n <div className='d-flex align-items-end gap-2 h-50 z-1'>\n <div className='d-flex align-items-end h-50'>\n <div className={`${styles.bar} ${styles.a} rounded shadow`}></div>\n </div>\n <div className='d-flex align-items-end h-75'>\n <div className={`${styles.bar} ${styles.b} rounded shadow`}></div>\n </div>\n <div className='d-flex align-items-end h-100'>\n <div className={`${styles.bar} ${styles.c} rounded shadow`}></div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction getImageRatio(object: BaseObject): ImageFallbackType {\n if (VideoHelper.isVideoType(object))\n return 16 / 9;\n\n if (object.typeId === MasterType.Playlist)\n return 1;\n\n if (object.typeId === MasterType.Series)\n return 9 / 16;\n}\n\nSharedObjectImage.defaultProps = {\n imageOptions: { size: ImageSize.Small }\n};\n\ninterface SharedObjectImageProps {\n object: BaseObject;\n locationContext: LocationContext;\n appLink?: Core.AppLink;\n showVideoMetadata?: boolean;\n fixedHeight?: boolean;\n requireMarking?: number;\n imageOptions?: ImageOptions;\n showInsightsMask?: boolean;\n showCollectionMask?: boolean;\n showVideoCount?: boolean;\n thumbnailSize?: 'sm' | 'md';\n}\n\nexport function SharedObjectImage(props: SharedObjectImageProps): JSX.Element {\n const ref = React.useCallback((el: HTMLDivElement) => {\n if (!el || !props.fixedHeight)\n return;\n\n el.style.width = `${el.offsetHeight * getImageRatio(props.object)}px`;\n }, []);\n\n const useVideoThumbnail = VideoHelper.isVideoType(props.object);\n\n const {\n image,\n imageType,\n imageClassName,\n imageFallbackComponent\n } = getImageProps(props.object);\n\n const metadataFlags = !props.showVideoMetadata ? {\n hideDuration: true,\n hideMask: true,\n hideRating: true,\n hideVideoTypeBadge: true\n } : {};\n\n return (\n <div className='d-flex align-items-center justify-content-center w-100 h-100'>\n <div ref={ref} className={props.fixedHeight ? 'h-100' : 'w-100'}>\n {useVideoThumbnail &&\n <div className={`${styles.thumbnailContainer} position-relative`}>\n {props.showInsightsMask && <InsightsMask />}\n <AppLink appLink={props.appLink}>\n <VideoThumbnail\n video={props.object}\n size={props.thumbnailSize}\n imageOptions={props.imageOptions}\n textPosition={ThumbnailTextPosition.Independent}\n type='cosmetic'\n {...metadataFlags}\n />\n </AppLink>\n {!!props.requireMarking && (\n <div className={`${props.showInsightsMask && styles.requireMarking} position-absolute bottom-0 end-0 z-1 m-2`}>\n <div className={`${styles.badge} d-flex align-items-center bg-light-ultramarine text-ultramarine fw-semibold rounded-pill w-fit mt-1 px-2`}>\n <Text namespace={namespace} phrase='requireMarking' options={{ smartCount: props.requireMarking }} />\n </div>\n </div>\n )}\n </div>\n }\n {!useVideoThumbnail &&\n <>\n {'videos' in (props.object as Playlist | Series) ? (\n <CollectionThumbnail\n collection={props.object}\n imageOptions={props.imageOptions}\n appLink={props.appLink}\n analyticsData={{\n id: props.object.id,\n name: props.object.name\n }}\n analyticsOptions={{\n entity: ShareViewHelper.getAnalyticsEntity(props.object.type),\n actionType: UserAction.Click,\n location: props.locationContext\n }}\n showMask={props.showCollectionMask}\n showVideoCount={props.showVideoCount}\n />\n ) : (\n <BaseImage\n data={image?.url}\n imageType={imageType}\n imageOptions={props.imageOptions}\n appLink={props.appLink}\n className={imageClassName}\n analyticsData={{\n id: props.object.id,\n name: props.object.name\n }}\n analyticsOptions={{\n entity: ShareViewHelper.getAnalyticsEntity(props.object.type),\n actionType: UserAction.Click,\n location: props.locationContext\n }}\n >\n {imageFallbackComponent}\n </BaseImage>\n )}\n </>\n }\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"thumbnailTitle\":\"OsWjL\"};","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './collection-thumbnail-title.scss';\n\ninterface BaseCollectionThumbnailTitleProps {\n title: string;\n}\n\nfunction BaseCollectionThumbnailTitle(props: BaseCollectionThumbnailTitleProps): JSX.Element {\n return (\n <h3 title={props.title} className='h6'>{props.title}</h3>\n );\n}\n\ninterface CollectionThumbnailTitleProps extends BaseCollectionThumbnailTitleProps {\n appLink: Core.AppLink;\n}\n\nexport function CollectionThumbnailTitle(props: CollectionThumbnailTitleProps) {\n if (!props.appLink) {\n return (\n <BaseCollectionThumbnailTitle {...props} />\n );\n }\n \n return (\n <AppLink appLink={props.appLink} className={`${styles.thumbnailTitle}`}>\n <BaseCollectionThumbnailTitle {...props} />\n </AppLink>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"badge\":\"M4zat\",\"mask\":\"r0Ztg\",\"thumbnailContainer\":\"uD9dz\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsOptions, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CollectionThumbnailTitle } from 'libs/shared/components/thumbnails/collection/title/CollectionThumbnailTitle';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { Playlist, Series } from 'libs/shared/interfaces';\nimport { ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './collection-thumbnail.scss';\n\nconst namespace = 'shared.collectionThumbnail';\n\ntype SupportedContentType = Playlist | Series;\n\ninterface CollectionThumbnailProps {\n appLink?: Core.AppLink\n collection: SupportedContentType;\n imageOptions?: ImageOptions;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n showMask?: boolean;\n showVideoCount?: boolean;\n title?: string;\n titleAppLink?: Core.AppLink;\n subText?: string;\n subTextAppLink?: Core.AppLink;\n hoverText?: string;\n}\n\nexport function CollectionThumbnail(props: CollectionThumbnailProps) {\n function getFirstVideo() {\n let collectionVideos = props.collection?.videos;\n\n if (!collectionVideos)\n return;\n\n if (!collectionVideos.count && props.collection.typeId === MasterType.Playlist) {\n const playlist = props.collection as Playlist;\n\n if (playlist.clips.count)\n collectionVideos = playlist.clips;\n\n if (playlist.interactives.count)\n collectionVideos = playlist.interactives;\n }\n\n return ArrayHelper.first(collectionVideos.data);\n }\n\n function getVideoCount() {\n let totalCount = 0;\n\n if (props.collection.videos && props.collection.videos.count) {\n totalCount += props.collection.videos.count;\n }\n\n if (props.collection.typeId === MasterType.Playlist) {\n const playlist = props.collection as Playlist;\n\n if (playlist.interactives?.count)\n totalCount += playlist.interactives.count;\n\n if (playlist.clips?.count)\n totalCount += playlist.clips.count;\n }\n\n return totalCount;\n }\n\n function getEntityType(collection: SupportedContentType) {\n if (MasterTypeHelper.isType<Playlist>(collection, MasterType.Playlist)) {\n return EntityType.Playlist;\n }\n\n if (MasterTypeHelper.isType<Series>(collection, MasterType.Series)) {\n return EntityType.Series;\n }\n }\n\n const firstVideo = getFirstVideo();\n const videoCount = getVideoCount();\n const showTexts = props.title?.length || props.subText?.length;\n\n const analyticsData = {\n id: props.collection.id.toString(),\n name: props.collection.name,\n\n ...props.analyticsData\n };\n\n const analyticsOptions = {\n actionType: UserAction.Click,\n entity: getEntityType(props.collection),\n \n ...props.analyticsOptions\n };\n\n return (\n <div>\n <div className={`position-relative ${styles.thumbnailContainer} z-1`}>\n <AppLink\n appLink={props.appLink}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n preventFocus\n >\n {props.showMask &&\n <div className={`${styles.mask} position-absolute w-100 h-100 rounded-3 bg-dark bg-gradient z-1 bg-opacity-50 pointer-events-none`}>\n <div className={`${styles.badge} d-flex align-items-center w-fit flex-grow-0 bg-dark rounded-pill ps-1 m-2`}>\n <SvgContainer svgName={cvSvgLibrary.Play} className='svg-container text-white' />\n <p className='d-inline fw-medium text-white mb-0'>\n {props.hoverText?.length ?\n <span>{props.hoverText}</span> :\n <Text namespace={namespace} phrase='playAll' />\n }\n </p>\n </div>\n </div>\n }\n\n {firstVideo &&\n <VideoThumbnail\n video={firstVideo}\n imageOptions={props.imageOptions}\n textPosition={ThumbnailTextPosition.Independent}\n type='cosmetic'\n hideMask\n hideRating\n hideDuration\n hideVideoTypeBadge\n />\n }\n\n {!firstVideo &&\n <div className='ratio ratio-16x9 bg-light rounded-3'>\n <div className='d-flex justify-content-center align-items-center'>\n <SvgContainer svgName={cvSvgLibrary.Play} className='w-33 opacity-25 text-gray-400' />\n </div>\n </div>\n }\n\n {props.showVideoCount &&\n <div className={`${styles.badge} d-flex align-items-center w-fit bg-dark bg-opacity-75 rounded-pill position-absolute bottom-0 end-0 ps-1 m-2`}>\n <SvgContainer svgName={cvSvgLibrary.Series} className='svg-container text-white me-1' />\n <p className='d-inline fw-semibold text-white mb-0'>\n <Text namespace={namespace} phrase='videos' options={{ count: videoCount, smartCount: videoCount }} />\n </p>\n </div>\n }\n </AppLink>\n\n </div>\n \n {showTexts &&\n <div className='mt-2 d-flex flex-column'>\n {props.subText &&\n <TitleSubText title={props.subText} appLink={props.subTextAppLink}>\n {props.subText}\n </TitleSubText>\n }\n {props.title &&\n <CollectionThumbnailTitle\n title={props.collection.name}\n appLink={props.titleAppLink}\n />\n }\n </div>\n }\n </div>\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 { 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 * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nconst DEFAULT_POLLING_INTERVAL = 5000; // 5 seconds.\n\n/**\n * Hook to fire a callback at a set interval.\n * @param callback \n * @param pollingInterval \n * \n * Returns a function to clear the timeout.\n */\nexport function usePolling(callback: () => void, pollingInterval: number = DEFAULT_POLLING_INTERVAL): () => void {\n const [ pollingTrigger, setPollingTrigger ] = React.useState(false);\n\n const timeoutRef = React.useRef<number>(null);\n\n const poll = () => {\n setPollingTrigger(t => !t);\n\n timeoutRef.current = window.setTimeout(poll, pollingInterval);\n };\n\n React.useEffect(() => {\n timeoutRef.current = window.setTimeout(poll, pollingInterval);\n }, []);\n\n React.useEffect(() => {\n if (FunctionHelper.isFunction(callback))\n callback();\n }, [pollingTrigger]);\n\n return () => window.clearTimeout(timeoutRef.current);\n}","import React from 'react';\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { SharedObjectImage } from 'libs/shared/apps/share/components/shared-object-image/SharedObjectImage';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { BaseObject, Classroom } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { ShareAvatar } from 'apps/share-v2/components/ShareAvatar';\nimport { Pincode } from 'apps/share-v2/interfaces/Pincode';\nimport { ShareLink } from 'apps/share-v2/interfaces/ShareLink';\n\ninterface ShareOptionsProps {\n sharedObject?: BaseObject;\n shareLink?: ShareLink;\n pinCode?: Pincode;\n classroom?: Classroom;\n}\n\nexport function ShareOptions(props: ShareOptionsProps) {\n function onExpandCode() {\n console.log('Expanding code..');\n }\n\n const qrCodeValue = props.shareLink?.link?.shortenedUrl ?? '';\n const videoAppLink = VideoAppLinkHelper.getAppLink(props.sharedObject);\n const url = AppLinkHelper.getHref(videoAppLink);\n \n return (\n <div>\n <h3>Share information</h3>\n <div className='mb-4 bg-light-blue p-3 rounded-3'>\n <div className='d-flex gap-3'>\n { props.sharedObject && (\n <div style={{ minWidth: 220 }} className='d-flex flex-column'>\n <SharedObjectImage\n object={props.sharedObject}\n showVideoMetadata\n locationContext={LocationContext.Insights}\n imageOptions={{ size: ImageSize.Medium }}\n showCollectionMask\n showVideoCount\n appLink={videoAppLink}\n />\n </div>\n )}\n <div className='d-flex flex-column justify-content-between'>\n <div className='d-flex align-items-center'>\n <a href={url} className='cursor-pointer h6 mb-0 d-inline me-2'>{props.sharedObject?.name}</a>\n <IconButton\n svgName={cvSvgLibrary.NewWindow}\n appLink={videoAppLink}\n svgSize={SvgContainerSize.Small}\n className='d-inline-block'\n customSize\n />\n </div>\n {props.shareLink && <ShareAvatar shareLink={props.shareLink} classroomName={props.classroom?.name} />}\n <div className='d-flex gap-2'>\n <IconButton\n svgName={cvSvgLibrary.Share}\n className='btn btn-outline-dark'\n appLink={{\n application: AppChannels.SHARE_V2,\n action: Actions.ShareV2.LINK,\n args: [props.sharedObject?.id],\n params: {\n entityType: props.sharedObject?.type,\n shareId: props.shareLink?.shareId\n }\n }}\n >\n Share a link or embed\n </IconButton>\n <IconButton\n svgName={cvSvgLibrary.Download}\n className='btn btn-outline-dark'\n appLink={{\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.QR_CODE,\n params: {\n value: qrCodeValue\n }\n }}\n >\n QR code\n </IconButton>\n </div>\n </div>\n\n <div className='flex-grow-1' />\n\n {props.pinCode && (\n <div className='border p-3 rounded-3 d-flex flex-column align-items-center bg-white'>\n <p>Go to <a href='https://staging.clickview.net/pin' target='_blank' className='text-info'>staging.clickview.net/pin</a> and enter PIN:</p>\n <div className='d-flex align-items-center'>\n <h4 className='mb-0 pb-0 me-1'>{props.pinCode?.code}</h4>\n <CopyToClipboard text={props.pinCode?.code}>\n <IconButton\n svgName={cvSvgLibrary.Copy}\n className='btn'\n />\n </CopyToClipboard>\n <IconButton\n svgName={cvSvgLibrary.NewWindow}\n onClick={onExpandCode}\n className='btn'\n />\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { usePolling } from 'libs/common/react/hooks/UsePolling';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { EngagementTable } from 'libs/shared/apps/analytics/components/engagement-table/EngagementTable';\nimport { useAnonSessions } from 'libs/shared/apps/analytics/hooks/UseAnonSessions';\nimport { useChunkedUsersResponse } from 'libs/shared/apps/analytics/hooks/UseEngagementUsers';\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { getAudienceParams } from 'libs/shared/apps/analytics/utils/AudienceUtils';\nimport { getInsightsDateRangePresets, getStartEndParams } from 'libs/shared/apps/analytics/utils/DateRangeUtils';\nimport { getFilterParamsKey } from 'libs/shared/apps/analytics/utils/FilterParamUtils';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { PlaylistRequests } from 'libs/shared/flight-requests/PlaylistRequests';\nimport { SeriesRequests } from 'libs/shared/flight-requests/SeriesRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoViewRequests } from 'libs/shared/flight-requests/VideoViewRequests';\nimport { useFetchAll } from 'libs/shared/hooks/UseFetchAll';\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 { AnalyticsRequestFilter, Classroom, Config, CurrentUser, Engagement, IndividualEngagementResponse, Playlist, Series, User, VideoTypes } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { ShareOptions } from 'apps/insights/components/share-options/ShareOptions';\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { getInsightsClipTabs, getInsightsInteractiveTabs, getInsightsPlaylistTabs, getInsightsSeriesTabs, getInsightsVideoTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\nimport { ShareType } from 'apps/share-v2/enums/ShareType';\nimport { ShareRequests } from 'apps/share-v2/flight-requests/ShareRequests';\nimport { Pincode } from 'apps/share-v2/interfaces/Pincode';\nimport { ShareLink } from 'apps/share-v2/interfaces/ShareLink';\nimport { ShareLinkHelper } from 'apps/share-v2/utils/ShareLinkHelper';\n\ninterface ShareOptionsViewProps {\n objectId: string;\n typeId: MasterType;\n shareId?: string;\n}\n\nexport function ShareOptionsView(props: ShareOptionsViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(ViewModelKeys.ANONYMISE_USERS);\n\n const fetch = Flight.useGetFetch();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const shareLink = Flight.useBasicFetch<ShareLink>(props.shareId && ShareRequests.getShareLink(props.shareId));\n const pinCode = Flight.useBasicFetch<Pincode>(props.shareId && ShareRequests.getPincodeByShareId(props.shareId));\n const classRoomId = ShareLinkHelper.getClassroomId(shareLink.data);\n const classroom = Flight.useBasicFetch<Classroom>(classRoomId && ClassroomRequests.getClassroom(classRoomId));\n\n const { hasShareFlowV2, publicInteractiveAttempts } = useSettings(null);\n const { hasPermissions } = usePermissions();\n\n const isVideo = () => [ MasterType.Video, MasterType.Clip, MasterType.Interactive ].includes(props.typeId);\n const isSeries = () => props.typeId === MasterType.Series;\n const isPlaylist = () => props.typeId === MasterType.Playlist;\n\n const videoRequest = isVideo() && VideoHelper.getVideoRequest(props.objectId, props.typeId);\n const video = Flight.useBasicFetch<VideoTypes>(videoRequest);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const seriesRequest = isSeries() && SeriesRequests.series(props.objectId);\n const series = Flight.useBasicFetch<Series>(seriesRequest);\n\n const playlistRequest = isPlaylist() && PlaylistRequests.getPlaylist(props.objectId);\n const playlist = Flight.useBasicFetch<Playlist>(playlistRequest);\n\n const audienceAppLinkParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n const dateRangeAppLinkParams = AnalyticsFilterHelper.getDateRangeAppLinkParams();\n const params = {\n ...audienceAppLinkParams,\n ...dateRangeAppLinkParams,\n shareId: props.shareId\n };\n\n const requestFilter: AnalyticsRequestFilter = {\n ...getStartEndParams(getInsightsDateRangePresets(), dateRangeAppLinkParams),\n ...getAudienceParams(audienceAppLinkParams)\n };\n\n const engagementRequest = currentUser.data &&\n VideoViewRequests.individualEngagement(\n props.objectId,\n requestFilter,\n currentUser.data?.id,\n publicInteractiveAttempts\n );\n const individualEngagement = Flight.useBasicFetch<IndividualEngagementResponse>(engagementRequest);\n usePolling(() => fetch(engagementRequest), 5000);\n\n const userIds = individualEngagement.data?.data?.map(d => d.userId).filter(Boolean) || [];\n \n const { users, isLoading } = useChunkedUsersResponse(userIds);\n const anonSessions = useAnonSessions(props.shareId);\n\n const fakeEngagement = useGetFakeEngagement(currentUser.data, shareLink.data, individualEngagement.data);\n\n useLockContentWidth();\n useSetPageMetadata({ title: video.data?.name ?? series.data?.name ?? playlist.data?.name });\n useHandleObjectError([ video, series, playlist ]);\n\n const tableDataLoaded = !!individualEngagement.data && (!userIds.length || !isLoading);\n const tableRowsWillBeEmpty = !individualEngagement.data?.data.length\n || (!userIds.length && !Object.keys(anonSessions).length);\n const showTableEmptyState = !tableDataLoaded || tableRowsWillBeEmpty;\n\n function getInsightsTabs() {\n if (props.typeId === MasterType.Interactive)\n return getInsightsInteractiveTabs(props.objectId, 'shareOptions', params, hasShareFlowV2);\n\n if (props.typeId === MasterType.Clip)\n return getInsightsClipTabs(props.objectId, 'shareOptions', params, hasShareFlowV2);\n\n if (props.typeId === MasterType.Video)\n return getInsightsVideoTabs(props.objectId, 'shareOptions', params, hasShareFlowV2);\n\n if (props.typeId === MasterType.Series)\n return getInsightsSeriesTabs(props.objectId, 'shareOptions', params);\n\n if (props.typeId === MasterType.Playlist)\n return getInsightsPlaylistTabs(props.objectId, 'shareOptions', params);\n }\n\n\n return (\n <div className='px-3'>\n <InsightsHeader\n video={video.data ?? series.data ?? playlist.data}\n dateRangeAppLinkParams={dateRangeAppLinkParams}\n tabs={getInsightsTabs()}\n hasAnalytics={hasPermissions(PermissionName.ViewCustomerAnalytics)}\n analyticsWebUrl={config.data?.analyticsWebUrl}\n hasShareFlowV2={hasShareFlowV2}\n shareId={props.shareId}\n />\n <ShareOptions\n sharedObject={video.data ?? series.data ?? playlist.data}\n shareLink={shareLink.data}\n pinCode={pinCode.data}\n classroom={classroom.data}\n />\n <div className='d-flex align-items-center mt-5'>\n <h3 className='p-0 m-0'>Students who have viewed this video</h3>\n {shareLink.data?.type === ShareType.Classroom && (\n <IconButton\n svgName={cvSvgLibrary.Plus}\n onClick={() => console.log('Add new student..')}\n className='btn btn-outline-dark ms-auto'\n >\n Add new student\n </IconButton>\n )}\n </div>\n <div className='col-12 mt-2 mb-5'>\n <EngagementTable\n key={getFilterParamsKey({ ...audienceAppLinkParams, ...dateRangeAppLinkParams })}\n engagement={fakeEngagement}\n users={users ?? []}\n imageCdnUrl={config.data?.imageCdnUrl}\n anonymiseUsers={anonymiseUsers}\n border\n anonSessions={anonSessions}\n hideWhenEmpty={false}\n theme={{\n header: showTableEmptyState ? 'border-0' : 'border-bottom',\n table: showTableEmptyState ? 'bg-white rounded px-0 rounded-bottom-0' : 'bg-white rounded px-0'\n }}\n />\n {showTableEmptyState && (\n <div style={{ minHeight: 400 }} className='border border-top-0 rounded-1 rounded-top-0 pt-5 pb-5 text-center'>\n <h4>Waiting for students to view...</h4>\n </div>\n )}\n </div>\n </div>\n );\n}\n\nfunction useGetFakeEngagement(\n currentUser: CurrentUser,\n shareLink: ShareLink,\n individualEngagement: IndividualEngagementResponse\n) {\n const fetch = Flight.useGetFetch();\n\n const classroomId = shareLink?.recipients?.[0]?.recipientTypeId === MasterType.Classroom &&\n shareLink.recipients[0].recipientId;\n\n const getClassroomRequest = (cursor: string) => classroomId\n && ClassroomRequests.getClassroomStudents(classroomId, cursor);\n const clasroomStudents = useFetchAll<User>(\n getClassroomRequest,\n cursor => fetch(getClassroomRequest(cursor))\n );\n\n const engagementMap = individualEngagement?.data?.reduce<Record<string, Engagement>>((prev, next) =>\n ({ ...prev, [next.userId]: next }), {}) ?? {};\n \n const fakeEngagement = clasroomStudents.items?.length ?\n clasroomStudents.items.map<Engagement>(user => {\n const engagement = engagementMap[user.id];\n\n if (engagement)\n return null;\n\n return {\n customerId: currentUser?.customerId,\n engagementRate: 0,\n heatMap: [],\n userId: user.id,\n videoDuration: 500,\n viewCount: 0,\n videoId: null,\n userIds: [],\n sessionId: null,\n sessionIds: [],\n user\n };\n }).filter(e => !!e)\n : [];\n\n return [ ...individualEngagement?.data ?? [], ...fakeEngagement ];\n}","import React from 'react';\n\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { SharePrivacy } from '../enums/SharePrivacy';\nimport { ShareType } from '../enums/ShareType';\nimport { ShareLink } from '../interfaces/ShareLink';\n\ninterface ShareAvatarProps {\n shareLink: Partial<ShareLink>;\n classroomName?: string;\n hideSubtitle?: boolean;\n svgSize?: SvgContainerSize;\n svgWrapperClassName?: string;\n}\n\nexport function ShareAvatar(props: ShareAvatarProps): JSX.Element {\n return (\n <div className='d-flex align-items-center'>\n <div className='d-flex align-items-center justify-content-center'>\n <div>\n <IconCircle\n svgName={icons[props.shareLink.type]}\n variant={iconColours[props.shareLink.type]}\n textVariant='white'\n svgWrapperClassName={props.svgWrapperClassName ?? 'p-1'}\n svgSize={props.svgSize ?? SvgContainerSize.Standard}\n />\n </div>\n <div className='d-flex flex-column ms-2'>\n <label className='m-0'>{getTitle(props)}</label>\n {!props.hideSubtitle && <span className='text-secondary'>{getSubtitle(props)}</span>}\n </div>\n </div>\n </div>\n );\n}\n\nconst icons = {\n [ShareType.Open]: cvSvgLibrary.School,\n [ShareType.Link]: cvSvgLibrary.Link,\n [ShareType.Classroom]: cvSvgLibrary.Classrooms,\n [ShareType.Live]: cvSvgLibrary.Play\n};\n\nconst iconColours = {\n [ShareType.Open]: 'blue',\n [ShareType.Link]: 'black',\n [ShareType.Classroom]: 'teal',\n [ShareType.Live]: 'purple'\n};\n\nconst titles = {\n [ShareType.Open]: 'Open classroom',\n [ShareType.Link]: 'Link',\n [ShareType.Classroom]: 'Classroom',\n [ShareType.Live]: 'Live'\n};\n\nfunction pluralize(count: number, singular: string, plural: string) {\n return count === 1 ? singular : plural;\n}\n\nfunction getTitle({ shareLink, classroomName }: ShareAvatarProps) {\n if (shareLink.type === ShareType.Classroom && classroomName)\n return classroomName;\n\n return titles[shareLink.type];\n}\n\nfunction getSubtitle({ shareLink }: ShareAvatarProps) {\n if (shareLink.type === ShareType.Classroom) {\n const groupCount = shareLink.recipients?.filter(r => r.recipientTypeId === MasterType.ClassroomGroup).length ?? 0;\n const studentCount = shareLink.recipients?.filter(r => r.recipientTypeId === MasterType.User).length ?? 0;\n\n if (groupCount && studentCount)\n return `${groupCount} ${pluralize(groupCount, 'group', 'groups')}, ${studentCount} ${pluralize(studentCount, 'student', 'students')} can view`;\n\n if (groupCount)\n return `${groupCount} ${pluralize(groupCount, 'group', 'groups')} can view`;\n\n if (studentCount)\n return `${studentCount} ${pluralize(studentCount, 'student', 'students')} can view`;\n\n return `All students in classroom can view`;\n }\n\n if (shareLink.type === ShareType.Open)\n return 'Students watch using a PIN code';\n\n if (shareLink.type === ShareType.Link) {\n if ([ SharePrivacy.JustMySchool, SharePrivacy.Protected ].includes(shareLink.privacy))\n return 'Respect ratings and restrictions';\n\n if (shareLink.privacy === SharePrivacy.JustMySchoolOverrideRestriction)\n return 'Anyone in your school can view';\n\n if (shareLink.privacy === SharePrivacy.ProtectedOverrideRestriction)\n return 'Anyone signed into ClickView can view';\n\n if (shareLink.privacy === SharePrivacy.Public)\n return 'Anyone with a link can view';\n\n if (shareLink.privacy === SharePrivacy.PinCode)\n return 'Anyone with a PIN code can view';\n }\n\n if (shareLink.type === ShareType.Live)\n return 'Live now';\n\n return 'Anyone signed into ClickView can view';\n}","export enum SharePrivacy {\n Public = 'Public',\n PinCode = 'PinCode',\n PasswordProtected = 'PasswordProtected',\n ProtectedOverrideRestriction = 'ProtectedOverrideRestriction',\n JustMySchoolOverrideRestriction = 'JustMySchoolOverrideRestriction',\n Protected = 'Protected',\n JustMySchool = 'JustMySchool',\n Direct = 'Direct'\n}","export enum ShareType {\n Link = 'Link',\n Classroom = 'Classroom',\n Open = 'Open',\n Live = 'Live'\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BasePaginatedCollection } from 'libs/shared/interfaces';\n\nimport { CreateShareLinkRequest } from 'apps/share-v2/interfaces/CreateShareLinkRequest';\nimport { ShareLink } from 'apps/share-v2/interfaces/ShareLink';\n\nconst normalizeOptions: Flight.NormalizeOptions = {\n namespace: 'share-v2'\n};\n\nexport interface GetSentSharesParams {\n cursor?: string;\n limit?: number;\n objectTypeId?: MasterType | MasterType[];\n recipientUserId?: string | string[];\n recipientGroupId?: string | string[];\n start?: string;\n end?: string;\n scopeId?: string;\n}\n\nexport const ShareRequests = {\n createShareLink(\n data: CreateShareLinkRequest,\n success?: (shareLink: ShareLink) => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: '/api/share/v2/shares',\n key: 'create:share-v2:link',\n type: HttpVerbs.POST,\n data,\n normalizeOptions,\n invalidationKeys: [\n `share:link:object:${data.objectId}`,\n `privacy:${data.objectId}`,\n 'sent:shares',\n 'get:share-v2:shares:object'\n ],\n success,\n error,\n always\n };\n },\n\n getShareLink(\n shareId: string,\n success?: (shareLink: ShareLink) => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `/api/share/v2/shares/${shareId}`,\n key: `get:share-v2:link:${shareId}`,\n type: HttpVerbs.GET,\n normalizeOptions,\n success,\n error,\n always\n };\n },\n\n getSharesByObjectId(\n objectId: string | number,\n success?: (shares: ShareLink[]) => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `/api/share/v2/shares/objects/${objectId}`,\n key: `get:share-v2:shares:object:${objectId}`,\n type: HttpVerbs.GET,\n normalizeOptions,\n success,\n error,\n always\n };\n },\n\n getSentShares(\n params: GetSentSharesParams = {},\n success?: (response: BasePaginatedCollection<ShareLink>[]) => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n const adaptedParams = {\n scopeId: params.scopeId,\n limit: params.limit || 25,\n offset: parseInt(params.cursor) || 0\n };\n\n const key = Object.values(adaptedParams).join(':');\n\n return {\n url: UrlHelper.urlBuilder('/api/share/v2/shares/sent', adaptedParams),\n key: `sent:shares-v2:${key}`,\n formatData: (response: ShareLink[]) => {\n return {\n data: response,\n count: response.length,\n pagination: {\n cursors: {\n next: adaptedParams.offset + response.length\n }\n }\n };\n },\n type: HttpVerbs.GET,\n normalize: false,\n success,\n error,\n always\n };\n },\n\n createPincode(shareId: string): Flight.Request {\n return {\n url: `/api/share/v2/shares/${shareId}/pincode`,\n key: 'create:share-v2:pincode',\n type: HttpVerbs.POST\n };\n },\n\n getPincode(code: string): Flight.Request {\n return {\n url: `/api/share/v2/shares/pincode?code=${code}`,\n key: `get:share-v2:pincode:${code}`\n };\n },\n\n getPincodeByShareId(shareId: string): Flight.Request {\n return {\n url: `/api/share/v2/shares/${shareId}/pincode`,\n key: `get:share-v2:${shareId}:pincode`\n };\n }\n};","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ShareLinkStatus } from 'libs/shared/enums/ShareLinkStatus';\nimport { BaseObject, YearGroup } from 'libs/shared/interfaces';\nimport { RestrictionHelper } from 'libs/shared/utils/RestrictionHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { SharePrivacy } from '../enums/SharePrivacy';\nimport { ShareType } from '../enums/ShareType';\nimport { ShareLink } from '../interfaces/ShareLink';\n\nconst namespace = 'share.shareLinkInfo';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface GetIconAndTextOptions {\n linkExpireDate: string;\n isPasswordProtected: boolean;\n privacy: SharePrivacy;\n status: ShareLinkStatus;\n entityTypeId: MasterType;\n hasStudentExp: boolean;\n entity: BaseObject;\n yearGroups: YearGroup[];\n}\n\n\nexport const ShareLinkHelper = {\n getPrivateIconAndText: (options: GetIconAndTextOptions) => {\n const { entityTypeId, privacy, hasStudentExp, entity, yearGroups } = options;\n \n if (entityTypeId === MasterType.Topic || entityTypeId === MasterType.Series)\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase(hasStudentExp ? 'justMySchoolTeachers' : 'justMySchoolDescription') };\n \n /**\n * This is mainly for typescript, privacy will be an array for playlists\n * but that is handled above\n */\n if (Array.isArray(privacy))\n return;\n \n switch (privacy) {\n case SharePrivacy.Public:\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase('publicDescription') };\n case SharePrivacy.ProtectedOverrideRestriction:\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase('clickViewOnly') };\n case SharePrivacy.Protected:\n return {\n icon: cvSvgLibrary.Lock,\n text: ShareLinkHelper.getRespectRatingText(entity, yearGroups, hasStudentExp)\n };\n case SharePrivacy.JustMySchoolOverrideRestriction:\n return { icon: cvSvgLibrary.Lock, text: getPhrase(hasStudentExp ? 'justMySchoolTeachers' : 'justMySchoolDescription') };\n case SharePrivacy.JustMySchool:\n return {\n icon: cvSvgLibrary.Lock,\n text: ShareLinkHelper.getRespectRatingText(entity, yearGroups, hasStudentExp)\n };\n case SharePrivacy.PinCode:\n case SharePrivacy.PasswordProtected:\n return { icon: cvSvgLibrary.Lock, text: getPhrase('privateDescription') };\n default:\n return {};\n }\n },\n\n getIconAndText: (options: GetIconAndTextOptions) => {\n const { linkExpireDate, isPasswordProtected, status } = options;\n if (!linkExpireDate && !isPasswordProtected)\n return ShareLinkHelper.getPrivateIconAndText(options);\n \n if (!linkExpireDate)\n return { icon: cvSvgLibrary.Lock, text: getPhrase('password') };\n \n const isToday = DateHelper.isToday(linkExpireDate);\n const dayDifference = DateHelper.diffBetween(linkExpireDate, new Date(), 'day');\n \n if (!isPasswordProtected) {\n let text = isToday\n ? getPhrase('expiryToday')\n : getPhrase('expiry', { days: dayDifference });\n \n if (status === ShareLinkStatus.Expired)\n text = getPhrase('expired');\n \n return { icon: cvSvgLibrary.Timer, text };\n }\n \n let text = isToday\n ? getPhrase('passwordExpiryToday')\n : getPhrase('passwordExpiry', { days: dayDifference });\n \n if (status === ShareLinkStatus.Expired)\n text = getPhrase('passwordExpired');\n \n return { icon: cvSvgLibrary.Lock, text };\n },\n\n getRespectRatingText(video: BaseObject, yearGroups: YearGroup[], hasStudentExp: boolean) {\n if (!video || !yearGroups)\n return null;\n \n if (hasStudentExp)\n return getPhrase('justMySchoolTeachers');\n \n if (!VideoHelper.isVideoType(video))\n return getPhrase('collectionRating');\n \n const restriction = RestrictionHelper.getWeightedRestriction(video._restrictions?.value);\n \n /**\n * Restrictions without a year level are teacher restricitons, which means only admins can see it.\n */\n if (restriction && !restriction.yearGroup)\n return getPhrase('onlyAdmins');\n \n const rating = VideoHelper.getRating(video);\n \n let maxYearGroup: YearGroup;\n let minAllowedYearGroup: YearGroup;\n \n for (const yearGroup of yearGroups) {\n /**\n * If our year level is our new highest so far, save it\n */\n if (!maxYearGroup || yearGroup.value > maxYearGroup.value)\n maxYearGroup = yearGroup;\n \n /**\n * If the restriction is higher than this year level, skip it.\n */\n if (restriction && yearGroup.value <= restriction.yearGroup)\n continue;\n \n /**\n * If therating is higher than this year level's rating value, skip it.\n */\n if (rating && yearGroup.rating.value < rating.value)\n continue;\n \n /**\n * If our year level is the new lowest so far, save it\n */\n if (!minAllowedYearGroup || yearGroup.value < minAllowedYearGroup.value)\n minAllowedYearGroup = yearGroup;\n }\n \n /**\n * If no year levels are allowed, then it's staff only.\n */\n if (!minAllowedYearGroup)\n return getPhrase('onlyStaff');\n \n \n /**\n * If there's only one year level, and it's allowed, then we can just\n * say that everyone in your school can access it.\n */\n if (yearGroups.length === 1)\n return getPhrase('clickViewOnly');\n \n /**\n * We differentiate the copy if it's the highest year level or not. \n * Basically if we need to say \"X and above\" or not.\n */\n if (minAllowedYearGroup.value === maxYearGroup.value)\n return getPhrase('maxYearGroup', { yearGroup: maxYearGroup.name });\n \n return getPhrase('yearGroupRange', { yearGroup: minAllowedYearGroup.name });\n },\n\n getClassroomId(shareLink: ShareLink | undefined): string {\n if (!shareLink)\n return '';\n\n if (shareLink.type !== ShareType.Classroom)\n return '';\n\n const classroom = shareLink.recipients?.find(r => r.recipientTypeId === MasterType.Classroom);\n\n if (classroom)\n return classroom.recipientId.toString();\n\n const recipientWithScope = shareLink.recipients?.find(r => r.scopeId);\n\n return recipientWithScope?.scopeId.toString() || '';\n }\n};","\"use strict\";\n\nvar deselectCurrent = require(\"toggle-selection\");\n\nvar clipboardToIE11Formatting = {\n \"text/plain\": \"Text\",\n \"text/html\": \"Url\",\n \"default\": \"Text\"\n}\n\nvar defaultMessage = \"Copy to clipboard: #{key}, Enter\";\n\nfunction format(message) {\n var copyKey = (/mac os x/i.test(navigator.userAgent) ? \"⌘\" : \"Ctrl\") + \"+C\";\n return message.replace(/#{\\s*key\\s*}/g, copyKey);\n}\n\nfunction copy(text, options) {\n var debug,\n message,\n reselectPrevious,\n range,\n selection,\n mark,\n success = false;\n if (!options) {\n options = {};\n }\n debug = options.debug || false;\n try {\n reselectPrevious = deselectCurrent();\n\n range = document.createRange();\n selection = document.getSelection();\n\n mark = document.createElement(\"span\");\n mark.textContent = text;\n // avoid screen readers from reading out loud the text\n mark.ariaHidden = \"true\"\n // reset user styles for span element\n mark.style.all = \"unset\";\n // prevents scrolling to the end of the page\n mark.style.position = \"fixed\";\n mark.style.top = 0;\n mark.style.clip = \"rect(0, 0, 0, 0)\";\n // used to preserve spaces and line breaks\n mark.style.whiteSpace = \"pre\";\n // do not inherit user-select (it may be `none`)\n mark.style.webkitUserSelect = \"text\";\n mark.style.MozUserSelect = \"text\";\n mark.style.msUserSelect = \"text\";\n mark.style.userSelect = \"text\";\n mark.addEventListener(\"copy\", function(e) {\n e.stopPropagation();\n if (options.format) {\n e.preventDefault();\n if (typeof e.clipboardData === \"undefined\") { // IE 11\n debug && console.warn(\"unable to use e.clipboardData\");\n debug && console.warn(\"trying IE specific stuff\");\n window.clipboardData.clearData();\n var format = clipboardToIE11Formatting[options.format] || clipboardToIE11Formatting[\"default\"]\n window.clipboardData.setData(format, text);\n } else { // all other browsers\n e.clipboardData.clearData();\n e.clipboardData.setData(options.format, text);\n }\n }\n if (options.onCopy) {\n e.preventDefault();\n options.onCopy(e.clipboardData);\n }\n });\n\n document.body.appendChild(mark);\n\n range.selectNodeContents(mark);\n selection.addRange(range);\n\n var successful = document.execCommand(\"copy\");\n if (!successful) {\n throw new Error(\"copy command was unsuccessful\");\n }\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using execCommand: \", err);\n debug && console.warn(\"trying IE specific stuff\");\n try {\n window.clipboardData.setData(options.format || \"text\", text);\n options.onCopy && options.onCopy(window.clipboardData);\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using clipboardData: \", err);\n debug && console.error(\"falling back to prompt\");\n message = format(\"message\" in options ? options.message : defaultMessage);\n window.prompt(message, text);\n }\n } finally {\n if (selection) {\n if (typeof selection.removeRange == \"function\") {\n selection.removeRange(range);\n } else {\n selection.removeAllRanges();\n }\n }\n\n if (mark) {\n document.body.removeChild(mark);\n }\n reselectPrevious();\n }\n\n return success;\n}\n\nmodule.exports = copy;\n","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CopyToClipboard = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _copyToClipboard = _interopRequireDefault(require(\"copy-to-clipboard\"));\n\nvar _excluded = [\"text\", \"onCopy\", \"options\", \"children\"];\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar CopyToClipboard = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(CopyToClipboard, _React$PureComponent);\n\n var _super = _createSuper(CopyToClipboard);\n\n function CopyToClipboard() {\n var _this;\n\n _classCallCheck(this, CopyToClipboard);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"onClick\", function (event) {\n var _this$props = _this.props,\n text = _this$props.text,\n onCopy = _this$props.onCopy,\n children = _this$props.children,\n options = _this$props.options;\n\n var elem = _react[\"default\"].Children.only(children);\n\n var result = (0, _copyToClipboard[\"default\"])(text, options);\n\n if (onCopy) {\n onCopy(text, result);\n } // Bypass onClick if it was present\n\n\n if (elem && elem.props && typeof elem.props.onClick === 'function') {\n elem.props.onClick(event);\n }\n });\n\n return _this;\n }\n\n _createClass(CopyToClipboard, [{\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n _text = _this$props2.text,\n _onCopy = _this$props2.onCopy,\n _options = _this$props2.options,\n children = _this$props2.children,\n props = _objectWithoutProperties(_this$props2, _excluded);\n\n var elem = _react[\"default\"].Children.only(children);\n\n return /*#__PURE__*/_react[\"default\"].cloneElement(elem, _objectSpread(_objectSpread({}, props), {}, {\n onClick: this.onClick\n }));\n }\n }]);\n\n return CopyToClipboard;\n}(_react[\"default\"].PureComponent);\n\nexports.CopyToClipboard = CopyToClipboard;\n\n_defineProperty(CopyToClipboard, \"defaultProps\", {\n onCopy: undefined,\n options: undefined\n});","\"use strict\";\n\nvar _require = require('./Component'),\n CopyToClipboard = _require.CopyToClipboard;\n\nCopyToClipboard.CopyToClipboard = CopyToClipboard;\nmodule.exports = CopyToClipboard;","\nmodule.exports = function () {\n var selection = document.getSelection();\n if (!selection.rangeCount) {\n return function () {};\n }\n var active = document.activeElement;\n\n var ranges = [];\n for (var i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n\n switch (active.tagName.toUpperCase()) { // .toUpperCase handles XHTML\n case 'INPUT':\n case 'TEXTAREA':\n active.blur();\n break;\n\n default:\n active = null;\n break;\n }\n\n selection.removeAllRanges();\n return function () {\n selection.type === 'Caret' &&\n selection.removeAllRanges();\n\n if (!selection.rangeCount) {\n ranges.forEach(function(range) {\n selection.addRange(range);\n });\n }\n\n active &&\n active.focus();\n };\n};\n"],"names":["useAnonSessions","shareId","anonSessions","data","length","reduce","prev","current","sessionId","useChunkedUsersResponse","usersIds","userIdChunks","usersResponse","map","chunk","users","isLoading","hasCompleted","namespace","BASE_IMAGE_CLASS_NAME","InsightsMask","className","SharedObjectImage","props","ref","el","object","fixedHeight","style","width","offsetHeight","VideoHelper","typeId","MasterType","useVideoThumbnail","image","ImageHelper","imageType","imageClassName","imageFallbackComponent","ImageFallback","type","svgContainerClassName","url","getBgColorClass","name","extraClasses","getImageProps","metadataFlags","showVideoMetadata","hideDuration","hideMask","hideRating","hideVideoTypeBadge","showInsightsMask","AppLink","appLink","VideoThumbnail","video","size","thumbnailSize","imageOptions","textPosition","ThumbnailTextPosition","requireMarking","Text","phrase","options","smartCount","CollectionThumbnail","collection","analyticsData","id","analyticsOptions","entity","ShareViewHelper","actionType","location","locationContext","showMask","showCollectionMask","showVideoCount","BaseImage","defaultProps","BaseCollectionThumbnailTitle","title","CollectionThumbnailTitle","firstVideo","collectionVideos","videos","count","playlist","clips","interactives","ArrayHelper","getFirstVideo","videoCount","totalCount","getVideoCount","showTexts","subText","toString","MasterTypeHelper","preventFocus","SvgContainer","svgName","hoverText","TitleSubText","subTextAppLink","titleAppLink","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","internalServerError","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","VideoViewRequests","individualEngagement","objectId","filter","sharerId","includeAnonViews","queryParams","key","formatData","d","heatMap","normalize","aggregateEngagement","views","timeOffset","generateCacheKey","flightObjs","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","forEach","DEFAULT_POLLING_INTERVAL","ShareOptions","qrCodeValue","shareLink","link","shortenedUrl","videoAppLink","VideoAppLinkHelper","sharedObject","minWidth","href","IconButton","svgSize","S","customSize","ShareAvatar","classroomName","classroom","application","action","args","params","entityType","value","pinCode","target","code","CopyToClipboard","text","onClick","console","log","ShareOptionsView","anonymiseUsers","fetch","config","ConfigRequests","ShareRequests","classRoomId","ShareLinkHelper","ClassroomRequests","useSettings","hasShareFlowV2","publicInteractiveAttempts","hasPermissions","usePermissions","videoRequest","includes","currentUser","UserRequests","seriesRequest","SeriesRequests","series","playlistRequest","PlaylistRequests","audienceAppLinkParams","dateRangeAppLinkParams","requestFilter","engagementRequest","callback","pollingInterval","pollingTrigger","setPollingTrigger","timeoutRef","t","window","setTimeout","FunctionHelper","usePolling","userIds","userId","Boolean","fakeEngagement","classroomId","recipients","recipientTypeId","recipientId","getClassroomRequest","cursor","clasroomStudents","engagementMap","next","items","user","customerId","engagementRate","videoDuration","viewCount","videoId","sessionIds","e","useGetFakeEngagement","useLockContentWidth","useSetPageMetadata","tableDataLoaded","tableRowsWillBeEmpty","Object","keys","showTableEmptyState","InsightsHeader","tabs","hasAnalytics","PermissionName","analyticsWebUrl","ShareType","EngagementTable","engagement","imageCdnUrl","border","hideWhenEmpty","theme","header","table","minHeight","icons","variant","iconColours","textVariant","svgWrapperClassName","titles","hideSubtitle","groupCount","r","studentCount","pluralize","getSubtitle","singular","plural","SharePrivacy","normalizeOptions","createShareLink","success","error","always","invalidationKeys","getShareLink","getSharesByObjectId","getSentShares","adaptedParams","scopeId","limit","offset","parseInt","values","response","pagination","cursors","createPincode","getPincode","getPincodeByShareId","getPhrase","getPrivateIconAndText","entityTypeId","hasStudentExp","yearGroups","icon","getRespectRatingText","getIconAndText","linkExpireDate","isPasswordProtected","isToday","dayDifference","Date","days","restriction","_restrictions","yearGroup","maxYearGroup","minAllowedYearGroup","getClassroomId","find","recipientWithScope","deselectCurrent","clipboardToIE11Formatting","module","exports","debug","message","reselectPrevious","range","selection","mark","document","createRange","getSelection","createElement","textContent","ariaHidden","all","position","top","clip","whiteSpace","webkitUserSelect","MozUserSelect","msUserSelect","userSelect","addEventListener","stopPropagation","format","preventDefault","clipboardData","warn","clearData","setData","onCopy","body","appendChild","selectNodeContents","addRange","execCommand","Error","err","copyKey","test","navigator","userAgent","replace","prompt","removeRange","removeAllRanges","removeChild","_typeof","Symbol","iterator","constructor","prototype","defineProperty","_react","_interopRequireDefault","_copyToClipboard","_excluded","__esModule","ownKeys","enumerableOnly","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","i","arguments","source","_defineProperty","getOwnPropertyDescriptors","defineProperties","_defineProperties","descriptor","configurable","writable","_setPrototypeOf","o","p","setPrototypeOf","__proto__","_assertThisInitialized","self","ReferenceError","_getPrototypeOf","getPrototypeOf","_React$PureComponent","subClass","superClass","TypeError","create","_inherits","Constructor","protoProps","Derived","hasNativeReflectConstruct","_super","Reflect","construct","sham","Proxy","valueOf","call","_isNativeReflectConstruct","result","Super","NewTarget","this","_possibleConstructorReturn","_this","instance","_classCallCheck","_len","_key","concat","event","_this$props","children","elem","Children","only","_this$props2","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","_objectWithoutProperties","cloneElement","PureComponent","undefined","rangeCount","active","activeElement","ranges","getRangeAt","tagName","toUpperCase","blur","focus"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[549],{5255:(e,t,a)=>{a.d(t,{Y:()=>s});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 s(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}),{}):{}}},94644:(e,t,a)=>{a.d(t,{r:()=>d});var n=a(50242),r=a(81886),i=a(67058),s=a(14553),o=a(49267),l=a(49075),c={notFound:i.d,forbidden:{rating:s.q,yearLevel:s.q,region:o.a,privacy:s.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 s=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 s.badRequest):a.forbidden||r.Q.Ry.throw(new s.forbidden.privacy):a.notFound||r.Q.Ry.throw(new s.notFound):a.internalServerError||r.Q.Ry.throw(new l._))}}},17913:(e,t,a)=>{a.d(t,{u:()=>s});var n=a(97395),r=a(110),i=a(62875),s={individualEngagement:function(e,t,a,r){var s=Object.assign({objectId:e},t);return a&&(s.sharerId=a),r&&(s.includeAnonViews=!0),{url:n._.urlBuilder("{gateway}/v1/analytics/heat-map",s),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 s=Object.assign({objectId:e},t);return a&&(s.sharerId=a),r&&(s.includeAnonViews=!0),{url:n._.urlBuilder("{gateway}/v1/analytics/heat-map/aggregations",s),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,s){var o=Object.assign(Object.assign({},e),{timeOffset:r.O.getTimezoneOffset()});return t&&(o.objectId=t),a&&(o.sharerId=a),s&&(o.includeAnonViews=!0),{url:n._.urlBuilder("{gateway}/v1/analytics/video-views",o),key:(0,i.H)("video:views:".concat(t,":").concat(s),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 s(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)||o(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 o(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),s=i.m.flatten(n.data),o=n.data.length?s.reduce((function(e,t){return Object.assign(Object.assign({},e),d({},t.id,t))}),{}):null;return{itemsArr:s,items:o,isFetching:n.isFetching}}function v(e,t,a){var l,m,v,g,p=a||function(e){return"object"===c(e)?e.id:e},h=n.useRef(new Set),f=(v=n.useState([]),g=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,s,o=[],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)&&(o.push(n.value),o.length!==t);l=!0);}catch(e){c=!0,r=e}finally{try{if(!l&&null!=a.return&&(s=a.return(),Object(s)!==s))return}finally{if(c)throw r}}return o}}(v,g)||o(v,g)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),b=f[0],y=f[1];n.useEffect((function(){if(null==e?void 0:e.length){var a=[];e.forEach((function(e){var t=p(e);h.current.has(t)||(a.push(e),h.current.add(t))})),a.length&&y((function(e){return[].concat(s(e),s(i.m.chunk(a,u).map(t)))}))}}),[null==e?void 0:e.length]);var E=r.a.useBasicFetchAll(b),I=i.m.flatten(E.data),A=E.data.length?I.reduce((function(e,t){return Object.assign(Object.assign({},e),d({},p(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:()=>s});var n=a(32735),r=a(94644);function i(e){return e.map((function(e){return e.statusCode})).join(":")}function s(e,t,a){var s=Array.isArray(e)?e:[e];(0,n.useEffect)((function(){s.forEach((function(e){(0,r.r)(e.statusCode,t,a)}))}),[i(s),t,a])}},50782:(e,t,a)=>{a.d(t,{R:()=>A});var n=a(32735),r=a(82602),i=a(20354),s=a(74901),o=a(40003),l=a(30439),c=a(65853),d=a(64249),u=a(91693),m=a(83345),v=a(39151),g=a(1666),p=a(31949),h=a(17913),f=a(37802),b=a(35223),y=a(86099),E=a(24758),I="insights.shareInfo";function A(e){var t,a,A,w,S,j=i.a.useBasicFetch(v.L.config()),N=(0,f.r)(null).publicInteractiveAttempts,O=Object.assign(Object.assign({},(0,o.wO)((0,o.Hb)(),e.dateRangeAppLinkParams)),(0,s.K)(e.audienceAppLinkParams)),k=i.a.useBasicFetch(p.N.currentUser()),C=i.a.useBasicFetch(e.video&&l.o.getShareLinkByObjectId(e.video.id)),F=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,F.data)),L=i.a.useBasicFetch(k.data&&e.video&&h.u.views(O,e.video.id,k.data.id,N)),B=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)&&g.h.yearGroups(k.data.customerId)),P=C.hasCompleted&&!C.data&&F.hasCompleted&&!F.data,T=C.hasCompleted&&C.data||F.hasCompleted&&F.data&&(!C.data||B.data)&&(!C.data||R.data)&&U.data&&L.data,x=C.data&&B.data&&R.data&&c.R.getIconAndText({entity:e.video,entityTypeId:e.video.typeId,hasStudentExp:!1,isPasswordProtected:C.data.isPasswordProtected,linkExpireDate:C.data.linkExpireDate,privacy:B.data,status:C.data.status,yearGroups:R.data}),V=n.useMemo((function(){var e;return null===(e=L.data)||void 0===e?void 0:e.data.reduce((function(e,t){return t.count+e}),0)}),[L.data]),_=(null===(A=F.data)||void 0===A?void 0:A.dateCreated)||(null===(w=C.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:!!C.data,maxAvatars:4,shareLinkText:null==x?void 0:x.text}),"·",n.createElement("p",{className:"mb-0"},(0,r.WU)(_)),!!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,y.YK)(e.video),svgName:b.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),s=a(20354),o=a(75896),l=a(51870),c=a(50916),d=a(84621),u=a(98551),m=a(35223),v=r.T.encloseNamespace("shared.insightStudentsNotWatched");function g(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 p=r.T.encloseNamespace("shared.insightStudentsWatched");function h(e){return n.createElement(d.L,{title:p("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:p("studentsDisplay"),appLink:e.heatmapAppLink,appLinkText:p("viewAll"),anonymiseUsers:e.anonymiseUsers}))}var f=a(5255),b=a(26025),y=a(26136),E=a(74901),I=a(40003),A=a(30439),w=a(83345),S=a(38143),j=a(4594),N=a(16714),O=a(39151),k=a(31949),C=a(17913),F=a(39902),U=a(91286),L=a(93322),B=a(22902),R=a(79612),P=a(37802),T=a(31908),x=a(99742),V=a(88630),_=a(53936),M=a(53214),q=a(10447),D=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),Q=a(97291);function Y(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)||G(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function G(e,t){if(e){if("string"==typeof e)return $(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,p,H=(v=(0,i.D)(S.g.ANONYMISE_USERS),p=1,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,s,o=[],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)&&(o.push(n.value),o.length!==t);l=!0);}catch(e){c=!0,r=e}finally{try{if(!l&&null!=a.return&&(s=a.return(),Object(s)!==s))return}finally{if(c)throw r}}return o}}(v,p)||G(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.")}())[0];(0,L.F)();var $=(0,P.r)(null),X=$.hasClassrooms,Z=$.hasShareFlowV2,ee=(0,B.T)().hasPermissions,te=(0,P.r)(null).publicInteractiveAttempts,ae=s.a.useBasicFetch(k.N.currentUser()),ne=s.a.useBasicFetch(O.L.config()),re=T.M.getVideoRequest(e.videoId,e.typeId),ie=s.a.useBasicFetch(re),se=b.B.getAudienceAppLinkParams(),oe=b.B.getDateRangeAppLinkParams(),le=Object.assign(Object.assign({},(0,I.wO)((0,I.Hb)(),oe)),(0,E.K)(se));(0,R.M)({title:ie.data?J("pageTitle",{video:null===(t=ie.data)||void 0===t?void 0:t.name}):null}),(0,U.v)(ie);var ce=s.a.useBasicFetch(ae.data&&C.u.aggregateEngagement(e.videoId,le,ae.data.id,te)),de=1===(null===(a=se.classrooms)||void 0===a?void 0:a.length)&&!(null===(r=se.classroomGroups)||void 0===r?void 0:r.length),ue=s.a.useBasicFetch(de&&V.F.getClassroomStudents(o.m.first(se.classrooms))),me=(0,F.f)((null===(d=ce.data)||void 0===d?void 0:d.userIds)||[],(function(e){return A.o.getRecipientsById(e,ae.data.customerId)})),ve=s.a.useBasicFetch(ae.data&&C.u.views(le,e.videoId,ae.data.id,te)),ge=(0,f.Y)(e.shareId),pe=!!e.shareId;function he(){var e,t,a,n,r;if(!(null===(e=ce.data)||void 0===e?void 0:e.userIds)&&!(null===(t=ce.data)||void 0===t?void 0:t.sessionIds))return[];var i=null!==(a=me.itemsArr)&&void 0!==a?a:[],s=(null===(r=null===(n=ce.data)||void 0===n?void 0:n.sessionIds)||void 0===r?void 0:r.map((function(e){return(0,y.jP)(e,ge)})))||[];return[].concat(Y(i),Y(s))}var fe=ae.data&&ne.data&&ie.data&&ce.data&&(!de||ue.data),be=Object.assign(Object.assign(Object.assign({},se),oe),{shareId:e.shareId}),ye=function(e,t,a){return{heatmapAppLink:{application:Q.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,be);return n.createElement("div",{className:"px-3"},n.createElement(_.j,{video:ie.data,dateRangeAppLinkParams:oe,tabs:function(){var e,t,a;return(null===(e=ie.data)||void 0===e?void 0:e.typeId)===j.E.Clip?(0,q.$o)(null===(t=ie.data)||void 0===t?void 0:t.id,"insights",be):(0,q.$6)(null===(a=ie.data)||void 0===a?void 0:a.id,"insights",be)}(),hasAnalytics:ee(N.C.ViewCustomerAnalytics),analyticsWebUrl:null===(u=ne.data)||void 0===u?void 0:u.analyticsWebUrl,hasShareFlowV2:Z,shareId:e.shareId}),n.createElement(D.R,{audienceAppLinkParams:se,dateRangeAppLinkParams:oe,video:ie.data}),!fe&&n.createElement(W,null),fe&&n.createElement(M.u,{video:ie.data,hasShared:pe,hasShareFlowV2:Z,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,": ",he().length,ue.data?"/".concat(ue.data.data.length):"")),n.createElement("div",{className:"row g-3"},de&&n.createElement("div",{className:"col-12 col-md"},n.createElement(g,{students:ue.data.data,watchedIds:ce.data.userIds,imageCdnUrl:ne.data.imageCdnUrl,heatmapAppLink:ye.heatmapAppLink,imageUrl:x.W.Insights.AVATAR,anonymiseUsers:H})),n.createElement("div",{className:"col-12 col-md"},n.createElement(h,{students:he(),imageCdnUrl:ne.data.imageCdnUrl,heatmapAppLink:ye.heatmapAppLink,imageUrl:x.W.Insights.AVATAR,anonymiseUsers:H})))),n.createElement("section",{className:"mb-5"},n.createElement("h2",{className:"h4"},n.createElement(w.x,{namespace:K,phrase:X?"classEngagement":"engagement"})),n.createElement("div",{className:"row g-3"},n.createElement("div",{className:"col-12 col-md-6"},n.createElement(l.i,{osCount:null===(m=ve.data)||void 0===m?void 0:m.osCount})),n.createElement("div",{className:"col-12 col-md-6"},n.createElement(c.b,{engagement:ce.data,heatmapAppLink:ye.heatmapAppLink}))))))}}}]);
2
- //# sourceMappingURL=549-f06f2dab2b-lite.chunk.js.map