@clickview/lite 0.103.0-rc.0 → 0.103.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/dist/.vite/manifest.json +447 -447
  2. package/dist/bundles.json +1 -1
  3. package/dist/en.json +1 -1
  4. package/dist/scripts/{BXosUOUS.chunk.js → 14z5Gy8L.chunk.js} +2 -2
  5. package/dist/scripts/{BXosUOUS.chunk.js.map → 14z5Gy8L.chunk.js.map} +1 -1
  6. package/dist/scripts/{BqkK_0Jk2.chunk.js → B4AZn1xm2.chunk.js} +2 -2
  7. package/dist/scripts/{BqkK_0Jk2.chunk.js.map → B4AZn1xm2.chunk.js.map} +1 -1
  8. package/dist/scripts/{_wBbQ-0z2.chunk.js → BBndy2td2.chunk.js} +2 -2
  9. package/dist/scripts/{_wBbQ-0z2.chunk.js.map → BBndy2td2.chunk.js.map} +1 -1
  10. package/dist/scripts/{DBdkd4Ag2.chunk.js → BFH_tnSb2.chunk.js} +3 -3
  11. package/dist/scripts/{DBdkd4Ag2.chunk.js.map → BFH_tnSb2.chunk.js.map} +1 -1
  12. package/dist/scripts/{BhgNNQjX.chunk.js → BOQck-Qs.chunk.js} +2 -2
  13. package/dist/scripts/{BhgNNQjX.chunk.js.map → BOQck-Qs.chunk.js.map} +1 -1
  14. package/dist/scripts/{_eRiDJm1.chunk.js → Ba4uGz_V.chunk.js} +2 -2
  15. package/dist/scripts/{_eRiDJm1.chunk.js.map → Ba4uGz_V.chunk.js.map} +1 -1
  16. package/dist/scripts/{Bx6qaXLc.chunk.js → Bdbe2u0R.chunk.js} +2 -2
  17. package/dist/scripts/{Bx6qaXLc.chunk.js.map → Bdbe2u0R.chunk.js.map} +1 -1
  18. package/dist/scripts/{C4CuJJXy2.chunk.js → BeW5XQTb2.chunk.js} +2 -2
  19. package/dist/scripts/{C4CuJJXy2.chunk.js.map → BeW5XQTb2.chunk.js.map} +1 -1
  20. package/dist/scripts/{syYCrnUX.chunk.js → BgoVmaXQ.chunk.js} +2 -2
  21. package/dist/scripts/{syYCrnUX.chunk.js.map → BgoVmaXQ.chunk.js.map} +1 -1
  22. package/dist/scripts/{B5DWwtp0.chunk.js → BjA9XV5y.chunk.js} +2 -2
  23. package/dist/scripts/{B5DWwtp0.chunk.js.map → BjA9XV5y.chunk.js.map} +1 -1
  24. package/dist/scripts/{BYMMqtaN.chunk.js → BqdHoEFM.chunk.js} +2 -2
  25. package/dist/scripts/{BYMMqtaN.chunk.js.map → BqdHoEFM.chunk.js.map} +1 -1
  26. package/dist/scripts/{BIvmcqND2.chunk.js → CCUznsdX2.chunk.js} +2 -2
  27. package/dist/scripts/{BIvmcqND2.chunk.js.map → CCUznsdX2.chunk.js.map} +1 -1
  28. package/dist/scripts/{BsNCh4UD.chunk.js → CFqL2Hm5.chunk.js} +3 -3
  29. package/dist/scripts/{BsNCh4UD.chunk.js.map → CFqL2Hm5.chunk.js.map} +1 -1
  30. package/dist/scripts/{BE8Ze3Fa2.chunk.js → CHmbcl4Y2.chunk.js} +2 -2
  31. package/dist/scripts/{BE8Ze3Fa2.chunk.js.map → CHmbcl4Y2.chunk.js.map} +1 -1
  32. package/dist/scripts/{Dp8z_udC.chunk.js → CIzlhCeS.chunk.js} +2 -2
  33. package/dist/scripts/{Dp8z_udC.chunk.js.map → CIzlhCeS.chunk.js.map} +1 -1
  34. package/dist/scripts/{CO8EIpI8.chunk.js → CXUrMkZu.chunk.js} +2 -2
  35. package/dist/scripts/{CO8EIpI8.chunk.js.map → CXUrMkZu.chunk.js.map} +1 -1
  36. package/dist/scripts/{DLqG-wwP.chunk.js → CYrelpYt.chunk.js} +2 -2
  37. package/dist/scripts/{DLqG-wwP.chunk.js.map → CYrelpYt.chunk.js.map} +1 -1
  38. package/dist/scripts/{wmwWqIeA.chunk.js → CfrfHGSh.chunk.js} +2 -2
  39. package/dist/scripts/{wmwWqIeA.chunk.js.map → CfrfHGSh.chunk.js.map} +1 -1
  40. package/dist/scripts/{B5M-3wpn.chunk.js → CjwT65ug.chunk.js} +2 -2
  41. package/dist/scripts/{B5M-3wpn.chunk.js.map → CjwT65ug.chunk.js.map} +1 -1
  42. package/dist/scripts/{B-aaIChO2.chunk.js → CsCjBSq62.chunk.js} +2 -2
  43. package/dist/scripts/{B-aaIChO2.chunk.js.map → CsCjBSq62.chunk.js.map} +1 -1
  44. package/dist/scripts/{ygwO7HPs2.chunk.js → DIaT_eGy2.chunk.js} +2 -2
  45. package/dist/scripts/{ygwO7HPs2.chunk.js.map → DIaT_eGy2.chunk.js.map} +1 -1
  46. package/dist/scripts/{DXRsxBJw.chunk.js → DTliAJ8L.chunk.js} +2 -2
  47. package/dist/scripts/{DXRsxBJw.chunk.js.map → DTliAJ8L.chunk.js.map} +1 -1
  48. package/dist/scripts/{DE5jvfAx2.chunk.js → D_t70KgV2.chunk.js} +2 -2
  49. package/dist/scripts/{DE5jvfAx2.chunk.js.map → D_t70KgV2.chunk.js.map} +1 -1
  50. package/dist/scripts/{Dc01PBv1.chunk.js → Dn2EPvQj.chunk.js} +2 -2
  51. package/dist/scripts/{Dc01PBv1.chunk.js.map → Dn2EPvQj.chunk.js.map} +1 -1
  52. package/dist/scripts/{RuVwpX36.chunk.js → Drh1bb9z.chunk.js} +2 -2
  53. package/dist/scripts/{RuVwpX36.chunk.js.map → Drh1bb9z.chunk.js.map} +1 -1
  54. package/dist/scripts/{YzhKditE.chunk.js → ESLgHTNq.chunk.js} +2 -2
  55. package/dist/scripts/{YzhKditE.chunk.js.map → ESLgHTNq.chunk.js.map} +1 -1
  56. package/dist/scripts/{DfSzsD3P.chunk.js → FysETOFv.chunk.js} +2 -2
  57. package/dist/scripts/{DfSzsD3P.chunk.js.map → FysETOFv.chunk.js.map} +1 -1
  58. package/dist/scripts/QVwuOts3.chunk.js +12 -0
  59. package/dist/scripts/QVwuOts3.chunk.js.map +1 -0
  60. package/dist/scripts/{OmYpHs7g.chunk.js → _Cm5O72d.chunk.js} +3 -3
  61. package/dist/scripts/{OmYpHs7g.chunk.js.map → _Cm5O72d.chunk.js.map} +1 -1
  62. package/dist/scripts/{app-BzCWmnrr.js → app-BHlllGhO.js} +4 -4
  63. package/dist/scripts/{app-BzCWmnrr.js.map → app-BHlllGhO.js.map} +1 -1
  64. package/dist/scripts/{C46080Xd.chunk.js → dxqgnrOi.chunk.js} +2 -2
  65. package/dist/scripts/{C46080Xd.chunk.js.map → dxqgnrOi.chunk.js.map} +1 -1
  66. package/dist/scripts/{BCTM3KG42.chunk.js → kLCNzxrH2.chunk.js} +2 -2
  67. package/dist/scripts/{BCTM3KG42.chunk.js.map → kLCNzxrH2.chunk.js.map} +1 -1
  68. package/dist/scripts/{CfVIZBcI2.chunk.js → wpRpI9h02.chunk.js} +2 -2
  69. package/dist/scripts/{CfVIZBcI2.chunk.js.map → wpRpI9h02.chunk.js.map} +1 -1
  70. package/package.json +1 -1
  71. package/dist/scripts/QrUfkwZX.chunk.js +0 -12
  72. package/dist/scripts/QrUfkwZX.chunk.js.map +0 -1
@@ -1,2 +1,2 @@
1
- import{p as e}from"./DXRsxBJw.chunk.js";var t=e.getPlugin(`plugin`),n=10,r=class extends t{constructor(e,t){if(super(e),t.startTime===void 0)throw Error(`Invalid clip start`);if(t.endTime===void 0)throw Error(`Invalid clip end`);if(t.startTime>t.endTime)throw Error(`Clip start cannot be greater than clip end`);this._clipStart=parseFloat(t.startTime.toPrecision(4)),this._clipEnd=parseFloat(t.endTime.toPrecision(4)),this.playerEndedFn=this.player.ended.bind(e),this.playerDurationFn=this.player.duration.bind(e),this.playerCurrentTimeFn=this.player.currentTime.bind(e),this.playerbufferedFn=this.player.buffered.bind(e),this.player.ended=this.ended.bind(this),this.player.duration=this.duration.bind(this),this.player.currentTime=this.currentTime.bind(this),this.player.buffered=this.buffered.bind(this),this.initialize(),this.player.ready(()=>{this.player.trigger(`durationchange`)})}get clipStart(){let e=this.playerDurationFn();return this._clipStart>e?e:this._clipStart}get clipEnd(){let e=this.playerDurationFn();return e<=0?this._clipEnd:this._clipEnd>e?e:this._clipEnd}dispose(){this.player.off(`timeupdate`,this.onTimeUpdate),this.player.off(`play`,this.onPlay),this.player.ended=this.playerEndedFn,this.player.duration=this.playerDurationFn,this.player.currentTime=this.playerCurrentTimeFn,this.player.buffered=this.playerbufferedFn,this.player.trigger(`durationchange`),super.dispose()}initialize(){this.onTimeUpdate=this.onTimeUpdate.bind(this),this.onPlay=this.onPlay.bind(this),this.player.on(`timeupdate`,this.onTimeUpdate),this.player.on(`play`,this.onPlay)}onPlay(){this._isEnded&&this.player.currentTime(0)}onTimeUpdate(){let e=this.getCurrentTime(!1);if(e>this.clipEnd){this._isEnded||=(this.player.pause(),this.player.trigger(`ended`),!0);return}this._isEnded=!1,e<this.clipStart-n&&this.playerCurrentTimeFn(this.clipStart,!0)}ended(){return this.getCurrentTime(!1)>this.clipEnd}duration(e){return e&&e>0&&(this.playerDurationFn()?console.info(`The duration of the player has already been set. This is a no-op.`):this.playerDurationFn(e)),this.clipEnd-this.clipStart}currentTime(e,...t){if(typeof e!=`number`)return this.getCurrentTime(!0);let n=e+this.clipStart;this.playerCurrentTimeFn(n,t)}getCurrentTime(e){let t=this.playerCurrentTimeFn(),n=0;return t>=this.clipStart&&(n=t-this.clipStart),this.player.getCache().currentTime=n,e?n:t}buffered(){let t=this.playerbufferedFn(),n=[];for(let e=0;e<t.length;e++)n[e]=[Math.max(0,t.start(e)-this.clipStart),Math.min(Math.max(0,t.end(e)-this.clipStart),this.player.duration())];return e.createTimeRanges(n)}};e.registerPlugin(`clipPlugin`,r);
2
- //# sourceMappingURL=BXosUOUS.chunk.js.map
1
+ import{p as e}from"./DTliAJ8L.chunk.js";var t=e.getPlugin(`plugin`),n=10,r=class extends t{constructor(e,t){if(super(e),t.startTime===void 0)throw Error(`Invalid clip start`);if(t.endTime===void 0)throw Error(`Invalid clip end`);if(t.startTime>t.endTime)throw Error(`Clip start cannot be greater than clip end`);this._clipStart=parseFloat(t.startTime.toPrecision(4)),this._clipEnd=parseFloat(t.endTime.toPrecision(4)),this.playerEndedFn=this.player.ended.bind(e),this.playerDurationFn=this.player.duration.bind(e),this.playerCurrentTimeFn=this.player.currentTime.bind(e),this.playerbufferedFn=this.player.buffered.bind(e),this.player.ended=this.ended.bind(this),this.player.duration=this.duration.bind(this),this.player.currentTime=this.currentTime.bind(this),this.player.buffered=this.buffered.bind(this),this.initialize(),this.player.ready(()=>{this.player.trigger(`durationchange`)})}get clipStart(){let e=this.playerDurationFn();return this._clipStart>e?e:this._clipStart}get clipEnd(){let e=this.playerDurationFn();return e<=0?this._clipEnd:this._clipEnd>e?e:this._clipEnd}dispose(){this.player.off(`timeupdate`,this.onTimeUpdate),this.player.off(`play`,this.onPlay),this.player.ended=this.playerEndedFn,this.player.duration=this.playerDurationFn,this.player.currentTime=this.playerCurrentTimeFn,this.player.buffered=this.playerbufferedFn,this.player.trigger(`durationchange`),super.dispose()}initialize(){this.onTimeUpdate=this.onTimeUpdate.bind(this),this.onPlay=this.onPlay.bind(this),this.player.on(`timeupdate`,this.onTimeUpdate),this.player.on(`play`,this.onPlay)}onPlay(){this._isEnded&&this.player.currentTime(0)}onTimeUpdate(){let e=this.getCurrentTime(!1);if(e>this.clipEnd){this._isEnded||=(this.player.pause(),this.player.trigger(`ended`),!0);return}this._isEnded=!1,e<this.clipStart-n&&this.playerCurrentTimeFn(this.clipStart,!0)}ended(){return this.getCurrentTime(!1)>this.clipEnd}duration(e){return e&&e>0&&(this.playerDurationFn()?console.info(`The duration of the player has already been set. This is a no-op.`):this.playerDurationFn(e)),this.clipEnd-this.clipStart}currentTime(e,...t){if(typeof e!=`number`)return this.getCurrentTime(!0);let n=e+this.clipStart;this.playerCurrentTimeFn(n,t)}getCurrentTime(e){let t=this.playerCurrentTimeFn(),n=0;return t>=this.clipStart&&(n=t-this.clipStart),this.player.getCache().currentTime=n,e?n:t}buffered(){let t=this.playerbufferedFn(),n=[];for(let e=0;e<t.length;e++)n[e]=[Math.max(0,t.start(e)-this.clipStart),Math.min(Math.max(0,t.end(e)-this.clipStart),this.player.duration())];return e.createTimeRanges(n)}};e.registerPlugin(`clipPlugin`,r);
2
+ //# sourceMappingURL=14z5Gy8L.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BXosUOUS.chunk.js","names":[],"sources":["../../../player/src/plugins/clip-plugin/clip-plugin.ts"],"sourcesContent":["import videojs, { VideoJsPlayer } from 'video.js';\n\nconst Plugin = videojs.getPlugin('plugin');\n\n/**\n * TODO:\n * The value below is set quite high to compensate for the ridiculous amount of drift that can occur\n * when casting to a Vivi device. This is a temporary fix until we can get Vivi to fix the issue on their end.\n */\nconst CLIP_SEEK_DRIFT_IN_SECONDS = 10;\n\nexport interface ClipPluginOptions {\n startTime: number;\n endTime: number;\n}\n\nexport class ClipPlugin extends Plugin {\n private _clipStart: number;\n private _clipEnd: number;\n private _isEnded: boolean;\n\n private playerEndedFn: () => boolean;\n private playerDurationFn: (seconds?: number) => number;\n private playerCurrentTimeFn: (seconds?: number, ...args: any[]) => number;\n private playerbufferedFn: () => TimeRanges;\n\n constructor(player: VideoJsPlayer, options: ClipPluginOptions) {\n super(player);\n\n // validate clip start/end\n if (options.startTime === undefined) {\n throw Error('Invalid clip start');\n }\n\n if (options.endTime === undefined) {\n throw Error('Invalid clip end');\n }\n\n if (options.startTime > options.endTime) {\n throw Error('Clip start cannot be greater than clip end');\n }\n\n this._clipStart = parseFloat(options.startTime.toPrecision(4));\n this._clipEnd = parseFloat(options.endTime.toPrecision(4));\n\n // save old player functions\n this.playerEndedFn = this.player.ended.bind(player);\n this.playerDurationFn = this.player.duration.bind(player);\n this.playerCurrentTimeFn = this.player.currentTime.bind(player);\n this.playerbufferedFn = this.player.buffered.bind(player);\n\n // overwrite the base player function with our new fancy ones\n this.player.ended = this.ended.bind(this);\n this.player.duration = this.duration.bind(this);\n this.player.currentTime = this.currentTime.bind(this);\n this.player.buffered = this.buffered.bind(this);\n\n this.initialize();\n\n this.player.ready(() => {\n // manually trigger a duation change since we have a new duration from the clip\n this.player.trigger('durationchange');\n });\n }\n\n /**\n * Ensure that the clip start is not greater than the total video duration\n */\n public get clipStart(): number {\n const videoDuration = this.playerDurationFn();\n\n if (this._clipStart > videoDuration)\n return videoDuration;\n\n return this._clipStart;\n }\n\n /**\n * Ensure that the clip end is not greater than the total video duration\n */\n public get clipEnd(): number {\n const videoDuration = this.playerDurationFn();\n\n // The video duration may not have been determined yet, so we can't do\n // any clamping right now..\n if (videoDuration <= 0)\n return this._clipEnd;\n\n // Clamp the clip end to the video duration\n if (this._clipEnd > videoDuration)\n return videoDuration;\n\n return this._clipEnd;\n }\n\n public dispose(): void {\n this.player.off('timeupdate', this.onTimeUpdate);\n this.player.off('play', this.onPlay);\n\n // put the original functions back\n this.player.ended = this.playerEndedFn;\n this.player.duration = this.playerDurationFn;\n this.player.currentTime = this.playerCurrentTimeFn;\n this.player.buffered = this.playerbufferedFn;\n\n // trigger another durationchange since the duration will now go back to the original\n this.player.trigger('durationchange');\n\n super.dispose();\n }\n\n private initialize(): void {\n this.onTimeUpdate = this.onTimeUpdate.bind(this);\n this.onPlay = this.onPlay.bind(this);\n\n this.player.on('timeupdate', this.onTimeUpdate);\n this.player.on('play', this.onPlay);\n }\n\n private onPlay(): void {\n // if we try to play but the clip has ended, go back to the start\n if (this._isEnded) {\n this.player.currentTime(0);\n }\n }\n\n private onTimeUpdate(): void {\n const currentTime = this.getCurrentTime(false);\n\n // check ended\n if (currentTime > this.clipEnd) {\n if (!this._isEnded) {\n this.player.pause();\n this.player.trigger('ended');\n \n this._isEnded = true;\n }\n\n return;\n }\n\n this._isEnded = false;\n\n // ensure video is playing from the correct clip start (taking into account some seek drift)\n if (currentTime < (this.clipStart - CLIP_SEEK_DRIFT_IN_SECONDS)) {\n this.playerCurrentTimeFn(this.clipStart, true);\n }\n }\n\n private ended(): boolean {\n return this.getCurrentTime(false) > this.clipEnd;\n }\n\n private duration(seconds?: number): number {\n // set the underlying player duration (and cache) if it hasn't been set already\n if (seconds && seconds > 0) {\n const existingDuration = this.playerDurationFn();\n\n if (existingDuration)\n console.info('The duration of the player has already been set. This is a no-op.');\n else\n this.playerDurationFn(seconds);\n }\n \n return this.clipEnd - this.clipStart;\n }\n\n private currentTime(seconds?: number, ...args: any[]): number {\n if (typeof seconds !== 'number') {\n return this.getCurrentTime(true);\n }\n\n const correctedSeconds = seconds + this.clipStart;\n\n this.playerCurrentTimeFn(correctedSeconds, args);\n\n return;\n }\n\n /**\n * Gets the current time of the video and updates the videojs currentTime cache\n * @param clipTime Set to true to return the current time in the context of a clip\n */\n private getCurrentTime(clipTime: boolean): number {\n const playerCurrentTime = this.playerCurrentTimeFn();\n let time = 0;\n\n if (playerCurrentTime >= this.clipStart) {\n time = playerCurrentTime - this.clipStart;\n }\n\n // ensure that the videojs currentTime cache reflects our fake time\n this.player.getCache().currentTime = time;\n\n if (clipTime)\n return time;\n\n return playerCurrentTime;\n }\n\n private buffered(): TimeRanges {\n const buff = this.playerbufferedFn();\n const ranges = [];\n\n for (let i = 0; i < buff.length; i++) {\n ranges[i] = [\n Math.max(0, buff.start(i) - this.clipStart),\n Math.min(Math.max(0, buff.end(i) - this.clipStart), this.player.duration())\n ];\n }\n\n return videojs.createTimeRanges(ranges as any);\n }\n}\n\nvideojs.registerPlugin('clipPlugin', ClipPlugin);\n\ndeclare module 'video.js' {\n export interface VideoJsPlayer {\n clipPlugin(options: ClipPluginOptions): void;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"14z5Gy8L.chunk.js","names":[],"sources":["../../../player/src/plugins/clip-plugin/clip-plugin.ts"],"sourcesContent":["import videojs, { VideoJsPlayer } from 'video.js';\n\nconst Plugin = videojs.getPlugin('plugin');\n\n/**\n * TODO:\n * The value below is set quite high to compensate for the ridiculous amount of drift that can occur\n * when casting to a Vivi device. This is a temporary fix until we can get Vivi to fix the issue on their end.\n */\nconst CLIP_SEEK_DRIFT_IN_SECONDS = 10;\n\nexport interface ClipPluginOptions {\n startTime: number;\n endTime: number;\n}\n\nexport class ClipPlugin extends Plugin {\n private _clipStart: number;\n private _clipEnd: number;\n private _isEnded: boolean;\n\n private playerEndedFn: () => boolean;\n private playerDurationFn: (seconds?: number) => number;\n private playerCurrentTimeFn: (seconds?: number, ...args: any[]) => number;\n private playerbufferedFn: () => TimeRanges;\n\n constructor(player: VideoJsPlayer, options: ClipPluginOptions) {\n super(player);\n\n // validate clip start/end\n if (options.startTime === undefined) {\n throw Error('Invalid clip start');\n }\n\n if (options.endTime === undefined) {\n throw Error('Invalid clip end');\n }\n\n if (options.startTime > options.endTime) {\n throw Error('Clip start cannot be greater than clip end');\n }\n\n this._clipStart = parseFloat(options.startTime.toPrecision(4));\n this._clipEnd = parseFloat(options.endTime.toPrecision(4));\n\n // save old player functions\n this.playerEndedFn = this.player.ended.bind(player);\n this.playerDurationFn = this.player.duration.bind(player);\n this.playerCurrentTimeFn = this.player.currentTime.bind(player);\n this.playerbufferedFn = this.player.buffered.bind(player);\n\n // overwrite the base player function with our new fancy ones\n this.player.ended = this.ended.bind(this);\n this.player.duration = this.duration.bind(this);\n this.player.currentTime = this.currentTime.bind(this);\n this.player.buffered = this.buffered.bind(this);\n\n this.initialize();\n\n this.player.ready(() => {\n // manually trigger a duation change since we have a new duration from the clip\n this.player.trigger('durationchange');\n });\n }\n\n /**\n * Ensure that the clip start is not greater than the total video duration\n */\n public get clipStart(): number {\n const videoDuration = this.playerDurationFn();\n\n if (this._clipStart > videoDuration)\n return videoDuration;\n\n return this._clipStart;\n }\n\n /**\n * Ensure that the clip end is not greater than the total video duration\n */\n public get clipEnd(): number {\n const videoDuration = this.playerDurationFn();\n\n // The video duration may not have been determined yet, so we can't do\n // any clamping right now..\n if (videoDuration <= 0)\n return this._clipEnd;\n\n // Clamp the clip end to the video duration\n if (this._clipEnd > videoDuration)\n return videoDuration;\n\n return this._clipEnd;\n }\n\n public dispose(): void {\n this.player.off('timeupdate', this.onTimeUpdate);\n this.player.off('play', this.onPlay);\n\n // put the original functions back\n this.player.ended = this.playerEndedFn;\n this.player.duration = this.playerDurationFn;\n this.player.currentTime = this.playerCurrentTimeFn;\n this.player.buffered = this.playerbufferedFn;\n\n // trigger another durationchange since the duration will now go back to the original\n this.player.trigger('durationchange');\n\n super.dispose();\n }\n\n private initialize(): void {\n this.onTimeUpdate = this.onTimeUpdate.bind(this);\n this.onPlay = this.onPlay.bind(this);\n\n this.player.on('timeupdate', this.onTimeUpdate);\n this.player.on('play', this.onPlay);\n }\n\n private onPlay(): void {\n // if we try to play but the clip has ended, go back to the start\n if (this._isEnded) {\n this.player.currentTime(0);\n }\n }\n\n private onTimeUpdate(): void {\n const currentTime = this.getCurrentTime(false);\n\n // check ended\n if (currentTime > this.clipEnd) {\n if (!this._isEnded) {\n this.player.pause();\n this.player.trigger('ended');\n \n this._isEnded = true;\n }\n\n return;\n }\n\n this._isEnded = false;\n\n // ensure video is playing from the correct clip start (taking into account some seek drift)\n if (currentTime < (this.clipStart - CLIP_SEEK_DRIFT_IN_SECONDS)) {\n this.playerCurrentTimeFn(this.clipStart, true);\n }\n }\n\n private ended(): boolean {\n return this.getCurrentTime(false) > this.clipEnd;\n }\n\n private duration(seconds?: number): number {\n // set the underlying player duration (and cache) if it hasn't been set already\n if (seconds && seconds > 0) {\n const existingDuration = this.playerDurationFn();\n\n if (existingDuration)\n console.info('The duration of the player has already been set. This is a no-op.');\n else\n this.playerDurationFn(seconds);\n }\n \n return this.clipEnd - this.clipStart;\n }\n\n private currentTime(seconds?: number, ...args: any[]): number {\n if (typeof seconds !== 'number') {\n return this.getCurrentTime(true);\n }\n\n const correctedSeconds = seconds + this.clipStart;\n\n this.playerCurrentTimeFn(correctedSeconds, args);\n\n return;\n }\n\n /**\n * Gets the current time of the video and updates the videojs currentTime cache\n * @param clipTime Set to true to return the current time in the context of a clip\n */\n private getCurrentTime(clipTime: boolean): number {\n const playerCurrentTime = this.playerCurrentTimeFn();\n let time = 0;\n\n if (playerCurrentTime >= this.clipStart) {\n time = playerCurrentTime - this.clipStart;\n }\n\n // ensure that the videojs currentTime cache reflects our fake time\n this.player.getCache().currentTime = time;\n\n if (clipTime)\n return time;\n\n return playerCurrentTime;\n }\n\n private buffered(): TimeRanges {\n const buff = this.playerbufferedFn();\n const ranges = [];\n\n for (let i = 0; i < buff.length; i++) {\n ranges[i] = [\n Math.max(0, buff.start(i) - this.clipStart),\n Math.min(Math.max(0, buff.end(i) - this.clipStart), this.player.duration())\n ];\n }\n\n return videojs.createTimeRanges(ranges as any);\n }\n}\n\nvideojs.registerPlugin('clipPlugin', ClipPlugin);\n\ndeclare module 'video.js' {\n export interface VideoJsPlayer {\n clipPlugin(options: ClipPluginOptions): void;\n }\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{o as e}from"./DAXXjFlN.chunk.js";import{y as t}from"./BftnFbcr.chunk.js";import{n}from"./B785hxeE.chunk.js";import{t as r}from"./CQyJ7YGa.chunk.js";import{t as i}from"./C2w0pmFW.chunk.js";import{t as a}from"./wrLrTezN.chunk.js";import{t as o}from"./BXTI9cmX.chunk.js";import{u as s}from"./BX0wDJmp.chunk.js";import{t as c}from"./oPIkfKWW2.chunk.js";import{t as l}from"./e1lz2ERJ2.chunk.js";import{t as u}from"./CcDvlSWl2.chunk.js";import{t as d}from"./xwiwWcv12.chunk.js";import{t as f}from"./CVHQXNzi2.chunk.js";import{t as p}from"./YakGe6vv2.chunk.js";import{t as m}from"./8U-YTgZd.chunk.js";import{t as h}from"./DdsRCMkN.chunk.js";import{t as g}from"./Kx-r9MXT.chunk.js";import{t as _}from"./CgCqPbjJ.chunk.js";import{t as v}from"./D_gWf2lC.chunk.js";import{t as y}from"./PgzMrOyM.chunk.js";import{t as b}from"./C5rBgkQH.chunk.js";import{t as x}from"./A8xLZrSw.chunk.js";import{n as S,t as C}from"./BGhJ8TEx.chunk.js";import{t as w}from"./BQKcAczf.chunk.js";import{n as T}from"./CpFtf-tI2.chunk.js";import{t as E}from"./Ch3YS7hL2.chunk.js";import{a as D,c as O,l as k,o as A,r as j}from"./B3voZNVW.chunk.js";import{t as M}from"./BghRSiDw2.chunk.js";import{t as N}from"./1pA_p8rV2.chunk.js";import{t as P}from"./j_TnVVKr.chunk.js";import{t as F}from"./D0n6BTgT.chunk.js";import{t as I}from"./BQfF8SMc.chunk.js";import{i as L,n as R,r as z}from"./B0mq38Yh.chunk.js";import{i as B,s as V}from"./SxYliR8q.chunk.js";import{n as H}from"./BLdZUAm2.chunk.js";import{t as ee}from"./Dc01PBv1.chunk.js";import{n as U,r as W,t as G}from"./YE36f2ev.chunk.js";import{o as K}from"./dEKu6tol.chunk.js";import{a as te,c as q,i as ne,n as re,o as ie,s as ae,t as oe}from"./DMgbW0GF2.chunk.js";import{t as se}from"./DMWQUtne2.chunk.js";import{t as ce}from"./DBfnO4pz2.chunk.js";var J=e(i());function Y(e){let{getGatedPermission:r,isLoaded:i}=w();J.useEffect(()=>{i&&r(n.ViewInsights)===`hard-gate`&&t.trigger({application:o.MY_SHARES,action:h.MyShares.HARD_GATE_INSIGHTS,args:[e]})},[i])}function le(e){let[t]=b(g.HIDE_STAFF_RESULTS),n=s(E.shareHeatMap(e)),r=W(e),i=n.data?.map(e=>e.userId).filter(e=>!!e)||[],a=N(i,c.getById);function o(e){return e.userId?a.items?.[e.userId]||{id:e.userId,deleted:!0}:r.items?.[e.sessionId]||{sessionId:e.sessionId}}let l={...r.items,...a.items};return{engagement:n.data?.filter(e=>{let n=l[e.userId||e.sessionId];return n&&n.userType===1&&t?null:e}).filter(e=>!!e),users:n.data?.map(e=>({...o(e),percentage:e.engagementRate})),hasCompleted:n.hasCompleted&&r.hasCompleted&&(!i?.length||a.hasCompleted)}}var X=a(),ue=r.encloseNamespace(`shared.insightsHeatmap`);function Z(e){let[t]=b(_.ANONYMISE_USERS),[r]=b(_.HIDE_STAFF_RESULTS);I();let{hasPermissions:i,getGatedPermission:a}=w(),o=s(M.getShare(e.shareId)),u=k.getClassroomIdFromShare(o.data),m=s(u&&l.getClassroom(u)),h=U(e.shareId),g=s(o.data&&p.getVideoRequest(o.data.objectId,o.data.objectTypeId)),y=s(v.config()),T=s(c.currentUser()),D=s(T.data&&d.yearGroups(T.data.customerId)),O=s(p.isInteractive(g.data)&&P.pendingReviews({interactives:[g.data].map(t=>({interactiveId:t.interactiveId,metadataId:t.id,shareId:e.shareId})),filters:{currentCustomerId:T.data.customerId,currentUserId:T.data.id}})).data?.[0]?.pendingReviewCount>0,A=s(E.shareHeatMapAggregation(e.shareId)),{users:j,engagement:N,hasCompleted:B}=le(e.shareId),V=s(E.shareAggregation(e.shareId,`year_group`)),H=s(o.data?.objectId&&C.createViewKey(o.data.objectId,S.MasterObject));x({title:g.data?ue(`pageTitle`,{video:g.data?.name}):null}),F([o,g]),Y(e.shareId);let W=o.hasCompleted&&g.hasCompleted&&y.hasCompleted&&A.hasCompleted&&V.hasCompleted&&H.hasCompleted&&D.hasCompleted;function G(){return o.data?.objectTypeId===f.Interactive?R(o.data,`heatmap`):z(o.data,`heatmap`)}return(0,X.jsxs)(`div`,{className:`px-3`,children:[(0,X.jsx)(L,{video:g.data,tabs:G(),hasSchoolAnalytics:i(n.ViewSchoolAnalytics),analyticsWebUrl:y.data?.analyticsWebUrl,share:o.data,yearGroups:D.data,classroom:m.data,markingRequired:O,hasData:!!N?.length,viewInsightsGatedPermission:a(n.ViewInsights)}),(0,X.jsx)(ee,{aggregateEngagement:A.data,individualEngagement:N,yearGroups:V.data,config:y.data,users:j,viewKey:H.data,hasDataLoaded:W,tableDataLoaded:B,anonymiseUsers:t,classroomStudents:h.items,hideStaffResults:r})]})}function de(e,t){return{resultsAppLink:A(e,null,t),questionsAppLink:D(e,null,t),heatmapAppLink:j(e,null,t)}}var fe=r.encloseNamespace(`insights.interactiveInsightsOverviewView`);function pe(e){let[t]=b(g.ANONYMISE_USERS);I();let{hasPermissions:r,getGatedPermission:i}=w(),a=s(v.config()),o=s(c.currentUser()),u=s(o.data&&d.yearGroups(o.data.customerId)),f=s(M.getShare(e.shareId)),p=k.getClassroomIdFromShare(f.data),h=s(p&&l.getClassroom(p)),_=U(e.shareId),y=s(f.data?.objectId&&m.interactiveMetadata(f.data.objectId)),S=s(y.data?.interactiveId&&m.interactive(y.data.interactiveId)),C=G(e.shareId),T=s(E.shareHeatMap(e.shareId)),D=s(E.shareHeatMapAggregation(e.shareId)),O=s(E.shareAggregation(e.shareId,`os_name`));x({title:y.data?fe(`pageTitle`,{video:y.data?.name}):null}),F([f,S,y]),Y(e.shareId);let A=a.hasCompleted&&y.hasCompleted&&S.data&&D.hasCompleted&&T.hasCompleted&&O.hasCompleted&&C.hasCompleted&&u.hasCompleted,j=de(f.data),N=A&&K(S.data,C.data,H),P=N&&N.markingRequired.length>0;return(0,X.jsxs)(`div`,{className:`px-3`,children:[(0,X.jsx)(L,{video:y.data,tabs:R(f.data,`insights`),hasSchoolAnalytics:r(n.ViewSchoolAnalytics),analyticsWebUrl:a.data?.analyticsWebUrl,share:f.data,yearGroups:u.data,classroom:h.data,markingRequired:P,hasData:!!C.data?.students.length,viewInsightsGatedPermission:i(n.ViewInsights)}),(0,X.jsx)(oe,{aggregateEngagement:D.data,individualEngagement:T.data,interactive:S.data,interactiveMetadata:y.data,interactiveInsightsAppLinks:j,classroomStudents:_.items,results:C.data,osCount:O.data,config:a.data,anonymiseUsers:t,hasDataLoaded:A,share:f.data})]})}var me=r.encloseNamespace(`shared.interactiveInsightsQuestionsView`);function he(e){let[t]=b(g.ANONYMISE_USERS);I();let{hasPermissions:r,getGatedPermission:i}=w(),a=s(c.currentUser()),o=s(v.config()),u=s(a.data&&d.yearGroups(a.data.customerId)),f=s(M.getShare(e.shareId)),p=k.getClassroomIdFromShare(f.data),h=s(p&&l.getClassroom(p)),_=s(f.data?.objectId&&m.interactiveMetadata(f.data?.objectId)),y=s(_.data?.interactiveId&&m.interactive(_.data.interactiveId)),S=G(e.shareId);x({title:_.data?me(`pageTitle`,{video:_.data?.name}):null}),F([f,y,_]),Y(e.shareId);let C=y.data&&_.data&&!!S.data&&!!u.data,T=C&&K(y.data,S.data,H),E=T&&T.markingRequired.length>0;return(0,X.jsxs)(`div`,{className:`px-3`,children:[(0,X.jsx)(L,{tabs:R(f.data,`questions`),video:_.data,hasSchoolAnalytics:r(n.ViewSchoolAnalytics),analyticsWebUrl:o.data?.analyticsWebUrl,share:f.data,yearGroups:u.data,classroom:h.data,markingRequired:E,hasData:!!S.data?.students.length,viewInsightsGatedPermission:i(n.ViewInsights)}),(0,X.jsx)(se,{interactive:y.data,interactiveMetadata:_.data,interactionId:e.interactionId,config:o.data,sortBy:e.sortBy,isFetching:!S.hasCompleted||y.isFetching,anonymiseUsers:t,results:S.data,hasDataLoaded:C})]})}var ge=r.encloseNamespace(`insights.interactiveInsightsStudents`);function _e(e){let[r]=b(g.ANONYMISE_USERS),[i]=b(g.HIDE_STAFF_RESULTS),{hasPermissions:a,getGatedPermission:u}=w(),f=s(c.currentUser()),p=s(v.config()),_=s(f.data&&d.yearGroups(f.data.customerId)),y=s(M.getShare(e.shareId)),S=k.getClassroomIdFromShare(y.data),C=s(S&&l.getClassroom(S)),T=s(y.data?.objectId&&m.interactiveMetadata(y.data.objectId)),E=s(T.data?.interactiveId&&m.interactive(T.data.interactiveId)),D=G(e.shareId),O=E.data&&T.data&&!!D.data&&!!_.data,A=O&&K(E.data,D.data,H),j=A&&A.markingRequired.length>0;x({title:T.data?ge(`pageTitle`,{video:T.data?.name}):null}),F([y,E,T]),Y(e.shareId);function N(n,r,i){t.trigger({application:o.MY_SHARES,action:h.MyShares.INTERACTIVE_STUDENT_RESULTS,params:{studentId:n.id,shareId:e.shareId,interactionId:i,sessionId:n.sessionId}})}return(0,X.jsxs)(`div`,{className:`px-3`,children:[(0,X.jsx)(L,{tabs:R(y.data,`results`),video:T.data,hasSchoolAnalytics:a(n.ViewSchoolAnalytics),analyticsWebUrl:p.data?.analyticsWebUrl,share:y.data,yearGroups:_.data,classroom:C.data,markingRequired:j,hasData:!!D.data?.students.length,viewInsightsGatedPermission:u(n.ViewInsights)}),(0,X.jsx)(ce,{interactiveMetadata:T.data,viewStudentResults:N,interactive:E.data,results:D.data,filterBy:e.filterBy,sortBy:e.sortBy,isFetching:D.isFetching,anonymiseUsers:r,hasDataLoaded:O,config:p.data,hideStaffResults:i})]})}var ve=r.encloseNamespace(`shared.insightStudentsNotWatched`);function ye(e){let t=e.students?.filter(t=>!e.watchedIds?.includes(t.id))||[];return(0,X.jsx)(B,{title:ve(`title`),svg:ne,svgClassName:`bg-light-teal text-teal`,children:(0,X.jsx)(q,{students:t,imageCdnUrl:e.imageCdnUrl,imageUrl:e.imageUrl,description:ve(`studentsDisplay`),anonymiseUsers:e.anonymiseUsers})})}var Q=r.encloseNamespace(`shared.insightStudentsWatched`);function be(e){return(0,X.jsx)(B,{title:Q(`title`),svg:ae,svgClassName:`bg-light-indigo text-indigo`,count:e.students.length,children:(0,X.jsx)(q,{students:e.students,imageCdnUrl:e.imageCdnUrl,imageUrl:e.imageUrl,description:Q(`studentsDisplay`),appLink:e.heatmapAppLink,appLinkText:Q(`viewAll`),anonymiseUsers:e.anonymiseUsers})})}var $={partialInsights:`_partialInsights_sk6kv_1`};function xe(){return(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`h2`,{className:`h4 w-25 partial-loading-background`,children:`\xA0`}),(0,X.jsx)(`div`,{className:`row g-3 mb-5`,children:(0,X.jsx)(`div`,{className:`col-12`,children:(0,X.jsx)(`div`,{className:`${$.partialInsights} rounded partial-loading-background`})})}),(0,X.jsx)(`h2`,{className:`h4 w-25 partial-loading-background`,children:`\xA0`}),(0,X.jsxs)(`div`,{className:`row g-3 mb-5`,children:[(0,X.jsx)(`div`,{className:`col-6`,children:(0,X.jsx)(`div`,{className:`${$.partialInsights} rounded partial-loading-background`})}),(0,X.jsx)(`div`,{className:`col-6`,children:(0,X.jsx)(`div`,{className:`${$.partialInsights} rounded partial-loading-background`})})]})]})}var Se=`insights.videoInsightsOverview`;function Ce(e){let t=e.hasDataLoaded&&!!e.viewers?.length;function n(){return e.viewers?Object.values(e.viewers):[]}return(0,X.jsxs)(X.Fragment,{children:[!e.hasDataLoaded&&(0,X.jsx)(xe,{}),e.hasDataLoaded&&(0,X.jsxs)(re,{video:e.video,hasData:t,share:e.share,children:[(0,X.jsxs)(`section`,{className:`mb-5`,children:[(0,X.jsxs)(`h2`,{className:`h4`,children:[(0,X.jsx)(T,{namespace:Se,phrase:`studentViewing`}),(0,X.jsxs)(`span`,{children:[`: `,n().length,e.classroomStudents?`/${e.classroomStudents.length}`:``]})]}),(0,X.jsxs)(`div`,{className:`row g-3`,children:[!!e.classroomStudents?.length&&(0,X.jsx)(`div`,{className:`col-12 col-md`,children:(0,X.jsx)(ye,{students:e.classroomStudents,watchedIds:e.viewers?.map(e=>e.id),imageCdnUrl:e.config.imageCdnUrl,heatmapAppLink:e.videoInsightsAppLinks.heatmapAppLink,imageUrl:y.Insights.AVATAR,anonymiseUsers:e.anonymiseUsers})}),(0,X.jsx)(`div`,{className:`col-12 col-md`,children:(0,X.jsx)(be,{students:n(),imageCdnUrl:e.config.imageCdnUrl,heatmapAppLink:e.videoInsightsAppLinks.heatmapAppLink,imageUrl:y.Insights.AVATAR,anonymiseUsers:e.anonymiseUsers})})]})]}),(0,X.jsxs)(`section`,{className:`mb-5`,children:[(0,X.jsx)(`h2`,{className:`h4`,children:(0,X.jsx)(T,{namespace:Se,phrase:e.hasClassrooms?`classEngagement`:`engagement`})}),(0,X.jsxs)(`div`,{className:`row g-3`,children:[(0,X.jsx)(`div`,{className:`col-12 col-md-6`,children:(0,X.jsx)(ie,{osCount:e.osCount})}),(0,X.jsx)(`div`,{className:`col-12 col-md-6`,children:(0,X.jsx)(te,{engagement:e.aggregateEngagement,heatmapAppLink:e.videoInsightsAppLinks.heatmapAppLink,engagementRate:V(e.individualEngagement)})})]})]})]})]})}function we(e,t){return{heatmapAppLink:j(e,null,t)}}var Te=r.encloseNamespace(`insights.videoInsightsOverviewView`);function Ee(e){let[t]=b(g.ANONYMISE_USERS);I();let{hasClassrooms:r}=u(null),{hasPermissions:i,getGatedPermission:a}=w(),o=s(v.config()),f=s(c.currentUser()),m=s(f.data&&d.yearGroups(f.data.customerId)),h=s(M.getShare(e.shareId)),_=k.getClassroomIdFromShare(h.data),y=s(_&&l.getClassroom(_)),S=U(e.shareId),C=s(h.data&&p.getVideoRequest(h.data.objectId,h.data.objectTypeId));x({title:C.data?Te(`pageTitle`,{video:C.data?.name}):null}),F([h,C]),Y(e.shareId);let T=s(E.shareHeatMap(e.shareId)),D=s(E.shareHeatMapAggregation(e.shareId)),O=s(E.shareAggregation(e.shareId,`os_name`)),{users:A,hasCompleted:j}=le(e.shareId),N=o.hasCompleted&&C.hasCompleted&&T.hasCompleted&&D.hasCompleted&&O.hasCompleted&&m.data&&j,P=we(h.data);return(0,X.jsxs)(`div`,{className:`px-3`,children:[(0,X.jsx)(L,{video:C.data,classroom:y.data,tabs:z(h.data,`insights`),hasSchoolAnalytics:i(n.ViewSchoolAnalytics),analyticsWebUrl:o.data?.analyticsWebUrl,share:h.data,yearGroups:m.data,hasData:N&&!!A?.length,viewInsightsGatedPermission:a(n.ViewInsights)}),(0,X.jsx)(Ce,{hasDataLoaded:!!N,hasClassrooms:r,anonymiseUsers:t,videoInsightsAppLinks:P,config:o.data,video:C.data,classroomStudents:S.items,viewers:A,individualEngagement:T.data,aggregateEngagement:D.data,share:h.data,osCount:O.data})]})}var De={[f.Video]:{insights:e=>(0,X.jsx)(Ee,{shareId:e.share.shareId}),heatmap:e=>(0,X.jsx)(Z,{shareId:e.share.shareId})},[f.Clip]:{insights:e=>(0,X.jsx)(Ee,{shareId:e.share.shareId}),heatmap:e=>(0,X.jsx)(Z,{shareId:e.share.shareId})},[f.Interactive]:{insights:e=>(0,X.jsx)(pe,{shareId:e.share.shareId}),heatmap:e=>(0,X.jsx)(Z,{shareId:e.share.shareId}),questions:e=>(0,X.jsx)(he,{interactionId:e.interactionId,sortBy:e.sortBy,shareId:e.share.shareId}),results:e=>(0,X.jsx)(_e,{filterBy:e.filterBy,sortBy:e.sortBy,shareId:e.share.shareId})}};function Oe(e){let{share:t,tab:n}=e,r=De[t?.objectTypeId]?.[n];return r?r(e):(0,X.jsx)(X.Fragment,{})}function ke(e){let r=s(M.getShare(e.shareId)),{hasPermissions:i,isLoaded:a}=w(),c=Oe({share:r.data,tab:e.tab,interactionId:e.interactionId,sortBy:e.sortBy,filterBy:e.filterBy});return J.useEffect(()=>{if(!e.showShareOptions||!r.data)return;let n=O(r.data);n&&t.trigger(n)},[r.data,e.showShareOptions]),J.useEffect(()=>{a&&(i([n.ViewInsights,n.ViewAnalytics])||t.trigger({application:o.MY_SHARES,action:h.MyShares.HOME}))},[a]),a?(0,X.jsx)(X.Fragment,{children:c}):(0,X.jsx)(X.Fragment,{})}export{ke as BaseInsightsView};
2
- //# sourceMappingURL=BqkK_0Jk2.chunk.js.map
1
+ import{o as e}from"./DAXXjFlN.chunk.js";import{y as t}from"./BftnFbcr.chunk.js";import{n}from"./B785hxeE.chunk.js";import{t as r}from"./CQyJ7YGa.chunk.js";import{t as i}from"./C2w0pmFW.chunk.js";import{t as a}from"./wrLrTezN.chunk.js";import{t as o}from"./BXTI9cmX.chunk.js";import{u as s}from"./BX0wDJmp.chunk.js";import{t as c}from"./oPIkfKWW2.chunk.js";import{t as l}from"./e1lz2ERJ2.chunk.js";import{t as u}from"./CcDvlSWl2.chunk.js";import{t as d}from"./xwiwWcv12.chunk.js";import{t as f}from"./CVHQXNzi2.chunk.js";import{t as p}from"./YakGe6vv2.chunk.js";import{t as m}from"./8U-YTgZd.chunk.js";import{t as h}from"./DdsRCMkN.chunk.js";import{t as g}from"./Kx-r9MXT.chunk.js";import{t as _}from"./CgCqPbjJ.chunk.js";import{t as v}from"./D_gWf2lC.chunk.js";import{t as y}from"./PgzMrOyM.chunk.js";import{t as b}from"./C5rBgkQH.chunk.js";import{t as x}from"./A8xLZrSw.chunk.js";import{n as S,t as C}from"./BGhJ8TEx.chunk.js";import{t as w}from"./BQKcAczf.chunk.js";import{n as T}from"./CpFtf-tI2.chunk.js";import{t as E}from"./Ch3YS7hL2.chunk.js";import{a as D,c as O,l as k,o as A,r as j}from"./B3voZNVW.chunk.js";import{t as M}from"./BghRSiDw2.chunk.js";import{t as N}from"./1pA_p8rV2.chunk.js";import{t as P}from"./j_TnVVKr.chunk.js";import{t as F}from"./D0n6BTgT.chunk.js";import{t as I}from"./BQfF8SMc.chunk.js";import{i as L,n as R,r as z}from"./B0mq38Yh.chunk.js";import{i as B,s as V}from"./SxYliR8q.chunk.js";import{n as H}from"./BLdZUAm2.chunk.js";import{t as ee}from"./Dn2EPvQj.chunk.js";import{n as U,r as W,t as G}from"./YE36f2ev.chunk.js";import{o as K}from"./dEKu6tol.chunk.js";import{a as te,c as q,i as ne,n as re,o as ie,s as ae,t as oe}from"./DMgbW0GF2.chunk.js";import{t as se}from"./DMWQUtne2.chunk.js";import{t as ce}from"./DBfnO4pz2.chunk.js";var J=e(i());function Y(e){let{getGatedPermission:r,isLoaded:i}=w();J.useEffect(()=>{i&&r(n.ViewInsights)===`hard-gate`&&t.trigger({application:o.MY_SHARES,action:h.MyShares.HARD_GATE_INSIGHTS,args:[e]})},[i])}function le(e){let[t]=b(g.HIDE_STAFF_RESULTS),n=s(E.shareHeatMap(e)),r=W(e),i=n.data?.map(e=>e.userId).filter(e=>!!e)||[],a=N(i,c.getById);function o(e){return e.userId?a.items?.[e.userId]||{id:e.userId,deleted:!0}:r.items?.[e.sessionId]||{sessionId:e.sessionId}}let l={...r.items,...a.items};return{engagement:n.data?.filter(e=>{let n=l[e.userId||e.sessionId];return n&&n.userType===1&&t?null:e}).filter(e=>!!e),users:n.data?.map(e=>({...o(e),percentage:e.engagementRate})),hasCompleted:n.hasCompleted&&r.hasCompleted&&(!i?.length||a.hasCompleted)}}var X=a(),ue=r.encloseNamespace(`shared.insightsHeatmap`);function Z(e){let[t]=b(_.ANONYMISE_USERS),[r]=b(_.HIDE_STAFF_RESULTS);I();let{hasPermissions:i,getGatedPermission:a}=w(),o=s(M.getShare(e.shareId)),u=k.getClassroomIdFromShare(o.data),m=s(u&&l.getClassroom(u)),h=U(e.shareId),g=s(o.data&&p.getVideoRequest(o.data.objectId,o.data.objectTypeId)),y=s(v.config()),T=s(c.currentUser()),D=s(T.data&&d.yearGroups(T.data.customerId)),O=s(p.isInteractive(g.data)&&P.pendingReviews({interactives:[g.data].map(t=>({interactiveId:t.interactiveId,metadataId:t.id,shareId:e.shareId})),filters:{currentCustomerId:T.data.customerId,currentUserId:T.data.id}})).data?.[0]?.pendingReviewCount>0,A=s(E.shareHeatMapAggregation(e.shareId)),{users:j,engagement:N,hasCompleted:B}=le(e.shareId),V=s(E.shareAggregation(e.shareId,`year_group`)),H=s(o.data?.objectId&&C.createViewKey(o.data.objectId,S.MasterObject));x({title:g.data?ue(`pageTitle`,{video:g.data?.name}):null}),F([o,g]),Y(e.shareId);let W=o.hasCompleted&&g.hasCompleted&&y.hasCompleted&&A.hasCompleted&&V.hasCompleted&&H.hasCompleted&&D.hasCompleted;function G(){return o.data?.objectTypeId===f.Interactive?R(o.data,`heatmap`):z(o.data,`heatmap`)}return(0,X.jsxs)(`div`,{className:`px-3`,children:[(0,X.jsx)(L,{video:g.data,tabs:G(),hasSchoolAnalytics:i(n.ViewSchoolAnalytics),analyticsWebUrl:y.data?.analyticsWebUrl,share:o.data,yearGroups:D.data,classroom:m.data,markingRequired:O,hasData:!!N?.length,viewInsightsGatedPermission:a(n.ViewInsights)}),(0,X.jsx)(ee,{aggregateEngagement:A.data,individualEngagement:N,yearGroups:V.data,config:y.data,users:j,viewKey:H.data,hasDataLoaded:W,tableDataLoaded:B,anonymiseUsers:t,classroomStudents:h.items,hideStaffResults:r})]})}function de(e,t){return{resultsAppLink:A(e,null,t),questionsAppLink:D(e,null,t),heatmapAppLink:j(e,null,t)}}var fe=r.encloseNamespace(`insights.interactiveInsightsOverviewView`);function pe(e){let[t]=b(g.ANONYMISE_USERS);I();let{hasPermissions:r,getGatedPermission:i}=w(),a=s(v.config()),o=s(c.currentUser()),u=s(o.data&&d.yearGroups(o.data.customerId)),f=s(M.getShare(e.shareId)),p=k.getClassroomIdFromShare(f.data),h=s(p&&l.getClassroom(p)),_=U(e.shareId),y=s(f.data?.objectId&&m.interactiveMetadata(f.data.objectId)),S=s(y.data?.interactiveId&&m.interactive(y.data.interactiveId)),C=G(e.shareId),T=s(E.shareHeatMap(e.shareId)),D=s(E.shareHeatMapAggregation(e.shareId)),O=s(E.shareAggregation(e.shareId,`os_name`));x({title:y.data?fe(`pageTitle`,{video:y.data?.name}):null}),F([f,S,y]),Y(e.shareId);let A=a.hasCompleted&&y.hasCompleted&&S.data&&D.hasCompleted&&T.hasCompleted&&O.hasCompleted&&C.hasCompleted&&u.hasCompleted,j=de(f.data),N=A&&K(S.data,C.data,H),P=N&&N.markingRequired.length>0;return(0,X.jsxs)(`div`,{className:`px-3`,children:[(0,X.jsx)(L,{video:y.data,tabs:R(f.data,`insights`),hasSchoolAnalytics:r(n.ViewSchoolAnalytics),analyticsWebUrl:a.data?.analyticsWebUrl,share:f.data,yearGroups:u.data,classroom:h.data,markingRequired:P,hasData:!!C.data?.students.length,viewInsightsGatedPermission:i(n.ViewInsights)}),(0,X.jsx)(oe,{aggregateEngagement:D.data,individualEngagement:T.data,interactive:S.data,interactiveMetadata:y.data,interactiveInsightsAppLinks:j,classroomStudents:_.items,results:C.data,osCount:O.data,config:a.data,anonymiseUsers:t,hasDataLoaded:A,share:f.data})]})}var me=r.encloseNamespace(`shared.interactiveInsightsQuestionsView`);function he(e){let[t]=b(g.ANONYMISE_USERS);I();let{hasPermissions:r,getGatedPermission:i}=w(),a=s(c.currentUser()),o=s(v.config()),u=s(a.data&&d.yearGroups(a.data.customerId)),f=s(M.getShare(e.shareId)),p=k.getClassroomIdFromShare(f.data),h=s(p&&l.getClassroom(p)),_=s(f.data?.objectId&&m.interactiveMetadata(f.data?.objectId)),y=s(_.data?.interactiveId&&m.interactive(_.data.interactiveId)),S=G(e.shareId);x({title:_.data?me(`pageTitle`,{video:_.data?.name}):null}),F([f,y,_]),Y(e.shareId);let C=y.data&&_.data&&!!S.data&&!!u.data,T=C&&K(y.data,S.data,H),E=T&&T.markingRequired.length>0;return(0,X.jsxs)(`div`,{className:`px-3`,children:[(0,X.jsx)(L,{tabs:R(f.data,`questions`),video:_.data,hasSchoolAnalytics:r(n.ViewSchoolAnalytics),analyticsWebUrl:o.data?.analyticsWebUrl,share:f.data,yearGroups:u.data,classroom:h.data,markingRequired:E,hasData:!!S.data?.students.length,viewInsightsGatedPermission:i(n.ViewInsights)}),(0,X.jsx)(se,{interactive:y.data,interactiveMetadata:_.data,interactionId:e.interactionId,config:o.data,sortBy:e.sortBy,isFetching:!S.hasCompleted||y.isFetching,anonymiseUsers:t,results:S.data,hasDataLoaded:C})]})}var ge=r.encloseNamespace(`insights.interactiveInsightsStudents`);function _e(e){let[r]=b(g.ANONYMISE_USERS),[i]=b(g.HIDE_STAFF_RESULTS),{hasPermissions:a,getGatedPermission:u}=w(),f=s(c.currentUser()),p=s(v.config()),_=s(f.data&&d.yearGroups(f.data.customerId)),y=s(M.getShare(e.shareId)),S=k.getClassroomIdFromShare(y.data),C=s(S&&l.getClassroom(S)),T=s(y.data?.objectId&&m.interactiveMetadata(y.data.objectId)),E=s(T.data?.interactiveId&&m.interactive(T.data.interactiveId)),D=G(e.shareId),O=E.data&&T.data&&!!D.data&&!!_.data,A=O&&K(E.data,D.data,H),j=A&&A.markingRequired.length>0;x({title:T.data?ge(`pageTitle`,{video:T.data?.name}):null}),F([y,E,T]),Y(e.shareId);function N(n,r,i){t.trigger({application:o.MY_SHARES,action:h.MyShares.INTERACTIVE_STUDENT_RESULTS,params:{studentId:n.id,shareId:e.shareId,interactionId:i,sessionId:n.sessionId}})}return(0,X.jsxs)(`div`,{className:`px-3`,children:[(0,X.jsx)(L,{tabs:R(y.data,`results`),video:T.data,hasSchoolAnalytics:a(n.ViewSchoolAnalytics),analyticsWebUrl:p.data?.analyticsWebUrl,share:y.data,yearGroups:_.data,classroom:C.data,markingRequired:j,hasData:!!D.data?.students.length,viewInsightsGatedPermission:u(n.ViewInsights)}),(0,X.jsx)(ce,{interactiveMetadata:T.data,viewStudentResults:N,interactive:E.data,results:D.data,filterBy:e.filterBy,sortBy:e.sortBy,isFetching:D.isFetching,anonymiseUsers:r,hasDataLoaded:O,config:p.data,hideStaffResults:i})]})}var ve=r.encloseNamespace(`shared.insightStudentsNotWatched`);function ye(e){let t=e.students?.filter(t=>!e.watchedIds?.includes(t.id))||[];return(0,X.jsx)(B,{title:ve(`title`),svg:ne,svgClassName:`bg-light-teal text-teal`,children:(0,X.jsx)(q,{students:t,imageCdnUrl:e.imageCdnUrl,imageUrl:e.imageUrl,description:ve(`studentsDisplay`),anonymiseUsers:e.anonymiseUsers})})}var Q=r.encloseNamespace(`shared.insightStudentsWatched`);function be(e){return(0,X.jsx)(B,{title:Q(`title`),svg:ae,svgClassName:`bg-light-indigo text-indigo`,count:e.students.length,children:(0,X.jsx)(q,{students:e.students,imageCdnUrl:e.imageCdnUrl,imageUrl:e.imageUrl,description:Q(`studentsDisplay`),appLink:e.heatmapAppLink,appLinkText:Q(`viewAll`),anonymiseUsers:e.anonymiseUsers})})}var $={partialInsights:`_partialInsights_sk6kv_1`};function xe(){return(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`h2`,{className:`h4 w-25 partial-loading-background`,children:`\xA0`}),(0,X.jsx)(`div`,{className:`row g-3 mb-5`,children:(0,X.jsx)(`div`,{className:`col-12`,children:(0,X.jsx)(`div`,{className:`${$.partialInsights} rounded partial-loading-background`})})}),(0,X.jsx)(`h2`,{className:`h4 w-25 partial-loading-background`,children:`\xA0`}),(0,X.jsxs)(`div`,{className:`row g-3 mb-5`,children:[(0,X.jsx)(`div`,{className:`col-6`,children:(0,X.jsx)(`div`,{className:`${$.partialInsights} rounded partial-loading-background`})}),(0,X.jsx)(`div`,{className:`col-6`,children:(0,X.jsx)(`div`,{className:`${$.partialInsights} rounded partial-loading-background`})})]})]})}var Se=`insights.videoInsightsOverview`;function Ce(e){let t=e.hasDataLoaded&&!!e.viewers?.length;function n(){return e.viewers?Object.values(e.viewers):[]}return(0,X.jsxs)(X.Fragment,{children:[!e.hasDataLoaded&&(0,X.jsx)(xe,{}),e.hasDataLoaded&&(0,X.jsxs)(re,{video:e.video,hasData:t,share:e.share,children:[(0,X.jsxs)(`section`,{className:`mb-5`,children:[(0,X.jsxs)(`h2`,{className:`h4`,children:[(0,X.jsx)(T,{namespace:Se,phrase:`studentViewing`}),(0,X.jsxs)(`span`,{children:[`: `,n().length,e.classroomStudents?`/${e.classroomStudents.length}`:``]})]}),(0,X.jsxs)(`div`,{className:`row g-3`,children:[!!e.classroomStudents?.length&&(0,X.jsx)(`div`,{className:`col-12 col-md`,children:(0,X.jsx)(ye,{students:e.classroomStudents,watchedIds:e.viewers?.map(e=>e.id),imageCdnUrl:e.config.imageCdnUrl,heatmapAppLink:e.videoInsightsAppLinks.heatmapAppLink,imageUrl:y.Insights.AVATAR,anonymiseUsers:e.anonymiseUsers})}),(0,X.jsx)(`div`,{className:`col-12 col-md`,children:(0,X.jsx)(be,{students:n(),imageCdnUrl:e.config.imageCdnUrl,heatmapAppLink:e.videoInsightsAppLinks.heatmapAppLink,imageUrl:y.Insights.AVATAR,anonymiseUsers:e.anonymiseUsers})})]})]}),(0,X.jsxs)(`section`,{className:`mb-5`,children:[(0,X.jsx)(`h2`,{className:`h4`,children:(0,X.jsx)(T,{namespace:Se,phrase:e.hasClassrooms?`classEngagement`:`engagement`})}),(0,X.jsxs)(`div`,{className:`row g-3`,children:[(0,X.jsx)(`div`,{className:`col-12 col-md-6`,children:(0,X.jsx)(ie,{osCount:e.osCount})}),(0,X.jsx)(`div`,{className:`col-12 col-md-6`,children:(0,X.jsx)(te,{engagement:e.aggregateEngagement,heatmapAppLink:e.videoInsightsAppLinks.heatmapAppLink,engagementRate:V(e.individualEngagement)})})]})]})]})]})}function we(e,t){return{heatmapAppLink:j(e,null,t)}}var Te=r.encloseNamespace(`insights.videoInsightsOverviewView`);function Ee(e){let[t]=b(g.ANONYMISE_USERS);I();let{hasClassrooms:r}=u(null),{hasPermissions:i,getGatedPermission:a}=w(),o=s(v.config()),f=s(c.currentUser()),m=s(f.data&&d.yearGroups(f.data.customerId)),h=s(M.getShare(e.shareId)),_=k.getClassroomIdFromShare(h.data),y=s(_&&l.getClassroom(_)),S=U(e.shareId),C=s(h.data&&p.getVideoRequest(h.data.objectId,h.data.objectTypeId));x({title:C.data?Te(`pageTitle`,{video:C.data?.name}):null}),F([h,C]),Y(e.shareId);let T=s(E.shareHeatMap(e.shareId)),D=s(E.shareHeatMapAggregation(e.shareId)),O=s(E.shareAggregation(e.shareId,`os_name`)),{users:A,hasCompleted:j}=le(e.shareId),N=o.hasCompleted&&C.hasCompleted&&T.hasCompleted&&D.hasCompleted&&O.hasCompleted&&m.data&&j,P=we(h.data);return(0,X.jsxs)(`div`,{className:`px-3`,children:[(0,X.jsx)(L,{video:C.data,classroom:y.data,tabs:z(h.data,`insights`),hasSchoolAnalytics:i(n.ViewSchoolAnalytics),analyticsWebUrl:o.data?.analyticsWebUrl,share:h.data,yearGroups:m.data,hasData:N&&!!A?.length,viewInsightsGatedPermission:a(n.ViewInsights)}),(0,X.jsx)(Ce,{hasDataLoaded:!!N,hasClassrooms:r,anonymiseUsers:t,videoInsightsAppLinks:P,config:o.data,video:C.data,classroomStudents:S.items,viewers:A,individualEngagement:T.data,aggregateEngagement:D.data,share:h.data,osCount:O.data})]})}var De={[f.Video]:{insights:e=>(0,X.jsx)(Ee,{shareId:e.share.shareId}),heatmap:e=>(0,X.jsx)(Z,{shareId:e.share.shareId})},[f.Clip]:{insights:e=>(0,X.jsx)(Ee,{shareId:e.share.shareId}),heatmap:e=>(0,X.jsx)(Z,{shareId:e.share.shareId})},[f.Interactive]:{insights:e=>(0,X.jsx)(pe,{shareId:e.share.shareId}),heatmap:e=>(0,X.jsx)(Z,{shareId:e.share.shareId}),questions:e=>(0,X.jsx)(he,{interactionId:e.interactionId,sortBy:e.sortBy,shareId:e.share.shareId}),results:e=>(0,X.jsx)(_e,{filterBy:e.filterBy,sortBy:e.sortBy,shareId:e.share.shareId})}};function Oe(e){let{share:t,tab:n}=e,r=De[t?.objectTypeId]?.[n];return r?r(e):(0,X.jsx)(X.Fragment,{})}function ke(e){let r=s(M.getShare(e.shareId)),{hasPermissions:i,isLoaded:a}=w(),c=Oe({share:r.data,tab:e.tab,interactionId:e.interactionId,sortBy:e.sortBy,filterBy:e.filterBy});return J.useEffect(()=>{if(!e.showShareOptions||!r.data)return;let n=O(r.data);n&&t.trigger(n)},[r.data,e.showShareOptions]),J.useEffect(()=>{a&&(i([n.ViewInsights,n.ViewAnalytics])||t.trigger({application:o.MY_SHARES,action:h.MyShares.HOME}))},[a]),a?(0,X.jsx)(X.Fragment,{children:c}):(0,X.jsx)(X.Fragment,{})}export{ke as BaseInsightsView};
2
+ //# sourceMappingURL=B4AZn1xm2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BqkK_0Jk2.chunk.js","names":[],"sources":["../../src/apps/my-shares/hooks/useHardGateInsights.ts","../../src/apps/my-shares/hooks/useInsightEngagement.ts","../../src/apps/my-shares/views/heatmap/InsightsHeatmapView.tsx","../../src/apps/my-shares/views/interactive/overview/InteractiveInsightsOverviewUtils.ts","../../src/apps/my-shares/views/interactive/overview/InteractiveInsightsOverviewView.tsx","../../src/apps/my-shares/views/interactive/questions/InteractiveInsightsQuestionsView.tsx","../../src/apps/my-shares/views/interactive/students/InteractiveInsightsStudentsView.tsx","../../../../libs/shared/src/apps/analytics/components/insights/students-not-watched/InsightStudentsNotWatched.tsx","../../../../libs/shared/src/apps/analytics/components/insights/students-watched/InsightStudentsWatched.tsx","../../src/apps/my-shares/components/video-insights-overview/partial-loading/partial-video-insights-overview.module.scss","../../src/apps/my-shares/components/video-insights-overview/partial-loading/PartialVideoInsightsOverview.tsx","../../src/apps/my-shares/components/video-insights-overview/VideoInsightsOvervew.tsx","../../src/apps/my-shares/views/video/overview/VideoInsightsOverviewUtils.ts","../../src/apps/my-shares/views/video/overview/VideoInsightsOverviewView.tsx","../../src/apps/my-shares/views/base-insights-view/useInsightsView.tsx","../../src/apps/my-shares/views/base-insights-view/BaseInsightsView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nexport function useHardGateInsights(shareId: string) {\n const { getGatedPermission, isLoaded } = usePermissions();\n\n React.useEffect(() => {\n if (!isLoaded)\n return;\n\n const permission = getGatedPermission(PermissionName.ViewInsights);\n\n if (permission !== 'hard-gate')\n return;\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.HARD_GATE_INSIGHTS,\n args: [shareId]\n });\n }, [isLoaded]);\n}\n","import { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { Engagement } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport { VideoViewsV2Requests } from 'shared/flight-requests/VideoViewsV2Requests';\n\nimport { useAnonSessions } from 'apps/my-shares/hooks/useAnonSessions';\n\nexport function useInsightEngagement(shareId: string) {\n const [hideStaffResults] = useViewModel<boolean>(SharedViewModelKeys.HIDE_STAFF_RESULTS);\n\n const engagement = Flight.useBasicFetch<Engagement[]>(\n VideoViewsV2Requests.shareHeatMap(shareId)\n );\n\n const anonSessions = useAnonSessions(shareId);\n\n const userIds = engagement.data?.map(u => u.userId).filter(id => !!id) || [];\n const users = useBatchFetch<AnonUser>(userIds, UserRequests.getById);\n\n function getAnonUser(e: Engagement): AnonUser {\n if (e.userId) {\n const user = users.items?.[e.userId];\n\n if (!user)\n return { id: e.userId, deleted: true } as AnonUser;\n\n return user;\n }\n\n const anonSession = anonSessions.items?.[e.sessionId];\n if (anonSession)\n return anonSession;\n\n return { sessionId: e.sessionId } as AnonUser;\n }\n \n const userMap = {\n ...anonSessions.items,\n ...users.items\n };\n\n const filteredEngagement = engagement.data?.filter(e => {\n const user = userMap[e.userId || e.sessionId];\n\n if (!user)\n return e;\n\n // Video views is returning userType as a number - Sha\n const userType = user.userType as unknown as number;\n if (userType === 1 && hideStaffResults)\n return null;\n\n return e;\n }).filter(e => !!e);\n\n const viewers = engagement\n .data?.map(e => ({ ...getAnonUser(e), percentage: e.engagementRate }));\n\n return {\n engagement: filteredEngagement,\n users: viewers,\n hasCompleted: (\n engagement.hasCompleted &&\n anonSessions.hasCompleted &&\n (!userIds?.length || users.hasCompleted)\n )\n };\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { InteractiveResultsRequests } from 'libs/shared/apps/analytics/flight-requests/InteractiveResultsRequests';\nimport { GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { InteractivesPendingReviews } from 'libs/shared/apps/analytics/interfaces/response/InteractivesPendingReviewsResponse';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\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 { Classroom, Config, CurrentUser, Engagement, PlayerViewKey, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\nimport { VideoViewsV2Requests } from 'shared/flight-requests/VideoViewsV2Requests';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InsightsHeatmap } from 'apps/my-shares/components/insights-heatmap/InsightsHeatmap';\nimport { useHardGateInsights } from 'apps/my-shares/hooks/useHardGateInsights';\nimport { useInsightEngagement } from 'apps/my-shares/hooks/useInsightEngagement';\nimport { useInsightsClassroomStudents } from 'apps/my-shares/hooks/useInsightsClassroomStudents';\nimport { getInsightsInteractiveTabs, getInsightsVideoTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\n\nconst namespace = 'shared.insightsHeatmap';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightsHeatmapViewProps {\n shareId: string;\n}\n\nexport function InsightsHeatmapView(props: InsightsHeatmapViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(ViewModelKeys.ANONYMISE_USERS);\n const [hideStaffResults] = useViewModel<boolean>(ViewModelKeys.HIDE_STAFF_RESULTS);\n\n useLockContentWidth();\n\n const { hasPermissions, getGatedPermission } = usePermissions();\n\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(props.shareId));\n \n const classroomId = ShareHelper.getClassroomIdFromShare(share.data);\n const classroom = Flight.useBasicFetch<Classroom>(classroomId && ClassroomRequests.getClassroom(classroomId));\n\n const classroomStudents = useInsightsClassroomStudents(props.shareId);\n \n const videoRequest = share.data && VideoHelper.getVideoRequest(share.data.objectId, share.data.objectTypeId);\n const video = Flight.useBasicFetch<VideoTypes>(videoRequest);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const pendingReviewsRequest = VideoHelper.isInteractive(video.data) && InteractiveResultsRequests.pendingReviews({\n interactives: [video.data].map(obj => ({\n interactiveId: obj.interactiveId,\n metadataId: obj.id,\n shareId: props.shareId\n })),\n filters: {\n currentCustomerId: currentUser.data.customerId,\n currentUserId: currentUser.data.id\n }\n });\n const pendingReviews = Flight.useBasicFetch<InteractivesPendingReviews[]>(pendingReviewsRequest);\n const markingRequired = pendingReviews.data?.[0]?.pendingReviewCount > 0;\n\n const aggregateEngagement = Flight.useBasicFetch<Engagement>(\n VideoViewsV2Requests.shareHeatMapAggregation(props.shareId)\n );\n\n const { users, engagement, hasCompleted } = useInsightEngagement(props.shareId);\n\n const yearGroupsCount = Flight.useBasicFetch<GroupedAnalyticsCount[]>(\n VideoViewsV2Requests.shareAggregation(props.shareId, 'year_group')\n );\n\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(\n share.data?.objectId &&\n PlayerRequests.createViewKey(share.data.objectId, MediaIdType.MasterObject)\n );\n\n useSetPageMetadata({ title: video.data ? getPhrase('pageTitle', { video: video.data?.name }) : null });\n useHandleObjectError([ share, video ]);\n useHardGateInsights(props.shareId);\n\n const hasDataLoaded =\n share.hasCompleted &&\n video.hasCompleted &&\n config.hasCompleted &&\n aggregateEngagement.hasCompleted &&\n yearGroupsCount.hasCompleted &&\n viewKey.hasCompleted &&\n yearGroups.hasCompleted;\n\n function getInsightsTabs() {\n if (share.data?.objectTypeId === MasterType.Interactive)\n return getInsightsInteractiveTabs(share.data, 'heatmap');\n\n return getInsightsVideoTabs(share.data, 'heatmap');\n }\n\n return (\n <div className='px-3'>\n <InsightsHeader\n video={video.data}\n tabs={getInsightsTabs()}\n hasSchoolAnalytics={hasPermissions(PermissionName.ViewSchoolAnalytics)}\n analyticsWebUrl={config.data?.analyticsWebUrl}\n share={share.data}\n yearGroups={yearGroups.data}\n classroom={classroom.data}\n markingRequired={markingRequired}\n hasData={!!engagement?.length}\n viewInsightsGatedPermission={getGatedPermission(PermissionName.ViewInsights)}\n />\n <InsightsHeatmap\n aggregateEngagement={aggregateEngagement.data}\n individualEngagement={engagement}\n yearGroups={yearGroupsCount.data}\n config={config.data}\n users={users}\n viewKey={viewKey.data}\n hasDataLoaded={hasDataLoaded}\n tableDataLoaded={hasCompleted}\n anonymiseUsers={anonymiseUsers}\n classroomStudents={classroomStudents.items}\n hideStaffResults={hideStaffResults}\n />\n </div>\n );\n}\n","import { HashObject } from 'libs/common/react/interfaces';\n\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\n\nimport { getInsightsHeatmapAppLink, getInsightsQuestionsAppLink, getInsightsStudentsAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nexport function getInteractiveInsightsAppLinks(share: Share, params?: HashObject) {\n return {\n resultsAppLink: getInsightsStudentsAppLink(share, null, params),\n questionsAppLink: getInsightsQuestionsAppLink(share, null, params),\n heatmapAppLink: getInsightsHeatmapAppLink(share, null, params)\n };\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { groupStudents } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { ScoreThresholdInsights } from 'libs/shared/constants/ScoreThresholds';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\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 { Classroom, Config, CurrentUser, Engagement, Interactive, InteractiveMetadata, YearGroup } from 'libs/shared/interfaces';\n\nimport { VideoViewsV2Requests } from 'shared/flight-requests/VideoViewsV2Requests';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InteractiveInsightsOverview } from 'apps/my-shares/components/interactive-insights-overview/InteractiveInsightsOverview';\nimport { useHardGateInsights } from 'apps/my-shares/hooks/useHardGateInsights';\nimport { useInsightsClassroomStudents } from 'apps/my-shares/hooks/useInsightsClassroomStudents';\nimport { useInsightsInteractiveResults } from 'apps/my-shares/hooks/useInsightsInteractiveResults';\nimport { getInsightsInteractiveTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\nimport { getInteractiveInsightsAppLinks } from 'apps/my-shares/views/interactive/overview/InteractiveInsightsOverviewUtils';\n\nconst namespace = 'insights.interactiveInsightsOverviewView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractiveInsightsViewProps {\n shareId: string;\n}\n\nexport function InteractiveInsightsOverviewView(props: InteractiveInsightsViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const { hasPermissions, getGatedPermission } = usePermissions();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(props.shareId));\n \n const classroomId = ShareHelper.getClassroomIdFromShare(share.data);\n const classroom = Flight.useBasicFetch<Classroom>(classroomId && ClassroomRequests.getClassroom(classroomId));\n\n const classroomStudents = useInsightsClassroomStudents(props.shareId);\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n share.data?.objectId &&\n InteractiveRequests.interactiveMetadata(share.data.objectId)\n );\n\n const interactive = Flight.useBasicFetch<Interactive>(\n interactiveMetadata.data?.interactiveId &&\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId)\n );\n\n const results = useInsightsInteractiveResults(props.shareId);\n\n const engagement = Flight.useBasicFetch<Engagement[]>(\n VideoViewsV2Requests.shareHeatMap(props.shareId)\n );\n\n const aggregateEngagement = Flight.useBasicFetch<Engagement>(\n VideoViewsV2Requests.shareHeatMapAggregation(props.shareId)\n );\n\n const osCount = Flight.useBasicFetch<GroupedAnalyticsCount[]>(\n VideoViewsV2Requests.shareAggregation(props.shareId, 'os_name')\n );\n\n useSetPageMetadata({ title: interactiveMetadata.data ? getPhrase('pageTitle', { video: interactiveMetadata.data?.name }) : null });\n\n useHandleObjectError([ share, interactive, interactiveMetadata ]);\n useHardGateInsights(props.shareId);\n\n const hasDataLoaded =\n config.hasCompleted &&\n interactiveMetadata.hasCompleted &&\n interactive.data &&\n aggregateEngagement.hasCompleted &&\n engagement.hasCompleted &&\n osCount.hasCompleted &&\n results.hasCompleted &&\n yearGroups.hasCompleted;\n\n const interactiveInsightsAppLinks = getInteractiveInsightsAppLinks(share.data);\n\n const studentGroups = hasDataLoaded && groupStudents(interactive.data, results.data, ScoreThresholdInsights);\n const markingRequired = studentGroups && studentGroups.markingRequired.length > 0;\n\n return (\n <div className='px-3'>\n <InsightsHeader\n video={interactiveMetadata.data}\n tabs={getInsightsInteractiveTabs(share.data, 'insights')}\n hasSchoolAnalytics={hasPermissions(PermissionName.ViewSchoolAnalytics)}\n analyticsWebUrl={config.data?.analyticsWebUrl}\n share={share.data}\n yearGroups={yearGroups.data}\n classroom={classroom.data}\n markingRequired={markingRequired}\n hasData={!!results.data?.students.length}\n viewInsightsGatedPermission={getGatedPermission(PermissionName.ViewInsights)}\n />\n\n <InteractiveInsightsOverview\n aggregateEngagement={aggregateEngagement.data}\n individualEngagement={engagement.data}\n interactive={interactive.data}\n interactiveMetadata={interactiveMetadata.data}\n interactiveInsightsAppLinks={interactiveInsightsAppLinks}\n classroomStudents={classroomStudents.items}\n results={results.data}\n osCount={osCount.data}\n config={config.data}\n anonymiseUsers={anonymiseUsers}\n hasDataLoaded={hasDataLoaded}\n share={share.data}\n />\n </div>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { groupStudents } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { ScoreThresholdInsights } from 'libs/shared/constants/ScoreThresholds';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\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 { Classroom, Config, CurrentUser, Interactive, InteractiveMetadata, YearGroup } from 'libs/shared/interfaces';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InteractiveInsightsQuestions } from 'apps/my-shares/components/interactive-insights-questions/InteractiveInsightsQuestions';\nimport { useHardGateInsights } from 'apps/my-shares/hooks/useHardGateInsights';\nimport { useInsightsInteractiveResults } from 'apps/my-shares/hooks/useInsightsInteractiveResults';\nimport { getInsightsInteractiveTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\n\nconst namespace = 'shared.interactiveInsightsQuestionsView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractiveInsightsQuestionsViewProps {\n shareId: string;\n interactionId: string;\n sortBy: SortStudentsBy;\n}\n\nexport function InteractiveInsightsQuestionsView(props: InteractiveInsightsQuestionsViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const { hasPermissions, getGatedPermission } = usePermissions();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(props.shareId));\n \n const classroomId = ShareHelper.getClassroomIdFromShare(share.data);\n const classroom = Flight.useBasicFetch<Classroom>(classroomId && ClassroomRequests.getClassroom(classroomId));\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n share.data?.objectId &&\n InteractiveRequests.interactiveMetadata(share.data?.objectId)\n );\n\n const interactive = Flight.useBasicFetch<Interactive>(interactiveMetadata.data?.interactiveId &&\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId));\n\n const results = useInsightsInteractiveResults(props.shareId);\n\n useSetPageMetadata({ title: interactiveMetadata.data ? getPhrase('pageTitle', { video: interactiveMetadata.data?.name }) : null });\n useHandleObjectError([ share, interactive, interactiveMetadata ]);\n useHardGateInsights(props.shareId);\n\n const hasDataLoaded = interactive.data && interactiveMetadata.data && !!results.data && !!yearGroups.data;\n \n const studentGroups = hasDataLoaded && groupStudents(interactive.data, results.data, ScoreThresholdInsights);\n const markingRequired = studentGroups && studentGroups.markingRequired.length > 0;\n\n return (\n <div className='px-3'>\n <InsightsHeader\n tabs={getInsightsInteractiveTabs(share.data, 'questions')}\n video={interactiveMetadata.data}\n hasSchoolAnalytics={hasPermissions(PermissionName.ViewSchoolAnalytics)}\n analyticsWebUrl={config.data?.analyticsWebUrl}\n share={share.data}\n yearGroups={yearGroups.data}\n classroom={classroom.data}\n markingRequired={markingRequired}\n hasData={!!results.data?.students.length}\n viewInsightsGatedPermission={getGatedPermission(PermissionName.ViewInsights)}\n />\n\n <InteractiveInsightsQuestions\n interactive={interactive.data}\n interactiveMetadata={interactiveMetadata.data}\n interactionId={props.interactionId}\n config={config.data}\n sortBy={props.sortBy}\n isFetching={!results.hasCompleted || interactive.isFetching}\n anonymiseUsers={anonymiseUsers}\n results={results.data}\n hasDataLoaded={hasDataLoaded}\n />\n </div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { groupStudents } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { FilterStudentsBy, SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { ScoreThresholdInsights } from 'libs/shared/constants/ScoreThresholds';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Classroom, Config, CurrentUser, Interactive, InteractiveMetadata, YearGroup } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InteractiveInsightsStudents } from 'apps/my-shares/components/interactive-insights-students/InteractiveInsightsStudents';\nimport { useHardGateInsights } from 'apps/my-shares/hooks/useHardGateInsights';\nimport { useInsightsInteractiveResults } from 'apps/my-shares/hooks/useInsightsInteractiveResults';\nimport { getInsightsInteractiveTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\n\nconst namespace = 'insights.interactiveInsightsStudents';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractiveInsightsStudentsViewProps {\n shareId: string;\n sortBy: SortStudentsBy;\n filterBy: FilterStudentsBy;\n}\n\nexport function InteractiveInsightsStudentsView(props: InteractiveInsightsStudentsViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n const [hideStaffResults] = useViewModel<boolean>(SharedViewModelKeys.HIDE_STAFF_RESULTS);\n\n const { hasPermissions, getGatedPermission } = usePermissions();\n \n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(props.shareId));\n \n const classroomId = ShareHelper.getClassroomIdFromShare(share.data);\n const classroom = Flight.useBasicFetch<Classroom>(classroomId && ClassroomRequests.getClassroom(classroomId));\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n share.data?.objectId &&\n InteractiveRequests.interactiveMetadata(share.data.objectId)\n );\n\n const interactive = Flight.useBasicFetch<Interactive>(interactiveMetadata.data?.interactiveId &&\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId));\n\n const results = useInsightsInteractiveResults(props.shareId);\n\n const hasDataLoaded = interactive.data && interactiveMetadata.data && !!results.data && !!yearGroups.data;\n\n const studentGroups = hasDataLoaded && groupStudents(interactive.data, results.data, ScoreThresholdInsights);\n const markingRequired = studentGroups && studentGroups.markingRequired.length > 0;\n\n useSetPageMetadata({ title: interactiveMetadata.data ? getPhrase('pageTitle', { video: interactiveMetadata.data?.name }) : null });\n useHandleObjectError([ share, interactive, interactiveMetadata ]);\n useHardGateInsights(props.shareId);\n\n function viewStudentResults(\n user: AnonUser,\n interactiveMetadataId: string,\n interactionId?: string\n ) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_STUDENT_RESULTS,\n params: {\n studentId: user.id,\n shareId: props.shareId,\n interactionId,\n sessionId: user.sessionId\n }\n });\n }\n\n return (\n <div className='px-3'>\n <InsightsHeader\n tabs={getInsightsInteractiveTabs(share.data, 'results')}\n video={interactiveMetadata.data}\n hasSchoolAnalytics={hasPermissions(PermissionName.ViewSchoolAnalytics)}\n analyticsWebUrl={config.data?.analyticsWebUrl}\n share={share.data}\n yearGroups={yearGroups.data}\n classroom={classroom.data}\n markingRequired={markingRequired}\n hasData={!!results.data?.students.length}\n viewInsightsGatedPermission={getGatedPermission(PermissionName.ViewInsights)}\n />\n\n <InteractiveInsightsStudents\n interactiveMetadata={interactiveMetadata.data}\n viewStudentResults={viewStudentResults}\n interactive={interactive.data}\n results={results.data}\n filterBy={props.filterBy}\n sortBy={props.sortBy}\n // Must be isFetching, not hasCompleted, as we need to refresh the table when the results are updated\n isFetching={results.isFetching}\n anonymiseUsers={anonymiseUsers}\n hasDataLoaded={hasDataLoaded}\n config={config.data}\n hideStaffResults={hideStaffResults}\n />\n </div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { InsightStudentList } from 'libs/shared/apps/analytics/components/insight-student-list/InsightStudentList';\nimport { PuzzleSvg } from 'libs/shared/images/svg/objects/PuzzleSvg';\nimport { User } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.insightStudentsNotWatched';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightStudentsNotWatchedProps {\n students: User[];\n imageCdnUrl: string;\n imageUrl: string;\n heatmapAppLink: Core.AppLink;\n watchedIds: string[];\n anonymiseUsers: boolean;\n}\n\nexport function InsightStudentsNotWatched(props: InsightStudentsNotWatchedProps) {\n const studentsNotWatched = props.students?.filter(student => !props.watchedIds?.includes(student.id)) || [];\n\n return (\n <InsightCard\n title={getPhrase('title')}\n svg={PuzzleSvg}\n svgClassName='bg-light-teal text-teal'\n >\n <InsightStudentList\n students={studentsNotWatched}\n imageCdnUrl={props.imageCdnUrl}\n imageUrl={props.imageUrl}\n description={getPhrase('studentsDisplay')}\n anonymiseUsers={props.anonymiseUsers}\n />\n </InsightCard>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { InsightStudentList } from 'libs/shared/apps/analytics/components/insight-student-list/InsightStudentList';\nimport { FlagSvg } from 'libs/shared/images/svg/objects/FlagSvg';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nconst namespace = 'shared.insightStudentsWatched';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightWatchedProps {\n students: AnonUser[];\n imageCdnUrl: string;\n heatmapAppLink: Core.AppLink;\n imageUrl: string;\n anonymiseUsers: boolean;\n}\n\nexport function InsightStudentsWatched(props: InsightWatchedProps) {\n return (\n <InsightCard\n title={getPhrase('title')}\n svg={FlagSvg}\n svgClassName='bg-light-indigo text-indigo'\n count={props.students.length}\n >\n <InsightStudentList\n students={props.students}\n imageCdnUrl={props.imageCdnUrl}\n imageUrl={props.imageUrl}\n description={getPhrase('studentsDisplay')}\n appLink={props.heatmapAppLink}\n appLinkText={getPhrase('viewAll')}\n anonymiseUsers={props.anonymiseUsers}\n />\n </InsightCard>\n );\n}\n",":local {\n .partialInsights {\n height: 12.5rem;\n }\n}","import React from 'react';\n\nimport styles from './partial-video-insights-overview.module.scss';\n\nexport function PartialVideoInsightsOverview() {\n return (\n <div>\n <h2 className='h4 w-25 partial-loading-background'>&nbsp;</h2>\n <div className='row g-3 mb-5'>\n <div className='col-12'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n </div>\n\n <h2 className='h4 w-25 partial-loading-background'>&nbsp;</h2>\n <div className='row g-3 mb-5'>\n <div className='col-6'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n <div className='col-6'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { InsightDevices } from 'libs/shared/apps/analytics/components/insights/devices/InsightDevices';\nimport { InsightHeatmap } from 'libs/shared/apps/analytics/components/insights/heatmap/InsightHeatmap';\nimport { InsightStudentsNotWatched } from 'libs/shared/apps/analytics/components/insights/students-not-watched/InsightStudentsNotWatched';\nimport { InsightStudentsWatched } from 'libs/shared/apps/analytics/components/insights/students-watched/InsightStudentsWatched';\nimport { GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { getEngagementRate } from 'libs/shared/apps/analytics/utils/EngagementUtils';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Config, Engagement, User, Video } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { InsightsShareMask } from 'apps/my-shares/components/insights-mask/InsightsShareMask';\nimport { PartialVideoInsightsOverview } from 'apps/my-shares/components/video-insights-overview/partial-loading/PartialVideoInsightsOverview';\n\nconst namespace = 'insights.videoInsightsOverview';\n\ninterface VideoInsightsOverviewProps {\n hasDataLoaded: boolean;\n hasClassrooms: boolean;\n anonymiseUsers: boolean;\n videoInsightsAppLinks: HashObject;\n config: Config;\n video: Video;\n classroomStudents: User[];\n viewers: AnonUser[];\n individualEngagement: Engagement[];\n aggregateEngagement: Engagement;\n share: Share;\n osCount: GroupedAnalyticsCount[];\n}\n\nexport function VideoInsightsOverview(props: VideoInsightsOverviewProps) {\n const hasData = props.hasDataLoaded && !!props.viewers?.length;\n\n function getStudentsList() {\n if (!props.viewers) return [];\n\n return Object.values(props.viewers);\n }\n\n return (\n <>\n {!props.hasDataLoaded && <PartialVideoInsightsOverview />}\n\n {props.hasDataLoaded &&\n <InsightsShareMask video={props.video} hasData={hasData} share={props.share}>\n <section className='mb-5'>\n <h2 className='h4'>\n <Text namespace={namespace} phrase='studentViewing' />\n <span>: {getStudentsList().length}{props.classroomStudents ? `/${props.classroomStudents.length}` : ''}</span>\n </h2>\n <div className='row g-3'>\n {!!props.classroomStudents?.length && (\n <div className='col-12 col-md'>\n <InsightStudentsNotWatched\n students={props.classroomStudents}\n watchedIds={props.viewers?.map(u => u.id)}\n imageCdnUrl={props.config.imageCdnUrl}\n heatmapAppLink={props.videoInsightsAppLinks.heatmapAppLink}\n imageUrl={ImageUrls.Insights.AVATAR}\n anonymiseUsers={props.anonymiseUsers}\n />\n </div>\n )}\n <div className='col-12 col-md'>\n <InsightStudentsWatched\n students={getStudentsList()}\n imageCdnUrl={props.config.imageCdnUrl}\n heatmapAppLink={props.videoInsightsAppLinks.heatmapAppLink}\n imageUrl={ImageUrls.Insights.AVATAR}\n anonymiseUsers={props.anonymiseUsers}\n />\n </div>\n </div>\n </section>\n <section className='mb-5'>\n <h2 className='h4'>\n <Text\n namespace={namespace}\n phrase={props.hasClassrooms ? 'classEngagement' : 'engagement'}\n />\n </h2>\n <div className='row g-3'>\n <div className='col-12 col-md-6'>\n <InsightDevices\n osCount={props.osCount}\n />\n </div>\n <div className='col-12 col-md-6'>\n <InsightHeatmap\n engagement={props.aggregateEngagement}\n heatmapAppLink={props.videoInsightsAppLinks.heatmapAppLink}\n engagementRate={getEngagementRate(props.individualEngagement)}\n />\n </div>\n </div>\n </section>\n </InsightsShareMask>\n }\n </>\n );\n}\n","import { HashObject } from 'libs/common/react/interfaces';\n\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\n\nimport { getInsightsHeatmapAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nexport function getVideoInsightsAppLinks(share: Share, params?: HashObject) {\n return {\n heatmapAppLink: getInsightsHeatmapAppLink(share, null, params)\n };\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { 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 { Classroom, Config, CurrentUser, Engagement, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { VideoViewsV2Requests } from 'shared/flight-requests/VideoViewsV2Requests';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { VideoInsightsOverview } from 'apps/my-shares/components/video-insights-overview/VideoInsightsOvervew';\nimport { useHardGateInsights } from 'apps/my-shares/hooks/useHardGateInsights';\nimport { useInsightEngagement } from 'apps/my-shares/hooks/useInsightEngagement';\nimport { useInsightsClassroomStudents } from 'apps/my-shares/hooks/useInsightsClassroomStudents';\nimport { getInsightsVideoTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\nimport { getVideoInsightsAppLinks } from 'apps/my-shares/views/video/overview/VideoInsightsOverviewUtils';\n\nconst namespace = 'insights.videoInsightsOverviewView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface VideoInsightsViewProps {\n shareId: string;\n}\n\nexport function VideoInsightsOverviewView(props: VideoInsightsViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const { hasClassrooms } = useSettings(null);\n\n const { hasPermissions, getGatedPermission } = usePermissions();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(props.shareId));\n\n const classroomId = ShareHelper.getClassroomIdFromShare(share.data);\n const classroom = Flight.useBasicFetch<Classroom>(classroomId && ClassroomRequests.getClassroom(classroomId));\n\n const classroomStudents = useInsightsClassroomStudents(props.shareId);\n\n const videoRequest = share.data && VideoHelper.getVideoRequest(share.data.objectId, share.data.objectTypeId);\n const video = Flight.useBasicFetch<VideoTypes>(videoRequest);\n\n useSetPageMetadata({ title: video.data ? getPhrase('pageTitle', { video: video.data?.name }) : null });\n useHandleObjectError([ share, video ]);\n useHardGateInsights(props.shareId);\n\n const engagement = Flight.useBasicFetch<Engagement[]>(\n VideoViewsV2Requests.shareHeatMap(props.shareId)\n );\n\n const aggregateEngagement = Flight.useBasicFetch<Engagement>(\n VideoViewsV2Requests.shareHeatMapAggregation(props.shareId)\n );\n\n const osCount = Flight.useBasicFetch<GroupedAnalyticsCount[]>(\n VideoViewsV2Requests.shareAggregation(props.shareId, 'os_name')\n );\n\n const { users, hasCompleted } = useInsightEngagement(props.shareId);\n \n const hasDataLoaded =\n config.hasCompleted &&\n video.hasCompleted &&\n engagement.hasCompleted &&\n aggregateEngagement.hasCompleted &&\n osCount.hasCompleted &&\n yearGroups.data &&\n hasCompleted;\n\n const videoInsightsAppLinks = getVideoInsightsAppLinks(share.data);\n\n return (\n <div className='px-3'>\n <InsightsHeader\n video={video.data}\n classroom={classroom.data}\n tabs={getInsightsVideoTabs(share.data, 'insights')}\n hasSchoolAnalytics={hasPermissions(PermissionName.ViewSchoolAnalytics)}\n analyticsWebUrl={config.data?.analyticsWebUrl}\n share={share.data}\n yearGroups={yearGroups.data}\n hasData={hasDataLoaded && !!users?.length}\n viewInsightsGatedPermission={getGatedPermission(PermissionName.ViewInsights)}\n />\n\n <VideoInsightsOverview\n hasDataLoaded={!!hasDataLoaded}\n hasClassrooms={hasClassrooms}\n anonymiseUsers={anonymiseUsers}\n videoInsightsAppLinks={videoInsightsAppLinks}\n config={config.data}\n video={video.data}\n classroomStudents={classroomStudents.items}\n viewers={users}\n individualEngagement={engagement.data}\n aggregateEngagement={aggregateEngagement.data}\n share={share.data}\n osCount={osCount.data}\n />\n </div>\n );\n}\n","import React from 'react';\n\nimport { FilterStudentsBy, SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { MasterType } from 'libs/shared/enums/MasterType';\n\nimport { InsightsTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\nimport { InsightsHeatmapView } from 'apps/my-shares/views/heatmap/InsightsHeatmapView';\nimport { InteractiveInsightsOverviewView } from 'apps/my-shares/views/interactive/overview/InteractiveInsightsOverviewView';\nimport { InteractiveInsightsQuestionsView } from 'apps/my-shares/views/interactive/questions/InteractiveInsightsQuestionsView';\nimport { InteractiveInsightsStudentsView } from 'apps/my-shares/views/interactive/students/InteractiveInsightsStudentsView';\nimport { VideoInsightsOverviewView } from 'apps/my-shares/views/video/overview/VideoInsightsOverviewView';\n\ninterface UseInsightsViewOptions {\n share: Share | undefined;\n tab: InsightsTabs;\n interactionId: string;\n sortBy: SortStudentsBy;\n filterBy: FilterStudentsBy;\n}\n\ntype ShareContext = Omit<UseInsightsViewOptions, 'tab'>;\ntype ViewFn = (ctx: ShareContext) => JSX.Element;\ntype ViewRegistry = Partial<Record<MasterType, Partial<Record<InsightsTabs, ViewFn>>>>;\n\nconst INSIGHTS_VIEWS: ViewRegistry = {\n [MasterType.Video]: {\n insights: ctx => <VideoInsightsOverviewView shareId={ctx.share.shareId} />,\n heatmap: ctx => <InsightsHeatmapView shareId={ctx.share.shareId} />\n },\n [MasterType.Clip]: {\n insights: ctx => <VideoInsightsOverviewView shareId={ctx.share.shareId} />,\n heatmap: ctx => <InsightsHeatmapView shareId={ctx.share.shareId} />\n },\n [MasterType.Interactive]: {\n insights: ctx => <InteractiveInsightsOverviewView shareId={ctx.share.shareId} />,\n heatmap: ctx => <InsightsHeatmapView shareId={ctx.share.shareId} />,\n questions: ctx => (\n <InteractiveInsightsQuestionsView\n interactionId={ctx.interactionId}\n sortBy={ctx.sortBy}\n shareId={ctx.share.shareId}\n />\n ),\n results: ctx => (\n <InteractiveInsightsStudentsView\n filterBy={ctx.filterBy}\n sortBy={ctx.sortBy}\n shareId={ctx.share.shareId}\n />\n )\n }\n};\n\n/**\n * Takes any Share object and a tab, and returns the corresponding \"insights\" view.\n * This is just a utility hook, and as such doesn't need to set the page title directly.\n */\n// eslint-disable-next-line rulesdir/require-view-title\nexport function useInsightsView(options: UseInsightsViewOptions): JSX.Element {\n const { share, tab } = options;\n const viewFn = INSIGHTS_VIEWS[share?.objectTypeId]?.[tab];\n\n if (viewFn)\n return viewFn(options);\n\n return <></>;\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\n\nimport { FilterStudentsBy, SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { getShareOptionsAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport { InsightsTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\nimport { useInsightsView } from 'apps/my-shares/views/base-insights-view/useInsightsView';\n\ninterface BaseInsightsViewProps {\n shareId: string;\n tab: InsightsTabs;\n interactionId: string;\n sortBy: SortStudentsBy;\n filterBy: FilterStudentsBy;\n showShareOptions?: boolean;\n}\n\n/**\n * BaseInsightsView is a generic component that renders different \"insights\" views based on the provided share.\n * The child views will handle setting the page title and other specific details.\n * \n * It also handles the logic for showing share options if `showShareOptions` is true - which is currently used\n * in our used in our LCE emails.\n */\n// eslint-disable-next-line rulesdir/require-view-title\nexport function BaseInsightsView(props: BaseInsightsViewProps): JSX.Element {\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(props.shareId));\n const { hasPermissions, isLoaded } = usePermissions();\n\n const view = useInsightsView({\n share: share.data,\n tab: props.tab,\n interactionId: props.interactionId,\n sortBy: props.sortBy,\n filterBy: props.filterBy\n });\n\n /**\n * If the showShareOptions is in the query params, we also want to show the share popup.\n */\n React.useEffect(() => {\n if (!props.showShareOptions) return;\n if (!share.data) return;\n\n const appLink = getShareOptionsAppLink(share.data);\n \n if (!appLink) return;\n\n Core.AppLinkHelper.trigger(appLink);\n }, [ share.data, props.showShareOptions ]);\n\n /**\n * If the user doesn't have insights permissions, redirect to the insights overview page.\n */\n React.useEffect(() => {\n if (!isLoaded) return;\n if (hasPermissions([ PermissionName.ViewInsights, PermissionName.ViewAnalytics ])) return;\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.HOME\n });\n }, [isLoaded]);\n \n if (!isLoaded)\n return <></>;\n\n return (\n <>\n {view}\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"B4AZn1xm2.chunk.js","names":[],"sources":["../../src/apps/my-shares/hooks/useHardGateInsights.ts","../../src/apps/my-shares/hooks/useInsightEngagement.ts","../../src/apps/my-shares/views/heatmap/InsightsHeatmapView.tsx","../../src/apps/my-shares/views/interactive/overview/InteractiveInsightsOverviewUtils.ts","../../src/apps/my-shares/views/interactive/overview/InteractiveInsightsOverviewView.tsx","../../src/apps/my-shares/views/interactive/questions/InteractiveInsightsQuestionsView.tsx","../../src/apps/my-shares/views/interactive/students/InteractiveInsightsStudentsView.tsx","../../../../libs/shared/src/apps/analytics/components/insights/students-not-watched/InsightStudentsNotWatched.tsx","../../../../libs/shared/src/apps/analytics/components/insights/students-watched/InsightStudentsWatched.tsx","../../src/apps/my-shares/components/video-insights-overview/partial-loading/partial-video-insights-overview.module.scss","../../src/apps/my-shares/components/video-insights-overview/partial-loading/PartialVideoInsightsOverview.tsx","../../src/apps/my-shares/components/video-insights-overview/VideoInsightsOvervew.tsx","../../src/apps/my-shares/views/video/overview/VideoInsightsOverviewUtils.ts","../../src/apps/my-shares/views/video/overview/VideoInsightsOverviewView.tsx","../../src/apps/my-shares/views/base-insights-view/useInsightsView.tsx","../../src/apps/my-shares/views/base-insights-view/BaseInsightsView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nexport function useHardGateInsights(shareId: string) {\n const { getGatedPermission, isLoaded } = usePermissions();\n\n React.useEffect(() => {\n if (!isLoaded)\n return;\n\n const permission = getGatedPermission(PermissionName.ViewInsights);\n\n if (permission !== 'hard-gate')\n return;\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.HARD_GATE_INSIGHTS,\n args: [shareId]\n });\n }, [isLoaded]);\n}\n","import { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { Engagement } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport { VideoViewsV2Requests } from 'shared/flight-requests/VideoViewsV2Requests';\n\nimport { useAnonSessions } from 'apps/my-shares/hooks/useAnonSessions';\n\nexport function useInsightEngagement(shareId: string) {\n const [hideStaffResults] = useViewModel<boolean>(SharedViewModelKeys.HIDE_STAFF_RESULTS);\n\n const engagement = Flight.useBasicFetch<Engagement[]>(\n VideoViewsV2Requests.shareHeatMap(shareId)\n );\n\n const anonSessions = useAnonSessions(shareId);\n\n const userIds = engagement.data?.map(u => u.userId).filter(id => !!id) || [];\n const users = useBatchFetch<AnonUser>(userIds, UserRequests.getById);\n\n function getAnonUser(e: Engagement): AnonUser {\n if (e.userId) {\n const user = users.items?.[e.userId];\n\n if (!user)\n return { id: e.userId, deleted: true } as AnonUser;\n\n return user;\n }\n\n const anonSession = anonSessions.items?.[e.sessionId];\n if (anonSession)\n return anonSession;\n\n return { sessionId: e.sessionId } as AnonUser;\n }\n \n const userMap = {\n ...anonSessions.items,\n ...users.items\n };\n\n const filteredEngagement = engagement.data?.filter(e => {\n const user = userMap[e.userId || e.sessionId];\n\n if (!user)\n return e;\n\n // Video views is returning userType as a number - Sha\n const userType = user.userType as unknown as number;\n if (userType === 1 && hideStaffResults)\n return null;\n\n return e;\n }).filter(e => !!e);\n\n const viewers = engagement\n .data?.map(e => ({ ...getAnonUser(e), percentage: e.engagementRate }));\n\n return {\n engagement: filteredEngagement,\n users: viewers,\n hasCompleted: (\n engagement.hasCompleted &&\n anonSessions.hasCompleted &&\n (!userIds?.length || users.hasCompleted)\n )\n };\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { InteractiveResultsRequests } from 'libs/shared/apps/analytics/flight-requests/InteractiveResultsRequests';\nimport { GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { InteractivesPendingReviews } from 'libs/shared/apps/analytics/interfaces/response/InteractivesPendingReviewsResponse';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\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 { Classroom, Config, CurrentUser, Engagement, PlayerViewKey, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\nimport { VideoViewsV2Requests } from 'shared/flight-requests/VideoViewsV2Requests';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InsightsHeatmap } from 'apps/my-shares/components/insights-heatmap/InsightsHeatmap';\nimport { useHardGateInsights } from 'apps/my-shares/hooks/useHardGateInsights';\nimport { useInsightEngagement } from 'apps/my-shares/hooks/useInsightEngagement';\nimport { useInsightsClassroomStudents } from 'apps/my-shares/hooks/useInsightsClassroomStudents';\nimport { getInsightsInteractiveTabs, getInsightsVideoTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\n\nconst namespace = 'shared.insightsHeatmap';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightsHeatmapViewProps {\n shareId: string;\n}\n\nexport function InsightsHeatmapView(props: InsightsHeatmapViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(ViewModelKeys.ANONYMISE_USERS);\n const [hideStaffResults] = useViewModel<boolean>(ViewModelKeys.HIDE_STAFF_RESULTS);\n\n useLockContentWidth();\n\n const { hasPermissions, getGatedPermission } = usePermissions();\n\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(props.shareId));\n \n const classroomId = ShareHelper.getClassroomIdFromShare(share.data);\n const classroom = Flight.useBasicFetch<Classroom>(classroomId && ClassroomRequests.getClassroom(classroomId));\n\n const classroomStudents = useInsightsClassroomStudents(props.shareId);\n \n const videoRequest = share.data && VideoHelper.getVideoRequest(share.data.objectId, share.data.objectTypeId);\n const video = Flight.useBasicFetch<VideoTypes>(videoRequest);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const pendingReviewsRequest = VideoHelper.isInteractive(video.data) && InteractiveResultsRequests.pendingReviews({\n interactives: [video.data].map(obj => ({\n interactiveId: obj.interactiveId,\n metadataId: obj.id,\n shareId: props.shareId\n })),\n filters: {\n currentCustomerId: currentUser.data.customerId,\n currentUserId: currentUser.data.id\n }\n });\n const pendingReviews = Flight.useBasicFetch<InteractivesPendingReviews[]>(pendingReviewsRequest);\n const markingRequired = pendingReviews.data?.[0]?.pendingReviewCount > 0;\n\n const aggregateEngagement = Flight.useBasicFetch<Engagement>(\n VideoViewsV2Requests.shareHeatMapAggregation(props.shareId)\n );\n\n const { users, engagement, hasCompleted } = useInsightEngagement(props.shareId);\n\n const yearGroupsCount = Flight.useBasicFetch<GroupedAnalyticsCount[]>(\n VideoViewsV2Requests.shareAggregation(props.shareId, 'year_group')\n );\n\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(\n share.data?.objectId &&\n PlayerRequests.createViewKey(share.data.objectId, MediaIdType.MasterObject)\n );\n\n useSetPageMetadata({ title: video.data ? getPhrase('pageTitle', { video: video.data?.name }) : null });\n useHandleObjectError([ share, video ]);\n useHardGateInsights(props.shareId);\n\n const hasDataLoaded =\n share.hasCompleted &&\n video.hasCompleted &&\n config.hasCompleted &&\n aggregateEngagement.hasCompleted &&\n yearGroupsCount.hasCompleted &&\n viewKey.hasCompleted &&\n yearGroups.hasCompleted;\n\n function getInsightsTabs() {\n if (share.data?.objectTypeId === MasterType.Interactive)\n return getInsightsInteractiveTabs(share.data, 'heatmap');\n\n return getInsightsVideoTabs(share.data, 'heatmap');\n }\n\n return (\n <div className='px-3'>\n <InsightsHeader\n video={video.data}\n tabs={getInsightsTabs()}\n hasSchoolAnalytics={hasPermissions(PermissionName.ViewSchoolAnalytics)}\n analyticsWebUrl={config.data?.analyticsWebUrl}\n share={share.data}\n yearGroups={yearGroups.data}\n classroom={classroom.data}\n markingRequired={markingRequired}\n hasData={!!engagement?.length}\n viewInsightsGatedPermission={getGatedPermission(PermissionName.ViewInsights)}\n />\n <InsightsHeatmap\n aggregateEngagement={aggregateEngagement.data}\n individualEngagement={engagement}\n yearGroups={yearGroupsCount.data}\n config={config.data}\n users={users}\n viewKey={viewKey.data}\n hasDataLoaded={hasDataLoaded}\n tableDataLoaded={hasCompleted}\n anonymiseUsers={anonymiseUsers}\n classroomStudents={classroomStudents.items}\n hideStaffResults={hideStaffResults}\n />\n </div>\n );\n}\n","import { HashObject } from 'libs/common/react/interfaces';\n\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\n\nimport { getInsightsHeatmapAppLink, getInsightsQuestionsAppLink, getInsightsStudentsAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nexport function getInteractiveInsightsAppLinks(share: Share, params?: HashObject) {\n return {\n resultsAppLink: getInsightsStudentsAppLink(share, null, params),\n questionsAppLink: getInsightsQuestionsAppLink(share, null, params),\n heatmapAppLink: getInsightsHeatmapAppLink(share, null, params)\n };\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { groupStudents } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { ScoreThresholdInsights } from 'libs/shared/constants/ScoreThresholds';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\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 { Classroom, Config, CurrentUser, Engagement, Interactive, InteractiveMetadata, YearGroup } from 'libs/shared/interfaces';\n\nimport { VideoViewsV2Requests } from 'shared/flight-requests/VideoViewsV2Requests';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InteractiveInsightsOverview } from 'apps/my-shares/components/interactive-insights-overview/InteractiveInsightsOverview';\nimport { useHardGateInsights } from 'apps/my-shares/hooks/useHardGateInsights';\nimport { useInsightsClassroomStudents } from 'apps/my-shares/hooks/useInsightsClassroomStudents';\nimport { useInsightsInteractiveResults } from 'apps/my-shares/hooks/useInsightsInteractiveResults';\nimport { getInsightsInteractiveTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\nimport { getInteractiveInsightsAppLinks } from 'apps/my-shares/views/interactive/overview/InteractiveInsightsOverviewUtils';\n\nconst namespace = 'insights.interactiveInsightsOverviewView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractiveInsightsViewProps {\n shareId: string;\n}\n\nexport function InteractiveInsightsOverviewView(props: InteractiveInsightsViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const { hasPermissions, getGatedPermission } = usePermissions();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(props.shareId));\n \n const classroomId = ShareHelper.getClassroomIdFromShare(share.data);\n const classroom = Flight.useBasicFetch<Classroom>(classroomId && ClassroomRequests.getClassroom(classroomId));\n\n const classroomStudents = useInsightsClassroomStudents(props.shareId);\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n share.data?.objectId &&\n InteractiveRequests.interactiveMetadata(share.data.objectId)\n );\n\n const interactive = Flight.useBasicFetch<Interactive>(\n interactiveMetadata.data?.interactiveId &&\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId)\n );\n\n const results = useInsightsInteractiveResults(props.shareId);\n\n const engagement = Flight.useBasicFetch<Engagement[]>(\n VideoViewsV2Requests.shareHeatMap(props.shareId)\n );\n\n const aggregateEngagement = Flight.useBasicFetch<Engagement>(\n VideoViewsV2Requests.shareHeatMapAggregation(props.shareId)\n );\n\n const osCount = Flight.useBasicFetch<GroupedAnalyticsCount[]>(\n VideoViewsV2Requests.shareAggregation(props.shareId, 'os_name')\n );\n\n useSetPageMetadata({ title: interactiveMetadata.data ? getPhrase('pageTitle', { video: interactiveMetadata.data?.name }) : null });\n\n useHandleObjectError([ share, interactive, interactiveMetadata ]);\n useHardGateInsights(props.shareId);\n\n const hasDataLoaded =\n config.hasCompleted &&\n interactiveMetadata.hasCompleted &&\n interactive.data &&\n aggregateEngagement.hasCompleted &&\n engagement.hasCompleted &&\n osCount.hasCompleted &&\n results.hasCompleted &&\n yearGroups.hasCompleted;\n\n const interactiveInsightsAppLinks = getInteractiveInsightsAppLinks(share.data);\n\n const studentGroups = hasDataLoaded && groupStudents(interactive.data, results.data, ScoreThresholdInsights);\n const markingRequired = studentGroups && studentGroups.markingRequired.length > 0;\n\n return (\n <div className='px-3'>\n <InsightsHeader\n video={interactiveMetadata.data}\n tabs={getInsightsInteractiveTabs(share.data, 'insights')}\n hasSchoolAnalytics={hasPermissions(PermissionName.ViewSchoolAnalytics)}\n analyticsWebUrl={config.data?.analyticsWebUrl}\n share={share.data}\n yearGroups={yearGroups.data}\n classroom={classroom.data}\n markingRequired={markingRequired}\n hasData={!!results.data?.students.length}\n viewInsightsGatedPermission={getGatedPermission(PermissionName.ViewInsights)}\n />\n\n <InteractiveInsightsOverview\n aggregateEngagement={aggregateEngagement.data}\n individualEngagement={engagement.data}\n interactive={interactive.data}\n interactiveMetadata={interactiveMetadata.data}\n interactiveInsightsAppLinks={interactiveInsightsAppLinks}\n classroomStudents={classroomStudents.items}\n results={results.data}\n osCount={osCount.data}\n config={config.data}\n anonymiseUsers={anonymiseUsers}\n hasDataLoaded={hasDataLoaded}\n share={share.data}\n />\n </div>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { groupStudents } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { ScoreThresholdInsights } from 'libs/shared/constants/ScoreThresholds';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\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 { Classroom, Config, CurrentUser, Interactive, InteractiveMetadata, YearGroup } from 'libs/shared/interfaces';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InteractiveInsightsQuestions } from 'apps/my-shares/components/interactive-insights-questions/InteractiveInsightsQuestions';\nimport { useHardGateInsights } from 'apps/my-shares/hooks/useHardGateInsights';\nimport { useInsightsInteractiveResults } from 'apps/my-shares/hooks/useInsightsInteractiveResults';\nimport { getInsightsInteractiveTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\n\nconst namespace = 'shared.interactiveInsightsQuestionsView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractiveInsightsQuestionsViewProps {\n shareId: string;\n interactionId: string;\n sortBy: SortStudentsBy;\n}\n\nexport function InteractiveInsightsQuestionsView(props: InteractiveInsightsQuestionsViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const { hasPermissions, getGatedPermission } = usePermissions();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(props.shareId));\n \n const classroomId = ShareHelper.getClassroomIdFromShare(share.data);\n const classroom = Flight.useBasicFetch<Classroom>(classroomId && ClassroomRequests.getClassroom(classroomId));\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n share.data?.objectId &&\n InteractiveRequests.interactiveMetadata(share.data?.objectId)\n );\n\n const interactive = Flight.useBasicFetch<Interactive>(interactiveMetadata.data?.interactiveId &&\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId));\n\n const results = useInsightsInteractiveResults(props.shareId);\n\n useSetPageMetadata({ title: interactiveMetadata.data ? getPhrase('pageTitle', { video: interactiveMetadata.data?.name }) : null });\n useHandleObjectError([ share, interactive, interactiveMetadata ]);\n useHardGateInsights(props.shareId);\n\n const hasDataLoaded = interactive.data && interactiveMetadata.data && !!results.data && !!yearGroups.data;\n \n const studentGroups = hasDataLoaded && groupStudents(interactive.data, results.data, ScoreThresholdInsights);\n const markingRequired = studentGroups && studentGroups.markingRequired.length > 0;\n\n return (\n <div className='px-3'>\n <InsightsHeader\n tabs={getInsightsInteractiveTabs(share.data, 'questions')}\n video={interactiveMetadata.data}\n hasSchoolAnalytics={hasPermissions(PermissionName.ViewSchoolAnalytics)}\n analyticsWebUrl={config.data?.analyticsWebUrl}\n share={share.data}\n yearGroups={yearGroups.data}\n classroom={classroom.data}\n markingRequired={markingRequired}\n hasData={!!results.data?.students.length}\n viewInsightsGatedPermission={getGatedPermission(PermissionName.ViewInsights)}\n />\n\n <InteractiveInsightsQuestions\n interactive={interactive.data}\n interactiveMetadata={interactiveMetadata.data}\n interactionId={props.interactionId}\n config={config.data}\n sortBy={props.sortBy}\n isFetching={!results.hasCompleted || interactive.isFetching}\n anonymiseUsers={anonymiseUsers}\n results={results.data}\n hasDataLoaded={hasDataLoaded}\n />\n </div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { groupStudents } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { FilterStudentsBy, SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { ScoreThresholdInsights } from 'libs/shared/constants/ScoreThresholds';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Classroom, Config, CurrentUser, Interactive, InteractiveMetadata, YearGroup } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InteractiveInsightsStudents } from 'apps/my-shares/components/interactive-insights-students/InteractiveInsightsStudents';\nimport { useHardGateInsights } from 'apps/my-shares/hooks/useHardGateInsights';\nimport { useInsightsInteractiveResults } from 'apps/my-shares/hooks/useInsightsInteractiveResults';\nimport { getInsightsInteractiveTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\n\nconst namespace = 'insights.interactiveInsightsStudents';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractiveInsightsStudentsViewProps {\n shareId: string;\n sortBy: SortStudentsBy;\n filterBy: FilterStudentsBy;\n}\n\nexport function InteractiveInsightsStudentsView(props: InteractiveInsightsStudentsViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n const [hideStaffResults] = useViewModel<boolean>(SharedViewModelKeys.HIDE_STAFF_RESULTS);\n\n const { hasPermissions, getGatedPermission } = usePermissions();\n \n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(props.shareId));\n \n const classroomId = ShareHelper.getClassroomIdFromShare(share.data);\n const classroom = Flight.useBasicFetch<Classroom>(classroomId && ClassroomRequests.getClassroom(classroomId));\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n share.data?.objectId &&\n InteractiveRequests.interactiveMetadata(share.data.objectId)\n );\n\n const interactive = Flight.useBasicFetch<Interactive>(interactiveMetadata.data?.interactiveId &&\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId));\n\n const results = useInsightsInteractiveResults(props.shareId);\n\n const hasDataLoaded = interactive.data && interactiveMetadata.data && !!results.data && !!yearGroups.data;\n\n const studentGroups = hasDataLoaded && groupStudents(interactive.data, results.data, ScoreThresholdInsights);\n const markingRequired = studentGroups && studentGroups.markingRequired.length > 0;\n\n useSetPageMetadata({ title: interactiveMetadata.data ? getPhrase('pageTitle', { video: interactiveMetadata.data?.name }) : null });\n useHandleObjectError([ share, interactive, interactiveMetadata ]);\n useHardGateInsights(props.shareId);\n\n function viewStudentResults(\n user: AnonUser,\n interactiveMetadataId: string,\n interactionId?: string\n ) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_STUDENT_RESULTS,\n params: {\n studentId: user.id,\n shareId: props.shareId,\n interactionId,\n sessionId: user.sessionId\n }\n });\n }\n\n return (\n <div className='px-3'>\n <InsightsHeader\n tabs={getInsightsInteractiveTabs(share.data, 'results')}\n video={interactiveMetadata.data}\n hasSchoolAnalytics={hasPermissions(PermissionName.ViewSchoolAnalytics)}\n analyticsWebUrl={config.data?.analyticsWebUrl}\n share={share.data}\n yearGroups={yearGroups.data}\n classroom={classroom.data}\n markingRequired={markingRequired}\n hasData={!!results.data?.students.length}\n viewInsightsGatedPermission={getGatedPermission(PermissionName.ViewInsights)}\n />\n\n <InteractiveInsightsStudents\n interactiveMetadata={interactiveMetadata.data}\n viewStudentResults={viewStudentResults}\n interactive={interactive.data}\n results={results.data}\n filterBy={props.filterBy}\n sortBy={props.sortBy}\n // Must be isFetching, not hasCompleted, as we need to refresh the table when the results are updated\n isFetching={results.isFetching}\n anonymiseUsers={anonymiseUsers}\n hasDataLoaded={hasDataLoaded}\n config={config.data}\n hideStaffResults={hideStaffResults}\n />\n </div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { InsightStudentList } from 'libs/shared/apps/analytics/components/insight-student-list/InsightStudentList';\nimport { PuzzleSvg } from 'libs/shared/images/svg/objects/PuzzleSvg';\nimport { User } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.insightStudentsNotWatched';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightStudentsNotWatchedProps {\n students: User[];\n imageCdnUrl: string;\n imageUrl: string;\n heatmapAppLink: Core.AppLink;\n watchedIds: string[];\n anonymiseUsers: boolean;\n}\n\nexport function InsightStudentsNotWatched(props: InsightStudentsNotWatchedProps) {\n const studentsNotWatched = props.students?.filter(student => !props.watchedIds?.includes(student.id)) || [];\n\n return (\n <InsightCard\n title={getPhrase('title')}\n svg={PuzzleSvg}\n svgClassName='bg-light-teal text-teal'\n >\n <InsightStudentList\n students={studentsNotWatched}\n imageCdnUrl={props.imageCdnUrl}\n imageUrl={props.imageUrl}\n description={getPhrase('studentsDisplay')}\n anonymiseUsers={props.anonymiseUsers}\n />\n </InsightCard>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { InsightStudentList } from 'libs/shared/apps/analytics/components/insight-student-list/InsightStudentList';\nimport { FlagSvg } from 'libs/shared/images/svg/objects/FlagSvg';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nconst namespace = 'shared.insightStudentsWatched';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightWatchedProps {\n students: AnonUser[];\n imageCdnUrl: string;\n heatmapAppLink: Core.AppLink;\n imageUrl: string;\n anonymiseUsers: boolean;\n}\n\nexport function InsightStudentsWatched(props: InsightWatchedProps) {\n return (\n <InsightCard\n title={getPhrase('title')}\n svg={FlagSvg}\n svgClassName='bg-light-indigo text-indigo'\n count={props.students.length}\n >\n <InsightStudentList\n students={props.students}\n imageCdnUrl={props.imageCdnUrl}\n imageUrl={props.imageUrl}\n description={getPhrase('studentsDisplay')}\n appLink={props.heatmapAppLink}\n appLinkText={getPhrase('viewAll')}\n anonymiseUsers={props.anonymiseUsers}\n />\n </InsightCard>\n );\n}\n",":local {\n .partialInsights {\n height: 12.5rem;\n }\n}","import React from 'react';\n\nimport styles from './partial-video-insights-overview.module.scss';\n\nexport function PartialVideoInsightsOverview() {\n return (\n <div>\n <h2 className='h4 w-25 partial-loading-background'>&nbsp;</h2>\n <div className='row g-3 mb-5'>\n <div className='col-12'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n </div>\n\n <h2 className='h4 w-25 partial-loading-background'>&nbsp;</h2>\n <div className='row g-3 mb-5'>\n <div className='col-6'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n <div className='col-6'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { InsightDevices } from 'libs/shared/apps/analytics/components/insights/devices/InsightDevices';\nimport { InsightHeatmap } from 'libs/shared/apps/analytics/components/insights/heatmap/InsightHeatmap';\nimport { InsightStudentsNotWatched } from 'libs/shared/apps/analytics/components/insights/students-not-watched/InsightStudentsNotWatched';\nimport { InsightStudentsWatched } from 'libs/shared/apps/analytics/components/insights/students-watched/InsightStudentsWatched';\nimport { GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { getEngagementRate } from 'libs/shared/apps/analytics/utils/EngagementUtils';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Config, Engagement, User, Video } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { InsightsShareMask } from 'apps/my-shares/components/insights-mask/InsightsShareMask';\nimport { PartialVideoInsightsOverview } from 'apps/my-shares/components/video-insights-overview/partial-loading/PartialVideoInsightsOverview';\n\nconst namespace = 'insights.videoInsightsOverview';\n\ninterface VideoInsightsOverviewProps {\n hasDataLoaded: boolean;\n hasClassrooms: boolean;\n anonymiseUsers: boolean;\n videoInsightsAppLinks: HashObject;\n config: Config;\n video: Video;\n classroomStudents: User[];\n viewers: AnonUser[];\n individualEngagement: Engagement[];\n aggregateEngagement: Engagement;\n share: Share;\n osCount: GroupedAnalyticsCount[];\n}\n\nexport function VideoInsightsOverview(props: VideoInsightsOverviewProps) {\n const hasData = props.hasDataLoaded && !!props.viewers?.length;\n\n function getStudentsList() {\n if (!props.viewers) return [];\n\n return Object.values(props.viewers);\n }\n\n return (\n <>\n {!props.hasDataLoaded && <PartialVideoInsightsOverview />}\n\n {props.hasDataLoaded &&\n <InsightsShareMask video={props.video} hasData={hasData} share={props.share}>\n <section className='mb-5'>\n <h2 className='h4'>\n <Text namespace={namespace} phrase='studentViewing' />\n <span>: {getStudentsList().length}{props.classroomStudents ? `/${props.classroomStudents.length}` : ''}</span>\n </h2>\n <div className='row g-3'>\n {!!props.classroomStudents?.length && (\n <div className='col-12 col-md'>\n <InsightStudentsNotWatched\n students={props.classroomStudents}\n watchedIds={props.viewers?.map(u => u.id)}\n imageCdnUrl={props.config.imageCdnUrl}\n heatmapAppLink={props.videoInsightsAppLinks.heatmapAppLink}\n imageUrl={ImageUrls.Insights.AVATAR}\n anonymiseUsers={props.anonymiseUsers}\n />\n </div>\n )}\n <div className='col-12 col-md'>\n <InsightStudentsWatched\n students={getStudentsList()}\n imageCdnUrl={props.config.imageCdnUrl}\n heatmapAppLink={props.videoInsightsAppLinks.heatmapAppLink}\n imageUrl={ImageUrls.Insights.AVATAR}\n anonymiseUsers={props.anonymiseUsers}\n />\n </div>\n </div>\n </section>\n <section className='mb-5'>\n <h2 className='h4'>\n <Text\n namespace={namespace}\n phrase={props.hasClassrooms ? 'classEngagement' : 'engagement'}\n />\n </h2>\n <div className='row g-3'>\n <div className='col-12 col-md-6'>\n <InsightDevices\n osCount={props.osCount}\n />\n </div>\n <div className='col-12 col-md-6'>\n <InsightHeatmap\n engagement={props.aggregateEngagement}\n heatmapAppLink={props.videoInsightsAppLinks.heatmapAppLink}\n engagementRate={getEngagementRate(props.individualEngagement)}\n />\n </div>\n </div>\n </section>\n </InsightsShareMask>\n }\n </>\n );\n}\n","import { HashObject } from 'libs/common/react/interfaces';\n\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\n\nimport { getInsightsHeatmapAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nexport function getVideoInsightsAppLinks(share: Share, params?: HashObject) {\n return {\n heatmapAppLink: getInsightsHeatmapAppLink(share, null, params)\n };\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { 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 { Classroom, Config, CurrentUser, Engagement, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { VideoViewsV2Requests } from 'shared/flight-requests/VideoViewsV2Requests';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { VideoInsightsOverview } from 'apps/my-shares/components/video-insights-overview/VideoInsightsOvervew';\nimport { useHardGateInsights } from 'apps/my-shares/hooks/useHardGateInsights';\nimport { useInsightEngagement } from 'apps/my-shares/hooks/useInsightEngagement';\nimport { useInsightsClassroomStudents } from 'apps/my-shares/hooks/useInsightsClassroomStudents';\nimport { getInsightsVideoTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\nimport { getVideoInsightsAppLinks } from 'apps/my-shares/views/video/overview/VideoInsightsOverviewUtils';\n\nconst namespace = 'insights.videoInsightsOverviewView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface VideoInsightsViewProps {\n shareId: string;\n}\n\nexport function VideoInsightsOverviewView(props: VideoInsightsViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const { hasClassrooms } = useSettings(null);\n\n const { hasPermissions, getGatedPermission } = usePermissions();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(props.shareId));\n\n const classroomId = ShareHelper.getClassroomIdFromShare(share.data);\n const classroom = Flight.useBasicFetch<Classroom>(classroomId && ClassroomRequests.getClassroom(classroomId));\n\n const classroomStudents = useInsightsClassroomStudents(props.shareId);\n\n const videoRequest = share.data && VideoHelper.getVideoRequest(share.data.objectId, share.data.objectTypeId);\n const video = Flight.useBasicFetch<VideoTypes>(videoRequest);\n\n useSetPageMetadata({ title: video.data ? getPhrase('pageTitle', { video: video.data?.name }) : null });\n useHandleObjectError([ share, video ]);\n useHardGateInsights(props.shareId);\n\n const engagement = Flight.useBasicFetch<Engagement[]>(\n VideoViewsV2Requests.shareHeatMap(props.shareId)\n );\n\n const aggregateEngagement = Flight.useBasicFetch<Engagement>(\n VideoViewsV2Requests.shareHeatMapAggregation(props.shareId)\n );\n\n const osCount = Flight.useBasicFetch<GroupedAnalyticsCount[]>(\n VideoViewsV2Requests.shareAggregation(props.shareId, 'os_name')\n );\n\n const { users, hasCompleted } = useInsightEngagement(props.shareId);\n \n const hasDataLoaded =\n config.hasCompleted &&\n video.hasCompleted &&\n engagement.hasCompleted &&\n aggregateEngagement.hasCompleted &&\n osCount.hasCompleted &&\n yearGroups.data &&\n hasCompleted;\n\n const videoInsightsAppLinks = getVideoInsightsAppLinks(share.data);\n\n return (\n <div className='px-3'>\n <InsightsHeader\n video={video.data}\n classroom={classroom.data}\n tabs={getInsightsVideoTabs(share.data, 'insights')}\n hasSchoolAnalytics={hasPermissions(PermissionName.ViewSchoolAnalytics)}\n analyticsWebUrl={config.data?.analyticsWebUrl}\n share={share.data}\n yearGroups={yearGroups.data}\n hasData={hasDataLoaded && !!users?.length}\n viewInsightsGatedPermission={getGatedPermission(PermissionName.ViewInsights)}\n />\n\n <VideoInsightsOverview\n hasDataLoaded={!!hasDataLoaded}\n hasClassrooms={hasClassrooms}\n anonymiseUsers={anonymiseUsers}\n videoInsightsAppLinks={videoInsightsAppLinks}\n config={config.data}\n video={video.data}\n classroomStudents={classroomStudents.items}\n viewers={users}\n individualEngagement={engagement.data}\n aggregateEngagement={aggregateEngagement.data}\n share={share.data}\n osCount={osCount.data}\n />\n </div>\n );\n}\n","import React from 'react';\n\nimport { FilterStudentsBy, SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { MasterType } from 'libs/shared/enums/MasterType';\n\nimport { InsightsTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\nimport { InsightsHeatmapView } from 'apps/my-shares/views/heatmap/InsightsHeatmapView';\nimport { InteractiveInsightsOverviewView } from 'apps/my-shares/views/interactive/overview/InteractiveInsightsOverviewView';\nimport { InteractiveInsightsQuestionsView } from 'apps/my-shares/views/interactive/questions/InteractiveInsightsQuestionsView';\nimport { InteractiveInsightsStudentsView } from 'apps/my-shares/views/interactive/students/InteractiveInsightsStudentsView';\nimport { VideoInsightsOverviewView } from 'apps/my-shares/views/video/overview/VideoInsightsOverviewView';\n\ninterface UseInsightsViewOptions {\n share: Share | undefined;\n tab: InsightsTabs;\n interactionId: string;\n sortBy: SortStudentsBy;\n filterBy: FilterStudentsBy;\n}\n\ntype ShareContext = Omit<UseInsightsViewOptions, 'tab'>;\ntype ViewFn = (ctx: ShareContext) => JSX.Element;\ntype ViewRegistry = Partial<Record<MasterType, Partial<Record<InsightsTabs, ViewFn>>>>;\n\nconst INSIGHTS_VIEWS: ViewRegistry = {\n [MasterType.Video]: {\n insights: ctx => <VideoInsightsOverviewView shareId={ctx.share.shareId} />,\n heatmap: ctx => <InsightsHeatmapView shareId={ctx.share.shareId} />\n },\n [MasterType.Clip]: {\n insights: ctx => <VideoInsightsOverviewView shareId={ctx.share.shareId} />,\n heatmap: ctx => <InsightsHeatmapView shareId={ctx.share.shareId} />\n },\n [MasterType.Interactive]: {\n insights: ctx => <InteractiveInsightsOverviewView shareId={ctx.share.shareId} />,\n heatmap: ctx => <InsightsHeatmapView shareId={ctx.share.shareId} />,\n questions: ctx => (\n <InteractiveInsightsQuestionsView\n interactionId={ctx.interactionId}\n sortBy={ctx.sortBy}\n shareId={ctx.share.shareId}\n />\n ),\n results: ctx => (\n <InteractiveInsightsStudentsView\n filterBy={ctx.filterBy}\n sortBy={ctx.sortBy}\n shareId={ctx.share.shareId}\n />\n )\n }\n};\n\n/**\n * Takes any Share object and a tab, and returns the corresponding \"insights\" view.\n * This is just a utility hook, and as such doesn't need to set the page title directly.\n */\n// eslint-disable-next-line rulesdir/require-view-title\nexport function useInsightsView(options: UseInsightsViewOptions): JSX.Element {\n const { share, tab } = options;\n const viewFn = INSIGHTS_VIEWS[share?.objectTypeId]?.[tab];\n\n if (viewFn)\n return viewFn(options);\n\n return <></>;\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\n\nimport { FilterStudentsBy, SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { getShareOptionsAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport { InsightsTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\nimport { useInsightsView } from 'apps/my-shares/views/base-insights-view/useInsightsView';\n\ninterface BaseInsightsViewProps {\n shareId: string;\n tab: InsightsTabs;\n interactionId: string;\n sortBy: SortStudentsBy;\n filterBy: FilterStudentsBy;\n showShareOptions?: boolean;\n}\n\n/**\n * BaseInsightsView is a generic component that renders different \"insights\" views based on the provided share.\n * The child views will handle setting the page title and other specific details.\n * \n * It also handles the logic for showing share options if `showShareOptions` is true - which is currently used\n * in our used in our LCE emails.\n */\n// eslint-disable-next-line rulesdir/require-view-title\nexport function BaseInsightsView(props: BaseInsightsViewProps): JSX.Element {\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(props.shareId));\n const { hasPermissions, isLoaded } = usePermissions();\n\n const view = useInsightsView({\n share: share.data,\n tab: props.tab,\n interactionId: props.interactionId,\n sortBy: props.sortBy,\n filterBy: props.filterBy\n });\n\n /**\n * If the showShareOptions is in the query params, we also want to show the share popup.\n */\n React.useEffect(() => {\n if (!props.showShareOptions) return;\n if (!share.data) return;\n\n const appLink = getShareOptionsAppLink(share.data);\n \n if (!appLink) return;\n\n Core.AppLinkHelper.trigger(appLink);\n }, [ share.data, props.showShareOptions ]);\n\n /**\n * If the user doesn't have insights permissions, redirect to the insights overview page.\n */\n React.useEffect(() => {\n if (!isLoaded) return;\n if (hasPermissions([ PermissionName.ViewInsights, PermissionName.ViewAnalytics ])) return;\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.HOME\n });\n }, [isLoaded]);\n \n if (!isLoaded)\n return <></>;\n\n return (\n <>\n {view}\n </>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{o as e}from"./DAXXjFlN.chunk.js";import{n as t,r as n,t as r}from"./D8uRDrkd.chunk.js";import{n as i}from"./B785hxeE.chunk.js";import{t as a}from"./CQyJ7YGa.chunk.js";import{t as o}from"./e57H3T-k.chunk.js";import{t as s}from"./C2w0pmFW.chunk.js";import{t as c}from"./wrLrTezN.chunk.js";import{t as l}from"./BXTI9cmX.chunk.js";import{u}from"./BX0wDJmp.chunk.js";import{t as d}from"./oPIkfKWW2.chunk.js";import{i as f,t as p}from"./CFPlcqbe2.chunk.js";import{t as m}from"./BDwjs8qz2.chunk.js";import{t as h}from"./CVHQXNzi2.chunk.js";import{t as g}from"./YakGe6vv2.chunk.js";import{t as _}from"./DdsRCMkN.chunk.js";import{t as v}from"./QCFxJYkI2.chunk.js";import{t as y}from"./Ci5E3nqm2.chunk.js";import{t as b}from"./BQKcAczf.chunk.js";import{t as x}from"./OmYpHs7g.chunk.js";import{t as S}from"./D3WOV5RE.chunk.js";import{n as C,t as w}from"./CpFtf-tI2.chunk.js";import{t as T}from"./DW51cSV_2.chunk.js";import{t as E}from"./-Plmz9lO.chunk.js";import{n as D,r as O}from"./BGswYbRT.chunk.js";import{n as k}from"./Dy3xpenS.chunk.js";import{t as A}from"./DGA_eT2h2.chunk.js";import{s as j,u as M}from"./DW4eUMeA.chunk.js";import{t as N}from"./C2pEjcxD.chunk.js";import{n as P,t as F}from"./DWeyYfUG.chunk.js";import{t as I}from"./pP_cpHCu2.chunk.js";import{a as L,i as R,n as z,r as B,t as V}from"./02GiL0bJ2.chunk.js";import{t as H}from"./BdPPslUL2.chunk.js";function U(e){let{hasPermissions:t}=b(),{hasProduct:n}=S(),r=u(d.currentUser());return!t(i.StudentExperience)&&n(v.Primary)&&r.data.isAuthenticated&&(!e||e.version===`v1`)}var W=e(s(),1),G=c(),K=`interactives.interactiveTitleAndActions`;function q(e){let t,n;return e._parentClip?(t=e._parentClip.name,n={application:l.CLIPS,action:_.Clips.PLAY_CLIP,args:[e._parentClip.id,o.slugify(e._parentClip.name)]}):(t=e._parentVideo.name,n={application:l.VIDEOS,action:_.Videos.PLAY_VIDEO,args:[null,e._parentVideo.id,o.slugify(e._parentVideo.name)]}),[t,n]}function J(e){let{hasPermissions:t}=b(),n=P({location:e.location,shareId:e.shareId,presentationSlug:null}),r=t(i.StudentExperience),a=e.interactive.status===m.Draft,[o,s]=q(e.interactive);return(0,G.jsx)(w.Provider,{value:K,children:(0,G.jsx)(`div`,{className:`d-flex justify-content-between align-items-center`,children:(0,G.jsxs)(`div`,{className:`inline-block w-100`,children:[(0,G.jsx)(`div`,{className:`ms-2 float-end`,children:!r&&(0,G.jsx)(A,{actions:n.getVideoActions(e.interactive),actionsDropdownClassName:`btn btn-outline-dark`,fetchMore:()=>n.fetchMoreActions(e.interactive)})}),(0,G.jsxs)(`h1`,{className:`h3 mb-2`,children:[a&&(0,G.jsx)(`div`,{className:`badge draft-badge me-2 align-bottom flex-shrink-0 h-auto lh-base`,children:(0,G.jsx)(C,{phrase:`draft`})}),e.interactive.name,!r&&(0,G.jsx)(j,{tooltipPlacement:`right`,className:`ps-1 d-inline-block`,video:e.interactive,yearGroups:e.commonVideoProps.yearGroups})]}),g.canViewOriginalVideo(e.interactive)&&(0,G.jsxs)(`div`,{className:`mb-1 me-3 clamp-1`,children:[(0,G.jsx)(C,{phrase:`viewOriginal`}),`\xA0`,(0,G.jsx)(y,{appLink:s,className:`text-info`,children:o})]})]})})})}function Y(e){let[t,n]=W.useState(!0),r=g.isVideoTypeArchived(e.interactive),a=W.useMemo(()=>O(),[]),{hasPermissions:o}=b();function s(e){n(!e)}return(0,G.jsxs)(`div`,{className:`px-3`,children:[r&&(0,G.jsx)(L,{typeId:e.interactive.typeId,hasStudentExperience:!0}),(0,G.jsx)(`div`,{className:`mb-3`,children:(0,G.jsx)(x,{config:e.config,video:e.interactive,currentUser:e.currentUser,shareLink:e.shareLink,viewKey:e.viewKey,startTime:e.startTime,presentationSlug:null,context:e.queryParams?.context,contextId:e.queryParams?.contextId,playNext:e.queryParams?.playNext,mode:`default`,relatedVideos:e.relatedVideos?.videos,onShowSummary:s,summaryPortalNode:a,token:e.token,collectAnonResults:e.collectAnonResults})}),(0,G.jsx)(`div`,{children:t&&(0,G.jsx)(J,{interactive:e.interactive,location:F.PlayPage,commonVideoProps:e.commonVideoProps,shareId:e.shareLink?.id})}),(0,G.jsx)(D,{node:a}),!o(i.StudentExperience)&&(0,G.jsx)(R,{presentationSlug:null,currentVideo:e.interactive,currentUser:e.currentUser,relatedVideos:e.relatedVideos,audiences:e.audiences,getVideoAppLink:(t,n)=>T.getAppLink(t,{...n,context:e.queryParams.context,contextId:e.queryParams.contextId,playNext:e.queryParams.playNext,shareId:e.shareLink?.id,moviesAndTv:e.queryParams.mtv,includeContext:e.currentUser?.isAuthenticated},null),moviesAndTv:e.queryParams.mtv,commonVideoProps:e.commonVideoProps})]})}var X=a.encloseNamespace(`interactives.previewInteractive`);function Z(e){return(0,G.jsxs)(`div`,{className:`alert text-dark bg-light-blue px-2 rounded d-flex flex-column flex-lg-row justify-content-between mb-3 align-items-center`,role:`alert`,children:[e.isArchived?(0,G.jsxs)(`div`,{className:`d-flex align-items-center`,children:[(0,G.jsx)(r,{svg:I,size:t.Standard,className:`me-2 svg-container`}),(0,G.jsxs)(`div`,{className:`w-100`,children:[(0,G.jsx)(`p`,{className:`fw-semibold mb-0`,children:X(`archivedInfoTitle`)}),(0,G.jsx)(`p`,{className:`mb-1`,children:X(`archivedInfo`)})]})]}):(0,G.jsx)(C,{phrase:`alert`}),e.isPreviewPreventScrubbingEnabled&&(0,G.jsx)(n,{title:X(`previewPreventScrubbingExplain`),trigger:[`hover`,`focus`],spanHack:!0,children:(0,G.jsxs)(`div`,{className:`d-flex mt-1 mt-lg-0`,children:[(0,G.jsx)(`div`,{className:`me-2`,children:(0,G.jsx)(C,{phrase:`previewPreventScrubbing`})}),(0,G.jsx)(E,{on:e.isPreviewingPreventScrubbing,onClick:e.toggleStudentMode})]})})]})}function Q(e,t){W.useEffect(()=>{t()},[e])}var $=`interactives.previewInteractive`,ee=a.encloseNamespace($);function te(e){let t=k(),[n,r]=W.useState(!1),{canConsume:i}=g.getCanBeConsumed(e.interactive);Q(n,a);function a(){t.playerRef?.current?.togglePreviewPreventScrubbing?.()}function s(){r(!n)}let c=e.interactives?.filter(t=>t.id.toString()!==e.interactive.id.toString());return(0,G.jsx)(w.Provider,{value:$,children:(0,G.jsxs)(`div`,{className:`px-4`,children:[!!e.breadcrumbs?.length&&(0,G.jsx)(`div`,{className:`mb-2`,children:(0,G.jsx)(N,{breadcrumbs:e.breadcrumbs})}),(0,G.jsx)(V,{restrictions:e.interactive._restrictions,yearGroups:e.commonVideoProps.yearGroups,objectId:e.interactive.id,objectTypeId:h.Interactive,canManageVideoAccess:e.canManageVideoAccess}),(0,G.jsx)(Z,{isPreviewPreventScrubbingEnabled:e.isPreviewPreventScrubbingEnabled,isPreviewingPreventScrubbing:n,toggleStudentMode:s,isArchived:g.isVideoTypeArchived(e.interactive)}),(0,G.jsx)(`div`,{className:`mb-3`,children:i&&(0,G.jsx)(M,{objectId:e.interactive.id,objectTypeId:e.interactive.typeId,shareId:e.shareId,startTime:e.queryParams.t??e.queryParams.startTime,context:e.queryParams?.context,contextId:e.queryParams?.contextId,playNext:e.queryParams?.playNext,mode:`default`,location:`play-page`,token:e.token},e.interactive.id)}),(0,G.jsx)(J,{interactive:e.interactive,location:F.PlayPage,shareId:e.shareId,commonVideoProps:e.commonVideoProps}),e.interactive.description&&(0,G.jsx)(H,{lines:5,children:()=>(0,G.jsx)(`p`,{className:`mb-0 d-inline`,children:e.interactive.description})}),(0,G.jsx)(`div`,{className:`mb-3`,children:(0,G.jsx)(D,{node:t.questionListPortalNode})}),!!c?.length&&(0,G.jsx)(`div`,{className:`pb-3`,children:(0,G.jsx)(p,{name:ee(`otherInteractives`,{count:c.length}),contents:f.Interactives,collection:c,prefetched:!0,getChildAppLink:e=>({application:l.INTERACTIVES,action:_.Interactives.VIEW_INTERACTIVE,args:[e.id,o.slugify(e.name)]}),childComponent:B,extraChildComponentProps:{questionsAppLink:{application:l.INTERACTIVES,action:_.Interactives.PREVIEW_QUESTIONS},commonVideoProps:e.commonVideoProps},analyticsData:{widgetId:`interactives`}})}),!g.isUgc(e.interactive)&&(0,G.jsx)(z,{media:e.interactive,parentVideo:e.interactive._parentClip||e.interactive._parentVideo,contentRegion:e.currentUser.contentRegion,shareId:e.shareId,presentationSlug:null}),(0,G.jsx)(R,{presentationSlug:null,currentVideo:e.interactive,currentUser:e.currentUser,audiences:e.audiences,relatedVideos:e.relatedVideos,getVideoAppLink:(t,n)=>T.getAppLink(t,{...n,context:e.queryParams.context,contextId:e.queryParams.contextId,playNext:e.queryParams.playNext,shareId:e.shareId,moviesAndTv:e.queryParams.mtv,includeContext:e.currentUser?.isAuthenticated},null),moviesAndTv:e.queryParams.mtv,commonVideoProps:e.commonVideoProps})]})})}export{Y as n,U as r,te as t};
2
- //# sourceMappingURL=_wBbQ-0z2.chunk.js.map
1
+ import{o as e}from"./DAXXjFlN.chunk.js";import{n as t,r as n,t as r}from"./D8uRDrkd.chunk.js";import{n as i}from"./B785hxeE.chunk.js";import{t as a}from"./CQyJ7YGa.chunk.js";import{t as o}from"./e57H3T-k.chunk.js";import{t as s}from"./C2w0pmFW.chunk.js";import{t as c}from"./wrLrTezN.chunk.js";import{t as l}from"./BXTI9cmX.chunk.js";import{u}from"./BX0wDJmp.chunk.js";import{t as d}from"./oPIkfKWW2.chunk.js";import{i as f,t as p}from"./CFPlcqbe2.chunk.js";import{t as m}from"./BDwjs8qz2.chunk.js";import{t as h}from"./CVHQXNzi2.chunk.js";import{t as g}from"./YakGe6vv2.chunk.js";import{t as _}from"./DdsRCMkN.chunk.js";import{t as v}from"./QCFxJYkI2.chunk.js";import{t as y}from"./Ci5E3nqm2.chunk.js";import{t as b}from"./BQKcAczf.chunk.js";import{t as x}from"./_Cm5O72d.chunk.js";import{t as S}from"./D3WOV5RE.chunk.js";import{n as C,t as w}from"./CpFtf-tI2.chunk.js";import{t as T}from"./DW51cSV_2.chunk.js";import{t as E}from"./-Plmz9lO.chunk.js";import{n as D,r as O}from"./BGswYbRT.chunk.js";import{n as k}from"./Dy3xpenS.chunk.js";import{t as A}from"./DGA_eT2h2.chunk.js";import{s as j,u as M}from"./DW4eUMeA.chunk.js";import{t as N}from"./C2pEjcxD.chunk.js";import{n as P,t as F}from"./DWeyYfUG.chunk.js";import{t as I}from"./pP_cpHCu2.chunk.js";import{a as L,i as R,n as z,r as B,t as V}from"./02GiL0bJ2.chunk.js";import{t as H}from"./BdPPslUL2.chunk.js";function U(e){let{hasPermissions:t}=b(),{hasProduct:n}=S(),r=u(d.currentUser());return!t(i.StudentExperience)&&n(v.Primary)&&r.data.isAuthenticated&&(!e||e.version===`v1`)}var W=e(s(),1),G=c(),K=`interactives.interactiveTitleAndActions`;function q(e){let t,n;return e._parentClip?(t=e._parentClip.name,n={application:l.CLIPS,action:_.Clips.PLAY_CLIP,args:[e._parentClip.id,o.slugify(e._parentClip.name)]}):(t=e._parentVideo.name,n={application:l.VIDEOS,action:_.Videos.PLAY_VIDEO,args:[null,e._parentVideo.id,o.slugify(e._parentVideo.name)]}),[t,n]}function J(e){let{hasPermissions:t}=b(),n=P({location:e.location,shareId:e.shareId,presentationSlug:null}),r=t(i.StudentExperience),a=e.interactive.status===m.Draft,[o,s]=q(e.interactive);return(0,G.jsx)(w.Provider,{value:K,children:(0,G.jsx)(`div`,{className:`d-flex justify-content-between align-items-center`,children:(0,G.jsxs)(`div`,{className:`inline-block w-100`,children:[(0,G.jsx)(`div`,{className:`ms-2 float-end`,children:!r&&(0,G.jsx)(A,{actions:n.getVideoActions(e.interactive),actionsDropdownClassName:`btn btn-outline-dark`,fetchMore:()=>n.fetchMoreActions(e.interactive)})}),(0,G.jsxs)(`h1`,{className:`h3 mb-2`,children:[a&&(0,G.jsx)(`div`,{className:`badge draft-badge me-2 align-bottom flex-shrink-0 h-auto lh-base`,children:(0,G.jsx)(C,{phrase:`draft`})}),e.interactive.name,!r&&(0,G.jsx)(j,{tooltipPlacement:`right`,className:`ps-1 d-inline-block`,video:e.interactive,yearGroups:e.commonVideoProps.yearGroups})]}),g.canViewOriginalVideo(e.interactive)&&(0,G.jsxs)(`div`,{className:`mb-1 me-3 clamp-1`,children:[(0,G.jsx)(C,{phrase:`viewOriginal`}),`\xA0`,(0,G.jsx)(y,{appLink:s,className:`text-info`,children:o})]})]})})})}function Y(e){let[t,n]=W.useState(!0),r=g.isVideoTypeArchived(e.interactive),a=W.useMemo(()=>O(),[]),{hasPermissions:o}=b();function s(e){n(!e)}return(0,G.jsxs)(`div`,{className:`px-3`,children:[r&&(0,G.jsx)(L,{typeId:e.interactive.typeId,hasStudentExperience:!0}),(0,G.jsx)(`div`,{className:`mb-3`,children:(0,G.jsx)(x,{config:e.config,video:e.interactive,currentUser:e.currentUser,shareLink:e.shareLink,viewKey:e.viewKey,startTime:e.startTime,presentationSlug:null,context:e.queryParams?.context,contextId:e.queryParams?.contextId,playNext:e.queryParams?.playNext,mode:`default`,relatedVideos:e.relatedVideos?.videos,onShowSummary:s,summaryPortalNode:a,token:e.token,collectAnonResults:e.collectAnonResults})}),(0,G.jsx)(`div`,{children:t&&(0,G.jsx)(J,{interactive:e.interactive,location:F.PlayPage,commonVideoProps:e.commonVideoProps,shareId:e.shareLink?.id})}),(0,G.jsx)(D,{node:a}),!o(i.StudentExperience)&&(0,G.jsx)(R,{presentationSlug:null,currentVideo:e.interactive,currentUser:e.currentUser,relatedVideos:e.relatedVideos,audiences:e.audiences,getVideoAppLink:(t,n)=>T.getAppLink(t,{...n,context:e.queryParams.context,contextId:e.queryParams.contextId,playNext:e.queryParams.playNext,shareId:e.shareLink?.id,moviesAndTv:e.queryParams.mtv,includeContext:e.currentUser?.isAuthenticated},null),moviesAndTv:e.queryParams.mtv,commonVideoProps:e.commonVideoProps})]})}var X=a.encloseNamespace(`interactives.previewInteractive`);function Z(e){return(0,G.jsxs)(`div`,{className:`alert text-dark bg-light-blue px-2 rounded d-flex flex-column flex-lg-row justify-content-between mb-3 align-items-center`,role:`alert`,children:[e.isArchived?(0,G.jsxs)(`div`,{className:`d-flex align-items-center`,children:[(0,G.jsx)(r,{svg:I,size:t.Standard,className:`me-2 svg-container`}),(0,G.jsxs)(`div`,{className:`w-100`,children:[(0,G.jsx)(`p`,{className:`fw-semibold mb-0`,children:X(`archivedInfoTitle`)}),(0,G.jsx)(`p`,{className:`mb-1`,children:X(`archivedInfo`)})]})]}):(0,G.jsx)(C,{phrase:`alert`}),e.isPreviewPreventScrubbingEnabled&&(0,G.jsx)(n,{title:X(`previewPreventScrubbingExplain`),trigger:[`hover`,`focus`],spanHack:!0,children:(0,G.jsxs)(`div`,{className:`d-flex mt-1 mt-lg-0`,children:[(0,G.jsx)(`div`,{className:`me-2`,children:(0,G.jsx)(C,{phrase:`previewPreventScrubbing`})}),(0,G.jsx)(E,{on:e.isPreviewingPreventScrubbing,onClick:e.toggleStudentMode})]})})]})}function Q(e,t){W.useEffect(()=>{t()},[e])}var $=`interactives.previewInteractive`,ee=a.encloseNamespace($);function te(e){let t=k(),[n,r]=W.useState(!1),{canConsume:i}=g.getCanBeConsumed(e.interactive);Q(n,a);function a(){t.playerRef?.current?.togglePreviewPreventScrubbing?.()}function s(){r(!n)}let c=e.interactives?.filter(t=>t.id.toString()!==e.interactive.id.toString());return(0,G.jsx)(w.Provider,{value:$,children:(0,G.jsxs)(`div`,{className:`px-4`,children:[!!e.breadcrumbs?.length&&(0,G.jsx)(`div`,{className:`mb-2`,children:(0,G.jsx)(N,{breadcrumbs:e.breadcrumbs})}),(0,G.jsx)(V,{restrictions:e.interactive._restrictions,yearGroups:e.commonVideoProps.yearGroups,objectId:e.interactive.id,objectTypeId:h.Interactive,canManageVideoAccess:e.canManageVideoAccess}),(0,G.jsx)(Z,{isPreviewPreventScrubbingEnabled:e.isPreviewPreventScrubbingEnabled,isPreviewingPreventScrubbing:n,toggleStudentMode:s,isArchived:g.isVideoTypeArchived(e.interactive)}),(0,G.jsx)(`div`,{className:`mb-3`,children:i&&(0,G.jsx)(M,{objectId:e.interactive.id,objectTypeId:e.interactive.typeId,shareId:e.shareId,startTime:e.queryParams.t??e.queryParams.startTime,context:e.queryParams?.context,contextId:e.queryParams?.contextId,playNext:e.queryParams?.playNext,mode:`default`,location:`play-page`,token:e.token},e.interactive.id)}),(0,G.jsx)(J,{interactive:e.interactive,location:F.PlayPage,shareId:e.shareId,commonVideoProps:e.commonVideoProps}),e.interactive.description&&(0,G.jsx)(H,{lines:5,children:()=>(0,G.jsx)(`p`,{className:`mb-0 d-inline`,children:e.interactive.description})}),(0,G.jsx)(`div`,{className:`mb-3`,children:(0,G.jsx)(D,{node:t.questionListPortalNode})}),!!c?.length&&(0,G.jsx)(`div`,{className:`pb-3`,children:(0,G.jsx)(p,{name:ee(`otherInteractives`,{count:c.length}),contents:f.Interactives,collection:c,prefetched:!0,getChildAppLink:e=>({application:l.INTERACTIVES,action:_.Interactives.VIEW_INTERACTIVE,args:[e.id,o.slugify(e.name)]}),childComponent:B,extraChildComponentProps:{questionsAppLink:{application:l.INTERACTIVES,action:_.Interactives.PREVIEW_QUESTIONS},commonVideoProps:e.commonVideoProps},analyticsData:{widgetId:`interactives`}})}),!g.isUgc(e.interactive)&&(0,G.jsx)(z,{media:e.interactive,parentVideo:e.interactive._parentClip||e.interactive._parentVideo,contentRegion:e.currentUser.contentRegion,shareId:e.shareId,presentationSlug:null}),(0,G.jsx)(R,{presentationSlug:null,currentVideo:e.interactive,currentUser:e.currentUser,audiences:e.audiences,relatedVideos:e.relatedVideos,getVideoAppLink:(t,n)=>T.getAppLink(t,{...n,context:e.queryParams.context,contextId:e.queryParams.contextId,playNext:e.queryParams.playNext,shareId:e.shareId,moviesAndTv:e.queryParams.mtv,includeContext:e.currentUser?.isAuthenticated},null),moviesAndTv:e.queryParams.mtv,commonVideoProps:e.commonVideoProps})]})})}export{Y as n,U as r,te as t};
2
+ //# sourceMappingURL=BBndy2td2.chunk.js.map